diff -Naur ns-3.18.1/AUTHORS ns-3.19/AUTHORS
--- ns-3.18.1/AUTHORS	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/AUTHORS	2013-12-20 09:44:50.000000000 -0800
@@ -54,10 +54,13 @@
 Blake Hurd (naimorai@gmail.com)
 ishan (ishan.chhabra@gmail.com)
 Mohamed Amine Ismail (amine.ismail@inria.fr, iamine@udcast.com)
+Jared Ivey (j.ivey@gatech.edu)
 Atishay Jain (atishayjain25@gmail.com)
 Sascha Alexander Jopen (jopen@informatik.uni-bonn.de)
 Sam Jansen (sam.jansen@gmail.com)
 Liu Jian (liujatp@gmail.com)
+Piotr Jurkiewicz (piotr.jerzy.jurkiewicz@gmail.com)
+Evgeny Kalishenko (ydginster@gmail.com)
 Konstantinos Katsaros <dinos.katsaros@gmail.com>
 Joe Kopena (tjkopena@cs.drexel.edu)
 Flavio Kobuta (flaviokubota@gmail.com)
@@ -81,6 +84,7 @@
 Faker Moatamri (faker.moatamri@inria.fr)
 Edvin MoÄ�ibob <edvin.mocibob@gmail.com>
 Mike Moreton (mjvm_ns@hotmail.com)
+Michele Muccio <michelemuccio@virgilio.it>
 Sidharth Nabar (snabar@uw.edu)
 Hemanth Narra (hemanth@ittc.ku.edu)
 Andreas Nilsson <andrnils@gmail.com>
diff -Naur ns-3.18.1/bindings/python/ns3modulegen_core_customizations.py ns-3.19/bindings/python/ns3modulegen_core_customizations.py
--- ns-3.18.1/bindings/python/ns3modulegen_core_customizations.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/bindings/python/ns3modulegen_core_customizations.py	2013-12-20 09:44:50.000000000 -0800
@@ -5,6 +5,7 @@
 from pybindgen.cppmethod import CustomCppMethodWrapper, CustomCppConstructorWrapper
 from pybindgen.typehandlers.codesink import MemoryCodeSink
 from pybindgen.typehandlers import ctypeparser
+from pybindgen.typehandlers.base import ForwardWrapperBase
 from pybindgen import cppclass
 import warnings
 
@@ -425,11 +426,24 @@
     add_std_ios_openmode(module)
 
 
-def add_std_ios_openmode(module):
-    import pybindgen.typehandlers.base
-    for alias in "std::_Ios_Openmode", "std::ios::openmode":
-        pybindgen.typehandlers.base.param_type_matcher.add_type_alias(alias, "int")
+class IosOpenmodeParam(Parameter):
+
+    DIRECTIONS = [Parameter.DIRECTION_IN]
+    CTYPES = ['std::ios::openmode', 'std::_Ios_Openmode']
 
+    def convert_c_to_python(self, wrapper):
+        assert isinstance(wrapper, ReverseWrapperBase)
+        wrapper.build_params.add_parameter('i', [self.value])
+
+    def convert_python_to_c(self, wrapper):
+        assert isinstance(wrapper, ForwardWrapperBase)
+        name = wrapper.declarations.declare_variable("std::ios::openmode", self.name, self.default_value)
+        wrapper.parse_params.add_parameter('i', ['&'+name], self.name, optional=bool(self.default_value))
+        wrapper.call_params.append(name)
+
+
+
+def add_std_ios_openmode(module):
     for flag in 'in', 'out', 'ate', 'app', 'trunc', 'binary':
         module.after_init.write_code('PyModule_AddIntConstant(m, (char *) "STD_IOS_%s", std::ios::%s);'
                                      % (flag.upper(), flag))
diff -Naur ns-3.18.1/bindings/python/wscript ns-3.19/bindings/python/wscript
--- ns-3.18.1/bindings/python/wscript	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/bindings/python/wscript	2013-12-20 09:44:50.000000000 -0800
@@ -16,7 +16,7 @@
 REQUIRED_PYBINDGEN_VERSION = (0, 16, 0, 834)
 REQUIRED_PYGCCXML_VERSION = (0, 9, 5)
 
-
+RUN_ME=-3
 
 def add_to_python_path(path):
     if os.environ.get('PYTHONPATH', ''):
@@ -370,7 +370,7 @@
         # the build has not changed.  We want this task to always run if
         # invoked by the user, particularly since --apiscan=all will require
         # invoking this task many times, once per module.
-        return Task.RUN_ME
+        return RUN_ME
 
 def get_modules_and_headers(bld):
     """
diff -Naur ns-3.18.1/CHANGES.html ns-3.19/CHANGES.html
--- ns-3.18.1/CHANGES.html	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/CHANGES.html	2013-12-20 09:44:50.000000000 -0800
@@ -51,6 +51,118 @@
 us a note on ns-developers mailing list.</p>
 
 <hr>
+<h1>Changes from ns-3.18.1 to ns-3.19</h1>
+
+<h2>New API:</h2>
+<ul>
+  <li> A new wifi extension for vehicular simulation support is available in the
+    src/wave directory.  The current code represents an interim capability to 
+    realize an IEEE 802.11p-compliant device, but without the WAVE extensions 
+    (which are planned for a later patch).  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.  WAVE 
+    capabililties of switching between control and service channels, or using 
+    multiple radios, are not yet modelled.
+  </li>
+  <li>New SixLowPanNetDevice class providing a shim between 
+    IPv6 and real NetDevices. The new module implements 6LoWPAN:
+    "Transmission of IPv6 Packets over IEEE 802.15.4 Networks" (see
+    <a href="http://www.ietf.org/rfc/rfc4944.txt">RFC 4944</a> and
+    <a href="http://www.ietf.org/rfc/rfc6262.txt">RFC 6262</a>), 
+    resulting in a heavy header compression for IPv6 packets.
+    The module is intended to be used on 802.15.4 NetDevices, but
+    it can be used over other NetDevices. See the manual for
+    further discussion.
+  </li>
+  <li> LteHelper has been updated with some new APIs:
+    <ul>
+      <li>new overloaded Attach methods to enable UE to automatically determine
+          the eNodeB to attach to (using initial cell selection);</li>
+      <li>new methods related to handover algorithm: SetHandoverAlgorithmType
+          and SetHandoverAlgorithmAttribute;</li>
+      <li>a new attribute AnrEnabled to activate/deactivate Automatic Neighbour
+          Relation (ANR) function; and</li>
+      <li>a new method SetUeDeviceAttribute for configuring LteUeNetDevice.</li>
+    </ul>
+  </li>
+  <li> The GSoC 2013 project in the LTE module has brought some additional APIs:
+    <ul>
+      <li>a new abstract class LteHandoverAlgorithm, which every future
+          implementation of automatic handover trigger should inherit from;</li>
+      <li>new classes LteHandoverAlgorithm and LteAnr as sub-modules of
+          LteEnbNetDevice class; both interfacing with the LteEnbRrc sub-module
+          through Handover Management SAP and ANR SAP;</li>
+      <li>new attributes in LteEnbNetDevice and LteUeNetDevice classes related
+          to Closed Subscriber Group (CSG) functionality in initial cell
+          selection;</li>
+      <li>new attributes in LteEnbRrc for configuring UE measurements' filtering
+          coefficient (i.e., quantity configuration);</li>
+      <li>a new public method AddUeMeasReportConfig in LteEnbRrc for setting up
+          custom UE measurements' reporting configuration; measurement reports
+          can then be captured from the RecvMeasurementReport trace source;
+          and</li>
+      <li>new trace sources in LteUeRrc to capture more events, such as System
+          Information messages (MIB, SIB1, SIB2), initial cell selection, random
+          access, and handover.</li>
+    </ul>
+  </li>
+  <li>A new parallel scheduling algorithm based on null messages, a common 
+  parallel DES scheduling algorithm, has been added.  The null message 
+  scheduler has better scaling properties when running on some scenarios
+  with large numbers of nodes since it does not require a global 
+  communication.
+  </li>
+</ul>
+
+<h2>Changes to existing API:</h2>
+<ul>
+    <li> It is now possible to use Ipv6PacketInfoTag from UDP applications in the
+      same way as with Ipv4PacketInfoTag. See Doxygen for current limitations in
+  	  using Ipv[4,6]PacketInfoTag to set IP properties.</li>
+    <li>A change is introduced for the usage of the EpcHelper
+      class. Previously, the EpcHelper class included both the API
+      definition and its (only) implementation; as such, users would
+      instantiate and use the EpcHelper class directly in their
+      simulation programs. From now on,
+      EpcHelper is just the base class defining the API, and the
+      implementation has been moved to derived classes; as such,
+      users are now expected to use one of the derived classes in
+      their simulation program. The implementation previously
+      provided by the EpcHelper class has been moved to the new
+      derived class PointToPointEpcHelper.</li>
+  <li> The automatic handover trigger and ANR functions in LTE module have been
+    moved from LteEnbRrc class to separate classes. As a result, the related
+    attributes, e.g., ServingCellHandoverThreshold, NeighbourCellHandoverOffset,
+    EventA2Threshold, and EventA4Threshold have been removed from LteEnbRrc
+    class. The equivalent attributes are now in A2A4RsrqHandoverAlgorithm and
+    LteAnr classes.</li>
+  <li> Master Information Block (MIB) and System Information Block Type 1 (SIB1)
+    are now transmitted as LTE control messages, so they are no longer part of
+    RRC protocol.</li>
+  <li> UE RRC state model in LTE module has been considerably modified and is
+    not backward compatible with the previous state model.</li>
+  <li> Additional time units (Year, Day, Hour, Minute) were added to the time
+  value class that represents simulation time; the largest unit prior to 
+  this addition was Second.
+  </li>
+</ul>
+
+<h2>Changes to build system:</h2>
+
+<h2>Changed behavior:</h2>
+<ul>
+  <li> For the TapBridge device, in UseLocal mode there is a MAC learning function. TapBridge has been waiting for the first packet received from tap interface to set the address of the bridged device to the source address of the first packet. This has caused problems with WiFi.  The new behavior is that after connection to the tap interface, ns-3 learns the MAC address of that interface with a system call and immediately sets the address of the bridged device to the learned one.  See <a href="https://www.nsnam.org/bugzilla/show_bug.cgi?id=1777">bug 1777</a> for more details.</li>
+  <li> TapBridge device now correctly implements IsLinkUp() method.</li>
+  <li> IPv6 addresses and routing tables are printed like in Linux "route -A inet6" command.</li>
+  <li> A change in Ipv[4,6]Interface enforces the correct behaviour of IP 
+    when a device do not support the minimum MTU requirements.
+    This is set to 68 and 1280 octects respectively.  IP simulations that
+    may have run over devices with smaller MTUs than 68 or 1280, respectively,
+    will no longer be able to use such devices.</li>
+</ul>
+
+<hr>
 <h1>Changes from ns-3.18 to ns-3.18.1</h1>
 <h2>New API:</h2>
 <ul>
diff -Naur ns-3.18.1/doc/doxygen.conf ns-3.19/doc/doxygen.conf
--- ns-3.18.1/doc/doxygen.conf	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/doc/doxygen.conf	2013-12-20 09:44:50.000000000 -0800
@@ -151,7 +151,7 @@
 # comments will behave just like regular Qt-style comments
 # (thus requiring an explicit @brief command for a brief description.)
 
-JAVADOC_AUTOBRIEF      = 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
@@ -159,7 +159,7 @@
 # will behave just like regular Qt-style comments (thus requiring
 # an explicit \brief command for a brief description.)
 
-QT_AUTOBRIEF           = 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 ///
diff -Naur ns-3.18.1/doc/doxygen.warnings.report.sh ns-3.19/doc/doxygen.warnings.report.sh
--- ns-3.18.1/doc/doxygen.warnings.report.sh	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/doc/doxygen.warnings.report.sh	2013-12-20 09:44:50.000000000 -0800
@@ -1,62 +1,221 @@
 #!/bin/bash
 
-# Process doxygen.warnings.log to generate sorted list of top offenders
-
-# Flag to skip the build and running doxygen, and just analyze the log
-skipdoxy=${1:-""}
-
-DIR=`dirname $0`
-ROOT=`hg root`
-# Final resting place for the log file
-log=$DIR/doxygen.warnings.log
+# Process doxygen log to generate sorted list of top offenders.
+#
 
+me=$(basename $0)
+DIR="$(dirname $0)"
+ROOT="$(hg root)"
+
+# Known log files
+STANDARDLOGFILE=doxygen.log
+WARNINGSLOGFILE=doxygen.warnings.log
+# Default choice:  generate it
+LOG="$DIR/$WARNINGSLOGFILE"
+
+
+# Options ------------------------------
+#
+
+function usage
+{
+    cat <<-EOF
+	
+	Usage: $me [-eth] [-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.
+	
+	-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> 
+
+	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
+	    
+EOF
+    exit 1
+}
+
+# Argument processing ------------------
+#
+
+# -f argument
+usefilearg=0
+logfilearg=
+# -l
+usestandard=0
+# skip doxygen run; using existing log file
+SKIPDOXY=0
+
+# Filtering flags
+filter_examples=0
+filter_test=0
+filter_module=""
+filter_regex=""
+
+while getopts :etm:F:lF:sh option ; do
+
+    case $option in
+	
+	(e)  filter_examples=1        ;;
+	
+	(t)  filter_test=1            ;;
+
+	(m)  filter_module="$OPTARG"  ;;
+
+	(F)  filter_regex="$OPTARG"   ;;
+
+	(l)  usestandard=1            ;;
+
+	(f)  usefilearg=1
+	     logfilearg="$OPTARG"
+	     ;;
+
+	(s)  usefilearg=1
+	     logfilearg="$DIR/$WARNINGSLOGFILE"
+	     ;;
+
+	(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
+	LOG="$1"
+    else
+	echo "$me: log file $1 does not exist."
+	exit 1
+    fi
+}
+    
+# Which log file
+if [[ $usefilearg -eq 1 && "${logfilearg:-}" != "" ]] ; then
+    checklogfile "$logfilearg"
+elif [ $usestandard -eq 1 ]; then
+    checklogfile "$DIR/$STANDARDLOGFILE"
+fi
 
-# First, we have to modify doxygen.conf to generate all the warnings
-# (We also suppress dot graphs, so shorten the run time.)
+#  Run doxygen -------------------------
+#
 
-if [ "$skipdoxy" == "" ]; then
+if [ $SKIPDOXY -eq 1 ]; then
+    echo
+    echo "Skipping doxygen run, using existing log file $LOG"
+else
 
     # Run introspection, which may require a build
-    cd $(hg root) && ./waf --run print-introspected-doxygen >doc/introspected-doxygen.h
+    (cd "$ROOT" && ./waf --run print-introspected-doxygen >doc/introspected-doxygen.h)
+
+    # Modify doxygen.conf to generate all the warnings
+    # (We also suppress dot graphs, so shorten the run time.)
 
     conf=$DIR/doxygen.conf
 
     sed -i.bak -E '/^EXTRACT_ALL |^HAVE_DOT |^WARNINGS /s/YES/no/' $conf
     rm -f $conf.bak
 
+    echo
     echo -n "Rebuilding doxygen docs with full errors..."
-    (cd $ROOT && ./waf --doxygen >/dev/null 2>&1)
+    (cd "$ROOT" && ./waf --doxygen >/dev/null 2>&1)
     status=$?
 
     hg revert $conf
 
-    if [ "$status" = "0" ]; then
+    if [ $status -eq 0 ]; then
 	echo "Done."
     else
 	echo "FAILED."
 	exit 1
     fi
 
-    mv $DIR/doxygen.log $log
+    cp -f "$DIR/$STANDARDLOGFILE" "$DIR/$WARNINGSLOGFILE"
 
-else
-    echo "Skipping doxygen run, using existing log file $log"
 fi
 
+# Log filters --------------------------
+#
+
+# Filter regular expression for -m and -F
+filter_inRE=""
+if [ "$filter_module" != "" ] ; then
+    filter_inRE="src/$filter_module"
+fi
+if [ "$filter_regex" != "" ] ; then
+    filter_inRE="${filter_inRE:-}${filter_inRE:+\\|}$filter_regex"
+fi
+
+# Filter regular expression for -e and -t
+filter_outRE=""
+if [ $filter_examples -eq 1 ]; then
+    filter_outRE="/examples/"
+fi
+if [ $filter_test -eq 1 ]; then
+    filter_outRE="${filter_outRE:-}${filter_outRE:+\\|}/test/"
+fi
+
+if [ "${filter_inRE:-}" != "" ] ; then
+    echo "Filtering in \"$filter_inRE\""
+fi
+if [ "${filter_outRE:-}" != "" ] ; then
+    echo "Filtering out \"$filter_outRE\""
+fi
+echo
+
+# Filter log file
+function filter_log
+{
+    local flog;
+    flog=$( cat "$LOG" | grep "^$ROOT" )
+
+    if [ "${filter_inRE:-}" != "" ] ; then
+	flog=$( echo "$flog" | grep "$filter_inRE" )
+    fi
+
+    if [ "${filter_outRE:-}" != "" ] ; then
+	flog=$( echo "$flog" | grep -v "$filter_outRE" )
+    fi
+
+    echo "$flog"
+}
+    
 
-# Analyze the log
+# Analyze the log ----------------------
+#
 
 # List of module directories (e.g, "src/core/model")
 undocmods=$(                \
-    grep "^$ROOT" "$log"  | \
+    filter_log            | \
     cut -d ':' -f 1       | \
-    sed "s|$ROOT||g"      | \
-    cut -d '/' -f 2-4     | \
+    sed "s|$ROOT/||g"     | \
+    cut -d '/' -f 1-3     | \
     sort                  | \
     uniq -c               | \
     sort -nr                \
     )
-    
 
 # Number of directories
 modcount=$(                         \
@@ -68,24 +227,24 @@
 # For a function with multiple undocumented parameters,
 # Doxygen prints the additional parameters on separate lines,
 # so they don't show up in the totals above.
-# Rather than work too hard to get the exact number,
+# Rather than work too hard to get the exact number for each file,
 # we just list the total here. 
 addlparam=$(                                  \
-    grep -v "^$ROOT" $log                   | \
-    grep -v "not generated, too many nodes" | \
-    grep "^  parameter '" $log              | \
+    grep "^  parameter '" "$LOG"            | \
     wc -l                                   | \
     sed 's/^[ \t]*//;s/[ \t]*$//'             \
     )
 
 # Total number of warnings
-warncount=$(echo "$undocmods" | \
-    awk '{total += $1}; END {print total}' )
+warncount=$(                                  \
+    echo "$undocmods"                       | \
+    awk '{total += $1}; END {print total}'    \
+    )
 warncount=$((warncount + addlparam))
 
 # List of files appearing in the log
-undocfiles=$( \
-    grep "^$ROOT" "$log"  | \
+undocfiles=$(               \
+    filter_log            | \
     cut -d ':' -f 1       | \
     sed "s|$ROOT||g"      | \
     cut -d '/' -f 2-      | \
@@ -95,7 +254,7 @@
     )
 
 # Sorted by number, decreasing
-undocsort=$(echo "$undocfiles" | sort -r )
+undocsort=$(echo "$undocfiles" | sort -k1nr,2 )
 
 # Total number of files
 filecount=$(                        \
@@ -104,7 +263,19 @@
     sed 's/^[ \t]*//;s/[ \t]*$//'   \
     )
 
-# Now we're ready to summarize the log
+# Filtered in warnings
+filterin=
+if [ "${filter_inRE:-}" != "" ] ; then
+    filterin=$(                 \
+	filter_log            | \
+	sed "s|$ROOT/||g"       \
+	)
+fi
+
+
+
+# Summarize the log --------------------
+#
 
 echo
 echo "Report of Doxygen warnings"
@@ -147,4 +318,10 @@
 printf "%6d files\n" $filecount
 printf "%6d warnings\n" $warncount
 
-
+if [ "$filterin" != "" ] ; then
+    echo
+    echo
+    echo "Filtered Warnings"
+    echo "========================================"
+    echo "$filterin"
+fi
diff -Naur ns-3.18.1/doc/manual/Makefile ns-3.19/doc/manual/Makefile
--- ns-3.18.1/doc/manual/Makefile	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/doc/manual/Makefile	2013-12-20 09:44:50.000000000 -0800
@@ -16,6 +16,7 @@
 	source/replace.txt \
 	source/attributes.rst \
 	source/callbacks.rst \
+	source/documentation.rst \
 	source/enable-modules.rst \
 	source/enable-tests.rst \
 	source/events.rst \
diff -Naur ns-3.18.1/doc/manual/source/attributes.rst ns-3.19/doc/manual/source/attributes.rst
--- ns-3.18.1/doc/manual/source/attributes.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/doc/manual/source/attributes.rst	2013-12-20 09:44:50.000000000 -0800
@@ -53,7 +53,7 @@
 
 Smart pointers are used extensively in the |ns3| APIs, to avoid passing
 references to heap-allocated objects that may cause memory leaks.  
-For most basic usage (syntax), treat a smart pointer like a regular pointer:::
+For most basic usage (syntax), treat a smart pointer like a regular pointer::
 
   Ptr<WifiNetDevice> nd = ...;
   nd->CallSomeFunction ();
@@ -67,11 +67,11 @@
 using ``operator new`` as usual but instead by a templated function called
 :cpp:func:`CreateObject()`.
 
-A typical way to create such an object is as follows:::
+A typical way to create such an object is as follows::
 
   Ptr<WifiNetDevice> nd = CreateObject<WifiNetDevice> ();
 
-You can think of this as being functionally equivalent to:::
+You can think of this as being functionally equivalent to::
 
   WifiNetDevice* nd = new WifiNetDevice ();
 
@@ -102,7 +102,7 @@
 example: class :cpp:class:`ns3::Node`.
 
 The public header file node.h has a declaration that includes a static GetTypeId
-function call:::
+function call::
 
     class Node : public Object
     {
@@ -110,7 +110,7 @@
       static TypeId GetTypeId (void);
       ...
 
-This is defined in the ``node.cc`` file as follows:::
+This is defined in the ``node.cc`` file as follows::
 
     TypeId 
     Node::GetTypeId (void)
@@ -210,7 +210,7 @@
 unsigned integer ``m_maxPackets``; this member variable controls the depth of
 the queue.  
 
-If we look at the declaration of DropTailQueue, we see the following:::
+If we look at the declaration of DropTailQueue, we see the following::
 
     class DropTailQueue : public Queue {
     public:
@@ -233,7 +233,7 @@
 type of global default value.
 
 In the |ns3| attribute system, these value definitions and accessor functions
-are moved into the TypeId class; e.g.:::
+are moved into the TypeId class; e.g.::
 
     NS_OBJECT_ENSURE_REGISTERED (DropTailQueue);
 
@@ -424,11 +424,11 @@
 +++++++++++++++++++++++++++++++++++++++++++
 
 Arbitrary combinations of attributes can be set and fetched from
-the helper and low-level APIs; either from the constructors themselves:::
+the helper and low-level APIs; either from the constructors themselves::
 
     Ptr<Object> p = CreateObject<MyNewObject> ("n1", v1, "n2", v2, ...);
 
-or from the higher-level helper APIs, such as:::
+or from the higher-level helper APIs, such as::
 
     mobility.SetPositionAllocator ("ns3::GridPositionAllocator",
                                    "MinX", DoubleValue (-100.0),
@@ -451,7 +451,7 @@
 with a single generic type. Conversions to this type can either be done using an
 intermediate class (IntegerValue, DoubleValue for "floating point") or via
 strings. Direct implicit conversion of types to Value is not really practical.
-So in the above, users have a choice of using strings or values:::
+So in the above, users have a choice of using strings or values::
 
     p->Set ("cwnd", StringValue ("100")); // string-based setter
     p->Set ("cwnd", IntegerValue (100)); // integer-based setter
@@ -488,7 +488,7 @@
 values assigned before the constructor body executes, because you need them in
 the logic of the constructor? There is a way to do this, used for example in the
 class :cpp:class:`ns3::ConfigStore`: call ``ObjectBase::ConstructSelf ()`` as
-follows:::
+follows::
 
     ConfigStore::ConfigStore ()
     {
@@ -510,14 +510,14 @@
 Adding an existing internal variable to the metadata system 
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
-Consider this variable in class TcpSocket:::
+Consider this variable in class TcpSocket::
 
     uint32_t m_cWnd;   // Congestion window
 
 Suppose that someone working with TCP wanted to get or set the value of that
 variable using the metadata system. If it were not already provided by |ns3|,
 the user could declare the following addition in the runtime metadata system (to
-the TypeId declaration for TcpSocket):::
+the TypeId declaration for TcpSocket)::
 
     .AddAttribute ("Congestion window", 
                    "Tcp congestion window (bytes)",
@@ -537,7 +537,7 @@
 Here, we discuss the impact on a user who wants to add a new class to |ns3|;
 what additional things must be done to hook it into this system.
 
-We've already introduced what a TypeId definition looks like:::
+We've already introduced what a TypeId definition looks like::
 
     TypeId
     RandomWalk2dMobilityModel::GetTypeId (void)
@@ -562,7 +562,7 @@
     }
 
 The declaration for this in the class declaration is one-line public member
-method:::
+method::
 
     public:
       static TypeId GetTypeId (void);
@@ -606,7 +606,7 @@
     };
  
 One macro call and two operators, must be added below the class declaration in
-order to turn a Rectangle into a value usable by the ``Attribute`` system:::
+order to turn a Rectangle into a value usable by the ``Attribute`` system::
 
     std::ostream &operator << (std::ostream &os, const Rectangle &rectangle);
     std::istream &operator >> (std::istream &is, Rectangle &rectangle);
@@ -616,7 +616,7 @@
 Implementation file
 +++++++++++++++++++
 
-In the class definition (``.cc`` file), the code looks like this:::
+In the class definition (``.cc`` file), the code looks like this::
 
     ATTRIBUTE_HELPER_CPP (Rectangle);
 
@@ -660,12 +660,12 @@
 |ns3| ConfigStore.  We can explore this system by using an example from
 ``src/config-store/examples/config-store-save.cc``.
 
-First, all users must include the following statement:::
+First, all users must include the following statement::
 
     #include "ns3/config-store-module.h"
 
 Next, this program adds a sample object A to show how the system
-is extended:::
+is extended::
 
     class A : public Object
     {
@@ -686,7 +686,7 @@
     NS_OBJECT_ENSURE_REGISTERED (A);
 
 Next, we use the Config subsystem to override the defaults in a couple of
-ways:::
+ways::
      
       Config::SetDefault ("ns3::A::TestInt16", IntegerValue (-5));
     
@@ -703,7 +703,7 @@
 created is rooted in the configuration namespace as an object instance.
 This normally happens when you aggregate objects to ns3::Node or ns3::Channel
 but here, since we are working at the core level, we need to create a
-new root namespace object:::
+new root namespace object::
 
       Config::RegisterRootNamespaceObject (a2_obj);
 
@@ -720,7 +720,7 @@
 (default "RawText") governs whether the ConfigStore format is Xml or RawText
 format.
 
-The example shows:::
+The example shows::
 
       Config::SetDefault ("ns3::ConfigStore::Filename", StringValue ("output-attributes.xml"));
       Config::SetDefault ("ns3::ConfigStore::FileFormat", StringValue ("Xml"));
@@ -895,7 +895,7 @@
 is rerun.
 
 Usage is almost the same as the non-GTK-based version, but there
-are no ConfigStore attributes involved:::
+are no ConfigStore attributes involved::
 
   // Invoke just before entering Simulator::Run ()
   GtkConfigStore config;
diff -Naur ns-3.18.1/doc/manual/source/conf.py ns-3.19/doc/manual/source/conf.py
--- ns-3.18.1/doc/manual/source/conf.py	2013-11-15 15:33:07.000000000 -0800
+++ ns-3.19/doc/manual/source/conf.py	2013-12-20 09:44:50.000000000 -0800
@@ -41,16 +41,16 @@
 
 # General information about the project.
 project = u'ns-3'
-copyright = u'2010, ns-3 project'
+copyright = u'2008-13, ns-3 project'
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.18.1'
+version = 'ns-3.19'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.18.1'
+release = 'ns-3.19'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.18.1/doc/manual/source/documentation.rst ns-3.19/doc/manual/source/documentation.rst
--- ns-3.18.1/doc/manual/source/documentation.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/doc/manual/source/documentation.rst	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,569 @@
+.. include:: replace.txt
+.. highlight:: cpp
+
+Creating Documentation
+----------------------
+
+|ns3| supplies two kinds of documentation:  expository "user-guide"-style
+chapters, and source code API documentation.
+
+The "user-guide" chapters are written by hand in reStructuredText_
+format (``.rst``), which is processed by the Python documentation
+system Sphinx_ to generate web pages and pdf files.
+The API documentation is generated from the source code itself,
+using Doxygen_, to generate cross-linked web pages.
+Both of these are important:  the Sphinx chapters explain the *why*
+and overview of using a model; the API documentation explains the
+*how* details.  
+
+This chapter gives a quick overview of these
+tools, emphasizing preferred usage and customizations for |ns3|.
+
+To build all the standard documentation:
+
+.. sourcecode:: bash
+
+   $ ./waf docs
+
+For more specialized options, read on.
+
+.. _reStructuredText:  http://sphinx-doc.org/rest.html
+.. _sphinx:            http://sphinx-doc.org/
+.. _doxygen:           http://www.doxygen.org/
+
+
+Documenting with Sphinx
+***********************
+
+We use Sphinx_ to generate expository chapters describing
+the design and usage of each module.  Right now you are reading the
+:doc:`Documentation <documentation>` Chapter.
+The `Show Source <_sources/documentation.txt>`_ link in the sidebar
+will show you the reStructuredText source for this chapter.
+
+Adding New Chapters
+===================
+
+Adding a new chapter takes three steps (described in more detail below):
+
+#. Choose `Where?`_ the documentation file(s) will live.
+#. `Link`_ from an existing page to the new documentation.
+#. Add the new file to the `Makefile`_.
+
+Where?
+######
+
+Documentation for a specific module, ``foo``, should normally go in
+``src/foo/doc/``.  For example ``src/foo/doc/foo.rst`` would be the
+top-level document for the module.  The ``src/create-module.py`` script
+will create this file for you.
+
+Some models require several ``.rst`` files, and figures; these should
+all go in the ``src/foo/doc/`` directory.  The docs are actually build
+by a Sphinx Makefile.  For especially involved
+documentation, it may be helpful to have a local ``Makefile``
+in the ``src/foo/doc/`` directory to
+simplify building the documentation for this module 
+(`Antenna`_ is an example).  Setting this up
+is not particularly hard, but is beyond the scope of this chapter.
+
+In some cases, documentation spans multiple models; the
+`Network`_ chapter is an example.  In these cases
+adding the ``.rst`` files directly to ``doc/models/source/`` might
+be appropriate.
+
+.. _antenna:  http://www.nsnam.org/docs/models/html/antenna.html
+.. _network:  http://www.nsnam.org/docs/models/html/network.html
+
+Link
+####
+
+Sphinx has to know *where* your new chapter should appear.  In most
+cases, a new model chapter should appear the in `Models` book.
+To add your chapter there, edit ``doc/models/source/index.rst``
+
+.. sourcecode:: rest
+
+   .. toctree::
+      :maxdepth: 1
+ 
+     organization
+     animation
+     antenna
+     aodv
+     applications
+     ...
+
+Add the name of your document (without the ``.rst`` extension) to
+this list.  Please keep the Model chapters in alphabetical order,
+to ease visual scanning for specific chapters.
+
+Makefile
+########
+
+You also have to add your document to the appropriate ``Makefile``,
+so ``make`` knows to check it for updates.  The Models book Makefile
+is ``doc/models/Makefile``, the Manual book Makefile is
+``doc/manual/Makefile``.
+
+.. sourcecode:: make
+
+   # list all model library .rst files that need to be copied to $SOURCETEMP
+   SOURCES = \
+           source/conf.py \
+           source/_static \
+           source/index.rst \
+           source/replace.txt \
+           source/organization.rst \
+           ...
+           $(SRC)/antenna/doc/source/antenna.rst \
+           ...
+
+You add your ``.rst`` files to the ``SOURCES`` variable.  To add figures,
+read the comments in the ``Makefile`` to see which variable should contain
+your image files.  Again, please keep these in alphabetical order.
+
+Building Sphinx Docs
+====================
+
+Building the Sphinx documentation is pretty simple.  
+To build all the Sphinx documentation:
+
+.. sourcecode:: bash
+
+   $ ./waf sphinx
+
+To build just the Models documentation:
+
+.. sourcecode:: bash
+
+   $ make -C doc/models
+
+To see the generated documentation point your browser at
+``doc/models/build/html``.
+
+As you can see, Sphinx uses Make to guide the process.
+The default target builds all enabled output forms, which in
+|ns3| are the multi-page ``html``, single-page ``singlehtml``, and pdf
+(``latex``).  To build just the multi-page html, you add the ``html`` target:
+
+.. sourcecode:: bash
+
+   $ make -C doc/models html
+
+This can be helpful to reduce the build time (and the size of the
+build chatter) as you are writing your chapter.
+
+Before committing your documentation to the repo, please check
+that it builds without errors or warnings.  The build process
+generates lots of output (mostly normal chatter from LaTeX),
+which can make it difficult to see if there are any Sphinx
+warnings or errors.  To find important warnings and errors
+build just the ``html`` version, then search the build log
+for ``warning`` or ``error``.
+
+
+|ns3| Specifics
+===============
+
+The Sphinx documentation_ and tutorial_ are pretty good.  We won't duplicate
+the basics here, instead focusing on preferred usage for |ns3|.
+
+.. _documentation:  http://sphinx-doc.org/contents.html
+.. _tutorial:       http://sphinx-doc.org/tutorial.html
+
+
+* Start documents with these two lines:
+   
+  .. sourcecode:: rest
+     
+     .. include:: replace.txt
+     .. highlight:: cpp
+   
+  The first line enables some simple replacements.  For example,
+  typing ``|ns3|`` renders as |ns3|.
+  The second sets the default source code highlighting language explicitly
+  for the file, since the parser guess isn't always accurate.
+  (It's also possible to set the language explicitly for a single code block,
+  see below.)
+
+* Sections:
+  
+  Sphinx is pretty liberal about marking section headings.  By convention,
+  we prefer this hierarchy:
+  
+  .. sourcecode:: rest
+      
+     .. heading hierarchy:
+        ------------- Chapter
+        ************* Section (#.#)
+        ============= Subsection (#.#.#)
+        ############# Sub-subsection
+
+* Syntax Highlighting:
+  
+  To use the default syntax highlighter, simply start a sourcecode block:
+
+  +--------------------------------------+------------------------------------+
+  | Sphinx Source                        | Rendered Output                    |
+  +======================================+====================================+
+  | .. sourcecode:: rest                 |                                    |
+  |                                      |                                    |
+  |   The ``Frobnitz`` is accessed by::  | The ``Frobnitz`` is accessed by::  |
+  |                                      |                                    |
+  |     Foo::Frobnitz frob;              |   Foo::Frobnitz frob;              |
+  |     frob.Set (...);                  |   frob.Set (...);                  |
+  +--------------------------------------+------------------------------------+
+
+  To use a specific syntax highlighter, for example, ``bash`` shell commands:
+
+  +--------------------------------------+------------------------------------+
+  | Sphinx Source                        | Rendered Output                    |
+  +======================================+====================================+
+  | .. sourcecode:: rest                 |                                    |
+  |                                      |                                    |
+  |   .. sourcecode:: bash               | .. sourcecode:: bash               |
+  |                                      |                                    |
+  |      $ ls                            |    $ ls		              |
+  +--------------------------------------+------------------------------------+
+  
+* Shorthand Notations:
+
+  These shorthands are defined:
+
+  +--------------------------------------+------------------------------------+
+  | Sphinx Source                        | Rendered Output                    |
+  +======================================+====================================+
+  | .. sourcecode:: rest                 |                                    |
+  |                                      |                                    |
+  |    |ns3|                             |  |ns3|                             |
+  +--------------------------------------+------------------------------------+
+  | .. sourcecode:: rest                 |                                    |
+  |                                      |                                    |
+  |    |ns2|                             |  |ns2|                             |
+  +--------------------------------------+------------------------------------+
+  | .. sourcecode:: rest                 |                                    |
+  |                                      |                                    |
+  |    |check|                           |  |check|                           |
+  +--------------------------------------+------------------------------------+
+  | .. sourcecode:: rest                 |                                    |
+  |                                      |                                    |
+  |    :rfc:`6282`                       |  :rfc:`6282`                       |
+  +--------------------------------------+------------------------------------+
+
+
+Documenting with Doxygen
+************************
+
+We use Doxygen_ to generate browsable_ API documentation.  Doxygen
+provides a number of useful features:
+
+  * Summary table of all class members.
+  * Graphs of inheritance and collaboration for all classes.
+  * Links to the source code imlementing each function.
+  * Links to every place a member is used.
+  * Links to every object used in implementing a function.
+  * Grouping of related classes, such as all the classes related to
+    a specific protocol.
+
+In addition, we use the ``TypeId`` system to add to the documentation
+for every class
+
+  * The ``Config`` paths by which such objects can be reached.
+  * Documentation for any ``Attributes``, including ``Attributes``
+    defined in parent classes.
+  * Documentation for any ``Trace`` sources defined by the class.
+
+Doxygen operates by scaning the source code, looking for
+specially marked comments.  It also creates a cross reference,
+indicating *where* each file, class, method, and variable is used.
+
+.. _browsable: https://www.nsnam.org/docs/doxygen
+
+
+Preferred Style
+===============
+
+The preferred style for Doxygen comments is the JavaDoc style::
+
+  /**
+   *  Brief description of this class or method.
+   *  Adjacent lines become a single paragraph.
+   *
+   *  Longer description, with lots of details.
+   *
+   *  Blank lines separate paragraphs.
+   *
+   *  Explain what the class or method does, using what algorithm.
+   *  Explain the units of arguments and return values.
+   *
+   *  \note Note any limitations or gotchas.
+   *
+   *  (For functions with arguments or return valued:)
+   *  \param foo Brief noun phrase describing this argument.
+   *  \param bar Note Sentence case, and terminating period.
+   *  \return Brief noun phrase describing the value.
+   *
+   *  \internal
+   *
+   *  You can also discuss internal implementation details.
+   *  Understanding this material shouldn't be necessary to using
+   *  the class or method.
+   */
+   class Example
+
+In this style the Doxygen comment block begins with two \`*' characters:
+``/**``, and precedes the item being documented.
+
+For items needing only a brief description, either of these short forms
+is appropriate::
+
+  /** Destructor implementation. */
+  void DoDispose ();
+
+  int m_count;  //!< Count of ...
+
+Note the special form of the end of line comment, ``//!<``, indicating
+that it refers to the *preceding* item.
+
+Some items to note:
+
+  * Use sentence case, including the initial capital.
+  * Use punctuation, especially \`.'s at the end of sentences or phrases.
+  * The ``\brief`` tag is not needed; the first sentence will be
+    used as the brief description.
+
+Every class, method, typedef, member variable, function argument
+and return value should be documented in all source code files
+which form the formal API and implementation for |ns3|, such as
+``src/<module>/model/*``, ``src/<module>/helper/*`` and
+``src/<module>/utils/*``.  Documentation for items in ``src/<module>/test/*``
+and ``src/<module>/examples/*`` is preferred, but not required.
+
+Useful Features
+===============
+
+* Inherited members will automatically inherit docs from the parent,
+  (but can be replaced by local documentation).
+
+  #. Document the base class.
+  #. In the sub class mark inherited functions with an ordinary comment::
+
+       // Inherited methods
+       virtual void FooBar (void);
+       virtual int BarFoo (double baz);
+
+     Note that the signatures have to match exactly, so include the formal
+     argument ``(void)``
+
+     This doesn't work for static functions; see ``GetTypeId``, below, for an
+     example.
+
+Building Doxygen Docs
+=====================
+
+Building the Doxygen documentation is pretty simple:
+
+.. sourcecode:: bash
+
+   $ ./waf doxygen
+
+This builds using the default configuration, which generates documentation
+sections for *all* items, even if they do not have explicit comment
+documentation blocks.  This has the effect of suppressing warnings for
+undocumented items, but makes sure everything appears in the generated
+output.
+
+When writing documentation, it's often more useful to see which items
+are generating warnings, typically about missing documentation.
+To see the full warnings list, use the ``doc/doxygen.warnings.report.sh``
+script:
+
+.. sourcecode:: bash
+
+   $ doc/doxygen.warnings.report.sh
+   Waf: Entering directory `build'
+   ...
+   Waf: Leaving directory `build'
+   'build' finished successfully (3m24.094s)
+
+   Rebuilding doxygen docs with full errors...Done.
+
+
+   Report of Doxygen warnings
+   ----------------------------------------
+
+   (All counts are lower bounds.)
+
+   Warnings by module/directory:
+
+   Count Directory
+   ----- ----------------------------------
+   3844 src/lte/model
+   1718 src/wimax/model
+   1423 src/core/model
+   ....
+    138 additional undocumented parameters.
+   ----------------------------------------
+    15765 total warnings
+      126 directories with warnings
+
+
+   Warnings by file (alphabetical)
+
+   Count File
+   ----- ----------------------------------
+     17 doc/introspected-doxygen.h
+     15 examples/routing/manet-routing-compare.cc
+     26 examples/stats/wifi-example-apps.h
+   ....
+   ----------------------------------------
+      967 files with warnings
+
+
+   Warnings by file (numerical)
+
+   Count File
+   ----- ----------------------------------
+    374 src/lte/model/lte-asn1-header.h
+    280 src/lte/model/lte-rrc-sap.h
+    262 src/lte/model/lte-rrc-header.h
+   ....
+   ----------------------------------------
+      967 files with warnings
+
+
+   Doxygen Warnings Summary
+   ----------------------------------------
+      126 directories
+      967 files
+    15765 warnings
+
+The script modifies the configuration to show all warnings, and
+to shorten the run time.  As you can see, at this writing we have
+*a lot* of undocumented items.  The report summarizes warnings
+by module ``src/*/*``, and by file, in alphabetically and numerical
+order.
+
+The script has a few options to pare things down and make this more
+manageable.  For help, use the ``-h`` option.  Having run it once
+to do the Doxygen build and generate the full warnings log,
+you can reprocess the log file with various "filters,"
+without having to do the full Doxygen build by,
+again using the ``-s`` option.  You can exclude warnings
+from ``*/examples/*`` files (``-e`` option), and/or ``*/test/*`` files
+(``-t``).
+
+Perhaps the most useful option when writing documentation comments
+is ``-m <module>``, which will limit the report to just files matching
+``src/<module>/*``, and follow the report with the actual warning lines.
+Combine with ``-et`` and you can focus on the warnings that are most
+urgent in a single module:
+
+.. sourcecode:: bash
+
+   $ doc/doxygen.warnings.report.sh -m mesh/helper
+   ...
+   Doxygen Warnings Summary
+   ----------------------------------------
+     1 directories
+     3 files
+   149 warnings
+
+
+   Filtered Warnings
+   ========================================
+   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/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.
+   src/mesh/helper/mesh-helper.h:215: warning: Member m_stack (variable) of class ns3::MeshHelper is not documented.
+   src/mesh/helper/mesh-helper.h:216: warning: Member m_stackFactory (variable) of class ns3::MeshHelper is not documented.
+   src/mesh/helper/mesh-helper.h:209: warning: parameters of member ns3::MeshHelper::CreateInterface are not (all) documented
+   src/mesh/helper/mesh-helper.h:119: warning: parameters of member ns3::MeshHelper::SetStandard are not (all) documented
+
+
+Now it's just a matter of understanding the code, and writing some
+docs!
+
+
+
+|ns3| Specifics
+===============
+
+As for Sphinx, the Doxygen docs_ and reference_ are pretty good.
+We won't duplicate the basics here, instead focusing on preferred
+usage for |ns3|.
+
+.. _docs:       http://www.stack.nl/~dimitri/doxygen/index.html
+.. _reference:  http://www.stack.nl/~dimitri/doxygen/manual/commands.html
+
+
+* Use Doxygen ``Modules`` to group related items.
+
+  In the main header for a module, create a Doxgyen group::
+
+    /**
+     *  \defgroup foo Foo protocol.
+     */
+
+  Mark each associated class as belonging to the group::
+
+    /**
+     *  \ingroup foo
+     *
+     *  Foo packet type.
+    */
+    class Foo
+
+* Copy the ``Attribute`` help strings from the ``GetTypeId`` method to use
+  as the brief descriptions of associated members.
+
+* ``\bugid{298}`` will create a link to bug 298 in our Bugzilla.
+
+* ``\pname{foo}`` in a description will format ``foo``
+  as a ``\param foo`` parameter, making it clear that you
+  are referring to an actual argument.
+
+* ``\RFC{301}`` will create a link to RFC 301.
+
+* ``\internal`` should be used only to set off a discussion of implementation
+  details, not to mark ``private`` functions (they are already marked,
+  as ``private``!)
+
+* Don't create classes with trivial names, such as ``class A``,
+  even in test suites.  These cause all instances of the class name
+  literal \`A' to be rendered as links.
+
+
+As noted above, static functions don't inherit the documentation
+of the same functions in the parent class.  |ns3| uses a few static
+functions ubiquitously; the suggested documentation block for these
+cases is:
+
+  * Default constructor/destructor::
+
+      MyClass ();   //!< Default constructor
+      ~MyClass ();  //!< Destructor
+
+  * Dummy destructor and DoDispose::
+
+      /** Dummy destructor, see DoDispose. */
+      ~MyClass ();
+
+      /** Destructor implementation */
+      virtual void DoDispose ();
+
+  * GetTypeId::
+
+      /**
+       *  Register this type.
+       *  \return The object TypeId.
+       */
+      static TypeId GetTypeId (void);
+
+
+
diff -Naur ns-3.18.1/doc/manual/source/logging.rst ns-3.19/doc/manual/source/logging.rst
--- ns-3.18.1/doc/manual/source/logging.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/doc/manual/source/logging.rst	2013-12-20 09:44:50.000000000 -0800
@@ -22,16 +22,14 @@
 frameworks on top of logging code, as the output and the way the output
 is enabled may change over time. 
 
-Logging overview
-****************
+Overview
+********
 
 |ns3| logging statements are typically used to log various program
 execution events, such as the occurrence of simulation events or the
 use of a particular function.
 
-For example, this code snippet is from ``Ipv4L3Protocol::IsDestinationAddress()``:
-
-::
+For example, this code snippet is from ``Ipv4L3Protocol::IsDestinationAddress()``::
 
   if (address == iaddr.GetBroadcast ())
     {
@@ -39,121 +37,393 @@
       return true;
      }
 
-If logging has been enabled for the ``Ipv4L3Protocol`` component at a level
-of ``LOGIC`` or above (see below about logging levels), the statement
+If logging has been enabled for the ``Ipv4L3Protocol`` component at a severity
+of ``LOGIC`` or above (see below about log severity), the statement
 will be printed out; otherwise, it will be suppressed.
 
-Logging levels
-==============
+Enabling Output
+===============
 
-The following levels are defined; each level will enable the levels above
-it, with the ``ALL`` level being most verbose:
+There are two ways that users typically control log output.  The
+first is by setting the ``NS_LOG`` environment variable; e.g.:
 
-#. ``LOG_NONE``:  the default, no logging
-#. ``LOG_ERROR``:  serious error messages only
-#. ``LOG_WARN``:  warning messages
-#. ``LOG_DEBUG``:  for use in debugging
-#. ``LOG_FUNCTION``: function tracing
-#. ``LOG_LOGIC``:  control flow tracing within functions
-#. ``LOG_ALL``:  print everything
+.. sourcecode:: bash
 
-A special logging level will cause logging output to unconditionally
-appear on ``std::clog``, regardless of whether the user has explicitly enabled 
-logging.
-This macro, ``NS_LOG_UNCOND()``, can be used like a kind of ``printf()`` in
-your code.  An example can be found in ``scratch/scratch-simulator.cc``:
+   $ NS_LOG="*" ./waf --run first
 
-::
+will run the ``first`` tutorial program with all logging output.  (The
+specifics of the ``NS_LOG`` format will be discussed below.)
 
-   NS_LOG_UNCOND ("Scratch Simulator");
+This can be made more granular by selecting individual components:
 
-Logging prefixes
-================
+.. sourcecode:: bash
 
-This section still needs documentation; bug 1496 is open on this:
+   $ NS_LOG="Ipv4L3Protocol" ./waf --run first
 
-.. sourcecode:: bash
+The output can be further tailored with prefix options.
+  
+The second way to enable logging is to use explicit statements in your
+program, such as in the ``first`` tutorial program::
+   
+   int
+   main (int argc, char *argv[])
+   {
+     LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
+     LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
+     ...
 
-   $ NS_LOG="*=all|prefix_all" ./waf --run scratch-simulator
-   Scratch Simulator
-   ScratchSimulator:main(): [ERROR] error message
-   ScratchSimulator:main(): [WARN] warn message
-   ScratchSimulator:main(): [DEBUG] debug message
-   ScratchSimulator:main(): [INFO] info message
-   ScratchSimulator:main(function)
-   ScratchSimulator:main(): [LOGIC] logic message
+(The meaning of ``LOG_LEVEL_INFO``, and other possible values,
+will be discussed below.)
 
-Enabling logging output
-=======================
+``NS_LOG`` Syntax
+=================
 
-There are two ways that users typically control logging output.  The
-first is by setting an ``NS_LOG`` environment variable; e.g.:
+The ``NS_LOG`` environment variable contains a list of log components
+and options.  Log components are separated by \`:' characters:
 
 .. sourcecode:: bash
 
-   $ NS_LOG="*" ./waf --run first
+   $ NS_LOG="<log-component>:<log-component>..."
 
-will run the first tutorial program with all logging output.  This can
-be made more granular by selecting individual components:
+Options for each log component are given as flags after
+each log component:
 
 .. sourcecode:: bash
 
-   $ NS_LOG="Ipv4L3Protocol" ./waf --run first
-  
-The second way to enable this is to use explicit statements in your
-program, such as in the first tutorial program:
+   $ NS_LOG="<log-component>=<option>|<option>...:<log-component>..."
 
-::
-   
-   int
-   main (int argc, char *argv[])
-   {
-     LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
-     LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
-     ...
+Options control the severity and level for that component,
+and whether optional information should be included, such as the
+simulation time, simulation node, function name, and the symbolic severity.
 
-Some helpers have special methods to enable the logging of all components
-in a module (across different compilation units, but logically grouped
-together such as the |ns3| wifi code:
+Log Components
+==============
 
-::
+Generally a log component refers to a single source code ``.cc`` file,
+and encompasses the entire file.
+
+Some helpers have special methods to enable the logging of all components
+in a module, spanning different compilation units, but logically grouped
+together, such as the |ns3| wifi code::
 
    WifiHelper wifiHelper;
    wifiHelper.EnableLogComponents (); 
 
+The ``NS_LOG`` log component wildcard \`*' will enable all components.
+
+To see what log components are defined, any of these will work:
+
+.. sourcecode:: bash
+
+   $ NS_LOG="print-list" ./waf --run ...
+
+   $ NS_LOG="foo"  # a token not matching any log-component
+
+The first form will print the name and enabled flags for all log components
+which are linked in; try it with ``scratch-simulator``.
+The second form prints all registered log components,
+then exit with an error.
+
+
+Severity and Level Options
+==========================
+
+Individual messages belong to a single "severity class," set by the macro
+creating the message.  In the example above,
+``NS_LOG_LOGIC(..)`` creates the message in the ``LOG_LOGIC`` severity class.
+
+The following severity classes are defined as ``enum`` constants:
+
+================  =====================================
+Severity Class    Meaning
+================  =====================================
+``LOG_NONE``      The default, no logging
+``LOG_ERROR``     Serious error messages only
+``LOG_WARN``      Warning messages
+``LOG_DEBUG``     For use in debugging
+``LOG_INFO``      Informational
+``LOG_FUNCTION``  Function tracing
+``LOG_LOGIC``     Control flow tracing within functions
+================  =====================================
+
+Typically one wants to see messages at a given severity class *and higher*.
+This is done by defining inclusive logging "levels":
+
+======================  ===========================================
+Level                   Meaning
+======================  ===========================================
+``LOG_LEVEL_ERROR``     Only ``LOG_ERROR`` severity class messages.
+``LOG_LEVEL_WARN``      ``LOG_WARN`` and above.
+``LOG_LEVEL_DEBUG``     ``LOG_DEBUG`` and above.
+``LOG_LEVEL_INFO``      ``LOG_INFO`` and above.
+``LOG_LEVEL_FUNCTION``  ``LOG_FUNCTION`` and above.
+``LOG_LEVEL_LOGIC``     ``LOG_LOGIC`` and above.
+``LOG_LEVEL_ALL``       All severity classes.
+``LOG_ALL``             Synonym for ``LOG_LEVEL_ALL``
+======================  ===========================================
+
+The severity class and level options can be given in the ``NS_LOG``
+environment variable by these tokens:
+
+============  =================
+Class         Level
+============  =================
+``error``     ``level_error``
+``warn``      ``level_warn``
+``debug``     ``level_debug``
+``info``      ``level_info``
+``function``  ``level_function``
+``logic``     ``level_logic``
+..            | ``level_all``
+              | ``all``
+              | ``*``
+============  =================
+
+Using a severity class token enables log messages at that severity only.
+For example, ``NS_LOG="*=warn"`` won't output messages with severity ``error``.
+``NS_LOG="*=level_debug"`` will output messages at severity levels
+``debug`` and above.
+
+Severity classes and levels can be combined with the \`|' operator:
+``NS_LOG="*=level_warn|logic"`` will output messages at severity levels
+``error``, ``warn`` and ``logic``.
+
+The ``NS_LOG`` severity level wildcard \`*' and ``all``
+are synonyms for ``level_all``.
+
+For log components merely mentioned in ``NS_LOG``
+
+.. sourcecode:: bash
+
+   $ NS_LOG="<log-component>:..."
+
+the default severity is ``LOG_LEVEL_ALL``.
+
+
+Prefix Options
+==============
+
+A number of prefixes can help identify
+where and when a message originated, and at what severity.
+
+The available prefix options (as ``enum`` constants) are
+
+======================  ===========================================
+Prefix Symbol           Meaning
+======================  ===========================================
+``LOG_PREFIX_FUNC``     Prefix the name of the calling function.
+``LOG_PREFIX_TIME``     Prefix the simulation time.
+``LOG_PREFIX_NODE``     Prefix the node id.
+``LOG_PREFIX_LEVEL``    Prefix the severity level.
+``LOG_PREFIX_ALL``      Enable all prefixes.
+======================  ===========================================
+
+The prefix options are described briefly below.
+
+The options can be given in the ``NS_LOG``
+environment variable by these tokens:
+
+================  =========
+Token             Alternate
+================  =========
+``prefix_func``   ``func``
+``prefix_time``   ``time``
+``prefix_node``   ``node``
+``prefix_level``  ``level``
+``prefix_all``    | ``all``
+                  | ``*``
+================  =========
+
+For log components merely mentioned in ``NS_LOG``
+
+.. sourcecode:: bash
+
+   $ NS_LOG="<log-component>:..."
+
+the default prefix options are ``LOG_PREFIX_ALL``.
+
+Severity Prefix
+###############
+
+The severity class of a message can be included with the options
+``prefix_level`` or ``level``.  For example, this value of ``NS_LOG``
+enables logging for all log components (\`*') and all severity
+classes (``=all``), and prefixes the message with the severity
+class (``|prefix_level``).
+
+.. sourcecode:: bash
+
+   $ NS_LOG="*=all|prefix_level" ./waf --run scratch-simulator
+   Scratch Simulator
+   [ERROR] error message
+   [WARN] warn message
+   [DEBUG] debug message
+   [INFO] info message
+   [FUNCT] function message
+   [LOGIC] logic message
+
+Time Prefix
+###########
+
+The simulation time can be included with the options
+``prefix_time`` or ``time``.  This prints the simulation time in seconds.
+
+Node Prefix
+###########
+
+The simulation node id can be included with the options
+``prefix_node`` or ``node``.
+
+Function Prefix
+###############
+
+The name of the calling function can be included with the options
+``prefix_func`` or ``func``.
+
+
+``NS_LOG`` Wildcards
+####################
+
+The log component wildcard \`*' will enable all components.  To
+enable all components at a specific severity level
+use ``*=<severity>``.
+
+The severity level option wildcard \`*' is a synonym for ``all``.
+This must occur before any \`|' characters separating options.
+To enable all severity classes, use ``<log-component>=*``,
+or ``<log-component>=*|<options>``.
+
+The option wildcard \`*' or token ``all`` enables all prefix options,
+but must occur *after* a \`|' character.  To enable a specific
+severity class or level, and all prefixes, use
+``<log-component>=<severity>|*``.
+
+The combined option wildcard ``**`` enables all severities and all prefixes;
+for example, ``<log-component>=**``.
+
+The uber-wildcard ``***`` enables all severities and all prefixes
+for all log components.  These are all equivalent:
+
+.. sourcecode:: bash
+
+   $ NS_LOG="***" ...      $ NS_LOG="*=all|*" ...        $ NS_LOG="*=*|all" ...	      
+   $ NS_LOG="*=**" ...     $ NS_LOG="*=level_all|*" ...  $ NS_LOG="*=*|prefix_all" ...
+   $ NS_LOG="*=*|*" ...
+                       
+Be advised:  even the trivial ``scratch-simulator`` produces over
+46K lines of output with ``NS_LOG="***"``!
+
 
 How to add logging to your code
 *******************************
 
-To add logging to your code, please follow the below steps:
+Adding logging to your code is very simple:
+
+1. Invoke the ``NS_LOG_COMPONENT_DEFINE (...);`` macro
+   outside 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
+  such as follows:
+
+  ::
+
+    NS_LOG_COMPONENT_DEFINE ("Ipv4L3Protocol");
+
+    namespace ns3 {
+    ...
+
+  This registers ``Ipv4L3Protocol`` as a log component.
+
+  (The macro was carefully written to permit inclusion either within or
+  outside of namespace ``ns3``, and usage will vary across the codebase, but
+  the original intent was to register this *outside* of namespace ``ns3``
+  at file global scope.)
+
+2. Add logging statements (macro calls) to your functions and function bodies.
+
+Logging Macros
+==============
+
+  The logging macros and associated severity levels are
+
+  ================  ==========================
+  Severity Class    Macro
+  ================  ==========================
+  ``LOG_NONE``      (none needed)
+  ``LOG_ERROR``     ``NS_LOG_ERROR (...);``
+  ``LOG_WARN``      ``NS_LOG_WARN (...);``
+  ``LOG_DEBUG``     ``NS_LOG_DEBUG (...);``
+  ``LOG_INFO``      ``NS_LOG_INFO (...);``
+  ``LOG_FUNCTION``  ``NS_LOG_FUNCTION (...);``
+  ``LOG_LOGIC``     ``NS_LOG_LOGIC (...);``
+  ================  ==========================
+
+  The macros function as output streamers, so anything you can send to
+  ``std::cout``, joined by ``<<`` operators, is allowed::
+
+    void MyClass::Check (int value, char * item)
+    {
+      NS_LOG_FUNCTION (this << arg << item);
+      if (arg > 10)
+        {
+          NS_LOG_ERROR ("encountered bad value " << value <<
+                        " while checking " << name << "!");
+        }
+      ...
+    }
+
+  Note that ``NS_LOG_FUNCTION`` automatically inserts a \`\ :literal:`,\ `'
+  (comma-space) separator between each of its arguments.
+  This simplifies logging of function arguments;
+  just concatenate them with ``<<`` as in the example above.
+
+Unconditional Logging
+=====================
+
+As a convenience, the ``NS_LOG_UNCOND (...);`` macro will always log its
+arguments, even if the associated log-component is not enabled at any
+severity.  This macro does not use any of the prefix options.  Note that
+logging is only enabled in debug builds; this macro won't produce
+output in optimized builds.
+
+
+Guidelines
+==========
+
+* Start every class method with ``NS_LOG_FUNCTION (this << args...);``
+  This enables easy function call tracing.
+
+  * Except:  don't log operators or explicit copy constructors, 
+    since these will cause infinite recursion and stack overflow.
+
+  * For methods without arguments use the same form:
+    ``NS_LOG_FUNCTION (this);``
+
+  * For static functions:
+
+    * With arguments use ``NS_LOG_FUNCTION (...);`` as normal.
+    * Without arguments use ``NS_LOG_FUNCTION_NOARGS ();``
 
-1) Put ``NS_LOG_COMPONENT_DEFINE`` macro outside of namespace ns3
+* Use ``NS_LOG_ERROR`` for serious error conditions that probably
+  invalidate the simulation execution.
 
-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
-such as follows:
+* Use ``NS_LOG_WARN`` for unusual conditions that may be correctable.
+  Please give some hints as to the nature of the problem and how
+  it might be corrected.
 
-::
+* ``NS_LOG_DEBUG`` is usually used in an *ad hoc* way to understand
+  the execution of a model.
 
-   NS_LOG_COMPONENT_DEFINE ("Ipv4L3Protocol");
+* Use ``NS_LOG_INFO`` for additional information about the execution,
+  such as the size of a data structure when adding/removing from it.
 
-   namespace ns3 {
-   ...
+* Use ``NS_LOG_LOGIC`` to trace important logic branches within a function.
 
-The macro was carefully written to permit inclusion either within or
-outside of namespace ``ns3``, and usage will vary across the codebase, but
-the original intent was to register this *outside* of namespace ``ns3``.
+* Test that your logging changes do not break the code.  
+  Run some example programs with all log components turned on (e.g. 
+  ``NS_LOG="***"``).
 
-2) Add logging statements to your functions and function bodies.
 
-There are a couple of guidelines on this:
 
-* Do *not* add function logging in operators or explicit copy constructors, 
-  since these will cause infinite recursion and stack overflow.
-* Use the ``NS_LOG_FUNCTION_NOARGS()`` variant for static methods *only*. When 
-  a non-static member function has no arguments, it should be logged by 
-  ``NS_LOG_FUNCTION (this)`` macro.
-* Make sure that you test that your logging changes do not break the code; 
-  running some example programs with all log components turned on (e.g. 
-  ``NS_LOG="*"``) is one way to test this.
 
diff -Naur ns-3.18.1/doc/manual/source/new-models.rst ns-3.19/doc/manual/source/new-models.rst
--- ns-3.18.1/doc/manual/source/new-models.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/doc/manual/source/new-models.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,8 +1,8 @@
 .. include:: replace.txt
 .. highlight:: cpp
 
-Creating a new ns-3 model
--------------------------
+Creating a new |ns3| model
+--------------------------
 
 This chapter walks through the design process of an |ns3| model.  In many
 research cases, users will not be satisfied to merely adapt existing models, but
@@ -11,7 +11,16 @@
 of how one might approach this problem and proceed through a design and
 implementation.
 
-Design-approach
+.. note:: Documentation
+
+   Here we focus on the process of creating new models
+   and new modules, and some of the design choices involved.
+   For the sake of clarity, we defer discussion of the
+   *mechanics* of documenting models and source code to the
+   :doc:`Documentation <documentation>` chapter.
+
+
+Design Approach
 ***************
 
 Consider how you want it to work; what should it do. Think about these things:
@@ -26,13 +35,13 @@
   should I avoid any dependence on IPv4 if I want it to also be used by IPv6?
   Should I avoid any dependency on IP at all?
 
-Do not be hesitant to contact the ns-3-users or ns-developers list if you have
+Do not be hesitant to contact the `ns-3-users` or `ns-developers` list if you have
 questions. In particular, it is important to think about the public API of your
 new model and ask for feedback. It also helps to let others know of your work in
 case you are interested in collaborators.
 
-Example: ErrorModel
-+++++++++++++++++++
+Example: `ErrorModel`
++++++++++++++++++++++
 
 An error model exists in |ns2|. It allows packets to be passed to a stateful
 object that determines, based on a random variable, whether the packet is
@@ -44,7 +53,7 @@
 corruption occurred.  Note that depending on the error model, the packet data
 buffer may or may not be corrupted.  Let's call this function "IsCorrupt()".
 
-So far, in our design, we have:::
+So far, in our design, we have::
 
     class ErrorModel
     {
@@ -95,7 +104,7 @@
 NetDevice level.
 
 After some thinking and looking at existing |ns2| code, here is a sample API of
-a base class and first subclass that could be posted for initial review:::
+a base class and first subclass that could be posted for initial review::
 
     class ErrorModel 
     {
@@ -158,16 +167,16 @@
 will collide with the existing error model. The below is just an outline of how
 ErrorModel was built that you can adapt to other models.
 
-Review the ns-3 coding style document
-+++++++++++++++++++++++++++++++++++++
+Review the |ns3| Coding Style Document
+++++++++++++++++++++++++++++++++++++++
 
 At this point, you may want to pause and read the |ns3| coding style document,
 especially if you are considering to contribute your code back to the project.
 The coding style document is linked off the main project page: `ns-3 coding
 style <http://www.nsnam.org/developers/contributing-code/coding-style/>`_.
 
-Decide where in the source tree the model will reside in
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+Decide Where in the Source Tree the Model Should Reside
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 All of the |ns3| model source code is in the directory ``src/``.  You will need
 to choose which subdirectory it resides in. If it is new model code of some
@@ -178,8 +187,8 @@
 makes sense to implement this in the ``src/network/`` module where |ns3|
 packets are implemented.  
 
-waf and wscript
-+++++++++++++++
+`waf` and `wscript`
++++++++++++++++++++
 
 |ns3| uses the `Waf <http://www.freehackers.org/~tnagy/waf.html>`_ build system.
 You will want to integrate your new |ns3| uses the Waf build system. You will
@@ -193,7 +202,7 @@
 Now, pop up to the top level directory and type "./test.py".  You
 shouldn't have broken anything by this operation.
 
-include guards
+Include Guards
 ++++++++++++++
 
 Next, let's add some `include guards
@@ -204,8 +213,8 @@
     ...
     #endif
 
-namespace ns3
-+++++++++++++
+`namespace ns3`
++++++++++++++++
 
 |ns3| uses the |ns3| `namespace
 <http://en.wikipedia.org/wiki/Namespace_(computer_science)#Use_in_common_languages>`_
@@ -217,7 +226,7 @@
     }
 
 At this point, we have some skeletal files in which we can start defining
-our new classes. The header file looks like this:::
+our new classes. The header file looks like this::
 
     #ifndef ERROR_MODEL_H
     #define ERROR_MODEL_H
@@ -227,7 +236,7 @@
     } // namespace ns3
     #endif
 
-while the ``error-model.cc`` file simply looks like this:::
+while the ``error-model.cc`` file simply looks like this::
 
     #include "error-model.h"
 
@@ -244,8 +253,8 @@
 At this point, we're still working on some scaffolding, but we can begin to
 define our classes, with the functionality to be added later.
 
-use of class Object?
-++++++++++++++++++++
+Inherit from the `Object` Class?
+++++++++++++++++++++++++++++++++
 
 This is an important design step; whether to use class :cpp:class:`Object` as a
 base class for your new classes.
@@ -268,7 +277,7 @@
 instances of this object across the |ns3| public API, so class
 :cpp:class:`Object` is appropriate for us.
 
-initial classes
+Initial Classes
 +++++++++++++++
 
 One way to proceed is to start by defining the bare minimum functions and see if
@@ -374,28 +383,28 @@
 registration of the class into the system.  The :ref:`Object-model` chapter
 discusses this in more detail.
 
-how to include files from elsewhere
-+++++++++++++++++++++++++++++++++++
+Including External Files
+++++++++++++++++++++++++
 
-log component 
-+++++++++++++
+Logging Support
++++++++++++++++
 
 *Here, write a bit about adding |ns3| logging macros. Note that
 LOG_COMPONENT_DEFINE is done outside the namespace ns3*
 
-constructor, empty function prototypes
+Constructor, Empty Function Prototypes
 ++++++++++++++++++++++++++++++++++++++
 
-key variables (default values, attributes)
+Key Variables (Default Values, Attributes)
 ++++++++++++++++++++++++++++++++++++++++++
 
-test program 1
+Test Program 1
 ++++++++++++++
 
 Object Framework
 ++++++++++++++++
 
-Adding-a-sample-script
+Adding a Sample Script
 **********************
 
 At this point, one may want to try to take the basic scaffolding defined above
@@ -404,7 +413,7 @@
 API modifications need to be made. Once this is done, we will return to building
 out the functionality of the ErrorModels themselves.
 
-Add basic support in the class
+Add Basic Support in the Class
 ++++++++++++++++++++++++++++++
 
 ::
@@ -435,7 +444,7 @@
                        MakePointerAccessor (&PointToPointNetDevice::m_receiveErrorModel),
                        MakePointerChecker<ErrorModel> ())
 
-Plumb into the system
+Plumb Into the System
 +++++++++++++++++++++
 
 ::
@@ -469,7 +478,7 @@
         }
     }
 
-Create null functional script
+Create Null Functional Script
 +++++++++++++++++++++++++++++
 
 ::
@@ -499,8 +508,8 @@
 "Corrupt!" for each packet received at node n3. Next, we return to the error
 model to add in a subclass that performs more interesting error modeling.
 
-Add subclass
-************
+Add a Subclass
+**************
 
 The trivial base class ErrorModel does not do anything interesting, but it
 provides a useful base class interface (Corrupt () and Reset ()), forwarded to
@@ -523,7 +532,7 @@
   of granularity.
 * Ability to enable/disable (default is enabled)
 
-How to subclass
+How to Subclass
 +++++++++++++++
 
 We declare BasicErrorModel to be a subclass of ErrorModel as follows,::
@@ -541,7 +550,7 @@
     }
 
 and configure the subclass GetTypeId function by setting a unique TypeId string
-and setting the Parent to ErrorModel:::
+and setting the Parent to ErrorModel::
 
     TypeId RateErrorModel::GetTypeId (void)
     {
@@ -550,12 +559,12 @@
         .AddConstructor<RateErrorModel> ()
       ...
 
-Build-core-functions-and-unit-tests
+Build Core Functions and Unit Tests
 ***********************************
 
-assert macros
+Assert Macros
 +++++++++++++
 
-Writing unit tests
+Writing Unit Tests
 ++++++++++++++++++
 
diff -Naur ns-3.18.1/doc/manual/source/object-model.rst ns-3.19/doc/manual/source/object-model.rst
--- ns-3.18.1/doc/manual/source/object-model.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/doc/manual/source/object-model.rst	2013-12-20 09:44:50.000000000 -0800
@@ -27,7 +27,7 @@
 C++ objects, in general, provide common object-oriented capabilities 
 (abstraction, encapsulation, inheritance, and polymorphism) that are part 
 of classic object-oriented design. |ns3| objects make use of these 
-properties; for instance:::
+properties; for instance::
 
     class Address
     {
@@ -130,7 +130,7 @@
 frameworks available. Specifically, reference counted objects are usually
 allocated using a templated Create or CreateObject method, as follows.
 
-For objects deriving from class :cpp:class:`Object`:::
+For objects deriving from class :cpp:class:`Object`::
 
     Ptr<WifiNetDevice> device = CreateObject<WifiNetDevice> ();
 
@@ -139,7 +139,7 @@
 
 For objects deriving from class :cpp:class:`SimpleRefCount`, or other objects
 that support usage of the smart pointer class, a templated helper function is
-available and recommended to be used:::
+available and recommended to be used::
 
     Ptr<B> b = Create<B> ();
 
@@ -218,7 +218,7 @@
 implementation of IPv4 previously aggregated to it. The client code wishes to
 configure a default route. To do so, it must access an object within the node
 that has an interface to the IP forwarding configuration. It performs the
-following:::
+following::
 
     Ptr<Ipv4> ipv4 = m_node->GetObject<Ipv4> ();
 
@@ -281,7 +281,7 @@
 
 The answer to this is that in many situations, both techniques will work.
 |ns3| provides a templated function for making the syntax of Object
-dynamic casting much more user friendly:::
+dynamic casting much more user friendly::
 
     template <typename T1, typename T2>
     Ptr<T1>
diff -Naur ns-3.18.1/doc/manual/source/support.rst ns-3.19/doc/manual/source/support.rst
--- ns-3.18.1/doc/manual/source/support.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/doc/manual/source/support.rst	2013-12-20 09:44:50.000000000 -0800
@@ -5,6 +5,7 @@
 
    new-models
    new-modules
+   documentation
    enable-modules
    enable-tests
    troubleshoot
diff -Naur ns-3.18.1/doc/manual/source/tracing.rst ns-3.19/doc/manual/source/tracing.rst
--- ns-3.18.1/doc/manual/source/tracing.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/doc/manual/source/tracing.rst	2013-12-20 09:44:50.000000000 -0800
@@ -244,7 +244,7 @@
 The first thing to do is to read the path backward. The last segment of the path
 must be an ``Attribute`` of an ``Object``. In fact, if you had a pointer to the
 ``Object`` that has the "CongestionWindow" ``Attribute`` handy (call it
-``theObject``), you could write this just like the previous example:::
+``theObject``), you could write this just like the previous example::
 
   void CwndTracer (uint32_t oldval, uint32_t newval) {}
 
@@ -314,7 +314,7 @@
 primarily "Building Topologies," 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:::
+Perhaps you will recall seeing some of these variations::
 
   pointToPoint.EnablePcapAll ("second");
   pointToPoint.EnablePcap ("second", p2pNodes.Get (0)->GetId (), 0);
@@ -509,7 +509,7 @@
 
 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:::
+given device, one could::
 
   Ptr<NetDevice> nd;
   ...
@@ -600,7 +600,7 @@
 
 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:::
+refer to a single file::
 
   Ptr<NetDevice> nd1;
   Ptr<NetDevice> nd2;
@@ -632,7 +632,7 @@
 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:::
+wrapper, you can use that form as well::
 
   Names::Add ("client" ...);
   Names::Add ("client/eth0" ...);
@@ -660,7 +660,7 @@
 
 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:::
+traces into a single file is accomplished similarly to the examples above::
 
   NetDeviceContainer d = ...;
   ...
@@ -768,7 +768,7 @@
 ``Node`` and ``NetDevice`` pair constraints, we use protocol and interface
 constraints.
 
-Note that just like in the device version, there are six methods:::
+Note that just like in the device version, there are six methods::
 
   void EnablePcapIpv4 (std::string prefix, Ptr<Ipv4> ipv4, uint32_t interface);
   void EnablePcapIpv4 (std::string prefix, std::string ipv4Name, uint32_t interface);
@@ -948,7 +948,7 @@
 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:::
+example above::
 
   Ptr<Ipv4> protocol1 = node1->GetObject<Ipv4> ();
   Ptr<Ipv4> protocol2 = node2->GetObject<Ipv4> ();
@@ -978,7 +978,7 @@
 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:::
+stream wrapper, you can use that form as well::
 
   Names::Add ("node1Ipv4" ...);
   Names::Add ("node2Ipv4" ...);
@@ -1011,7 +1011,7 @@
 
 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:::
+traces into a single file is accomplished similarly to the examples above::
 
   NodeContainer nodes;
   ...
diff -Naur ns-3.18.1/doc/manual/source/troubleshoot.rst ns-3.19/doc/manual/source/troubleshoot.rst
--- ns-3.18.1/doc/manual/source/troubleshoot.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/doc/manual/source/troubleshoot.rst	2013-12-20 09:44:50.000000000 -0800
@@ -21,7 +21,7 @@
 run-time errors, and can commonly occur when memory is corrupted or pointer
 values are unexpectedly null.
 
-Here is an example of what might occur:::
+Here is an example of what might occur::
 
     $ ./waf --run tcp-point-to-point
     Entering directory '/home/tomh/ns-3-nsc/build'
diff -Naur ns-3.18.1/doc/models/Makefile ns-3.19/doc/models/Makefile
--- ns-3.18.1/doc/models/Makefile	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/doc/models/Makefile	2013-12-20 09:44:50.000000000 -0800
@@ -34,6 +34,7 @@
 	$(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 \
@@ -66,9 +67,19 @@
 	$(SRC)/uan/doc/uan.rst \
 	$(SRC)/topology-read/doc/topology.rst \
 	$(SRC)/spectrum/doc/spectrum.rst \
+	$(SRC)/stats/doc/adaptor.rst \
+	$(SRC)/stats/doc/aggregator.rst \
+	$(SRC)/stats/doc/collector.rst \
+	$(SRC)/stats/doc/data-collection-helpers.rst \
+	$(SRC)/stats/doc/data-collection-overview.rst \
+	$(SRC)/stats/doc/data-collection.rst \
+	$(SRC)/stats/doc/probe.rst \
+	$(SRC)/stats/doc/scope-and-limitations.rst \
 	$(SRC)/stats/doc/statistics.rst \
 	$(SRC)/netanim/doc/animation.rst \
 	$(SRC)/flow-monitor/doc/flow-monitor.rst \
+	$(SRC)/wave/doc/wave.rst \
+	$(SRC)/sixlowpan/doc/sixlowpan.rst \
 
 # list all model library figure files that need to be copied to 
 # $SOURCETEMP/figures.  For each figure to be included in all
@@ -106,12 +117,20 @@
 	$(SRC)/lte/doc/source/figures/lte-arch-ue-ctrl.dia \
 	$(SRC)/lte/doc/source/figures/lte-enb-phy.dia \
 	$(SRC)/lte/doc/source/figures/lte-ue-phy.dia \
+	$(SRC)/lte/doc/source/figures/lte-epc-x2-handover-seq-diagram.dia \
 	$(SRC)/lte/doc/source/figures/lte-epc-e2e-data-protocol-stack.dia \
 	$(SRC)/lte/doc/source/figures/lte-interference-test-scenario.dia \
 	$(SRC)/lte/doc/source/figures/lte-subframe-structure.dia \
 	$(SRC)/lte/doc/source/figures/lte-epc-x2-interface.dia \
 	$(SRC)/lte/doc/source/figures/lte-harq-architecture.dia \
 	$(SRC)/lte/doc/source/figures/lte-harq-processes-scheme.dia \
+	$(SRC)/lte/doc/source/figures/ue-meas-consumer.dia \
+	$(SRC)/lte/doc/source/figures/ue-meas-piecewise-motion.dia \
+	$(SRC)/lte/doc/source/figures/ue-meas-piecewise-a1.dia \
+	$(SRC)/lte/doc/source/figures/ue-meas-piecewise-a1-hys.dia \
+	$(SRC)/lte/doc/source/figures/lte-cell-selection-timeline.dia \
+	$(SRC)/lte/doc/source/figures/lte-cell-selection-scenario.dia \
+	$(SRC)/lte/doc/source/figures/lte-handover-target-scenario.dia \
 	$(SRC)/lte/doc/source/figures/lena-dual-stripe.eps \
 	$(SRC)/lte/doc/source/figures/lte-mcs-index.eps \
 	$(SRC)/lte/doc/source/figures/lenaThrTestCase1.eps \
@@ -128,8 +147,8 @@
 	$(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-handover-seq-diagram.eps \
 	$(SRC)/lte/doc/source/figures/lte-epc-x2-entity-saps.eps \
+	$(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 \
 	$(SRC)/lte/doc/source/figures/helpers.pdf \
@@ -150,8 +169,6 @@
 	$(SRC)/lte/doc/source/figures/lte-enb-rrc-states.png \
 	$(SRC)/lte/doc/source/figures/lte-ue-rrc-states.pdf \
 	$(SRC)/lte/doc/source/figures/lte-ue-rrc-states.png \
-	$(SRC)/lte/doc/source/figures/lte-handover-algorithm.pdf \
-	$(SRC)/lte/doc/source/figures/lte-handover-algorithm.png \
 	$(SRC)/lte/doc/source/figures/fading_pedestrian.pdf \
 	$(SRC)/lte/doc/source/figures/fading_pedestrian.png \
 	$(SRC)/lte/doc/source/figures/fading_vehicular.pdf \
@@ -182,9 +199,20 @@
 	$(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-handover-campaign-rem.pdf \
+	$(SRC)/lte/doc/source/figures/lte-handover-campaign-rem.png \
+	$(SRC)/lte/doc/source/figures/lte-legacy-handover-algorithm.pdf \
+	$(SRC)/lte/doc/source/figures/lte-legacy-handover-algorithm.png \
 	$(SRC)/uan/doc/auvmobility-classes.dia \
 	$(SRC)/stats/doc/Stat-framework-arch.png \
 	$(SRC)/stats/doc/Wifi-default.png \
+	$(SRC)/stats/doc/dcf-overview.dia \
+	$(SRC)/stats/doc/dcf-overview-with-aggregation.dia \
+	$(SRC)/stats/doc/file-example.png \
+	$(SRC)/stats/doc/gnuplot-aggregator.png \
+	$(SRC)/stats/doc/gnuplot-example.png \
+	$(SRC)/stats/doc/gnuplot-helper-example.png \
+	$(SRC)/stats/doc/seventh-packet-byte-count.png \
 	$(SRC)/netanim/doc/figures/Dumbbell.png \
 	$(SRC)/netanim/doc/figures/Dumbbell.pdf \
 	$(SRC)/netanim/doc/figures/PacketStatistics.png \
@@ -225,6 +253,8 @@
 	$(FIGURES)/WifiArchitecture.eps \
 	$(FIGURES)/snir.eps \
 	$(FIGURES)/WimaxArchitecture.eps \
+	$(FIGURES)/dcf-overview.eps \
+	$(FIGURES)/dcf-overview-with-aggregation.eps \
 	$(FIGURES)/epc-ctrl-arch.eps \
 	$(FIGURES)/epc-data-flow-dl.eps \
 	$(FIGURES)/epc-data-flow-ul.eps \
@@ -246,6 +276,13 @@
 	$(FIGURES)/lte-epc-x2-interface.eps \
 	$(FIGURES)/lte-harq-architecture.eps \
 	$(FIGURES)/lte-harq-processes-scheme.eps \
+	$(FIGURES)/ue-meas-consumer.eps \
+	$(FIGURES)/ue-meas-piecewise-motion.eps \
+	$(FIGURES)/ue-meas-piecewise-a1.eps \
+	$(FIGURES)/ue-meas-piecewise-a1-hys.eps \
+	$(FIGURES)/lte-cell-selection-timeline.eps \
+	$(FIGURES)/lte-cell-selection-scenario.eps \
+	$(FIGURES)/lte-handover-target-scenario.eps \
 	$(FIGURES)/lena-dual-stripe.eps \
 	$(FIGURES)/lte-mcs-index.eps \
 	$(FIGURES)/lenaThrTestCase1.eps \
@@ -264,6 +301,7 @@
 	$(FIGURES)/lte-rlc-data-retx-ul.eps \
 	$(FIGURES)/lte-epc-x2-handover-seq-diagram.eps \
 	$(FIGURES)/lte-epc-x2-entity-saps.eps \
+	$(FIGURES)/lte-strongest-cell-handover-algorithm.eps \
 	$(FIGURES)/auvmobility-classes.eps \
 
 # rescale pdf figures as necessary
@@ -299,8 +337,6 @@
 $(FIGURES)/lte-subframe-structure.pdf_width = 2in
 $(FIGURES)/mac-random-access-contention.pdf_width = 10cm
 $(FIGURES)/mac-random-access-noncontention.pdf_width = 15cm
-$(FIGURES)/lte-ue-rrc-states.pdf_width = 7cm
-$(FIGURES)/lte-handover-algorithm.pdf_width = 10cm
 $(FIGURES)/helpers.pdf_width = 8cm
 $(FIGURES)/auvmobility-classes.pdf_width = 10cm
 
diff -Naur ns-3.18.1/doc/models/source/conf.py ns-3.19/doc/models/source/conf.py
--- ns-3.18.1/doc/models/source/conf.py	2013-11-15 15:33:25.000000000 -0800
+++ ns-3.19/doc/models/source/conf.py	2013-12-20 09:44:50.000000000 -0800
@@ -41,16 +41,16 @@
 
 # General information about the project.
 project = u'ns-3'
-copyright = u'2011, ns-3 project'
+copyright = u'2008-13, ns-3 project'
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.18.1'
+version = 'ns-3.19'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.18.1'
+release = 'ns-3.19'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.18.1/doc/models/source/emulation-overview.rst ns-3.19/doc/models/source/emulation-overview.rst
--- ns-3.18.1/doc/models/source/emulation-overview.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/doc/models/source/emulation-overview.rst	2013-12-20 09:44:50.000000000 -0800
@@ -83,5 +83,6 @@
 
 .. toctree::
 
+  emu
   fd-net-device
   tap
diff -Naur ns-3.18.1/doc/models/source/index.rst ns-3.19/doc/models/source/index.rst
--- ns-3.18.1/doc/models/source/index.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/doc/models/source/index.rst	2013-12-20 09:44:50.000000000 -0800
@@ -14,7 +14,7 @@
 ``doc/models`` directory of ns-3's source code.
 
 .. toctree::
-   :maxdepth: 2
+   :maxdepth: 1
 
    organization
    animation
@@ -26,6 +26,7 @@
    buildings
    click
    csma
+   data-collection
    dsdv
    dsr
    emulation-overview
@@ -41,8 +42,10 @@
    openflow-switch
    point-to-point
    propagation
-   statistics
+   spectrum
+   sixlowpan
    topology
    uan
+   wave
    wifi
    wimax
diff -Naur ns-3.18.1/doc/models/source/organization.rst ns-3.19/doc/models/source/organization.rst
--- ns-3.18.1/doc/models/source/organization.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/doc/models/source/organization.rst	2013-12-20 09:44:50.000000000 -0800
@@ -34,7 +34,13 @@
 exist on the `project wiki <http://www.nsnam.org/wiki>`_.
 
 A sample outline of how to write model library documentation can be
-found in :mod:`src/template/doc`.
+found by executing the ``create-module.py`` program and looking at the
+template created in the file ``new-module/doc/new-module.rst``. 
+
+.. sourcecode:: bash
+
+  $ cd src
+  $ ./create-module.py new-module
 
 The remainder of this document is organized alphabetically by module name.
 
diff -Naur ns-3.18.1/doc/ns3_html_theme/get_version.sh ns-3.19/doc/ns3_html_theme/get_version.sh
--- ns-3.18.1/doc/ns3_html_theme/get_version.sh	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/doc/ns3_html_theme/get_version.sh	2013-12-20 09:44:50.000000000 -0800
@@ -21,7 +21,7 @@
 # to force us into the public case.)
 #
 # The approach to identify cases 1 & 2 is to test:
-# a.  We're on nsnam.org (actually, nsnam.ece.gatech.edu), and
+# a.  We're on nsnam.org (actually, nsnam-www.coe-hosted.gatech.edu), and
 # b.  We're in the tmp build directory, /tmp/daily-nsnam/
 #     (This is the directory used by the update-* scripts
 #     run by cron jobs.)
@@ -91,9 +91,9 @@
     esac
 done
 
-# Hostname, fully qualified, e.g. nsnam.ece.gatech.edu
+# Hostname, fully qualified, e.g. nsnam-www.coe-hosted.gatech.edu
 HOST=`hostname`
-NSNAM="nsnam.ece.gatech.edu"
+NSNAM="nsnam-www.coe-hosted.gatech.edu"
 
 # Build directory
 DAILY="^/tmp/daily-nsnam/"
@@ -212,4 +212,4 @@
 say
 say "outf = $outf:"
 cat -n $outf
-say Done.
\ No newline at end of file
+say Done.
diff -Naur ns-3.18.1/doc/tutorial/source/conf.py ns-3.19/doc/tutorial/source/conf.py
--- ns-3.18.1/doc/tutorial/source/conf.py	2013-11-15 15:33:45.000000000 -0800
+++ ns-3.19/doc/tutorial/source/conf.py	2013-12-20 09:44:50.000000000 -0800
@@ -41,16 +41,16 @@
 
 # General information about the project.
 project = u'ns-3'
-copyright = u'2010, ns-3 project'
+copyright = u'2008-13, ns-3 project'
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.18.1'
+version = 'ns-3.19'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.18.1'
+release = 'ns-3.19'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.18.1/doc/tutorial-pt-br/source/conf.py ns-3.19/doc/tutorial-pt-br/source/conf.py
--- ns-3.18.1/doc/tutorial-pt-br/source/conf.py	2013-11-15 15:34:04.000000000 -0800
+++ ns-3.19/doc/tutorial-pt-br/source/conf.py	2013-12-20 09:44:50.000000000 -0800
@@ -42,7 +42,7 @@
 
 # General information about the project.
 project = u'ns-3'
-copyright = u'2008-11, ns-3 project'
+copyright = u'2008-13, ns-3 project'
 
 
 # The version info for the project you're documenting, acts as replacement for
@@ -50,9 +50,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.18.1'
+version = 'ns-3.19'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.18.1'
+release = 'ns-3.19'
 
 # The language for content autogenerated by . Refer to babel documentation
 # for a list of supported languages.
diff -Naur ns-3.18.1/examples/stats/wifi-example-db.sh ns-3.19/examples/stats/wifi-example-db.sh
--- ns-3.18.1/examples/stats/wifi-example-db.sh	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/examples/stats/wifi-example-db.sh	2013-12-20 09:44:50.000000000 -0800
@@ -70,7 +70,8 @@
     order by abs(exp.input) ASC;"
 
 sqlite3 -noheader data.db "$CMD" > wifi-default.data
-sed -i "s/|/   /" wifi-default.data
+sed -i.bak "s/|/   /" wifi-default.data
+rm wifi-default.data.bak
 gnuplot wifi-example.gnuplot
 
 echo "Done; data in wifi-default.data, plot in wifi-default.eps"
diff -Naur ns-3.18.1/examples/tcp/tcp-nsc-comparison.cc ns-3.19/examples/tcp/tcp-nsc-comparison.cc
--- ns-3.18.1/examples/tcp/tcp-nsc-comparison.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/examples/tcp/tcp-nsc-comparison.cc	2013-12-20 09:44:50.000000000 -0800
@@ -1,180 +1,180 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2012 NICT
- *
- * 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: Hajime Tazaki <tazaki@nict.go.jp>
- *
- * This code is a modified version of the code used for the the experiments in the paper
- * "DCE Cradle: Simulate Network Protocols with Real Stacks for Better Realism"
- * by Hajime Tazaki, Frederic Urbani and Thierry Turlett presented at WNS3 2013
- *
- */
-
-#include "ns3/log.h"
-#include "ns3/core-module.h"
-#include "ns3/network-module.h"
-#include "ns3/internet-module.h"
-#include "ns3/point-to-point-module.h"
-#include "ns3/applications-module.h"
-#include "ns3/flow-monitor-module.h"
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE ("TcpNscComparison");
-
-std::string m_stack = "nsc-linux";
-std::string sock_factory;
-int m_seed = 1;
-double startTime = 4.0;
-double stopTime = 20.0;
-uint32_t m_nNodes = 2;
-bool enablePcap = false;
-
-int
-main (int argc, char *argv[])
-{
-
-  //ensure the ns3 TCP default values match what nsc is using
-  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1448));
-  Config::SetDefault ("ns3::TcpSocket::DelAckCount", UintegerValue (1));
-
-  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 ("stopTime", "duration", stopTime);
-  cmd.AddValue ("enablePcap", "pcap", enablePcap);
-  cmd.Parse (argc, argv);
-
-  SeedManager::SetSeed (m_seed);
-
-  NodeContainer lefts, routers, rights, nodes;
-  lefts.Create (m_nNodes);
-  routers.Create (2);
-  rights.Create (m_nNodes);
-  nodes = NodeContainer (lefts, routers, rights);
-
-  InternetStackHelper internetStack;
-
-  GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
-  if (m_stack == "ns3")
-    {
-      sock_factory = "ns3::TcpSocketFactory";
-      internetStack.Install (nodes);
-    }
-  else if (m_stack == "nsc-linux")
-    {
-      internetStack.Install (routers);
-      sock_factory = "ns3::TcpSocketFactory";
-      internetStack.SetTcp ("ns3::NscTcpL4Protocol",
-                            "Library", StringValue ("liblinux2.6.26.so"));
-      internetStack.Install (lefts);
-      internetStack.Install (rights);
-
-      //these are 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"));
-    }
-
-  PointToPointHelper pointToPoint;
-  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
-  pointToPoint.SetChannelAttribute ("Delay", StringValue ("1ns"));
-
-  Ipv4AddressHelper address;
-  Ipv4InterfaceContainer interfaces;
-
-  NetDeviceContainer dev0, dev1, dev2;
-  for (uint32_t i = 0; i < m_nNodes; i++)
-    {
-      std::ostringstream oss;
-      oss << "10.0." << i << ".0";
-      address.SetBase (oss.str ().c_str (), "255.255.255.0");
-      dev0 = pointToPoint.Install (NodeContainer (lefts.Get (i), routers.Get (0)));
-      address.Assign (dev0);
-    }
-
-  // bottle neck link
-  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("2Mbps"));
-  pointToPoint.SetChannelAttribute ("Delay", StringValue ("100ms"));
-  dev1 = pointToPoint.Install (NodeContainer (routers.Get (0), routers.Get (1)));
-
-  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
-  pointToPoint.SetChannelAttribute ("Delay", StringValue ("1ns"));
-  // for right links
-  for (uint32_t i = 0; i < m_nNodes; i++)
-    {
-      std::ostringstream oss;
-      oss << "10.2." << i << ".0";
-      address.SetBase (oss.str ().c_str (), "255.255.255.0");
-      dev2 = pointToPoint.Install (NodeContainer (routers.Get (1), rights.Get (i)));
-      address.Assign (dev2);
-    }
-
-  // bottle neck link
-  Ptr<RateErrorModel> em1 =
-    CreateObjectWithAttributes<RateErrorModel> (
-      "ErrorRate", DoubleValue (0.05),
-      "ErrorUnit", EnumValue (RateErrorModel::ERROR_UNIT_PACKET)
-      );
-  dev1.Get (1)->SetAttribute ("ReceiveErrorModel", PointerValue (em1));
-
-  address.SetBase ("10.1.0.0", "255.255.255.0");
-  address.Assign (dev1);
-  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
-
-  ApplicationContainer apps;
-
-  OnOffHelper onoff = OnOffHelper (sock_factory,
-                                   InetSocketAddress (Ipv4Address ("10.2.0.2"), 2000));
-  onoff.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
-  onoff.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
-
-  // Flow 1 - n
-  for (uint32_t i = 0; i < m_nNodes; i++)
-    {
-      std::ostringstream oss;
-      oss << "10.2." << i << ".2";
-      onoff.SetAttribute ("Remote", AddressValue (InetSocketAddress (Ipv4Address (oss.str ().c_str ()), 2000)));
-      onoff.SetAttribute ("PacketSize", StringValue ("1024"));
-      onoff.SetAttribute ("DataRate", StringValue ("1Mbps"));
-      onoff.SetAttribute ("StartTime", TimeValue (Seconds (startTime)));
-      apps = onoff.Install (lefts.Get (i));
-    }
-
-  PacketSinkHelper sink = PacketSinkHelper (sock_factory,
-                                            InetSocketAddress (Ipv4Address::GetAny (), 2000));
-  apps = sink.Install (rights);
-  apps.Start (Seconds (3.9999));
-
-  pointToPoint.EnablePcapAll ("nsc.pcap");
-
-  Simulator::Stop (Seconds (stopTime));
-  Simulator::Run ();
-
-  Ptr<PacketSink> pktsink;
-  std::cout << "Total ";
-  for (uint32_t i = 0; i < m_nNodes; i++)
-    {
-      pktsink = apps.Get (i)->GetObject<PacketSink> ();
-      std::cout << "Rx(" << i << ") = " << pktsink->GetTotalRx () <<
-      " bytes (" << pktsink->GetTotalRx () * 8 / (stopTime - startTime) << " bps), ";
-    }
-  std::cout << std::endl;
-
-  Simulator::Destroy ();
-  return 0;
-}
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 NICT
+ *
+ * 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: Hajime Tazaki <tazaki@nict.go.jp>
+ *
+ * This code is a modified version of the code used for the the experiments in the paper
+ * "DCE Cradle: Simulate Network Protocols with Real Stacks for Better Realism"
+ * by Hajime Tazaki, Frederic Urbani and Thierry Turlett presented at WNS3 2013
+ *
+ */
+
+#include "ns3/log.h"
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/flow-monitor-module.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("TcpNscComparison");
+
+std::string m_stack = "nsc-linux";
+std::string sock_factory;
+int m_seed = 1;
+double startTime = 4.0;
+double stopTime = 20.0;
+uint32_t m_nNodes = 2;
+bool enablePcap = false;
+
+int
+main (int argc, char *argv[])
+{
+
+  //ensure the ns3 TCP default values match what nsc is using
+  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1448));
+  Config::SetDefault ("ns3::TcpSocket::DelAckCount", UintegerValue (1));
+
+  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 ("stopTime", "duration", stopTime);
+  cmd.AddValue ("enablePcap", "pcap", enablePcap);
+  cmd.Parse (argc, argv);
+
+  SeedManager::SetSeed (m_seed);
+
+  NodeContainer lefts, routers, rights, nodes;
+  lefts.Create (m_nNodes);
+  routers.Create (2);
+  rights.Create (m_nNodes);
+  nodes = NodeContainer (lefts, routers, rights);
+
+  InternetStackHelper internetStack;
+
+  GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
+  if (m_stack == "ns3")
+    {
+      sock_factory = "ns3::TcpSocketFactory";
+      internetStack.Install (nodes);
+    }
+  else if (m_stack == "nsc-linux")
+    {
+      internetStack.Install (routers);
+      sock_factory = "ns3::TcpSocketFactory";
+      internetStack.SetTcp ("ns3::NscTcpL4Protocol",
+                            "Library", StringValue ("liblinux2.6.26.so"));
+      internetStack.Install (lefts);
+      internetStack.Install (rights);
+
+      //these are 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"));
+    }
+
+  PointToPointHelper pointToPoint;
+  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
+  pointToPoint.SetChannelAttribute ("Delay", StringValue ("1ns"));
+
+  Ipv4AddressHelper address;
+  Ipv4InterfaceContainer interfaces;
+
+  NetDeviceContainer dev0, dev1, dev2;
+  for (uint32_t i = 0; i < m_nNodes; i++)
+    {
+      std::ostringstream oss;
+      oss << "10.0." << i << ".0";
+      address.SetBase (oss.str ().c_str (), "255.255.255.0");
+      dev0 = pointToPoint.Install (NodeContainer (lefts.Get (i), routers.Get (0)));
+      address.Assign (dev0);
+    }
+
+  // bottle neck link
+  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("2Mbps"));
+  pointToPoint.SetChannelAttribute ("Delay", StringValue ("100ms"));
+  dev1 = pointToPoint.Install (NodeContainer (routers.Get (0), routers.Get (1)));
+
+  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
+  pointToPoint.SetChannelAttribute ("Delay", StringValue ("1ns"));
+  // for right links
+  for (uint32_t i = 0; i < m_nNodes; i++)
+    {
+      std::ostringstream oss;
+      oss << "10.2." << i << ".0";
+      address.SetBase (oss.str ().c_str (), "255.255.255.0");
+      dev2 = pointToPoint.Install (NodeContainer (routers.Get (1), rights.Get (i)));
+      address.Assign (dev2);
+    }
+
+  // bottle neck link
+  Ptr<RateErrorModel> em1 =
+    CreateObjectWithAttributes<RateErrorModel> (
+      "ErrorRate", DoubleValue (0.05),
+      "ErrorUnit", EnumValue (RateErrorModel::ERROR_UNIT_PACKET)
+      );
+  dev1.Get (1)->SetAttribute ("ReceiveErrorModel", PointerValue (em1));
+
+  address.SetBase ("10.1.0.0", "255.255.255.0");
+  address.Assign (dev1);
+  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+  ApplicationContainer apps;
+
+  OnOffHelper onoff = OnOffHelper (sock_factory,
+                                   InetSocketAddress (Ipv4Address ("10.2.0.2"), 2000));
+  onoff.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+  onoff.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+
+  // Flow 1 - n
+  for (uint32_t i = 0; i < m_nNodes; i++)
+    {
+      std::ostringstream oss;
+      oss << "10.2." << i << ".2";
+      onoff.SetAttribute ("Remote", AddressValue (InetSocketAddress (Ipv4Address (oss.str ().c_str ()), 2000)));
+      onoff.SetAttribute ("PacketSize", StringValue ("1024"));
+      onoff.SetAttribute ("DataRate", StringValue ("1Mbps"));
+      onoff.SetAttribute ("StartTime", TimeValue (Seconds (startTime)));
+      apps = onoff.Install (lefts.Get (i));
+    }
+
+  PacketSinkHelper sink = PacketSinkHelper (sock_factory,
+                                            InetSocketAddress (Ipv4Address::GetAny (), 2000));
+  apps = sink.Install (rights);
+  apps.Start (Seconds (3.9999));
+
+  pointToPoint.EnablePcapAll ("nsc.pcap");
+
+  Simulator::Stop (Seconds (stopTime));
+  Simulator::Run ();
+
+  Ptr<PacketSink> pktsink;
+  std::cout << "Total ";
+  for (uint32_t i = 0; i < m_nNodes; i++)
+    {
+      pktsink = apps.Get (i)->GetObject<PacketSink> ();
+      std::cout << "Rx(" << i << ") = " << pktsink->GetTotalRx () <<
+      " bytes (" << pktsink->GetTotalRx () * 8 / (stopTime - startTime) << " bps), ";
+    }
+  std::cout << std::endl;
+
+  Simulator::Destroy ();
+  return 0;
+}
diff -Naur ns-3.18.1/RELEASE_NOTES ns-3.19/RELEASE_NOTES
--- ns-3.18.1/RELEASE_NOTES	2013-11-15 16:03:50.000000000 -0800
+++ ns-3.19/RELEASE_NOTES	2013-12-20 09:44:50.000000000 -0800
@@ -9,6 +9,120 @@
 Consult the file CHANGES.html for more detailed information about changed
 API and behavior across ns-3 releases.
 
+Release 3.19
+=============
+
+Availability
+------------
+This release is available from:
+http://www.nsnam.org/release/ns-allinone-3.19.tar.bz2
+
+Supported platforms
+-------------------
+These platforms have been tested; others may work also:
+- Fedora Core 20 (32 bit) with g++-4.8.2
+- Fedora Core 19 (32/64 bit) with g++-4.8.1
+- Ubuntu 13.10 (64 bit) with g++-4.8.1
+- Ubuntu 12.04.3 (32/64 bit) with g++-4.6.3
+- Ubuntu 10.04.4 LTS (64 bit) with g++-4.4.3
+- OS X Mavericks 10.9 with Xcode 5.0.1 and clang-500.2.79
+- OS X Mountain Lion 10.8.5 with Xcode 5 and g++-4.2.1
+- FreeBSD 9.2-RELEASE (64 bit) with clang-3.3
+
+New user-visible features
+-------------------------
+- Extension to UE measurements and improved handover algorithm models in LTE
+  module, as the outcome of GSoC 2013 project. The project also includes several
+  sub-features, such as:
+   - implementation of System Information Block Type 1 (SIB1);
+   - a new option for automatic UE attachment using Idle mode cell selection
+     procedure;
+   - improved configurability of UE measurements; and
+   - two options of handover algorithms for enabling automatic handover trigger
+     in LTE simulation: A2-A4-RSRQ and strongest cell (A3-RSRP).
+
+- A new FixedRoomPositionAllocator has been added to the buildings
+  module. It allows one to generate a random position uniformly
+  distributed in the volume of a chosen room inside a chosen building.  
+
+- A new attribute ns3::LteRlcAm::TxOpportunityForRetxAlwaysBigEnough
+  allows to overcome the lack for re-segmentation in the RLC AM
+  implementation by assuming that the size of a TxOpportunity is
+  always big enough for the RLC AM PDU to be retransmitted.
+
+- After some profiling, the code of LteMiErrorModel has been optimized
+  for speed, resulting in a significantly lower execution time of the
+  LTE model when used with the error model enabled.
+
+- A new WiFi extension for vehicular simulation support is available in 
+  the src/wave directory.  The current code represents an interim capability 
+  to realize an IEEE 802.11p-compliant device, but without the WAVE 
+  extensions (which are planned for a later patch).  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.  WAVE capabililties of switching between control and 
+  service channels, or using multiple radios, are not yet modelled.
+
+- A new IPv6 over Low power Wireless Personal Area Networks (6LoWPAN) model
+  is available.  Using ns-3's naming convention, the acronym is expanded
+  to SixLowPanNetDevice.   The SixLowPanNetDevice is able to act as a 
+  shim between IPv6 and a NetDevice, compressing IPv6 headers according 
+  to RFCs 4944 and 6262.  The SixLowPanNetDevice is meant to be used over 
+  IEEE 802.15.4 NetDevices, but it can be used on other NetDevices as 
+  well (see the manual for full details).  This model precedes the
+  general availability of an 802.15.4 model, so must be run in conjunction
+  with a wired NetDevice model for now, or with experimental versions of
+  802.15.4 models.
+
+- It is now possible to use Ipv6PacketInfoTag from UDP applications in the
+  same way as with Ipv4PacketInfoTag. See Doxygen for current limitations in
+  using Ipv[4,6]PacketInfoTag to set IP properties.
+  
+- Ipv[4,6]Interfaces not respecting the minimum MTU requirements (68 octects
+  for IPv4 and 1280 octects for IPv6) will be automatically set as Down.
+  
+- IPv6 addresses and routing tables are printed in a more conventional way,
+  closely matching the Linux "route -A inet6" command.
+
+- Additional time units (Year, Day, Hour, Minute) were added to the time
+  value class that represents simulation time; the largest unit prior to 
+  this addition was Second.
+
+- A new parallel scheduling algorithm based on null messages, a common 
+  parallel DES scheduling algorithm, has been added.  The null message 
+  scheduler has better scaling properties when running on some scenarios
+  with large numbers of nodes since it does not require a global 
+  communication.
+  
+Bugs fixed
+----------
+- Bug 1496 - Option to print log level in NS_LOG messages, and documentation.
+- Bug 1592 - Parsing bug in FlowMonitor example script
+- Bug 1756 - RLC AM Mode State Variable Bug
+- Bug 1763 - Message 3 should be sent using the UL GRANT in the RAR
+- Bug 1778 - Implement TapBridge::IsLinkUp() function
+- Bug 1777 - Implement the more direct way of "using" configuration of existing tap interface
+- Bug 1776 - Improve CRC performance for CsmaNetDevice in emulation modes
+- Bug 1788 - unused private field warning
+- Bug 1789 - missing test condition for sigma in buildings-shadowing-test
+- Bug 1796 - Ipv6PacketInfoTag is not filled by UdpSocketImpl::ForwardUp6
+- Bug 1798 - Changing the rate of onOffApplication might stop transmission
+- Bug 1802 - FlowMon header deserialization problem with IPv4 fragments
+- Bug 1803 - Lookup /NodeList/4/DeviceList/0/LteEnbRrc/UeMap/0 got no matches
+- Bug 1807 - Multiple bugs in Ipv4L3Protocol::LocalDeliver
+- Bug 1810 - IP packets can be sent on NetDevices not respecting the minimum MTU requirements
+- Bug 1814 - IPv6 Packet with length not multiple of 8 bytes are fragmented incorrectly.
+- Bug 1815 - Python bindings compilation with clang compiler toolchain
+- Bug 1816 - IPv4 fragmentation loses Packet tags
+
+Release 3.18.2
+==============
+
+ns-allinone-3.18.2 was released to include a bake configuration file update
+for Direct Code Execution.  The ns-3 code in this release was unchanged
+from that of ns-3.18.1.
+
 Release 3.18.1
 ==============
 
diff -Naur ns-3.18.1/scratch/scratch-simulator.cc ns-3.19/scratch/scratch-simulator.cc
--- ns-3.18.1/scratch/scratch-simulator.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/scratch/scratch-simulator.cc	2013-12-20 09:44:50.000000000 -0800
@@ -24,4 +24,7 @@
 main (int argc, char *argv[])
 {
   NS_LOG_UNCOND ("Scratch Simulator");
+
+  Simulator::Run ();
+  Simulator::Destroy ();
 }
diff -Naur ns-3.18.1/src/antenna/model/antenna-model.cc ns-3.19/src/antenna/model/antenna-model.cc
--- ns-3.18.1/src/antenna/model/antenna-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/antenna/model/antenna-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (AntennaModel);
+NS_OBJECT_ENSURE_REGISTERED (AntennaModel)
+  ;
 
 
 AntennaModel::AntennaModel ()
@@ -39,7 +40,7 @@
 {
 }
 
-TypeId 
+TypeId
 AntennaModel::GetTypeId ()
 {
   static TypeId tid = TypeId ("ns3::AntennaModel")
diff -Naur ns-3.18.1/src/antenna/model/cosine-antenna-model.cc ns-3.19/src/antenna/model/cosine-antenna-model.cc
--- ns-3.18.1/src/antenna/model/cosine-antenna-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/antenna/model/cosine-antenna-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (CosineAntennaModel);
+NS_OBJECT_ENSURE_REGISTERED (CosineAntennaModel)
+  ;
 
 
 TypeId 
diff -Naur ns-3.18.1/src/antenna/model/isotropic-antenna-model.cc ns-3.19/src/antenna/model/isotropic-antenna-model.cc
--- ns-3.18.1/src/antenna/model/isotropic-antenna-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/antenna/model/isotropic-antenna-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -29,7 +29,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (IsotropicAntennaModel);
+NS_OBJECT_ENSURE_REGISTERED (IsotropicAntennaModel)
+  ;
 
 
 TypeId 
diff -Naur ns-3.18.1/src/antenna/model/parabolic-antenna-model.cc ns-3.19/src/antenna/model/parabolic-antenna-model.cc
--- ns-3.18.1/src/antenna/model/parabolic-antenna-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/antenna/model/parabolic-antenna-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ParabolicAntennaModel);
+NS_OBJECT_ENSURE_REGISTERED (ParabolicAntennaModel)
+  ;
 
 
 TypeId 
diff -Naur ns-3.18.1/src/aodv/bindings/modulegen__gcc_ILP32.py ns-3.19/src/aodv/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/aodv/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/aodv/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -237,7 +237,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1686,10 +1686,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -4218,6 +4219,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -4228,6 +4234,11 @@
                    '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', 
@@ -4243,6 +4254,11 @@
                    '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', 
@@ -4268,6 +4284,11 @@
                    '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', 
@@ -4879,10 +4900,10 @@
     cls.add_method('SetProbeResp', 
                    'void', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAckPolicy(ns3::WifiMacHeader::QosAckPolicy arg0) [member function]
+    ## 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', 'arg0')])
+                   [param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAmsdu() [member function]
     cls.add_method('SetQosAmsdu', 
                    'void', 
@@ -5968,10 +5989,10 @@
     cls.add_method('Send', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'dest')])
-    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arg0) [member function]
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arpCache) [member function]
     cls.add_method('SetArpCache', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ArpCache >', 'arg0')])
+                   [param('ns3::Ptr< ns3::ArpCache >', 'arpCache')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
     cls.add_method('SetDevice', 
                    'void', 
diff -Naur ns-3.18.1/src/aodv/bindings/modulegen__gcc_LP64.py ns-3.19/src/aodv/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/aodv/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/aodv/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -237,7 +237,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1686,10 +1686,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -4218,6 +4219,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -4228,6 +4234,11 @@
                    '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', 
@@ -4243,6 +4254,11 @@
                    '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', 
@@ -4268,6 +4284,11 @@
                    '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', 
@@ -4879,10 +4900,10 @@
     cls.add_method('SetProbeResp', 
                    'void', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAckPolicy(ns3::WifiMacHeader::QosAckPolicy arg0) [member function]
+    ## 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', 'arg0')])
+                   [param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAmsdu() [member function]
     cls.add_method('SetQosAmsdu', 
                    'void', 
@@ -5968,10 +5989,10 @@
     cls.add_method('Send', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'dest')])
-    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arg0) [member function]
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arpCache) [member function]
     cls.add_method('SetArpCache', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ArpCache >', 'arg0')])
+                   [param('ns3::Ptr< ns3::ArpCache >', 'arpCache')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
     cls.add_method('SetDevice', 
                    'void', 
diff -Naur ns-3.18.1/src/aodv/doc/aodv.rst ns-3.19/src/aodv/doc/aodv.rst
--- ns-3.18.1/src/aodv/doc/aodv.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/aodv/doc/aodv.rst	2013-12-20 09:44:50.000000000 -0800
@@ -5,7 +5,7 @@
 
 This model implements the base specification of the Ad Hoc On-Demand 
 Distance Vector (AODV) protocol. The implementation is based on 
-[rfc3561]_.
+:rfc:`3561`.
 
 The model was written by Elena Buchatskaia and Pavel Boyko of ITTP RAS,
 and is based on the ns-2 AODV model developed by the CMU/MONARCH group
@@ -97,7 +97,6 @@
 References
 ++++++++++
 
-.. [rfc3561] RFC 3561 *Ad hoc On-Demand Distance Vector (AODV) Routing*
 
 Usage
 *****
diff -Naur ns-3.18.1/src/aodv/model/aodv-packet.cc ns-3.19/src/aodv/model/aodv-packet.cc
--- ns-3.18.1/src/aodv/model/aodv-packet.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/aodv/model/aodv-packet.cc	2013-12-20 09:44:50.000000000 -0800
@@ -34,7 +34,8 @@
 namespace aodv
 {
 
-NS_OBJECT_ENSURE_REGISTERED (TypeHeader);
+NS_OBJECT_ENSURE_REGISTERED (TypeHeader)
+  ;
 
 TypeHeader::TypeHeader (MessageType t) :
   m_type (t), m_valid (true)
@@ -146,7 +147,8 @@
 {
 }
 
-NS_OBJECT_ENSURE_REGISTERED (RreqHeader);
+NS_OBJECT_ENSURE_REGISTERED (RreqHeader)
+  ;
 
 TypeId
 RreqHeader::GetTypeId ()
@@ -285,7 +287,8 @@
   m_lifeTime = uint32_t (lifeTime.GetMilliSeconds ());
 }
 
-NS_OBJECT_ENSURE_REGISTERED (RrepHeader);
+NS_OBJECT_ENSURE_REGISTERED (RrepHeader)
+  ;
 
 TypeId
 RrepHeader::GetTypeId ()
@@ -427,7 +430,9 @@
 {
 }
 
-NS_OBJECT_ENSURE_REGISTERED (RrepAckHeader);
+NS_OBJECT_ENSURE_REGISTERED (RrepAckHeader)
+  ;
+  
 TypeId
 RrepAckHeader::GetTypeId ()
 {
@@ -492,7 +497,8 @@
 {
 }
 
-NS_OBJECT_ENSURE_REGISTERED (RerrHeader);
+NS_OBJECT_ENSURE_REGISTERED (RerrHeader)
+  ;
 
 TypeId
 RerrHeader::GetTypeId ()
diff -Naur ns-3.18.1/src/aodv/model/aodv-routing-protocol.cc ns-3.19/src/aodv/model/aodv-routing-protocol.cc
--- ns-3.18.1/src/aodv/model/aodv-routing-protocol.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/aodv/model/aodv-routing-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -48,7 +48,8 @@
 {
 namespace aodv
 {
-NS_OBJECT_ENSURE_REGISTERED (RoutingProtocol);
+NS_OBJECT_ENSURE_REGISTERED (RoutingProtocol)
+  ;
 
 /// UDP Port for AODV control traffic
 const uint32_t RoutingProtocol::AODV_PORT = 654;
@@ -111,7 +112,8 @@
   int32_t m_oif;
 };
 
-NS_OBJECT_ENSURE_REGISTERED (DeferredRouteOutputTag);
+NS_OBJECT_ENSURE_REGISTERED (DeferredRouteOutputTag)
+  ;
 
 
 //-----------------------------------------------------------------------------
diff -Naur ns-3.18.1/src/applications/bindings/modulegen__gcc_ILP32.py ns-3.19/src/applications/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/applications/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -295,7 +295,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -2166,10 +2166,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -4951,11 +4952,26 @@
     cls.add_constructor([param('ns3::SeqTsHeader const &', 'arg0')])
     ## seq-ts-header.h (module 'applications'): ns3::SeqTsHeader::SeqTsHeader() [constructor]
     cls.add_constructor([])
+    ## seq-ts-header.h (module 'applications'): uint32_t ns3::SeqTsHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## seq-ts-header.h (module 'applications'): ns3::TypeId ns3::SeqTsHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## seq-ts-header.h (module 'applications'): uint32_t ns3::SeqTsHeader::GetSeq() const [member function]
     cls.add_method('GetSeq', 
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## seq-ts-header.h (module 'applications'): uint32_t ns3::SeqTsHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## seq-ts-header.h (module 'applications'): ns3::Time ns3::SeqTsHeader::GetTs() const [member function]
     cls.add_method('GetTs', 
                    'ns3::Time', 
@@ -4966,35 +4982,20 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## seq-ts-header.h (module 'applications'): void ns3::SeqTsHeader::SetSeq(uint32_t seq) [member function]
-    cls.add_method('SetSeq', 
-                   'void', 
-                   [param('uint32_t', 'seq')])
-    ## seq-ts-header.h (module 'applications'): uint32_t ns3::SeqTsHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   visibility='private', is_virtual=True)
-    ## seq-ts-header.h (module 'applications'): ns3::TypeId ns3::SeqTsHeader::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True, visibility='private', is_virtual=True)
-    ## seq-ts-header.h (module 'applications'): uint32_t ns3::SeqTsHeader::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='private', is_virtual=True)
     ## seq-ts-header.h (module 'applications'): void ns3::SeqTsHeader::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
                    [param('std::ostream &', 'os')], 
-                   is_const=True, visibility='private', is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## seq-ts-header.h (module 'applications'): void ns3::SeqTsHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
     cls.add_method('Serialize', 
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
-                   is_const=True, visibility='private', is_virtual=True)
+                   is_const=True, is_virtual=True)
+    ## seq-ts-header.h (module 'applications'): void ns3::SeqTsHeader::SetSeq(uint32_t seq) [member function]
+    cls.add_method('SetSeq', 
+                   'void', 
+                   [param('uint32_t', 'seq')])
     return
 
 def register_Ns3SequentialRandomVariable_methods(root_module, cls):
@@ -5916,6 +5917,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -5926,6 +5932,11 @@
                    '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', 
@@ -5941,6 +5952,11 @@
                    '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', 
@@ -5966,6 +5982,11 @@
                    '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', 
@@ -10115,7 +10136,8 @@
     ## simple-channel.h (module 'network'): void ns3::SimpleChannel::Add(ns3::Ptr<ns3::SimpleNetDevice> device) [member function]
     cls.add_method('Add', 
                    'void', 
-                   [param('ns3::Ptr< ns3::SimpleNetDevice >', 'device')])
+                   [param('ns3::Ptr< ns3::SimpleNetDevice >', 'device')], 
+                   is_virtual=True)
     ## simple-channel.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::SimpleChannel::GetDevice(uint32_t i) const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
@@ -10134,7 +10156,8 @@
     ## simple-channel.h (module 'network'): void ns3::SimpleChannel::Send(ns3::Ptr<ns3::Packet> p, uint16_t protocol, ns3::Mac48Address to, ns3::Mac48Address from, ns3::Ptr<ns3::SimpleNetDevice> sender) [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint16_t', 'protocol'), param('ns3::Mac48Address', 'to'), param('ns3::Mac48Address', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'sender')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint16_t', 'protocol'), param('ns3::Mac48Address', 'to'), param('ns3::Mac48Address', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'sender')], 
+                   is_virtual=True)
     return
 
 def register_Ns3SimpleNetDevice_methods(root_module, cls):
@@ -10429,10 +10452,6 @@
     cls.add_method('SetFill', 
                    'void', 
                    [param('uint8_t *', 'fill'), param('uint32_t', 'fillSize'), param('uint32_t', 'dataSize')])
-    ## udp-echo-client.h (module 'applications'): void ns3::UdpEchoClient::SetRemote(ns3::Address ip, uint16_t port) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Address', 'ip'), param('uint16_t', 'port')])
     ## udp-echo-client.h (module 'applications'): void ns3::UdpEchoClient::SetRemote(ns3::Ipv4Address ip, uint16_t port) [member function]
     cls.add_method('SetRemote', 
                    'void', 
@@ -10441,6 +10460,10 @@
     cls.add_method('SetRemote', 
                    'void', 
                    [param('ns3::Ipv6Address', 'ip'), param('uint16_t', 'port')])
+    ## udp-echo-client.h (module 'applications'): void ns3::UdpEchoClient::SetRemote(ns3::Address ip, uint16_t port) [member function]
+    cls.add_method('SetRemote', 
+                   'void', 
+                   [param('ns3::Address', 'ip'), param('uint16_t', 'port')])
     ## udp-echo-client.h (module 'applications'): void ns3::UdpEchoClient::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -10551,10 +10574,6 @@
     cls.add_method('SetMaxPacketSize', 
                    'void', 
                    [param('uint16_t', 'maxPacketSize')])
-    ## udp-trace-client.h (module 'applications'): void ns3::UdpTraceClient::SetRemote(ns3::Address ip, uint16_t port) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Address', 'ip'), param('uint16_t', 'port')])
     ## udp-trace-client.h (module 'applications'): void ns3::UdpTraceClient::SetRemote(ns3::Ipv4Address ip, uint16_t port) [member function]
     cls.add_method('SetRemote', 
                    'void', 
@@ -10563,6 +10582,10 @@
     cls.add_method('SetRemote', 
                    'void', 
                    [param('ns3::Ipv6Address', 'ip'), param('uint16_t', 'port')])
+    ## udp-trace-client.h (module 'applications'): void ns3::UdpTraceClient::SetRemote(ns3::Address ip, uint16_t port) [member function]
+    cls.add_method('SetRemote', 
+                   'void', 
+                   [param('ns3::Address', 'ip'), param('uint16_t', 'port')])
     ## udp-trace-client.h (module 'applications'): void ns3::UdpTraceClient::SetTraceFile(std::string filename) [member function]
     cls.add_method('SetTraceFile', 
                    'void', 
@@ -10738,14 +10761,14 @@
     cls.add_method('SetBurstRate', 
                    'void', 
                    [param('double', 'rate')])
-    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomBurstSize(ns3::Ptr<ns3::RandomVariableStream> arg0) [member function]
+    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomBurstSize(ns3::Ptr<ns3::RandomVariableStream> burstSz) [member function]
     cls.add_method('SetRandomBurstSize', 
                    'void', 
-                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'arg0')])
-    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomVariable(ns3::Ptr<ns3::RandomVariableStream> arg0) [member function]
+                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'burstSz')])
+    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomVariable(ns3::Ptr<ns3::RandomVariableStream> ranVar) [member function]
     cls.add_method('SetRandomVariable', 
                    'void', 
-                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'arg0')])
+                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'ranVar')])
     ## error-model.h (module 'network'): bool ns3::BurstErrorModel::DoCorrupt(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('DoCorrupt', 
                    'bool', 
diff -Naur ns-3.18.1/src/applications/bindings/modulegen__gcc_LP64.py ns-3.19/src/applications/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/applications/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -295,7 +295,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -2166,10 +2166,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -4951,11 +4952,26 @@
     cls.add_constructor([param('ns3::SeqTsHeader const &', 'arg0')])
     ## seq-ts-header.h (module 'applications'): ns3::SeqTsHeader::SeqTsHeader() [constructor]
     cls.add_constructor([])
+    ## seq-ts-header.h (module 'applications'): uint32_t ns3::SeqTsHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## seq-ts-header.h (module 'applications'): ns3::TypeId ns3::SeqTsHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## seq-ts-header.h (module 'applications'): uint32_t ns3::SeqTsHeader::GetSeq() const [member function]
     cls.add_method('GetSeq', 
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## seq-ts-header.h (module 'applications'): uint32_t ns3::SeqTsHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## seq-ts-header.h (module 'applications'): ns3::Time ns3::SeqTsHeader::GetTs() const [member function]
     cls.add_method('GetTs', 
                    'ns3::Time', 
@@ -4966,35 +4982,20 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## seq-ts-header.h (module 'applications'): void ns3::SeqTsHeader::SetSeq(uint32_t seq) [member function]
-    cls.add_method('SetSeq', 
-                   'void', 
-                   [param('uint32_t', 'seq')])
-    ## seq-ts-header.h (module 'applications'): uint32_t ns3::SeqTsHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   visibility='private', is_virtual=True)
-    ## seq-ts-header.h (module 'applications'): ns3::TypeId ns3::SeqTsHeader::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True, visibility='private', is_virtual=True)
-    ## seq-ts-header.h (module 'applications'): uint32_t ns3::SeqTsHeader::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='private', is_virtual=True)
     ## seq-ts-header.h (module 'applications'): void ns3::SeqTsHeader::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
                    [param('std::ostream &', 'os')], 
-                   is_const=True, visibility='private', is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## seq-ts-header.h (module 'applications'): void ns3::SeqTsHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
     cls.add_method('Serialize', 
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
-                   is_const=True, visibility='private', is_virtual=True)
+                   is_const=True, is_virtual=True)
+    ## seq-ts-header.h (module 'applications'): void ns3::SeqTsHeader::SetSeq(uint32_t seq) [member function]
+    cls.add_method('SetSeq', 
+                   'void', 
+                   [param('uint32_t', 'seq')])
     return
 
 def register_Ns3SequentialRandomVariable_methods(root_module, cls):
@@ -5916,6 +5917,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -5926,6 +5932,11 @@
                    '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', 
@@ -5941,6 +5952,11 @@
                    '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', 
@@ -5966,6 +5982,11 @@
                    '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', 
@@ -10115,7 +10136,8 @@
     ## simple-channel.h (module 'network'): void ns3::SimpleChannel::Add(ns3::Ptr<ns3::SimpleNetDevice> device) [member function]
     cls.add_method('Add', 
                    'void', 
-                   [param('ns3::Ptr< ns3::SimpleNetDevice >', 'device')])
+                   [param('ns3::Ptr< ns3::SimpleNetDevice >', 'device')], 
+                   is_virtual=True)
     ## simple-channel.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::SimpleChannel::GetDevice(uint32_t i) const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
@@ -10134,7 +10156,8 @@
     ## simple-channel.h (module 'network'): void ns3::SimpleChannel::Send(ns3::Ptr<ns3::Packet> p, uint16_t protocol, ns3::Mac48Address to, ns3::Mac48Address from, ns3::Ptr<ns3::SimpleNetDevice> sender) [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint16_t', 'protocol'), param('ns3::Mac48Address', 'to'), param('ns3::Mac48Address', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'sender')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint16_t', 'protocol'), param('ns3::Mac48Address', 'to'), param('ns3::Mac48Address', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'sender')], 
+                   is_virtual=True)
     return
 
 def register_Ns3SimpleNetDevice_methods(root_module, cls):
@@ -10429,10 +10452,6 @@
     cls.add_method('SetFill', 
                    'void', 
                    [param('uint8_t *', 'fill'), param('uint32_t', 'fillSize'), param('uint32_t', 'dataSize')])
-    ## udp-echo-client.h (module 'applications'): void ns3::UdpEchoClient::SetRemote(ns3::Address ip, uint16_t port) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Address', 'ip'), param('uint16_t', 'port')])
     ## udp-echo-client.h (module 'applications'): void ns3::UdpEchoClient::SetRemote(ns3::Ipv4Address ip, uint16_t port) [member function]
     cls.add_method('SetRemote', 
                    'void', 
@@ -10441,6 +10460,10 @@
     cls.add_method('SetRemote', 
                    'void', 
                    [param('ns3::Ipv6Address', 'ip'), param('uint16_t', 'port')])
+    ## udp-echo-client.h (module 'applications'): void ns3::UdpEchoClient::SetRemote(ns3::Address ip, uint16_t port) [member function]
+    cls.add_method('SetRemote', 
+                   'void', 
+                   [param('ns3::Address', 'ip'), param('uint16_t', 'port')])
     ## udp-echo-client.h (module 'applications'): void ns3::UdpEchoClient::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -10551,10 +10574,6 @@
     cls.add_method('SetMaxPacketSize', 
                    'void', 
                    [param('uint16_t', 'maxPacketSize')])
-    ## udp-trace-client.h (module 'applications'): void ns3::UdpTraceClient::SetRemote(ns3::Address ip, uint16_t port) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Address', 'ip'), param('uint16_t', 'port')])
     ## udp-trace-client.h (module 'applications'): void ns3::UdpTraceClient::SetRemote(ns3::Ipv4Address ip, uint16_t port) [member function]
     cls.add_method('SetRemote', 
                    'void', 
@@ -10563,6 +10582,10 @@
     cls.add_method('SetRemote', 
                    'void', 
                    [param('ns3::Ipv6Address', 'ip'), param('uint16_t', 'port')])
+    ## udp-trace-client.h (module 'applications'): void ns3::UdpTraceClient::SetRemote(ns3::Address ip, uint16_t port) [member function]
+    cls.add_method('SetRemote', 
+                   'void', 
+                   [param('ns3::Address', 'ip'), param('uint16_t', 'port')])
     ## udp-trace-client.h (module 'applications'): void ns3::UdpTraceClient::SetTraceFile(std::string filename) [member function]
     cls.add_method('SetTraceFile', 
                    'void', 
@@ -10738,14 +10761,14 @@
     cls.add_method('SetBurstRate', 
                    'void', 
                    [param('double', 'rate')])
-    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomBurstSize(ns3::Ptr<ns3::RandomVariableStream> arg0) [member function]
+    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomBurstSize(ns3::Ptr<ns3::RandomVariableStream> burstSz) [member function]
     cls.add_method('SetRandomBurstSize', 
                    'void', 
-                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'arg0')])
-    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomVariable(ns3::Ptr<ns3::RandomVariableStream> arg0) [member function]
+                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'burstSz')])
+    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomVariable(ns3::Ptr<ns3::RandomVariableStream> ranVar) [member function]
     cls.add_method('SetRandomVariable', 
                    'void', 
-                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'arg0')])
+                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'ranVar')])
     ## error-model.h (module 'network'): bool ns3::BurstErrorModel::DoCorrupt(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('DoCorrupt', 
                    'bool', 
diff -Naur ns-3.18.1/src/applications/helper/bulk-send-helper.h ns-3.19/src/applications/helper/bulk-send-helper.h
--- ns-3.18.1/src/applications/helper/bulk-send-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/helper/bulk-send-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -35,6 +35,7 @@
 namespace ns3 {
 
 /**
+ * \ingroup bulksend
  * \brief A helper to make it easier to instantiate an ns3::BulkSendApplication
  * on a set of nodes.
  */
@@ -92,7 +93,6 @@
 
 private:
   /**
-   * \internal
    * Install an ns3::BulkSendApplication on the node configured with all the
    * attributes set with SetAttribute.
    *
@@ -100,9 +100,8 @@
    * \returns Ptr to the application installed.
    */
   Ptr<Application> InstallPriv (Ptr<Node> node) const;
-  std::string m_protocol;
-  Address m_remote;
-  ObjectFactory m_factory;
+
+  ObjectFactory m_factory; //!< Object factory.
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/applications/helper/on-off-helper.h ns-3.19/src/applications/helper/on-off-helper.h
--- ns-3.18.1/src/applications/helper/on-off-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/helper/on-off-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -35,6 +35,7 @@
 class DataRate;
 
 /**
+ * \ingroup onoff
  * \brief A helper to make it easier to instantiate an ns3::OnOffApplication 
  * on a set of nodes.
  */
@@ -114,7 +115,6 @@
 
 private:
   /**
-   * \internal
    * Install an ns3::OnOffApplication on the node configured with all the 
    * attributes set with SetAttribute.
    *
@@ -122,9 +122,8 @@
    * \returns Ptr to the application installed.
    */
   Ptr<Application> InstallPriv (Ptr<Node> node) const;
-  std::string m_protocol;
-  Address m_remote;
-  ObjectFactory m_factory;
+
+  ObjectFactory m_factory; //!< Object factory.
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/applications/helper/packet-sink-helper.h ns-3.19/src/applications/helper/packet-sink-helper.h
--- ns-3.18.1/src/applications/helper/packet-sink-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/helper/packet-sink-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -28,6 +28,7 @@
 namespace ns3 {
 
 /**
+ * \ingroup packetsink
  * \brief A helper to make it easier to instantiate an ns3::PacketSinkApplication
  * on a set of nodes.
  */
@@ -60,6 +61,7 @@
    *
    * \param c NodeContainer of the set of nodes on which a PacketSinkApplication 
    * will be installed.
+   * \returns Container of Ptr to the applications installed.
    */
   ApplicationContainer Install (NodeContainer c) const;
 
@@ -68,6 +70,7 @@
    * configured with all the attributes set with SetAttribute.
    *
    * \param node The node on which a PacketSinkApplication will be installed.
+   * \returns Container of Ptr to the applications installed.
    */
   ApplicationContainer Install (Ptr<Node> node) const;
 
@@ -76,15 +79,20 @@
    * configured with all the attributes set with SetAttribute.
    *
    * \param nodeName The name of the node on which a PacketSinkApplication will be installed.
+   * \returns Container of Ptr to the applications installed.
    */
   ApplicationContainer Install (std::string nodeName) const;
 
 private:
   /**
-   * \internal
+   * Install an ns3::PacketSink on the node configured with all the
+   * attributes set with SetAttribute.
+   *
+   * \param node The node on which an PacketSink will be installed.
+   * \returns Ptr to the application installed.
    */
   Ptr<Application> InstallPriv (Ptr<Node> node) const;
-  ObjectFactory m_factory;
+  ObjectFactory m_factory; //!< Object factory.
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/applications/helper/ping6-helper.h ns-3.19/src/applications/helper/ping6-helper.h
--- ns-3.18.1/src/applications/helper/ping6-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/helper/ping6-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -32,6 +32,7 @@
 namespace ns3 {
 
 /**
+ * \ingroup ping6
  * \class Ping6Helper
  * \brief Ping6 application helper.
  */
diff -Naur ns-3.18.1/src/applications/helper/radvd-helper.h ns-3.19/src/applications/helper/radvd-helper.h
--- ns-3.18.1/src/applications/helper/radvd-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/helper/radvd-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -35,6 +35,7 @@
 namespace ns3 {
 
 /**
+ * \ingroup radvd
  * \class RadvdHelper
  * \brief Radvd application helper.
  */
@@ -69,9 +70,10 @@
   void DisableDefaultRouterForInterface (uint32_t interface);
 
   /**
-   * \brief Get the low-level radvdInterface specification for an interface.
+   * \brief Get the low-level RadvdInterface specification for an interface.
    * This method is provided to enable fine-grain parameter setup.
    * \param interface outgoing interface
+   * \returns the RadvdInterface
    */
   Ptr<RadvdInterface> GetRadvdInterface (uint32_t interface);
 
@@ -100,10 +102,12 @@
    */
   ObjectFactory m_factory;
 
+  /// Container: interface index, RadvdInterface
   typedef std::map<uint32_t, Ptr<RadvdInterface> > RadvdInterfaceMap;
+  /// Container Iterator: interface index, RadvdInterface
   typedef std::map<uint32_t, Ptr<RadvdInterface> >::iterator RadvdInterfaceMapI;
 
-  RadvdInterfaceMap m_radvdInterfaces;
+  RadvdInterfaceMap m_radvdInterfaces; //!< RadvdInterface(s)
 };
 
 } /* namespace ns3 */
diff -Naur ns-3.18.1/src/applications/helper/udp-client-server-helper.h ns-3.19/src/applications/helper/udp-client-server-helper.h
--- ns-3.18.1/src/applications/helper/udp-client-server-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/helper/udp-client-server-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -29,7 +29,8 @@
 #include "ns3/udp-client.h"
 namespace ns3 {
 /**
- * \brief Create a server application which waits for input udp packets
+ * \ingroup udpclientserver
+ * \brief Create a server application which waits for input UDP packets
  *        and uses the information carried into their payload to compute
  *        delay and to determine if some packets are lost.
  */
@@ -60,7 +61,7 @@
   void SetAttribute (std::string name, const AttributeValue &value);
 
   /**
-   * Create one udp server application on each of the Nodes in the
+   * Create one UDP server application on each of the Nodes in the
    * NodeContainer.
    *
    * \param c The nodes on which to create the Applications.  The nodes
@@ -69,14 +70,23 @@
    *          NodeContainer.
    */
   ApplicationContainer Install (NodeContainer c);
+
+  /**
+   * \brief Return the last created server.
+   *
+   * This function is mainly used for testing.
+   *
+   * \returns a Ptr to the last created server application
+   */
   Ptr<UdpServer> GetServer (void);
 private:
-  ObjectFactory m_factory;
-  Ptr<UdpServer> m_server;
+  ObjectFactory m_factory; //!< Object factory.
+  Ptr<UdpServer> m_server; //!< The last created server application
 };
 
 /**
- * \brief Create a client application which sends udp packets carrying
+ * \ingroup udpclientserver
+ * \brief Create a client application which sends UDP packets carrying
  *  a 32bit sequence number and a 64 bit time stamp.
  *
  */
@@ -95,12 +105,28 @@
    *  Create UdpClientHelper which will make life easier for people trying
    * to set up simulations with udp-client-server.
    *
-   * \param ip The IP address of the remote udp server
-   * \param port The port number of the remote udp server
+   * \param ip The IPv4 address of the remote UDP server
+   * \param port The port number of the remote UDP server
    */
 
   UdpClientHelper (Ipv4Address ip, uint16_t port);
+  /**
+   *  Create UdpClientHelper which will make life easier for people trying
+   * to set up simulations with udp-client-server.
+   *
+   * \param ip The IPv6 address of the remote UDP server
+   * \param port The port number of the remote UDP server
+   */
+
   UdpClientHelper (Ipv6Address ip, uint16_t port);
+  /**
+   *  Create UdpClientHelper which will make life easier for people trying
+   * to set up simulations with udp-client-server.
+   *
+   * \param ip The IP address of the remote UDP server
+   * \param port The port number of the remote UDP server
+   */
+
   UdpClientHelper (Address ip, uint16_t port);
 
   /**
@@ -114,25 +140,26 @@
   /**
      * \param c the nodes
      *
-     * Create one udp client application on each of the input nodes
+     * Create one UDP client application on each of the input nodes
      *
      * \returns the applications created, one application per input node.
      */
   ApplicationContainer Install (NodeContainer c);
 
 private:
-  ObjectFactory m_factory;
+  ObjectFactory m_factory; //!< Object factory.
 };
 /**
- * Create udpTraceClient application which sends udp packets based on a trace
+ * \ingroup udpclientserver
+ * Create UdpTraceClient application which sends UDP packets based on a trace
  * file of an MPEG4 stream. Trace files could be downloaded form :
- * http://www.tkn.tu-berlin.de/research/trace/ltvt.html (the 2 first lines of
+ * http://www2.tkn.tu-berlin.de/research/trace/ltvt.html (the 2 first lines of
  * the file should be removed)
  * A valid trace file is a file with 4 columns:
- * -1- the first one represents the frame index
- * -2- the second one indicates the type of the frame: I, P or B
- * -3- the third one indicates the time on which the frame was generated by the encoder
- * -4- the fourth one indicates the frame size in byte
+ * \li -1- the first one represents the frame index
+ * \li -2- the second one indicates the type of the frame: I, P or B
+ * \li -3- the third one indicates the time on which the frame was generated by the encoder
+ * \li -4- the fourth one indicates the frame size in byte
 */
 class UdpTraceClientHelper
 {
@@ -148,12 +175,28 @@
    * Create UdpTraceClientHelper which will make life easier for people trying
    * to set up simulations with udp-client-server.
    *
-   * \param ip The IP address of the remote udp server
-   * \param port The port number of the remote udp server
+   * \param ip The IP address of the remote UDP server
+   * \param port The port number of the remote UDP server
    * \param filename the file from which packet traces will be loaded
    */
   UdpTraceClientHelper (Address ip, uint16_t port, std::string filename);
+  /**
+   * Create UdpTraceClientHelper which will make life easier for people trying
+   * to set up simulations with udp-client-server.
+   *
+   * \param ip The IPv4 address of the remote UDP server
+   * \param port The port number of the remote UDP server
+   * \param filename the file from which packet traces will be loaded
+   */
   UdpTraceClientHelper (Ipv4Address ip, uint16_t port, std::string filename);
+  /**
+   * Create UdpTraceClientHelper which will make life easier for people trying
+   * to set up simulations with udp-client-server.
+   *
+   * \param ip The IPv6 address of the remote UDP server
+   * \param port The port number of the remote UDP server
+   * \param filename the file from which packet traces will be loaded
+   */
   UdpTraceClientHelper (Ipv6Address ip, uint16_t port, std::string filename);
 
   /**
@@ -167,14 +210,14 @@
   /**
     * \param c the nodes
     *
-    * Create one udp trace client application on each of the input nodes
+    * Create one UDP trace client application on each of the input nodes
     *
     * \returns the applications created, one application per input node.
     */
   ApplicationContainer Install (NodeContainer c);
 
 private:
-  ObjectFactory m_factory;
+  ObjectFactory m_factory; //!< Object factory.
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/applications/helper/udp-echo-helper.h ns-3.19/src/applications/helper/udp-echo-helper.h
--- ns-3.18.1/src/applications/helper/udp-echo-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/helper/udp-echo-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,8 @@
 namespace ns3 {
 
 /**
- * \brief Create a server application which waits for input udp packets
+ * \ingroup udpecho
+ * \brief Create a server application which waits for input UDP packets
  *        and sends them back to the original sender.
  */
 class UdpEchoServerHelper
@@ -87,15 +88,20 @@
 
 private:
   /**
-   * \internal
+   * Install an ns3::UdpEchoServer on the node configured with all the
+   * attributes set with SetAttribute.
+   *
+   * \param node The node on which an UdpEchoServer will be installed.
+   * \returns Ptr to the application installed.
    */
   Ptr<Application> InstallPriv (Ptr<Node> node) const;
 
-  ObjectFactory m_factory;
+  ObjectFactory m_factory; //!< Object factory.
 };
 
 /**
- * \brief create an application which sends a udp packet and waits for an echo of this packet
+ * \ingroup udpecho
+ * \brief Create an application which sends a UDP packet and waits for an echo of this packet
  */
 class UdpEchoClientHelper
 {
@@ -108,7 +114,21 @@
    * \param port The port number of the remote udp echo server
    */
   UdpEchoClientHelper (Address ip, uint16_t port);
+  /**
+   * Create UdpEchoClientHelper which will make life easier for people trying
+   * to set up simulations with echos.
+   *
+   * \param ip The IPv4 address of the remote udp echo server
+   * \param port The port number of the remote udp echo server
+   */
   UdpEchoClientHelper (Ipv4Address ip, uint16_t port);
+  /**
+   * Create UdpEchoClientHelper which will make life easier for people trying
+   * to set up simulations with echos.
+   *
+   * \param ip The IPv6 address of the remote udp echo server
+   * \param port The port number of the remote udp echo server
+   */
   UdpEchoClientHelper (Ipv6Address ip, uint16_t port);
 
   /**
@@ -203,8 +223,15 @@
   ApplicationContainer Install (NodeContainer c) const;
 
 private:
+  /**
+   * Install an ns3::UdpEchoClient on the node configured with all the
+   * attributes set with SetAttribute.
+   *
+   * \param node The node on which an UdpEchoClient will be installed.
+   * \returns Ptr to the application installed.
+   */
   Ptr<Application> InstallPriv (Ptr<Node> node) const;
-  ObjectFactory m_factory;
+  ObjectFactory m_factory; //!< Object factory.
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/applications/helper/v4ping-helper.h ns-3.19/src/applications/helper/v4ping-helper.h
--- ns-3.18.1/src/applications/helper/v4ping-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/helper/v4ping-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -1,3 +1,23 @@
+/* -*- 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
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ */
+
 #ifndef V4PING_HELPER_H
 #define V4PING_HELPER_H
 
@@ -8,7 +28,8 @@
 namespace ns3 {
 
 /**
- * \brief create a pinger application and associate it to a node
+ * \ingroup v4ping
+ * \brief Create a IPv5 ping application and associate it to a node
  *
  * This class creates one or multiple instances of ns3::V4Ping and associates
  * it/them to one/multiple node(s).
@@ -25,33 +46,33 @@
   V4PingHelper (Ipv4Address remote);
 
   /**
-   * Install a pinger application on each Node in the provided NodeContainer.
+   * Install a Ping application on each Node in the provided NodeContainer.
    *
    * \param nodes The NodeContainer containing all of the nodes to get a V4Ping
    *              application.
    *
-   * \returns A list of pinger applications, one for each input node
+   * \returns A list of Ping applications, one for each input node
    */
   ApplicationContainer Install (NodeContainer nodes) const;
 
   /**
-   * Install a pinger application on the provided Node.  The Node is specified
+   * Install a Ping application on the provided Node.  The Node is specified
    * directly by a Ptr<Node>
    *
    * \param node The node to install the V4PingApplication on.
    *
-   * \returns An ApplicationContainer holding the pinger application created.
+   * \returns An ApplicationContainer holding the Ping application created.
    */
   ApplicationContainer Install (Ptr<Node> node) const;
 
   /**
-   * Install a pinger application on the provided Node.  The Node is specified
+   * Install a Ping application on the provided Node.  The Node is specified
    * by a string that must have previously been associated with a Node using the
    * Object Name Service.
    *
    * \param nodeName The node to install the V4PingApplication on.
    *
-   * \returns An ApplicationContainer holding the pinger application created.
+   * \returns An ApplicationContainer holding the Ping application created.
    */
   ApplicationContainer Install (std::string nodeName) const;
 
@@ -63,9 +84,12 @@
   void SetAttribute (std::string name, const AttributeValue &value);
 private:
   /**
-   * \internal
+   * \brief Do the actual application installation in the node
+   * \param node the node
+   * \returns a Smart pointer to the installed application
    */
   Ptr<Application> InstallPriv (Ptr<Node> node) const;
+  /// Object factory
   ObjectFactory m_factory;
 };
 
diff -Naur ns-3.18.1/src/applications/model/application-packet-probe.cc ns-3.19/src/applications/model/application-packet-probe.cc
--- ns-3.18.1/src/applications/model/application-packet-probe.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/application-packet-probe.cc	2013-12-20 09:44:50.000000000 -0800
@@ -32,7 +32,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ApplicationPacketProbe);
+NS_OBJECT_ENSURE_REGISTERED (ApplicationPacketProbe)
+  ;
 
 TypeId
 ApplicationPacketProbe::GetTypeId ()
diff -Naur ns-3.18.1/src/applications/model/application-packet-probe.h ns-3.19/src/applications/model/application-packet-probe.h
--- ns-3.18.1/src/applications/model/application-packet-probe.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/application-packet-probe.h	2013-12-20 09:44:50.000000000 -0800
@@ -37,6 +37,8 @@
 namespace ns3 {
 
 /**
+ * \brief Probe to translate from a TraceSource to two more easily parsed TraceSources.
+ *
  * This class is designed to probe an underlying ns3 TraceSource
  * exporting a packet and a socket address.  This probe exports a
  * trace source "Output" with arguments of type Ptr<const Packet> and
@@ -49,6 +51,10 @@
 class ApplicationPacketProbe : public Probe
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId ();
   ApplicationPacketProbe ();
   virtual ~ApplicationPacketProbe ();
@@ -97,11 +103,12 @@
    * \param packet the traced packet
    * \param address the socket address for the traced packet
    *
-   * \internal
    */
   void TraceSink (Ptr<const Packet> packet, const Address& address);
 
+  /// Output trace, packet and source address
   TracedCallback<Ptr<const Packet>, const Address&> m_output;
+  /// Output trace, previous packet size and current packet size
   TracedCallback<uint32_t, uint32_t> m_outputBytes;
 
   /// The traced packet.
diff -Naur ns-3.18.1/src/applications/model/bulk-send-application.cc ns-3.19/src/applications/model/bulk-send-application.cc
--- ns-3.18.1/src/applications/model/bulk-send-application.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/bulk-send-application.cc	2013-12-20 09:44:50.000000000 -0800
@@ -35,7 +35,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (BulkSendApplication);
+NS_OBJECT_ENSURE_REGISTERED (BulkSendApplication)
+  ;
 
 TypeId
 BulkSendApplication::GetTypeId (void)
diff -Naur ns-3.18.1/src/applications/model/bulk-send-application.h ns-3.19/src/applications/model/bulk-send-application.h
--- ns-3.18.1/src/applications/model/bulk-send-application.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/bulk-send-application.h	2013-12-20 09:44:50.000000000 -0800
@@ -38,8 +38,8 @@
  *
  * This traffic generator simply sends data
  * as fast as possible up to MaxBytes or until
- * the appplication is stopped if MaxBytes is
- * zero. Once the lower layer send buffer is
+ * the application is stopped (if MaxBytes is
+ * zero). Once the lower layer send buffer is
  * filled, it waits until space is free to
  * send more data, essentially keeping a
  * constant flow of data. Only SOCK_STREAM 
@@ -47,9 +47,31 @@
  * For example, TCP sockets can be used, but 
  * UDP sockets can not be used.
  */
+
+/**
+ * \ingroup bulksend
+ *
+ * \brief Send as much traffic as possible, trying to fill the bandwidth.
+ *
+ * This traffic generator simply sends data
+ * as fast as possible up to MaxBytes or until
+ * the application is stopped (if MaxBytes is
+ * zero). Once the lower layer send buffer is
+ * filled, it waits until space is free to
+ * send more data, essentially keeping a
+ * constant flow of data. Only SOCK_STREAM
+ * and SOCK_SEQPACKET sockets are supported.
+ * For example, TCP sockets can be used, but
+ * UDP sockets can not be used.
+ *
+ */
 class BulkSendApplication : public Application
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   BulkSendApplication ();
@@ -57,20 +79,22 @@
   virtual ~BulkSendApplication ();
 
   /**
-   * \param maxBytes the upper bound of bytes to send
+   * \brief Set the upper bound for the total number of bytes to send.
    *
-   * Set the upper bound for the total number of bytes to send. Once 
-   * this bound is reached, no more application bytes are sent. If the 
+   * Once this bound is reached, no more application bytes are sent. If the
    * application is stopped during the simulation and restarted, the 
    * total number of bytes sent is not reset; however, the maxBytes 
    * bound is still effective and the application will continue sending 
    * up to maxBytes. The value zero for maxBytes means that 
    * there is no upper bound; i.e. data is sent until the application 
    * or simulation is stopped.
+   *
+   * \param maxBytes the upper bound of bytes to send
    */
   void SetMaxBytes (uint32_t maxBytes);
 
   /**
+   * \brief Get the socket this application is attached to.
    * \return pointer to associated socket
    */
   Ptr<Socket> GetSocket (void) const;
@@ -82,22 +106,37 @@
   virtual void StartApplication (void);    // Called at time specified by Start
   virtual void StopApplication (void);     // Called at time specified by Stop
 
+  /**
+   * \brief Send data until the L4 transmission buffer is full.
+   */
   void SendData ();
 
-  Ptr<Socket>     m_socket;       // Associated socket
-  Address         m_peer;         // Peer address
-  bool            m_connected;    // True if connected
-  uint32_t        m_sendSize;     // Size of data to send each time
-  uint32_t        m_maxBytes;     // Limit total number of bytes sent
-  uint32_t        m_totBytes;     // Total bytes sent so far
-  TypeId          m_tid;
+  Ptr<Socket>     m_socket;       //!< Associated socket
+  Address         m_peer;         //!< Peer address
+  bool            m_connected;    //!< True if connected
+  uint32_t        m_sendSize;     //!< Size of data to send each time
+  uint32_t        m_maxBytes;     //!< Limit total number of bytes sent
+  uint32_t        m_totBytes;     //!< Total bytes sent so far
+  TypeId          m_tid;          //!< The type of protocol to use.
+
+  /// Traced Callback: sent packets
   TracedCallback<Ptr<const Packet> > m_txTrace;
 
 private:
+  /**
+   * \brief Connection Succeeded (called by Socket through a callback)
+   * \param socket the connected socket
+   */
   void ConnectionSucceeded (Ptr<Socket> socket);
+  /**
+   * \brief Connection Failed (called by Socket through a callback)
+   * \param socket the connected socket
+   */
   void ConnectionFailed (Ptr<Socket> socket);
+  /**
+   * \brief Send more data as soon as some has been transmitted.
+   */
   void DataSend (Ptr<Socket>, uint32_t); // for socket's SetSendCallback
-  void Ignore (Ptr<Socket> socket);
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/applications/model/onoff-application.cc ns-3.19/src/applications/model/onoff-application.cc
--- ns-3.18.1/src/applications/model/onoff-application.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/onoff-application.cc	2013-12-20 09:44:50.000000000 -0800
@@ -46,7 +46,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (OnOffApplication);
+NS_OBJECT_ENSURE_REGISTERED (OnOffApplication)
+  ;
 
 TypeId
 OnOffApplication::GetTypeId (void)
@@ -166,6 +167,8 @@
         MakeCallback (&OnOffApplication::ConnectionSucceeded, this),
         MakeCallback (&OnOffApplication::ConnectionFailed, this));
     }
+  m_cbrRateFailSafe = m_cbrRate;
+
   // Insure no pending event
   CancelEvents ();
   // If we are not yet connected, there is nothing to do here
@@ -193,13 +196,14 @@
 {
   NS_LOG_FUNCTION (this);
 
-  if (m_sendEvent.IsRunning ())
+  if (m_sendEvent.IsRunning () && m_cbrRateFailSafe == m_cbrRate )
     { // Cancel the pending send packet event
       // Calculate residual bits since last packet sent
       Time delta (Simulator::Now () - m_lastStartTime);
       int64x64_t bits = delta.To (Time::S) * m_cbrRate.GetBitRate ();
       m_residualBits += bits.GetHigh ();
     }
+  m_cbrRateFailSafe = m_cbrRate;
   Simulator::Cancel (m_sendEvent);
   Simulator::Cancel (m_startStopEvent);
 }
diff -Naur ns-3.18.1/src/applications/model/onoff-application.h ns-3.19/src/applications/model/onoff-application.h
--- ns-3.18.1/src/applications/model/onoff-application.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/onoff-application.h	2013-12-20 09:44:50.000000000 -0800
@@ -86,6 +86,10 @@
 class OnOffApplication : public Application 
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   OnOffApplication ();
@@ -93,23 +97,24 @@
   virtual ~OnOffApplication();
 
   /**
-   * \param maxBytes the total number of bytes to send
+   * \brief Set the total number of bytes to send.
+   *
+   * Once these bytes are sent, no packet is sent again, even in on state.
+   * The value zero means that there is no limit.
    *
-   * Set the total number of bytes to send. Once these bytes are sent, no packet 
-   * is sent again, even in on state. The value zero means that there is no 
-   * limit.
+   * \param maxBytes the total number of bytes to send
    */
   void SetMaxBytes (uint32_t maxBytes);
 
   /**
+   * \brief Return a pointer to associated socket.
    * \return pointer to associated socket
    */
   Ptr<Socket> GetSocket (void) const;
 
  /**
-  * Assign a fixed random variable stream number to the random variables
-  * used by this model.  Return the number of streams (possibly zero) that
-  * have been assigned.
+  * \brief Assign a fixed random variable stream number to the random variables
+  * used by this model.
   *
   * \param stream first stream index to use
   * \return the number of stream indices assigned by this model
@@ -124,43 +129,66 @@
   virtual void StopApplication (void);     // Called at time specified by Stop
 
   //helpers
+  /**
+   * \brief Cancel all pending events.
+   */
   void CancelEvents ();
 
-  void Construct (Ptr<Node> n,
-                  const Address &remote,
-                  std::string tid,
-                  const RandomVariable& ontime,
-                  const RandomVariable& offtime,
-                  uint32_t size);
-
-
   // Event handlers
+  /**
+   * \brief Start an On period
+   */
   void StartSending ();
+  /**
+   * \brief Start an Off period
+   */
   void StopSending ();
+  /**
+   * \brief Send a packet
+   */
   void SendPacket ();
 
-  Ptr<Socket>     m_socket;       // Associated socket
-  Address         m_peer;         // Peer address
-  bool            m_connected;    // True if connected
-  Ptr<RandomVariableStream>  m_onTime;       // rng for On Time
-  Ptr<RandomVariableStream>  m_offTime;      // rng for Off Time
-  DataRate        m_cbrRate;      // Rate that data is generated
-  uint32_t        m_pktSize;      // Size of packets
-  uint32_t        m_residualBits; // Number of generated, but not sent, bits
-  Time            m_lastStartTime; // Time last packet sent
-  uint32_t        m_maxBytes;     // Limit total number of bytes sent
-  uint32_t        m_totBytes;     // Total bytes sent so far
-  EventId         m_startStopEvent;     // Event id for next start or stop event
-  EventId         m_sendEvent;    // Eventid of pending "send packet" event
-  bool            m_sending;      // True if currently in sending state
-  TypeId          m_tid;
+  Ptr<Socket>     m_socket;       //!< Associated socket
+  Address         m_peer;         //!< Peer address
+  bool            m_connected;    //!< True if connected
+  Ptr<RandomVariableStream>  m_onTime;       //!< rng for On Time
+  Ptr<RandomVariableStream>  m_offTime;      //!< rng for Off Time
+  DataRate        m_cbrRate;      //!< Rate that data is generated
+  DataRate        m_cbrRateFailSafe;      //!< Rate that data is generated (check copy)
+  uint32_t        m_pktSize;      //!< Size of packets
+  uint32_t        m_residualBits; //!< Number of generated, but not sent, bits
+  Time            m_lastStartTime; //!< Time last packet sent
+  uint32_t        m_maxBytes;     //!< Limit total number of bytes sent
+  uint32_t        m_totBytes;     //!< Total bytes sent so far
+  EventId         m_startStopEvent;     //!< Event id for next start or stop event
+  EventId         m_sendEvent;    //!< Event id of pending "send packet" event
+  TypeId          m_tid;          //!< Type of the socket used
+
+  /// Traced Callback: transmitted packets.
   TracedCallback<Ptr<const Packet> > m_txTrace;
 
 private:
+  /**
+   * \brief Schedule the next packet transmission
+   */
   void ScheduleNextTx ();
+  /**
+   * \brief Schedule the next On period start
+   */
   void ScheduleStartEvent ();
+  /**
+   * \brief Schedule the next Off period start
+   */
   void ScheduleStopEvent ();
+  /**
+   * \brief Handle a Connection Succeed event
+   * \param socket the connected socket
+   */
   void ConnectionSucceeded (Ptr<Socket> socket);
+  /**
+   * \brief Handle a Connection Failed event
+   * \param socket the not connected socket
+   */
   void ConnectionFailed (Ptr<Socket> socket);
 };
 
diff -Naur ns-3.18.1/src/applications/model/packet-loss-counter.cc ns-3.19/src/applications/model/packet-loss-counter.cc
--- ns-3.18.1/src/applications/model/packet-loss-counter.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/packet-loss-counter.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("PacketLossCounter");
+NS_LOG_COMPONENT_DEFINE ("PacketLossCounter")
+  ;
 
 
 PacketLossCounter::PacketLossCounter (uint8_t bitmapSize)
diff -Naur ns-3.18.1/src/applications/model/packet-loss-counter.h ns-3.19/src/applications/model/packet-loss-counter.h
--- ns-3.18.1/src/applications/model/packet-loss-counter.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/packet-loss-counter.h	2013-12-20 09:44:50.000000000 -0800
@@ -33,23 +33,63 @@
 class Socket;
 class Packet;
 
+/**
+ * \ingroup udpclientserver
+ * \class PacketLossCounter
+ * \brief A class to count the number of lost packets.
+ *
+ * This class records the packet lost in a client/server transmission
+ * leveraging a sequence number. All the packets outside a given window
+ * (i.e., too old wit respect to the last sequence number seen) are considered lost,
+ */
 class PacketLossCounter
 {
 public:
+  /**
+   * \brief Constructor
+   * \param bitmapSize The window size. Must be a multiple of 8.
+   */
   PacketLossCounter (uint8_t bitmapSize);
   ~PacketLossCounter ();
+  /**
+   * \brief Record a successfully received packet
+   * \param seq the packet sequence number
+   */
   void NotifyReceived (uint32_t seq);
+  /**
+   * \brief Get the number of lost packets.
+   * \returns the number of lost packets.
+   */
   uint32_t GetLost (void) const;
+  /**
+   * \brief Return the size of the window used to compute the packet loss.
+   * \return the window size.
+   */
   uint16_t GetBitMapSize (void) const;
+  /**
+   * \brief Set the size of the window used to compute the packet loss.
+   *
+   * \param size The window size. Must be a multiple of 8.
+   */
   void SetBitMapSize (uint16_t size);
 private:
+  /**
+   * \brief Check if a sequence number in the window has been received.
+   * \param seqNum the sequence number.
+   * \returns false if the packet has not been received.
+   */
   bool GetBit (uint32_t seqNum);
+  /**
+   * \brief Set a sequence number to a given state.
+   * \param seqNum the sequence number.
+   * \param val false if the packet has not been received.
+   */
   void SetBit (uint32_t seqNum, bool val);
 
-  uint32_t m_lost;
-  uint16_t m_bitMapSize;
-  uint32_t m_lastMaxSeqNum;
-  uint8_t * m_receiveBitMap;
+  uint32_t m_lost; //!< Lost packets counter.
+  uint16_t m_bitMapSize; //!< Window size.
+  uint32_t m_lastMaxSeqNum; //!< Last sequence number seen.
+  uint8_t * m_receiveBitMap; //!< Received packets in the window size.
 };
 }
 
diff -Naur ns-3.18.1/src/applications/model/packet-sink.cc ns-3.19/src/applications/model/packet-sink.cc
--- ns-3.18.1/src/applications/model/packet-sink.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/packet-sink.cc	2013-12-20 09:44:50.000000000 -0800
@@ -34,8 +34,10 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("PacketSink");
-NS_OBJECT_ENSURE_REGISTERED (PacketSink);
+NS_LOG_COMPONENT_DEFINE ("PacketSink")
+  ;
+NS_OBJECT_ENSURE_REGISTERED (PacketSink)
+  ;
 
 TypeId 
 PacketSink::GetTypeId (void)
diff -Naur ns-3.18.1/src/applications/model/packet-sink.h ns-3.19/src/applications/model/packet-sink.h
--- ns-3.18.1/src/applications/model/packet-sink.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/packet-sink.h	2013-12-20 09:44:50.000000000 -0800
@@ -62,12 +62,16 @@
  * The constructor specifies the Address (IP address and port) and the 
  * transport protocol to use.   A virtual Receive () method is installed 
  * as a callback on the receiving socket.  By default, when logging is
- * enabled, it prints out the size of packets and their address, but
- * we intend to also add a tracing source to Receive() at a later date.
+ * enabled, it prints out the size of packets and their address.
+ * A tracing source to Receive() is also available.
  */
 class PacketSink : public Application 
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   PacketSink ();
 
@@ -95,19 +99,38 @@
   virtual void StartApplication (void);    // Called at time specified by Start
   virtual void StopApplication (void);     // Called at time specified by Stop
 
-  void HandleRead (Ptr<Socket>);
-  void HandleAccept (Ptr<Socket>, const Address& from);
-  void HandlePeerClose (Ptr<Socket>);
-  void HandlePeerError (Ptr<Socket>);
+  /**
+   * \brief Handle a packet received by the application
+   * \param socket the receiving socket
+   */
+  void HandleRead (Ptr<Socket> socket);
+  /**
+   * \brief Handle an incoming connection
+   * \param socket the incoming connection socket
+   * \param from the address the connection is from
+   */
+  void HandleAccept (Ptr<Socket> socket, const Address& from);
+  /**
+   * \brief Handle an connection close
+   * \param socket the connected socket
+   */
+  void HandlePeerClose (Ptr<Socket> socket);
+  /**
+   * \brief Handle an connection error
+   * \param socket the connected socket
+   */
+  void HandlePeerError (Ptr<Socket> socket);
 
   // In the case of TCP, each socket accept returns a new socket, so the 
-  // listening socket is stored seperately from the accepted sockets
-  Ptr<Socket>     m_socket;       // Listening socket
-  std::list<Ptr<Socket> > m_socketList; //the accepted sockets
-
-  Address         m_local;        // Local address to bind to
-  uint32_t        m_totalRx;      // Total bytes received
-  TypeId          m_tid;          // Protocol TypeId
+  // listening socket is stored separately from the accepted sockets
+  Ptr<Socket>     m_socket;       //!< Listening socket
+  std::list<Ptr<Socket> > m_socketList; //!< the accepted sockets
+
+  Address         m_local;        //!< Local address to bind to
+  uint32_t        m_totalRx;      //!< Total bytes received
+  TypeId          m_tid;          //!< Protocol TypeId
+
+  /// Traced Callback: received packets, source address.
   TracedCallback<Ptr<const Packet>, const Address &> m_rxTrace;
 
 };
diff -Naur ns-3.18.1/src/applications/model/ping6.cc ns-3.19/src/applications/model/ping6.cc
--- ns-3.18.1/src/applications/model/ping6.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/ping6.cc	2013-12-20 09:44:50.000000000 -0800
@@ -38,9 +38,11 @@
 namespace ns3 
 {
 
-NS_LOG_COMPONENT_DEFINE ("Ping6Application");
+NS_LOG_COMPONENT_DEFINE ("Ping6Application")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (Ping6);
+NS_OBJECT_ENSURE_REGISTERED (Ping6)
+  ;
 
 TypeId Ping6::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/applications/model/radvd.cc ns-3.19/src/applications/model/radvd.cc
--- ns-3.18.1/src/applications/model/radvd.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/radvd.cc	2013-12-20 09:44:50.000000000 -0800
@@ -40,9 +40,11 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("RadvdApplication");
+NS_LOG_COMPONENT_DEFINE ("RadvdApplication")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (Radvd);
+NS_OBJECT_ENSURE_REGISTERED (Radvd)
+  ;
 
 TypeId Radvd::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/applications/model/radvd.h ns-3.19/src/applications/model/radvd.h
--- ns-3.18.1/src/applications/model/radvd.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/radvd.h	2013-12-20 09:44:50.000000000 -0800
@@ -91,12 +91,18 @@
   virtual void DoDispose ();
 
 private:
+  /// Container: Ptr to RadvdInterface
   typedef std::list<Ptr<RadvdInterface> > RadvdInterfaceList;
+  /// Container Iterator: Ptr to RadvdInterface
   typedef std::list<Ptr<RadvdInterface> >::iterator RadvdInterfaceListI;
+  /// Container Const Iterator: Ptr to RadvdInterface
   typedef std::list<Ptr<RadvdInterface> >::const_iterator RadvdInterfaceListCI;
 
+  /// Container: interface number, EventId
   typedef std::map<uint32_t, EventId> EventIdMap;
+  /// Container Iterator: interface number, EventId
   typedef std::map<uint32_t, EventId>::iterator EventIdMapI;
+  /// Container Const Iterator: interface number, EventId
   typedef std::map<uint32_t, EventId>::const_iterator EventIdMapCI;
 
   /**
diff -Naur ns-3.18.1/src/applications/model/radvd-interface.cc ns-3.19/src/applications/model/radvd-interface.cc
--- ns-3.18.1/src/applications/model/radvd-interface.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/radvd-interface.cc	2013-12-20 09:44:50.000000000 -0800
@@ -24,7 +24,8 @@
 namespace ns3 
 {
 
-NS_LOG_COMPONENT_DEFINE ("RadvdInterface");
+NS_LOG_COMPONENT_DEFINE ("RadvdInterface")
+  ;
 
 RadvdInterface::RadvdInterface (uint32_t interface)
   : m_interface (interface)
diff -Naur ns-3.18.1/src/applications/model/radvd-interface.h ns-3.19/src/applications/model/radvd-interface.h
--- ns-3.18.1/src/applications/model/radvd-interface.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/radvd-interface.h	2013-12-20 09:44:50.000000000 -0800
@@ -36,8 +36,11 @@
 class RadvdInterface : public SimpleRefCount<RadvdInterface>
 {
 public:
+  /// Container: Ptr to RadvdPrefix
   typedef std::list<Ptr<RadvdPrefix> > RadvdPrefixList;
+  /// Container Iterator: Ptr to RadvdPrefix
   typedef std::list<Ptr<RadvdPrefix> >::iterator RadvdPrefixListI;
+  /// Container Const Iterator: Ptr to RadvdPrefix
   typedef std::list<Ptr<RadvdPrefix> >::const_iterator RadvdPrefixListCI;
 
   /**
diff -Naur ns-3.18.1/src/applications/model/radvd-prefix.cc ns-3.19/src/applications/model/radvd-prefix.cc
--- ns-3.18.1/src/applications/model/radvd-prefix.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/radvd-prefix.cc	2013-12-20 09:44:50.000000000 -0800
@@ -24,7 +24,8 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("RadvdPrefix");
+NS_LOG_COMPONENT_DEFINE ("RadvdPrefix")
+  ;
 
 RadvdPrefix::RadvdPrefix (Ipv6Address network, uint8_t prefixLength, uint32_t preferredLifeTime, uint32_t validLifeTime, bool onLinkFlag, bool autonomousFlag, bool routerAddrFlag)
   : m_network (network),
diff -Naur ns-3.18.1/src/applications/model/seq-ts-header.cc ns-3.19/src/applications/model/seq-ts-header.cc
--- ns-3.18.1/src/applications/model/seq-ts-header.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/seq-ts-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (SeqTsHeader);
+NS_OBJECT_ENSURE_REGISTERED (SeqTsHeader)
+  ;
 
 SeqTsHeader::SeqTsHeader ()
   : m_seq (0),
diff -Naur ns-3.18.1/src/applications/model/seq-ts-header.h ns-3.19/src/applications/model/seq-ts-header.h
--- ns-3.18.1/src/applications/model/seq-ts-header.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/seq-ts-header.h	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 /**
  * \ingroup udpclientserver
  * \class SeqTsHeader
- * \brief Packet header for Udp client/server application
+ * \brief Packet header for UDP client/server application.
+ *
  * The header is made of a 32bits sequence number followed by
  * a 64bits time stamp.
  */
@@ -50,16 +51,21 @@
    */
   Time GetTs (void) const;
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
-private:
+
   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);
 
-  uint32_t m_seq;
-  uint64_t m_ts;
+private:
+  uint32_t m_seq; //!< Sequence number
+  uint64_t m_ts; //!< Timestamp
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/applications/model/udp-client.cc ns-3.19/src/applications/model/udp-client.cc
--- ns-3.18.1/src/applications/model/udp-client.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/udp-client.cc	2013-12-20 09:44:50.000000000 -0800
@@ -35,8 +35,10 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("UdpClient");
-NS_OBJECT_ENSURE_REGISTERED (UdpClient);
+NS_LOG_COMPONENT_DEFINE ("UdpClient")
+  ;
+NS_OBJECT_ENSURE_REGISTERED (UdpClient)
+  ;
 
 TypeId
 UdpClient::GetTypeId (void)
@@ -53,12 +55,11 @@
                    "The time to wait between packets", TimeValue (Seconds (1.0)),
                    MakeTimeAccessor (&UdpClient::m_interval),
                    MakeTimeChecker ())
-    .AddAttribute (
-      "RemoteAddress",
-      "The destination Address of the outbound packets",
-      AddressValue (),
-      MakeAddressAccessor (&UdpClient::m_peerAddress),
-      MakeAddressChecker ())
+    .AddAttribute ("RemoteAddress",
+                   "The destination Address of the outbound packets",
+                   AddressValue (),
+                   MakeAddressAccessor (&UdpClient::m_peerAddress),
+                   MakeAddressChecker ())
     .AddAttribute ("RemotePort", "The destination port of the outbound packets",
                    UintegerValue (100),
                    MakeUintegerAccessor (&UdpClient::m_peerPort),
diff -Naur ns-3.18.1/src/applications/model/udp-client.h ns-3.19/src/applications/model/udp-client.h
--- ns-3.18.1/src/applications/model/udp-client.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/udp-client.h	2013-12-20 09:44:50.000000000 -0800
@@ -43,8 +43,11 @@
 class UdpClient : public Application
 {
 public:
-  static TypeId
-  GetTypeId (void);
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
 
   UdpClient ();
 
@@ -52,11 +55,21 @@
 
   /**
    * \brief set the remote address and port
-   * \param ip remote IP address
+   * \param ip remote IPv4 address
    * \param port remote port
    */
   void SetRemote (Ipv4Address ip, uint16_t port);
+  /**
+   * \brief set the remote address and port
+   * \param ip remote IPv6 address
+   * \param port remote port
+   */
   void SetRemote (Ipv6Address ip, uint16_t port);
+  /**
+   * \brief set the remote address and port
+   * \param ip remote IP address
+   * \param port remote port
+   */
   void SetRemote (Address ip, uint16_t port);
 
 protected:
@@ -67,18 +80,20 @@
   virtual void StartApplication (void);
   virtual void StopApplication (void);
 
-  void ScheduleTransmit (Time dt);
+  /**
+   * \brief Send a packet
+   */
   void Send (void);
 
-  uint32_t m_count;
-  Time m_interval;
-  uint32_t m_size;
-
-  uint32_t m_sent;
-  Ptr<Socket> m_socket;
-  Address m_peerAddress;
-  uint16_t m_peerPort;
-  EventId m_sendEvent;
+  uint32_t m_count; //!< Maximum number of packets the application will send
+  Time m_interval; //!< Packet inter-send time
+  uint32_t m_size; //!< Size of the sent packet (including the SeqTsHeader)
+
+  uint32_t m_sent; //!< Counter for sent packets
+  Ptr<Socket> m_socket; //!< Socket
+  Address m_peerAddress; //!< Remote peer address
+  uint16_t m_peerPort; //!< Remote peer port
+  EventId m_sendEvent; //!< Event to send the next packet
 
 };
 
diff -Naur ns-3.18.1/src/applications/model/udp-echo-client.cc ns-3.19/src/applications/model/udp-echo-client.cc
--- ns-3.18.1/src/applications/model/udp-echo-client.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/udp-echo-client.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,8 +31,10 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("UdpEchoClientApplication");
-NS_OBJECT_ENSURE_REGISTERED (UdpEchoClient);
+NS_LOG_COMPONENT_DEFINE ("UdpEchoClientApplication")
+  ;
+NS_OBJECT_ENSURE_REGISTERED (UdpEchoClient)
+  ;
 
 TypeId
 UdpEchoClient::GetTypeId (void)
@@ -296,9 +298,9 @@
   else
     {
       //
-      // If m_dataSize is zero, the client has indicated that she doesn't care 
+      // If m_dataSize is zero, the client has indicated that it doesn't care
       // about the data itself either by specifying the data size by setting
-      // the corresponding atribute or by not calling a SetFill function.  In 
+      // the corresponding attribute or by not calling a SetFill function.  In
       // this case, we don't worry about it either.  But we do allow m_size
       // to have a value different from the (zero) m_dataSize.
       //
diff -Naur ns-3.18.1/src/applications/model/udp-echo-client.h ns-3.19/src/applications/model/udp-echo-client.h
--- ns-3.18.1/src/applications/model/udp-echo-client.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/udp-echo-client.h	2013-12-20 09:44:50.000000000 -0800
@@ -39,6 +39,10 @@
 class UdpEchoClient : public Application 
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   UdpEchoClient ();
@@ -46,12 +50,23 @@
   virtual ~UdpEchoClient ();
 
   /**
-   * \param ip destination ipv4 address
-   * \param port destination port
+   * \brief set the remote address and port
+   * \param ip remote IPv4 address
+   * \param port remote port
    */
-  void SetRemote (Address ip, uint16_t port);
   void SetRemote (Ipv4Address ip, uint16_t port);
+  /**
+   * \brief set the remote address and port
+   * \param ip remote IPv6 address
+   * \param port remote port
+   */
   void SetRemote (Ipv6Address ip, uint16_t port);
+  /**
+   * \brief set the remote address and port
+   * \param ip remote IP address
+   * \param port remote port
+   */
+  void SetRemote (Address ip, uint16_t port);
 
   /**
    * Set the data size of the packet (the number of bytes that are sent as data
@@ -130,23 +145,38 @@
   virtual void StartApplication (void);
   virtual void StopApplication (void);
 
+  /**
+   * \brief Schedule the next packet transmission
+   * \param dt time interval between packets.
+   */
   void ScheduleTransmit (Time dt);
+  /**
+   * \brief Send a packet
+   */
   void Send (void);
 
+  /**
+   * \brief Handle a packet reception.
+   *
+   * This function is called by lower layers.
+   *
+   * \param socket the socket the packet was received to.
+   */
   void HandleRead (Ptr<Socket> socket);
 
-  uint32_t m_count;
-  Time m_interval;
-  uint32_t m_size;
-
-  uint32_t m_dataSize;
-  uint8_t *m_data;
-
-  uint32_t m_sent;
-  Ptr<Socket> m_socket;
-  Address m_peerAddress;
-  uint16_t m_peerPort;
-  EventId m_sendEvent;
+  uint32_t m_count; //!< Maximum number of packets the application will send
+  Time m_interval; //!< Packet inter-send time
+  uint32_t m_size; //!< Size of the sent packet
+
+  uint32_t m_dataSize; //!< packet payload size (must be equal to m_size)
+  uint8_t *m_data; //!< packet payload data
+
+  uint32_t m_sent; //!< Counter for sent packets
+  Ptr<Socket> m_socket; //!< Socket
+  Address m_peerAddress; //!< Remote peer address
+  uint16_t m_peerPort; //!< Remote peer port
+  EventId m_sendEvent; //!< Event to send the next packet
+
   /// Callbacks for tracing the packet Tx events
   TracedCallback<Ptr<const Packet> > m_txTrace;
 };
diff -Naur ns-3.18.1/src/applications/model/udp-echo-server.cc ns-3.19/src/applications/model/udp-echo-server.cc
--- ns-3.18.1/src/applications/model/udp-echo-server.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/udp-echo-server.cc	2013-12-20 09:44:50.000000000 -0800
@@ -34,8 +34,10 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("UdpEchoServerApplication");
-NS_OBJECT_ENSURE_REGISTERED (UdpEchoServer);
+NS_LOG_COMPONENT_DEFINE ("UdpEchoServerApplication")
+  ;
+NS_OBJECT_ENSURE_REGISTERED (UdpEchoServer)
+  ;
 
 TypeId
 UdpEchoServer::GetTypeId (void)
diff -Naur ns-3.18.1/src/applications/model/udp-echo-server.h ns-3.19/src/applications/model/udp-echo-server.h
--- ns-3.18.1/src/applications/model/udp-echo-server.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/udp-echo-server.h	2013-12-20 09:44:50.000000000 -0800
@@ -43,6 +43,10 @@
 class UdpEchoServer : public Application 
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   UdpEchoServer ();
   virtual ~UdpEchoServer ();
@@ -55,12 +59,19 @@
   virtual void StartApplication (void);
   virtual void StopApplication (void);
 
+  /**
+   * \brief Handle a packet reception.
+   *
+   * This function is called by lower layers.
+   *
+   * \param socket the socket the packet was received to.
+   */
   void HandleRead (Ptr<Socket> socket);
 
-  uint16_t m_port;
-  Ptr<Socket> m_socket;
-  Ptr<Socket> m_socket6;
-  Address m_local;
+  uint16_t m_port; //!< Port on which we listen for incoming packets.
+  Ptr<Socket> m_socket; //!< IPv4 Socket
+  Ptr<Socket> m_socket6; //!< IPv6 Socket
+  Address m_local; //!< local multicast address
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/applications/model/udp-server.cc ns-3.19/src/applications/model/udp-server.cc
--- ns-3.18.1/src/applications/model/udp-server.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/udp-server.cc	2013-12-20 09:44:50.000000000 -0800
@@ -36,8 +36,10 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("UdpServer");
-NS_OBJECT_ENSURE_REGISTERED (UdpServer);
+NS_LOG_COMPONENT_DEFINE ("UdpServer")
+  ;
+NS_OBJECT_ENSURE_REGISTERED (UdpServer)
+  ;
 
 
 TypeId
diff -Naur ns-3.18.1/src/applications/model/udp-server.h ns-3.19/src/applications/model/udp-server.h
--- ns-3.18.1/src/applications/model/udp-server.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/udp-server.h	2013-12-20 09:44:50.000000000 -0800
@@ -37,30 +37,36 @@
 /**
  * \ingroup udpclientserver
  * \class UdpServer
- * \brief A Udp server. Receives UDP packets from a remote host. UDP packets
- * carry a 32bits sequence number followed by a 64bits time stamp in their
- * payloads. The application uses, the sequence number to determine if a packet
- * is lost, and the time stamp to compute the delay
+ * \brief A UDP server, receives UDP packets from a remote host.
+ *
+ * UDP packets carry a 32bits sequence number followed by a 64bits time
+ * stamp in their payloads. The application uses the sequence number
+ * to determine if a packet is lost, and the time stamp to compute the delay.
  */
 class UdpServer : public Application
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   UdpServer ();
   virtual ~UdpServer ();
   /**
-   * returns the number of lost packets
+   * \brief Returns the number of lost packets
    * \return the number of lost packets
    */
   uint32_t GetLost (void) const;
 
   /**
-   * \brief returns the number of received packets
+   * \brief Returns the number of received packets
    * \return the number of received packets
    */
   uint32_t GetReceived (void) const;
 
   /**
+   * \brief Returns the size of the window used for checking loss.
    * \return the size of the window used for checking loss.
    */
   uint16_t GetPacketWindowSize () const;
@@ -80,14 +86,20 @@
   virtual void StartApplication (void);
   virtual void StopApplication (void);
 
+  /**
+   * \brief Handle a packet reception.
+   *
+   * This function is called by lower layers.
+   *
+   * \param socket the socket the packet was received to.
+   */
   void HandleRead (Ptr<Socket> socket);
 
-  uint16_t m_port;
-  Ptr<Socket> m_socket;
-  Ptr<Socket> m_socket6;
-  Address m_local;
-  uint32_t m_received;
-  PacketLossCounter m_lossCounter;
+  uint16_t m_port; //!< Port on which we listen for incoming packets.
+  Ptr<Socket> m_socket; //!< IPv4 Socket
+  Ptr<Socket> m_socket6; //!< IPv6 Socket
+  uint32_t m_received; //!< Number of received packets
+  PacketLossCounter m_lossCounter; //!< Lost packet counter
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/applications/model/udp-trace-client.cc ns-3.19/src/applications/model/udp-trace-client.cc
--- ns-3.18.1/src/applications/model/udp-trace-client.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/udp-trace-client.cc	2013-12-20 09:44:50.000000000 -0800
@@ -37,9 +37,14 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("UdpTraceClient");
-NS_OBJECT_ENSURE_REGISTERED (UdpTraceClient);
+NS_LOG_COMPONENT_DEFINE ("UdpTraceClient")
+  ;
+NS_OBJECT_ENSURE_REGISTERED (UdpTraceClient)
+  ;
 
+/**
+ * \brief Default trace to send
+ */
 struct UdpTraceClient::TraceEntry UdpTraceClient::g_defaultEntries[] = {
   { 0, 534, 'I'},
   { 40, 1542, 'P'},
@@ -70,7 +75,7 @@
                    MakeUintegerAccessor (&UdpTraceClient::m_peerPort),
                    MakeUintegerChecker<uint16_t> ())
     .AddAttribute ("MaxPacketSize",
-                   "The maximum size of a packet.",
+                   "The maximum size of a packet (including the SeqTsHeader, 12 bytes).",
                    UintegerValue (1024),
                    MakeUintegerAccessor (&UdpTraceClient::m_maxPacketSize),
                    MakeUintegerChecker<uint32_t> ())
diff -Naur ns-3.18.1/src/applications/model/udp-trace-client.h ns-3.19/src/applications/model/udp-trace-client.h
--- ns-3.18.1/src/applications/model/udp-trace-client.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/udp-trace-client.h	2013-12-20 09:44:50.000000000 -0800
@@ -38,30 +38,32 @@
  * \class UdpTraceClient
  * \brief A trace based streamer
  *
- * sends udp packets based on a trace file of an MPEG4 stream
- * trace files could be downloaded form :
- * http://www.tkn.tu-berlin.de/research/trace/ltvt.html (the 2 first lines of
+ * Sends UDP packets based on a trace file of an MPEG4 stream
+ * trace files could be downloaded form:
+ * http://www2.tkn.tu-berlin.de/research/trace/ltvt.html (the 2 first lines of
  * the file should be removed)
  * A valid trace file is a file with 4 columns:
- * -1- the first one represents the frame index
- * -2- the second one indicates the type of the frame: I, P or B
- * -3- the third one indicates the time on which the frame was generated by the encoder
- * -4- the fourth one indicates the frame size in byte
- * if no valid MPEG4 trace file is provided to the application the trace from
+ * \li -1- the first one represents the frame index
+ * \li -2- the second one indicates the type of the frame: I, P or B
+ * \li -3- the third one indicates the time on which the frame was generated by the encoder
+ * \li -4- the fourth one indicates the frame size in byte
+ *
+ * If no valid MPEG4 trace file is provided to the application the trace from
  * g_defaultEntries array will be loaded.
  */
 class UdpTraceClient : public Application
 {
 public:
-  static TypeId
-  GetTypeId (void);
   /**
-   * \brief creates a traceBasedStreamer application
+   * \brief Get the type ID.
+   * \return the object TypeId
    */
+  static TypeId GetTypeId (void);
+
   UdpTraceClient ();
 
   /**
-   * \brief creates a traceBasedStreamer application
+   * \brief Creates a traceBasedStreamer application
    * \param ip the destination ip address to which the stream will be sent
    * \param port the destination udp port to which the stream will be sent
    * \param traceFile a path to an MPEG4 trace file formatted as follows:
@@ -71,21 +73,30 @@
    *
    *
    */
-
   UdpTraceClient (Ipv4Address ip, uint16_t port, char *traceFile);
   ~UdpTraceClient ();
 
   /**
-   * \brief set the destination IP address and port
-   * \param ip the destination ip address to which the stream will be sent
-   * \param port the destination udp port to which the stream will be sent
+   * \brief set the remote address and port
+   * \param ip remote IPv4 address
+   * \param port remote port
    */
-  void SetRemote (Address ip, uint16_t port);
   void SetRemote (Ipv4Address ip, uint16_t port);
+  /**
+   * \brief set the remote address and port
+   * \param ip remote IPv6 address
+   * \param port remote port
+   */
   void SetRemote (Ipv6Address ip, uint16_t port);
+  /**
+   * \brief set the remote address and port
+   * \param ip remote IP address
+   * \param port remote port
+   */
+  void SetRemote (Address ip, uint16_t port);
 
   /**
-   * \brief set the trace file to be used by the application
+   * \brief Set the trace file to be used by the application
    * \param filename a path to an MPEG4 trace file formatted as follows:
    *  Frame No Frametype   Time[ms]    Length [byte]
    *  Frame No Frametype   Time[ms]    Length [byte]
@@ -94,11 +105,13 @@
   void SetTraceFile (std::string filename);
 
   /**
+   * \brief Return the maximum packet size
    * \return the maximum packet size
    */
   uint16_t GetMaxPacketSize (void);
 
   /**
+   * \brief Set the maximum packet size
    * \param maxPacketSize The maximum packet size
    */
   void SetMaxPacketSize (uint16_t maxPacketSize);
@@ -107,30 +120,50 @@
   virtual void DoDispose (void);
 
 private:
+  /**
+   * \brief Load a trace file
+   * \param filename the trace file path
+   */
   void LoadTrace (std::string filename);
+  /**
+   * \brief Load the default trace
+   */
   void LoadDefaultTrace (void);
   virtual void StartApplication (void);
   virtual void StopApplication (void);
-  void ScheduleTransmit (Time dt);
+
+  /**
+   * \brief Send a packet
+   */
   void Send (void);
+  /**
+   * \brief Send a packet of a given size
+   * \param size the packet size
+   */
   void SendPacket (uint32_t size);
 
-
+  /**
+   * \brief Entry to send.
+   *
+   * Each entry represents an MPEG frame
+   */
   struct TraceEntry
   {
-    uint32_t timeToSend;
-    uint16_t packetSize;
-    char frameType;
+    uint32_t timeToSend; //!< Time to send the frame
+    uint16_t packetSize; //!< Size of the frame
+    char frameType; //!< Frame type (I, P or B)
   };
-  uint32_t m_sent;
-  Ptr<Socket> m_socket;
-  Address m_peerAddress;
-  uint16_t m_peerPort;
-  EventId m_sendEvent;
-  std::vector<struct TraceEntry> m_entries;
-  uint32_t m_currentEntry;
-  static struct TraceEntry g_defaultEntries[];
-  uint16_t m_maxPacketSize;
+
+  uint32_t m_sent; //!< Counter for sent packets
+  Ptr<Socket> m_socket; //!< Socket
+  Address m_peerAddress; //!< Remote peer address
+  uint16_t m_peerPort; //!< Remote peer port
+  EventId m_sendEvent; //!< Event to send the next packet
+
+  std::vector<struct TraceEntry> m_entries; //!< Entries in the trace to send
+  uint32_t m_currentEntry; //!< Current entry index
+  static struct TraceEntry g_defaultEntries[]; //!< Default trace to send
+  uint16_t m_maxPacketSize; //!< Maximum packet size to send (including the SeqTsHeader)
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/applications/model/v4ping.cc ns-3.19/src/applications/model/v4ping.cc
--- ns-3.18.1/src/applications/model/v4ping.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/v4ping.cc	2013-12-20 09:44:50.000000000 -0800
@@ -13,6 +13,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
+
 #include "v4ping.h"
 #include "ns3/icmpv4.h"
 #include "ns3/assert.h"
@@ -27,8 +28,10 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("V4Ping");
-NS_OBJECT_ENSURE_REGISTERED (V4Ping);
+NS_LOG_COMPONENT_DEFINE ("V4Ping")
+  ;
+NS_OBJECT_ENSURE_REGISTERED (V4Ping)
+  ;
 
 TypeId 
 V4Ping::GetTypeId (void)
diff -Naur ns-3.18.1/src/applications/model/v4ping.h ns-3.19/src/applications/model/v4ping.h
--- ns-3.18.1/src/applications/model/v4ping.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/applications/model/v4ping.h	2013-12-20 09:44:50.000000000 -0800
@@ -13,6 +13,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
+
 #ifndef V4PING_H
 #define V4PING_H
 
@@ -28,6 +29,12 @@
 class Socket;
 
 /**
+ * \ingroup applications
+ * \defgroup v4ping V4Ping
+ */
+
+/**
+ * \ingroup v4ping
  * \brief an application which sends one ICMP ECHO request, waits for a REPLYs
  *        and reports the calculated RTT.
  *
@@ -36,6 +43,10 @@
 class V4Ping : public Application
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -45,15 +56,42 @@
   virtual ~V4Ping ();
 
 private:
+  /**
+   * \brief Writes data to buffer in little-endian format.
+   *
+   * Least significant byte of data is at lowest buffer address
+   *
+   * \param buffer the buffer to write to
+   * \param data the data to write
+   */
   void Write32 (uint8_t *buffer, const uint32_t data);
+  /**
+   * \brief Writes data from a little-endian formatted buffer to data.
+   *
+   * \param buffer the buffer to read from
+   * \param data the read data
+   */
   void Read32 (const uint8_t *buffer, uint32_t &data);
 
   // inherited from Application base class.
   virtual void StartApplication (void);
   virtual void StopApplication (void);
   virtual void DoDispose (void);
+  /**
+   * \brief Return the application ID in the node.
+   * \returns the application id
+   */
   uint32_t GetApplicationId (void) const;
+  /**
+   * \brief Receive an ICMP Echo
+   * \param socket the receiving socket
+   *
+   * This function is called by lower layers through a callback.
+   */
   void Receive (Ptr<Socket> socket);
+  /**
+   * \brief Send one Ping (ICMP ECHO) to the destination
+   */
   void Send ();
 
   /// Remote address
@@ -65,8 +103,11 @@
    * The default is 56, which translates into 64 ICMP data bytes when combined with the 8 bytes of ICMP header data.
    */
   uint32_t m_size;
+  /// The socket we send packets from
   Ptr<Socket> m_socket;
+  /// ICMP ECHO sequence number
   uint16_t m_seq;
+  /// TracedCallback for RTT measured by ICMP ECHOs
   TracedCallback<Time> m_traceRtt;
   /// produce ping-style output if true
   bool m_verbose;
diff -Naur ns-3.18.1/src/bridge/bindings/modulegen__gcc_ILP32.py ns-3.19/src/bridge/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/bridge/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/bridge/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -93,7 +93,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -723,10 +723,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -1676,6 +1677,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -1686,6 +1692,11 @@
                    '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', 
@@ -1701,6 +1712,11 @@
                    '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', 
@@ -1726,6 +1742,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/bridge/bindings/modulegen__gcc_LP64.py ns-3.19/src/bridge/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/bridge/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/bridge/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -93,7 +93,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -723,10 +723,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -1676,6 +1677,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -1686,6 +1692,11 @@
                    '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', 
@@ -1701,6 +1712,11 @@
                    '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', 
@@ -1726,6 +1742,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/bridge/model/bridge-channel.cc ns-3.19/src/bridge/model/bridge-channel.cc
--- ns-3.18.1/src/bridge/model/bridge-channel.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/bridge/model/bridge-channel.cc	2013-12-20 09:44:50.000000000 -0800
@@ -23,7 +23,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (BridgeChannel);
+NS_OBJECT_ENSURE_REGISTERED (BridgeChannel)
+  ;
 
 TypeId 
 BridgeChannel::GetTypeId (void)
diff -Naur ns-3.18.1/src/bridge/model/bridge-net-device.cc ns-3.19/src/bridge/model/bridge-net-device.cc
--- ns-3.18.1/src/bridge/model/bridge-net-device.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/bridge/model/bridge-net-device.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (BridgeNetDevice);
+NS_OBJECT_ENSURE_REGISTERED (BridgeNetDevice)
+  ;
 
 
 TypeId
diff -Naur ns-3.18.1/src/bridge/model/bridge-net-device.h ns-3.19/src/bridge/model/bridge-net-device.h
--- ns-3.18.1/src/bridge/model/bridge-net-device.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/bridge/model/bridge-net-device.h	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,7 @@
 class Node;
 
 /**
- * \defgroup bridge Bridge Device
+ * \defgroup bridge Bridge Network Device
  * 
  * \brief a virtual net device that bridges multiple LAN segments
  *
diff -Naur ns-3.18.1/src/brite/doc/brite.rst ns-3.19/src/brite/doc/brite.rst
--- ns-3.18.1/src/brite/doc/brite.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/brite/doc/brite.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: bash
 
 BRITE Integration
 ------------------
@@ -30,9 +31,7 @@
 router topologies as specified by the AS level topology.  Once the hierarchical 
 topology is constructed, it is flattened into a large router level topology.
 
-Further information can be found in the BRITE user manual:::
-
-	http://www.cs.bu.edu/brite/publications/usermanual.pdf
+Further information can be found in the BRITE user manual: http://www.cs.bu.edu/brite/publications/usermanual.pdf
 
 Model Description
 *****************
@@ -86,7 +85,7 @@
 Building BRITE Integration
 ==========================
 
-The first step is to download and build the ns-3 specific BRITE repository:::
+The first step is to download and build the ns-3 specific BRITE repository::
 
   $ hg clone http://code.nsnam.org/BRITE
   $ cd BRITE
@@ -96,7 +95,7 @@
 directory.
 
 Once BRITE has been built successfully, we proceed to configure ns-3 with 
-BRITE support. Change to your ns-3 directory:::
+BRITE support. Change to your ns-3 directory::
 
   $ ./waf configure --with-brite=/your/path/to/brite/source --enable-examples
 
@@ -104,14 +103,14 @@
 something has gone wrong. Either you have forgotten to build BRITE first 
 following the steps above, or ns-3 could not find your BRITE directory.
 
-Next, build ns-3:::
+Next, build ns-3::
 
   $ ./waf
 
 Examples
 ========
 For an example demonstrating BRITE integration
-run:::
+run::
 
   $ ./waf --run 'brite-generic-example'
 
@@ -119,25 +118,28 @@
 edge information in a similar format to standard BRITE output. There are 
 many other command-line parameters including confFile, tracing, and nix, described below:
    
-   confFile:    A BRITE configuration file. Many different BRITE configuration 
-                file examples exist in the src/brite/examples/conf_files directory, for 
-                example, RTBarabasi20.conf and RTWaxman.conf. Please refer to 
-                the conf_files directory for more examples.
+  confFile
+    A BRITE configuration file. Many different BRITE configuration 
+    file examples exist in the src/brite/examples/conf_files directory, for 
+    example, RTBarabasi20.conf and RTWaxman.conf. Please refer to 
+    the conf_files directory for more examples.
 
-   tracing:     Enables ascii tracing.
+  tracing
+    Enables ascii tracing.
 
-   nix:         Enables nix-vector routing. Global routing is used by default.
+  nix
+    Enables nix-vector routing. Global routing is used by default.
 
 The generic BRITE example also support visualization using pyviz, assuming
-python bindings in ns-3 are enabled:::
+python bindings in ns-3 are enabled::
 
   $ ./waf --run brite-generic-example --vis
   
 Simulations involving BRITE can also be used with MPI.  The total number of MPI instances is 
 passed to the BRITE topology helper where a modulo divide is used to assign the nodes for each 
-AS to a MPI instance.  An example can be found in src/brite/examples:::
+AS to a MPI instance.  An example can be found in src/brite/examples::
 
-	$ mpirun -np 2 ./waf --run brite-MPI-example
+  $ mpirun -np 2 ./waf --run brite-MPI-example
 	
 Please see the ns-3 MPI documentation for information on setting up MPI with ns-3.
 
diff -Naur ns-3.18.1/src/brite/helper/brite-topology-helper.cc ns-3.19/src/brite/helper/brite-topology-helper.cc
--- ns-3.18.1/src/brite/helper/brite-topology-helper.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/brite/helper/brite-topology-helper.cc	2013-12-20 09:44:50.000000000 -0800
@@ -36,13 +36,14 @@
 
 BriteTopologyHelper::BriteTopologyHelper (std::string confFile,
                                           std::string seedFile,
-                                          std::string newseedFile) : m_confFile (confFile),
-                                                                     m_seedFile (seedFile),
-                                                                     m_newSeedFile (newseedFile),
-                                                                     m_numAs (0),
-                                                                     m_topology (NULL),
-                                                                     m_numNodes (0),
-                                                                     m_numEdges (0)
+                                          std::string newseedFile)
+  : m_confFile (confFile),
+    m_seedFile (seedFile),
+    m_newSeedFile (newseedFile),
+    m_numAs (0),
+    m_topology (NULL),
+    m_numNodes (0),
+    m_numEdges (0)
 {
   NS_LOG_FUNCTION (this);
 
@@ -50,11 +51,12 @@
 
 }
 
-BriteTopologyHelper::BriteTopologyHelper (std::string confFile) : m_confFile (confFile),
-                                                                  m_numAs (0),
-                                                                  m_topology (NULL),
-                                                                  m_numNodes (0),
-                                                                  m_numEdges (0)
+BriteTopologyHelper::BriteTopologyHelper (std::string confFile)
+  : m_confFile (confFile),
+    m_numAs (0),
+    m_topology (NULL),
+    m_numNodes (0),
+    m_numEdges (0)
 {
   NS_LOG_FUNCTION (this);
 
diff -Naur ns-3.18.1/src/brite/helper/brite-topology-helper.h ns-3.19/src/brite/helper/brite-topology-helper.h
--- ns-3.18.1/src/brite/helper/brite-topology-helper.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/brite/helper/brite-topology-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -34,7 +34,16 @@
 
 namespace ns3 {
 
+class PointToPointHelper;
+
 /**
+ * \defgroup brite BRITE Topology Generator
+ *
+ * Create topologies with BRITE.
+ */
+
+/**
+ * \ingroup brite
  * \brief Interface with BRITE, the Boston university Representative Internet
  *        Topology gEnerator
  *
@@ -47,12 +56,10 @@
  *
  */
 
-class PointToPointHelper;
-
 class BriteTopologyHelper
 {
 public:
-  /*
+  /**
    * Construct a BriteTopologyHelper
    *
    * \param confFile a BRITE configuration file
@@ -63,7 +70,7 @@
                        std::string seedFile,
                        std::string newseedFile);
 
-  /*
+  /**
    * Construct a BriteTopologyHelper using NS3 to generate seed values
    * need by BRITE
    *
@@ -72,7 +79,7 @@
 
   ~BriteTopologyHelper ();
 
-  /*
+  /**
    * Assigns stream number to UniformRandomVariable used to
    * generate brite seed file
    *
@@ -81,14 +88,14 @@
    */
   void AssignStreams (int64_t streamNumber);
 
-  /*
+  /**
    *  Create NS3 topology using information generated from BRITE.
    *
    *  \param stack Internet stack to assign to nodes in topology
    */
   void BuildBriteTopology (InternetStackHelper& stack);
 
-  /*
+  /**
    * Create NS3 topology using information generated from BRITE and configure topology for MPI use.
    *
    * \param stack Internet stack to assign to nodes in topology.
@@ -97,7 +104,7 @@
    */
   void BuildBriteTopology (InternetStackHelper& stack, const uint32_t systemCount);
 
-  /*
+  /**
    * Returns the number of router leaf nodes for a given AS
    *
    * \param asNum the AS number
@@ -106,7 +113,7 @@
    */
   uint32_t GetNLeafNodesForAs (uint32_t asNum);
 
-  /*
+  /**
    * Returns a given router leaf node from a given AS
    *
    * \param asNum the AS number
@@ -115,7 +122,7 @@
    */
   Ptr<Node> GetLeafNodeForAs (uint32_t asNum, uint32_t leafNum);
 
-  /*
+  /**
    * Returns the total number of nodes for a given AS
    *
    * \param asNum the AS number
@@ -123,7 +130,7 @@
    */
   uint32_t GetNNodesForAs (uint32_t asNum);
 
-  /*
+  /**
    * Returns a given router node for a given AS
    *
    * \param asNum the AS number
@@ -244,52 +251,56 @@
     */
   void GenerateBriteTopology (void);
 
-  //brite configuration file to use
+  /// brite configuration file to use
   std::string m_confFile;
 
-  //brite seed file to use
+  /// brite seed file to use
   std::string m_seedFile;
 
-  //brite seed file to generate for next run
+  /// brite seed file to generate for next run
   std::string m_newSeedFile;
 
-  //stores the number of AS in the BRITE generated topology
+  /// stores the number of AS in the BRITE generated topology
   uint32_t m_numAs;
 
-  //stores the netdevices created for each AS
+  /// stores the netdevices created for each AS
   std::vector<NetDeviceContainer*> m_netDevices;
 
-  //stores the leaf router nodes for each AS
+  /// stores the leaf router nodes for each AS
   std::vector<NodeContainer*> m_asLeafNodes;
 
-  //stores all of the nodes in the brite topology by AS number
+  /// stores all of the nodes in the brite topology by AS number
   std::vector<NodeContainer*> m_nodesByAs;
 
-  //stores the MPI system number each AS assigned to.  All assigned to 0 if MPI not used.
+  /// stores the MPI system number each AS assigned to.  All assigned to 0 if MPI not used.
   std::vector<int> m_systemForAs;
 
+  /// the Brite topology
   brite::Topology* m_topology;
 
-  //stores the number of nodes created in the BRITE topology
+  /// stores the number of nodes created in the BRITE topology
   uint32_t m_numNodes;
 
-  //stores the number of edges created in the BRITE topology
+  /// stores the number of edges created in the BRITE topology
   uint32_t m_numEdges;
 
   /**
    * The BRITE code generates multiple nodes and edges. Each
    * node and edge is stored in a BriteNodeInfo or BriteEdgeInfo
    * struct, and each instance is stored in a vector.
+   * @{
    */
   typedef std::vector<BriteNodeInfo> BriteNodeInfoList;
   typedef std::vector<BriteEdgeInfo> BriteEdgeInfoList;
 
   BriteNodeInfoList m_briteNodeInfoList;
   BriteEdgeInfoList m_briteEdgeInfoList;
+  /**@}*/
 
-  //used to create the links within the topology
+  /// used to create the links within the topology
   PointToPointHelper m_britePointToPointHelper;
 
+  /// random variable stream for brite seed file
   Ptr<UniformRandomVariable> m_uv;
 };
 
diff -Naur ns-3.18.1/src/buildings/bindings/modulegen__gcc_ILP32.py ns-3.19/src/buildings/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/buildings/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/buildings/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -133,7 +133,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1079,10 +1079,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -2381,6 +2382,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -2391,6 +2397,11 @@
                    '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', 
@@ -2406,6 +2417,11 @@
                    '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', 
@@ -2431,6 +2447,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/buildings/bindings/modulegen__gcc_LP64.py ns-3.19/src/buildings/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/buildings/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/buildings/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -133,7 +133,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1079,10 +1079,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -2381,6 +2382,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -2391,6 +2397,11 @@
                    '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', 
@@ -2406,6 +2417,11 @@
                    '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', 
@@ -2431,6 +2447,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/buildings/doc/source/buildings-design.rst ns-3.19/src/buildings/doc/source/buildings-design.rst
--- ns-3.18.1/src/buildings/doc/source/buildings-design.rst	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/buildings/doc/source/buildings-design.rst	2013-12-20 09:44:50.000000000 -0800
@@ -145,7 +145,9 @@
 Shadowing Model
 ---------------
 
-The shadowing is modeled according to a log-normal distribution with variable standard deviation as function of the connection characteristics. In the implementation we considered three main possible scenarios which correspond to three standard deviations (i.e., the mean is always 0), in detail:
+The shadowing is modeled according to a log-normal distribution with variable standard deviation as function of the relative position (indoor or outdoor) of the MobilityModel instances involved. One random value is drawn for each pair of MobilityModels, and stays constant for that pair during the whole simulation. Thus, the model is appropriate for static nodes only. 
+
+The model considers that the mean of the shadowing loss in dB is always 0. For the variance, the model considers three possible values of standard deviation, in detail:
 
  * outdoor (``m_shadowingSigmaOutdoor``, defaul value of 7 dB) :math:`\rightarrow X_\mathrm{O} \sim N(\mu_\mathrm{O}, \sigma_\mathrm{O}^2)`.
  * indoor (``m_shadowingSigmaIndoor``, defaul value of 10 dB) :math:`\rightarrow X_\mathrm{I} \sim N(\mu_\mathrm{I}, \sigma_\mathrm{I}^2)`.
diff -Naur ns-3.18.1/src/buildings/doc/source/buildings-testing.rst ns-3.19/src/buildings/doc/source/buildings-testing.rst
--- ns-3.18.1/src/buildings/doc/source/buildings-testing.rst	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/buildings/doc/source/buildings-testing.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,3 +1,5 @@
+.. highlight:: bash
+
 +++++++++++++++++++++++++++++++++++++
  Testing Documentation
 +++++++++++++++++++++++++++++++++++++
@@ -8,20 +10,20 @@
 
 To test and validate the ns-3 Building Pathloss module, some test suites is provided which are integrated with the ns-3 test framework. To run them, you need to have configured the build of the simulator in this way::
 
-    ./waf configure --enable-tests --enable-modules=buildings
-    ./test.py
+    $ ./waf configure --enable-tests --enable-modules=buildings
+    $ ./test.py
 
 The above will run not only the test suites belonging to the buildings module, but also those belonging to all the other ns-3 modules on which the buildings module depends. See the ns-3 manual for generic information on the testing framework.
 
 You can get a more detailed report in HTML format in this way::
 
-    ./test.py -w results.html
+    $ ./test.py -w results.html
 
 After the above command has run, you can view the detailed result for each test by opening the file ``results.html`` with a web browser. 
 
 You can run each test suite separately using this command::
 
-    ./test.py -s test-suite-name
+    $ ./test.py -s test-suite-name
 
 For more details about ``test.py`` and the ns-3 testing framework, please refer to the ns-3 manual.
 
@@ -105,6 +107,6 @@
 Buildings Shadowing Test
 ~~~~~~~~~~~~~~~~~~~~~~~~
 
-The test suite ``buildings-shadowing-test`` is a unit test intended to verify the statistics distribution characteristics of the shadowing are the one expected. The shadowing is modeled according to a normal distribution with mean :math:`\mu = 0` and variable standard deviation :math:`\sigma`, according to models commonly used in literature.
-The test generates 10,000 samples of shadowing by subtracting the deterministic component from the total loss returned by the ``BuildingPathlossModel``. The mean and variance of the shadowing samples are then used to verify whether the 99% confidence interval is respected by the sequence generated by the simulator.
+The test suite ``buildings-shadowing-test`` is a unit test intended to verify the statistical distribution of the shadowing model implemented by ``BuildingsPathlossModel``. The shadowing is modeled according to a normal distribution with mean :math:`\mu = 0` and variable standard deviation :math:`\sigma`, according to models commonly used in literature. Three test cases are provided, which cover the cases of indoor, outdoor and indoor-to-outdoor communications. 
+Each test case generates 1000 different samples of shadowing for different pairs of MobilityModel instances in a given scenario. Shadowing values are obtained by subtracting from the total loss value returned by ``HybridBuildingsPathlossModel`` the path loss component which is constant and pre-determined for each test case. The test verifies that the sample mean and sample variance of the shadowing values fall within the 99% confidence interval of the sample mean and sample variance. The test also verifies that the shadowing values returned at successive times for the same pair of MobilityModel instances is constant.
 
diff -Naur ns-3.18.1/src/buildings/examples/buildings-pathloss-profiler.cc ns-3.19/src/buildings/examples/buildings-pathloss-profiler.cc
--- ns-3.18.1/src/buildings/examples/buildings-pathloss-profiler.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/buildings/examples/buildings-pathloss-profiler.cc	2013-12-20 09:44:50.000000000 -0800
@@ -21,7 +21,6 @@
 #include "ns3/core-module.h"
 #include "ns3/network-module.h"
 #include "ns3/mobility-module.h"
-#include "ns3/lte-module.h"
 #include "ns3/config-store.h"
 #include <ns3/buildings-helper.h>
 #include <ns3/hybrid-buildings-propagation-loss-model.h>
diff -Naur ns-3.18.1/src/buildings/helper/building-allocator.cc ns-3.19/src/buildings/helper/building-allocator.cc
--- ns-3.18.1/src/buildings/helper/building-allocator.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/buildings/helper/building-allocator.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (GridBuildingAllocator);
+NS_OBJECT_ENSURE_REGISTERED (GridBuildingAllocator)
+  ;
 
 GridBuildingAllocator::GridBuildingAllocator ()
   : m_current (0)
diff -Naur ns-3.18.1/src/buildings/helper/building-position-allocator.cc ns-3.19/src/buildings/helper/building-position-allocator.cc
--- ns-3.18.1/src/buildings/helper/building-position-allocator.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/buildings/helper/building-position-allocator.cc	2013-12-20 09:44:50.000000000 -0800
@@ -37,7 +37,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (RandomBuildingPositionAllocator);
+NS_OBJECT_ENSURE_REGISTERED (RandomBuildingPositionAllocator)
+  ;
 
 
 RandomBuildingPositionAllocator::RandomBuildingPositionAllocator ()
@@ -104,7 +105,8 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (RandomRoomPositionAllocator);
+NS_OBJECT_ENSURE_REGISTERED (RandomRoomPositionAllocator)
+  ;
 
 
 RandomRoomPositionAllocator::RandomRoomPositionAllocator ()
@@ -192,7 +194,8 @@
 
 
 
-NS_OBJECT_ENSURE_REGISTERED (SameRoomPositionAllocator);
+NS_OBJECT_ENSURE_REGISTERED (SameRoomPositionAllocator)
+  ;
 
 SameRoomPositionAllocator::SameRoomPositionAllocator ()
 {
@@ -282,7 +285,8 @@
   return 1;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (FixedRoomPositionAllocator);
+NS_OBJECT_ENSURE_REGISTERED (FixedRoomPositionAllocator)
+  ;
 
 
 FixedRoomPositionAllocator::FixedRoomPositionAllocator (
diff -Naur ns-3.18.1/src/buildings/model/building.cc ns-3.19/src/buildings/model/building.cc
--- ns-3.18.1/src/buildings/model/building.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/buildings/model/building.cc	2013-12-20 09:44:50.000000000 -0800
@@ -34,7 +34,8 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (Building);
+NS_OBJECT_ENSURE_REGISTERED (Building)
+  ;
 
 TypeId
 Building::GetTypeId (void)
diff -Naur ns-3.18.1/src/buildings/model/building-list.cc ns-3.19/src/buildings/model/building-list.cc
--- ns-3.18.1/src/buildings/model/building-list.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/buildings/model/building-list.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("BuildingList");
+NS_LOG_COMPONENT_DEFINE ("BuildingList")
+  ;
 
 /**
  * \brief private implementation detail of the BuildingList API.
@@ -57,7 +58,8 @@
   std::vector<Ptr<Building> > m_buildings;
 };
 
-NS_OBJECT_ENSURE_REGISTERED (BuildingListPriv);
+NS_OBJECT_ENSURE_REGISTERED (BuildingListPriv)
+  ;
 
 TypeId
 BuildingListPriv::GetTypeId (void)
diff -Naur ns-3.18.1/src/buildings/model/buildings-propagation-loss-model.cc ns-3.19/src/buildings/model/buildings-propagation-loss-model.cc
--- ns-3.18.1/src/buildings/model/buildings-propagation-loss-model.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/buildings/model/buildings-propagation-loss-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -35,7 +35,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (BuildingsPropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (BuildingsPropagationLossModel)
+  ;
 
 BuildingsPropagationLossModel::ShadowingLoss::ShadowingLoss ()
 {
diff -Naur ns-3.18.1/src/buildings/model/hybrid-buildings-propagation-loss-model.cc ns-3.19/src/buildings/model/hybrid-buildings-propagation-loss-model.cc
--- ns-3.18.1/src/buildings/model/hybrid-buildings-propagation-loss-model.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/buildings/model/hybrid-buildings-propagation-loss-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -41,7 +41,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (HybridBuildingsPropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (HybridBuildingsPropagationLossModel)
+  ;
 
 
 
diff -Naur ns-3.18.1/src/buildings/model/itu-r-1238-propagation-loss-model.cc ns-3.19/src/buildings/model/itu-r-1238-propagation-loss-model.cc
--- ns-3.18.1/src/buildings/model/itu-r-1238-propagation-loss-model.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/buildings/model/itu-r-1238-propagation-loss-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -32,7 +32,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ItuR1238PropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (ItuR1238PropagationLossModel)
+  ;
 
 
 TypeId
diff -Naur ns-3.18.1/src/buildings/model/mobility-building-info.cc ns-3.19/src/buildings/model/mobility-building-info.cc
--- ns-3.18.1/src/buildings/model/mobility-building-info.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/buildings/model/mobility-building-info.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (MobilityBuildingInfo);
+NS_OBJECT_ENSURE_REGISTERED (MobilityBuildingInfo)
+  ;
 
 TypeId
 MobilityBuildingInfo::GetTypeId (void)
diff -Naur ns-3.18.1/src/buildings/model/oh-buildings-propagation-loss-model.cc ns-3.19/src/buildings/model/oh-buildings-propagation-loss-model.cc
--- ns-3.18.1/src/buildings/model/oh-buildings-propagation-loss-model.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/buildings/model/oh-buildings-propagation-loss-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -35,7 +35,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (OhBuildingsPropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (OhBuildingsPropagationLossModel)
+  ;
 
 
 
diff -Naur ns-3.18.1/src/buildings/test/buildings-shadowing-test.cc ns-3.19/src/buildings/test/buildings-shadowing-test.cc
--- ns-3.18.1/src/buildings/test/buildings-shadowing-test.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/buildings/test/buildings-shadowing-test.cc	2013-12-20 09:44:50.000000000 -0800
@@ -81,7 +81,6 @@
     m_lossRef (refValue),
     m_sigmaRef (sigmaRef)
 {
-  NS_UNUSED (m_sigmaRef); // suppress private field unused warning
 }
 
 BuildingsShadowingTestCase::~BuildingsShadowingTestCase ()
@@ -101,28 +100,43 @@
   building1->SetExtWallsType (Building::ConcreteWithWindows);
   building1->SetNFloors (3);
   
-  Ptr<MobilityModel> mma = CreateMobilityModel (m_mobilityModelIndex1);
-  Ptr<MobilityModel> mmb = CreateMobilityModel (m_mobilityModelIndex2);
-
+  Ptr<HybridBuildingsPropagationLossModel> propagationLossModel = CreateObject<HybridBuildingsPropagationLossModel> ();
+  
   std::vector<double> loss;
   double sum = 0.0;
   double sumSquared = 0.0;
-  int samples = 10000;
+  int samples = 1000;
   for (int i = 0; i < samples; i++)
     {
-      Ptr<HybridBuildingsPropagationLossModel> propagationLossModel = CreateObject<HybridBuildingsPropagationLossModel> ();
-      loss.push_back (propagationLossModel->DoCalcRxPower (0.0, mma, mmb) + m_lossRef);
-      sum += loss.at (loss.size () - 1);
-      sumSquared += (loss.at (loss.size () - 1) * loss.at (loss.size () - 1));
+      Ptr<MobilityModel> mma = CreateMobilityModel (m_mobilityModelIndex1);
+      Ptr<MobilityModel> mmb = CreateMobilityModel (m_mobilityModelIndex2);
+      double shadowingLoss = propagationLossModel->DoCalcRxPower (0.0, mma, mmb) + m_lossRef;
+      double shadowingLoss2 = propagationLossModel->DoCalcRxPower (0.0, mma, mmb) + m_lossRef;
+      NS_TEST_ASSERT_MSG_EQ_TOL (shadowingLoss, shadowingLoss2, 0.001, 
+                                 "Shadowing is not constant for the same mobility model pair!");
+      loss.push_back (shadowingLoss);
+      sum += shadowingLoss;
+      sumSquared += (shadowingLoss * shadowingLoss);
     }
-  double mean = sum / samples;
-  double sigma = std::sqrt (sumSquared / samples - (mean * mean));
-  // test whether the distribution falls in the 99% confidence interval, as expected with a nornal distribution
-  double ci = (2.575829303549 * sigma) / std::sqrt (samples);
-
-  NS_LOG_INFO ("Mean from simulation " << mean << ", sigma " << sigma << ", reference value " << m_sigmaRef << ", CI(99%) " << ci);
+  double sampleMean = sum / samples;
+  double sampleVariance = (sumSquared - (sum * sum / samples)) / (samples - 1);
+  double sampleStd = std::sqrt (sampleVariance);
+
+  // test whether the sample mean falls in the 99% confidence interval
+  const double zn995 = 2.575829303549; // 99.5 quantile of the normal distribution
+  double ci = (zn995 * sampleStd) / std::sqrt (samples);
+  NS_LOG_INFO ("SampleMean from simulation " << sampleMean << ", sampleStd " << sampleStd << ", reference value " << m_sigmaRef << ", CI(99%) " << ci);
+  NS_TEST_ASSERT_MSG_EQ_TOL (std::fabs (sampleMean), 0.0, ci, "Wrong shadowing distribution !");
+
+  // test whether the sample variance falls in the 99% confidence interval
+  // since the shadowing is gaussian, its sample variance follows the 
+  // chi2 distribution with samples-1 degrees of freedom
+  double chi2 = (samples - 1) *  sampleVariance / (m_sigmaRef*m_sigmaRef);
+  const double zchi2_005 = 887.621135217515;  //  0.5% quantile of the chi2 distribution 
+  const double zchi2_995 = 1117.89045267865;  // 99.5% quantile of the chi2 distribution
+  NS_TEST_ASSERT_MSG_GT (chi2, zchi2_005, "sample variance lesser than expected");
+  NS_TEST_ASSERT_MSG_LT (chi2, zchi2_995, "sample variance greater than expected");
 
-  NS_TEST_ASSERT_MSG_EQ_TOL (std::fabs (mean), 0.0, ci, "Wrong shadowing distribution !");
   Simulator::Destroy ();
 }
 
diff -Naur ns-3.18.1/src/click/doc/click.rst ns-3.19/src/click/doc/click.rst
--- ns-3.18.1/src/click/doc/click.rst	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/click/doc/click.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,3 +1,5 @@
+.. highlight:: bash
+
 Click Modular Router Integration
 --------------------------------
 
@@ -78,10 +80,10 @@
 
 The first step is to clone Click from the github repository and build it::
 
-  $: git clone https://github.com/kohler/click
-  $: cd click/
-  $: ./configure --disable-linuxmodule --enable-nsclick --enable-wifi
-  $: make
+  $ git clone https://github.com/kohler/click
+  $ cd click/
+  $ ./configure --disable-linuxmodule --enable-nsclick --enable-wifi
+  $ make
 
 The --enable-wifi flag may be skipped if you don't intend on using Click with Wifi.
 * Note: You don't need to do a 'make install'. 
@@ -89,7 +91,7 @@
 Once Click has been built successfully, change into the ns-3 directory and 
 configure ns-3 with Click Integration support::
 
-  $: ./waf configure --enable-examples --enable-tests --with-nsclick=/path/to/click/source
+  $ ./waf configure --enable-examples --enable-tests --with-nsclick=/path/to/click/source
 
 Hint:  If you have click installed one directory above ns-3 (such as in the
 ns-3-allinone directory), and the name of the directory is 'click' (or
@@ -101,7 +103,7 @@
 
 Next, try running one of the examples::
 
-  $: ./waf --run nsclick-simple-lan
+  $ ./waf --run nsclick-simple-lan
 
 You may then view the resulting .pcap traces, which are named nsclick-simple-lan-0-0.pcap and nsclick-simple-lan-0-1.pcap.
 
@@ -120,7 +122,9 @@
 Debugging Packet Flows from Click
 =================================
 
-From any point within a Click graph, you may use the Print (http://read.cs.ucla.edu/click/elements/print) element and its variants for pretty printing of packet contents. Furthermore, you may generate pcap traces of packets flowing through a Click graph by using the ToDump (http://read.cs.ucla.edu/click/elements/todump) element as well. For instance::
+From any point within a Click graph, you may use the Print (http://read.cs.ucla.edu/click/elements/print) element and its variants for pretty printing of packet contents. Furthermore, you may generate pcap traces of packets flowing through a Click graph by using the ToDump (http://read.cs.ucla.edu/click/elements/todump) element as well. For instance:
+
+.. sourcecode:: cpp
 
   myarpquerier
    -> Print(fromarpquery,64)
@@ -133,7 +137,9 @@
 ======
 
 To have a node run Click, the easiest way would be to use the ClickInternetStackHelper
-class in your simulation script. For instance::
+class in your simulation script. For instance:
+
+.. sourcecode:: cpp
 
   ClickInternetStackHelper click;
   click.SetClickFile (myNodeContainer, "nsclick-simple-lan.click");
diff -Naur ns-3.18.1/src/click/model/ipv4-click-routing.cc ns-3.19/src/click/model/ipv4-click-routing.cc
--- ns-3.18.1/src/click/model/ipv4-click-routing.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/click/model/ipv4-click-routing.cc	2013-12-20 09:44:50.000000000 -0800
@@ -45,7 +45,8 @@
 #define INTERFACE_ID_FIRST 1
 #define INTERFACE_ID_FIRST_DROP 33
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4ClickRouting);
+NS_OBJECT_ENSURE_REGISTERED (Ipv4ClickRouting)
+  ;
 
 std::map < simclick_node_t *, Ptr<Ipv4ClickRouting> > Ipv4ClickRouting::m_clickInstanceFromSimNode;
 
diff -Naur ns-3.18.1/src/click/model/ipv4-l3-click-protocol.cc ns-3.19/src/click/model/ipv4-l3-click-protocol.cc
--- ns-3.18.1/src/click/model/ipv4-l3-click-protocol.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/click/model/ipv4-l3-click-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -44,7 +44,8 @@
 const uint16_t Ipv4L3ClickProtocol::PROT_NUMBER = 0x0800;
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4L3ClickProtocol);
+NS_OBJECT_ENSURE_REGISTERED (Ipv4L3ClickProtocol)
+  ;
 
 TypeId
 Ipv4L3ClickProtocol::GetTypeId (void)
diff -Naur ns-3.18.1/src/config-store/examples/config-store-save.cc ns-3.19/src/config-store/examples/config-store-save.cc
--- ns-3.18.1/src/config-store/examples/config-store-save.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/config-store/examples/config-store-save.cc	2013-12-20 09:44:50.000000000 -0800
@@ -6,15 +6,15 @@
 
 using namespace ns3;
 
-class A : public Object
+class ConfigExample : public Object
 {
 public:
   static TypeId GetTypeId (void) {
-    static TypeId tid = TypeId ("ns3::A")
+    static TypeId tid = TypeId ("ns3::ConfigExample")
       .SetParent<Object> ()
       .AddAttribute ("TestInt16", "help text",
                      IntegerValue (-2),
-                     MakeIntegerAccessor (&A::m_int16),
+                     MakeIntegerAccessor (&ConfigExample::m_int16),
                      MakeIntegerChecker<int16_t> ())
       ;
       return tid;
@@ -22,7 +22,8 @@
   int16_t m_int16;
 };
 
-NS_OBJECT_ENSURE_REGISTERED (A);
+NS_OBJECT_ENSURE_REGISTERED (ConfigExample)
+  ;
 
 // Assign a new default value to A::TestInt16 (-5)
 // Configure a TestInt16 value for a special instance of A (to -3)
@@ -30,16 +31,16 @@
 // 
 int main (int argc, char *argv[])
 {
-  Config::SetDefault ("ns3::A::TestInt16", IntegerValue (-5));
+  Config::SetDefault ("ns3::ConfigExample::TestInt16", IntegerValue (-5));
 
-  Ptr<A> a_obj = CreateObject<A> ();
-  NS_ABORT_MSG_UNLESS (a_obj->m_int16 == -5, "Cannot set A's integer attribute via Config::SetDefault");
+  Ptr<ConfigExample> a_obj = CreateObject<ConfigExample> ();
+  NS_ABORT_MSG_UNLESS (a_obj->m_int16 == -5, "Cannot set ConfigExample's integer attribute via Config::SetDefault");
 
-  Ptr<A> a2_obj = CreateObject<A> ();
-  a2_obj->SetAttribute ("TestInt16", IntegerValue (-3));
+  Ptr<ConfigExample> b_obj = CreateObject<ConfigExample> ();
+  b_obj->SetAttribute ("TestInt16", IntegerValue (-3));
   IntegerValue iv;
-  a2_obj->GetAttribute ("TestInt16", iv);
-  NS_ABORT_MSG_UNLESS (iv.Get () == -3, "Cannot set A's integer attribute via SetAttribute");
+  b_obj->GetAttribute ("TestInt16", iv);
+  NS_ABORT_MSG_UNLESS (iv.Get () == -3, "Cannot set ConfigExample's integer attribute via SetAttribute");
 
   // These test objects are not rooted in any ns-3 configuration namespace.
   // This is usually done automatically for ns3 nodes and channels, but
@@ -47,7 +48,7 @@
   // can't use two objects of the same type as roots).  Rooting one of these
   // is necessary for it to show up in the config namespace so that
   // ConfigureAttributes() will work below.
-  Config::RegisterRootNamespaceObject (a2_obj);
+  Config::RegisterRootNamespaceObject (b_obj);
   
 #ifdef HAVE_LIBXML2
   // Output config store to XML format
diff -Naur ns-3.18.1/src/config-store/model/config-store.cc ns-3.19/src/config-store/model/config-store.cc
--- ns-3.18.1/src/config-store/model/config-store.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/config-store/model/config-store.cc	2013-12-20 09:44:50.000000000 -0800
@@ -23,7 +23,8 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (ConfigStore);
+NS_OBJECT_ENSURE_REGISTERED (ConfigStore)
+  ;
 
 TypeId 
 ConfigStore::GetTypeId (void)
diff -Naur ns-3.18.1/src/config-store/model/config-store.h ns-3.19/src/config-store/model/config-store.h
--- ns-3.18.1/src/config-store/model/config-store.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/config-store/model/config-store.h	2013-12-20 09:44:50.000000000 -0800
@@ -7,7 +7,7 @@
 namespace ns3 {
 
 /**
- * \defgroup configstore Config-Store
+ * \defgroup configstore Configuration Store/Load
  *
  * \brief Store and load simulation attribute configuration
  *
diff -Naur ns-3.18.1/src/config-store/model/gtk-config-store.cc ns-3.19/src/config-store/model/gtk-config-store.cc
--- ns-3.18.1/src/config-store/model/gtk-config-store.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/config-store/model/gtk-config-store.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("GtkconfigStore");
+NS_LOG_COMPONENT_DEFINE ("GtkconfigStore")
+  ;
 
 
 GtkConfigStore::GtkConfigStore ()
diff -Naur ns-3.18.1/src/core/bindings/modulegen__gcc_ILP32.py ns-3.19/src/core/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/core/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -197,7 +197,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'])
+    module.add_enum('Unit', ['Y', 'D', 'H', 'MIN', 'S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'])
     ## 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]
@@ -2559,6 +2559,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -2569,6 +2574,11 @@
                    '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', 
@@ -2584,6 +2594,11 @@
                    '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', 
@@ -2609,6 +2624,11 @@
                    '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', 
@@ -4757,6 +4777,14 @@
                         'ns3::Ptr< ns3::PointerValue >', 
                         [], 
                         template_parameters=['ns3::PointerValue'])
+    ## nstime.h (module 'core'): ns3::Time ns3::Days(ns3::int64x64_t days) [free function]
+    module.add_function('Days', 
+                        'ns3::Time', 
+                        [param('ns3::int64x64_t', 'days')])
+    ## nstime.h (module 'core'): ns3::Time ns3::Days(double days) [free function]
+    module.add_function('Days', 
+                        'ns3::Time', 
+                        [param('double', 'days')])
     ## nstime.h (module 'core'): ns3::Time ns3::FemtoSeconds(ns3::int64x64_t fs) [free function]
     module.add_function('FemtoSeconds', 
                         'ns3::Time', 
@@ -4781,6 +4809,14 @@
     module.add_function('Hash64', 
                         'uint64_t', 
                         [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## nstime.h (module 'core'): ns3::Time ns3::Hours(ns3::int64x64_t hours) [free function]
+    module.add_function('Hours', 
+                        'ns3::Time', 
+                        [param('ns3::int64x64_t', 'hours')])
+    ## nstime.h (module 'core'): ns3::Time ns3::Hours(double hours) [free function]
+    module.add_function('Hours', 
+                        'ns3::Time', 
+                        [param('double', 'hours')])
     ## log.h (module 'core'): extern void ns3::LogComponentDisable(char const * name, ns3::LogLevel level) [free function]
     module.add_function('LogComponentDisable', 
                         'void', 
@@ -4905,6 +4941,14 @@
     module.add_function('Min', 
                         'ns3::int64x64_t', 
                         [param('ns3::int64x64_t const &', 'a'), param('ns3::int64x64_t const &', 'b')])
+    ## nstime.h (module 'core'): ns3::Time ns3::Minutes(ns3::int64x64_t minutes) [free function]
+    module.add_function('Minutes', 
+                        'ns3::Time', 
+                        [param('ns3::int64x64_t', 'minutes')])
+    ## nstime.h (module 'core'): ns3::Time ns3::Minutes(double minutes) [free function]
+    module.add_function('Minutes', 
+                        'ns3::Time', 
+                        [param('double', 'minutes')])
     ## nstime.h (module 'core'): ns3::Time ns3::NanoSeconds(ns3::int64x64_t ns) [free function]
     module.add_function('NanoSeconds', 
                         'ns3::Time', 
@@ -4991,6 +5035,14 @@
                         'std::string', 
                         [], 
                         template_parameters=['unsigned char'])
+    ## nstime.h (module 'core'): ns3::Time ns3::Years(ns3::int64x64_t years) [free function]
+    module.add_function('Years', 
+                        'ns3::Time', 
+                        [param('ns3::int64x64_t', 'years')])
+    ## nstime.h (module 'core'): ns3::Time ns3::Years(double years) [free function]
+    module.add_function('Years', 
+                        'ns3::Time', 
+                        [param('double', 'years')])
     register_functions_ns3_CommandLineHelper(module.get_submodule('CommandLineHelper'), root_module)
     register_functions_ns3_Config(module.get_submodule('Config'), root_module)
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
diff -Naur ns-3.18.1/src/core/bindings/modulegen__gcc_LP64.py ns-3.19/src/core/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/core/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -197,7 +197,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'])
+    module.add_enum('Unit', ['Y', 'D', 'H', 'MIN', 'S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'])
     ## 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]
@@ -2559,6 +2559,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -2569,6 +2574,11 @@
                    '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', 
@@ -2584,6 +2594,11 @@
                    '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', 
@@ -2609,6 +2624,11 @@
                    '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', 
@@ -4757,6 +4777,14 @@
                         'ns3::Ptr< ns3::PointerValue >', 
                         [], 
                         template_parameters=['ns3::PointerValue'])
+    ## nstime.h (module 'core'): ns3::Time ns3::Days(ns3::int64x64_t days) [free function]
+    module.add_function('Days', 
+                        'ns3::Time', 
+                        [param('ns3::int64x64_t', 'days')])
+    ## nstime.h (module 'core'): ns3::Time ns3::Days(double days) [free function]
+    module.add_function('Days', 
+                        'ns3::Time', 
+                        [param('double', 'days')])
     ## nstime.h (module 'core'): ns3::Time ns3::FemtoSeconds(ns3::int64x64_t fs) [free function]
     module.add_function('FemtoSeconds', 
                         'ns3::Time', 
@@ -4781,6 +4809,14 @@
     module.add_function('Hash64', 
                         'uint64_t', 
                         [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## nstime.h (module 'core'): ns3::Time ns3::Hours(ns3::int64x64_t hours) [free function]
+    module.add_function('Hours', 
+                        'ns3::Time', 
+                        [param('ns3::int64x64_t', 'hours')])
+    ## nstime.h (module 'core'): ns3::Time ns3::Hours(double hours) [free function]
+    module.add_function('Hours', 
+                        'ns3::Time', 
+                        [param('double', 'hours')])
     ## log.h (module 'core'): extern void ns3::LogComponentDisable(char const * name, ns3::LogLevel level) [free function]
     module.add_function('LogComponentDisable', 
                         'void', 
@@ -4905,6 +4941,14 @@
     module.add_function('Min', 
                         'ns3::int64x64_t', 
                         [param('ns3::int64x64_t const &', 'a'), param('ns3::int64x64_t const &', 'b')])
+    ## nstime.h (module 'core'): ns3::Time ns3::Minutes(ns3::int64x64_t minutes) [free function]
+    module.add_function('Minutes', 
+                        'ns3::Time', 
+                        [param('ns3::int64x64_t', 'minutes')])
+    ## nstime.h (module 'core'): ns3::Time ns3::Minutes(double minutes) [free function]
+    module.add_function('Minutes', 
+                        'ns3::Time', 
+                        [param('double', 'minutes')])
     ## nstime.h (module 'core'): ns3::Time ns3::NanoSeconds(ns3::int64x64_t ns) [free function]
     module.add_function('NanoSeconds', 
                         'ns3::Time', 
@@ -4991,6 +5035,14 @@
                         'std::string', 
                         [], 
                         template_parameters=['unsigned char'])
+    ## nstime.h (module 'core'): ns3::Time ns3::Years(ns3::int64x64_t years) [free function]
+    module.add_function('Years', 
+                        'ns3::Time', 
+                        [param('ns3::int64x64_t', 'years')])
+    ## nstime.h (module 'core'): ns3::Time ns3::Years(double years) [free function]
+    module.add_function('Years', 
+                        'ns3::Time', 
+                        [param('double', 'years')])
     register_functions_ns3_CommandLineHelper(module.get_submodule('CommandLineHelper'), root_module)
     register_functions_ns3_Config(module.get_submodule('Config'), root_module)
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
diff -Naur ns-3.18.1/src/core/examples/hash-example.cc ns-3.19/src/core/examples/hash-example.cc
--- ns-3.18.1/src/core/examples/hash-example.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/examples/hash-example.cc	2013-12-20 09:44:50.000000000 -0800
@@ -276,7 +276,7 @@
     //
     // Number of buckets = k = 2^bits
     long double k32 = 0xFFFFFFFF;
-    long double k64 = 0xFFFFFFFFFFFFFFFF;
+    long double k64 = 0xFFFFFFFFFFFFFFFFULL;
 
     long double n = m_nphrases;
     long double Ec32 = n * (n - 1) / ( 2 * k32) * (1 - (n - 2)/(3 * k32));
diff -Naur ns-3.18.1/src/core/examples/main-ptr.cc ns-3.19/src/core/examples/main-ptr.cc
--- ns-3.18.1/src/core/examples/main-ptr.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/examples/main-ptr.cc	2013-12-20 09:44:50.000000000 -0800
@@ -5,41 +5,41 @@
 
 using namespace ns3;
 
-class A : public Object
+class PtrExample : public Object
 {
 public:
-  A ();
-  ~A ();
+  PtrExample ();
+  ~PtrExample ();
   void Method (void);
 };
-A::A ()
+PtrExample::PtrExample ()
 {
-  std::cout << "A constructor" << std::endl;
+  std::cout << "PtrExample constructor" << std::endl;
 }
-A::~A()
+PtrExample::~PtrExample()
 {
-  std::cout << "A destructor" << std::endl;
+  std::cout << "PtrExample destructor" << std::endl;
 }
 void
-A::Method (void)
+PtrExample::Method (void)
 {
-  std::cout << "A method" << std::endl;
+  std::cout << "PtrExample method" << std::endl;
 }
 
-static Ptr<A> g_a = 0;
+static Ptr<PtrExample> g_ptr = 0;
 
-static Ptr<A>
-StoreA (Ptr<A> a)
+static Ptr<PtrExample>
+StorePtr (Ptr<PtrExample> p)
 {
-  Ptr<A> prev = g_a;
-  g_a = a;
+  Ptr<PtrExample> prev = g_ptr;
+  g_ptr = p;
   return prev;
 }
 
 static void
-ClearA (void)
+ClearPtr (void)
 {
-  g_a = 0;
+  g_ptr = 0;
 }
 
 
@@ -47,25 +47,25 @@
 int main (int argc, char *argv[])
 {
   {
-    // Create a new object of type A, store it in global 
-    // variable g_a
-    Ptr<A> a = CreateObject<A> ();
-    a->Method ();
-    Ptr<A> prev = StoreA (a);
+    // Create a new object of type PtrExample, store it in global 
+    // variable g_ptr
+    Ptr<PtrExample> p = CreateObject<PtrExample> ();
+    p->Method ();
+    Ptr<PtrExample> prev = StorePtr (p);
     NS_ASSERT (prev == 0);
   }
 
   {
-    // Create a new object of type A, store it in global 
-    // variable g_a, get a hold on the previous A object.
-    Ptr<A> a = CreateObject<A> ();
-    Ptr<A> prev = StoreA (a);
+    // Create a new object of type PtrExample, store it in global 
+    // variable g_ptr, get a hold on the previous PtrExample object.
+    Ptr<PtrExample> p = CreateObject<PtrExample> ();
+    Ptr<PtrExample> prev = StorePtr (p);
     // call method on object
     prev->Method ();
     // Clear the currently-stored object
-    ClearA ();
+    ClearPtr ();
     // get the raw pointer and release it.
-    A *raw = GetPointer (prev);
+    PtrExample *raw = GetPointer (prev);
     prev = 0;
     raw->Method ();
     raw->Unref ();
diff -Naur ns-3.18.1/src/core/helper/event-garbage-collector.h ns-3.19/src/core/helper/event-garbage-collector.h
--- ns-3.18.1/src/core/helper/event-garbage-collector.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/helper/event-garbage-collector.h	2013-12-20 09:44:50.000000000 -0800
@@ -27,7 +27,7 @@
 namespace ns3 {
 
 /**
- * \ingroup tools
+ * \ingroup events
  *
  * \brief An object that tracks scheduled events and automatically
  * cancels them when it is destroyed.  It is useful in situations
diff -Naur ns-3.18.1/src/core/model/attribute-construction-list.cc ns-3.19/src/core/model/attribute-construction-list.cc
--- ns-3.18.1/src/core/model/attribute-construction-list.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/attribute-construction-list.cc	2013-12-20 09:44:50.000000000 -0800
@@ -22,7 +22,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE("AttributeConstructionList");
+NS_LOG_COMPONENT_DEFINE("AttributeConstructionList")
+  ;
 
 AttributeConstructionList::AttributeConstructionList ()
 {
diff -Naur ns-3.18.1/src/core/model/calendar-scheduler.cc ns-3.19/src/core/model/calendar-scheduler.cc
--- ns-3.18.1/src/core/model/calendar-scheduler.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/calendar-scheduler.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,9 +28,11 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("CalendarScheduler");
+NS_LOG_COMPONENT_DEFINE ("CalendarScheduler")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (CalendarScheduler);
+NS_OBJECT_ENSURE_REGISTERED (CalendarScheduler)
+  ;
 
 TypeId
 CalendarScheduler::GetTypeId (void)
diff -Naur ns-3.18.1/src/core/model/callback.h ns-3.19/src/core/model/callback.h
--- ns-3.18.1/src/core/model/callback.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/callback.h	2013-12-20 09:44:50.000000000 -0800
@@ -67,7 +67,7 @@
 
 /**
  * \ingroup callback
- * \defgroup callbackimpl CallbackImpl
+ * \defgroup callbackimpl Callback Implementation
  * CallbackImpl classes
  */
 /**
@@ -1378,7 +1378,7 @@
 
 /**
  * \ingroup callback
- * \defgroup makenullcallback MakeCallbacks with no arguments
+ * \defgroup makenullcallback MakeCallback with no arguments
  */
 /**
  * \ingroup makenullcallback
diff -Naur ns-3.18.1/src/core/model/default-simulator-impl.cc ns-3.19/src/core/model/default-simulator-impl.cc
--- ns-3.18.1/src/core/model/default-simulator-impl.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/default-simulator-impl.cc	2013-12-20 09:44:50.000000000 -0800
@@ -38,7 +38,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (DefaultSimulatorImpl);
+NS_OBJECT_ENSURE_REGISTERED (DefaultSimulatorImpl)
+  ;
 
 TypeId
 DefaultSimulatorImpl::GetTypeId (void)
diff -Naur ns-3.18.1/src/core/model/double.h ns-3.19/src/core/model/double.h
--- ns-3.18.1/src/core/model/double.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/double.h	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,7 @@
  * \ingroup attribute 
  *
  * \class ns3::DoubleValue
- * \brief Hold an floating point type
+ * \brief Hold a floating point type
  *
  * \anchor double
  * This class can be used to hold variables of floating point type
diff -Naur ns-3.18.1/src/core/model/global-value.cc ns-3.19/src/core/model/global-value.cc
--- ns-3.18.1/src/core/model/global-value.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/global-value.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("GlobalValue");
+NS_LOG_COMPONENT_DEFINE ("GlobalValue")
+  ;
 
 GlobalValue::GlobalValue (std::string name, std::string help,
                           const AttributeValue &initialValue,
diff -Naur ns-3.18.1/src/core/model/hash.cc ns-3.19/src/core/model/hash.cc
--- ns-3.18.1/src/core/model/hash.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/hash.cc	2013-12-20 09:44:50.000000000 -0800
@@ -24,7 +24,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Hash");
+NS_LOG_COMPONENT_DEFINE ("Hash")
+  ;
 
 Hasher::Hasher ()
 {
diff -Naur ns-3.18.1/src/core/model/hash-fnv.cc ns-3.19/src/core/model/hash-fnv.cc
--- ns-3.18.1/src/core/model/hash-fnv.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/hash-fnv.cc	2013-12-20 09:44:50.000000000 -0800
@@ -38,7 +38,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Hash-Fnv");
+NS_LOG_COMPONENT_DEFINE ("Hash-Fnv")
+  ;
 
 namespace Hash {
 
diff -Naur ns-3.18.1/src/core/model/hash-function.cc ns-3.19/src/core/model/hash-function.cc
--- ns-3.18.1/src/core/model/hash-function.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/hash-function.cc	2013-12-20 09:44:50.000000000 -0800
@@ -24,7 +24,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("HashFunction");
+NS_LOG_COMPONENT_DEFINE ("HashFunction")
+  ;
 
 namespace Hash {
 
diff -Naur ns-3.18.1/src/core/model/hash-murmur3.cc ns-3.19/src/core/model/hash-murmur3.cc
--- ns-3.18.1/src/core/model/hash-murmur3.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/hash-murmur3.cc	2013-12-20 09:44:50.000000000 -0800
@@ -36,7 +36,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Hash-Murmur3");
+NS_LOG_COMPONENT_DEFINE ("Hash-Murmur3")
+  ;
 
 namespace Hash {
 
diff -Naur ns-3.18.1/src/core/model/heap-scheduler.cc ns-3.19/src/core/model/heap-scheduler.cc
--- ns-3.18.1/src/core/model/heap-scheduler.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/heap-scheduler.cc	2013-12-20 09:44:50.000000000 -0800
@@ -29,7 +29,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (HeapScheduler);
+NS_OBJECT_ENSURE_REGISTERED (HeapScheduler)
+  ;
 
 TypeId
 HeapScheduler::GetTypeId (void)
diff -Naur ns-3.18.1/src/core/model/list-scheduler.cc ns-3.19/src/core/model/list-scheduler.cc
--- ns-3.18.1/src/core/model/list-scheduler.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/list-scheduler.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,8 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (ListScheduler);
+NS_OBJECT_ENSURE_REGISTERED (ListScheduler)
+  ;
 
 TypeId
 ListScheduler::GetTypeId (void)
diff -Naur ns-3.18.1/src/core/model/log.h ns-3.19/src/core/model/log.h
--- ns-3.18.1/src/core/model/log.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/log.h	2013-12-20 09:44:50.000000000 -0800
@@ -28,6 +28,43 @@
 
 namespace ns3 {
 
+/**
+ * \ingroup debugging
+ * \defgroup logging Logging
+ * \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 
+ * 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.
+ *
+ * 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
+ * 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.
+ */
+
+
+/**
+ *  \ingroup logging
+ *
+ *  Logging severity classes and levels.
+ */
 enum LogLevel {
   LOG_NONE           = 0x00000000, // no logging
 
@@ -111,46 +148,74 @@
  * \ingroup logging
  * \param name a string
  *
- * Define a Log component with a specific name. This macro
- * should be used at the top of every file in which you want 
+ * Define a Log component with a specific name.
+ *
+ * This macro should be used at the top of every file in which you want 
  * to use the NS_LOG macro. This macro defines a new
  * "log component" which can be later selectively enabled
  * or disabled with the ns3::LogComponentEnable and 
  * ns3::LogComponentDisable functions or with the NS_LOG
  * environment variable.
+ *
+ * To create a log component Foo, at the top of foo.cc:
+ *
+ * \code
+ *   NS_LOG_COMPONENT_DEFINE ("Foo")
+ *     ;
+ * \endcode
+ *
+ * Note the closing ';' is not on the same line;  this prevents 
+ * Doxygen from spuriously warning that the macro invocation is undocumented.
+ 
  */
 #define NS_LOG_COMPONENT_DEFINE(name)                           \
   static ns3::LogComponent g_log = ns3::LogComponent (name)
 
+/**
+ * \ingroup logging
+ * Append the simulation time to a log message.
+ */
 #define NS_LOG_APPEND_TIME_PREFIX                               \
   if (g_log.IsEnabled (ns3::LOG_PREFIX_TIME))                   \
     {                                                           \
       ns3::LogTimePrinter printer = ns3::LogGetTimePrinter ();  \
       if (printer != 0)                                         \
         {                                                       \
-          (*printer)(std::clog);                               \
+          (*printer)(std::clog);                                \
           std::clog << " ";                                     \
         }                                                       \
     }
 
+/**
+ * \ingroup logging
+ * Append the simulation node id to a log message.
+ */
 #define NS_LOG_APPEND_NODE_PREFIX                               \
   if (g_log.IsEnabled (ns3::LOG_PREFIX_NODE))                   \
     {                                                           \
       ns3::LogNodePrinter printer = ns3::LogGetNodePrinter ();  \
       if (printer != 0)                                         \
         {                                                       \
-          (*printer)(std::clog);                               \
+          (*printer)(std::clog);                                \
           std::clog << " ";                                     \
         }                                                       \
     }
 
+/**
+ * \ingroup logging
+ * Append the function name to a log message.
+ */
 #define NS_LOG_APPEND_FUNC_PREFIX                               \
   if (g_log.IsEnabled (ns3::LOG_PREFIX_FUNC))                   \
     {                                                           \
       std::clog << g_log.Name () << ":" <<                      \
-      __FUNCTION__ << "(): ";                                 \
+      __FUNCTION__ << "(): ";                                   \
     }                                                           \
 
+/**
+ * \ingroup logging
+ * Append the log severity level to a log message.
+ */
 #define NS_LOG_APPEND_LEVEL_PREFIX(level)                       \
   if (g_log.IsEnabled (ns3::LOG_PREFIX_LEVEL))                  \
     {                                                           \
@@ -167,37 +232,6 @@
 #ifdef NS3_LOG_ENABLE
 
 
-/**
- * \ingroup debugging
- * \defgroup logging Logging
- * \brief Logging functions and macros
- *
- * LOG functionality: macros which allow developers to
- * send information out on screen. 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.
- *
- * 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
- * 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.
- */
-
 
 /**
  * \ingroup logging
@@ -318,7 +352,7 @@
           NS_LOG_APPEND_CONTEXT;                                \
           std::clog << g_log.Name () << ":"                     \
                     << __FUNCTION__ << "(";                     \
-          ns3::ParameterLogger (std::clog) << parameters;      \
+          ns3::ParameterLogger (std::clog) << parameters;       \
           std::clog << ")" << std::endl;                        \
         }                                                       \
     }                                                           \
diff -Naur ns-3.18.1/src/core/model/map-scheduler.cc ns-3.19/src/core/model/map-scheduler.cc
--- ns-3.18.1/src/core/model/map-scheduler.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/map-scheduler.cc	2013-12-20 09:44:50.000000000 -0800
@@ -29,7 +29,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (MapScheduler);
+NS_OBJECT_ENSURE_REGISTERED (MapScheduler)
+  ;
 
 TypeId
 MapScheduler::GetTypeId (void)
diff -Naur ns-3.18.1/src/core/model/names.cc ns-3.19/src/core/model/names.cc
--- ns-3.18.1/src/core/model/names.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/names.cc	2013-12-20 09:44:50.000000000 -0800
@@ -25,7 +25,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Names");
+NS_LOG_COMPONENT_DEFINE ("Names")
+  ;
 
 class NameNode
 {
diff -Naur ns-3.18.1/src/core/model/nstime.h ns-3.19/src/core/model/nstime.h
--- ns-3.18.1/src/core/model/nstime.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/nstime.h	2013-12-20 09:44:50.000000000 -0800
@@ -86,13 +86,17 @@
    */
   enum Unit
   {
-    S  = 0,   //!< second
-    MS = 1,   //!< millisecond
-    US = 2,   //!< microsecond
-    NS = 3,   //!< nanosecond
-    PS = 4,   //!< picosecond
-    FS = 5,   //!< femtosecond
-    LAST = 6
+    Y   = 0,   //!< year, 365 days
+    D   = 1,   //!< day, 24 hours
+    H   = 2,   //!< hour, 60 minutes
+    MIN = 3,   //!< minute, 60 seconds
+    S   = 4,   //!< second
+    MS  = 5,   //!< millisecond
+    US  = 6,   //!< microsecond
+    NS  = 7,   //!< nanosecond
+    PS  = 8,   //!< picosecond
+    FS  = 9,   //!< femtosecond
+    LAST = 10
   };
 
   inline Time &operator = (const Time &o)
@@ -182,6 +186,10 @@
    * - `ns` (nanoseconds)
    * - `ps` (picoseconds)
    * - `fs` (femtoseconds)
+   * - `min`  (minutes)
+   * - `h`  (hours)
+   * - `d`  (days)
+   * - `y`  (years)
    *
    * There can be no white space between the numerical portion
    * and the units.  Any otherwise malformed string causes a fatal error to
@@ -308,6 +316,40 @@
   {
     return ToInteger (Time::FS);
   }
+
+  /**
+   * \returns an approximation in minutes of the time stored in this
+   *          instance.
+   */
+  inline double GetMinutes (void) const
+  {
+    return ToDouble (Time::MIN);
+  }
+  /**
+   * \returns an approximation in hours of the time stored in this
+   *          instance.
+   */
+  inline double GetHours (void) const
+  {
+    return ToDouble (Time::H);
+  }
+  /**
+   * \returns an approximation in days of the time stored in this
+   *          instance.
+   */
+  inline double GetDays (void) const
+  {
+    return ToDouble (Time::D);
+  }
+  /**
+   * \returns an approximation in years of the time stored in this
+   *          instance.
+   */
+  inline double GetYears (void) const
+  {
+    return ToDouble (Time::Y);
+  }
+
   /**
    * \returns the raw time value, in the current units
    */
@@ -762,7 +804,66 @@
 {
   return Time::FromInteger (fs, Time::FS);
 }
-
+/**
+ * \brief create ns3::Time instances in units of minutes (equal to 60 seconds).
+ *
+ * For example:
+ * \code
+ * Time t = Minutes (2.0);
+ * Simulator::Schedule (Minutes (5.0), ...);
+ * \endcode
+ * \param minutes mintues value
+ * \relates ns3::Time
+ */
+inline Time Minutes (double minutes)
+{
+  return Time::FromDouble (minutes, Time::MIN);
+}
+/**
+ * \brief create ns3::Time instances in units of hours (equal to 60 minutes).
+ *
+ * For example:
+ * \code
+ * Time t = Hours (2.0);
+ * Simulator::Schedule (Hours (5.0), ...);
+ * \endcode
+ * \param hours hours value
+ * \relates ns3::Time
+ */
+inline Time Hours (double hours)
+{
+  return Time::FromDouble (hours, Time::H);
+}
+/**
+ * \brief create ns3::Time instances in units of days (equal to 24 hours).
+ *
+ * For example:
+ * \code
+ * Time t = Days (2.0);
+ * Simulator::Schedule (Days (5.0), ...);
+ * \endcode
+ * \param days days value
+ * \relates ns3::Time
+ */
+inline Time Days (double days)
+{
+  return Time::FromDouble (days, Time::D);
+}
+/**
+ * \brief create ns3::Time instances in units of years (equal to 365 days).
+ *
+ * For example:
+ * \code
+ * Time t = Years (2.0);
+ * Simulator::Schedule (Years (5.0), ...);
+ * \endcode
+ * \param years years value
+ * \relates ns3::Time
+ */
+inline Time Years (double years)
+{
+  return Time::FromDouble (years, Time::Y);
+}
 
 /**
  * \see Seconds(double)
@@ -812,6 +913,38 @@
 {
   return Time::From (fs, Time::FS);
 }
+/**
+ * \see Minutes(uint64_t)
+ * \relates ns3::Time
+ */
+inline Time Minutes (int64x64_t minutes)
+{
+  return Time::From (minutes, Time::MIN);
+}
+/**
+ * \see Minutes(uint64_t)
+ * \relates ns3::Time
+ */
+inline Time Hours (int64x64_t hours)
+{
+  return Time::From (hours, Time::H);
+}
+/**
+ * \see Minutes(uint64_t)
+ * \relates ns3::Time
+ */
+inline Time Days (int64x64_t days)
+{
+  return Time::From (days, Time::D);
+}
+/**
+ * \see Minutes(uint64_t)
+ * \relates ns3::Time
+ */
+inline Time Years (int64x64_t years)
+{
+  return Time::From (years, Time::Y);
+}
 
 // internal function not publicly documented
 inline Time TimeStep (uint64_t ts)
diff -Naur ns-3.18.1/src/core/model/object-base.cc ns-3.19/src/core/model/object-base.cc
--- ns-3.18.1/src/core/model/object-base.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/object-base.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ObjectBase);
+NS_OBJECT_ENSURE_REGISTERED (ObjectBase)
+  ;
 
 static TypeId
 GetObjectIid (void)
diff -Naur ns-3.18.1/src/core/model/object-base.h ns-3.19/src/core/model/object-base.h
--- ns-3.18.1/src/core/model/object-base.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/object-base.h	2013-12-20 09:44:50.000000000 -0800
@@ -26,8 +26,23 @@
 #include <list>
 
 /**
+ * \brief Register the class in the ns-3 factory.
+ *
  * This macro should be invoked once for every class which
  * defines a new GetTypeId method.
+ *
+ * Given a class Foo, the .cc implementation should begin
+ *
+ * \code
+ *   NS_OBJECT_ENSURE_REGISTERED (Foo)
+ *     ;
+ * \endcode
+ *
+ * If the class is in a namespace, then the macro call should also be
+ * in the namespace.
+ *
+ * Note the closing ';' is not on the same line;  this prevents 
+ * Doxygen from spuriously warning that the macro invocation is undocumented.
  */
 #define NS_OBJECT_ENSURE_REGISTERED(type)       \
   static struct X ## type ## RegistrationClass      \
diff -Naur ns-3.18.1/src/core/model/object.cc ns-3.19/src/core/model/object.cc
--- ns-3.18.1/src/core/model/object.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/object.cc	2013-12-20 09:44:50.000000000 -0800
@@ -41,7 +41,8 @@
  *         The Object implementation
  *********************************************************************/
 
-NS_OBJECT_ENSURE_REGISTERED (Object);
+NS_OBJECT_ENSURE_REGISTERED (Object)
+  ;
 
 Object::AggregateIterator::AggregateIterator ()
   : m_object (0),
diff -Naur ns-3.18.1/src/core/model/object-factory.cc ns-3.19/src/core/model/object-factory.cc
--- ns-3.18.1/src/core/model/object-factory.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/object-factory.cc	2013-12-20 09:44:50.000000000 -0800
@@ -23,7 +23,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE("ObjectFactory");
+NS_LOG_COMPONENT_DEFINE("ObjectFactory")
+  ;
 
 ObjectFactory::ObjectFactory ()
 {
diff -Naur ns-3.18.1/src/core/model/object.h ns-3.19/src/core/model/object.h
--- ns-3.18.1/src/core/model/object.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/object.h	2013-12-20 09:44:50.000000000 -0800
@@ -64,7 +64,8 @@
 {
 public:
   /**
-   * Get the type ID.
+   * \brief Register this type.
+   * \return The object TypeId.
    */
   static TypeId GetTypeId (void);
 
diff -Naur ns-3.18.1/src/core/model/random-variable.cc ns-3.19/src/core/model/random-variable.cc
--- ns-3.18.1/src/core/model/random-variable.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/random-variable.cc	2013-12-20 09:44:50.000000000 -0800
@@ -44,7 +44,8 @@
 // -----------------------------------------------------------------------------
 // RandomVariableBase methods
 
-NS_LOG_COMPONENT_DEFINE ("RandomVariable");
+NS_LOG_COMPONENT_DEFINE ("RandomVariable")
+  ;
 
 /** \ingroup legacyrandom */
 class RandomVariableBase
diff -Naur ns-3.18.1/src/core/model/random-variable-stream.cc ns-3.19/src/core/model/random-variable-stream.cc
--- ns-3.18.1/src/core/model/random-variable-stream.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/random-variable-stream.cc	2013-12-20 09:44:50.000000000 -0800
@@ -40,7 +40,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (RandomVariableStream);
+NS_OBJECT_ENSURE_REGISTERED (RandomVariableStream)
+  ;
 
 TypeId 
 RandomVariableStream::GetTypeId (void)
@@ -130,7 +131,8 @@
   return m_rng;
 }
 
-NS_OBJECT_ENSURE_REGISTERED(UniformRandomVariable);
+NS_OBJECT_ENSURE_REGISTERED(UniformRandomVariable)
+  ;
 
 TypeId 
 UniformRandomVariable::GetTypeId (void)
@@ -200,7 +202,8 @@
   return (uint32_t)GetValue (m_min, m_max + 1);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(ConstantRandomVariable);
+NS_OBJECT_ENSURE_REGISTERED(ConstantRandomVariable)
+  ;
 
 TypeId 
 ConstantRandomVariable::GetTypeId (void)
@@ -254,7 +257,8 @@
   return (uint32_t)GetValue (m_constant);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(SequentialRandomVariable);
+NS_OBJECT_ENSURE_REGISTERED(SequentialRandomVariable)
+  ;
 
 TypeId 
 SequentialRandomVariable::GetTypeId (void)
@@ -353,7 +357,8 @@
   return (uint32_t)GetValue ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED(ExponentialRandomVariable);
+NS_OBJECT_ENSURE_REGISTERED(ExponentialRandomVariable)
+  ;
 
 TypeId 
 ExponentialRandomVariable::GetTypeId (void)
@@ -434,7 +439,8 @@
   return (uint32_t)GetValue (m_mean, m_bound);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(ParetoRandomVariable);
+NS_OBJECT_ENSURE_REGISTERED(ParetoRandomVariable)
+  ;
 
 TypeId 
 ParetoRandomVariable::GetTypeId (void)
@@ -529,7 +535,8 @@
   return (uint32_t)GetValue (m_mean, m_shape, m_bound);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(WeibullRandomVariable);
+NS_OBJECT_ENSURE_REGISTERED(WeibullRandomVariable)
+  ;
 
 TypeId 
 WeibullRandomVariable::GetTypeId (void)
@@ -622,7 +629,8 @@
   return (uint32_t)GetValue (m_scale, m_shape, m_bound);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(NormalRandomVariable);
+NS_OBJECT_ENSURE_REGISTERED(NormalRandomVariable)
+  ;
 
 const double NormalRandomVariable::INFINITE_VALUE = 1e307;
 
@@ -741,7 +749,8 @@
   return (uint32_t)GetValue (m_mean, m_variance, m_bound);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(LogNormalRandomVariable);
+NS_OBJECT_ENSURE_REGISTERED(LogNormalRandomVariable)
+  ;
 
 TypeId 
 LogNormalRandomVariable::GetTypeId (void)
@@ -860,7 +869,8 @@
   return (uint32_t)GetValue (m_mu, m_sigma);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(GammaRandomVariable);
+NS_OBJECT_ENSURE_REGISTERED(GammaRandomVariable)
+  ;
 
 TypeId 
 GammaRandomVariable::GetTypeId (void)
@@ -1035,7 +1045,8 @@
     }
 }
 
-NS_OBJECT_ENSURE_REGISTERED(ErlangRandomVariable);
+NS_OBJECT_ENSURE_REGISTERED(ErlangRandomVariable)
+  ;
 
 TypeId 
 ErlangRandomVariable::GetTypeId (void)
@@ -1146,7 +1157,8 @@
     }
 }
 
-NS_OBJECT_ENSURE_REGISTERED(TriangularRandomVariable);
+NS_OBJECT_ENSURE_REGISTERED(TriangularRandomVariable)
+  ;
 
 TypeId 
 TriangularRandomVariable::GetTypeId (void)
@@ -1240,7 +1252,8 @@
   return (uint32_t)GetValue (m_mean, m_min, m_max);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(ZipfRandomVariable);
+NS_OBJECT_ENSURE_REGISTERED(ZipfRandomVariable)
+  ;
 
 TypeId 
 ZipfRandomVariable::GetTypeId (void)
@@ -1330,7 +1343,8 @@
   return (uint32_t)GetValue (m_n, m_alpha);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(ZetaRandomVariable);
+NS_OBJECT_ENSURE_REGISTERED(ZetaRandomVariable)
+  ;
 
 TypeId 
 ZetaRandomVariable::GetTypeId (void)
@@ -1413,7 +1427,8 @@
   return (uint32_t)GetValue (m_alpha);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(DeterministicRandomVariable);
+NS_OBJECT_ENSURE_REGISTERED(DeterministicRandomVariable)
+  ;
 
 TypeId 
 DeterministicRandomVariable::GetTypeId (void)
@@ -1485,7 +1500,8 @@
   return (uint32_t)GetValue ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED(EmpiricalRandomVariable);
+NS_OBJECT_ENSURE_REGISTERED(EmpiricalRandomVariable)
+  ;
 
 // ValueCDF methods
 EmpiricalRandomVariable::ValueCDF::ValueCDF ()
diff -Naur ns-3.18.1/src/core/model/realtime-simulator-impl.cc ns-3.19/src/core/model/realtime-simulator-impl.cc
--- ns-3.18.1/src/core/model/realtime-simulator-impl.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/realtime-simulator-impl.cc	2013-12-20 09:44:50.000000000 -0800
@@ -43,7 +43,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (RealtimeSimulatorImpl);
+NS_OBJECT_ENSURE_REGISTERED (RealtimeSimulatorImpl)
+  ;
 
 TypeId
 RealtimeSimulatorImpl::GetTypeId (void)
diff -Naur ns-3.18.1/src/core/model/rng-stream.cc ns-3.19/src/core/model/rng-stream.cc
--- ns-3.18.1/src/core/model/rng-stream.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/rng-stream.cc	2013-12-20 09:44:50.000000000 -0800
@@ -45,19 +45,6 @@
 const double a23n =       1370589.0;
 const double two17 =      131072.0;
 const double two53 =      9007199254740992.0;
-const double fact =       5.9604644775390625e-8;     /* 1 / 2^24  */
-
-const Matrix InvA1 = {          // Inverse of A1p0
-  { 184888585.0,   0.0,  1945170933.0 },
-  {         1.0,   0.0,           0.0 },
-  {         0.0,   1.0,           0.0 }
-};
-
-const Matrix InvA2 = {          // Inverse of A2p0
-  {      0.0,  360363334.0,  4225571728.0 },
-  {      1.0,          0.0,           0.0 },
-  {      0.0,          1.0,           0.0 }
-};
 
 const Matrix A1p0 = {
   {       0.0,        1.0,       0.0 },
diff -Naur ns-3.18.1/src/core/model/scheduler.cc ns-3.19/src/core/model/scheduler.cc
--- ns-3.18.1/src/core/model/scheduler.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/scheduler.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Scheduler);
+NS_OBJECT_ENSURE_REGISTERED (Scheduler)
+  ;
 
 Scheduler::~Scheduler ()
 {
diff -Naur ns-3.18.1/src/core/model/simulator.h ns-3.19/src/core/model/simulator.h
--- ns-3.18.1/src/core/model/simulator.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/simulator.h	2013-12-20 09:44:50.000000000 -0800
@@ -109,8 +109,8 @@
   /**
    * Run the simulation until one of:
    *   - no events are present anymore
-   *   - the user called Simulator::stop
-   *   - the user called Simulator::stopAtUs and the
+   *   - 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.
    */
diff -Naur ns-3.18.1/src/core/model/synchronizer.cc ns-3.19/src/core/model/synchronizer.cc
--- ns-3.18.1/src/core/model/synchronizer.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/synchronizer.cc	2013-12-20 09:44:50.000000000 -0800
@@ -23,7 +23,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Synchronizer);
+NS_OBJECT_ENSURE_REGISTERED (Synchronizer)
+  ;
 
 TypeId 
 Synchronizer::GetTypeId (void)
diff -Naur ns-3.18.1/src/core/model/test.cc ns-3.19/src/core/model/test.cc
--- ns-3.18.1/src/core/model/test.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/test.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Test");
+NS_LOG_COMPONENT_DEFINE ("Test")
+  ;
 
 bool
 TestDoubleIsEqual (const double x1, const double x2, const double epsilon)
diff -Naur ns-3.18.1/src/core/model/time.cc ns-3.19/src/core/model/time.cc
--- ns-3.18.1/src/core/model/time.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/time.cc	2013-12-20 09:44:50.000000000 -0800
@@ -123,6 +123,22 @@
         {
           *this = Time::FromDouble (r, Time::FS);
         }
+      else if (trailer == std::string ("min"))
+        {
+          *this = Time::FromDouble (r, Time::MIN);
+        }
+      else if (trailer == std::string ("h"))
+        {
+          *this = Time::FromDouble (r, Time::H);
+        }
+      else if (trailer == std::string ("d"))
+        {
+          *this = Time::FromDouble (r, Time::D);
+        }
+      else if (trailer == std::string ("y"))
+        {
+          *this = Time::FromDouble (r, Time::Y);
+        }
       else
         {
           NS_ABORT_MSG ("Can't Parse Time " << s);
@@ -176,21 +192,41 @@
       ConvertTimes (unit);
     }
 
-  int8_t power [LAST] = { 15, 12, 9, 6, 3, 0};
+  // Y, D, H, MIN, S, MS, US, NS, PS, FS
+  const int8_t power [LAST] = { 17, 17, 17, 16, 15, 12, 9, 6, 3, 0 };
+  const int32_t coefficient [LAST] = { 315360, 864, 36, 6, 1, 1, 1, 1, 1, 1 };
   for (int i = 0; i < Time::LAST; i++)
     {
       int shift = power[i] - power[(int)unit];
-      int64_t factor = (int64_t) std::pow (10, std::fabs (shift));
+      int quotient = 1;
+      if (coefficient[i] > coefficient[(int) unit])
+        {
+          quotient = coefficient[i] / coefficient[(int) unit];
+          NS_ASSERT (quotient * coefficient[(int) unit] == coefficient[i]);
+        }
+      else if (coefficient[i] < coefficient[(int) unit])
+        {
+          quotient = coefficient[(int) unit] / coefficient[i];
+          NS_ASSERT (quotient * coefficient[i] == coefficient[(int) unit]);
+        }
+      NS_LOG_DEBUG ("SetResolution for unit " << (int) unit << " loop iteration " << i
+    		    << " has shift " << shift << " has quotient " << quotient);
+      int64_t factor = static_cast<int64_t> (std::pow (10, std::fabs (shift)) * quotient);
+      double realFactor = std::pow (10, (double) shift)
+                        * static_cast<double> (coefficient[i]) / coefficient[(int) unit];
+      NS_LOG_DEBUG ("SetResolution factor " << factor << " real factor " << realFactor);
       struct Information *info = &resolution->info[i];
       info->factor = factor;
-      if (shift == 0)
+      // here we could equivalently check for realFactor == 1.0 but it's better
+      // to avoid checking equality of doubles
+      if (shift == 0 && quotient == 1)
         {
           info->timeFrom = int64x64_t (1);
           info->timeTo = int64x64_t (1);
           info->toMul = true;
           info->fromMul = true;
         }
-      else if (shift > 0)
+      else if (realFactor > 1)
         {
           info->timeFrom = int64x64_t (factor);
           info->timeTo = int64x64_t::Invert (factor);
@@ -199,7 +235,7 @@
         }
       else
         {
-          NS_ASSERT (shift < 0);
+          NS_ASSERT (realFactor < 1);
           info->timeFrom = int64x64_t::Invert (factor);
           info->timeTo = int64x64_t (factor);
           info->toMul = true;
@@ -368,6 +404,18 @@
     case Time::FS:
       unit = "fs";
       break;
+    case Time::MIN:
+      unit = "min";
+      break;
+    case Time::H:
+      unit = "h";
+      break;
+    case Time::D:
+      unit = "d";
+      break;
+    case Time::Y:
+      unit = "y";
+      break;
     case Time::LAST:
       NS_ABORT_MSG ("can't be reached");
       unit = "unreachable";
diff -Naur ns-3.18.1/src/core/model/type-id.cc ns-3.19/src/core/model/type-id.cc
--- ns-3.18.1/src/core/model/type-id.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/core/model/type-id.cc	2013-12-20 09:44:50.000000000 -0800
@@ -34,7 +34,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("TypeId");
+NS_LOG_COMPONENT_DEFINE ("TypeId")
+  ;
 
 // IidManager needs to be in ns3 namespace for NS_ASSERT and NS_LOG
 // to find g_log
diff -Naur ns-3.18.1/src/core/test/attribute-test-suite.cc ns-3.19/src/core/test/attribute-test-suite.cc
--- ns-3.18.1/src/core/test/attribute-test-suite.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/core/test/attribute-test-suite.cc	2013-12-20 09:44:50.000000000 -0800
@@ -72,7 +72,8 @@
   Derived () {}
 };
 
-NS_OBJECT_ENSURE_REGISTERED (Derived);
+NS_OBJECT_ENSURE_REGISTERED (Derived)
+  ;
 
 class AttributeObjectTest : public Object
 {
@@ -263,7 +264,8 @@
   Time m_timeWithBounds;
 };
 
-NS_OBJECT_ENSURE_REGISTERED (AttributeObjectTest);
+NS_OBJECT_ENSURE_REGISTERED (AttributeObjectTest)
+  ;
 
 // ===========================================================================
 // Test case template used for generic Attribute Value types -- used to make 
diff -Naur ns-3.18.1/src/core/test/hash-test-suite.cc ns-3.19/src/core/test/hash-test-suite.cc
--- ns-3.18.1/src/core/test/hash-test-suite.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/core/test/hash-test-suite.cc	2013-12-20 09:44:50.000000000 -0800
@@ -137,7 +137,7 @@
   hash32Reference = 0x463d70e2;  // murmur3(key)
   Check ( "default", Hash32 (key));
 
-  hash64Reference = 0xa750412079d53e04;
+  hash64Reference = 0xa750412079d53e04ULL;
   Check ( "default", Hash64 (key));
 }
 
@@ -170,7 +170,7 @@
   hash32Reference = 0xa3fc0d6d;  // Fnv1a(key)
   Check ("FNV1a", hasher.clear ().GetHash32 (key));
 
-  hash64Reference = 0x88f6cdbe0a31098d;
+  hash64Reference = 0x88f6cdbe0a31098dULL;
   Check ( "FNV1a", hasher.clear ().GetHash64 (key));
 }
 
@@ -204,7 +204,7 @@
   hash32Reference = 0x463d70e2;  // Murmur3(key)
   Check ( "murmur3", hasher.clear ().GetHash32 (key));
 
-  hash64Reference = 0xa750412079d53e04;
+  hash64Reference = 0xa750412079d53e04ULL;
   Check ( "murmur3", hasher.clear ().GetHash64 (key));
 }
 
@@ -303,7 +303,7 @@
 Hash64FunctionPtrTestCase::DoRun (void)
 {
   Hasher hasher = Hasher ( Create<Hash::Function::Hash64> (&gnu_sum64) );
-  hash64Reference = 0x4126412641264126;  // Hash64FunctionPtr(key)
+  hash64Reference = 0x4126412641264126ULL;  // Hash64FunctionPtr(key)
   Check ( "gnu_sum64", hasher.clear ().GetHash64 (key));
 }
 
diff -Naur ns-3.18.1/src/core/test/object-test-suite.cc ns-3.19/src/core/test/object-test-suite.cc
--- ns-3.18.1/src/core/test/object-test-suite.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/core/test/object-test-suite.cc	2013-12-20 09:44:50.000000000 -0800
@@ -89,10 +89,14 @@
   }
 };
 
-NS_OBJECT_ENSURE_REGISTERED (BaseA);
-NS_OBJECT_ENSURE_REGISTERED (DerivedA);
-NS_OBJECT_ENSURE_REGISTERED (BaseB);
-NS_OBJECT_ENSURE_REGISTERED (DerivedB);
+NS_OBJECT_ENSURE_REGISTERED (BaseA)
+  ;
+NS_OBJECT_ENSURE_REGISTERED (DerivedA)
+  ;
+NS_OBJECT_ENSURE_REGISTERED (BaseB)
+  ;
+NS_OBJECT_ENSURE_REGISTERED (DerivedB)
+  ;
 
 } // namespace anonymous
 
diff -Naur ns-3.18.1/src/core/test/time-test-suite.cc ns-3.19/src/core/test/time-test-suite.cc
--- ns-3.18.1/src/core/test/time-test-suite.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/core/test/time-test-suite.cc	2013-12-20 09:44:50.000000000 -0800
@@ -47,6 +47,22 @@
 void
 TimeSimpleTestCase::DoRun (void)
 {
+  NS_TEST_ASSERT_MSG_EQ_TOL (Years (1.0).GetYears (), 1.0, Years (1).GetYears (),
+                             "is 1 really 1 ?");
+  NS_TEST_ASSERT_MSG_EQ_TOL (Years (10.0).GetYears (), 10.0, Years (1).GetYears (),
+                             "is 10 really 10 ?");
+  NS_TEST_ASSERT_MSG_EQ_TOL (Days (1.0).GetDays (), 1.0, Days (1).GetDays (),
+                             "is 1 really 1 ?");
+  NS_TEST_ASSERT_MSG_EQ_TOL (Days (10.0).GetDays (), 10.0, Days (1).GetDays (),
+                             "is 10 really 10 ?");
+  NS_TEST_ASSERT_MSG_EQ_TOL (Hours (1.0).GetHours (), 1.0, Hours (1).GetHours (),
+                             "is 1 really 1 ?");
+  NS_TEST_ASSERT_MSG_EQ_TOL (Hours (10.0).GetHours (), 10.0, Hours (1).GetHours (),
+                             "is 10 really 10 ?");
+  NS_TEST_ASSERT_MSG_EQ_TOL (Minutes (1.0).GetMinutes (), 1.0, Minutes (1).GetMinutes (),
+                             "is 1 really 1 ?");
+  NS_TEST_ASSERT_MSG_EQ_TOL (Minutes (10.0).GetMinutes (), 10.0, Minutes (1).GetMinutes (),
+                             "is 10 really 10 ?");
   NS_TEST_ASSERT_MSG_EQ_TOL (Seconds (1.0).GetSeconds (), 1.0, TimeStep (1).GetSeconds (), 
                              "is 1 really 1 ?");
   NS_TEST_ASSERT_MSG_EQ_TOL (Seconds (10.0).GetSeconds (), 10.0, TimeStep (1).GetSeconds (), 
diff -Naur ns-3.18.1/src/create-module.py ns-3.19/src/create-module.py
--- ns-3.18.1/src/create-module.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/create-module.py	2013-12-20 09:44:50.000000000 -0800
@@ -215,6 +215,7 @@
 ----------------------------
 
 .. include:: replace.txt
+.. highlight:: cpp
 
 .. heading hierarchy:
    ------------- Chapter
diff -Naur ns-3.18.1/src/csma/bindings/modulegen__gcc_ILP32.py ns-3.19/src/csma/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/csma/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/csma/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -175,7 +175,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1505,10 +1505,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -3396,6 +3397,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -3406,6 +3412,11 @@
                    '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', 
@@ -3421,6 +3432,11 @@
                    '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', 
@@ -3446,6 +3462,11 @@
                    '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', 
@@ -5431,14 +5452,14 @@
     cls.add_method('SetBurstRate', 
                    'void', 
                    [param('double', 'rate')])
-    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomBurstSize(ns3::Ptr<ns3::RandomVariableStream> arg0) [member function]
+    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomBurstSize(ns3::Ptr<ns3::RandomVariableStream> burstSz) [member function]
     cls.add_method('SetRandomBurstSize', 
                    'void', 
-                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'arg0')])
-    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomVariable(ns3::Ptr<ns3::RandomVariableStream> arg0) [member function]
+                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'burstSz')])
+    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomVariable(ns3::Ptr<ns3::RandomVariableStream> ranVar) [member function]
     cls.add_method('SetRandomVariable', 
                    'void', 
-                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'arg0')])
+                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'ranVar')])
     ## error-model.h (module 'network'): bool ns3::BurstErrorModel::DoCorrupt(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('DoCorrupt', 
                    'bool', 
diff -Naur ns-3.18.1/src/csma/bindings/modulegen__gcc_LP64.py ns-3.19/src/csma/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/csma/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/csma/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -175,7 +175,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1505,10 +1505,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -3396,6 +3397,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -3406,6 +3412,11 @@
                    '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', 
@@ -3421,6 +3432,11 @@
                    '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', 
@@ -3446,6 +3462,11 @@
                    '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', 
@@ -5431,14 +5452,14 @@
     cls.add_method('SetBurstRate', 
                    'void', 
                    [param('double', 'rate')])
-    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomBurstSize(ns3::Ptr<ns3::RandomVariableStream> arg0) [member function]
+    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomBurstSize(ns3::Ptr<ns3::RandomVariableStream> burstSz) [member function]
     cls.add_method('SetRandomBurstSize', 
                    'void', 
-                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'arg0')])
-    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomVariable(ns3::Ptr<ns3::RandomVariableStream> arg0) [member function]
+                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'burstSz')])
+    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomVariable(ns3::Ptr<ns3::RandomVariableStream> ranVar) [member function]
     cls.add_method('SetRandomVariable', 
                    'void', 
-                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'arg0')])
+                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'ranVar')])
     ## error-model.h (module 'network'): bool ns3::BurstErrorModel::DoCorrupt(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('DoCorrupt', 
                    'bool', 
diff -Naur ns-3.18.1/src/csma/doc/csma.rst ns-3.19/src/csma/doc/csma.rst
--- ns-3.18.1/src/csma/doc/csma.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/csma/doc/csma.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 CSMA NetDevice
 --------------
@@ -108,7 +109,7 @@
 serialized by the simulator. This provides a deterministic mechanism for
 contending for the channel. The channel is allocated (transitioned from state
 ``IDLE`` to state ``TRANSMITTING``) on a first-come first-served basis.
-The channel always goes through a three state process:::
+The channel always goes through a three state process::
 
   IDLE -> TRANSMITTING -> PROPAGATING -> IDLE
 
@@ -206,7 +207,7 @@
 The conceptual model of interest is that of a bare computer "husk" into which
 you plug net devices. The bare computers are created using a ``NodeContainer``
 helper. You just ask this helper to create as many computers (we call them
-``Nodes``) as you need on your network:::
+``Nodes``) as you need on your network::
 
   NodeContainer csmaNodes;
   csmaNodes.Create (nCsmaNodes);
diff -Naur ns-3.18.1/src/csma/model/csma-channel.cc ns-3.19/src/csma/model/csma-channel.cc
--- ns-3.18.1/src/csma/model/csma-channel.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/csma/model/csma-channel.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (CsmaChannel);
+NS_OBJECT_ENSURE_REGISTERED (CsmaChannel)
+  ;
 
 TypeId
 CsmaChannel::GetTypeId (void)
diff -Naur ns-3.18.1/src/csma/model/csma-net-device.cc ns-3.19/src/csma/model/csma-net-device.cc
--- ns-3.18.1/src/csma/model/csma-net-device.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/csma/model/csma-net-device.cc	2013-12-20 09:44:50.000000000 -0800
@@ -37,7 +37,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (CsmaNetDevice);
+NS_OBJECT_ENSURE_REGISTERED (CsmaNetDevice)
+  ;
 
 TypeId
 CsmaNetDevice::GetTypeId (void)
@@ -699,7 +700,6 @@
       trailer.EnableFcs (true);
     }
 
-  trailer.CheckFcs (packet);
   bool crcGood = trailer.CheckFcs (packet);
   if (!crcGood)
     {
diff -Naur ns-3.18.1/src/csma/model/csma-net-device.h ns-3.19/src/csma/model/csma-net-device.h
--- ns-3.18.1/src/csma/model/csma-net-device.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/csma/model/csma-net-device.h	2013-12-20 09:44:50.000000000 -0800
@@ -41,7 +41,7 @@
 class ErrorModel;
 
 /** 
- * \defgroup csma CsmaNetDevice
+ * \defgroup csma CSMA Network Device
  *
  * This section documents the API of the ns-3 csma module. For a generic functional description, please refer to the ns-3 manual.
  */
diff -Naur ns-3.18.1/src/csma-layout/bindings/modulegen__gcc_ILP32.py ns-3.19/src/csma-layout/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/csma-layout/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/csma-layout/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -269,7 +269,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -2014,10 +2014,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -5038,6 +5039,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -5048,6 +5054,11 @@
                    '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', 
@@ -5063,6 +5074,11 @@
                    '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', 
@@ -5088,6 +5104,11 @@
                    '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', 
@@ -6668,10 +6689,10 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
-    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    ## 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', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   [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', 
diff -Naur ns-3.18.1/src/csma-layout/bindings/modulegen__gcc_LP64.py ns-3.19/src/csma-layout/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/csma-layout/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/csma-layout/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -269,7 +269,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -2014,10 +2014,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -5038,6 +5039,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -5048,6 +5054,11 @@
                    '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', 
@@ -5063,6 +5074,11 @@
                    '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', 
@@ -5088,6 +5104,11 @@
                    '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', 
@@ -6668,10 +6689,10 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
-    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    ## 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', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   [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', 
diff -Naur ns-3.18.1/src/dsdv/bindings/modulegen__gcc_ILP32.py ns-3.19/src/dsdv/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/dsdv/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsdv/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -231,7 +231,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1626,10 +1626,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -4082,6 +4083,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -4092,6 +4098,11 @@
                    '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', 
@@ -4107,6 +4118,11 @@
                    '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', 
@@ -4132,6 +4148,11 @@
                    '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', 
@@ -5180,10 +5201,10 @@
     cls.add_method('Send', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'dest')])
-    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arg0) [member function]
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arpCache) [member function]
     cls.add_method('SetArpCache', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ArpCache >', 'arg0')])
+                   [param('ns3::Ptr< ns3::ArpCache >', 'arpCache')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
     cls.add_method('SetDevice', 
                    'void', 
diff -Naur ns-3.18.1/src/dsdv/bindings/modulegen__gcc_LP64.py ns-3.19/src/dsdv/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/dsdv/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsdv/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -231,7 +231,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1626,10 +1626,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -4082,6 +4083,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -4092,6 +4098,11 @@
                    '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', 
@@ -4107,6 +4118,11 @@
                    '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', 
@@ -4132,6 +4148,11 @@
                    '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', 
@@ -5180,10 +5201,10 @@
     cls.add_method('Send', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'dest')])
-    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arg0) [member function]
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arpCache) [member function]
     cls.add_method('SetArpCache', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ArpCache >', 'arg0')])
+                   [param('ns3::Ptr< ns3::ArpCache >', 'arpCache')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
     cls.add_method('SetDevice', 
                    'void', 
diff -Naur ns-3.18.1/src/dsdv/model/dsdv-packet.cc ns-3.19/src/dsdv/model/dsdv-packet.cc
--- ns-3.18.1/src/dsdv/model/dsdv-packet.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsdv/model/dsdv-packet.cc	2013-12-20 09:44:50.000000000 -0800
@@ -34,7 +34,8 @@
 
 namespace ns3 {
 namespace dsdv {
-NS_OBJECT_ENSURE_REGISTERED (DsdvHeader);
+NS_OBJECT_ENSURE_REGISTERED (DsdvHeader)
+  ;
 DsdvHeader::DsdvHeader (Ipv4Address dst, uint32_t hopCount, uint32_t dstSeqNo)
   : m_dst (dst),
     m_hopCount (hopCount),
diff -Naur ns-3.18.1/src/dsdv/model/dsdv-routing-protocol.cc ns-3.19/src/dsdv/model/dsdv-routing-protocol.cc
--- ns-3.18.1/src/dsdv/model/dsdv-routing-protocol.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsdv/model/dsdv-routing-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -44,7 +44,8 @@
 
 namespace ns3 {
 namespace dsdv {
-NS_OBJECT_ENSURE_REGISTERED (RoutingProtocol);
+NS_OBJECT_ENSURE_REGISTERED (RoutingProtocol)
+  ;
 
 /// UDP Port for DSDV control traffic
 const uint32_t RoutingProtocol::DSDV_PORT = 269;
diff -Naur ns-3.18.1/src/dsr/bindings/modulegen__gcc_ILP32.py ns-3.19/src/dsr/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/dsr/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -283,7 +283,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1948,10 +1948,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -3250,8 +3251,8 @@
     cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
     cls.add_constructor([])
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode m, uint8_t l, uint8_t r, bool sg, uint8_t ns, uint8_t ne, bool Stbc) [constructor]
-    cls.add_constructor([param('ns3::WifiMode', 'm'), param('uint8_t', 'l'), param('uint8_t', 'r'), param('bool', 'sg'), param('uint8_t', 'ns'), param('uint8_t', 'ne'), param('bool', 'Stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode mode, uint8_t powerLevel, uint8_t retries, bool shortGuardInterval, uint8_t nss, uint8_t ness, bool stbc) [constructor]
+    cls.add_constructor([param('ns3::WifiMode', 'mode'), param('uint8_t', 'powerLevel'), param('uint8_t', 'retries'), param('bool', 'shortGuardInterval'), param('uint8_t', 'nss'), param('uint8_t', 'ness'), param('bool', 'stbc')])
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
@@ -3307,10 +3308,10 @@
     cls.add_method('SetShortGuardInterval', 
                    'void', 
                    [param('bool', 'guardinterval')])
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbcsatuts) [member function]
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbc) [member function]
     cls.add_method('SetStbc', 
                    'void', 
-                   [param('bool', 'stbcsatuts')])
+                   [param('bool', 'stbc')])
     ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetTxPowerLevel(uint8_t powerlevel) [member function]
     cls.add_method('SetTxPowerLevel', 
                    'void', 
@@ -4980,6 +4981,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -4990,6 +4996,11 @@
                    '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', 
@@ -5005,6 +5016,11 @@
                    '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', 
@@ -5030,6 +5046,11 @@
                    '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', 
@@ -5913,10 +5934,10 @@
     cls.add_method('SetProbeResp', 
                    'void', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAckPolicy(ns3::WifiMacHeader::QosAckPolicy arg0) [member function]
+    ## 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', 'arg0')])
+                   [param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAmsdu() [member function]
     cls.add_method('SetQosAmsdu', 
                    'void', 
@@ -6592,15 +6613,15 @@
                    'void', 
                    [param('bool', 'greenfield')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool GuardInterval) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool guardInterval) [member function]
     cls.add_method('SetGuardInterval', 
                    'void', 
-                   [param('bool', 'GuardInterval')], 
+                   [param('bool', 'guardInterval')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool Ldpc) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool ldpc) [member function]
     cls.add_method('SetLdpc', 
                    'void', 
-                   [param('bool', 'Ldpc')], 
+                   [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', 
@@ -8303,10 +8324,10 @@
     cls.add_method('Send', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'dest')])
-    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arg0) [member function]
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arpCache) [member function]
     cls.add_method('SetArpCache', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ArpCache >', 'arg0')])
+                   [param('ns3::Ptr< ns3::ArpCache >', 'arpCache')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
     cls.add_method('SetDevice', 
                    'void', 
@@ -9797,10 +9818,10 @@
                    'ns3::IpL4Protocol::RxStatus', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')], 
                    is_virtual=True)
-    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::Ipv6Interface> interface) [member function]
+    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::Ipv6Interface> incomingInterface) [member function]
     cls.add_method('Receive', 
                    'ns3::IpL4Protocol::RxStatus', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::Ipv6Interface >', 'interface')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
                    is_virtual=True)
     ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::ReceiveIcmp(ns3::Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv4Address payloadSource, ns3::Ipv4Address payloadDestination, uint8_t const * payload) [member function]
     cls.add_method('ReceiveIcmp', 
@@ -10486,8 +10507,8 @@
     cls.add_method('GetSize', 
                    'uint32_t', 
                    [])
-    ## dsr-network-queue.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrNetworkQueue::GetTypeID() [member function]
-    cls.add_method('GetTypeID', 
+    ## dsr-network-queue.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrNetworkQueue::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
diff -Naur ns-3.18.1/src/dsr/bindings/modulegen__gcc_LP64.py ns-3.19/src/dsr/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/dsr/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -283,7 +283,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1948,10 +1948,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -3250,8 +3251,8 @@
     cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
     cls.add_constructor([])
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode m, uint8_t l, uint8_t r, bool sg, uint8_t ns, uint8_t ne, bool Stbc) [constructor]
-    cls.add_constructor([param('ns3::WifiMode', 'm'), param('uint8_t', 'l'), param('uint8_t', 'r'), param('bool', 'sg'), param('uint8_t', 'ns'), param('uint8_t', 'ne'), param('bool', 'Stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode mode, uint8_t powerLevel, uint8_t retries, bool shortGuardInterval, uint8_t nss, uint8_t ness, bool stbc) [constructor]
+    cls.add_constructor([param('ns3::WifiMode', 'mode'), param('uint8_t', 'powerLevel'), param('uint8_t', 'retries'), param('bool', 'shortGuardInterval'), param('uint8_t', 'nss'), param('uint8_t', 'ness'), param('bool', 'stbc')])
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
@@ -3307,10 +3308,10 @@
     cls.add_method('SetShortGuardInterval', 
                    'void', 
                    [param('bool', 'guardinterval')])
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbcsatuts) [member function]
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbc) [member function]
     cls.add_method('SetStbc', 
                    'void', 
-                   [param('bool', 'stbcsatuts')])
+                   [param('bool', 'stbc')])
     ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetTxPowerLevel(uint8_t powerlevel) [member function]
     cls.add_method('SetTxPowerLevel', 
                    'void', 
@@ -4980,6 +4981,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -4990,6 +4996,11 @@
                    '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', 
@@ -5005,6 +5016,11 @@
                    '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', 
@@ -5030,6 +5046,11 @@
                    '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', 
@@ -5913,10 +5934,10 @@
     cls.add_method('SetProbeResp', 
                    'void', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAckPolicy(ns3::WifiMacHeader::QosAckPolicy arg0) [member function]
+    ## 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', 'arg0')])
+                   [param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAmsdu() [member function]
     cls.add_method('SetQosAmsdu', 
                    'void', 
@@ -6592,15 +6613,15 @@
                    'void', 
                    [param('bool', 'greenfield')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool GuardInterval) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool guardInterval) [member function]
     cls.add_method('SetGuardInterval', 
                    'void', 
-                   [param('bool', 'GuardInterval')], 
+                   [param('bool', 'guardInterval')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool Ldpc) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool ldpc) [member function]
     cls.add_method('SetLdpc', 
                    'void', 
-                   [param('bool', 'Ldpc')], 
+                   [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', 
@@ -8303,10 +8324,10 @@
     cls.add_method('Send', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'dest')])
-    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arg0) [member function]
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arpCache) [member function]
     cls.add_method('SetArpCache', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ArpCache >', 'arg0')])
+                   [param('ns3::Ptr< ns3::ArpCache >', 'arpCache')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
     cls.add_method('SetDevice', 
                    'void', 
@@ -9797,10 +9818,10 @@
                    'ns3::IpL4Protocol::RxStatus', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')], 
                    is_virtual=True)
-    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::Ipv6Interface> interface) [member function]
+    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::Ipv6Interface> incomingInterface) [member function]
     cls.add_method('Receive', 
                    'ns3::IpL4Protocol::RxStatus', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::Ipv6Interface >', 'interface')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
                    is_virtual=True)
     ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::ReceiveIcmp(ns3::Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv4Address payloadSource, ns3::Ipv4Address payloadDestination, uint8_t const * payload) [member function]
     cls.add_method('ReceiveIcmp', 
@@ -10486,8 +10507,8 @@
     cls.add_method('GetSize', 
                    'uint32_t', 
                    [])
-    ## dsr-network-queue.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrNetworkQueue::GetTypeID() [member function]
-    cls.add_method('GetTypeID', 
+    ## dsr-network-queue.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrNetworkQueue::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
diff -Naur ns-3.18.1/src/dsr/doc/dsr.rst ns-3.19/src/dsr/doc/dsr.rst
--- ns-3.18.1/src/dsr/doc/dsr.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/doc/dsr.rst	2013-12-20 09:44:50.000000000 -0800
@@ -14,7 +14,7 @@
 ********************
  
 This model implements the base specification of the Dynamic Source Routing 
-(DSR) protocol. Implementation is based on RFC4728.
+(DSR) protocol. Implementation is based on :rfc:`4728`.
 
 DSR operates on a on-demand behavior. Therefore, our DSR model buffers all 
 packets while a route request packet (RREQ) is disseminated. We implement 
@@ -127,7 +127,7 @@
 	1. Message type is used to identify the data packet from control packet
 	2. source id is used to identify the real source of the data packet since we have to deliver the packet hop-by-hop and the ipv4header is not carrying the real source and destination ip address as needed
 	3. destination id is for same reason of above
-* Route Reply header is not word-aligned in DSR rfc, change it to word-aligned in implementation
+* Route Reply header is not word-aligned in DSR RFC, change it to word-aligned in implementation
 * DSR works as a shim header between transport and network protocol, it needs its own forwarding mechanism, we are changing the packet transmission to hop-by-hop delivery, so we added two fields in dsr fixed header to notify packet delivery
 
 
@@ -155,7 +155,9 @@
 ******
 
 To have a node run DSR, the easiest way would be to use the DsrHelper
-and DsrMainHelpers in your simulation script. For instance::
+and DsrMainHelpers in your simulation script. For instance:
+
+.. sourcecode:: cpp
 
   DsrHelper dsr;
   DsrMainHelper dsrMain;
@@ -190,8 +192,8 @@
 References
 **********
 
-[1] Link for the `original paper: <http://www.monarch.cs.rice.edu/monarch-papers/dsr-chapter00.pdf>`_
+[1] Original paper: http://www.monarch.cs.rice.edu/monarch-papers/dsr-chapter00.pdf
 
-[2] Link for `RFC 4728: <http://www6.ietf.org/rfc/rfc4728.txt>`_
+[2] RFC 4728 http://www6.ietf.org/rfc/rfc4728.txt
 
-[3] Link for the `Broch's comparison paper: <http://www.monarch.cs.rice.edu/monarch-papers/mobicom98.ps>`_
+[3] Broch's comparison paper: http://www.monarch.cs.rice.edu/monarch-papers/mobicom98.ps
diff -Naur ns-3.18.1/src/dsr/model/dsr-errorbuff.h ns-3.19/src/dsr/model/dsr-errorbuff.h
--- ns-3.18.1/src/dsr/model/dsr-errorbuff.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-errorbuff.h	2013-12-20 09:44:50.000000000 -0800
@@ -45,7 +45,16 @@
 class ErrorBuffEntry
 {
 public:
-  // / c-tor
+  /**
+   * Create an ErrorBuffEntry with the given parameters.
+   *
+   * \param pa packet
+   * \param d IPv4 address of the destination
+   * \param s IPv4 address of the source
+   * \param n IPv4 address of the next hop
+   * \param exp expiration time
+   * \param p protocol number
+   */
   ErrorBuffEntry (Ptr<const Packet> pa = 0, Ipv4Address d = Ipv4Address (), Ipv4Address s = Ipv4Address (),
                   Ipv4Address n = Ipv4Address (), Time exp = Simulator::Now (), uint8_t p = 0)
     : m_packet (pa),
@@ -58,13 +67,14 @@
   }
   /**
    * Compare send buffer entries
+   * \param o another ErrorBuffEntry
    * \return true if equal
    */
   bool operator== (ErrorBuffEntry const & o) const
   {
     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
+  ///\name Fields
   // \{
   Ptr<const Packet> GetPacket () const
   {
@@ -116,17 +126,17 @@
   }
   // \}
 private:
-  // / Data packet
+  /// Data packet
   Ptr<const Packet> m_packet;
-  // / Destination address
+  /// Destination address
   Ipv4Address m_dst;
-  // / Source address
+  /// Source address
   Ipv4Address m_source;
-  // / Nexthop address
+  /// Nexthop address
   Ipv4Address m_nextHop;
-  // / Expire time for queue entry
+  /// Expire time for queue entry
   Time m_expire;
-  // / The protocol number
+  /// The protocol number
   uint8_t m_protocol;
 };
 
@@ -138,21 +148,23 @@
 class ErrorBuffer
 {
 public:
-  // / Default c-tor
+  /**
+   * Default constructor
+   */
   ErrorBuffer ()
   {
   }
-  // / Push entry in queue, if there is no entry with the same packet and destination address in queue.
+  /// Push entry in queue, if there is no entry with the same packet and destination address in queue.
   bool Enqueue (ErrorBuffEntry & entry);
-  // / Return first found (the earliest) entry for given destination
+  /// Return first found (the earliest) entry for given destination
   bool Dequeue (Ipv4Address dst, ErrorBuffEntry & entry);
-  // / Remove all packets with the error link
+  /// Remove all packets with the error link
   void DropPacketForErrLink (Ipv4Address source, Ipv4Address nextHop);
-  // / Finds whether a packet with destination dst exists in the queue
+  /// Finds whether a packet with destination dst exists in the queue
   bool Find (Ipv4Address dst);
-  // / Number of entries
+  /// Number of entries
   uint32_t GetSize ();
-  // /\name Fields
+  ///\name Fields
   // \{
   uint32_t GetMaxQueueLen () const
   {
@@ -178,19 +190,19 @@
   }
 
 private:
-  // / The send buffer to cache unsent packet
+  /// The send buffer to cache unsent packet
   std::vector<ErrorBuffEntry> m_errorBuffer;
-  // / Remove all expired entries
+  /// Remove all expired entries
   void Purge ();
-  // / Notify that packet is dropped from queue by timeout
+  /// Notify that packet is dropped from queue by timeout
   void Drop (ErrorBuffEntry en, std::string reason);
-  // / Notify that packet is dropped from queue by timeout
+  /// Notify that packet is dropped from queue by timeout
   void DropLink (ErrorBuffEntry en, std::string reason);
-  // / The maximum number of packets that we allow a routing protocol to buffer.
+  /// The maximum number of packets that we allow a routing protocol to buffer.
   uint32_t m_maxLen;
-  // / The maximum period of time that a routing protocol is allowed to buffer a packet for, seconds.
+  /// The maximum period of time that a routing protocol is allowed to buffer a packet for, seconds.
   Time m_errorBufferTimeout;
-  // / Check if the send buffer entry is the same or not
+  /// Check if the send buffer entry is the same or not
   static bool LinkEqual (ErrorBuffEntry en, const std::vector<Ipv4Address> link)
   {
     return ((en.GetSource () == link[0]) && (en.GetNextHop () == link[1]));
diff -Naur ns-3.18.1/src/dsr/model/dsr-fs-header.cc ns-3.19/src/dsr/model/dsr-fs-header.cc
--- ns-3.18.1/src/dsr/model/dsr-fs-header.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-fs-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -39,7 +39,8 @@
 
 NS_LOG_COMPONENT_DEFINE ("DsrFsHeader");
 
-NS_OBJECT_ENSURE_REGISTERED (DsrFsHeader);
+NS_OBJECT_ENSURE_REGISTERED (DsrFsHeader)
+  ;
 
 TypeId DsrFsHeader::GetTypeId ()
 {
@@ -258,7 +259,8 @@
   return m_optionData;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrRoutingHeader);
+NS_OBJECT_ENSURE_REGISTERED (DsrRoutingHeader)
+  ;
 
 TypeId DsrRoutingHeader::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/dsr/model/dsr-fs-header.h ns-3.19/src/dsr/model/dsr-fs-header.h
--- ns-3.18.1/src/dsr/model/dsr-fs-header.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-fs-header.h	2013-12-20 09:44:50.000000000 -0800
@@ -99,7 +99,7 @@
   virtual ~DsrFsHeader ();
   /**
    * \brief Set the "Next header" field.
-   * \param nextHeader the next header number
+   * \param protocol the next header number
    */
   void SetNextHeader (uint8_t protocol);
   /**
@@ -109,7 +109,7 @@
   uint8_t GetNextHeader () const;
   /**
    * brief Set the message type of the header.
-   * \param message type the message type of the header
+   * \param messageType the message type of the header
    */
   void SetMessageType (uint8_t messageType);
   /**
@@ -118,23 +118,23 @@
    */
   uint8_t GetMessageType () const;
   /**
-   * brief Set the source id of the header.
-   * \param source id the source id of the header
+   * brief Set the source ID of the header.
+   * \param sourceId the source ID of the header
    */
   void SetSourceId (uint16_t sourceId);
   /**
-   * brief Get the source id of the header.
-   * \return source id the source id of the header
+   * brief Get the source ID of the header.
+   * \return source ID the source ID of the header
    */
   uint16_t GetSourceId () const;
   /**
-   * brief Set the dest id of the header.
-   * \param dest id the dest id of the header
+   * brief Set the dest ID of the header.
+   * \param destId the destination ID of the header
    */
   void SetDestId (uint16_t destId);
   /**
-   * brief Get the dest id of the header.
-   * \return dest id the dest id of the header
+   * brief Get the dest ID of the header.
+   * \return dest ID the dest ID of the header
    */
   uint16_t GetDestId () const;
   /**
@@ -257,6 +257,7 @@
   /**
    * \brief Calculate padding.
    * \param alignment alignment
+   * \return the number of bytes required to pad
    */
   uint32_t CalculatePad (DsrOptionHeader::Alignment alignment) const;
   /**
diff -Naur ns-3.18.1/src/dsr/model/dsr-gratuitous-reply-table.cc ns-3.19/src/dsr/model/dsr-gratuitous-reply-table.cc
--- ns-3.18.1/src/dsr/model/dsr-gratuitous-reply-table.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-gratuitous-reply-table.cc	2013-12-20 09:44:50.000000000 -0800
@@ -38,7 +38,8 @@
 namespace ns3 {
 namespace dsr {
 
-NS_OBJECT_ENSURE_REGISTERED (GraReply);
+NS_OBJECT_ENSURE_REGISTERED (GraReply)
+  ;
 
 TypeId GraReply::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/dsr/model/dsr-gratuitous-reply-table.h ns-3.19/src/dsr/model/dsr-gratuitous-reply-table.h
--- ns-3.18.1/src/dsr/model/dsr-gratuitous-reply-table.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-gratuitous-reply-table.h	2013-12-20 09:44:50.000000000 -0800
@@ -65,49 +65,41 @@
 class GraReply  : public Object
 {
 public:
-  // / c-tor
-  /**
-   * \brief Get the type identificator.
-   * \return type identificator
-   */
+
   static TypeId GetTypeId ();
-  /**
-   * \brief Constructor.
-   */
+
   GraReply ();
-  /**
-   * \brief Destructor.
-   */
   virtual ~GraReply ();
-  // / Set the gratuitous reply table size
+
+  /// Set the gratuitous reply table size
   void SetGraTableSize (uint32_t g)
   {
     GraReplyTableSize = g;
   }
-  // / Get the gratuitous reply table size
+  /// Get the gratuitous reply table size
   uint32_t GetGraTableSize () const
   {
     return GraReplyTableSize;
   }
-  // / Add a new gratuitous reply entry
+  /// Add a new gratuitous reply entry
   bool AddEntry (GraReplyEntry & graTableEntry);
-  // / Update the route entry if found, create a new one if not
+  /// Update the route entry if found, create a new one if not
   bool FindAndUpdate (Ipv4Address replyTo, Ipv4Address replyFrom, Time gratReplyHoldoff);
-  // / Remove all expired entries
+  /// Remove all expired entries
   void Purge ();
-  // / Remove all entries
+  /// Remove all entries
   void Clear ()
   {
     m_graReply.clear ();
   }
 
 private:
-  // / Vector of entries
+  /// Vector of entries
   std::vector<GraReplyEntry> m_graReply;
-  // / The max # of gratuitous reply entries to hold
+  /// The max # of gratuitous reply entries to hold
   uint32_t GraReplyTableSize;
 
-  // / Check if the entry is expired or not
+  /// Check if the entry is expired or not
   struct IsExpired
   {
     bool operator() (const struct GraReplyEntry & b) const
diff -Naur ns-3.18.1/src/dsr/model/dsr-maintain-buff.h ns-3.19/src/dsr/model/dsr-maintain-buff.h
--- ns-3.18.1/src/dsr/model/dsr-maintain-buff.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-maintain-buff.h	2013-12-20 09:44:50.000000000 -0800
@@ -53,6 +53,7 @@
 
   /**
    * Compare maintain Buffer entries
+   * \param o
    * \return true if equal
    */
   bool operator < (LinkKey const & o) const
@@ -73,6 +74,7 @@
 
   /**
    * Compare maintain Buffer entries
+   * \param o
    * \return true if equal
    */
   bool operator < (NetworkKey const & o) const
@@ -92,6 +94,7 @@
 
   /**
    * Compare maintain Buffer entries
+   * \param o
    * \return true if equal
    */
   bool operator < (PassiveKey const & o) const
@@ -109,7 +112,18 @@
 class MaintainBuffEntry
 {
 public:
-  // / c-tor
+  /**
+   * Construct a MaintainBuffEntry with the given parameters
+   *
+   * \param pa packet
+   * \param us our IPv4 address
+   * \param n next hop IPv4 address
+   * \param s IPv4 address of the source
+   * \param dst IPv4 address of the destination
+   * \param ackId ACK ID
+   * \param segs number of segments left
+   * \param exp expiration time
+   */
   MaintainBuffEntry (Ptr<const Packet> pa = 0, Ipv4Address us = Ipv4Address (),
                      Ipv4Address n = Ipv4Address (), Ipv4Address s = Ipv4Address (), Ipv4Address dst = Ipv4Address (),
                      uint16_t ackId = 0, uint8_t segs = 0, Time exp = Simulator::Now ())
@@ -124,7 +138,7 @@
   {
   }
 
-  // /\name Fields
+  ///\name Fields
   // \{
   Ptr<const Packet> GetPacket () const
   {
@@ -192,21 +206,21 @@
   }
   // \}
 private:
-  // / Data packet
+  /// Data packet
   Ptr<const Packet> m_packet;
-  // / Our own ip address
+  /// Our own ip address
   Ipv4Address m_ourAdd;
-  // / Next hop Ip address
+  /// Next hop Ip address
   Ipv4Address m_nextHop;
-  // / The source address
+  /// The source address
   Ipv4Address m_src;
-  // / The destination address
+  /// The destination address
   Ipv4Address m_dst;
-  // / The data ack id
+  /// The data ack id
   uint16_t m_ackId;
-  // / The segments left field
+  /// The segments left field
   uint8_t m_segsLeft;
-  // / Expire time for queue entry
+  /// Expire time for queue entry
   Time m_expire;
 };
 /**
@@ -217,21 +231,23 @@
 class MaintainBuffer
 {
 public:
-  // / Default c-tor
+  /**
+   * Default constructor
+   */
   MaintainBuffer ()
   {
   }
-  // / Push entry in queue, if there is no entry with the same packet and destination address in queue.
+  /// Push entry in queue, if there is no entry with the same packet and destination address in queue.
   bool Enqueue (MaintainBuffEntry & entry);
-  // / Return first found (the earliest) entry for given destination
+  /// Return first found (the earliest) entry for given destination
   bool Dequeue (Ipv4Address dst, MaintainBuffEntry & entry);
-  // / Remove all packets with destination IP address dst
+  /// Remove all packets with destination IP address dst
   void DropPacketWithNextHop (Ipv4Address nextHop);
-  // / Finds whether a packet with destination dst exists in the queue
+  /// Finds whether a packet with destination dst exists in the queue
   bool Find (Ipv4Address nextHop);
-  // / Number of entries
+  /// Number of entries
   uint32_t GetSize ();
-  // /\name Fields
+  ///\name Fields
   // \{
   uint32_t GetMaxQueueLen () const
   {
@@ -249,27 +265,27 @@
   {
     m_maintainBufferTimeout = t;
   }
-  // / Verify if all the elements in the maintainence buffer entry is the same
+  /// Verify if all the elements in the maintainence buffer entry is the same
   bool AllEqual (MaintainBuffEntry & entry);
-  // / Verify if the maintain buffer entry is the same in every field for link ack
+  /// Verify if the maintain buffer entry is the same in every field for link ack
   bool LinkEqual (MaintainBuffEntry & entry);
-  // / Verify if the maintain buffer entry is the same in every field for network ack
+  /// Verify if the maintain buffer entry is the same in every field for network ack
   bool NetworkEqual (MaintainBuffEntry & entry);
-  // / Verify if the maintain buffer entry is the same in every field for promiscuous ack
+  /// 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
+  /// The vector of maintain buffer entries
   std::vector<MaintainBuffEntry> m_maintainBuffer;
   std::vector<NetworkKey> m_allNetworkKey;
-  // / Remove all expired entries
+  /// Remove all expired entries
   void Purge ();
-  // / The maximum number of packets that we allow a routing protocol to buffer.
+  /// The maximum number of packets that we allow a routing protocol to buffer.
   uint32_t m_maxLen;
-  // / The maximum period of time that a routing protocol is allowed to buffer a packet for, seconds.
+  /// The maximum period of time that a routing protocol is allowed to buffer a packet for, seconds.
   Time m_maintainBufferTimeout;
-  // / Verify if the maintain buffer is equal or not
+  /// Verify if the maintain buffer is equal or not
   static bool IsEqual (MaintainBuffEntry en, const Ipv4Address nextHop)
   {
     return (en.GetNextHop () == nextHop);
diff -Naur ns-3.18.1/src/dsr/model/dsr-network-queue.cc ns-3.19/src/dsr/model/dsr-network-queue.cc
--- ns-3.18.1/src/dsr/model/dsr-network-queue.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-network-queue.cc	2013-12-20 09:44:50.000000000 -0800
@@ -43,10 +43,11 @@
 namespace ns3 {
 namespace dsr {
 
-NS_OBJECT_ENSURE_REGISTERED (DsrNetworkQueue);
+NS_OBJECT_ENSURE_REGISTERED (DsrNetworkQueue)
+  ;
 
 TypeId
-DsrNetworkQueue::GetTypeID (void)
+DsrNetworkQueue::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::dsr::DsrNetworkQueue")
     .SetParent<Object> ()
diff -Naur ns-3.18.1/src/dsr/model/dsr-network-queue.h ns-3.19/src/dsr/model/dsr-network-queue.h
--- ns-3.18.1/src/dsr/model/dsr-network-queue.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-network-queue.h	2013-12-20 09:44:50.000000000 -0800
@@ -53,7 +53,15 @@
 class DsrNetworkQueueEntry
 {
 public:
-  /// c-tor
+  /**
+   * Construct a DsrNetworkQueueEntry with the given parameters
+   *
+   * \param pa packet
+   * \param s IPv4 address of the source
+   * \param n IPv4 address of the next hop node
+   * \param exp expiration time
+   * \param r Route
+   */
   DsrNetworkQueueEntry (Ptr<const Packet> pa = 0, Ipv4Address s = Ipv4Address (), Ipv4Address n = Ipv4Address (),
                         Time exp = Simulator::Now (), Ptr<Ipv4Route> r = 0)
     : m_packet (pa),
@@ -65,6 +73,7 @@
   }
   /**
    * Compare send buffer entries
+   * \param o
    * \return true if equal
    */
   bool operator== (DsrNetworkQueueEntry const & o) const
@@ -129,22 +138,70 @@
 class DsrNetworkQueue : public Object
 {
 public:
-  static TypeId GetTypeID (void);
-  /// Default c-tor
+  static TypeId GetTypeId (void);
+  
   DsrNetworkQueue ();
+  /**
+   * Construct a DsrNetworkQueue with the given
+   * maximum length and maximum delay.
+   *
+   * \param maxLen Maximum queue size
+   * \param maxDelay Maximum entry lifetime in the queue
+   */
   DsrNetworkQueue (uint32_t maxLen, Time maxDelay);
   ~DsrNetworkQueue ();
-  /// Push entry in queue, if there is no entry with the same packet and destination address in queue.
+
+  /**
+   * Push entry in queue, if there is no entry with the same
+   * packet and destination address in queue.
+   *
+   * \param entry packet entry
+   * \return true if the given entry was put in the queue,
+   *         false otherwise
+   */
   bool Enqueue (DsrNetworkQueueEntry & entry);
-  /// Return first found (the earliest) entry for given destination
+  /**
+   * Return first found (the earliest) entry for given destination
+   *
+   * \param entry pointer to the return entry
+   * \return true if an entry is returned,
+   *         false otherwise
+   */
   bool Dequeue (DsrNetworkQueueEntry & entry);
-  /// Number of entries
+  /**
+   * Number of entries
+   *
+   * \return the current queue size/length
+   */
   uint32_t GetSize ();
 
+  /**
+   * Set the maximum queue size
+   *
+   * \param maxSize the maximum queue size
+   */
   void SetMaxNetworkSize (uint32_t maxSize);
+  /**
+   * Set the maximum entry lifetime in the queue
+   *
+   * \param delay the maximum entry lifetime
+   */
   void SetMaxNetworkDelay (Time delay);
+  /**
+   * Return the maximum queue size
+   *
+   * \return the maximum queue size
+   */
   uint32_t GetMaxNetworkSize (void) const;
+  /**
+   * Return the maximum entry lifetime for this queue
+   *
+   * \return the maximum entry lifetime for this queue
+   */
   Time GetMaxNetworkDelay (void) const;
+  /**
+   * Clear the queue
+   */
   void Flush (void);
 
   std::vector<DsrNetworkQueueEntry> & GetQueue ()
@@ -153,11 +210,14 @@
   }
 
 private:
+  /**
+   * Clean the queue by removing entries that exceeded lifetime.
+   */
   void Cleanup (void);
-  std::vector<DsrNetworkQueueEntry> m_dsrNetworkQueue;
-  uint32_t m_size;
-  uint32_t m_maxSize;
-  Time m_maxDelay;
+  std::vector<DsrNetworkQueueEntry> m_dsrNetworkQueue; //!< Queue (vector) of entries
+  uint32_t m_size; //!< Current queue size
+  uint32_t m_maxSize; //!< Maximum queue size
+  Time m_maxDelay; //!< Maximum entry lifetime
 };
 
 } // namespace dsr
diff -Naur ns-3.18.1/src/dsr/model/dsr-option-header.cc ns-3.19/src/dsr/model/dsr-option-header.cc
--- ns-3.18.1/src/dsr/model/dsr-option-header.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-option-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -42,7 +42,8 @@
 namespace dsr {
 NS_LOG_COMPONENT_DEFINE ("DsrOptionHeader");
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionHeader);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionHeader)
+  ;
 
 TypeId DsrOptionHeader::GetTypeId ()
 {
@@ -130,7 +131,8 @@
   return retVal;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionPad1Header);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionPad1Header)
+  ;
 
 TypeId DsrOptionPad1Header::GetTypeId ()
 {
@@ -181,7 +183,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionPadnHeader);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionPadnHeader)
+  ;
 
 TypeId DsrOptionPadnHeader::GetTypeId ()
 {
@@ -241,7 +244,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionRreqHeader);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionRreqHeader)
+  ;
 
 TypeId DsrOptionRreqHeader::GetTypeId ()
 {
@@ -388,7 +392,8 @@
   return retVal;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionRrepHeader);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionRrepHeader)
+  ;
 
 TypeId DsrOptionRrepHeader::GetTypeId ()
 {
@@ -509,7 +514,8 @@
   return retVal;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionSRHeader);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionSRHeader)
+  ;
 
 TypeId DsrOptionSRHeader::GetTypeId ()
 {
@@ -651,7 +657,8 @@
   return retVal;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionRerrHeader);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionRerrHeader)
+  ;
 
 TypeId DsrOptionRerrHeader::GetTypeId ()
 {
@@ -779,7 +786,8 @@
   return retVal;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionRerrUnreachHeader);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionRerrUnreachHeader)
+  ;
 
 TypeId DsrOptionRerrUnreachHeader::GetTypeId ()
 {
@@ -907,7 +915,8 @@
   return retVal;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionRerrUnsupportHeader);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionRerrUnsupportHeader)
+  ;
 
 TypeId DsrOptionRerrUnsupportHeader::GetTypeId ()
 {
@@ -1025,7 +1034,8 @@
   return retVal;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionAckReqHeader);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionAckReqHeader)
+  ;
 
 TypeId DsrOptionAckReqHeader::GetTypeId ()
 {
@@ -1100,7 +1110,8 @@
   return retVal;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionAckHeader);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionAckHeader)
+  ;
 
 TypeId DsrOptionAckHeader::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/dsr/model/dsr-option-header.h ns-3.19/src/dsr/model/dsr-option-header.h
--- ns-3.18.1/src/dsr/model/dsr-option-header.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-option-header.h	2013-12-20 09:44:50.000000000 -0800
@@ -339,7 +339,7 @@
   Ipv4Address GetNodeAddress (uint8_t index) const;
   /**
    * \brief Set the request id number.
-   * \param the identification number
+   * \param identification the identification number
    */
   void SetId (uint16_t identification);
   /**
@@ -589,7 +589,7 @@
   virtual ~DsrOptionSRHeader ();
   /*
    * \brief Set the number of segments left to send
-   * \param The segments left
+   * \param segmentsLeft The segments left
    */
   void SetSegmentsLeft (uint8_t segmentsLeft);
   /*
@@ -631,7 +631,7 @@
   Ipv4Address GetNodeAddress (uint8_t index) const;
   /*
    * \brief Set the salvage value for a packet
-   * \param The salvage value of the packet
+   * \param salvage The salvage value of the packet
    */
   void SetSalvage (uint8_t salvage);
   /*
@@ -715,7 +715,7 @@
   \endverbatim
 */
 
-// / Error type
+/// Error type
 enum ErrorType
 {
   NODE_UNREACHABLE  = 1,   // !< NODE_UNREACHABLE
@@ -746,7 +746,7 @@
   virtual ~DsrOptionRerrHeader ();
   /**
    * \brief Set the route error type
-   * \param The error type
+   * \param errorType The error type
    */
   void SetErrorType (uint8_t errorType);
   /**
@@ -756,7 +756,7 @@
   uint8_t GetErrorType () const;
   /**
    * \brief Set the route error source address
-   * \param The error source address
+   * \param errorSrcAddress The error source address
    */
   virtual void SetErrorSrc (Ipv4Address errorSrcAddress);
   /**
@@ -770,12 +770,12 @@
   virtual void SetSalvage (uint8_t salvage);
   /**
    * \brief Get the salvage value of the packet
-   * \param The salvage value of the packet
+   * \return The salvage value of the packet
    */
   virtual uint8_t GetSalvage () const;
   /**
    * \brief Set the error destination ip address
-   * \param The error destination address
+   * \param errorDstAddress The error destination address
    */
   virtual void SetErrorDst (Ipv4Address errorDstAddress);
   /**
@@ -891,7 +891,7 @@
   virtual ~DsrOptionRerrUnreachHeader ();
   /**
    * \brief Set the route error source address
-   * \param The error source address
+   * \param errorSrcAddress The error source address
    */
   virtual void SetErrorSrc (Ipv4Address errorSrcAddress);
   /**
@@ -905,12 +905,12 @@
   virtual void SetSalvage (uint8_t salvage);
   /**
    * \brief Get the salvage value of the packet
-   * \param The salvage value of the packet
+   * \return The salvage value of the packet
    */
   virtual uint8_t GetSalvage () const;
   /**
    * \brief Set the error destination ip address
-   * \param The error destination address
+   * \param errorDstAddress The error destination address
    */
   virtual void SetErrorDst (Ipv4Address errorDstAddress);
   /**
@@ -920,7 +920,7 @@
   virtual Ipv4Address GetErrorDst () const;
   /**
    * \brief Set the unreachable node ip address
-   * \param The unreachable ip address
+   * \param unreachNode The unreachable ip address
    */
   void SetUnreachNode (Ipv4Address unreachNode);
   /**
@@ -930,7 +930,7 @@
   Ipv4Address GetUnreachNode () const;
   /**
    * \brief Set the unreachable node ip address
-   * \param The unreachable ip address
+   * \param originalDst The unreachable ip address
    */
   void SetOriginalDst (Ipv4Address originalDst);
   /**
@@ -1047,7 +1047,7 @@
   virtual ~DsrOptionRerrUnsupportHeader ();
   /**
    * \brief Set the route error source address
-   * \param The error source address
+   * \param errorSrcAddress The error source address
    */
   virtual void SetErrorSrc (Ipv4Address errorSrcAddress);
   /**
@@ -1057,16 +1057,17 @@
   virtual Ipv4Address GetErrorSrc () const;
   /**
    * \brief Set the salvage value of the packet
+   * \param salvage the salvage value
    */
   virtual void SetSalvage (uint8_t salvage);
   /**
    * \brief Get the salvage value of the packet
-   * \param The salvage value of the packet
+   * \return The salvage value of the packet
    */
   virtual uint8_t GetSalvage () const;
   /**
    * \brief Set the error destination ip address
-   * \param The error destination address
+   * \param errorDstAddress The error destination address
    */
   virtual void SetErrorDst (Ipv4Address errorDstAddress);
   /**
@@ -1076,7 +1077,7 @@
   virtual Ipv4Address GetErrorDst () const;
   /**
    * \brief Set the unsupported option type value
-   * \param The unsupported option type value
+   * \param optionType The unsupported option type value
    */
   void SetUnsupported (uint16_t optionType);
   /**
@@ -1175,7 +1176,7 @@
   virtual ~DsrOptionAckReqHeader ();
   /**
    * \brief Set the Ack request id number.
-   * \param the identification number
+   * \param identification the identification number
    */
   void SetAckId (uint16_t identification);
   /**
@@ -1212,7 +1213,7 @@
   virtual Alignment GetAlignment () const;
 
 private:
-  /*
+  /**
    * The identification field
    */
   uint16_t m_identification;
@@ -1262,7 +1263,7 @@
   virtual ~DsrOptionAckHeader ();
   /**
    * \brief Set the Ack id number.
-   * \param the identification number
+   * \param identification the identification number
    */
   void SetAckId (uint16_t identification);
   /**
@@ -1272,7 +1273,7 @@
   uint16_t GetAckId () const;
   /**
    * \brief Set Error source ip address.
-   * \param The real source address
+   * \param realSrcAddress The real source address
    */
   void SetRealSrc (Ipv4Address realSrcAddress);
   /**
@@ -1282,7 +1283,7 @@
   Ipv4Address GetRealSrc () const;
   /**
    * \brief Set Error source ip address.
-   * \param The real dst address
+   * \param realDstAddress The real dst address
    */
   void SetRealDst (Ipv4Address realDstAddress);
   /**
diff -Naur ns-3.18.1/src/dsr/model/dsr-options.cc ns-3.19/src/dsr/model/dsr-options.cc
--- ns-3.18.1/src/dsr/model/dsr-options.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-options.cc	2013-12-20 09:44:50.000000000 -0800
@@ -65,7 +65,8 @@
 namespace ns3 {
 namespace dsr {
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptions);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptions)
+  ;
 
 TypeId DsrOptions::GetTypeId ()
 {
@@ -371,7 +372,8 @@
   return 0;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionPad1);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionPad1)
+  ;
 
 TypeId DsrOptionPad1::GetTypeId ()
 {
@@ -411,7 +413,8 @@
   return pad1Header.GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionPadn);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionPadn)
+  ;
 
 TypeId DsrOptionPadn::GetTypeId ()
 {
@@ -451,7 +454,8 @@
   return padnHeader.GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionRreq);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionRreq)
+  ;
 
 TypeId DsrOptionRreq::GetTypeId ()
 {
@@ -949,7 +953,8 @@
   //unreachable:  return rreq.GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionRrep);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionRrep)
+  ;
 
 TypeId DsrOptionRrep::GetTypeId ()
 {
@@ -1149,7 +1154,8 @@
   return rrep.GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionSR);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionSR)
+  ;
 
 TypeId DsrOptionSR::GetTypeId ()
 {
@@ -1389,7 +1395,8 @@
   return sourceRoute.GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionRerr);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionRerr)
+  ;
 
 TypeId DsrOptionRerr::GetTypeId ()
 {
@@ -1555,7 +1562,7 @@
   newSourceRoute.SetNodesAddress (nodeList);
   nextAddress = newSourceRoute.GetNodeAddress (nextAddressIndex);
 
-  // / to test if the next address is multicast or not
+  /// to test if the next address is multicast or not
   if (nextAddress.IsMulticast () || targetAddress.IsMulticast ())
     {
       m_dropTrace (p);
@@ -1568,7 +1575,8 @@
   return serializedSize;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionAckReq);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionAckReq)
+  ;
 
 TypeId DsrOptionAckReq::GetTypeId ()
 {
@@ -1623,7 +1631,8 @@
   return ackReq.GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionAck);
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionAck)
+  ;
 
 TypeId DsrOptionAck::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/dsr/model/dsr-options.h ns-3.19/src/dsr/model/dsr-options.h
--- ns-3.18.1/src/dsr/model/dsr-options.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-options.h	2013-12-20 09:44:50.000000000 -0800
@@ -104,37 +104,58 @@
   Ptr<Node> GetNode () const;
   /**
    * \brief Search for the ipv4 address in the node list.
+   *
+   * \param ipv4Address IPv4 address to search for
+   * \param destAddress IPv4 address in the list that we begin the search
+   * \param nodeList List of IPv4 addresses
    * \return true if contain ip address
    */
   bool ContainAddressAfter (Ipv4Address ipv4Address, Ipv4Address destAddress, std::vector<Ipv4Address> &nodeList);
   /**
    * \brief Cut the route from ipv4Address to the end of the route vector
+   *
+   * \param ipv4Address the address to begin cutting
+   * \param nodeList List of IPv4 addresses
    * \return the vector after the route cut
    */
   std::vector<Ipv4Address> CutRoute (Ipv4Address ipv4Address, std::vector<Ipv4Address> &nodeList);
   /**
-   * \brief Set the route to use for data packets
+   * \brief Set the route to use for data packets,
+   *        used by the option headers when sending data/control packets
+   *
+   * \param nextHop IPv4 address of the next hop
+   * \param srcAddress IPv4 address of the source
    * \return the route
-   * \used by the option headers when sending data/control packets
    */
   virtual Ptr<Ipv4Route> SetRoute (Ipv4Address nextHop, Ipv4Address srcAddress);
   /**
    * \brief Reverse the routes.
+   *
+   * \param vec List of IPv4 addresses
    * \return true if successfully reversed
    */
   bool ReverseRoutes  (std::vector<Ipv4Address>& vec);
   /**
    * \brief Search for the next hop in the route
+   *
+   * \param ipv4Address the IPv4 address of the node we are looking for its next hop address
+   * \param vec List of IPv4 addresses
    * \return the next hop address if found
    */
   Ipv4Address SearchNextHop (Ipv4Address ipv4Address, std::vector<Ipv4Address>& vec);
   /**
    * \brief Reverse search for the next hop in the route
+   *
+   * \param ipv4Address the IPv4 address of the node we are looking for its next hop address
+   * \param vec List of IPv4 addresses
    * \return the previous next hop address if found
    */
   Ipv4Address ReverseSearchNextHop (Ipv4Address ipv4Address, std::vector<Ipv4Address>& vec);
   /**
    * \brief Reverse search for the next two hop in the route
+   *
+   * \param ipv4Address the IPv4 address of the node we are looking for its next two hop address
+   * \param vec List of IPv4 addresses
    * \return the previous next two hop address if found
    */
   Ipv4Address ReverseSearchNextTwoHop  (Ipv4Address ipv4Address, std::vector<Ipv4Address>& vec);
@@ -144,34 +165,46 @@
   void PrintVector (std::vector<Ipv4Address>& vec);
   /**
    * \brief Check if the two vectors contain duplicate or not
+   *
+   * \param vec the first list of IPv4 addresses
+   * \param vec2 the second list of IPv4 addresses
    * \return true if contains duplicate
    */
   bool IfDuplicates (std::vector<Ipv4Address>& vec, std::vector<Ipv4Address>& vec2);
   /**
    * \brief Check if the route already contains the node ip address
+   *
+   * \param ipv4Address the IPv4 address that we are looking for
+   * \param vec List of IPv4 addresses
    * \return true if it already exists
    */
   bool CheckDuplicates (Ipv4Address ipv4Address, std::vector<Ipv4Address>& vec);
-  /*
+  /**
    * \brief Remove the duplicates from the route
+   *
+   * \param vec List of IPv4 addresses to be clean
    * \return the route after route shorten
    */
   void RemoveDuplicates (std::vector<Ipv4Address>& vec);
   /**
    * \brief Schedule the intermediate node route request broadcast
-   * \param the original packet
-   * \param rrepHeader The rrep header
+   * \param packet the original packet
+   * \param nodeList The list of IPv4 addresses
    * \param source address
    * \param destination address
    */
   void ScheduleReply (Ptr<Packet> &packet, std::vector<Ipv4Address> &nodeList, Ipv4Address &source, Ipv4Address &destination);
   /**
    * \brief Get the node id with Ipv4Address
+   *
+   * \param address IPv4 address to look for ID
    * \return the id of the node
    */
   uint32_t GetIDfromIP (Ipv4Address address);
   /**
    * \brief Get the node object with Ipv4Address
+   *
+   * \param ipv4Address IPv4 address of the node
    * \return the object of the node
    */
   Ptr<Node> GetNodeWithAddress (Ipv4Address ipv4Address);
@@ -181,9 +214,12 @@
    * Called from DsrRouting::Receive.
    * \param packet the packet
    * \param dsrP  the clean packet with payload
+   * \param ipv4Address the IPv4 address
+   * \param source IPv4 address of the source
    * \param ipv4Header the IPv4 header of packet received
    * \param protocol the protocol number of the up layer
    * \param isPromisc if the packet must be dropped
+   * \param promiscSource IPv4 address
    * \return the processed size
    */
   virtual uint8_t Process (Ptr<Packet> packet, Ptr<Packet> dsrP, Ipv4Address ipv4Address, Ipv4Address source, Ipv4Header const& ipv4Header, uint8_t protocol, bool& isPromisc, Ipv4Address promiscSource) = 0;
@@ -245,35 +281,13 @@
    * \brief Pad1 option number.
    */
   static const uint8_t OPT_NUMBER = 224;
-  /**
-   * \brief Get the type identificator.
-   * \return type identificator
-   */
+
   static TypeId GetTypeId ();
-  /**
-   * \brief Constructor.
-   */
+
   DsrOptionPad1 ();
-  /**
-   * \brief Destructor.
-   */
   virtual ~DsrOptionPad1 ();
-  /**
-   * \brief Get the option number.
-   * \return option number
-   */
+
   virtual uint8_t GetOptionNumber () const;
-  /**
-   * \brief Process method
-   *
-   * Called from DsrRouting::Receive.
-   * \param packet the packet
-   * \param dsrP  the clean packet with payload
-   * \param ipv4Header the IPv4 header of packet received
-   * \param protocol the protocol number of the up layer
-   * \param isPromisc if the packet must be dropped
-   * \return the processed size
-   */
   virtual uint8_t Process (Ptr<Packet> packet, Ptr<Packet> dsrP, Ipv4Address ipv4Address, Ipv4Address source, Ipv4Header const& ipv4Header, uint8_t protocol, bool& isPromisc, Ipv4Address promiscSource);
 };
 
@@ -288,35 +302,13 @@
    * \brief PadN option number.
    */
   static const uint8_t OPT_NUMBER = 0;
-  /**
-   * \brief Get the type identificator.
-   * \return type identificator
-   */
+
   static TypeId GetTypeId ();
-  /**
-   * \brief Constructor.
-   */
+
   DsrOptionPadn ();
-  /**
-   * \brief Destructor.
-   */
   virtual ~DsrOptionPadn ();
-  /**
-   * \brief Get the option number.
-   * \return option number
-   */
+
   virtual uint8_t GetOptionNumber () const;
-  /**
-   * \brief Process method
-   *
-   * Called from DsrRouting::Receive.
-   * \param packet the packet
-   * \param dsrP  the clean packet with payload
-   * \param ipv4Header the IPv4 header of packet received
-   * \param protocol the protocol number of the up layer
-   * \param isPromisc if the packet must be dropped
-   * \return the processed size
-   */
   virtual uint8_t Process (Ptr<Packet> packet, Ptr<Packet> dsrP, Ipv4Address ipv4Address, Ipv4Address source, Ipv4Header const& ipv4Header, uint8_t protocol, bool& isPromisc, Ipv4Address promiscSource);
 };
 
@@ -331,10 +323,7 @@
    * \brief Rreq option number.
    */
   static const uint8_t OPT_NUMBER = 1;
-  /**
-   * \brief Get the type identificator.
-   * \return type identificator
-   */
+
   static TypeId GetTypeId ();
   /**
    * \brief Get the instance type ID.
@@ -349,22 +338,8 @@
    * \brief Destructor.
    */
   virtual ~DsrOptionRreq ();
-  /**
-   * \brief Get the option number.
-   * \return option number
-   */
+
   virtual uint8_t GetOptionNumber () const;
-  /**
-   * \brief Process method
-   *
-   * Called from DsrRouting::Receive.
-   * \param packet the packet
-   * \param dsrP  the clean packet with payload
-   * \param ipv4Header the IPv4 header of packet received
-   * \param protocol the protocol number of the up layer
-   * \param isPromisc if the packet must be dropped
-   * \return the processed size
-   */
   virtual uint8_t Process (Ptr<Packet> packet, Ptr<Packet> dsrP, Ipv4Address ipv4Address, Ipv4Address source, Ipv4Header const& ipv4Header, uint8_t protocol, bool& isPromisc, Ipv4Address promiscSource);
 
 private:
@@ -389,40 +364,18 @@
    * \brief Router alert option number.
    */
   static const uint8_t OPT_NUMBER = 2;
-  /**
-   * \brief Get the type identificator.
-   * \return type identificator
-   */
+
   static TypeId GetTypeId ();
   /**
    * \brief Get the instance type ID.
    * \return instance type ID
    */
   virtual TypeId GetInstanceTypeId () const;
-  /**
-   * \brief Constructor.
-   */
+
   DsrOptionRrep ();
-  /**
-   * \brief Destructor.
-   */
   virtual ~DsrOptionRrep ();
-  /**
-   * \brief Get the option number.
-   * \return option number
-   */
+
   virtual uint8_t GetOptionNumber () const;
-  /**
-   * \brief Process method
-   *
-   * Called from DsrRouting::Receive.
-   * \param packet the packet
-   * \param dsrP  the clean packet with payload
-   * \param ipv4Header the IPv4 header of packet received
-   * \param protocol the protocol number of the up layer
-   * \param isPromisc if the packet must be dropped
-   * \return the processed size
-   */
   virtual uint8_t Process (Ptr<Packet> packet, Ptr<Packet> dsrP, Ipv4Address ipv4Address, Ipv4Address source, Ipv4Header const& ipv4Header, uint8_t protocol, bool& isPromisc, Ipv4Address promiscSource);
 
 private:
@@ -447,40 +400,18 @@
    * \brief Source Route option number.
    */
   static const uint8_t OPT_NUMBER = 96;
-  /**
-   * \brief Get the type identificator.
-   * \return type identificator
-   */
+
   static TypeId GetTypeId ();
   /**
    * \brief Get the instance type ID.
    * \return instance type ID
    */
   virtual TypeId GetInstanceTypeId () const;
-  /**
-   * \brief Constructor.
-   */
+
   DsrOptionSR ();
-  /**
-   * \brief Destructor.
-   */
   virtual ~DsrOptionSR ();
-  /**
-   * \brief Get the option number.
-   * \return option number
-   */
+
   virtual uint8_t GetOptionNumber () const;
-  /**
-   * \brief Process method
-   *
-   * Called from DsrRouting::Receive.
-   * \param packet the packet
-   * \param dsrP  the clean packet with payload
-   * \param ipv4Header the IPv4 header of packet received
-   * \param protocol the protocol number of the up layer
-   * \param isPromisc if the packet must be dropped
-   * \return the processed size
-   */
   virtual uint8_t Process (Ptr<Packet> packet, Ptr<Packet> dsrP, Ipv4Address ipv4Address, Ipv4Address source, Ipv4Header const& ipv4Header, uint8_t protocol, bool& isPromisc, Ipv4Address promiscSource);
 
 private:
@@ -501,40 +432,18 @@
    * \brief Dsr Route Error option number.
    */
   static const uint8_t OPT_NUMBER = 3;
-  /**
-   * \brief Get the type identificator.
-   * \return type identificator
-   */
+
   static TypeId GetTypeId ();
   /**
    * \brief Get the instance type ID.
    * \return instance type ID
    */
   virtual TypeId GetInstanceTypeId () const;
-  /**
-   * \brief Constructor.
-   */
+
   DsrOptionRerr ();
-  /**
-   * \brief Destructor.
-   */
   virtual ~DsrOptionRerr ();
-  /**
-   * \brief Get the option number.
-   * \return option number
-   */
+
   virtual uint8_t GetOptionNumber () const;
-  /**
-   * \brief Process method
-   *
-   * Called from DsrRouting::Receive.
-   * \param packet the packet
-   * \param dsrP  the clean packet with payload
-   * \param ipv4Header the IPv4 header of packet received
-   * \param protocol the protocol number of the up layer
-   * \param isPromisc if the packet must be dropped
-   * \return the processed size
-   */
   virtual uint8_t Process (Ptr<Packet> packet, Ptr<Packet> dsrP, Ipv4Address ipv4Address, Ipv4Address source, Ipv4Header const& ipv4Header, uint8_t protocol, bool& isPromisc, Ipv4Address promiscSource);
   /**
    * \brief Do Send error message
@@ -570,40 +479,18 @@
    * \brief Dsr ack request option number.
    */
   static const uint8_t OPT_NUMBER = 160;
-  /**
-   * \brief Get the type identificator.
-   * \return type identificator
-   */
+
   static TypeId GetTypeId ();
   /**
    * \brief Get the instance type ID.
    * \return instance type ID
    */
   virtual TypeId GetInstanceTypeId () const;
-  /**
-   * \brief Constructor.
-   */
+
   DsrOptionAckReq ();
-  /**
-   * \brief Destructor.
-   */
   virtual ~DsrOptionAckReq ();
-  /**
-   * \brief Get the option number.
-   * \return option number
-   */
+
   virtual uint8_t GetOptionNumber () const;
-  /**
-   * \brief Process method
-   *
-   * Called from DsrRouting::Receive.
-   * \param packet the packet
-   * \param dsrP  the clean packet with payload
-   * \param ipv4Header the IPv4 header of packet received
-   * \param protocol the protocol number of the up layer
-   * \param isPromisc if the packet must be dropped
-   * \return the processed size
-   */
   virtual uint8_t Process (Ptr<Packet> packet, Ptr<Packet> dsrP, Ipv4Address ipv4Address, Ipv4Address source, Ipv4Header const& ipv4Header, uint8_t protocol, bool& isPromisc, Ipv4Address promiscSource);
 
 private:
@@ -628,40 +515,18 @@
    * \brief The Dsr Ack option number.
    */
   static const uint8_t OPT_NUMBER = 32;
-  /**
-   * \brief Get the type identificator.
-   * \return type identificator
-   */
+
   static TypeId GetTypeId ();
   /**
    * \brief Get the instance type ID.
    * \return instance type ID
    */
   virtual TypeId GetInstanceTypeId () const;
-  /**
-   * \brief Constructor.
-   */
+
   DsrOptionAck ();
-  /**
-   * \brief Destructor.
-   */
   virtual ~DsrOptionAck ();
-  /**
-   * \brief Get the option number.
-   * \return option number
-   */
+
   virtual uint8_t GetOptionNumber () const;
-  /**
-   * \brief Process method
-   *
-   * Called from DsrRouting::Receive.
-   * \param packet the packet
-   * \param dsrP  the clean packet with payload
-   * \param ipv4Header the IPv4 header of packet received
-   * \param protocol the protocol number of the up layer
-   * \param isPromisc if the packet must be dropped
-   * \return the processed size
-   */
   virtual uint8_t Process (Ptr<Packet> packet, Ptr<Packet> dsrP, Ipv4Address ipv4Address, Ipv4Address source, Ipv4Header const& ipv4Header, uint8_t protocol, bool& isPromisc, Ipv4Address promiscSource);
 
 private:
diff -Naur ns-3.18.1/src/dsr/model/dsr-passive-buff.cc ns-3.19/src/dsr/model/dsr-passive-buff.cc
--- ns-3.18.1/src/dsr/model/dsr-passive-buff.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-passive-buff.cc	2013-12-20 09:44:50.000000000 -0800
@@ -41,7 +41,8 @@
 namespace ns3 {
 namespace dsr {
 
-NS_OBJECT_ENSURE_REGISTERED (PassiveBuffer);
+NS_OBJECT_ENSURE_REGISTERED (PassiveBuffer)
+  ;
 
 TypeId PassiveBuffer::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/dsr/model/dsr-passive-buff.h ns-3.19/src/dsr/model/dsr-passive-buff.h
--- ns-3.18.1/src/dsr/model/dsr-passive-buff.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-passive-buff.h	2013-12-20 09:44:50.000000000 -0800
@@ -45,7 +45,19 @@
 class PassiveBuffEntry
 {
 public:
-  // / c-tor
+  /**
+   * Construct a PassiveBuffEntry with the given parameters
+   *
+   * \param pa packet
+   * \param d IPv4 address of the destination
+   * \param s IPv4 address of the source
+   * \param n IPv4 address of the next hop node
+   * \param i ID
+   * \param f fragment offset
+   * \param seg number of segments left
+   * \param exp expiration time
+   * \param p protocol number
+   */
   PassiveBuffEntry (Ptr<const Packet> pa = 0, Ipv4Address d = Ipv4Address (), Ipv4Address s = Ipv4Address (),
                   Ipv4Address n = Ipv4Address (), uint16_t i = 0, uint16_t f = 0, uint8_t seg = 0, Time exp = Simulator::Now (),
                   uint8_t p = 0)
@@ -68,7 +80,7 @@
   {
     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
+  ///\name Fields
   // \{
   Ptr<const Packet> GetPacket () const
   {
@@ -144,21 +156,21 @@
   }
   // \}
 private:
-  // / Data packet
+  /// Data packet
   Ptr<const Packet> m_packet;
-  // / Destination address
+  /// Destination address
   Ipv4Address m_dst;
-  // / Source address
+  /// Source address
   Ipv4Address m_source;
-  // / Nexthop address
+  /// Nexthop address
   Ipv4Address m_nextHop;
-  // /
+  ///
   uint16_t m_identification;
   uint16_t m_fragmentOffset;
   uint8_t m_segsLeft;
-  // / Expire time for queue entry
+  /// Expire time for queue entry
   Time m_expire;
-  // / The protocol number
+  /// The protocol number
   uint8_t m_protocol;
 };
 
@@ -170,31 +182,23 @@
 class PassiveBuffer  : public Object
 {
 public:
-  // / c-tor
-  /**
-   * \brief Get the type identificator.
-   * \return type identificator
-   */
+
   static TypeId GetTypeId ();
-  /**
-   * \brief Constructor.
-   */
+
   PassiveBuffer ();
-  /**
-   * \brief Destructor.
-   */
   virtual ~PassiveBuffer ();
-  // / Push entry in queue, if there is no entry with the same packet and destination address in queue.
+
+  /// Push entry in queue, if there is no entry with the same packet and destination address in queue.
   bool Enqueue (PassiveBuffEntry & entry);
-  // / Return first found (the earliest) entry for given destination
+  /// Return first found (the earliest) entry for given destination
   bool Dequeue (Ipv4Address dst, PassiveBuffEntry & entry);
-  // / Finds whether a packet with destination dst exists in the queue
+  /// Finds whether a packet with destination dst exists in the queue
   bool Find (Ipv4Address dst);
-  // / Check if all the entries in passive buffer entry is all equal or not
+  /// Check if all the entries in passive buffer entry is all equal or not
   bool AllEqual (PassiveBuffEntry & entry);
-  // / Number of entries
+  /// Number of entries
   uint32_t GetSize ();
-  // /\name Fields
+  ///\name Fields
   // \{
   uint32_t GetMaxQueueLen () const
   {
@@ -215,19 +219,19 @@
   // \}
 
 private:
-  // / The send buffer to cache unsent packet
+  /// The send buffer to cache unsent packet
   std::vector<PassiveBuffEntry> m_passiveBuffer;
-  // / Remove all expired entries
+  /// Remove all expired entries
   void Purge ();
-  // / Notify that packet is dropped from queue by timeout
+  /// Notify that packet is dropped from queue by timeout
   void Drop (PassiveBuffEntry en, std::string reason);
-  // / Notify that packet is dropped from queue by timeout
+  /// Notify that packet is dropped from queue by timeout
   void DropLink (PassiveBuffEntry en, std::string reason);
-  // / The maximum number of packets that we allow a routing protocol to buffer.
+  /// The maximum number of packets that we allow a routing protocol to buffer.
   uint32_t m_maxLen;
-  // / The maximum period of time that a routing protocol is allowed to buffer a packet for, seconds.
+  /// The maximum period of time that a routing protocol is allowed to buffer a packet for, seconds.
   Time m_passiveBufferTimeout;
-  // / Check if the send buffer entry is the same or not
+  /// Check if the send buffer entry is the same or not
   static bool LinkEqual (PassiveBuffEntry en, const std::vector<Ipv4Address> link)
   {
     return ((en.GetSource () == link[0]) && (en.GetNextHop () == link[1]));
diff -Naur ns-3.18.1/src/dsr/model/dsr-rcache.cc ns-3.19/src/dsr/model/dsr-rcache.cc
--- ns-3.18.1/src/dsr/model/dsr-rcache.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-rcache.cc	2013-12-20 09:44:50.000000000 -0800
@@ -131,7 +131,8 @@
      << "\t";
 }
 
-NS_OBJECT_ENSURE_REGISTERED (RouteCache);
+NS_OBJECT_ENSURE_REGISTERED (RouteCache)
+  ;
 
 TypeId RouteCache::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/dsr/model/dsr-rcache.h ns-3.19/src/dsr/model/dsr-rcache.h
--- ns-3.18.1/src/dsr/model/dsr-rcache.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-rcache.h	2013-12-20 09:44:50.000000000 -0800
@@ -155,14 +155,8 @@
 class NodeStab
 {
 public:
-  /**
-   * \brief Constructor
-   */
-//  NodeStab ();
+
   NodeStab (Time nodeStab = Simulator::Now ());
-  /**
-   * \brief Destructor
-   */
   virtual ~NodeStab ();
 
   void SetNodeStability (Time nodeStab)
@@ -182,18 +176,13 @@
 public:
   typedef std::vector<Ipv4Address> IP_VECTOR;                ///< Define the vector to hold Ip address
   typedef std::vector<Ipv4Address>::iterator Iterator;       ///< Define the iterator
-  // / c-tor
-  /**
-   * \brief Constructor
-   */
+
   RouteCacheEntry (IP_VECTOR const  & ip = IP_VECTOR (), Ipv4Address dst = Ipv4Address (), Time exp = Simulator::Now ());
-  /**
-   * \brief Destructor
-   */
   virtual ~RouteCacheEntry ();
-  // / Mark entry as "down" (i.e. disable it)
+
+  /// Mark entry as "down" (i.e. disable it)
   void Invalidate (Time badLinkLifetime);
-  // /\name Fields
+  ///\name Fields
   // \{
   void SetUnidirectional (bool u)
   {
@@ -278,23 +267,14 @@
 private:
 
   Timer m_ackTimer;                                                     ///< RREP_ACK timer
-
   Ipv4Address m_dst;                                                    ///< The destination Ip address
-
   IP_VECTOR m_path;                                                     ///< brief The IP address constructed route
-
   Time m_expire;                                                        ///< Expire time for queue entry
-
   Ipv4InterfaceAddress m_iface;                                         ///< Output interface address
-
   uint8_t m_reqCount;                                                   ///< Number of route requests
-
   bool m_blackListState;                                                ///< Indicate if this entry is in "blacklist"
-
   Time m_blackListTimeout;                                              ///< Time for which the node is put into the blacklist
-
   Ptr<Ipv4Route> m_ipv4Route;                                           ///< The Ipv4 route
-
   Ptr<Ipv4> m_ipv4;                                                     ///< The Ipv4 layer 3
 };
 /**
@@ -305,20 +285,12 @@
 class RouteCache : public Object
 {
 public:
-  // / Default c-tor
-/**
- * \ingroup dsr
- * \brief The Route Cache used by DSR
- */
+
   static TypeId GetTypeId ();
-  /**
-   * \brief Constructor.
-   */
+
   RouteCache ();
-  /**
-   * \brief Destructor.
-   */
   virtual ~RouteCache ();
+
   /**
    * \brief Remove the aged route cache entries when the route cache is full
    */
@@ -327,7 +299,7 @@
    * \brief Define the vector of route entries.
    */
   typedef std::list<RouteCacheEntry::IP_VECTOR> routeVector;
-  // /\name Fields
+  ///\name Fields
   // \{
   bool GetSubRoute () const
   {
@@ -413,7 +385,6 @@
   /**
    * \brief Update route cache entry if it has been recently used and successfully delivered the data packet
    * \param dst destination address of the route
-   * \param vec the route vector
    * \return true in success
    */
   bool UpdateRouteEntry (Ipv4Address dst);
@@ -425,8 +396,8 @@
   bool AddRoute (RouteCacheEntry & rt);
   /**
    * \brief Lookup route cache entry with destination address dst
-   * \param dst destination address
-   * \param rt entry with destination address dst, if exists
+   * \param id destination address
+   * \param rt entry with destination address id, if exists
    * \return true on success
    */
   bool LookupRoute (Ipv4Address id, RouteCacheEntry & rt);
@@ -460,14 +431,14 @@
    * \param node This node's ip address
    */
   void DeleteAllRoutesIncludeLink (Ipv4Address errorSrc, Ipv4Address unreachNode, Ipv4Address node);
-  // / Delete all entries from routing table
+  /// Delete all entries from routing table
   void Clear ()
   {
     m_routeEntryVector.erase (m_routeEntryVector.begin (), m_routeEntryVector.end ());
   }
-  // / Delete all outdated entries and invalidate valid entry if Lifetime is expired
+  /// Delete all outdated entries and invalidate valid entry if Lifetime is expired
   void Purge ();
-  // / Print route cache
+  /// Print route cache
   void Print (std::ostream &os);
 
   //------------------------------------------------------------------------------------------
@@ -484,7 +455,7 @@
   /**
    * The following code handles link-layer acks
    */
-  // / Neighbor description
+  /// Neighbor description
   struct Neighbor
   {
     Ipv4Address m_neighborAddress;
@@ -549,7 +520,7 @@
   {
     return m_txErrorCallback;
   }
-  // /\name Handle link failure callback
+  ///\name Handle link failure callback
   // \{
   void SetCallback (Callback<void, Ipv4Address, uint8_t > cb)
   {
@@ -625,16 +596,16 @@
 
 public:
   /**
-   * \brief dijsktra algorithm to get the best route from m_netGraph and update the m_bestRoutesTable_link
-   * \when current graph information has changed
-   * \param The type of the cache
+   * \brief Dijsktra algorithm to get the best route from m_netGraph and update the m_bestRoutesTable_link
+   * when current graph information has changed
+   * \param type The type of the cache
    */
   void SetCacheType (std::string type);
   bool IsLinkCache ();
   bool AddRoute_Link (RouteCacheEntry::IP_VECTOR nodelist, Ipv4Address node);
   /**
    *  \brief USE MAXWEIGHT TO REPRESENT MAX; USE BROADCAST ADDRESS TO REPRESENT NULL PRECEEDING ADDRESS
-   *  \param The source address the routes based on
+   *  \param source The source address the routes based on
    */
   void RebuildBestRouteTable (Ipv4Address source);
   void PurgeLinkNode ();
diff -Naur ns-3.18.1/src/dsr/model/dsr-routing.cc ns-3.19/src/dsr/model/dsr-routing.cc
--- ns-3.18.1/src/dsr/model/dsr-routing.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-routing.cc	2013-12-20 09:44:50.000000000 -0800
@@ -79,7 +79,8 @@
 namespace ns3 {
 namespace dsr {
 
-NS_OBJECT_ENSURE_REGISTERED (DsrRouting);
+NS_OBJECT_ENSURE_REGISTERED (DsrRouting)
+  ;
 
 /* see http://www.iana.org/assignments/protocol-numbers */
 const uint8_t DsrRouting::PROT_NUMBER = 48;
diff -Naur ns-3.18.1/src/dsr/model/dsr-routing.h ns-3.19/src/dsr/model/dsr-routing.h
--- ns-3.18.1/src/dsr/model/dsr-routing.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-routing.h	2013-12-20 09:44:50.000000000 -0800
@@ -124,7 +124,7 @@
   void SetNode (Ptr<Node> node);
   /**
    * \brief Set the route cache.
-   * \param the route cache to set
+   * \param r the route cache to set
    */
   void SetRouteCache (Ptr<dsr::RouteCache> r);
   /**
@@ -134,7 +134,7 @@
   Ptr<dsr::RouteCache> GetRouteCache () const;
   /**
    * \brief Set the node.
-   * \param the request table to set
+   * \param r the request table to set
    */
   void SetRequestTable (Ptr<dsr::RreqTable> r);
   /**
@@ -144,7 +144,7 @@
   Ptr<dsr::RreqTable> GetRequestTable () const;
   /**
    * \brief Set the node.
-   * \param the passive buffer to set
+   * \param r the passive buffer to set
    */
   void SetPassiveBuffer (Ptr<dsr::PassiveBuffer> r);
   /**
@@ -153,7 +153,7 @@
     */
   Ptr<dsr::PassiveBuffer> GetPassiveBuffer () const;
 
-  ///\functions used to direct to route cache
+  /// functions used to direct to route cache
   //\{
   bool IsLinkCache ();
   void UseExtends (RouteCacheEntry::IP_VECTOR rt);
@@ -172,31 +172,37 @@
   void ConnectCallbacks ();
   /**
     * \brief Get the netdevice from the context.
+    * \param context context
     * \return the netdevice we are looking for
     */
   Ptr<NetDevice> GetNetDeviceFromContext (std::string context);
   /**
     * \brief Get the elements from the tracing context.
+    * \param context context
     * \return the elements we are looking for
     */
   std::vector<std::string> GetElementsFromContext (std::string context);
   /**
     * \brief Get the node id from ip address.
+    * \param address IPv4 address
     * \return the node id
     */
   uint16_t GetIDfromIP (Ipv4Address address);
   /**
     * \brief Get the ip address from id.
+    * \param id unique ID
     * \return the ip address for the id
     */
   Ipv4Address GetIPfromID (uint16_t id);
   /**
     * \brief Get the Ip address from mac address.
+    * \param address Mac48Address
     * \return the ip address
     */
   Ipv4Address GetIPfromMAC (Mac48Address address);
   /**
     * \brief Get the node with give ip address.
+    * \param ipv4Address IPv4 address
     * \return the node associated with the ip address
     */
   Ptr<Node> GetNodeWithAddress (Ipv4Address ipv4Address);
@@ -206,6 +212,8 @@
   void PrintVector (std::vector<Ipv4Address>& vec);
   /**
     * \brief Get the next hop of the route.
+    * \param ipv4Address
+    * \param vec Route
     * \return the next hop address of the route
     */
   Ipv4Address SearchNextHop (Ipv4Address ipv4Address, std::vector<Ipv4Address>& vec);
@@ -230,13 +238,16 @@
                        Ipv4Address destination,
                        uint8_t protocol);
   /**
-   * \brief Set the route to use for data packets
+   * \brief Set the route to use for data packets,
+   *        used by the option headers when sending data/control packets
+   * \param nextHop next hop IPv4 address
+   * \param srcAddress IPv4 address of the source
    * \return the route
-   * \used by the option headers when sending data/control packets
    */
   Ptr<Ipv4Route> SetRoute (Ipv4Address nextHop, Ipv4Address srcAddress);
   /**
    * \brief Set the priority of the packet in network queue
+   * \param messageType Message type
    * \return the priority value
    */
   uint32_t GetPriority (DsrMessageType messageType);
@@ -378,28 +389,28 @@
                            uint8_t protocol);
   /**
    * \brief Send the error request packet
-   * \param the route error header
-   * \param the protocol number
+   * \param rerr the route error header
+   * \param protocol the protocol number
    */
   void SendErrorRequest (DsrOptionRerrUnreachHeader &rerr, uint8_t protocol);
   /**
    * \brief Forward the route request if the node is not the destination
-   * \param the original packet
+   * \param packet the original packet
    * \param source address
    */
   void SendRequest (Ptr<Packet> packet,
                     Ipv4Address source);
   /**
    * \brief Schedule the intermediate route request
-   * \param the original packet
-   * \param source The source address
-   * \param destination The destination address
+   * \param packet the original packet
    */
   void ScheduleInterRequest (Ptr<Packet> packet);
   /**
    * \brief Send the gratuitous reply
    * \param replyTo The destination address to send the reply to
    * \param replyFrom The source address sending the reply
+   * \param nodeList Route
+   * \param protocol the protocol number
    */
   void SendGratuitousReply (Ipv4Address replyTo,
                             Ipv4Address replyFrom,
@@ -407,6 +418,11 @@
                             uint8_t protocol);
   /**
    * Send the route reply back to the request originator with the cumulated route
+   *
+   * \param packet the original packet
+   * \param source IPv4 address of the source (i.e. request originator)
+   * \param nextHop IPv4 address of the next hop
+   * \param route Route
    */
   void SendReply (Ptr<Packet> packet,
                   Ipv4Address source,
@@ -415,6 +431,11 @@
   /**
    * this is a generating the initial route reply from the destination address, a random delay time
    * [0, m_broadcastJitter] is used before unicasting back the route reply packet
+   *
+   * \param packet the original packet
+   * \param source IPv4 address of the source (i.e. request originator)
+   * \param nextHop IPv4 address of the next hop
+   * \param route Route
    */
   void ScheduleInitialReply (Ptr<Packet> packet,
                              Ipv4Address source,
@@ -422,6 +443,11 @@
                              Ptr<Ipv4Route> route);
   /**
    * Schedule the cached reply to a random start time to avoid possible route reply storm
+   *
+   * \param packet the original packet
+   * \param source IPv4 address of the source (i.e. request originator)
+   * \param destination IPv4 address of the destination
+   * \param route Route
    */
   void ScheduleCachedReply (Ptr<Packet> packet,
                             Ipv4Address source,
@@ -430,6 +456,13 @@
                             double hops);
   /**
    * Send network layer acknowledgment back to the earlier hop to notify the receipt of data packet
+   *
+   * \param ackId ACK ID
+   * \param destination IPv4 address of the immediate ACK receiver
+   * \param realSrc IPv4 address of the real source
+   * \param realDst IPv4 address of the real destination
+   * \param protocol the protocol number
+   * \param route Route
    */
   void SendAck   (uint16_t ackId,
                   Ipv4Address destination,
@@ -441,6 +474,7 @@
    * \param p packet to forward up
    * \param header IPv4 Header information
    * \param incomingInterface the Ipv4Interface on which the packet arrived
+   * \return receive status
    *
    * Called from lower-level layers to send the packet up
    * in the stack.
@@ -453,6 +487,7 @@
    * \param p packet to forward up
    * \param header IPv6 Header information
    * \param incomingInterface the Ipv6Interface on which the packet arrived
+   * \return receive status
    *
    * Called from lower-level layers to send the packet up
    * in the stack.  Not implemented (IPv6).
@@ -470,9 +505,10 @@
    * Called from Ipv4L3Protocol::Receive.
    *
    * \param packet the packet
-   * \param offset the offset of the extension to process
+   * \param ipv4Header IPv4 header of the packet
    * \param dst destination address of the packet received (i.e. us)
    * \param nextHeader the next header
+   * \param protocol the protocol number
    * \param isDropped if the packet must be dropped
    * \return the size processed
    */
@@ -496,10 +532,21 @@
   void CancelRreqTimer (Ipv4Address dst, bool isRemove);
   /**
    * \brief Schedule the route request retry.
-   * \param dst The dst address of the route request
+   * \param packet the original packet
+   * \param address List of IPv4 addresses
+   * \param nonProp flag if RREQ is non-propagating
+   * \param requestId Unique request ID
+   * \param protocol the protocol number
    */
   void ScheduleRreqRetry (Ptr<Packet> packet, std::vector<Ipv4Address> address, bool nonProp, uint32_t requestId, uint8_t protocol);
-  // / Handle route discovery timer
+  /**
+   * Handle route discovery timer
+   *
+   * \param packet the original packet
+   * \param address List of IPv4 addresses
+   * \param requestId Unique request ID
+   * \param protocol the protocol number
+   */
   void RouteRequestTimerExpire (Ptr<Packet> packet, std::vector<Ipv4Address> address, uint32_t requestId, uint8_t protocol);
 
  /**
@@ -548,6 +595,7 @@
    * \param from The from address we received the packet
    * \param to The address this packet is destined for
    * \param packetType The dsr packet type, 0 is for control packet, 1 for data packet
+   * \return true if the packet was processed, false otherwise
    */
   bool PromiscReceive (Ptr<NetDevice> device, Ptr<const Packet> packet, uint16_t protocol, const Address &from,
                        const Address &to, NetDevice::PacketType packetType);
diff -Naur ns-3.18.1/src/dsr/model/dsr-rreq-table.cc ns-3.19/src/dsr/model/dsr-rreq-table.cc
--- ns-3.18.1/src/dsr/model/dsr-rreq-table.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-rreq-table.cc	2013-12-20 09:44:50.000000000 -0800
@@ -39,7 +39,8 @@
 namespace ns3 {
 namespace dsr {
 
-NS_OBJECT_ENSURE_REGISTERED (RreqTable);
+NS_OBJECT_ENSURE_REGISTERED (RreqTable)
+  ;
 
 TypeId RreqTable::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/dsr/model/dsr-rreq-table.h ns-3.19/src/dsr/model/dsr-rreq-table.h
--- ns-3.18.1/src/dsr/model/dsr-rreq-table.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-rreq-table.h	2013-12-20 09:44:50.000000000 -0800
@@ -43,18 +43,27 @@
 namespace ns3 {
 namespace dsr {
 
+/**
+ * State of link
+ */
 enum LinkStates
 {
-  PROBABLE = 0,            // !< PROBABLE
-  QUESTIONABLE = 1,        // !< QUESTIONABLE
+  PROBABLE = 0,            //!< PROBABLE
+  QUESTIONABLE = 1,        //!< QUESTIONABLE
 };
-// / BlackList description
+/// BlackList description
 struct BlackList
 {
-  Ipv4Address m_neighborAddress;
-  Time m_expireTime;
-  LinkStates m_linkStates;
+  Ipv4Address m_neighborAddress; //!< IPv4 address of the black-listed neighbor
+  Time m_expireTime;             //!< Expire time in the black list
+  LinkStates m_linkStates;       //!< State of the link
 
+  /**
+   * Construct a BlackList with the given parameters
+   *
+   * \param ip IPv4 address of the neighbor
+   * \param t expire time for the black list entry
+   */
   BlackList (Ipv4Address ip, Time t)
     : m_neighborAddress (ip),
       m_expireTime (t),
@@ -67,8 +76,8 @@
  */
 struct RreqTableEntry
 {
-  uint32_t m_reqNo;
-  Time m_expire;
+  uint32_t m_reqNo; //!< Route request number
+  Time m_expire;    //!< Expire time
 };
 /**
  * The request entry for intermediate nodes to check if they have received this request or not
@@ -77,14 +86,20 @@
 class ReceivedRreqEntry
 {
 public:
-  // / c-tor
+  /**
+   * Construct a ReceivedRreqEntry with the given parameters
+   *
+   * \param d IPv4 address of the destination
+   * \param i identification
+   */
   ReceivedRreqEntry (Ipv4Address d = Ipv4Address (), uint16_t i = 0)
     : m_destination (d),
       m_identification (i)
   {
   }
   /**
-   * \brief Compare send buffer entries
+   * \brief Compare send buffer entries (destination address and identification)
+   * \param o another ReceivedRreqEntry
    * \return true if equal
    */
   bool operator== (ReceivedRreqEntry const & o) const
@@ -92,46 +107,89 @@
     return ((m_destination == o.m_destination) && (m_identification == o.m_identification)
            );
   }
-  // /\name Fields
-  // \{
+
+  /**
+   * Return IPv4 address of the destination
+   *
+   * \return IPv4 address of the destination
+   */
   Ipv4Address GetDestination () const
   {
     return m_destination;
   }
+  /**
+   * Set IPv4 address of the destination
+   *
+   * \param d IPv4 address of the destination
+   */
   void SetDestination (Ipv4Address d)
   {
     m_destination = d;
   }
+  /**
+   * Return IPv4 address of the source
+   *
+   * \return IPv4 address of the source
+   */
   Ipv4Address GetSource () const
   {
     return m_source;
   }
+  /**
+   * Set IPv4 address of the source
+   *
+   * \param s IPv4 address of the source
+   */
   void SetSource (Ipv4Address s)
   {
     m_source = s;
   }
+  /**
+   * Return identification
+   *
+   * \return identification
+   */
   uint16_t GetIdentification () const
   {
     return m_identification;
   }
+  /**
+   * Set identification
+   *
+   * \param i identification
+   */
   void SetIdentification (uint16_t i)
   {
     m_identification = i;
   }
+  /**
+   * Set expire time for the RREQ entry.
+   * Note that the parameter is duration but
+   * the stored value is the absolute time.
+   *
+   * \param exp duration before expire
+   */
   void SetExpireTime (Time exp)
   {
     m_expire = exp + Simulator::Now ();
   }
+  /**
+   * Return the remaining time before the RREQ entry expires.
+   * Note that we return the remaining time but the stored
+   * value is the absolute time.
+   *
+   * \return the remaining time before the RREQ entry expires
+   */
   Time GetExpireTime () const
   {
     return m_expire - Simulator::Now ();
   }
   // \}
 private:
-    Ipv4Address m_destination;
-    Ipv4Address m_source;
-    uint16_t m_identification;
-    Time m_expire;
+  Ipv4Address m_destination; //!< IPv4 address of the destinaton
+  Ipv4Address m_source;      //!< IPv4 address of the source
+  uint16_t m_identification; //!< Route request identification
+  Time m_expire;             //!< Route request expire time
 };
 
 /**
@@ -141,81 +199,122 @@
 class RreqTable  : public Object
 {
 public:
-  // / c-tor
-  /**
-   * \brief Get the type identificator.
-   * \return type identificator
-   */
+
   static TypeId GetTypeId ();
-  /**
-   * \brief Constructor.
-   */
+
   RreqTable ();
-  /**
-   * \brief Destructor.
-   */
   virtual ~RreqTable ();
 
-  // /\name Fields
-  // \{
+  /**
+   * Set the initial discovert hop limit
+   *
+   * \param hl the initial discovert hop limit
+   */
   void SetInitHopLimit (uint32_t hl)
   {
     m_initHopLimit = hl;
   }
+  /**
+   * Return the initial discovert hop limit
+   *
+   * \return the initial discovert hop limit
+   */
   uint32_t GetInitHopLimit () const
   {
     return m_initHopLimit;
   }
+  /**
+   * Set the maximum number of request entries in
+   * the request table.
+   *
+   * \param rt the maximum number of request entries
+   */
   void SetRreqTableSize (uint32_t rt)
   {
     m_requestTableSize = rt;
   }
+  /**
+   * Return the maximum number of request entries in
+   * the request table.
+   *
+   * \return the maximum number of request entries
+   */
   uint32_t GetRreqTableSize () const
   {
     return m_requestTableSize;
   }
+  /**
+   * Set the maximum number of request source Ids in
+   * the request table
+   *
+   * \param id the maximum number of request source Ids
+   */
   void SetRreqIdSize (uint32_t id)
   {
     m_requestIdSize = id;
   }
+  /**
+   * Return the maximum number of request source Ids in
+   * the request table
+   *
+   * \return the maximum number of request source Ids
+   */
   uint32_t GetRreqIdSize () const
   {
     return m_requestIdSize;
   }
+  /**
+   * Set the maximum number of request Ids in
+   * the request table for a single destination.
+   *
+   * \param uid the maximum number of request Ids
+   */
   void SetUniqueRreqIdSize (uint32_t uid)
   {
     m_maxRreqId = uid;
   }
+  /**
+   * Return the maximum number of request Ids in
+   * the request table for a single destination.
+   *
+   * \return the maximum number of request Ids
+   */
   uint32_t GetUniqueRreqIdSize () const
   {
     return m_maxRreqId;
   }
 
-  // \}
-  // / Remove the least used entry
+  /// Remove the least used entry
   void RemoveLeastExpire (std::map<Ipv4Address, RreqTableEntry > & rreqDstMap);
-  // / Find the entry in the route request queue to see if already exists
+  /// Find the entry in the route request queue to see if already exists
   void FindAndUpdate (Ipv4Address dst);
-  // / Remove route request entry for dst
+  /// Remove route request entry for dst
   void RemoveRreqEntry (Ipv4Address dst);
-  // / Get the request count number for one destination address
+  /// Get the request count number for one destination address
   uint32_t GetRreqCnt (Ipv4Address dst);
-  //----------------------------------------------------------------------------------------------------------
+
   /**
-   * The following code generates new request id for each destination
+   * The following code generates new request id for each destination.
+   * Check for duplicate ids and save new entries if the id is not present in the table.
+   *
+   * \param dst IPv4 address of the destination
+   * \return id
    */
-  // / Check for duplicate ids and save new entries if the id is not present in the table
   uint32_t CheckUniqueRreqId (Ipv4Address dst);
-  // / Get the request id size
+  /**
+   * Get the request id size
+   *
+   * \return the request id size
+   */
   uint32_t GetRreqSize ();
-  // ---------------------------------------------------------------------------------------------------------
+
   /**
    * set the unidirectional entry as QUESTIONABLE state
    */
   void Invalidate ();
   /**
    * \brief Verify if entry is unidirectional or not(e.g. add this neighbor to "blacklist" for blacklistTimeout period)
-   * \param neighbor - neighbor address link to which assumed to be unidirectional
+   * \param neighbor neighbor address link to which assumed to be unidirectional
    * \return true on success
    */
   BlackList* FindUnidirectional (Ipv4Address neighbor);
@@ -226,50 +325,59 @@
    * \return true on success
    */
   bool MarkLinkAsUnidirectional (Ipv4Address neighbor, Time blacklistTimeout);
-  ///< Remove all expired black list entries
+  /**
+   * Remove all expired black list entries
+   */
   void PurgeNeighbor ();
-  // ----------------------------------------------------------------------------------------------------------
+
   /**
    * Find the source request entry in the route request queue, return false if not found
    * \param src the source address we just received the source request
    * \param dst the destination address the request is targeted at
    * \param id the identification number for this request
+   * \return true if found, false otherwise
    */
   bool FindSourceEntry (Ipv4Address src, Ipv4Address dst, uint16_t id);
 
 private:
-  // / The max request period among requests
+  /// The max request period among requests
   Time  MaxRequestPeriod;
-  // / The original request period
+  /// The original request period
   Time  RequestPeriod;
-  // / The non-propagaton request timeout
+  /// The non-propagaton request timeout
   Time  NonpropRequestTimeout;
-  // / The source route entry expire time
+  /// The source route entry expire time
   Time m_rreqEntryExpire;
-  // / The initial hop limit
+  /// The initial hop limit
   uint32_t m_initHopLimit;
-  // / The request table size
+  /// The request table size
   uint32_t m_requestTableSize;
-  // / The request source id size
+  /// The request source id size
   uint32_t m_requestIdSize;
-  // / The unique request id for any destination
+  /// The unique request id for any destination
   uint32_t m_maxRreqId;
-  // / The state of the unidirectional link
+  /// The state of the unidirectional link
   LinkStates m_linkStates;
-  // / Map of entries
+  /// Map of entries
   std::list<ReceivedRreqEntry> m_sourceRequests;
-  // / The id cache to ensure all the ids are unique, it is used when sending out route request
+  /// The id cache to ensure all the ids are unique, it is used when sending out route request
   std::map<Ipv4Address, uint32_t> m_rreqIdCache;
-  // / The cache to save route request table entries indexed with destination address
+  /// The cache to save route request table entries indexed with destination address
   std::map<Ipv4Address, RreqTableEntry > m_rreqDstMap;
-  // / The cache to ensure all the route request from unique source
+  /// The cache to ensure all the route request from unique source
   std::map<Ipv4Address, std::list<ReceivedRreqEntry> > m_sourceRreqMap;
 
-  // / The Black list
+  /// The Black list
   std::vector<BlackList> m_blackList;
-  // / Check if the entry is expired or not
+  /// Check if the entry is expired or not
   struct IsExpired
   {
+    /**
+     * Check if the entry is expired
+     *
+     * \param b BlackList entry
+     * \return true if expired, false otherwise
+     */
     bool operator() (const struct BlackList & b) const
     {
       return (b.m_expireTime < Simulator::Now ());
diff -Naur ns-3.18.1/src/dsr/model/dsr-rsendbuff.h ns-3.19/src/dsr/model/dsr-rsendbuff.h
--- ns-3.18.1/src/dsr/model/dsr-rsendbuff.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/dsr/model/dsr-rsendbuff.h	2013-12-20 09:44:50.000000000 -0800
@@ -45,7 +45,14 @@
 class SendBuffEntry
 {
 public:
-  // / c-tor
+  /**
+   * Construct SendBuffEntry with the given parameters.
+   *
+   * \param pa packet
+   * \param d destination address
+   * \param exp expiration time
+   * \param p protocol number
+   */
   SendBuffEntry (Ptr<const Packet> pa = 0, Ipv4Address d = Ipv4Address (),
                  Time exp = Simulator::Now (), uint8_t p = 0)
     : m_packet (pa),
@@ -56,6 +63,7 @@
   }
   /**
    * Compare send buffer entries
+   * \param o another SendBuffEntry
    * \return true if equal
    */
   bool operator== (SendBuffEntry const & o) const
@@ -98,13 +106,13 @@
   }
   // \}
 private:
-  // / Data packet
+  /// Data packet
   Ptr<const Packet> m_packet;
-  // / Destination address
+  /// Destination address
   Ipv4Address m_dst;
-  // / Expire time for queue entry
+  /// Expire time for queue entry
   Time m_expire;
-  // / The protocol number
+  /// The protocol number
   uint8_t m_protocol;
 };
 
@@ -116,40 +124,93 @@
 class SendBuffer
 {
 public:
-  // / Default c-tor
+  /**
+   * Default constructor
+   */
   SendBuffer ()
   {
   }
-  // / Push entry in queue, if there is no entry with the same packet and destination address in queue.
+  /**
+   * Push entry in queue, if there is no entry with
+   * the same packet and destination address in queue.
+   *
+   * \param entry SendBuffEntry to put in the queue
+   * \return true if successfully enqueued,
+   *         false otherwise
+   */
   bool Enqueue (SendBuffEntry & entry);
-  // / Return first found (the earliest) entry for given destination
+  /**
+   * Return first found (the earliest) entry for
+   * the given destination.
+   *
+   * \param dst IPv4 address of the destination
+   * \param entry pointer to entry to return
+   * \return true if successfully dequeued,
+   *         false otherwise
+   */
   bool Dequeue (Ipv4Address dst, SendBuffEntry & entry);
-  // / Remove all packets with destination IP address dst
+  /**
+   * Remove all packets with destination IP address dst
+   *
+   * \param dst IPv4 address of the destination
+   */
   void DropPacketWithDst (Ipv4Address dst);
-  // / Finds whether a packet with destination dst exists in the queue
+  /**
+   * Check if a packet with destination dst exists in the queue
+   *
+   * \param dst IPv4 address of the destination
+   * \return true if found, false otherwise
+   */
   bool Find (Ipv4Address dst);
-  // / Number of entries
+  /**
+   * Number of entries
+   *
+   * \return the number of entries in the queue
+   */
   uint32_t GetSize ();
-  // /\name Fields
-  // \{
+  /**
+   * Return the maximum queue length
+   *
+   * \return the maximum queue length
+   */
   uint32_t GetMaxQueueLen () const
   {
     return m_maxLen;
   }
+  /**
+   * Set the maximum queue length
+   *
+   * \param len the maximum queue length
+   */
   void SetMaxQueueLen (uint32_t len)
   {
     m_maxLen = len;
   }
+  /**
+   * Return the entry lifetime in the queue
+   *
+   * \return the entry lifetime in the queue
+   */
   Time GetSendBufferTimeout () const
   {
     return m_sendBufferTimeout;
   }
+  /**
+   * Set the entry lifetime in the queue
+   *
+   * \param t the entry lifetime in the queue
+   */
   void SetSendBufferTimeout (Time t)
   {
     m_sendBufferTimeout = t;
   }
   // \}
 
+  /**
+   * Return a pointer to the internal queue
+   *
+   * \return a pointer to the internal queue
+   */
   std::vector<SendBuffEntry> & GetBuffer ()
   {
     return m_sendBuffer;
@@ -162,7 +223,15 @@
   void Drop (SendBuffEntry en, std::string reason);             ///< Notify that packet is dropped from queue by timeout
   uint32_t m_maxLen;                                            ///< The maximum number of packets that we allow a routing protocol to buffer.
   Time m_sendBufferTimeout;                                     ///< The maximum period of time that a routing protocol is allowed to buffer a packet for, seconds.
-  static bool IsEqual (SendBuffEntry en, const Ipv4Address dst) ///< Check if the send buffer entry is the same or not
+  /**
+   * Check if the send buffer entry is the same or not
+   *
+   * \param en SendBufferEntry
+   * \param dst IPv4 address to check
+   * \return true if the SendBufferEntry destination is the same,
+   *         false otherwise
+   */
+  static bool IsEqual (SendBuffEntry en, const Ipv4Address dst)
   {
     return (en.GetDestination () == dst);
   }
diff -Naur ns-3.18.1/src/emu/bindings/modulegen__gcc_ILP32.py ns-3.19/src/emu/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/emu/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/emu/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -169,7 +169,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1383,10 +1383,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -3117,6 +3118,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -3127,6 +3133,11 @@
                    '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', 
@@ -3142,6 +3153,11 @@
                    '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', 
@@ -3167,6 +3183,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/emu/bindings/modulegen__gcc_LP64.py ns-3.19/src/emu/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/emu/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/emu/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -169,7 +169,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1383,10 +1383,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -3117,6 +3118,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -3127,6 +3133,11 @@
                    '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', 
@@ -3142,6 +3153,11 @@
                    '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', 
@@ -3167,6 +3183,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/emu/doc/emu.rst ns-3.19/src/emu/doc/emu.rst
--- ns-3.18.1/src/emu/doc/emu.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/emu/doc/emu.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,11 +1,11 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 Emu NetDevice
 -------------
 
 **Note:** The ``EmuNetDevice`` is being deprecated as of ns-3.17.  The
-``EmuFdNetDeviceHelper`` class replaces this functionality and API
-entirely.
+:doc:`fd-net-device` and ``EmuFdNetDeviceHelper`` class replaces this functionality and API entirely.
 
 Behavior
 ********
@@ -59,7 +59,7 @@
 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:::
+the attribute ``ChecksumEnabled`` to true, such as follows::
 
     GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
 
@@ -141,7 +141,7 @@
 
 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:::
+to these other net devices::
 
   EmuHelper::EnablePcapAll ("emu-udp-echo-client");
 
@@ -176,7 +176,7 @@
 
 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``:::
+``m_deviceName``::
 
   struct ifreq ifr;
   bzero (&ifr, sizeof(ifr));
diff -Naur ns-3.18.1/src/emu/model/emu-net-device.cc ns-3.19/src/emu/model/emu-net-device.cc
--- ns-3.18.1/src/emu/model/emu-net-device.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/emu/model/emu-net-device.cc	2013-12-20 09:44:50.000000000 -0800
@@ -55,7 +55,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (EmuNetDevice);
+NS_OBJECT_ENSURE_REGISTERED (EmuNetDevice)
+  ;
 
 #define EMU_MAGIC 65867
 
diff -Naur ns-3.18.1/src/emu/model/emu-net-device.h ns-3.19/src/emu/model/emu-net-device.h
--- ns-3.18.1/src/emu/model/emu-net-device.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/emu/model/emu-net-device.h	2013-12-20 09:44:50.000000000 -0800
@@ -40,7 +40,7 @@
 class Queue;
 
 /**
- * \defgroup emu EmuNetDevice
+ * \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.
  */
 
diff -Naur ns-3.18.1/src/energy/bindings/modulegen__gcc_ILP32.py ns-3.19/src/energy/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/energy/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/energy/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -167,7 +167,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1401,10 +1401,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -2480,8 +2481,8 @@
     cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
     cls.add_constructor([])
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode m, uint8_t l, uint8_t r, bool sg, uint8_t ns, uint8_t ne, bool Stbc) [constructor]
-    cls.add_constructor([param('ns3::WifiMode', 'm'), param('uint8_t', 'l'), param('uint8_t', 'r'), param('bool', 'sg'), param('uint8_t', 'ns'), param('uint8_t', 'ne'), param('bool', 'Stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode mode, uint8_t powerLevel, uint8_t retries, bool shortGuardInterval, uint8_t nss, uint8_t ness, bool stbc) [constructor]
+    cls.add_constructor([param('ns3::WifiMode', 'mode'), param('uint8_t', 'powerLevel'), param('uint8_t', 'retries'), param('bool', 'shortGuardInterval'), param('uint8_t', 'nss'), param('uint8_t', 'ness'), param('bool', 'stbc')])
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
@@ -2537,10 +2538,10 @@
     cls.add_method('SetShortGuardInterval', 
                    'void', 
                    [param('bool', 'guardinterval')])
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbcsatuts) [member function]
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbc) [member function]
     cls.add_method('SetStbc', 
                    'void', 
-                   [param('bool', 'stbcsatuts')])
+                   [param('bool', 'stbc')])
     ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetTxPowerLevel(uint8_t powerlevel) [member function]
     cls.add_method('SetTxPowerLevel', 
                    'void', 
@@ -2966,6 +2967,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -2976,6 +2982,11 @@
                    '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', 
@@ -2991,6 +3002,11 @@
                    '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', 
@@ -3016,6 +3032,11 @@
                    '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', 
@@ -3789,15 +3810,15 @@
                    'void', 
                    [param('bool', 'greenfield')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool GuardInterval) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool guardInterval) [member function]
     cls.add_method('SetGuardInterval', 
                    'void', 
-                   [param('bool', 'GuardInterval')], 
+                   [param('bool', 'guardInterval')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool Ldpc) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool ldpc) [member function]
     cls.add_method('SetLdpc', 
                    'void', 
-                   [param('bool', 'Ldpc')], 
+                   [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', 
diff -Naur ns-3.18.1/src/energy/bindings/modulegen__gcc_LP64.py ns-3.19/src/energy/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/energy/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/energy/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -167,7 +167,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1401,10 +1401,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -2480,8 +2481,8 @@
     cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
     cls.add_constructor([])
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode m, uint8_t l, uint8_t r, bool sg, uint8_t ns, uint8_t ne, bool Stbc) [constructor]
-    cls.add_constructor([param('ns3::WifiMode', 'm'), param('uint8_t', 'l'), param('uint8_t', 'r'), param('bool', 'sg'), param('uint8_t', 'ns'), param('uint8_t', 'ne'), param('bool', 'Stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode mode, uint8_t powerLevel, uint8_t retries, bool shortGuardInterval, uint8_t nss, uint8_t ness, bool stbc) [constructor]
+    cls.add_constructor([param('ns3::WifiMode', 'mode'), param('uint8_t', 'powerLevel'), param('uint8_t', 'retries'), param('bool', 'shortGuardInterval'), param('uint8_t', 'nss'), param('uint8_t', 'ness'), param('bool', 'stbc')])
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
@@ -2537,10 +2538,10 @@
     cls.add_method('SetShortGuardInterval', 
                    'void', 
                    [param('bool', 'guardinterval')])
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbcsatuts) [member function]
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbc) [member function]
     cls.add_method('SetStbc', 
                    'void', 
-                   [param('bool', 'stbcsatuts')])
+                   [param('bool', 'stbc')])
     ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetTxPowerLevel(uint8_t powerlevel) [member function]
     cls.add_method('SetTxPowerLevel', 
                    'void', 
@@ -2966,6 +2967,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -2976,6 +2982,11 @@
                    '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', 
@@ -2991,6 +3002,11 @@
                    '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', 
@@ -3016,6 +3032,11 @@
                    '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', 
@@ -3789,15 +3810,15 @@
                    'void', 
                    [param('bool', 'greenfield')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool GuardInterval) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool guardInterval) [member function]
     cls.add_method('SetGuardInterval', 
                    'void', 
-                   [param('bool', 'GuardInterval')], 
+                   [param('bool', 'guardInterval')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool Ldpc) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool ldpc) [member function]
     cls.add_method('SetLdpc', 
                    'void', 
-                   [param('bool', 'Ldpc')], 
+                   [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', 
diff -Naur ns-3.18.1/src/energy/model/basic-energy-source.cc ns-3.19/src/energy/model/basic-energy-source.cc
--- ns-3.18.1/src/energy/model/basic-energy-source.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/energy/model/basic-energy-source.cc	2013-12-20 09:44:50.000000000 -0800
@@ -29,7 +29,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (BasicEnergySource);
+NS_OBJECT_ENSURE_REGISTERED (BasicEnergySource)
+  ;
 
 TypeId
 BasicEnergySource::GetTypeId (void)
diff -Naur ns-3.18.1/src/energy/model/device-energy-model.cc ns-3.19/src/energy/model/device-energy-model.cc
--- ns-3.18.1/src/energy/model/device-energy-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/energy/model/device-energy-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -25,7 +25,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (DeviceEnergyModel);
+NS_OBJECT_ENSURE_REGISTERED (DeviceEnergyModel)
+  ;
 
 TypeId
 DeviceEnergyModel::GetTypeId (void)
diff -Naur ns-3.18.1/src/energy/model/energy-source.cc ns-3.19/src/energy/model/energy-source.cc
--- ns-3.18.1/src/energy/model/energy-source.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/energy/model/energy-source.cc	2013-12-20 09:44:50.000000000 -0800
@@ -25,7 +25,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (EnergySource);
+NS_OBJECT_ENSURE_REGISTERED (EnergySource)
+  ;
 
 TypeId
 EnergySource::GetTypeId (void)
diff -Naur ns-3.18.1/src/energy/model/li-ion-energy-source.cc ns-3.19/src/energy/model/li-ion-energy-source.cc
--- ns-3.18.1/src/energy/model/li-ion-energy-source.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/energy/model/li-ion-energy-source.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LiIonEnergySource);
+NS_OBJECT_ENSURE_REGISTERED (LiIonEnergySource)
+  ;
 
 TypeId
 LiIonEnergySource::GetTypeId (void)
diff -Naur ns-3.18.1/src/energy/model/rv-battery-model.cc ns-3.19/src/energy/model/rv-battery-model.cc
--- ns-3.18.1/src/energy/model/rv-battery-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/energy/model/rv-battery-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (RvBatteryModel);
+NS_OBJECT_ENSURE_REGISTERED (RvBatteryModel)
+  ;
 
 TypeId
 RvBatteryModel::GetTypeId (void)
diff -Naur ns-3.18.1/src/energy/model/simple-device-energy-model.cc ns-3.19/src/energy/model/simple-device-energy-model.cc
--- ns-3.18.1/src/energy/model/simple-device-energy-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/energy/model/simple-device-energy-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (SimpleDeviceEnergyModel);
+NS_OBJECT_ENSURE_REGISTERED (SimpleDeviceEnergyModel)
+  ;
 
 TypeId
 SimpleDeviceEnergyModel::GetTypeId (void)
diff -Naur ns-3.18.1/src/energy/model/wifi-radio-energy-model.cc ns-3.19/src/energy/model/wifi-radio-energy-model.cc
--- ns-3.18.1/src/energy/model/wifi-radio-energy-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/energy/model/wifi-radio-energy-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -29,7 +29,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (WifiRadioEnergyModel);
+NS_OBJECT_ENSURE_REGISTERED (WifiRadioEnergyModel)
+  ;
 
 TypeId
 WifiRadioEnergyModel::GetTypeId (void)
diff -Naur ns-3.18.1/src/energy/test/li-ion-energy-source-test.cc ns-3.19/src/energy/test/li-ion-energy-source-test.cc
--- ns-3.18.1/src/energy/test/li-ion-energy-source-test.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/energy/test/li-ion-energy-source-test.cc	2013-12-20 09:44:50.000000000 -0800
@@ -27,7 +27,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("LiIonEnergySourceTestSuite");
+NS_LOG_COMPONENT_DEFINE ("LiIonEnergySourceTestSuite")
+  ;
 
 class LiIonEnergyTestCase : public TestCase
 {
diff -Naur ns-3.18.1/src/fd-net-device/bindings/modulegen__gcc_ILP32.py ns-3.19/src/fd-net-device/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/fd-net-device/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/fd-net-device/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -173,7 +173,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1401,10 +1401,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -3179,6 +3180,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -3189,6 +3195,11 @@
                    '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', 
@@ -3204,6 +3215,11 @@
                    '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', 
@@ -3229,6 +3245,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/fd-net-device/bindings/modulegen__gcc_LP64.py ns-3.19/src/fd-net-device/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/fd-net-device/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/fd-net-device/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -173,7 +173,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1401,10 +1401,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -3179,6 +3180,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -3189,6 +3195,11 @@
                    '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', 
@@ -3204,6 +3215,11 @@
                    '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', 
@@ -3229,6 +3245,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/fd-net-device/doc/fd-net-device.rst ns-3.19/src/fd-net-device/doc/fd-net-device.rst
--- ns-3.18.1/src/fd-net-device/doc/fd-net-device.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/fd-net-device/doc/fd-net-device.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,6 +1,7 @@
 File Descriptor NetDevice
 -------------------------
-.. include:: replace.txt 
+.. include:: replace.txt
+.. highlight:: cpp
 
 .. heading hierarchy:
    ------------- Chapter
@@ -144,7 +145,7 @@
 provided helpers.  Support for these modes can be found in the output
 of the ``waf configure`` step, e.g.:
 
-::
+.. sourcecode:: text
 
    Threading Primitives          : enabled
    Real Time Simulator           : enabled
@@ -220,7 +221,7 @@
 The emulation helper permits to transparently integrate a simulated
 |ns3| node into a network composed of real nodes.
 
-::
+.. sourcecode:: text
 
  +----------------------+     +-----------------------+
  |         host 1       |     |         host 2        |
@@ -305,7 +306,7 @@
 provided by the TapBridge NetDevice found in ``src/tap-bridge``.
 The model in this helper is as follows:
 
-::
+.. sourcecode:: text
 
  +-------------------------------------+    
  |                host                 |
@@ -334,7 +335,7 @@
 
 The model in TapBridge (in another module) is as follows:
 
-::
+.. sourcecode:: text
 
     +--------+
     |  Linux |
@@ -404,7 +405,7 @@
 by the FdTapNetDeviceHelper, except that the underlying mechanisms
 to create the TAP device are different.
 
-::
+.. sourcecode:: text
 
  +-------------------------------------+    
  |         PlanetLab  host             |
diff -Naur ns-3.18.1/src/fd-net-device/model/fd-net-device.cc ns-3.19/src/fd-net-device/model/fd-net-device.cc
--- ns-3.18.1/src/fd-net-device/model/fd-net-device.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/fd-net-device/model/fd-net-device.cc	2013-12-20 09:44:50.000000000 -0800
@@ -74,7 +74,8 @@
   return FdReader::Data (buf, len);
 }
 
-NS_OBJECT_ENSURE_REGISTERED (FdNetDevice);
+NS_OBJECT_ENSURE_REGISTERED (FdNetDevice)
+  ;
 
 TypeId
 FdNetDevice::GetTypeId (void)
diff -Naur ns-3.18.1/src/fd-net-device/model/fd-net-device.h ns-3.19/src/fd-net-device/model/fd-net-device.h
--- ns-3.18.1/src/fd-net-device/model/fd-net-device.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/fd-net-device/model/fd-net-device.h	2013-12-20 09:44:50.000000000 -0800
@@ -63,7 +63,7 @@
 class Node;
 
 /**
- * \defgroup fd-net-device FdNetDevice
+ * \defgroup fd-net-device File Descriptor Network Device
  * This section documents the API of the ns-3 fd-net-device module.
  * For a generic functional description, please refer to the ns-3 manual.
  */
diff -Naur ns-3.18.1/src/flow-monitor/bindings/modulegen__gcc_ILP32.py ns-3.19/src/flow-monitor/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/flow-monitor/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/flow-monitor/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -229,7 +229,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1619,10 +1619,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -3983,6 +3984,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -3993,6 +3999,11 @@
                    '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', 
@@ -4008,6 +4019,11 @@
                    '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', 
@@ -4033,6 +4049,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/flow-monitor/bindings/modulegen__gcc_LP64.py ns-3.19/src/flow-monitor/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/flow-monitor/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/flow-monitor/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -229,7 +229,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1619,10 +1619,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -3983,6 +3984,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -3993,6 +3999,11 @@
                    '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', 
@@ -4008,6 +4019,11 @@
                    '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', 
@@ -4033,6 +4049,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/flow-monitor/examples/flowmon-parse-results.py ns-3.19/src/flow-monitor/examples/flowmon-parse-results.py
--- ns-3.18.1/src/flow-monitor/examples/flowmon-parse-results.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/flow-monitor/examples/flowmon-parse-results.py	2013-12-20 09:44:50.000000000 -0800
@@ -8,7 +8,7 @@
 
 def parse_time_ns(tm):
     if tm.endswith('ns'):
-        return long(tm[:-2])
+        return long(tm[:-4])
     raise ValueError(tm)
 
 
@@ -39,8 +39,8 @@
         self.flowId = int(flow_el.get('flowId'))
         rxPackets = long(flow_el.get('rxPackets'))
         txPackets = long(flow_el.get('txPackets'))
-        tx_duration = float(long(flow_el.get('timeLastTxPacket')[:-2]) - long(flow_el.get('timeFirstTxPacket')[:-2]))*1e-9
-        rx_duration = float(long(flow_el.get('timeLastRxPacket')[:-2]) - long(flow_el.get('timeFirstRxPacket')[:-2]))*1e-9
+        tx_duration = float(long(flow_el.get('timeLastTxPacket')[:-4]) - long(flow_el.get('timeFirstTxPacket')[:-4]))*1e-9
+        rx_duration = float(long(flow_el.get('timeLastRxPacket')[:-4]) - long(flow_el.get('timeFirstRxPacket')[:-4]))*1e-9
         self.rx_duration = rx_duration
         self.probe_stats_unsorted = []
         if rxPackets:
@@ -48,7 +48,7 @@
         else:
             self.hopCount = -1000
         if rxPackets:
-            self.delayMean = float(flow_el.get('delaySum')[:-2]) / rxPackets * 1e-9
+            self.delayMean = float(flow_el.get('delaySum')[:-4]) / rxPackets * 1e-9
             self.packetSizeMean = float(flow_el.get('rxBytes')) / rxPackets
         else:
             self.delayMean = None
diff -Naur ns-3.18.1/src/flow-monitor/helper/flow-monitor-helper.h ns-3.19/src/flow-monitor/helper/flow-monitor-helper.h
--- ns-3.18.1/src/flow-monitor/helper/flow-monitor-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/flow-monitor/helper/flow-monitor-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -31,38 +31,58 @@
 class AttributeValue;
 class Ipv4FlowClassifier;
 
-/// \brief Helper to enable IPv4 flow monitoring on a set of Nodes
+/**
+ * \ingroup flow-monitor
+ * \brief Helper to enable IPv4 flow monitoring on a set of Nodes
+ */
 class FlowMonitorHelper
 {
 public:
-  /// \brief Construct a FlowMonitorHelper class which makes it easier to 
-  /// configure and use the FlowMonitor
+
   FlowMonitorHelper ();
-  /// \brief Dispose of objects allocated by the helper
   ~FlowMonitorHelper ();
 
-  /// \brief Set an attribute for the to-be-created FlowMonitor object
+  /**
+   * \brief Set an attribute for the to-be-created FlowMonitor object
+   * \param n1 attribute name
+   * \param v1 attibute value
+   */
   void SetMonitorAttribute (std::string n1, const AttributeValue &v1);
 
-  /// \brief Enable flow monitoring on a set of nodes
-  /// \param nodes A NodeContainer holding the set of nodes to work with.
+  /**
+   * \brief Enable flow monitoring on a set of nodes
+   * \param nodes A NodeContainer holding the set of nodes to work with.
+   * \returns a pointer to the FlowMonitor object
+   */
   Ptr<FlowMonitor> Install (NodeContainer nodes);
-  /// \brief Enable flow monitoring on a single node
-  /// \param node A Ptr<Node> to the node on which to enable flow monitoring.
+  /**
+   * \brief Enable flow monitoring on a single node
+   * \param node A Ptr<Node> to the node on which to enable flow monitoring.
+   * \returns a pointer to the FlowMonitor object
+   */
   Ptr<FlowMonitor> Install (Ptr<Node> node);
-  /// \brief Enable flow monitoring on all nodes
+  /**
+   * \brief Enable flow monitoring on all nodes
+   * \returns a pointer to the FlowMonitor object
+   */
   Ptr<FlowMonitor> InstallAll ();
 
-  /// \brief Retrieve the FlowMonitor object created by the Install* methods
+  /**
+   * \brief Retrieve the FlowMonitor object created by the Install* methods
+   * \returns a pointer to the FlowMonitor object
+   */
   Ptr<FlowMonitor> GetMonitor ();
 
-  /// \brief Retrieve the FlowClassifier object created by the Install* methods
+  /**
+   * \brief Retrieve the FlowClassifier object created by the Install* methods
+   * \returns a pointer to the FlowClassifier object
+   */
   Ptr<FlowClassifier> GetClassifier ();
 
 private:
-  ObjectFactory m_monitorFactory;
-  Ptr<FlowMonitor> m_flowMonitor;
-  Ptr<FlowClassifier> m_flowClassifier;
+  ObjectFactory m_monitorFactory;       //!< Object factory
+  Ptr<FlowMonitor> m_flowMonitor;       //!< the FlowMonitor object
+  Ptr<FlowClassifier> m_flowClassifier; //!< the FlowClassifier object
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/flow-monitor/model/flow-classifier.h ns-3.19/src/flow-monitor/model/flow-classifier.h
--- ns-3.18.1/src/flow-monitor/model/flow-classifier.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/flow-monitor/model/flow-classifier.h	2013-12-20 09:44:50.000000000 -0800
@@ -26,10 +26,21 @@
 
 namespace ns3 {
 
+/**
+ * \ingroup flow-monitor
+ * \brief Abstract identifier of a packet flow
+ */
 typedef uint32_t FlowId;
+
+/**
+ * \ingroup flow-monitor
+ * \brief Abstract identifier of a packet within a flow
+ */
 typedef uint32_t FlowPacketId;
 
-/// provides a method to translate raw packet data into abstract
+
+/// \ingroup flow-monitor
+/// Provides a method to translate raw packet data into abstract
 /// ``flow identifier'' and ``packet identifier'' parameters.  These
 /// identifiers are unsigned 32-bit integers that uniquely identify a
 /// flow and a packet within that flow, respectively, for the whole
@@ -42,9 +53,12 @@
 class FlowClassifier : public SimpleRefCount<FlowClassifier>
 {
 private:
-  FlowId m_lastNewFlowId;
+  FlowId m_lastNewFlowId; //!< Last known Flow ID
 
+  /// Defined and not implemented to avoid misuse
   FlowClassifier (FlowClassifier const &);
+  /// Defined and not implemented to avoid misuse
+  /// \returns
   FlowClassifier& operator= (FlowClassifier const &);
 
 public:
@@ -52,9 +66,14 @@
   FlowClassifier ();
   virtual ~FlowClassifier ();
 
+  /// Serializes the results to an std::ostream in XML format
+  /// \param os the output stream
+  /// \param indent number of spaces to use as base indentation level
   virtual void SerializeToXmlStream (std::ostream &os, int indent) const = 0;
 
 protected:
+  /// Returns a new, unique Flow Identifier
+  /// \returns a new FlowId
   FlowId GetNewFlowId ();
 
 };
diff -Naur ns-3.18.1/src/flow-monitor/model/flow-monitor.cc ns-3.19/src/flow-monitor/model/flow-monitor.cc
--- ns-3.18.1/src/flow-monitor/model/flow-monitor.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/flow-monitor/model/flow-monitor.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,9 +31,11 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("FlowMonitor");
+NS_LOG_COMPONENT_DEFINE ("FlowMonitor")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (FlowMonitor);
+NS_OBJECT_ENSURE_REGISTERED (FlowMonitor)
+  ;
 
 
 TypeId 
diff -Naur ns-3.18.1/src/flow-monitor/model/flow-monitor.h ns-3.19/src/flow-monitor/model/flow-monitor.h
--- ns-3.18.1/src/flow-monitor/model/flow-monitor.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/flow-monitor/model/flow-monitor.h	2013-12-20 09:44:50.000000000 -0800
@@ -34,10 +34,19 @@
 
 namespace ns3 {
 
-/// \brief An object that monitors and reports back packet flows observed during a simulation
-///
-/// The FlowMonitor class is responsible forcoordinating efforts
-/// regarding probes, and collects end-to-end flowstatistics.
+/**
+ * \defgroup flow-monitor Flow Monitor
+ * \brief  Collect and store performance data from a simulation
+ */
+
+/**
+ * \ingroup flow-monitor
+ * \brief An object that monitors and reports back packet flows observed during a simulation
+ *
+ * The FlowMonitor class is responsible for coordinating efforts
+ * regarding probes, and collects end-to-end flow statistics.
+ *
+ */
 class FlowMonitor : public Object
 {
 public:
@@ -77,6 +86,8 @@
     /// as defined in IETF \RFC{3393}.
     Time     jitterSum; // jitterCount == rxPackets - 1
 
+    /// Contains the last measured delay of a packet
+    /// It is stored to measure the packet's Jitter
     Time     lastDelay;
 
     /// Total number of transmitted bytes for the flow
@@ -123,20 +134,27 @@
     /// This attribute also tracks the number of lost bytes.  See also
     /// comment in attribute packetsDropped.
     std::vector<uint64_t> bytesDropped; // bytesDropped[reasonCode] => number of dropped bytes
-    Histogram flowInterruptionsHistogram; // histogram of durations of flow interruptions
+    Histogram flowInterruptionsHistogram; //!< histogram of durations of flow interruptions
   };
 
   // --- basic methods ---
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId ();
   TypeId GetInstanceTypeId () const;
   FlowMonitor ();
 
   /// Set the FlowClassifier to be used by the flow monitor.
+  /// \param classifier the FlowClassifier
   void SetFlowClassifier (Ptr<FlowClassifier> classifier);
 
-  /// Set the time, counting from the current time, from which to start monitoring flows
+  /// Set the time, counting from the current time, from which to start monitoring flows.
+  /// \param time delta time to start
   void Start (const Time &time);
-  /// Set the time, counting from the current time, from which to stop monitoring flows
+  /// Set the time, counting from the current time, from which to stop monitoring flows.
+  /// \param time delta time to stop
   void Stop (const Time &time);
   /// Begin monitoring flows *right now*
   void StartRightNow ();
@@ -147,21 +165,39 @@
   /// Register a new FlowProbe that will begin monitoring and report
   /// events to this monitor.  This method is normally only used by
   /// FlowProbe implementations.
+  /// \param probe the probe to add
   void AddProbe (Ptr<FlowProbe> probe);
 
   /// FlowProbe implementations are supposed to call this method to
   /// report that a new packet was transmitted (but keep in mind the
   /// distinction between a new packet entering the system and a
   /// packet that is already known and is only being forwarded).
+  /// \param probe the reporting probe
+  /// \param flowId flow identification
+  /// \param packetId Packet ID
+  /// \param packetSize packet size
   void ReportFirstTx (Ptr<FlowProbe> probe, FlowId flowId, FlowPacketId packetId, uint32_t packetSize);
   /// FlowProbe implementations are supposed to call this method to
   /// report that a known packet is being forwarded.
+  /// \param probe the reporting probe
+  /// \param flowId flow identification
+  /// \param packetId Packet ID
+  /// \param packetSize packet size
   void ReportForwarding (Ptr<FlowProbe> probe, FlowId flowId, FlowPacketId packetId, uint32_t packetSize);
   /// FlowProbe implementations are supposed to call this method to
   /// report that a known packet is being received.
+  /// \param probe the reporting probe
+  /// \param flowId flow identification
+  /// \param packetId Packet ID
+  /// \param packetSize packet size
   void ReportLastRx (Ptr<FlowProbe> probe, FlowId flowId, FlowPacketId packetId, uint32_t packetSize);
   /// FlowProbe implementations are supposed to call this method to
   /// report that a known packet is being dropped due to some reason.
+  /// \param probe the reporting probe
+  /// \param flowId flow identification
+  /// \param packetId Packet ID
+  /// \param packetSize packet size
+  /// \param reasonCode drop reason code
   void ReportDrop (Ptr<FlowProbe> probe, FlowId flowId, FlowPacketId packetId,
                    uint32_t packetSize, uint32_t reasonCode);
 
@@ -171,6 +207,7 @@
   /// Check right now for packets that appear to be lost, considering
   /// packets as lost if not seen in the network for a time larger
   /// than maxDelay
+  /// \param maxDelay the max delay for a packet
   void CheckForLostPackets (Time maxDelay);
 
   // --- methods to get the results ---
@@ -178,9 +215,11 @@
   /// 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;
 
   /// Get a list of all FlowProbe's associated with this FlowMonitor
+  /// \returns a list of all the probes
   std::vector< Ptr<FlowProbe> > GetAllProbes () const;
 
   /// Serializes the results to an std::ostream in XML format
@@ -209,35 +248,41 @@
 
 private:
 
+  /// Structure to represent a single tracked packet data
   struct TrackedPacket
   {
-    Time firstSeenTime; // absolute time when the packet was first seen by a probe
-    Time lastSeenTime; // absolute time when the packet was last seen by a probe
-    uint32_t timesForwarded; // number of times the packet was reportedly forwarded
+    Time firstSeenTime; //!< absolute time when the packet was first seen by a probe
+    Time lastSeenTime; //!< absolute time when the packet was last seen by a probe
+    uint32_t timesForwarded; //!< number of times the packet was reportedly forwarded
   };
 
-  // FlowId --> FlowStats
+  /// FlowId --> FlowStats
   std::map<FlowId, FlowStats> m_flowStats;
 
-  // (FlowId,PacketId) --> TrackedPacket
+  /// (FlowId,PacketId) --> TrackedPacket
   typedef std::map< std::pair<FlowId, FlowPacketId>, TrackedPacket> TrackedPacketMap;
-  TrackedPacketMap m_trackedPackets;
-  Time m_maxPerHopDelay;
-  std::vector< Ptr<FlowProbe> > m_flowProbes;
+  TrackedPacketMap m_trackedPackets; //!< Tracked packets
+  Time m_maxPerHopDelay; //!< Minimum per-hop delay
+  std::vector< Ptr<FlowProbe> > m_flowProbes; //!< all the FlowProbes
 
   // note: this is needed only for serialization
-  Ptr<FlowClassifier> m_classifier;
-
-  EventId m_startEvent;
-  EventId m_stopEvent;
-  bool m_enabled;
-  double m_delayBinWidth;
-  double m_jitterBinWidth;
-  double m_packetSizeBinWidth;
-  double m_flowInterruptionsBinWidth;
-  Time m_flowInterruptionsMinTime;
+  Ptr<FlowClassifier> m_classifier; //!< the FlowClassifier
 
+  EventId m_startEvent;     //!< Start event
+  EventId m_stopEvent;      //!< Stop event
+  bool m_enabled;           //!< FlowMon is enabled
+  double m_delayBinWidth;   //!< Delay bin width (for histograms)
+  double m_jitterBinWidth;  //!< Jitter bin width (for histograms)
+  double m_packetSizeBinWidth;  //!< packet size bin width (for histograms)
+  double m_flowInterruptionsBinWidth; //!< Flow interruptions bin width (for histograms)
+  Time m_flowInterruptionsMinTime; //!< Flow interruptions minimum time
+
+  /// Get the stats for a given flow
+  /// \param flowId the Flow identification
+  /// \returns the stats of the flow
   FlowStats& GetStatsForFlow (FlowId flowId);
+
+  /// Periodic function to check for lost packets and prune statistics
   void PeriodicCheckForLostPackets ();
 };
 
diff -Naur ns-3.18.1/src/flow-monitor/model/flow-probe.h ns-3.19/src/flow-monitor/model/flow-probe.h
--- ns-3.18.1/src/flow-monitor/model/flow-probe.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/flow-monitor/model/flow-probe.h	2013-12-20 09:44:50.000000000 -0800
@@ -39,17 +39,22 @@
 class FlowProbe : public Object
 {
 private:
+  /// Defined and not implemented to avoid misuse
   FlowProbe (FlowProbe const &);
+  /// Defined and not implemented to avoid misuse
+  /// \returns
   FlowProbe& operator= (FlowProbe const &);
 
 protected:
-
+  /// Constructor
+  /// \param flowMonitor the FlowMonitor this probe is associated with
   FlowProbe (Ptr<FlowMonitor> flowMonitor);
   virtual void DoDispose (void);
 
 public:
   virtual ~FlowProbe ();
 
+  /// Structure to hold the statistics of a flow
   struct FlowStats
   {
     FlowStats () : delayFromFirstProbeSum (Seconds (0)), bytes (0), packets (0) {}
@@ -67,21 +72,35 @@
     uint32_t packets;
   };
 
+  /// Container to map FlowId -> FlowStats
   typedef std::map<FlowId, FlowStats> Stats;
 
+  /// Add a packet data to the flow stats
+  /// \param flowId the flow Identifier
+  /// \param packetSize the packet size
+  /// \param delayFromFirstProbe packet delay
   void AddPacketStats (FlowId flowId, uint32_t packetSize, Time delayFromFirstProbe);
+  /// Add a packet drop data to the flow stats
+  /// \param flowId the flow Identifier
+  /// \param packetSize the packet size
+  /// \param reasonCode reason code for the drop
   void AddPacketDropStats (FlowId flowId, uint32_t packetSize, uint32_t reasonCode);
 
   /// Get the partial flow statistics stored in this probe.  With this
   /// information you can, for example, find out what is the delay
   /// from the first probe to this one.
+  /// \returns the partial flow statistics
   Stats GetStats () const;
 
+  /// Serializes the results to an std::ostream in XML format
+  /// \param os the output stream
+  /// \param indent number of spaces to use as base indentation level
+  /// \param index FlowProbe index
   void SerializeToXmlStream (std::ostream &os, int indent, uint32_t index) const;
 
 protected:
-  Ptr<FlowMonitor> m_flowMonitor;
-  Stats m_stats;
+  Ptr<FlowMonitor> m_flowMonitor; //!< the FlowMonitor instance
+  Stats m_stats; //!< The flow stats
 
 };
 
diff -Naur ns-3.18.1/src/flow-monitor/model/histogram.cc ns-3.19/src/flow-monitor/model/histogram.cc
--- ns-3.18.1/src/flow-monitor/model/histogram.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/flow-monitor/model/histogram.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Histogram");
+NS_LOG_COMPONENT_DEFINE ("Histogram")
+  ;
  
 // uint32_t 
 // Histogram::GetSize () const
diff -Naur ns-3.18.1/src/flow-monitor/model/histogram.h ns-3.19/src/flow-monitor/model/histogram.h
--- ns-3.18.1/src/flow-monitor/model/histogram.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/flow-monitor/model/histogram.h	2013-12-20 09:44:50.000000000 -0800
@@ -27,34 +27,94 @@
 
 namespace ns3 {
 
+/**
+ * \brief Class used to store data and make an histogram of the data frequency.
+ *
+ * Data are grouped in "bins", i.e., intervals. Each value is assigned to the
+ * bin according to the following formula: floor(value/binWidth).
+ * Hence, bin \a i groups the data from [i*binWidth, (i+1)binWidth).
+ *
+ * This class only handles \a positive bins, i.e., it does \a not handles negative data.
+ *
+ * \todo Add support for negative data.
+ *
+ * \todo Add method(s) to estimate \f$N\f$, \f$\mu\f$, and \f$s^2\f$ from the histogram,
+ * see http://www.dspguide.com/ch2/4.htm
+ *
+ */
 class Histogram
 {
 public:
 
   // --- basic methods ---
+  /**
+   * \brief Constructor
+   * \param binWidth width of the histogram "bin".
+   */
   Histogram (double binWidth);
   Histogram ();
 
   // Methods for Getting the Histogram Results
+  /**
+   * \brief Returns the number of bins in the histogram.
+   * \return the number of bins in the histogram
+   */
   uint32_t GetNBins () const;
+  /**
+   * \brief Returns the bin start, i.e., index*binWidth
+   * \param index the bin index
+   * \return the bin start
+   */
   double GetBinStart (uint32_t index);
+  /**
+   * \brief Returns the bin end, i.e., (index+1)*binWidth
+   * \param index the bin index
+   * \return the bin start
+   */
   double GetBinEnd (uint32_t index);
+  /**
+   * \brief Returns the bin width.
+   *
+   * Note that all the bins have the same width.
+   *
+   * \param index the bin index
+   * \return the bin width
+   */
   double GetBinWidth (uint32_t index) const;
+  /**
+   * \brief Set the bin width.
+   *
+   * Note that you can change the bin width only if the histogram is empty.
+   *
+   * \param binWidth the bin width
+   */
   void SetDefaultBinWidth (double binWidth);
+  /**
+   * \brief Get the number of data added to the bin.
+   * \param index the bin index
+   * \return the number of data added to the bin
+   */
   uint32_t GetBinCount (uint32_t index);
 
   // Method for adding values
+  /**
+   * \brief Add a value to the histogram
+   * \param value the value to add
+   */
   void AddValue (double value);
 
-
+  /**
+   * \brief Serializes the results to an std::ostream in XML format.
+   * \param os the output stream
+   * \param indent number of spaces to use as base indentation level
+   * \param elementName name of the element to serialize.
+   */
   void SerializeToXmlStream (std::ostream &os, int indent, std::string elementName) const;
 
-  /// \todo add method(s) to estimate N, Âµ, and sÂ² from the histogram,
-  /// see http://www.dspguide.com/ch2/4.htm
 
 private:
-  std::vector<uint32_t> m_histogram;
-  double m_binWidth;
+  std::vector<uint32_t> m_histogram; //!< Histogram data
+  double m_binWidth; //!< Bin width
 };
 
 
diff -Naur ns-3.18.1/src/flow-monitor/model/ipv4-flow-classifier.cc ns-3.19/src/flow-monitor/model/ipv4-flow-classifier.cc
--- ns-3.18.1/src/flow-monitor/model/ipv4-flow-classifier.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/flow-monitor/model/ipv4-flow-classifier.cc	2013-12-20 09:44:50.000000000 -0800
@@ -27,8 +27,8 @@
 namespace ns3 {
 
 /* see http://www.iana.org/assignments/protocol-numbers */
-const uint8_t TCP_PROT_NUMBER = 6;
-const uint8_t UDP_PROT_NUMBER = 17;
+const uint8_t TCP_PROT_NUMBER = 6;  //!< TCP Protocol number
+const uint8_t UDP_PROT_NUMBER = 17; //!< UDP Protocol number
 
 
 
@@ -109,35 +109,49 @@
       return false;
     }
 
+  if (ipHeader.GetFragmentOffset () > 0 )
+    {
+      // Ignore fragments: they don't carry a valid L4 header
+      return false;
+    }
+
   FiveTuple tuple;
   tuple.sourceAddress = ipHeader.GetSource ();
   tuple.destinationAddress = ipHeader.GetDestination ();
   tuple.protocol = ipHeader.GetProtocol ();
 
-  switch (tuple.protocol)
+  if ((tuple.protocol != UDP_PROT_NUMBER) && (tuple.protocol != TCP_PROT_NUMBER))
     {
-    case UDP_PROT_NUMBER:
-      {
-        UdpHeader udpHeader;
-        ipPayload->PeekHeader (udpHeader);
-        tuple.sourcePort = udpHeader.GetSourcePort ();
-        tuple.destinationPort = udpHeader.GetDestinationPort ();
-      }
-      break;
-
-    case TCP_PROT_NUMBER:
-      {
-        TcpHeader tcpHeader;
-        ipPayload->PeekHeader (tcpHeader);
-        tuple.sourcePort = tcpHeader.GetSourcePort ();
-        tuple.destinationPort = tcpHeader.GetDestinationPort ();
-      }
-      break;
+      return false;
+    }
 
-    default:
+  if (ipPayload->GetSize () < 4)
+    {
+      // the packet doesn't carry enough bytes
       return false;
     }
 
+  // we rely on the fact that for both TCP and UDP the ports are
+  // carried in the first 4 octects.
+  // This allows to read the ports even on fragmented packets
+  // not carrying a full TCP or UDP header.
+
+  uint8_t data[4];
+  ipPayload->CopyData (data, 4);
+
+  uint16_t srcPort = 0;
+  srcPort |= data[0];
+  srcPort <<= 8;
+  srcPort |= data[1];
+
+  uint16_t dstPort = 0;
+  dstPort |= data[2];
+  dstPort <<= 8;
+  dstPort |= data[3];
+
+  tuple.sourcePort = srcPort;
+  tuple.destinationPort = dstPort;
+
   // try to insert the tuple, but check if it already exists
   std::pair<std::map<FiveTuple, FlowId>::iterator, bool> insert
     = m_flowMap.insert (std::pair<FiveTuple, FlowId> (tuple, 0));
diff -Naur ns-3.18.1/src/flow-monitor/model/ipv4-flow-classifier.h ns-3.19/src/flow-monitor/model/ipv4-flow-classifier.h
--- ns-3.18.1/src/flow-monitor/model/ipv4-flow-classifier.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/flow-monitor/model/ipv4-flow-classifier.h	2013-12-20 09:44:50.000000000 -0800
@@ -39,13 +39,14 @@
 {
 public:
 
+  /// Structure to classify a packet
   struct FiveTuple
   {
-    Ipv4Address sourceAddress;
-    Ipv4Address destinationAddress;
-    uint8_t protocol;
-    uint16_t sourcePort;
-    uint16_t destinationPort;
+    Ipv4Address sourceAddress;      //!< Source address
+    Ipv4Address destinationAddress; //!< Destination address
+    uint8_t protocol;               //!< Protocol
+    uint16_t sourcePort;            //!< Source port
+    uint16_t destinationPort;       //!< Destination port
   };
 
   Ipv4FlowClassifier ();
@@ -53,22 +54,43 @@
   /// \brief try to classify the packet into flow-id and packet-id
   /// \return true if the packet was classified, false if not (i.e. it
   /// does not appear to be part of a flow).
+  /// \param ipHeader packet's IP header
+  /// \param ipPayload packet's IP payload
+  /// \param out_flowId packet's FlowId
+  /// \param out_packetId packet's identifier
   bool Classify (const Ipv4Header &ipHeader, Ptr<const Packet> ipPayload,
                  uint32_t *out_flowId, uint32_t *out_packetId);
 
   /// Searches for the FiveTuple corresponding to the given flowId
+  /// \param flowId the FlowId to search for
+  /// \returns the FiveTuple corresponding to flowId
   FiveTuple FindFlow (FlowId flowId) const;
 
   virtual void SerializeToXmlStream (std::ostream &os, int indent) const;
 
 private:
 
+  /// Map to Flows Identifiers to FlowIds
   std::map<FiveTuple, FlowId> m_flowMap;
 
 };
 
-
+/**
+ * \brief Less than operator.
+ *
+ * \param t1 the first operand
+ * \param t2 the first operand
+ * \returns true if the operands are equal
+ */
 bool operator < (const Ipv4FlowClassifier::FiveTuple &t1, const Ipv4FlowClassifier::FiveTuple &t2);
+
+/**
+ * \brief Equal to operator.
+ *
+ * \param t1 the first operand
+ * \param t2 the first operand
+ * \returns true if the operands are equal
+ */
 bool operator == (const Ipv4FlowClassifier::FiveTuple &t1, const Ipv4FlowClassifier::FiveTuple &t2);
 
 
diff -Naur ns-3.18.1/src/flow-monitor/model/ipv4-flow-probe.cc ns-3.19/src/flow-monitor/model/ipv4-flow-probe.cc
--- ns-3.18.1/src/flow-monitor/model/ipv4-flow-probe.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/flow-monitor/model/ipv4-flow-probe.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,15 +30,29 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4FlowProbe");
+NS_LOG_COMPONENT_DEFINE ("Ipv4FlowProbe")
+  ;
 
 //////////////////////////////////////
 // Ipv4FlowProbeTag class implementation //
 //////////////////////////////////////
 
+/**
+ * \ingroup flow-monitor
+ *
+ * \brief Tag used to allow a fast identification of the packet
+ *
+ * This tag is added by FlowMonitor when a packet is seen for
+ * the first time, and it is then used to classify the packet in
+ * the following hops.
+ */
 class Ipv4FlowProbeTag : public Tag
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
   virtual uint32_t GetSerializedSize (void) const;
@@ -46,17 +60,47 @@
   virtual void Deserialize (TagBuffer buf);
   virtual void Print (std::ostream &os) const;
   Ipv4FlowProbeTag ();
+  /**
+   * \brief Consructor
+   * \param flowId the flow identifier
+   * \param packetId the packet identifier
+   * \param packetSize the packet size
+   */
   Ipv4FlowProbeTag (uint32_t flowId, uint32_t packetId, uint32_t packetSize);
+  /**
+   * \brief Set the flow identifier
+   * \param flowId the flow identifier
+   */
   void SetFlowId (uint32_t flowId);
+  /**
+   * \brief Set the packet identifier
+   * \param packetId the packet identifier
+   */
   void SetPacketId (uint32_t packetId);
+  /**
+   * \brief Set the packet size
+   * \param packetSize the packet size
+   */
   void SetPacketSize (uint32_t packetSize);
+  /**
+   * \brief Set the flow identifier
+   * \returns the flow identifier
+   */
   uint32_t GetFlowId (void) const;
+  /**
+   * \brief Set the packet identifier
+   * \returns the packet identifier
+   */
   uint32_t GetPacketId (void) const;
+  /**
+   * \brief Get the packet size
+   * \returns the packet size
+   */
   uint32_t GetPacketSize (void) const;
 private:
-  uint32_t m_flowId;
-  uint32_t m_packetId;
-  uint32_t m_packetSize;
+  uint32_t m_flowId;      //!< flow identifier
+  uint32_t m_packetId;    //!< packet identifier
+  uint32_t m_packetSize;  //!< packet size
 
 };
 
diff -Naur ns-3.18.1/src/flow-monitor/model/ipv4-flow-probe.h ns-3.19/src/flow-monitor/model/ipv4-flow-probe.h
--- ns-3.18.1/src/flow-monitor/model/ipv4-flow-probe.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/flow-monitor/model/ipv4-flow-probe.h	2013-12-20 09:44:50.000000000 -0800
@@ -30,6 +30,7 @@
 class FlowMonitor;
 class Node;
 
+/// \ingroup flow-monitor
 /// \brief Class that monitors flows at the IPv4 layer of a Node
 ///
 /// For each node in the simulation, one instance of the class
@@ -40,6 +41,10 @@
 {
 
 public:
+  /// \brief Constructor
+  /// \param monitor the FlowMonitor this probe is associated with
+  /// \param classifier the Ipv4FlowClassifier this probe is associated with
+  /// \param node the Node this probe is associated with
   Ipv4FlowProbe (Ptr<FlowMonitor> monitor, Ptr<Ipv4FlowClassifier> classifier, Ptr<Node> node);
   virtual ~Ipv4FlowProbe ();
 
@@ -65,23 +70,42 @@
     DROP_ROUTE_ERROR,   /**< Route error */
     DROP_FRAGMENT_TIMEOUT, /**< Fragment timeout exceeded */
 
-    DROP_INVALID_REASON,
+    DROP_INVALID_REASON, /**< Fallback reason (no known reason) */
   };
 
 protected:
 
-    virtual void DoDispose (void);
+  virtual void DoDispose (void);
 
 private:
-
+  /// Log a packet being sent
+  /// \param ipHeader IP header
+  /// \param ipPayload IP payload
+  /// \param interface outgoing interface
   void SendOutgoingLogger (const Ipv4Header &ipHeader, Ptr<const Packet> ipPayload, uint32_t interface);
+  /// Log a packet being forwarded
+  /// \param ipHeader IP header
+  /// \param ipPayload IP payload
+  /// \param interface incoming interface
   void ForwardLogger (const Ipv4Header &ipHeader, Ptr<const Packet> ipPayload, uint32_t interface);
+  /// Log a packet being received by the destination
+  /// \param ipHeader IP header
+  /// \param ipPayload IP payload
+  /// \param interface incoming interface
   void ForwardUpLogger (const Ipv4Header &ipHeader, Ptr<const Packet> ipPayload, uint32_t interface);
+  /// Log a packet being dropped
+  /// \param ipHeader IP header
+  /// \param ipPayload IP payload
+  /// \param reason drop reason
+  /// \param ipv4 pointer to the IP object dropping the packet
+  /// \param ifIndex interface index
   void DropLogger (const Ipv4Header &ipHeader, Ptr<const Packet> ipPayload,
                    Ipv4L3Protocol::DropReason reason, Ptr<Ipv4> ipv4, uint32_t ifIndex);
+  /// Log a packet being dropped by a queue
+  /// \param ipPayload IP payload
   void QueueDropLogger (Ptr<const Packet> ipPayload);
 
-  Ptr<Ipv4FlowClassifier> m_classifier;
+  Ptr<Ipv4FlowClassifier> m_classifier; //!< the Ipv4FlowClassifier this probe is associated with
 };
 
 
diff -Naur ns-3.18.1/src/internet/bindings/modulegen__gcc_ILP32.py ns-3.19/src/internet/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/internet/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -439,7 +439,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -3000,10 +3000,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -7526,8 +7527,8 @@
 def register_Ns3RttEstimator_methods(root_module, cls):
     ## rtt-estimator.h (module 'internet'): ns3::RttEstimator::RttEstimator() [constructor]
     cls.add_constructor([])
-    ## rtt-estimator.h (module 'internet'): ns3::RttEstimator::RttEstimator(ns3::RttEstimator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RttEstimator const &', 'arg0')])
+    ## 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'): ns3::Time ns3::RttEstimator::AckSeq(ns3::SequenceNumber32 ackSeq) [member function]
     cls.add_method('AckSeq', 
                    'ns3::Time', 
@@ -7606,8 +7607,8 @@
 def register_Ns3RttMeanDeviation_methods(root_module, cls):
     ## rtt-estimator.h (module 'internet'): ns3::RttMeanDeviation::RttMeanDeviation() [constructor]
     cls.add_constructor([])
-    ## rtt-estimator.h (module 'internet'): ns3::RttMeanDeviation::RttMeanDeviation(ns3::RttMeanDeviation const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RttMeanDeviation const &', 'arg0')])
+    ## rtt-estimator.h (module 'internet'): ns3::RttMeanDeviation::RttMeanDeviation(ns3::RttMeanDeviation const & r) [copy constructor]
+    cls.add_constructor([param('ns3::RttMeanDeviation const &', 'r')])
     ## rtt-estimator.h (module 'internet'): ns3::Ptr<ns3::RttEstimator> ns3::RttMeanDeviation::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::RttEstimator >', 
@@ -8776,10 +8777,10 @@
                    'void', 
                    [param('ns3::Time', 'timeout')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## tcp-socket.h (module 'internet'): void ns3::TcpSocket::SetInitialCwnd(uint32_t count) [member function]
+    ## tcp-socket.h (module 'internet'): void ns3::TcpSocket::SetInitialCwnd(uint32_t cwnd) [member function]
     cls.add_method('SetInitialCwnd', 
                    'void', 
-                   [param('uint32_t', 'count')], 
+                   [param('uint32_t', 'cwnd')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     ## tcp-socket.h (module 'internet'): void ns3::TcpSocket::SetPersistTimeout(ns3::Time timeout) [member function]
     cls.add_method('SetPersistTimeout', 
@@ -8933,10 +8934,10 @@
                    'int', 
                    [], 
                    is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::AddOptions(ns3::TcpHeader & arg0) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::AddOptions(ns3::TcpHeader & tcpHeader) [member function]
     cls.add_method('AddOptions', 
                    'void', 
-                   [param('ns3::TcpHeader &', 'arg0')], 
+                   [param('ns3::TcpHeader &', 'tcpHeader')], 
                    visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): uint16_t ns3::TcpSocketBase::AdvertisedWindowSize() [member function]
     cls.add_method('AdvertisedWindowSize', 
@@ -8963,10 +8964,10 @@
                    'void', 
                    [], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::CompleteFork(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1, ns3::Address const & fromAddress, ns3::Address const & toAdress) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::CompleteFork(ns3::Ptr<ns3::Packet> p, ns3::TcpHeader const & tcpHeader, ns3::Address const & fromAddress, ns3::Address const & toAddress) [member function]
     cls.add_method('CompleteFork', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1'), param('ns3::Address const &', 'fromAddress'), param('ns3::Address const &', 'toAdress')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::TcpHeader const &', 'tcpHeader'), param('ns3::Address const &', 'fromAddress'), param('ns3::Address const &', 'toAddress')], 
                    visibility='protected')
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ConnectionSucceeded() [member function]
     cls.add_method('ConnectionSucceeded', 
@@ -9023,15 +9024,15 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::DupAck(ns3::TcpHeader const & tcpHeader, uint32_t count) [member function]
     cls.add_method('DupAck', 
                    'void', 
-                   [param('ns3::TcpHeader const &', 't'), param('uint32_t', 'count')], 
+                   [param('ns3::TcpHeader const &', 'tcpHeader'), param('uint32_t', 'count')], 
                    is_pure_virtual=True, visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::EstimateRtt(ns3::TcpHeader const & arg0) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::EstimateRtt(ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('EstimateRtt', 
                    'void', 
-                   [param('ns3::TcpHeader const &', 'arg0')], 
+                   [param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): ns3::Ptr<ns3::TcpSocketBase> ns3::TcpSocketBase::Fork() [member function]
     cls.add_method('Fork', 
@@ -9053,10 +9054,10 @@
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Header', 'header'), param('uint16_t', 'port'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ForwardUp6(ns3::Ptr<ns3::Packet> packet, ns3::Ipv6Header header, uint16_t port) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ForwardUp6(ns3::Ptr<ns3::Packet> packet, ns3::Ipv6Header header, uint16_t port, ns3::Ptr<ns3::Ipv6Interface> incomingInterface) [member function]
     cls.add_method('ForwardUp6', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Header', 'header'), param('uint16_t', 'port')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Header', 'header'), param('uint16_t', 'port'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
                    visibility='protected')
     ## tcp-socket-base.h (module 'internet'): bool ns3::TcpSocketBase::GetAllowBroadcast() const [member function]
     cls.add_method('GetAllowBroadcast', 
@@ -9133,70 +9134,70 @@
                    'bool', 
                    [param('ns3::SequenceNumber32', 'head'), param('ns3::SequenceNumber32', 'tail')], 
                    is_const=True, visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::PeerClose(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::PeerClose(ns3::Ptr<ns3::Packet> p, ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('PeerClose', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected')
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::PersistTimeout() [member function]
     cls.add_method('PersistTimeout', 
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessClosing(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessClosing(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('ProcessClosing', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessEstablished(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessEstablished(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('ProcessEstablished', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessLastAck(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessLastAck(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('ProcessLastAck', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessListen(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1, ns3::Address const & arg2, ns3::Address const & arg3) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessListen(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader, ns3::Address const & fromAddress, ns3::Address const & toAddress) [member function]
     cls.add_method('ProcessListen', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1'), param('ns3::Address const &', 'arg2'), param('ns3::Address const &', 'arg3')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader'), param('ns3::Address const &', 'fromAddress'), param('ns3::Address const &', 'toAddress')], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessSynRcvd(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1, ns3::Address const & arg2, ns3::Address const & arg3) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessSynRcvd(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader, ns3::Address const & fromAddress, ns3::Address const & toAddress) [member function]
     cls.add_method('ProcessSynRcvd', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1'), param('ns3::Address const &', 'arg2'), param('ns3::Address const &', 'arg3')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader'), param('ns3::Address const &', 'fromAddress'), param('ns3::Address const &', 'toAddress')], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessSynSent(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessSynSent(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('ProcessSynSent', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessWait(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessWait(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('ProcessWait', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected')
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ReTxTimeout() [member function]
     cls.add_method('ReTxTimeout', 
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ReadOptions(ns3::TcpHeader const & arg0) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ReadOptions(ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('ReadOptions', 
                    'void', 
-                   [param('ns3::TcpHeader const &', 'arg0')], 
+                   [param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ReceivedAck(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ReceivedAck(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('ReceivedAck', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ReceivedData(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ReceivedData(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('ReceivedData', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::Retransmit() [member function]
     cls.add_method('Retransmit', 
@@ -9481,10 +9482,10 @@
                    'int', 
                    [], 
                    is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::DupAck(ns3::TcpHeader const & header, uint32_t count) [member function]
+    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
     cls.add_method('DupAck', 
                    'void', 
-                   [param('ns3::TcpHeader const &', 'header'), param('uint32_t', 'count')], 
+                   [param('ns3::TcpHeader const &', 't'), param('uint32_t', 'count')], 
                    visibility='protected', is_virtual=True)
     ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::EstimateRtt(ns3::TcpHeader const & header) [member function]
     cls.add_method('EstimateRtt', 
@@ -9602,6 +9603,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -9612,6 +9618,11 @@
                    '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', 
@@ -9627,6 +9638,11 @@
                    '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', 
@@ -9652,6 +9668,11 @@
                    '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', 
@@ -9865,6 +9886,18 @@
     cls.add_method('EnableChecksums', 
                    'void', 
                    [])
+    ## udp-header.h (module 'internet'): void ns3::UdpHeader::ForceChecksum(uint16_t checksum) [member function]
+    cls.add_method('ForceChecksum', 
+                   'void', 
+                   [param('uint16_t', 'checksum')])
+    ## udp-header.h (module 'internet'): void ns3::UdpHeader::ForcePayloadSize(uint16_t payloadSize) [member function]
+    cls.add_method('ForcePayloadSize', 
+                   'void', 
+                   [param('uint16_t', 'payloadSize')])
+    ## udp-header.h (module 'internet'): uint16_t ns3::UdpHeader::GetChecksum() [member function]
+    cls.add_method('GetChecksum', 
+                   'uint16_t', 
+                   [])
     ## udp-header.h (module 'internet'): uint16_t ns3::UdpHeader::GetDestinationPort() const [member function]
     cls.add_method('GetDestinationPort', 
                    'uint16_t', 
@@ -11575,10 +11608,10 @@
     cls.add_method('Send', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'dest')])
-    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arg0) [member function]
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arpCache) [member function]
     cls.add_method('SetArpCache', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ArpCache >', 'arg0')])
+                   [param('ns3::Ptr< ns3::ArpCache >', 'arpCache')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
     cls.add_method('SetDevice', 
                    'void', 
@@ -13221,10 +13254,10 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
-    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    ## 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', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   [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', 
@@ -14727,10 +14760,10 @@
                    'ns3::IpL4Protocol::RxStatus', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')], 
                    is_virtual=True)
-    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::Ipv6Interface> interface) [member function]
+    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::Ipv6Interface> incomingInterface) [member function]
     cls.add_method('Receive', 
                    'ns3::IpL4Protocol::RxStatus', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::Ipv6Interface >', 'interface')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
                    is_virtual=True)
     ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::ReceiveIcmp(ns3::Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv4Address payloadSource, ns3::Ipv4Address payloadDestination, uint8_t const * payload) [member function]
     cls.add_method('ReceiveIcmp', 
diff -Naur ns-3.18.1/src/internet/bindings/modulegen__gcc_LP64.py ns-3.19/src/internet/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/internet/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -439,7 +439,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -3000,10 +3000,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -7526,8 +7527,8 @@
 def register_Ns3RttEstimator_methods(root_module, cls):
     ## rtt-estimator.h (module 'internet'): ns3::RttEstimator::RttEstimator() [constructor]
     cls.add_constructor([])
-    ## rtt-estimator.h (module 'internet'): ns3::RttEstimator::RttEstimator(ns3::RttEstimator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RttEstimator const &', 'arg0')])
+    ## 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'): ns3::Time ns3::RttEstimator::AckSeq(ns3::SequenceNumber32 ackSeq) [member function]
     cls.add_method('AckSeq', 
                    'ns3::Time', 
@@ -7606,8 +7607,8 @@
 def register_Ns3RttMeanDeviation_methods(root_module, cls):
     ## rtt-estimator.h (module 'internet'): ns3::RttMeanDeviation::RttMeanDeviation() [constructor]
     cls.add_constructor([])
-    ## rtt-estimator.h (module 'internet'): ns3::RttMeanDeviation::RttMeanDeviation(ns3::RttMeanDeviation const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RttMeanDeviation const &', 'arg0')])
+    ## rtt-estimator.h (module 'internet'): ns3::RttMeanDeviation::RttMeanDeviation(ns3::RttMeanDeviation const & r) [copy constructor]
+    cls.add_constructor([param('ns3::RttMeanDeviation const &', 'r')])
     ## rtt-estimator.h (module 'internet'): ns3::Ptr<ns3::RttEstimator> ns3::RttMeanDeviation::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::RttEstimator >', 
@@ -8776,10 +8777,10 @@
                    'void', 
                    [param('ns3::Time', 'timeout')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## tcp-socket.h (module 'internet'): void ns3::TcpSocket::SetInitialCwnd(uint32_t count) [member function]
+    ## tcp-socket.h (module 'internet'): void ns3::TcpSocket::SetInitialCwnd(uint32_t cwnd) [member function]
     cls.add_method('SetInitialCwnd', 
                    'void', 
-                   [param('uint32_t', 'count')], 
+                   [param('uint32_t', 'cwnd')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     ## tcp-socket.h (module 'internet'): void ns3::TcpSocket::SetPersistTimeout(ns3::Time timeout) [member function]
     cls.add_method('SetPersistTimeout', 
@@ -8933,10 +8934,10 @@
                    'int', 
                    [], 
                    is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::AddOptions(ns3::TcpHeader & arg0) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::AddOptions(ns3::TcpHeader & tcpHeader) [member function]
     cls.add_method('AddOptions', 
                    'void', 
-                   [param('ns3::TcpHeader &', 'arg0')], 
+                   [param('ns3::TcpHeader &', 'tcpHeader')], 
                    visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): uint16_t ns3::TcpSocketBase::AdvertisedWindowSize() [member function]
     cls.add_method('AdvertisedWindowSize', 
@@ -8963,10 +8964,10 @@
                    'void', 
                    [], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::CompleteFork(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1, ns3::Address const & fromAddress, ns3::Address const & toAdress) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::CompleteFork(ns3::Ptr<ns3::Packet> p, ns3::TcpHeader const & tcpHeader, ns3::Address const & fromAddress, ns3::Address const & toAddress) [member function]
     cls.add_method('CompleteFork', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1'), param('ns3::Address const &', 'fromAddress'), param('ns3::Address const &', 'toAdress')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::TcpHeader const &', 'tcpHeader'), param('ns3::Address const &', 'fromAddress'), param('ns3::Address const &', 'toAddress')], 
                    visibility='protected')
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ConnectionSucceeded() [member function]
     cls.add_method('ConnectionSucceeded', 
@@ -9023,15 +9024,15 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::DupAck(ns3::TcpHeader const & tcpHeader, uint32_t count) [member function]
     cls.add_method('DupAck', 
                    'void', 
-                   [param('ns3::TcpHeader const &', 't'), param('uint32_t', 'count')], 
+                   [param('ns3::TcpHeader const &', 'tcpHeader'), param('uint32_t', 'count')], 
                    is_pure_virtual=True, visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::EstimateRtt(ns3::TcpHeader const & arg0) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::EstimateRtt(ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('EstimateRtt', 
                    'void', 
-                   [param('ns3::TcpHeader const &', 'arg0')], 
+                   [param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): ns3::Ptr<ns3::TcpSocketBase> ns3::TcpSocketBase::Fork() [member function]
     cls.add_method('Fork', 
@@ -9053,10 +9054,10 @@
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Header', 'header'), param('uint16_t', 'port'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ForwardUp6(ns3::Ptr<ns3::Packet> packet, ns3::Ipv6Header header, uint16_t port) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ForwardUp6(ns3::Ptr<ns3::Packet> packet, ns3::Ipv6Header header, uint16_t port, ns3::Ptr<ns3::Ipv6Interface> incomingInterface) [member function]
     cls.add_method('ForwardUp6', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Header', 'header'), param('uint16_t', 'port')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Header', 'header'), param('uint16_t', 'port'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
                    visibility='protected')
     ## tcp-socket-base.h (module 'internet'): bool ns3::TcpSocketBase::GetAllowBroadcast() const [member function]
     cls.add_method('GetAllowBroadcast', 
@@ -9133,70 +9134,70 @@
                    'bool', 
                    [param('ns3::SequenceNumber32', 'head'), param('ns3::SequenceNumber32', 'tail')], 
                    is_const=True, visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::PeerClose(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::PeerClose(ns3::Ptr<ns3::Packet> p, ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('PeerClose', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected')
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::PersistTimeout() [member function]
     cls.add_method('PersistTimeout', 
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessClosing(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessClosing(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('ProcessClosing', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessEstablished(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessEstablished(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('ProcessEstablished', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessLastAck(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessLastAck(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('ProcessLastAck', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessListen(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1, ns3::Address const & arg2, ns3::Address const & arg3) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessListen(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader, ns3::Address const & fromAddress, ns3::Address const & toAddress) [member function]
     cls.add_method('ProcessListen', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1'), param('ns3::Address const &', 'arg2'), param('ns3::Address const &', 'arg3')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader'), param('ns3::Address const &', 'fromAddress'), param('ns3::Address const &', 'toAddress')], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessSynRcvd(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1, ns3::Address const & arg2, ns3::Address const & arg3) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessSynRcvd(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader, ns3::Address const & fromAddress, ns3::Address const & toAddress) [member function]
     cls.add_method('ProcessSynRcvd', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1'), param('ns3::Address const &', 'arg2'), param('ns3::Address const &', 'arg3')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader'), param('ns3::Address const &', 'fromAddress'), param('ns3::Address const &', 'toAddress')], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessSynSent(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessSynSent(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('ProcessSynSent', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessWait(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessWait(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('ProcessWait', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected')
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ReTxTimeout() [member function]
     cls.add_method('ReTxTimeout', 
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ReadOptions(ns3::TcpHeader const & arg0) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ReadOptions(ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('ReadOptions', 
                    'void', 
-                   [param('ns3::TcpHeader const &', 'arg0')], 
+                   [param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ReceivedAck(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ReceivedAck(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('ReceivedAck', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ReceivedData(ns3::Ptr<ns3::Packet> arg0, ns3::TcpHeader const & arg1) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ReceivedData(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('ReceivedData', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0'), param('ns3::TcpHeader const &', 'arg1')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader')], 
                    visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::Retransmit() [member function]
     cls.add_method('Retransmit', 
@@ -9481,10 +9482,10 @@
                    'int', 
                    [], 
                    is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::DupAck(ns3::TcpHeader const & header, uint32_t count) [member function]
+    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
     cls.add_method('DupAck', 
                    'void', 
-                   [param('ns3::TcpHeader const &', 'header'), param('uint32_t', 'count')], 
+                   [param('ns3::TcpHeader const &', 't'), param('uint32_t', 'count')], 
                    visibility='protected', is_virtual=True)
     ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::EstimateRtt(ns3::TcpHeader const & header) [member function]
     cls.add_method('EstimateRtt', 
@@ -9602,6 +9603,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -9612,6 +9618,11 @@
                    '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', 
@@ -9627,6 +9638,11 @@
                    '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', 
@@ -9652,6 +9668,11 @@
                    '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', 
@@ -9865,6 +9886,18 @@
     cls.add_method('EnableChecksums', 
                    'void', 
                    [])
+    ## udp-header.h (module 'internet'): void ns3::UdpHeader::ForceChecksum(uint16_t checksum) [member function]
+    cls.add_method('ForceChecksum', 
+                   'void', 
+                   [param('uint16_t', 'checksum')])
+    ## udp-header.h (module 'internet'): void ns3::UdpHeader::ForcePayloadSize(uint16_t payloadSize) [member function]
+    cls.add_method('ForcePayloadSize', 
+                   'void', 
+                   [param('uint16_t', 'payloadSize')])
+    ## udp-header.h (module 'internet'): uint16_t ns3::UdpHeader::GetChecksum() [member function]
+    cls.add_method('GetChecksum', 
+                   'uint16_t', 
+                   [])
     ## udp-header.h (module 'internet'): uint16_t ns3::UdpHeader::GetDestinationPort() const [member function]
     cls.add_method('GetDestinationPort', 
                    'uint16_t', 
@@ -11575,10 +11608,10 @@
     cls.add_method('Send', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'dest')])
-    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arg0) [member function]
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arpCache) [member function]
     cls.add_method('SetArpCache', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ArpCache >', 'arg0')])
+                   [param('ns3::Ptr< ns3::ArpCache >', 'arpCache')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
     cls.add_method('SetDevice', 
                    'void', 
@@ -13221,10 +13254,10 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
-    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    ## 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', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   [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', 
@@ -14727,10 +14760,10 @@
                    'ns3::IpL4Protocol::RxStatus', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')], 
                    is_virtual=True)
-    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::Ipv6Interface> interface) [member function]
+    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::Ipv6Interface> incomingInterface) [member function]
     cls.add_method('Receive', 
                    'ns3::IpL4Protocol::RxStatus', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::Ipv6Interface >', 'interface')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
                    is_virtual=True)
     ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::ReceiveIcmp(ns3::Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv4Address payloadSource, ns3::Ipv4Address payloadDestination, uint8_t const * payload) [member function]
     cls.add_method('ReceiveIcmp', 
diff -Naur ns-3.18.1/src/internet/doc/internet-stack.rst ns-3.19/src/internet/doc/internet-stack.rst
--- ns-3.18.1/src/internet/doc/internet-stack.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/doc/internet-stack.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 Internet Stack
 --------------
@@ -16,7 +17,7 @@
 Internet Nodes are not subclasses of class Node; they are simply Nodes that have
 had a bunch of IP-related objects aggregated to them. They can be put together
 by hand, or via a helper function :cpp:func:`InternetStackHelper::Install ()`
-which does the following to all nodes passed in as arguments:::
+which does the following to all nodes passed in as arguments::
 
     void
     InternetStackHelper::Install (Ptr<Node> node) const
@@ -76,7 +77,7 @@
 are added by a factory object (TCP) or by a routing helper (m_routing).
 
 Note that the routing protocol is configured and set outside this
-function. By default, the following protocols are added:::
+function. By default, the following protocols are added::
 
     void InternetStackHelper::Initialize ()
     {
@@ -110,7 +111,7 @@
 typically class :cpp:class:`Ipv4`, but the
 Ipv4L3Protocol public API is also used internally at present.
 
-In class Ipv4L3Protocol, one method described below is ``Receive ()``:::
+In class Ipv4L3Protocol, one method described below is ``Receive ()``::
 
      /**
        * Lower layer calls this method after calling L3Demux::Lookup
@@ -119,22 +120,22 @@
        *    - implement a per-NetDevice ARP cache
        *    - send back arp replies on the right device
        */
-      void Receive( Ptr<NetDevice> device, Ptr<const Packet> p, uint16_t protocol, 
-    const Address &from, const Address &to, NetDevice::PacketType packetType);
+     void Receive( Ptr<NetDevice> device, Ptr<const Packet> p, uint16_t protocol, 
+     const Address &from, const Address &to, NetDevice::PacketType packetType);
 
 First, note that the ``Receive ()`` function has a matching signature to the
 ReceiveCallback in the class :cpp:class:`Node`. This function pointer is
 inserted into the Node's protocol handler when ``AddInterface ()`` is called.
 The actual registration is done
-with a statement such as follows:::
+with a statement such as follows::
 
      RegisterProtocolHandler ( MakeCallback (&Ipv4Protocol::Receive, ipv4),
-        Ipv4L3Protocol::PROT_NUMBER, 0);
+                               Ipv4L3Protocol::PROT_NUMBER, 0);
 
 The Ipv4L3Protocol object is aggregated to the Node; there is only one such
 Ipv4L3Protocol object. Higher-layer protocols that have a packet to send down to
 the Ipv4L3Protocol object can call ``GetObject<Ipv4L3Protocol> ()`` to obtain a
-pointer, as follows:::
+pointer, as follows::
 
   Ptr<Ipv4L3Protocol> ipv4 = m_node->GetObject<Ipv4L3Protocol> ();
   if (ipv4 != 0)
@@ -146,7 +147,7 @@
 objects together:  callbacks, and object aggregation.
 
 Once IPv4 routing has determined that a packet is for the local node, it
-forwards it up the stack.  This is done with the following function:::
+forwards it up the stack.  This is done with the following function::
 
     void
     Ipv4L3Protocol::LocalDeliver (Ptr<const Packet> packet, Ipv4Header const&ip, uint32_t iif)
@@ -168,7 +169,7 @@
 queue. This can be particularly puzzling when sending jumbo packets or packet bursts using UDP.
 The ARP cache pending queue is limited (3 datagrams) and IP packets might be fragmented, easily
 overfilling the ARP cache queue size. In those cases it is useful to increase the ARP cache
-pending size to a proper value, e.g.:::
+pending size to a proper value, e.g.::
 
     Config::SetDefault ("ns3::ArpCache::PendingQueueSize", UintegerValue (MAX_BURST_SIZE/L2MTU*3));
 
@@ -187,7 +188,7 @@
 factory. An application that needs a new socket 
 
 For instance, to create a UDP socket, an application would use a code snippet
-such as the following:::
+such as the following::
 
       Ptr<Udp> udpSocketFactory = GetNode ()->GetObject<Udp> ();
       Ptr<Socket> m_socket = socketFactory->CreateSocket ();
@@ -225,13 +226,14 @@
 |ns3| implements an asynchronous model for socket I/O; the application
 sets a callback to be notified of received data ready to be read, and the 
 callback is invoked by the transport protocol when data is available.
-This callback is specified as follows:::
+This callback is specified as follows::
 
   void Socket::SetRecvCallback (Callback<void, Ptr<Socket>, 
-    Ptr<Packet>, const Address&> receivedData);
+                                Ptr<Packet>,
+                                const Address&> receivedData);
 
 The data being received is conveyed in the Packet data buffer.  An example
-usage is in class :cpp:class:`PacketSink`:::
+usage is in class :cpp:class:`PacketSink`::
 
   m_socket->SetRecvCallback (MakeCallback(&PacketSink::HandleRead, this));
 
diff -Naur ns-3.18.1/src/internet/doc/ipv6.rst ns-3.19/src/internet/doc/ipv6.rst
--- ns-3.18.1/src/internet/doc/ipv6.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/doc/ipv6.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 IPv6
 ----
@@ -21,7 +22,7 @@
 
 The implementation of IPv6 is contained in the following files:
 
-::
+.. sourcecode:: text
 
     src/internet/model/icmpv6-header.{cc,h}
     src/internet/model/icmpv6-l4-protocol.{cc,h}
@@ -56,7 +57,7 @@
 
 Also some helpers are involved with IPv6:
 
-::
+.. sourcecode:: text
 
     src/internet/helper/internet-stack-helper.{cc,h}
     src/internet/helper/ipv6-address-helper.{cc,h}
diff -Naur ns-3.18.1/src/internet/doc/routing-overview.rst ns-3.19/src/internet/doc/routing-overview.rst
--- ns-3.18.1/src/internet/doc/routing-overview.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/doc/routing-overview.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 Routing overview
 ----------------
@@ -110,14 +111,14 @@
 Global Unicast Routing API
 ++++++++++++++++++++++++++
 
-The public API is very minimal. User scripts include the following:::
+The public API is very minimal. User scripts include the following::
 
     #include "ns3/internet-module.h"
 
 If the default InternetStackHelper is used, then an instance of global routing
 will be aggregated to each node.  After IP addresses are configured, the
 following function call will cause all of the nodes that have an Ipv4 interface
-to receive forwarding tables entered automatically by the GlobalRouteManager:::
+to receive forwarding tables entered automatically by the GlobalRouteManager::
 
   Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
 
@@ -126,7 +127,7 @@
 described below.
 
 It is possible to call this function again in the midst of a simulation using
-the following additional public function:::
+the following additional public function::
 
   Ipv4GlobalRoutingHelper::RecomputeRoutingTables ();
 
@@ -134,10 +135,10 @@
 and rebuilds the routes.
 
 For instance, this scheduling call will cause the tables to be rebuilt
-at time 5 seconds:::
+at time 5 seconds::
 
   Simulator::Schedule (Seconds (5),
-    &Ipv4GlobalRoutingHelper::RecomputeRoutingTables);
+                       &Ipv4GlobalRoutingHelper::RecomputeRoutingTables);
 
 
 There are two attributes that govern the behavior. The first is
@@ -194,7 +195,7 @@
 be treated like a broadcast CSMA link).
 
 The GlobalRouteManager first walks the list of nodes and aggregates
-a GlobalRouter interface to each one as follows:::
+a GlobalRouter interface to each one as follows::
 
   typedef std::vector < Ptr<Node> >::iterator Iterator;
   for (Iterator i = NodeList::Begin (); i != NodeList::End (); i++)
@@ -219,9 +220,9 @@
 
 * class Ipv4StaticRouting (covering both unicast and multicast)
 * IPv4 Optimized Link State Routing (OLSR) (a MANET protocol defined in 
-  `RFC 3626 <http://www.ietf.org/rfc/rfc3626.txt>`_)
+  :rfc:`3626`)
 * IPv4 Ad Hoc On Demand Distance Vector (AODV) (a MANET protocol defined in
-  `RFC 3561 <http://www.ietf.org/rfc/rfc3561.txt>`_)
+  :rfc:`3561`)
 * IPv4 Destination Sequenced Distance Vector (DSDV) (a MANET protocol)
 * class Ipv4ListRouting (used to store a prioritized list of routing protocols)
 * class Ipv4GlobalRouting (used to store routes computed by the global route
@@ -256,7 +257,7 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Class Ipv4ListRouting provides a pure virtual function declaration for the
-method that allows one to add a routing protocol:::
+method that allows one to add a routing protocol::
 
   void AddRoutingProtocol (Ptr<Ipv4RoutingProtocol> routingProtocol,
                            int16_t priority);
@@ -271,7 +272,7 @@
 Ipv4RoutingProtocols is stored, and and the routing protocols are each consulted
 in decreasing order of priority to see whether a match is found. Therefore, if
 you want your Ipv4RoutingProtocol to have priority lower than the static
-routing, insert it with priority less than 0; e.g.:::
+routing, insert it with priority less than 0; e.g.::
 
   Ptr<MyRoutingProtocol> myRoutingProto = CreateObject<MyRoutingProtocol> ();
   listRoutingPtr->AddRoutingProtocol (myRoutingProto, -10);
@@ -334,13 +335,13 @@
 *****************
 
 The following function is used to add a static multicast route
-to a node:::
+to a node::
 
     void 
     Ipv4StaticRouting::AddMulticastRoute (Ipv4Address origin,
-                              Ipv4Address group,
-                              uint32_t inputInterface,
-                              std::vector<uint32_t> outputInterfaces);
+                                          Ipv4Address group,
+                                          uint32_t inputInterface,
+                                          std::vector<uint32_t> outputInterfaces);
 
 A multicast route must specify an origin IP address, a multicast group and an
 input network interface index as conditions and provide a vector of output
@@ -370,7 +371,7 @@
 limited to specifying a single output interface for compatibility with
 existing functionality in other systems.
 
-Another command sets the default multicast route:::
+Another command sets the default multicast route::
 
     void 
     Ipv4StaticRouting::SetDefaultMulticastRoute (uint32_t outputInterface);
@@ -391,7 +392,7 @@
 found.
 
 Finally, a number of additional functions are provided to fetch and remove
-multicast routes:::
+multicast routes::
 
   uint32_t GetNMulticastRoutes (void) const;
 
diff -Naur ns-3.18.1/src/internet/doc/tcp.rst ns-3.19/src/internet/doc/tcp.rst
--- ns-3.18.1/src/internet/doc/tcp.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/doc/tcp.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 TCP models in ns-3
 ------------------
@@ -41,7 +42,9 @@
 The model is a full TCP, in that it is bidirectional and attempts to model the
 connection setup and close logic. 
 
-The implementation of TCP is contained in the following files:::
+The implementation of TCP is contained in the following files:
+
+.. sourcecode:: text
 
     src/internet/model/tcp-header.{cc,h}
     src/internet/model/tcp-l4-protocol.{cc,h}
@@ -59,7 +62,7 @@
 
 Different variants of TCP congestion control are supported by subclassing
 the common base class :cpp:class:`TcpSocketBase`.  Several variants
-are supported, including RFC 793 (no congestion control), Tahoe, Reno, Westwood,
+are supported, including :rfc:`793` (no congestion control), Tahoe, Reno, Westwood,
 Westwood+, and NewReno.  NewReno is used by default.  See the Usage section of this
 document for on how to change the default TCP variant used in simulation.
 
@@ -70,7 +73,7 @@
 the |ns3| application which kind of socket factory to use.
 
 Using the helper functions defined in ``src/applications/helper`` and
-``src/network/helper``, here is how one would create a TCP receiver:::
+``src/network/helper``, here is how one would create a TCP receiver::
 
   // Create a packet sink on the star "hub" to receive these packets
   uint16_t port = 50000;
@@ -81,7 +84,7 @@
   sinkApp.Stop (Seconds (10.0));
 
 Similarly, the below snippet configures OnOffApplication traffic source to use
-TCP:::
+TCP::
 
   // Create the OnOff applications to send TCP to the server
   OnOffHelper clientHelper ("ns3::TcpSocketFactory", Address ());
@@ -103,7 +106,7 @@
 
 To set the default socket type before any internet stack-related objects are
 created, one may put the following statement at the top of the simulation
-program::: 
+program:: 
 
   Config::SetDefault ("ns3::TcpL4Protocol::SocketType", StringValue ("ns3::TcpTahoe")); 
 
@@ -116,7 +119,7 @@
 underlying TcpL4Protocol object.  The easiest way to get at this would be 
 through the attribute configuration system.  In the below example,
 the Node container "n0n1" is accessed
-to get the zeroth element, and a socket is created on this node:::
+to get the zeroth element, and a socket is created on this node::
 
   // Create and bind the socket...
   TypeId tid = TypeId::LookupByName ("ns3::TcpTahoe");
@@ -127,7 +130,7 @@
 Above, the "*" wild card for node number is passed to the attribute
 configuration system, so that all future sockets on all nodes are set to 
 Tahoe, not just on node 'n0n1.Get (0)'.  If one wants to limit it to just 
-the specified node, one would have to do something like:::
+the specified node, one would have to do something like::
 
   // Create and bind the socket...
   TypeId tid = TypeId::LookupByName ("ns3::TcpTahoe");
@@ -186,9 +189,11 @@
 
 Using the ``build.py`` script in ns-3-allinone directory, NSC will be enabled by
 default unless the platform does not support it. To disable it when building
-|ns3|, type:::
+|ns3|, type:
+
+.. sourcecode:: bash
 
-./waf configure --enable-examples --enable-tests --disable-nsc
+  $ ./waf configure --enable-examples --enable-tests --disable-nsc
 
 Building and validating
 +++++++++++++++++++++++
@@ -197,12 +202,16 @@
 additional arguments are needed for waf. Building nsc may take some time
 compared to |ns3|; it is interleaved in the |ns3| building process.
 
-Try running the following ns-3 test suite:::  
+Try running the following ns-3 test suite:
+
+.. sourcecode:: bash
 
-    ./test.py -s ns3-tcp-interoperability
+    $ ./test.py -s ns3-tcp-interoperability
 
 If NSC has been successfully built, the following test should show up 
-in the results:::
+in the results:
+
+.. sourcecode:: text
 
     PASS TestSuite ns3-tcp-interoperability
 
@@ -211,10 +220,12 @@
 Usage
 +++++
 
-There are a few example files.  Try::
+There are a few example files.  Try:
+
+.. sourcecode:: bash
 
-    ./waf --run tcp-nsc-zoo
-    ./waf --run tcp-nsc-lfn
+    $ ./waf --run tcp-nsc-zoo
+    $ ./waf --run tcp-nsc-lfn
 
 These examples will deposit some ``.pcap`` files in your directory,
 which can be examined by tcpdump or wireshark.
@@ -222,7 +233,7 @@
 Let's look at the ``examples/tcp/tcp-nsc-zoo.cc`` file for some typical
 usage. How does it differ from using native |ns3| TCP? There is one main
 configuration line, when using NSC and the |ns3| helper API, that needs to be
-set:::
+set::
 
   InternetStackHelper internetStack;
 
@@ -240,9 +251,11 @@
 Which stacks are available to use? Presently, the focus has been on
 Linux 2.6.18 and Linux 2.6.26 stacks for |ns3|. To see which stacks
 were built, one can execute the following find command at the |ns3| top level
-directory:::
+directory:
+
+.. sourcecode:: bash
 
-    ~/ns-3.10> find nsc -name "*.so" -type f 
+    $ find nsc -name "*.so" -type f 
     nsc/linux-2.6.18/liblinux2.6.18.so
     nsc/linux-2.6.26/liblinux2.6.26.so
 
@@ -258,7 +271,7 @@
 
 Additionally, NSC TCP exports a lot of configuration variables into the 
 |ns3| attributes system, via a `sysctl <http://en.wikipedia.org/wiki/Sysctl>`_-like interface. In the ``examples/tcp/tcp-nsc-zoo`` example, you
-can see the following configuration:::
+can see the following configuration::
 
 
   // this disables TCP SACK, wscale and timestamps on node 1 (the attributes 
@@ -272,10 +285,10 @@
 
 These additional configuration variables are not available to native |ns3| TCP.
 
-Also note that default values for TCP attributes in |ns3| TCP may differ from the nsc TCP implementation.  Specifically in |ns3|::: 
+Also note that default values for TCP attributes in |ns3| TCP may differ from the nsc TCP implementation.  Specifically in |ns3|:
 
-		1) TCP default MSS is 536
-		2) TCP Delayed Ack count is 2 
+  1) TCP default MSS is 536
+  2) TCP Delayed Ack count is 2 
 		
 Therefore when making comparisons between results obtained using nsc and |ns3| TCP, care must be taken to ensure these values are set appropriately.  See /examples/tcp/tcp-nsc-comparision.cc for an example.
 
diff -Naur ns-3.18.1/src/internet/helper/internet-stack-helper.cc ns-3.19/src/internet/helper/internet-stack-helper.cc
--- ns-3.18.1/src/internet/helper/internet-stack-helper.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/helper/internet-stack-helper.cc	2013-12-20 09:44:50.000000000 -0800
@@ -216,16 +216,16 @@
 // Global maps of protocol/interface pairs to file objects seems to fit the 
 // bill.
 //
-typedef std::pair<Ptr<Ipv4>, uint32_t> InterfacePairIpv4; 
-typedef std::map<InterfacePairIpv4, Ptr<PcapFileWrapper> > InterfaceFileMapIpv4;
-typedef std::map<InterfacePairIpv4, Ptr<OutputStreamWrapper> > InterfaceStreamMapIpv4;
+typedef std::pair<Ptr<Ipv4>, uint32_t> InterfacePairIpv4;  /**< Ipv4/interface pair */
+typedef std::map<InterfacePairIpv4, Ptr<PcapFileWrapper> > InterfaceFileMapIpv4;  /**< Ipv4/interface and Pcap file wrapper container */
+typedef std::map<InterfacePairIpv4, Ptr<OutputStreamWrapper> > InterfaceStreamMapIpv4;  /**< Ipv4/interface and output stream container */
 
 static InterfaceFileMapIpv4 g_interfaceFileMapIpv4; /**< A mapping of Ipv4/interface pairs to pcap files */
 static InterfaceStreamMapIpv4 g_interfaceStreamMapIpv4; /**< A mapping of Ipv4/interface pairs to ascii streams */
 
-typedef std::pair<Ptr<Ipv6>, uint32_t> InterfacePairIpv6;
-typedef std::map<InterfacePairIpv6, Ptr<PcapFileWrapper> > InterfaceFileMapIpv6;
-typedef std::map<InterfacePairIpv6, Ptr<OutputStreamWrapper> > InterfaceStreamMapIpv6;
+typedef std::pair<Ptr<Ipv6>, uint32_t> InterfacePairIpv6;  /**< Ipv6/interface pair */
+typedef std::map<InterfacePairIpv6, Ptr<PcapFileWrapper> > InterfaceFileMapIpv6;  /**< Ipv6/interface and Pcap file wrapper container */
+typedef std::map<InterfacePairIpv6, Ptr<OutputStreamWrapper> > InterfaceStreamMapIpv6;  /**< Ipv6/interface and output stream container */
 
 static InterfaceFileMapIpv6 g_interfaceFileMapIpv6; /**< A mapping of Ipv6/interface pairs to pcap files */
 static InterfaceStreamMapIpv6 g_interfaceStreamMapIpv6; /**< A mapping of Ipv6/interface pairs to pcap files */
@@ -490,6 +490,12 @@
   Install (node);
 }
 
+/**
+ * \brief Sync function for IPv4 packet - Pcap output
+ * \param p smart pointer to the packet
+ * \param ipv4 smart pointer to the node's IPv4 stack
+ * \param interface incoming interface
+ */
 static void
 Ipv4L3ProtocolRxTxSink (Ptr<const Packet> p, Ptr<Ipv4> ipv4, uint32_t interface)
 {
@@ -582,6 +588,12 @@
   g_interfaceFileMapIpv4[std::make_pair (ipv4, interface)] = file;
 }
 
+/**
+ * \brief Sync function for IPv6 packet - Pcap output
+ * \param p smart pointer to the packet
+ * \param ipv6 smart pointer to the node's IPv6 stack
+ * \param interface incoming interface
+ */
 static void
 Ipv6L3ProtocolRxTxSink (Ptr<const Packet> p, Ptr<Ipv6> ipv6, uint32_t interface)
 {
@@ -674,6 +686,15 @@
   g_interfaceFileMapIpv6[std::make_pair (ipv6, interface)] = file;
 }
 
+/**
+ * \brief Sync function for IPv4 dropped packet - Ascii output
+ * \param stream the output stream
+ * \param header IPv4 header
+ * \param packet smart pointer to the packet
+ * \param reason the reason for the dropping
+ * \param ipv4 smart pointer to the node's IPv4 stack
+ * \param interface incoming interface
+ */
 static void
 Ipv4L3ProtocolDropSinkWithoutContext (
   Ptr<OutputStreamWrapper> stream,
@@ -701,6 +722,13 @@
   *stream->GetStream () << "d " << Simulator::Now ().GetSeconds () << " " << *p << std::endl;
 }
 
+/**
+ * \brief Sync function for IPv4 transmitted packet - Ascii output
+ * \param stream the output stream
+ * \param packet smart pointer to the packet
+ * \param ipv4 smart pointer to the node's IPv4 stack
+ * \param interface incoming interface
+ */
 static void
 Ipv4L3ProtocolTxSinkWithoutContext (
   Ptr<OutputStreamWrapper> stream,
@@ -718,6 +746,13 @@
   *stream->GetStream () << "t " << Simulator::Now ().GetSeconds () << " " << *packet << std::endl;
 }
 
+/**
+ * \brief Sync function for IPv4 received packet - Ascii output
+ * \param stream the output stream
+ * \param packet smart pointer to the packet
+ * \param ipv4 smart pointer to the node's IPv4 stack
+ * \param interface incoming interface
+ */
 static void
 Ipv4L3ProtocolRxSinkWithoutContext (
   Ptr<OutputStreamWrapper> stream,
@@ -735,6 +770,16 @@
   *stream->GetStream () << "r " << Simulator::Now ().GetSeconds () << " " << *packet << std::endl;
 }
 
+/**
+ * \brief Sync function for IPv4 dropped packet - Ascii output
+ * \param stream the output stream
+ * \param context the context
+ * \param header IPv4 header
+ * \param packet smart pointer to the packet
+ * \param reason the reason for the dropping
+ * \param ipv4 smart pointer to the node's IPv4 stack
+ * \param interface incoming interface
+ */
 static void
 Ipv4L3ProtocolDropSinkWithContext (
   Ptr<OutputStreamWrapper> stream,
@@ -768,6 +813,14 @@
 #endif
 }
 
+/**
+ * \brief Sync function for IPv4 transmitted packet - Ascii output
+ * \param stream the output stream
+ * \param context the context
+ * \param packet smart pointer to the packet
+ * \param ipv4 smart pointer to the node's IPv4 stack
+ * \param interface incoming interface
+ */
 static void
 Ipv4L3ProtocolTxSinkWithContext (
   Ptr<OutputStreamWrapper> stream,
@@ -791,6 +844,14 @@
 #endif
 }
 
+/**
+ * \brief Sync function for IPv4 received packet - Ascii output
+ * \param stream the output stream
+ * \param context the context
+ * \param packet smart pointer to the packet
+ * \param ipv4 smart pointer to the node's IPv4 stack
+ * \param interface incoming interface
+ */
 static void
 Ipv4L3ProtocolRxSinkWithContext (
   Ptr<OutputStreamWrapper> stream,
@@ -963,6 +1024,15 @@
   g_interfaceStreamMapIpv4[std::make_pair (ipv4, interface)] = stream;
 }
 
+/**
+ * \brief Sync function for IPv6 dropped packet - Ascii output
+ * \param stream the output stream
+ * \param header IPv6 header
+ * \param packet smart pointer to the packet
+ * \param reason the reason for the dropping
+ * \param ipv6 smart pointer to the node's IPv6 stack
+ * \param interface incoming interface
+ */
 static void
 Ipv6L3ProtocolDropSinkWithoutContext (
   Ptr<OutputStreamWrapper> stream,
@@ -990,6 +1060,13 @@
   *stream->GetStream () << "d " << Simulator::Now ().GetSeconds () << " " << *p << std::endl;
 }
 
+/**
+ * \brief Sync function for IPv6 transmitted packet - Ascii output
+ * \param stream the output stream
+ * \param packet smart pointer to the packet
+ * \param ipv6 smart pointer to the node's IPv6 stack
+ * \param interface incoming interface
+ */
 static void
 Ipv6L3ProtocolTxSinkWithoutContext (
   Ptr<OutputStreamWrapper> stream,
@@ -1007,6 +1084,13 @@
   *stream->GetStream () << "t " << Simulator::Now ().GetSeconds () << " " << *packet << std::endl;
 }
 
+/**
+ * \brief Sync function for IPv6 received packet - Ascii output
+ * \param stream the output stream
+ * \param packet smart pointer to the packet
+ * \param ipv6 smart pointer to the node's IPv6 stack
+ * \param interface incoming interface
+ */
 static void
 Ipv6L3ProtocolRxSinkWithoutContext (
   Ptr<OutputStreamWrapper> stream,
@@ -1024,6 +1108,16 @@
   *stream->GetStream () << "r " << Simulator::Now ().GetSeconds () << " " << *packet << std::endl;
 }
 
+/**
+ * \brief Sync function for IPv6 dropped packet - Ascii output
+ * \param stream the output stream
+ * \param context the context
+ * \param header IPv6 header
+ * \param packet smart pointer to the packet
+ * \param reason the reason for the dropping
+ * \param ipv6 smart pointer to the node's IPv6 stack
+ * \param interface incoming interface
+ */
 static void
 Ipv6L3ProtocolDropSinkWithContext (
   Ptr<OutputStreamWrapper> stream,
@@ -1057,6 +1151,14 @@
 #endif
 }
 
+/**
+ * \brief Sync function for IPv6 transmitted packet - Ascii output
+ * \param stream the output stream
+ * \param context the context
+ * \param packet smart pointer to the packet
+ * \param ipv6 smart pointer to the node's IPv6 stack
+ * \param interface incoming interface
+ */
 static void
 Ipv6L3ProtocolTxSinkWithContext (
   Ptr<OutputStreamWrapper> stream,
@@ -1080,6 +1182,14 @@
 #endif
 }
 
+/**
+ * \brief Sync function for IPv6 received packet - Ascii output
+ * \param stream the output stream
+ * \param context the context
+ * \param packet smart pointer to the packet
+ * \param ipv6 smart pointer to the node's IPv6 stack
+ * \param interface incoming interface
+ */
 static void
 Ipv6L3ProtocolRxSinkWithContext (
   Ptr<OutputStreamWrapper> stream,
diff -Naur ns-3.18.1/src/internet/helper/internet-stack-helper.h ns-3.19/src/internet/helper/internet-stack-helper.h
--- ns-3.18.1/src/internet/helper/internet-stack-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/helper/internet-stack-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -80,7 +80,15 @@
    * Destroy the InternetStackHelper
    */
   virtual ~InternetStackHelper(void);
+
+  /**
+   * \brief Copy constructor
+   */
   InternetStackHelper (const InternetStackHelper &);
+
+  /**
+   * \brief Copy constructor
+   */
   InternetStackHelper &operator = (const InternetStackHelper &o);
 
   /**
@@ -266,8 +274,21 @@
                                         uint32_t interface,
                                         bool explicitFilename);
 
+  /**
+   * \brief Initialize the helper to its default values
+   */
   void Initialize (void);
+
+  /**
+   * \internal
+   * \brief TCP objects factory
+   */
   ObjectFactory m_tcpFactory;
+
+  /**
+   * \internal
+   * \brief IPv4 routing helper.
+   */
   const Ipv4RoutingHelper *m_routing;
 
   /**
@@ -278,6 +299,10 @@
 
   /**
    * \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);
 
@@ -288,40 +313,64 @@
 
   /**
    * \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
    */
   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
    */
   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
    */
   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
    */
   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.18.1/src/internet/helper/internet-trace-helper.h ns-3.19/src/internet/helper/internet-trace-helper.h
--- ns-3.18.1/src/internet/helper/internet-trace-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/helper/internet-trace-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -268,7 +268,7 @@
   void EnableAsciiIpv4All (Ptr<OutputStreamWrapper> stream);
 
   /**
-   * @brief Enable pcap output on the Ipv4 and interface pair specified by a 
+   * @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 
    * determines the Ipv4.
@@ -283,7 +283,7 @@
   void EnableAsciiIpv4 (std::string prefix, uint32_t nodeid, uint32_t deviceid, bool explicitFilename);
 
   /**
-   * @brief Enable pcap output on the Ipv4 and interface pair specified by a 
+   * @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 
    * determines the Ipv4.
@@ -299,7 +299,21 @@
 
 private:
   /**
-   * @internal Avoid code duplication.
+   * @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
+   * determines the Ipv4.
+   *
+   * @param stream An OutputStreamWrapper representing an existing file to use
+   *               when writing trace data.
+   * @param prefix Filename prefix to use when creating ascii trace files
+   * @param nodeid The node identifier/number of the node on which to enable
+   *               ascii tracing
+   * @param interface The device identifier/index of the device on which to enable
+   *               ascii tracing
+   * @param explicitFilename Treat the prefix as an explicit filename if true.
    */
   void EnableAsciiIpv4Impl (Ptr<OutputStreamWrapper> stream, 
                             std::string prefix, 
@@ -308,17 +322,50 @@
                             bool explicitFilename);
 
   /**
-   * @internal Avoid code duplication.
+   * @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
+   * determines the Ipv4.
+   *
+   * @param stream An OutputStreamWrapper representing an existing file to use
+   *               when writing trace data.
+   * @param prefix Filename prefix to use when creating ascii trace files
+   * @param n container of nodes.
    */
   void EnableAsciiIpv4Impl (Ptr<OutputStreamWrapper> stream, std::string prefix, NodeContainer n);
 
   /**
-   * @internal Avoid code duplication.
+   * @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
+   * determines the Ipv4.
+   *
+   * @param stream An OutputStreamWrapper representing an existing file to use
+   *               when writing trace data.
+   * @param prefix Filename prefix to use when creating ascii trace files
+   * @param c Ipv4InterfaceContainer of Ipv4 and interface pairs
    */
   void EnableAsciiIpv4Impl (Ptr<OutputStreamWrapper> stream, std::string prefix, Ipv4InterfaceContainer c);
 
   /**
-   * @internal Avoid code duplication.
+   * @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
+   * determines the Ipv4.
+   *
+   * @param stream An OutputStreamWrapper representing an existing file to use
+   *               when writing trace data.
+   * @param prefix Filename prefix to use when creating ascii trace files
+   * @param ipv4Name Name of the Ptr<Ipv4> on which you want to enable tracing.
+   * @param interface The device identifier/index of the device on which to enable
+   *               ascii tracing
+   * @param explicitFilename Treat the prefix as an explicit filename if true.
    */
   void EnableAsciiIpv4Impl (Ptr<OutputStreamWrapper> stream, 
                             std::string prefix, 
@@ -327,7 +374,20 @@
                             bool explicitFilename);
 
   /**
-   * @internal Avoid code duplication.
+   * @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
+   * determines the Ipv4.
+   *
+   * @param stream An OutputStreamWrapper representing an existing file to use
+   *               when writing trace data.
+   * @param prefix Filename prefix to use when creating ascii trace files
+   * @param ipv4 Ptr<Ipv4> on which you want to enable tracing.
+   * @param interface The device identifier/index of the device on which to enable
+   *               ascii tracing
+   * @param explicitFilename Treat the prefix as an explicit filename if true.
    */
   void EnableAsciiIpv4Impl (Ptr<OutputStreamWrapper> stream, 
                             std::string prefix, 
@@ -558,7 +618,7 @@
   void EnableAsciiIpv6 (Ptr<OutputStreamWrapper> stream, NodeContainer n);
 
   /**
-   * @brief Enable pcap output on the Ipv6 and interface pair specified by a 
+   * @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 
    * determines the Ipv6.
@@ -573,7 +633,7 @@
   void EnableAsciiIpv6 (std::string prefix, uint32_t nodeid, uint32_t interface, bool explicitFilename);
 
   /**
-   * @brief Enable pcap output on the Ipv6 and interface pair specified by a 
+   * @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 
    * determines the Ipv6.
@@ -605,7 +665,21 @@
 
 private:
   /**
-   * @internal Avoid code duplication.
+   * @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
+   * determines the Ipv6.
+   *
+   * @param stream An OutputStreamWrapper representing an existing file to use
+   *               when writing trace data.
+   * @param prefix Filename prefix to use when creating ascii trace files
+   * @param nodeid The node identifier/number of the node on which to enable
+   *               ascii tracing
+   * @param interface The device identifier/index of the device on which to enable
+   *               ascii tracing
+   * @param explicitFilename Treat the prefix as an explicit filename if true.
    */
   void EnableAsciiIpv6Impl (Ptr<OutputStreamWrapper> stream, 
                             std::string prefix, 
@@ -614,17 +688,50 @@
                             bool explicitFilename);
 
   /**
-   * @internal Avoid code duplication.
+   * @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
+   * determines the Ipv6.
+   *
+   * @param stream An OutputStreamWrapper representing an existing file to use
+   *               when writing trace data.
+   * @param prefix Filename prefix to use when creating ascii trace files
+   * @param n container of nodes.
    */
   void EnableAsciiIpv6Impl (Ptr<OutputStreamWrapper> stream, std::string prefix, NodeContainer n);
 
   /**
-   * @internal Avoid code duplication.
+   * @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
+   * determines the Ipv6.
+   *
+   * @param stream An OutputStreamWrapper representing an existing file to use
+   *               when writing trace data.
+   * @param prefix Filename prefix to use when creating ascii trace files
+   * @param c Ipv6InterfaceContainer of Ipv6 and interface pairs
    */
   void EnableAsciiIpv6Impl (Ptr<OutputStreamWrapper> stream, std::string prefix, Ipv6InterfaceContainer c);
 
   /**
-   * @internal Avoid code duplication.
+   * @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
+   * determines the Ipv6.
+   *
+   * @param stream An OutputStreamWrapper representing an existing file to use
+   *               when writing trace data.
+   * @param prefix Filename prefix to use when creating ascii trace files
+   * @param ipv6Name Name of the Ptr<Ipv6> on which you want to enable tracing.
+   * @param interface The device identifier/index of the device on which to enable
+   *               ascii tracing
+   * @param explicitFilename Treat the prefix as an explicit filename if true.
    */
   void EnableAsciiIpv6Impl (Ptr<OutputStreamWrapper> stream, 
                             std::string prefix, 
@@ -633,7 +740,20 @@
                             bool explicitFilename);
 
   /**
-   * @internal Avoid code duplication.
+   * @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
+   * determines the Ipv6.
+   *
+   * @param stream An OutputStreamWrapper representing an existing file to use
+   *               when writing trace data.
+   * @param prefix Filename prefix to use when creating ascii trace files
+   * @param ipv6 Ptr<Ipv6> on which you want to enable tracing.
+   * @param interface The device identifier/index of the device on which to enable
+   *               ascii tracing
+   * @param explicitFilename Treat the prefix as an explicit filename if true.
    */
   void EnableAsciiIpv6Impl (Ptr<OutputStreamWrapper> stream, 
                             std::string prefix, 
diff -Naur ns-3.18.1/src/internet/helper/ipv4-address-helper.cc ns-3.19/src/internet/helper/ipv4-address-helper.cc
--- ns-3.18.1/src/internet/helper/ipv4-address-helper.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/helper/ipv4-address-helper.cc	2013-12-20 09:44:50.000000000 -0800
@@ -161,7 +161,7 @@
   return retval;
 }
 
-const uint32_t N_BITS = 32;
+const uint32_t N_BITS = 32; //!< number of bits in a IPv4 address
 
 uint32_t
 Ipv4AddressHelper::NumAddressBits (uint32_t maskbits) const
diff -Naur ns-3.18.1/src/internet/helper/ipv4-address-helper.h ns-3.19/src/internet/helper/ipv4-address-helper.h
--- ns-3.18.1/src/internet/helper/ipv4-address-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/helper/ipv4-address-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -178,15 +178,18 @@
 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
    */
   uint32_t NumAddressBits (uint32_t maskbits) const;
 
-  uint32_t m_network;
-  uint32_t m_mask;
-  uint32_t m_address;
-  uint32_t m_base;
-  uint32_t m_shift;
-  uint32_t m_max;
+  uint32_t m_network; //!< network address
+  uint32_t m_mask;    //!< network mask
+  uint32_t m_address; //!< address
+  uint32_t m_base;    //!< base address
+  uint32_t m_shift;   //!< shift, equivalent to the number of bits in the hostpart
+  uint32_t m_max;     //!< maximum allowed address
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/helper/ipv4-global-routing-helper.h ns-3.19/src/internet/helper/ipv4-global-routing-helper.h
--- ns-3.18.1/src/internet/helper/ipv4-global-routing-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/helper/ipv4-global-routing-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -88,8 +88,9 @@
    * \internal
    * \brief Assignment operator declared private and not implemented to disallow
    * assignment and prevent the compiler from happily inserting its own.
+   * \return
    */
-  Ipv4GlobalRoutingHelper &operator = (const Ipv4GlobalRoutingHelper &o);
+  Ipv4GlobalRoutingHelper &operator = (const Ipv4GlobalRoutingHelper &);
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/helper/ipv4-interface-container.h ns-3.19/src/internet/helper/ipv4-interface-container.h
--- ns-3.18.1/src/internet/helper/ipv4-interface-container.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/helper/ipv4-interface-container.h	2013-12-20 09:44:50.000000000 -0800
@@ -32,6 +32,9 @@
 class Ipv4InterfaceContainer
 {
 public:
+  /**
+   * \brief Container Const Iterator for pairs of Ipv4 smart pointer / Interface Index.
+   */
   typedef std::vector<std::pair<Ptr<Ipv4>, uint32_t> >::const_iterator Iterator;
 
   /**
@@ -124,6 +127,11 @@
    */
   Ipv4Address GetAddress (uint32_t i, uint32_t j = 0) const;
 
+  /**
+   * \brief Set a metric for the given interface
+   * \param i Interface index
+   * \param metric the interface metric
+   */
   void SetMetric (uint32_t i, uint16_t metric);
 
   /**
@@ -163,15 +171,24 @@
    * Get the std::pair of an Ptr<Ipv4> and interface stored at the location 
    * specified by the index.
    *
-   * \param i the index of the entery to retrieve.
+   * \param i the index of the entry to retrieve.
+   * \return the Ipv4InterfaceContainer
    *
    * @see Ipv4InterfaceContainer
    */
   std::pair<Ptr<Ipv4>, uint32_t> Get (uint32_t i) const;
 
 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.18.1/src/internet/helper/ipv4-list-routing-helper.h ns-3.19/src/internet/helper/ipv4-list-routing-helper.h
--- ns-3.18.1/src/internet/helper/ipv4-list-routing-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/helper/ipv4-list-routing-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -85,9 +85,14 @@
    * \internal
    * \brief Assignment operator declared private and not implemented to disallow
    * assignment and prevent the compiler from happily inserting its own.
+   * \return
    */
-  Ipv4ListRoutingHelper &operator = (const Ipv4ListRoutingHelper &o);
+  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.18.1/src/internet/helper/ipv4-routing-helper.h ns-3.19/src/internet/helper/ipv4-routing-helper.h
--- ns-3.18.1/src/internet/helper/ipv4-routing-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/helper/ipv4-routing-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -110,7 +110,7 @@
   void PrintRoutingTableEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
 
   /**
-   * \brief Request a specified routing protocol <T> from Ipv4RoutingProtocol protocol
+   * \brief Request a specified routing protocol &lt;T&gt; from Ipv4RoutingProtocol protocol
    *
    * If protocol is Ipv4ListRouting, then protocol will be searched in the list,
    * otherwise a simple DynamicCast will be performed
@@ -122,11 +122,44 @@
   static Ptr<T> GetRouting (Ptr<Ipv4RoutingProtocol> protocol);
   
 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;
+   * the output format is routing protocol-specific.
+   */
   void Print (Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
+
+  /**
+   * \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
+   * at the specified interval; the output format is routing protocol-specific.
+   */
   void PrintEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
 };
 
 
+/**
+ * \brief Request a specified routing protocol &lt;T&gt; from Ipv4RoutingProtocol protocol
+ *
+ * If protocol is Ipv4ListRouting, then protocol will be searched in the list,
+ * otherwise a simple DynamicCast will be performed
+ *
+ * \param protocol Smart pointer to Ipv4RoutingProtocol object
+ * \return a Smart Pointer to the requested protocol (zero if the protocol can't be found)
+ */
 template<class T>
 Ptr<T> Ipv4RoutingHelper::GetRouting (Ptr<Ipv4RoutingProtocol> protocol)
 {
diff -Naur ns-3.18.1/src/internet/helper/ipv4-static-routing-helper.h ns-3.19/src/internet/helper/ipv4-static-routing-helper.h
--- ns-3.18.1/src/internet/helper/ipv4-static-routing-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/helper/ipv4-static-routing-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -75,6 +75,7 @@
    * Ipv4 provided.
    *
    * \param ipv4 the Ptr<Ipv4> to search for the static routing protocol
+   * \returns Ipv4StaticRouting pointer or 0 if not found
    */
   Ptr<Ipv4StaticRouting> GetStaticRouting (Ptr<Ipv4> ipv4) const;
 
@@ -160,8 +161,9 @@
    * \internal
    * \brief Assignment operator declared private and not implemented to disallow
    * assignment and prevent the compiler from happily inserting its own.
+   * \returns
    */
-  Ipv4StaticRoutingHelper &operator = (const Ipv4StaticRoutingHelper &o);
+  Ipv4StaticRoutingHelper &operator = (const Ipv4StaticRoutingHelper &);
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/helper/ipv6-address-helper.cc ns-3.19/src/internet/helper/ipv6-address-helper.cc
--- ns-3.18.1/src/internet/helper/ipv6-address-helper.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/helper/ipv6-address-helper.cc	2013-12-20 09:44:50.000000000 -0800
@@ -34,7 +34,8 @@
 namespace ns3 
 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6AddressHelper");
+NS_LOG_COMPONENT_DEFINE ("Ipv6AddressHelper")
+  ;
 
 Ipv6AddressHelper::Ipv6AddressHelper ()
 {
diff -Naur ns-3.18.1/src/internet/helper/ipv6-address-helper.h ns-3.19/src/internet/helper/ipv6-address-helper.h
--- ns-3.18.1/src/internet/helper/ipv6-address-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/helper/ipv6-address-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -73,6 +73,11 @@
  * If this method is called, the addressed returned will include a
  * modified EUI-64-format identifier created from the MAC address as 
  * specified in \RFC{4291}.
+ *
+ * BEWARE: the underlying implementation acts as a Singleton.
+ * In other terms, two different instances of Ipv6AddressHelper will
+ * pick IPv6 numbers from the same pool. Changing the network in one of them
+ * will also change the network in the other instances.
  */
 class Ipv6AddressHelper
 {
diff -Naur ns-3.18.1/src/internet/helper/ipv6-interface-container.h ns-3.19/src/internet/helper/ipv6-interface-container.h
--- ns-3.18.1/src/internet/helper/ipv6-interface-container.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/helper/ipv6-interface-container.h	2013-12-20 09:44:50.000000000 -0800
@@ -41,7 +41,12 @@
 class Ipv6InterfaceContainer
 {
 public:
+
+  /**
+   * \brief Container Const Iterator for pairs of Ipv6 smart pointer / Interface Index.
+   */
   typedef std::vector<std::pair<Ptr<Ipv6>, uint32_t> >::const_iterator Iterator;
+
   /**
    * \brief Constructor.
    */
@@ -205,6 +210,10 @@
   void SetDefaultRoute (uint32_t i, Ipv6Address routerAddr);
 
 private:
+  /**
+   * \internal
+   * \brief Container for pairs of Ipv6 smart pointer / Interface Index.
+   */
   typedef std::vector<std::pair<Ptr<Ipv6>, uint32_t> > InterfaceVector;
 
   /**
diff -Naur ns-3.18.1/src/internet/helper/ipv6-list-routing-helper.h ns-3.19/src/internet/helper/ipv6-list-routing-helper.h
--- ns-3.18.1/src/internet/helper/ipv6-list-routing-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/helper/ipv6-list-routing-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -86,9 +86,15 @@
    * \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
+   * \returns a reference to the new object
    */
   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.18.1/src/internet/helper/ipv6-routing-helper.h ns-3.19/src/internet/helper/ipv6-routing-helper.h
--- ns-3.18.1/src/internet/helper/ipv6-routing-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/helper/ipv6-routing-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -112,7 +112,7 @@
   void PrintRoutingTableEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
 
   /**
-   * \brief Request a specified routing protocol <T> from Ipv6RoutingProtocol protocol
+   * \brief Request a specified routing protocol &lt;T&gt; from Ipv6RoutingProtocol protocol
    *
    * If protocol is Ipv6ListRouting, then protocol will be searched in the list,
    * otherwise a simple DynamicCast will be performed
@@ -124,10 +124,43 @@
   static Ptr<T> GetRouting (Ptr<Ipv6RoutingProtocol> protocol);
   
 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;
+   * the output format is routing protocol-specific.
+   */
   void Print (Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
+
+  /**
+   * \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
+   * at the specified interval; the output format is routing protocol-specific.
+   */
   void PrintEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
 };
 
+/**
+ * \brief Request a specified routing protocol &lt;T&gt; from Ipv6RoutingProtocol protocol
+ *
+ * If protocol is Ipv6ListRouting, then protocol will be searched in the list,
+ * otherwise a simple DynamicCast will be performed
+ *
+ * \param protocol Smart pointer to Ipv6RoutingProtocol object
+ * \return a Smart Pointer to the requested protocol (zero if the protocol can't be found)
+ */
 template<class T>
 Ptr<T> Ipv6RoutingHelper::GetRouting (Ptr<Ipv6RoutingProtocol> protocol)
 {
diff -Naur ns-3.18.1/src/internet/helper/ipv6-static-routing-helper.h ns-3.19/src/internet/helper/ipv6-static-routing-helper.h
--- ns-3.18.1/src/internet/helper/ipv6-static-routing-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/helper/ipv6-static-routing-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -72,7 +72,7 @@
   /**
    * \brief Get Ipv6StaticRouting pointer from IPv6 stack.
    * \param ipv6 Ipv6 pointer
-   * \return Ipv6StaticRouting pointer or 0 if not exist
+   * \return Ipv6StaticRouting pointer or 0 if not found
    */
   Ptr<Ipv6StaticRouting> GetStaticRouting (Ptr<Ipv6> ipv6) const;
 
@@ -121,6 +121,8 @@
    * \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
+   * \returns a reference to the new object
    */
   Ipv6StaticRoutingHelper &operator = (const Ipv6StaticRoutingHelper &o);
 };
diff -Naur ns-3.18.1/src/internet/model/arp-cache.cc ns-3.19/src/internet/model/arp-cache.cc
--- ns-3.18.1/src/internet/model/arp-cache.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/arp-cache.cc	2013-12-20 09:44:50.000000000 -0800
@@ -33,7 +33,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ArpCache);
+NS_OBJECT_ENSURE_REGISTERED (ArpCache)
+  ;
 
 TypeId 
 ArpCache::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/arp-cache.h ns-3.19/src/internet/model/arp-cache.h
--- ns-3.18.1/src/internet/model/arp-cache.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/arp-cache.h	2013-12-20 09:44:50.000000000 -0800
@@ -49,34 +49,78 @@
 class ArpCache : public Object
 {
 private:
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
   ArpCache (ArpCache const &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
   ArpCache& operator= (ArpCache const &);
 
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   class Entry;
   ArpCache ();
   ~ArpCache ();
 
   /**
+   * \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
    */
   void SetDevice (Ptr<NetDevice> device, Ptr<Ipv4Interface> interface);
   /**
+   * \brief Returns the NetDevice that this ARP cache is associated with
    * \return The NetDevice that this ARP cache is associated with
    */
   Ptr<NetDevice> GetDevice (void) const;
   /**
+   * \brief Returns the Ipv4Interface that this ARP cache is associated with
    * \return the Ipv4Interface that this ARP cache is associated with
    */
   Ptr<Ipv4Interface> GetInterface (void) const;
 
+  /**
+   * \brief Set the time the entry will be in ALIVE state (unless refreshed)
+   * \param aliveTimeout the Alive state timeout
+   */
   void SetAliveTimeout (Time aliveTimeout);
+  /**
+   * \brief Set the time the entry will be in DEAD state before being removed
+   * \param deadTimeout the Dead state timeout
+   */
   void SetDeadTimeout (Time deadTimeout);
+  /**
+   * \brief Set the time the entry will be in WAIT_REPLY state
+   * \param waitReplyTimeout the WAIT_REPLY state timeout
+   */
   void SetWaitReplyTimeout (Time waitReplyTimeout);
+
+  /**
+   * \brief Get the time the entry will be in ALIVE state (unless refreshed)
+   * \returns the Alive state timeout
+   */
   Time GetAliveTimeout (void) const;
+  /**
+   * \brief Get the time the entry will be in DEAD state before being removed
+   * \returns the Dead state timeout
+   */
   Time GetDeadTimeout (void) const;
+  /**
+   * \brief Get the time the entry will be in WAIT_REPLY state
+   * \returns the WAIT_REPLY state timeout
+   */
   Time GetWaitReplyTimeout (void) const;
 
   /**
@@ -190,46 +234,65 @@
     void ClearRetries (void);
 
 private:
+    /**
+     * \brief ARP cache entry states
+     */
     enum ArpCacheEntryState_e {
       ALIVE,
       WAIT_REPLY,
       DEAD
     };
 
+    /**
+     * \brief Update the entry when seeing a packet
+     */
     void UpdateSeen (void);
+
+    /**
+     * \brief Returns the entry timeout
+     * \returns the entry timeout
+     */
     Time GetTimeout (void) const;
-    ArpCache *m_arp;
-    ArpCacheEntryState_e m_state;
-    Time m_lastSeen;
-    Address m_macAddress;
-    Ipv4Address m_ipv4Address;
-    std::list<Ptr<Packet> > m_pending;
-    uint32_t m_retries;
+
+    ArpCache *m_arp; //!< pointer to the ARP cache owning the entry
+    ArpCacheEntryState_e m_state; //!< state of the entry
+    Time m_lastSeen; //!< last moment a packet from that address has been seen
+    Address m_macAddress; //!< entry's MAC address
+    Ipv4Address m_ipv4Address; //!< entry's IP address
+    std::list<Ptr<Packet> > m_pending; //!< list of pending packets for the entry's IP
+    uint32_t m_retries; //!< rerty counter
   };
 
 private:
+  /**
+   * \brief ARP Cache container
+   */
   typedef sgi::hash_map<Ipv4Address, ArpCache::Entry *, Ipv4AddressHash> Cache;
+  /**
+   * \brief ARP Cache container iterator
+   */
   typedef sgi::hash_map<Ipv4Address, ArpCache::Entry *, Ipv4AddressHash>::iterator CacheI;
 
   virtual void DoDispose (void);
 
-  Ptr<NetDevice> m_device;
-  Ptr<Ipv4Interface> m_interface;
-  Time m_aliveTimeout;
-  Time m_deadTimeout;
-  Time m_waitReplyTimeout;
-  EventId m_waitReplyTimer;
-  Callback<void, Ptr<const ArpCache>, Ipv4Address> m_arpRequestCallback;
-  uint32_t m_maxRetries;
+  Ptr<NetDevice> m_device; //!< NetDevice associated with the cache
+  Ptr<Ipv4Interface> m_interface; //!< Ipv4Interface associated with the cache
+  Time m_aliveTimeout; //!< cache alive state timeout
+  Time m_deadTimeout; //!< cache dead state timeout
+  Time m_waitReplyTimeout; //!< cache reply state timeout
+  EventId m_waitReplyTimer;  //!< cache alive state timer
+  Callback<void, Ptr<const ArpCache>, Ipv4Address> m_arpRequestCallback;  //!< reply timeout callback
+  uint32_t m_maxRetries; //!< max retries for a resolution
+
   /**
    * This function is an event handler for the event that the
    * ArpCache wants to check whether it must retry any Arp requests.
    * If there are no Arp requests pending, this event is not scheduled.
    */
   void HandleWaitReplyTimeout (void);
-  uint32_t m_pendingQueueSize;
-  Cache m_arpCache;
-  TracedCallback<Ptr<const Packet> > m_dropTrace;
+  uint32_t m_pendingQueueSize; //!< number of packets waiting for a resolution
+  Cache m_arpCache; //!< the ARP cache
+  TracedCallback<Ptr<const Packet> > m_dropTrace; //!< trace for packets dropped by the ARP cache queue
 };
 
 
diff -Naur ns-3.18.1/src/internet/model/arp-header.cc ns-3.19/src/internet/model/arp-header.cc
--- ns-3.18.1/src/internet/model/arp-header.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/arp-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -27,7 +27,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ArpHeader);
+NS_OBJECT_ENSURE_REGISTERED (ArpHeader)
+  ;
 
 void 
 ArpHeader::SetRequest (Address sourceHardwareAddress,
diff -Naur ns-3.18.1/src/internet/model/arp-header.h ns-3.19/src/internet/model/arp-header.h
--- ns-3.18.1/src/internet/model/arp-header.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/arp-header.h	2013-12-20 09:44:50.000000000 -0800
@@ -34,21 +34,69 @@
 class ArpHeader : public Header 
 {
 public:
+  /**
+   * \brief Set the ARP request parameters
+   * \param sourceHardwareAddress the source hardware address
+   * \param sourceProtocolAddress the source IP address
+   * \param destinationHardwareAddress the destination hardware address (usually the broadcast address)
+   * \param destinationProtocolAddress the destination IP address
+   */
   void SetRequest (Address sourceHardwareAddress,
                    Ipv4Address sourceProtocolAddress,
                    Address destinationHardwareAddress,
                    Ipv4Address destinationProtocolAddress);
+  /**
+   * \brief Set the ARP reply parameters
+   * \param sourceHardwareAddress the source hardware address
+   * \param sourceProtocolAddress the source IP address
+   * \param destinationHardwareAddress the destination hardware address (usually the broadcast address)
+   * \param destinationProtocolAddress the destination IP address
+   */
   void SetReply (Address sourceHardwareAddress,
                  Ipv4Address sourceProtocolAddress,
                  Address destinationHardwareAddress,
                  Ipv4Address destinationProtocolAddress);
+
+  /**
+   * \brief Check if the ARP is a request
+   * \returns true if it is a request
+   */
   bool IsRequest (void) const;
+
+  /**
+   * \brief Check if the ARP is a reply
+   * \returns true if it is a reply
+   */
   bool IsReply (void) const;
+
+  /**
+   * \brief Returns the source hardware address
+   * \returns the source hardware address
+   */
   Address GetSourceHardwareAddress (void);
+
+  /**
+   * \brief Returns the destination hardware address
+   * \returns the destination hardware address
+   */
   Address GetDestinationHardwareAddress (void);
+
+  /**
+   * \brief Returns the source IP address
+   * \returns the source IP address
+   */
   Ipv4Address GetSourceIpv4Address (void);
+
+  /**
+   * \brief Returns the destination IP address
+   * \returns the destination IP address
+   */
   Ipv4Address GetDestinationIpv4Address (void);
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
   virtual void Print (std::ostream &os) const;
@@ -56,15 +104,18 @@
   virtual void Serialize (Buffer::Iterator start) const;
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
+  /**
+   * \brief Enumeration listing the possible ARP types
+   */
   enum ArpType_e {
     ARP_TYPE_REQUEST = 1,
     ARP_TYPE_REPLY   = 2
   };
-  uint16_t m_type;
-  Address m_macSource;
-  Address m_macDest;
-  Ipv4Address m_ipv4Source;
-  Ipv4Address m_ipv4Dest;
+  uint16_t m_type;           //!< type of the ICMP (ARP_TYPE_REQUEST)
+  Address m_macSource;       //!< hardware source address
+  Address m_macDest;         //!< hardware destination address
+  Ipv4Address m_ipv4Source;  //!< IP source address
+  Ipv4Address m_ipv4Dest;    //!< IP destination address
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/arp-l3-protocol.cc ns-3.19/src/internet/model/arp-l3-protocol.cc
--- ns-3.18.1/src/internet/model/arp-l3-protocol.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/arp-l3-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -38,7 +38,8 @@
 
 const uint16_t ArpL3Protocol::PROT_NUMBER = 0x0806;
 
-NS_OBJECT_ENSURE_REGISTERED (ArpL3Protocol);
+NS_OBJECT_ENSURE_REGISTERED (ArpL3Protocol)
+  ;
 
 TypeId 
 ArpL3Protocol::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/arp-l3-protocol.h ns-3.19/src/internet/model/arp-l3-protocol.h
--- ns-3.18.1/src/internet/model/arp-l3-protocol.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/arp-l3-protocol.h	2013-12-20 09:44:50.000000000 -0800
@@ -49,29 +49,49 @@
 class ArpL3Protocol : public Object
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
-  static const uint16_t PROT_NUMBER;
+  static const uint16_t PROT_NUMBER; //!< ARP protocol number (0x0806)
 
   ArpL3Protocol ();
   virtual ~ArpL3Protocol ();
 
+  /**
+   * \brief Set the node the ARP L3 protocol is associated with
+   * \param node the node
+   */
   void SetNode (Ptr<Node> node);
 
+  /**
+   * \brief Create an ARP cache for the device/interface
+   * \param device the NetDevice
+   * \param interface the Ipv4Interface
+   * \returns a smart pointer to the ARP cache
+   */
   Ptr<ArpCache> CreateCache (Ptr<NetDevice> device, Ptr<Ipv4Interface> interface);
 
   /**
    * \brief Receive a packet
+   * \param device the source NetDevice
+   * \param p the packet
+   * \param protocol the protocol
+   * \param from the source address
+   * \param to the destination address
+   * \param packetType type of packet (i.e., unicast, multicast, etc.)
    */
   void Receive (Ptr<NetDevice> device, Ptr<const Packet> p, uint16_t protocol, const Address &from, const Address &to,
                 NetDevice::PacketType packetType);
   /**
    * \brief Perform an ARP lookup
-   * \param p
-   * \param destination
-   * \param device
-   * \param cache
-   * \param hardwareDestination
-   * \return 
+   * \param p the packet
+   * \param destination destination IP address
+   * \param device outgoing device
+   * \param cache ARP cache
+   * \param hardwareDestination filled with the destination MAC address (if the entry exists)
+   * \return true if there is a matching ARP Entry
    */
   bool Lookup (Ptr<Packet> p, Ipv4Address destination, 
                Ptr<NetDevice> device,
@@ -96,16 +116,49 @@
    */
   virtual void NotifyNewAggregate ();
 private:
-  typedef std::list<Ptr<ArpCache> > CacheList;
+  typedef std::list<Ptr<ArpCache> > CacheList; //!< container of the ARP caches
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \param o
+   */
   ArpL3Protocol (const ArpL3Protocol &o);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \param o
+   * \returns
+   */
   ArpL3Protocol &operator = (const ArpL3Protocol &o);
+
+  /**
+   * \brief Finds the cache associated with a NetDevice
+   * \param device the NetDevice
+   * \returns the ARP cache, or null if no cache is found
+   */
   Ptr<ArpCache> FindCache (Ptr<NetDevice> device);
+
+  /**
+   * \brief Send an ARP request to an host
+   * \param cache the ARP cache to use
+   * \param to the destination IP
+   */
   void SendArpRequest (Ptr<const ArpCache>cache, Ipv4Address to);
+  /**
+   * \brief Send an ARP reply to an host
+   * \param cache the ARP cache to use
+   * \param myIp the source IP address
+   * \param toIp the destination IP
+   * \param toMac the destination MAC address
+   */
   void SendArpReply (Ptr<const ArpCache> cache, Ipv4Address myIp, Ipv4Address toIp, Address toMac);
-  CacheList m_cacheList;
-  Ptr<Node> m_node;
-  TracedCallback<Ptr<const Packet> > m_dropTrace;
-  Ptr<RandomVariableStream> m_requestJitter;
+
+  CacheList m_cacheList; //!< ARP cache container
+  Ptr<Node> m_node; //!< node the ARP L3 protocol is associated with
+  TracedCallback<Ptr<const Packet> > m_dropTrace; //!< trace for packets dropped by ARP
+  Ptr<RandomVariableStream> m_requestJitter; //!< jitter to de-sync ARP requests
 
 };
 
diff -Naur ns-3.18.1/src/internet/model/candidate-queue.cc ns-3.19/src/internet/model/candidate-queue.cc
--- ns-3.18.1/src/internet/model/candidate-queue.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/candidate-queue.cc	2013-12-20 09:44:50.000000000 -0800
@@ -27,6 +27,13 @@
 
 namespace ns3 {
 
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param t the SPFVertex type
+ * \returns the reference to the output stream
+ */
 std::ostream&
 operator<< (std::ostream& os, const SPFVertex::VertexType& t)
 {
diff -Naur ns-3.18.1/src/internet/model/candidate-queue.h ns-3.19/src/internet/model/candidate-queue.h
--- ns-3.18.1/src/internet/model/candidate-queue.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/candidate-queue.h	2013-12-20 09:44:50.000000000 -0800
@@ -176,6 +176,7 @@
  * prevent the compiler from slipping in incorrect versions that don't
  * properly deal with deep copies.
  * \param sr object to assign
+ * \return copied object
  */
   CandidateQueue& operator= (CandidateQueue& sr);
 /**
@@ -185,13 +186,22 @@
  * defined by this method. If v1 should be popped before v2, this 
  * method return true; false otherwise
  *
+ * \param v1 first operand
+ * \param v2 second operand
  * \return True if v1 should be popped before v2; false otherwise
  */
   static bool CompareSPFVertex (const SPFVertex* v1, const SPFVertex* v2);
 
-  typedef std::list<SPFVertex*> CandidateList_t;
-  CandidateList_t m_candidates;
+  typedef std::list<SPFVertex*> CandidateList_t; //!< container of SPFVertex pointers
+  CandidateList_t m_candidates;  //!< SPFVertex candidates
 
+  /**
+   * \brief Stream insertion operator.
+   *
+   * \param os the reference to the output stream
+   * \param q the CandidateQueue
+   * \returns the reference to the output stream
+   */
   friend std::ostream& operator<< (std::ostream& os, const CandidateQueue& q);
 };
 
diff -Naur ns-3.18.1/src/internet/model/global-route-manager-impl.cc ns-3.19/src/internet/model/global-route-manager-impl.cc
--- ns-3.18.1/src/internet/model/global-route-manager-impl.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/global-route-manager-impl.cc	2013-12-20 09:44:50.000000000 -0800
@@ -44,6 +44,13 @@
 
 namespace ns3 {
 
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param exit the exit node
+ * \returns the reference to the output stream
+ */
 std::ostream& 
 operator<< (std::ostream& os, const SPFVertex::NodeExit_t& exit)
 {
@@ -704,8 +711,9 @@
       Ptr<GlobalRouter> rtr = 
         node->GetObject<GlobalRouter> ();
 
+      uint32_t systemId = MpiInterface::GetSystemId ();
       // Ignore nodes that are not assigned to our systemId (distributed sim)
-      if (node->GetSystemId () != MpiInterface::GetSystemId ()) 
+      if (node->GetSystemId () != systemId) 
         {
           continue;
         }
diff -Naur ns-3.18.1/src/internet/model/global-route-manager-impl.h ns-3.19/src/internet/model/global-route-manager-impl.h
--- ns-3.18.1/src/internet/model/global-route-manager-impl.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/global-route-manager-impl.h	2013-12-20 09:44:50.000000000 -0800
@@ -34,7 +34,7 @@
 
 namespace ns3 {
 
-const uint32_t SPF_INFINITY = 0xffffffff;
+const uint32_t SPF_INFINITY = 0xffffffff; //!< "infinite" distance between nodes
 
 class CandidateQueue;
 class Ipv4GlobalRouting;
@@ -298,7 +298,9 @@
  * network represented by "this" SPFVertex.
  */
   void SetRootExitDirection (Ipv4Address nextHop, int32_t id = SPF_INFINITY);
-  typedef std::pair<Ipv4Address, int32_t> NodeExit_t;
+
+  typedef std::pair<Ipv4Address, int32_t> NodeExit_t; //!< IPv4 / interface container for exit nodes.
+
 /**
  * @brief Set the IP address and outgoing interface index that should be used 
  * to begin forwarding packets from the root SPFVertex to "this" SPFVertex.
@@ -532,22 +534,27 @@
    */ 
   bool IsVertexProcessed (void) const;
 
+  /**
+   * @brief Clear the value of the VertexProcessed flag
+   *
+   * Flag to note whether vertex has been processed in stage two of
+   * SPF computation
+   */
   void ClearVertexProcessed (void);
 
 private:
-  VertexType m_vertexType;
-  Ipv4Address m_vertexId;
-  GlobalRoutingLSA* m_lsa;
-  uint32_t m_distanceFromRoot;
-  int32_t m_rootOif;
-  Ipv4Address m_nextHop;
-  typedef std::list< NodeExit_t > ListOfNodeExit_t;
-  /// store the multiple root's exits for supporting ECMP
-  ListOfNodeExit_t m_ecmpRootExits;
-  typedef std::list<SPFVertex*> ListOfSPFVertex_t;
-  ListOfSPFVertex_t m_parents;
-  ListOfSPFVertex_t m_children;
-  bool m_vertexProcessed; 
+  VertexType m_vertexType; //!< Vertex type
+  Ipv4Address m_vertexId; //!< Vertex ID
+  GlobalRoutingLSA* m_lsa; //!< Link State Advertisement
+  uint32_t m_distanceFromRoot; //!< Distance from root node
+  int32_t m_rootOif; //!< root Output Interface
+  Ipv4Address m_nextHop; //!< next hop
+  typedef std::list< NodeExit_t > ListOfNodeExit_t; //!< container of Exit nodes
+  ListOfNodeExit_t m_ecmpRootExits; //!< store the multiple root's exits for supporting ECMP
+  typedef std::list<SPFVertex*> ListOfSPFVertex_t; //!< container of SPFVertexes
+  ListOfSPFVertex_t m_parents; //!< parent list
+  ListOfSPFVertex_t m_children; //!< Children list
+  bool m_vertexProcessed; //!< Flag to note whether vertex has been processed in stage two of SPF computation
 
 /**
  * @brief The SPFVertex copy construction is disallowed.  There's no need for
@@ -561,8 +568,13 @@
  */
   SPFVertex& operator= (SPFVertex& v);
 
-  //friend std::ostream& operator<< (std::ostream& os, const ListOfIf_t& ifs);
-  //friend std::ostream& operator<< (std::ostream& os, const ListOfAddr_t& addrs);
+  /**
+   * \brief Stream insertion operator.
+   *
+   * \param os the reference to the output stream
+   * \param vs a list of SPFVertexes
+   * \returns the reference to the output stream
+   */
   friend std::ostream& operator<< (std::ostream& os, const SPFVertex::ListOfSPFVertex_t& vs);
 };
 
@@ -662,16 +674,35 @@
  */
   void Initialize ();
 
+  /**
+   * @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.
+   *
+   * @see GlobalRoutingLSA
+   * @param index the index associated with the LSA.
+   * @returns A pointer to the Link State Advertisement.
+   */
   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.
+   */
   uint32_t GetNumExtLSAs () const;
 
 
 private:
-  typedef std::map<Ipv4Address, GlobalRoutingLSA*> LSDBMap_t;
-  typedef std::pair<Ipv4Address, GlobalRoutingLSA*> LSDBPair_t;
+  typedef std::map<Ipv4Address, GlobalRoutingLSA*> LSDBMap_t; //!< container of IPv4 addresses / Link State Advertisements
+  typedef std::pair<Ipv4Address, GlobalRoutingLSA*> LSDBPair_t; //!< pair of IPv4 addresses / Link State Advertisements
 
-  LSDBMap_t m_database;
-  std::vector<GlobalRoutingLSA*> m_extdatabase;
+  LSDBMap_t m_database; //!< database of IPv4 addresses / Link State Advertisements
+  std::vector<GlobalRoutingLSA*> m_extdatabase; //!< database of External Link State Advertisements
 
 /**
  * @brief GlobalRouteManagerLSDB copy construction is disallowed.  There's no 
@@ -736,6 +767,7 @@
 /**
  * @brief Debugging routine; call the core SPF from the unit tests
  * @internal
+ * @param root the root node to start calculations
  */
   void DebugSPFCalculate (Ipv4Address root);
 
@@ -754,22 +786,184 @@
  */
   GlobalRouteManagerImpl& operator= (GlobalRouteManagerImpl& srmi);
 
-  SPFVertex* m_spfroot;
-  GlobalRouteManagerLSDB* m_lsdb;
+  SPFVertex* m_spfroot; //!< the root node
+  GlobalRouteManagerLSDB* m_lsdb; //!< the Link State DataBase (LSDB) of the Global Route Manager
+
+  /**
+   * \brief Test if a node is a stub, from an OSPF sense.
+   *
+   * If there is only one link of type 1 or 2, then a default route
+   * can safely be added to the next-hop router and SPF does not need
+   * to be run
+   *
+   * \param root the root node
+   * \returns true if the node is a stub
+   */
   bool CheckForStubNode (Ipv4Address root);
+
+  /**
+   * \brief Calculate the shortest path first (SPF) tree
+   *
+   * Equivalent to quagga ospf_spf_calculate
+   * \param root the root node
+   */
   void SPFCalculate (Ipv4Address root);
+
+  /**
+   * \brief Process Stub nodes
+   *
+   * Processing logic from RFC 2328, page 166 and quagga ospf_spf_process_stubs ()
+   * stub link records will exist for point-to-point interfaces and for
+   * broadcast interfaces for which no neighboring router can be found
+   *
+   * \param v vertex to be processed
+   */
   void SPFProcessStubs (SPFVertex* v);
+
+  /**
+   * \brief Process Autonomous Systems (AS) External LSA
+   *
+   * \param v vertex to be processed
+   * \param extlsa external LSA
+   */
   void ProcessASExternals (SPFVertex* v, GlobalRoutingLSA* extlsa);
-  void SPFNext (SPFVertex*, CandidateQueue&);
+
+  /**
+   * \brief Examine the links in v's LSA and update the list of candidates with any
+   *        vertices not already on the list
+   *
+   * \internal
+   *
+   * This method is derived from quagga ospf_spf_next ().  See RFC2328 Section
+   * 16.1 (2) for further details.
+   *
+   * We're passed a parameter \a v that is a vertex which is already in the SPF
+   * tree.  A vertex represents a router node.  We also get a reference to the
+   * SPF candidate queue, which is a priority queue containing the shortest paths
+   * to the networks we know about.
+   *
+   * We examine the links in v's LSA and update the list of candidates with any
+   * vertices not already on the list.  If a lower-cost path is found to a
+   * vertex already on the candidate list, store the new (lower) cost.
+   *
+   * \param v the vertex
+   * \param candidate the SPF candidate queue
+   */
+  void SPFNext (SPFVertex* v, CandidateQueue& candidate);
+
+  /**
+   * \brief Calculate nexthop from root through V (parent) to vertex W (destination)
+   *        with given distance from root->W.
+   *
+   * This method is derived from quagga ospf_nexthop_calculation() 16.1.1.
+   * For now, this is greatly simplified from the quagga code
+   *
+   * \param v the parent
+   * \param w the destination
+   * \param l the link record
+   * \param distance the target distance
+   * \returns 1 on success
+   */
   int SPFNexthopCalculation (SPFVertex* v, SPFVertex* w, 
                              GlobalRoutingLinkRecord* l, uint32_t distance);
+
+  /**
+   * \brief Adds a vertex to the list of children *in* each of its parents
+   *
+   * Derived from quagga ospf_vertex_add_parents ()
+   *
+   * This is a somewhat oddly named method (blame quagga).  Although you might
+   * expect it to add a parent *to* something, it actually adds a vertex
+   * to the list of children *in* each of its parents.
+   *
+   * Given a pointer to a vertex, it links back to the vertex's parent that it
+   * already has set and adds itself to that vertex's list of children.
+   *
+   * \param v the vertex
+   */
   void SPFVertexAddParent (SPFVertex* v);
+
+  /**
+   * \brief Search for a link between two vertexes.
+   *
+   * This method is derived from quagga ospf_get_next_link ()
+   *
+   * First search the Global Router Link Records of vertex \a v for one
+   * representing a point-to point link to vertex \a w.
+   *
+   * What is done depends on prev_link.  Contrary to appearances, prev_link just
+   * acts as a flag here.  If prev_link is NULL, we return the first Global
+   * Router Link Record we find that describes a point-to-point link from \a v
+   * to \a w.  If prev_link is not NULL, we return a Global Router Link Record
+   * representing a possible *second* link from \a v to \a w.
+   *
+   * \param v first vertex
+   * \param w second vertex
+   * \param prev_link the previous link in the list
+   * \returns the link's record
+   */
   GlobalRoutingLinkRecord* SPFGetNextLink (SPFVertex* v, SPFVertex* w, 
                                            GlobalRoutingLinkRecord* prev_link);
+
+  /**
+   * \brief Add a host route to the routing tables
+   *
+   *
+   * This method is derived from quagga ospf_intra_add_router ()
+   *
+   * This is where we are actually going to add the host routes to the routing
+   * tables of the individual nodes.
+   *
+   * The vertex passed as a parameter has just been added to the SPF tree.
+   * This vertex must have a valid m_root_oid, corresponding to the outgoing
+   * interface on the root router of the tree that is the first hop on the path
+   * to the vertex.  The vertex must also have a next hop address, corresponding
+   * to the next hop on the path to the vertex.  The vertex has an m_lsa field
+   * that has some number of link records.  For each point to point link record,
+   * the m_linkData is the local IP address of the link.  This corresponds to
+   * a destination IP address, reachable from the root, to which we add a host
+   * route.
+   *
+   * \param v the vertex
+   *
+   */
   void SPFIntraAddRouter (SPFVertex* v);
+
+  /**
+   * \brief Add a transit to the routing tables
+   *
+   * \param v the vertex
+   */
   void SPFIntraAddTransit (SPFVertex* v);
+
+  /**
+   * \brief Add a stub to the routing tables
+   *
+   * \param l the global routing link record
+   * \param v the vertex
+   */
   void SPFIntraAddStub (GlobalRoutingLinkRecord *l, SPFVertex* v);
+
+  /**
+   * \brief Add an external route to the routing tables
+   *
+   * \param extlsa the external LSA
+   * \param v the vertex
+   */
   void SPFAddASExternal (GlobalRoutingLSA *extlsa, SPFVertex *v);
+
+  /**
+   * \brief Return the interface number corresponding to a given IP address and mask
+   *
+   * This is a wrapper around GetInterfaceForPrefix(), but we first
+   * have to find the right node pointer to pass to that function.
+   * If no such interface is found, return -1 (note:  unit test framework
+   * for routing assumes -1 to be a legal return value)
+   *
+   * \param a the target IP address
+   * \param amask the target subnet mask
+   * \return the outgoing interface number
+   */
   int32_t FindOutgoingInterfaceId (Ipv4Address a, 
                                    Ipv4Mask amask = Ipv4Mask ("255.255.255.255"));
 };
diff -Naur ns-3.18.1/src/internet/model/global-router-interface.cc ns-3.19/src/internet/model/global-router-interface.cc
--- ns-3.18.1/src/internet/model/global-router-interface.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/global-router-interface.cc	2013-12-20 09:44:50.000000000 -0800
@@ -504,7 +504,8 @@
 //
 // ---------------------------------------------------------------------------
 
-NS_OBJECT_ENSURE_REGISTERED (GlobalRouter);
+NS_OBJECT_ENSURE_REGISTERED (GlobalRouter)
+  ;
 
 TypeId 
 GlobalRouter::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/global-router-interface.h ns-3.19/src/internet/model/global-router-interface.h
--- ns-3.18.1/src/internet/model/global-router-interface.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/global-router-interface.h	2013-12-20 09:44:50.000000000 -0800
@@ -559,9 +559,16 @@
  * proper position in the tree.
  */
   SPFStatus m_status;
-  uint32_t m_node_id;
+  uint32_t m_node_id; //!< node ID
 };
 
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param lsa the LSA
+ * \returns the reference to the output stream
+ */
 std::ostream& operator<< (std::ostream& os, GlobalRoutingLSA& lsa);
 
 /**
@@ -576,11 +583,10 @@
 class GlobalRouter : public Object
 {
 public:
-/**
- * @brief The Interface ID of the Global Router interface.
- *
- * @see Object::GetObject ()
- */
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
 /**
@@ -588,8 +594,16 @@
  */
   GlobalRouter ();
 
-
+  /**
+   * \brief Set the specific Global Routing Protocol to be used
+   * \param routing the routing protocol
+   */
   void SetRoutingProtocol (Ptr<Ipv4GlobalRouting> routing);
+
+  /**
+   * \brief Get the specific Global Routing Protocol used
+   * \returns the routing protocol
+   */
   Ptr<Ipv4GlobalRouting> GetRoutingProtocol (void);
 
 /**
@@ -709,31 +723,129 @@
 
 private:
   virtual ~GlobalRouter ();
+
+  /**
+   * \brief Clear list of LSAs
+   */
   void ClearLSAs (void);
 
+  /**
+   * \brief Link through the given channel and find the net device that's on the other end.
+   *
+   * This only makes sense with a point-to-point channel.
+   *
+   * \param nd outgoing NetDevice
+   * \param ch channel
+   * \returns the NetDevice on the other end
+   */
   Ptr<NetDevice> GetAdjacent (Ptr<NetDevice> nd, Ptr<Channel> ch) const;
+
+  /**
+   * \brief Given a node and a net device, find an IPV4 interface index that corresponds
+   *        to that net device.
+   *
+   * This function may fail for various reasons.  If a node
+   * does not have an internet stack (for example if it is a bridge) we won't have
+   * an IPv4 at all.  If the node does have a stack, but the net device in question
+   * is bridged, there will not be an interface associated directly with the device.
+   *
+   * \param node the node
+   * \param nd outgoing NetDevice
+   * \param index the IPV4 interface index
+   * \returns true on success
+   */
   bool FindInterfaceForDevice (Ptr<Node> node, Ptr<NetDevice> nd, uint32_t &index) const;
+
+  /**
+   * \brief Finds a designated router
+   *
+   * Given a local net device, we need to walk the channel to which the net device is
+   * attached and look for nodes with GlobalRouter interfaces on them (one of them
+   * will be us).  Of these, the router with the lowest IP address on the net device
+   * connecting to the channel becomes the designated router for the link.
+   *
+   * \param ndLocal local NetDevice to scan
+   * \param allowRecursion Recursively look for routers down bridge port
+   * \returns the IP address of the designated router
+   */
   Ipv4Address FindDesignatedRouterForLink (Ptr<NetDevice> ndLocal, bool allowRecursion) const;
+
+  /**
+   * \brief Checks for the presence of another router on the NetDevice
+   *
+   * Given a node and an attached net device, take a look off in the channel to
+   * which the net device is attached and look for a node on the other side
+   * that has a GlobalRouter interface aggregated.  Life gets more complicated
+   * when there is a bridged net device on the other side.
+   *
+   * \param nd NetDevice to scan
+   * \param allowRecursion Recursively look for routers down bridge port
+   * \returns true if a router is found
+   */
   bool AnotherRouterOnLink (Ptr<NetDevice> nd, bool allowRecursion) const;
+
+  /**
+   * \brief Process a generic broadcast link
+   *
+   * \param nd the NetDevice
+   * \param pLSA the Global LSA
+   * \param c the returned NetDevice container
+   */
   void ProcessBroadcastLink (Ptr<NetDevice> nd, GlobalRoutingLSA *pLSA, NetDeviceContainer &c);
+
+  /**
+   * \brief Process a single broadcast link
+   *
+   * \param nd the NetDevice
+   * \param pLSA the Global LSA
+   * \param c the returned NetDevice container
+   */
   void ProcessSingleBroadcastLink (Ptr<NetDevice> nd, GlobalRoutingLSA *pLSA, NetDeviceContainer &c);
+
+  /**
+   * \brief Process a bridged broadcast link
+   *
+   * \param nd the NetDevice
+   * \param pLSA the Global LSA
+   * \param c the returned NetDevice container
+   */
   void ProcessBridgedBroadcastLink (Ptr<NetDevice> nd, GlobalRoutingLSA *pLSA, NetDeviceContainer &c);
 
+  /**
+   * \brief Process a point to point link
+   *
+   * \param ndLocal the NetDevice
+   * \param pLSA the Global LSA
+   */
   void ProcessPointToPointLink (Ptr<NetDevice> ndLocal, GlobalRoutingLSA *pLSA);
+
+  /**
+   * \brief Build one NetworkLSA for each net device talking to a network that we are the
+   * designated router for.
+   *
+   * \param c the devices.
+   */
   void BuildNetworkLSAs (NetDeviceContainer c);
+
+  /**
+   * \brief Decide whether or not a given net device is being bridged by a BridgeNetDevice.
+   *
+   * \param nd the NetDevice
+   * \returns the BridgeNetDevice smart pointer or null if not found
+   */
   Ptr<BridgeNetDevice> NetDeviceIsBridged (Ptr<NetDevice> nd) const;
 
 
-  typedef std::list<GlobalRoutingLSA*> ListOfLSAs_t;
-  ListOfLSAs_t m_LSAs;
+  typedef std::list<GlobalRoutingLSA*> ListOfLSAs_t; //!< container for the GlobalRoutingLSAs
+  ListOfLSAs_t m_LSAs; //!< database of GlobalRoutingLSAs
 
-  Ipv4Address m_routerId;
-  Ptr<Ipv4GlobalRouting> m_routingProtocol;
+  Ipv4Address m_routerId; //!< router ID (its IPv4 address)
+  Ptr<Ipv4GlobalRouting> m_routingProtocol; //!< the Ipv4GlobalRouting in use
 
-  typedef std::list<Ipv4RoutingTableEntry *> InjectedRoutes;
-  typedef std::list<Ipv4RoutingTableEntry *>::const_iterator InjectedRoutesCI;
-  typedef std::list<Ipv4RoutingTableEntry *>::iterator InjectedRoutesI;
-  InjectedRoutes m_injectedRoutes; // Routes we are exporting
+  typedef std::list<Ipv4RoutingTableEntry *> InjectedRoutes; //!< container of Ipv4RoutingTableEntry
+  typedef std::list<Ipv4RoutingTableEntry *>::const_iterator InjectedRoutesCI; //!< Const Iterator to container of Ipv4RoutingTableEntry
+  typedef std::list<Ipv4RoutingTableEntry *>::iterator InjectedRoutesI; //!< Iterator to container of Ipv4RoutingTableEntry
+  InjectedRoutes m_injectedRoutes; //!< Routes we are exporting
 
   // inherited from Object
   virtual void DoDispose (void);
diff -Naur ns-3.18.1/src/internet/model/icmpv4.cc ns-3.19/src/internet/model/icmpv4.cc
--- ns-3.18.1/src/internet/model/icmpv4.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/icmpv4.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,8 @@
  *        Icmpv4Header
  ********************************************************/
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv4Header);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv4Header)
+  ;
 
 TypeId 
 Icmpv4Header::GetTypeId (void)
@@ -133,7 +134,8 @@
  *        Icmpv4Echo
  ********************************************************/
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv4Echo);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv4Echo)
+  ;
 
 void 
 Icmpv4Echo::SetIdentifier (uint16_t id)
@@ -270,7 +272,8 @@
  *        Icmpv4DestinationUnreachable
  ********************************************************/
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv4DestinationUnreachable);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv4DestinationUnreachable)
+  ;
 
 TypeId 
 Icmpv4DestinationUnreachable::GetTypeId (void)
@@ -393,7 +396,8 @@
  *        Icmpv4TimeExceeded
  ********************************************************/
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv4TimeExceeded);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv4TimeExceeded)
+  ;
 
 TypeId 
 Icmpv4TimeExceeded::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/icmpv4.h ns-3.19/src/internet/model/icmpv4.h
--- ns-3.18.1/src/internet/model/icmpv4.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/icmpv4.h	2013-12-20 09:44:50.000000000 -0800
@@ -40,16 +40,42 @@
     TIME_EXCEEDED = 11
   };
 
+  /**
+   * Enables ICMP Checksum calculation
+   */
   void EnableChecksum (void);
+
+  /**
+   * Set ICMP type
+   * \param type the ICMP type
+   */
   void SetType (uint8_t type);
+
+  /**
+   * Set ICMP code
+   * \param code the ICMP code
+   */
   void SetCode (uint8_t code);
 
+  /**
+   * Get ICMP type
+   * \returns the ICMP type
+   */
   uint8_t GetType (void) const;
+  /**
+   * Get ICMP code
+   * \returns the ICMP code
+   */
   uint8_t GetCode (void) const;
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   Icmpv4Header ();
   virtual ~Icmpv4Header ();
+
   virtual TypeId GetInstanceTypeId (void) const;
   virtual uint32_t GetSerializedSize (void) const;
   virtual void Serialize (Buffer::Iterator start) const;
@@ -57,23 +83,56 @@
   virtual void Print (std::ostream &os) const;
 
 private:
-  uint8_t m_type;
-  uint8_t m_code;
-  bool m_calcChecksum;
+  uint8_t m_type; //!< ICMP type
+  uint8_t m_code; //!< ICMP code
+  bool m_calcChecksum;  //!< true if checksum is calculated
 };
 
 class Icmpv4Echo : public Header
 {
 public:
+  /**
+   * \brief Set the Echo identifier
+   * \param id the identifier
+   */
   void SetIdentifier (uint16_t id);
+  /**
+   * \brief Set the Echo sequence number
+   * \param seq the sequence number
+   */
   void SetSequenceNumber (uint16_t seq);
+  /**
+   * \brief Set the Echo data
+   * \param data the data
+   */
   void SetData (Ptr<const Packet> data);
+  /**
+   * \brief Get the Echo identifier
+   * \returns the identifier
+   */
   uint16_t GetIdentifier (void) const;
+  /**
+   * \brief Get the Echo sequence number
+   * \returns the sequence number
+   */
   uint16_t GetSequenceNumber (void) const;
+  /**
+   * \brief Get the Echo data size
+   * \returns the data size
+   */
   uint32_t GetDataSize (void) const;
+  /**
+   * \brief Get the Echo data
+   * \param payload the data (filled)
+   * \returns the data length
+   */
   uint32_t GetData (uint8_t payload[]) const;
 
 
+  /**
+   * Get ICMP type
+   * \returns the ICMP type
+   */
   static TypeId GetTypeId (void);
   Icmpv4Echo ();
   virtual ~Icmpv4Echo ();
@@ -83,10 +142,10 @@
   virtual uint32_t Deserialize (Buffer::Iterator start);
   virtual void Print (std::ostream &os) const;
 private:
-  uint16_t m_identifier;
-  uint16_t m_sequence;
-  uint8_t *m_data;
-  uint32_t m_dataSize;
+  uint16_t m_identifier; //!< identifier
+  uint16_t m_sequence;   //!< sequence number
+  uint8_t *m_data;       //!< data
+  uint32_t m_dataSize;   //!< data size
 };
 
 class Icmpv4DestinationUnreachable : public Header
@@ -100,17 +159,46 @@
     FRAG_NEEDED = 4,
     SOURCE_ROUTE_FAILED = 5
   };
+
+  /**
+   * Get ICMP type
+   * \returns the ICMP type
+   */
   static TypeId GetTypeId (void);
   Icmpv4DestinationUnreachable ();
   virtual ~Icmpv4DestinationUnreachable ();
 
+  /**
+   * \brief Set the next hop MTU
+   * \param mtu the MTU
+   */
   void SetNextHopMtu (uint16_t mtu);
+  /**
+   * \brief Get the next hop MTU
+   * \returns the MTU
+   */
   uint16_t GetNextHopMtu (void) const;
 
+  /**
+   * \brief Set the ICMP carried data
+   * \param data the data
+   */
   void SetData (Ptr<const Packet> data);
+  /**
+   * \brief Set the ICMP carried IPv4 header
+   * \param header the header
+   */
   void SetHeader (Ipv4Header header);
 
+  /**
+   * \brief Get the ICMP carried data
+   * \param payload the data (filled)
+   */
   void GetData (uint8_t payload[8]) const;
+  /**
+   * \brief Get the ICMP carried IPv4 header
+   * \returns the header
+   */
   Ipv4Header GetHeader (void) const;
 
 private:
@@ -120,9 +208,9 @@
   virtual uint32_t Deserialize (Buffer::Iterator start);
   virtual void Print (std::ostream &os) const;
 private:
-  uint16_t m_nextHopMtu;
-  Ipv4Header m_header;
-  uint8_t m_data[8];
+  uint16_t m_nextHopMtu; //!< next hop MTU
+  Ipv4Header m_header;   //!< carried IPv4 header
+  uint8_t m_data[8];     //!< carried data
 };
 
 
@@ -134,12 +222,32 @@
     FRAGMENT_REASSEMBLY = 1
   };
 
+  /**
+   * \brief Get the ICMP carried data
+   * \param data the data
+   */
   void SetData (Ptr<const Packet> data);
+  /**
+   * \brief Set the ICMP carried IPv4 header
+   * \param header the header
+   */
   void SetHeader (Ipv4Header header);
 
+  /**
+   * \brief Get the ICMP carried data
+   * \param payload the data (filled)
+   */
   void GetData (uint8_t payload[8]) const;
+  /**
+   * \brief Get the ICMP carried IPv4 header
+   * \returns the header
+   */
   Ipv4Header GetHeader (void) const;
 
+  /**
+   * Get ICMP type
+   * \returns the ICMP type
+   */
   static TypeId GetTypeId (void);
   Icmpv4TimeExceeded ();
   virtual ~Icmpv4TimeExceeded ();
@@ -150,8 +258,8 @@
   virtual void Print (std::ostream &os) const;
 
 private:
-  Ipv4Header m_header;
-  uint8_t m_data[8];
+  Ipv4Header m_header;   //!< carried IPv4 header
+  uint8_t m_data[8];     //!< carried data
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/icmpv4-l4-protocol.cc ns-3.19/src/internet/model/icmpv4-l4-protocol.cc
--- ns-3.18.1/src/internet/model/icmpv4-l4-protocol.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/icmpv4-l4-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -11,9 +11,11 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Icmpv4L4Protocol");
+NS_LOG_COMPONENT_DEFINE ("Icmpv4L4Protocol")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv4L4Protocol);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv4L4Protocol)
+  ;
 
 // see rfc 792
 const uint8_t Icmpv4L4Protocol::PROT_NUMBER = 1;
diff -Naur ns-3.18.1/src/internet/model/icmpv4-l4-protocol.h ns-3.19/src/internet/model/icmpv4-l4-protocol.h
--- ns-3.18.1/src/internet/model/icmpv4-l4-protocol.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/icmpv4-l4-protocol.h	2013-12-20 09:44:50.000000000 -0800
@@ -14,25 +14,76 @@
 class Icmpv4L4Protocol : public IpL4Protocol
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
-  static const uint8_t PROT_NUMBER;
+  static const uint8_t PROT_NUMBER; //!< ICMP protocol number (0x1)
 
   Icmpv4L4Protocol ();
   virtual ~Icmpv4L4Protocol ();
 
+  /**
+   * \brief Set the node the protocol is associated with.
+   * \param node the node
+   */
   void SetNode (Ptr<Node> node);
 
+  /**
+   * Get the protocol number
+   * \returns the protocol number
+   */
   static uint16_t GetStaticProtocolNumber (void);
+
+  /**
+   * Get the protocol number
+   * \returns the protocol number
+   */
   virtual int GetProtocolNumber (void) const;
+
+  /**
+   * \brief Receive method.
+   * \param p the packet
+   * \param header the IPv4 header
+   * \param incomingInterface the interface from which the packet is coming
+   * \returns the receive status
+   */
   virtual enum IpL4Protocol::RxStatus Receive (Ptr<Packet> p,
-                                                 Ipv4Header const &header,
-                                                 Ptr<Ipv4Interface> incomingInterface);
+                                               Ipv4Header const &header,
+                                               Ptr<Ipv4Interface> incomingInterface);
+
+  /**
+   * \brief Receive method.
+   * \param p the packet
+   * \param header the IPv6 header
+   * \param incomingInterface the interface from which the packet is coming
+   * \returns the receive status
+   */
   virtual enum IpL4Protocol::RxStatus Receive (Ptr<Packet> p,
-                                                 Ipv6Header const &header,
-                                                 Ptr<Ipv6Interface> incomingInterface);
+                                               Ipv6Header const &header,
+                                               Ptr<Ipv6Interface> incomingInterface);
 
+  /**
+   * \brief Send a Destination Unreachable - Fragmentation needed ICMP error
+   * \param header the original IP header
+   * \param orgData the original packet
+   * \param nextHopMtu the next hop MTU
+   */
   void SendDestUnreachFragNeeded (Ipv4Header header, Ptr<const Packet> orgData, uint16_t nextHopMtu);
+
+  /**
+   * \brief Send a Time Exceeded ICMP error
+   * \param header the original IP header
+   * \param orgData the original packet
+   */
   void SendTimeExceededTtl (Ipv4Header header, Ptr<const Packet> orgData);
+
+  /**
+   * \brief Send a Time Exceeded ICMP error
+   * \param header the original IP header
+   * \param orgData the original packet
+   */
   void SendDestUnreachPort (Ipv4Header header, Ptr<const Packet> orgData);
 
   // From IpL4Protocol
@@ -48,30 +99,86 @@
    */
   virtual void NotifyNewAggregate ();
 private:
+  /**
+   * \brief Handles an incoming ICMP Echo packet
+   * \param p the packet
+   * \param header the IP header
+   * \param source the source address
+   * \param destination the destination address
+   */
   void HandleEcho (Ptr<Packet> p,
                    Icmpv4Header header,
                    Ipv4Address source,
                    Ipv4Address destination);
+  /**
+   * \brief Handles an incoming ICMP Destination Unreachable packet
+   * \param p the packet
+   * \param header the IP header
+   * \param source the source address
+   * \param destination the destination address
+   */
   void HandleDestUnreach (Ptr<Packet> p,
                           Icmpv4Header header,
                           Ipv4Address source,
                           Ipv4Address destination);
+  /**
+   * \brief Handles an incoming ICMP Time Exceeded packet
+   * \param p the packet
+   * \param icmp the ICMP header
+   * \param source the source address
+   * \param destination the destination address
+   */
   void HandleTimeExceeded (Ptr<Packet> p,
                            Icmpv4Header icmp,
                            Ipv4Address source,
                            Ipv4Address destination);
+  /**
+   * \brief Send an ICMP Destination Unreachable packet
+   *
+   * \param header the original IP header
+   * \param orgData the original packet
+   * \param code the ICMP code
+   * \param nextHopMtu the next hop MTU
+   */
   void SendDestUnreach (Ipv4Header header, Ptr<const Packet> orgData, 
                         uint8_t code, uint16_t nextHopMtu);
+  /**
+   * \brief Send a generic ICMP packet
+   *
+   * \param packet the packet
+   * \param dest the destination
+   * \param type the ICMP type
+   * \param code the ICMP code
+   */
   void SendMessage (Ptr<Packet> packet, Ipv4Address dest, uint8_t type, uint8_t code);
+  /**
+   * \brief Send a generic ICMP packet
+   *
+   * \param packet the packet
+   * \param source the source
+   * \param dest the destination
+   * \param type the ICMP type
+   * \param code the ICMP code
+   * \param route the route to be used
+   */
   void SendMessage (Ptr<Packet> packet, Ipv4Address source, Ipv4Address dest, uint8_t type, uint8_t code, Ptr<Ipv4Route> route);
+  /**
+   * \brief Forward the message to an L4 protocol
+   *
+   * \param source the source
+   * \param icmp the ICMP header
+   * \param info info data (e.g., the target MTU)
+   * \param ipHeader the IP header carried by ICMP
+   * \param payload payload chunk carried by ICMP
+   */
   void Forward (Ipv4Address source, Icmpv4Header icmp,
                 uint32_t info, Ipv4Header ipHeader,
                 const uint8_t payload[8]);
 
   virtual void DoDispose (void);
 
-  Ptr<Node> m_node;
-  IpL4Protocol::DownTargetCallback m_downTarget;
+  Ptr<Node> m_node; //!< the node this protocol is associated with
+  IpL4Protocol::DownTargetCallback m_downTarget; //!< callback to Ipv4::Send
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/icmpv6-header.cc ns-3.19/src/internet/model/icmpv6-header.cc
--- ns-3.18.1/src/internet/model/icmpv6-header.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/icmpv6-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 namespace ns3
 {
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6Header);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6Header)
+  ;
 
 TypeId Icmpv6Header::GetTypeId ()
 {
@@ -172,7 +173,8 @@
   m_checksum = ~(it.CalculateIpChecksum (40));
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6NS);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6NS)
+  ;
 
 Icmpv6NS::Icmpv6NS ()
 {
@@ -294,7 +296,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6NA);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6NA)
+  ;
 
 TypeId Icmpv6NA::GetTypeId ()
 {
@@ -477,7 +480,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6RA);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6RA)
+  ;
 
 TypeId Icmpv6RA::GetTypeId ()
 {
@@ -696,7 +700,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6RS);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6RS)
+  ;
 
 TypeId Icmpv6RS::GetTypeId ()
 {
@@ -786,7 +791,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6Redirection);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6Redirection)
+  ;
 
 TypeId Icmpv6Redirection::GetTypeId ()
 {
@@ -916,7 +922,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6Echo);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6Echo)
+  ;
 
 TypeId Icmpv6Echo::GetTypeId ()
 {
@@ -1033,7 +1040,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6DestinationUnreachable);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6DestinationUnreachable)
+  ;
 
 TypeId Icmpv6DestinationUnreachable::GetTypeId ()
 {
@@ -1130,7 +1138,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6TooBig);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6TooBig)
+  ;
 
 TypeId Icmpv6TooBig::GetTypeId ()
 {
@@ -1240,7 +1249,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6TimeExceeded);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6TimeExceeded)
+  ;
 
 TypeId Icmpv6TimeExceeded::GetTypeId ()
 {
@@ -1339,7 +1349,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6ParameterError);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6ParameterError)
+  ;
 
 TypeId Icmpv6ParameterError::GetTypeId ()
 {
@@ -1449,7 +1460,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionHeader);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionHeader)
+  ;
 
 TypeId Icmpv6OptionHeader::GetTypeId ()
 {
@@ -1527,7 +1539,8 @@
   NS_LOG_FUNCTION (this << &start);
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionMtu);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionMtu)
+  ;
 
 TypeId Icmpv6OptionMtu::GetTypeId ()
 {
@@ -1623,7 +1636,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionPrefixInformation);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionPrefixInformation)
+  ;
 
 TypeId Icmpv6OptionPrefixInformation::GetTypeId ()
 {
@@ -1796,7 +1810,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionLinkLayerAddress);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionLinkLayerAddress)
+  ;
 
 TypeId Icmpv6OptionLinkLayerAddress::GetTypeId ()
 {
@@ -1903,7 +1918,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionRedirected);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionRedirected)
+  ;
 
 TypeId Icmpv6OptionRedirected::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/internet/model/icmpv6-l4-protocol.cc ns-3.19/src/internet/model/icmpv6-l4-protocol.cc
--- ns-3.18.1/src/internet/model/icmpv6-l4-protocol.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/icmpv6-l4-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -39,9 +39,11 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6L4Protocol);
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6L4Protocol)
+  ;
 
-NS_LOG_COMPONENT_DEFINE ("Icmpv6L4Protocol");
+NS_LOG_COMPONENT_DEFINE ("Icmpv6L4Protocol")
+  ;
 
 const uint8_t Icmpv6L4Protocol::PROT_NUMBER = 58;
 
diff -Naur ns-3.18.1/src/internet/model/icmpv6-l4-protocol.h ns-3.19/src/internet/model/icmpv6-l4-protocol.h
--- ns-3.18.1/src/internet/model/icmpv6-l4-protocol.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/icmpv6-l4-protocol.h	2013-12-20 09:44:50.000000000 -0800
@@ -338,6 +338,7 @@
    * \param p the packet
    * \param header the IPv4 header
    * \param interface the interface from which the packet is coming
+   * \returns the receive status
    */
   virtual enum IpL4Protocol::RxStatus Receive (Ptr<Packet> p,
                                                Ipv4Header const &header,
@@ -346,9 +347,9 @@
   /**
    * \brief Receive method.
    * \param p the packet
-   * \param src source address
-   * \param dst destination address
+   * \param header the IPv6 header
    * \param interface the interface from which the packet is coming
+   * \returns the receive status
    */
   virtual enum IpL4Protocol::RxStatus Receive (Ptr<Packet> p,
                                                Ipv6Header const &header,
@@ -364,11 +365,14 @@
 
   /**
    * \brief Lookup in the ND cache for the IPv6 address
+   *
+   * \note Unlike other Lookup method, it does not send NS request!
+   *
    * \param dst destination address
    * \param device device
    * \param cache the neighbor cache
    * \param hardwareDestination hardware address
-   * \note Unlike other Lookup method, it does not send NS request!
+   * \return true if the address is in the ND cache, the hardwareDestination is updated.
    */
   bool Lookup (Ipv6Address dst, Ptr<NetDevice> device, Ptr<NdiscCache> cache, Address* hardwareDestination);
 
@@ -424,7 +428,7 @@
   virtual void DoDispose ();
 
 private:
-  typedef std::list<Ptr<NdiscCache> > CacheList;
+  typedef std::list<Ptr<NdiscCache> > CacheList; //!< container of NdiscCaches
 
   /**
    * \brief The node.
@@ -560,6 +564,7 @@
   /**
    * \brief Get the cache corresponding to the device.
    * \param device the device
+   * \returns the NdiscCache associated with the device
    */
   Ptr<NdiscCache> FindCache (Ptr<NetDevice> device);
 
@@ -570,7 +575,7 @@
   virtual IpL4Protocol::DownTargetCallback GetDownTarget (void) const;
   virtual IpL4Protocol::DownTargetCallback6 GetDownTarget6 (void) const;
 
-  IpL4Protocol::DownTargetCallback6 m_downTarget;
+  IpL4Protocol::DownTargetCallback6 m_downTarget; //!< callback to Ipv6::Send
 
 };
 
diff -Naur ns-3.18.1/src/internet/model/ip-l4-protocol.cc ns-3.19/src/internet/model/ip-l4-protocol.cc
--- ns-3.18.1/src/internet/model/ip-l4-protocol.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ip-l4-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -29,7 +29,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (IpL4Protocol);
+NS_OBJECT_ENSURE_REGISTERED (IpL4Protocol)
+  ;
 
 TypeId 
 IpL4Protocol::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/ip-l4-protocol.h ns-3.19/src/internet/model/ip-l4-protocol.h
--- ns-3.18.1/src/internet/model/ip-l4-protocol.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ip-l4-protocol.h	2013-12-20 09:44:50.000000000 -0800
@@ -47,6 +47,9 @@
 class IpL4Protocol : public Object
 {
 public:
+  /**
+   * \brief Rx status codes
+   */
   enum RxStatus {
     RX_OK,
     RX_CSUM_FAILED,
@@ -54,6 +57,10 @@
     RX_ENDPOINT_UNREACH
   };
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   virtual ~IpL4Protocol ();
@@ -64,21 +71,29 @@
   virtual int GetProtocolNumber (void) const = 0;
 
   /**
+   * \brief Called from lower-level layers to send the packet up in the stack.
    * \param p packet to forward up
    * \param header IPv4 Header information
    * \param incomingInterface the Ipv4Interface on which the packet arrived
-   * 
-   * Called from lower-level layers to send the packet up
-   * in the stack. 
+   * \returns Rx status code
    */
   virtual enum RxStatus Receive (Ptr<Packet> p,
                                  Ipv4Header const &header,
                                  Ptr<Ipv4Interface> incomingInterface) = 0;
+
+  /**
+   * \brief Called from lower-level layers to send the packet up in the stack.
+   * \param p packet to forward up
+   * \param header IPv6 Header information
+   * \param incomingInterface the Ipv6Interface on which the packet arrived
+   * \returns Rx status code
+   */
   virtual enum RxStatus Receive (Ptr<Packet> p,
                                  Ipv6Header const &header,
                                  Ptr<Ipv6Interface> incomingInterface) = 0;
 
   /**
+   * \brief Called from lower-level layers to send the ICMP packet up in the stack.
    * \param icmpSource the source address of the icmp message
    * \param icmpTtl the ttl of the icmp message
    * \param icmpType the 'type' field of the icmp message
@@ -89,35 +104,74 @@
    *        the icmp message
    * \param payloadDestination the destination address of the packet which
    *        triggered the icmp message.
-   * \param payload the first 8 bytes of the udp header of the packet
+   * \param payload the first 8 bytes of the packet payload
    *        which triggered the icmp message.
    */
   virtual void ReceiveIcmp (Ipv4Address icmpSource, uint8_t icmpTtl,
                             uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo,
                             Ipv4Address payloadSource, Ipv4Address payloadDestination,
                             const uint8_t payload[8]);
+
+
+  /**
+   * \brief Called from lower-level layers to send the ICMPv6 packet up in the stack.
+   * \param icmpSource the source address of the icmp message
+   * \param icmpTtl the ttl of the icmp message
+   * \param icmpType the 'type' field of the icmp message
+   * \param icmpCode the 'code' field of the icmp message
+   * \param icmpInfo extra information dependent on the icmp message
+   *        generated by Icmpv6L4Protocol
+   * \param payloadSource the source address of the packet which triggered
+   *        the icmp message
+   * \param payloadDestination the destination address of the packet which
+   *        triggered the icmp message.
+   * \param payload the first 8 bytes of the packet payload
+   *        which triggered the icmp message.
+   */
   virtual void ReceiveIcmp (Ipv6Address icmpSource, uint8_t icmpTtl,
                             uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo,
                             Ipv6Address payloadSource, Ipv6Address payloadDestination,
                             const uint8_t payload[8]);
 
+  /**
+   * \brief callback to send packets over IPv4
+   */
   typedef Callback<void,Ptr<Packet>, Ipv4Address, Ipv4Address, uint8_t, Ptr<Ipv4Route> > DownTargetCallback;
+  /**
+   * \brief callback to send packets over IPv6
+   */
   typedef Callback<void,Ptr<Packet>, Ipv6Address, Ipv6Address, uint8_t, Ptr<Ipv6Route> > DownTargetCallback6;
+
   /**
    * This method allows a caller to set the current down target callback
-   * set for this L4 protocol
+   * set for this L4 protocol (IPv4 case)
    *
    * \param cb current Callback for the L4 protocol
    */
   virtual void SetDownTarget (DownTargetCallback cb) = 0;
+
+  /**
+   * This method allows a caller to set the current down target callback
+   * set for this L4 protocol (IPv6 case)
+   *
+   * \param cb current Callback for the L4 protocol
+   */
   virtual void SetDownTarget6 (DownTargetCallback6 cb) = 0;
+
   /**
    * This method allows a caller to get the current down target callback
-   * set for this L4 protocol, for
+   * set for this L4 protocol (IPv4 case)
    *
    * \return current Callback for the L4 protocol
    */
   virtual DownTargetCallback GetDownTarget (void) const = 0;
+
+  /**
+   * This method allows a caller to get the current down target callback
+   * set for this L4 protocol (IPv6 case)
+   *
+   * \return current Callback for the L4 protocol
+   */
   virtual DownTargetCallback6 GetDownTarget6 (void) const = 0;
 };
 
diff -Naur ns-3.18.1/src/internet/model/ipv4-address-generator.cc ns-3.19/src/internet/model/ipv4-address-generator.cc
--- ns-3.18.1/src/internet/model/ipv4-address-generator.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-address-generator.cc	2013-12-20 09:44:50.000000000 -0800
@@ -27,53 +27,160 @@
 
 namespace ns3 {
 
+/**
+ * \internal
+ * \ingroup address
+ *
+ * \brief Implementation class of Ipv4AddressGenerator
+ * This generator assigns addresses sequentially from a provided
+ * network address; used in topology code. It also keeps track of all
+ * addresses assigned to perform duplicate detection.
+ */
 class Ipv4AddressGeneratorImpl
 {
 public:
   Ipv4AddressGeneratorImpl ();
   virtual ~Ipv4AddressGeneratorImpl ();
 
+  /**
+   * \internal
+   * \brief Initialise the base network, mask and address for the generator
+   *
+   * The first call to NextAddress() or GetAddress() will return the
+   * value passed in.
+   *
+   * \param net The network for the base Ipv4Address
+   * \param mask The network mask of the base Ipv4Address
+   * \param addr The base address used for initialization
+   */
   void Init (const Ipv4Address net, const Ipv4Mask mask, 
              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
+   * network
+   *
+   * \param mask The Ipv4Mask for the current network
+   * \returns the IPv4 address of the current network
+   */
   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
+   * is changed before returning the new network address.
+   *
+   * This also resets the address to the base address that was
+   * used for initialization.
+   *
+   * \param mask The Ipv4Mask used to set the next network
+   * \returns the IPv4 address of the next network
+   */
   Ipv4Address NextNetwork (const Ipv4Mask mask);
 
+  /**
+   * \internal
+   * \brief Set the address for the given mask
+   *
+   * \param addr The address to set for the current mask
+   * \param mask The Ipv4Mask whose address is to be set
+   */
   void InitAddress (const Ipv4Address addr, const Ipv4Mask mask);
-  Ipv4Address GetAddress (const Ipv4Mask mask) const;
+
+  /**
+   * \internal
+   * \brief Allocate the next Ipv4Address for the configured network and mask
+   *
+   * This operation is a post-increment, meaning that the first address
+   * allocated will be the one that was initially configured.
+   *
+   * \param mask The Ipv4Mask for the current network
+   * \returns the IPv4 address
+   */
   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
+   * address that will be allocated upon NextAddress ()
+   *
+   * \param mask The Ipv4Mask for the current network
+   * \returns the IPv4 address
+   */
+  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
+   * to make use of this class's ability to track duplicates.  AddAllocated
+   * is always called internally for any address generated by NextAddress ()
+   *
+   * \param addr The Ipv4Address to be added to the list of Ipv4 entries
+   * \returns true on success
+   */
   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;
-  static const uint32_t MOST_SIGNIFICANT_BIT = 0x80000000;
+  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
 
+  /**
+   * \internal
+   * \brief Create an index number for the network mask
+   * \param mask the mask to index
+   * \returns an index
+   */
   uint32_t MaskToIndex (Ipv4Mask mask) const;
 
+  /**
+   * \internal
+   * \brief This class holds the state for a given network
+   */
   class NetworkState
   {
 public:
-    uint32_t mask;
-    uint32_t shift;
-    uint32_t network;
-    uint32_t addr;
-    uint32_t addrMax;
+    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
   };
 
-  NetworkState m_netTable[N_BITS];
+  NetworkState m_netTable[N_BITS]; //!< /internal the available networks
 
+  /**
+   * \internal
+   * \brief This class holds the allocated addresses
+   */
   class Entry
   {
 public:
-    uint32_t addrLow;
-    uint32_t addrHigh;
+    uint32_t addrLow;  //!< /internal the lowest allocated address
+    uint32_t addrHigh; //!< /internal the highest allocated address
   };
 
-  std::list<Entry> m_entries;
-  bool m_test;
+  std::list<Entry> m_entries; //!< /internal contained of allocated addresses
+  bool m_test; //!< /internal test mode (if true)
 };
 
 Ipv4AddressGeneratorImpl::Ipv4AddressGeneratorImpl () 
diff -Naur ns-3.18.1/src/internet/model/ipv4-address-generator.h ns-3.19/src/internet/model/ipv4-address-generator.h
--- ns-3.18.1/src/internet/model/ipv4-address-generator.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-address-generator.h	2013-12-20 09:44:50.000000000 -0800
@@ -28,22 +28,103 @@
  *
  * \brief This generator assigns addresses sequentially from a provided
  * network address; used in topology code.
+ *
+ * \note BEWARE: this class acts as a Singleton.
+ * In other terms, two different instances of Ipv4AddressGenerator will
+ * pick IPv4 numbers from the same pool. Changing the network in one of them
+ * will also change the network in the other instances.
+ *
  */
 class Ipv4AddressGenerator {
 public:
+  /**
+   * \brief Initialise the base network, mask and address for the generator
+   *
+   * The first call to NextAddress() or GetAddress() will return the
+   * value passed in.
+   *
+   * \param net The network for the base Ipv4Address
+   * \param mask The network mask of the base Ipv4Address
+   * \param addr The base address used for initialization
+   */
   static void Init (const Ipv4Address net, const Ipv4Mask mask, 
                     const Ipv4Address addr = "0.0.0.1");
 
+  /**
+   * \brief Get the next network according to the given Ipv4Mask
+   *
+   * This operation is a pre-increment, meaning that the internal state
+   * is changed before returning the new network address.
+   *
+   * This also resets the address to the base address that was
+   * used for initialization.
+   *
+   * \param mask The Ipv4Mask used to set the next network
+   * \returns the IPv4 address of the next network
+   */
   static Ipv4Address NextNetwork (const Ipv4Mask mask);
+
+  /**
+   * \brief Get the current network of the given Ipv4Mask
+   *
+   * Does not change the internal state; this just peeks at the current
+   * network
+   *
+   * \param mask The Ipv4Mask for the current network
+   * \returns the IPv4 address of the current network
+   */
   static Ipv4Address GetNetwork (const Ipv4Mask mask);
 
+  /**
+   * \brief Set the address for the given mask
+   *
+   * \param addr The address to set for the current mask
+   * \param mask The Ipv4Mask whose address is to be set
+   */
   static void InitAddress (const Ipv4Address addr, const Ipv4Mask mask);
+
+  /**
+   * \brief Allocate the next Ipv4Address for the configured network and mask
+   *
+   * This operation is a post-increment, meaning that the first address
+   * allocated will be the one that was initially configured.
+   *
+   * \param mask The Ipv4Mask for the current network
+   * \returns the IPv4 address
+   */
   static Ipv4Address NextAddress (const Ipv4Mask mask);
+
+  /**
+   * \brief Get the Ipv4Address that will be allocated upon NextAddress ()
+   *
+   * Does not change the internal state; just is used to peek the next
+   * address that will be allocated upon NextAddress ()
+   *
+   * \param mask The Ipv4Mask for the current network
+   * \returns the IPv4 address
+   */
   static Ipv4Address GetAddress (const Ipv4Mask mask);
 
+  /**
+   * \brief Reset the networks and Ipv4Address to zero
+   */
   static void Reset (void);
+
+  /**
+   * \brief Add the Ipv4Address to the list of IPv4 entries
+   *
+   * Typically, this is used by external address allocators that want
+   * to make use of this class's ability to track duplicates.  AddAllocated
+   * is always called internally for any address generated by NextAddress ()
+   *
+   * \param addr The Ipv4Address to be added to the list of Ipv4 entries
+   * \returns true on success
+   */
   static bool AddAllocated (const Ipv4Address addr);
 
+  /**
+   * \brief Used to turn off fatal errors and assertions, for testing
+   */
   static void TestMode (void);
 };
 
diff -Naur ns-3.18.1/src/internet/model/ipv4.cc ns-3.19/src/internet/model/ipv4.cc
--- ns-3.18.1/src/internet/model/ipv4.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4);
+NS_OBJECT_ENSURE_REGISTERED (Ipv4)
+  ;
 
 TypeId 
 Ipv4::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/ipv4-end-point-demux.cc ns-3.19/src/internet/model/ipv4-end-point-demux.cc
--- ns-3.18.1/src/internet/model/ipv4-end-point-demux.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-end-point-demux.cc	2013-12-20 09:44:50.000000000 -0800
@@ -24,7 +24,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4EndPointDemux");
+NS_LOG_COMPONENT_DEFINE ("Ipv4EndPointDemux")
+  ;
 
 Ipv4EndPointDemux::Ipv4EndPointDemux ()
   : m_ephemeral (49152), m_portLast (65535), m_portFirst (49152)
diff -Naur ns-3.18.1/src/internet/model/ipv4-end-point-demux.h ns-3.19/src/internet/model/ipv4-end-point-demux.h
--- ns-3.18.1/src/internet/model/ipv4-end-point-demux.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-end-point-demux.h	2013-12-20 09:44:50.000000000 -0800
@@ -42,43 +42,141 @@
 
 class Ipv4EndPointDemux {
 public:
+  /**
+   * \brief Container of the IPv4 endpoints.
+   */
   typedef std::list<Ipv4EndPoint *> EndPoints;
+
+  /**
+   * \brief Iterator to the container of the IPv4 endpoints.
+   */
   typedef std::list<Ipv4EndPoint *>::iterator EndPointsI;
 
   Ipv4EndPointDemux ();
   ~Ipv4EndPointDemux ();
 
+  /**
+   * \brief Get the entire list of end points registered.
+   * \return list of Ipv4EndPoint
+   */
   EndPoints GetAllEndPoints (void);
+
+  /**
+   * \brief Lookup for port local.
+   * \param port port to test
+   * \return true if a port local is in EndPoints, false otherwise
+   */
   bool LookupPortLocal (uint16_t port);
+
+  /**
+   * \brief Lookup for address and port.
+   * \param addr address to test
+   * \param port port to test
+   * \return true if there is a match in EndPoints, false otherwise
+   */
   bool LookupLocal (Ipv4Address addr, uint16_t port);
+
+  /**
+   * \brief lookup for a match with all the parameters.
+   * \param daddr destination address to test
+   * \param dport destination port to test
+   * \param saddr source address to test
+   * \param sport source port to test
+   * \param incomingInterface the incoming interface
+   * \return list of IPv4EndPoints (could be 0 element)
+   */
   EndPoints Lookup (Ipv4Address daddr, 
                     uint16_t dport, 
                     Ipv4Address saddr, 
                     uint16_t sport,
                     Ptr<Ipv4Interface> incomingInterface);
 
+  /**
+   * \brief simple lookup for a match with all the parameters.
+   * \param daddr destination address to test
+   * \param dport destination port to test
+   * \param saddr source address to test
+   * \param sport source port to test
+   * \return IPv4EndPoint (0 if not found)
+   */
   Ipv4EndPoint *SimpleLookup (Ipv4Address daddr, 
                               uint16_t dport, 
                               Ipv4Address saddr, 
                               uint16_t sport);
 
+  /**
+   * \brief Allocate a Ipv4EndPoint.
+   * \return an empty Ipv4EndPoint instance
+   */
   Ipv4EndPoint *Allocate (void);
+
+  /**
+   * \brief Allocate a Ipv4EndPoint.
+   * \param address IPv4 address
+   * \return an Ipv4EndPoint instance
+   */
   Ipv4EndPoint *Allocate (Ipv4Address address);
+
+  /**
+   * \brief Allocate a Ipv4EndPoint.
+   * \param port local port
+   * \return an Ipv4EndPoint instance
+   */
   Ipv4EndPoint *Allocate (uint16_t port);
+
+  /**
+   * \brief Allocate a Ipv4EndPoint.
+   * \param address local address
+   * \param port local port
+   * \return an Ipv4EndPoint instance
+   */
   Ipv4EndPoint *Allocate (Ipv4Address address, uint16_t port);
+
+  /**
+   * \brief Allocate a Ipv4EndPoint.
+   * \param localAddress local address
+   * \param localPort local port
+   * \param peerAddress peer address
+   * \param peerPort peer port
+   * \return an Ipv4EndPoint instance
+   */
   Ipv4EndPoint *Allocate (Ipv4Address localAddress, 
                           uint16_t localPort,
                           Ipv4Address peerAddress, 
                           uint16_t peerPort);
 
+  /**
+   * \brief Remove a end point.
+   * \param endPoint the end point to remove
+   */
   void DeAllocate (Ipv4EndPoint *endPoint);
 
 private:
+
+  /**
+   * \brief Allocate an ephemeral port.
+   * \returns the ephemeral port
+   */
   uint16_t AllocateEphemeralPort (void);
 
+  /**
+   * \brief The ephemeral port.
+   */
   uint16_t m_ephemeral;
+
+  /**
+   * \brief The last ephemeral port.
+   */
   uint16_t m_portLast;
+
+  /**
+   * \brief The first ephemeral port.
+   */
   uint16_t m_portFirst;
+
+  /**
+   * \brief A list of IPv4 end points.
+   */
   EndPoints m_endPoints;
 };
 
diff -Naur ns-3.18.1/src/internet/model/ipv4-end-point.h ns-3.19/src/internet/model/ipv4-end-point.h
--- ns-3.18.1/src/internet/model/ipv4-end-point.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-end-point.h	2013-12-20 09:44:50.000000000 -0800
@@ -46,48 +46,188 @@
 
 class Ipv4EndPoint {
 public:
+  /**
+   * \brief Constructor.
+   * \param address the IPv4 address
+   * \param port the port
+   */
   Ipv4EndPoint (Ipv4Address address, uint16_t port);
   ~Ipv4EndPoint ();
 
+  /**
+   * \brief Get the local address.
+   * \return the local address
+   */
   Ipv4Address GetLocalAddress (void);
+
+  /**
+   * \brief Set the local address.
+   * \param address the address to set
+   */
   void SetLocalAddress (Ipv4Address address);
+
+  /**
+   * \brief Get the local port.
+   * \return the local port
+   */
   uint16_t GetLocalPort (void);
+
+  /**
+   * \brief Get the peer address.
+   * \return the peer address
+   */
   Ipv4Address GetPeerAddress (void);
+
+  /**
+   * \brief Get the peer port.
+   * \return the peer port
+   */
   uint16_t GetPeerPort (void);
 
+  /**
+   * \brief Set the peer informations (address and port).
+   * \param address peer address
+   * \param port peer port
+   */
   void SetPeer (Ipv4Address address, uint16_t port);
 
+  /**
+   * \brief Bind a socket to specific device.
+   *
+   * This method corresponds to using setsockopt() SO_BINDTODEVICE
+   * of real network or BSD sockets.   If set on a socket, this option will
+   * force packets to leave the bound device regardless of the device that
+   * IP routing would naturally choose.  In the receive direction, only
+   * packets received from the bound interface will be delivered.
+   *
+   * This option has no particular relationship to binding sockets to
+   * an address via Socket::Bind ().  It is possible to bind sockets to a
+   * specific IP address on the bound interface by calling both
+   * Socket::Bind (address) and Socket::BindToNetDevice (device), but it
+   * is also possible to bind to mismatching device and address, even if
+   * the socket can not receive any packets as a result.
+   *
+   * \param netdevice Pointer to Netdevice of desired interface
+   */
   void BindToNetDevice (Ptr<NetDevice> netdevice);
+
+  /**
+   * \brief Returns socket's bound netdevice, if any.
+   *
+   * This method corresponds to using getsockopt() SO_BINDTODEVICE
+   * of real network or BSD sockets.
+   *
+   *
+   * \returns Pointer to interface.
+   */
   Ptr<NetDevice> GetBoundNetDevice (void);
 
   // Called from socket implementations to get notified about important events.
+  /**
+   * \brief Set the reception callback.
+   * \param callback callback function
+   */
   void SetRxCallback (Callback<void,Ptr<Packet>, Ipv4Header, uint16_t, Ptr<Ipv4Interface> > callback);
+  /**
+   * \brief Set the ICMP callback.
+   * \param callback callback function
+   */
   void SetIcmpCallback (Callback<void,Ipv4Address,uint8_t,uint8_t,uint8_t,uint32_t> callback);
+  /**
+   * \brief Set the default destroy callback.
+   * \param callback callback function
+   */
   void SetDestroyCallback (Callback<void> callback);
 
-  // Called from an L4Protocol implementation to notify an endpoint of a
-  // packet reception.
+  /**
+   * \brief Forward the packet to the upper level.
+   *
+   * Called from an L4Protocol implementation to notify an endpoint of a
+   * packet reception.
+   * \param p the packet
+   * \param header the packet header
+   * \param sport source port
+   * \param incomingInterface incoming interface
+   */
   void ForwardUp (Ptr<Packet> p, const Ipv4Header& header, uint16_t sport, 
                   Ptr<Ipv4Interface> incomingInterface);
-  // Called from an L4Protocol implementation to notify an endpoint of
-  // an icmp message reception.
+
+  /**
+   * \brief Forward the ICMP packet to the upper level.
+   *
+   * Called from an L4Protocol implementation to notify an endpoint of
+   * an icmp message reception.
+   *
+   * \param icmpSource source IP address
+   * \param icmpTtl time-to-live
+   * \param icmpType ICMP type
+   * \param icmpCode ICMP code
+   * \param icmpInfo ICMP info
+   */
   void ForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl, 
                     uint8_t icmpType, uint8_t icmpCode,
                     uint32_t icmpInfo);
 
 private:
+  /**
+   * \brief ForwardUp wrapper.
+   * \param p packet
+   * \param header the packet header
+   * \param sport source port
+   * \param incomingInterface incoming interface
+   */
   void DoForwardUp (Ptr<Packet> p, const Ipv4Header& header, uint16_t sport,
                     Ptr<Ipv4Interface> incomingInterface);
-  void DoForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl, 
+  /**
+   * \brief ForwardIcmp wrapper.
+   * \param icmpSource source IP address
+   * \param icmpTtl time-to-live
+   * \param icmpType ICMP type
+   * \param icmpCode ICMP code
+   * \param icmpInfo ICMP info
+   */
+  void DoForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl,
                       uint8_t icmpType, uint8_t icmpCode,
                       uint32_t icmpInfo);
+
+  /**
+   * \brief The local address.
+   */
   Ipv4Address m_localAddr;
+
+  /**
+   * \brief The local port.
+   */
   uint16_t m_localPort;
+
+  /**
+   * \brief The peer address.
+   */
   Ipv4Address m_peerAddr;
+
+  /**
+   * \brief The peer port.
+   */
   uint16_t m_peerPort;
+
+  /**
+   * \brief The NetDevice the EndPoint is bound to (if any).
+   */
   Ptr<NetDevice> m_boundnetdevice;
+
+  /**
+   * \brief The RX callback.
+   */
   Callback<void,Ptr<Packet>, Ipv4Header, uint16_t, Ptr<Ipv4Interface> > m_rxCallback;
+
+  /**
+   * \brief The ICMPv6 callback.
+   */
   Callback<void,Ipv4Address,uint8_t,uint8_t,uint8_t,uint32_t> m_icmpCallback;
+
+  /**
+   * \brief The destroy callback.
+   */
   Callback<void> m_destroyCallback;
 };
 
diff -Naur ns-3.18.1/src/internet/model/ipv4-global-routing.cc ns-3.19/src/internet/model/ipv4-global-routing.cc
--- ns-3.18.1/src/internet/model/ipv4-global-routing.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-global-routing.cc	2013-12-20 09:44:50.000000000 -0800
@@ -34,7 +34,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4GlobalRouting);
+NS_OBJECT_ENSURE_REGISTERED (Ipv4GlobalRouting)
+  ;
 
 TypeId 
 Ipv4GlobalRouting::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/ipv4-global-routing.h ns-3.19/src/internet/model/ipv4-global-routing.h
--- ns-3.18.1/src/internet/model/ipv4-global-routing.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-global-routing.h	2013-12-20 09:44:50.000000000 -0800
@@ -69,15 +69,19 @@
 class Ipv4GlobalRouting : public Ipv4RoutingProtocol
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
-/**
- * \brief Construct an empty Ipv4GlobalRouting routing protocol,
- *
- * The Ipv4GlobalRouting class supports host and network unicast routes.
- * This method initializes the lists containing these routes to empty.
- *
- * \see Ipv4GlobalRouting
- */
+  /**
+   * \brief Construct an empty Ipv4GlobalRouting routing protocol,
+   *
+   * The Ipv4GlobalRouting class supports host and network unicast routes.
+   * This method initializes the lists containing these routes to empty.
+   *
+   * \see Ipv4GlobalRouting
+   */
   Ipv4GlobalRouting ();
   virtual ~Ipv4GlobalRouting ();
 
@@ -94,131 +98,132 @@
   virtual void SetIpv4 (Ptr<Ipv4> ipv4);
   virtual void PrintRoutingTable (Ptr<OutputStreamWrapper> stream) const;
 
-/**
- * \brief Add a host route to the global routing table.
- *
- * \param dest The Ipv4Address destination for this route.
- * \param nextHop The Ipv4Address of the next hop in the route.
- * \param interface The network interface index used to send packets to the
- * destination.
- *
- * \see Ipv4Address
- */
+  /**
+   * \brief Add a host route to the global routing table.
+   *
+   * \param dest The Ipv4Address destination for this route.
+   * \param nextHop The Ipv4Address of the next hop in the route.
+   * \param interface The network interface index used to send packets to the
+   * destination.
+   *
+   * \see Ipv4Address
+   */
   void AddHostRouteTo (Ipv4Address dest, 
                        Ipv4Address nextHop, 
                        uint32_t interface);
-/**
- * \brief Add a host route to the global routing table.
- *
- * \param dest The Ipv4Address destination for this route.
- * \param interface The network interface index used to send packets to the
- * destination.
- *
- * \see Ipv4Address
- */
+  /**
+   * \brief Add a host route to the global routing table.
+   *
+   * \param dest The Ipv4Address destination for this route.
+   * \param interface The network interface index used to send packets to the
+   * destination.
+   *
+   * \see Ipv4Address
+   */
   void AddHostRouteTo (Ipv4Address dest, 
                        uint32_t interface);
 
-/**
- * \brief Add a network route to the global routing table.
- *
- * \param network The Ipv4Address network for this route.
- * \param networkMask The Ipv4Mask to extract the network.
- * \param nextHop The next hop in the route to the destination network.
- * \param interface The network interface index used to send packets to the
- * destination.
- *
- * \see Ipv4Address
- */
+  /**
+   * \brief Add a network route to the global routing table.
+   *
+   * \param network The Ipv4Address network for this route.
+   * \param networkMask The Ipv4Mask to extract the network.
+   * \param nextHop The next hop in the route to the destination network.
+   * \param interface The network interface index used to send packets to the
+   * destination.
+   *
+   * \see Ipv4Address
+   */
   void AddNetworkRouteTo (Ipv4Address network, 
                           Ipv4Mask networkMask, 
                           Ipv4Address nextHop, 
                           uint32_t interface);
 
-/**
- * \brief Add a network route to the global routing table.
- *
- * \param network The Ipv4Address network for this route.
- * \param networkMask The Ipv4Mask to extract the network.
- * \param interface The network interface index used to send packets to the
- * destination.
- *
- * \see Ipv4Address
- */
+  /**
+   * \brief Add a network route to the global routing table.
+   *
+   * \param network The Ipv4Address network for this route.
+   * \param networkMask The Ipv4Mask to extract the network.
+   * \param interface The network interface index used to send packets to the
+   * destination.
+   *
+   * \see Ipv4Address
+   */
   void AddNetworkRouteTo (Ipv4Address network, 
                           Ipv4Mask networkMask, 
                           uint32_t interface);
 
-/**
- * \brief Add an external route to the global routing table.
- *
- * \param network The Ipv4Address network for this route.
- * \param networkMask The Ipv4Mask to extract the network.
- * \param nextHop The next hop Ipv4Address
- * \param interface The network interface index used to send packets to the
- * destination.
- */
+  /**
+   * \brief Add an external route to the global routing table.
+   *
+   * \param network The Ipv4Address network for this route.
+   * \param networkMask The Ipv4Mask to extract the network.
+   * \param nextHop The next hop Ipv4Address
+   * \param interface The network interface index used to send packets to the
+   * destination.
+   */
   void AddASExternalRouteTo (Ipv4Address network,
                              Ipv4Mask networkMask,
                              Ipv4Address nextHop,
                              uint32_t interface);
 
-/**
- * \brief Get the number of individual unicast routes that have been added
- * to the routing table.
- *
- * \warning The default route counts as one of the routes.
- */
+  /**
+   * \brief Get the number of individual unicast routes that have been added
+   * to the routing table.
+   *
+   * \warning The default route counts as one of the routes.
+   * \returns the number of routes
+   */
   uint32_t GetNRoutes (void) const;
 
-/**
- * \brief Get a route from the global unicast routing table.
- *
- * Externally, the unicast global routing table appears simply as a table with
- * n entries.  The one subtlety of note is that if a default route has been set
- * it will appear as the zeroth entry in the table.  This means that if you
- * add only a default route, the table will have one entry that can be accessed
- * either by explicitly calling GetDefaultRoute () or by calling GetRoute (0).
- * 
- * Similarly, if the default route has been set, calling RemoveRoute (0) will
- * remove the default route.
- *
- * \param i The index (into the routing table) of the route to retrieve.  If
- * the default route has been set, it will occupy index zero.
- * \return If route is set, a pointer to that Ipv4RoutingTableEntry is returned, otherwise
- * a zero pointer is returned.
- *
- * \see Ipv4RoutingTableEntry
- * \see Ipv4GlobalRouting::RemoveRoute
- */
+  /**
+   * \brief Get a route from the global unicast routing table.
+   *
+   * Externally, the unicast global routing table appears simply as a table with
+   * n entries.  The one subtlety of note is that if a default route has been set
+   * it will appear as the zeroth entry in the table.  This means that if you
+   * add only a default route, the table will have one entry that can be accessed
+   * either by explicitly calling GetDefaultRoute () or by calling GetRoute (0).
+   *
+   * Similarly, if the default route has been set, calling RemoveRoute (0) will
+   * remove the default route.
+   *
+   * \param i The index (into the routing table) of the route to retrieve.  If
+   * the default route has been set, it will occupy index zero.
+   * \return If route is set, a pointer to that Ipv4RoutingTableEntry is returned, otherwise
+   * a zero pointer is returned.
+   *
+   * \see Ipv4RoutingTableEntry
+   * \see Ipv4GlobalRouting::RemoveRoute
+   */
   Ipv4RoutingTableEntry *GetRoute (uint32_t i) const;
 
-/**
- * \brief Remove a route from the global unicast routing table.
- *
- * Externally, the unicast global routing table appears simply as a table with
- * n entries.  The one subtlety of note is that if a default route has been set
- * it will appear as the zeroth entry in the table.  This means that if the
- * default route has been set, calling RemoveRoute (0) will remove the
- * default route.
- *
- * \param i The index (into the routing table) of the route to remove.  If
- * the default route has been set, it will occupy index zero.
- *
- * \see Ipv4RoutingTableEntry
- * \see Ipv4GlobalRouting::GetRoute
- * \see Ipv4GlobalRouting::AddRoute
- */
+  /**
+   * \brief Remove a route from the global unicast routing table.
+   *
+   * Externally, the unicast global routing table appears simply as a table with
+   * n entries.  The one subtlety of note is that if a default route has been set
+   * it will appear as the zeroth entry in the table.  This means that if the
+   * default route has been set, calling RemoveRoute (0) will remove the
+   * default route.
+   *
+   * \param i The index (into the routing table) of the route to remove.  If
+   * the default route has been set, it will occupy index zero.
+   *
+   * \see Ipv4RoutingTableEntry
+   * \see Ipv4GlobalRouting::GetRoute
+   * \see Ipv4GlobalRouting::AddRoute
+   */
   void RemoveRoute (uint32_t i);
 
- /**
-  * Assign a fixed random variable stream number to the random variables
-  * used by this model.  Return the number of streams (possibly zero) that
-  * have been assigned.
-  *
-  * \param stream first stream index to use
-  * \return the number of stream indices assigned by this model
-  */
+  /**
+   * Assign a fixed random variable stream number to the random variables
+   * used by this model.  Return the number of streams (possibly zero) that
+   * have been assigned.
+   *
+   * \param stream first stream index to use
+   * \return the number of stream indices assigned by this model
+   */
   int64_t AssignStreams (int64_t stream);
 
 protected:
@@ -232,23 +237,34 @@
   /// A uniform random number generator for randomly routing packets among ECMP 
   Ptr<UniformRandomVariable> m_rand;
 
+  /// container of Ipv4RoutingTableEntry (routes to hosts)
   typedef std::list<Ipv4RoutingTableEntry *> HostRoutes;
+  /// const iterator of container of Ipv4RoutingTableEntry (routes to hosts)
   typedef std::list<Ipv4RoutingTableEntry *>::const_iterator HostRoutesCI;
+  /// iterator of container of Ipv4RoutingTableEntry (routes to hosts)
   typedef std::list<Ipv4RoutingTableEntry *>::iterator HostRoutesI;
+
+  /// container of Ipv4RoutingTableEntry (routes to networks)
   typedef std::list<Ipv4RoutingTableEntry *> NetworkRoutes;
+  /// const iterator of container of Ipv4RoutingTableEntry (routes to networks)
   typedef std::list<Ipv4RoutingTableEntry *>::const_iterator NetworkRoutesCI;
+  /// iterator of container of Ipv4RoutingTableEntry (routes to networks)
   typedef std::list<Ipv4RoutingTableEntry *>::iterator NetworkRoutesI;
+
+  /// container of Ipv4RoutingTableEntry (routes to external AS)
   typedef std::list<Ipv4RoutingTableEntry *> ASExternalRoutes;
+  /// const iterator of container of Ipv4RoutingTableEntry (routes to external AS)
   typedef std::list<Ipv4RoutingTableEntry *>::const_iterator ASExternalRoutesCI;
+  /// iterator of container of Ipv4RoutingTableEntry (routes to external AS)
   typedef std::list<Ipv4RoutingTableEntry *>::iterator ASExternalRoutesI;
 
   Ptr<Ipv4Route> LookupGlobal (Ipv4Address dest, Ptr<NetDevice> oif = 0);
 
-  HostRoutes m_hostRoutes;
-  NetworkRoutes m_networkRoutes;
-  ASExternalRoutes m_ASexternalRoutes; // External routes imported
+  HostRoutes m_hostRoutes;             //!< Routes to hosts
+  NetworkRoutes m_networkRoutes;       //!< Routes to networks
+  ASExternalRoutes m_ASexternalRoutes; //!< External routes imported
 
-  Ptr<Ipv4> m_ipv4;
+  Ptr<Ipv4> m_ipv4; //!< associated IPv4 instance
 };
 
 } // Namespace ns3
diff -Naur ns-3.18.1/src/internet/model/ipv4.h ns-3.19/src/internet/model/ipv4.h
--- ns-3.18.1/src/internet/model/ipv4.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4.h	2013-12-20 09:44:50.000000000 -0800
@@ -75,6 +75,10 @@
 class Ipv4 : public Object
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   Ipv4 ();
   virtual ~Ipv4 ();
@@ -167,6 +171,7 @@
    *
    * \param address The IP address being considered
    * \param iif The incoming Ipv4 interface index
+   * \returns true if the address is associated with the interface index
    *
    * This method can be used to determine whether a received packet has
    * an acceptable address for local delivery on the host.  The address
@@ -378,13 +383,35 @@
   virtual void DeleteRawSocket (Ptr<Socket> socket) = 0;
 
 
-  static const uint32_t IF_ANY = 0xffffffff;
+  static const uint32_t IF_ANY = 0xffffffff; //!< interface wildcard, meaning any interface
 
 private:
   // Indirect the Ipv4 attributes through private pure virtual methods
+
+  /**
+   * \brief Set or unset the IP forwarding state
+   * \param forward the forwarding state
+   */
   virtual void SetIpForward (bool forward) = 0;
+  /**
+   * \brief Get the IP forwarding state
+   * \returns true if IP is in forwarding state
+   */
   virtual bool GetIpForward (void) const = 0;
+
+  /**
+   * \brief Set or unset the Weak Es Model
+   *
+   * RFC1122 term for whether host accepts datagram with a dest. address on another interface
+   * \param model true for Weak Es Model
+   */
   virtual void SetWeakEsModel (bool model) = 0;
+  /**
+   * \brief Get the Weak Es Model status
+   *
+   * RFC1122 term for whether host accepts datagram with a dest. address on another interface
+   * \returns true for Weak Es Model activated
+   */
   virtual bool GetWeakEsModel (void) const = 0;
 };
 
diff -Naur ns-3.18.1/src/internet/model/ipv4-header.cc ns-3.19/src/internet/model/ipv4-header.cc
--- ns-3.18.1/src/internet/model/ipv4-header.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4Header);
+NS_OBJECT_ENSURE_REGISTERED (Ipv4Header)
+  ;
 
 Ipv4Header::Ipv4Header ()
   : m_calcChecksum (false),
diff -Naur ns-3.18.1/src/internet/model/ipv4-header.h ns-3.19/src/internet/model/ipv4-header.h
--- ns-3.18.1/src/internet/model/ipv4-header.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-header.h	2013-12-20 09:44:50.000000000 -0800
@@ -172,6 +172,7 @@
    */
   DscpType GetDscp (void) const;
   /**
+   * \param dscp the dscp
    * \returns std::string of DSCPType
    */
   std::string DscpTypeToString (DscpType dscp) const;
@@ -180,6 +181,7 @@
    */
   EcnType GetEcn (void) const;
   /**
+   * \param ecn the ECNType
    * \returns std::string of ECNType
    */
   std::string EcnTypeToString (EcnType ecn) const;
@@ -220,6 +222,10 @@
    */
   bool IsChecksumOk (void) const;
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
   virtual void Print (std::ostream &os) const;
@@ -228,25 +234,26 @@
   virtual uint32_t Deserialize (Buffer::Iterator start);
 private:
 
+  /// flags related to IP fragmentation
   enum FlagsE {
     DONT_FRAGMENT = (1<<0),
     MORE_FRAGMENTS = (1<<1)
   };
 
-  bool m_calcChecksum;
+  bool m_calcChecksum; //!< true if the checksum must be calculated
 
-  uint16_t m_payloadSize;
-  uint16_t m_identification;
-  uint32_t m_tos : 8; //Also used as DSCP + ECN value
-  uint32_t m_ttl : 8;
-  uint32_t m_protocol : 8;
-  uint32_t m_flags : 3;
-  uint16_t m_fragmentOffset;
-  Ipv4Address m_source;
-  Ipv4Address m_destination;
-  uint16_t m_checksum;
-  bool m_goodChecksum;
-  uint16_t m_headerSize;
+  uint16_t m_payloadSize; //!< payload size
+  uint16_t m_identification; //!< identification
+  uint32_t m_tos : 8; //!< TOS, also used as DSCP + ECN value
+  uint32_t m_ttl : 8; //!< TTL
+  uint32_t m_protocol : 8;  //!< Protocol
+  uint32_t m_flags : 3; //!< flags
+  uint16_t m_fragmentOffset;  //!< Fragment offset
+  Ipv4Address m_source; //!< source address
+  Ipv4Address m_destination; //!< destination address
+  uint16_t m_checksum; //!< checksum
+  bool m_goodChecksum; //!< true if checksum is correct
+  uint16_t m_headerSize; //!< IP header size
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/ipv4-interface-address.h ns-3.19/src/internet/model/ipv4-interface-address.h
--- ns-3.18.1/src/internet/model/ipv4-interface-address.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-interface-address.h	2013-12-20 09:44:50.000000000 -0800
@@ -42,6 +42,10 @@
 class Ipv4InterfaceAddress 
 {
 public:
+  /**
+   * \enum InterfaceAddressScope_e
+   * \brief Address scope.
+   */
   enum InterfaceAddressScope_e {
     HOST,
     LINK,
@@ -49,39 +53,116 @@
   };
 
   Ipv4InterfaceAddress ();
-  // Configure m_local, m_mask, and m_broadcast from the below constructor
+
+  /**
+   * \brief Configure local address, mask and broadcast address
+   * \param local the local address
+   * \param mask the network mask
+   */
   Ipv4InterfaceAddress (Ipv4Address local, Ipv4Mask mask);
+  /**
+   * Copy constructor
+   * \param o the object to copy
+   */
   Ipv4InterfaceAddress (const Ipv4InterfaceAddress &o);
 
+  /**
+   * \brief Set local address
+   * \param local the address
+   */
   void SetLocal (Ipv4Address local);
+  /**
+   * \brief Get the local address
+   * \returns the local address
+   */
   Ipv4Address GetLocal (void) const;
+  /**
+   * \brief Set the network mask
+   * \param mask the network mask
+   */
   void SetMask (Ipv4Mask mask);
+  /**
+   * \brief Get the network mask
+   * \returns the network mask
+   */
   Ipv4Mask GetMask (void) const;
+  /**
+   * \brief Set the broadcast address
+   * \param broadcast the broadcast address
+   */
   void SetBroadcast (Ipv4Address broadcast);
+  /**
+   * \brief Get the broadcast address
+   * \returns the broadcast address
+   */
   Ipv4Address GetBroadcast (void) const;
  
+  /**
+   * \brief Set the scope.
+   * \param scope the scope of address
+   */
   void SetScope (Ipv4InterfaceAddress::InterfaceAddressScope_e scope);
+
+  /**
+   * \brief Get address scope.
+   * \return scope
+   */
   Ipv4InterfaceAddress::InterfaceAddressScope_e GetScope (void) const;
 
+  /**
+   * \brief Check if the address is a secondary address
+   *
+   * Secondary address is used for multihoming
+   * \returns true if the address is secondary
+   */
   bool IsSecondary (void) const;
+
+  /**
+   * \brief Make the address secondary (used for multihoming)
+   */
   void SetSecondary (void);
+  /**
+   * \brief Make the address primary
+   */
   void SetPrimary (void);
 
 private:
 
-  Ipv4Address m_local;     // Interface address
+  Ipv4Address m_local;     //!< Interface address
   // Note:  m_peer may be added in future when necessary
-  // Ipv4Address m_peer;      // Peer destination address (in Linux:  m_address)
-  Ipv4Mask m_mask;         // Network mask
-  Ipv4Address m_broadcast; // Broadcast address
-
-  InterfaceAddressScope_e m_scope;
-  bool m_secondary;        // For use in multihoming
-
+  // Ipv4Address m_peer;   // Peer destination address (in Linux:  m_address)
+  Ipv4Mask m_mask;         //!< Network mask
+  Ipv4Address m_broadcast; //!< Broadcast address
+
+  InterfaceAddressScope_e m_scope; //!< Address scope
+  bool m_secondary;        //!< For use in multihoming
+
+  /**
+   * \brief Equal to operator.
+   *
+   * \param a the first operand
+   * \param b the first operand
+   * \returns true if the operands are equal
+   */
   friend bool operator == (Ipv4InterfaceAddress const &a, Ipv4InterfaceAddress const &b);
+
+  /**
+   * \brief Not equal to operator.
+   *
+   * \param a the first operand
+   * \param b the first operand
+   * \returns true if the operands are not equal
+   */
   friend bool operator != (Ipv4InterfaceAddress const &a, Ipv4InterfaceAddress const &b);
 };
 
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param addr the Ipv4InterfaceAddress
+ * \returns the reference to the output stream
+ */
 std::ostream& operator<< (std::ostream& os, const Ipv4InterfaceAddress &addr);
 
 inline bool operator == (const Ipv4InterfaceAddress &a, const Ipv4InterfaceAddress &b)
diff -Naur ns-3.18.1/src/internet/model/ipv4-interface.cc ns-3.19/src/internet/model/ipv4-interface.cc
--- ns-3.18.1/src/internet/model/ipv4-interface.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-interface.cc	2013-12-20 09:44:50.000000000 -0800
@@ -34,7 +34,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4Interface);
+NS_OBJECT_ENSURE_REGISTERED (Ipv4Interface)
+  ;
 
 TypeId 
 Ipv4Interface::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/ipv4-interface.h ns-3.19/src/internet/model/ipv4-interface.h
--- ns-3.18.1/src/internet/model/ipv4-interface.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-interface.h	2013-12-20 09:44:50.000000000 -0800
@@ -43,20 +43,36 @@
  * specific information (addresses) about an interface.
  *
  * By default, Ipv4 interface are created in the "down" state
- * no IP addresses.  Before becoming useable, the user must 
+ * no IP addresses.  Before becoming usable, the user must
  * add an address of some type and invoke Setup on them.
  */
 class Ipv4Interface  : public Object
 {
 public:
+  /**
+   * \brief Get the type ID
+   * \return type ID
+   */
   static TypeId GetTypeId (void);
 
   Ipv4Interface ();
   virtual ~Ipv4Interface();
 
+  /**
+   * \brief Set node associated with interface.
+   * \param node node
+   */
   void SetNode (Ptr<Node> node); 
+  /**
+   * \brief Set the NetDevice.
+   * \param device NetDevice
+   */
   void SetDevice (Ptr<NetDevice> device);
-  void SetArpCache (Ptr<ArpCache>);
+  /**
+   * \brief Set ARP cache used by this interface
+   * \param arpCache the ARP cache
+   */
+  void SetArpCache (Ptr<ArpCache> arpCache);
 
   /**
    * \returns the underlying NetDevice. This method cannot return zero.
@@ -164,18 +180,36 @@
 protected:
   virtual void DoDispose (void);
 private:
+  /**
+   * \brief Initialize interface.
+   */
   void DoSetup (void);
+
+
+  /**
+   * \brief Container for the Ipv4InterfaceAddresses.
+   */
   typedef std::list<Ipv4InterfaceAddress> Ipv4InterfaceAddressList;
+
+  /**
+   * \brief Container Iterator for the Ipv4InterfaceAddresses.
+   */
   typedef std::list<Ipv4InterfaceAddress>::const_iterator Ipv4InterfaceAddressListCI;
+
+  /**
+   * \brief Const Container Iterator for the Ipv4InterfaceAddresses.
+   */
   typedef std::list<Ipv4InterfaceAddress>::iterator Ipv4InterfaceAddressListI;
 
-  bool m_ifup;
-  bool m_forwarding;  // IN_DEV_FORWARD
-  uint16_t m_metric;
-  Ipv4InterfaceAddressList m_ifaddrs;
-  Ptr<Node> m_node;
-  Ptr<NetDevice> m_device;
-  Ptr<ArpCache> m_cache; 
+
+
+  bool m_ifup; //!< The state of this interface
+  bool m_forwarding;  //!< Forwarding state.
+  uint16_t m_metric;  //!< Interface metric
+  Ipv4InterfaceAddressList m_ifaddrs; //!< Address list
+  Ptr<Node> m_node; //!< The associated node
+  Ptr<NetDevice> m_device; //!< The associated NetDevice
+  Ptr<ArpCache> m_cache; //!< ARP cache
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/ipv4-l3-protocol.cc ns-3.19/src/internet/model/ipv4-l3-protocol.cc
--- ns-3.18.1/src/internet/model/ipv4-l3-protocol.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-l3-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -46,7 +46,8 @@
 
 const uint16_t Ipv4L3Protocol::PROT_NUMBER = 0x0800;
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4L3Protocol);
+NS_OBJECT_ENSURE_REGISTERED (Ipv4L3Protocol)
+  ;
 
 TypeId 
 Ipv4L3Protocol::GetTypeId (void)
@@ -687,9 +688,9 @@
     }
 }
 
-/// \todo when should we set ip_id?   check whether we are incrementing
-/// m_identification on packets that may later be dropped in this stack
-/// and whether that deviates from Linux
+// \todo when should we set ip_id?   check whether we are incrementing
+// m_identification on packets that may later be dropped in this stack
+// and whether that deviates from Linux
 Ipv4Header
 Ipv4L3Protocol::BuildHeader (
   Ipv4Address source,
@@ -889,18 +890,20 @@
           return;
         }
       NS_LOG_LOGIC ("Got last fragment, Packet is complete " << *p );
+      ipHeader.SetFragmentOffset (0);
+      ipHeader.SetPayloadSize (p->GetSize () + ipHeader.GetSerializedSize ());
     }
 
-  m_localDeliverTrace (ip, packet, iif);
+  m_localDeliverTrace (ipHeader, p, iif);
 
-  Ptr<IpL4Protocol> protocol = GetProtocol (ip.GetProtocol ());
+  Ptr<IpL4Protocol> protocol = GetProtocol (ipHeader.GetProtocol ());
   if (protocol != 0)
     {
       // we need to make a copy in the unlikely event we hit the
       // RX_ENDPOINT_UNREACH codepath
       Ptr<Packet> copy = p->Copy ();
       enum IpL4Protocol::RxStatus status = 
-        protocol->Receive (p, ip, GetInterface (iif));
+        protocol->Receive (p, ipHeader, GetInterface (iif));
       switch (status) {
         case IpL4Protocol::RX_OK:
         // fall through
@@ -909,8 +912,8 @@
         case IpL4Protocol::RX_CSUM_FAILED:
           break;
         case IpL4Protocol::RX_ENDPOINT_UNREACH:
-          if (ip.GetDestination ().IsBroadcast () == true ||
-              ip.GetDestination ().IsMulticast () == true)
+          if (ipHeader.GetDestination ().IsBroadcast () == true ||
+              ipHeader.GetDestination ().IsMulticast () == true)
             {
               break; // Do not reply to broadcast or multicast
             }
@@ -919,15 +922,15 @@
           for (uint32_t i = 0; i < GetNAddresses (iif); i++)
             {
               Ipv4InterfaceAddress addr = GetAddress (iif, i);
-              if (addr.GetLocal ().CombineMask (addr.GetMask ()) == ip.GetDestination ().CombineMask (addr.GetMask ()) &&
-                  ip.GetDestination ().IsSubnetDirectedBroadcast (addr.GetMask ()))
+              if (addr.GetLocal ().CombineMask (addr.GetMask ()) == ipHeader.GetDestination ().CombineMask (addr.GetMask ()) &&
+                  ipHeader.GetDestination ().IsSubnetDirectedBroadcast (addr.GetMask ()))
                 {
                   subnetDirected = true;
                 }
             }
           if (subnetDirected == false)
             {
-              GetIcmp ()->SendDestUnreachPort (ip, copy);
+              GetIcmp ()->SendDestUnreachPort (ipHeader, copy);
             }
         }
     }
@@ -1092,11 +1095,23 @@
 {
   NS_LOG_FUNCTION (this << i);
   Ptr<Ipv4Interface> interface = GetInterface (i);
-  interface->SetUp ();
 
-  if (m_routingProtocol != 0)
+  // RFC 791, pg.25:
+  //  Every internet module must be able to forward a datagram of 68
+  //  octets without further fragmentation.  This is because an internet
+  //  header may be up to 60 octets, and the minimum fragment is 8 octets.
+  if (interface->GetDevice ()->GetMtu () >= 68)
+    {
+      interface->SetUp ();
+
+      if (m_routingProtocol != 0)
+        {
+          m_routingProtocol->NotifyInterfaceUp (i);
+        }
+    }
+  else
     {
-      m_routingProtocol->NotifyInterfaceUp (i);
+      NS_LOG_LOGIC ("Interface " << int(i) << " is set to be down for IPv4. Reason: not respecting minimum IPv4 MTU (68 octects)");
     }
 }
 
@@ -1392,10 +1407,11 @@
 
   std::list<std::pair<Ptr<Packet>, uint16_t> >::const_iterator it = m_fragments.begin ();
 
-  Ptr<Packet> p = Create<Packet> ();
-  uint16_t lastEndOffset = 0;
+  Ptr<Packet> p = it->first->Copy ();
+  uint16_t lastEndOffset = p->GetSize ();
+  it++;
 
-  for ( it = m_fragments.begin (); it != m_fragments.end (); it++)
+  for ( ; it != m_fragments.end (); it++)
     {
       if ( lastEndOffset > it->second )
         {
diff -Naur ns-3.18.1/src/internet/model/ipv4-l3-protocol.h ns-3.19/src/internet/model/ipv4-l3-protocol.h
--- ns-3.18.1/src/internet/model/ipv4-l3-protocol.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-l3-protocol.h	2013-12-20 09:44:50.000000000 -0800
@@ -77,8 +77,12 @@
 class Ipv4L3Protocol : public Ipv4
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
-  static const uint16_t PROT_NUMBER;
+  static const uint16_t PROT_NUMBER; //!< Protocol number (0x0800)
 
   Ipv4L3Protocol();
   virtual ~Ipv4L3Protocol ();
@@ -97,6 +101,10 @@
     DROP_FRAGMENT_TIMEOUT /**< Fragment timeout exceeded */
   };
 
+  /**
+   * \brief Set node associated with this stack.
+   * \param node node to set
+   */
   void SetNode (Ptr<Node> node);
 
   // functions defined in base class Ipv4
@@ -182,6 +190,11 @@
   void SendWithHeader (Ptr<Packet> packet, Ipv4Header ipHeader, Ptr<Ipv4Route> route);
 
   uint32_t AddInterface (Ptr<NetDevice> device);
+  /**
+   * \brief Get an interface.
+   * \param i interface index
+   * \return IPv4 interface pointer
+   */
   Ptr<Ipv4Interface> GetInterface (uint32_t i) const;
   uint32_t GetNInterfaces (void) const;
 
@@ -220,7 +233,20 @@
   virtual void NotifyNewAggregate ();
 private:
   friend class Ipv4L3ProtocolTestCase;
+
+  /**
+   * \brief Copy constructor.
+   *
+   * Defined but not implemented to avoid misuse
+   */
   Ipv4L3Protocol(const Ipv4L3Protocol &);
+
+  /**
+   * \brief Copy constructor.
+   *
+   * Defined but not implemented to avoid misuse
+   * \returns the copied object
+   */
   Ipv4L3Protocol &operator = (const Ipv4L3Protocol &);
 
   // class Ipv4 attributes
@@ -229,6 +255,17 @@
   virtual void SetWeakEsModel (bool model);
   virtual bool GetWeakEsModel (void) const;
 
+  /**
+   * \brief Construct an IPv4 header.
+   * \param source source IPv4 address
+   * \param destination destination IPv4 address
+   * \param protocol L4 protocol
+   * \param payloadSize payload size
+   * \param ttl Time to Live
+   * \param tos Type of Service
+   * \param mayFragment true if the packet can be fragmented
+   * \return newly created IPv4 header
+   */
   Ipv4Header BuildHeader (
     Ipv4Address source,
     Ipv4Address destination,
@@ -238,25 +275,65 @@
     uint8_t tos,
     bool mayFragment);
 
+  /**
+   * \brief Send packet with route.
+   * \param route route
+   * \param packet packet to send
+   * \param ipHeader IPv4 header to add to the packet
+   */
   void
   SendRealOut (Ptr<Ipv4Route> route,
                Ptr<Packet> packet,
                Ipv4Header const &ipHeader);
 
+  /**
+   * \brief Forward a packet.
+   * \param rtentry route
+   * \param p packet to forward
+   * \param header IPv4 header to add to the packet
+   */
   void 
   IpForward (Ptr<Ipv4Route> rtentry, 
              Ptr<const Packet> p, 
              const Ipv4Header &header);
 
+  /**
+   * \brief Forward a multicast packet.
+   * \param mrtentry route
+   * \param p packet to forward
+   * \param header IPv6 header to add to the packet
+   */
   void
   IpMulticastForward (Ptr<Ipv4MulticastRoute> mrtentry, 
                       Ptr<const Packet> p, 
                       const Ipv4Header &header);
 
+  /**
+   * \brief Deliver a packet.
+   * \param p packet delivered
+   * \param ip IPv4 header
+   * \param iif input interface packet was received
+   */
   void LocalDeliver (Ptr<const Packet> p, Ipv4Header const&ip, uint32_t iif);
+
+  /**
+   * \brief Fallback when no route is found.
+   * \param p packet
+   * \param ipHeader IPv4 header
+   * \param sockErrno error number
+   */
   void RouteInputError (Ptr<const Packet> p, const Ipv4Header & ipHeader, Socket::SocketErrno sockErrno);
 
+  /**
+   * \brief Add an IPv4 interface to the stack.
+   * \param interface interface to add
+   * \return index of newly added interface
+   */
   uint32_t AddIpv4Interface (Ptr<Ipv4Interface> interface);
+
+  /**
+   * \brief Setup loopback interface.
+   */
   void SetupLoopback (void);
 
   /**
@@ -264,6 +341,13 @@
    * \return Icmpv4L4Protocol pointer
    */
   Ptr<Icmpv4L4Protocol> GetIcmp (void) const;
+
+  /**
+   * \brief Check if an IPv4 address is unicast.
+   * \param ad address
+   * \param interfaceMask the network mask
+   * \return true if the address is unicast
+   */
   bool IsUnicast (Ipv4Address ad, Ipv4Mask interfaceMask) const;
 
   /**
@@ -277,7 +361,7 @@
   /**
    * \brief Process a packet fragment
    * \param packet the packet
-   * \param fragmentSize the size of the fragment
+   * \param ipHeader the IP header
    * \param iif Input Interface
    * \return true is the fragment completed the packet
    */
@@ -291,32 +375,47 @@
    */
   void HandleFragmentsTimeout ( std::pair<uint64_t, uint32_t> key, Ipv4Header & ipHeader, uint32_t iif);
 
+  /**
+   * \brief Container of the IPv4 Interfaces.
+   */
   typedef std::vector<Ptr<Ipv4Interface> > Ipv4InterfaceList;
+  /**
+   * \brief Container of the IPv4 Raw Sockets.
+   */
   typedef std::list<Ptr<Ipv4RawSocketImpl> > SocketList;
-  typedef std::list<Ptr<IpL4Protocol> > L4List_t;
+  /**
+   * \brief Container of the IPv4 L4 instances.
+   */
+   typedef std::list<Ptr<IpL4Protocol> > L4List_t;
 
-  bool m_ipForward;
-  bool m_weakEsModel;
-  L4List_t m_protocols;
-  Ipv4InterfaceList m_interfaces;
-  uint8_t m_defaultTos;
-  uint8_t m_defaultTtl;
-  uint16_t m_identification;
-  Ptr<Node> m_node;
+  bool m_ipForward;      //!< Forwarding packets (i.e. router mode) state.
+  bool m_weakEsModel;    //!< Weak ES model state
+  L4List_t m_protocols;  //!< List of transport protocol.
+  Ipv4InterfaceList m_interfaces; //!< List of IPv4 interfaces.
+  uint8_t m_defaultTos;  //!< Default TOS
+  uint8_t m_defaultTtl;  //!< Default TTL
+  uint16_t m_identification; //!< Identification
+  Ptr<Node> m_node; //!< Node attached to stack.
 
+  /// Trace of sent packets
   TracedCallback<const Ipv4Header &, Ptr<const Packet>, uint32_t> m_sendOutgoingTrace;
+  /// Trace of unicast forwarded packets
   TracedCallback<const Ipv4Header &, Ptr<const Packet>, uint32_t> m_unicastForwardTrace;
+  /// Trace of locally delivered packets
   TracedCallback<const Ipv4Header &, Ptr<const Packet>, uint32_t> m_localDeliverTrace;
 
   // The following two traces pass a packet with an IP header
+  /// Trace of transmitted packets
   TracedCallback<Ptr<const Packet>, Ptr<Ipv4>,  uint32_t> m_txTrace;
+  /// Trace of received packets
   TracedCallback<Ptr<const Packet>, Ptr<Ipv4>, uint32_t> m_rxTrace;
   // <ip-header, payload, reason, ifindex> (ifindex not valid if reason is DROP_NO_ROUTE)
+  /// Trace of dropped packets
   TracedCallback<const Ipv4Header &, Ptr<const Packet>, DropReason, Ptr<Ipv4>, uint32_t> m_dropTrace;
 
-  Ptr<Ipv4RoutingProtocol> m_routingProtocol;
+  Ptr<Ipv4RoutingProtocol> m_routingProtocol; //!< Routing protocol associated with the stack
 
-  SocketList m_sockets;
+  SocketList m_sockets; //!< List of IPv4 raw sockets.
 
   /**
    * \class Fragments
@@ -374,15 +473,14 @@
 
   };
 
+  /// Container of fragments, stored as pairs(src+dst addr, src+dst port) / fragment
   typedef std::map< std::pair<uint64_t, uint32_t>, Ptr<Fragments> > MapFragments_t;
+  /// Container of fragment timeout event, stored as pairs(src+dst addr, src+dst port) / EventId
   typedef std::map< std::pair<uint64_t, uint32_t>, EventId > MapFragmentsTimers_t;
 
-  /**
-   * \brief The hash of fragmented packets.
-   */
-  MapFragments_t       m_fragments;
-  Time                 m_fragmentExpirationTimeout;
-  MapFragmentsTimers_t m_fragmentsTimers;
+  MapFragments_t       m_fragments; //!< Fragmented packets.
+  Time                 m_fragmentExpirationTimeout; //!< Expiration timeout
+  MapFragmentsTimers_t m_fragmentsTimers; //!< Expiration events.
 
 };
 
diff -Naur ns-3.18.1/src/internet/model/ipv4-list-routing.cc ns-3.19/src/internet/model/ipv4-list-routing.cc
--- ns-3.18.1/src/internet/model/ipv4-list-routing.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-list-routing.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4ListRouting);
+NS_OBJECT_ENSURE_REGISTERED (Ipv4ListRouting)
+  ;
 
 TypeId
 Ipv4ListRouting::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/ipv4-list-routing.h ns-3.19/src/internet/model/ipv4-list-routing.h
--- ns-3.18.1/src/internet/model/ipv4-list-routing.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-list-routing.h	2013-12-20 09:44:50.000000000 -0800
@@ -45,6 +45,10 @@
 class Ipv4ListRouting : public Ipv4RoutingProtocol
 {
 public:
+  /**
+   * \brief Get the type ID of this class.
+   * \return type ID
+   */
   static TypeId GetTypeId (void);
 
   Ipv4ListRouting ();
@@ -92,11 +96,25 @@
   void DoDispose (void);
   void DoInitialize (void);
 private:
+  /**
+   * \brief Container identifying an IPv4 Routing Protocol entry in the list.
+   */
   typedef std::pair<int16_t, Ptr<Ipv4RoutingProtocol> > Ipv4RoutingProtocolEntry;
+  /**
+   * \brief Container of the IPv4 Routing Protocols.
+   */
   typedef std::list<Ipv4RoutingProtocolEntry> Ipv4RoutingProtocolList;
-  Ipv4RoutingProtocolList m_routingProtocols;
+  Ipv4RoutingProtocolList m_routingProtocols; //!<  List of routing protocols.
+
+  /**
+   * \brief Compare two routing protocols.
+   * \param a first object to compare
+   * \param b second object to compare
+   * \return true if they are the same, false otherwise
+   */
   static bool Compare (const Ipv4RoutingProtocolEntry& a, const Ipv4RoutingProtocolEntry& b);
-  Ptr<Ipv4> m_ipv4;
+  Ptr<Ipv4> m_ipv4; //!< Ipv4 this protocol is associated with.
+
 
 };
 
diff -Naur ns-3.18.1/src/internet/model/ipv4-packet-info-tag.h ns-3.19/src/internet/model/ipv4-packet-info-tag.h
--- ns-3.18.1/src/internet/model/ipv4-packet-info-tag.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-packet-info-tag.h	2013-12-20 09:44:50.000000000 -0800
@@ -43,23 +43,67 @@
 {
 public:
   Ipv4PacketInfoTag ();
-  // Implemented, but not used in the stack yet
+
+  /**
+   * \brief Set the tag's address
+   *
+   * \param addr the address
+   */
   void SetAddress (Ipv4Address addr);
-  // Implemented, but not used in the stack yet
+
+  /**
+   * \brief Get the tag's address
+   *
+   * \returns the address
+   */
   Ipv4Address GetAddress (void) const;
-  // This corresponds to "ipi_spec_dst" in struct in_pktinfo.
-  // Implemented, but not used in the stack yet
+  /**
+   * \brief Set the tag's \a local address
+   *
+   * This corresponds to "ipi_spec_dst" in struct in_pktinfo.
+   * Implemented, but not used in the stack yet
+   * \param addr the address
+   */
   void SetLocalAddress (Ipv4Address addr);
-  // This corresponds to "ipi_spec_dst" in struct in_pktinfo.
-  // Implemented, but not used in the stack yet
+  /**
+   * \brief Get the tag's \a local address
+   *
+   * This corresponds to "ipi_spec_dst" in struct in_pktinfo.
+   * Implemented, but not used in the stack yet
+   * \returns the address
+   */
   Ipv4Address GetLocalAddress (void) const;
+
+  /**
+   * \brief Set the tag's receiving interface
+   *
+   * \param ifindex the interface index
+   */
   void SetRecvIf (uint32_t ifindex);
+  /**
+   * \brief Get the tag's receiving interface
+   *
+   * \returns the interface index
+   */
   uint32_t GetRecvIf (void) const;
-  // Implemented, but not used in the stack yet
+
+  /**
+   * \brief Set the tag's Time to Live
+   * Implemented, but not used in the stack yet
+   * \param ttl the TTL
+   */
   void SetTtl (uint8_t ttl);
-  // Implemented, but not used in the stack yet
+  /**
+   * \brief Get the tag's Time to Live
+   * Implemented, but not used in the stack yet
+   * \returns the TTL
+   */
   uint8_t GetTtl (void) const;
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
   virtual uint32_t GetSerializedSize (void) const;
@@ -77,12 +121,12 @@
   //                                   address */
   // };
 
-  Ipv4Address m_addr;
-  Ipv4Address m_spec_dst;
-  uint32_t m_ifindex;
+  Ipv4Address m_addr;     //!< Header destination address
+  Ipv4Address m_spec_dst; //!< Local address
+  uint32_t m_ifindex;     //!< interface index
 
-  // Uset for IP_RECVTTL, though not implemented yet.
-  uint8_t m_ttl;
+  // Used for IP_RECVTTL, though not implemented yet.
+  uint8_t m_ttl; //!< Time to Live
 };
 } // namespace ns3
 
diff -Naur ns-3.18.1/src/internet/model/ipv4-packet-probe.cc ns-3.19/src/internet/model/ipv4-packet-probe.cc
--- ns-3.18.1/src/internet/model/ipv4-packet-probe.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-packet-probe.cc	2013-12-20 09:44:50.000000000 -0800
@@ -32,7 +32,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4PacketProbe);
+NS_OBJECT_ENSURE_REGISTERED (Ipv4PacketProbe)
+  ;
 
 TypeId
 Ipv4PacketProbe::GetTypeId ()
diff -Naur ns-3.18.1/src/internet/model/ipv4-packet-probe.h ns-3.19/src/internet/model/ipv4-packet-probe.h
--- ns-3.18.1/src/internet/model/ipv4-packet-probe.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-packet-probe.h	2013-12-20 09:44:50.000000000 -0800
@@ -47,6 +47,10 @@
 class Ipv4PacketProbe : public Probe
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId ();
   Ipv4PacketProbe ();
   virtual ~Ipv4PacketProbe ();
@@ -102,7 +106,9 @@
    */
   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;
+  /// Traced Callback: the previous packet's size and the actual packet's size.
   TracedCallback<uint32_t, uint32_t> m_outputBytes;
 
   /// The traced packet.
diff -Naur ns-3.18.1/src/internet/model/ipv4-raw-socket-factory.cc ns-3.19/src/internet/model/ipv4-raw-socket-factory.cc
--- ns-3.18.1/src/internet/model/ipv4-raw-socket-factory.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-raw-socket-factory.cc	2013-12-20 09:44:50.000000000 -0800
@@ -25,7 +25,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4RawSocketFactory);
+NS_OBJECT_ENSURE_REGISTERED (Ipv4RawSocketFactory)
+  ;
 
 TypeId Ipv4RawSocketFactory::GetTypeId (void)
 {
diff -Naur ns-3.18.1/src/internet/model/ipv4-raw-socket-factory.h ns-3.19/src/internet/model/ipv4-raw-socket-factory.h
--- ns-3.18.1/src/internet/model/ipv4-raw-socket-factory.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-raw-socket-factory.h	2013-12-20 09:44:50.000000000 -0800
@@ -37,6 +37,10 @@
 class Ipv4RawSocketFactory : public SocketFactory
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
 };
diff -Naur ns-3.18.1/src/internet/model/ipv4-raw-socket-factory-impl.h ns-3.19/src/internet/model/ipv4-raw-socket-factory-impl.h
--- ns-3.18.1/src/internet/model/ipv4-raw-socket-factory-impl.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-raw-socket-factory-impl.h	2013-12-20 09:44:50.000000000 -0800
@@ -25,6 +25,12 @@
 
 namespace ns3 {
 
+/**
+ * \ingroup socket
+ *
+ * \class Ipv4RawSocketFactoryImpl
+ * \brief Implementation of IPv4 raw socket factory.
+ */
 class Ipv4RawSocketFactoryImpl : public Ipv4RawSocketFactory
 {
 public:
diff -Naur ns-3.18.1/src/internet/model/ipv4-raw-socket-impl.cc ns-3.19/src/internet/model/ipv4-raw-socket-impl.cc
--- ns-3.18.1/src/internet/model/ipv4-raw-socket-impl.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-raw-socket-impl.cc	2013-12-20 09:44:50.000000000 -0800
@@ -17,7 +17,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4RawSocketImpl);
+NS_OBJECT_ENSURE_REGISTERED (Ipv4RawSocketImpl)
+  ;
 
 TypeId 
 Ipv4RawSocketImpl::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/ipv4-raw-socket-impl.h ns-3.19/src/internet/model/ipv4-raw-socket-impl.h
--- ns-3.18.1/src/internet/model/ipv4-raw-socket-impl.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-raw-socket-impl.h	2013-12-20 09:44:50.000000000 -0800
@@ -13,17 +13,41 @@
 class NetDevice;
 class Node;
 
+/**
+ * \class Ipv4RawSocketImpl
+ * \brief IPv4 raw socket.
+ * \ingroup socket
+ *
+ * A RAW Socket typically is used to access specific IP layers not usually
+ * available through L4 sockets, e.g., ICMP. The implementer should take
+ * particular care to define the Ipv4RawSocketImpl Attributes, and in
+ * particular the Protocol attribute.
+ */
 class Ipv4RawSocketImpl : public Socket
 {
 public:
+  /**
+   * \brief Get the type ID of this class.
+   * \return type ID
+   */
   static TypeId GetTypeId (void);
 
   Ipv4RawSocketImpl ();
 
+  /**
+   * \brief Set the node associated with this socket.
+   * \param node node to set
+   */
   void SetNode (Ptr<Node> node);
 
-  virtual enum Socket::SocketErrno GetErrno (void) const;
+  virtual enum Socket::SocketErrno GetErrno () const;
+
+  /**
+   * \brief Get socket type (NS3_SOCK_RAW)
+   * \return socket type
+   */
   virtual enum Socket::SocketType GetSocketType (void) const;
+
   virtual Ptr<Node> GetNode (void) const;
   virtual int Bind (const Address &address);
   virtual int Bind ();
@@ -43,7 +67,20 @@
   virtual Ptr<Packet> RecvFrom (uint32_t maxSize, uint32_t flags,
                                 Address &fromAddress);
 
+
+  /**
+   * \brief Set protocol field.
+   * \param protocol protocol to set
+   */
   void SetProtocol (uint16_t protocol);
+
+  /**
+   * \brief Forward up to receive method.
+   * \param p packet
+   * \param ipHeader IPv4 header
+   * \param incomingInterface incoming interface
+   * \return true if forwarded, false otherwise
+   */
   bool ForwardUp (Ptr<const Packet> p, Ipv4Header ipHeader, Ptr<Ipv4Interface> incomingInterface);
   virtual bool SetAllowBroadcast (bool allowBroadcast);
   virtual bool GetAllowBroadcast () const;
@@ -51,22 +88,26 @@
 private:
   virtual void DoDispose (void);
 
+  /**
+   * \struct Data
+   * \brief IPv4 raw data and additional information.
+   */
   struct Data {
-    Ptr<Packet> packet;
-    Ipv4Address fromIp;
-    uint16_t fromProtocol;
+    Ptr<Packet> packet;  /**< Packet data */
+    Ipv4Address fromIp;  /**< Source address */
+    uint16_t fromProtocol;   /**< Protocol used */
   };
 
-  enum Socket::SocketErrno m_err;
-  Ptr<Node> m_node;
-  Ipv4Address m_src;
-  Ipv4Address m_dst;
-  uint16_t m_protocol;
-  std::list<struct Data> m_recv;
-  bool m_shutdownSend;
-  bool m_shutdownRecv;
-  uint32_t m_icmpFilter;
-  bool m_iphdrincl;
+  enum Socket::SocketErrno m_err;   //!< Last error number.
+  Ptr<Node> m_node;                 //!< Node
+  Ipv4Address m_src;                //!< Source address.
+  Ipv4Address m_dst;                //!< Destination address.
+  uint16_t m_protocol;              //!< Protocol.
+  std::list<struct Data> m_recv;    //!< Packet waiting to be processed.
+  bool m_shutdownSend;              //!< Flag to shutdown send capability.
+  bool m_shutdownRecv;              //!< Flag to shutdown receive capability.
+  uint32_t m_icmpFilter;            //!< ICMPv4 filter specification
+  bool m_iphdrincl;                 //!< Include IP Header information (a.k.a setsockopt (IP_HDRINCL))
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/ipv4-route.h ns-3.19/src/internet/model/ipv4-route.h
--- ns-3.18.1/src/internet/model/ipv4-route.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-route.h	2013-12-20 09:44:50.000000000 -0800
@@ -89,15 +89,22 @@
 #endif
 
 private:
-  Ipv4Address m_dest;
-  Ipv4Address m_source;
-  Ipv4Address m_gateway;
-  Ptr<NetDevice> m_outputDevice;
+  Ipv4Address m_dest;             //!< Destination address.
+  Ipv4Address m_source;           //!< Source address.
+  Ipv4Address m_gateway;          //!< Gateway address.
+  Ptr<NetDevice> m_outputDevice;  //!< Output device.
 #ifdef NOTYET
   uint32_t m_inputIfIndex;
 #endif
 };
 
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param route the Ipv4 route
+ * \returns the reference to the output stream
+ */
 std::ostream& operator<< (std::ostream& os, Ipv4Route const& route);
 
 /**
@@ -154,14 +161,14 @@
    */
   std::map<uint32_t, uint32_t> GetOutputTtlMap () const;
 
-  static const uint32_t MAX_INTERFACES = 16;  // Maximum number of multicast interfaces on a router
-  static const uint32_t MAX_TTL = 255;  // Maximum time-to-live (TTL)
+  static const uint32_t MAX_INTERFACES = 16;  //!< Maximum number of multicast interfaces on a router
+  static const uint32_t MAX_TTL = 255;  //!< Maximum time-to-live (TTL)
 
 private:
-  Ipv4Address m_group;      // Group 
-  Ipv4Address m_origin;     // Source of packet
-  uint32_t m_parent;        // Source interface
-  std::map<uint32_t, uint32_t> m_ttls;
+  Ipv4Address m_group;      //!< Group
+  Ipv4Address m_origin;     //!< Source of packet
+  uint32_t m_parent;        //!< Source interface
+  std::map<uint32_t, uint32_t> m_ttls; //!< Time to Live container
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/ipv4-routing-protocol.cc ns-3.19/src/internet/model/ipv4-routing-protocol.cc
--- ns-3.18.1/src/internet/model/ipv4-routing-protocol.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-routing-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -25,7 +25,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4RoutingProtocol);
+NS_OBJECT_ENSURE_REGISTERED (Ipv4RoutingProtocol)
+  ;
 
 TypeId Ipv4RoutingProtocol::GetTypeId (void)
 {
diff -Naur ns-3.18.1/src/internet/model/ipv4-routing-protocol.h ns-3.19/src/internet/model/ipv4-routing-protocol.h
--- ns-3.18.1/src/internet/model/ipv4-routing-protocol.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-routing-protocol.h	2013-12-20 09:44:50.000000000 -0800
@@ -50,11 +50,22 @@
 class Ipv4RoutingProtocol : public Object
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
+  /// Callback for unicast packets to be forwarded
   typedef Callback<void, Ptr<Ipv4Route>, Ptr<const Packet>, const Ipv4Header &> UnicastForwardCallback;
+
+  /// Callback for multicast packets to be forwarded
   typedef Callback<void, Ptr<Ipv4MulticastRoute>, Ptr<const Packet>, const Ipv4Header &> MulticastForwardCallback;
+
+  /// Callback for packets to be locally delivered
   typedef Callback<void, Ptr<const Packet>, const Ipv4Header &, uint32_t > LocalDeliverCallback;
+
+  /// Callback for routing errors (e.g., no route found)
   typedef Callback<void, Ptr<const Packet>, const Ipv4Header &, Socket::SocketErrno > ErrorCallback;
 
   /**
diff -Naur ns-3.18.1/src/internet/model/ipv4-routing-table-entry.h ns-3.19/src/internet/model/ipv4-routing-table-entry.h
--- ns-3.18.1/src/internet/model/ipv4-routing-table-entry.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-routing-table-entry.h	2013-12-20 09:44:50.000000000 -0800
@@ -135,25 +135,56 @@
                                                    uint32_t interface);
 
 private:
+  /**
+   * \brief Constructor.
+   * \param network network address
+   * \param mask network mask
+   * \param gateway the gateway
+   * \param interface the interface index
+   */
   Ipv4RoutingTableEntry (Ipv4Address network,
                          Ipv4Mask mask,
                          Ipv4Address gateway,
                          uint32_t interface);
+  /**
+   * \brief Constructor.
+   * \param dest destination address
+   * \param mask network mask
+   * \param interface the interface index
+   */
   Ipv4RoutingTableEntry (Ipv4Address dest,
                          Ipv4Mask mask,
                          uint32_t interface);
+  /**
+   * \brief Constructor.
+   * \param dest destination address
+   * \param gateway the gateway
+   * \param interface the interface index
+   */
   Ipv4RoutingTableEntry (Ipv4Address dest,
                          Ipv4Address gateway,
                          uint32_t interface);
+  /**
+   * \brief Constructor.
+   * \param dest destination address
+   * \param interface the interface index
+   */
   Ipv4RoutingTableEntry (Ipv4Address dest,
                          uint32_t interface);
 
-  Ipv4Address m_dest;
-  Ipv4Mask m_destNetworkMask;
-  Ipv4Address m_gateway;
-  uint32_t m_interface;
+  Ipv4Address m_dest;         //!< destination address
+  Ipv4Mask m_destNetworkMask; //!< destination network mask
+  Ipv4Address m_gateway;      //!< gateway
+  uint32_t m_interface;       //!< output interface
 };
 
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param route the Ipv4 routing table entry
+ * \returns the reference to the output stream
+ */
 std::ostream& operator<< (std::ostream& os, Ipv4RoutingTableEntry const& route);
 
 /**
@@ -215,15 +246,29 @@
                                                               std::vector<uint32_t> outputInterfaces);
 
 private:
+  /**
+   * \brief Constructor.
+   * \param origin source address
+   * \param group destination address
+   * \param inputInterface input interface
+   * \param outputInterfaces output interfaces
+   */
   Ipv4MulticastRoutingTableEntry (Ipv4Address origin, Ipv4Address group, 
                                   uint32_t inputInterface, std::vector<uint32_t> outputInterfaces);
 
-  Ipv4Address m_origin;
-  Ipv4Address m_group;
-  uint32_t m_inputInterface;
-  std::vector<uint32_t> m_outputInterfaces;
+  Ipv4Address m_origin;   //!< source address
+  Ipv4Address m_group;    //!< destination address
+  uint32_t m_inputInterface;    //!< input interface
+  std::vector<uint32_t> m_outputInterfaces;   //!< output interfaces
 };
 
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param route the Ipv4 multicast routing table entry
+ * \returns the reference to the output stream
+ */
 std::ostream& operator<< (std::ostream& os, Ipv4MulticastRoutingTableEntry const& route);
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/ipv4-static-routing.cc ns-3.19/src/internet/model/ipv4-static-routing.cc
--- ns-3.18.1/src/internet/model/ipv4-static-routing.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-static-routing.cc	2013-12-20 09:44:50.000000000 -0800
@@ -40,7 +40,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4StaticRouting);
+NS_OBJECT_ENSURE_REGISTERED (Ipv4StaticRouting)
+  ;
 
 TypeId
 Ipv4StaticRouting::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/ipv4-static-routing.h ns-3.19/src/internet/model/ipv4-static-routing.h
--- ns-3.18.1/src/internet/model/ipv4-static-routing.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv4-static-routing.h	2013-12-20 09:44:50.000000000 -0800
@@ -69,6 +69,10 @@
 class Ipv4StaticRouting : public Ipv4RoutingProtocol
 {
 public:
+  /**
+   * \brief The interface Id associated with this class.
+   * \return type identifier
+   */
   static TypeId GetTypeId (void);
 
   Ipv4StaticRouting ();
@@ -177,6 +181,7 @@
  * to the routing table.
  *
  * \warning The default route counts as one of the routes.
+ * \return number of entries
  */
   uint32_t GetNRoutes (void) const;
 
@@ -308,6 +313,7 @@
  * to the routing table.
  *
  * \warning The default multicast route counts as one of the routes.
+ * \return number of entries
  */
   uint32_t GetNMulticastRoutes (void) const;
 
@@ -375,23 +381,63 @@
   virtual void DoDispose (void);
 
 private:
+  /// Container for the network routes
   typedef std::list<std::pair <Ipv4RoutingTableEntry *, uint32_t> > NetworkRoutes;
+
+  /// Const Iterator for container for the network routes
   typedef std::list<std::pair <Ipv4RoutingTableEntry *, uint32_t> >::const_iterator NetworkRoutesCI;
+
+  /// Iterator for container for the network routes
   typedef std::list<std::pair <Ipv4RoutingTableEntry *, uint32_t> >::iterator NetworkRoutesI;
 
+  /// Container for the multicast routes
   typedef std::list<Ipv4MulticastRoutingTableEntry *> MulticastRoutes;
+
+  /// Const Iterator for container for the multicast routes
   typedef std::list<Ipv4MulticastRoutingTableEntry *>::const_iterator MulticastRoutesCI;
+
+  /// Iterator for container for the multicast routes
   typedef std::list<Ipv4MulticastRoutingTableEntry *>::iterator MulticastRoutesI;
 
+  /**
+   * \brief Lookup in the forwarding table for destination.
+   * \param dest destination address
+   * \param oif output interface if any (put 0 otherwise)
+   * \return Ipv4Route to route the packet to reach dest address
+   */
   Ptr<Ipv4Route> LookupStatic (Ipv4Address dest, Ptr<NetDevice> oif = 0);
+
+  /**
+   * \brief Lookup in the multicast forwarding table for destination.
+   * \param origin source address
+   * \param group group multicast address
+   * \param interface interface index
+   * \return Ipv4MulticastRoute to route the packet to reach dest address
+   */
   Ptr<Ipv4MulticastRoute> LookupStatic (Ipv4Address origin, Ipv4Address group,
                                         uint32_t interface);
 
+  /**
+   * \brief Choose the source address to use with destination address.
+   * \param interface interface index
+   * \param dest IPv4 destination address
+   * \return IPv4 source address to use
+   */
   Ipv4Address SourceAddressSelection (uint32_t interface, Ipv4Address dest);
 
+  /**
+   * \brief the forwarding table for network.
+   */
   NetworkRoutes m_networkRoutes;
+
+  /**
+   * \brief the forwarding table for multicast.
+   */
   MulticastRoutes m_multicastRoutes;
 
+  /**
+   * \brief Ipv4 reference.
+   */
   Ptr<Ipv4> m_ipv4;
 };
 
diff -Naur ns-3.18.1/src/internet/model/ipv6-address-generator.cc ns-3.19/src/internet/model/ipv6-address-generator.cc
--- ns-3.18.1/src/internet/model/ipv6-address-generator.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-address-generator.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,54 +28,163 @@
 
 namespace ns3 {
 
+/**
+ * \internal
+ * \ingroup address
+ *
+ * \brief Implementation class of Ipv6AddressGenerator
+ * This generator assigns addresses sequentially from a provided
+ * network address; used in topology code. It also keeps track of all
+ * addresses assigned to perform duplicate detection.
+ *
+ */
 class Ipv6AddressGeneratorImpl
 {
 public:
   Ipv6AddressGeneratorImpl ();
   virtual ~Ipv6AddressGeneratorImpl ();
 
+  /**
+   * \internal
+   * \brief Initialise the base network and interfaceId for the generator
+   *
+   * The first call to NextAddress() or GetAddress() will return the
+   * value passed in.
+   *
+   * \param net The network for the base Ipv6Address
+   * \param prefix The prefix of the base Ipv6Address
+   * \param interfaceId The base interface ID used for initialization
+   */
   void Init (const Ipv6Address net, const Ipv6Prefix prefix,
              const Ipv6Address interfaceId);
 
-  Ipv6Address GetNetwork (const Ipv6Prefix prefix) const;
+  /**
+   * \internal
+   * \brief Get the next network according to the given Ipv6Prefix
+   *
+   * This operation is a pre-increment, meaning that the internal state
+   * is changed before returning the new network address.
+   *
+   * This also resets the interface ID to the base interface ID that was
+   * used for initialization.
+   *
+   * \param prefix The Ipv6Prefix used to set the next network
+   * \returns the IPv6 address of the next network
+   */
   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
+   * network
+   *
+   * \param prefix The Ipv6Prefix for the current network
+   * \returns the IPv6 address of the current network
+   */
+  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
+   * \param prefix The Ipv6Prefix whose address is to be set
+   */
   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
+   * address that will be allocated upon NextAddress ()
+   *
+   * \param prefix The Ipv6Prefix for the current network
+   * \returns the IPv6 address
+   */
   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
+   * allocated will be the one that was initially configured.
+   *
+   * \param prefix The Ipv6Prefix for the current network
+   * \returns the IPv6 address
+   */
   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
+   * to make use of this class's ability to track duplicates.  AddAllocated
+   * is always called internally for any address generated by NextAddress ()
+   *
+   * \param addr The Ipv6Address to be added to the list of Ipv6 entries
+   * \returns true on success
+   */
   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;
-  static const uint32_t MOST_SIGNIFICANT_BIT = 0x80;
+  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
 
+  /**
+   * \internal
+   * \brief Create an index number for the prefix
+   * \param prefix the prefix to index
+   * \returns an index
+   */
   uint32_t PrefixToIndex (Ipv6Prefix prefix) const;
 
+  /**
+   * \internal
+   * \brief This class holds the state for a given network
+   */
   class NetworkState
   {
 public:
-    uint8_t prefix[16];
-    uint32_t shift;
-    uint8_t network[16];
-    uint8_t addr[16];
-    uint8_t addrMax[16];
+    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
   };
 
-  NetworkState m_netTable[N_BITS];
+  NetworkState m_netTable[N_BITS]; //!< /internal the available networks
 
+  /**
+   * \internal
+   * \brief This class holds the allocated addresses
+   */
   class Entry
   {
 public:
-    uint8_t addrLow[16];
-    uint8_t addrHigh[16];
+    uint8_t addrLow[16];  //!< /internal the lowest allocated address
+    uint8_t addrHigh[16]; //!< /internal the highest allocated address
   };
 
-  std::list<Entry> m_entries;
-  Ipv6Address m_base;
-  bool m_test;
+  std::list<Entry> m_entries; //!< /internal contained of allocated addresses
+  Ipv6Address m_base; //!< /internal base address
+  bool m_test; //!< /internal test mode (if true)
 };
 
 Ipv6AddressGeneratorImpl::Ipv6AddressGeneratorImpl ()
diff -Naur ns-3.18.1/src/internet/model/ipv6-address-generator.h ns-3.19/src/internet/model/ipv6-address-generator.h
--- ns-3.18.1/src/internet/model/ipv6-address-generator.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-address-generator.h	2013-12-20 09:44:50.000000000 -0800
@@ -50,6 +50,12 @@
  * The interface ID is often an EUI-64 address derived from the MAC address,
  * but can also be a pseudo-random value (\RFC{3041}).  This implementation
  * does not generate EUI-64-based interface IDs.
+ *
+ * \note BEWARE: this class acts as a Singleton.
+ * In other terms, two different instances of Ipv6AddressGenerator will
+ * pick IPv6 numbers from the same pool. Changing the network in one of them
+ * will also change the network in the other instances.
+ *
  */
 class Ipv6AddressGenerator
 {
@@ -68,7 +74,7 @@
                     const Ipv6Address interfaceId = "::1");
 
   /**
-   * \brief Get the next network acoording to the given Ipv6Prefix
+   * \brief Get the next network according to the given Ipv6Prefix
    *
    * This operation is a pre-increment, meaning that the internal state
    * is changed before returning the new network address.
@@ -77,6 +83,7 @@
    * used for initialization.
    *
    * \param prefix The Ipv6Prefix used to set the next network
+   * \returns the IPv6 address of the next network
    */
   static Ipv6Address NextNetwork (const Ipv6Prefix prefix);
 
@@ -87,6 +94,7 @@
    * network
    *
    * \param prefix The Ipv6Prefix for the current network
+   * \returns the IPv6 address of the current network
    */
   static Ipv6Address GetNetwork (const Ipv6Prefix prefix);
 
@@ -103,18 +111,20 @@
    *
    * This operation is a post-increment, meaning that the first address
    * allocated will be the one that was initially configured.
-   * .
+   *
    * \param prefix The Ipv6Prefix for the current network
+   * \returns the IPv6 address
    */
   static Ipv6Address NextAddress (const Ipv6Prefix prefix);
 
   /**
-   * \brief Get the Ipv6Address that will be allocated upon NextAddress()
+   * \brief Get the Ipv6Address that will be allocated upon NextAddress ()
    *
    * Does not change the internal state; just is used to peek the next
    * address that will be allocated upon NextAddress ()
    *
    * \param prefix The Ipv6Prefix for the current network
+   * \returns the IPv6 address
    */
   static Ipv6Address GetAddress (const Ipv6Prefix prefix);
 
@@ -128,9 +138,10 @@
    *
    * Typically, this is used by external address allocators that want
    * to make use of this class's ability to track duplicates.  AddAllocated
-   * is always called internally for any address generated by NextAddress()
+   * is always called internally for any address generated by NextAddress ()
    *
    * \param addr The Ipv6Address to be added to the list of Ipv6 entries
+   * \returns true on success
    */
   static bool AddAllocated (const Ipv6Address addr);
 
diff -Naur ns-3.18.1/src/internet/model/ipv6.cc ns-3.19/src/internet/model/ipv6.cc
--- ns-3.18.1/src/internet/model/ipv6.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6.cc	2013-12-20 09:44:50.000000000 -0800
@@ -29,7 +29,8 @@
 namespace ns3 
 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6)
+  ;
 
 TypeId Ipv6::GetTypeId (void)
 {
diff -Naur ns-3.18.1/src/internet/model/ipv6-end-point.cc ns-3.19/src/internet/model/ipv6-end-point.cc
--- ns-3.18.1/src/internet/model/ipv6-end-point.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-end-point.cc	2013-12-20 09:44:50.000000000 -0800
@@ -27,7 +27,8 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6EndPoint");
+NS_LOG_COMPONENT_DEFINE ("Ipv6EndPoint")
+  ;
 
 Ipv6EndPoint::Ipv6EndPoint (Ipv6Address addr, uint16_t port)
   : m_localAddr (addr),
@@ -95,7 +96,7 @@
   m_peerPort = port;
 }
 
-void Ipv6EndPoint::SetRxCallback (Callback<void, Ptr<Packet>, Ipv6Header, uint16_t> callback)
+void Ipv6EndPoint::SetRxCallback (Callback<void, Ptr<Packet>, Ipv6Header, uint16_t, Ptr<Ipv6Interface> > callback)
 {
   m_rxCallback = callback;
 }
@@ -110,11 +111,12 @@
   m_destroyCallback = callback;
 }
 
-void Ipv6EndPoint::ForwardUp (Ptr<Packet> p, Ipv6Header header, uint16_t port)
+void Ipv6EndPoint::ForwardUp (Ptr<Packet> p, Ipv6Header header, uint16_t port, Ptr<Ipv6Interface> incomingInterface)
 {
   if (!m_rxCallback.IsNull ())
     {
-      m_rxCallback (p, header, port);
+      Simulator::ScheduleNow (&Ipv6EndPoint::DoForwardUp, this, p, header, port,
+                              incomingInterface);
     }
 }
 
@@ -128,9 +130,9 @@
     }
 }
 
-void Ipv6EndPoint::DoForwardUp (Ptr<Packet> p, Ipv6Header header, uint16_t sport)
+void Ipv6EndPoint::DoForwardUp (Ptr<Packet> p, Ipv6Header header, uint16_t sport, Ptr<Ipv6Interface> incomingInterface)
 {
-  m_rxCallback (p, header, sport);
+  m_rxCallback (p, header, sport, incomingInterface);
 }
 
 void Ipv6EndPoint::DoForwardIcmp (Ipv6Address src, uint8_t ttl, uint8_t type, 
diff -Naur ns-3.18.1/src/internet/model/ipv6-end-point-demux.cc ns-3.19/src/internet/model/ipv6-end-point-demux.cc
--- ns-3.18.1/src/internet/model/ipv6-end-point-demux.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-end-point-demux.cc	2013-12-20 09:44:50.000000000 -0800
@@ -24,7 +24,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6EndPointDemux");
+NS_LOG_COMPONENT_DEFINE ("Ipv6EndPointDemux")
+  ;
 
 Ipv6EndPointDemux::Ipv6EndPointDemux ()
   : m_ephemeral (49152),
diff -Naur ns-3.18.1/src/internet/model/ipv6-end-point-demux.h ns-3.19/src/internet/model/ipv6-end-point-demux.h
--- ns-3.18.1/src/internet/model/ipv6-end-point-demux.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-end-point-demux.h	2013-12-20 09:44:50.000000000 -0800
@@ -37,17 +37,17 @@
 class Ipv6EndPointDemux
 {
 public:
-  typedef std::list<Ipv6EndPoint *>EndPoints;
-  typedef std::list<Ipv6EndPoint *>::iterator EndPointsI;
-
   /**
-   * \brief Constructor.
+   * \brief Container of the IPv6 endpoints.
    */
-  Ipv6EndPointDemux ();
+  typedef std::list<Ipv6EndPoint *>EndPoints;
 
   /**
-   * \brief Destructor.
+   * \brief Iterator to the container of the IPv6 endpoints.
    */
+  typedef std::list<Ipv6EndPoint *>::iterator EndPointsI;
+
+  Ipv6EndPointDemux ();
   ~Ipv6EndPointDemux ();
 
   /**
@@ -72,7 +72,7 @@
    * \param src source address to test
    * \param sport source port to test
    * \param incomingInterface the incoming interface
-   * \return list en IPv6EndPoints (could be 0 element)
+   * \return list of IPv6EndPoints (could be 0 element)
    */
   EndPoints Lookup (Ipv6Address dst, uint16_t dport, Ipv6Address src, uint16_t sport, Ptr<Ipv6Interface> incomingInterface);
 
diff -Naur ns-3.18.1/src/internet/model/ipv6-end-point.h ns-3.19/src/internet/model/ipv6-end-point.h
--- ns-3.18.1/src/internet/model/ipv6-end-point.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-end-point.h	2013-12-20 09:44:50.000000000 -0800
@@ -27,6 +27,7 @@
 #include "ns3/callback.h"
 #include "ns3/ipv6-header.h"
 #include "ns3/net-device.h"
+#include "ns3/ipv6-interface.h"
 
 namespace ns3
 {
@@ -35,8 +36,14 @@
 class Packet;
 
 /**
- * \class Ipv6EndPoint
- * \brief An IPv6 end point, four tuples identification.
+ * \brief A representation of an internet IPv6 endpoint/connection
+ *
+ * This class provides an internet four-tuple (source and destination ports
+ * and addresses).  These are used in the ns3::Ipv6EndPointDemux as targets
+ * of lookups.  The class also has a callback for notification to higher
+ * layers that a packet from a lower layer was received.  In the ns3
+ * internet-stack, these notifications are automatically registered to be
+ * received by the corresponding socket.
  */
 class Ipv6EndPoint
 {
@@ -48,9 +55,6 @@
    */
   Ipv6EndPoint (Ipv6Address addr, uint16_t port);
 
-  /**
-   * \brief Destructor.
-   */
   ~Ipv6EndPoint ();
 
   /**
@@ -113,7 +117,6 @@
    * the socket can not receive any packets as a result.
    *
    * \param netdevice Pointer to Netdevice of desired interface
-   * \returns nothing
    */
   void BindToNetDevice (Ptr<NetDevice> netdevice);
 
@@ -132,7 +135,7 @@
    * \brief Set the reception callback.
    * \param callback callback function
    */
-  void SetRxCallback (Callback<void, Ptr<Packet>, Ipv6Header, uint16_t> callback);
+  void SetRxCallback (Callback<void, Ptr<Packet>, Ipv6Header, uint16_t, Ptr<Ipv6Interface> > callback);
 
   /**
    * \brief Set the ICMP callback.
@@ -148,16 +151,23 @@
 
   /**
    * \brief Forward the packet to the upper level.
+   *
+   * Called from an L4Protocol implementation to notify an endpoint of a
+   * packet reception.
+   *
    * \param p the packet
-   * \param srcAddr source address
-   * \param dstAddr source address
+   * \param header the packet header
    * \param port source port
+   * \param incomingInterface incoming interface
    */
-  void ForwardUp (Ptr<Packet> p, Ipv6Header header, uint16_t port);
+  void ForwardUp (Ptr<Packet> p, Ipv6Header header, uint16_t port, Ptr<Ipv6Interface> incomingInterface);
 
   /**
-   * \brief Function called from an L4Protocol implementation
-   * to notify an endpoint of an icmp message reception.
+   * \brief Forward the ICMP packet to the upper level.
+   *
+   * Called from an L4Protocol implementation to notify an endpoint of
+   * an icmp message reception.
+   *
    * \param src source IPv6 address
    * \param ttl time-to-live
    * \param type ICMPv6 type
@@ -171,11 +181,11 @@
   /**
    * \brief ForwardUp wrapper.
    * \param p packet
-   * \param saddr source IPv6 address
-   * \param daddr dest IPv6 address
+   * \param header the packet header
    * \param sport source port
+   * \param incomingInterface incoming interface
    */
-  void DoForwardUp (Ptr<Packet> p, Ipv6Header header, uint16_t sport);
+  void DoForwardUp (Ptr<Packet> p, Ipv6Header header, uint16_t sport, Ptr<Ipv6Interface> incomingInterface);
 
   /**
    * \brief ForwardIcmp wrapper.
@@ -216,7 +226,7 @@
   /**
    * \brief The RX callback.
    */
-  Callback<void, Ptr<Packet>, Ipv6Header, uint16_t> m_rxCallback;
+  Callback<void, Ptr<Packet>, Ipv6Header, uint16_t, Ptr<Ipv6Interface> > m_rxCallback;
 
   /**
    * \brief The ICMPv6 callback.
diff -Naur ns-3.18.1/src/internet/model/ipv6-extension.cc ns-3.19/src/internet/model/ipv6-extension.cc
--- ns-3.18.1/src/internet/model/ipv6-extension.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-extension.cc	2013-12-20 09:44:50.000000000 -0800
@@ -44,7 +44,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6Extension);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6Extension)
+  ;
 
 TypeId Ipv6Extension::GetTypeId ()
 {
@@ -182,7 +183,8 @@
   return 1;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionHopByHop);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionHopByHop)
+  ;
 
 TypeId Ipv6ExtensionHopByHop::GetTypeId ()
 {
@@ -234,7 +236,8 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionDestination);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionDestination)
+  ;
 
 TypeId Ipv6ExtensionDestination::GetTypeId ()
 {
@@ -286,7 +289,8 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionFragment);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionFragment)
+  ;
 
 TypeId Ipv6ExtensionFragment::GetTypeId ()
 {
@@ -506,6 +510,7 @@
         {
           moreFragment = true;
           currentFragmentablePartSize = maxFragmentablePartSize;
+          currentFragmentablePartSize -= currentFragmentablePartSize % 8;
         }
       else
         {
@@ -513,10 +518,8 @@
           currentFragmentablePartSize = p->GetSize () - offset;
         }
 
-      currentFragmentablePartSize -= currentFragmentablePartSize % 8;
 
       fragmentHeader.SetNextHeader (nextHeader);
-      fragmentHeader.SetLength (currentFragmentablePartSize);
       fragmentHeader.SetOffset (offset);
       fragmentHeader.SetMoreFragment (moreFragment);
       fragmentHeader.SetIdentification (identification);
@@ -704,7 +707,8 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionRouting);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionRouting)
+  ;
 
 TypeId Ipv6ExtensionRouting::GetTypeId ()
 {
@@ -789,7 +793,8 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionRoutingDemux);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionRoutingDemux)
+  ;
 
 TypeId Ipv6ExtensionRoutingDemux::GetTypeId ()
 {
@@ -851,7 +856,8 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionLooseRouting);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionLooseRouting)
+  ;
 
 TypeId Ipv6ExtensionLooseRouting::GetTypeId ()
 {
@@ -1004,7 +1010,8 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionESP);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionESP)
+  ;
 
 TypeId Ipv6ExtensionESP::GetTypeId ()
 {
@@ -1042,7 +1049,8 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionAH);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionAH)
+  ;
 
 TypeId Ipv6ExtensionAH::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/internet/model/ipv6-extension-demux.cc ns-3.19/src/internet/model/ipv6-extension-demux.cc
--- ns-3.18.1/src/internet/model/ipv6-extension-demux.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-extension-demux.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 namespace ns3
 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionDemux);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionDemux)
+  ;
 
 TypeId Ipv6ExtensionDemux::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/internet/model/ipv6-extension-demux.h ns-3.19/src/internet/model/ipv6-extension-demux.h
--- ns-3.18.1/src/internet/model/ipv6-extension-demux.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-extension-demux.h	2013-12-20 09:44:50.000000000 -0800
@@ -86,6 +86,10 @@
   virtual void DoDispose ();
 
 private:
+
+  /**
+   * \brief Container of the IPv6 Extensions.
+   */
   typedef std::list<Ptr<Ipv6Extension> > Ipv6ExtensionList_t;
 
   /**
diff -Naur ns-3.18.1/src/internet/model/ipv6-extension.h ns-3.19/src/internet/model/ipv6-extension.h
--- ns-3.18.1/src/internet/model/ipv6-extension.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-extension.h	2013-12-20 09:44:50.000000000 -0800
@@ -381,7 +381,6 @@
    * \brief Process the timeout for packet fragments
    * \param key representing the packet fragments
    * \param ipHeader the IP header of the original packet
-   * \param iif Input Interface
    */
   void HandleFragmentsTimeout (std::pair<Ipv6Address, uint32_t> key, Ipv6Header & ipHeader);
 
@@ -401,6 +400,9 @@
    */
   void CancelTimeout ();
 
+  /**
+   * \brief Container for the packet fragments.
+   */
   typedef std::map<std::pair<Ipv6Address, uint32_t>, Ptr<Fragments> > MapFragments_t;
 
   /**
@@ -521,6 +523,9 @@
   virtual void DoDispose ();
 
 private:
+  /**
+   * \brief Container for the extension routing.
+   */
   typedef std::list<Ptr<Ipv6ExtensionRouting> > Ipv6ExtensionRoutingList_t;
 
   /**
diff -Naur ns-3.18.1/src/internet/model/ipv6-extension-header.cc ns-3.19/src/internet/model/ipv6-extension-header.cc
--- ns-3.18.1/src/internet/model/ipv6-extension-header.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-extension-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,9 +26,11 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6ExtensionHeader");
+NS_LOG_COMPONENT_DEFINE ("Ipv6ExtensionHeader")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionHeader);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionHeader)
+  ;
 
 TypeId Ipv6ExtensionHeader::GetTypeId ()
 {
@@ -199,7 +201,8 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionHopByHopHeader);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionHopByHopHeader)
+  ;
 
 TypeId Ipv6ExtensionHopByHopHeader::GetTypeId ()
 {
@@ -254,7 +257,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionDestinationHeader);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionDestinationHeader)
+  ;
 
 TypeId Ipv6ExtensionDestinationHeader::GetTypeId ()
 {
@@ -309,7 +313,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionFragmentHeader);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionFragmentHeader)
+  ;
 
 TypeId Ipv6ExtensionFragmentHeader::GetTypeId ()
 {
@@ -329,6 +334,7 @@
   : m_offset (0),
     m_identification (0)
 {
+  SetLength (0);
 }
 
 Ipv6ExtensionFragmentHeader::~Ipv6ExtensionFragmentHeader ()
@@ -383,7 +389,7 @@
   Buffer::Iterator i = start;
 
   i.WriteU8 (GetNextHeader ());
-  i.WriteU8 ((GetLength () >> 3) - 1);
+  i.WriteU8 (0);
   i.WriteHtonU16 (m_offset);
   i.WriteHtonU32 (m_identification);
 }
@@ -393,14 +399,16 @@
   Buffer::Iterator i = start;
 
   SetNextHeader (i.ReadU8 ());
-  SetLength ((i.ReadU8 () + 1) << 3);
+  i.ReadU8();
+  SetLength (0);
   m_offset = i.ReadNtohU16 ();
   m_identification = i.ReadNtohU32 ();
 
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionRoutingHeader);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionRoutingHeader)
+  ;
 
 TypeId Ipv6ExtensionRoutingHeader::GetTypeId ()
 {
@@ -479,7 +487,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionLooseRoutingHeader);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionLooseRoutingHeader)
+  ;
 
 TypeId Ipv6ExtensionLooseRoutingHeader::GetTypeId ()
 {
@@ -586,7 +595,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionESPHeader);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionESPHeader)
+  ;
 
 TypeId Ipv6ExtensionESPHeader::GetTypeId ()
 {
@@ -632,7 +642,8 @@
   return 0;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionAHHeader);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionAHHeader)
+  ;
 
 TypeId Ipv6ExtensionAHHeader::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/internet/model/ipv6-extension-header.h ns-3.19/src/internet/model/ipv6-extension-header.h
--- ns-3.18.1/src/internet/model/ipv6-extension-header.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-extension-header.h	2013-12-20 09:44:50.000000000 -0800
@@ -196,6 +196,7 @@
   /**
    * \brief Calculate padding.
    * \param alignment alignment
+   * \return the number of pad bytes
    */
   uint32_t CalculatePad (Ipv6OptionHeader::Alignment alignment) const;
 
diff -Naur ns-3.18.1/src/internet/model/ipv6.h ns-3.19/src/internet/model/ipv6.h
--- ns-3.18.1/src/internet/model/ipv6.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6.h	2013-12-20 09:44:50.000000000 -0800
@@ -79,6 +79,10 @@
 class Ipv6 : public Object
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   /**
diff -Naur ns-3.18.1/src/internet/model/ipv6-header.cc ns-3.19/src/internet/model/ipv6-header.cc
--- ns-3.18.1/src/internet/model/ipv6-header.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -29,7 +29,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6Header);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6Header)
+  ;
 
 Ipv6Header::Ipv6Header ()
   : m_version (6),
diff -Naur ns-3.18.1/src/internet/model/ipv6-interface-address.cc ns-3.19/src/internet/model/ipv6-interface-address.cc
--- ns-3.18.1/src/internet/model/ipv6-interface-address.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-interface-address.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6InterfaceAddress");
+NS_LOG_COMPONENT_DEFINE ("Ipv6InterfaceAddress")
+  ;
 
 Ipv6InterfaceAddress::Ipv6InterfaceAddress () 
   : m_address (Ipv6Address ()),
@@ -139,8 +140,22 @@
 
 std::ostream& operator<< (std::ostream& os, const Ipv6InterfaceAddress &addr)
 {
-  os << "address=" << addr.GetAddress () << "; prefix=" <<
-  addr.GetPrefix () << "; scope=" << addr.GetScope ();
+  os << "address: " << addr.GetAddress () << addr.GetPrefix () << "; scope: ";
+  switch (addr.GetScope ())
+  {
+    case Ipv6InterfaceAddress::HOST:
+      os << "HOST";
+      break;
+    case Ipv6InterfaceAddress::LINKLOCAL:
+      os << "LINK-LOCAL";
+      break;
+    case Ipv6InterfaceAddress::GLOBAL:
+      os << "GLOBAL";
+      break;
+    default:
+      os << "UNKNOWN";
+      break;
+  }
   return os;
 }
 
diff -Naur ns-3.18.1/src/internet/model/ipv6-interface-address.h ns-3.19/src/internet/model/ipv6-interface-address.h
--- ns-3.18.1/src/internet/model/ipv6-interface-address.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-interface-address.h	2013-12-20 09:44:50.000000000 -0800
@@ -53,7 +53,7 @@
 
   /**
    * \enum Scope_e
-   * \brief Scope of address.
+   * \brief Address scope.
    */
   enum Scope_e
   {
@@ -179,7 +179,22 @@
    */
   Scope_e m_scope;
 
+  /**
+   * \brief Equal to operator.
+   *
+   * \param a the first operand
+   * \param b the first operand
+   * \returns true if the operands are equal
+   */
   friend bool operator == (Ipv6InterfaceAddress const& a, Ipv6InterfaceAddress const& b);
+
+  /**
+   * \brief Not equal to operator.
+   *
+   * \param a the first operand
+   * \param b the first operand
+   * \returns true if the operands are not equal
+   */
   friend bool operator != (Ipv6InterfaceAddress const& a, Ipv6InterfaceAddress const& b);
 
   /**
@@ -188,6 +203,13 @@
   uint32_t m_nsDadUid;
 };
 
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param addr the Ipv6InterfaceAddress
+ * \returns the reference to the output stream
+ */
 std::ostream& operator<< (std::ostream& os, const Ipv6InterfaceAddress &addr);
 
 /* follow Ipv4InterfaceAddress way, maybe not inline them */
diff -Naur ns-3.18.1/src/internet/model/ipv6-interface.cc ns-3.19/src/internet/model/ipv6-interface.cc
--- ns-3.18.1/src/internet/model/ipv6-interface.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-interface.cc	2013-12-20 09:44:50.000000000 -0800
@@ -34,9 +34,11 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6Interface");
+NS_LOG_COMPONENT_DEFINE ("Ipv6Interface")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6Interface);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6Interface)
+  ;
 
 TypeId Ipv6Interface::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/internet/model/ipv6-interface.h ns-3.19/src/internet/model/ipv6-interface.h
--- ns-3.18.1/src/internet/model/ipv6-interface.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-interface.h	2013-12-20 09:44:50.000000000 -0800
@@ -42,7 +42,7 @@
  * \brief The IPv6 representation of a network interface
  *
  * By default IPv6 interfaces are created in the "down" state
- * with IP "fe80::1" and a /64 prefix. Before becoming useable,
+ * with IP "fe80::1" and a /64 prefix. Before becoming usable,
  * the user must invoke SetUp on them once the final IPv6 address
  * and mask has been set.
  */
@@ -257,8 +257,19 @@
   virtual void DoDispose ();
 
 private:
+  /**
+   * \brief Container for the Ipv6InterfaceAddresses.
+   */
   typedef std::list<Ipv6InterfaceAddress> Ipv6InterfaceAddressList;
+
+  /**
+   * \brief Container Iterator for the Ipv6InterfaceAddresses.
+   */
   typedef std::list<Ipv6InterfaceAddress>::iterator Ipv6InterfaceAddressListI;
+
+  /**
+   * \brief Const Container Iterator for the Ipv6InterfaceAddresses.
+   */
   typedef std::list<Ipv6InterfaceAddress>::const_iterator Ipv6InterfaceAddressListCI;
 
   /**
diff -Naur ns-3.18.1/src/internet/model/ipv6-l3-protocol.cc ns-3.19/src/internet/model/ipv6-l3-protocol.cc
--- ns-3.18.1/src/internet/model/ipv6-l3-protocol.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-l3-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -49,9 +49,11 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6L3Protocol);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6L3Protocol)
+  ;
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6L3Protocol");
+NS_LOG_COMPONENT_DEFINE ("Ipv6L3Protocol")
+  ;
 
 const uint16_t Ipv6L3Protocol::PROT_NUMBER = 0x86DD;
 
@@ -484,11 +486,23 @@
   NS_LOG_FUNCTION (this << i);
   Ptr<Ipv6Interface> interface = GetInterface (i);
 
-  interface->SetUp ();
+  // RFC 2460, Section 5, pg. 24:
+  //  IPv6 requires that every link in the internet have an MTU of 1280
+  //  octets or greater.  On any link that cannot convey a 1280-octet
+  //  packet in one piece, link-specific fragmentation and reassembly must
+  //  be provided at a layer below IPv6.
+  if (interface->GetDevice ()->GetMtu () >= 1280)
+    {
+      interface->SetUp ();
 
-  if (m_routingProtocol != 0)
+      if (m_routingProtocol != 0)
+        {
+          m_routingProtocol->NotifyInterfaceUp (i);
+        }
+    }
+  else
     {
-      m_routingProtocol->NotifyInterfaceUp (i);
+      NS_LOG_LOGIC ("Interface " << int(i) << " is set to be down for IPv6. Reason: not respecting minimum IPv6 MTU (1280 octects)");
     }
 }
 
diff -Naur ns-3.18.1/src/internet/model/ipv6-l3-protocol.h ns-3.19/src/internet/model/ipv6-l3-protocol.h
--- ns-3.18.1/src/internet/model/ipv6-l3-protocol.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-l3-protocol.h	2013-12-20 09:44:50.000000000 -0800
@@ -94,7 +94,7 @@
   virtual ~Ipv6L3Protocol ();
 
   /**
-   * \brief Set node for this stack.
+   * \brief Set node associated with this stack.
    * \param node node to set
    */
   void SetNode (Ptr<Node> node);
@@ -217,6 +217,7 @@
   /**
    * \brief Get interface index which is on a specified net device.
    * \param device net device
+   * \returns the interface index
    */
   int32_t GetInterfaceForDevice (Ptr<const NetDevice> device) const;
 
@@ -224,6 +225,7 @@
    * \brief Add an address on interface.
    * \param i interface index
    * \param address to add
+   * \returns true if the operation succeeded
    */
   bool AddAddress (uint32_t i, Ipv6InterfaceAddress address);
 
@@ -246,6 +248,7 @@
    * \brief Remove an address from an interface.
    * \param interfaceIndex interface index
    * \param addressIndex address index on the interface
+   * \returns true if the operation succeeded
    */
   bool RemoveAddress (uint32_t interfaceIndex, uint32_t addressIndex);
 
@@ -255,7 +258,7 @@
    * \param address Ipv6Address to be removed from the interface
    * \returns true if the operation succeeded
    */
-  bool RemoveAddress (uint32_t interface, Ipv6Address address);
+  bool RemoveAddress (uint32_t interfaceIndex, Ipv6Address address);
 
   /**
    * \brief Set metric for an interface.
@@ -288,6 +291,7 @@
   /**
    * \brief Is specified interface up ?
    * \param i interface index
+   * \returns true if the interface is up
    */
   bool IsUp (uint32_t i) const;
 
@@ -306,6 +310,7 @@
   /**
    * \brief Is interface allows forwarding ?
    * \param i interface index
+   * \returns true if the interface is forwarding
    */
   bool IsForwarding (uint32_t i) const;
 
@@ -380,11 +385,29 @@
   friend class Ipv6L3ProtocolTestCase;
   friend class Ipv6ExtensionLooseRouting;
 
+  /**
+   * \brief Container of the IPv6 Interfaces.
+   */
   typedef std::list<Ptr<Ipv6Interface> > Ipv6InterfaceList;
+
+  /**
+   * \brief Container of the IPv6 Raw Sockets.
+   */
   typedef std::list<Ptr<Ipv6RawSocketImpl> > SocketList;
+
+  /**
+   * \brief Container of the IPv6 L4 instances.
+   */
   typedef std::list<Ptr<IpL4Protocol> > L4List_t;
 
+  /**
+   * \brief Container of the IPv6 Autoconfigured addresses.
+   */
   typedef std::list< Ptr<Ipv6AutoconfiguredPrefix> > Ipv6AutoconfiguredPrefixList;
+
+  /**
+   * \brief Iterator of the container of the IPv6 Autoconfigured addresses.
+   */
   typedef std::list< Ptr<Ipv6AutoconfiguredPrefix> >::iterator Ipv6AutoconfiguredPrefixListI;
 
   /**
@@ -404,15 +427,18 @@
 
   /**
    * \brief Copy constructor.
-   * \param o object to copy
+   *
+   * Defined but not implemented to avoid misuse
    */
-  Ipv6L3Protocol (const Ipv6L3Protocol& o);
+  Ipv6L3Protocol (const Ipv6L3Protocol&);
 
   /**
    * \brief Copy constructor.
-   * \param o object to copy
+   *
+   * Defined but not implemented to avoid misuse
+   * \returns the copied object
    */
-  Ipv6L3Protocol &operator = (const Ipv6L3Protocol& o);
+  Ipv6L3Protocol &operator = (const Ipv6L3Protocol&);
 
   /**
    * \brief Construct an IPv6 header.
@@ -421,6 +447,7 @@
    * \param protocol L4 protocol
    * \param payloadSize payload size
    * \param hopLimit Hop limit
+   * \param tclass Tclass
    * \return newly created IPv6 header
    */
   Ipv6Header BuildHeader (Ipv6Address src, Ipv6Address dst, uint8_t protocol,
@@ -444,7 +471,7 @@
   void IpForward (Ptr<const NetDevice> idev, Ptr<Ipv6Route> rtentry, Ptr<const Packet> p, const Ipv6Header& header);
 
   /**
-   * \brief Forward a packet in multicast.
+   * \brief Forward a multicast packet.
    * \param idev Pointer to ingress network device
    * \param mrtentry route 
    * \param p packet to forward
diff -Naur ns-3.18.1/src/internet/model/ipv6-list-routing.cc ns-3.19/src/internet/model/ipv6-list-routing.cc
--- ns-3.18.1/src/internet/model/ipv6-list-routing.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-list-routing.cc	2013-12-20 09:44:50.000000000 -0800
@@ -29,7 +29,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ListRouting);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ListRouting)
+  ;
 
 TypeId
 Ipv6ListRouting::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/ipv6-list-routing.h ns-3.19/src/internet/model/ipv6-list-routing.h
--- ns-3.18.1/src/internet/model/ipv6-list-routing.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-list-routing.h	2013-12-20 09:44:50.000000000 -0800
@@ -118,7 +118,14 @@
   virtual void DoDispose (void);
 
 private:
+  /**
+   * \brief Container identifying an IPv6 Routing Protocol entry in the list.
+   */
   typedef std::pair<int16_t, Ptr<Ipv6RoutingProtocol> > Ipv6RoutingProtocolEntry;
+
+  /**
+   * \brief Container of the IPv6 Routing Protocols.
+   */
   typedef std::list<Ipv6RoutingProtocolEntry> Ipv6RoutingProtocolList;
 
   /**
@@ -129,15 +136,8 @@
    */
   static bool Compare (const Ipv6RoutingProtocolEntry& a, const Ipv6RoutingProtocolEntry& b);
 
-  /**
-   * \brief List of routing protocols.
-   */
-  Ipv6RoutingProtocolList m_routingProtocols;
-
-  /**
-   * \brief Ipv6 reference.
-   */
-  Ptr<Ipv6> m_ipv6;
+  Ipv6RoutingProtocolList m_routingProtocols; //!<  List of routing protocols.
+  Ptr<Ipv6> m_ipv6;  //!< Ipv6 this protocol is associated with.
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/ipv6-option.cc ns-3.19/src/internet/model/ipv6-option.cc
--- ns-3.18.1/src/internet/model/ipv6-option.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-option.cc	2013-12-20 09:44:50.000000000 -0800
@@ -29,7 +29,8 @@
 namespace ns3
 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6Option);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6Option)
+  ;
 
 TypeId Ipv6Option::GetTypeId ()
 {
@@ -55,7 +56,8 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionPad1);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionPad1)
+  ;
 
 TypeId Ipv6OptionPad1::GetTypeId ()
 {
@@ -99,7 +101,8 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionPadn);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionPadn)
+  ;
 
 TypeId Ipv6OptionPadn::GetTypeId ()
 {
@@ -143,7 +146,8 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionJumbogram);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionJumbogram)
+  ;
 
 TypeId Ipv6OptionJumbogram::GetTypeId ()
 {
@@ -187,7 +191,8 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionRouterAlert);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionRouterAlert)
+  ;
 
 TypeId Ipv6OptionRouterAlert::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/internet/model/ipv6-option-demux.cc ns-3.19/src/internet/model/ipv6-option-demux.cc
--- ns-3.18.1/src/internet/model/ipv6-option-demux.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-option-demux.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 namespace ns3
 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionDemux);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionDemux)
+  ;
 
 TypeId Ipv6OptionDemux::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/internet/model/ipv6-option-demux.h ns-3.19/src/internet/model/ipv6-option-demux.h
--- ns-3.18.1/src/internet/model/ipv6-option-demux.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-option-demux.h	2013-12-20 09:44:50.000000000 -0800
@@ -86,6 +86,9 @@
   virtual void DoDispose ();
 
 private:
+  /**
+   * \brief Container of the IPv6 Options types.
+   */
   typedef std::list<Ptr<Ipv6Option> > Ipv6OptionList_t;
 
   /**
diff -Naur ns-3.18.1/src/internet/model/ipv6-option-header.cc ns-3.19/src/internet/model/ipv6-option-header.cc
--- ns-3.18.1/src/internet/model/ipv6-option-header.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-option-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,9 +26,11 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6OptionHeader");
+NS_LOG_COMPONENT_DEFINE ("Ipv6OptionHeader")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionHeader);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionHeader)
+  ;
 
 TypeId Ipv6OptionHeader::GetTypeId ()
 {
@@ -116,7 +118,8 @@
   return (Alignment){ 1,0};
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionPad1Header);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionPad1Header)
+  ;
 
 TypeId Ipv6OptionPad1Header::GetTypeId ()
 {
@@ -167,7 +170,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionPadnHeader);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionPadnHeader)
+  ;
 
 TypeId Ipv6OptionPadnHeader::GetTypeId ()
 {
@@ -227,7 +231,8 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionJumbogramHeader);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionJumbogramHeader)
+  ;
 
 TypeId Ipv6OptionJumbogramHeader::GetTypeId ()
 {
@@ -298,7 +303,8 @@
   return (Alignment){ 4,2}; //4n+2
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionRouterAlertHeader);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionRouterAlertHeader)
+  ;
 
 TypeId Ipv6OptionRouterAlertHeader::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/internet/model/ipv6-packet-info-tag.h ns-3.19/src/internet/model/ipv6-packet-info-tag.h
--- ns-3.18.1/src/internet/model/ipv6-packet-info-tag.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-packet-info-tag.h	2013-12-20 09:44:50.000000000 -0800
@@ -45,22 +45,70 @@
 {
 public:
   Ipv6PacketInfoTag ();
-  // Implemented, but not used in the stack yet
+
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * \brief Set the tag's address
+   *
+   * \param addr the address
+   */
   void SetAddress (Ipv6Address addr);
-  // Implemented, but not used in the stack yet
+
+  /**
+   * \brief Get the tag's address
+   *
+   * \returns the address
+   */
   Ipv6Address GetAddress (void) const;
+
+  /**
+   * \brief Set the tag's receiving interface
+   *
+   * \param ifindex the interface index
+   */
   void SetRecvIf (uint32_t ifindex);
+
+  /**
+   * \brief Get the tag's receiving interface
+   *
+   * \returns the interface index
+   */
   uint32_t GetRecvIf (void) const;
-  // Implemented, but not used in the stack yet
+
+  /**
+   * \brief Set the tag's Hop Limit
+   *
+   * \param ttl the hop limit
+   */
   void SetHoplimit (uint8_t ttl);
-  // Implemented, but not used in the stack yet
+
+  /**
+   * \brief Get the tag's Hop Limit
+   *
+   * \returns the Hop Limit
+   */
   uint8_t GetHoplimit (void) const;
-  // Implemented, but not used in the stack yet
+
+  /**
+   * \brief Set the tag's Traffic Class
+   *
+   * \param tclass the Traffic Class
+   */
   void SetTrafficClass (uint8_t tclass);
-  // Implemented, but not used in the stack yet
+
+  /**
+   * \brief Get the tag's Traffic Class
+   *
+   * \returns the Traffic Class
+   */
   uint8_t GetTrafficClass (void) const;
 
-  static TypeId GetTypeId (void);
+  // inherited functions, no doc necessary
   virtual TypeId GetInstanceTypeId (void) const;
   virtual uint32_t GetSerializedSize (void) const;
   virtual void Serialize (TagBuffer i) const;
@@ -83,10 +131,10 @@
    *  3.  the arriving hop limit, and
    *  4.  the arriving traffic class value.
   */
-  Ipv6Address m_addr;
-  uint8_t m_ifindex;
-  uint8_t m_hoplimit;
-  uint8_t m_tclass;
+  Ipv6Address m_addr;  //!< the packet address (src or dst)
+  uint8_t m_ifindex;   //!< the Interface index
+  uint8_t m_hoplimit;  //!< the Hop Limit
+  uint8_t m_tclass;    //!< the Traffic Class
 };
 } // namespace ns3
 
diff -Naur ns-3.18.1/src/internet/model/ipv6-packet-probe.cc ns-3.19/src/internet/model/ipv6-packet-probe.cc
--- ns-3.18.1/src/internet/model/ipv6-packet-probe.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-packet-probe.cc	2013-12-20 09:44:50.000000000 -0800
@@ -33,7 +33,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6PacketProbe);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6PacketProbe)
+  ;
 
 TypeId
 Ipv6PacketProbe::GetTypeId ()
diff -Naur ns-3.18.1/src/internet/model/ipv6-packet-probe.h ns-3.19/src/internet/model/ipv6-packet-probe.h
--- ns-3.18.1/src/internet/model/ipv6-packet-probe.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-packet-probe.h	2013-12-20 09:44:50.000000000 -0800
@@ -48,7 +48,12 @@
 class Ipv6PacketProbe : public Probe
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId ();
+
   Ipv6PacketProbe ();
   virtual ~Ipv6PacketProbe ();
 
@@ -103,7 +108,9 @@
    */
   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;
+  /// Traced Callback: the previous packet's size and the actual packet's size.
   TracedCallback<uint32_t, uint32_t> m_outputBytes;
 
   /// The traced packet.
diff -Naur ns-3.18.1/src/internet/model/ipv6-pmtu-cache.cc ns-3.19/src/internet/model/ipv6-pmtu-cache.cc
--- ns-3.18.1/src/internet/model/ipv6-pmtu-cache.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-pmtu-cache.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6PmtuCache);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6PmtuCache)
+  ;
 
 TypeId Ipv6PmtuCache::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/internet/model/ipv6-pmtu-cache.h ns-3.19/src/internet/model/ipv6-pmtu-cache.h
--- ns-3.18.1/src/internet/model/ipv6-pmtu-cache.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-pmtu-cache.h	2013-12-20 09:44:50.000000000 -0800
@@ -108,7 +108,11 @@
    */
   std::map<Ipv6Address, uint32_t> m_pathMtu;
 
+  /**
+   * \brief Container of the IPv6 PMTU data (Ipv6 destination address and expiration event).
+   */
   typedef std::map<Ipv6Address, EventId> ::iterator pathMtuTimerIter;
+
   /**
    * \brief Path MTU Expiration table
    */
diff -Naur ns-3.18.1/src/internet/model/ipv6-raw-socket-factory.cc ns-3.19/src/internet/model/ipv6-raw-socket-factory.cc
--- ns-3.18.1/src/internet/model/ipv6-raw-socket-factory.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-raw-socket-factory.cc	2013-12-20 09:44:50.000000000 -0800
@@ -24,7 +24,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6RawSocketFactory);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6RawSocketFactory)
+  ;
 
 TypeId Ipv6RawSocketFactory::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/internet/model/ipv6-raw-socket-factory-impl.h ns-3.19/src/internet/model/ipv6-raw-socket-factory-impl.h
--- ns-3.18.1/src/internet/model/ipv6-raw-socket-factory-impl.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-raw-socket-factory-impl.h	2013-12-20 09:44:50.000000000 -0800
@@ -27,6 +27,8 @@
 {
 
 /**
+ * \ingroup socket
+ *
  * \class Ipv6RawSocketFactoryImpl
  * \brief Implementation of IPv6 raw socket factory.
  */
diff -Naur ns-3.18.1/src/internet/model/ipv6-raw-socket-impl.cc ns-3.19/src/internet/model/ipv6-raw-socket-impl.cc
--- ns-3.18.1/src/internet/model/ipv6-raw-socket-impl.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-raw-socket-impl.cc	2013-12-20 09:44:50.000000000 -0800
@@ -38,10 +38,12 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6RawSocketImpl");
+NS_LOG_COMPONENT_DEFINE ("Ipv6RawSocketImpl")
+  ;
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6RawSocketImpl);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6RawSocketImpl)
+  ;
 
 TypeId Ipv6RawSocketImpl::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/internet/model/ipv6-raw-socket-impl.h ns-3.19/src/internet/model/ipv6-raw-socket-impl.h
--- ns-3.18.1/src/internet/model/ipv6-raw-socket-impl.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-raw-socket-impl.h	2013-12-20 09:44:50.000000000 -0800
@@ -36,6 +36,7 @@
 /**
  * \class Ipv6RawSocketImpl
  * \brief IPv6 raw socket.
+ * \ingroup socket
  *
  * A RAW Socket typically is used to access specific IP layers not usually
  * available through L4 sockets, e.g., ICMP. The implementer should take
@@ -70,26 +71,15 @@
    */
   static TypeId GetTypeId ();
 
-  /**
-   * \brief Constructor.
-   */
   Ipv6RawSocketImpl ();
-
-  /**
-   * \brief Destructor.
-   */
   virtual ~Ipv6RawSocketImpl ();
 
   /**
-   * \brief Set the node.
+   * \brief Set the node associated with this socket.
    * \param node node to set
    */
   void SetNode (Ptr<Node> node);
 
-  /**
-   * \brief Get last error number.
-   * \return error number
-   */
   virtual enum Socket::SocketErrno GetErrno () const;
 
   /**
@@ -98,108 +88,24 @@
    */
   virtual enum Socket::SocketType GetSocketType () const;
 
-  /**
-   * \brief Get node.
-   * \return node associated with this raw socket.
-   */
   virtual Ptr<Node> GetNode () const;
 
-  /**
-   * \brief Bind the socket to address.
-   * \param address bind to this address
-   * \return 0 if success, -1 otherwise
-   */
   virtual int Bind (const Address& address);
-
-  /**
-   * \brief Bind socket.
-   * \return 0 if success, -1 otherwise
-   */
   virtual int Bind ();
   virtual int Bind6 ();
 
-  /**
-   * \brief Get socket address.
-   * \param address socket address if method success
-   * \return 0 if success, -1 otherwise
-   */
   virtual int GetSockName (Address& address) const;
 
-  /**
-   * \brief Close the socket.
-   * \return 0 if success, -1 otherwise
-   */
   virtual int Close ();
-
-  /**
-   * \brief Shutdown send capability.
-   * \return 0 if success, -1 otherwise
-   */
   virtual int ShutdownSend ();
-
-  /**
-   * \brief Shutdown receive capability.
-   * \return 0 if success, -1 otherwise
-   */
   virtual int ShutdownRecv ();
-
-  /**
-   * \brief Connect to address.
-   * \param address address
-   * \return 0 if success, -1 otherwise
-   */
   virtual int Connect (const Address& address);
-
-  /**
-   * \brief Listen.
-   * \return 0 if success, -1 otherwise
-   */
   virtual int Listen ();
-
-  /**
-   * \brief Get TX size available.
-   * \return TX size
-   */
   virtual uint32_t GetTxAvailable () const;
-
-  /**
-   * \brief Get RX size available.
-   * \return RX size
-   */
   virtual uint32_t GetRxAvailable () const;
-
-  /**
-   * \brief Send a packet.
-   * \param p packet to send
-   * \param flags additionnal flags
-   * \return 0 if success, -1 otherwise
-   */
   virtual int Send (Ptr<Packet> p, uint32_t flags);
-
-  /**
-   * \brief Send a packet.
-   * \param p packet to send
-   * \param flags additionnal flags
-   * \param toAddress destination address
-   * \return 0 if success, -1 otherwise
-   */
   virtual int SendTo (Ptr<Packet> p, uint32_t flags, const Address& toAddress);
-
-  /**
-   * \brief Receive packet.
-   * \param maxSize maximum size
-   * \param flags additionnal flags
-   * \return packet received
-   */
   virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags);
-
-  /**
-   * \brief Receive packet.
-   * \param maxSize maximum size
-   * \param flags additionnal flags
-   * \param fromAddress source address
-   * \return packet received
-   */
   virtual Ptr<Packet> RecvFrom (uint32_t maxSize, uint32_t flags, Address& fromAddress);
 
   /**
@@ -232,26 +138,26 @@
 
   /**
    * \brief Set the filter to pass one ICMPv6 type
-   * \param the ICMPv6 type to pass
+   * \param type the ICMPv6 type to pass
    */
   void Icmpv6FilterSetPass(uint8_t type);
 
   /**
    * \brief Set the filter to block one ICMPv6 type
-   * \param the ICMPv6 type to block
+   * \param type the ICMPv6 type to block
    */
   void Icmpv6FilterSetBlock(uint8_t type);
 
   /**
    * \brief Ask the filter about the status of one ICMPv6 type
-   * \param the ICMPv6 type
+   * \param type the ICMPv6 type
    * \return true if the ICMP type is passing through
    */
   bool Icmpv6FilterWillPass(uint8_t type);
 
   /**
    * \brief Ask the filter about the status of one ICMPv6 type
-   * \param the ICMPv6 type
+   * \param type the ICMPv6 type
    * \return true if the ICMP type is being blocked
    */
   bool Icmpv6FilterWillBlock(uint8_t type);
@@ -319,7 +225,7 @@
    */
   typedef struct
   {
-    uint32_t icmpv6Filt[8];
+    uint32_t icmpv6Filt[8]; //!< ICMPv6 filter specification
   } icmpv6Filter;
 
   /**
diff -Naur ns-3.18.1/src/internet/model/ipv6-route.h ns-3.19/src/internet/model/ipv6-route.h
--- ns-3.18.1/src/internet/model/ipv6-route.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-route.h	2013-12-20 09:44:50.000000000 -0800
@@ -123,6 +123,13 @@
   Ptr<NetDevice> m_outputDevice;
 };
 
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param route the Ipv6 route
+ * \returns the reference to the output stream
+ */
 std::ostream& operator<< (std::ostream& os, Ipv6Route const& route);
 
 /**
@@ -231,6 +238,13 @@
   std::map<uint32_t, uint32_t> m_ttls;
 };
 
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param route the Ipv6 multicast route
+ * \returns the reference to the output stream
+ */
 std::ostream& operator<< (std::ostream& os, Ipv6MulticastRoute const& route);
 
 } /* namespace ns3 */
diff -Naur ns-3.18.1/src/internet/model/ipv6-routing-protocol.cc ns-3.19/src/internet/model/ipv6-routing-protocol.cc
--- ns-3.18.1/src/internet/model/ipv6-routing-protocol.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-routing-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,8 @@
 namespace ns3 
 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6RoutingProtocol);
+NS_OBJECT_ENSURE_REGISTERED (Ipv6RoutingProtocol)
+  ;
 
 TypeId Ipv6RoutingProtocol::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/internet/model/ipv6-routing-protocol.h ns-3.19/src/internet/model/ipv6-routing-protocol.h
--- ns-3.18.1/src/internet/model/ipv6-routing-protocol.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-routing-protocol.h	2013-12-20 09:44:50.000000000 -0800
@@ -54,11 +54,22 @@
 class Ipv6RoutingProtocol : public Object
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
+  /// Callback for unicast packets to be forwarded
   typedef Callback<void, Ptr<const NetDevice>, Ptr<Ipv6Route>, Ptr<const Packet>, const Ipv6Header &> UnicastForwardCallback;
+
+  /// Callback for multicast packets to be forwarded
   typedef Callback<void, Ptr<const NetDevice>, Ptr<Ipv6MulticastRoute>, Ptr<const Packet>, const Ipv6Header &> MulticastForwardCallback;
+
+  /// Callback for packets to be locally delivered
   typedef Callback<void, Ptr<const Packet>, const Ipv6Header &, uint32_t > LocalDeliverCallback;
+
+  /// Callback for routing errors (e.g., no route found)
   typedef Callback<void, Ptr<const Packet>, const Ipv6Header &, Socket::SocketErrno > ErrorCallback;
 
   /**
diff -Naur ns-3.18.1/src/internet/model/ipv6-routing-table-entry.cc ns-3.19/src/internet/model/ipv6-routing-table-entry.cc
--- ns-3.18.1/src/internet/model/ipv6-routing-table-entry.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-routing-table-entry.cc	2013-12-20 09:44:50.000000000 -0800
@@ -208,36 +208,36 @@
   if (route.IsDefault ())
     {
       NS_ASSERT (route.IsGateway ());
-      os << "default out =" << route.GetInterface () << ", next hop =" << route.GetGateway ();
+      os << "default out: " << route.GetInterface () << ", next hop: " << route.GetGateway ();
     }
   else if (route.IsHost ())
     {
       if (route.IsGateway ())
         {
-          os << "host ="<< route.GetDest () <<
-          ", out =" << route.GetInterface () <<
-          ", next hop =" << route.GetGateway ();
+          os << "host: "<< route.GetDest () <<
+          ", out: " << route.GetInterface () <<
+          ", next hop: " << route.GetGateway ();
         }
       else
         {
-          os << "host =" << route.GetDest () <<
-          ", out =" << route.GetInterface ();
+          os << "host: " << route.GetDest () <<
+          ", out: " << route.GetInterface ();
         }
     }
   else if (route.IsNetwork ())
     {
       if (route.IsGateway ())
         {
-          os << "network =" << route.GetDestNetwork () <<
-          ", mask =" << route.GetDestNetworkPrefix () <<
-          ",out =" << route.GetInterface () <<
-          ", next hop =" << route.GetGateway ();
+          os << "network: " << route.GetDestNetwork () <<
+          "/ " << int(route.GetDestNetworkPrefix ().GetPrefixLength ()) <<
+          ", out: " << route.GetInterface () <<
+          ", next hop: " << route.GetGateway ();
         }
       else
         {
-          os << "network =" << route.GetDestNetwork () <<
-          ", mask =" << route.GetDestNetworkPrefix () <<
-          ",out =" << route.GetInterface ();
+          os << "network: " << route.GetDestNetwork () <<
+          "/" << int(route.GetDestNetworkPrefix ().GetPrefixLength ()) <<
+          ", out: " << route.GetInterface ();
         }
     }
   else
@@ -314,10 +314,10 @@
 
 std::ostream& operator<< (std::ostream& os, Ipv6MulticastRoutingTableEntry const& route)
 {
-  os << "origin =" << route.GetOrigin () <<
-  ", group =" << route.GetGroup () <<
-  ", input interface =" << route.GetInputInterface () <<
-  ", output interfaces =";
+  os << "origin: " << route.GetOrigin () <<
+  ", group: " << route.GetGroup () <<
+  ", input interface: " << route.GetInputInterface () <<
+  ", output interfaces: ";
 
   for (uint32_t i = 0; i < route.GetNOutputInterfaces (); ++i)
     {
diff -Naur ns-3.18.1/src/internet/model/ipv6-routing-table-entry.h ns-3.19/src/internet/model/ipv6-routing-table-entry.h
--- ns-3.18.1/src/internet/model/ipv6-routing-table-entry.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-routing-table-entry.h	2013-12-20 09:44:50.000000000 -0800
@@ -260,6 +260,13 @@
 
 };
 
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param route the Ipv6 routing table entry
+ * \returns the reference to the output stream
+ */
 std::ostream& operator<< (std::ostream& os, Ipv6RoutingTableEntry const& route);
 
 /**
@@ -364,6 +371,13 @@
   std::vector<uint32_t> m_outputInterfaces;
 };
 
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param route the Ipv6 multicast routing table entry
+ * \returns the reference to the output stream
+ */
 std::ostream& operator<< (std::ostream& os, Ipv6MulticastRoutingTableEntry const& route);
 
 } /* namespace ns3 */
diff -Naur ns-3.18.1/src/internet/model/ipv6-static-routing.cc ns-3.19/src/internet/model/ipv6-static-routing.cc
--- ns-3.18.1/src/internet/model/ipv6-static-routing.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-static-routing.cc	2013-12-20 09:44:50.000000000 -0800
@@ -25,14 +25,17 @@
 #include "ns3/simulator.h"
 #include "ns3/ipv6-route.h"
 #include "ns3/net-device.h"
+#include "ns3/names.h"
 
 #include "ipv6-static-routing.h"
 #include "ipv6-routing-table-entry.h"
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6StaticRouting");
-NS_OBJECT_ENSURE_REGISTERED (Ipv6StaticRouting);
+NS_LOG_COMPONENT_DEFINE ("Ipv6StaticRouting")
+  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6StaticRouting)
+  ;
 
 TypeId Ipv6StaticRouting::GetTypeId ()
 {
@@ -78,18 +81,48 @@
 void
 Ipv6StaticRouting::PrintRoutingTable (Ptr<OutputStreamWrapper> stream) const
 {
-  NS_LOG_FUNCTION (this);
+  NS_LOG_FUNCTION (this << stream);
   std::ostream* os = stream->GetStream ();
+
+  *os << "Node: " << m_ipv6->GetObject<Node> ()->GetId ()
+      << " Time: " << Simulator::Now ().GetSeconds () << "s "
+      << "Ipv6StaticRouting table" << std::endl;
+
   if (GetNRoutes () > 0)
     {
-      *os << "Node: " << m_ipv6->GetObject<Node> ()->GetId ()
-          << " Time: " << Simulator::Now ().GetSeconds () << "s "
-          << "Ipv6StaticRouting table" << std::endl;
-
+      *os << "Destination                    Next Hop                   Flag Met Ref Use If" << std::endl;
       for (uint32_t j = 0; j < GetNRoutes (); j++)
         {
+          std::ostringstream dest, gw, mask, flags;
           Ipv6RoutingTableEntry route = GetRoute (j);
-          *os << route << std::endl;
+          dest << route.GetDest () << "/" << int(route.GetDestNetworkPrefix ().GetPrefixLength ());
+          *os << std::setiosflags (std::ios::left) << std::setw (31) << dest.str ();
+          gw << route.GetGateway ();
+          *os << std::setiosflags (std::ios::left) << std::setw (27) << gw.str ();
+          flags << "U";
+          if (route.IsHost ())
+            {
+              flags << "H";
+            }
+          else if (route.IsGateway ())
+            {
+              flags << "G";
+            }
+          *os << std::setiosflags (std::ios::left) << std::setw (5) << flags.str ();
+          *os << std::setiosflags (std::ios::left) << std::setw (4) << GetMetric (j);
+          // Ref ct not implemented
+          *os << "-" << "   ";
+          // Use not implemented
+          *os << "-" << "   ";
+          if (Names::FindName (m_ipv6->GetNetDevice (route.GetInterface ())) != "")
+            {
+              *os << Names::FindName (m_ipv6->GetNetDevice (route.GetInterface ()));
+            }
+          else
+            {
+              *os << route.GetInterface ();
+            }
+          *os << std::endl;
         }
     }
 }
@@ -722,12 +755,12 @@
   else /* default route */
     {
       /* this case is mainly used by configuring default route following RA processing,
-       * in case of multipe prefix in RA, the first will configured default route
+       * in case of multiple prefix in RA, the first will configured default route
        */
 
       /* for the moment, all default route has the same metric
        * so according to the longest prefix algorithm,
-       * the default route choosen will be the last added
+       * the default route chosen will be the last added
        */
       SetDefaultRoute (nextHop, interface, prefixToUse);
     }
diff -Naur ns-3.18.1/src/internet/model/ipv6-static-routing.h ns-3.19/src/internet/model/ipv6-static-routing.h
--- ns-3.18.1/src/internet/model/ipv6-static-routing.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ipv6-static-routing.h	2013-12-20 09:44:50.000000000 -0800
@@ -48,9 +48,22 @@
 /**
  * \ingroup ipv6StaticRouting
  * \class Ipv6StaticRouting
- * \brief Static routing protocol for IP version 6 stack.
+ *
+ * \brief Static routing protocol for IP version 6 stacks.
+ *
+ * This class provides a basic set of methods for inserting static
+ * unicast and multicast routes into the Ipv6 routing system.
+ * This particular protocol is designed to be inserted into an
+ * Ipv6ListRouting protocol but can be used also as a standalone
+ * protocol.
+ *
+ * The Ipv6StaticRouting class inherits from the abstract base class
+ * Ipv6RoutingProtocol that defines the interface methods that a routing
+ * protocol must support.
+ *
  * \see Ipv6RoutingProtocol
  * \see Ipv6ListRouting
+ * \see Ipv6ListRouting::AddRoutingProtocol
  */
 class Ipv6StaticRouting : public Ipv6RoutingProtocol
 {
@@ -61,14 +74,7 @@
    */
   static TypeId GetTypeId ();
 
-  /**
-   * \brief Constructor.
-   */
   Ipv6StaticRouting ();
-
-  /**
-   * \brief Destructor.
-   */
   virtual ~Ipv6StaticRouting ();
 
   /**
@@ -205,6 +211,7 @@
    * \param origin IPv6 address of the source
    * \param group the multicast group address.
    * \param inputInterface the input interface index
+   * \return true on success
    */
   bool RemoveMulticastRoute (Ipv6Address origin, Ipv6Address group, uint32_t inputInterface);
 
@@ -250,12 +257,22 @@
   virtual void DoDispose ();
 
 private:
+  /// Container for the network routes
   typedef std::list<std::pair <Ipv6RoutingTableEntry *, uint32_t> > NetworkRoutes;
+
+  /// Const Iterator for container for the network routes
   typedef std::list<std::pair <Ipv6RoutingTableEntry *, uint32_t> >::const_iterator NetworkRoutesCI;
+
+  /// Iterator for container for the network routes
   typedef std::list<std::pair <Ipv6RoutingTableEntry *, uint32_t> >::iterator NetworkRoutesI;
 
+  /// Container for the multicast routes
   typedef std::list<Ipv6MulticastRoutingTableEntry *> MulticastRoutes;
+
+  /// Const Iterator for container for the multicast routes
   typedef std::list<Ipv6MulticastRoutingTableEntry *>::const_iterator MulticastRoutesCI;
+
+  /// Iterator for container for the multicast routes
   typedef std::list<Ipv6MulticastRoutingTableEntry *>::iterator MulticastRoutesI;
 
   /**
diff -Naur ns-3.18.1/src/internet/model/loopback-net-device.cc ns-3.19/src/internet/model/loopback-net-device.cc
--- ns-3.18.1/src/internet/model/loopback-net-device.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/loopback-net-device.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LoopbackNetDevice);
+NS_OBJECT_ENSURE_REGISTERED (LoopbackNetDevice)
+  ;
 
 TypeId 
 LoopbackNetDevice::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/loopback-net-device.h ns-3.19/src/internet/model/loopback-net-device.h
--- ns-3.18.1/src/internet/model/loopback-net-device.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/loopback-net-device.h	2013-12-20 09:44:50.000000000 -0800
@@ -38,6 +38,10 @@
 class LoopbackNetDevice : public NetDevice
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   LoopbackNetDevice ();
 
@@ -72,13 +76,30 @@
 protected:
   virtual void DoDispose (void);
 private:
+  /**
+   * Receive a packet from tge Loopback NetDevice.
+   *
+   * \param packet a reference to the received packet
+   * \param protocol the protocol
+   * \param to destination address
+   * \param from source address
+   */
   void Receive (Ptr<Packet> packet, uint16_t protocol, Mac48Address to, Mac48Address from);
+
+  /**
+   * 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_promiscCallback;
-  Ptr<Node> m_node;
-  uint16_t m_mtu;
-  uint32_t m_ifIndex;
-  Mac48Address m_address;
+
+  Ptr<Node> m_node; //!< the node this NetDevice is associated with
+  uint16_t m_mtu; //!< device MTU
+  uint32_t m_ifIndex; //!< interface index
+  Mac48Address m_address; //!< NetDevice MAC address
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/ndisc-cache.cc ns-3.19/src/internet/model/ndisc-cache.cc
--- ns-3.18.1/src/internet/model/ndisc-cache.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ndisc-cache.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,9 +30,11 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("NdiscCache");
+NS_LOG_COMPONENT_DEFINE ("NdiscCache")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (NdiscCache);
+NS_OBJECT_ENSURE_REGISTERED (NdiscCache)
+  ;
 
 TypeId NdiscCache::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/internet/model/ndisc-cache.h ns-3.19/src/internet/model/ndisc-cache.h
--- ns-3.18.1/src/internet/model/ndisc-cache.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/ndisc-cache.h	2013-12-20 09:44:50.000000000 -0800
@@ -412,20 +412,29 @@
   };
 
 private:
+  /**
+   * \brief Neighbor Discovery Cache container
+   */
   typedef sgi::hash_map<Ipv6Address, NdiscCache::Entry *, Ipv6AddressHash> Cache;
+  /**
+   * \brief Neighbor Discovery Cache container iterator
+   */
   typedef sgi::hash_map<Ipv6Address, NdiscCache::Entry *, Ipv6AddressHash>::iterator CacheI;
 
   /**
    * \brief Copy constructor.
-   * \param a cache to copy
+   *
+   * Not implemented to avoid misuse
    */
-  NdiscCache (NdiscCache const &a);
+  NdiscCache (NdiscCache const &);
 
   /**
-   * \brief Equal operator.
-   * \param a cache to copy
+   * \brief Copy constructor.
+   *
+   * Not implemented to avoid misuse
+   * \returns
    */
-  NdiscCache& operator= (NdiscCache const &a);
+  NdiscCache& operator= (NdiscCache const &);
 
   /**
    * \brief Dispose this object.
diff -Naur ns-3.18.1/src/internet/model/nsc-sysctl.cc ns-3.19/src/internet/model/nsc-sysctl.cc
--- ns-3.18.1/src/internet/model/nsc-sysctl.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/nsc-sysctl.cc	2013-12-20 09:44:50.000000000 -0800
@@ -23,9 +23,19 @@
 
 namespace ns3 {
 
+/**
+ * \ingroup nsctcp
+ *
+ * This object represent the underlying nsc stack attributes and
+ * provide a ns-3-like system to access them though sysctls
+ */
 class NscStackStringAccessor : public AttributeAccessor
 {
 public:
+  /**
+   * \brief Constructor
+   * \param name name of the attribute
+   */
   NscStackStringAccessor (std::string name) : m_name (name) {}
 
   virtual bool Set (ObjectBase * object, const AttributeValue &val) const;
@@ -33,7 +43,7 @@
   virtual bool HasGetter (void) const;
   virtual bool HasSetter (void) const;
 private:
-  std::string m_name;
+  std::string m_name; //!< name of the attribute
 };
 
 bool NscStackStringAccessor::HasGetter (void) const
@@ -142,7 +152,8 @@
     }
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ns3NscStack);
+NS_OBJECT_ENSURE_REGISTERED (Ns3NscStack)
+  ;
 
 TypeId
 Ns3NscStack::Ns3NscStack::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/nsc-sysctl.h ns-3.19/src/internet/model/nsc-sysctl.h
--- ns-3.18.1/src/internet/model/nsc-sysctl.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/nsc-sysctl.h	2013-12-20 09:44:50.000000000 -0800
@@ -25,20 +25,42 @@
 
 namespace ns3 {
 
-// This object represents the underlying nsc stack,
-// which is aggregated to a Node object, and which provides access to the
-// sysctls of the nsc stack through attributes.
+/**
+ * \ingroup nsctcp
+ *
+ * This object represents the underlying nsc stack,
+ * which is aggregated to a Node object, and which provides access to the
+ * sysctls of the nsc stack through attributes.
+ */
 class Ns3NscStack : public Object
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
+  /**
+   * \brief Set the underlying stack
+   * \param stack the stack
+   */
   void SetStack (INetStack *stack) { m_stack = stack; }
 
 private:
   friend class NscStackStringAccessor;
+  /**
+   * \brief Set an attribute
+   * \param name the attribute name
+   * \param value the attribute value
+   */
   void Set (std::string name, std::string value);
+  /**
+   * \brief Get an attribute
+   * \param name the attribute name
+   * \returns the attribute value
+   */
   std::string Get (std::string name) const;
-  INetStack *m_stack;
+  INetStack *m_stack; //!< the underlying stack
 };
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/nsc-tcp-l4-protocol.cc ns-3.19/src/internet/model/nsc-tcp-l4-protocol.cc
--- ns-3.18.1/src/internet/model/nsc-tcp-l4-protocol.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/nsc-tcp-l4-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -49,21 +49,51 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (NscTcpL4Protocol);
+NS_OBJECT_ENSURE_REGISTERED (NscTcpL4Protocol)
+  ;
 
 /* see http://www.iana.org/assignments/protocol-numbers */
 const uint8_t NscTcpL4Protocol::PROT_NUMBER = 6;
 
+/**
+ * \ingroup nsctcp
+ * \brief Nsc interface implementation class.
+ */
 class NscInterfaceImpl : public ISendCallback, public IInterruptCallback 
 {
 public:
+  /**
+   * Constructor
+   * \param prot the NSC TCP protocol
+   */
   NscInterfaceImpl (Ptr<NscTcpL4Protocol> prot);
 private:
+  /**
+   * \brief Invoked by NSCs 'ethernet driver' to re-inject a packet into ns-3.
+   *
+   * A packet is an octet soup consisting of an IP Header, TCP Header
+   * and user payload, if any
+   *
+   * \param data the data
+   * \param datalen the data length
+   */
   virtual void send_callback (const void *data, int datalen);
+  /**
+   * \brief Called by the NSC stack whenever something of interest has happened
+   *
+   * Examples: when data arrives on a socket, a listen socket
+   * has a new connection pending, etc.
+   */
   virtual void wakeup ();
+  /**
+   * \brief Called by the Linux stack RNG initialization
+   *
+   * Its also used by the cradle code to add a timestamp to
+   * printk/printf/debug output.
+   */
   virtual void gettime (unsigned int *, unsigned int *);
 private:
-  Ptr<NscTcpL4Protocol> m_prot;
+  Ptr<NscTcpL4Protocol> m_prot; //!< the NSC TCP protocol
 };
 
 NscInterfaceImpl::NscInterfaceImpl (Ptr<NscTcpL4Protocol> prot)
@@ -112,9 +142,16 @@
   return tid;
 }
 
+/**
+ * \brief External Random number generator
+ *
+ * \todo make it random...
+ *
+ * \returns a random number
+ */
 int external_rand ()
 {
-  return 1;   /// \todo
+  return 1;
 }
 
 NscTcpL4Protocol::NscTcpL4Protocol ()
@@ -384,7 +421,7 @@
 
 void NscTcpL4Protocol::wakeup ()
 {
-  /// \todo
+  // \todo
   // this should schedule a timer to read from all tcp sockets now... this is
   // an indication that data might be waiting on the socket
 
@@ -450,7 +487,7 @@
           // IP address of the subnet but this was found to fail for
           // some use cases in /30 subnets.
 
-          /// \todo \bugid{1398} NSC's limitation to single-interface nodes
+          // \todo \bugid{1398} NSC's limitation to single-interface nodes
           m_nscStack->add_default_gateway (addrOss.str ().c_str ());
         }
     }
diff -Naur ns-3.18.1/src/internet/model/nsc-tcp-l4-protocol.h ns-3.19/src/internet/model/nsc-tcp-l4-protocol.h
--- ns-3.18.1/src/internet/model/nsc-tcp-l4-protocol.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/nsc-tcp-l4-protocol.h	2013-12-20 09:44:50.000000000 -0800
@@ -45,18 +45,39 @@
  */
 class NscTcpL4Protocol : public IpL4Protocol {
 public:
-  static const uint8_t PROT_NUMBER;
-  static TypeId GetTypeId (void);
+  static const uint8_t PROT_NUMBER; //!< protocol number (0x6)
   /**
-   * \brief Constructor
+   * \brief Get the type ID.
+   * \return the object TypeId
    */
+  static TypeId GetTypeId (void);
+
   NscTcpL4Protocol ();
   virtual ~NscTcpL4Protocol ();
 
+  /**
+   * Set node associated with this stack
+   * \param node the node
+   */
   void SetNode (Ptr<Node> node);
+
+  /**
+   * Set the NSC library to be used
+   * \param lib the library path
+   */
   void SetNscLibrary (const std::string &lib);
+
+  /**
+   * Get the NSC library being used
+   * \returns the library path
+   */
   std::string GetNscLibrary (void) const;
   virtual int GetProtocolNumber (void) const;
+
+  /**
+   * Get the NSC version
+   * \returns the NSC version
+   */
   virtual int GetVersion (void) const;
 
   /**
@@ -65,27 +86,54 @@
    */
   Ptr<Socket> CreateSocket (void);
 
+  /**
+   * \brief Allocate an IPv4 Endpoint
+   * \return the Endpoint
+   */
   Ipv4EndPoint *Allocate (void);
+  /**
+   * \brief Allocate an IPv4 Endpoint
+   * \param address address to use
+   * \return the Endpoint
+   */
   Ipv4EndPoint *Allocate (Ipv4Address address);
+  /**
+   * \brief Allocate an IPv4 Endpoint
+   * \param port port to use
+   * \return the Endpoint
+   */
   Ipv4EndPoint *Allocate (uint16_t port);
+  /**
+   * \brief Allocate an IPv4 Endpoint
+   * \param address address to use
+   * \param port port to use
+   * \return the Endpoint
+   */
   Ipv4EndPoint *Allocate (Ipv4Address address, uint16_t port);
+  /**
+   * \brief Allocate an IPv4 Endpoint
+   * \param localAddress local address to use
+   * \param localPort local port to use
+   * \param peerAddress remote address to use
+   * \param peerPort remote port to use
+   * \return the Endpoint
+   */
   Ipv4EndPoint *Allocate (Ipv4Address localAddress, uint16_t localPort,
                           Ipv4Address peerAddress, uint16_t peerPort);
 
-  void DeAllocate (Ipv4EndPoint *endPoint);
 
   /**
-   * \brief Receive a packet up the protocol stack
-   * \param p The Packet to dump the contents into
-   * \param header IPv4 Header information
-   * \param incomingInterface The Ipv4Interface it was received on
+   * \brief Remove an IPv4 Endpoint.
+   * \param endPoint the end point to remove
    */
+  void DeAllocate (Ipv4EndPoint *endPoint);
+
   virtual IpL4Protocol::RxStatus Receive (Ptr<Packet> p,
-                                            Ipv4Header const &header,
-                                            Ptr<Ipv4Interface> incomingInterface);
+                                          Ipv4Header const &header,
+                                          Ptr<Ipv4Interface> incomingInterface);
   virtual IpL4Protocol::RxStatus Receive (Ptr<Packet> p,
-                                                 Ipv6Header const &header,
-                                                 Ptr<Ipv6Interface> interface);
+                                          Ipv6Header const &header,
+                                          Ptr<Ipv6Interface> interface);
 
   // From IpL4Protocol
   virtual void SetDownTarget (IpL4Protocol::DownTargetCallback cb);
@@ -97,38 +145,73 @@
   virtual void DoDispose (void);
   virtual void NotifyNewAggregate ();
 private:
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and not implemented to avoid misuse
+   */
   NscTcpL4Protocol (NscTcpL4Protocol const &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and not implemented to avoid misuse
+   * \returns
+   */
   NscTcpL4Protocol& operator= (NscTcpL4Protocol const &);
 
   // NSC callbacks.
   // NSC invokes these hooks to interact with the simulator.
   // In any case, these methods are only to be called by NSC.
-  //
-  // send_callback is invoked by NSCs 'ethernet driver' to re-inject
-  // a packet (i.e. an octet soup consisting of an IP Header, TCP Header
-  // and user payload, if any), into ns-3.
+
+  /**
+   * \brief Invoked by NSCs 'ethernet driver' to re-inject a packet into ns-3.
+   *
+   * A packet is an octet soup consisting of an IP Header, TCP Header
+   * and user payload, if any
+   *
+   * \param data the data
+   * \param datalen the data length
+   */
   void send_callback (const void *data, int datalen);
-  // This is called by the NSC stack whenever something of interest
-  // has happened, e.g. when data arrives on a socket, a listen socket
-  // has a new connection pending, etc.
+  /**
+   * \brief Called by the NSC stack whenever something of interest has happened
+   *
+   * Examples: when data arrives on a socket, a listen socket
+   * has a new connection pending, etc.
+   */
   void wakeup ();
-  // This is called by the Linux stack RNG initialization.
-  // Its also used by the cradle code to add a timestamp to
-  // printk/printf/debug output.
+  /**
+   * \brief Called by the Linux stack RNG initialization
+   *
+   * Its also used by the cradle code to add a timestamp to
+   * printk/printf/debug output.
+   * \param sec seconds
+   * \param usec microseconds
+   */
   void gettime (unsigned int *sec, unsigned int *usec);
+  /**
+   * \brief Add an interface
+   *
+   * Actually NSC only supports one interface per node (\bugid{1398})
+   */
   void AddInterface (void);
+
+  /**
+   * \brief Provide a "soft" interrupt to NSC
+   */
   void SoftInterrupt (void);
   friend class NscInterfaceImpl;
   friend class NscTcpSocketImpl;
-  Ptr<Node> m_node;
-  Ipv4EndPointDemux *m_endPoints;
-  INetStack* m_nscStack;
-  NscInterfaceImpl *m_nscInterface;
-  void *m_dlopenHandle;
-  std::string m_nscLibrary;
-  Timer m_softTimer;
-  std::vector<Ptr<NscTcpSocketImpl> > m_sockets;
-  IpL4Protocol::DownTargetCallback m_downTarget;
+
+  Ptr<Node> m_node; //!< the node this stack is associated with
+  Ipv4EndPointDemux *m_endPoints; //!< A list of IPv4 end points.
+  INetStack* m_nscStack; //!< the NSC stack.
+  NscInterfaceImpl *m_nscInterface; //!< the NSC Interface.
+  void *m_dlopenHandle; //!< dynamic library handle.
+  std::string m_nscLibrary; //!< path to the NSC library.
+  Timer m_softTimer; //!< Soft interrupt timer
+  std::vector<Ptr<NscTcpSocketImpl> > m_sockets; //!< list of sockets
+  IpL4Protocol::DownTargetCallback m_downTarget; //!< Callback to send packets over IPv4
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/nsc-tcp-socket-factory-impl.h ns-3.19/src/internet/model/nsc-tcp-socket-factory-impl.h
--- ns-3.18.1/src/internet/model/nsc-tcp-socket-factory-impl.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/nsc-tcp-socket-factory-impl.h	2013-12-20 09:44:50.000000000 -0800
@@ -47,6 +47,10 @@
   NscTcpSocketFactoryImpl ();
   virtual ~NscTcpSocketFactoryImpl ();
 
+  /**
+   * \brief Set the associated TCP L4 protocol.
+   * \param tcp the TCP L4 protocol
+   */
   void SetTcp (Ptr<NscTcpL4Protocol> tcp);
 
   virtual Ptr<Socket> CreateSocket (void);
@@ -54,7 +58,7 @@
 protected:
   virtual void DoDispose (void);
 private:
-  Ptr<NscTcpL4Protocol> m_tcp;
+  Ptr<NscTcpL4Protocol> m_tcp; //!< the associated TCP L4 protocol
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/nsc-tcp-socket-impl.cc ns-3.19/src/internet/model/nsc-tcp-socket-impl.cc
--- ns-3.18.1/src/internet/model/nsc-tcp-socket-impl.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/nsc-tcp-socket-impl.cc	2013-12-20 09:44:50.000000000 -0800
@@ -47,7 +47,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (NscTcpSocketImpl);
+NS_OBJECT_ENSURE_REGISTERED (NscTcpSocketImpl)
+  ;
 
 TypeId
 NscTcpSocketImpl::GetTypeId ()
diff -Naur ns-3.18.1/src/internet/model/nsc-tcp-socket-impl.h ns-3.19/src/internet/model/nsc-tcp-socket-impl.h
--- ns-3.18.1/src/internet/model/nsc-tcp-socket-impl.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/nsc-tcp-socket-impl.h	2013-12-20 09:44:50.000000000 -0800
@@ -53,15 +53,34 @@
 class NscTcpSocketImpl : public TcpSocket
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   /**
    * Create an unbound tcp socket.
    */
   NscTcpSocketImpl ();
+
+  /**
+   * Clone a TCP socket, for use upon receiving a connection request in LISTEN state
+   *
+   * \param sock the original Tcp Socket
+   */
   NscTcpSocketImpl (const NscTcpSocketImpl& sock);
   virtual ~NscTcpSocketImpl ();
 
+  /**
+   * \brief Set the associated node.
+   * \param node the node
+   */
   void SetNode (Ptr<Node> node);
+
+  /**
+   * \brief Set the associated TCP L4 protocol.
+   * \param tcp the TCP L4 protocol
+   */
   void SetTcp (Ptr<NscTcpL4Protocol> tcp);
 
   virtual enum SocketErrno GetErrno (void) const;
@@ -87,22 +106,68 @@
   virtual bool GetAllowBroadcast () const;
 
 private:
+  /**
+   * \brief Called by NscTcpSocketImpl::ForwardUp()
+   *
+   * Actually performs the ForwardUp operations
+   */
   void NSCWakeup (void);
   friend class Tcp;
   // invoked by Tcp class
+  /**
+   * Finish the binding process
+   * \returns 0 on success, -1 on failure
+   */
   int FinishBind (void);
+  /**
+   * \brief Called by the L3 protocol when it received a packet to pass on to TCP.
+   *
+   * \param p the incoming packet
+   * \param header the packet's IPv4 header
+   * \param port the incoming port
+   * \param incomingInterface the incoming interface
+   */
   void ForwardUp (Ptr<Packet> p, Ipv4Header header, uint16_t port, 
                   Ptr<Ipv4Interface> incomingInterface);
+  /**
+   * \brief Kill this socket by zeroing its attributes (IPv4)
+   *
+   * This is a callback function configured to m_endpoint in
+   * SetupCallback(), invoked when the endpoint is destroyed.
+   */
   void Destroy (void);
   //methods for state
+  /**
+   * \brief Send all the pending data
+   * \returns true on success
+   */
   bool SendPendingData (void);
+  /**
+   * \brief Read all the pending data
+   * \returns true on success
+   */
   bool ReadPendingData (void);
+  /**
+   * \brief Accept an incoming connection
+   * \returns true on success
+   */
   bool Accept (void);
+  /**
+   * \brief Complete the Fork operations (after a connection has been accepted)
+   */
   void CompleteFork (void);
+
+  /**
+   * \brief Called when a connection is in Established state
+   */
   void ConnectionSucceeded ();
 
   // Manage data tx/rx
-  /// \todo This should be virtual and overridden
+  // \todo This should be virtual and overridden
+  /**
+   * \brief Copy self
+   * \returns a copy of self
+   */
   Ptr<NscTcpSocketImpl> Copy ();
 
   // attribute related
@@ -112,7 +177,15 @@
   virtual uint32_t GetRcvBufSize (void) const;
   virtual void SetSegSize (uint32_t size);
   virtual uint32_t GetSegSize (void) const;
+  /**
+   * \brief Set the Advertised Window size
+   * \param window the window size
+   */
   virtual void SetAdvWin (uint32_t window);
+  /**
+   * \brief Get the Advertised Window size
+   * \returns the window size
+   */
   virtual uint32_t GetAdvWin (void) const;
   virtual void SetSSThresh (uint32_t threshold);
   virtual uint32_t GetSSThresh (void) const;
@@ -131,57 +204,62 @@
   virtual void SetPersistTimeout (Time timeout);
   virtual Time GetPersistTimeout (void) const;
 
+  /**
+   * \brief Translate between a NSC error and a ns-3 error code
+   * \param err NSC error
+   * \returns ns-3 error code
+   */
   enum Socket::SocketErrno GetNativeNs3Errno (int err) const;
-  uint32_t m_delAckMaxCount;
-  Time m_delAckTimeout;
-  bool m_noDelay;
-
-  Ipv4EndPoint *m_endPoint;
-  Ptr<Node> m_node;
-  Ptr<NscTcpL4Protocol> m_tcp;
-  Ipv4Address m_remoteAddress;
-  uint16_t m_remotePort;
+  uint32_t m_delAckMaxCount;  //!< Number of packet to fire an ACK before delay timeout
+  Time m_delAckTimeout;       //!< Time to delay an ACK
+  bool m_noDelay;             //!< Disable ACk delay
+
+  Ipv4EndPoint *m_endPoint;     //!< the IPv4 endpoint
+  Ptr<Node> m_node;             //!< the associated node
+  Ptr<NscTcpL4Protocol> m_tcp;  //!< the associated TCP L4 protocol
+  Ipv4Address m_remoteAddress;  //!< peer IP address
+  uint16_t m_remotePort;        //!< peer port
   //these two are so that the socket/endpoint cloning works
-  Ipv4Address m_localAddress;
-  uint16_t m_localPort;
-  InetSocketAddress m_peerAddress;
-  enum SocketErrno m_errno;
-  bool m_shutdownSend;
-  bool m_shutdownRecv;
-  bool m_connected;
+  Ipv4Address m_localAddress;   //!< local address
+  uint16_t m_localPort;         //!< local port
+  InetSocketAddress m_peerAddress; //!< peer IP and port
+  enum SocketErrno m_errno;     //!< last error number
+  bool m_shutdownSend;          //!< Send no longer allowed
+  bool m_shutdownRecv;          //!< Receive no longer allowed
+  bool m_connected;             //!< Connection established
 
   //manage the state information
-  TracedValue<TcpStates_t> m_state;
-  bool m_closeOnEmpty;
+  TracedValue<TcpStates_t> m_state; //!< state information
+  bool m_closeOnEmpty;              //!< true if socket will close when buffer is empty
 
   //needed to queue data when in SYN_SENT state
-  std::queue<Ptr<Packet> > m_txBuffer;
-  uint32_t m_txBufferSize;
+  std::queue<Ptr<Packet> > m_txBuffer; //!< transmission buffer
+  uint32_t m_txBufferSize;             //!< transmission buffer size
 
   // Window management
-  uint32_t                       m_segmentSize;          //SegmentSize
-  uint32_t                       m_rxWindowSize;
-  uint32_t                       m_advertisedWindowSize; //Window to advertise
-  TracedValue<uint32_t>          m_cWnd;                 //Congestion window
-  uint32_t                       m_ssThresh;             //Slow Start Threshold
-  uint32_t                       m_initialCWnd;          //Initial cWnd value
+  uint32_t                       m_segmentSize;          //!< SegmentSize
+  uint32_t                       m_rxWindowSize;         //!< Receive window size
+  uint32_t                       m_advertisedWindowSize; //!< Window to advertise
+  TracedValue<uint32_t>          m_cWnd;                 //!< Congestion window
+  uint32_t                       m_ssThresh;             //!< Slow Start Threshold
+  uint32_t                       m_initialCWnd;          //!< Initial cWnd value
 
   // Round trip time estimation
-  Time m_lastMeasuredRtt;
+  Time m_lastMeasuredRtt; //!< Last measured RTT
 
   // Timer-related members
-  Time              m_cnTimeout; 
-  uint32_t          m_cnCount;
-  Time              m_persistTimeout; 
+  Time              m_cnTimeout;       //!< Timeout for connection retry
+  uint32_t          m_cnCount;         //!< Count of remaining connection retries
+  Time              m_persistTimeout;  //!< Time between sending 1-byte probes
 
   // Temporary queue for delivering data to application
-  std::queue<Ptr<Packet> > m_deliveryQueue;
-  uint32_t m_rxAvailable;
-  INetStreamSocket* m_nscTcpSocket;
+  std::queue<Ptr<Packet> > m_deliveryQueue; //!< receive buffer
+  uint32_t m_rxAvailable;                   //!< receive buffer available size
+  INetStreamSocket* m_nscTcpSocket;         //!< the real NSC TCP socket
 
   // Attributes
-  uint32_t m_sndBufSize;   // buffer limit for the outgoing queue
-  uint32_t m_rcvBufSize;   // maximum receive socket buffer size
+  uint32_t m_sndBufSize;   //!< buffer limit for the outgoing queue
+  uint32_t m_rcvBufSize;   //!< maximum receive socket buffer size
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/pending-data.h ns-3.19/src/internet/model/pending-data.h
--- ns-3.18.1/src/internet/model/pending-data.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/pending-data.h	2013-12-20 09:44:50.000000000 -0800
@@ -41,17 +41,48 @@
 class PendingData {
 public:
   PendingData ();
+  /**
+   * Constructor
+   * \param s size
+   * \param d data
+   * \param msg message size
+   * \param resp response size
+   */
   PendingData (uint32_t s, uint8_t* d = NULL, uint32_t msg = 0, uint32_t resp = 0);
-  PendingData (const std::string&); // Construct from string
-  PendingData (uint8_t*, uint32_t&, Packet*); // Construct from serialized buffer
-  PendingData (const PendingData&);   // Copy constructor
+  /**
+   * Constructor from string
+   * \param s string
+   */
+  PendingData (const std::string& s); // Construct from string
+
+  /**
+   * Copy constructor
+   * \param o object to copy
+   */
+  PendingData (const PendingData& o);   // Copy constructor
   virtual ~PendingData ();     // Destructor
+
+  /**
+   * Returns the size of the pending data
+   * \returns size of pending data
+   */
   uint32_t Size () const { return size; }
-  // Serialization
-  uint8_t*  Serialize (uint8_t*, uint32_t&); // Serialize to a buffer
-  uint8_t*  Construct (uint8_t*, uint32_t&); // Construct from buffer
-  virtual void Clear (); // Remove all associated data
-  virtual void Add (uint32_t s, const uint8_t* d = 0); // Add some data to end
+
+  /**
+   * \brief Remove all associated data
+   */
+  virtual void Clear ();
+
+  /**
+   * \brief Add some data to end
+   * \param s the data size.
+   * \param d the data to store.
+   */
+  virtual void Add (uint32_t s, const uint8_t* d = 0); //
+  /**
+   * \brief Add some data to end
+   * \param p packet containing the data.
+   */
   virtual void Add (Ptr<Packet> p);
   /**
    * This method returns the number of bytes in the PendingData buffer
@@ -89,9 +120,24 @@
    * \return seqOffset-seqFront
    */
   virtual uint32_t OffsetFromSeq (const SequenceNumber32& seqFront, const SequenceNumber32& seqOffset);
-  virtual Ptr<Packet> CopyFromOffset (uint32_t, uint32_t);  // Size, offset, ret packet
-  // Copy data, size, offset specified by sequence difference
-  virtual Ptr<Packet> CopyFromSeq (uint32_t, const SequenceNumber32&, const SequenceNumber32&);
+
+  /**
+   * \brief Copy data starting from a give offset
+   * \param s size of data to copy
+   * \param o offset
+   * \returns a packet containing the requested data
+   */
+  virtual Ptr<Packet> CopyFromOffset  (uint32_t s, uint32_t o);  // Size, offset, ret packet
+  /**
+   * \brief Copy data starting from a give offset
+   * \param s size of data to copy
+   * \param f Front sequence
+   * \param o Offset sequence
+   *
+   * \see PendingData::OffsetFromSeq()
+   * \returns a packet containing the requested data
+   */
+  virtual Ptr<Packet> CopyFromSeq (uint32_t s, const SequenceNumber32& f, const SequenceNumber32& o);
   /**
    * Permits object to clear any pending data between seqFront and 
    * seqOffset - 1).  Callers should check the return value to determine
@@ -102,15 +148,35 @@
    * \return number of bytes from the front that were removed from the buffer
    */
   virtual uint32_t RemoveToSeq (const SequenceNumber32& seqFront, const SequenceNumber32& seqOffset);
-  PendingData*   Copy () const;          // Create a copy of this header
-  PendingData*   CopyS (uint32_t);         // Copy with new size
-  PendingData*   CopySD (uint32_t, uint8_t*); // Copy with new size, new data
+
+  /**
+   * \brief Create a copy of self
+   * \returns copy of pending data
+   */
+  PendingData*   Copy () const;
+  /**
+   * \brief Create a copy of self with new size
+   *
+   * Assumes no associated data
+   * \param s new size
+   * \returns copy of pending data
+   */
+  PendingData*   CopyS (uint32_t s);         // Copy
+  /**
+   * \brief Create a copy of self with new size, new data
+   *
+   * Assumes no associated data
+   * \param s new size
+   * \param d new data
+   * \returns copy of pending data
+   */
+  PendingData*   CopySD (uint32_t s, uint8_t* d);
 public:
-  uint32_t size;        // Number of data bytes
-  std::vector<Ptr<Packet> > data;         // Corresponding data (may be null)
+  uint32_t size;        //!< Number of data bytes
+  std::vector<Ptr<Packet> > data;         //!< Corresponding data (may be null)
   // The next two fields allow simulated applications to exchange some info
-  uint32_t msgSize;     // Total size of message
-  uint32_t responseSize; // Size of response requested
+  uint32_t msgSize;     //!< Total size of message
+  uint32_t responseSize; //!< Size of response requested
 };
 
 } //namepsace ns3
diff -Naur ns-3.18.1/src/internet/model/rtt-estimator.cc ns-3.19/src/internet/model/rtt-estimator.cc
--- ns-3.18.1/src/internet/model/rtt-estimator.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/rtt-estimator.cc	2013-12-20 09:44:50.000000000 -0800
@@ -38,7 +38,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (RttEstimator);
+NS_OBJECT_ENSURE_REGISTERED (RttEstimator)
+  ;
 
 TypeId 
 RttEstimator::GetTypeId (void)
@@ -231,7 +232,8 @@
 //-----------------------------------------------------------------------------
 // Mean-Deviation Estimator
 
-NS_OBJECT_ENSURE_REGISTERED (RttMeanDeviation);
+NS_OBJECT_ENSURE_REGISTERED (RttMeanDeviation)
+  ;
 
 TypeId 
 RttMeanDeviation::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/rtt-estimator.h ns-3.19/src/internet/model/rtt-estimator.h
--- ns-3.18.1/src/internet/model/rtt-estimator.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/rtt-estimator.h	2013-12-20 09:44:50.000000000 -0800
@@ -39,15 +39,26 @@
  */
 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
+  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;
 
 /**
@@ -57,10 +68,18 @@
  */
 class RttEstimator : public Object {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   RttEstimator();
-  RttEstimator (const RttEstimator&); 
+  /**
+   * \brief Copy constructor
+   * \param r the object to copy
+   */
+  RttEstimator (const RttEstimator& r);
 
   virtual ~RttEstimator();
 
@@ -97,6 +116,10 @@
    */
   virtual Time RetransmitTimeout () = 0;
 
+  /**
+   * \brief Copy object
+   * \returns a copy of itself
+   */
   virtual Ptr<RttEstimator> Copy () const = 0;
 
   /**
@@ -139,16 +162,16 @@
   Time GetCurrentEstimate (void) const;
 
 private:
-  SequenceNumber32 m_next;    // Next expected sequence to be sent
-  RttHistory_t m_history;     // List of sent packet
-  uint16_t m_maxMultiplier;
-  Time m_initialEstimatedRtt;
+  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
-  uint32_t     m_nSamples;                // Number of samples
-  uint16_t     m_multiplier;              // RTO Multiplier
+  Time         m_currentEstimatedRtt;     //!< Current estimate
+  Time         m_minRto;                  //!< minimum value of the timeout
+  uint32_t     m_nSamples;                //!< Number of samples
+  uint16_t     m_multiplier;              //!< RTO Multiplier
 };
 
 /**
@@ -163,11 +186,19 @@
  */
 class RttMeanDeviation : public RttEstimator {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   RttMeanDeviation ();
 
-  RttMeanDeviation (const RttMeanDeviation&);
+  /**
+   * \brief Copy constructor
+   * \param r the object to copy
+   */
+  RttMeanDeviation (const RttMeanDeviation& r);
 
   virtual TypeId GetInstanceTypeId (void) const;
 
@@ -186,7 +217,7 @@
   Ptr<RttEstimator> Copy () const;
 
   /**
-   * \brief Resets sthe estimator.
+   * \brief Resets the estimator.
    */
   void Reset ();
 
@@ -197,8 +228,8 @@
   void Gain (double g);
 
 private:
-  double       m_gain;       // Filter gain
-  Time         m_variance;   // Current variance
+  double       m_gain;       //!< Filter gain
+  Time         m_variance;   //!< Current variance
 };
 } // namespace ns3
 
diff -Naur ns-3.18.1/src/internet/model/sim_interface.h ns-3.19/src/internet/model/sim_interface.h
--- ns-3.18.1/src/internet/model/sim_interface.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/sim_interface.h	2013-12-20 09:44:50.000000000 -0800
@@ -24,49 +24,122 @@
 
 #define NSC_VERSION 0x000500
 
+/**
+ * \ingroup nsctcp
+ * \brief Struct interface to NSC stack
+ */
 struct INetStack
 {
   virtual ~INetStack() {}
 
+  /**
+   * \brief Initialize the stack
+   * \param hz timer_interrupt frequency
+   */
   virtual void init (int hz) = 0;
 
+  /**
+   * \brief Deliver complete packet to the NSC network stack
+   * \param if_id interface ID
+   * \param data data
+   * \param datalen data length
+   */
   virtual void if_receive_packet (int if_id, const void *data, int datalen) = 0;
-
+  /**
+   * \brief Send complete packet to the NSC network stack
+   * \param data data
+   * \param datalen data length
+   */
   virtual void if_send_packet (const void *data, int datalen) = 0;
+  /**
+   * \brief Signal the completion of send procedure to the NSC network stack
+   * \param if_id interface ID
+   */
   virtual void if_send_finish (int if_id) = 0;
 
+  /**
+   * \brief Attach an interface to the stack
+   * \param addr address
+   * \param mask network mask
+   * \param mtu MTU
+   */
   virtual void if_attach (const char *addr, const char *mask, int mtu) = 0;
+  /**
+   * \brief Add a default gateway to the interface
+   * \param addr gateway address
+   */
   virtual void add_default_gateway (const char *addr) = 0;
 
-  /** Purely for debugging/diagnostic purposes. This returns the internal id
-   * of the stack instance.
+  /**
+   * \brief Returns the internal id of the stack instance.
+   *
+   * Purely for debugging/diagnostic purposes.
+   * \return internal stack id
    */
   virtual int get_id () = 0;
 
-  /** Should return a short one-word name of the stack. Eg. Linux 2.4.x ->
+  /**
+   * \brief Return a short one-word name of the stack
+   *
+   * Should return a short one-word name of the stack. Eg. Linux 2.4.x ->
    * linux24, FreeBSD 5.x -> freebsd5. This can be used to identify output
-   * from a stack, for example a packet trace file. */
+   * from a stack, for example a packet trace file.
+   * \return short one-word name of the stack
+   */
   virtual const char *get_name () = 0;
 
-  /** This is used so the simulator can call the stack timer_interrupt function
+  /**
+   * \brief Get the timer_interrupt frequency
+   *
+   * This is used so the simulator can call the stack timer_interrupt function
    * the correct amount of times per second. For example, lwip has a hz of 10,
    * which it returns here to say that it's timer_interrupt should be called
    * 10 times a second. FreeBSD uses 100, as does Linux 2.4, while Linux 2.6
    * uses 1000. (This is often configurable in the kernel in question, also.)
+   *
+   * \return frequency
    */
   virtual int get_hz () = 0;
 
+  /**
+   * \brief The stack timer_interrupt function
+   */
   virtual void timer_interrupt () = 0;
+
+  /**
+   * \brief Increment the time ticks
+   */
   virtual void increment_ticks () = 0;
 
+  /**
+   * \brief Set the buffer size
+   */
   virtual void buffer_size (int size) = 0;
 
+  /**
+   * \brief Create a new UDP socket
+   */
   virtual struct INetDatagramSocket *new_udp_socket () { return NULL; }
+  /**
+   * \brief Create a new TCP socket
+   */
   virtual struct INetStreamSocket *new_tcp_socket () { return NULL; }
+  /**
+   * \brief Create a new SCTP socket
+   */
   virtual struct INetStreamSocket *new_sctp_socket () { return NULL; }
 
   // The following I've made optional to implement for now. Eases
   // integration of new features.
+  /**
+   * \brief use sysctl to modify system parameters
+   * \param sysctl_name name of the parameter to modify
+   * \param oldval old value
+   * \param oldlenp old value length
+   * \param newval new value
+   * \param newlen new value length
+   * \returns
+   */
   virtual int sysctl (const char *sysctl_name, void *oldval, size_t *oldlenp,
                       void *newval, size_t newlen)
   {
@@ -77,6 +150,12 @@
   // to convert the string-value to something that the stack can handle.
   // The idea here is that this is a front-end to the sysctl(2) call,
   // much like the sysctl(8) program.
+  /**
+   * \brief Set system parameters using sysctl
+   * \param name name of the parameter to modify
+   * \param value new value
+   * \returns
+   */
   virtual int sysctl_set (const char *name, const char *value)
   {
     return -1;
@@ -85,45 +164,81 @@
   // same as above, cradle code is expected to convert the sysctl value
   // into a string.
   // returns length of the string in value, i.e. retval > len: 'output truncated'.
+  /**
+   * \brief Get system parameters using sysctl
+   * \param name name of the parameter to modify
+   * \param value value
+   * \param len value length
+   * \returns length of the string in value, i.e. retval > len: 'output truncated'.
+   */
   virtual int sysctl_get (const char *name, char *value, size_t len)
   {
     return -1;
   }
 
-  // this tells the cradle code to put the name of sysctl number 'idx'
-  // into name[].
-  // The idea is that this can be used to get a list of all available sysctls:
-  // char buf[256]
-  // for (i=0; sysctl_getnum(i, buf, sizeof(buf)) > 0 ;i++)
-  //    puts(buf);
-  // returns -1 if idx is out of range and the length of the sysctl name otherwise.
+  /**
+   * \brief Tell the cradle code to put the name of sysctl number 'idx' into name[].
+   *
+   * The idea is that this can be used to get a list of all available sysctls:
+   * \verbatim
+     char buf[256]
+     for (i=0; sysctl_getnum(i, buf, sizeof(buf)) > 0 ;i++)
+        puts(buf);
+     \endverbatim
+   *
+   * \param idx index
+   * \param name sysctl name
+   * \param len sysctl length
+   * \returns -1 if idx is out of range and the length of the sysctl name otherwise.
+   */
   virtual int sysctl_getnum (size_t idx, char *name, size_t len)
   {
     return -1;
   }
 
+  /**
+   * \brief Show the NSC configuration
+   */
   virtual void show_config ()
   {
     ;
   }
 
-  /* Optional functions used to get and set variables for this stack */
+  /**
+   * \brief Optional function to get variables for this stack
+   * \param var the variable
+   * \param result the result
+   * \param result_len result length
+   * \returns true on success
+   */
   virtual bool get_var (const char *var, char *result, int result_len)
   {
     return false;
   }
 
+  /**
+   * \brief Optional function to set variables for this stack
+   * \param var the variable
+   * \param val the new value
+   * \returns true on success
+   */
   virtual bool set_var (const char *var, const char *val)
   {
     return false;
   }
 
-  /** The level of debugging or diagnostic information to print out. This
-   * normally means kernel messages printed out during initialisation but
-   * may also include extra debugging messages that are part of NSC. */
+  /**
+   * \brief Set the level of debugging or diagnostic information to print out.
+   *
+   * This normally means kernel messages printed out during initialisation but
+   * may also include extra debugging messages that are part of NSC.
+   *
+   * \param level debugging/diagnostic level
+   */
   virtual void set_diagnostic (int level) {}
 
-  /** Simple interface to support sending any textual command to a stack
+  /**
+   * \brief Simple interface to support sending any textual command to a stack
    *
    * @returns 0 on success
    */
@@ -133,62 +248,173 @@
   }
 };
 
+/**
+ * \ingroup nsctcp
+ * \brief Struct interface to NSC Stream (i.e., TCP) Sockets
+ */
 struct INetStreamSocket
 {
   virtual ~INetStreamSocket() {}
 
+  /**
+   * \brief Connect to a remote peer
+   */
   virtual void connect (const char *, int) = 0;
+  /**
+   * \brief Disconnect from a remote peer
+   */
   virtual void disconnect () = 0;
+  /**
+   * \brief Put the socket in Listening state on a port
+   */
   virtual void listen (int) = 0;
+  /**
+   * \brief Accept an incoming connection
+   */
   virtual int accept (INetStreamSocket **) = 0;
+  /**
+   * \brief Send some data
+   * \param data the data
+   * \param datalen data length
+   * \return the number of data sent or -1 on error
+   */
   virtual int send_data (const void *data, int datalen) = 0;
+  /**
+   * \brief Read some data
+   * \param buf the buffer to store the data
+   * \param buflen buffer length
+   * \return the number of data read or -1 on error
+   */
   virtual int read_data (void *buf, int *buflen) = 0;
-  /* We need to pass the option name in as a string here. The reason for
+  /**
+   * \brief Set the socket options
+   *
+   * We need to pass the option name in as a string here. The reason for
    * this is that different operating systems you compile on will have
-   * different numbers defined for the constants SO_SNDBUF and so on. */
+   * different numbers defined for the constants SO_SNDBUF and so on.
+   *
+   * \param optname name of the option
+   * \param val option value
+   * \param valsize size of the option value
+   * \returns
+   */
   virtual int setsockopt (char *optname, void *val, size_t valsize) = 0;
+  /**
+   * \brief Print the socket state
+   */
   virtual void print_state (FILE *) = 0;
+  /**
+   * \brief Check the connection state
+   * \returns true if socket is in connected state
+   */
   virtual bool is_connected () = 0;
+  /**
+   * \brief Check the listening state
+   * \returns true if socket is in listening state
+   */
   virtual bool is_listening () = 0;
-
+  /**
+   * \brief Get the peer name
+   *
+   * \note not implemented
+   *
+   * \param sa sockaddr structure to fill
+   * \param salen sockaddr structure length
+   * \returns -1 on error (always returns -1)
+   */
   virtual int getpeername (struct sockaddr *sa, size_t *salen) {
     return -1;
   }
+  /**
+   * \brief Get the socket local name
+   *
+   * \note not implemented
+   *
+   * \param sa sockaddr structure to fill
+   * \param salen sockaddr structure length
+   * \returns -1 on error (always returns -1)
+   */
   virtual int getsockname (struct sockaddr *sa, size_t *salen) {
     return -1;
   }
-  /* Optional functions used to get and set variables for this TCP
-   * connection. */
+  /**
+   * \brief Optional function used to get variables for this TCP connection.
+   *
+   * \note not implemented
+   *
+   * \param var variable requested
+   * \param result result result
+   * \param result_len result length
+   * \return always false
+   */
   virtual bool get_var (const char *var, char *result, int result_len)
   {
     return false;
   }
-
+  /**
+   * \brief Optional function used to set variables for this TCP connection.
+   *
+   * \note not implemented
+   *
+   * \param var variable to set
+   * \param val value to set
+   * \return always false
+   */
   virtual bool set_var (const char *var, const char *val)
   {
     return false;
   }
 };
 
+/**
+ * \ingroup nsctcp
+ * \brief Struct interface to NSC Datagram (i.e., UDP) Sockets
+ */
 struct INetDatagramSocket
 {
   virtual ~INetDatagramSocket() {}
 
+  /**
+   * \brief Set the destination address and port
+   */
   virtual void set_destination (const char *, int) = 0;
+  /**
+   * \brief Send a datagram
+   * \param data the data
+   * \param datalen data length
+   */
   virtual void send_data (const void *data, int datalen) = 0;
 };
+
+/**
+ * \ingroup nsctcp
+ * \brief Struct interface to NSC send capabilities
+ */
 struct ISendCallback
 {
   virtual ~ISendCallback() {}
 
+  /**
+   * \brief Invoked by NSCs 'ethernet driver' to re-inject a packet into ns-3.
+   */
   virtual void send_callback (const void *data, int datalen) = 0;
 };
 
+/**
+ * \ingroup nsctcp
+ * \brief Struct interface to NSC soft interrupt capabilities
+ */
 struct IInterruptCallback
 {
   virtual ~IInterruptCallback() {}
 
+  /**
+   * \brief Called by the NSC stack whenever something of interest has happened
+   */
   virtual void wakeup () = 0;
+  /**
+   * \brief Get the actual time
+   */
   virtual void gettime (unsigned int *, unsigned int *) = 0;
 };
 
diff -Naur ns-3.18.1/src/internet/model/tcp-header.cc ns-3.19/src/internet/model/tcp-header.cc
--- ns-3.18.1/src/internet/model/tcp-header.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TcpHeader);
+NS_OBJECT_ENSURE_REGISTERED (TcpHeader)
+  ;
 
 TcpHeader::TcpHeader ()
   : m_sourcePort (0),
diff -Naur ns-3.18.1/src/internet/model/tcp-header.h ns-3.19/src/internet/model/tcp-header.h
--- ns-3.18.1/src/internet/model/tcp-header.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-header.h	2013-12-20 09:44:50.000000000 -0800
@@ -122,29 +122,69 @@
   uint16_t GetUrgentPointer () const;
 
   /**
-   * \param source the ip source to use in the underlying
-   *        ip packet.
-   * \param destination the ip destination to use in the
-   *        underlying ip packet.
-   * \param protocol the protocol number to use in the underlying
-   *        ip packet.
+   * \brief Initialize the TCP checksum.
    *
    * If you want to use tcp checksums, you should call this
    * method prior to adding the header to a packet.
+   *
+   * \param source the IP source to use in the underlying
+   *        IP packet.
+   * \param destination the IP destination to use in the
+   *        underlying IP packet.
+   * \param protocol the protocol number to use in the underlying
+   *        IP packet.
+   *
    */
   void InitializeChecksum (Ipv4Address source, 
                            Ipv4Address destination,
                            uint8_t protocol);
+
+  /**
+   * \brief Initialize the TCP checksum.
+   *
+   * If you want to use tcp checksums, you should call this
+   * method prior to adding the header to a packet.
+   *
+   * \param source the IP source to use in the underlying
+   *        IP packet.
+   * \param destination the IP destination to use in the
+   *        underlying IP packet.
+   * \param protocol the protocol number to use in the underlying
+   *        IP packet.
+   *
+   */
   void InitializeChecksum (Ipv6Address source, 
                            Ipv6Address destination,
                            uint8_t protocol);
+
+  /**
+   * \brief Initialize the TCP checksum.
+   *
+   * If you want to use tcp checksums, you should call this
+   * method prior to adding the header to a packet.
+   *
+   * \param source the IP source to use in the underlying
+   *        IP packet.
+   * \param destination the IP destination to use in the
+   *        underlying IP packet.
+   * \param protocol the protocol number to use in the underlying
+   *        IP packet.
+   *
+   */
   void InitializeChecksum (Address source, 
                            Address destination,
                            uint8_t protocol);
 
+  /**
+   * \brief TCP flag field values
+   */
   typedef enum { NONE = 0, FIN = 1, SYN = 2, RST = 4, PSH = 8, ACK = 16, 
                  URG = 32, ECE = 64, CWR = 128} Flags_t;
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
   virtual void Print (std::ostream &os) const;
@@ -159,22 +199,27 @@
   bool IsChecksumOk (void) const;
 
 private:
+  /**
+   * \brief Calculate the header checksum
+   * \param size packet size
+   * \returns the checksum
+   */
   uint16_t CalculateHeaderChecksum (uint16_t size) const;
-  uint16_t m_sourcePort;
-  uint16_t m_destinationPort;
-  SequenceNumber32 m_sequenceNumber;
-  SequenceNumber32 m_ackNumber;
-  uint8_t m_length; // really a uint4_t
-  uint8_t m_flags;      // really a uint6_t
-  uint16_t m_windowSize;
-  uint16_t m_urgentPointer;
-
-  Address m_source;
-  Address m_destination;
-  uint8_t m_protocol;
+  uint16_t m_sourcePort;        //!< Source port
+  uint16_t m_destinationPort;   //!< Destination port
+  SequenceNumber32 m_sequenceNumber;  //!< Sequence number
+  SequenceNumber32 m_ackNumber;       //!< ACK number
+  uint8_t m_length;             //!< Length (really a uint4_t)
+  uint8_t m_flags;              //!< Flags (really a uint6_t)
+  uint16_t m_windowSize;        //!< Window size
+  uint16_t m_urgentPointer;     //!< Urgent pointer
+
+  Address m_source;       //!< Source IP address
+  Address m_destination;  //!< Destination IP address
+  uint8_t m_protocol;     //!< Protocol number
 
-  bool m_calcChecksum;
-  bool m_goodChecksum;
+  bool m_calcChecksum;    //!< Flag to calculate checksum
+  bool m_goodChecksum;    //!< Flag to indicate that checksum is correct
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/tcp-l4-protocol.cc ns-3.19/src/internet/model/tcp-l4-protocol.cc
--- ns-3.18.1/src/internet/model/tcp-l4-protocol.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-l4-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -51,7 +51,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TcpL4Protocol);
+NS_OBJECT_ENSURE_REGISTERED (TcpL4Protocol)
+  ;
 
 //TcpL4Protocol stuff----------------------------------------------------------
 
@@ -506,7 +507,7 @@
     }
   NS_ASSERT_MSG (endPoints.size () == 1, "Demux returned more than one endpoint");
   NS_LOG_LOGIC ("TcpL4Protocol "<<this<<" forwarding up to endpoint/socket");
-  (*endPoints.begin ())->ForwardUp (packet, ipHeader, tcpHeader.GetSourcePort ());
+  (*endPoints.begin ())->ForwardUp (packet, ipHeader, tcpHeader.GetSourcePort (), interface);
   return IpL4Protocol::RX_OK;
 }
 
diff -Naur ns-3.18.1/src/internet/model/tcp-l4-protocol.h ns-3.19/src/internet/model/tcp-l4-protocol.h
--- ns-3.18.1/src/internet/model/tcp-l4-protocol.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-l4-protocol.h	2013-12-20 09:44:50.000000000 -0800
@@ -55,43 +55,123 @@
 
 class TcpL4Protocol : public IpL4Protocol {
 public:
-  static TypeId GetTypeId (void);
-  static const uint8_t PROT_NUMBER;
   /**
-   * \brief Constructor
+   * \brief Get the type ID.
+   * \return the object TypeId
    */
+  static TypeId GetTypeId (void);
+  static const uint8_t PROT_NUMBER; //!< protocol number (0x6)
+
   TcpL4Protocol ();
   virtual ~TcpL4Protocol ();
 
+  /**
+   * Set node associated with this stack
+   * \param node the node
+   */
   void SetNode (Ptr<Node> node);
 
   virtual int GetProtocolNumber (void) const;
 
   /**
+   * \brief Create a TCP socket
    * \return A smart Socket pointer to a TcpSocket allocated by this instance
    * of the TCP protocol
    */
   Ptr<Socket> CreateSocket (void);
+  /**
+   * \brief Create a TCP socket
+   * \return A smart Socket pointer to a TcpSocket allocated by this instance
+   * of the TCP protocol
+   *
+   * \warning using a socketTypeId other than TCP is a bad idea.
+   *
+   * \param socketTypeId the socket TypeId
+   */
   Ptr<Socket> CreateSocket (TypeId socketTypeId);
 
+  /**
+   * \brief Allocate an IPv4 Endpoint
+   * \return the Endpoint
+   */
   Ipv4EndPoint *Allocate (void);
+  /**
+   * \brief Allocate an IPv4 Endpoint
+   * \param address address to use
+   * \return the Endpoint
+   */
   Ipv4EndPoint *Allocate (Ipv4Address address);
+  /**
+   * \brief Allocate an IPv4 Endpoint
+   * \param port port to use
+   * \return the Endpoint
+   */
   Ipv4EndPoint *Allocate (uint16_t port);
+  /**
+   * \brief Allocate an IPv4 Endpoint
+   * \param address address to use
+   * \param port port to use
+   * \return the Endpoint
+   */
   Ipv4EndPoint *Allocate (Ipv4Address address, uint16_t port);
+  /**
+   * \brief Allocate an IPv4 Endpoint
+   * \param localAddress local address to use
+   * \param localPort local port to use
+   * \param peerAddress remote address to use
+   * \param peerPort remote port to use
+   * \return the Endpoint
+   */
   Ipv4EndPoint *Allocate (Ipv4Address localAddress, uint16_t localPort,
                           Ipv4Address peerAddress, uint16_t peerPort);
+  /**
+   * \brief Allocate an IPv6 Endpoint
+   * \return the Endpoint
+   */
   Ipv6EndPoint *Allocate6 (void);
+  /**
+   * \brief Allocate an IPv6 Endpoint
+   * \param address address to use
+   * \return the Endpoint
+   */
   Ipv6EndPoint *Allocate6 (Ipv6Address address);
+  /**
+   * \brief Allocate an IPv6 Endpoint
+   * \param port port to use
+   * \return the Endpoint
+   */
   Ipv6EndPoint *Allocate6 (uint16_t port);
+  /**
+   * \brief Allocate an IPv6 Endpoint
+   * \param address address to use
+   * \param port port to use
+   * \return the Endpoint
+   */
   Ipv6EndPoint *Allocate6 (Ipv6Address address, uint16_t port);
+  /**
+   * \brief Allocate an IPv6 Endpoint
+   * \param localAddress local address to use
+   * \param localPort local port to use
+   * \param peerAddress remote address to use
+   * \param peerPort remote port to use
+   * \return the Endpoint
+   */
   Ipv6EndPoint *Allocate6 (Ipv6Address localAddress, uint16_t localPort,
                            Ipv6Address peerAddress, uint16_t peerPort);
 
+  /**
+   * \brief Remove an IPv4 Endpoint.
+   * \param endPoint the end point to remove
+   */
   void DeAllocate (Ipv4EndPoint *endPoint);
+  /**
+   * \brief Remove an IPv6 Endpoint.
+   * \param endPoint the end point to remove
+   */
   void DeAllocate (Ipv6EndPoint *endPoint);
 
   /**
-   * \brief Send a packet via TCP
+   * \brief Send a packet via TCP (IPv4)
    * \param packet The packet to send
    * \param saddr The source Ipv4Address
    * \param daddr The destination Ipv4Address
@@ -102,33 +182,27 @@
   void Send (Ptr<Packet> packet,
              Ipv4Address saddr, Ipv4Address daddr, 
              uint16_t sport, uint16_t dport, Ptr<NetDevice> oif = 0);
+  /**
+   * \brief Send a packet via TCP (IPv6)
+   * \param packet The packet to send
+   * \param saddr The source Ipv4Address
+   * \param daddr The destination Ipv4Address
+   * \param sport The source port number
+   * \param dport The destination port number
+   * \param oif The output interface bound. Defaults to null (unspecified).
+   */
   void Send (Ptr<Packet> packet,
              Ipv6Address saddr, Ipv6Address daddr, 
              uint16_t sport, uint16_t dport, Ptr<NetDevice> oif = 0);
-  /**
-   * \brief Receive a packet up the protocol stack
-   * \param p The Packet to dump the contents into
-   * \param header IPv4 Header information
-   * \param incomingInterface The Ipv4Interface it was received on
-   */
+
+
   virtual enum IpL4Protocol::RxStatus Receive (Ptr<Packet> p,
-                                                 Ipv4Header const &header,
-                                                 Ptr<Ipv4Interface> incomingInterface);
+                                               Ipv4Header const &header,
+                                               Ptr<Ipv4Interface> incomingInterface);
   virtual enum IpL4Protocol::RxStatus Receive (Ptr<Packet> p,
-                                                 Ipv6Header const &header,
-                                                 Ptr<Ipv6Interface> interface);
+                                               Ipv6Header const &header,
+                                               Ptr<Ipv6Interface> incomingInterface);
 
-  /**
-   * \brief Receive an ICMP packet
-   * \param icmpSource The IP address of the source of the packet.
-   * \param icmpTtl The time to live from the IP header
-   * \param icmpType The type of the message from the ICMP header
-   * \param icmpCode The message code from the ICMP header
-   * \param icmpInfo 32-bit integer carrying informational value of varying semantics.
-   * \param payloadSource The IP source address from the IP header of the packet
-   * \param payloadDestination The IP destination address from the IP header of the packet
-   * \param payload Payload of the ICMP packet
-   */
   virtual void ReceiveIcmp (Ipv4Address icmpSource, uint8_t icmpTtl,
                             uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo,
                             Ipv4Address payloadSource,Ipv4Address payloadDestination,
@@ -153,23 +227,35 @@
    */
   virtual void NotifyNewAggregate ();
 private:
-  Ptr<Node> m_node;
-  Ipv4EndPointDemux *m_endPoints;
-  Ipv6EndPointDemux *m_endPoints6;
-  TypeId m_rttTypeId;
-  TypeId m_socketTypeId;
+  Ptr<Node> m_node; //!< the node this stack is associated with
+  Ipv4EndPointDemux *m_endPoints; //!< A list of IPv4 end points.
+  Ipv6EndPointDemux *m_endPoints6; //!< A list of IPv6 end points.
+  TypeId m_rttTypeId; //!< The RTT Estimator TypeId
+  TypeId m_socketTypeId; //!< The socket TypeId
 private:
   friend class TcpSocketBase;
   void SendPacket (Ptr<Packet>, const TcpHeader &,
                    Ipv4Address, Ipv4Address, Ptr<NetDevice> oif = 0);
   void SendPacket (Ptr<Packet>, const TcpHeader &,
                    Ipv6Address, Ipv6Address, Ptr<NetDevice> oif = 0);
-  TcpL4Protocol (const TcpL4Protocol &o);
-  TcpL4Protocol &operator = (const TcpL4Protocol &o);
 
-  std::vector<Ptr<TcpSocketBase> > m_sockets;
-  IpL4Protocol::DownTargetCallback m_downTarget;
-  IpL4Protocol::DownTargetCallback6 m_downTarget6;
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and not implemented to avoid misuse
+   */
+  TcpL4Protocol (const TcpL4Protocol &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and not implemented to avoid misuse
+   * \returns
+   */
+  TcpL4Protocol &operator = (const TcpL4Protocol &);
+
+  std::vector<Ptr<TcpSocketBase> > m_sockets;      //!< list of sockets
+  IpL4Protocol::DownTargetCallback m_downTarget;   //!< Callback to send packets over IPv4
+  IpL4Protocol::DownTargetCallback6 m_downTarget6; //!< Callback to send packets over IPv6
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/tcp-newreno.cc ns-3.19/src/internet/model/tcp-newreno.cc
--- ns-3.18.1/src/internet/model/tcp-newreno.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-newreno.cc	2013-12-20 09:44:50.000000000 -0800
@@ -32,7 +32,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TcpNewReno);
+NS_OBJECT_ENSURE_REGISTERED (TcpNewReno)
+  ;
 
 TypeId
 TcpNewReno::GetTypeId (void)
@@ -80,7 +81,7 @@
 {
 }
 
-/** We initialize m_cWnd from this function, after attributes initialized */
+/* We initialize m_cWnd from this function, after attributes initialized */
 int
 TcpNewReno::Listen (void)
 {
@@ -89,7 +90,7 @@
   return TcpSocketBase::Listen ();
 }
 
-/** We initialize m_cWnd from this function, after attributes initialized */
+/* We initialize m_cWnd from this function, after attributes initialized */
 int
 TcpNewReno::Connect (const Address & address)
 {
@@ -98,7 +99,7 @@
   return TcpSocketBase::Connect (address);
 }
 
-/** Limit the size of in-flight data by cwnd and receiver's rxwin */
+/* Limit the size of in-flight data by cwnd and receiver's rxwin */
 uint32_t
 TcpNewReno::Window (void)
 {
@@ -112,7 +113,7 @@
   return CopyObject<TcpNewReno> (this);
 }
 
-/** New ACK (up to seqnum seq) received. Increase cwnd and call TcpSocketBase::NewAck() */
+/* New ACK (up to seqnum seq) received. Increase cwnd and call TcpSocketBase::NewAck() */
 void
 TcpNewReno::NewAck (const SequenceNumber32& seq)
 {
@@ -157,7 +158,7 @@
   TcpSocketBase::NewAck (seq);
 }
 
-/** Cut cwnd and enter fast recovery mode upon triple dupack */
+/* Cut cwnd and enter fast recovery mode upon triple dupack */
 void
 TcpNewReno::DupAck (const TcpHeader& t, uint32_t count)
 {
@@ -186,7 +187,7 @@
     };
 }
 
-/** Retransmit timeout */
+/* Retransmit timeout */
 void
 TcpNewReno::Retransmit (void)
 {
diff -Naur ns-3.18.1/src/internet/model/tcp-newreno.h ns-3.19/src/internet/model/tcp-newreno.h
--- ns-3.18.1/src/internet/model/tcp-newreno.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-newreno.h	2013-12-20 09:44:50.000000000 -0800
@@ -36,11 +36,19 @@
 class TcpNewReno : public TcpSocketBase
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   /**
    * Create an unbound tcp socket.
    */
   TcpNewReno (void);
+  /**
+   * \brief Copy constructor
+   * \param sock the object to copy
+   */
   TcpNewReno (const TcpNewReno& sock);
   virtual ~TcpNewReno (void);
 
@@ -62,16 +70,19 @@
   virtual void     SetInitialCwnd (uint32_t cwnd);
   virtual uint32_t GetInitialCwnd (void) const;
 private:
-  void InitializeCwnd (void);            // set m_cWnd when connection starts
+  /**
+   * \brief Set the congestion window when connection starts
+   */
+  void InitializeCwnd (void);
 
 protected:
-  TracedValue<uint32_t>  m_cWnd;         //< Congestion window
-  uint32_t               m_ssThresh;     //< Slow Start Threshold
-  uint32_t               m_initialCWnd;  //< Initial cWnd value
-  SequenceNumber32       m_recover;      //< Previous highest Tx seqnum for fast recovery
-  uint32_t               m_retxThresh;   //< Fast Retransmit threshold
-  bool                   m_inFastRec;    //< currently in fast recovery
-  bool                   m_limitedTx;    //< perform limited transmit
+  TracedValue<uint32_t>  m_cWnd;         //!< Congestion window
+  uint32_t               m_ssThresh;     //!< Slow Start Threshold
+  uint32_t               m_initialCWnd;  //!< Initial cWnd value
+  SequenceNumber32       m_recover;      //!< Previous highest Tx seqnum for fast recovery
+  uint32_t               m_retxThresh;   //!< Fast Retransmit threshold
+  bool                   m_inFastRec;    //!< currently in fast recovery
+  bool                   m_limitedTx;    //!< perform limited transmit
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/tcp-reno.cc ns-3.19/src/internet/model/tcp-reno.cc
--- ns-3.18.1/src/internet/model/tcp-reno.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-reno.cc	2013-12-20 09:44:50.000000000 -0800
@@ -32,7 +32,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TcpReno);
+NS_OBJECT_ENSURE_REGISTERED (TcpReno)
+  ;
 
 TypeId
 TcpReno::GetTypeId (void)
@@ -72,7 +73,7 @@
 {
 }
 
-/** We initialize m_cWnd from this function, after attributes initialized */
+/* We initialize m_cWnd from this function, after attributes initialized */
 int
 TcpReno::Listen (void)
 {
@@ -81,7 +82,7 @@
   return TcpSocketBase::Listen ();
 }
 
-/** We initialize m_cWnd from this function, after attributes initialized */
+/* We initialize m_cWnd from this function, after attributes initialized */
 int
 TcpReno::Connect (const Address & address)
 {
@@ -90,7 +91,7 @@
   return TcpSocketBase::Connect (address);
 }
 
-/** Limit the size of in-flight data by cwnd and receiver's rxwin */
+/* Limit the size of in-flight data by cwnd and receiver's rxwin */
 uint32_t
 TcpReno::Window (void)
 {
@@ -104,7 +105,7 @@
   return CopyObject<TcpReno> (this);
 }
 
-/** New ACK (up to seqnum seq) received. Increase cwnd and call TcpSocketBase::NewAck() */
+/* New ACK (up to seqnum seq) received. Increase cwnd and call TcpSocketBase::NewAck() */
 void
 TcpReno::NewAck (const SequenceNumber32& seq)
 {
diff -Naur ns-3.18.1/src/internet/model/tcp-reno.h ns-3.19/src/internet/model/tcp-reno.h
--- ns-3.18.1/src/internet/model/tcp-reno.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-reno.h	2013-12-20 09:44:50.000000000 -0800
@@ -38,11 +38,19 @@
 class TcpReno : public TcpSocketBase
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   /**
    * Create an unbound tcp socket.
    */
   TcpReno (void);
+  /**
+   * \brief Copy constructor
+   * \param sock the object to copy
+   */
   TcpReno (const TcpReno& sock);
   virtual ~TcpReno (void);
 
@@ -64,14 +72,17 @@
   virtual void     SetInitialCwnd (uint32_t cwnd);
   virtual uint32_t GetInitialCwnd (void) const;
 private:
-  void InitializeCwnd (void);            // set m_cWnd when connection starts
+  /**
+   * \brief Set the congestion window when connection starts
+   */
+  void InitializeCwnd (void);
 
 protected:
-  TracedValue<uint32_t>  m_cWnd;         //< Congestion window
-  uint32_t               m_ssThresh;     //< Slow Start Threshold
-  uint32_t               m_initialCWnd;  //< Initial cWnd value
-  uint32_t               m_retxThresh;   //< Fast Retransmit threshold
-  bool                   m_inFastRec;    //< currently in fast recovery
+  TracedValue<uint32_t>  m_cWnd;         //!< Congestion window
+  uint32_t               m_ssThresh;     //!< Slow Start Threshold
+  uint32_t               m_initialCWnd;  //!< Initial cWnd value
+  uint32_t               m_retxThresh;   //!< Fast Retransmit threshold
+  bool                   m_inFastRec;    //!< currently in fast recovery
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/tcp-rfc793.cc ns-3.19/src/internet/model/tcp-rfc793.cc
--- ns-3.18.1/src/internet/model/tcp-rfc793.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-rfc793.cc	2013-12-20 09:44:50.000000000 -0800
@@ -25,7 +25,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TcpRfc793);
+NS_OBJECT_ENSURE_REGISTERED (TcpRfc793)
+  ;
 
 TypeId
 TcpRfc793::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/tcp-rfc793.h ns-3.19/src/internet/model/tcp-rfc793.h
--- ns-3.18.1/src/internet/model/tcp-rfc793.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-rfc793.h	2013-12-20 09:44:50.000000000 -0800
@@ -39,11 +39,19 @@
 class TcpRfc793 : public TcpSocketBase
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   /**
    * Create an unbound tcp socket.
    */
   TcpRfc793 (void);
+  /**
+   * \brief Copy constructor
+   * \param sock the object to copy
+   */
   TcpRfc793 (const TcpRfc793& sock);
   virtual ~TcpRfc793 (void);
 
diff -Naur ns-3.18.1/src/internet/model/tcp-rx-buffer.h ns-3.19/src/internet/model/tcp-rx-buffer.h
--- ns-3.18.1/src/internet/model/tcp-rx-buffer.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-rx-buffer.h	2013-12-20 09:44:50.000000000 -0800
@@ -40,20 +40,67 @@
 class TcpRxBuffer : public Object
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
+  /**
+   * \brief Constructor
+   * \param n initial Sequence number to be received
+   */
   TcpRxBuffer (uint32_t n = 0);
   virtual ~TcpRxBuffer ();
 
   // Accessors
+  /**
+   * \brief Get Next Rx Sequence number
+   * \returns Next Rx Sequence number
+   */
   SequenceNumber32 NextRxSequence (void) const;
+  /**
+   * \brief Get the lowest sequence number that this TcpRxBuffer cannot accept
+   * \returns the lowest sequence number that this TcpRxBuffer cannot accept
+   */
   SequenceNumber32 MaxRxSequence (void) const;
+  /**
+   * \brief Increment the Next Sequence number
+   */
   void IncNextRxSequence (void);
+  /**
+   * \brief Set the Next Sequence number
+   * \param s the Sequence number
+   */
   void SetNextRxSequence (const SequenceNumber32& s);
+  /**
+   * \brief Set the FIN Sequence number (i.e., the one closing the connection)
+   * \param s the Sequence number
+   */
   void SetFinSequence (const SequenceNumber32& s);
+  /**
+   * \brief Get the Maximum buffer size
+   * \returns the Maximum buffer size
+   */
   uint32_t MaxBufferSize (void) const;
+  /**
+   * \brief Set the Maximum buffer size
+   * \param s the Maximum buffer size
+   */
   void SetMaxBufferSize (uint32_t s);
+  /**
+   * \brief Get the actual buffer occupancy
+   * \returns buffer occupancy (in bytes)
+   */
   uint32_t Size (void) const;
+  /**
+   * \brief Get the actual number of bytes available to be read
+   * \returns size of available data (in bytes)
+   */
   uint32_t Available () const;
+  /**
+   * \brief Check if the buffer did receive all the data (and the connection is closed)
+   * \returns true if all data have been received
+   */
   bool Finished (void);
 
   /**
@@ -63,6 +110,8 @@
    * removing data from the buffer that overlaps the tail of the inputted
    * packet
    *
+   * \param p packet
+   * \param tcph packet's TCP header
    * \return True when success, false otherwise.
    */
   bool Add (Ptr<Packet> p, TcpHeader const& tcph);
@@ -70,18 +119,21 @@
   /**
    * Extract data from the head of the buffer as indicated by nextRxSeq.
    * The extracted data is going to be forwarded to the application.
+   *
+   * \param maxSize maximum number of bytes to extract
+   * \returns a packet
    */
   Ptr<Packet> Extract (uint32_t maxSize);
 public:
+  /// container for data stored in the buffer
   typedef std::map<SequenceNumber32, Ptr<Packet> >::iterator BufIterator;
-  TracedValue<SequenceNumber32> m_nextRxSeq; //< Seqnum of the first missing byte in data (RCV.NXT)
-  SequenceNumber32 m_finSeq;                 //< Seqnum of the FIN packet
-  bool m_gotFin;                             //< Did I received FIN packet?
-  uint32_t m_size;                           //< Number of total data bytes in the buffer, not necessarily contiguous
-  uint32_t m_maxBuffer;                      //< Upper bound of the number of data bytes in buffer (RCV.WND)
-  uint32_t m_availBytes;                     //< Number of bytes available to read, i.e. contiguous block at head
-  std::map<SequenceNumber32, Ptr<Packet> > m_data;
-  //< Corresponding data (may be null)
+  TracedValue<SequenceNumber32> m_nextRxSeq; //!< Seqnum of the first missing byte in data (RCV.NXT)
+  SequenceNumber32 m_finSeq;                 //!< Seqnum of the FIN packet
+  bool m_gotFin;                             //!< Did I received FIN packet?
+  uint32_t m_size;                           //!< Number of total data bytes in the buffer, not necessarily contiguous
+  uint32_t m_maxBuffer;                      //!< Upper bound of the number of data bytes in buffer (RCV.WND)
+  uint32_t m_availBytes;                     //!< Number of bytes available to read, i.e. contiguous block at head
+  std::map<SequenceNumber32, Ptr<Packet> > m_data; //!< Corresponding data (may be null)
 };
 
 } //namepsace ns3
diff -Naur ns-3.18.1/src/internet/model/tcp-socket-base.cc ns-3.19/src/internet/model/tcp-socket-base.cc
--- ns-3.18.1/src/internet/model/tcp-socket-base.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-socket-base.cc	2013-12-20 09:44:50.000000000 -0800
@@ -54,7 +54,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TcpSocketBase);
+NS_OBJECT_ENSURE_REGISTERED (TcpSocketBase)
+  ;
 
 TypeId
 TcpSocketBase::GetTypeId (void)
@@ -210,42 +211,42 @@
   CancelAllTimers ();
 }
 
-/** Associate a node with this TCP socket */
+/* Associate a node with this TCP socket */
 void
 TcpSocketBase::SetNode (Ptr<Node> node)
 {
   m_node = node;
 }
 
-/** Associate the L4 protocol (e.g. mux/demux) with this socket */
+/* Associate the L4 protocol (e.g. mux/demux) with this socket */
 void
 TcpSocketBase::SetTcp (Ptr<TcpL4Protocol> tcp)
 {
   m_tcp = tcp;
 }
 
-/** Set an RTT estimator with this socket */
+/* Set an RTT estimator with this socket */
 void
 TcpSocketBase::SetRtt (Ptr<RttEstimator> rtt)
 {
   m_rtt = rtt;
 }
 
-/** Inherit from Socket class: Returns error code */
+/* Inherit from Socket class: Returns error code */
 enum Socket::SocketErrno
 TcpSocketBase::GetErrno (void) const
 {
   return m_errno;
 }
 
-/** Inherit from Socket class: Returns socket type, NS3_SOCK_STREAM */
+/* Inherit from Socket class: Returns socket type, NS3_SOCK_STREAM */
 enum Socket::SocketType
 TcpSocketBase::GetSocketType (void) const
 {
   return NS3_SOCK_STREAM;
 }
 
-/** Inherit from Socket class: Returns associated node */
+/* Inherit from Socket class: Returns associated node */
 Ptr<Node>
 TcpSocketBase::GetNode (void) const
 {
@@ -253,7 +254,7 @@
   return m_node;
 }
 
-/** Inherit from Socket class: Bind socket to an end-point in TcpL4Protocol */
+/* Inherit from Socket class: Bind socket to an end-point in TcpL4Protocol */
 int
 TcpSocketBase::Bind (void)
 {
@@ -282,7 +283,7 @@
   return SetupCallback ();
 }
 
-/** Inherit from Socket class: Bind socket (with specific address) to an end-point in TcpL4Protocol */
+/* Inherit from Socket class: Bind socket (with specific address) to an end-point in TcpL4Protocol */
 int
 TcpSocketBase::Bind (const Address &address)
 {
@@ -352,7 +353,7 @@
   return SetupCallback ();
 }
 
-/** Inherit from Socket class: Initiate connection to a remote address:port */
+/* Inherit from Socket class: Initiate connection to a remote address:port */
 int
 TcpSocketBase::Connect (const Address & address)
 {
@@ -424,7 +425,7 @@
   return DoConnect ();
 }
 
-/** Inherit from Socket class: Listen on the endpoint for an incoming connection */
+/* Inherit from Socket class: Listen on the endpoint for an incoming connection */
 int
 TcpSocketBase::Listen (void)
 {
@@ -441,7 +442,7 @@
   return 0;
 }
 
-/** Inherit from Socket class: Kill this socket and signal the peer (if any) */
+/* Inherit from Socket class: Kill this socket and signal the peer (if any) */
 int
 TcpSocketBase::Close (void)
 {
@@ -468,7 +469,7 @@
   return DoClose ();
 }
 
-/** Inherit from Socket class: Signal a termination of send */
+/* Inherit from Socket class: Signal a termination of send */
 int
 TcpSocketBase::ShutdownSend (void)
 {
@@ -502,7 +503,7 @@
   return 0;
 }
 
-/** Inherit from Socket class: Signal a termination of receive */
+/* Inherit from Socket class: Signal a termination of receive */
 int
 TcpSocketBase::ShutdownRecv (void)
 {
@@ -511,7 +512,7 @@
   return 0;
 }
 
-/** Inherit from Socket class: Send a packet. Parameter flags is not used.
+/* Inherit from Socket class: Send a packet. Parameter flags is not used.
     Packet has no TCP header. Invoked by upper-layer application */
 int
 TcpSocketBase::Send (Ptr<Packet> p, uint32_t flags)
@@ -546,15 +547,15 @@
     }
 }
 
-/** Inherit from Socket class: In TcpSocketBase, it is same as Send() call */
+/* Inherit from Socket class: In TcpSocketBase, it is same as Send() call */
 int
 TcpSocketBase::SendTo (Ptr<Packet> p, uint32_t flags, const Address &address)
 {
   return Send (p, flags); // SendTo() and Send() are the same
 }
 
-/** Inherit from Socket class: Return data to upper-layer application. Parameter flags
-    is not used. Data is returned as a packet of size no larger than maxSize */
+/* Inherit from Socket class: Return data to upper-layer application. Parameter flags
+   is not used. Data is returned as a packet of size no larger than maxSize */
 Ptr<Packet>
 TcpSocketBase::Recv (uint32_t maxSize, uint32_t flags)
 {
@@ -581,7 +582,7 @@
   return outPacket;
 }
 
-/** Inherit from Socket class: Recv and return the remote's address */
+/* Inherit from Socket class: Recv and return the remote's address */
 Ptr<Packet>
 TcpSocketBase::RecvFrom (uint32_t maxSize, uint32_t flags, Address &fromAddress)
 {
@@ -606,7 +607,7 @@
   return packet;
 }
 
-/** Inherit from Socket class: Get the max number of bytes an app can send */
+/* Inherit from Socket class: Get the max number of bytes an app can send */
 uint32_t
 TcpSocketBase::GetTxAvailable (void) const
 {
@@ -614,7 +615,7 @@
   return m_txBuffer.Available ();
 }
 
-/** Inherit from Socket class: Get the max number of bytes an app can read */
+/* Inherit from Socket class: Get the max number of bytes an app can read */
 uint32_t
 TcpSocketBase::GetRxAvailable (void) const
 {
@@ -622,7 +623,7 @@
   return m_rxBuffer.Available ();
 }
 
-/** Inherit from Socket class: Return local address:port */
+/* Inherit from Socket class: Return local address:port */
 int
 TcpSocketBase::GetSockName (Address &address) const
 {
@@ -644,7 +645,7 @@
   return 0;
 }
 
-/** Inherit from Socket class: Bind this socket to the specified NetDevice */
+/* Inherit from Socket class: Bind this socket to the specified NetDevice */
 void
 TcpSocketBase::BindToNetDevice (Ptr<NetDevice> netdevice)
 {
@@ -668,7 +669,7 @@
   return;
 }
 
-/** Clean up after Bind. Set up callback functions in the end-point. */
+/* Clean up after Bind. Set up callback functions in the end-point. */
 int
 TcpSocketBase::SetupCallback (void)
 {
@@ -694,7 +695,7 @@
   return 0;
 }
 
-/** Perform the real connection tasks: Send SYN if allowed, RST if invalid */
+/* Perform the real connection tasks: Send SYN if allowed, RST if invalid */
 int
 TcpSocketBase::DoConnect (void)
 {
@@ -716,7 +717,7 @@
   return 0;
 }
 
-/** Do the action to close the socket. Usually send a packet with appropriate
+/* Do the action to close the socket. Usually send a packet with appropriate
     flags depended on the current m_state. */
 int
 TcpSocketBase::DoClose (void)
@@ -759,7 +760,7 @@
   return 0;
 }
 
-/** Peacefully close the socket by notifying the upper layer and deallocate end point */
+/* Peacefully close the socket by notifying the upper layer and deallocate end point */
 void
 TcpSocketBase::CloseAndNotify (void)
 {
@@ -780,7 +781,7 @@
 }
 
 
-/** Tell if a sequence number range is out side the range that my rx buffer can
+/* Tell if a sequence number range is out side the range that my rx buffer can
     accpet */
 bool
 TcpSocketBase::OutOfRange (SequenceNumber32 head, SequenceNumber32 tail) const
@@ -799,7 +800,7 @@
   return (tail < m_rxBuffer.NextRxSequence () || m_rxBuffer.MaxRxSequence () <= head);
 }
 
-/** Function called by the L3 protocol when it received a packet to pass on to
+/* Function called by the L3 protocol when it received a packet to pass on to
     the TCP. This function is registered as the "RxCallback" function in
     SetupCallback(), which invoked by Bind(), and CompleteFork() */
 void
@@ -810,7 +811,7 @@
 }
 
 void
-TcpSocketBase::ForwardUp6 (Ptr<Packet> packet, Ipv6Header header, uint16_t port)
+TcpSocketBase::ForwardUp6 (Ptr<Packet> packet, Ipv6Header header, uint16_t port, Ptr<Ipv6Interface> incomingInterface)
 {
   DoForwardUp (packet, header, port);
 }
@@ -841,7 +842,7 @@
     }
 }
 
-/** The real function to handle the incoming packet from lower layers. This is
+/* The real function to handle the incoming packet from lower layers. This is
     wrapped by ForwardUp() so that this function can be overloaded by daughter
     classes. */
 void
@@ -1035,7 +1036,7 @@
     }
 }
 
-/** Received a packet upon ESTABLISHED state. This function is mimicking the
+/* Received a packet upon ESTABLISHED state. This function is mimicking the
     role of tcp_rcv_established() in tcp_input.c in Linux kernel. */
 void
 TcpSocketBase::ProcessEstablished (Ptr<Packet> packet, const TcpHeader& tcpHeader)
@@ -1081,7 +1082,7 @@
     }
 }
 
-/** Process the newly received ACK */
+/* Process the newly received ACK */
 void
 TcpSocketBase::ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader)
 {
@@ -1118,7 +1119,7 @@
     }
 }
 
-/** Received a packet upon LISTEN state. */
+/* Received a packet upon LISTEN state. */
 void
 TcpSocketBase::ProcessListen (Ptr<Packet> packet, const TcpHeader& tcpHeader,
                               const Address& fromAddress, const Address& toAddress)
@@ -1148,7 +1149,7 @@
                           packet, tcpHeader, fromAddress, toAddress);
 }
 
-/** Received a packet upon SYN_SENT */
+/* Received a packet upon SYN_SENT */
 void
 TcpSocketBase::ProcessSynSent (Ptr<Packet> packet, const TcpHeader& tcpHeader)
 {
@@ -1206,7 +1207,7 @@
     }
 }
 
-/** Received a packet upon SYN_RCVD */
+/* Received a packet upon SYN_RCVD */
 void
 TcpSocketBase::ProcessSynRcvd (Ptr<Packet> packet, const TcpHeader& tcpHeader,
                                const Address& fromAddress, const Address& toAddress)
@@ -1296,7 +1297,7 @@
     }
 }
 
-/** Received a packet upon CLOSE_WAIT, FIN_WAIT_1, or FIN_WAIT_2 states */
+/* Received a packet upon CLOSE_WAIT, FIN_WAIT_1, or FIN_WAIT_2 states */
 void
 TcpSocketBase::ProcessWait (Ptr<Packet> packet, const TcpHeader& tcpHeader)
 {
@@ -1367,7 +1368,7 @@
     }
 }
 
-/** Received a packet upon CLOSING */
+/* Received a packet upon CLOSING */
 void
 TcpSocketBase::ProcessClosing (Ptr<Packet> packet, const TcpHeader& tcpHeader)
 {
@@ -1399,7 +1400,7 @@
     }
 }
 
-/** Received a packet upon LAST_ACK */
+/* Received a packet upon LAST_ACK */
 void
 TcpSocketBase::ProcessLastAck (Ptr<Packet> packet, const TcpHeader& tcpHeader)
 {
@@ -1435,7 +1436,7 @@
     }
 }
 
-/** Peer sent me a FIN. Remember its sequence in rx buffer. */
+/* Peer sent me a FIN. Remember its sequence in rx buffer. */
 void
 TcpSocketBase::PeerClose (Ptr<Packet> p, const TcpHeader& tcpHeader)
 {
@@ -1472,7 +1473,7 @@
   DoPeerClose (); // Change state, respond with ACK
 }
 
-/** Received a in-sequence FIN. Close down this socket. */
+/* Received a in-sequence FIN. Close down this socket. */
 void
 TcpSocketBase::DoPeerClose (void)
 {
@@ -1510,7 +1511,7 @@
     }
 }
 
-/** Kill this socket. This is a callback function configured to m_endpoint in
+/* Kill this socket. This is a callback function configured to m_endpoint in
    SetupCallback(), invoked when the endpoint is destroyed. */
 void
 TcpSocketBase::Destroy (void)
@@ -1531,7 +1532,7 @@
   CancelAllTimers ();
 }
 
-/** Kill this socket. This is a callback function configured to m_endpoint in
+/* Kill this socket. This is a callback function configured to m_endpoint in
    SetupCallback(), invoked when the endpoint is destroyed. */
 void
 TcpSocketBase::Destroy6 (void)
@@ -1552,7 +1553,7 @@
   CancelAllTimers ();
 }
 
-/** Send an empty packet with specified TCP flags */
+/* Send an empty packet with specified TCP flags */
 void
 TcpSocketBase::SendEmptyPacket (uint8_t flags)
 {
@@ -1667,7 +1668,7 @@
     }
 }
 
-/** This function closes the endpoint completely. Called upon RST_TX action. */
+/* This function closes the endpoint completely. Called upon RST_TX action. */
 void
 TcpSocketBase::SendRST (void)
 {
@@ -1677,7 +1678,7 @@
   DeallocateEndPoint ();
 }
 
-/** Deallocate the end point and cancel all the timers */
+/* Deallocate the end point and cancel all the timers */
 void
 TcpSocketBase::DeallocateEndPoint (void)
 {
@@ -1709,7 +1710,7 @@
     }
 }
 
-/** Configure the endpoint to a local address. Called by Connect() if Bind() didn't specify one. */
+/* Configure the endpoint to a local address. Called by Connect() if Bind() didn't specify one. */
 int
 TcpSocketBase::SetupEndpoint ()
 {
@@ -1770,7 +1771,7 @@
   return 0;
 }
 
-/** This function is called only if a SYN received in LISTEN state. After
+/* This function is called only if a SYN received in LISTEN state. After
    TcpSocketBase cloned, allocate a new end point to handle the incoming
    connection and send a SYN+ACK to complete the handshake. */
 void
@@ -1820,7 +1821,7 @@
     }
 }
 
-/** Extract at most maxSize bytes from the TxBuffer at sequence seq, add the
+/* Extract at most maxSize bytes from the TxBuffer at sequence seq, add the
     TCP header, and send to TcpL4Protocol */
 uint32_t
 TcpSocketBase::SendDataPacket (SequenceNumber32 seq, uint32_t maxSize, bool withAck)
@@ -1926,7 +1927,7 @@
   return sz;
 }
 
-/** Send as much pending data as possible according to the Tx window. Note that
+/* Send as much pending data as possible according to the Tx window. Note that
  *  this function did not implement the PSH flag
  */
 bool
@@ -2071,7 +2072,7 @@
     }
 }
 
-/** Called by ForwardUp() to estimate RTT */
+/* Called by ForwardUp() to estimate RTT */
 void
 TcpSocketBase::EstimateRtt (const TcpHeader& tcpHeader)
 {
@@ -2281,7 +2282,7 @@
   m_timewaitEvent.Cancel ();
 }
 
-/** Move TCP to Time_Wait state and schedule a transition to Closed state */
+/* Move TCP to Time_Wait state and schedule a transition to Closed state */
 void
 TcpSocketBase::TimeWait ()
 {
@@ -2294,7 +2295,7 @@
                                          &TcpSocketBase::CloseAndNotify, this);
 }
 
-/** Below are the attribute get/set functions */
+/* Below are the attribute get/set functions */
 
 void
 TcpSocketBase::SetSndBufSize (uint32_t size)
@@ -2418,13 +2419,13 @@
   return false;
 }
 
-/** Placeholder function for future extension that reads more from the TCP header */
+/* Placeholder function for future extension that reads more from the TCP header */
 void
 TcpSocketBase::ReadOptions (const TcpHeader&)
 {
 }
 
-/** Placeholder function for future extension that changes the TCP header */
+/* Placeholder function for future extension that changes the TCP header */
 void
 TcpSocketBase::AddOptions (TcpHeader&)
 {
diff -Naur ns-3.18.1/src/internet/model/tcp-socket-base.h ns-3.19/src/internet/model/tcp-socket-base.h
--- ns-3.18.1/src/internet/model/tcp-socket-base.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-socket-base.h	2013-12-20 09:44:50.000000000 -0800
@@ -31,6 +31,7 @@
 #include "ns3/ipv4-header.h"
 #include "ns3/ipv4-interface.h"
 #include "ns3/ipv6-header.h"
+#include "ns3/ipv6-interface.h"
 #include "ns3/event-id.h"
 #include "tcp-tx-buffer.h"
 #include "tcp-rx-buffer.h"
@@ -61,6 +62,11 @@
 class TcpSocketBase : public TcpSocket
 {
 public:
+  /**
+   * Get the type ID.
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   /**
    * Create an unbound TCP socket
@@ -69,13 +75,30 @@
 
   /**
    * Clone a TCP socket, for use upon receiving a connection request in LISTEN state
+   *
+   * \param sock the original Tcp Socket
    */
   TcpSocketBase (const TcpSocketBase& sock);
   virtual ~TcpSocketBase (void);
 
   // Set associated Node, TcpL4Protocol, RttEstimator to this socket
+
+  /**
+   * \brief Set the associated node.
+   * \param node the node
+   */
   virtual void SetNode (Ptr<Node> node);
+
+  /**
+   * \brief Set the associated TCP L4 protocol.
+   * \param tcp the TCP L4 protocol
+   */
   virtual void SetTcp (Ptr<TcpL4Protocol> tcp);
+
+  /**
+   * \brief Set the associated RTT estimator.
+   * \param rtt the RTT estimator
+   */
   virtual void SetRtt (Ptr<RttEstimator> rtt);
 
   // Necessary implementations of null functions from ns3::Socket
@@ -101,6 +124,8 @@
 
 protected:
   // Implementing ns3::TcpSocket -- Attribute get/set
+  // inherited, no need to doc
+
   virtual void     SetSndBufSize (uint32_t size);
   virtual uint32_t GetSndBufSize (void) const;
   virtual void     SetRcvBufSize (uint32_t size);
@@ -126,120 +151,455 @@
   virtual bool     SetAllowBroadcast (bool allowBroadcast);
   virtual bool     GetAllowBroadcast (void) const;
 
+
+
   // Helper functions: Connection set up
-  int SetupCallback (void);        // Common part of the two Bind(), i.e. set callback and remembering local addr:port
-  int DoConnect (void);            // Sending a SYN packet to make a connection if the state allows
-  void ConnectionSucceeded (void); // Schedule-friendly wrapper for Socket::NotifyConnectionSucceeded()
-  int SetupEndpoint (void);        // Configure m_endpoint for local addr for given remote addr
-  int SetupEndpoint6 (void);       // Configure m_endpoint6 for local addr for given remote addr
-  void CompleteFork (Ptr<Packet>, const TcpHeader&, const Address& fromAddress, const Address& toAdress);
+
+  /**
+   * \brief Common part of the two Bind(), i.e. set callback and remembering local addr:port
+   *
+   * \returns 0 on success, -1 on failure
+   */
+  int SetupCallback (void);
+
+  /**
+   * \brief Perform the real connection tasks: Send SYN if allowed, RST if invalid
+   *
+   * \returns 0 on success
+   */
+  int DoConnect (void);
+
+  /**
+   * \brief Schedule-friendly wrapper for Socket::NotifyConnectionSucceeded()
+   */
+  void ConnectionSucceeded (void);
+
+  /**
+   * \brief Configure the endpoint to a local address. Called by Connect() if Bind() didn't specify one.
+   *
+   * \returns 0 on success
+   */
+  int SetupEndpoint (void);
+
+  /**
+   * \brief Configure the endpoint v6 to a local address. Called by Connect() if Bind() didn't specify one.
+   *
+   * \returns 0 on success
+   */
+  int SetupEndpoint6 (void);
+
+  /**
+   * \brief Complete a connection by forking the socket
+   *
+   * This function is called only if a SYN received in LISTEN state. After
+   * TcpSocketBase cloned, allocate a new end point to handle the incoming
+   * connection and send a SYN+ACK to complete the handshake.
+   *
+   * \param p the packet triggering the fork
+   * \param tcpHeader the TCP header of the triggering packet
+   * \param fromAddress the address of the remote host
+   * \param toAddress the address the connection is directed to
+   */
+  void CompleteFork (Ptr<Packet> p, const TcpHeader& tcpHeader, const Address& fromAddress, const Address& toAddress);
+
+
 
   // Helper functions: Transfer operation
+
+  /**
+   * \brief Called by the L3 protocol when it received a packet to pass on to TCP.
+   *
+   * \param packet the incoming packet
+   * \param header the packet's IPv4 header
+   * \param port the incoming port
+   * \param incomingInterface the incoming interface
+   */
   void ForwardUp (Ptr<Packet> packet, Ipv4Header header, uint16_t port, Ptr<Ipv4Interface> incomingInterface);
-  void ForwardUp6 (Ptr<Packet> packet, Ipv6Header header, uint16_t port);
+
+  /**
+   * \brief Called by the L3 protocol when it received a packet to pass on to TCP.
+   *
+   * \param packet the incoming packet
+   * \param header the packet's IPv6 header
+   * \param port the incoming port
+   * \param incomingInterface the incoming interface
+   */
+  void ForwardUp6 (Ptr<Packet> packet, Ipv6Header header, uint16_t port, Ptr<Ipv6Interface> incomingInterface);
+
+  /**
+   * \brief Called by TcpSocketBase::ForwardUp().
+   *
+   * \param packet the incoming packet
+   * \param header the packet's IPv4 header
+   * \param port the incoming port
+   * \param incomingInterface the incoming interface
+   */
   virtual void DoForwardUp (Ptr<Packet> packet, Ipv4Header header, uint16_t port, Ptr<Ipv4Interface> incomingInterface); //Get a pkt from L3
-  virtual void DoForwardUp (Ptr<Packet> packet, Ipv6Header header, uint16_t port); // Ipv6 version
+
+  /**
+   * \brief Called by TcpSocketBase::ForwardUp6().
+   *
+   * \param packet the incoming packet
+   * \param header the packet's IPv6 header
+   * \param port the incoming port
+   */
+  virtual void DoForwardUp (Ptr<Packet> packet, Ipv6Header header, uint16_t port);
+
+  /**
+   * \brief Called by the L3 protocol when it received an ICMP packet to pass on to TCP.
+   *
+   * \param icmpSource the ICMP source address
+   * \param icmpTtl the ICMP Time to Live
+   * \param icmpType the ICMP Type
+   * \param icmpCode the ICMP Code
+   * \param icmpInfo the ICMP Info
+   */
   void ForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo);
-  void ForwardIcmp6 (Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo);  
-  bool SendPendingData (bool withAck = false); // Send as much as the window allows
-  uint32_t SendDataPacket (SequenceNumber32 seq, uint32_t maxSize, bool withAck); // Send a data packet
-  void SendEmptyPacket (uint8_t flags); // Send a empty packet that carries a flag, e.g. ACK
-  void SendRST (void); // Send reset and tear down this socket
-  bool OutOfRange (SequenceNumber32 head, SequenceNumber32 tail) const; // Check if a sequence number range is within the rx window
+
+  /**
+   * \brief Called by the L3 protocol when it received an ICMPv6 packet to pass on to TCP.
+   *
+   * \param icmpSource the ICMP source address
+   * \param icmpTtl the ICMP Time to Live
+   * \param icmpType the ICMP Type
+   * \param icmpCode the ICMP Code
+   * \param icmpInfo the ICMP Info
+   */
+  void ForwardIcmp6 (Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo);
+
+  /**
+   * \brief Send as much pending data as possible according to the Tx window.
+   *
+   * Note that this function did not implement the PSH flag.
+   *
+   * \param withAck forces an ACK to be sent
+   * \returns true if some data have been sent
+   */
+  bool SendPendingData (bool withAck = false);
+
+  /**
+   * \brief Extract at most maxSize bytes from the TxBuffer at sequence seq, add the
+   *        TCP header, and send to TcpL4Protocol
+   *
+   * \param seq the sequence number
+   * \param maxSize the maximum data block to be transmitted (in bytes)
+   * \param withAck forces an ACK to be sent
+   * \returns the number of bytes sent
+   */
+  uint32_t SendDataPacket (SequenceNumber32 seq, uint32_t maxSize, bool withAck);
+
+  /**
+   * \brief Send a empty packet that carries a flag, e.g. ACK
+   *
+   * \param flags the packet's flags
+   */
+  void SendEmptyPacket (uint8_t flags);
+
+  /**
+   * \brief Send reset and tear down this socket
+   */
+  void SendRST (void);
+
+  /**
+   * \brief Check if a sequence number range is within the rx window
+   *
+   * \param head start of the Sequence window
+   * \param tail end of the Sequence window
+   * \returns true if it is in range
+   */
+  bool OutOfRange (SequenceNumber32 head, SequenceNumber32 tail) const;
+
 
   // Helper functions: Connection close
-  int DoClose (void); // Close a socket by sending RST, FIN, or FIN+ACK, depend on the current state
-  void CloseAndNotify (void); // To CLOSED state, notify upper layer, and deallocate end point
-  void Destroy (void); // Kill this socket by zeroing its attributes
-  void Destroy6 (void); // Kill this socket by zeroing its attributes
-  void DeallocateEndPoint (void); // Deallocate m_endPoint
-  void PeerClose (Ptr<Packet>, const TcpHeader&); // Received a FIN from peer, notify rx buffer
-  void DoPeerClose (void); // FIN is in sequence, notify app and respond with a FIN
-  void CancelAllTimers (void); // Cancel all timer when endpoint is deleted
-  void TimeWait (void);  // Move from CLOSING or FIN_WAIT_2 to TIME_WAIT state
+
+  /**
+   * \brief Close a socket by sending RST, FIN, or FIN+ACK, depend on the current state
+   *
+   * \returns 0 on success
+   */
+  int DoClose (void);
+
+  /**
+   * \brief Peacefully close the socket by notifying the upper layer and deallocate end point
+   */
+  void CloseAndNotify (void);
+
+  /**
+   * \brief Kill this socket by zeroing its attributes (IPv4)
+   *
+   * This is a callback function configured to m_endpoint in
+   * SetupCallback(), invoked when the endpoint is destroyed.
+   */
+  void Destroy (void);
+
+  /**
+   * \brief Kill this socket by zeroing its attributes (IPv6)
+   *
+   * This is a callback function configured to m_endpoint in
+   * SetupCallback(), invoked when the endpoint is destroyed.
+   */
+  void Destroy6 (void);
+
+  /**
+   * \brief Deallocate m_endPoint
+   */
+  void DeallocateEndPoint (void);
+
+  /**
+   * \brief Received a FIN from peer, notify rx buffer
+   *
+   * \param p the packet
+   * \param tcpHeader the packet's TCP header
+   */
+  void PeerClose (Ptr<Packet> p, const TcpHeader& tcpHeader);
+
+  /**
+   * \brief FIN is in sequence, notify app and respond with a FIN
+   */
+  void DoPeerClose (void);
+
+  /**
+   * \brief Cancel all timer when endpoint is deleted
+   */
+  void CancelAllTimers (void);
+
+  /**
+   * \brief Move from CLOSING or FIN_WAIT_2 to TIME_WAIT state
+   */
+  void TimeWait (void);
 
   // State transition functions
-  void ProcessEstablished (Ptr<Packet>, const TcpHeader&); // Received a packet upon ESTABLISHED state
-  void ProcessListen (Ptr<Packet>, const TcpHeader&, const Address&, const Address&); // Process the newly received ACK
-  void ProcessSynSent (Ptr<Packet>, const TcpHeader&); // Received a packet upon SYN_SENT
-  void ProcessSynRcvd (Ptr<Packet>, const TcpHeader&, const Address&, const Address&); // Received a packet upon SYN_RCVD
-  void ProcessWait (Ptr<Packet>, const TcpHeader&); // Received a packet upon CLOSE_WAIT, FIN_WAIT_1, FIN_WAIT_2
-  void ProcessClosing (Ptr<Packet>, const TcpHeader&); // Received a packet upon CLOSING
-  void ProcessLastAck (Ptr<Packet>, const TcpHeader&); // Received a packet upon LAST_ACK
+
+  /**
+   * \brief Received a packet upon ESTABLISHED state.
+   *
+   * This function is mimicking the role of tcp_rcv_established() in tcp_input.c in Linux kernel.
+   *
+   * \param packet the packet
+   * \param tcpHeader the packet's TCP header
+   */
+  void ProcessEstablished (Ptr<Packet> packet, const TcpHeader& tcpHeader); // Received a packet upon ESTABLISHED state
+
+  /**
+   * \brief Received a packet upon LISTEN state.
+   *
+   * \param packet the packet
+   * \param tcpHeader the packet's TCP header
+   * \param fromAddress the source address
+   * \param toAddress the destination address
+   */
+  void ProcessListen (Ptr<Packet> packet, const TcpHeader& tcpHeader,
+                      const Address& fromAddress, const Address& toAddress);
+
+  /**
+   * \brief Received a packet upon SYN_SENT
+   *
+   * \param packet the packet
+   * \param tcpHeader the packet's TCP header
+   */
+  void ProcessSynSent (Ptr<Packet> packet, const TcpHeader& tcpHeader);
+
+  /**
+   * \brief Received a packet upon SYN_RCVD.
+   *
+   * \param packet the packet
+   * \param tcpHeader the packet's TCP header
+   * \param fromAddress the source address
+   * \param toAddress the destination address
+   */
+  void ProcessSynRcvd (Ptr<Packet> packet, const TcpHeader& tcpHeader,
+                       const Address& fromAddress, const Address& toAddress);
+
+  /**
+   * \brief Received a packet upon CLOSE_WAIT, FIN_WAIT_1, FIN_WAIT_2
+   *
+   * \param packet the packet
+   * \param tcpHeader the packet's TCP header
+   */
+  void ProcessWait (Ptr<Packet> packet, const TcpHeader& tcpHeader);
+
+  /**
+   * \brief Received a packet upon CLOSING
+   *
+   * \param packet the packet
+   * \param tcpHeader the packet's TCP header
+   */
+  void ProcessClosing (Ptr<Packet> packet, const TcpHeader& tcpHeader);
+
+  /**
+   * \brief Received a packet upon LAST_ACK
+   *
+   * \param packet the packet
+   * \param tcpHeader the packet's TCP header
+   */
+  void ProcessLastAck (Ptr<Packet> packet, const TcpHeader& tcpHeader);
 
   // Window management
-  virtual uint32_t UnAckDataCount (void);       // Return count of number of unacked bytes
-  virtual uint32_t BytesInFlight (void);        // Return total bytes in flight
-  virtual uint32_t Window (void);               // Return the max possible number of unacked bytes
-  virtual uint32_t AvailableWindow (void);      // Return unfilled portion of window
-  virtual uint16_t AdvertisedWindowSize (void); // The amount of Rx window announced to the peer
+
+  /**
+   * \brief Return count of number of unacked bytes
+   * \returns count of number of unacked bytes
+   */
+  virtual uint32_t UnAckDataCount (void);
+
+  /**
+   * \brief Return total bytes in flight
+   * \returns total bytes in flight
+   */
+  virtual uint32_t BytesInFlight (void);
+
+  /**
+   * \brief Return the max possible number of unacked bytes
+   * \returns the max possible number of unacked bytes
+   */
+  virtual uint32_t Window (void);
+
+  /**
+   * \brief Return unfilled portion of window
+   * \return unfilled portion of window
+   */
+  virtual uint32_t AvailableWindow (void);
+
+  /**
+   * \brief The amount of Rx window announced to the peer
+   * \returns size of Rx window announced to the peer
+   */
+  virtual uint16_t AdvertisedWindowSize (void);
+
 
   // Manage data tx/rx
-  virtual Ptr<TcpSocketBase> Fork (void) = 0; // Call CopyObject<> to clone me
-  virtual void ReceivedAck (Ptr<Packet>, const TcpHeader&); // Received an ACK packet
-  virtual void ReceivedData (Ptr<Packet>, const TcpHeader&); // Recv of a data, put into buffer, call L7 to get it if necessary
-  virtual void EstimateRtt (const TcpHeader&); // RTT accounting
-  virtual void NewAck (SequenceNumber32 const& seq); // Update buffers w.r.t. ACK
-  virtual void DupAck (const TcpHeader& t, uint32_t count) = 0; // Received dupack
-  virtual void ReTxTimeout (void); // Call Retransmit() upon RTO event
-  virtual void Retransmit (void); // Halving cwnd and call DoRetransmit()
-  virtual void DelAckTimeout (void);  // Action upon delay ACK timeout, i.e. send an ACK
-  virtual void LastAckTimeout (void); // Timeout at LAST_ACK, close the connection
-  virtual void PersistTimeout (void); // Send 1 byte probe to get an updated window size
-  virtual void DoRetransmit (void); // Retransmit the oldest packet
-  virtual void ReadOptions (const TcpHeader&); // Read option from incoming packets
-  virtual void AddOptions (TcpHeader&); // Add option to outgoing packets
+
+  /**
+   * \brief Call CopyObject<> to clone me
+   * \returns a copy of the socket
+   */
+  virtual Ptr<TcpSocketBase> Fork (void) = 0;
+
+  /**
+   * \brief Received an ACK packet
+   * \param packet the packet
+   * \param tcpHeader the packet's TCP header
+   */
+  virtual void ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader);
+
+  /**
+   * \brief Recv of a data, put into buffer, call L7 to get it if necessary
+   * \param packet the packet
+   * \param tcpHeader the packet's TCP header
+   */
+  virtual void ReceivedData (Ptr<Packet> packet, const TcpHeader& tcpHeader);
+
+  /**
+   * \brief Take into account the packet for RTT estimation
+   * \param tcpHeader the packet's TCP header
+   */
+  virtual void EstimateRtt (const TcpHeader& tcpHeader);
+
+  /**
+   * \brief Update buffers w.r.t. ACK
+   * \param seq the sequence number
+   */
+  virtual void NewAck (SequenceNumber32 const& seq);
+
+  /**
+   * \brief Received dupack (duplicate ACK)
+   * \param tcpHeader the packet's TCP header
+   * \param count counter of duplicate ACKs
+   */
+  virtual void DupAck (const TcpHeader& tcpHeader, uint32_t count) = 0;
+
+  /**
+   * \brief Call Retransmit() upon RTO event
+   */
+  virtual void ReTxTimeout (void);
+
+  /**
+   * \brief Halving cwnd and call DoRetransmit()
+   */
+  virtual void Retransmit (void);
+
+  /**
+   * \brief Action upon delay ACK timeout, i.e. send an ACK
+   */
+  virtual void DelAckTimeout (void);
+
+  /**
+   * \brief Timeout at LAST_ACK, close the connection
+   */
+  virtual void LastAckTimeout (void);
+
+  /**
+   * \brief Send 1 byte probe to get an updated window size
+   */
+  virtual void PersistTimeout (void);
+
+  /**
+   * \brief Retransmit the oldest packet
+   */
+  virtual void DoRetransmit (void);
+
+  /**
+   * \brief Read option from incoming packets
+   * \param tcpHeader the packet's TCP header
+   */
+  virtual void ReadOptions (const TcpHeader& tcpHeader);
+
+  /**
+   * \brief Add option to outgoing packets
+   * \param tcpHeader the packet's TCP header
+   */
+  virtual void AddOptions (TcpHeader& tcpHeader);
+
 
 protected:
   // Counters and events
-  EventId           m_retxEvent;       //< Retransmission event
-  EventId           m_lastAckEvent;    //< Last ACK timeout event
-  EventId           m_delAckEvent;     //< Delayed ACK timeout event
-  EventId           m_persistEvent;    //< Persist event: Send 1 byte to probe for a non-zero Rx window
-  EventId           m_timewaitEvent;   //< TIME_WAIT expiration event: Move this socket to CLOSED state
-  uint32_t          m_dupAckCount;     //< Dupack counter
-  uint32_t          m_delAckCount;     //< Delayed ACK counter
-  uint32_t          m_delAckMaxCount;  //< Number of packet to fire an ACK before delay timeout
-  bool              m_noDelay;         //< Set to true to disable Nagle's algorithm
-  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
-  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
+  EventId           m_retxEvent;       //!< Retransmission event
+  EventId           m_lastAckEvent;    //!< Last ACK timeout event
+  EventId           m_delAckEvent;     //!< Delayed ACK timeout event
+  EventId           m_persistEvent;    //!< Persist event: Send 1 byte to probe for a non-zero Rx window
+  EventId           m_timewaitEvent;   //!< TIME_WAIT expiration event: Move this socket to CLOSED state
+  uint32_t          m_dupAckCount;     //!< Dupack counter
+  uint32_t          m_delAckCount;     //!< Delayed ACK counter
+  uint32_t          m_delAckMaxCount;  //!< Number of packet to fire an ACK before delay timeout
+  bool              m_noDelay;         //!< Set to true to disable Nagle's algorithm
+  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
+  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
 
   // Connections to other layers of TCP/IP
-  Ipv4EndPoint*       m_endPoint;
-  Ipv6EndPoint*       m_endPoint6;
-  Ptr<Node>           m_node;
-  Ptr<TcpL4Protocol>  m_tcp;
-  Callback<void, Ipv4Address,uint8_t,uint8_t,uint8_t,uint32_t> m_icmpCallback;
-  Callback<void, Ipv6Address,uint8_t,uint8_t,uint8_t,uint32_t> m_icmpCallback6;
+  Ipv4EndPoint*       m_endPoint;   //!< the IPv4 endpoint
+  Ipv6EndPoint*       m_endPoint6;  //!< the IPv6 endpoint
+  Ptr<Node>           m_node;       //!< the associated node
+  Ptr<TcpL4Protocol>  m_tcp;        //!< the associated TCP L4 protocol
+  Callback<void, Ipv4Address,uint8_t,uint8_t,uint8_t,uint32_t> m_icmpCallback;  //!< ICMP callback
+  Callback<void, Ipv6Address,uint8_t,uint8_t,uint8_t,uint32_t> m_icmpCallback6; //!< ICMPv6 callback
 
-  // Round trip time estimation
-  Ptr<RttEstimator> m_rtt;
+  Ptr<RttEstimator> m_rtt; //!< Round trip time estimator
 
   // 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
+  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
 
   // State-related attributes
-  TracedValue<TcpStates_t> m_state;         //< TCP state
-  enum SocketErrno         m_errno;         //< Socket error code
-  bool                     m_closeNotified; //< Told app to close socket
-  bool                     m_closeOnEmpty;  //< Close socket upon tx buffer emptied
-  bool                     m_shutdownSend;  //< Send no longer allowed
-  bool                     m_shutdownRecv;  //< Receive no longer allowed
-  bool                     m_connected;     //< Connection established
-  double                   m_msl;           //< Max segment lifetime
+  TracedValue<TcpStates_t> m_state;         //!< TCP state
+  enum SocketErrno         m_errno;         //!< Socket error code
+  bool                     m_closeNotified; //!< Told app to close socket
+  bool                     m_closeOnEmpty;  //!< Close socket upon tx buffer emptied
+  bool                     m_shutdownSend;  //!< Send no longer allowed
+  bool                     m_shutdownRecv;  //!< Receive no longer allowed
+  bool                     m_connected;     //!< Connection established
+  double                   m_msl;           //!< Max segment lifetime
 
   // Window management
-  uint32_t              m_segmentSize; //< Segment size
-  uint16_t              m_maxWinSize;  //< Maximum window size to advertise
-  TracedValue<uint32_t> m_rWnd;        //< Flow control window at remote side
+  uint32_t              m_segmentSize; //!< Segment size
+  uint16_t              m_maxWinSize;  //!< Maximum window size to advertise
+  TracedValue<uint32_t> m_rWnd;        //!< Flow control window at remote side
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/tcp-socket.cc ns-3.19/src/internet/model/tcp-socket.cc
--- ns-3.18.1/src/internet/model/tcp-socket.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-socket.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (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.18.1/src/internet/model/tcp-socket-factory.cc ns-3.19/src/internet/model/tcp-socket-factory.cc
--- ns-3.18.1/src/internet/model/tcp-socket-factory.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-socket-factory.cc	2013-12-20 09:44:50.000000000 -0800
@@ -23,7 +23,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TcpSocketFactory);
+NS_OBJECT_ENSURE_REGISTERED (TcpSocketFactory)
+  ;
 
 TypeId
 TcpSocketFactory::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/tcp-socket-factory.h ns-3.19/src/internet/model/tcp-socket-factory.h
--- ns-3.18.1/src/internet/model/tcp-socket-factory.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-socket-factory.h	2013-12-20 09:44:50.000000000 -0800
@@ -46,6 +46,11 @@
 class TcpSocketFactory : public SocketFactory
 {
 public:
+  /**
+   * Get the type ID.
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
 };
diff -Naur ns-3.18.1/src/internet/model/tcp-socket-factory-impl.h ns-3.19/src/internet/model/tcp-socket-factory-impl.h
--- ns-3.18.1/src/internet/model/tcp-socket-factory-impl.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-socket-factory-impl.h	2013-12-20 09:44:50.000000000 -0800
@@ -46,6 +46,10 @@
   TcpSocketFactoryImpl ();
   virtual ~TcpSocketFactoryImpl ();
 
+  /**
+   * \brief Set the associated TCP L4 protocol.
+   * \param tcp the TCP L4 protocol
+   */
   void SetTcp (Ptr<TcpL4Protocol> tcp);
 
   virtual Ptr<Socket> CreateSocket (void);
@@ -53,7 +57,7 @@
 protected:
   virtual void DoDispose (void);
 private:
-  Ptr<TcpL4Protocol> m_tcp;
+  Ptr<TcpL4Protocol> m_tcp; //!< the associated TCP L4 protocol
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/tcp-socket.h ns-3.19/src/internet/model/tcp-socket.h
--- ns-3.18.1/src/internet/model/tcp-socket.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-socket.h	2013-12-20 09:44:50.000000000 -0800
@@ -35,7 +35,9 @@
 class Node;
 class Packet;
 
-/* Names of the 11 TCP states */
+/**
+ * \brief Names of the 11 TCP states
+ */
 typedef enum {
   CLOSED,       // 0
   LISTEN,       // 1
@@ -62,37 +64,164 @@
 class TcpSocket : public Socket
 {
 public:
+  /**
+   * Get the type ID.
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
  
   TcpSocket (void);
   virtual ~TcpSocket (void);
 
-  // Literal names of TCP states for use in log messages */
+  /**
+   * \brief Literal names of TCP states for use in log messages
+   */
   static const char* const TcpStateName[LAST_STATE];
 
 private:
   // Indirect the attribute setting and getting through private virtual methods
+
+  /**
+   * \brief Set the send buffer size.
+   * \param size the buffer size (in bytes)
+   */
   virtual void SetSndBufSize (uint32_t size) = 0;
+
+  /**
+   * \brief Get the send buffer size.
+   * \returns the buffer size (in bytes)
+   */
   virtual uint32_t GetSndBufSize (void) const = 0;
+
+  /**
+   * \brief Set the receive buffer size.
+   * \param size the buffer size (in bytes)
+   */
   virtual void SetRcvBufSize (uint32_t size) = 0;
+
+  /**
+   * \brief Get the receive buffer size.
+   * \returns the buffer size (in bytes)
+   */
   virtual uint32_t GetRcvBufSize (void) const = 0;
+
+  /**
+   * \brief Set the segment size.
+   * \param size the segment size (in bytes)
+   */
   virtual void SetSegSize (uint32_t size) = 0;
+
+  /**
+   * \brief Get the segment size.
+   * \returns the segment size (in bytes)
+   */
   virtual uint32_t GetSegSize (void) const = 0;
+
+  /**
+   * \brief Set the Slow Start Threshold.
+   * \param threshold the Slow Start Threshold (in bytes)
+   */
   virtual void SetSSThresh (uint32_t threshold) = 0;
+
+  /**
+   * \brief Get the Slow Start Threshold.
+   * \returns the Slow Start Threshold (in bytes)
+   */
   virtual uint32_t GetSSThresh (void) const = 0;
-  virtual void SetInitialCwnd (uint32_t count) = 0;
+
+  /**
+   * \brief Set the initial Congestion Window.
+   * \param cwnd the initial congestion window (in bytes)
+   */
+  virtual void SetInitialCwnd (uint32_t cwnd) = 0;
+
+  /**
+   * \brief Get the initial Congestion Window.
+   * \returns the initial congestion window (in bytes)
+   */
   virtual uint32_t GetInitialCwnd (void) const = 0;
+
+  /**
+   * \brief Set the connection timeout.
+   * \param timeout the connection timeout
+   */
   virtual void SetConnTimeout (Time timeout) = 0;
+
+  /**
+   * \brief Get the connection timeout.
+   * \returns the connection timeout
+   */
   virtual Time GetConnTimeout (void) const = 0;
+
+  /**
+   * \brief Set the number of connection retries before giving up.
+   * \param count the number of connection retries
+   */
   virtual void SetConnCount (uint32_t count) = 0;
+
+  /**
+   * \brief Get the number of connection retries before giving up.
+   * \returns the number of connection retries
+   */
   virtual uint32_t GetConnCount (void) const = 0;
+
+  /**
+   * \brief Set the time to delay an ACK.
+   * \param timeout the time to delay an ACK
+   */
   virtual void SetDelAckTimeout (Time timeout) = 0;
+
+  /**
+   * \brief Get the time to delay an ACK.
+   * \returns the time to delay an ACK
+   */
   virtual Time GetDelAckTimeout (void) const = 0;
+
+  /**
+   * \brief Set the number of packet to fire an ACK before delay timeout.
+   * \param count the umber of packet to fire an ACK before delay timeout
+   */
   virtual void SetDelAckMaxCount (uint32_t count) = 0;
+
+  /**
+   * \brief Get the number of packet to fire an ACK before delay timeout.
+   * \returns the number of packet to fire an ACK before delay timeout
+   */
   virtual uint32_t GetDelAckMaxCount (void) const = 0;
+
+  /**
+   * \brief Enable/Disable Nagle's algorithm.
+   * \param noDelay true to DISABLE Nagle's algorithm
+   */
   virtual void SetTcpNoDelay (bool noDelay) = 0;
+
+  /**
+   * \brief Check if Nagle's algorithm is enabled or not.
+   * \returns true if Nagle's algorithm is DISABLED
+   */
   virtual bool GetTcpNoDelay (void) const = 0;
+
+  /**
+   * \brief Set the timout for persistent connection
+   *
+   * When the timout expires, send 1-byte data to probe for the window
+   * size at the receiver when the local knowledge tells that the
+   * receiver has zero window size
+   *
+   * \param timeout the persistent timout
+   */
   virtual void SetPersistTimeout (Time timeout) = 0;
+
+  /**
+   * \brief Get the timout for persistent connection
+   *
+   * When the timout expires, send 1-byte data to probe for the window
+   * size at the receiver when the local knowledge tells that the
+   * receiver has zero window size
+   *
+   * \returns the persistent timout
+   */
   virtual Time GetPersistTimeout (void) const = 0;
 
 };
diff -Naur ns-3.18.1/src/internet/model/tcp-tahoe.cc ns-3.19/src/internet/model/tcp-tahoe.cc
--- ns-3.18.1/src/internet/model/tcp-tahoe.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-tahoe.cc	2013-12-20 09:44:50.000000000 -0800
@@ -32,7 +32,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TcpTahoe);
+NS_OBJECT_ENSURE_REGISTERED (TcpTahoe)
+  ;
 
 TypeId
 TcpTahoe::GetTypeId (void)
@@ -71,7 +72,7 @@
 {
 }
 
-/** We initialize m_cWnd from this function, after attributes initialized */
+/* We initialize m_cWnd from this function, after attributes initialized */
 int
 TcpTahoe::Listen (void)
 {
@@ -80,7 +81,7 @@
   return TcpSocketBase::Listen ();
 }
 
-/** We initialize m_cWnd from this function, after attributes initialized */
+/* We initialize m_cWnd from this function, after attributes initialized */
 int
 TcpTahoe::Connect (const Address & address)
 {
@@ -89,7 +90,7 @@
   return TcpSocketBase::Connect (address);
 }
 
-/** Limit the size of in-flight data by cwnd and receiver's rxwin */
+/* Limit the size of in-flight data by cwnd and receiver's rxwin */
 uint32_t
 TcpTahoe::Window (void)
 {
@@ -103,7 +104,7 @@
   return CopyObject<TcpTahoe> (this);
 }
 
-/** New ACK (up to seqnum seq) received. Increase cwnd and call TcpSocketBase::NewAck() */
+/* New ACK (up to seqnum seq) received. Increase cwnd and call TcpSocketBase::NewAck() */
 void
 TcpTahoe::NewAck (SequenceNumber32 const& seq)
 {
@@ -127,7 +128,7 @@
   TcpSocketBase::NewAck (seq);           // Complete newAck processing
 }
 
-/** Cut down ssthresh upon triple dupack */
+/* Cut down ssthresh upon triple dupack */
 void
 TcpTahoe::DupAck (const TcpHeader& t, uint32_t count)
 {
@@ -147,7 +148,7 @@
     }
 }
 
-/** Retransmit timeout */
+/* Retransmit timeout */
 void TcpTahoe::Retransmit (void)
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.18.1/src/internet/model/tcp-tahoe.h ns-3.19/src/internet/model/tcp-tahoe.h
--- ns-3.18.1/src/internet/model/tcp-tahoe.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-tahoe.h	2013-12-20 09:44:50.000000000 -0800
@@ -42,11 +42,19 @@
 class TcpTahoe : public TcpSocketBase
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   /**
    * Create an unbound tcp socket.
    */
   TcpTahoe (void);
+  /**
+   * \brief Copy constructor
+   * \param sock the object to copy
+   */
   TcpTahoe (const TcpTahoe& sock);
   virtual ~TcpTahoe (void);
 
@@ -68,13 +76,16 @@
   virtual void     SetInitialCwnd (uint32_t cwnd);
   virtual uint32_t GetInitialCwnd (void) const;
 private:
-  void InitializeCwnd (void);            // set m_cWnd when connection starts
+  /**
+   * \brief Set the congestion window when connection starts
+   */
+  void InitializeCwnd (void);
 
 protected:
-  TracedValue<uint32_t>  m_cWnd;         //< Congestion window
-  uint32_t               m_ssThresh;     //< Slow Start Threshold
-  uint32_t               m_initialCWnd;  //< Initial cWnd value
-  uint32_t               m_retxThresh;   //< Fast Retransmit threshold
+  TracedValue<uint32_t>  m_cWnd;         //!< Congestion window
+  uint32_t               m_ssThresh;     //!< Slow Start Threshold
+  uint32_t               m_initialCWnd;  //!< Initial cWnd value
+  uint32_t               m_retxThresh;   //!< Fast Retransmit threshold
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/tcp-tx-buffer.h ns-3.19/src/internet/model/tcp-tx-buffer.h
--- ns-3.18.1/src/internet/model/tcp-tx-buffer.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-tx-buffer.h	2013-12-20 09:44:50.000000000 -0800
@@ -40,7 +40,15 @@
 class TcpTxBuffer : public Object
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
+  /**
+   * \brief Constructor
+   * \param n initial Sequence number to be transmitted
+   */
   TcpTxBuffer (uint32_t n = 0);
   virtual ~TcpTxBuffer (void);
 
@@ -48,31 +56,37 @@
 
   /**
    * Returns the first byte's sequence number
+   * \returns the first byte's sequence number
    */
   SequenceNumber32 HeadSequence (void) const;
 
   /**
    * Returns the last byte's sequence number + 1
+   * \returns the last byte's sequence number + 1
    */
   SequenceNumber32 TailSequence (void) const;
 
   /**
    * Returns total number of bytes in this Tx buffer
+   * \returns total number of bytes in this Tx buffer
    */
   uint32_t Size (void) const;
 
   /**
    * Returns the Tx window size
+   * \returns the Tx window size (in bytes)
    */
   uint32_t MaxBufferSize (void) const;
 
   /**
    * Set the Tx window size
+   * \param n Tx window size (in bytes)
    */
   void SetMaxBufferSize (uint32_t n);
 
   /**
    * Returns the available capacity in this Tx window
+   * \returns available capacity in this Tx window
    */
   uint32_t Available (void) const;
 
@@ -86,17 +100,23 @@
 
   /**
    * Returns the number of bytes from the buffer in the range [seq, tailSequence)
+   * \param seq initial sequence number
+   * \returns the number of bytes from the buffer in the range
    */
   uint32_t SizeFromSequence (const SequenceNumber32& seq) const;
 
   /**
    * Copy data of size numBytes into a packet, data from the range [seq, seq+numBytes)
+   * \param numBytes number of bytes to copy
+   * \param seq start sequence number to extract
+   * \returns a packet
    */
   Ptr<Packet> CopyFromSequence (uint32_t numBytes, const SequenceNumber32& seq);
 
   /**
    * Set the m_firstByteSeq to seq. Supposed to be called only when the
    * connection is just set up and we did not send any data out yet.
+   * \param seq The sequence number of the head byte
    */
   void SetHeadSequence (const SequenceNumber32& seq);
 
@@ -108,12 +128,13 @@
   void DiscardUpTo (const SequenceNumber32& seq);
 
 private:
+  /// container for data stored in the buffer
   typedef std::list<Ptr<Packet> >::iterator BufIterator;
 
-  TracedValue<SequenceNumber32> m_firstByteSeq; //< Sequence number of the first byte in data (SND.UNA)
-  uint32_t m_size;                              //< Number of data bytes
-  uint32_t m_maxBuffer;                         //< Max number of data bytes in buffer (SND.WND)
-  std::list<Ptr<Packet> > m_data;               //< Corresponding data (may be null)
+  TracedValue<SequenceNumber32> m_firstByteSeq; //!< Sequence number of the first byte in data (SND.UNA)
+  uint32_t m_size;                              //!< Number of data bytes
+  uint32_t m_maxBuffer;                         //!< Max number of data bytes in buffer (SND.WND)
+  std::list<Ptr<Packet> > m_data;               //!< Corresponding data (may be null)
 };
 
 } // namepsace ns3
diff -Naur ns-3.18.1/src/internet/model/tcp-westwood.cc ns-3.19/src/internet/model/tcp-westwood.cc
--- ns-3.18.1/src/internet/model/tcp-westwood.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-westwood.cc	2013-12-20 09:44:50.000000000 -0800
@@ -46,7 +46,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED(TcpWestwood);
+NS_OBJECT_ENSURE_REGISTERED(TcpWestwood)
+  ;
 
 TypeId
 TcpWestwood::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/tcp-westwood.h ns-3.19/src/internet/model/tcp-westwood.h
--- ns-3.18.1/src/internet/model/tcp-westwood.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/tcp-westwood.h	2013-12-20 09:44:50.000000000 -0800
@@ -62,18 +62,32 @@
 class TcpWestwood : public TcpSocketBase
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   TcpWestwood (void);
+  /**
+   * \brief Copy constructor
+   * \param sock the object to copy
+   */
   TcpWestwood (const TcpWestwood& sock);
   virtual ~TcpWestwood (void);
 
+  /**
+   * \brief Protocol variant (Westwood or Westwood+)
+   */
   enum ProtocolType 
   {
     WESTWOOD,
     WESTWOODPLUS
   };
 
+  /**
+   * \brief Filter type (None or Tustin)
+   */
   enum FilterType 
   {
     NONE,
@@ -85,17 +99,11 @@
   virtual int Listen (void);
 
 protected:
-  /**
-   * Limit the size of outstanding data based on the cwnd and the receiver's advertised window
-   *
-   * \return the max. possible number of unacked bytes
-   */  
-  virtual uint32_t Window (void);
-
-  /**
-   * Call CopyObject<TcpWestwood> to clone me
-   */  
-  virtual Ptr<TcpSocketBase> Fork (void);
+  virtual uint32_t Window (void); // Return the max possible number of unacked bytes
+  virtual Ptr<TcpSocketBase> Fork (void); // Call CopyObject<TcpTahoe> to clone me
+  virtual void NewAck (SequenceNumber32 const& seq); // Inc cwnd and call NewAck() of parent
+  virtual void DupAck (const TcpHeader& t, uint32_t count);  // Treat 3 dupack as timeout
+  virtual void Retransmit (void); // Retransmit time out
 
   /**
    * Process the newly received ACK
@@ -106,58 +114,17 @@
   virtual void ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader);
   
   /**
-   * Adjust the cwnd based on the current congestion control phase,
-   * and then call the TcpSocketBase::NewAck() to complete the processing
-   *
-   * \param seq the acknowledgment number
-   */  
-  virtual void NewAck (SequenceNumber32 const& seq);
-
-  /**
-   * Adjust the cwnd using the currently estimated bandwidth,
-   * retransmit the missing packet, and enter fast recovery if 3 DUPACKs are received
-   *
-   * \param header the TCP header of the ACK packet
-   * \param count the number of DUPACKs
-   */  
-  virtual void DupAck (const TcpHeader& header, uint32_t count);
-
-  /**
-   * Upon an RTO event, adjust the cwnd using the currently estimated bandwidth,
-   * retransmit the missing packet, and exit fast recovery
-   */  
-  virtual void Retransmit (void);
-
-  /**
    * Estimate the RTT, record the minimum value,
    * and run a clock on the RTT to trigger Westwood+ bandwidth sampling
+   * \param header the packet header
    */
   virtual void EstimateRtt (const TcpHeader& header);
 
   // Implementing ns3::TcpSocket -- Attribute get/set
-  /**
-   * \param size the segment size to be used in a connection
-   */  
-  virtual void SetSegSize (uint32_t size);
-
-  /**
-   * \param the slow-start threshold
-   */  
-  virtual void SetSSThresh (uint32_t threshold);
-
-  /**
-   * \return the slow-start threshold
-   */  
+  virtual void     SetSegSize (uint32_t size);
+  virtual void     SetSSThresh (uint32_t threshold);
   virtual uint32_t GetSSThresh (void) const;
-
-  /**
-   * \param cwnd the initial cwnd
-   */  
-  virtual void SetInitialCwnd (uint32_t cwnd);
-
-  /**
-   * \return the initial cwnd
-   */ 
+  virtual void     SetInitialCwnd (uint32_t cwnd);
   virtual uint32_t GetInitialCwnd (void) const;
 
 private:
@@ -196,24 +163,24 @@
   void Filtering (void);
 
 protected:
-  TracedValue<uint32_t>  m_cWnd;                   //< Congestion window
-  uint32_t               m_ssThresh;               //< Slow Start Threshold
-  uint32_t               m_initialCWnd;            //< Initial cWnd value
-  bool                   m_inFastRec;              //< Currently in fast recovery if TRUE
-
-  TracedValue<double>    m_currentBW;              //< Current value of the estimated BW
-  double                 m_lastSampleBW;           //< Last bandwidth sample
-  double                 m_lastBW;                 //< Last bandwidth sample after being filtered
-  Time                   m_minRtt;                 //< Minimum RTT
-  double                 m_lastAck;                //< The time last ACK was received
-  SequenceNumber32       m_prevAckNo;              //< Previously received ACK number
-  int                    m_accountedFor;           //< The number of received DUPACKs
-  enum ProtocolType      m_pType;                  //< 0 for Westwood, 1 for Westwood+
-  enum FilterType        m_fType;                  //< 0 for none, 1 for Tustin
-
-  int                    m_ackedSegments;          //< The number of segments ACKed between RTTs
-  bool                   m_IsCount;                //< Start keeping track of m_ackedSegments for Westwood+ if TRUE
-  EventId                m_bwEstimateEvent;        //< The BW estimation event for Westwood+
+  TracedValue<uint32_t>  m_cWnd;                   //!< Congestion window
+  uint32_t               m_ssThresh;               //!< Slow Start Threshold
+  uint32_t               m_initialCWnd;            //!< Initial cWnd value
+  bool                   m_inFastRec;              //!< Currently in fast recovery if TRUE
+
+  TracedValue<double>    m_currentBW;              //!< Current value of the estimated BW
+  double                 m_lastSampleBW;           //!< Last bandwidth sample
+  double                 m_lastBW;                 //!< Last bandwidth sample after being filtered
+  Time                   m_minRtt;                 //!< Minimum RTT
+  double                 m_lastAck;                //!< The time last ACK was received
+  SequenceNumber32       m_prevAckNo;              //!< Previously received ACK number
+  int                    m_accountedFor;           //!< The number of received DUPACKs
+  enum ProtocolType      m_pType;                  //!< 0 for Westwood, 1 for Westwood+
+  enum FilterType        m_fType;                  //!< 0 for none, 1 for Tustin
+
+  int                    m_ackedSegments;          //!< The number of segments ACKed between RTTs
+  bool                   m_IsCount;                //!< Start keeping track of m_ackedSegments for Westwood+ if TRUE
+  EventId                m_bwEstimateEvent;        //!< The BW estimation event for Westwood+
 
 };
 
diff -Naur ns-3.18.1/src/internet/model/udp-header.cc ns-3.19/src/internet/model/udp-header.cc
--- ns-3.18.1/src/internet/model/udp-header.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/udp-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -23,7 +23,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (UdpHeader);
+NS_OBJECT_ENSURE_REGISTERED (UdpHeader)
+  ;
 
 /* The magic values below are used only for debugging.
  * They can be used to easily detect memory corruption
@@ -32,7 +33,8 @@
 UdpHeader::UdpHeader ()
   : m_sourcePort (0xfffd),
     m_destinationPort (0xfffd),
-    m_payloadSize (0xfffd),
+    m_payloadSize (0),
+    m_checksum (0),
     m_calcChecksum (false),
     m_goodChecksum (true)
 {
@@ -107,7 +109,7 @@
 
   WriteTo (it, m_source);
   WriteTo (it, m_destination);
-  if (Ipv4Address::IsMatchingType(m_source))
+  if (Ipv4Address::IsMatchingType (m_source))
     {
       it.WriteU8 (0); /* protocol */
       it.WriteU8 (m_protocol); /* protocol */
@@ -115,7 +117,7 @@
       it.WriteU8 (size & 0xff); /* length */
       hdrSize = 12;
     }
-  else if (Ipv6Address::IsMatchingType(m_source))
+  else if (Ipv6Address::IsMatchingType (m_source))
     {
       it.WriteU16 (0);
       it.WriteU8 (size >> 8); /* length */
@@ -137,6 +139,17 @@
   return m_goodChecksum; 
 }
 
+void
+UdpHeader::ForceChecksum (uint16_t checksum)
+{
+  m_checksum = checksum;
+}
+
+void
+UdpHeader::ForcePayloadSize (uint16_t payloadSize)
+{
+  m_payloadSize = payloadSize;
+}
 
 TypeId 
 UdpHeader::GetTypeId (void)
@@ -174,18 +187,33 @@
 
   i.WriteHtonU16 (m_sourcePort);
   i.WriteHtonU16 (m_destinationPort);
-  i.WriteHtonU16 (start.GetSize ());
-  i.WriteU16 (0);
+  if (m_payloadSize == 0)
+    {
+      i.WriteHtonU16 (start.GetSize ());
+    }
+  else
+    {
+      i.WriteHtonU16 (m_payloadSize);
+    }
 
-  if (m_calcChecksum)
+  if ( m_checksum == 0)
     {
-      uint16_t headerChecksum = CalculateHeaderChecksum (start.GetSize ());
-      i = start;
-      uint16_t checksum = i.CalculateIpChecksum (start.GetSize (), headerChecksum);
+      i.WriteU16 (0);
 
-      i = start;
-      i.Next (6);
-      i.WriteU16 (checksum);
+      if (m_calcChecksum)
+        {
+          uint16_t headerChecksum = CalculateHeaderChecksum (start.GetSize ());
+          i = start;
+          uint16_t checksum = i.CalculateIpChecksum (start.GetSize (), headerChecksum);
+
+          i = start;
+          i.Next (6);
+          i.WriteU16 (checksum);
+        }
+    }
+  else
+    {
+      i.WriteU16 (m_checksum);
     }
 }
 uint32_t
@@ -195,9 +223,9 @@
   m_sourcePort = i.ReadNtohU16 ();
   m_destinationPort = i.ReadNtohU16 ();
   m_payloadSize = i.ReadNtohU16 () - GetSerializedSize ();
-  i.Next (2);
+  m_checksum = i.ReadU16 ();
 
-  if(m_calcChecksum)
+  if (m_calcChecksum)
     {
       uint16_t headerChecksum = CalculateHeaderChecksum (start.GetSize ());
       i = start;
@@ -209,5 +237,10 @@
   return GetSerializedSize ();
 }
 
+uint16_t
+UdpHeader::GetChecksum ()
+{
+  return m_checksum;
+}
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/udp-header.h ns-3.19/src/internet/model/udp-header.h
--- ns-3.18.1/src/internet/model/udp-header.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/udp-header.h	2013-12-20 09:44:50.000000000 -0800
@@ -114,6 +114,10 @@
                            Ipv6Address destination,
                            uint8_t protocol);
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
   virtual void Print (std::ostream &os) const;
@@ -127,17 +131,58 @@
    */
   bool IsChecksumOk (void) const;
 
+  /**
+   * \brief Force the UDP checksum to a given value.
+   *
+   * This might be useful for test purposes or to
+   * restore the UDP checksum when the UDP header
+   * has been compressed (e.g., in 6LoWPAN).
+   * Note that, normally, the header checksum is
+   * calculated on the fly when the packet is
+   * serialized.
+   *
+   * When this option is used, the UDP checksum is written in
+   * the header, regardless of the global ChecksumEnabled option.
+   *
+   * \note The checksum value must be a big endian number.
+   *
+   * \param checksum the checksum to use (big endian).
+   */
+  void ForceChecksum (uint16_t checksum);
+
+  /**
+   * \brief Force the UDP payload length to a given value.
+   *
+   * This might be useful when forging a packet for test
+   * purposes.
+   *
+   * \param payloadSize the payload length to use.
+   */
+  void ForcePayloadSize (uint16_t payloadSize);
+
+  /**
+   * \brief Return the checksum (only known after a Deserialize)
+   * \return The checksum for this UdpHeader
+   */
+  uint16_t GetChecksum ();
+
 private:
+  /**
+   * \brief Calculate the header checksum
+   * \param size packet size
+   * \returns the checksum
+   */
   uint16_t CalculateHeaderChecksum (uint16_t size) const;
-  uint16_t m_sourcePort;
-  uint16_t m_destinationPort;
-  uint16_t m_payloadSize;
-
-  Address m_source;
-  Address m_destination;
-  uint8_t m_protocol;
-  bool m_calcChecksum;
-  bool m_goodChecksum;
+  uint16_t m_sourcePort;      //!< Source port
+  uint16_t m_destinationPort; //!< Destination port
+  uint16_t m_payloadSize;     //!< Payload size
+
+  Address m_source;           //!< Source IP address
+  Address m_destination;      //!< Destination IP address
+  uint8_t m_protocol;         //!< Protocol number
+  uint16_t m_checksum;        //!< Forced Checksum value
+  bool m_calcChecksum;        //!< Flag to calculate checksum
+  bool m_goodChecksum;        //!< Flag to indicate that checksum is correct
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/udp-l4-protocol.cc ns-3.19/src/internet/model/udp-l4-protocol.cc
--- ns-3.18.1/src/internet/model/udp-l4-protocol.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/udp-l4-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -44,7 +44,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (UdpL4Protocol);
+NS_OBJECT_ENSURE_REGISTERED (UdpL4Protocol)
+  ;
 
 /* see http://www.iana.org/assignments/protocol-numbers */
 const uint8_t UdpL4Protocol::PROT_NUMBER = 17;
@@ -402,7 +403,7 @@
   for (Ipv6EndPointDemux::EndPointsI endPoint = endPoints.begin ();
        endPoint != endPoints.end (); endPoint++)
     {
-      (*endPoint)->ForwardUp (packet->Copy (), header, udpHeader.GetSourcePort ());
+      (*endPoint)->ForwardUp (packet->Copy (), header, udpHeader.GetSourcePort (), interface);
     }
   return IpL4Protocol::RX_OK;
 }
diff -Naur ns-3.18.1/src/internet/model/udp-l4-protocol.h ns-3.19/src/internet/model/udp-l4-protocol.h
--- ns-3.18.1/src/internet/model/udp-l4-protocol.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/udp-l4-protocol.h	2013-12-20 09:44:50.000000000 -0800
@@ -47,12 +47,20 @@
  */
 class UdpL4Protocol : public IpL4Protocol {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
-  static const uint8_t PROT_NUMBER;
+  static const uint8_t PROT_NUMBER; //!< protocol number (0x11)
 
   UdpL4Protocol ();
   virtual ~UdpL4Protocol ();
 
+  /**
+   * Set node associated with this stack
+   * \param node the node
+   */
   void SetNode (Ptr<Node> node);
 
   virtual int GetProtocolNumber (void) const;
@@ -63,25 +71,90 @@
    */
   Ptr<Socket> CreateSocket (void);
 
+  /**
+   * \brief Allocate an IPv4 Endpoint
+   * \return the Endpoint
+   */
   Ipv4EndPoint *Allocate (void);
+  /**
+   * \brief Allocate an IPv4 Endpoint
+   * \param address address to use
+   * \return the Endpoint
+   */
   Ipv4EndPoint *Allocate (Ipv4Address address);
+  /**
+   * \brief Allocate an IPv4 Endpoint
+   * \param port port to use
+   * \return the Endpoint
+   */
   Ipv4EndPoint *Allocate (uint16_t port);
+  /**
+   * \brief Allocate an IPv4 Endpoint
+   * \param address address to use
+   * \param port port to use
+   * \return the Endpoint
+   */
   Ipv4EndPoint *Allocate (Ipv4Address address, uint16_t port);
+  /**
+   * \brief Allocate an IPv4 Endpoint
+   * \param localAddress local address to use
+   * \param localPort local port to use
+   * \param peerAddress remote address to use
+   * \param peerPort remote port to use
+   * \return the Endpoint
+   */
   Ipv4EndPoint *Allocate (Ipv4Address localAddress, uint16_t localPort,
                           Ipv4Address peerAddress, uint16_t peerPort);
+
+  /**
+   * \brief Allocate an IPv6 Endpoint
+   * \return the Endpoint
+   */
   Ipv6EndPoint *Allocate6 (void);
+  /**
+   * \brief Allocate an IPv6 Endpoint
+   * \param address address to use
+   * \return the Endpoint
+   */
   Ipv6EndPoint *Allocate6 (Ipv6Address address);
+  /**
+   * \brief Allocate an IPv6 Endpoint
+   * \param port port to use
+   * \return the Endpoint
+   */
   Ipv6EndPoint *Allocate6 (uint16_t port);
+  /**
+   * \brief Allocate an IPv6 Endpoint
+   * \param address address to use
+   * \param port port to use
+   * \return the Endpoint
+   */
   Ipv6EndPoint *Allocate6 (Ipv6Address address, uint16_t port);
+  /**
+   * \brief Allocate an IPv6 Endpoint
+   * \param localAddress local address to use
+   * \param localPort local port to use
+   * \param peerAddress remote address to use
+   * \param peerPort remote port to use
+   * \return the Endpoint
+   */
   Ipv6EndPoint *Allocate6 (Ipv6Address localAddress, uint16_t localPort,
-                          Ipv6Address peerAddress, uint16_t peerPort);
+                           Ipv6Address peerAddress, uint16_t peerPort);
 
+  /**
+   * \brief Remove an IPv4 Endpoint.
+   * \param endPoint the end point to remove
+   */
   void DeAllocate (Ipv4EndPoint *endPoint);
+  /**
+   * \brief Remove an IPv6 Endpoint.
+   * \param endPoint the end point to remove
+   */
   void DeAllocate (Ipv6EndPoint *endPoint);
 
   // called by UdpSocket.
   /**
-   * \brief Send a packet via UDP
+   * \brief Send a packet via UDP (IPv4)
    * \param packet The packet to send
    * \param saddr The source Ipv4Address
    * \param daddr The destination Ipv4Address
@@ -91,40 +164,50 @@
   void Send (Ptr<Packet> packet,
              Ipv4Address saddr, Ipv4Address daddr, 
              uint16_t sport, uint16_t dport);
+  /**
+   * \brief Send a packet via UDP (IPv4)
+   * \param packet The packet to send
+   * \param saddr The source Ipv4Address
+   * \param daddr The destination Ipv4Address
+   * \param sport The source port number
+   * \param dport The destination port number
+   * \param route The route
+   */
   void Send (Ptr<Packet> packet,
              Ipv4Address saddr, Ipv4Address daddr, 
              uint16_t sport, uint16_t dport, Ptr<Ipv4Route> route);
+  /**
+   * \brief Send a packet via UDP (IPv6)
+   * \param packet The packet to send
+   * \param saddr The source Ipv4Address
+   * \param daddr The destination Ipv4Address
+   * \param sport The source port number
+   * \param dport The destination port number
+   */
   void Send (Ptr<Packet> packet,
              Ipv6Address saddr, Ipv6Address daddr, 
              uint16_t sport, uint16_t dport);
+  /**
+   * \brief Send a packet via UDP (IPv6)
+   * \param packet The packet to send
+   * \param saddr The source Ipv4Address
+   * \param daddr The destination Ipv4Address
+   * \param sport The source port number
+   * \param dport The destination port number
+   * \param route The route
+   */
   void Send (Ptr<Packet> packet,
              Ipv6Address saddr, Ipv6Address daddr, 
              uint16_t sport, uint16_t dport, Ptr<Ipv6Route> route);
-  /**
-   * \brief Receive a packet up the protocol stack
-   * \param p The Packet to dump the contents into
-   * \param header IPv4 Header information
-   * \param interface the interface from which the packet is coming.
-   */
+
   // inherited from Ipv4L4Protocol
   virtual enum IpL4Protocol::RxStatus Receive (Ptr<Packet> p,
-                                                 Ipv4Header const &header,
-                                                 Ptr<Ipv4Interface> interface);
+                                               Ipv4Header const &header,
+                                               Ptr<Ipv4Interface> interface);
   virtual enum IpL4Protocol::RxStatus Receive (Ptr<Packet> p,
-                                                 Ipv6Header const &header,
-                                                 Ptr<Ipv6Interface> interface);
+                                               Ipv6Header const &header,
+                                               Ptr<Ipv6Interface> interface);
 
-  /**
-   * \brief Receive an ICMP packet
-   * \param icmpSource The IP address of the source of the packet.
-   * \param icmpTtl The time to live from the IP header
-   * \param icmpType The type of the message from the ICMP header
-   * \param icmpCode The message code from the ICMP header
-   * \param icmpInfo 32-bit integer carrying informational value of varying semantics.
-   * \param payloadSource The IP source address from the IP header of the packet
-   * \param payloadDestination The IP destination address from the IP header of the packet
-   * \param payload Payload of the ICMP packet
-   */
   virtual void ReceiveIcmp (Ipv4Address icmpSource, uint8_t icmpTtl,
                             uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo,
                             Ipv4Address payloadSource,Ipv4Address payloadDestination,
@@ -149,14 +232,28 @@
    */
   virtual void NotifyNewAggregate ();
 private:
-  Ptr<Node> m_node;
-  Ipv4EndPointDemux *m_endPoints;
-  Ipv6EndPointDemux *m_endPoints6;
-  UdpL4Protocol (const UdpL4Protocol &o);
-  UdpL4Protocol &operator = (const UdpL4Protocol &o);
-  std::vector<Ptr<UdpSocketImpl> > m_sockets;
-  IpL4Protocol::DownTargetCallback m_downTarget;
-  IpL4Protocol::DownTargetCallback6 m_downTarget6;
+  Ptr<Node> m_node; //!< the node this stack is associated with
+  Ipv4EndPointDemux *m_endPoints; //!< A list of IPv4 end points.
+  Ipv6EndPointDemux *m_endPoints6; //!< A list of IPv6 end points.
+
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and not implemented to avoid misuse
+   */
+  UdpL4Protocol (const UdpL4Protocol &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and not implemented to avoid misuse
+   * \returns
+   */
+  UdpL4Protocol &operator = (const UdpL4Protocol &);
+
+  std::vector<Ptr<UdpSocketImpl> > m_sockets;      //!< list of sockets
+  IpL4Protocol::DownTargetCallback m_downTarget;   //!< Callback to send packets over IPv4
+  IpL4Protocol::DownTargetCallback6 m_downTarget6; //!< Callback to send packets over IPv6
+
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/udp-socket.cc ns-3.19/src/internet/model/udp-socket.cc
--- ns-3.18.1/src/internet/model/udp-socket.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/udp-socket.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (UdpSocket);
+NS_OBJECT_ENSURE_REGISTERED (UdpSocket)
+  ;
 
 TypeId
 UdpSocket::GetTypeId (void)
diff -Naur ns-3.18.1/src/internet/model/udp-socket-factory.cc ns-3.19/src/internet/model/udp-socket-factory.cc
--- ns-3.18.1/src/internet/model/udp-socket-factory.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/udp-socket-factory.cc	2013-12-20 09:44:50.000000000 -0800
@@ -22,7 +22,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (UdpSocketFactory);
+NS_OBJECT_ENSURE_REGISTERED (UdpSocketFactory)
+  ;
 
 TypeId UdpSocketFactory::GetTypeId (void)
 {
diff -Naur ns-3.18.1/src/internet/model/udp-socket-factory.h ns-3.19/src/internet/model/udp-socket-factory.h
--- ns-3.18.1/src/internet/model/udp-socket-factory.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/udp-socket-factory.h	2013-12-20 09:44:50.000000000 -0800
@@ -40,6 +40,10 @@
 class UdpSocketFactory : public SocketFactory
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
 };
diff -Naur ns-3.18.1/src/internet/model/udp-socket-factory-impl.h ns-3.19/src/internet/model/udp-socket-factory-impl.h
--- ns-3.18.1/src/internet/model/udp-socket-factory-impl.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/udp-socket-factory-impl.h	2013-12-20 09:44:50.000000000 -0800
@@ -57,6 +57,10 @@
   UdpSocketFactoryImpl ();
   virtual ~UdpSocketFactoryImpl ();
 
+  /**
+   * \brief Set the associated UDP L4 protocol.
+   * \param udp the UDP L4 protocol
+   */
   void SetUdp (Ptr<UdpL4Protocol> udp);
 
   /**
@@ -71,7 +75,7 @@
 protected:
   virtual void DoDispose (void);
 private:
-  Ptr<UdpL4Protocol> m_udp;
+  Ptr<UdpL4Protocol> m_udp; //!< the associated UDP L4 protocol
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/model/udp-socket.h ns-3.19/src/internet/model/udp-socket.h
--- ns-3.18.1/src/internet/model/udp-socket.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/udp-socket.h	2013-12-20 09:44:50.000000000 -0800
@@ -46,6 +46,11 @@
 class UdpSocket : public Socket
 {
 public:
+  /**
+   * Get the type ID.
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
  
   UdpSocket (void);
@@ -99,15 +104,67 @@
 
 private:
   // Indirect the attribute setting and getting through private virtual methods
+  /**
+   * \brief Set the receiving buffer size
+   * \param size the buffer size
+   */
   virtual void SetRcvBufSize (uint32_t size) = 0;
+  /**
+   * \brief Get the receiving buffer size
+   * \returns the buffer size
+   */
   virtual uint32_t GetRcvBufSize (void) const = 0;
+  /**
+   * \brief Set the IP multicast TTL
+   * \param ipTtl the IP multicast TTL
+   */
   virtual void SetIpMulticastTtl (uint8_t ipTtl) = 0;
+  /**
+   * \brief Get the IP multicast TTL
+   * \returns the IP multicast TTL
+   */
   virtual uint8_t GetIpMulticastTtl (void) const = 0;
+  /**
+   * \brief Set the IP multicast interface
+   * \param ipIf the IP multicast interface
+   */
   virtual void SetIpMulticastIf (int32_t ipIf) = 0;
+  /**
+   * \brief Get the IP multicast interface
+   * \returns the IP multicast interface
+   */
   virtual int32_t GetIpMulticastIf (void) const = 0;
+  /**
+   * \brief Set the IP multicast loop capability
+   *
+   * This means that the socket will receive the packets
+   * sent by itself on a multicast address.
+   * Equivalent to setsockopt  IP_MULTICAST_LOOP
+   *
+   * \param loop the IP multicast loop capability
+   */
   virtual void SetIpMulticastLoop (bool loop) = 0;
+  /**
+   * \brief Get the IP multicast loop capability
+   *
+   * This means that the socket will receive the packets
+   * sent by itself on a multicast address.
+   * Equivalent to setsockopt  IP_MULTICAST_LOOP
+   *
+   * \returns the IP multicast loop capability
+   */
   virtual bool GetIpMulticastLoop (void) const = 0;
+  /**
+   * \brief Set the MTU discover capability
+   *
+   * \param discover the MTU discover capability
+   */
   virtual void SetMtuDiscover (bool discover) = 0;
+  /**
+   * \brief Get the MTU discover capability
+   *
+   * \returns the MTU discover capability
+   */
   virtual bool GetMtuDiscover (void) const = 0;
 };
 
diff -Naur ns-3.18.1/src/internet/model/udp-socket-impl.cc ns-3.19/src/internet/model/udp-socket-impl.cc
--- ns-3.18.1/src/internet/model/udp-socket-impl.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/udp-socket-impl.cc	2013-12-20 09:44:50.000000000 -0800
@@ -32,6 +32,7 @@
 #include "ns3/udp-socket-factory.h"
 #include "ns3/trace-source-accessor.h"
 #include "ns3/ipv4-packet-info-tag.h"
+#include "ns3/ipv6-packet-info-tag.h"
 #include "udp-socket-impl.h"
 #include "udp-l4-protocol.h"
 #include "ipv4-end-point.h"
@@ -42,9 +43,13 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (UdpSocketImpl);
+NS_OBJECT_ENSURE_REGISTERED (UdpSocketImpl)
+  ;
 
-static const uint32_t MAX_IPV4_UDP_DATAGRAM_SIZE = 65507;
+// The correct maximum UDP message size is 65507, as determined by the following formula:
+// 0xffff - (sizeof(IP Header) + sizeof(UDP Header)) = 65535-(20+8) = 65507
+// \todo MAX_IPV4_UDP_DATAGRAM_SIZE is correct only for IPv4
+static const uint32_t MAX_IPV4_UDP_DATAGRAM_SIZE = 65507; //!< Maximum UDP datagram size
 
 // Add attributes generic to all UdpSockets to base class UdpSocket
 TypeId
@@ -243,6 +248,11 @@
         {
           m_endPoint = m_udp->Allocate (ipv4, port);
         }
+      if (0 == m_endPoint)
+        {
+          m_errno = port ? ERROR_ADDRINUSE : ERROR_ADDRNOTAVAIL;
+          return -1;
+        }
     }
   else if (Inet6SocketAddress::IsMatchingType (address))
     {
@@ -265,6 +275,11 @@
         {
           m_endPoint6 = m_udp->Allocate6 (ipv6, port);
         }
+      if (0 == m_endPoint6)
+        {
+          m_errno = port ? ERROR_ADDRINUSE : ERROR_ADDRNOTAVAIL;
+          return -1;
+        }
     }
   else
     {
@@ -735,9 +750,9 @@
 }
 
 
-//  maximum message size for UDP broadcast is limited by MTU
+// maximum message size for UDP broadcast is limited by MTU
 // size of underlying link; we are not checking that now.
-/// \todo Check MTU size of underlying link
+// \todo Check MTU size of underlying link
 uint32_t
 UdpSocketImpl::GetTxAvailable (void) const
 {
@@ -951,7 +966,7 @@
 }
 
 void 
-UdpSocketImpl::ForwardUp6 (Ptr<Packet> packet, Ipv6Header header, uint16_t port)
+UdpSocketImpl::ForwardUp6 (Ptr<Packet> packet, Ipv6Header header, uint16_t port, Ptr<Ipv6Interface> incomingInterface)
 {
   NS_LOG_FUNCTION (this << packet << header.GetSourceAddress () << port);
 
@@ -960,6 +975,14 @@
       return;
     }
 
+  // Should check via getsockopt ()..
+  if (IsRecvPktInfo ())
+    {
+      Ipv6PacketInfoTag tag;
+      packet->RemovePacketTag (tag);
+      tag.SetRecvIf (incomingInterface->GetDevice ()->GetIfIndex ());
+      packet->AddPacketTag (tag);
+    }
 
   //Check only version 6 options
   if (IsIpv6RecvTclass ())
diff -Naur ns-3.18.1/src/internet/model/udp-socket-impl.h ns-3.19/src/internet/model/udp-socket-impl.h
--- ns-3.18.1/src/internet/model/udp-socket-impl.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/model/udp-socket-impl.h	2013-12-20 09:44:50.000000000 -0800
@@ -50,6 +50,10 @@
 class UdpSocketImpl : public UdpSocket
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   /**
    * Create an unbound udp socket.
@@ -57,7 +61,15 @@
   UdpSocketImpl ();
   virtual ~UdpSocketImpl ();
 
+  /**
+   * \brief Set the associated node.
+   * \param node the node
+   */
   void SetNode (Ptr<Node> node);
+  /**
+   * \brief Set the associated UDP L4 protocol.
+   * \param udp the UDP L4 protocol
+   */
   void SetUdp (Ptr<UdpL4Protocol> udp);
 
   virtual enum SocketErrno GetErrno (void) const;
@@ -101,48 +113,128 @@
 
   friend class UdpSocketFactory;
   // invoked by Udp class
+
+  /**
+   * Finish the binding process
+   * \returns 0 on success, -1 on failure
+   */
   int FinishBind (void);
-  void ForwardUp (Ptr<Packet> p, Ipv4Header header, uint16_t port, 
-                  Ptr<Ipv4Interface> incomingInterface);
-  void ForwardUp6 (Ptr<Packet> p, Ipv6Header header, uint16_t port);
+
+  /**
+   * \brief Called by the L3 protocol when it received a packet to pass on to TCP.
+   *
+   * \param packet the incoming packet
+   * \param header the packet's IPv4 header
+   * \param port the incoming port
+   * \param incomingInterface the incoming interface
+   */
+  void ForwardUp (Ptr<Packet> packet, Ipv4Header header, uint16_t port, Ptr<Ipv4Interface> incomingInterface);
+
+  /**
+   * \brief Called by the L3 protocol when it received a packet to pass on to TCP.
+   *
+   * \param packet the incoming packet
+   * \param header the packet's IPv6 header
+   * \param port the incoming port
+   * \param incomingInterface the incoming interface
+   */
+  void ForwardUp6 (Ptr<Packet> packet, Ipv6Header header, uint16_t port, Ptr<Ipv6Interface> incomingInterface);
+
+  /**
+   * \brief Kill this socket by zeroing its attributes (IPv4)
+   *
+   * This is a callback function configured to m_endpoint in
+   * SetupCallback(), invoked when the endpoint is destroyed.
+   */
   void Destroy (void);
+
+  /**
+   * \brief Kill this socket by zeroing its attributes (IPv6)
+   *
+   * This is a callback function configured to m_endpoint in
+   * SetupCallback(), invoked when the endpoint is destroyed.
+   */
   void Destroy6 (void);
+
+  /**
+   * \brief Send a packet
+   * \param p packet
+   * \returns 0 on success, -1 on failure
+   */
   int DoSend (Ptr<Packet> p);
+  /**
+   * \brief Send a packet to a specific destination
+   * \param p packet
+   * \param daddr destination address
+   * \returns 0 on success, -1 on failure
+   */
   int DoSendTo (Ptr<Packet> p, const Address &daddr);
+  /**
+   * \brief Send a packet to a specific destination and port (IPv4)
+   * \param p packet
+   * \param daddr destination address
+   * \param dport destination port
+   * \returns 0 on success, -1 on failure
+   */
   int DoSendTo (Ptr<Packet> p, Ipv4Address daddr, uint16_t dport);
+  /**
+   * \brief Send a packet to a specific destination and port (IPv6)
+   * \param p packet
+   * \param daddr destination address
+   * \param dport destination port
+   * \returns 0 on success, -1 on failure
+   */
   int DoSendTo (Ptr<Packet> p, Ipv6Address daddr, uint16_t dport);
-  void ForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl, 
-                    uint8_t icmpType, uint8_t icmpCode,
-                    uint32_t icmpInfo);
-  void ForwardIcmp6 (Ipv6Address icmpSource, uint8_t icmpTtl, 
-                     uint8_t icmpType, uint8_t icmpCode,
-                     uint32_t icmpInfo);
-
-  Ipv4EndPoint *m_endPoint;
-  Ipv6EndPoint *m_endPoint6;
-  Ptr<Node> m_node;
-  Ptr<UdpL4Protocol> m_udp;
-  Address m_defaultAddress;
-  uint16_t m_defaultPort;
-  TracedCallback<Ptr<const Packet> > m_dropTrace;
-
-  enum SocketErrno m_errno;
-  bool m_shutdownSend;
-  bool m_shutdownRecv;
-  bool m_connected;
-  bool m_allowBroadcast;
 
-  std::queue<Ptr<Packet> > m_deliveryQueue;
-  uint32_t m_rxAvailable;
+  /**
+   * \brief Called by the L3 protocol when it received an ICMP packet to pass on to TCP.
+   *
+   * \param icmpSource the ICMP source address
+   * \param icmpTtl the ICMP Time to Live
+   * \param icmpType the ICMP Type
+   * \param icmpCode the ICMP Code
+   * \param icmpInfo the ICMP Info
+   */
+  void ForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo);
+
+  /**
+   * \brief Called by the L3 protocol when it received an ICMPv6 packet to pass on to TCP.
+   *
+   * \param icmpSource the ICMP source address
+   * \param icmpTtl the ICMP Time to Live
+   * \param icmpType the ICMP Type
+   * \param icmpCode the ICMP Code
+   * \param icmpInfo the ICMP Info
+   */
+  void ForwardIcmp6 (Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo);
+
+  // Connections to other layers of TCP/IP
+  Ipv4EndPoint*       m_endPoint;   //!< the IPv4 endpoint
+  Ipv6EndPoint*       m_endPoint6;  //!< the IPv6 endpoint
+  Ptr<Node>           m_node;       //!< the associated node
+  Ptr<UdpL4Protocol> m_udp;         //!< the associated UDP L4 protocol
+  Callback<void, Ipv4Address,uint8_t,uint8_t,uint8_t,uint32_t> m_icmpCallback;  //!< ICMP callback
+  Callback<void, Ipv6Address,uint8_t,uint8_t,uint8_t,uint32_t> m_icmpCallback6; //!< ICMPv6 callback
+
+  Address m_defaultAddress; //!< Default address
+  uint16_t m_defaultPort;   //!< Default port
+  TracedCallback<Ptr<const Packet> > m_dropTrace; //!< Trace for dropped packets
+
+  enum SocketErrno         m_errno;           //!< Socket error code
+  bool                     m_shutdownSend;    //!< Send no longer allowed
+  bool                     m_shutdownRecv;    //!< Receive no longer allowed
+  bool                     m_connected;       //!< Connection established
+  bool                     m_allowBroadcast;  //!< Allow send broadcast packets
+
+  std::queue<Ptr<Packet> > m_deliveryQueue; //!< Queue for incoming packets
+  uint32_t m_rxAvailable;                   //!< Number of available bytes to be received
 
   // Socket attributes
-  uint32_t m_rcvBufSize;
-  uint8_t m_ipMulticastTtl;
-  int32_t m_ipMulticastIf;
-  bool m_ipMulticastLoop;
-  bool m_mtuDiscover;
-  Callback<void, Ipv4Address,uint8_t,uint8_t,uint8_t,uint32_t> m_icmpCallback;
-  Callback<void, Ipv6Address,uint8_t,uint8_t,uint8_t,uint32_t> m_icmpCallback6;
+  uint32_t m_rcvBufSize;    //!< Receive buffer size
+  uint8_t m_ipMulticastTtl; //!< Multicast TTL
+  int32_t m_ipMulticastIf;  //!< Multicast Interface
+  bool m_ipMulticastLoop;   //!< Allow multicast loop
+  bool m_mtuDiscover;       //!< Allow MTU discovery
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/internet/test/error-channel.cc ns-3.19/src/internet/test/error-channel.cc
--- ns-3.18.1/src/internet/test/error-channel.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/test/error-channel.cc	2013-12-20 09:44:50.000000000 -0800
@@ -18,7 +18,7 @@
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
 #include "error-channel.h"
-#include "error-net-device.h"
+#include "ns3/simple-net-device.h"
 #include "ns3/simulator.h"
 #include "ns3/packet.h"
 #include "ns3/node.h"
@@ -28,7 +28,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ErrorChannel);
+NS_OBJECT_ENSURE_REGISTERED (ErrorChannel)
+  ;
 
 TypeId 
 ErrorChannel::GetTypeId (void)
@@ -62,12 +63,12 @@
 void
 ErrorChannel::Send (Ptr<Packet> p, uint16_t protocol,
                     Mac48Address to, Mac48Address from,
-                    Ptr<ErrorNetDevice> sender)
+                    Ptr<SimpleNetDevice> sender)
 {
   NS_LOG_FUNCTION (p << protocol << to << from << sender);
-  for (std::vector<Ptr<ErrorNetDevice> >::const_iterator i = m_devices.begin (); i != m_devices.end (); ++i)
+  for (std::vector<Ptr<SimpleNetDevice> >::const_iterator i = m_devices.begin (); i != m_devices.end (); ++i)
     {
-      Ptr<ErrorNetDevice> tmp = *i;
+      Ptr<SimpleNetDevice> tmp = *i;
       if (tmp == sender)
         {
           continue;
@@ -75,20 +76,20 @@
       if( !jumping || jumpingState%2 )
         {
           Simulator::ScheduleWithContext (tmp->GetNode ()->GetId (), Seconds (0),
-                                      &ErrorNetDevice::Receive, tmp, p->Copy (), protocol, to, from);
+                                      &SimpleNetDevice::Receive, tmp, p->Copy (), protocol, to, from);
           jumpingState++;
         }
       else
         {
           Simulator::ScheduleWithContext (tmp->GetNode ()->GetId (), jumpingTime,
-                                      &ErrorNetDevice::Receive, tmp, p->Copy (), protocol, to, from);
+                                      &SimpleNetDevice::Receive, tmp, p->Copy (), protocol, to, from);
           jumpingState++;
         }
     }
 }
 
 void 
-ErrorChannel::Add (Ptr<ErrorNetDevice> device)
+ErrorChannel::Add (Ptr<SimpleNetDevice> device)
 {
   m_devices.push_back (device);
 }
@@ -104,7 +105,8 @@
   return m_devices[i];
 }
 
-NS_OBJECT_ENSURE_REGISTERED (ErrorModel);
+NS_OBJECT_ENSURE_REGISTERED (BinaryErrorModel)
+  ;
 
 TypeId BinaryErrorModel::GetTypeId (void)
 {
diff -Naur ns-3.18.1/src/internet/test/error-channel.h ns-3.19/src/internet/test/error-channel.h
--- ns-3.18.1/src/internet/test/error-channel.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/test/error-channel.h	2013-12-20 09:44:50.000000000 -0800
@@ -20,7 +20,7 @@
 #ifndef ERROR_CHANNEL_H
 #define ERROR_CHANNEL_H
 
-#include "ns3/channel.h"
+#include "ns3/simple-channel.h"
 #include "ns3/error-model.h"
 #include "ns3/mac48-address.h"
 #include "ns3/nstime.h"
@@ -28,23 +28,23 @@
 
 namespace ns3 {
 
-class ErrorNetDevice;
+class SimpleNetDevice;
 class Packet;
 
 /**
  * \ingroup channel
  * \brief A Error channel, introducing deterministic delays on even/odd packets. Used for testing
  */
-class ErrorChannel : public Channel
+class ErrorChannel : public SimpleChannel
 {
 public:
   static TypeId GetTypeId (void);
   ErrorChannel ();
 
-  void Send (Ptr<Packet> p, uint16_t protocol, Mac48Address to, Mac48Address from,
-	     Ptr<ErrorNetDevice> sender);
+  virtual void Send (Ptr<Packet> p, uint16_t protocol, Mac48Address to, Mac48Address from,
+                     Ptr<SimpleNetDevice> sender);
 
-  void Add (Ptr<ErrorNetDevice> device);
+  virtual void Add (Ptr<SimpleNetDevice> device);
 
   // inherited from ns3::Channel
   virtual uint32_t GetNDevices (void) const;
@@ -63,7 +63,7 @@
 void SetJumpingMode(bool mode);
 
 private:
-  std::vector<Ptr<ErrorNetDevice> > m_devices;
+  std::vector<Ptr<SimpleNetDevice> > m_devices;
   Time jumpingTime;
   uint8_t jumpingState;
   bool jumping;
diff -Naur ns-3.18.1/src/internet/test/error-net-device.cc ns-3.19/src/internet/test/error-net-device.cc
--- ns-3.18.1/src/internet/test/error-net-device.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/test/error-net-device.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,255 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2011 Universita' di Firenze, Italy
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
- */
-#include "error-net-device.h"
-#include "error-channel.h"
-#include "ns3/node.h"
-#include "ns3/packet.h"
-#include "ns3/log.h"
-#include "ns3/pointer.h"
-#include "ns3/error-model.h"
-#include "ns3/trace-source-accessor.h"
-
-NS_LOG_COMPONENT_DEFINE ("ErrorNetDevice");
-
-namespace ns3 {
-
-NS_OBJECT_ENSURE_REGISTERED (ErrorNetDevice);
-
-TypeId 
-ErrorNetDevice::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("ns3::ErrorNetDevice")
-    .SetParent<NetDevice> ()
-    .AddConstructor<ErrorNetDevice> ()
-    .AddAttribute ("ReceiveErrorModel",
-                   "The receiver error model used to simulate packet loss",
-                   PointerValue (),
-                   MakePointerAccessor (&ErrorNetDevice::m_receiveErrorModel),
-                   MakePointerChecker<ErrorModel> ())
-    .AddTraceSource ("PhyRxDrop",
-                     "Trace source indicating a packet has been dropped by the device during reception",
-                     MakeTraceSourceAccessor (&ErrorNetDevice::m_phyRxDropTrace))
-    ;
-  return tid;
-}
-
-ErrorNetDevice::ErrorNetDevice ()
-  : m_channel (0),
-    m_node (0),
-    m_mtu (0xffff),
-    m_ifIndex (0)
-{}
-
-void 
-ErrorNetDevice::Receive (Ptr<Packet> packet, uint16_t protocol,
-			  Mac48Address to, Mac48Address from)
-{
-  NS_LOG_FUNCTION (packet << protocol << to << from << *packet);
-  NetDevice::PacketType packetType;
-
-  if (m_receiveErrorModel && m_receiveErrorModel->IsCorrupt (packet) )
-    {
-      m_phyRxDropTrace (packet);
-      return;
-    }
-
-  if (to == m_address)
-    {
-      packetType = NetDevice::PACKET_HOST;
-    }
-  else if (to.IsBroadcast ())
-    {
-      packetType = NetDevice::PACKET_HOST;
-    }
-  else if (to.IsGroup ())
-    {
-      packetType = NetDevice::PACKET_MULTICAST;
-    }
-  else 
-    {
-      packetType = NetDevice::PACKET_OTHERHOST;
-    }
-  m_rxCallback (this, packet, protocol, from);
-  if (!m_promiscCallback.IsNull ())
-    {
-      m_promiscCallback (this, packet, protocol, from, to, packetType);
-    }
-}
-
-void 
-ErrorNetDevice::SetChannel (Ptr<ErrorChannel> channel)
-{
-  m_channel = channel;
-  m_channel->Add (this);
-}
-
-void
-ErrorNetDevice::SetReceiveErrorModel (Ptr<ErrorModel> em)
-{
-  m_receiveErrorModel = em;
-}
-
-void 
-ErrorNetDevice::SetIfIndex(const uint32_t index)
-{
-  m_ifIndex = index;
-}
-uint32_t 
-ErrorNetDevice::GetIfIndex(void) const
-{
-  return m_ifIndex;
-}
-Ptr<Channel> 
-ErrorNetDevice::GetChannel (void) const
-{
-  return m_channel;
-}
-void
-ErrorNetDevice::SetAddress (Address address)
-{
-  m_address = Mac48Address::ConvertFrom(address);
-}
-Address 
-ErrorNetDevice::GetAddress (void) const
-{
-  //
-  // Implicit conversion from Mac48Address to Address
-  //
-  return m_address;
-}
-bool 
-ErrorNetDevice::SetMtu (const uint16_t mtu)
-{
-  m_mtu = mtu;
-  return true;
-}
-uint16_t 
-ErrorNetDevice::GetMtu (void) const
-{
-  return m_mtu;
-}
-bool 
-ErrorNetDevice::IsLinkUp (void) const
-{
-  return true;
-}
-void 
-ErrorNetDevice::AddLinkChangeCallback (Callback<void> callback)
-{}
-bool 
-ErrorNetDevice::IsBroadcast (void) const
-{
-  return true;
-}
-Address
-ErrorNetDevice::GetBroadcast (void) const
-{
-  return Mac48Address ("ff:ff:ff:ff:ff:ff");
-}
-bool 
-ErrorNetDevice::IsMulticast (void) const
-{
-  return false;
-}
-Address 
-ErrorNetDevice::GetMulticast (Ipv4Address multicastGroup) const
-{
-  return Mac48Address::GetMulticast (multicastGroup);
-}
-
-Address ErrorNetDevice::GetMulticast (Ipv6Address addr) const
-{
-  return Mac48Address::GetMulticast (addr);
-}
-
-bool 
-ErrorNetDevice::IsPointToPoint (void) const
-{
-  return false;
-}
-
-bool 
-ErrorNetDevice::IsBridge (void) const
-{
-  return false;
-}
-
-bool 
-ErrorNetDevice::Send(Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber)
-{
-  NS_LOG_FUNCTION (packet << dest << protocolNumber << *packet);
-  Mac48Address to = Mac48Address::ConvertFrom (dest);
-  m_channel->Send (packet, protocolNumber, to, m_address, this);
-  return true;
-}
-bool 
-ErrorNetDevice::SendFrom(Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber)
-{
-  NS_LOG_FUNCTION (packet << source << dest << protocolNumber << *packet);
-  Mac48Address to = Mac48Address::ConvertFrom (dest);
-  Mac48Address from = Mac48Address::ConvertFrom (source);
-  m_channel->Send (packet, protocolNumber, to, from, this);
-  return true;
-}
-
-Ptr<Node> 
-ErrorNetDevice::GetNode (void) const
-{
-  return m_node;
-}
-void 
-ErrorNetDevice::SetNode (Ptr<Node> node)
-{
-  m_node = node;
-}
-bool 
-ErrorNetDevice::NeedsArp (void) const
-{
-  return false;
-}
-void 
-ErrorNetDevice::SetReceiveCallback (NetDevice::ReceiveCallback cb)
-{
-  m_rxCallback = cb;
-}
-
-void
-ErrorNetDevice::DoDispose (void)
-{
-  m_channel = 0;
-  m_node = 0;
-  m_receiveErrorModel = 0;
-  NetDevice::DoDispose ();
-}
-
-
-void
-ErrorNetDevice::SetPromiscReceiveCallback (PromiscReceiveCallback cb)
-{
-  m_promiscCallback = cb;
-}
-
-bool
-ErrorNetDevice::SupportsSendFrom (void) const
-{
-  return true;
-}
-
-} // namespace ns3
diff -Naur ns-3.18.1/src/internet/test/error-net-device.h ns-3.19/src/internet/test/error-net-device.h
--- ns-3.18.1/src/internet/test/error-net-device.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/test/error-net-device.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,117 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2011 Universita' di Firenze, Italy
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
- */
-#ifndef ERROR_NET_DEVICE_H
-#define ERROR_NET_DEVICE_H
-
-#include "ns3/net-device.h"
-#include "ns3/mac48-address.h"
-#include <stdint.h>
-#include <string>
-#include "ns3/traced-callback.h"
-
-namespace ns3 {
-
-class ErrorChannel;
-class Node;
-class ErrorModel;
-
-/**
- * \ingroup netdevice
- *
- * This device does not have a helper and assumes 48-bit mac addressing;
- * the default address assigned to each device is zero, so you must 
- * assign a real address to use it.  There is also the possibility to
- * add an ErrorModel if you want to force losses on the device.
- * 
- * \brief Error net device for Error things and testing
- */
-class ErrorNetDevice : public NetDevice
-{
-public:
-  static TypeId GetTypeId (void);
-  ErrorNetDevice ();
-
-  void Receive (Ptr<Packet> packet, uint16_t protocol, Mac48Address to, Mac48Address from);
-  void SetChannel (Ptr<ErrorChannel> channel);
-
-  /**
-   * Attach a receive ErrorModel to the ErrorNetDevice.
-   *
-   * The ErrorNetDevice may optionally include an ErrorModel in
-   * the packet receive chain.
-   *
-   * \see ErrorModel
-   * \param em Ptr to the ErrorModel.
-   */
-  void SetReceiveErrorModel(Ptr<ErrorModel> em);
-
-  // 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 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 Address GetMulticast (Ipv6Address addr) const;
-
-  virtual void SetPromiscReceiveCallback (PromiscReceiveCallback cb);
-  virtual bool SupportsSendFrom (void) const;
-
-protected:
-  virtual void DoDispose (void);
-private:
-  Ptr<ErrorChannel> m_channel;
-  NetDevice::ReceiveCallback m_rxCallback;
-  NetDevice::PromiscReceiveCallback m_promiscCallback;
-  Ptr<Node> m_node;
-  uint16_t m_mtu;
-  uint32_t m_ifIndex;
-  Mac48Address m_address;
-  Ptr<ErrorModel> m_receiveErrorModel;
-  /**
-   * The trace source fired when the phy layer drops a packet it has received
-   * due to the error model being active.  Although ErrorNetDevice doesn't
-   * really have a Phy model, we choose this trace source name for alignment
-   * with other trace sources.
-   *
-   * \see class CallBackTraceSource
-   */
-  TracedCallback<Ptr<const Packet> > m_phyRxDropTrace;
-};
-
-} // namespace ns3
-
-#endif /* Error_NET_DEVICE_H */
diff -Naur ns-3.18.1/src/internet/test/ipv4-fragmentation-test.cc ns-3.19/src/internet/test/ipv4-fragmentation-test.cc
--- ns-3.18.1/src/internet/test/ipv4-fragmentation-test.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/test/ipv4-fragmentation-test.cc	2013-12-20 09:44:50.000000000 -0800
@@ -29,7 +29,7 @@
 #include "ns3/udp-socket-factory.h"
 #include "ns3/simulator.h"
 #include "error-channel.h"
-#include "error-net-device.h"
+#include "ns3/simple-net-device.h"
 #include "ns3/drop-tail-queue.h"
 #include "ns3/socket.h"
 #include "ns3/udp-socket.h"
@@ -264,10 +264,10 @@
   // Receiver Node
   Ptr<Node> serverNode = CreateObject<Node> ();
   AddInternetStack (serverNode);
-  Ptr<ErrorNetDevice> serverDev;
+  Ptr<SimpleNetDevice> serverDev;
   Ptr<BinaryErrorModel> serverDevErrorModel = CreateObject<BinaryErrorModel> ();
   {
-    serverDev = CreateObject<ErrorNetDevice> ();
+    serverDev = CreateObject<SimpleNetDevice> ();
     serverDev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
     serverDev->SetMtu(1500);
     serverDev->SetReceiveErrorModel(serverDevErrorModel);
@@ -284,10 +284,10 @@
   // Sender Node
   Ptr<Node> clientNode = CreateObject<Node> ();
   AddInternetStack (clientNode);
-  Ptr<ErrorNetDevice> clientDev;
+  Ptr<SimpleNetDevice> clientDev;
   Ptr<BinaryErrorModel> clientDevErrorModel = CreateObject<BinaryErrorModel> ();
   {
-    clientDev = CreateObject<ErrorNetDevice> ();
+    clientDev = CreateObject<SimpleNetDevice> ();
     clientDev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
     clientDev->SetMtu(1000);
     clientDev->SetReceiveErrorModel(clientDevErrorModel);
diff -Naur ns-3.18.1/src/internet/test/ipv6-fragmentation-test.cc ns-3.19/src/internet/test/ipv6-fragmentation-test.cc
--- ns-3.18.1/src/internet/test/ipv6-fragmentation-test.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/test/ipv6-fragmentation-test.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,7 @@
 #include "ns3/udp-socket-factory.h"
 #include "ns3/simulator.h"
 #include "error-channel.h"
-#include "error-net-device.h"
+#include "ns3/simple-net-device.h"
 #include "ns3/drop-tail-queue.h"
 #include "ns3/socket.h"
 #include "ns3/udp-socket.h"
@@ -270,10 +270,10 @@
   // Receiver Node
   Ptr<Node> serverNode = CreateObject<Node> ();
   AddInternetStack (serverNode);
-  Ptr<ErrorNetDevice> serverDev;
+  Ptr<SimpleNetDevice> serverDev;
   Ptr<BinaryErrorModel> serverDevErrorModel = CreateObject<BinaryErrorModel> ();
   {
-    serverDev = CreateObject<ErrorNetDevice> ();
+    serverDev = CreateObject<SimpleNetDevice> ();
     serverDev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
     serverDev->SetMtu (1500);
     serverDev->SetReceiveErrorModel (serverDevErrorModel);
@@ -290,12 +290,12 @@
   // Sender Node
   Ptr<Node> clientNode = CreateObject<Node> ();
   AddInternetStack (clientNode);
-  Ptr<ErrorNetDevice> clientDev;
+  Ptr<SimpleNetDevice> clientDev;
   Ptr<BinaryErrorModel> clientDevErrorModel = CreateObject<BinaryErrorModel> ();
   {
-    clientDev = CreateObject<ErrorNetDevice> ();
+    clientDev = CreateObject<SimpleNetDevice> ();
     clientDev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
-    clientDev->SetMtu (1000);
+    clientDev->SetMtu (1500);
     clientDev->SetReceiveErrorModel (clientDevErrorModel);
     clientDevErrorModel->Disable ();
     clientNode->AddDevice (clientDev);
@@ -315,7 +315,7 @@
 
 
   // some small packets, some rather big ones
-  uint32_t packetSizes[5] = {1000, 2000, 5000, 10000, 65000};
+  uint32_t packetSizes[5] = {2000, 2500, 5000, 10000, 65000};
 
   // using the alphabet
   uint8_t fillData[78];
diff -Naur ns-3.18.1/src/internet/wscript ns-3.19/src/internet/wscript
--- ns-3.18.1/src/internet/wscript	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/internet/wscript	2013-12-20 09:44:50.000000000 -0800
@@ -206,7 +206,6 @@
         'test/ipv4-fragmentation-test.cc',
         'test/ipv4-forwarding-test.cc',
         'test/error-channel.cc',
-        'test/error-net-device.cc',
         'test/ipv4-test.cc',
         'test/ipv6-extension-header-test-suite.cc',
         'test/ipv6-list-routing-test-suite.cc',
diff -Naur ns-3.18.1/src/lte/bindings/modulegen__gcc_ILP32.py ns-3.19/src/lte/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/lte/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -354,6 +354,10 @@
     module.add_enum('Direction_e', ['DIR_UL', 'DIR_DL', 'DIR_BOTH'], outer_class=root_module['ns3::LogicalChannelConfigListElement_s'])
     ## ff-mac-common.h (module 'lte'): ns3::LogicalChannelConfigListElement_s::QosBearerType_e [enumeration]
     module.add_enum('QosBearerType_e', ['QBT_NON_GBR', 'QBT_GBR'], outer_class=root_module['ns3::LogicalChannelConfigListElement_s'])
+    ## lte-anr-sap.h (module 'lte'): ns3::LteAnrSapProvider [class]
+    module.add_class('LteAnrSapProvider', allow_subclassing=True)
+    ## lte-anr-sap.h (module 'lte'): ns3::LteAnrSapUser [class]
+    module.add_class('LteAnrSapUser', allow_subclassing=True)
     ## lte-as-sap.h (module 'lte'): ns3::LteAsSapProvider [class]
     module.add_class('LteAsSapProvider', allow_subclassing=True)
     ## lte-as-sap.h (module 'lte'): ns3::LteAsSapUser [class]
@@ -386,6 +390,10 @@
     module.add_class('LteFlowId_t')
     ## lte-global-pathloss-database.h (module 'lte'): ns3::LteGlobalPathlossDatabase [class]
     module.add_class('LteGlobalPathlossDatabase', allow_subclassing=True)
+    ## lte-handover-management-sap.h (module 'lte'): ns3::LteHandoverManagementSapProvider [class]
+    module.add_class('LteHandoverManagementSapProvider', allow_subclassing=True)
+    ## lte-handover-management-sap.h (module 'lte'): ns3::LteHandoverManagementSapUser [class]
+    module.add_class('LteHandoverManagementSapUser', allow_subclassing=True)
     ## lte-mac-sap.h (module 'lte'): ns3::LteMacSapProvider [class]
     module.add_class('LteMacSapProvider', allow_subclassing=True)
     ## lte-mac-sap.h (module 'lte'): ns3::LteMacSapProvider::ReportBufferStatusParameters [struct]
@@ -426,6 +434,8 @@
     module.add_class('CarrierFreqEutra', outer_class=root_module['ns3::LteRrcSap'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::CellAccessRelatedInfo [struct]
     module.add_class('CellAccessRelatedInfo', outer_class=root_module['ns3::LteRrcSap'])
+    ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::CellSelectionInfo [struct]
+    module.add_class('CellSelectionInfo', outer_class=root_module['ns3::LteRrcSap'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::CellsToAddMod [struct]
     module.add_class('CellsToAddMod', outer_class=root_module['ns3::LteRrcSap'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::CgiInfo [struct]
@@ -891,7 +901,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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-fading-loss-model.h (module 'lte'): ns3::TraceFadingLossModel [class]
@@ -906,8 +916,6 @@
     module.add_class('UeManager', parent=root_module['ns3::Object'])
     ## lte-enb-rrc.h (module 'lte'): ns3::UeManager::State [enumeration]
     module.add_enum('State', ['INITIAL_RANDOM_ACCESS', 'CONNECTION_SETUP', 'CONNECTION_REJECTED', 'CONNECTED_NORMALLY', 'CONNECTION_RECONFIGURATION', 'CONNECTION_REESTABLISHMENT', 'HANDOVER_PREPARATION', 'HANDOVER_JOINING', 'HANDOVER_PATH_SWITCH', 'HANDOVER_LEAVING', 'NUM_STATES'], outer_class=root_module['ns3::UeManager'])
-    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure [class]
-    module.add_class('UeMeasure', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::UniformRandomVariable [class]
     module.add_class('UniformRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## ff-mac-common.h (module 'lte'): ns3::VendorSpecificValue [struct]
@@ -1060,10 +1068,12 @@
     module.add_class('LteAmc', parent=root_module['ns3::Object'])
     ## lte-amc.h (module 'lte'): ns3::LteAmc::AmcModel [enumeration]
     module.add_enum('AmcModel', ['PiroEW2010', 'MiErrorModel'], outer_class=root_module['ns3::LteAmc'])
+    ## lte-anr.h (module 'lte'): ns3::LteAnr [class]
+    module.add_class('LteAnr', parent=root_module['ns3::Object'])
     ## lte-control-messages.h (module 'lte'): ns3::LteControlMessage [class]
     module.add_class('LteControlMessage', parent=root_module['ns3::SimpleRefCount< ns3::LteControlMessage, ns3::empty, ns3::DefaultDeleter<ns3::LteControlMessage> >'])
     ## lte-control-messages.h (module 'lte'): ns3::LteControlMessage::MessageType [enumeration]
-    module.add_enum('MessageType', ['DL_DCI', 'UL_DCI', 'DL_CQI', 'UL_CQI', 'BSR', 'DL_HARQ', 'RACH_PREAMBLE', 'RAR', 'MIB'], outer_class=root_module['ns3::LteControlMessage'])
+    module.add_enum('MessageType', ['DL_DCI', 'UL_DCI', 'DL_CQI', 'UL_CQI', 'BSR', 'DL_HARQ', 'RACH_PREAMBLE', 'RAR', 'MIB', 'SIB1'], outer_class=root_module['ns3::LteControlMessage'])
     ## lte-enb-mac.h (module 'lte'): ns3::LteEnbMac [class]
     module.add_class('LteEnbMac', parent=root_module['ns3::Object'])
     ## lte-enb-rrc.h (module 'lte'): ns3::LteEnbRrc [class]
@@ -1074,6 +1084,8 @@
     module.add_class('LteEnbRrcProtocolIdeal', parent=root_module['ns3::Object'])
     ## lte-rrc-protocol-real.h (module 'lte'): ns3::LteEnbRrcProtocolReal [class]
     module.add_class('LteEnbRrcProtocolReal', parent=root_module['ns3::Object'])
+    ## lte-handover-algorithm.h (module 'lte'): ns3::LteHandoverAlgorithm [class]
+    module.add_class('LteHandoverAlgorithm', parent=root_module['ns3::Object'])
     ## lte-harq-phy.h (module 'lte'): ns3::LteHarqPhy [class]
     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]
@@ -1124,10 +1136,12 @@
     module.add_class('LteUeMac', parent=root_module['ns3::Object'])
     ## lte-ue-phy.h (module 'lte'): ns3::LteUePhy [class]
     module.add_class('LteUePhy', parent=root_module['ns3::LtePhy'])
+    ## lte-ue-phy.h (module 'lte'): ns3::LteUePhy::State [enumeration]
+    module.add_enum('State', ['CELL_SEARCH', 'SYNCHRONIZED', 'NUM_STATES'], outer_class=root_module['ns3::LteUePhy'])
     ## lte-ue-rrc.h (module 'lte'): ns3::LteUeRrc [class]
     module.add_class('LteUeRrc', parent=root_module['ns3::Object'])
     ## lte-ue-rrc.h (module 'lte'): ns3::LteUeRrc::State [enumeration]
-    module.add_enum('State', ['IDLE_CELL_SELECTION', 'IDLE_WAIT_SYSTEM_INFO', 'IDLE_CAMPED_NORMALLY', 'IDLE_RANDOM_ACCESS', 'IDLE_CONNECTING', 'CONNECTED_NORMALLY', 'CONNECTED_REESTABLISHING', 'CONNECTED_HANDOVER', 'NUM_STATES'], outer_class=root_module['ns3::LteUeRrc'])
+    module.add_enum('State', ['IDLE_START', 'IDLE_CELL_SEARCH', 'IDLE_WAIT_MIB_SIB1', 'IDLE_WAIT_MIB', 'IDLE_WAIT_SIB1', 'IDLE_CAMPED_NORMALLY', 'IDLE_WAIT_SIB2', 'IDLE_RANDOM_ACCESS', 'IDLE_CONNECTING', 'CONNECTED_NORMALLY', 'CONNECTED_HANDOVER', 'CONNECTED_PHY_PROBLEM', 'CONNECTED_REESTABLISHING', 'NUM_STATES'], outer_class=root_module['ns3::LteUeRrc'])
     ## lte-rrc-protocol-ideal.h (module 'lte'): ns3::LteUeRrcProtocolIdeal [class]
     module.add_class('LteUeRrcProtocolIdeal', parent=root_module['ns3::Object'])
     ## lte-rrc-protocol-real.h (module 'lte'): ns3::LteUeRrcProtocolReal [class]
@@ -1142,14 +1156,14 @@
     module.add_class('MibLteControlMessage', parent=root_module['ns3::LteControlMessage'])
     ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
     module.add_class('MobilityModel', import_from_module='ns.mobility', parent=root_module['ns3::Object'])
-    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation [class]
-    module.add_class('NeighbourRelation', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
     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> >'])
+    ## no-op-handover-algorithm.h (module 'lte'): ns3::NoOpHandoverAlgorithm [class]
+    module.add_class('NoOpHandoverAlgorithm', parent=root_module['ns3::LteHandoverAlgorithm'])
     ## 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]
@@ -1170,6 +1184,8 @@
     module.add_class('PhyStatsCalculator', parent=root_module['ns3::LteStatsCalculator'])
     ## phy-tx-stats-calculator.h (module 'lte'): ns3::PhyTxStatsCalculator [class]
     module.add_class('PhyTxStatsCalculator', parent=root_module['ns3::LteStatsCalculator'])
+    ## point-to-point-epc-helper.h (module 'lte'): ns3::PointToPointEpcHelper [class]
+    module.add_class('PointToPointEpcHelper', parent=root_module['ns3::EpcHelper'])
     ## 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]
@@ -1198,6 +1214,8 @@
     module.add_class('RrcUlCcchMessage', parent=root_module['ns3::RrcAsn1Header'])
     ## lte-rrc-header.h (module 'lte'): ns3::RrcUlDcchMessage [class]
     module.add_class('RrcUlDcchMessage', parent=root_module['ns3::RrcAsn1Header'])
+    ## lte-control-messages.h (module 'lte'): ns3::Sib1LteControlMessage [class]
+    module.add_class('Sib1LteControlMessage', parent=root_module['ns3::LteControlMessage'])
     ## spectrum-channel.h (module 'spectrum'): ns3::SpectrumChannel [class]
     module.add_class('SpectrumChannel', import_from_module='ns.spectrum', parent=root_module['ns3::Channel'])
     ## lte-vendor-specific-parameters.h (module 'lte'): ns3::SrsCqiRntiVsp [class]
@@ -1234,6 +1252,10 @@
     module.add_class('Vector3DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## virtual-net-device.h (module 'virtual-net-device'): ns3::VirtualNetDevice [class]
     module.add_class('VirtualNetDevice', import_from_module='ns.virtual_net_device', parent=root_module['ns3::NetDevice'])
+    ## a2-a4-rsrq-handover-algorithm.h (module 'lte'): ns3::A2A4RsrqHandoverAlgorithm [class]
+    module.add_class('A2A4RsrqHandoverAlgorithm', parent=root_module['ns3::LteHandoverAlgorithm'])
+    ## a3-rsrp-handover-algorithm.h (module 'lte'): ns3::A3RsrpHandoverAlgorithm [class]
+    module.add_class('A3RsrpHandoverAlgorithm', parent=root_module['ns3::LteHandoverAlgorithm'])
     ## 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]
@@ -1664,6 +1686,8 @@
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
     register_Ns3LogComponent_methods(root_module, root_module['ns3::LogComponent'])
     register_Ns3LogicalChannelConfigListElement_s_methods(root_module, root_module['ns3::LogicalChannelConfigListElement_s'])
+    register_Ns3LteAnrSapProvider_methods(root_module, root_module['ns3::LteAnrSapProvider'])
+    register_Ns3LteAnrSapUser_methods(root_module, root_module['ns3::LteAnrSapUser'])
     register_Ns3LteAsSapProvider_methods(root_module, root_module['ns3::LteAsSapProvider'])
     register_Ns3LteAsSapUser_methods(root_module, root_module['ns3::LteAsSapUser'])
     register_Ns3LteEnbCmacSapProvider_methods(root_module, root_module['ns3::LteEnbCmacSapProvider'])
@@ -1680,6 +1704,8 @@
     register_Ns3LteFfConverter_methods(root_module, root_module['ns3::LteFfConverter'])
     register_Ns3LteFlowId_t_methods(root_module, root_module['ns3::LteFlowId_t'])
     register_Ns3LteGlobalPathlossDatabase_methods(root_module, root_module['ns3::LteGlobalPathlossDatabase'])
+    register_Ns3LteHandoverManagementSapProvider_methods(root_module, root_module['ns3::LteHandoverManagementSapProvider'])
+    register_Ns3LteHandoverManagementSapUser_methods(root_module, root_module['ns3::LteHandoverManagementSapUser'])
     register_Ns3LteMacSapProvider_methods(root_module, root_module['ns3::LteMacSapProvider'])
     register_Ns3LteMacSapProviderReportBufferStatusParameters_methods(root_module, root_module['ns3::LteMacSapProvider::ReportBufferStatusParameters'])
     register_Ns3LteMacSapProviderTransmitPduParameters_methods(root_module, root_module['ns3::LteMacSapProvider::TransmitPduParameters'])
@@ -1699,6 +1725,7 @@
     register_Ns3LteRrcSapCarrierBandwidthEutra_methods(root_module, root_module['ns3::LteRrcSap::CarrierBandwidthEutra'])
     register_Ns3LteRrcSapCarrierFreqEutra_methods(root_module, root_module['ns3::LteRrcSap::CarrierFreqEutra'])
     register_Ns3LteRrcSapCellAccessRelatedInfo_methods(root_module, root_module['ns3::LteRrcSap::CellAccessRelatedInfo'])
+    register_Ns3LteRrcSapCellSelectionInfo_methods(root_module, root_module['ns3::LteRrcSap::CellSelectionInfo'])
     register_Ns3LteRrcSapCellsToAddMod_methods(root_module, root_module['ns3::LteRrcSap::CellsToAddMod'])
     register_Ns3LteRrcSapCgiInfo_methods(root_module, root_module['ns3::LteRrcSap::CgiInfo'])
     register_Ns3LteRrcSapDrbToAddMod_methods(root_module, root_module['ns3::LteRrcSap::DrbToAddMod'])
@@ -1895,7 +1922,6 @@
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
     register_Ns3TriangularRandomVariable_methods(root_module, root_module['ns3::TriangularRandomVariable'])
     register_Ns3UeManager_methods(root_module, root_module['ns3::UeManager'])
-    register_Ns3UeMeasure_methods(root_module, root_module['ns3::UeMeasure'])
     register_Ns3UniformRandomVariable_methods(root_module, root_module['ns3::UniformRandomVariable'])
     register_Ns3VendorSpecificValue_methods(root_module, root_module['ns3::VendorSpecificValue'])
     register_Ns3WeibullRandomVariable_methods(root_module, root_module['ns3::WeibullRandomVariable'])
@@ -1965,11 +1991,13 @@
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
     register_Ns3LteAmc_methods(root_module, root_module['ns3::LteAmc'])
+    register_Ns3LteAnr_methods(root_module, root_module['ns3::LteAnr'])
     register_Ns3LteControlMessage_methods(root_module, root_module['ns3::LteControlMessage'])
     register_Ns3LteEnbMac_methods(root_module, root_module['ns3::LteEnbMac'])
     register_Ns3LteEnbRrc_methods(root_module, root_module['ns3::LteEnbRrc'])
     register_Ns3LteEnbRrcProtocolIdeal_methods(root_module, root_module['ns3::LteEnbRrcProtocolIdeal'])
     register_Ns3LteEnbRrcProtocolReal_methods(root_module, root_module['ns3::LteEnbRrcProtocolReal'])
+    register_Ns3LteHandoverAlgorithm_methods(root_module, root_module['ns3::LteHandoverAlgorithm'])
     register_Ns3LteHarqPhy_methods(root_module, root_module['ns3::LteHarqPhy'])
     register_Ns3LteHelper_methods(root_module, root_module['ns3::LteHelper'])
     register_Ns3LteHexGridEnbTopologyHelper_methods(root_module, root_module['ns3::LteHexGridEnbTopologyHelper'])
@@ -2001,9 +2029,9 @@
     register_Ns3MacStatsCalculator_methods(root_module, root_module['ns3::MacStatsCalculator'])
     register_Ns3MibLteControlMessage_methods(root_module, root_module['ns3::MibLteControlMessage'])
     register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
-    register_Ns3NeighbourRelation_methods(root_module, root_module['ns3::NeighbourRelation'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
+    register_Ns3NoOpHandoverAlgorithm_methods(root_module, root_module['ns3::NoOpHandoverAlgorithm'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
@@ -2014,6 +2042,7 @@
     register_Ns3PhyRxStatsCalculator_methods(root_module, root_module['ns3::PhyRxStatsCalculator'])
     register_Ns3PhyStatsCalculator_methods(root_module, root_module['ns3::PhyStatsCalculator'])
     register_Ns3PhyTxStatsCalculator_methods(root_module, root_module['ns3::PhyTxStatsCalculator'])
+    register_Ns3PointToPointEpcHelper_methods(root_module, root_module['ns3::PointToPointEpcHelper'])
     register_Ns3PointerChecker_methods(root_module, root_module['ns3::PointerChecker'])
     register_Ns3PointerValue_methods(root_module, root_module['ns3::PointerValue'])
     register_Ns3PssFfMacScheduler_methods(root_module, root_module['ns3::PssFfMacScheduler'])
@@ -2028,6 +2057,7 @@
     register_Ns3RrcDlDcchMessage_methods(root_module, root_module['ns3::RrcDlDcchMessage'])
     register_Ns3RrcUlCcchMessage_methods(root_module, root_module['ns3::RrcUlCcchMessage'])
     register_Ns3RrcUlDcchMessage_methods(root_module, root_module['ns3::RrcUlDcchMessage'])
+    register_Ns3Sib1LteControlMessage_methods(root_module, root_module['ns3::Sib1LteControlMessage'])
     register_Ns3SpectrumChannel_methods(root_module, root_module['ns3::SpectrumChannel'])
     register_Ns3SrsCqiRntiVsp_methods(root_module, root_module['ns3::SrsCqiRntiVsp'])
     register_Ns3StringChecker_methods(root_module, root_module['ns3::StringChecker'])
@@ -2046,6 +2076,8 @@
     register_Ns3Vector3DChecker_methods(root_module, root_module['ns3::Vector3DChecker'])
     register_Ns3Vector3DValue_methods(root_module, root_module['ns3::Vector3DValue'])
     register_Ns3VirtualNetDevice_methods(root_module, root_module['ns3::VirtualNetDevice'])
+    register_Ns3A2A4RsrqHandoverAlgorithm_methods(root_module, root_module['ns3::A2A4RsrqHandoverAlgorithm'])
+    register_Ns3A3RsrpHandoverAlgorithm_methods(root_module, root_module['ns3::A3RsrpHandoverAlgorithm'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BsrLteControlMessage_methods(root_module, root_module['ns3::BsrLteControlMessage'])
@@ -3143,10 +3175,10 @@
                    'void', 
                    [param('uint64_t', 'mmeUeS1Id'), param('uint16_t', 'enbUeS1Id'), param('std::list< ns3::EpcS1apSapMme::ErabSetupItem >', 'erabSetupList')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## epc-s1ap-sap.h (module 'lte'): void ns3::EpcS1apSapMme::InitialUeMessage(uint64_t mmeUeS1Id, uint16_t enbUeS1Id, uint64_t imsi, uint16_t ecgi) [member function]
+    ## epc-s1ap-sap.h (module 'lte'): void ns3::EpcS1apSapMme::InitialUeMessage(uint64_t mmeUeS1Id, uint16_t enbUeS1Id, uint64_t stmsi, uint16_t ecgi) [member function]
     cls.add_method('InitialUeMessage', 
                    'void', 
-                   [param('uint64_t', 'mmeUeS1Id'), param('uint16_t', 'enbUeS1Id'), param('uint64_t', 'imsi'), param('uint16_t', 'ecgi')], 
+                   [param('uint64_t', 'mmeUeS1Id'), param('uint16_t', 'enbUeS1Id'), param('uint64_t', 'stmsi'), param('uint16_t', 'ecgi')], 
                    is_pure_virtual=True, is_virtual=True)
     ## epc-s1ap-sap.h (module 'lte'): void ns3::EpcS1apSapMme::PathSwitchRequest(uint64_t enbUeS1Id, uint64_t mmeUeS1Id, uint16_t gci, std::list<ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem, std::allocator<ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem> > erabToBeSwitchedInDownlinkList) [member function]
     cls.add_method('PathSwitchRequest', 
@@ -3609,6 +3641,16 @@
     cls.add_constructor([])
     ## lte-common.h (module 'lte'): ns3::EutranMeasurementMapping::EutranMeasurementMapping(ns3::EutranMeasurementMapping const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EutranMeasurementMapping const &', 'arg0')])
+    ## lte-common.h (module 'lte'): static int8_t ns3::EutranMeasurementMapping::ActualA3Offset2IeValue(double a3OffsetDb) [member function]
+    cls.add_method('ActualA3Offset2IeValue', 
+                   'int8_t', 
+                   [param('double', 'a3OffsetDb')], 
+                   is_static=True)
+    ## lte-common.h (module 'lte'): static uint8_t ns3::EutranMeasurementMapping::ActualHysteresis2IeValue(double hysteresisDb) [member function]
+    cls.add_method('ActualHysteresis2IeValue', 
+                   'uint8_t', 
+                   [param('double', 'hysteresisDb')], 
+                   is_static=True)
     ## lte-common.h (module 'lte'): static uint8_t ns3::EutranMeasurementMapping::Db2RsrqRange(double db) [member function]
     cls.add_method('Db2RsrqRange', 
                    'uint8_t', 
@@ -3619,6 +3661,26 @@
                    'uint8_t', 
                    [param('double', 'dbm')], 
                    is_static=True)
+    ## lte-common.h (module 'lte'): static double ns3::EutranMeasurementMapping::IeValue2ActualA3Offset(int8_t a3OffsetIeValue) [member function]
+    cls.add_method('IeValue2ActualA3Offset', 
+                   'double', 
+                   [param('int8_t', 'a3OffsetIeValue')], 
+                   is_static=True)
+    ## lte-common.h (module 'lte'): static double ns3::EutranMeasurementMapping::IeValue2ActualHysteresis(uint8_t hysteresisIeValue) [member function]
+    cls.add_method('IeValue2ActualHysteresis', 
+                   'double', 
+                   [param('uint8_t', 'hysteresisIeValue')], 
+                   is_static=True)
+    ## lte-common.h (module 'lte'): static double ns3::EutranMeasurementMapping::IeValue2ActualQQualMin(int8_t qQualMinIeValue) [member function]
+    cls.add_method('IeValue2ActualQQualMin', 
+                   'double', 
+                   [param('int8_t', 'qQualMinIeValue')], 
+                   is_static=True)
+    ## lte-common.h (module 'lte'): static double ns3::EutranMeasurementMapping::IeValue2ActualQRxLevMin(int8_t qRxLevMinIeValue) [member function]
+    cls.add_method('IeValue2ActualQRxLevMin', 
+                   'double', 
+                   [param('int8_t', 'qRxLevMinIeValue')], 
+                   is_static=True)
     ## lte-common.h (module 'lte'): static double ns3::EutranMeasurementMapping::QuantizeRsrp(double v) [member function]
     cls.add_method('QuantizeRsrp', 
                    'double', 
@@ -4939,10 +5001,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -5210,6 +5273,50 @@
     cls.add_instance_attribute('m_qosBearerType', 'ns3::LogicalChannelConfigListElement_s::QosBearerType_e', is_const=False)
     return
 
+def register_Ns3LteAnrSapProvider_methods(root_module, cls):
+    ## lte-anr-sap.h (module 'lte'): ns3::LteAnrSapProvider::LteAnrSapProvider() [constructor]
+    cls.add_constructor([])
+    ## lte-anr-sap.h (module 'lte'): ns3::LteAnrSapProvider::LteAnrSapProvider(ns3::LteAnrSapProvider const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LteAnrSapProvider const &', 'arg0')])
+    ## lte-anr-sap.h (module 'lte'): void ns3::LteAnrSapProvider::AddNeighbourRelation(uint16_t cellId) [member function]
+    cls.add_method('AddNeighbourRelation', 
+                   'void', 
+                   [param('uint16_t', 'cellId')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## lte-anr-sap.h (module 'lte'): bool ns3::LteAnrSapProvider::GetNoHo(uint16_t cellId) const [member function]
+    cls.add_method('GetNoHo', 
+                   'bool', 
+                   [param('uint16_t', 'cellId')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## lte-anr-sap.h (module 'lte'): bool ns3::LteAnrSapProvider::GetNoRemove(uint16_t cellId) const [member function]
+    cls.add_method('GetNoRemove', 
+                   'bool', 
+                   [param('uint16_t', 'cellId')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## lte-anr-sap.h (module 'lte'): bool ns3::LteAnrSapProvider::GetNoX2(uint16_t cellId) const [member function]
+    cls.add_method('GetNoX2', 
+                   'bool', 
+                   [param('uint16_t', 'cellId')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## lte-anr-sap.h (module 'lte'): void ns3::LteAnrSapProvider::ReportUeMeas(ns3::LteRrcSap::MeasResults measResults) [member function]
+    cls.add_method('ReportUeMeas', 
+                   'void', 
+                   [param('ns3::LteRrcSap::MeasResults', 'measResults')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3LteAnrSapUser_methods(root_module, cls):
+    ## lte-anr-sap.h (module 'lte'): ns3::LteAnrSapUser::LteAnrSapUser() [constructor]
+    cls.add_constructor([])
+    ## lte-anr-sap.h (module 'lte'): ns3::LteAnrSapUser::LteAnrSapUser(ns3::LteAnrSapUser const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LteAnrSapUser const &', 'arg0')])
+    ## lte-anr-sap.h (module 'lte'): uint8_t ns3::LteAnrSapUser::AddUeMeasReportConfigForAnr(ns3::LteRrcSap::ReportConfigEutra reportConfig) [member function]
+    cls.add_method('AddUeMeasReportConfigForAnr', 
+                   'uint8_t', 
+                   [param('ns3::LteRrcSap::ReportConfigEutra', 'reportConfig')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
 def register_Ns3LteAsSapProvider_methods(root_module, cls):
     ## lte-as-sap.h (module 'lte'): ns3::LteAsSapProvider::LteAsSapProvider() [constructor]
     cls.add_constructor([])
@@ -5225,16 +5332,26 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## lte-as-sap.h (module 'lte'): void ns3::LteAsSapProvider::ForceCampedOnEnb(uint16_t cellId, uint16_t earfcn) [member function]
+    ## lte-as-sap.h (module 'lte'): void ns3::LteAsSapProvider::ForceCampedOnEnb(uint16_t cellId, uint16_t dlEarfcn) [member function]
     cls.add_method('ForceCampedOnEnb', 
                    'void', 
-                   [param('uint16_t', 'cellId'), param('uint16_t', 'earfcn')], 
+                   [param('uint16_t', 'cellId'), param('uint16_t', 'dlEarfcn')], 
                    is_pure_virtual=True, is_virtual=True)
     ## lte-as-sap.h (module 'lte'): void ns3::LteAsSapProvider::SendData(ns3::Ptr<ns3::Packet> packet, uint8_t bid) [member function]
     cls.add_method('SendData', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'packet'), param('uint8_t', 'bid')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## lte-as-sap.h (module 'lte'): void ns3::LteAsSapProvider::SetCsgWhiteList(uint32_t csgId) [member function]
+    cls.add_method('SetCsgWhiteList', 
+                   'void', 
+                   [param('uint32_t', 'csgId')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## lte-as-sap.h (module 'lte'): void ns3::LteAsSapProvider::StartCellSelection(uint16_t dlEarfcn) [member function]
+    cls.add_method('StartCellSelection', 
+                   'void', 
+                   [param('uint16_t', 'dlEarfcn')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3LteAsSapUser_methods(root_module, cls):
@@ -5451,6 +5568,11 @@
                    'void', 
                    [param('uint16_t', 'rnti'), param('uint16_t', 'srsCi')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## lte-enb-cphy-sap.h (module 'lte'): void ns3::LteEnbCphySapProvider::SetSystemInformationBlockType1(ns3::LteRrcSap::SystemInformationBlockType1 sib1) [member function]
+    cls.add_method('SetSystemInformationBlockType1', 
+                   'void', 
+                   [param('ns3::LteRrcSap::SystemInformationBlockType1', 'sib1')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## lte-enb-cphy-sap.h (module 'lte'): void ns3::LteEnbCphySapProvider::SetTransmissionMode(uint16_t rnti, uint8_t txMode) [member function]
     cls.add_method('SetTransmissionMode', 
                    'void', 
@@ -5586,6 +5708,35 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3LteHandoverManagementSapProvider_methods(root_module, cls):
+    ## lte-handover-management-sap.h (module 'lte'): ns3::LteHandoverManagementSapProvider::LteHandoverManagementSapProvider() [constructor]
+    cls.add_constructor([])
+    ## lte-handover-management-sap.h (module 'lte'): ns3::LteHandoverManagementSapProvider::LteHandoverManagementSapProvider(ns3::LteHandoverManagementSapProvider const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LteHandoverManagementSapProvider const &', 'arg0')])
+    ## lte-handover-management-sap.h (module 'lte'): void ns3::LteHandoverManagementSapProvider::ReportUeMeas(uint16_t rnti, ns3::LteRrcSap::MeasResults measResults) [member function]
+    cls.add_method('ReportUeMeas', 
+                   'void', 
+                   [param('uint16_t', 'rnti'), param('ns3::LteRrcSap::MeasResults', 'measResults')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3LteHandoverManagementSapUser_methods(root_module, cls):
+    ## lte-handover-management-sap.h (module 'lte'): ns3::LteHandoverManagementSapUser::LteHandoverManagementSapUser() [constructor]
+    cls.add_constructor([])
+    ## lte-handover-management-sap.h (module 'lte'): ns3::LteHandoverManagementSapUser::LteHandoverManagementSapUser(ns3::LteHandoverManagementSapUser const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LteHandoverManagementSapUser const &', 'arg0')])
+    ## lte-handover-management-sap.h (module 'lte'): uint8_t ns3::LteHandoverManagementSapUser::AddUeMeasReportConfigForHandover(ns3::LteRrcSap::ReportConfigEutra reportConfig) [member function]
+    cls.add_method('AddUeMeasReportConfigForHandover', 
+                   'uint8_t', 
+                   [param('ns3::LteRrcSap::ReportConfigEutra', 'reportConfig')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## lte-handover-management-sap.h (module 'lte'): void ns3::LteHandoverManagementSapUser::TriggerHandover(uint16_t rnti, uint16_t targetCellId) [member function]
+    cls.add_method('TriggerHandover', 
+                   'void', 
+                   [param('uint16_t', 'rnti'), param('uint16_t', 'targetCellId')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
 def register_Ns3LteMacSapProvider_methods(root_module, cls):
     ## lte-mac-sap.h (module 'lte'): ns3::LteMacSapProvider::LteMacSapProvider() [constructor]
     cls.add_constructor([])
@@ -5864,6 +6015,17 @@
     cls.add_instance_attribute('plmnIdentityInfo', 'ns3::LteRrcSap::PlmnIdentityInfo', is_const=False)
     return
 
+def register_Ns3LteRrcSapCellSelectionInfo_methods(root_module, cls):
+    ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::CellSelectionInfo::CellSelectionInfo() [constructor]
+    cls.add_constructor([])
+    ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::CellSelectionInfo::CellSelectionInfo(ns3::LteRrcSap::CellSelectionInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LteRrcSap::CellSelectionInfo const &', 'arg0')])
+    ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::CellSelectionInfo::qQualMin [variable]
+    cls.add_instance_attribute('qQualMin', 'int8_t', is_const=False)
+    ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::CellSelectionInfo::qRxLevMin [variable]
+    cls.add_instance_attribute('qRxLevMin', 'int8_t', is_const=False)
+    return
+
 def register_Ns3LteRrcSapCellsToAddMod_methods(root_module, cls):
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::CellsToAddMod::CellsToAddMod() [constructor]
     cls.add_constructor([])
@@ -6276,10 +6438,10 @@
     return
 
 def register_Ns3LteRrcSapReportConfigEutra_methods(root_module, cls):
-    ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra::ReportConfigEutra() [constructor]
-    cls.add_constructor([])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra::ReportConfigEutra(ns3::LteRrcSap::ReportConfigEutra const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LteRrcSap::ReportConfigEutra const &', 'arg0')])
+    ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra::ReportConfigEutra() [constructor]
+    cls.add_constructor([])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra::a3Offset [variable]
     cls.add_instance_attribute('a3Offset', 'int8_t', is_const=False)
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra::hysteresis [variable]
@@ -6504,6 +6666,8 @@
     cls.add_constructor([param('ns3::LteRrcSap::SystemInformationBlockType1 const &', 'arg0')])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::SystemInformationBlockType1::cellAccessRelatedInfo [variable]
     cls.add_instance_attribute('cellAccessRelatedInfo', 'ns3::LteRrcSap::CellAccessRelatedInfo', is_const=False)
+    ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::SystemInformationBlockType1::cellSelectionInfo [variable]
+    cls.add_instance_attribute('cellSelectionInfo', 'ns3::LteRrcSap::CellSelectionInfo', is_const=False)
     return
 
 def register_Ns3LteRrcSapSystemInformationBlockType2_methods(root_module, cls):
@@ -6712,8 +6876,18 @@
                    'void', 
                    [param('uint8_t', 'txMode')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapProvider::SyncronizeWithEnb(uint16_t cellId, uint16_t dlEarfcn) [member function]
-    cls.add_method('SyncronizeWithEnb', 
+    ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapProvider::StartCellSearch(uint16_t dlEarfcn) [member function]
+    cls.add_method('StartCellSearch', 
+                   'void', 
+                   [param('uint16_t', 'dlEarfcn')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapProvider::SynchronizeWithEnb(uint16_t cellId) [member function]
+    cls.add_method('SynchronizeWithEnb', 
+                   'void', 
+                   [param('uint16_t', 'cellId')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapProvider::SynchronizeWithEnb(uint16_t cellId, uint16_t dlEarfcn) [member function]
+    cls.add_method('SynchronizeWithEnb', 
                    'void', 
                    [param('uint16_t', 'cellId'), param('uint16_t', 'dlEarfcn')], 
                    is_pure_virtual=True, is_virtual=True)
@@ -6724,10 +6898,15 @@
     cls.add_constructor([])
     ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::LteUeCphySapUser(ns3::LteUeCphySapUser const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LteUeCphySapUser const &', 'arg0')])
-    ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapUser::RecvMasterInformationBlock(ns3::LteRrcSap::MasterInformationBlock mib) [member function]
+    ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapUser::RecvMasterInformationBlock(uint16_t cellId, ns3::LteRrcSap::MasterInformationBlock mib) [member function]
     cls.add_method('RecvMasterInformationBlock', 
                    'void', 
-                   [param('ns3::LteRrcSap::MasterInformationBlock', 'mib')], 
+                   [param('uint16_t', 'cellId'), param('ns3::LteRrcSap::MasterInformationBlock', 'mib')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapUser::RecvSystemInformationBlockType1(uint16_t cellId, ns3::LteRrcSap::SystemInformationBlockType1 sib1) [member function]
+    cls.add_method('RecvSystemInformationBlockType1', 
+                   'void', 
+                   [param('uint16_t', 'cellId'), param('ns3::LteRrcSap::SystemInformationBlockType1', 'sib1')], 
                    is_pure_virtual=True, is_virtual=True)
     ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapUser::ReportUeMeasurements(ns3::LteUeCphySapUser::UeMeasurementsParameters params) [member function]
     cls.add_method('ReportUeMeasurements', 
@@ -6812,11 +6991,6 @@
                    'void', 
                    [param('ns3::LteUeRrcSapProvider::CompleteSetupParameters', 'params')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## lte-rrc-sap.h (module 'lte'): void ns3::LteUeRrcSapProvider::RecvMasterInformationBlock(ns3::LteRrcSap::MasterInformationBlock msg) [member function]
-    cls.add_method('RecvMasterInformationBlock', 
-                   'void', 
-                   [param('ns3::LteRrcSap::MasterInformationBlock', 'msg')], 
-                   is_pure_virtual=True, is_virtual=True)
     ## lte-rrc-sap.h (module 'lte'): void ns3::LteUeRrcSapProvider::RecvRrcConnectionReconfiguration(ns3::LteRrcSap::RrcConnectionReconfiguration msg) [member function]
     cls.add_method('RecvRrcConnectionReconfiguration', 
                    'void', 
@@ -6852,11 +7026,6 @@
                    'void', 
                    [param('ns3::LteRrcSap::SystemInformation', 'msg')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## lte-rrc-sap.h (module 'lte'): void ns3::LteUeRrcSapProvider::RecvSystemInformationBlockType1(ns3::LteRrcSap::SystemInformationBlockType1 msg) [member function]
-    cls.add_method('RecvSystemInformationBlockType1', 
-                   'void', 
-                   [param('ns3::LteRrcSap::SystemInformationBlockType1', 'msg')], 
-                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3LteUeRrcSapProviderCompleteSetupParameters_methods(root_module, cls):
@@ -8833,10 +9002,10 @@
     cls.add_method('SetBid', 
                    'void', 
                    [param('uint8_t', 'bid')])
-    ## eps-bearer-tag.h (module 'lte'): void ns3::EpsBearerTag::SetRnti(uint16_t tid) [member function]
+    ## eps-bearer-tag.h (module 'lte'): void ns3::EpsBearerTag::SetRnti(uint16_t rnti) [member function]
     cls.add_method('SetRnti', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'rnti')])
     return
 
 def register_Ns3Header_methods(root_module, cls):
@@ -9262,11 +9431,6 @@
                    'void', 
                    [param('ns3::LteRrcSap::SystemInformation', 'msg')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## lte-rrc-sap.h (module 'lte'): void ns3::LteEnbRrcSapUser::SendSystemInformationBlockType1(ns3::LteRrcSap::SystemInformationBlockType1 msg) [member function]
-    cls.add_method('SendSystemInformationBlockType1', 
-                   'void', 
-                   [param('ns3::LteRrcSap::SystemInformationBlockType1', 'msg')], 
-                   is_pure_virtual=True, is_virtual=True)
     ## lte-rrc-sap.h (module 'lte'): void ns3::LteEnbRrcSapUser::SetupUe(uint16_t rnti, ns3::LteEnbRrcSapUser::SetupUeParameters params) [member function]
     cls.add_method('SetupUe', 
                    'void', 
@@ -9438,18 +9602,18 @@
                    'void', 
                    [param('ns3::TagBuffer', 'i')], 
                    is_const=True, is_virtual=True)
-    ## lte-radio-bearer-tag.h (module 'lte'): void ns3::LteRadioBearerTag::SetLayer(uint8_t lcid) [member function]
+    ## lte-radio-bearer-tag.h (module 'lte'): void ns3::LteRadioBearerTag::SetLayer(uint8_t layer) [member function]
     cls.add_method('SetLayer', 
                    'void', 
-                   [param('uint8_t', 'lcid')])
+                   [param('uint8_t', 'layer')])
     ## lte-radio-bearer-tag.h (module 'lte'): void ns3::LteRadioBearerTag::SetLcid(uint8_t lcid) [member function]
     cls.add_method('SetLcid', 
                    'void', 
                    [param('uint8_t', 'lcid')])
-    ## lte-radio-bearer-tag.h (module 'lte'): void ns3::LteRadioBearerTag::SetRnti(uint16_t tid) [member function]
+    ## lte-radio-bearer-tag.h (module 'lte'): void ns3::LteRadioBearerTag::SetRnti(uint16_t rnti) [member function]
     cls.add_method('SetRnti', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'rnti')])
     return
 
 def register_Ns3LteRlcAmHeader_methods(root_module, cls):
@@ -11203,6 +11367,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -11213,6 +11382,11 @@
                    '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', 
@@ -11228,6 +11402,11 @@
                    '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', 
@@ -11253,6 +11432,11 @@
                    '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', 
@@ -11467,30 +11651,34 @@
     cls.add_method('GetErabList', 
                    'std::vector< ns3::EpcX2Sap::ErabToBeSetupItem >', 
                    [])
-    ## lte-enb-rrc.h (module 'lte'): uint64_t ns3::UeManager::GetImsi() [member function]
+    ## lte-enb-rrc.h (module 'lte'): uint64_t ns3::UeManager::GetImsi() const [member function]
     cls.add_method('GetImsi', 
                    'uint64_t', 
-                   [])
+                   [], 
+                   is_const=True)
     ## lte-enb-rrc.h (module 'lte'): ns3::LteRrcSap::RadioResourceConfigDedicated ns3::UeManager::GetRadioResourceConfigForHandoverPreparationInfo() [member function]
     cls.add_method('GetRadioResourceConfigForHandoverPreparationInfo', 
                    'ns3::LteRrcSap::RadioResourceConfigDedicated', 
                    [])
-    ## lte-enb-rrc.h (module 'lte'): uint16_t ns3::UeManager::GetRnti() [member function]
+    ## lte-enb-rrc.h (module 'lte'): uint16_t ns3::UeManager::GetRnti() const [member function]
     cls.add_method('GetRnti', 
                    'uint16_t', 
-                   [])
+                   [], 
+                   is_const=True)
     ## lte-enb-rrc.h (module 'lte'): ns3::LteRrcSap::RrcConnectionReconfiguration ns3::UeManager::GetRrcConnectionReconfigurationForHandover() [member function]
     cls.add_method('GetRrcConnectionReconfigurationForHandover', 
                    'ns3::LteRrcSap::RrcConnectionReconfiguration', 
                    [])
-    ## lte-enb-rrc.h (module 'lte'): uint16_t ns3::UeManager::GetSrsConfigurationIndex() [member function]
+    ## lte-enb-rrc.h (module 'lte'): uint16_t ns3::UeManager::GetSrsConfigurationIndex() const [member function]
     cls.add_method('GetSrsConfigurationIndex', 
                    'uint16_t', 
-                   [])
-    ## lte-enb-rrc.h (module 'lte'): ns3::UeManager::State ns3::UeManager::GetState() [member function]
+                   [], 
+                   is_const=True)
+    ## lte-enb-rrc.h (module 'lte'): ns3::UeManager::State ns3::UeManager::GetState() const [member function]
     cls.add_method('GetState', 
                    'ns3::UeManager::State', 
-                   [])
+                   [], 
+                   is_const=True)
     ## lte-enb-rrc.h (module 'lte'): static ns3::TypeId ns3::UeManager::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -11592,19 +11780,6 @@
                    visibility='protected', is_virtual=True)
     return
 
-def register_Ns3UeMeasure_methods(root_module, cls):
-    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::UeMeasure() [constructor]
-    cls.add_constructor([])
-    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::UeMeasure(ns3::UeMeasure const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::UeMeasure const &', 'arg0')])
-    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::m_cellId [variable]
-    cls.add_instance_attribute('m_cellId', 'uint16_t', is_const=False)
-    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::m_rsrp [variable]
-    cls.add_instance_attribute('m_rsrp', 'uint8_t', is_const=False)
-    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::m_rsrq [variable]
-    cls.add_instance_attribute('m_rsrq', 'uint8_t', is_const=False)
-    return
-
 def register_Ns3UniformRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::UniformRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -12757,23 +12932,28 @@
     ## 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]
     cls.add_method('ActivateEpsBearer', 
                    'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'ueLteDevice'), param('uint64_t', 'imsi'), param('ns3::Ptr< ns3::EpcTft >', 'tft'), param('ns3::EpsBearer', 'bearer')])
+                   [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]
     cls.add_method('AddEnb', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'enbNode'), param('ns3::Ptr< ns3::NetDevice >', 'lteEnbNetDevice'), param('uint16_t', 'cellId')])
+                   [param('ns3::Ptr< ns3::Node >', 'enbNode'), param('ns3::Ptr< ns3::NetDevice >', 'lteEnbNetDevice'), param('uint16_t', 'cellId')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## epc-helper.h (module 'lte'): void ns3::EpcHelper::AddUe(ns3::Ptr<ns3::NetDevice> ueLteDevice, uint64_t imsi) [member function]
     cls.add_method('AddUe', 
                    'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'ueLteDevice'), param('uint64_t', 'imsi')])
+                   [param('ns3::Ptr< ns3::NetDevice >', 'ueLteDevice'), param('uint64_t', 'imsi')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## epc-helper.h (module 'lte'): void ns3::EpcHelper::AddX2Interface(ns3::Ptr<ns3::Node> enbNode1, ns3::Ptr<ns3::Node> enbNode2) [member function]
     cls.add_method('AddX2Interface', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'enbNode1'), param('ns3::Ptr< ns3::Node >', 'enbNode2')])
+                   [param('ns3::Ptr< ns3::Node >', 'enbNode1'), param('ns3::Ptr< ns3::Node >', 'enbNode2')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## epc-helper.h (module 'lte'): ns3::Ipv4InterfaceContainer ns3::EpcHelper::AssignUeIpv4Address(ns3::NetDeviceContainer ueDevices) [member function]
     cls.add_method('AssignUeIpv4Address', 
                    'ns3::Ipv4InterfaceContainer', 
-                   [param('ns3::NetDeviceContainer', 'ueDevices')])
+                   [param('ns3::NetDeviceContainer', 'ueDevices')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## epc-helper.h (module 'lte'): void ns3::EpcHelper::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -12782,7 +12962,8 @@
     ## epc-helper.h (module 'lte'): ns3::Ptr<ns3::Node> ns3::EpcHelper::GetPgwNode() [member function]
     cls.add_method('GetPgwNode', 
                    'ns3::Ptr< ns3::Node >', 
-                   [])
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     ## epc-helper.h (module 'lte'): static ns3::TypeId ns3::EpcHelper::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -12791,7 +12972,8 @@
     ## epc-helper.h (module 'lte'): ns3::Ipv4Address ns3::EpcHelper::GetUeDefaultGatewayAddress() [member function]
     cls.add_method('GetUeDefaultGatewayAddress', 
                    'ns3::Ipv4Address', 
-                   [])
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3EpcMme_methods(root_module, cls):
@@ -12803,10 +12985,10 @@
     cls.add_method('AddBearer', 
                    'void', 
                    [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 egci, ns3::Ipv4Address enbS1UAddr, ns3::EpcS1apSapEnb * enbS1apSap) [member function]
+    ## epc-mme.h (module 'lte'): void ns3::EpcMme::AddEnb(uint16_t ecgi, ns3::Ipv4Address enbS1UAddr, ns3::EpcS1apSapEnb * enbS1apSap) [member function]
     cls.add_method('AddEnb', 
                    'void', 
-                   [param('uint16_t', 'egci'), param('ns3::Ipv4Address', 'enbS1UAddr'), param('ns3::EpcS1apSapEnb *', 'enbS1apSap')])
+                   [param('uint16_t', 'ecgi'), param('ns3::Ipv4Address', 'enbS1UAddr'), param('ns3::EpcS1apSapEnb *', 'enbS1apSap')])
     ## epc-mme.h (module 'lte'): void ns3::EpcMme::AddUe(uint64_t imsi) [member function]
     cls.add_method('AddUe', 
                    'void', 
@@ -12971,10 +13153,14 @@
     cls.add_method('ActivateEpsBearer', 
                    'void', 
                    [param('ns3::EpsBearer', 'bearer'), param('ns3::Ptr< ns3::EpcTft >', 'tft')])
-    ## epc-ue-nas.h (module 'lte'): void ns3::EpcUeNas::Connect(uint16_t cellId, uint16_t earfcn) [member function]
+    ## epc-ue-nas.h (module 'lte'): void ns3::EpcUeNas::Connect() [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [])
+    ## epc-ue-nas.h (module 'lte'): void ns3::EpcUeNas::Connect(uint16_t cellId, uint16_t dlEarfcn) [member function]
     cls.add_method('Connect', 
                    'void', 
-                   [param('uint16_t', 'cellId'), param('uint16_t', 'earfcn')])
+                   [param('uint16_t', 'cellId'), param('uint16_t', 'dlEarfcn')])
     ## epc-ue-nas.h (module 'lte'): void ns3::EpcUeNas::Disconnect() [member function]
     cls.add_method('Disconnect', 
                    'void', 
@@ -12988,6 +13174,16 @@
     cls.add_method('GetAsSapUser', 
                    'ns3::LteAsSapUser *', 
                    [])
+    ## epc-ue-nas.h (module 'lte'): uint32_t ns3::EpcUeNas::GetCsgId() const [member function]
+    cls.add_method('GetCsgId', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## epc-ue-nas.h (module 'lte'): ns3::EpcUeNas::State ns3::EpcUeNas::GetState() const [member function]
+    cls.add_method('GetState', 
+                   'ns3::EpcUeNas::State', 
+                   [], 
+                   is_const=True)
     ## epc-ue-nas.h (module 'lte'): static ns3::TypeId ns3::EpcUeNas::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -13001,6 +13197,10 @@
     cls.add_method('SetAsSapProvider', 
                    'void', 
                    [param('ns3::LteAsSapProvider *', 's')])
+    ## epc-ue-nas.h (module 'lte'): void ns3::EpcUeNas::SetCsgId(uint32_t csgId) [member function]
+    cls.add_method('SetCsgId', 
+                   'void', 
+                   [param('uint32_t', 'csgId')])
     ## epc-ue-nas.h (module 'lte'): void ns3::EpcUeNas::SetDevice(ns3::Ptr<ns3::NetDevice> dev) [member function]
     cls.add_method('SetDevice', 
                    'void', 
@@ -13013,6 +13213,10 @@
     cls.add_method('SetImsi', 
                    'void', 
                    [param('uint64_t', 'imsi')])
+    ## epc-ue-nas.h (module 'lte'): void ns3::EpcUeNas::StartCellSelection(uint16_t dlEarfcn) [member function]
+    cls.add_method('StartCellSelection', 
+                   'void', 
+                   [param('uint16_t', 'dlEarfcn')])
     return
 
 def register_Ns3EpcX2_methods(root_module, cls):
@@ -14743,6 +14947,46 @@
                    is_static=True)
     return
 
+def register_Ns3LteAnr_methods(root_module, cls):
+    ## lte-anr.h (module 'lte'): ns3::LteAnr::LteAnr(ns3::LteAnr const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LteAnr const &', 'arg0')])
+    ## lte-anr.h (module 'lte'): ns3::LteAnr::LteAnr(uint16_t servingCellId) [constructor]
+    cls.add_constructor([param('uint16_t', 'servingCellId')])
+    ## lte-anr.h (module 'lte'): void ns3::LteAnr::AddNeighbourRelation(uint16_t cellId) [member function]
+    cls.add_method('AddNeighbourRelation', 
+                   'void', 
+                   [param('uint16_t', 'cellId')])
+    ## lte-anr.h (module 'lte'): ns3::LteAnrSapProvider * ns3::LteAnr::GetLteAnrSapProvider() [member function]
+    cls.add_method('GetLteAnrSapProvider', 
+                   'ns3::LteAnrSapProvider *', 
+                   [], 
+                   is_virtual=True)
+    ## lte-anr.h (module 'lte'): static ns3::TypeId ns3::LteAnr::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## lte-anr.h (module 'lte'): void ns3::LteAnr::RemoveNeighbourRelation(uint16_t cellId) [member function]
+    cls.add_method('RemoveNeighbourRelation', 
+                   'void', 
+                   [param('uint16_t', 'cellId')])
+    ## lte-anr.h (module 'lte'): void ns3::LteAnr::SetLteAnrSapUser(ns3::LteAnrSapUser * s) [member function]
+    cls.add_method('SetLteAnrSapUser', 
+                   'void', 
+                   [param('ns3::LteAnrSapUser *', 's')], 
+                   is_virtual=True)
+    ## lte-anr.h (module 'lte'): void ns3::LteAnr::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## lte-anr.h (module 'lte'): void ns3::LteAnr::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3LteControlMessage_methods(root_module, cls):
     ## lte-control-messages.h (module 'lte'): ns3::LteControlMessage::LteControlMessage(ns3::LteControlMessage const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LteControlMessage const &', 'arg0')])
@@ -14824,6 +15068,10 @@
     cls.add_constructor([param('ns3::LteEnbRrc const &', 'arg0')])
     ## lte-enb-rrc.h (module 'lte'): ns3::LteEnbRrc::LteEnbRrc() [constructor]
     cls.add_constructor([])
+    ## lte-enb-rrc.h (module 'lte'): uint8_t ns3::LteEnbRrc::AddUeMeasReportConfig(ns3::LteRrcSap::ReportConfigEutra config) [member function]
+    cls.add_method('AddUeMeasReportConfig', 
+                   'uint8_t', 
+                   [param('ns3::LteRrcSap::ReportConfigEutra', 'config')])
     ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::AddX2Neighbour(uint16_t cellId) [member function]
     cls.add_method('AddX2Neighbour', 
                    'void', 
@@ -14844,6 +15092,10 @@
     cls.add_method('GetEpcX2SapUser', 
                    'ns3::EpcX2SapUser *', 
                    [])
+    ## lte-enb-rrc.h (module 'lte'): ns3::LteAnrSapUser * ns3::LteEnbRrc::GetLteAnrSapUser() [member function]
+    cls.add_method('GetLteAnrSapUser', 
+                   'ns3::LteAnrSapUser *', 
+                   [])
     ## lte-enb-rrc.h (module 'lte'): ns3::LteEnbCmacSapUser * ns3::LteEnbRrc::GetLteEnbCmacSapUser() [member function]
     cls.add_method('GetLteEnbCmacSapUser', 
                    'ns3::LteEnbCmacSapUser *', 
@@ -14856,6 +15108,10 @@
     cls.add_method('GetLteEnbRrcSapProvider', 
                    'ns3::LteEnbRrcSapProvider *', 
                    [])
+    ## lte-enb-rrc.h (module 'lte'): ns3::LteHandoverManagementSapUser * ns3::LteEnbRrc::GetLteHandoverManagementSapUser() [member function]
+    cls.add_method('GetLteHandoverManagementSapUser', 
+                   'ns3::LteHandoverManagementSapUser *', 
+                   [])
     ## lte-enb-rrc.h (module 'lte'): ns3::EpcEnbS1SapUser * ns3::LteEnbRrc::GetS1SapUser() [member function]
     cls.add_method('GetS1SapUser', 
                    'ns3::EpcEnbS1SapUser *', 
@@ -14894,6 +15150,10 @@
     cls.add_method('SetCellId', 
                    'void', 
                    [param('uint16_t', 'm_cellId')])
+    ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetCsgId(uint32_t csgId, bool csgIndication) [member function]
+    cls.add_method('SetCsgId', 
+                   'void', 
+                   [param('uint32_t', 'csgId'), param('bool', 'csgIndication')])
     ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetEpcX2SapProvider(ns3::EpcX2SapProvider * s) [member function]
     cls.add_method('SetEpcX2SapProvider', 
                    'void', 
@@ -14902,6 +15162,10 @@
     cls.add_method('SetForwardUpCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteAnrSapProvider(ns3::LteAnrSapProvider * s) [member function]
+    cls.add_method('SetLteAnrSapProvider', 
+                   'void', 
+                   [param('ns3::LteAnrSapProvider *', 's')])
     ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteEnbCmacSapProvider(ns3::LteEnbCmacSapProvider * s) [member function]
     cls.add_method('SetLteEnbCmacSapProvider', 
                    'void', 
@@ -14914,6 +15178,10 @@
     cls.add_method('SetLteEnbRrcSapUser', 
                    'void', 
                    [param('ns3::LteEnbRrcSapUser *', 's')])
+    ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteHandoverManagementSapProvider(ns3::LteHandoverManagementSapProvider * s) [member function]
+    cls.add_method('SetLteHandoverManagementSapProvider', 
+                   'void', 
+                   [param('ns3::LteHandoverManagementSapProvider *', 's')])
     ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteMacSapProvider(ns3::LteMacSapProvider * s) [member function]
     cls.add_method('SetLteMacSapProvider', 
                    'void', 
@@ -15007,6 +15275,38 @@
                    [param('uint16_t', 'rnti'), param('ns3::LteUeRrcSapProvider *', 'p')])
     return
 
+def register_Ns3LteHandoverAlgorithm_methods(root_module, cls):
+    ## lte-handover-algorithm.h (module 'lte'): ns3::LteHandoverAlgorithm::LteHandoverAlgorithm(ns3::LteHandoverAlgorithm const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LteHandoverAlgorithm const &', 'arg0')])
+    ## lte-handover-algorithm.h (module 'lte'): ns3::LteHandoverAlgorithm::LteHandoverAlgorithm() [constructor]
+    cls.add_constructor([])
+    ## lte-handover-algorithm.h (module 'lte'): ns3::LteHandoverManagementSapProvider * ns3::LteHandoverAlgorithm::GetLteHandoverManagementSapProvider() [member function]
+    cls.add_method('GetLteHandoverManagementSapProvider', 
+                   'ns3::LteHandoverManagementSapProvider *', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## lte-handover-algorithm.h (module 'lte'): static ns3::TypeId ns3::LteHandoverAlgorithm::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## lte-handover-algorithm.h (module 'lte'): void ns3::LteHandoverAlgorithm::SetLteHandoverManagementSapUser(ns3::LteHandoverManagementSapUser * s) [member function]
+    cls.add_method('SetLteHandoverManagementSapUser', 
+                   'void', 
+                   [param('ns3::LteHandoverManagementSapUser *', 's')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## lte-handover-algorithm.h (module 'lte'): void ns3::LteHandoverAlgorithm::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## lte-handover-algorithm.h (module 'lte'): void ns3::LteHandoverAlgorithm::DoReportUeMeas(uint16_t rnti, ns3::LteRrcSap::MeasResults measResults) [member function]
+    cls.add_method('DoReportUeMeas', 
+                   'void', 
+                   [param('uint16_t', 'rnti'), param('ns3::LteRrcSap::MeasResults', 'measResults')], 
+                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3LteHarqPhy_methods(root_module, cls):
     ## lte-harq-phy.h (module 'lte'): ns3::LteHarqPhy::LteHarqPhy(ns3::LteHarqPhy const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LteHarqPhy const &', 'arg0')])
@@ -15083,6 +15383,14 @@
     cls.add_method('AssignStreams', 
                    'int64_t', 
                    [param('ns3::NetDeviceContainer', 'c'), param('int64_t', 'stream')])
+    ## lte-helper.h (module 'lte'): void ns3::LteHelper::Attach(ns3::NetDeviceContainer ueDevices) [member function]
+    cls.add_method('Attach', 
+                   'void', 
+                   [param('ns3::NetDeviceContainer', 'ueDevices')])
+    ## lte-helper.h (module 'lte'): void ns3::LteHelper::Attach(ns3::Ptr<ns3::NetDevice> ueDevice) [member function]
+    cls.add_method('Attach', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'ueDevice')])
     ## lte-helper.h (module 'lte'): void ns3::LteHelper::Attach(ns3::NetDeviceContainer ueDevices, ns3::Ptr<ns3::NetDevice> enbDevice) [member function]
     cls.add_method('Attach', 
                    'void', 
@@ -15160,6 +15468,11 @@
     cls.add_method('EnableUlTxPhyTraces', 
                    'void', 
                    [])
+    ## lte-helper.h (module 'lte'): std::string ns3::LteHelper::GetHandoverAlgorithmType() const [member function]
+    cls.add_method('GetHandoverAlgorithmType', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     ## lte-helper.h (module 'lte'): ns3::Ptr<ns3::RadioBearerStatsCalculator> ns3::LteHelper::GetPdcpStats() [member function]
     cls.add_method('GetPdcpStats', 
                    'ns3::Ptr< ns3::RadioBearerStatsCalculator >', 
@@ -15214,6 +15527,14 @@
     cls.add_method('SetFadingModelAttribute', 
                    'void', 
                    [param('std::string', 'n'), param('ns3::AttributeValue const &', 'v')])
+    ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetHandoverAlgorithmAttribute(std::string n, ns3::AttributeValue const & v) [member function]
+    cls.add_method('SetHandoverAlgorithmAttribute', 
+                   'void', 
+                   [param('std::string', 'n'), param('ns3::AttributeValue const &', 'v')])
+    ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetHandoverAlgorithmType(std::string type) [member function]
+    cls.add_method('SetHandoverAlgorithmType', 
+                   'void', 
+                   [param('std::string', 'type')])
     ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetPathlossModelAttribute(std::string n, ns3::AttributeValue const & v) [member function]
     cls.add_method('SetPathlossModelAttribute', 
                    'void', 
@@ -15246,6 +15567,10 @@
     cls.add_method('SetUeAntennaModelType', 
                    'void', 
                    [param('std::string', 'type')])
+    ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetUeDeviceAttribute(std::string n, ns3::AttributeValue const & v) [member function]
+    cls.add_method('SetUeDeviceAttribute', 
+                   'void', 
+                   [param('std::string', 'n'), param('ns3::AttributeValue const &', 'v')])
     ## lte-helper.h (module 'lte'): void ns3::LteHelper::DoInitialize() [member function]
     cls.add_method('DoInitialize', 
                    'void', 
@@ -15476,15 +15801,15 @@
     cls.add_method('GetUplinkSpectrumPhy', 
                    'ns3::Ptr< ns3::LteSpectrumPhy >', 
                    [])
-    ## lte-phy.h (module 'lte'): void ns3::LtePhy::ReportInterference(ns3::SpectrumValue const & power) [member function]
+    ## lte-phy.h (module 'lte'): void ns3::LtePhy::ReportInterference(ns3::SpectrumValue const & interf) [member function]
     cls.add_method('ReportInterference', 
                    'void', 
-                   [param('ns3::SpectrumValue const &', 'power')], 
+                   [param('ns3::SpectrumValue const &', 'interf')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## lte-phy.h (module 'lte'): void ns3::LtePhy::ReportRsReceivedPower(ns3::SpectrumValue const & interf) [member function]
+    ## lte-phy.h (module 'lte'): void ns3::LtePhy::ReportRsReceivedPower(ns3::SpectrumValue const & power) [member function]
     cls.add_method('ReportRsReceivedPower', 
                    'void', 
-                   [param('ns3::SpectrumValue const &', 'interf')], 
+                   [param('ns3::SpectrumValue const &', 'power')], 
                    is_pure_virtual=True, is_virtual=True)
     ## lte-phy.h (module 'lte'): void ns3::LtePhy::SetControlMessages(ns3::Ptr<ns3::LteControlMessage> m) [member function]
     cls.add_method('SetControlMessages', 
@@ -16215,6 +16540,11 @@
                    'double', 
                    [], 
                    is_const=True)
+    ## lte-ue-phy.h (module 'lte'): ns3::LteUePhy::State ns3::LteUePhy::GetState() const [member function]
+    cls.add_method('GetState', 
+                   'ns3::LteUePhy::State', 
+                   [], 
+                   is_const=True)
     ## lte-ue-phy.h (module 'lte'): std::vector<int, std::allocator<int> > ns3::LteUePhy::GetSubChannelsForReception() [member function]
     cls.add_method('GetSubChannelsForReception', 
                    'std::vector< int >', 
@@ -16283,10 +16613,10 @@
     cls.add_method('SetLteUePhySapUser', 
                    'void', 
                    [param('ns3::LteUePhySapUser *', 's')])
-    ## lte-ue-phy.h (module 'lte'): void ns3::LteUePhy::SetNoiseFigure(double pow) [member function]
+    ## lte-ue-phy.h (module 'lte'): void ns3::LteUePhy::SetNoiseFigure(double nf) [member function]
     cls.add_method('SetNoiseFigure', 
                    'void', 
-                   [param('double', 'pow')])
+                   [param('double', 'nf')])
     ## lte-ue-phy.h (module 'lte'): void ns3::LteUePhy::SetSubChannelsForReception(std::vector<int, std::allocator<int> > mask) [member function]
     cls.add_method('SetSubChannelsForReception', 
                    'void', 
@@ -16344,10 +16674,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
-    ## lte-ue-rrc.h (module 'lte'): uint64_t ns3::LteUeRrc::GetImsi() [member function]
+    ## lte-ue-rrc.h (module 'lte'): uint64_t ns3::LteUeRrc::GetImsi() const [member function]
     cls.add_method('GetImsi', 
                    'uint64_t', 
-                   [])
+                   [], 
+                   is_const=True)
     ## lte-ue-rrc.h (module 'lte'): ns3::LteUeCmacSapUser * ns3::LteUeRrc::GetLteUeCmacSapUser() [member function]
     cls.add_method('GetLteUeCmacSapUser', 
                    'ns3::LteUeCmacSapUser *', 
@@ -16365,10 +16696,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
-    ## lte-ue-rrc.h (module 'lte'): ns3::LteUeRrc::State ns3::LteUeRrc::GetState() [member function]
+    ## lte-ue-rrc.h (module 'lte'): ns3::LteUeRrc::State ns3::LteUeRrc::GetState() const [member function]
     cls.add_method('GetState', 
                    'ns3::LteUeRrc::State', 
-                   [])
+                   [], 
+                   is_const=True)
     ## lte-ue-rrc.h (module 'lte'): static ns3::TypeId ns3::LteUeRrc::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -16557,10 +16889,10 @@
     cls.add_method('SetUlOutputFilename', 
                    'void', 
                    [param('std::string', 'outputFilename')])
-    ## mac-stats-calculator.h (module 'lte'): void ns3::MacStatsCalculator::UlScheduling(uint16_t cellId, uint64_t imsi, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcs, uint16_t sizeTb) [member function]
+    ## mac-stats-calculator.h (module 'lte'): void ns3::MacStatsCalculator::UlScheduling(uint16_t cellId, uint64_t imsi, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcsTb, uint16_t sizeTb) [member function]
     cls.add_method('UlScheduling', 
                    'void', 
-                   [param('uint16_t', 'cellId'), param('uint64_t', 'imsi'), param('uint32_t', 'frameNo'), param('uint32_t', 'subframeNo'), param('uint16_t', 'rnti'), param('uint8_t', 'mcs'), param('uint16_t', 'sizeTb')])
+                   [param('uint16_t', 'cellId'), param('uint64_t', 'imsi'), param('uint32_t', 'frameNo'), param('uint32_t', 'subframeNo'), param('uint16_t', 'rnti'), param('uint8_t', 'mcsTb'), param('uint16_t', 'sizeTb')])
     ## mac-stats-calculator.h (module 'lte'): static void ns3::MacStatsCalculator::UlSchedulingCallback(ns3::Ptr<ns3::MacStatsCalculator> macStats, std::string path, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcs, uint16_t size) [member function]
     cls.add_method('UlSchedulingCallback', 
                    'void', 
@@ -16649,23 +16981,6 @@
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
-def register_Ns3NeighbourRelation_methods(root_module, cls):
-    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::NeighbourRelation() [constructor]
-    cls.add_constructor([])
-    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::NeighbourRelation(ns3::NeighbourRelation const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::NeighbourRelation const &', 'arg0')])
-    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_detectedAsNeighbour [variable]
-    cls.add_instance_attribute('m_detectedAsNeighbour', 'bool', is_const=False)
-    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_noHo [variable]
-    cls.add_instance_attribute('m_noHo', 'bool', is_const=False)
-    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_noRemove [variable]
-    cls.add_instance_attribute('m_noRemove', 'bool', is_const=False)
-    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_noX2 [variable]
-    cls.add_instance_attribute('m_noX2', 'bool', is_const=False)
-    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_physCellId [variable]
-    cls.add_instance_attribute('m_physCellId', 'uint16_t', is_const=False)
-    return
-
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -16842,6 +17157,43 @@
                    is_const=True)
     return
 
+def register_Ns3NoOpHandoverAlgorithm_methods(root_module, cls):
+    ## no-op-handover-algorithm.h (module 'lte'): ns3::NoOpHandoverAlgorithm::NoOpHandoverAlgorithm(ns3::NoOpHandoverAlgorithm const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NoOpHandoverAlgorithm const &', 'arg0')])
+    ## no-op-handover-algorithm.h (module 'lte'): ns3::NoOpHandoverAlgorithm::NoOpHandoverAlgorithm() [constructor]
+    cls.add_constructor([])
+    ## no-op-handover-algorithm.h (module 'lte'): ns3::LteHandoverManagementSapProvider * ns3::NoOpHandoverAlgorithm::GetLteHandoverManagementSapProvider() [member function]
+    cls.add_method('GetLteHandoverManagementSapProvider', 
+                   'ns3::LteHandoverManagementSapProvider *', 
+                   [], 
+                   is_virtual=True)
+    ## no-op-handover-algorithm.h (module 'lte'): static ns3::TypeId ns3::NoOpHandoverAlgorithm::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## no-op-handover-algorithm.h (module 'lte'): void ns3::NoOpHandoverAlgorithm::SetLteHandoverManagementSapUser(ns3::LteHandoverManagementSapUser * s) [member function]
+    cls.add_method('SetLteHandoverManagementSapUser', 
+                   'void', 
+                   [param('ns3::LteHandoverManagementSapUser *', 's')], 
+                   is_virtual=True)
+    ## no-op-handover-algorithm.h (module 'lte'): void ns3::NoOpHandoverAlgorithm::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## no-op-handover-algorithm.h (module 'lte'): void ns3::NoOpHandoverAlgorithm::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## no-op-handover-algorithm.h (module 'lte'): void ns3::NoOpHandoverAlgorithm::DoReportUeMeas(uint16_t rnti, ns3::LteRrcSap::MeasResults measResults) [member function]
+    cls.add_method('DoReportUeMeas', 
+                   'void', 
+                   [param('uint16_t', 'rnti'), param('ns3::LteRrcSap::MeasResults', 'measResults')], 
+                   visibility='protected', is_virtual=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')])
@@ -17434,6 +17786,58 @@
                    is_static=True)
     return
 
+def register_Ns3PointToPointEpcHelper_methods(root_module, cls):
+    ## point-to-point-epc-helper.h (module 'lte'): ns3::PointToPointEpcHelper::PointToPointEpcHelper(ns3::PointToPointEpcHelper const & arg0) [copy constructor]
+    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]
+    cls.add_method('ActivateEpsBearer', 
+                   'void', 
+                   [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]
+    cls.add_method('AddEnb', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'enbNode'), param('ns3::Ptr< ns3::NetDevice >', 'lteEnbNetDevice'), param('uint16_t', 'cellId')], 
+                   is_virtual=True)
+    ## point-to-point-epc-helper.h (module 'lte'): void ns3::PointToPointEpcHelper::AddUe(ns3::Ptr<ns3::NetDevice> ueLteDevice, uint64_t imsi) [member function]
+    cls.add_method('AddUe', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'ueLteDevice'), param('uint64_t', 'imsi')], 
+                   is_virtual=True)
+    ## point-to-point-epc-helper.h (module 'lte'): void ns3::PointToPointEpcHelper::AddX2Interface(ns3::Ptr<ns3::Node> enbNode1, ns3::Ptr<ns3::Node> enbNode2) [member function]
+    cls.add_method('AddX2Interface', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'enbNode1'), param('ns3::Ptr< ns3::Node >', 'enbNode2')], 
+                   is_virtual=True)
+    ## point-to-point-epc-helper.h (module 'lte'): ns3::Ipv4InterfaceContainer ns3::PointToPointEpcHelper::AssignUeIpv4Address(ns3::NetDeviceContainer ueDevices) [member function]
+    cls.add_method('AssignUeIpv4Address', 
+                   'ns3::Ipv4InterfaceContainer', 
+                   [param('ns3::NetDeviceContainer', 'ueDevices')], 
+                   is_virtual=True)
+    ## point-to-point-epc-helper.h (module 'lte'): void ns3::PointToPointEpcHelper::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## point-to-point-epc-helper.h (module 'lte'): ns3::Ptr<ns3::Node> ns3::PointToPointEpcHelper::GetPgwNode() [member function]
+    cls.add_method('GetPgwNode', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [], 
+                   is_virtual=True)
+    ## point-to-point-epc-helper.h (module 'lte'): static ns3::TypeId ns3::PointToPointEpcHelper::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## point-to-point-epc-helper.h (module 'lte'): ns3::Ipv4Address ns3::PointToPointEpcHelper::GetUeDefaultGatewayAddress() [member function]
+    cls.add_method('GetUeDefaultGatewayAddress', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_Ns3PointerChecker_methods(root_module, cls):
     ## pointer.h (module 'core'): ns3::PointerChecker::PointerChecker() [constructor]
     cls.add_constructor([])
@@ -18153,6 +18557,22 @@
                    is_const=True, visibility='protected')
     return
 
+def register_Ns3Sib1LteControlMessage_methods(root_module, cls):
+    ## lte-control-messages.h (module 'lte'): ns3::Sib1LteControlMessage::Sib1LteControlMessage(ns3::Sib1LteControlMessage const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Sib1LteControlMessage const &', 'arg0')])
+    ## lte-control-messages.h (module 'lte'): ns3::Sib1LteControlMessage::Sib1LteControlMessage() [constructor]
+    cls.add_constructor([])
+    ## lte-control-messages.h (module 'lte'): ns3::LteRrcSap::SystemInformationBlockType1 ns3::Sib1LteControlMessage::GetSib1() const [member function]
+    cls.add_method('GetSib1', 
+                   'ns3::LteRrcSap::SystemInformationBlockType1', 
+                   [], 
+                   is_const=True)
+    ## lte-control-messages.h (module 'lte'): void ns3::Sib1LteControlMessage::SetSib1(ns3::LteRrcSap::SystemInformationBlockType1 sib1) [member function]
+    cls.add_method('SetSib1', 
+                   'void', 
+                   [param('ns3::LteRrcSap::SystemInformationBlockType1', 'sib1')])
+    return
+
 def register_Ns3SpectrumChannel_methods(root_module, cls):
     ## spectrum-channel.h (module 'spectrum'): ns3::SpectrumChannel::SpectrumChannel() [constructor]
     cls.add_constructor([])
@@ -18763,6 +19183,80 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3A2A4RsrqHandoverAlgorithm_methods(root_module, cls):
+    ## a2-a4-rsrq-handover-algorithm.h (module 'lte'): ns3::A2A4RsrqHandoverAlgorithm::A2A4RsrqHandoverAlgorithm(ns3::A2A4RsrqHandoverAlgorithm const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::A2A4RsrqHandoverAlgorithm const &', 'arg0')])
+    ## a2-a4-rsrq-handover-algorithm.h (module 'lte'): ns3::A2A4RsrqHandoverAlgorithm::A2A4RsrqHandoverAlgorithm() [constructor]
+    cls.add_constructor([])
+    ## a2-a4-rsrq-handover-algorithm.h (module 'lte'): ns3::LteHandoverManagementSapProvider * ns3::A2A4RsrqHandoverAlgorithm::GetLteHandoverManagementSapProvider() [member function]
+    cls.add_method('GetLteHandoverManagementSapProvider', 
+                   'ns3::LteHandoverManagementSapProvider *', 
+                   [], 
+                   is_virtual=True)
+    ## a2-a4-rsrq-handover-algorithm.h (module 'lte'): static ns3::TypeId ns3::A2A4RsrqHandoverAlgorithm::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## a2-a4-rsrq-handover-algorithm.h (module 'lte'): void ns3::A2A4RsrqHandoverAlgorithm::SetLteHandoverManagementSapUser(ns3::LteHandoverManagementSapUser * s) [member function]
+    cls.add_method('SetLteHandoverManagementSapUser', 
+                   'void', 
+                   [param('ns3::LteHandoverManagementSapUser *', 's')], 
+                   is_virtual=True)
+    ## a2-a4-rsrq-handover-algorithm.h (module 'lte'): void ns3::A2A4RsrqHandoverAlgorithm::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## a2-a4-rsrq-handover-algorithm.h (module 'lte'): void ns3::A2A4RsrqHandoverAlgorithm::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## a2-a4-rsrq-handover-algorithm.h (module 'lte'): void ns3::A2A4RsrqHandoverAlgorithm::DoReportUeMeas(uint16_t rnti, ns3::LteRrcSap::MeasResults measResults) [member function]
+    cls.add_method('DoReportUeMeas', 
+                   'void', 
+                   [param('uint16_t', 'rnti'), param('ns3::LteRrcSap::MeasResults', 'measResults')], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3A3RsrpHandoverAlgorithm_methods(root_module, cls):
+    ## a3-rsrp-handover-algorithm.h (module 'lte'): ns3::A3RsrpHandoverAlgorithm::A3RsrpHandoverAlgorithm(ns3::A3RsrpHandoverAlgorithm const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::A3RsrpHandoverAlgorithm const &', 'arg0')])
+    ## a3-rsrp-handover-algorithm.h (module 'lte'): ns3::A3RsrpHandoverAlgorithm::A3RsrpHandoverAlgorithm() [constructor]
+    cls.add_constructor([])
+    ## a3-rsrp-handover-algorithm.h (module 'lte'): ns3::LteHandoverManagementSapProvider * ns3::A3RsrpHandoverAlgorithm::GetLteHandoverManagementSapProvider() [member function]
+    cls.add_method('GetLteHandoverManagementSapProvider', 
+                   'ns3::LteHandoverManagementSapProvider *', 
+                   [], 
+                   is_virtual=True)
+    ## a3-rsrp-handover-algorithm.h (module 'lte'): static ns3::TypeId ns3::A3RsrpHandoverAlgorithm::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## a3-rsrp-handover-algorithm.h (module 'lte'): void ns3::A3RsrpHandoverAlgorithm::SetLteHandoverManagementSapUser(ns3::LteHandoverManagementSapUser * s) [member function]
+    cls.add_method('SetLteHandoverManagementSapUser', 
+                   'void', 
+                   [param('ns3::LteHandoverManagementSapUser *', 's')], 
+                   is_virtual=True)
+    ## a3-rsrp-handover-algorithm.h (module 'lte'): void ns3::A3RsrpHandoverAlgorithm::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## a3-rsrp-handover-algorithm.h (module 'lte'): void ns3::A3RsrpHandoverAlgorithm::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## a3-rsrp-handover-algorithm.h (module 'lte'): void ns3::A3RsrpHandoverAlgorithm::DoReportUeMeas(uint16_t rnti, ns3::LteRrcSap::MeasResults measResults) [member function]
+    cls.add_method('DoReportUeMeas', 
+                   'void', 
+                   [param('uint16_t', 'rnti'), param('ns3::LteRrcSap::MeasResults', 'measResults')], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
@@ -18812,10 +19306,10 @@
     cls.add_method('GetBsr', 
                    'ns3::MacCeListElement_s', 
                    [])
-    ## lte-control-messages.h (module 'lte'): void ns3::BsrLteControlMessage::SetBsr(ns3::MacCeListElement_s ulcqi) [member function]
+    ## lte-control-messages.h (module 'lte'): void ns3::BsrLteControlMessage::SetBsr(ns3::MacCeListElement_s bsr) [member function]
     cls.add_method('SetBsr', 
                    'void', 
-                   [param('ns3::MacCeListElement_s', 'ulcqi')])
+                   [param('ns3::MacCeListElement_s', 'bsr')])
     return
 
 def register_Ns3DlCqiLteControlMessage_methods(root_module, cls):
@@ -19224,10 +19718,10 @@
                    'void', 
                    [param('ns3::SpectrumValue const &', 'interf')], 
                    is_virtual=True)
-    ## lte-enb-phy.h (module 'lte'): void ns3::LteEnbPhy::ReportRsReceivedPower(ns3::SpectrumValue const & interf) [member function]
+    ## lte-enb-phy.h (module 'lte'): void ns3::LteEnbPhy::ReportRsReceivedPower(ns3::SpectrumValue const & power) [member function]
     cls.add_method('ReportRsReceivedPower', 
                    'void', 
-                   [param('ns3::SpectrumValue const &', 'interf')], 
+                   [param('ns3::SpectrumValue const &', 'power')], 
                    is_virtual=True)
     ## lte-enb-phy.h (module 'lte'): void ns3::LteEnbPhy::SendControlChannels(std::list<ns3::Ptr<ns3::LteControlMessage>, std::allocator<ns3::Ptr<ns3::LteControlMessage> > > ctrlMsgList) [member function]
     cls.add_method('SendControlChannels', 
@@ -19466,8 +19960,6 @@
                    is_static=True)
     ## lte-ue-net-device.h (module 'lte'): ns3::LteUeNetDevice::LteUeNetDevice() [constructor]
     cls.add_constructor([])
-    ## lte-ue-net-device.h (module 'lte'): ns3::LteUeNetDevice::LteUeNetDevice(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::LteUePhy> phy, ns3::Ptr<ns3::LteUeMac> mac, ns3::Ptr<ns3::LteUeRrc> rrc, ns3::Ptr<ns3::EpcUeNas> nas, uint64_t imsi) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::LteUePhy >', 'phy'), param('ns3::Ptr< ns3::LteUeMac >', 'mac'), param('ns3::Ptr< ns3::LteUeRrc >', 'rrc'), param('ns3::Ptr< ns3::EpcUeNas >', 'nas'), param('uint64_t', 'imsi')])
     ## lte-ue-net-device.h (module 'lte'): void ns3::LteUeNetDevice::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -19503,6 +19995,24 @@
                    'uint64_t', 
                    [], 
                    is_const=True)
+    ## lte-ue-net-device.h (module 'lte'): uint16_t ns3::LteUeNetDevice::GetDlEarfcn() const [member function]
+    cls.add_method('GetDlEarfcn', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## lte-ue-net-device.h (module 'lte'): void ns3::LteUeNetDevice::SetDlEarfcn(uint16_t earfcn) [member function]
+    cls.add_method('SetDlEarfcn', 
+                   'void', 
+                   [param('uint16_t', 'earfcn')])
+    ## lte-ue-net-device.h (module 'lte'): uint32_t ns3::LteUeNetDevice::GetCsgId() const [member function]
+    cls.add_method('GetCsgId', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## lte-ue-net-device.h (module 'lte'): void ns3::LteUeNetDevice::SetCsgId(uint32_t csgId) [member function]
+    cls.add_method('SetCsgId', 
+                   'void', 
+                   [param('uint32_t', 'csgId')])
     ## lte-ue-net-device.h (module 'lte'): void ns3::LteUeNetDevice::SetTargetEnb(ns3::Ptr<ns3::LteEnbNetDevice> enb) [member function]
     cls.add_method('SetTargetEnb', 
                    'void', 
@@ -20108,6 +20618,24 @@
     cls.add_method('SetUlEarfcn', 
                    'void', 
                    [param('uint16_t', 'earfcn')])
+    ## lte-enb-net-device.h (module 'lte'): uint32_t ns3::LteEnbNetDevice::GetCsgId() const [member function]
+    cls.add_method('GetCsgId', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## lte-enb-net-device.h (module 'lte'): void ns3::LteEnbNetDevice::SetCsgId(uint32_t csgId) [member function]
+    cls.add_method('SetCsgId', 
+                   'void', 
+                   [param('uint32_t', 'csgId')])
+    ## lte-enb-net-device.h (module 'lte'): bool ns3::LteEnbNetDevice::GetCsgIndication() const [member function]
+    cls.add_method('GetCsgIndication', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lte-enb-net-device.h (module 'lte'): void ns3::LteEnbNetDevice::SetCsgIndication(bool csgIndication) [member function]
+    cls.add_method('SetCsgIndication', 
+                   'void', 
+                   [param('bool', 'csgIndication')])
     ## lte-enb-net-device.h (module 'lte'): void ns3::LteEnbNetDevice::DoInitialize() [member function]
     cls.add_method('DoInitialize', 
                    'void', 
diff -Naur ns-3.18.1/src/lte/bindings/modulegen__gcc_LP64.py ns-3.19/src/lte/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/lte/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -354,6 +354,10 @@
     module.add_enum('Direction_e', ['DIR_UL', 'DIR_DL', 'DIR_BOTH'], outer_class=root_module['ns3::LogicalChannelConfigListElement_s'])
     ## ff-mac-common.h (module 'lte'): ns3::LogicalChannelConfigListElement_s::QosBearerType_e [enumeration]
     module.add_enum('QosBearerType_e', ['QBT_NON_GBR', 'QBT_GBR'], outer_class=root_module['ns3::LogicalChannelConfigListElement_s'])
+    ## lte-anr-sap.h (module 'lte'): ns3::LteAnrSapProvider [class]
+    module.add_class('LteAnrSapProvider', allow_subclassing=True)
+    ## lte-anr-sap.h (module 'lte'): ns3::LteAnrSapUser [class]
+    module.add_class('LteAnrSapUser', allow_subclassing=True)
     ## lte-as-sap.h (module 'lte'): ns3::LteAsSapProvider [class]
     module.add_class('LteAsSapProvider', allow_subclassing=True)
     ## lte-as-sap.h (module 'lte'): ns3::LteAsSapUser [class]
@@ -386,6 +390,10 @@
     module.add_class('LteFlowId_t')
     ## lte-global-pathloss-database.h (module 'lte'): ns3::LteGlobalPathlossDatabase [class]
     module.add_class('LteGlobalPathlossDatabase', allow_subclassing=True)
+    ## lte-handover-management-sap.h (module 'lte'): ns3::LteHandoverManagementSapProvider [class]
+    module.add_class('LteHandoverManagementSapProvider', allow_subclassing=True)
+    ## lte-handover-management-sap.h (module 'lte'): ns3::LteHandoverManagementSapUser [class]
+    module.add_class('LteHandoverManagementSapUser', allow_subclassing=True)
     ## lte-mac-sap.h (module 'lte'): ns3::LteMacSapProvider [class]
     module.add_class('LteMacSapProvider', allow_subclassing=True)
     ## lte-mac-sap.h (module 'lte'): ns3::LteMacSapProvider::ReportBufferStatusParameters [struct]
@@ -426,6 +434,8 @@
     module.add_class('CarrierFreqEutra', outer_class=root_module['ns3::LteRrcSap'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::CellAccessRelatedInfo [struct]
     module.add_class('CellAccessRelatedInfo', outer_class=root_module['ns3::LteRrcSap'])
+    ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::CellSelectionInfo [struct]
+    module.add_class('CellSelectionInfo', outer_class=root_module['ns3::LteRrcSap'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::CellsToAddMod [struct]
     module.add_class('CellsToAddMod', outer_class=root_module['ns3::LteRrcSap'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::CgiInfo [struct]
@@ -891,7 +901,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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-fading-loss-model.h (module 'lte'): ns3::TraceFadingLossModel [class]
@@ -906,8 +916,6 @@
     module.add_class('UeManager', parent=root_module['ns3::Object'])
     ## lte-enb-rrc.h (module 'lte'): ns3::UeManager::State [enumeration]
     module.add_enum('State', ['INITIAL_RANDOM_ACCESS', 'CONNECTION_SETUP', 'CONNECTION_REJECTED', 'CONNECTED_NORMALLY', 'CONNECTION_RECONFIGURATION', 'CONNECTION_REESTABLISHMENT', 'HANDOVER_PREPARATION', 'HANDOVER_JOINING', 'HANDOVER_PATH_SWITCH', 'HANDOVER_LEAVING', 'NUM_STATES'], outer_class=root_module['ns3::UeManager'])
-    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure [class]
-    module.add_class('UeMeasure', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::UniformRandomVariable [class]
     module.add_class('UniformRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## ff-mac-common.h (module 'lte'): ns3::VendorSpecificValue [struct]
@@ -1060,10 +1068,12 @@
     module.add_class('LteAmc', parent=root_module['ns3::Object'])
     ## lte-amc.h (module 'lte'): ns3::LteAmc::AmcModel [enumeration]
     module.add_enum('AmcModel', ['PiroEW2010', 'MiErrorModel'], outer_class=root_module['ns3::LteAmc'])
+    ## lte-anr.h (module 'lte'): ns3::LteAnr [class]
+    module.add_class('LteAnr', parent=root_module['ns3::Object'])
     ## lte-control-messages.h (module 'lte'): ns3::LteControlMessage [class]
     module.add_class('LteControlMessage', parent=root_module['ns3::SimpleRefCount< ns3::LteControlMessage, ns3::empty, ns3::DefaultDeleter<ns3::LteControlMessage> >'])
     ## lte-control-messages.h (module 'lte'): ns3::LteControlMessage::MessageType [enumeration]
-    module.add_enum('MessageType', ['DL_DCI', 'UL_DCI', 'DL_CQI', 'UL_CQI', 'BSR', 'DL_HARQ', 'RACH_PREAMBLE', 'RAR', 'MIB'], outer_class=root_module['ns3::LteControlMessage'])
+    module.add_enum('MessageType', ['DL_DCI', 'UL_DCI', 'DL_CQI', 'UL_CQI', 'BSR', 'DL_HARQ', 'RACH_PREAMBLE', 'RAR', 'MIB', 'SIB1'], outer_class=root_module['ns3::LteControlMessage'])
     ## lte-enb-mac.h (module 'lte'): ns3::LteEnbMac [class]
     module.add_class('LteEnbMac', parent=root_module['ns3::Object'])
     ## lte-enb-rrc.h (module 'lte'): ns3::LteEnbRrc [class]
@@ -1074,6 +1084,8 @@
     module.add_class('LteEnbRrcProtocolIdeal', parent=root_module['ns3::Object'])
     ## lte-rrc-protocol-real.h (module 'lte'): ns3::LteEnbRrcProtocolReal [class]
     module.add_class('LteEnbRrcProtocolReal', parent=root_module['ns3::Object'])
+    ## lte-handover-algorithm.h (module 'lte'): ns3::LteHandoverAlgorithm [class]
+    module.add_class('LteHandoverAlgorithm', parent=root_module['ns3::Object'])
     ## lte-harq-phy.h (module 'lte'): ns3::LteHarqPhy [class]
     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]
@@ -1124,10 +1136,12 @@
     module.add_class('LteUeMac', parent=root_module['ns3::Object'])
     ## lte-ue-phy.h (module 'lte'): ns3::LteUePhy [class]
     module.add_class('LteUePhy', parent=root_module['ns3::LtePhy'])
+    ## lte-ue-phy.h (module 'lte'): ns3::LteUePhy::State [enumeration]
+    module.add_enum('State', ['CELL_SEARCH', 'SYNCHRONIZED', 'NUM_STATES'], outer_class=root_module['ns3::LteUePhy'])
     ## lte-ue-rrc.h (module 'lte'): ns3::LteUeRrc [class]
     module.add_class('LteUeRrc', parent=root_module['ns3::Object'])
     ## lte-ue-rrc.h (module 'lte'): ns3::LteUeRrc::State [enumeration]
-    module.add_enum('State', ['IDLE_CELL_SELECTION', 'IDLE_WAIT_SYSTEM_INFO', 'IDLE_CAMPED_NORMALLY', 'IDLE_RANDOM_ACCESS', 'IDLE_CONNECTING', 'CONNECTED_NORMALLY', 'CONNECTED_REESTABLISHING', 'CONNECTED_HANDOVER', 'NUM_STATES'], outer_class=root_module['ns3::LteUeRrc'])
+    module.add_enum('State', ['IDLE_START', 'IDLE_CELL_SEARCH', 'IDLE_WAIT_MIB_SIB1', 'IDLE_WAIT_MIB', 'IDLE_WAIT_SIB1', 'IDLE_CAMPED_NORMALLY', 'IDLE_WAIT_SIB2', 'IDLE_RANDOM_ACCESS', 'IDLE_CONNECTING', 'CONNECTED_NORMALLY', 'CONNECTED_HANDOVER', 'CONNECTED_PHY_PROBLEM', 'CONNECTED_REESTABLISHING', 'NUM_STATES'], outer_class=root_module['ns3::LteUeRrc'])
     ## lte-rrc-protocol-ideal.h (module 'lte'): ns3::LteUeRrcProtocolIdeal [class]
     module.add_class('LteUeRrcProtocolIdeal', parent=root_module['ns3::Object'])
     ## lte-rrc-protocol-real.h (module 'lte'): ns3::LteUeRrcProtocolReal [class]
@@ -1142,14 +1156,14 @@
     module.add_class('MibLteControlMessage', parent=root_module['ns3::LteControlMessage'])
     ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
     module.add_class('MobilityModel', import_from_module='ns.mobility', parent=root_module['ns3::Object'])
-    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation [class]
-    module.add_class('NeighbourRelation', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
     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> >'])
+    ## no-op-handover-algorithm.h (module 'lte'): ns3::NoOpHandoverAlgorithm [class]
+    module.add_class('NoOpHandoverAlgorithm', parent=root_module['ns3::LteHandoverAlgorithm'])
     ## 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]
@@ -1170,6 +1184,8 @@
     module.add_class('PhyStatsCalculator', parent=root_module['ns3::LteStatsCalculator'])
     ## phy-tx-stats-calculator.h (module 'lte'): ns3::PhyTxStatsCalculator [class]
     module.add_class('PhyTxStatsCalculator', parent=root_module['ns3::LteStatsCalculator'])
+    ## point-to-point-epc-helper.h (module 'lte'): ns3::PointToPointEpcHelper [class]
+    module.add_class('PointToPointEpcHelper', parent=root_module['ns3::EpcHelper'])
     ## 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]
@@ -1198,6 +1214,8 @@
     module.add_class('RrcUlCcchMessage', parent=root_module['ns3::RrcAsn1Header'])
     ## lte-rrc-header.h (module 'lte'): ns3::RrcUlDcchMessage [class]
     module.add_class('RrcUlDcchMessage', parent=root_module['ns3::RrcAsn1Header'])
+    ## lte-control-messages.h (module 'lte'): ns3::Sib1LteControlMessage [class]
+    module.add_class('Sib1LteControlMessage', parent=root_module['ns3::LteControlMessage'])
     ## spectrum-channel.h (module 'spectrum'): ns3::SpectrumChannel [class]
     module.add_class('SpectrumChannel', import_from_module='ns.spectrum', parent=root_module['ns3::Channel'])
     ## lte-vendor-specific-parameters.h (module 'lte'): ns3::SrsCqiRntiVsp [class]
@@ -1234,6 +1252,10 @@
     module.add_class('Vector3DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## virtual-net-device.h (module 'virtual-net-device'): ns3::VirtualNetDevice [class]
     module.add_class('VirtualNetDevice', import_from_module='ns.virtual_net_device', parent=root_module['ns3::NetDevice'])
+    ## a2-a4-rsrq-handover-algorithm.h (module 'lte'): ns3::A2A4RsrqHandoverAlgorithm [class]
+    module.add_class('A2A4RsrqHandoverAlgorithm', parent=root_module['ns3::LteHandoverAlgorithm'])
+    ## a3-rsrp-handover-algorithm.h (module 'lte'): ns3::A3RsrpHandoverAlgorithm [class]
+    module.add_class('A3RsrpHandoverAlgorithm', parent=root_module['ns3::LteHandoverAlgorithm'])
     ## 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]
@@ -1664,6 +1686,8 @@
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
     register_Ns3LogComponent_methods(root_module, root_module['ns3::LogComponent'])
     register_Ns3LogicalChannelConfigListElement_s_methods(root_module, root_module['ns3::LogicalChannelConfigListElement_s'])
+    register_Ns3LteAnrSapProvider_methods(root_module, root_module['ns3::LteAnrSapProvider'])
+    register_Ns3LteAnrSapUser_methods(root_module, root_module['ns3::LteAnrSapUser'])
     register_Ns3LteAsSapProvider_methods(root_module, root_module['ns3::LteAsSapProvider'])
     register_Ns3LteAsSapUser_methods(root_module, root_module['ns3::LteAsSapUser'])
     register_Ns3LteEnbCmacSapProvider_methods(root_module, root_module['ns3::LteEnbCmacSapProvider'])
@@ -1680,6 +1704,8 @@
     register_Ns3LteFfConverter_methods(root_module, root_module['ns3::LteFfConverter'])
     register_Ns3LteFlowId_t_methods(root_module, root_module['ns3::LteFlowId_t'])
     register_Ns3LteGlobalPathlossDatabase_methods(root_module, root_module['ns3::LteGlobalPathlossDatabase'])
+    register_Ns3LteHandoverManagementSapProvider_methods(root_module, root_module['ns3::LteHandoverManagementSapProvider'])
+    register_Ns3LteHandoverManagementSapUser_methods(root_module, root_module['ns3::LteHandoverManagementSapUser'])
     register_Ns3LteMacSapProvider_methods(root_module, root_module['ns3::LteMacSapProvider'])
     register_Ns3LteMacSapProviderReportBufferStatusParameters_methods(root_module, root_module['ns3::LteMacSapProvider::ReportBufferStatusParameters'])
     register_Ns3LteMacSapProviderTransmitPduParameters_methods(root_module, root_module['ns3::LteMacSapProvider::TransmitPduParameters'])
@@ -1699,6 +1725,7 @@
     register_Ns3LteRrcSapCarrierBandwidthEutra_methods(root_module, root_module['ns3::LteRrcSap::CarrierBandwidthEutra'])
     register_Ns3LteRrcSapCarrierFreqEutra_methods(root_module, root_module['ns3::LteRrcSap::CarrierFreqEutra'])
     register_Ns3LteRrcSapCellAccessRelatedInfo_methods(root_module, root_module['ns3::LteRrcSap::CellAccessRelatedInfo'])
+    register_Ns3LteRrcSapCellSelectionInfo_methods(root_module, root_module['ns3::LteRrcSap::CellSelectionInfo'])
     register_Ns3LteRrcSapCellsToAddMod_methods(root_module, root_module['ns3::LteRrcSap::CellsToAddMod'])
     register_Ns3LteRrcSapCgiInfo_methods(root_module, root_module['ns3::LteRrcSap::CgiInfo'])
     register_Ns3LteRrcSapDrbToAddMod_methods(root_module, root_module['ns3::LteRrcSap::DrbToAddMod'])
@@ -1895,7 +1922,6 @@
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
     register_Ns3TriangularRandomVariable_methods(root_module, root_module['ns3::TriangularRandomVariable'])
     register_Ns3UeManager_methods(root_module, root_module['ns3::UeManager'])
-    register_Ns3UeMeasure_methods(root_module, root_module['ns3::UeMeasure'])
     register_Ns3UniformRandomVariable_methods(root_module, root_module['ns3::UniformRandomVariable'])
     register_Ns3VendorSpecificValue_methods(root_module, root_module['ns3::VendorSpecificValue'])
     register_Ns3WeibullRandomVariable_methods(root_module, root_module['ns3::WeibullRandomVariable'])
@@ -1965,11 +1991,13 @@
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
     register_Ns3LteAmc_methods(root_module, root_module['ns3::LteAmc'])
+    register_Ns3LteAnr_methods(root_module, root_module['ns3::LteAnr'])
     register_Ns3LteControlMessage_methods(root_module, root_module['ns3::LteControlMessage'])
     register_Ns3LteEnbMac_methods(root_module, root_module['ns3::LteEnbMac'])
     register_Ns3LteEnbRrc_methods(root_module, root_module['ns3::LteEnbRrc'])
     register_Ns3LteEnbRrcProtocolIdeal_methods(root_module, root_module['ns3::LteEnbRrcProtocolIdeal'])
     register_Ns3LteEnbRrcProtocolReal_methods(root_module, root_module['ns3::LteEnbRrcProtocolReal'])
+    register_Ns3LteHandoverAlgorithm_methods(root_module, root_module['ns3::LteHandoverAlgorithm'])
     register_Ns3LteHarqPhy_methods(root_module, root_module['ns3::LteHarqPhy'])
     register_Ns3LteHelper_methods(root_module, root_module['ns3::LteHelper'])
     register_Ns3LteHexGridEnbTopologyHelper_methods(root_module, root_module['ns3::LteHexGridEnbTopologyHelper'])
@@ -2001,9 +2029,9 @@
     register_Ns3MacStatsCalculator_methods(root_module, root_module['ns3::MacStatsCalculator'])
     register_Ns3MibLteControlMessage_methods(root_module, root_module['ns3::MibLteControlMessage'])
     register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
-    register_Ns3NeighbourRelation_methods(root_module, root_module['ns3::NeighbourRelation'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
+    register_Ns3NoOpHandoverAlgorithm_methods(root_module, root_module['ns3::NoOpHandoverAlgorithm'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
@@ -2014,6 +2042,7 @@
     register_Ns3PhyRxStatsCalculator_methods(root_module, root_module['ns3::PhyRxStatsCalculator'])
     register_Ns3PhyStatsCalculator_methods(root_module, root_module['ns3::PhyStatsCalculator'])
     register_Ns3PhyTxStatsCalculator_methods(root_module, root_module['ns3::PhyTxStatsCalculator'])
+    register_Ns3PointToPointEpcHelper_methods(root_module, root_module['ns3::PointToPointEpcHelper'])
     register_Ns3PointerChecker_methods(root_module, root_module['ns3::PointerChecker'])
     register_Ns3PointerValue_methods(root_module, root_module['ns3::PointerValue'])
     register_Ns3PssFfMacScheduler_methods(root_module, root_module['ns3::PssFfMacScheduler'])
@@ -2028,6 +2057,7 @@
     register_Ns3RrcDlDcchMessage_methods(root_module, root_module['ns3::RrcDlDcchMessage'])
     register_Ns3RrcUlCcchMessage_methods(root_module, root_module['ns3::RrcUlCcchMessage'])
     register_Ns3RrcUlDcchMessage_methods(root_module, root_module['ns3::RrcUlDcchMessage'])
+    register_Ns3Sib1LteControlMessage_methods(root_module, root_module['ns3::Sib1LteControlMessage'])
     register_Ns3SpectrumChannel_methods(root_module, root_module['ns3::SpectrumChannel'])
     register_Ns3SrsCqiRntiVsp_methods(root_module, root_module['ns3::SrsCqiRntiVsp'])
     register_Ns3StringChecker_methods(root_module, root_module['ns3::StringChecker'])
@@ -2046,6 +2076,8 @@
     register_Ns3Vector3DChecker_methods(root_module, root_module['ns3::Vector3DChecker'])
     register_Ns3Vector3DValue_methods(root_module, root_module['ns3::Vector3DValue'])
     register_Ns3VirtualNetDevice_methods(root_module, root_module['ns3::VirtualNetDevice'])
+    register_Ns3A2A4RsrqHandoverAlgorithm_methods(root_module, root_module['ns3::A2A4RsrqHandoverAlgorithm'])
+    register_Ns3A3RsrpHandoverAlgorithm_methods(root_module, root_module['ns3::A3RsrpHandoverAlgorithm'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BsrLteControlMessage_methods(root_module, root_module['ns3::BsrLteControlMessage'])
@@ -3143,10 +3175,10 @@
                    'void', 
                    [param('uint64_t', 'mmeUeS1Id'), param('uint16_t', 'enbUeS1Id'), param('std::list< ns3::EpcS1apSapMme::ErabSetupItem >', 'erabSetupList')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## epc-s1ap-sap.h (module 'lte'): void ns3::EpcS1apSapMme::InitialUeMessage(uint64_t mmeUeS1Id, uint16_t enbUeS1Id, uint64_t imsi, uint16_t ecgi) [member function]
+    ## epc-s1ap-sap.h (module 'lte'): void ns3::EpcS1apSapMme::InitialUeMessage(uint64_t mmeUeS1Id, uint16_t enbUeS1Id, uint64_t stmsi, uint16_t ecgi) [member function]
     cls.add_method('InitialUeMessage', 
                    'void', 
-                   [param('uint64_t', 'mmeUeS1Id'), param('uint16_t', 'enbUeS1Id'), param('uint64_t', 'imsi'), param('uint16_t', 'ecgi')], 
+                   [param('uint64_t', 'mmeUeS1Id'), param('uint16_t', 'enbUeS1Id'), param('uint64_t', 'stmsi'), param('uint16_t', 'ecgi')], 
                    is_pure_virtual=True, is_virtual=True)
     ## epc-s1ap-sap.h (module 'lte'): void ns3::EpcS1apSapMme::PathSwitchRequest(uint64_t enbUeS1Id, uint64_t mmeUeS1Id, uint16_t gci, std::list<ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem, std::allocator<ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem> > erabToBeSwitchedInDownlinkList) [member function]
     cls.add_method('PathSwitchRequest', 
@@ -3609,6 +3641,16 @@
     cls.add_constructor([])
     ## lte-common.h (module 'lte'): ns3::EutranMeasurementMapping::EutranMeasurementMapping(ns3::EutranMeasurementMapping const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EutranMeasurementMapping const &', 'arg0')])
+    ## lte-common.h (module 'lte'): static int8_t ns3::EutranMeasurementMapping::ActualA3Offset2IeValue(double a3OffsetDb) [member function]
+    cls.add_method('ActualA3Offset2IeValue', 
+                   'int8_t', 
+                   [param('double', 'a3OffsetDb')], 
+                   is_static=True)
+    ## lte-common.h (module 'lte'): static uint8_t ns3::EutranMeasurementMapping::ActualHysteresis2IeValue(double hysteresisDb) [member function]
+    cls.add_method('ActualHysteresis2IeValue', 
+                   'uint8_t', 
+                   [param('double', 'hysteresisDb')], 
+                   is_static=True)
     ## lte-common.h (module 'lte'): static uint8_t ns3::EutranMeasurementMapping::Db2RsrqRange(double db) [member function]
     cls.add_method('Db2RsrqRange', 
                    'uint8_t', 
@@ -3619,6 +3661,26 @@
                    'uint8_t', 
                    [param('double', 'dbm')], 
                    is_static=True)
+    ## lte-common.h (module 'lte'): static double ns3::EutranMeasurementMapping::IeValue2ActualA3Offset(int8_t a3OffsetIeValue) [member function]
+    cls.add_method('IeValue2ActualA3Offset', 
+                   'double', 
+                   [param('int8_t', 'a3OffsetIeValue')], 
+                   is_static=True)
+    ## lte-common.h (module 'lte'): static double ns3::EutranMeasurementMapping::IeValue2ActualHysteresis(uint8_t hysteresisIeValue) [member function]
+    cls.add_method('IeValue2ActualHysteresis', 
+                   'double', 
+                   [param('uint8_t', 'hysteresisIeValue')], 
+                   is_static=True)
+    ## lte-common.h (module 'lte'): static double ns3::EutranMeasurementMapping::IeValue2ActualQQualMin(int8_t qQualMinIeValue) [member function]
+    cls.add_method('IeValue2ActualQQualMin', 
+                   'double', 
+                   [param('int8_t', 'qQualMinIeValue')], 
+                   is_static=True)
+    ## lte-common.h (module 'lte'): static double ns3::EutranMeasurementMapping::IeValue2ActualQRxLevMin(int8_t qRxLevMinIeValue) [member function]
+    cls.add_method('IeValue2ActualQRxLevMin', 
+                   'double', 
+                   [param('int8_t', 'qRxLevMinIeValue')], 
+                   is_static=True)
     ## lte-common.h (module 'lte'): static double ns3::EutranMeasurementMapping::QuantizeRsrp(double v) [member function]
     cls.add_method('QuantizeRsrp', 
                    'double', 
@@ -4939,10 +5001,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -5210,6 +5273,50 @@
     cls.add_instance_attribute('m_qosBearerType', 'ns3::LogicalChannelConfigListElement_s::QosBearerType_e', is_const=False)
     return
 
+def register_Ns3LteAnrSapProvider_methods(root_module, cls):
+    ## lte-anr-sap.h (module 'lte'): ns3::LteAnrSapProvider::LteAnrSapProvider() [constructor]
+    cls.add_constructor([])
+    ## lte-anr-sap.h (module 'lte'): ns3::LteAnrSapProvider::LteAnrSapProvider(ns3::LteAnrSapProvider const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LteAnrSapProvider const &', 'arg0')])
+    ## lte-anr-sap.h (module 'lte'): void ns3::LteAnrSapProvider::AddNeighbourRelation(uint16_t cellId) [member function]
+    cls.add_method('AddNeighbourRelation', 
+                   'void', 
+                   [param('uint16_t', 'cellId')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## lte-anr-sap.h (module 'lte'): bool ns3::LteAnrSapProvider::GetNoHo(uint16_t cellId) const [member function]
+    cls.add_method('GetNoHo', 
+                   'bool', 
+                   [param('uint16_t', 'cellId')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## lte-anr-sap.h (module 'lte'): bool ns3::LteAnrSapProvider::GetNoRemove(uint16_t cellId) const [member function]
+    cls.add_method('GetNoRemove', 
+                   'bool', 
+                   [param('uint16_t', 'cellId')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## lte-anr-sap.h (module 'lte'): bool ns3::LteAnrSapProvider::GetNoX2(uint16_t cellId) const [member function]
+    cls.add_method('GetNoX2', 
+                   'bool', 
+                   [param('uint16_t', 'cellId')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## lte-anr-sap.h (module 'lte'): void ns3::LteAnrSapProvider::ReportUeMeas(ns3::LteRrcSap::MeasResults measResults) [member function]
+    cls.add_method('ReportUeMeas', 
+                   'void', 
+                   [param('ns3::LteRrcSap::MeasResults', 'measResults')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3LteAnrSapUser_methods(root_module, cls):
+    ## lte-anr-sap.h (module 'lte'): ns3::LteAnrSapUser::LteAnrSapUser() [constructor]
+    cls.add_constructor([])
+    ## lte-anr-sap.h (module 'lte'): ns3::LteAnrSapUser::LteAnrSapUser(ns3::LteAnrSapUser const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LteAnrSapUser const &', 'arg0')])
+    ## lte-anr-sap.h (module 'lte'): uint8_t ns3::LteAnrSapUser::AddUeMeasReportConfigForAnr(ns3::LteRrcSap::ReportConfigEutra reportConfig) [member function]
+    cls.add_method('AddUeMeasReportConfigForAnr', 
+                   'uint8_t', 
+                   [param('ns3::LteRrcSap::ReportConfigEutra', 'reportConfig')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
 def register_Ns3LteAsSapProvider_methods(root_module, cls):
     ## lte-as-sap.h (module 'lte'): ns3::LteAsSapProvider::LteAsSapProvider() [constructor]
     cls.add_constructor([])
@@ -5225,16 +5332,26 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## lte-as-sap.h (module 'lte'): void ns3::LteAsSapProvider::ForceCampedOnEnb(uint16_t cellId, uint16_t earfcn) [member function]
+    ## lte-as-sap.h (module 'lte'): void ns3::LteAsSapProvider::ForceCampedOnEnb(uint16_t cellId, uint16_t dlEarfcn) [member function]
     cls.add_method('ForceCampedOnEnb', 
                    'void', 
-                   [param('uint16_t', 'cellId'), param('uint16_t', 'earfcn')], 
+                   [param('uint16_t', 'cellId'), param('uint16_t', 'dlEarfcn')], 
                    is_pure_virtual=True, is_virtual=True)
     ## lte-as-sap.h (module 'lte'): void ns3::LteAsSapProvider::SendData(ns3::Ptr<ns3::Packet> packet, uint8_t bid) [member function]
     cls.add_method('SendData', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'packet'), param('uint8_t', 'bid')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## lte-as-sap.h (module 'lte'): void ns3::LteAsSapProvider::SetCsgWhiteList(uint32_t csgId) [member function]
+    cls.add_method('SetCsgWhiteList', 
+                   'void', 
+                   [param('uint32_t', 'csgId')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## lte-as-sap.h (module 'lte'): void ns3::LteAsSapProvider::StartCellSelection(uint16_t dlEarfcn) [member function]
+    cls.add_method('StartCellSelection', 
+                   'void', 
+                   [param('uint16_t', 'dlEarfcn')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3LteAsSapUser_methods(root_module, cls):
@@ -5451,6 +5568,11 @@
                    'void', 
                    [param('uint16_t', 'rnti'), param('uint16_t', 'srsCi')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## lte-enb-cphy-sap.h (module 'lte'): void ns3::LteEnbCphySapProvider::SetSystemInformationBlockType1(ns3::LteRrcSap::SystemInformationBlockType1 sib1) [member function]
+    cls.add_method('SetSystemInformationBlockType1', 
+                   'void', 
+                   [param('ns3::LteRrcSap::SystemInformationBlockType1', 'sib1')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## lte-enb-cphy-sap.h (module 'lte'): void ns3::LteEnbCphySapProvider::SetTransmissionMode(uint16_t rnti, uint8_t txMode) [member function]
     cls.add_method('SetTransmissionMode', 
                    'void', 
@@ -5586,6 +5708,35 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3LteHandoverManagementSapProvider_methods(root_module, cls):
+    ## lte-handover-management-sap.h (module 'lte'): ns3::LteHandoverManagementSapProvider::LteHandoverManagementSapProvider() [constructor]
+    cls.add_constructor([])
+    ## lte-handover-management-sap.h (module 'lte'): ns3::LteHandoverManagementSapProvider::LteHandoverManagementSapProvider(ns3::LteHandoverManagementSapProvider const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LteHandoverManagementSapProvider const &', 'arg0')])
+    ## lte-handover-management-sap.h (module 'lte'): void ns3::LteHandoverManagementSapProvider::ReportUeMeas(uint16_t rnti, ns3::LteRrcSap::MeasResults measResults) [member function]
+    cls.add_method('ReportUeMeas', 
+                   'void', 
+                   [param('uint16_t', 'rnti'), param('ns3::LteRrcSap::MeasResults', 'measResults')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3LteHandoverManagementSapUser_methods(root_module, cls):
+    ## lte-handover-management-sap.h (module 'lte'): ns3::LteHandoverManagementSapUser::LteHandoverManagementSapUser() [constructor]
+    cls.add_constructor([])
+    ## lte-handover-management-sap.h (module 'lte'): ns3::LteHandoverManagementSapUser::LteHandoverManagementSapUser(ns3::LteHandoverManagementSapUser const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LteHandoverManagementSapUser const &', 'arg0')])
+    ## lte-handover-management-sap.h (module 'lte'): uint8_t ns3::LteHandoverManagementSapUser::AddUeMeasReportConfigForHandover(ns3::LteRrcSap::ReportConfigEutra reportConfig) [member function]
+    cls.add_method('AddUeMeasReportConfigForHandover', 
+                   'uint8_t', 
+                   [param('ns3::LteRrcSap::ReportConfigEutra', 'reportConfig')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## lte-handover-management-sap.h (module 'lte'): void ns3::LteHandoverManagementSapUser::TriggerHandover(uint16_t rnti, uint16_t targetCellId) [member function]
+    cls.add_method('TriggerHandover', 
+                   'void', 
+                   [param('uint16_t', 'rnti'), param('uint16_t', 'targetCellId')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
 def register_Ns3LteMacSapProvider_methods(root_module, cls):
     ## lte-mac-sap.h (module 'lte'): ns3::LteMacSapProvider::LteMacSapProvider() [constructor]
     cls.add_constructor([])
@@ -5864,6 +6015,17 @@
     cls.add_instance_attribute('plmnIdentityInfo', 'ns3::LteRrcSap::PlmnIdentityInfo', is_const=False)
     return
 
+def register_Ns3LteRrcSapCellSelectionInfo_methods(root_module, cls):
+    ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::CellSelectionInfo::CellSelectionInfo() [constructor]
+    cls.add_constructor([])
+    ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::CellSelectionInfo::CellSelectionInfo(ns3::LteRrcSap::CellSelectionInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LteRrcSap::CellSelectionInfo const &', 'arg0')])
+    ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::CellSelectionInfo::qQualMin [variable]
+    cls.add_instance_attribute('qQualMin', 'int8_t', is_const=False)
+    ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::CellSelectionInfo::qRxLevMin [variable]
+    cls.add_instance_attribute('qRxLevMin', 'int8_t', is_const=False)
+    return
+
 def register_Ns3LteRrcSapCellsToAddMod_methods(root_module, cls):
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::CellsToAddMod::CellsToAddMod() [constructor]
     cls.add_constructor([])
@@ -6276,10 +6438,10 @@
     return
 
 def register_Ns3LteRrcSapReportConfigEutra_methods(root_module, cls):
-    ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra::ReportConfigEutra() [constructor]
-    cls.add_constructor([])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra::ReportConfigEutra(ns3::LteRrcSap::ReportConfigEutra const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LteRrcSap::ReportConfigEutra const &', 'arg0')])
+    ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra::ReportConfigEutra() [constructor]
+    cls.add_constructor([])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra::a3Offset [variable]
     cls.add_instance_attribute('a3Offset', 'int8_t', is_const=False)
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra::hysteresis [variable]
@@ -6504,6 +6666,8 @@
     cls.add_constructor([param('ns3::LteRrcSap::SystemInformationBlockType1 const &', 'arg0')])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::SystemInformationBlockType1::cellAccessRelatedInfo [variable]
     cls.add_instance_attribute('cellAccessRelatedInfo', 'ns3::LteRrcSap::CellAccessRelatedInfo', is_const=False)
+    ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::SystemInformationBlockType1::cellSelectionInfo [variable]
+    cls.add_instance_attribute('cellSelectionInfo', 'ns3::LteRrcSap::CellSelectionInfo', is_const=False)
     return
 
 def register_Ns3LteRrcSapSystemInformationBlockType2_methods(root_module, cls):
@@ -6712,8 +6876,18 @@
                    'void', 
                    [param('uint8_t', 'txMode')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapProvider::SyncronizeWithEnb(uint16_t cellId, uint16_t dlEarfcn) [member function]
-    cls.add_method('SyncronizeWithEnb', 
+    ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapProvider::StartCellSearch(uint16_t dlEarfcn) [member function]
+    cls.add_method('StartCellSearch', 
+                   'void', 
+                   [param('uint16_t', 'dlEarfcn')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapProvider::SynchronizeWithEnb(uint16_t cellId) [member function]
+    cls.add_method('SynchronizeWithEnb', 
+                   'void', 
+                   [param('uint16_t', 'cellId')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapProvider::SynchronizeWithEnb(uint16_t cellId, uint16_t dlEarfcn) [member function]
+    cls.add_method('SynchronizeWithEnb', 
                    'void', 
                    [param('uint16_t', 'cellId'), param('uint16_t', 'dlEarfcn')], 
                    is_pure_virtual=True, is_virtual=True)
@@ -6724,10 +6898,15 @@
     cls.add_constructor([])
     ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::LteUeCphySapUser(ns3::LteUeCphySapUser const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LteUeCphySapUser const &', 'arg0')])
-    ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapUser::RecvMasterInformationBlock(ns3::LteRrcSap::MasterInformationBlock mib) [member function]
+    ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapUser::RecvMasterInformationBlock(uint16_t cellId, ns3::LteRrcSap::MasterInformationBlock mib) [member function]
     cls.add_method('RecvMasterInformationBlock', 
                    'void', 
-                   [param('ns3::LteRrcSap::MasterInformationBlock', 'mib')], 
+                   [param('uint16_t', 'cellId'), param('ns3::LteRrcSap::MasterInformationBlock', 'mib')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapUser::RecvSystemInformationBlockType1(uint16_t cellId, ns3::LteRrcSap::SystemInformationBlockType1 sib1) [member function]
+    cls.add_method('RecvSystemInformationBlockType1', 
+                   'void', 
+                   [param('uint16_t', 'cellId'), param('ns3::LteRrcSap::SystemInformationBlockType1', 'sib1')], 
                    is_pure_virtual=True, is_virtual=True)
     ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapUser::ReportUeMeasurements(ns3::LteUeCphySapUser::UeMeasurementsParameters params) [member function]
     cls.add_method('ReportUeMeasurements', 
@@ -6812,11 +6991,6 @@
                    'void', 
                    [param('ns3::LteUeRrcSapProvider::CompleteSetupParameters', 'params')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## lte-rrc-sap.h (module 'lte'): void ns3::LteUeRrcSapProvider::RecvMasterInformationBlock(ns3::LteRrcSap::MasterInformationBlock msg) [member function]
-    cls.add_method('RecvMasterInformationBlock', 
-                   'void', 
-                   [param('ns3::LteRrcSap::MasterInformationBlock', 'msg')], 
-                   is_pure_virtual=True, is_virtual=True)
     ## lte-rrc-sap.h (module 'lte'): void ns3::LteUeRrcSapProvider::RecvRrcConnectionReconfiguration(ns3::LteRrcSap::RrcConnectionReconfiguration msg) [member function]
     cls.add_method('RecvRrcConnectionReconfiguration', 
                    'void', 
@@ -6852,11 +7026,6 @@
                    'void', 
                    [param('ns3::LteRrcSap::SystemInformation', 'msg')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## lte-rrc-sap.h (module 'lte'): void ns3::LteUeRrcSapProvider::RecvSystemInformationBlockType1(ns3::LteRrcSap::SystemInformationBlockType1 msg) [member function]
-    cls.add_method('RecvSystemInformationBlockType1', 
-                   'void', 
-                   [param('ns3::LteRrcSap::SystemInformationBlockType1', 'msg')], 
-                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3LteUeRrcSapProviderCompleteSetupParameters_methods(root_module, cls):
@@ -8833,10 +9002,10 @@
     cls.add_method('SetBid', 
                    'void', 
                    [param('uint8_t', 'bid')])
-    ## eps-bearer-tag.h (module 'lte'): void ns3::EpsBearerTag::SetRnti(uint16_t tid) [member function]
+    ## eps-bearer-tag.h (module 'lte'): void ns3::EpsBearerTag::SetRnti(uint16_t rnti) [member function]
     cls.add_method('SetRnti', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'rnti')])
     return
 
 def register_Ns3Header_methods(root_module, cls):
@@ -9262,11 +9431,6 @@
                    'void', 
                    [param('ns3::LteRrcSap::SystemInformation', 'msg')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## lte-rrc-sap.h (module 'lte'): void ns3::LteEnbRrcSapUser::SendSystemInformationBlockType1(ns3::LteRrcSap::SystemInformationBlockType1 msg) [member function]
-    cls.add_method('SendSystemInformationBlockType1', 
-                   'void', 
-                   [param('ns3::LteRrcSap::SystemInformationBlockType1', 'msg')], 
-                   is_pure_virtual=True, is_virtual=True)
     ## lte-rrc-sap.h (module 'lte'): void ns3::LteEnbRrcSapUser::SetupUe(uint16_t rnti, ns3::LteEnbRrcSapUser::SetupUeParameters params) [member function]
     cls.add_method('SetupUe', 
                    'void', 
@@ -9438,18 +9602,18 @@
                    'void', 
                    [param('ns3::TagBuffer', 'i')], 
                    is_const=True, is_virtual=True)
-    ## lte-radio-bearer-tag.h (module 'lte'): void ns3::LteRadioBearerTag::SetLayer(uint8_t lcid) [member function]
+    ## lte-radio-bearer-tag.h (module 'lte'): void ns3::LteRadioBearerTag::SetLayer(uint8_t layer) [member function]
     cls.add_method('SetLayer', 
                    'void', 
-                   [param('uint8_t', 'lcid')])
+                   [param('uint8_t', 'layer')])
     ## lte-radio-bearer-tag.h (module 'lte'): void ns3::LteRadioBearerTag::SetLcid(uint8_t lcid) [member function]
     cls.add_method('SetLcid', 
                    'void', 
                    [param('uint8_t', 'lcid')])
-    ## lte-radio-bearer-tag.h (module 'lte'): void ns3::LteRadioBearerTag::SetRnti(uint16_t tid) [member function]
+    ## lte-radio-bearer-tag.h (module 'lte'): void ns3::LteRadioBearerTag::SetRnti(uint16_t rnti) [member function]
     cls.add_method('SetRnti', 
                    'void', 
-                   [param('uint16_t', 'tid')])
+                   [param('uint16_t', 'rnti')])
     return
 
 def register_Ns3LteRlcAmHeader_methods(root_module, cls):
@@ -11203,6 +11367,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -11213,6 +11382,11 @@
                    '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', 
@@ -11228,6 +11402,11 @@
                    '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', 
@@ -11253,6 +11432,11 @@
                    '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', 
@@ -11467,30 +11651,34 @@
     cls.add_method('GetErabList', 
                    'std::vector< ns3::EpcX2Sap::ErabToBeSetupItem >', 
                    [])
-    ## lte-enb-rrc.h (module 'lte'): uint64_t ns3::UeManager::GetImsi() [member function]
+    ## lte-enb-rrc.h (module 'lte'): uint64_t ns3::UeManager::GetImsi() const [member function]
     cls.add_method('GetImsi', 
                    'uint64_t', 
-                   [])
+                   [], 
+                   is_const=True)
     ## lte-enb-rrc.h (module 'lte'): ns3::LteRrcSap::RadioResourceConfigDedicated ns3::UeManager::GetRadioResourceConfigForHandoverPreparationInfo() [member function]
     cls.add_method('GetRadioResourceConfigForHandoverPreparationInfo', 
                    'ns3::LteRrcSap::RadioResourceConfigDedicated', 
                    [])
-    ## lte-enb-rrc.h (module 'lte'): uint16_t ns3::UeManager::GetRnti() [member function]
+    ## lte-enb-rrc.h (module 'lte'): uint16_t ns3::UeManager::GetRnti() const [member function]
     cls.add_method('GetRnti', 
                    'uint16_t', 
-                   [])
+                   [], 
+                   is_const=True)
     ## lte-enb-rrc.h (module 'lte'): ns3::LteRrcSap::RrcConnectionReconfiguration ns3::UeManager::GetRrcConnectionReconfigurationForHandover() [member function]
     cls.add_method('GetRrcConnectionReconfigurationForHandover', 
                    'ns3::LteRrcSap::RrcConnectionReconfiguration', 
                    [])
-    ## lte-enb-rrc.h (module 'lte'): uint16_t ns3::UeManager::GetSrsConfigurationIndex() [member function]
+    ## lte-enb-rrc.h (module 'lte'): uint16_t ns3::UeManager::GetSrsConfigurationIndex() const [member function]
     cls.add_method('GetSrsConfigurationIndex', 
                    'uint16_t', 
-                   [])
-    ## lte-enb-rrc.h (module 'lte'): ns3::UeManager::State ns3::UeManager::GetState() [member function]
+                   [], 
+                   is_const=True)
+    ## lte-enb-rrc.h (module 'lte'): ns3::UeManager::State ns3::UeManager::GetState() const [member function]
     cls.add_method('GetState', 
                    'ns3::UeManager::State', 
-                   [])
+                   [], 
+                   is_const=True)
     ## lte-enb-rrc.h (module 'lte'): static ns3::TypeId ns3::UeManager::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -11592,19 +11780,6 @@
                    visibility='protected', is_virtual=True)
     return
 
-def register_Ns3UeMeasure_methods(root_module, cls):
-    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::UeMeasure() [constructor]
-    cls.add_constructor([])
-    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::UeMeasure(ns3::UeMeasure const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::UeMeasure const &', 'arg0')])
-    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::m_cellId [variable]
-    cls.add_instance_attribute('m_cellId', 'uint16_t', is_const=False)
-    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::m_rsrp [variable]
-    cls.add_instance_attribute('m_rsrp', 'uint8_t', is_const=False)
-    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::m_rsrq [variable]
-    cls.add_instance_attribute('m_rsrq', 'uint8_t', is_const=False)
-    return
-
 def register_Ns3UniformRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::UniformRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -12757,23 +12932,28 @@
     ## 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]
     cls.add_method('ActivateEpsBearer', 
                    'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'ueLteDevice'), param('uint64_t', 'imsi'), param('ns3::Ptr< ns3::EpcTft >', 'tft'), param('ns3::EpsBearer', 'bearer')])
+                   [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]
     cls.add_method('AddEnb', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'enbNode'), param('ns3::Ptr< ns3::NetDevice >', 'lteEnbNetDevice'), param('uint16_t', 'cellId')])
+                   [param('ns3::Ptr< ns3::Node >', 'enbNode'), param('ns3::Ptr< ns3::NetDevice >', 'lteEnbNetDevice'), param('uint16_t', 'cellId')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## epc-helper.h (module 'lte'): void ns3::EpcHelper::AddUe(ns3::Ptr<ns3::NetDevice> ueLteDevice, uint64_t imsi) [member function]
     cls.add_method('AddUe', 
                    'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'ueLteDevice'), param('uint64_t', 'imsi')])
+                   [param('ns3::Ptr< ns3::NetDevice >', 'ueLteDevice'), param('uint64_t', 'imsi')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## epc-helper.h (module 'lte'): void ns3::EpcHelper::AddX2Interface(ns3::Ptr<ns3::Node> enbNode1, ns3::Ptr<ns3::Node> enbNode2) [member function]
     cls.add_method('AddX2Interface', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'enbNode1'), param('ns3::Ptr< ns3::Node >', 'enbNode2')])
+                   [param('ns3::Ptr< ns3::Node >', 'enbNode1'), param('ns3::Ptr< ns3::Node >', 'enbNode2')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## epc-helper.h (module 'lte'): ns3::Ipv4InterfaceContainer ns3::EpcHelper::AssignUeIpv4Address(ns3::NetDeviceContainer ueDevices) [member function]
     cls.add_method('AssignUeIpv4Address', 
                    'ns3::Ipv4InterfaceContainer', 
-                   [param('ns3::NetDeviceContainer', 'ueDevices')])
+                   [param('ns3::NetDeviceContainer', 'ueDevices')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## epc-helper.h (module 'lte'): void ns3::EpcHelper::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -12782,7 +12962,8 @@
     ## epc-helper.h (module 'lte'): ns3::Ptr<ns3::Node> ns3::EpcHelper::GetPgwNode() [member function]
     cls.add_method('GetPgwNode', 
                    'ns3::Ptr< ns3::Node >', 
-                   [])
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     ## epc-helper.h (module 'lte'): static ns3::TypeId ns3::EpcHelper::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -12791,7 +12972,8 @@
     ## epc-helper.h (module 'lte'): ns3::Ipv4Address ns3::EpcHelper::GetUeDefaultGatewayAddress() [member function]
     cls.add_method('GetUeDefaultGatewayAddress', 
                    'ns3::Ipv4Address', 
-                   [])
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3EpcMme_methods(root_module, cls):
@@ -12803,10 +12985,10 @@
     cls.add_method('AddBearer', 
                    'void', 
                    [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 egci, ns3::Ipv4Address enbS1UAddr, ns3::EpcS1apSapEnb * enbS1apSap) [member function]
+    ## epc-mme.h (module 'lte'): void ns3::EpcMme::AddEnb(uint16_t ecgi, ns3::Ipv4Address enbS1UAddr, ns3::EpcS1apSapEnb * enbS1apSap) [member function]
     cls.add_method('AddEnb', 
                    'void', 
-                   [param('uint16_t', 'egci'), param('ns3::Ipv4Address', 'enbS1UAddr'), param('ns3::EpcS1apSapEnb *', 'enbS1apSap')])
+                   [param('uint16_t', 'ecgi'), param('ns3::Ipv4Address', 'enbS1UAddr'), param('ns3::EpcS1apSapEnb *', 'enbS1apSap')])
     ## epc-mme.h (module 'lte'): void ns3::EpcMme::AddUe(uint64_t imsi) [member function]
     cls.add_method('AddUe', 
                    'void', 
@@ -12971,10 +13153,14 @@
     cls.add_method('ActivateEpsBearer', 
                    'void', 
                    [param('ns3::EpsBearer', 'bearer'), param('ns3::Ptr< ns3::EpcTft >', 'tft')])
-    ## epc-ue-nas.h (module 'lte'): void ns3::EpcUeNas::Connect(uint16_t cellId, uint16_t earfcn) [member function]
+    ## epc-ue-nas.h (module 'lte'): void ns3::EpcUeNas::Connect() [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [])
+    ## epc-ue-nas.h (module 'lte'): void ns3::EpcUeNas::Connect(uint16_t cellId, uint16_t dlEarfcn) [member function]
     cls.add_method('Connect', 
                    'void', 
-                   [param('uint16_t', 'cellId'), param('uint16_t', 'earfcn')])
+                   [param('uint16_t', 'cellId'), param('uint16_t', 'dlEarfcn')])
     ## epc-ue-nas.h (module 'lte'): void ns3::EpcUeNas::Disconnect() [member function]
     cls.add_method('Disconnect', 
                    'void', 
@@ -12988,6 +13174,16 @@
     cls.add_method('GetAsSapUser', 
                    'ns3::LteAsSapUser *', 
                    [])
+    ## epc-ue-nas.h (module 'lte'): uint32_t ns3::EpcUeNas::GetCsgId() const [member function]
+    cls.add_method('GetCsgId', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## epc-ue-nas.h (module 'lte'): ns3::EpcUeNas::State ns3::EpcUeNas::GetState() const [member function]
+    cls.add_method('GetState', 
+                   'ns3::EpcUeNas::State', 
+                   [], 
+                   is_const=True)
     ## epc-ue-nas.h (module 'lte'): static ns3::TypeId ns3::EpcUeNas::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -13001,6 +13197,10 @@
     cls.add_method('SetAsSapProvider', 
                    'void', 
                    [param('ns3::LteAsSapProvider *', 's')])
+    ## epc-ue-nas.h (module 'lte'): void ns3::EpcUeNas::SetCsgId(uint32_t csgId) [member function]
+    cls.add_method('SetCsgId', 
+                   'void', 
+                   [param('uint32_t', 'csgId')])
     ## epc-ue-nas.h (module 'lte'): void ns3::EpcUeNas::SetDevice(ns3::Ptr<ns3::NetDevice> dev) [member function]
     cls.add_method('SetDevice', 
                    'void', 
@@ -13013,6 +13213,10 @@
     cls.add_method('SetImsi', 
                    'void', 
                    [param('uint64_t', 'imsi')])
+    ## epc-ue-nas.h (module 'lte'): void ns3::EpcUeNas::StartCellSelection(uint16_t dlEarfcn) [member function]
+    cls.add_method('StartCellSelection', 
+                   'void', 
+                   [param('uint16_t', 'dlEarfcn')])
     return
 
 def register_Ns3EpcX2_methods(root_module, cls):
@@ -14743,6 +14947,46 @@
                    is_static=True)
     return
 
+def register_Ns3LteAnr_methods(root_module, cls):
+    ## lte-anr.h (module 'lte'): ns3::LteAnr::LteAnr(ns3::LteAnr const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LteAnr const &', 'arg0')])
+    ## lte-anr.h (module 'lte'): ns3::LteAnr::LteAnr(uint16_t servingCellId) [constructor]
+    cls.add_constructor([param('uint16_t', 'servingCellId')])
+    ## lte-anr.h (module 'lte'): void ns3::LteAnr::AddNeighbourRelation(uint16_t cellId) [member function]
+    cls.add_method('AddNeighbourRelation', 
+                   'void', 
+                   [param('uint16_t', 'cellId')])
+    ## lte-anr.h (module 'lte'): ns3::LteAnrSapProvider * ns3::LteAnr::GetLteAnrSapProvider() [member function]
+    cls.add_method('GetLteAnrSapProvider', 
+                   'ns3::LteAnrSapProvider *', 
+                   [], 
+                   is_virtual=True)
+    ## lte-anr.h (module 'lte'): static ns3::TypeId ns3::LteAnr::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## lte-anr.h (module 'lte'): void ns3::LteAnr::RemoveNeighbourRelation(uint16_t cellId) [member function]
+    cls.add_method('RemoveNeighbourRelation', 
+                   'void', 
+                   [param('uint16_t', 'cellId')])
+    ## lte-anr.h (module 'lte'): void ns3::LteAnr::SetLteAnrSapUser(ns3::LteAnrSapUser * s) [member function]
+    cls.add_method('SetLteAnrSapUser', 
+                   'void', 
+                   [param('ns3::LteAnrSapUser *', 's')], 
+                   is_virtual=True)
+    ## lte-anr.h (module 'lte'): void ns3::LteAnr::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## lte-anr.h (module 'lte'): void ns3::LteAnr::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3LteControlMessage_methods(root_module, cls):
     ## lte-control-messages.h (module 'lte'): ns3::LteControlMessage::LteControlMessage(ns3::LteControlMessage const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LteControlMessage const &', 'arg0')])
@@ -14824,6 +15068,10 @@
     cls.add_constructor([param('ns3::LteEnbRrc const &', 'arg0')])
     ## lte-enb-rrc.h (module 'lte'): ns3::LteEnbRrc::LteEnbRrc() [constructor]
     cls.add_constructor([])
+    ## lte-enb-rrc.h (module 'lte'): uint8_t ns3::LteEnbRrc::AddUeMeasReportConfig(ns3::LteRrcSap::ReportConfigEutra config) [member function]
+    cls.add_method('AddUeMeasReportConfig', 
+                   'uint8_t', 
+                   [param('ns3::LteRrcSap::ReportConfigEutra', 'config')])
     ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::AddX2Neighbour(uint16_t cellId) [member function]
     cls.add_method('AddX2Neighbour', 
                    'void', 
@@ -14844,6 +15092,10 @@
     cls.add_method('GetEpcX2SapUser', 
                    'ns3::EpcX2SapUser *', 
                    [])
+    ## lte-enb-rrc.h (module 'lte'): ns3::LteAnrSapUser * ns3::LteEnbRrc::GetLteAnrSapUser() [member function]
+    cls.add_method('GetLteAnrSapUser', 
+                   'ns3::LteAnrSapUser *', 
+                   [])
     ## lte-enb-rrc.h (module 'lte'): ns3::LteEnbCmacSapUser * ns3::LteEnbRrc::GetLteEnbCmacSapUser() [member function]
     cls.add_method('GetLteEnbCmacSapUser', 
                    'ns3::LteEnbCmacSapUser *', 
@@ -14856,6 +15108,10 @@
     cls.add_method('GetLteEnbRrcSapProvider', 
                    'ns3::LteEnbRrcSapProvider *', 
                    [])
+    ## lte-enb-rrc.h (module 'lte'): ns3::LteHandoverManagementSapUser * ns3::LteEnbRrc::GetLteHandoverManagementSapUser() [member function]
+    cls.add_method('GetLteHandoverManagementSapUser', 
+                   'ns3::LteHandoverManagementSapUser *', 
+                   [])
     ## lte-enb-rrc.h (module 'lte'): ns3::EpcEnbS1SapUser * ns3::LteEnbRrc::GetS1SapUser() [member function]
     cls.add_method('GetS1SapUser', 
                    'ns3::EpcEnbS1SapUser *', 
@@ -14894,6 +15150,10 @@
     cls.add_method('SetCellId', 
                    'void', 
                    [param('uint16_t', 'm_cellId')])
+    ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetCsgId(uint32_t csgId, bool csgIndication) [member function]
+    cls.add_method('SetCsgId', 
+                   'void', 
+                   [param('uint32_t', 'csgId'), param('bool', 'csgIndication')])
     ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetEpcX2SapProvider(ns3::EpcX2SapProvider * s) [member function]
     cls.add_method('SetEpcX2SapProvider', 
                    'void', 
@@ -14902,6 +15162,10 @@
     cls.add_method('SetForwardUpCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteAnrSapProvider(ns3::LteAnrSapProvider * s) [member function]
+    cls.add_method('SetLteAnrSapProvider', 
+                   'void', 
+                   [param('ns3::LteAnrSapProvider *', 's')])
     ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteEnbCmacSapProvider(ns3::LteEnbCmacSapProvider * s) [member function]
     cls.add_method('SetLteEnbCmacSapProvider', 
                    'void', 
@@ -14914,6 +15178,10 @@
     cls.add_method('SetLteEnbRrcSapUser', 
                    'void', 
                    [param('ns3::LteEnbRrcSapUser *', 's')])
+    ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteHandoverManagementSapProvider(ns3::LteHandoverManagementSapProvider * s) [member function]
+    cls.add_method('SetLteHandoverManagementSapProvider', 
+                   'void', 
+                   [param('ns3::LteHandoverManagementSapProvider *', 's')])
     ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteMacSapProvider(ns3::LteMacSapProvider * s) [member function]
     cls.add_method('SetLteMacSapProvider', 
                    'void', 
@@ -15007,6 +15275,38 @@
                    [param('uint16_t', 'rnti'), param('ns3::LteUeRrcSapProvider *', 'p')])
     return
 
+def register_Ns3LteHandoverAlgorithm_methods(root_module, cls):
+    ## lte-handover-algorithm.h (module 'lte'): ns3::LteHandoverAlgorithm::LteHandoverAlgorithm(ns3::LteHandoverAlgorithm const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LteHandoverAlgorithm const &', 'arg0')])
+    ## lte-handover-algorithm.h (module 'lte'): ns3::LteHandoverAlgorithm::LteHandoverAlgorithm() [constructor]
+    cls.add_constructor([])
+    ## lte-handover-algorithm.h (module 'lte'): ns3::LteHandoverManagementSapProvider * ns3::LteHandoverAlgorithm::GetLteHandoverManagementSapProvider() [member function]
+    cls.add_method('GetLteHandoverManagementSapProvider', 
+                   'ns3::LteHandoverManagementSapProvider *', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## lte-handover-algorithm.h (module 'lte'): static ns3::TypeId ns3::LteHandoverAlgorithm::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## lte-handover-algorithm.h (module 'lte'): void ns3::LteHandoverAlgorithm::SetLteHandoverManagementSapUser(ns3::LteHandoverManagementSapUser * s) [member function]
+    cls.add_method('SetLteHandoverManagementSapUser', 
+                   'void', 
+                   [param('ns3::LteHandoverManagementSapUser *', 's')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## lte-handover-algorithm.h (module 'lte'): void ns3::LteHandoverAlgorithm::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## lte-handover-algorithm.h (module 'lte'): void ns3::LteHandoverAlgorithm::DoReportUeMeas(uint16_t rnti, ns3::LteRrcSap::MeasResults measResults) [member function]
+    cls.add_method('DoReportUeMeas', 
+                   'void', 
+                   [param('uint16_t', 'rnti'), param('ns3::LteRrcSap::MeasResults', 'measResults')], 
+                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3LteHarqPhy_methods(root_module, cls):
     ## lte-harq-phy.h (module 'lte'): ns3::LteHarqPhy::LteHarqPhy(ns3::LteHarqPhy const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LteHarqPhy const &', 'arg0')])
@@ -15083,6 +15383,14 @@
     cls.add_method('AssignStreams', 
                    'int64_t', 
                    [param('ns3::NetDeviceContainer', 'c'), param('int64_t', 'stream')])
+    ## lte-helper.h (module 'lte'): void ns3::LteHelper::Attach(ns3::NetDeviceContainer ueDevices) [member function]
+    cls.add_method('Attach', 
+                   'void', 
+                   [param('ns3::NetDeviceContainer', 'ueDevices')])
+    ## lte-helper.h (module 'lte'): void ns3::LteHelper::Attach(ns3::Ptr<ns3::NetDevice> ueDevice) [member function]
+    cls.add_method('Attach', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'ueDevice')])
     ## lte-helper.h (module 'lte'): void ns3::LteHelper::Attach(ns3::NetDeviceContainer ueDevices, ns3::Ptr<ns3::NetDevice> enbDevice) [member function]
     cls.add_method('Attach', 
                    'void', 
@@ -15160,6 +15468,11 @@
     cls.add_method('EnableUlTxPhyTraces', 
                    'void', 
                    [])
+    ## lte-helper.h (module 'lte'): std::string ns3::LteHelper::GetHandoverAlgorithmType() const [member function]
+    cls.add_method('GetHandoverAlgorithmType', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     ## lte-helper.h (module 'lte'): ns3::Ptr<ns3::RadioBearerStatsCalculator> ns3::LteHelper::GetPdcpStats() [member function]
     cls.add_method('GetPdcpStats', 
                    'ns3::Ptr< ns3::RadioBearerStatsCalculator >', 
@@ -15214,6 +15527,14 @@
     cls.add_method('SetFadingModelAttribute', 
                    'void', 
                    [param('std::string', 'n'), param('ns3::AttributeValue const &', 'v')])
+    ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetHandoverAlgorithmAttribute(std::string n, ns3::AttributeValue const & v) [member function]
+    cls.add_method('SetHandoverAlgorithmAttribute', 
+                   'void', 
+                   [param('std::string', 'n'), param('ns3::AttributeValue const &', 'v')])
+    ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetHandoverAlgorithmType(std::string type) [member function]
+    cls.add_method('SetHandoverAlgorithmType', 
+                   'void', 
+                   [param('std::string', 'type')])
     ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetPathlossModelAttribute(std::string n, ns3::AttributeValue const & v) [member function]
     cls.add_method('SetPathlossModelAttribute', 
                    'void', 
@@ -15246,6 +15567,10 @@
     cls.add_method('SetUeAntennaModelType', 
                    'void', 
                    [param('std::string', 'type')])
+    ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetUeDeviceAttribute(std::string n, ns3::AttributeValue const & v) [member function]
+    cls.add_method('SetUeDeviceAttribute', 
+                   'void', 
+                   [param('std::string', 'n'), param('ns3::AttributeValue const &', 'v')])
     ## lte-helper.h (module 'lte'): void ns3::LteHelper::DoInitialize() [member function]
     cls.add_method('DoInitialize', 
                    'void', 
@@ -15476,15 +15801,15 @@
     cls.add_method('GetUplinkSpectrumPhy', 
                    'ns3::Ptr< ns3::LteSpectrumPhy >', 
                    [])
-    ## lte-phy.h (module 'lte'): void ns3::LtePhy::ReportInterference(ns3::SpectrumValue const & power) [member function]
+    ## lte-phy.h (module 'lte'): void ns3::LtePhy::ReportInterference(ns3::SpectrumValue const & interf) [member function]
     cls.add_method('ReportInterference', 
                    'void', 
-                   [param('ns3::SpectrumValue const &', 'power')], 
+                   [param('ns3::SpectrumValue const &', 'interf')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## lte-phy.h (module 'lte'): void ns3::LtePhy::ReportRsReceivedPower(ns3::SpectrumValue const & interf) [member function]
+    ## lte-phy.h (module 'lte'): void ns3::LtePhy::ReportRsReceivedPower(ns3::SpectrumValue const & power) [member function]
     cls.add_method('ReportRsReceivedPower', 
                    'void', 
-                   [param('ns3::SpectrumValue const &', 'interf')], 
+                   [param('ns3::SpectrumValue const &', 'power')], 
                    is_pure_virtual=True, is_virtual=True)
     ## lte-phy.h (module 'lte'): void ns3::LtePhy::SetControlMessages(ns3::Ptr<ns3::LteControlMessage> m) [member function]
     cls.add_method('SetControlMessages', 
@@ -16215,6 +16540,11 @@
                    'double', 
                    [], 
                    is_const=True)
+    ## lte-ue-phy.h (module 'lte'): ns3::LteUePhy::State ns3::LteUePhy::GetState() const [member function]
+    cls.add_method('GetState', 
+                   'ns3::LteUePhy::State', 
+                   [], 
+                   is_const=True)
     ## lte-ue-phy.h (module 'lte'): std::vector<int, std::allocator<int> > ns3::LteUePhy::GetSubChannelsForReception() [member function]
     cls.add_method('GetSubChannelsForReception', 
                    'std::vector< int >', 
@@ -16283,10 +16613,10 @@
     cls.add_method('SetLteUePhySapUser', 
                    'void', 
                    [param('ns3::LteUePhySapUser *', 's')])
-    ## lte-ue-phy.h (module 'lte'): void ns3::LteUePhy::SetNoiseFigure(double pow) [member function]
+    ## lte-ue-phy.h (module 'lte'): void ns3::LteUePhy::SetNoiseFigure(double nf) [member function]
     cls.add_method('SetNoiseFigure', 
                    'void', 
-                   [param('double', 'pow')])
+                   [param('double', 'nf')])
     ## lte-ue-phy.h (module 'lte'): void ns3::LteUePhy::SetSubChannelsForReception(std::vector<int, std::allocator<int> > mask) [member function]
     cls.add_method('SetSubChannelsForReception', 
                    'void', 
@@ -16344,10 +16674,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
-    ## lte-ue-rrc.h (module 'lte'): uint64_t ns3::LteUeRrc::GetImsi() [member function]
+    ## lte-ue-rrc.h (module 'lte'): uint64_t ns3::LteUeRrc::GetImsi() const [member function]
     cls.add_method('GetImsi', 
                    'uint64_t', 
-                   [])
+                   [], 
+                   is_const=True)
     ## lte-ue-rrc.h (module 'lte'): ns3::LteUeCmacSapUser * ns3::LteUeRrc::GetLteUeCmacSapUser() [member function]
     cls.add_method('GetLteUeCmacSapUser', 
                    'ns3::LteUeCmacSapUser *', 
@@ -16365,10 +16696,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
-    ## lte-ue-rrc.h (module 'lte'): ns3::LteUeRrc::State ns3::LteUeRrc::GetState() [member function]
+    ## lte-ue-rrc.h (module 'lte'): ns3::LteUeRrc::State ns3::LteUeRrc::GetState() const [member function]
     cls.add_method('GetState', 
                    'ns3::LteUeRrc::State', 
-                   [])
+                   [], 
+                   is_const=True)
     ## lte-ue-rrc.h (module 'lte'): static ns3::TypeId ns3::LteUeRrc::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -16557,10 +16889,10 @@
     cls.add_method('SetUlOutputFilename', 
                    'void', 
                    [param('std::string', 'outputFilename')])
-    ## mac-stats-calculator.h (module 'lte'): void ns3::MacStatsCalculator::UlScheduling(uint16_t cellId, uint64_t imsi, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcs, uint16_t sizeTb) [member function]
+    ## mac-stats-calculator.h (module 'lte'): void ns3::MacStatsCalculator::UlScheduling(uint16_t cellId, uint64_t imsi, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcsTb, uint16_t sizeTb) [member function]
     cls.add_method('UlScheduling', 
                    'void', 
-                   [param('uint16_t', 'cellId'), param('uint64_t', 'imsi'), param('uint32_t', 'frameNo'), param('uint32_t', 'subframeNo'), param('uint16_t', 'rnti'), param('uint8_t', 'mcs'), param('uint16_t', 'sizeTb')])
+                   [param('uint16_t', 'cellId'), param('uint64_t', 'imsi'), param('uint32_t', 'frameNo'), param('uint32_t', 'subframeNo'), param('uint16_t', 'rnti'), param('uint8_t', 'mcsTb'), param('uint16_t', 'sizeTb')])
     ## mac-stats-calculator.h (module 'lte'): static void ns3::MacStatsCalculator::UlSchedulingCallback(ns3::Ptr<ns3::MacStatsCalculator> macStats, std::string path, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcs, uint16_t size) [member function]
     cls.add_method('UlSchedulingCallback', 
                    'void', 
@@ -16649,23 +16981,6 @@
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
-def register_Ns3NeighbourRelation_methods(root_module, cls):
-    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::NeighbourRelation() [constructor]
-    cls.add_constructor([])
-    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::NeighbourRelation(ns3::NeighbourRelation const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::NeighbourRelation const &', 'arg0')])
-    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_detectedAsNeighbour [variable]
-    cls.add_instance_attribute('m_detectedAsNeighbour', 'bool', is_const=False)
-    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_noHo [variable]
-    cls.add_instance_attribute('m_noHo', 'bool', is_const=False)
-    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_noRemove [variable]
-    cls.add_instance_attribute('m_noRemove', 'bool', is_const=False)
-    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_noX2 [variable]
-    cls.add_instance_attribute('m_noX2', 'bool', is_const=False)
-    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_physCellId [variable]
-    cls.add_instance_attribute('m_physCellId', 'uint16_t', is_const=False)
-    return
-
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -16842,6 +17157,43 @@
                    is_const=True)
     return
 
+def register_Ns3NoOpHandoverAlgorithm_methods(root_module, cls):
+    ## no-op-handover-algorithm.h (module 'lte'): ns3::NoOpHandoverAlgorithm::NoOpHandoverAlgorithm(ns3::NoOpHandoverAlgorithm const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NoOpHandoverAlgorithm const &', 'arg0')])
+    ## no-op-handover-algorithm.h (module 'lte'): ns3::NoOpHandoverAlgorithm::NoOpHandoverAlgorithm() [constructor]
+    cls.add_constructor([])
+    ## no-op-handover-algorithm.h (module 'lte'): ns3::LteHandoverManagementSapProvider * ns3::NoOpHandoverAlgorithm::GetLteHandoverManagementSapProvider() [member function]
+    cls.add_method('GetLteHandoverManagementSapProvider', 
+                   'ns3::LteHandoverManagementSapProvider *', 
+                   [], 
+                   is_virtual=True)
+    ## no-op-handover-algorithm.h (module 'lte'): static ns3::TypeId ns3::NoOpHandoverAlgorithm::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## no-op-handover-algorithm.h (module 'lte'): void ns3::NoOpHandoverAlgorithm::SetLteHandoverManagementSapUser(ns3::LteHandoverManagementSapUser * s) [member function]
+    cls.add_method('SetLteHandoverManagementSapUser', 
+                   'void', 
+                   [param('ns3::LteHandoverManagementSapUser *', 's')], 
+                   is_virtual=True)
+    ## no-op-handover-algorithm.h (module 'lte'): void ns3::NoOpHandoverAlgorithm::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## no-op-handover-algorithm.h (module 'lte'): void ns3::NoOpHandoverAlgorithm::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## no-op-handover-algorithm.h (module 'lte'): void ns3::NoOpHandoverAlgorithm::DoReportUeMeas(uint16_t rnti, ns3::LteRrcSap::MeasResults measResults) [member function]
+    cls.add_method('DoReportUeMeas', 
+                   'void', 
+                   [param('uint16_t', 'rnti'), param('ns3::LteRrcSap::MeasResults', 'measResults')], 
+                   visibility='protected', is_virtual=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')])
@@ -17434,6 +17786,58 @@
                    is_static=True)
     return
 
+def register_Ns3PointToPointEpcHelper_methods(root_module, cls):
+    ## point-to-point-epc-helper.h (module 'lte'): ns3::PointToPointEpcHelper::PointToPointEpcHelper(ns3::PointToPointEpcHelper const & arg0) [copy constructor]
+    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]
+    cls.add_method('ActivateEpsBearer', 
+                   'void', 
+                   [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]
+    cls.add_method('AddEnb', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'enbNode'), param('ns3::Ptr< ns3::NetDevice >', 'lteEnbNetDevice'), param('uint16_t', 'cellId')], 
+                   is_virtual=True)
+    ## point-to-point-epc-helper.h (module 'lte'): void ns3::PointToPointEpcHelper::AddUe(ns3::Ptr<ns3::NetDevice> ueLteDevice, uint64_t imsi) [member function]
+    cls.add_method('AddUe', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'ueLteDevice'), param('uint64_t', 'imsi')], 
+                   is_virtual=True)
+    ## point-to-point-epc-helper.h (module 'lte'): void ns3::PointToPointEpcHelper::AddX2Interface(ns3::Ptr<ns3::Node> enbNode1, ns3::Ptr<ns3::Node> enbNode2) [member function]
+    cls.add_method('AddX2Interface', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'enbNode1'), param('ns3::Ptr< ns3::Node >', 'enbNode2')], 
+                   is_virtual=True)
+    ## point-to-point-epc-helper.h (module 'lte'): ns3::Ipv4InterfaceContainer ns3::PointToPointEpcHelper::AssignUeIpv4Address(ns3::NetDeviceContainer ueDevices) [member function]
+    cls.add_method('AssignUeIpv4Address', 
+                   'ns3::Ipv4InterfaceContainer', 
+                   [param('ns3::NetDeviceContainer', 'ueDevices')], 
+                   is_virtual=True)
+    ## point-to-point-epc-helper.h (module 'lte'): void ns3::PointToPointEpcHelper::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## point-to-point-epc-helper.h (module 'lte'): ns3::Ptr<ns3::Node> ns3::PointToPointEpcHelper::GetPgwNode() [member function]
+    cls.add_method('GetPgwNode', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [], 
+                   is_virtual=True)
+    ## point-to-point-epc-helper.h (module 'lte'): static ns3::TypeId ns3::PointToPointEpcHelper::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## point-to-point-epc-helper.h (module 'lte'): ns3::Ipv4Address ns3::PointToPointEpcHelper::GetUeDefaultGatewayAddress() [member function]
+    cls.add_method('GetUeDefaultGatewayAddress', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_Ns3PointerChecker_methods(root_module, cls):
     ## pointer.h (module 'core'): ns3::PointerChecker::PointerChecker() [constructor]
     cls.add_constructor([])
@@ -18153,6 +18557,22 @@
                    is_const=True, visibility='protected')
     return
 
+def register_Ns3Sib1LteControlMessage_methods(root_module, cls):
+    ## lte-control-messages.h (module 'lte'): ns3::Sib1LteControlMessage::Sib1LteControlMessage(ns3::Sib1LteControlMessage const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Sib1LteControlMessage const &', 'arg0')])
+    ## lte-control-messages.h (module 'lte'): ns3::Sib1LteControlMessage::Sib1LteControlMessage() [constructor]
+    cls.add_constructor([])
+    ## lte-control-messages.h (module 'lte'): ns3::LteRrcSap::SystemInformationBlockType1 ns3::Sib1LteControlMessage::GetSib1() const [member function]
+    cls.add_method('GetSib1', 
+                   'ns3::LteRrcSap::SystemInformationBlockType1', 
+                   [], 
+                   is_const=True)
+    ## lte-control-messages.h (module 'lte'): void ns3::Sib1LteControlMessage::SetSib1(ns3::LteRrcSap::SystemInformationBlockType1 sib1) [member function]
+    cls.add_method('SetSib1', 
+                   'void', 
+                   [param('ns3::LteRrcSap::SystemInformationBlockType1', 'sib1')])
+    return
+
 def register_Ns3SpectrumChannel_methods(root_module, cls):
     ## spectrum-channel.h (module 'spectrum'): ns3::SpectrumChannel::SpectrumChannel() [constructor]
     cls.add_constructor([])
@@ -18763,6 +19183,80 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3A2A4RsrqHandoverAlgorithm_methods(root_module, cls):
+    ## a2-a4-rsrq-handover-algorithm.h (module 'lte'): ns3::A2A4RsrqHandoverAlgorithm::A2A4RsrqHandoverAlgorithm(ns3::A2A4RsrqHandoverAlgorithm const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::A2A4RsrqHandoverAlgorithm const &', 'arg0')])
+    ## a2-a4-rsrq-handover-algorithm.h (module 'lte'): ns3::A2A4RsrqHandoverAlgorithm::A2A4RsrqHandoverAlgorithm() [constructor]
+    cls.add_constructor([])
+    ## a2-a4-rsrq-handover-algorithm.h (module 'lte'): ns3::LteHandoverManagementSapProvider * ns3::A2A4RsrqHandoverAlgorithm::GetLteHandoverManagementSapProvider() [member function]
+    cls.add_method('GetLteHandoverManagementSapProvider', 
+                   'ns3::LteHandoverManagementSapProvider *', 
+                   [], 
+                   is_virtual=True)
+    ## a2-a4-rsrq-handover-algorithm.h (module 'lte'): static ns3::TypeId ns3::A2A4RsrqHandoverAlgorithm::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## a2-a4-rsrq-handover-algorithm.h (module 'lte'): void ns3::A2A4RsrqHandoverAlgorithm::SetLteHandoverManagementSapUser(ns3::LteHandoverManagementSapUser * s) [member function]
+    cls.add_method('SetLteHandoverManagementSapUser', 
+                   'void', 
+                   [param('ns3::LteHandoverManagementSapUser *', 's')], 
+                   is_virtual=True)
+    ## a2-a4-rsrq-handover-algorithm.h (module 'lte'): void ns3::A2A4RsrqHandoverAlgorithm::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## a2-a4-rsrq-handover-algorithm.h (module 'lte'): void ns3::A2A4RsrqHandoverAlgorithm::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## a2-a4-rsrq-handover-algorithm.h (module 'lte'): void ns3::A2A4RsrqHandoverAlgorithm::DoReportUeMeas(uint16_t rnti, ns3::LteRrcSap::MeasResults measResults) [member function]
+    cls.add_method('DoReportUeMeas', 
+                   'void', 
+                   [param('uint16_t', 'rnti'), param('ns3::LteRrcSap::MeasResults', 'measResults')], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3A3RsrpHandoverAlgorithm_methods(root_module, cls):
+    ## a3-rsrp-handover-algorithm.h (module 'lte'): ns3::A3RsrpHandoverAlgorithm::A3RsrpHandoverAlgorithm(ns3::A3RsrpHandoverAlgorithm const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::A3RsrpHandoverAlgorithm const &', 'arg0')])
+    ## a3-rsrp-handover-algorithm.h (module 'lte'): ns3::A3RsrpHandoverAlgorithm::A3RsrpHandoverAlgorithm() [constructor]
+    cls.add_constructor([])
+    ## a3-rsrp-handover-algorithm.h (module 'lte'): ns3::LteHandoverManagementSapProvider * ns3::A3RsrpHandoverAlgorithm::GetLteHandoverManagementSapProvider() [member function]
+    cls.add_method('GetLteHandoverManagementSapProvider', 
+                   'ns3::LteHandoverManagementSapProvider *', 
+                   [], 
+                   is_virtual=True)
+    ## a3-rsrp-handover-algorithm.h (module 'lte'): static ns3::TypeId ns3::A3RsrpHandoverAlgorithm::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## a3-rsrp-handover-algorithm.h (module 'lte'): void ns3::A3RsrpHandoverAlgorithm::SetLteHandoverManagementSapUser(ns3::LteHandoverManagementSapUser * s) [member function]
+    cls.add_method('SetLteHandoverManagementSapUser', 
+                   'void', 
+                   [param('ns3::LteHandoverManagementSapUser *', 's')], 
+                   is_virtual=True)
+    ## a3-rsrp-handover-algorithm.h (module 'lte'): void ns3::A3RsrpHandoverAlgorithm::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## a3-rsrp-handover-algorithm.h (module 'lte'): void ns3::A3RsrpHandoverAlgorithm::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## a3-rsrp-handover-algorithm.h (module 'lte'): void ns3::A3RsrpHandoverAlgorithm::DoReportUeMeas(uint16_t rnti, ns3::LteRrcSap::MeasResults measResults) [member function]
+    cls.add_method('DoReportUeMeas', 
+                   'void', 
+                   [param('uint16_t', 'rnti'), param('ns3::LteRrcSap::MeasResults', 'measResults')], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
@@ -18812,10 +19306,10 @@
     cls.add_method('GetBsr', 
                    'ns3::MacCeListElement_s', 
                    [])
-    ## lte-control-messages.h (module 'lte'): void ns3::BsrLteControlMessage::SetBsr(ns3::MacCeListElement_s ulcqi) [member function]
+    ## lte-control-messages.h (module 'lte'): void ns3::BsrLteControlMessage::SetBsr(ns3::MacCeListElement_s bsr) [member function]
     cls.add_method('SetBsr', 
                    'void', 
-                   [param('ns3::MacCeListElement_s', 'ulcqi')])
+                   [param('ns3::MacCeListElement_s', 'bsr')])
     return
 
 def register_Ns3DlCqiLteControlMessage_methods(root_module, cls):
@@ -19224,10 +19718,10 @@
                    'void', 
                    [param('ns3::SpectrumValue const &', 'interf')], 
                    is_virtual=True)
-    ## lte-enb-phy.h (module 'lte'): void ns3::LteEnbPhy::ReportRsReceivedPower(ns3::SpectrumValue const & interf) [member function]
+    ## lte-enb-phy.h (module 'lte'): void ns3::LteEnbPhy::ReportRsReceivedPower(ns3::SpectrumValue const & power) [member function]
     cls.add_method('ReportRsReceivedPower', 
                    'void', 
-                   [param('ns3::SpectrumValue const &', 'interf')], 
+                   [param('ns3::SpectrumValue const &', 'power')], 
                    is_virtual=True)
     ## lte-enb-phy.h (module 'lte'): void ns3::LteEnbPhy::SendControlChannels(std::list<ns3::Ptr<ns3::LteControlMessage>, std::allocator<ns3::Ptr<ns3::LteControlMessage> > > ctrlMsgList) [member function]
     cls.add_method('SendControlChannels', 
@@ -19466,8 +19960,6 @@
                    is_static=True)
     ## lte-ue-net-device.h (module 'lte'): ns3::LteUeNetDevice::LteUeNetDevice() [constructor]
     cls.add_constructor([])
-    ## lte-ue-net-device.h (module 'lte'): ns3::LteUeNetDevice::LteUeNetDevice(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::LteUePhy> phy, ns3::Ptr<ns3::LteUeMac> mac, ns3::Ptr<ns3::LteUeRrc> rrc, ns3::Ptr<ns3::EpcUeNas> nas, uint64_t imsi) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::LteUePhy >', 'phy'), param('ns3::Ptr< ns3::LteUeMac >', 'mac'), param('ns3::Ptr< ns3::LteUeRrc >', 'rrc'), param('ns3::Ptr< ns3::EpcUeNas >', 'nas'), param('uint64_t', 'imsi')])
     ## lte-ue-net-device.h (module 'lte'): void ns3::LteUeNetDevice::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -19503,6 +19995,24 @@
                    'uint64_t', 
                    [], 
                    is_const=True)
+    ## lte-ue-net-device.h (module 'lte'): uint16_t ns3::LteUeNetDevice::GetDlEarfcn() const [member function]
+    cls.add_method('GetDlEarfcn', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## lte-ue-net-device.h (module 'lte'): void ns3::LteUeNetDevice::SetDlEarfcn(uint16_t earfcn) [member function]
+    cls.add_method('SetDlEarfcn', 
+                   'void', 
+                   [param('uint16_t', 'earfcn')])
+    ## lte-ue-net-device.h (module 'lte'): uint32_t ns3::LteUeNetDevice::GetCsgId() const [member function]
+    cls.add_method('GetCsgId', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## lte-ue-net-device.h (module 'lte'): void ns3::LteUeNetDevice::SetCsgId(uint32_t csgId) [member function]
+    cls.add_method('SetCsgId', 
+                   'void', 
+                   [param('uint32_t', 'csgId')])
     ## lte-ue-net-device.h (module 'lte'): void ns3::LteUeNetDevice::SetTargetEnb(ns3::Ptr<ns3::LteEnbNetDevice> enb) [member function]
     cls.add_method('SetTargetEnb', 
                    'void', 
@@ -20108,6 +20618,24 @@
     cls.add_method('SetUlEarfcn', 
                    'void', 
                    [param('uint16_t', 'earfcn')])
+    ## lte-enb-net-device.h (module 'lte'): uint32_t ns3::LteEnbNetDevice::GetCsgId() const [member function]
+    cls.add_method('GetCsgId', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## lte-enb-net-device.h (module 'lte'): void ns3::LteEnbNetDevice::SetCsgId(uint32_t csgId) [member function]
+    cls.add_method('SetCsgId', 
+                   'void', 
+                   [param('uint32_t', 'csgId')])
+    ## lte-enb-net-device.h (module 'lte'): bool ns3::LteEnbNetDevice::GetCsgIndication() const [member function]
+    cls.add_method('GetCsgIndication', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lte-enb-net-device.h (module 'lte'): void ns3::LteEnbNetDevice::SetCsgIndication(bool csgIndication) [member function]
+    cls.add_method('SetCsgIndication', 
+                   'void', 
+                   [param('bool', 'csgIndication')])
     ## lte-enb-net-device.h (module 'lte'): void ns3::LteEnbNetDevice::DoInitialize() [member function]
     cls.add_method('DoInitialize', 
                    'void', 
diff -Naur ns-3.18.1/src/lte/doc/Makefile ns-3.19/src/lte/doc/Makefile
--- ns-3.18.1/src/lte/doc/Makefile	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/doc/Makefile	2013-12-20 09:44:50.000000000 -0800
@@ -11,7 +11,7 @@
 # specify dia figures from which .png and .pdf figures need to be built
 
 IMAGES_DIA = \
-        $(FIGURES)/epc-ctrl-arch.dia \
+	$(FIGURES)/epc-ctrl-arch.dia \
 	$(FIGURES)/epc-data-flow-dl.dia \
 	$(FIGURES)/epc-data-flow-ul.dia \
 	$(FIGURES)/epc-profiling-scenario.dia \
@@ -26,12 +26,20 @@
 	$(FIGURES)/lte-arch-ue-ctrl.dia \
 	$(FIGURES)/lte-enb-phy.dia \
 	$(FIGURES)/lte-ue-phy.dia \
+	$(FIGURES)/lte-epc-x2-handover-seq-diagram.dia \
 	$(FIGURES)/lte-epc-e2e-data-protocol-stack.dia \
 	$(FIGURES)/lte-interference-test-scenario.dia \
 	$(FIGURES)/lte-subframe-structure.dia \
 	$(FIGURES)/lte-epc-x2-interface.dia \
 	$(FIGURES)/lte-harq-architecture.dia \
-	$(FIGURES)/lte-harq-processes-scheme.dia
+	$(FIGURES)/lte-harq-processes-scheme.dia \
+	$(FIGURES)/ue-meas-consumer.dia \
+	$(FIGURES)/ue-meas-piecewise-motion.dia \
+	$(FIGURES)/ue-meas-piecewise-a1.dia \
+	$(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
 
 
 # specify eps figures from which .png and .pdf figures need to be built
@@ -53,9 +61,8 @@
 	$(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-handover-seq-diagram.eps \
-	$(FIGURES)/lte-epc-x2-entity-saps.eps
-
+	$(FIGURES)/lte-epc-x2-entity-saps.eps \
+	$(FIGURES)/lte-strongest-cell-handover-algorithm.eps
 
 # rescale pdf figures as necessary
 $(FIGURES)/lte-interference-test-scenario.pdf_width = 3in
@@ -78,8 +85,6 @@
 $(FIGURES)/lte-subframe-structure.pdf_width = 2in
 $(FIGURES)/mac-random-access-contention.pdf_width = 10cm
 $(FIGURES)/mac-random-access-noncontention.pdf_width = 15cm
-$(FIGURES)/lte-ue-rrc-states.pdf_width = 7cm
-$(FIGURES)/lte-handover-algorithm.pdf_width = 10cm
 $(FIGURES)/helpers.pdf_width = 8cm
 
 IMAGES_SEQDIAG = \
@@ -95,7 +100,7 @@
 IMAGES_DOT = \
 	$(FIGURES)/lte-enb-rrc-states.dot \
 	$(FIGURES)/lte-ue-rrc-states.dot \
-	$(FIGURES)/lte-handover-algorithm.dot
+	$(FIGURES)/lte-legacy-handover-algorithm.dot
 
 IMAGES_NOBUILD = $(FIGURES)/fading_pedestrian.png \
 	$(FIGURES)/fading_vehicular.png \
@@ -131,6 +136,8 @@
 	$(FIGURES)/helpers.pdf \
 	$(FIGURES)/miesm_scheme.pdf \
 	$(FIGURES)/miesm_scheme.png \
+	$(FIGURES)/lte-handover-campaign-rem.pdf \
+	$(FIGURES)/lte-handover-campaign-rem.png \
 	${IMAGES_SEQDIAG:.seqdiag=.png} \
 	${IMAGES_SEQDIAG:.seqdiag=.pdf} \
 	${IMAGES_DOT:.dot=.png} \
diff -Naur ns-3.18.1/src/lte/doc/source/figures/lte-cell-selection-scenario.dia ns-3.19/src/lte/doc/source/figures/lte-cell-selection-scenario.dia
--- ns-3.18.1/src/lte/doc/source/figures/lte-cell-selection-scenario.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/lte-cell-selection-scenario.dia	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,9 @@
+‹     í][sÚH~Ï¯ œW"÷ý2L25Iíì>lí>döÙ%@ÆÚÉ%	;Þ‡ùíÛÝ’c„ZÈiO%Œ‰è£nÎùÎýè×ß¾/“ÑC”q–~¼‚¸Eé,›ÇéâãÕþüãƒ¸úíÓ»_çqø‹ú³ÈÃåH}"-ôo¯îÊòþ—ëëÇÇÇ y*Â2Ëƒ$^EtýW˜$áµºèúêÓ»Ñèõó°õ{õ»aYæñtUF£4\F¯¦áìÛ"ÏVéüªºª¾n–%Y>z“�WïoÍÏÕu½ÌõÚ:{Ö¾Ñ4�Âo»—êGÊ.KßGùæ²Ëû¬ˆÕ%åÓýÖ%;ÖÑ¿º¦¾ªP¥‹Oï'ï«[ªßxY«éFw)—a¾ˆÓm:êl’ê P Bê0¨pÂáó™OnzZrÉiÉå§%7÷Y^æa\n“œfY…iEµÌWQw:Å,L‹íÛ–Å.nã²ÌÜÿm˜m6P½ýCÚŽ•ÜEÏ÷îÚ;VyŒçåÝÍwGÇU­þähõ‡¸ˆ§IÔt÷qZö¶üS?Ëo~;½_>nÉÕj;ÕÃ\D4¢Ç«‡Å*žGÅ6[¿fÇJwõe×‡N}óº¶S½µ¡¬‰$|ŠòzùÏ/jzTÁ5âŒÂY?<ÿöêL²é£YYoök¦ó0Ÿ�>Œþ§êS?Œe‚Äó�Wÿë§µ¹?µšÂ­ãºÏ~ðc6÷¿�»ŸN7×ÎÕí‡é"‰jž•�D�Í’ÀWDÍk7Ê³,Mo¢tnöqÄî¶/À`;n?]-g÷›´›dõ˜E•6‰nÖÅ«AÀÄ”IH,(åSmRˆÔŽÚÝ|õfÅª-x÷oIßMìmÙ¢1d.ÙW¯?�xE7*Q-Õš§ÛVm?Û0ŒêÛÞJƒÚ;zé»(^Ü•»×FÝÖžfù<ÊÞx 9%’`
+´q(8�>`aEñ°p)TtÄ„8M{#Ñ›�!kAÆ]Ñ¦•�™õ'ˆÚÉÀA!³Ø†2/dû…[™bìRÈôúÄÆ�:²îÛðBæ…l�«Cl%ŒvfýVF‰WDÌÿˆ‰öpFãúÕ±§³¾¹^ý<ïèìåÜ/q1ËÛ~‰’d•„ùèþ.[c`X30½x;œkW˜B©,²€SÎ•Y Àe7ÊË¨¯D§æñ¬²å@Š$‘ 2©3ryZÊHÃ�}€ ‚õ[á^í•îŠF7·q’´ ±ž;ŽDq—=Þ4dÚ§ú†©í–µEt«Ù›»,�ÿ—¥e˜ìÝÜFŽáh2
+	ËxæŽH±šêDLÔÝlìÇBa—o¡èì¸~�@ZÅbë×3[(�Ž©7PÜFbw0.·ÃvþîÚEa+“z\›Ø&‰ MkxÓz}s>‡p:ÎýWT>fù7Å¸ŸÃ")F.ß60°èy±Sä¥Ts+¥è át¸5	˜Þ�ÃœÄ†1êÒª&—k?Â©åkc–¶´|m‚?eô½<Äa×ì2ÍL	ÖÚuÕZ;jµö8ì:eÈ6Òï�nÃeœ<)ÙÉÒ¬¸gJü2R}þ‹:Ð8Ê_#ýñ7±ÅgÇrv¢ëÐ¶Ëö
+¤¤vt6uJ+§®¡0‰é2jþ>UÌþŠ˜¦¢Ž#]…çY^ìTÕø”ÚNö`®a·æšRwFÛA£î†®í Vw^Û½Ñ8�×voLÛi‡Ík»·¢í u�£rÐ…Ë´‰ÔêŽju‡�ñîàÀõ�ÚSòúÎë;¯ï._ß™ ¤WxoFáÁŠú¡p[ÔOMHA©<dTºÊƒZåA¯ó|DÓë¼!è<SÏæuÞ…ë¼ÖµqÐºIAŽ¥C�'teäc¡+ã„˜({«*�ƒ/�ë|l¾0ÎÆùÂ8_·V_ô{>krhì›cH ×¥õ `ì¸]s¨K ™ÀH—@$¥ñ’®Û•wl³ÙÃëì¬„ùìp}Ðímwš­ò‡èfêhgÑ>\•PiU%2Æ¸p‡-u�þ²O(.¶Nçù_FwŠãkS»ÌLiÿèå_›`©á³°þ¬r÷×>·§lÜQ?BIzÈ"wÎ‰¶F)Ò™d	$¦`•	6–àPž îomÆ“W õý(yÅÃ—F©ŽIŠ	‘ÊÊel˜Ò(w
+TiD;EÙ©4Z7é0ÓŠ+¶S‘ÊÛ—²’J9®¤’MZA9s-•;öÙ/>]ŒP~¨L.…Pˆ± r˜B	¹…Ž”çQ‘¬‡Ì3uª"•}j„‘VÂXUÆ+YTö«FÇ²¸¹½¦vðÊ¢Å†ûÅÈ¢E$R©œ’�Z«X(H](Èö�Bû^·Õ ²ŽòçH!¬#…`à‘ÂîçÖ%TÈ±ËPa°Í>vèc‡>vxúØa{Ü?*ÖÓh5=AÙ<ð‹¡¿ãát>Iä�ÞýOŸ$²ïjB•¯É\'‰t:¨z1ÐãA `ËPæÈõ…]Ûlìúo G$@P2I™�a:Ð¨´²`ºÀÄY`¨�ñÒÐmL‹$ÈŒ]c›±k	#”A÷¦á�X°tAÒÈ9à\ 9¤ºÐ�T¡M’Hœ5†àÅ%µ/„êIr¬ö…èÐ'É9oê}!ïy_è§Ÿ$‡¬Ë¡ñr— ÿ<ì–Bb8ÑA.3ì)Ég®ëäÖ7×`r	u#4‘KYUyyæyöØ}`Öáµo’(]ì‡ejOä ôw�/žÎÑ�•ÝÐ	ëãé	AìknñA—‚ª'é‚õ:Á¸~2<É“�Öw×€1êÎ Ç�!?†ü©;üLëa‡q‰!<€šÄ‰@è4UÀ;w!Ÿ²E”�Ñò´m¢E˜Û¢ÿˆ’‡H[Ôo³GÔD©ïíÜ#ú`n©•;ÙÉå˜ÇÝ)Ò¨,1·å»Ð»�’råáÉ€:-—cBÓ€ˆ!]+§§:Ë@pÌ=Š{Í…Aä�Ü�#ä‡��7ëcÝ� Ù"—©XZg}`]Çë¬z\÷ƒóYŸõñYŸõiSmcßÚÂªRä|L‚"¤¤Û´�a ª¶3&eœ7fïØf¿ýw—Ó
+‰GB.¡¤µñL™0sÀyjàÄp¤’’ Ó™Mô3fµ­Ä’9ïm/–o¢3[¹ÂIIfc¤`�ü„RyžÎld],ÞËèŽVRIÇ"�02y¦Ù½*»µ,îÜÞªÄù­þÏµ0RÁ¤ jÏT�Ÿ:mæÐÏ9ßSÓv,=‹»yÉçº¬¯Eƒ«vÇ`0š¾ê=’Mú é@Ã¿P!ÊâD*=/Šr(=¨œT¬,•3�
+”SÿBhbÕºã RÜ�<<¦(g1e©0Ìbˆ)çT*gÞˆQ“©p&ú™$r‚Ig*Ç¡B`o°ûM\l@¶ Ñ�äá$:~™Tæ7t‹¦’À P3ƒ„º—Ã×ûj”Ã®¿¤X¼ Hb
+ B Ž$<_ÔïHŽþœ}oâhÒ‡.�Î9Z?îƒN0ÔüŒPg~n—ñ·ØR«Œ¿ÃÇµ§Y>�òö)~¨ë ëZQ“;(Ô6ý‰•éå˜DÏ9þ~*?±uå§éäsi"ÝæC€’gPnR4€Êý/_ÿ>šEIr½Œ–Ó(÷åŸÎn¸ÎŠo¡î\NÝ'> ÙR¦n�fl,fHÕÐ¾aàÑ×ÕlÅí*1°4*”�`Â™œ#Ýpx<2™xÈä6�fš2Á Ìµ#4lú#Œ“hîqéô¸„€Ç¥aã’}Õ¡t;F¯Ï.xâÆ€.�AÎ›öäÆˆ�A'Ä ·Ò­×–ÚO&c§}sd\Ã ©�t(Á0è�Ô9�®±žÇQ�£gÃQb?ZŽ�%”ãÊ"EµE:ƒ{u>h�õ<Žz=ŽZ—·sˆžà`"Žµc?{yu�£ë¬çqÔãèùpÔºê^L§�„W©ƒ§Ü4EyÏÞ#ióy(õPz>(Å=<Uº¬Öëƒ
+KA�¥Ð[¥K¹Ïc©ÇÒóa©u?Ô#]b©ZWXÊk,%>Rê±´‘û<–z,=–ÚÏ0ÇnÇõúUá¸�TN‡S:îË Üc)ö%âK/K­›pC—Ï‚Ðë“*�Ïj,¥ÁRê±Ôy�û<–z,=–ò>žÀíôÉh<–ÒKÙ@°”y,uŽ¥ëÜç±ÔciXZýž„OQþé]õ‹ú³ÈÃå§wÿ÷%ª3Eç  
\ No newline at end of file
diff -Naur ns-3.18.1/src/lte/doc/source/figures/lte-cell-selection-timeline.dia ns-3.19/src/lte/doc/source/figures/lte-cell-selection-timeline.dia
--- ns-3.18.1/src/lte/doc/source/figures/lte-cell-selection-timeline.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/lte-cell-selection-timeline.dia	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,9 @@
+‹     í][s›H~÷¯ ”‡™©r0}ã’L2e;žÝT9—²³µµO*,a™ÀN¼óÛ·$K`$$ÓÝÈqU.–P7�>¾sÎw}~ýíÛ<2îƒ4“øÍ™ÖÈâI2ãÙ›Ñ¿¾üþÒýööà×iè¿âf©?7ø'âLüöft“ç·¯ŽŽ¾~ýjF™Ÿ'©…wfýåG‘Ä:½=0Œõ¦~î‹×¯úyž†Wwy`Äþ<x3ºò'ÌÒä.žŽÊ£ÇM’(I�{?z3zq]üŒŽÃUÆÙ2ö­?®ÒÀÿcóÐÿñ¼ç}¤õaç·IòCò‡Û'‡lGü½vÌâ¨ŒÏÞ¾8¦/ÊSZ¼°«éD7N’ÏýtÆOçá×&*/6]Œ1¿Ìs=Ë¡Z^“ý§»Ò;]¤wºTïta6¾MÒ<õÃüé”WI~\Îš§wÁóçÉ&~Ä!¶mYVqæyÒrþ×~”í²€òåÇ»mß;w–†Óí7nåˆ£|§ùÍø›¢ËUŽþ hôû0¯¢ éìÃ8—6üƒœáëßNÁÞ«�wDC9ÚFó0u°ýÍÃì.œYÌªÇléfqØQÛU¯·ë…)_ªëbŠÈÒÅð'+3m,¾àãþ$ï—¿­]“äê¿Á$_,ö2÷ã©ŸN�—Æ—à[>ZsBFF8}3údU¯V}}|4N„O.×mòˆ)ûÐ©¯þ)wlúêª>rÊOÞ�gQ°�qV·1{�°I]‡º&rˆÃž7g..BÒkÇl"îÂ5¨Wó"../>óÀÏîÒ`ÄùÁÏ×i27>_^Éõµø^ù¡Æ$ˆ¢ì—>Ç–uë'qÞtbâuãÚŸ‡Ñ?ÿ ¯GF–?Hq‡´üì—pd//’¹¯cÿ“¸	ÂÙMãi¬ÈÔ2]«òƒìn“V‘ÚŒVÛ¤aÖm¢*mqr-«ÛDÜ;˜Å=M“ñÝ|q%wœ¥‘�ö»…î‹SªßD«SÁ-wfùbÉRÏ§-Ô•¶è!QH[œ«;Ä¦]PŸË$ý -Ë˜g@DˆH`�ˆð�FD¸;!•L„L›ÏP0y-æLä~ÿDÄãx "]T„
+."@E½¦"Ò•ŠN
+©ˆo™Žçâ×Ø2mî¸³PØè¥ñ{åAzäó«îÏãIp÷Ò¸|ˆ'7i‡ÿã³'F~p&á¿Ï‚,/B<ãçâïã_ÄÁ¹Ÿ¯Œ÷ïÎÏÆÿ>~ÿeüáýÉøòý	ÆÓÀxyÈ¤yöšñ¨Æcj�¬!|ˆìÞ0ÞE0	Âû`jpj2
+éª¤/Î^ïÎ�+þÝzù+ÃŸL’´²8í•Çü”‰O5ñpœ>Ž£Àqýç8Ö�ãˆZŠ[
+ôŽé CÚy¾ÊM§gççãË³ó³Ó/ï?}äÄu*x,ütró„ðlãâ8L‡aPëÀa¶‘ÌU*’!³CÎ`B°2™[ö}�ÉØ_ “iÓÉÜB³�¬ltÆÁY6rº²SêQQÓ¶=Ä-ŸÇ^3“Ë;¤ØDè¹8IâxÄÓb;/«émúLu�¿“ÛúÄMEIûñ/w\8dO¯çŠ$P•$¬g®€_¾±Ÿ¦É×ÍØEGGA<Û¾ÖuŠÖËµãR´ü®ÊžØ¹å;Æ¿ö!O„@FÆêíŠ´¤–Ú¨{ÞîŸ“èaÃ-ïJŠ�Â{žñ›�aWäÁÞkÇ´lÇr…|d=ó[¿åWcÜzÏW×ÕT/ƒ¶’‚óìì¥Öû·˜¬ðW6ßÀT‹+ìIp…™W˜>fŒY2Æà
+ës…¤ŒPFgI¨£Ãêéˆ edNp_èˆÙ@GúŠé0Dæ #$ÁO÷Ôf;l“-ºŒç#“ö-¡+r°µŒî_Þ�Ï‡›”y�hÄMR~&iè?gw“I�e¢xåÔŸß®r½µ,ïéñ‡ÏgïÆ?]|8>?ÿÏÁ†$0bÔ“vLIàÞãa	äè(10+(ÒÃ"†c9HP¤e?×KÜYÆpZdw»Œ�ÈûRBÁ)V‹G›ŠêwÇRT+ðHËÕâo‡c‹¨FŒû‚QF- Õ�FReGÎ–â?ŠÙ‘¶°#kym ä>qŒŒ¢-µ¥øÄe[DTm¹<p>$¤(Üê[ƒkqÌz¨qqüñÝ§ããÓÓ³ËËò½47RþåñOøE4cÜ¦É$˜Þ¥„#ZÂ‚DA�p¤ß:�„‚.¢!‹Eè£lÜ›,–Y,�²1Ùx täHp·lµî+™HLÔ&
+ÒãÙ¤ S •PeF�	‚Ç~	‚Ç~ê%ÒRgFðv	‚@�Ù^6Ñ“ FµÏÆrØ•„g2cÁ„½‘ šECÌy0­'E?}ü(-ûø�GâââÔ8]UË^ÞYFW�Ñ¥ C`ï%«;ÇQK-ÇyÜ»çšØõŸÎtú&³Ö˜ê2ÈïnWü¶ ¶µ’à0=æÊ=pXï,¡ì�èÈ]’Zî’èÈ]’–Ü%iÉ]È]îeT%ìh¨Ô¨;rò[(ûÜ¢öDÙwlöu	û ìÃ8J¨2#žãèV�#E:Œ£·Ý8R«¥ÐÊ÷2Ž�«Ì°§´_~Ù0�0h˜ ¦´«)å€‚Ž	ƒË:×$b[mÏZiš fƒ®	ÀFO m†ÀF¶6RÚ8“õÎ	ÅlÐ:ø¨„°Æ øÈ‘Ø)íž Æ_´O Ú'@û„¿5&„þ	ƒ`=WëÅ¤·”³<Ø^xL6�Áþâƒà1OF4éª�&+[ŒóÁã@IM8„Ôõ šñY2JO±oå˜VQECMËc‡Ø2½î°ÿ^f×~Óz ¹pÒŽ/NÿÙ�âxÚ“ž@Lú=Ä¤Â¶BAlÏ»3�ÎÅ°XmÇ+l¯5hÀŽÎÕ•5¾= GC‡øïëÑ@°�Iåó³üf÷#�]°'Ú4 õ]jk8ÀméÓ F€h÷rà‰M�éÐè*GÍÀ5nÄ!$©‡QOdT +Ý¸°’s‹m€…•t,GÇ6Àµ¥5ÛI·ÅNÂNÀûÙIu¥i°“¢ûB{çXì‰öŽÀNj´“ ½÷_{—Q\Šm”ÄV”d÷…’0¤uR’”4 J’Q_Š?9ˆ—Ûåb“	ròz"&lNžtjmt­�¾ïâ-[gDÕ�QˆŠ™UƒsdUÕðt¨˜µ¨ØnS5<P5ö¥'”Š1iSû±ÁÑ“UWÖÉ¶|ô8ÚÇ�¤RêÉ˜âz2²z@	!,$`Ü·æ˜ÞŸÔêÉªÕùþd’¤Å.�0ÊÄ§6xƒPþ¥«ü‹Â#IÃð)’ÁuT‡å%UoPC3·ÚÒšs\¬­öDÜËøÊ(MÂŠ”Ã¸ÜjX_>Yÿö®ZÞ“,ïIiyÁÂjÒ[0ì8<KdÖ¡·X…¥]é-T‹ÞÒÜbÔ¦·@x»—…¥2v'ÃR¶=¦l	îKµ%³!e«q‹2)Ûþ§l)“±9†â-�–mœÍ †ÐÆùÚ8ÿ¡ ôqÅÉ(”#:žqYvr.æƒVÎ@IM8¯k ”$£PŽ(.”#ö‚�ÄTÐÎh¨‚=(JˆH*ewD¤!¹lè¼I54t®-­¹·ˆ¤ÐÓy?Û(£ �(®Zvu¦º:CWgÍ¶Ú: `2J•¶ P[4v�¡±3Ð˜TƒÎÎ	!˜ŒJF¢£’‘Ô*‰–JFÒVÉHÚ*¡»ó~¶KPüÕÚV²Þß¹˜<ƒ‘l !Èý1’2Š•¶x~4’nÕHjhñ\[Z£‘ÜÞäYC°¥Õ>[3	Åˆ&SÜžÐ6)í	ËMˆë²éî××Õ´q‡¥÷hbIPcr ÆÔC�®A�é‚k‡¨í5[Ô\õPsÖ æê‚šÛ5 ¶Ô)PS»+d5ñxÉjbƒR-PkyxÄé°ôj®¨Ùê¡ÆÖ fë‚šÝ5 ¶Ô<)PSûH@5‚VP#XÔZª=œKÿá f[r ¦>, kaÑ�ö°€@X°#Ô�¨©Í	”PóVP£–&¨µhkN‡¥ÿxPÃrXM½«¶Æiº(­�Ñ e»¡¬s:�*}ÄÓ1Ú†0 Û`TÀ�r„¡Ä�&Œ¡V�Af`W”1)(cÊQFW(cšPÆZQÞÿŽ(³¥ ÌUŽ2g…2WÊÜV”A>`G”9R\2¬e¥nÆtÉf´U5c ší�2W
+Ê”[L²²˜D“Å$­ô²]QæÉ@™R¹Œ®Ô2¦K,£­Zû1¥²ò÷ÈÒ·å/üÏ,õçoþÀ(Y
+ 
\ No newline at end of file
diff -Naur ns-3.18.1/src/lte/doc/source/figures/lte-enb-rrc-states.dot ns-3.19/src/lte/doc/source/figures/lte-enb-rrc-states.dot
--- ns-3.18.1/src/lte/doc/source/figures/lte-enb-rrc-states.dot	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/lte-enb-rrc-states.dot	2013-12-20 09:44:50.000000000 -0800
@@ -1,37 +1,40 @@
 digraph LteEnbRrcStates {
 
-size="20,20"
-
 
 NO_CONTEXT [shape="ellipse", label="no context"]
-INITIAL_RANDOM_ACCESS  [shape="box",width=4]
-CONNECTION_SETUP [shape="box",width=4]
-CONNECTION_REJECTED [shape="box",width=4] 
-CONNECTED_NORMALLY [shape="box",width=4] 
-CONNECTION_RECONFIGURATION [shape="box",width=4] 
-HANDOVER_PREPARATION [shape="box",width=4] 
-HANDOVER_JOINING [shape="box",width=4] 
-HANDOVER_PATH_SWITCH [shape="box",width=4] 
-HANDOVER_LEAVING [shape="box",width=4]
+INITIAL_RANDOM_ACCESS [shape="box",width=3]
+CONNECTION_SETUP [shape="box",width=3]
+CONNECTION_REJECTED [shape="box",width=3] 
+CONNECTED_NORMALLY [shape="box",width=3] 
+CONNECTION_RECONFIGURATION [shape="box",width=3] 
+HANDOVER_PREPARATION [shape="box",width=3] 
+HANDOVER_JOINING [shape="box",width=3] 
+HANDOVER_PATH_SWITCH [shape="box",width=3] 
+HANDOVER_LEAVING [shape="box",width=3]
 CONTEXT_DESTROYED [shape="ellipse", label="context destroyed"]
 
-NO_CONTEXT -> INITIAL_RANDOM_ACCESS [label="rx RA preamble",labeldistance=0]
-INITIAL_RANDOM_ACCESS -> CONNECTION_REJECTED [label="rx RRC CONN REQUEST, AdmitRrcConnectionRequest = false"]
-CONNECTION_REJECTED -> CONTEXT_DESTROYED [label="ConnectionRejectedTimeout"]
-INITIAL_RANDOM_ACCESS -> CONTEXT_DESTROYED [label="ConnectionTimeout"]
-INITIAL_RANDOM_ACCESS -> CONNECTION_SETUP [label="rx RRC CONN REQUEST, AdmitRrcConnectionRequest = true"]
-CONNECTION_SETUP -> CONNECTED_NORMALLY [label="rx RRC CONN SETUP COMPLETED"]
-CONNECTED_NORMALLY -> CONNECTION_RECONFIGURATION [label="reconfiguration trigger"]
-CONNECTION_RECONFIGURATION -> CONNECTED_NORMALLY [label="rx RRC CONN RECONF COMPLETED"]
-CONNECTED_NORMALLY -> HANDOVER_PREPARATION [label="handover trigger"]
-HANDOVER_PREPARATION -> CONNECTED_NORMALLY [label="rx X2 HO PREP FAILURE"]
-HANDOVER_PREPARATION -> HANDOVER_LEAVING [label="rx X2 HO REQUEST ACK"]
+// connection establishment
+NO_CONTEXT -> INITIAL_RANDOM_ACCESS [label="rx RA\npreamble"]
+INITIAL_RANDOM_ACCESS -> CONNECTION_REJECTED [label="rx RRC CONN REQ,\nAdmit = false"]
+CONNECTION_REJECTED -> CONTEXT_DESTROYED [label="connection\nrejected\ntimeout"]
+INITIAL_RANDOM_ACCESS -> CONTEXT_DESTROYED [label="connection\ntimeout"]
+INITIAL_RANDOM_ACCESS -> CONNECTION_SETUP [label="rx RRC CONN REQ,\nAdmit = true"]
+CONNECTION_SETUP -> CONNECTED_NORMALLY [label="rx RRC CONN SETUP\nCOMPLETED"]
+CONNECTED_NORMALLY -> CONNECTION_RECONFIGURATION [label="reconfiguration\ntrigger"]
+CONNECTION_RECONFIGURATION -> CONNECTED_NORMALLY [label="rx RRC CONN RECONF\nCOMPLETED"]
+
+// leaving because of handover
+CONNECTED_NORMALLY -> HANDOVER_PREPARATION [label="handover\ntrigger"]
+HANDOVER_PREPARATION -> CONNECTED_NORMALLY [label="rx X2 HO PREP\nFAILURE"]
+HANDOVER_PREPARATION -> HANDOVER_LEAVING [label="rx X2 HO REQ ACK"]
 HANDOVER_LEAVING -> CONTEXT_DESTROYED [label="rx X2 UE CONTEXT RELEASE"]
-HANDOVER_LEAVING -> CONTEXT_DESTROYED [label="HandoverLeavingTimeout"]
-NO_CONTEXT -> HANDOVER_JOINING [label="rx & admit X2 HANDOVER REQUEST"]
-HANDOVER_JOINING -> HANDOVER_PATH_SWITCH [label="RRC CONN RECONF COMPLETED"]
-HANDOVER_JOINING -> CONTEXT_DESTROYED [label="HandoverJoiningTimeout"]
-HANDOVER_PATH_SWITCH -> CONNECTED_NORMALLY [label="rx S1 PATH SWITCH REQUEST ACK"]
+HANDOVER_LEAVING -> CONTEXT_DESTROYED [label="handover\nleaving\ntimeout"]
+
+// joining because of handover
+NO_CONTEXT -> HANDOVER_JOINING [label="rx X2 HANDOVER REQ,\nAdmit = true"]
+HANDOVER_JOINING -> HANDOVER_PATH_SWITCH [label="rx RRC CONN RECONF\nCOMPLETED"]
+HANDOVER_JOINING -> CONTEXT_DESTROYED [label="handover\njoining\ntimeout"]
+HANDOVER_PATH_SWITCH -> CONNECTED_NORMALLY [label="rx S1 PATH SWITCH REQ ACK"]
 
 
-}
\ No newline at end of file
+}
diff -Naur ns-3.18.1/src/lte/doc/source/figures/lte-enb-rrc-states.pdf ns-3.19/src/lte/doc/source/figures/lte-enb-rrc-states.pdf
--- ns-3.18.1/src/lte/doc/source/figures/lte-enb-rrc-states.pdf	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/lte-enb-rrc-states.pdf	2013-12-20 09:44:50.000000000 -0800
@@ -5,18 +5,20 @@
    /Filter /FlateDecode
 >>
 stream
-xœíZË®·Ý÷WôÜ6‹oA/dáD@†ÒH²è°³Èïçœâcz¦çêö\]ËB‹²øª:uªÈß&ç(fïÍR|™B
-‹	2ÿþqþÇü¯Ifþùý×ù‡wfþõß­ü·¿Ìlž\Ìó&3ÿˆ¿ÿœ~þµfþ0Aà_çßÐÎàÏ?ÑÇùôXG•ÿ8£€ÿ¿`ìuìËRoøeþ|ÙïÍüÓdT4¦qk””0�ç�–”zôŠ˜/sòv)ÙÏX¨5iN¦,!å^<¡U\$Ùyj5Ñ—Å”Ö¹šèS/û¬]zWl¦K	Mv+ŸÆØ­¢O¬u¿šø	+ß­åïcõ8”7o'q‹�Îá7Ö�K1yì—IYæ�ý’�qi~û8ýðéÁ< áüöÓôóŸŒ1²>~íj-¿n}püú5æm}oð{ä?âjõ›Vþ>á‡_Þþ8ýùí×ÇÛ²Hˆ³ØzÌ6Ù%{?;¿ˆ±T»£+ô)Í¾ä%äâ�»¹¶¼>ØÄ”õA.*Þa¶×è2Þ£‰.üÔúÐV:™�k°½�mòôû	MØI~¡`‘5nûŽ.bë6áË™¶Yô~}Èõ{dûbv‹Àê’["¶ëqŽÑ,!„9§E¨ŸŠ‚¦bâÂ³G£%Ø„í–%'êÔÅö~},ƒ3±}}S¾Püb‹ÓÃËPû/�o–$e¡dµÖ}¿7G•6(ƒKa^‹ÿ|¸u°Úv7åJ»=(·ùAâêÃEÇ¦½“@‚¶Èkôü–ÖòÝ*¦6<r.°¯¶Ï[µ~�VgàŒ“èM|F¹åýú´Nú®“\£œÚn¥Ã>U{˜ºžÊ‡fC“Ï–Ño­IUúã¡­�:..º9É’\&C‡-~ËaIÖÍ`è#ÜŠ!Âú9g¨l¶ØJ·¸œîRÙÑ2Ä`=ËE– Å¬*  9£&Z­	>©ÊîûUY¨+ñÌ¾TeåÓjË¶ÜôÑšÕÇ¦—Z–ª�Ó€Ñƒçlíú©²ÛžÕ�éˆŠ4a½<Xßd¹²¬â®A0{DCBsùVìbE.Œ'Üc<GPñÃ£ÒÙ”p¦·£‚ñY×ûÎtÍ©÷îbt�F_šRØ"úØÊÞ{ì”=*!ÂB´2Š‚; 8Ö´;dIbYˆÇ9*.ƒk¨3•ÔÉžæ‰ÎßÂì¬šð§ˆbÀþ ¾³z¢âK¼Ó=€ÜJŽW$i�kâ)J°êP�i°&æî®z5´º6=Û–‚�°wº†zLÍEô“í¶²Ñˆxq¬ý{Üvf0�5 5)}VÝ6iîá†¹Ÿ­½Í:/°1´Æ(HÔTd'jýÛyš§­ÄiŒqMñºm=m®PdË¥DûnuZž(2m–e±,k¶ëì-Æì7ÂŽ˜‚+J% ð%é’5ÞÅu÷ê"ô4¦ súÞÑó,d¸ß�Øì?L€ïcDö‚CÀ©¸\\ä„€ Ã’Ð˜"á%©?Ät —¬»
-ôA)8Aé°á±àœÓ°D¾ˆ“Œá>üô¡G¶�Áï#¤…@—xÊ’4ÄäIgmÈ‹òÍÏ7ºE�º>ËyþBþç ÄžVÇ2	’nw#èCÄ1 ‰Pz“<‚âL  Ûê5%Á—z™b	øVïh@ÖŽ2Ì‚Ì\@{Õ	Ñh—Ð‹mˆÓ¨€aQrïâƒxä´ÑË§1‰^3&ÙDôòtäó�µŽ¥‹!4ÐÔøBr (7#ê;³{²Úhí´Õ€¼myVÎ6†ý°º­Ê˜ƒÜÉ(R)w
-$°Ç;8{®L(”sÙìŠUîtUõT9à°*`Ž„Û¿‡ˆ€0�‰ŸQÆô@ØîÁË À#|¬«+:«�‡ð/&éLzæ¾ßaÊ¥ò%ƒsÙ•JÙ—ÛÁMƒœn›íô;@„•shó$¬ô|KïÚA`DMUW¦µ×ûLÇØmn˜Že±2X,³‘N¼†ý/ç#,FÍ|‰cŠSÄ™×%$ç8¤ïÞtNOõÎÝifÒòXû¬ØiMlþ…p‚òQ3¡ˆþ%¤ `áÄ›SÑÌRÂP“‹º‡`J6;LÔê¨ü�úŒ¨NÍÏ‰SôM 'Îf”ó’Ì�	„E’ÙÜ kÂ !-Õ1@¢xSXaxßš/Øu;jSmy>–çèÌBŽ…©~ëƒGöräªšœžvJwK�hqD]õ aÛ»YC4:F·60Þ¤ÑIMôròZ†æ\W=U>#ø¨ñ^³V“ƒ¶1%xààÊ´ …Úrãeß É|oÈzœ=âùà€×Ù,FsQ^*	k0#[¯?öýŽj[]ÜöÑ‚ƒ@z¾�M¼�à×<®ûûIqöŠ7N;„¿êîÌHªÞ&”çÔÔ-„÷á/¬¡óÆ-ÀûíS§÷!¼`²ê6]i¡çK“Rh®9xçŸ=„ïsÞ�õ‡'a+uö-[hØdÚ½<=•æcŽm8à”¶¦€pÐ Ê¤‹p�A;V˜šàLBV¢-&Ö[AƒZ-CVƒU §áj/œœ€¸¸kbÙäæ­ñåŸPU ¦å2¬<3ðÂ3²uEj-ê¨ánÃôV†æŠU'‡Å‰`-LC@¿¢8»Ì€çÂ11Tp5ÜÝw=ïÖuºçéÛõ­È°Ë+ææìª0ïÜe8'çpÇ�k»Ü‘Àk†6dŒLw…ß°™�³àèê•ö7pL©oã×Í÷UodÎ>u—.ˆ«\DþOã´†ƒÖ¨,¨À×‚·ñÞ¼!¢  rA`E,Á&ðfæšb�97–˜Àob¤!Ú*�&ðÓŽf'štf9�i×q‹JÑë…Îg)QçÇÑ’­ÇÍ{ž�pV¥'S�ißë0m«Ëc"íë¶ä|3‰t©ï=ðQí§‹¨vhÿ Z7R¦Í0º=tû¸Ó.„éxÓ6J¸	Â€6ðð°W$bùN!$(oâDÙûf-x;C*Q!3¢¨Œ^ÿS“"ºQÜ½1ÙÙñ‰gâïc…3>“pšæk«œ1	—T…1÷]#¦u�ùeRû£�ù�r„×Ì»wPo]Óc€£‡†'5Qvê�žæèG“Ìûš*‘¢g€ClNRœCt+hÀàèÄ %JÝÏžwÊ¥¾pq@YŠ^ØZl—œRôbŒÝ+&T�«>L.’×_¤¬
-¢2UÍìó]ŠW¨à
-àlFShaµ�¼„Ñçˆ‡²±
-ÏÈ•J·ëvTåÚò¬”jÜÅõoÚêÚûK=èõÓY®)á.àƒv•ájÜ–ÞA‹¬jÊ–v•=” #êã|}®Î^îžqÊñ¿Þh�+¹oßú¾ª¾ê6÷«½¿éÅD(Š ›ÁG5pndÀP>Ol•4ƒ„€4&Ä�VïÃ’+-z8e:¶»\)Âg’jäÝ2FÃ¸�î™’©¾ÔõqsnÏ|öý;Ó`º3¾g0¬›éæ×Óù—Ü¹œcšíUKÏƒ(øÌo|óû†"Ä"Dî¹¯MEÕÅìøef¼"j;ç€#ùÂxeíÆ�½?´s°ä%i/ ¨cQ�ÖDÄgØh_ÀWø¼`\àY˜ß\b"j[ã> �÷ð(ˆ¤<ïA‹GW–aL|¸`îKÈ—’•[&�ôy†ÖøöB/09£;kÀ’Úæ¾ßagAºS<'ýÕÌ¯°�MÚfÇ%¶$Äu«y6gpÁB6C\4œþÀLa)N�1Ç­žƒ>zÑsÁ%‘0ÅœÐ Û|eÑ L•QÜqæŒ2À,©rç*ÓaRÒq(ˆë)ÝëÃ3=ñë^‡\µYo`^–-–Ž¸tù6ìI“žºMo“ ½¡µåÚôÛØéu·?Ÿ=ˆ¸‘! ¯O¥,Ì»ñ�¬UÏ˜S
-~Ž u¤sŒ�¾.ÀPù‘i^*Ñ]7s ’úHÛ,±Þ5æúð3$>HãÅ\©×�!z½¿Õ‹¹]·ãïdå)T)Ä^ò*þs4ÛÔÿíääÎl‡ôýqŽCü-Õ^LŸ/(Ú‘ÿ4ý²‡ÞÆ
+xœµZkoÇü¾¿b>î¹ñ¼€c@¦e)ŠD[ÔÅNà�BYrRŽé8vþ}ªzf�'Þ-uGI0Ì}ÍÌÍvWWW÷êçÁ*þwõJ}òÜ¨W¿>©œŠÊµªUö^]ý ^OÕÏû|«ÞôùgæùVý6õÿ¿¾û^mÔ‹ÁõDíYà†ñ?L5éð8Duy}åƒC*Ú%§²K:Y¯æÏççÊ×¬³/ó�?Uµ�n3}s�ÅÏ¯¯b”ãfzòÚ—Üoç†o~{~<ï­OßÞù¹úq˜_
+6ý|=Ø �1.¹w}åkÔs¬öµüúúrøäåÊ¬0H­_ß�o¦UšœÕ´òãù”J»”ÿÁ½4þ0?þ>y\~¿~4Ü__´z•bPÎ&…‘ÛÖ¾}cÖ•¼[ÜÖŸ¦•Ëã)e\cNn¥ñÞ´²~|,wþ!»;›|•Ûn<ýBî|…‹4>™†Ô‡Ü›âxr2…ñ>žØñÙ´*øsó]|­pðãšç.•�U'SU¶Fã†«¼q®:¤ª\(:Á')ñÙùöËo–u¡êi'xN¿TÎc¾´œ6!«ŒIºæ¬R²²ò<üùaNX^^2äÕTÅuðn˜MÅ_]]‰1ª•Õ8IÕ©õLø÷"fExæ~>¹0^NÉ�ÿäý‹É<¸i¹ PÞ	–Œ·á!=k6žýFØÜxFçæñ‘@¥ùü-Øœ>ØÝht:ÂâÙe›“2Ûªlà|ø6sX•ŠÕx›è@ôÌeË‚‡£+ÚX‡Q^ÇU£÷Ú šéakèOàF{+.¸#<Ák{ø¯Ó*ÅÑáo»¾Í|Ç³ûPO§�öûƒX6ÊÖ—p£SHÿ"AÈOýÕvÚî^áF%�ìBÆY«"<p4d\@ÂœaÑ 'ÄBOO¹•ö®'¤Ó)„�’†á‚6¨ÑÌ_d×_OÃÎŽ�b&Ù¬kbþ N4w€l ˜q‰(;&cs×@Ž1L©*–¢m�H˜‘ŒS1W¡â:iïq“Ë,àÌÛª‹2Š´‚Â^JKra Ê[§+WÛ0º�`0R,ù@&9›BOÔI‹»fëöä¾PñS1rÃ¬TkÍOxÕ€u�†Sf‚pƒ¼v~O4õhz$O¶Û¡_}±³q›™TU™ ²& ]À‘Ùx\{IÉ$è\šŽ)"Ð "Æ§œe£Ñ6'a#bÉÈfÑX‡° )‹gà™h %¿©XiMm
+‰
+¹P€Ï•V<RÜìGƒ�³ÜR/'o™Ý|Ëi¿03îa)d|)ló²>•³.¸4"mó)|ƒO†ë7†
+…hì<³_aÑóù¼‹Åy^Î"(¸f?=Ÿo˜ïÌÛéS·¶z¸>´Þ’L—“Ë»ô A/Âñå�H1å±�“ý0þ�
+í Z«R
+‘T5WÌò$ é ÿ å C¨rê˜ƒûÉõÁ–4´ûX#Ø" ]×¢k¥Ua1Up¼	æ…†)N~� N�¾’!(Ì>B¤Qµk¥px`_>-Kœ6~Ó–”ÍÆ‚dš�iC£38µìà¿Ù]FKÈ:²ö¯Í»Y-)îêø<Œ‚ÌÉÄu4sÎ\¸ò¾+ôÓ¯„ÜÏž 1Ûÿñ„²ÎŽÛëfÌ�º-gªjï©�d)”dÊ#øŠ!¹#0b‚˜Gé~OUÆ@±%‡ˆòH¨äZ8^;`€º)™º ZB}JA‚$wì ax°´§¬Ñ†
+-Çecî€]2î�Ô¹(o‰"-SÊÜ QwÜ“)aà*˜î‹íe³L›#‚œ’!‰.%M¹,õ®¶6“rPiyÌr³f;ëÇANÖý‘…‰ij½,M•“�<­ÐG‰b‹9üA¢F""Ò±¥ŒÕ ‘H¤™N±àP‡GÅK="Áyª¾ú¡CÛHßðÊ¦&{=Ý\$µë}¾ñÔïïÏÉÞ#,,~dYD…Þ5Õ<çËM¡—†ñµcº·(¶û="vß�ò&0¿ —nÔªyæl§K…ª7TÐUÀZpÆ¢èõªé!ü‘œm7| Ö1ÒJ#�Z<H¿f,±ž¦e½¥HÈØ%3l®AAÀabÝ •Ãz�"îpd&d¨Û’ÎM QÞ†Ÿ³}Ø§Ÿ­ê§XÑ~¶y´Ya1¼¢Ôô4q.í‚ý°†¹J`q/*Ût™#k¾ÚÈ‰«Ý”åbƒåÑ)¶½–ïî54:ìˆüš/ÛOÛØÞ_Þ>MÁ²�Pm]2Â¤9È&a€ÂnEŒøŠÝ"opç{…¯³Qr�©aÀ”Œ�ügƒA†z#‚1HÒñ@§Åd‡tçÁ‹pÑ„û <‹SÌ–úW@“„'ª«ô¯@—Ì¬ÄiËs.¶Ž–ébéPœÊvoÁé�×ó#œ‰¶Îúïä·‚‚lLï�®%ŠL^f‹¨TÈ+�Ê 48œú3únp¤ –hD’r˜È	N�.Q(ø™A‚7’·<X:°Åˆ…¿k‚2q¾qCEb«nÉ5[¨Èš+ÔlÒÒ¶QÚY�Uv�1¸“¸t÷![ã»(ä˜êíš¿°~sõJ�@È´!'Æ ‡ ïpôÒ½#ð!G*(™I"ð^óü']9ñCÁS­d')P*(¤õK‡ØEJ'ÿ·Q m/’1º;�  QáÉ*,ïó1Š�»=Ô;}@Úµ;d‹ÄÜF	2zÂ99åÒõxc´Ç©çÛû{z`s‡>0	Ì–÷é?–b¢Ýº7E7~#¯×Â»�`b¢À¢ÈÓÔ—Òƒs"ZT�Êpt€†EÏz‡òÀ!³Ô
+¦ÌÒÖ´‡ì¸6ßR©‡Ê1AšÑG@ e†söSnƒÀ[©ßåÉŸ÷vöïÔ¦`¯Ûš´‡äZI¯=÷�·{Eó-þÐ¹½»žðçäáž– —¾B¢æ—c¤c†ÓÈ¾»c<G‘†c©¹“´H’´vÛBl·òêguëéM}®òÁ:c�[ù]J¾Š€QsâŽÌ0¨­+‰ É	ï„r §Ò§™Ï¶ŽC/êäVÿæ…•¤–Z(SB)Jjî€¥FU˜ÊÈÚNŽE{…èv bie�Zn)“_jîØ²—¦)‚E’Äb«³až=Â�|Ÿ—µäáºeµ÷z#ŸE¶¼‘h™O+Lÿˆq±ðÞ¥^Èwnn§äþ	‹’.�­pGtEL%…ÛÒN¡>ÂhÌ²§ù¸!Ý“ÀÓ»)7e)Îø!Že›'I˜“:Ë±Áê%)SËà·-ÕV¶ÇÔéuúmMþ·ÂMÆnxsæ¡4ó�z&Î ÍiqMûž<üû0…F§›ÏjXYf�`²@m?*ÙþQ‰ÖcËƒÝ	ä x#`öã¡Ú[x8ö–²ª†_ŒI[là‰í`˜aÂà	‹6wPªÔ„?%¼d^¬OD®ðk[@PTî˜Tå
+®ìrgäÖTÕF##1çLpkIí&…<t§l³áÛR€wzl·�„©¿´dmPE~eqBôÀ† åw9¹¶üÎÂ®l&mvŠŽ¼ø£ô±,âsÁuÐS@ònéŸXÈM)òæ×íçáò(ø¶p-	�~L_ŠûôËéåpvŠ '»“Jú¿hÿ@ÀË¬=ÜdY‘•»rÓÓáÿ¡{Wv
 endstream
 endobj
 4 0 obj
-   3089
+   2892
 endobj
 2 0 obj
 <<
@@ -25,82 +27,132 @@
    >>
    /Font <<
       /f-0-0 5 0 R
+      /f-0-1 6 0 R
    >>
 >>
 endobj
-6 0 obj
+7 0 obj
 << /Type /Page
    /Parent 1 0 R
-   /MediaBox [ 0 0 1512 646 ]
+   /MediaBox [ 0 0 870 804 ]
    /Contents 3 0 R
    /Group <<
       /Type /Group
       /S /Transparency
+      /I true
       /CS /DeviceRGB
    >>
    /Resources 2 0 R
 >>
 endobj
-7 0 obj
-<< /Length 8 0 R
+8 0 obj
+<< /Length 9 0 R
    /Filter /FlateDecode
-   /Length1 12944
+   /Length1 12408
 >>
 stream
-xœÕz{|ÅÙÿÌ<;{;×=9'÷+¹sKL@Y#w”$( D°µ€È5Ø,	4*$Rˆ1"ÅñAD´V°¥Úz‹¾�H}©µ!™¼ÏìI í{ùó÷ùådÏž�Ý��yæ™ïóý>³„BLRE€$Ï¸oÚ\˜r)HHæZ,Ý?cáÉdvB!!YC¡¢|î=÷Íë·ð^Bzâ1Ù{ÏÏ–”¯üKÒGø{!ŸÎš9­ìòÉ·êðü—XÖ¸›ÔÕ„ôJÆã´Y÷=°Øÿnìðxú³93¦èÄk{§áñ¹û¦-ž«ìTçÒGÇãä¹÷Ïœ;Xû;þì“EŸE)õJ9ß�­ÕH¬íV.õ2Õy%SHNË©ÖëˆÿTë©ÖÜ+ÅJO±RÊÒ>âÚ¿õš÷ûoïW³	%‡	QÊ”
-AúÛ1`ðRµÆk5¹�˜”édœÇÐ]#‚þöÖ¼KXaÎ�s—ZZ­@TaîÁÒÐ{!F§R+Õê—‘ÚCá�üÐ4?/R)kZ¶¬n_ssÑó^;ÊvtÜÉ¶nÛúòŽŽ¥tÿÌ²o°íó:Ï*ð¹.EÆØjs€4»›k£�€o<BÃ£ñ™ò‘þs—ZýríÔ¡1¤B­Ô*õJ£Ò¬tU¸+=•ÞJ_¥¿Òª4Ä\Œ±°5ØŽ`d~^ÿ‚~™yÄò“Ôò›Íß°ooÝú}ûÖ_¤qáâßÅ7Ô‚OÎ?~þË·Ž}µE¼%ZÅ×â-¤4H¢™©l#œÇ6Æ�¡v©¦«oµg•Ùl)ÍQMÖÚX-à!£‚Ãcýíçòº[*.]ðÿ›ëòÅùãªâ‰kˆãØ¬P_šÚÝ´!/·*%/Î�ûuñóG�>_üëq·ìœÚ!>¤}¨:q»R°¯W¯³'OžíÕkOZ½�zi€JuÚ5€ö-ßŠc6ÐŽñrÝO‹ÑkL—nààëþ€WŽÙ�üÏ+,Äqk½4¤¥5Ï*,Ì=ðlˆÊQK	¥XÁÈÁ4”Ú#£ÀJ-È·è"Z!VŽ�ÿÒK§·×Ôð­âõÚŽ†Õã6oû=+­¥7à£»Æ­m$qd®�FBÔ¨ÖWñÐÓ”7»é‹ÑÍ�&÷Úø¸ÓC:Ë¾áñÎ@¶X�Â°‰Îù/àçÒ,Èµ³‡&ÌMhHø]ÂÅ>”¥CÙÐÐÐ8Þ[ËÑsŒÞæ2‡ÎasBsâŒ©ó¤Si·“¥óóˆæ˜VS*Û¸O¾pï±é3~÷Sq	‡2»ýsª5±�«67{Ù]S^>Ö¯ßþž½é@jâß$þÜ²ñàþ­Òžƒq,QJ‰‹Þd�à–ª©ŠŠ&w\¡Œ‚ÅuYx¥i&•;—©éšaéºVdj
-Utò
-g]¿˜®ºý§Æ6šÆ6ú&Ü1¶Ñ/¿¬	wLn&*±–ŒmN�¿;_XÒrªÅŠ’#4¤5gÕØÛ&k~þµæ×»6þõ��KzPûqSQÌX%df˜×+×™•ÛµÉf¹¹�.Uj˜ë”æ&e›²Q{Ì|ÄÜEŸVžUvj¿1ÌxÎÓ!2b]Ù�ÁÓ�ž®dÏ Zx?­¿QèÊõŒ†|¸1Æe{JÈ$ZÂJàv>I-Ñ&é“ŒW±gŽg1­ô<A7h{é­ÑóžçO§'g*™j°Tƒâ¾A•2ñSºçŒ8,Ÿ¡Ï‹ûÏÐlš­”v|Òñm£Ø)æÑZ9Çñk=?�XÖ÷ò,£ñDQüíÒvh)"­&á§5—Úž\nób^Êkù6®N�È·R�¿ý6?ÝÖ««ž�õd‰�¨Y8zLh‘Æ€<«s•j,^é¯aõ&úe{«UØeüÂ.ã+_Ë­¤Ç�$Î;·?¨�b#µÙ¬\«bšJ5DcÕt´z;�¬Î¤³Õ%êJú°ZG7«Û\~´@D
-µò-üJ=Ný¬¾E\ì¸·…Ÿ¾œ¤|ÖÖKùìr¡�mès_a;5D?¯ÊêÈr…ÚOl®ûO�k?‡�ºÔš—K¥M~‰èÄÆÎéDGŸ±,±#ˆ‘DüX}’æ7lc®±Í0¦‚œÔ©VŠª|ÓqáDÇ~zOÛiÞKÎ[¿Œø<†ñíuûFÄ¢p…Y=Ü2Á$# ¦†¯ÊBÃS—'Šhu–ÜÐqF £Äà¦Ëª%ì¶çNµ®úm—»òó^4h²[´ÈG}Ì§ùt™L’¹d-14ª3%’Æ°It2+vßCg±Åt![÷+‹´Åz]ÅªÜ�³MP¯DI'£)4Ÿ¦B
-¤²#âK_°Âß¯ê¸{Õiîíˆ�ým½h¥XNº|B¹ûÎIºí›:EE�^u®5×6rµb­
-ª…J—BC›ý¡ýnô«Ó{p¼ZE‚ûÐ?}¿%OSÂKËuÃ+‚R�¼üG±¯¶6Œ‘Ò'àó"H<yÎ.@»�©"¢ ·ŠT…„@	ÕÁ:Ïr—ÂU°éåfLŒbšñn%AFÜvµQ…è¡Ž¡/µJKËÏU”à_ãhZ;Ñ1íÒÊ	§�©)!Äæ ‹„(%�¤Ót–™j†–¡gÉ‰ýi6‚Ž`³øe_±J]¥=®>®%¡ii"�ŠH…¾´—í)É‘¡ Šþì„ÔTXwcÅ'Ï¼2fÍâ�ß¦oQÒþPÇjñX]ÝcìHä#¿³heýôŽÕüô‡\w˜ý¤ãBÍC­ì¶I#ÚD'ék‡H�±œÖùuæ7	�ñä‘xC	8�Bv7±Zs”F8±*ßÁú”ôgŸMéúK´€&‰ÏÄ	QD·Ñ´^ÌÅbÏ¹¼ˆFÓ¾´7�Ú%6Š*ñQïŒÉüÎ³ü¿èð�TäuRç~Tò�_>Ä„üÑ\á´GWxÁïÌðã�oÈüXtPøøcJEçÇt],V‰£âMQC—ð›E“øBüU4ÑQ4–ÆÑQ;Äb«Ø&î ;ètüììöG5	má&¯ØýÀÂHÂ¨t¹f˜NHÓÀ¸Â@— åÂ™‡ÓŽ›j¼rƒ‰Èå	#WxþÉ°þßô‹¹^é“@N7ƒ™!Ô"Ì–¡%kf²ÙO+0g³e¬B[bV±Ú
-ó©PDÐ8H¥½!SÏ2úÑ!0I/1fê÷õ%8në Ž>Aép"¢—ÐTìúÐi%íó¦¨<!*ñÚuø¾­Oj'
-iûÌé»‡L‡ä›±ž'½ûÍ:‹>Iö+uQ�JJã!¹A¬tÿ®Á�ÃñÝ…Üƒ¾¸¤8ÖE¥Âr-@*Å3ËÏ¯è$â"õS²â|ù½_ÿR<#–Òjz[õ×|úé»ïÇÄÅqì®»?5
-ýQ†ny#Öà˜¸¤wªuŠ„	½NyÆäÔÐ—·lÒ)9çsZ�6åHò u#$ævmÇ¡±#–ë(dß·ß€à+Fìé8»Ç©¿yÓvìw&ù…=Äãf^KLJDº¦™,))±Èt%&)!JBO7D×YJÙ�ŽÉJ4]Iqéãí£Å{dù?nÁÁ?‡ìÉ™'h¡sŽ�üG¯¸�W¢B×�À‡fê¡¤ìœìŸdÃ5T4	gz(¨¤ôÈÈ,phNðœ;ýÒ$‡5ÿ�»w>¿h×ÒÏÿ þ,ÎßûMUEëýÏ©Ù\ñùÛ4ê³ÿÄw¼9 ÕÂ3“bz�9tæÓÜœß±ê?_–ÝçÕ½GÏe�°¾€1È-’kU—F,Ôx›Œ#š©b8�“=X‚0rÄSïHRx°8b[„épC¯ÊŠ(“4º÷–§š›^Ñ7¬/w@QQ>ƒsgž“”ø<?bïv\l3ñ›¹Þä]K_‚#	VÀ52
-2á l^Xaœ“ªÆß‚´Ý(M¬JlHü4Ã@ú•'£ƒ1¤É4¬sOçc+ž«x‡tv¾SñøÔc�=%·ÝûUsOÙ4qD|�Ÿ#ÓèßNœ?·pl¨@?èƒí3I:9bgÆ$¹¢/y:JmöZÉÕI‡ã›SQZD¹IDKí•zpx¶õ�SØÜ0[i9w©=ð(òhÃƒäÑ?ÏMÈMÌMÊMÎMÉí14ÓN°í$;ÙN±{''''§÷(Îœ›¹2¡&±&©&¹&ee�G22/f&vßÚ}S÷¥‰¥I¥É¥)sç&ÍMž›R•X•T•\•=õ¥u=€òAJšŒ‚~ýóS
-+iÎ�±—?Ù·|Î¦æ¦¦¡GVí;Ñq™²§6–š0óå)ÿy‘å—WLŸæ`öÍË÷”O{mûK¯*×ôí»'3³½Ëw´´U2ÅÎPF´�¨	ZÈ]“�MqGbüèM>]W‹-ÝW­ÇŽHuÂf;‚cÀG”«@JÁjGä¦§ÍM{$­?¯¤}’Ö™f`?œv†®U±ÿ&g³‡¿ºâÙ—›ï_P»«ùþEëv57m\²t/¬^¶ðŸKqûä)nÙÖíO¼òGäÞ3}Yx¼ãxïPƒˆ+ñR­A³Ûg4G‡Öúšâ6Æ�@`d´[Å†_õÆœVÇ�^È=öEÀ6^ëx×8dfÛ_tû^Ç¯®zä æf–ÓåyìÖkü±l7¶†’×ÐÀKð�/��Œêdòí0Ç¶=þ.Š=—_DÊìpì×ššÔà¿Z»9ö`+{ÛA½Ž=£�å¦Š(É´*Û�Y=äþÈ=Pì %Ò*äÅÈ)$cgyûíŽÈÛ;¶°²¶^5eÝÝ<U%/Ø™¨¿TŽêT¹S Ïc¤¤¤ú,‘d”pNµn.Š$þˆƒÅºŒƒÓ	ô„‘ÊH>„‡@S‰ÆtEòù ‹UbyO’A3X¶’ÍÓÕd} É§ùlˆ2„PG‘át8­Œæ#UÔCj9›­ÌæKÉB¤¨K”%|�Z¥?N6ªÙS¤òÉ§lLÇÑèú§ßwCî¥|……vÖ‹rGç¸H‘ábD«ã�d¹›ëja—é~ yÎ…1ÞÑ)ŽöñØžbO©§Ö³Íãh¿Ú‹Hì>þöÉ³·­þ9ÖõâÛK{ê_¿o×`ÜI …v2áq´âêôÀ“ÖþP�÷Q}m"#ñV?%?:ÆåO”¼â\{Ë•¸+N]�ÏM·R
-R,UéŽ´JÔµ1XyCb�â¯b»X@×Ð»£Úœ¹íkÄñ5*íÀOwŸ¦�îê¨¼m"ÝDï£?§›F�øÃÝ¥â]ñ¾ø½x7Ý™'Ë±�Ûi�\zÒ®÷P¯»Ú
-X®jÓXF51B‘!�ªzudd%9­NHL ÕILLHNb)‰–aFE† :hE 8gªaED˜(ÿ€„O±èž	ÊÒ¢€Ë •˜‰�òªY™j]t¯ºÌi�F¯õF˜}]^ƒô„2½‰Ð7�™âµ|)ˆó_‡öi9uJNNÄ]À–ü·¤ë=÷Ý_eZã(KÎu­$r¢ñv?,“nzmÌ¾ê¼WBxžôßš‹÷0²ãI<MbQ®ž¤'Í"ýÃ\w‘:Åœ˜;%©$÷žÄ
-òÙL7±�z�k}¨.²®Ç¦>I†Ëpë–;Ó�ÍâŒWŒ;ÆŠÆ‡"’ò2I&Í6R=#z³B9yƒ�~�Âˆ¡ycŒ›ƒcC#b~’7‰N1JÜ%w&Ý�w¯{¶Uš·€.q/µÖ“õt#«ã[´-ú6}³ñ„k³û‘¼†¼Æ¼B©'¼´+ïe vÈW™FS3�Æ‹’oô—Áý
-/¡ßÞ1ñTÃÝ»F‹
-Ú>¸H=ìž5•Fµ×Î:÷ÐßÅ»ÕÕ¹yiºmçÄÛ·›ýÐ`HÿääÇ^j³ÚŽïKNÜÿK�”ÿìú’ÛiÄª>›1ôÁ!ÛßLK;”sÝœÉù÷tå¯¦ îùÃxÜÍÖz›èFp˜ÁHäÃ-’—w�[~€ÇÆœ�Ç‘I»sŽØØÞÔ4è¹e':Iç‰eÏuCdÞ½Ñ±»þÕº»lFuü›&BÝÔ€]ƒÇée{Õ—•çÈÆ©®�º¿}H˜#!–Ú.©÷‹�RÔü<Í§$<75)¥—ÔàWrÞ_£ËmÕ£ ³»&?Fþz°ŠTšl*±9ŠC•¹�Ü±�EÅ“í f!Ð–é2meb oçš¿õÊ¿ÄSÑE#ÜPTÊLP©ÿJ"ò�”�ÌýÐågè|ºàŒHfäŒ¸S”ü‰…çO³^ùíß³ŠŽ•� ÛˆÊLƒs>žlF&ÑñWˆL?ùŸ´6x‚�*¤�?Îc3>Êj‚ÄÇÐ„±�‘2§trjÎ£µ¾új8êËT5ŠÇÌ?™4Ë›¨Lâ“´¥ÊR¾0®&FSˆ£Ä*q<þ²P];?î�ø¤:fEìŠ¸ñ»Éî8Ý7y}A2àz-±QPcü «Ùkí7Ï§ëò§ÝòTõÝ,^zjò—48üŽqiÏž=‹è£ƒîÛ8zQ}ÑMï\—÷åëwîœ› þÖ£âû.=š@nµ{b<÷Q·Çí¥�»È—èvj4
-TO¢'Îç#&Î‘©‰ÝY+	;þG¬þ(%àôöùžnWE,û�ˆJÍKNIõ‡5,,5íûÿ.eÛÞþ†1º“N“BÖ¶íâWr vg£¯YÄ¶#uf¡ÓÔy×dy@�7bX»1p5¬ÉÁêÚy]j?—JŠ¨EÒÒ�ÃS	gX¸µNìãõý'Ä'Ø˜/Ä'(*\üàƒ‹°¦ýNñ±ø�ö¤i]ùe�“_ˆ ƒìhZç—)†€ßÔ™"3C-™b†™IX:Ë„ŠLÔ‡’BCCw‡žqgf‡çqzŠcEæ@èz±nóæub }ë²4Øeñ6Ïéxï±šêÇv�ýèÏŸwìFlíÐ7ˆ œÄØnØJR‘£Ä�h™c:õö§î€ü¤F\ü`Çò[Å>ñ*µ%¡^™â¬ƒ8z¥›6ùÖÆ½s$Áa‡#‘'^ƒHÝzåè�ôÊµ D¯§¨ÄšÓ�ClþUtÔÔt…%vì¿šÊöüë;ÇO÷#^NvÖ‡‚d°u…h­I�›Ü¨Q‚®qécH6°0ŒS8´ÝËDsB¯Êe¢ëš‘í’t¿\&z¦©é¦ç¼ö}�f»:¦mÛöòVq¹a_ùŒ‹°[ú×œÎ³pÛ�IÎwiçÛº¤ómW¥3©¦«•`uhu´\ŸIoºª�o�Ó½šì1<KjÍS?ÐÎÈqþ!l?ÔÎÝqƒ"ÆÝûâÍxW¼»¯ÑÛìíêíl6»»]É$™¦±,3ËÕ3"'˜ê™•˜•”�œ�’–YmV»ªÝÕž€daŒ©¦ê7xÀ>ðCÄBÄ+	FfNöÐì»³+³«²ÉnÈ¾˜�˜3ïÇ"]Mýw‘.ƒ&¬·{ÊêÕÓ7mÙùÏ?NyãgåG§­X;s¯½÷ñOß-?¨ÝŸ•5a‚=:ÅÛsÓê-‡RS_.((?¶8Ý—V·bë¾Ä°F9CKùG°Ý‰=ñ¶‡laêEçT!©2ô´ä]YID,”Ÿ3œµ	¹ÁöÝÃù�¬è{Œ_¤ÄŽç~êÖŸViÙèU�˜,B#šÁu�ÏusP"�)‘À^
-ñ:¿%*8ËU-GâJÙà¿�pÀÁ‡B2u�6I á$wjA¾´û¾qÆ-4G¼ßÜØ¸ÿ%5¸©xÖŒÚöx¿vÜ‹{eÄùU©”]cß„´Ð°ˆO.ßâC^G|Ëí!rçõ`Øs[.—Yäq~ââ5ð’×uÄïõ¸MC¢ûŸËß½°£;¡ÇuÍrŽÓ‡–ðjN¶Y?@æk—tt—¢òdXº¨dÿx"Í(�ß“ê)ðŒ6bŽóL1¦˜÷š5ž*ÏzOÀ$Øw»¼._1¿âçQfÐtÇzc}™$=1YIæÙz–‘n¦¹ÒÜ™žžÞž¾dk ) ,WÉåÍþ®þî�žBo¡/×º‘ØÔf6ØŠÍmÕÖl½ÈnŽôŒöŽöÙÖ2žŽg¡X)æ“Ô‰Ú$ývãvs¢k¢»Ä[â+¶Êi9›eÎöÎö•Zúbïbßjò°±ÒµÒ½Ú³Ú»Ú·É¨sÕ¹7{7ûv¸v¸÷z÷ú­÷¬O¬Nk&:8÷Ò°lJµÄÖ�Û°lýÏnž�Ÿ"¿Aï¢w½1ë­¥›GUOPÆµo€ŸI?¥�íˆñçŒß`g9EæM¹Ü"�Ž|…èEr¡9&ö*žØšá¬¦þwyHL9Í‡pdh)–ËsõmÃm}<ÏÇë3Ù/Ùzæ�¤±�dfÐl@‚mÞCgÁb˜kn3=Ø)ptº¦r†n¥Oœé¸xYÏfVÞþmG!;æôAò2ÇUrÙÎüqT¢Ê>¨²¯HéË(ò!-ìsÝšPº›ä@wtGÓÿCüRûW£Ø½¬‚U²jVÅe;˜.d€á¬ÄB¬’Ad§²•d½ ½eRÐd£•|”jë“ä* ”(Åz9)§³a¶rŸ¥–êÈ´*”|©º’¬¤«aµ²šW«õ¤5Áfx\yœoTwó§ÔFýUý½S¿Aæ�S¥^jqg›RÚ>ö]n�xÔù‘˜äpañ‘av¼‹iÄû²[«á/‘#îçüºŸ«?ñPÝMFøf|®ÐY[nuÈ�wI’-Û*¶J­¹V˜$»ur˜,ÿæ·#®›}³Ã˜×~øê–i›Ô¬¯®ä�S�õÃl;Ð•VžA0t’Àf8	^ž�)`ŸëÚpêq˜Ò1—w4¾-³¿£ötÈ¥z‰�ÊìOˆÄ ×³âF�(=ÒTt"MõæXc%øùÅ$Fv@‡§‰¿ÆýräsÞ�9ÂiÎ�¿æ]Ra^ÈÃÞuÆ5Ä=Wçw^.§TºqpJRì§2¦YhŒÏ<ß,Qò_ÍÍR!Àûa||áY	–ôÀWä<$‹Œ±ScÜ	F :"²ÙÍ©M™GŒfßK±	1Dw�T�äáÙ2˜vI¤–sa‘$N‡Í¨´gUÏ†ž?Ê\EùÙÕ\óõÝ%f(°}gÝ†�;7Ôíl¢mÚ¾ñã·ÞúÛƒ…–½ÛÞþî²…Mìú·>þø­cü7ñ¹ø*!ñùÞ=_zåŽÓ‘®Uè é3ö�î÷Yœ8Ôï‡ï³lüïßgií&*JÃïE\›þ³þ�·YÔ`ÇVù:KWNL®1šä;K—y+GLuÍp©htÎÀQ\XU]&{\ao²~´ü¯\³pê¬Dë áé± £
-3ôH–Å³ô¬?ï§�d#øMúDv[Èñ‡Ø*^«o`OèçYHƒjÄhÜS‹†,ÞKí©õWúóþj�–ë¾‘xùÝÓ¡T™ÅïÑñ¹î5°†ÿJ­ÕjÝ›á×ê¯µCð[íMxSû|¨}	_)_òÿPÿ	ßó©½§ÎC®‚“‹Êe êdõ¶R¥#bÅwù2··š-êÕ~–½×q]ÿ†¢í’k_´ÂÍcQnš†k‹á—ÅR†X•Kb-×µ$æÆ«ÝE&š#ñ³.Ýí2]år9Ú¥�ÿÔ;Ý/Qü�oQè×.MKÐwÖÆ¾U™ÊFWbÌ,žf&›7°x?3×¼™ÝÂ‹LÛ,Aôü)¿Ç,5%†.ã•¼Ê¬gu<A#Ó�(*GÚ¯RMÁ¤ÄPLÓM¼±RBzŒÛïMVRx²š¬%ë©Fš™îJö&{‡°AP äc¤‘ï[uçz%ÞŽaÎ˜ð"µH+ÒmÝ6†™·¸m¯í�Ì&é%îbo9»¦)Óy©Zª•êeF™YæZDÒ
-¶)ð%êm‘>W_ì®tWz«Y¬B<^i<ìªõnT¶yŸõÞÑ�¿£\öÎ¡Â³òë¤X-P¾.øéËå‚ÜÚzqÛEgì>Ã¹5ÅñqÛAƒÂør�4z’$‰ºd¤òÉHE�ìeK8¡œç(-F}àSØÔ)/HwÖÙ#6Ñ™oÓ1í;ö(óG5�’+îaf
-Î^æ«å_?¢ùî
-wYrq@g'~“ÎN?éºB%K�}øý-y¿"‡y­Žˆn"º¹‰‡x1®øQ­U"‘$ŠD#6Ç’8Ta	$‘$ásRH’JÒH:É@å‘E²IOÒ‹ô&}H_Dô\rÉ#ùØ¦Ò_¾‘EH9�Ÿ×È²…îÂ£rlÅ<,i`ÈJ² KÞ 'èjÖËvaÃ?À+kÈ	ØƒÝƒu�Àë‘Z“Kt9ˆuÒ -ÔTìî8å r«Ò¤œWN’Ê|å¤RªÌ§š|ß…[!¼ÉˆAI¤‰~Bæ“ÃðäÃe˜â%ŸÀIØC¾À§(Xÿ	RKv�
-lK�Î!•HnÅ’cü$ÙŒŸ9xþ$’—°u‡éCä4y6Šl¥§±_'Èwä!˜À*	�|VŽí?†u�Äû7“ùhèÓÔ$‚õÂ2l=>kºó� }øiçs‘Tâ“'�j“ÔRñ)Òb»è´U]OÈp'Ìƒ�èJ%UÙ­Œ"µa@)©Åº7Ë{Ôrºû.?²v¶H)¥{ÈWJ©6ë~SöŸy�ÝŠ=*'Gp[¤ú±OƒéJX�-•gÈImŒ’ƒ÷cÚƒØkBæ@¹U�ýä éõ¤krú«àßá�[”Ï°ÏµtûŽœ„aèåÊ´5º�Ìd½ …áˆôNö7²ôÑe�öøÉÉo•¤ôéý£Ãd¿–ÜHŠ=K’›:;‹'+q¼¤‘Ç7BºÞ¨¤§~ö?�ü¬Oï±Å““;†ëªuxé0,»m2þ”GXŒåÃ‡9çäCy:þ�.mLž1+ùaÿÃ©ƒöÏÔ'<[Ø„¥ßsèæ»}CþA’tgÚœxzÃºîý??lßï¹ß˜ˆ‡:éž_ø­Ý'ñ|þÏÛÆ{îï*¿ú7=´œÈaå2�­ÁÉZNæA*zm+™§!ƒÙ�ä8o'Ç•³�m|	ñ+ð7élåµä¸š�ÛÍd¾z¯©'ó¹÷ARcÈaÜVÎ“
-íDø7+$¯áÔ8.ë`wvÖ«ùxßõd9ž›'Ïñ
-r=�"õ²>þ9 |@Žc{¶ÊóØ¾ýJ/2G=HÎ°÷I¶ëzlO»Ü³ÂÎ�”ÍX¯Irº®=Ì‡’ãÚWdÖ÷YW?å;»GÐ ¥]Û÷hÐp^ŒÂ¿ƒ\ �‚ãyµ7Z,7”0ÚãhÊ}„Xf4b$Äu3nXæÞ�6Å{<Xæý)û‡à¶·S„XXHÃëõÃ÷‘ñ¸½JH>'z!1nÜÖâÖBHln_�í‰Ç²¼7Q<	ëIþ#!)pÛMH|~*>7¯IÃsså»ËÎ¨„	ˆw³1åÛc›¤(!‰{¥‰UÙ�—´á_éð}ü³¾óÂ?\ðŸéð­þ^Óá›‡oäß¸P_×Ckü­þCÀWƒàË"8/à¯yðÅ¹Ûøõp/<wœý<‡ŸmƒÏsà3Ÿ
-ø$þ„?×ÃÇ>
-ÀŸ„3/Â|ˆ—ø œ>5’Ÿ~N�„~Ç?ðû8x_Àï¼'à]'ëá�‰ü'áí<8.àèJ‹�‡7#¡EÀ^ðš€W¼"àe/	8"àE‡-h®NçÍš^x‘7	xáÐTþÂ‹ðB•rè·éüÐT»ÙÊoÓá €çëá€€ç4
-xVÀþ2xÆûö¦ó}e°wO€ïM‡=xýtìð”€]v`‡€ßl÷òßäÁv/<YxIC=l°õ×n¾UÀ¯Ý°å‰¾¥žØìçOÄÀf?l2áqë=|£€zÔáMuõ°a½—oÈ‚õ^x¬}äEþ¨€Gj§òG^„Gª”Ú_¥óÚ©Pk+¿J‡uÖ®éË×
-XÓÆn>|#¬^åâ«ƒ°Ê5XPSÕh©êtXiÁ/<´Ââ	XaÁrU*Ø�¿xðAþ>ËÊ bBˆW¤ÃRK,öÂ"7,4a�€Ú`~ÜßóÚ`®€9~.àg)ðS÷ZEüÞÛ`¶€YÂ=xP.`¦€23L0m”¶Á]n˜*àS”L6yIL6áöÈ~{L0Ÿ<±&„à6êç·EÃ­A?&‚�Pì‚Ÿw‹Ÿ�p‹n0ÏŒ0f´Ÿ�‰€Ñ	>Ú£<0RÀˆz^ÃÜÄúð›Ú èE¸q,Ø†
-¸áú ¿!×ññë0d°‡±;}0Øƒ
-8 È¶Á€þ~> ý\¼¿
-\Ð/ò=�w�‹ç	¸Î¹9.žë�ôícð¾~èc@ï<èÕ3�÷*ƒžÙÞ3²�•™Î³n„ÌtÈHwñ¤» M@ª€>HÁ~¦ ¹’Ú »�X	ˆGÆˆkƒØ"ˆÁƒÑe…–Š‰7EÆ@H@P@„€ ^`a_­"ð?¾2ð
-ð¸#¹G€¯vG‚K€éC€Ž—é´ ¨e àI= X
-£žŸ³>@ý@Ð&Z¶ríõÿÃùÝ€ÿõ/á¿ Ò´n
+xœåzy|EÖvU�ªÞî~soöå†�„°%& ´‘e‚"Š‚È0‡�
+	Š‘D@Œˆ˜ îDDGGF|QÁAß‰Èø¢ã„¤ò�î› :Ëûç÷û~ßíôVÝ]uêÔ©sžçT%„¤œ 	M½grÉç÷Öö#$åBØÄ©óî‘	y„¤ „Êâ’»î™ÝkÞLBºà=Ùy×Ý‹S»éÅë]øM¯éÓ&É¿FÂçß`YïéXà¬W*Éá}çé÷Ü·€Ì‰Ù‡÷ƒñþøÝ³¦N&0#š�®¸“Oï™¼ „oVfãý¼•Ü;­¤¿ú7¼ì†mˆé„‘bYÃ‹Å”V%±¦“_"Ê%ª‰2ÆIfãñ¦kˆ÷xÓñ¦¬_²/5Ù—\ÌIËˆkùZÖ¨îŸ¸WÉ ”ì'„ñRAz›1 pS¥Òí«w0(ÓÈh—®9†¼-MÙ±ÂÌg/66ùüQyY{ƒ�D})¾^i)�” ^äÒœìH^T¿xqõ®††üç¾y�mi½�mÜ´ñµ-­•¼p÷´¢ïQöÙmgø\l×A¢ÈH3Bið“g½u´î÷ŒpH4¶i5é={±É{>ËLSJJ•2µL+ÓËŒ2G©³ÌUæ.ó”yË|¥þÚ˜1>”åDæd÷Îí•–žM|^’ÒÉ:²9kwí¬^³k×šÔ/Ï_ø›üžúàô¹Ã‡Ï}óî¡o7Èwe“üN¢y4‚h_T3µd„s(cdÆ‘
+º‚»+\+Œoˆª÷­ŽUý.2<0$ÖÛr6»CRyñ¼÷G×á‰óÆ•Ç=W'P¬`OšÒ!ZŸ ›†¥JÎŽ„s£Ÿ*xñàÁž}ãÖI­òÚƒ*·læ¹»ºu;sôè™nÝvtîLR7õÓ~)¶\}ÐqÌúš1n¡yàYâ£´JÃ¡é8øš×ï¶Æl@#þeçåá¸5]ÐØ”íËËËÚó|�Z£–Lö"ûÓ`J§´\_JnŽ�Î§¥rù¨9¯¾zbse¥Ø(ßªj­]9zý¦�YaˆM·�[ê$@âH‰Ù™©^¡­Ág©hpÒW¢üõÎÕñqA¦52Šù=Câí�lôùóÂ*:ë=�ÛÅóX�efJ(I¨MøcÂ…1ˆ¢ƒØ à 8Ñ]ÍÔ2õîÆ,2‹Îb³‚³âôI³-5&'Ò†,ædÕV­ÊËZö8�¾<óÐ”©ü­¼ˆC™ÑòUëÙÖëÜìŽ‰¯êÕkw×î´/5pŒ¯—Ÿ7®Û»{£¥Ïþ8òBâ ×›C…OQî®Z'Á)£àcŒ:|ø¦áÓj�†ª©ºOÓÔ|Cå”käuÁÚ¯˜¦8½ÇGÕcGÕyÆÞ6ªÎk|coß@bö�0ª.0Öºn{£ï„Æã�¾(k„4eã¬uóxÕ+¾S½Zû.¾ûõý„NÔ|ÜàÜˆåA#Í¸–_cÜÂoUÇÅÆ<ºˆÏSï3âËŒ'ø&¾N}ÌxÄØFŸåÏó­êŒZ#Þ .„n8b!(‚z¬#ÒDªÞÕrõ£yÐGôR{ëyŽ,×*†è#¦kG'°	p«§LPÇiãô	Ž×,×Zæz’®UwÒ-j�ëC×iW›+s™¤³�â_ŽNy‘ü-ÝqRî—ûOÒå½'iÍà…­§[ß¤õr8É"ålZe�Áa<¬'Ð—õ|™<Ïh<áÜÛbé5E,­Yî§)‹š®,aŠQ(ªÄ&¡LŠÈñ¥~ï=q¢¹[{="ëÑÉB3Qõáè1k@óUäyM(Teñ¼·ŠÕh—-M¾¼våçµ+Ÿgí:íIrà<1³z³¾êp6L�ÁŠÕr¦*TW‚4VJG(·ÒñÊ4:CY¨,§*Õt½²ÉáED$S_Ž)‡©—Õ4Ê­3Å‰KIüËænüËKI„¶5£Í}‹rªèýÜ
+«&K95!ž˜Bó?Ûr…ºØ”�E-3ÿ*Ñˆ‰�Óˆ†6ãëÓw‚Aô$âÅê“T¯nê%ú&]ŸÖ¤Nñ%+üûÖóGZÏ‹;šOˆnÖ¼µc¶Ç0¾½e^‡þ‚pÁ™O …û0ˆ� CE‹W¬BÝ†f=È' VSXª]ÃŒ]ïñÆ°Ùž=Þä¿b·íæ*þÉzQ¡!§¥Ð|õ0�êÑ<d<™GJÈj¢«Tc
+è<’Æ°qt<+pÞE§³t[÷òùê­’®`åÎÇÙPÃ£,#£É4‡¦@2¤°ò<K•¥_³¼�W´Þ¹â„p·ÆÀîæn´L.%í6ÁgbßI5�aUÇC?Â´ ËªÎ6e™z–Z –C9çÔ2)Täá÷ØŸZîD»:±Ç«I&ð€Ü…öéy‰<K	ãÞÆÆk†WtJ¹<péS¹«ª*ì#-‹íE�xò‚™‹zCA�ÂÇ9ä+œ�«õ@µk©ƒ|:‰�t#&†ûŒx'O°"n†Ú¨<´P[Ñ›,M[Û/!¾ÃPµf¢­ÚETA*SåAôÍ	Q<•¤ÒT–éJšš¦¥é¡ÄÞ´7J‡²éb.Ÿ+æG¬PV¨�+�«I¨ZšH£"R 'íf…öäPd0  =Û!5º®tàÑ“¯�\µàÔ{ô]JZh])«®~Œˆ|ä~9�–ÕLi])N|òéCûÙoZÏW>ðÀò�Ô¡N4â#=Í ©Ö—Òj¯Æ¼1®l¯s¿(¬î†#VSÖžÂ;VåØ¾>95Ù>gPºæ"Í¥IòKyDæÓMt­‘Óe�œ,2/Í§Ñ´'íN£¶Éu²\Þ/kì1™ÓvFœl¼‘‚x£ÚOª��Zx#Æ“1Ao´í.ãÚ©=¼à1=Ü¼}„ôS²•Â©S”Ê¶S´] WÈƒòYIŠd½üZþEÖÓá4–ÆÑá[ämr£Ü$o£[èÜ¶vØ£’„ºp’×Í^àÃHÂÐQiÖ	˜nè8!ã
+ÍrZœy8í„¡Äó�z.WØs…çŸÖÿuà@»(q[v1¬é¦3#Èj„‘ÆÒÔ�šf„Œ^j®1ƒ-f¥êB£œ-S—�°HNAã …v‡t­‹Þ‹€qÚ}š6SŸ§-Äq{ªé“°=ND´šb;»t	-£=Þ‘eGdz¼~nî&’Z'Í_Ú}·Æ!Ç!ñf¬ëi÷n£ÚGŸ&»yuÔ£¤Šq‘¬€7Ö2ÿöÁ°†ã§óY{=qIq¬J…äj €PJ¤Ÿ[ÖFäê¥dÙ¹â™ßý^>'Ñ
+zsÅwbÊ‰;ï�‡ä§ò¤<tÇ�Ç†G»A/C7»ì#Vá˜8,ëTª¹å&´jþœ!¨®¢_æNK¤ãÖœÏl²eÊÚ“äBíFX>·}?u­±ìPkû¹e :_9tGë™vý•ˆ›6c¿ÓÉýæ —“¹,1)ášj°¤¤Ä|Ã‘˜Äƒ”Ÿ¬�®öñj²6Ò%Ñp$Å©¤S\Œ»‡èÔÅ{ªÿ,¢'{ž †ÎÚ
+ò¼lnË+´ŸÐ<8a&íKÊÈÌøM\E“p¦<¹SZz®«p‚gâÜÉíÕÙÂðÃç¼çÖço[ôÕŸäçòÜÌïËK›î}î@åúÒ¯Þ£Q?Îø³ØòNŸÞåó¦NKŠévrßÉ/²2ÿ8dèŠû·8)ºÇ;žM#a~#/úH–P*ñ9 Ò]¯PÃÙPœôhÁ–FŒxü}î-ˆØa�tXÐ+´"
+F&�è¾á™††~û—GôŒ‡½~ß‘×Z÷ ©(ž*„=Ï÷Ëq|¶çEß;ÐŒ‹m î@ƒÐêÝ«é«p Áçw‹B„Ì†Ú6;Ì0ÎZ¬ÆÛˆ°]/L,O¬Mü"Ã@êå–ÑÀÂdæ96ˆ§sPŠJß'mmï—¾Àú>óØcÏXûöÖÝŠ±£h²< ÆíÀdú×#çÎÁ=JÑz |I%Ìô˜$G”î&ÏF)n_¨"i|C
+R‹('‰‚h‹{%�’†²¾Å£•Æ³[Ð"Žöax°pôï²²³’²BYÉY�¥›	f¢™d†Ìd³SABAbARA¨ ¹ SAzIúò„ÊÄÊ¤ÊPeòòN�¤×¦_HOìø´ã£Ž
+“
+C…É%‰%I%¡’äòÄò¤òPyrô¤«˜Öµ´Ò‹Ò¤åöê�“œkkIÍµ‡Œ½vz×ÒYO4Ô×:°b×‘ÖK”=³®pßØi¯MüŸ,§¸tÊœ“{3nh]º£xò››_}Ã_¶ªgÏéé-í¶£& ®:‘‰fšâ×£=DIPƒÎÊ„ÔÇˆñ¢5y4M)ðiž‚øh-vhŠ6[Ð9úmçˆtÕv�a5#²:t.éüHçZÜ^ï|ºs[gûaË¼šÅþ�ÍòÆ²ç_k¸wnÕ¶†{ç?´­¡aPÝÂE;aåây?~e‘Û§7Xä–mÜüäë°Iî]S‡Ç{?Ž÷%€~%ÞbkÐàôèÑÁÕžú¸u1ÄïíTPð+Ö˜ÙdãÁóYûÂ¶(ãÕ†w•A¦QFøºÃöZ¾b‘ýXf»å±›®²Ç¢í(%o¢‚â�N/“uŒjd(âí0Æ6]Þvˆ]". d¶1ö›õõJàM»¿í+»›­š=ÇÉRCA/)úê´ÃU¶Ø³zÀY¼ÈÚS`{J„Uˆ‹SXˆ�ý×{ïµvBÜÞº�5w³¼¦UwNUÈËf:ò/E ûÅ:qÀç))ÉNŸ'%BPµ‹"ˆÿ7q°@³âà]a&&Âx T…¨Lãž°X+º’4šÆ2x†HUBZ_’CsØ >@ôQ†“!tÁGˆa
+ò!¥˜Íà3Ä"2!êB¾PÌUÊµÇÉ:%cb²Å|r(Ùzð=Iÿüqë!ÄþQü[$(´­FÛ<ÇAòÍ#jµ¨#K�BSòÚU÷Îs6ìãmžbs—é*pºª\›\6÷ñ*Ýh®å»¿wôÌ�ƒ*~‡€u�üáâŽš·.ÇÛUwHž""ŽVC\µæÚ·;Xí~T[�ÈH¼¯Ï‰Žqx-\q¶¥ñrÜ•ÇÏ[í¦ú’s“}
+ïˆ´<êêÌß–û˜®üK­Ü,çÒUôŽÇ¨:«¤e•</¿C¦íÿíöôÑm­e7ßBŸ ÷ÐßÑ'†ýÓ�…òù‘üX~�jËyíe›*6Wˆ�ºñÆÛ½å¤Ì`“�!Ò‹«e�ªË/oT†î3Z‡Edðs¡z›.ÿ™|¤Mç*:W(3@¡üMˆÈ±)ªÅUéÒ“t�{R†9)o—þÌ‚h—'X·Öœ–ŸYiërH°dD$ÉG¢.ãÉzôÜ±q�t‰Xt)ßû´o­«6ð('µH¶F�ø(/(	ÖxÇŽª‹´r ; aÞßôÆa/e¥Öì^¡PvØ¦fö-|œ§.â‹Ä¼¸Ê•Ãcyœˆ¿�ÌSæÆÎ‰»/~©ˆY»,nYüv²=Î‡æ—Š8$·7é3�^íˆ9‚x´wº’½ÙrÃúPÎäŸ©¸óØ‚EÇÇCCn‹‘wìØ1Ÿ>Úïžu#æ×ä_ÿþ5Ùß¼uûÖ’ù×0~–?·ãçr“Ùý�‡:]N7u¹œùžD§¨£P»]q'è1q6¬Nì`Ù>Ë�mpý+
+c÷ö*¸ASÒ/Ã:ëÈ~ºQãâçÉ)Þ0æ¦ý-þÑ?Cïæåçß3F·ÒÉð¶�x‹|ØÇ�m~ú6‘ÈcL'l$(èObH´Å�¿�b¢Ëê“„”ˆÇ¶,½Iî’oP³=÷5}¦7ìË;°Åjw=]6ª†øbH‚Íc²³/ûòÆ_ørËÚá’Ù=Ž¤ùJ,Ø\_ßï…ÅGÚHÛ‘Å/´B¯¾};zvØÇîøGÓö¢Ét0Õp<Y;`»Ê—«¤›éV^ã/�LP�“¡š·e@_a§L‡•+(Ðõ]„Ý:Æ8Ëµ××óÂKµJà[k¬OÒBñl¶ë‹7]dS6pMPNR¬ê³/g–ÑÖ¬í¤`ÍÒÚaóö;l{Ù�ºoç•¤¿%³¼Ú õNÄ6Çh†a'h©+/,ãÙìËéåYÁ7¬ôrª+¬ ËzK£»­ôòsõõ×¿0÷Íwé‡t?ÛÖ:yÓ¦×¶°ÒKµ»Š§^€íÖ8ïAß—�>ÅGL3Rc>tÕîÕ:Yê×â�¾èn¯ó_q·Ö¤l'€Ùí,4‹îKŠ¨B0
+–ª.K¶Ê=Gv¿ýÖî#ò4Ý×ò4’�¹Ž» «Zn—§ä'´+íÜÎ{ùC6ï� ýÌhä¼õõ{�q‹ùòYÔ7Ž˜aJg}+�L
+
+Þ|>(l«	ÛHj²5—¹ÅÍéùÐúõÉ¾ôÝKÖÄ¸$ß™­>VYñØ¶3Ÿ}þUëvÔA&
+ñ3ÚF™`Æ/ujÏ*´’¬s+¡UšËã¸!`iÂ°4á§(Ýöµ¥;�Üè·¡§Î½ç³ý¶rÌ`A°6hQ
+4ÝN>¥äæX0�ý\7õFš)?j¨«Ûýªx¢`úÔª–Lø¨jô+;Q®YmgàÚG:9×Î‡nn§C7_¡C¤‚®ä�ŠàÊh+çžZ…Ý§¹U-ÐiH‹?ÿÂ¸õ£•„÷ÿ’uÐ!’na�{â�xG¼³§ÞÝèîèîì¯÷7ú;ú;!¢�Y£‹£kDf 3Ø5²Kb—¤ŒPFrçô
+£ÂQá¬pù­ˆÅ˜b(p‚Üà/Ä@,ÄA<OÐÓ33eÜ™Q–QžñHFmÆ…ŒhôË³M¼””&^½ÑÀªÑÛ'®\9eí Æ­ÿtâÛwœ¼lõ´�æÎÇ¿ø x/´»K—±cÍÉî®O¬Ü°/%åµÜÜ	cF¤z:W/Û¸+‘„ã)ò 2^H<t•y½ª1ÝG<VÚš�Ûç!—Ïé"ÖÉíÂðéô9F¾Ë¡{‰CTÂ«nÇ¯Ûå4tˆæá‡·#¡­Ù!ÌqUÛ¶‘Æp»}îø~áá¯NekV|‹Ê¶ÂÛ… êÑÁiD¹¼®W®k„ñc´k¢>Ñ˜iTºÊ]k\~ƒ át¸ž(d^îQFÀpÆºc=é¤3ŽVˆ‡D†ÖEO5:;:;Ó]]Ý]=!_’KsYÏ}�ÞŽÞÎ¾®<wž'Ëw1©ÉL0¹)LÅTM-_bs�p�ð˜¾±dÃn�^ Æ)·¨ã´[õ[�[·8'¸'x
+|Å´˜M7f¸gx
+}¥Ú÷ÏJò ¾Ü±Ü¹ÒµÒ½Òó„^í¨v®w¯÷lqlqîtïôÔù>ô�öµù¦¡7ÃµAÔF‰lÍèµ‹×Ü}ÃØœdÙÿmz½ãíéï.Z?¼b,Ý²î¶Ç²É?gû�µféXù"a� =¨†¸‡hùV‚[a*ö*ž˜ªng‘ýÿÃš
+0ÔËYÚP†º¦6†�c´iì÷lóFÒXH2Òhô¡}Á4î¢Óa”›v
+l¼‹SŸŸ¤é“'[/Aô´ž·üÐšÇÙ<¨í39ÎŽQâ!ƒÍxS‰û5§Z)^%œ/x5¯P~ã¢š“õÚëlž½^Ôdkr[ÁËgú
+|…¾_8x:°o8ˆýá¥¡×Ì¸ÁŽd«?ycÃä'”.ß^Îí¤Øk¦¿=·ÃŸÃ€f'vŒpb'œr´Ò:ÇÕi�”Ã0±µ„´Ö½get†ïhíc¯ƒáüšh¯_v!#Í”g‚î¯ˆˆlð@CZJ}ú½ÁójlBZÑœÃ¿?4$ÃrTí° ñlÈá®í+ìZÞµ¶ë¯˜^”—]ÉÍ\KÛ!ƒßJ„äæÀæ­Õk·n][½µ^ÊæÉ»ÆŒÙxÓK{óö,þ ¥åƒÅ{òêÙµïž:õî¡S§þ*¿’ß&$¾Ø½ë«¯ß6u
+Â% œö›2uéXÿµãC¯_®ÿ®û×ë¿MzOaxñjºìû_V•@ëFkù7Œ÷mÿ¤�Kfú¯mZ!ŠeÓŠeÓ¯[�QÄÙjØup#ËýXØú¶Žèý¿�@j><œÍd¥¬ŒU°rö(ÛÂ4«!t;W±<�XFžÁCZ.z�~Ð�ãŒ CéÁ‡ŠáŠ©�³VÃ`/ÐŠI1�3ø]bºR¨Í%÷ÑR(åsÅ"e9YNWÂJ¾RT(5¤†®cëáqþ¸X§lÏ(uÚÚi­MhåOí©“rmxêËÛ›yaËXØu©¶Ãn…µna�ïÍ.šÅ…mÂÓ®-‹uh‚�ÍŠœ)šE aköýjI‘_µc¯ni`MýÇŒr¦k‘¬‹è¢õa½E/m*®×naw±yl¾x€­UÚZö¤vŽÐ…®ÄAŒ*0Ôhè"º)]ÕÞ¼·è­äªYÎëÐ«	{Uç(äÓÅ]ê|Qâ\«ÄÃJ•Zå\O)O©ûà%õxGý|¢~ßòoÄ+‡ŸÅ?”î“fc¬ÄÉM­Ô2µ3)o�ƒXùSkŽ•/XÉæ·o9Ã>l½&ë¢n³òé´Ô!b‘:�5tˆÅÐÆb)Ãà¦Xiv�škO³;ñm41g¾�*Ä(÷¼Cs:]S„µÄåP‰Ë{üýŽ…Ù»2«]½Üe9T;ßþƒÂÁ0rÃot���1�½Œ,ãv£È7LcZâoÅ]F¡aÙãbQ&Ê�V-T¢3WÒ…ªý»ª�†“¸c!ÈƒZŒÓëñdRBjHKÑ;©Ž�;äÀúA.ÏA/n­árf¹-ÛÉì1ùJ¾š¯™š©6ntšnÓ=ž�Ó&8ÜÅì.˜Ì§ˆB¥P-ÔŠô"£È1ŸÌ£¥lÌç÷‰…ÊBu¾V¢-p–9ËÜ¬V m/×tT¹×ñMîçÝ·uØ²mÎH©¿�~&ïŒu8*WJäjoIqâ’ŸŸ·öænÂÛ|Á»/ÑL´mÜ4ƒùPËY­Xª’Z]KRâ�$Q‡5ë=Ö¬§vF¤1œ¤Ê¶Q2
+Nì½ðp6©O²Oä¦Úkw’Ž”OÐiïÑ‘-[vð9Ãë‡[«xak±²H8ð„³ÑxND6ÄMÊH½©âz?}Œd§Bi¡¬P¿Ð®äNmmÖÿß�Zz-ÄçKÚŸGàó¼ËÏÿý�b§èzºƒãFZÛ¾Äí]ú.>‡ó]§ËW½Hè_¾‘Ú~vàîÇ¸Azb[qˆH6öÐ‡Ï‹ñ)û@§#oÍ!I¤ûUu $Q$† ·C_œ�|!‹t&=°4–D[ù6‰×AÒÍ1�X9æìïÿ§?šKêÉÜÞ$;ÈºïŠ±x6–Ô²=d9™‹%oÓ#t%ë�eÛÈrß¬$G`'t$ŽÌ|©4¹HÇ’½XGÐ<Uá„�æ{ùM¼žŸãGI>‡å…|E Æ‰m¸çÁ;Ì�ñ"‰ÔÓÓdÙßBàƒ¹›œ†£°ƒ|�­p¬ÿ©"[H)Ê ³H†Ã›°ä�8JÖã6ŸE+=†Òí§�äqàl8ÙHO`¿Ž�ŸÈ0–•¡Ñæ°b”ÿÖu¿_Oæ ›=A"Y7,Cé±­)ö1zˆövgY)K¶(õJ@MÁV,�m£oÓ&e©%Çàv˜ŸÑå<…oçÃIUXPHª°îõÖ7J1]ˆ}·¶R«v6ŸÒä[^¨NÁºß±z„mîe7a�ŠÉÜç+^ìSºV¢¤ÖÓrTÉ3ñ{¬A]‚½&dä’™xUJv“=¤Ô�*¬Éî¯ÒGü„_nà_bŸ«èCì'rã\)æçQ×8µ¬ÌàËj8t�î!oKQTgŽzwBr�î¿ºyÕP)¨s-Õ·µŒçqbB�ˆ¯ƒT­Ž§¦|ùï~Ù£û¨‚ñ¡ºÖ!ƒÛkR8Ën�—Öcù�Áö3«Ñ:‘Š#
+ëBS§‡ô>˜ÒïAï´~=ˆíÙØE1…ÄÞéð#IÒl>Úw@ZÇùïŸ´ìvÝ«ß‚·ÖC6rÔ×=2ÝÆWÿ¤yŒëÞöò+¿\´Ðbá'ûù×d6[…Þ½˜Ì†´Ú&2› ýÙíä°h!‡ù™¶f±�xù\¼&mM¢ŠV2p¿�ÌQÎá;5dŽpã9@*a$Ù�çýü)U�„¯Yy§Æa«v{[�’ƒï—’kE©±êÀ¶7â{³í÷öâ¼ò“Ýâ3²‡#‡ÙG$“w#³PžkQŽ–×ö_o·5Û–ËÅ rXý–Æú¾lï›õšP	…íûÏ¨Äûp.Ç^¾�XAàsý«Úw¤oêã¨¾]„èX¦×bìEw}îXæÜ‚zÄo\XæþÉ8Þ{à¾ ÷ã„ø°Üßw¬;¢íëöÅ¯#qL"ÇãŽÂ¿�Æw£±ýØxBâ¾!$ÛH@9c˜CÙñY¶“Œßvj´þGÕ½\‹}:Æë¿„ž°F›Y$žy=+7Û.IhÀ?Ráçlø{üä†%\”ð?©ðƒþVRáû¯ßK8_ßÕ@S3üµþ[Â·ýà›|8'á/ÙðõÙ›Å×5p_<{3œù*Sœi†¯2áK	_H8�ÿ€Ïkà”„Ïüðç%pòøTÂ'øú'KàÄñaâÄ8>Ž}'ŽIø8>’ðG	Jø@ÂÑxÿH¢x_Â‘Dx/K8¸Ü'ÆÃ;‘Ð(ám	oIxSÂ^—ðš„W%�ðŠ„ý>h¨Hê_~EÔKxyß$ñò+ðr9ß÷RªØ7Élƒ}&)öJx±öHxAB�„ç%ì.‚çÜ°kgªØU;wøÅÎTØá‡gQèg›a»„g$l“°Õ[$üa³[ü!6»áé"¨ÅWjk`“„�O9ÅF	O9aÃ“1bC<¹Þ+žŒ�õ^xÂ€Ç%¬«q‰uj\P�U×ÀÚ5n±¶¬qÃcÍðè#¯ˆG%<R5I<ò
+<RÎ«NU“ Êä§ÂCV¯ê)VKXÕÄn>x¬\á+°Â•XPY¨©ŠTXîƒßKx`™O< a™–J(—P&Ál»Éq¿„%K`q”ŽŠÒTX$a¡„n˜ï„yÌ•p_3Ìi†{›av3”H˜%áwîN†ßJ˜éË3o†¦/�»ð¦XÂ4	E¦J˜"ar?(l†;œ0IÂm&J˜0Þša¼·FÆˆ[³aœ„[°å[òaln¦^qs4Ü€1##Ä	ø�„Ñ7zÅh	7zá	£ðÉ(	#GxÅÈ‘à#¼0ÜÃ$­�!50XÂõ¬‡¸¾ò_�ëF�)a�„�×úÅÀ \;À#®õÃ€þ.1Àló@ô“�'¡oŸ€èÛ}z{EŸ ôÎuˆÞ^Èu@¯DÈqAö5‘-áde:D–2Ð³‡.zz¡‡Ý³¡[×TÑ­ºføE×TÈðC—ôTÑå:HO…´T‡Hó@ª:KH‘ÐÉÉØÏd?„Š ©±‰E�à‚xÔ`¼„¸fˆÍ‡¼‰‘]Q¨©(	‘øQd%$DHðã~	>ì«/¼KÀSn	.g¤pIpâÛÎHpH0¼ KÐð5M‚ ¥8>ähAÀR�Ý¼‚õ ê"�ÖÓ¢åÑnÿ/üÈÿmþã/áÿ <À€º
 endstream
 endobj
-8 0 obj
-   9456
-endobj
 9 0 obj
-<< /Length 10 0 R
+   8822
+endobj
+10 0 obj
+<< /Length 11 0 R
    /Filter /FlateDecode
 >>
 stream
-xœ]”M‹Û0@ïþ:n‹-Ù’w!Êö’C?hÚ`[rÖÐØFqù÷•õ†-4�ÀËÌHóÆ™”o§/§yÚTù#.Ã9ljœfÃm¹Ç!¨>\¦¹ÐFùiØ„òçpíÖ¢LÅçÇm×Ó<.Åá ÊŸ)xÛâC=}öK>J©ò{ô!NóE=ý~;óÕù¾®Â5Ì›ªŠãQù0¦ã¾vë·îT™‹ŸO>Å§íñœÊþeüz¬A™Ìš–†Å‡ÛÚ!vó%‡*½Žê0¦×±³ÿ/n-eý8¼w1§ë”^U.3h„êL¦‚b5d3µäˆY¨%ö½dj^¡WHîë2Y9¥'¦¡ O¦t �drŠ® 25~�‡ðkpÐø5t­ñ³?nÐøµLBãçèSãçäüœÔáçpÐâÇ\4~ÖAø5„_ÓBø2~[#Ï�éü,7üjz1âG×?‹»ÁÏâgð3tmðk¥¿Vêðk™™Á¯f?']ã×JŸòü„ðkÉ¬Å�IÔòü$¶û�}E/5~Ž)ÕòûÄ½Æ¯é!ñ“LüÒÑûŠÈ.ìË²oöÇ&÷ÓæõÏÛ·ïÝ4‡�ˆuY÷ªüþÃƒ‡
+xœ]SËŽœ0¼ó>n+°Û	�m.sÈC™äÀ6¤ s˜¿O—kµ‘r íê¢Êj×¯§Ï§eÞMý=¯áœv3ÍKÌé¶ÞsHfL—y©­‰sØß¾Ê;\‡­ªµùü¸íézZ¦µê{SÿÐÍÛžæéS\Çô¡2ÆÔßrLy^.æé×ë™¥ó}Ûþ¤kZvÓTÇ£‰iR¹/Ãöu¸&S—æçSÔýy<kÛ?ÆÏÇ–L[¾´Ö˜nÛR–Kªú¦9š~šŽUZâ{®eË8…ßC®zIJm]OÄÚØ·MÁºh½c½SìmÁºhÝ±îPaýE±ýX°.Š©o¡ïØëÐk¬€q ‡<¸–¸‡½¶ô’cÁ±‘8Ó§…OKoÞë®ø§¦‡¦gF_2Ò�À�PS )äøBŸŸ–y-ò:¡¾ >°> {bùüŽš4ÿëðß–ú-ô…y¥œ3ÏSpž½uðæ™Ñ—ŒÄ®`ær%½	¼yžƒ/ç@MMGì€…þ¥øg¯E¯0‹ ‹0‹ ‹'Ç—ì#ù#4ÉwàwÌ¨òmò0š¸Cï3î9ë¸—‹Væ>/éý.në†®òü½$êv
 endstream
 endobj
-10 0 obj
-   462
-endobj
 11 0 obj
+   459
+endobj
+12 0 obj
+<< /Type /FontDescriptor
+   /FontName /QWMFPY+DejaVuSans
+   /FontFamily (DejaVu Sans)
+   /Flags 32
+   /FontBBox [ -1020 -415 1680 1166 ]
+   /ItalicAngle 0
+   /Ascent 928
+   /Descent -235
+   /CapHeight 1166
+   /StemV 80
+   /StemH 80
+   /FontFile2 8 0 R
+>>
+endobj
+5 0 obj
+<< /Type /Font
+   /Subtype /TrueType
+   /BaseFont /QWMFPY+DejaVuSans
+   /FirstChar 32
+   /LastChar 121
+   /FontDescriptor 12 0 R
+   /Encoding /WinAnsiEncoding
+   /Widths [ 317 0 0 0 0 0 0 0 0 0 0 0 317 0 0 0 0 636 636 0 0 0 0 0 0 0 0 0 0 837 0 0 0 684 0 698 770 631 575 774 751 294 294 655 557 862 748 787 603 787 694 634 610 731 684 988 685 610 0 0 0 0 0 500 0 612 634 549 634 615 352 634 633 277 277 0 277 974 633 611 634 0 411 520 392 633 591 0 591 591 ]
+    /ToUnicode 10 0 R
+>>
+endobj
+13 0 obj
+<< /Length 14 0 R
+   /Filter /FlateDecode
+   /Length1 2600
+>>
+stream
+xœÕTktTÕÞ÷~÷Ì$™ÌäÎ0	„HŒƒ¼B`Bx;Ä „	Ú¦d"…&$ÈÃ4’Š‰`°À iŠ4• 8"’„P«¤6¦!´Ö¶•J­‚t§{‚]]«kµ»zÎ=÷žo?¾ýXç\Òˆ(šjd–,[šB&�!Ò“Å�ò‹—ŒX¶�‚iß‚E+MûnÈ~§¬�JçÏõóÇ=OÃ�,Al‹%_p©à;K/]ý[Ú"x½à¨Ee%s…wˆàÍ‚cÏ]Qn”Y–nœR^1¿|œõSÙ¯©RÒ)ÀA# öHvVêí‹5n’å¦¥Vée;}y8™§/Ÿ¾<¬‡3ÕéIu¦ºU‰¤[9hu|ùY…e pd_žÅMñ”H³|Î¤{©gTBœÛˆŠBBŒå¾Þæ­ìcÞcò29[}®(ì%s­£×«	/9¶FÓ¥edà½ÂWL™Þa>[WRCÒÆ¤š$3IiEš3M¢§9Ó²2³FŒ§Å§ÝaIÖ´Ìø4#¯•­­¡Ð/·†J¦i7Z[�â›8y+'ë§7¿¸mFi‰vàiYÔBí2_§&Ú©5
+
+H–ˆ¤A?@µô�HŽjíÚ:=]d�t•N‰åZjG“AZeŠ”è]¥ÓçZŽ1š[cµdL7³ŒãC£ƒF•F‡QlTj™Ø­îW�²Æà¸î¢7©µhg©’ã2qÄÈ5th¢‹Åþvª§=T%¹¸µ2Z¥Wé³DrBuÐv™e¢ïÐvi§$»ÃÚjê¤§aè“i—Ö)uµÓ5Z�}•œ¥L= ùŸ®ñßN•©N-†X,²ƒÝgk^÷;éª³{^¥U¹€öXZ,nkšD‰t¬Q;ª]¶l¢:…oa	ÞÓj�4ã9c2Õßî Š©^¸·G|,m¥Ô™Uv}¹Q¬5Ñ%£Ø:O¸�G*’˜õYRQ€ŽÈZn1¥¦qZ-ÖI¦m2uXóŒñkµTMT†,Z(»*ÚO(Aª¦îz-£Ô5ñÜiœ“šëµú5ê@.¤€qEzMn¢ Q³Õ¢èI1CºgŠ?ä›Y˜òË9©éCþ¦˜Ö”ÍÙW¦´tuÍ(4’Ôœ�ê‚'*dxÒÎý'å¹ô!Sg¦„þ>1÷+Ö‰Å¹"Ë/”m‰Xäs»u‘ !å‘gJq(¥¤4¥Î¬K[gÎ›.×W*Öîý¶jüN\öÔ/Š"£ctvÿ~¯Ÿ¹µß^=;rçé¶G÷Ûº˜“‰ìç¯Ÿ	Ï´W|%ÿ×Ðå„TLä¾v�ÜÈ?æv<Ð`*¥X¹Í&m‹°ñz‚|�½Æ×u“vã†_zq=ˆk|Áøœñ7>sàÓ ®zðIÝõ	ãJâr‡ñÆ¥±ø(2>ðââ…|u1ˆbx!ïŸÏPï‡q>çfœõâOnü1ˆ?0Þsá÷Õx·¿cœó3Õè<=IuVãô$œz'I�b¼“„“Œß0ÞfüšÑÄ[í}Õ[Œö¾ø•o2Þ¨uª7úàxŽ1Ž2~Áx�ñãçŒW?ca´1;ÑºÆ£Z-Ímª…Ñ|¨H5·¡¹Æ8ôŠG*òuá�ÏxÅƒƒŒ—ƒ8Àx‰b¼ÈØïÇ<¿Ï£ž÷c_“Kíó É…½’ôÞ0žcü”ÑÈø‰{Ïîv¨g½ØíÀ�ýh“† ~ÄØõL¬ÚÅx&;w$ª�~ìØnª‰Ønb[žflÚÕVFÐŽ-â´%ˆÍ›jó lrà‡a<µ±M=ÅØX_¤6¶ac�Qÿ¤GÕ¡Þg<éÁÆú'†ªõŒ'†¢NÊ¬›€u�ÛÔ:7·a­Öú±F:µÆƒZ'c¬~Ô©V3uâŒÆ*†¯ë‘êjõ£ºß÷£ª ^Uyð0c%c…Ëc±,1–†QFEKÂ(g”1¾ÇX”Šï2:sÔÂ|<È(­ÆÆ|†ŸQÂ˜Ç˜;Åa|;EŒo2¾Á˜S£æ„QƒÕ^ÜÏ˜-‘gç  ùš©ò{a–3óz¨™Œ6|�1}š©¦3¦™¸�1U4SySL•×S’íjŠ‰ÉvLbÜÄÄ r÷èéêž0rÚ0a*|Œ¯1îïRw»1>;N�w!{œ]eûºâ0ÎŽ±Œ1ŒÑ£Üjt£Fšj”#³lj¤‰,FôE¦Þá6åe·aX†M³#Ã†¡éÑj¨‰ôhñbð �ìÇ �.5Èƒ�.¸Ë£LÀ]ô÷ØTÿ8xl¸“‘Æ¸#©Rgª)~ô£¯”Ð×�d;úHû0’Âè�ƒD‰Œ^~ô”Nõd$ˆSB"ânF†K\§ÔêÌ�Y�8?{l‚²3bÅ:66FŒ‰hF”˜E1¬nXü0DiÈ	ˆ‡HÁò5•žÍ1´Í_»Aüÿ0è�ÀÉÿ W²Å°
+endstream
+endobj
+14 0 obj
+   1860
+endobj
+15 0 obj
+<< /Length 16 0 R
+   /Filter /FlateDecode
+>>
+stream
+xœ]�ÏjÃ0Æï~
+ÛCqÓsŒî’ÃþÐlàØrfhd£8‡¼ýd7t0�-$}?óYúÚ¿ö2èOŽvÀ>�c\âÊaÄ)�j.à‚Í{Uo;›¤´ÀÃ¶dœ{òQµ-è›—Ì^\ñ¨ @°C4Ááû:<ZÃšÒg¤gÕuàÐËso&½›AWøÔ;™‡¼�ûS|m	áRëæaÉF‡K2ÙÐ„ª=KtÐz‰N!¹ó�½ý1\ÕMQ�’Šzï®|òiÊ®Ìâ§n¢)ásY)¦BÕóS‘pÈ
+endstream
+endobj
+16 0 obj
+   223
+endobj
+17 0 obj
 << /Type /FontDescriptor
-   /FontName /AOYUWE+DejaVuSans
+   /FontName /OIEQEX+DejaVuSans
    /FontFamily (DejaVu Sans)
    /Flags 4
    /FontBBox [ -1020 -415 1680 1166 ]
@@ -110,69 +162,75 @@
    /CapHeight 1166
    /StemV 80
    /StemH 80
-   /FontFile2 7 0 R
+   /FontFile2 13 0 R
 >>
 endobj
-12 0 obj
+18 0 obj
 << /Type /Font
    /Subtype /CIDFontType2
-   /BaseFont /AOYUWE+DejaVuSans
+   /BaseFont /OIEQEX+DejaVuSans
    /CIDSystemInfo
    << /Registry (Adobe)
       /Ordering (Identity)
       /Supplement 0
    >>
-   /FontDescriptor 11 0 R
-   /W [0 [ 600 633 611 317 549 392 615 591 294 748 610 684 557 500 694 770 787 862 698 631 634 411 634 612 974 634 277 751 684 294 774 779 634 277 685 636 787 731 603 317 634 633 520 837 352 591 610 591 277 575 629 634 633 655 988 636 ]]
+   /FontDescriptor 17 0 R
+   /W [0 [ 600 629 ]]
 >>
 endobj
-5 0 obj
+6 0 obj
 << /Type /Font
    /Subtype /Type0
-   /BaseFont /AOYUWE+DejaVuSans
+   /BaseFont /OIEQEX+DejaVuSans
    /Encoding /Identity-H
-   /DescendantFonts [ 12 0 R]
-   /ToUnicode 9 0 R
+   /DescendantFonts [ 18 0 R]
+   /ToUnicode 15 0 R
 >>
 endobj
 1 0 obj
 << /Type /Pages
-   /Kids [ 6 0 R ]
+   /Kids [ 7 0 R ]
    /Count 1
 >>
 endobj
-13 0 obj
-<< /Creator (cairo 1.10.2 (http://cairographics.org))
-   /Producer (cairo 1.10.2 (http://cairographics.org))
+19 0 obj
+<< /Creator (cairo 1.12.14 (http://cairographics.org))
+   /Producer (cairo 1.12.14 (http://cairographics.org))
 >>
 endobj
-14 0 obj
+20 0 obj
 << /Type /Catalog
    /Pages 1 0 R
 >>
 endobj
 xref
-0 15
+0 21
 0000000000 65535 f 
-0000014531 00000 n 
-0000003204 00000 n 
+0000016590 00000 n 
+0000003007 00000 n 
 0000000015 00000 n 
-0000003181 00000 n 
-0000014372 00000 n 
-0000003313 00000 n 
-0000003514 00000 n 
-0000013065 00000 n 
-0000013088 00000 n 
-0000013628 00000 n 
-0000013651 00000 n 
-0000013921 00000 n 
-0000014596 00000 n 
-0000014724 00000 n 
+0000002984 00000 n 
+0000013121 00000 n 
+0000016430 00000 n 
+0000003135 00000 n 
+0000003349 00000 n 
+0000012266 00000 n 
+0000012289 00000 n 
+0000012827 00000 n 
+0000012850 00000 n 
+0000013619 00000 n 
+0000015575 00000 n 
+0000015599 00000 n 
+0000015901 00000 n 
+0000015924 00000 n 
+0000016195 00000 n 
+0000016655 00000 n 
+0000016785 00000 n 
 trailer
-<< /Size 15
-   /Root 14 0 R
-   /Info 13 0 R
+<< /Size 21
+   /Root 20 0 R
+   /Info 19 0 R
 >>
 startxref
-14777
+16838
 %%EOF
diff -Naur ns-3.18.1/src/lte/doc/source/figures/lte-enb-rrc-states.png ns-3.19/src/lte/doc/source/figures/lte-enb-rrc-states.png
--- ns-3.18.1/src/lte/doc/source/figures/lte-enb-rrc-states.png	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/lte-enb-rrc-states.png	2013-12-20 09:44:50.000000000 -0800
@@ -1,325 +1,318 @@
 ‰PNG
 
-   IHDR  €  ý   EDì)   bKGD ÿ ÿ ÿ ½§“    IDATxœìÝw\TWúøñ3ôÞÁ‚bC#
-jÄØ[ì½Æ†q5Ac,»îš^Œ&jL6ÑØ1ÁÞKŠ½$F�&nTŒ&v@z™¡eæ÷Çýîüf™a¸”Ïû_3gNyÎõr/ópæŒB«Õ
-        Ê›…Ü        j&Ð       €
-A       P!H@       *„•Ü    ZÒjµ©©©iii©©©ÉÉÉ�?ÎÎÎV«ÕiiiyyyYYYJ¥R­Vgffêš¤¥¥íÊÙÙÙÊêÿ~/utt´±±qww·µµupppqq±µµuvvööö®[·®»»»‡‡‡‡‡‡®>   €ªL¡ÕjåŽ   UQFFÆãÇ�?~÷èÑ£ØØØØØØ„„„´´´”””ôôt]M777{{{;;;777''''''[[[WWW]5www£)•Ê‚‚é±J¥ÊËËKOOÏÍÍÍÉÉÉÈÈP«Õ*•J¥R¥¤¤JÕœ��=<<ÜÝÝ}||ê×¯ïççW¿~}__ß†Ö¯_ßÛÛ»ÂŽ
-   €R   PÛ©Õê{÷îÝ½{÷îÝ»ú”J¥ÂÂÂ¢nÝº4¨_¿~Ã†ëÖ­ëãããéééåå¥û×ÒÒ²rBMIIIIIINNÖý'%Êãããóòò„¶¶¶Mš4iÚ´©ô¯¤I“&ÎÎÎ•'    		h  €Z'666***222:::222&&F¥RYYYùùùégl4hàççW·nÝê²ß…V«MHHˆ��}ôè‘.“.%ÓÕjµ��MË–-[µjÔºuëÀÀÀ&MšXXð�(   @"  Pó=~üøÊ•+¿üòË•+W®_¿žžžnmmÔ¦M›¶mÛ6oÞÜÏÏ¯º$šKK«ÕÆÅÅÝ¹s'22222òúõë7oÞÌÎÎvpphÝºuÇŽ;uêÔ±cÇ-Z(
-¹ƒ   jÐ   5�F£¹víÚéÓ§/]ºtåÊ•ØØX›gŸ}¶S§N:thÓ¦M@@€���ÜaÊF£Ñüõ×_×¯_¿zõêåË—ûí7¥Réîî.%£{÷îÝ¥K—Ú||   €òB   æ¸ÿþ©S§N�:uúôéääd??¿çŸ^Jª>ûì³dT‹SXXsùòåË—/_¸p!::ÚÑÑñ…^èÛ·ï‹/¾ÈÊh    lH@  ToZ­öêÕ«8xðà­[·êÖ­Ûë¿üýýåŽ®ZzòäÉ¹sçÎœ9söìÙ?ÿü³^½z#FŒ5jTÏž=kê.%   @!  P-iµÚŸþyÿþý|øðappð¨Q£†(wh5Ê£G�¾ûî»œ;wÎÅÅeèÐ¡£F�8p µµµÜ¡   Õ 	h  €j&>>><<|óæÍ<èÒ¥Ëˆ#FŽÙ¨Q#¹ãªáRSS�9rðàÁ3gÎ888„„„LŸ>=  @î¸   €*�4  @µqôèÑuëÖ=z´E‹Ó¦M		ñññ‘;¨Z'++kß¾}_ýõ…ºvíúê«¯Nœ8‘Ñ   €Q$   ª:�FsðàÁ%K–DFFŽ?~æÌ™]»v•;(ˆ?þøãë¯¿Þ°aƒ‡‡Ç‚¦M›foo/wP   @ÕB   êÒjµ;vìøøã�ïß¿?mÚ´4nÜXî ð?ÒÒÒV­ZõÕW_Y[[ÏŸ?îÜ¹¶¶¶r   T$   ª¨k×®Í™3ç·ß~›3gÎüùóëÖ­+wD(–J¥
-[ºt©»»û—_~9xð`¹#   ª¹   @QyyyÿøÇ?:tèàèè¹|ùr²ÏUœ““ÓüùóoÝºÕ³gÏaÃ†><%%Eî     ù±   j‰‹‹;vì�;wÖ®];fÌ¹ÃA©]¾|yúôéYYYû÷ïoß¾½Üá    rb4  @réÒ¥àààüüü«W¯’}B(
-…BQõûÔ×©S§_~ù¥cÇŽÝºuÛ¾}{Å   T}$   ªŠŸþ¹_¿~8þ|Ã†åeçää´k×®E‹½üòË›6m’;   @6lÁ  P%<|ø088xÈ�!›7o®Ðõ¹Õ‹t(Ê÷WÖŠè³8+W®ü×¿þuòäÉž={VÂp   @UÃ
-h   ùiµÚiÓ¦5oÞ|Ã†�}–6 ÈÎÎž>}º«««——×[o½¥Ÿ�ÍËËûôÓOÛµkçàààààÐ®]»Ï>û,??¿¸
-
-V®\Ù¡C'''‡ž={~ûí·ætUb$ºC¡ø/ÝKÛ¶mëÙ³§›››­­­¿¿ÿo¼‘‘‘!½4~üx…B¤ëJ«Õ)ŠI“&™è³"Ì›7oÚ´i!!!J¥²B   ª&V@  ÈïðáÃãÆ�‹ŒŒlÑ¢EE�%¥\ÇŒ³oß>]áªU«fÏž-„P«Õýúõûé§ŸŠ´êÕ«×ñãÇ­­­‹”ççç2äÄ‰EÊµZm‰]™ŽDè% õ»Õjµ“'OÞ±cG‘—Z·n}ñâE—ÔÔÔ   ¸¸¸]»v½ôÒKBˆ]»vM˜0¡Q£F×¯_wss3ìÓà •'•J0}úô…Vè@   @Ä
-h   ù­_¿~üøñ•�}Ö¹{÷ndddzzzhh¨"<<\*_±bÅO?ýäææ¶yóæÄÄÄÄÄÄM›6¹¸¸œ={vÅŠ†ý|õÕW'NœprrZ¹rå£G�rss/^¼8bÄó»*.¡—Öþ—bÓ¦M;vìhÐ Áž={’’’²³³/^¼øÜsÏEEE-Y²Dááá!m»¼páB�FSXX¸páB‹­[·ºººí³B999-X°`ýúõ�¦¢Ç   ªV@  ÈL­V»¹¹íÞ½{Ø°a•0œ´¬ø—_~éÔ©“"..Î×××ÑÑQ¥R	!Ú¶m{ãÆ�o¾ùfêÔ©º&›6mzå•WÚµk÷ûï¿é­]»v×¯_{õÕW‹¼TbW¦#Ñ�VÿWÖÎ�;_¾|ùüùóÝ»w×Þ½{·Y³fÍ›7¿}û¶T2kÖ¬uëÖEDDhµÚ—_~ù�wÞùä“OŠë³¢ÅÆÆ6hÐàêÕ«íÛ·¯´A  €ª€4  €Ì¤äé_ýÕ´iÓJNJ¿æææÚÚÚ
-!´Z­………øoBÖÞÞ>777))ÉËËK×$))ÉÇÇÇÞÞ>;;»Ho999‰‰‰ÞÞÞE^*±+Ó‘èG«_âèèh†ÄÚÚ://Ozœ��Ý¦Mé±³³ó•+Wtû‡T~Zááá±~ýúqãÆUæ    €ìØ‚  @fÒÎýmxEH9ßÊ÷é#1‘8Öÿ¦ÄÌÌÌÔÔÔ¼¼¼¤¤¤¸¸8ÝWÊÅÂÂ‚-8   P‘€  �Yýúõ­­­u{GÈKÚ‡ú‡~Ð/üî»ï„Ï<óŒa}©ððáÃOß•QRVº°°PWÒºuk!Ä•+W´ÆèªÍœ93--íã�?~ûí·u_lh´ÏŠ–”””ššÚ¸qãJ   ¨"H@  ÈÌÁÁ¡k×®�;!„˜8q¢âïÿ{DDDrrrrrò–-[æÏŸ¯{©ˆ��!Äüùó×¬Y«V«ùå—‘#G–¡+£<<<„§N�Ò-ž5k–bØ°a_ýõýû÷srrÔjõíÛ·7nÜØµkW©ÎÎ�;>8yòä¿ÿýï~~~»wïÞ¿q}V´¸ººvèÐ¡r†   ªö€  �ßÎ�;§OŸÓ¨Q£ŠËpdýµZÝ·oßóçÏiÕ³gÏãÇ�ÛØØ)ÏÏÏ8pàéÓ§‹”kµÚ»2‰dìØ±ûöíÓïV1wîÜU«V��V«MLLlÝºurrò·ß~;dÈ!ÄŽ;&Mšäããåååe´ÏŠ“——×ºuë‘#G._¾¼B   ª V@  Èï¥—^j×®ÝÌ™3eß&ØÖÖöäÉ“Ë–-kÓ¦����½½}›6m>ýôS£Ùg!„µµõÑ£G?ûì3©¾££cÏž=�9R†®ŒZ¹råèÑ£=<<ôwˆþê«¯N�:5fÌ___kkk{{ûÖ­[ÏŸ?ÿÚµkBˆ×_=99¹[·nRöY1aÂ„çž{.11QZ=m´ÏŠ³xñâÌÌÌ·ß~»Æ   ªV@  T	·oßîØ±ãŒ3>ýôS¹cA¹Ù¹sgHHÈáÃ‡,w,   €¬ä    BÑ¢E‹Ý»w�1¢  `ùòå–––rG„§µiÓ¦™3g~öÙgdŸ  Pk±   
-9yòä¸qã‚ƒƒwîÜéíí-w8(#µZ=oÞ¼M›6­X±âõ×_—;   @6$   ª–?ÿüsôèÑiii{öìéÜ¹³Üá Ôîß¿?~üøû÷ïïÞ½»G�r‡   È‰/!  ¨Züýý/^¼Ø»wïnÝºMŸ>=11Qîˆ`®œœœ…¶jÕÊÖÖöêÕ«dŸ   Ð   UŽ££ã–-[Îœ9óÛo¿=óÌ3+V¬ÈÉÉ‘;(˜¢ÑhöìÙÓªU«�7†……�;wÎ××Wî     ù±  @ÕUPP°nÝº?üÐÚÚzÎœ9³fÍòðð�;(üµZñùçŸ?xð`îÜ¹ï¿ÿ¾³³³ÜA   U	h  €ªN©T®_¿þ‹/¾P©TÓ§OŸ1cF@@€ÜAAÄÇÇóÍ7«V­R*•3fÌøç?ÿY¿~}¹ƒ   ªÐ   ÕCnnîæÍ›×®]Õ­[·iÓ¦�7ÎÉÉIî¸j�‚‚‚~øáë¯¿>zôh�:u^yå•Ù³g{yyÉ   P‘€  ¨f._¾¼iÓ¦]»v	!F�5jÔ¨~ýúÙÙÙÉWWXXxáÂ…ƒîÞ½;99yÈ�!Ó§O0`€¥¥¥Ü¡   U	h  €j)++kß¾}û÷ï?yò¤••ÕÀ�G�Õ»wo¹C«Q233/]ºtàÀ�C‡%''wëÖmÔ¨Q&L¨S§ŽÜ¡   Õ 	h  €êM¥RýðÃøá‡”Je``à‹/¾Ø·oß=z8::Ê]µ”ŸŸÿË/¿œ:uêÔ©SW®\±°°èÕ«×¨Q£†NÞ   (Ð   5„Z­¾téÒÙ³gÏœ9såÊ!DçÎ�{ôèÑ±cÇN�:y{{Ë`•¦T*ûí·Ë—/_¸páÜ¹sÙÙÙAAA½{÷îÕ«W�=\\\ä   ¨–H@  Ô@YYYR"õÒ¥KW¯^U*•M›6íÔ©S§N�‚ƒƒÝÜÜäŽQfÙÙÙ111ÿùÏ._¾|ùòå˜˜­V[§N�Þ½{�9²gÏžžžžrÇ   T{$   j¸ÂÂÂèèè+W®üòË/W®\‰‰‰ÉÏÏ÷õõmÝºuPPP«V­‚‚‚Z´háêê*w¤(''çöíÛ111‘‘‘QQQ7oÞ¼wïžV«mÖ¬™´B¼C‡çÏŸßºukTTTçÎ�ÿö·¿½ôÒK5û˜    •€4  @í’——yãÆ�ë×¯ß¸q#11Qáíí]·nÝvíÚ5oÞÜßßßßß¿AƒuêÔ±°°�;äÒINNŽ‹‹ûSÏ�;wbccµZ­««kPPPPPPÛ¶mÛ´ièìì\¤yLLLxxø–-[ÒÒÒúõë7eÊ”#FX[[Ë2    º#  PÛ%%%9rdÉ’%±±±ƒ~ðàÁŸþ™‘‘!„°²²òññ©_¿~½ÿªS§Ž���§§§———ôoe&g5MJJJrr²îßøøø„„„ØØØ'OžÄÆÆ&$$¨Õj!„���¿¿¿.™.ñóó3s ÂÂÂ³gÏ†……:tÈÓÓsÜ¸qÓ¦MkÛ¶mEN   ¨�H@  ÔjOž<yã�7¶mÛ6yòä%K–4hÐ@*OJJŠ��üøqbbâãÇ�¤’’’”J¥®ooo777{{{;;;777''''''[[[ý],ÜÝÝ�Æ T*
-
-¤Ç*•*///===777'''##C­V«T*•J%%�u­<==ëÔ©SOOýúõëÖ­ëëë[¯^=…BñôÇ'55uß¾}ëÖ­»víZpppHHÈäÉ“Ù   0	h  €Z*//ïË/¿\ºtiýúõW­ZÕ§OŸRµÕ­ANJJJNNÎÌÌÌÎÎV«ÕiiiyyyYYYJ¥R­VgffêZ¥¥¥íÍÙÙÙÊÊJzìèèhccãîînkkëàààââbkkëìììèè(-¸ööö–ØÛÛ?ÍôKëêÕ«;vìP©TC‡		4h�¥¥eeÆ    T;$   j£S§NÍ™3çñãÇüñ¬Y³ØãØLjµúÈ‘#ÇŽ«S§ÎäÉ“_}õÕfÍšÉ   PE‘€  ¨]=z4kÖ¬ï¾û.$$déÒ¥¾¾¾rGT-ÅÅÅmÝºuÓ¦MwîÜ	�8q¢“““Üq   U	h  €Ú"//oÉ’%Ÿþy£F�V­ZÕ»wo¹#ª	®^½¶sçN…B1|øð)S¦ôéÓ§\¶Ÿ   j Ð   µÂÉ“'çÌ™·xñböÜ(w999ß}÷]XXØéÓ§›7o>aÂ„©S§6nÜXî¸    ™‘€  ¨áØs£2=zôhÇŽ6lxðàAïÞ½CBBÆŒãàà w\   €<H@  ÔXº=77n¼jÕª^½zÉQm¡ÑhÎœ9±ÿ~›qãÆ…„„tïÞ]î¸   €ÊF   f:qâÄÜ¹sÙsC^»wïŽˆˆ¸páB«V­¦L™ò·¿ýÍÇÇGî¸   €JB   ¦ÑßscÙ²eõë×—;"ˆ˜˜˜ððð-[¶$''÷êÕ+44tÄˆüU    5	h  €šCÏ�Õ«W÷ìÙSîˆð?
-Ïž=vèÐ!OOÏqãÆM›6­mÛ¶rÇ   TÐ   5Ä‰'æÌ™óäÉ“E‹±çF—––¶wïÞõë×ÿþûïÁÁÁ!!!“'Oöôô”;.    œ‘€  ¨ö>|øúë¯ÿý÷“'OfÏ�ê%**jëÖ­›6mR*•Ã†		4h�¥¥¥Üq   åƒ4  @5¦V«—.]úÙgŸ5mÚtõêÕ=zô�;"”…Z­>räHDDÄ±cÇêÔ©3yòäW^yÅßß_î¸   €§E   º:~üøÜ¹s¥=7^ýu+++¹#ÂÓŠ‹‹“Dß¹s'88844tâÄ‰NNNrÇ   ”	h  €êGÏ�O?ý´^½zrG„rvõêÕ°°°�;w2$44´OŸ>
-…Bî¸   €Ò±�;    ”‚Z­^¸pa@@ÀƒÎ�;Aö¹F
-Þ°aCbbbxxxZZZ¿~ýZ¶l¹páÂû÷ïË   P
-¬€  ¨6Ž;6wîÜ„„öÜ¨m=z´cÇŽ6<xð wïÞ!!!cÆŒqpp�;.    $   ª�Ìž=[ÚscùòåuëÖ•;"È@£Ñ\¼xqëÖ­Û·o·¶¶7n\HHH÷îÝåŽ   (	h  €*M­V/]ºô³Ï>ó÷÷_½zõóÏ?/wD�_FFÆîÝ»#"".\¸ðòË/O�:µN�:rÇ   E   ê’öÜHLLüè£�Øs†nÝºµeË–ððð¤¤¤^½z…††Ž1ÂÚÚZî¸   €ÿÃ—  TE<:tèàÁƒ{õêuëÖ­yóæ‘}†¡–-[.[¶ìñãÇÇŽswwŸ<yrÝºugÌ˜qíÚ5¹C   „`4  @U£Ûs£uëÖkÖ¬yî¹çäŽÕFZZÚÞ½{×¯_ÿûï¿‡„„Lš4ÉËËKî¸   P{‘€  ¨BŽ=:wîÜ´´´/¾øbòäÉ|^eµuëÖÍ›7gff6,$$dàÀ�,¢  @åã-  @•pÿþý¡C‡2dÐ A·oßž2e
-Ùg”YëÖ­—-[öèÑ£½{÷
-!F�Õ¸qã·ÞzëÏ?ÿ”;4   Ô.¬€  �™nÏ�ÀÀÀ5kÖtèÐAîˆPÓÄÅÅíÝ»wÓ¦M‘‘‘ÁÁÁ¡¡¡&Lpvv–;.   Ô|$   äôÃ?Ì›7/==ýßÿþ7{n ¢]½z5,,lçÎ�C†	íÓ§�B¡�;.   ÔX¼Ã  �‡´çÆÐ¡CôÇ°çFùR(&òª¦_­Á‚ƒƒ7lØ�˜˜ž––Ö¯_?ikŽ{÷îÉZ5ö”§S­= @-Á›  €Ê–››»páÂV­Z%%%]¹reåÊ•å>ŠB�““SçÎ�wîÜi´¦Z­öòòòððÈÍÍ-÷0PÙÙÙ�;öäÉ“<˜5kÖÞ½{ýýýûöí‘��-wtåì»ï¾ëÔ©“���»»û°aÃN�:%wD%03=xð`…B1lØ0ýÂ¾}û*Š1cÆHO/_¾<cÆŒfÍšÙÚÚúùù�9ò×_-s FËK¼zH­,X`º·"×+??¿!C†¬[·N¥Rö™‘‘±páÂ¶mÛ:99999µiÓæƒ>HOO×Uhß¾½B¡�6@/bïÞ½
-…"88ØèÐúŠ‹ÍÄµÔp‚¦[•8´á|ƒ‚‚Þ{ï½ÔÔT£½I©½råÊðáÃýüülmm7n<uêÔ.˜nn"~  „   •èûï¿÷÷÷÷öö/,,¬¸�ŒþîaXsÛ¶mÒ«áááO%3ý».¿	ë+,,<þ|hh¨£££««khhèùóçåª|ìÙ³Ç0Vî£”o·fövûöm!Ä±cÇ¤’°°0!„‡‡Ç“'Oô»Ògaa±ÿþ²`´¼Ä«‡ôªµµõ­[·LôVÜÛU??¿ß~ûM¿att´ŸŸŸÑšÑÑÑR�µk×
-!`Oÿþý…ëÖ­+qhÓŒ^K'hºU‰C›˜¯¯¯ï�7LÒÒj]…ý8ŽéæÅÅ €V«åÞ   PIîÞ½;dÈKKË¹sç¦¤¤Tôpú‰€¸¸¸��!DÛ¶mkvïÞ]ªÜµk×ŠŽªÒ˜Îƒ�%1*===<<üÅ_T(Ë–-Ó¥2«©F�	!>ÿüó´´´¬¬¬o¿ýöùçŸ/÷QÊ÷t2¿··ÞzKÑ²eË¼¼¼G�¹¸¸!¶nÝª«Ðµk×o¾ùæáÃ‡¹¹¹¿ÿþ{×®]¥úeÀhy‰W]R²ÿþ&zÓš››{ïÞ½-[¶´lÙRáãã“œœ,½”••Õ¼yséRvôèQ¥R©R©Ž?Þ®];!DóæÍ³²²´Zmzzºƒƒƒ……Å£G�ô}øð¡………ƒƒCFFF‰ó5ZÁôµ´´­JÚô|7nœ™™Ybo&µQ­[·–þ¿®]»–“““˜˜¸{÷î=z”8M  ŠÃ­   Âåää|øá‡ööö�;w¾zõj‰õ¥·ôÙÙÙ³gÏöññ±´´|é¥—„����Fª£Ñh…'N4Ñ‰îibb¢ÂÖÖ¶Hµ¨¨(!D§N�ºté"„ˆŒŒ43¼¬¬¬ÐÐPOOO''§#FÜ»w¯¸àu·nÝÚ£GWWW›fÍš-X° ==]zéÄ‰ƒvuuµ··ïÒ¥Ë©S§ŒªT*§N�êââR·nÝ+VhµÚ”””I“&¹¹¹yzz¾óÎ;ºãcN�úý›ˆ­Š‰‰ùðÃýüü,--_|ñÅ={öäååUÚèFO¡2ühµZKKK!„~’Î¦ÏÆ»wï>ÜÑÑÑÓÓsæÌ™YYYF|¥=Wõë3§R©¬_¿¾âóÏ?8p bðàÁ&êß½{Waeeezúfæ1µæ]=¤VRx‡*®7£ƒªTª6mÚ!.\(•¬X±B T*õk*•J)[½råJ©dêÔ©BˆÅ‹ëW[´h‘bêÔ©æÌ·¸
-Å]KËÐªÄ¡KœïòåËKìÍœC­ÏÖÖVaæŸJì  -	h  €ŠöÝwß5kÖLÚsC—r2MzK?zôh]*%%EÊ4íÚµKª#m'Ú¨Q£âò¤FÓžžžEªÍ�;W±aÃ†ˆˆ!ÄìÙ³ÍoÔ¨Qúi²HËºƒ×jµ�fâÄ‰ESkB´nÝZZŠX¤ÜÚÚºÈçî¥ò‘#GêW;|øpÇŽõKtŸp7'H©f‰±ÕZ………'Ož;v¬���»»{hhèþóŸJ×è)T†­V+m‘<þü2`ôlLNNnÐ �þ«ºs¬HóÒž«F‡%¥ö¶oß.„°²²B¸ºº>~üØDeé"àèèhÎôÍ)7çê!µŠ‰‰±²²jÒ¤INNŽÑÞŠtÿþýBˆN�:IO_xáýs@Ÿt>èêJ{7kÖLÿ/M›6B\¸pÁœùW¡¸kiZ•8t‰óíÖ­[‰½™y¨u„‹-JJJ2QÍÌÞ  Ð’€ H‚Ö@    IDAT ¨8ú{n¤¦¦šßPzKïëëûý÷ßë¾=zTÑ²eËÂÂÂ‚‚‚gžyÆÂÂâ§Ÿ~2Ý‰ô8>>^ú x‘µ¢ÙÙÙnnnÒÒsrr<==]]]¥Ï°—^£F�Î�;§T*Ïž=+mQúÆoüÆ�…4Ø³gORRRvvöÅ‹Ÿ{î9!Ä›o¾©ÕjÇŒsõêÕÜÜÜ¿þúKÊÜ�?ÞpÐvíÚ]¿~=##cÖ¬YRÆ­H‰.cN�fÆ†ÔÔÔ6´oß^ÑªU«eË–™“™*3£§�¶ô?yyyÓ§O—z›5k–™þÑš<ßxã£ç•a‚¯´çj‘ææ®çŸ^j²qãFÓ5ß|óM!Ä/¼`ºš0IWÍÌ«‡®Õ¼yó¤´f©f-åmÝÝÝ¥§Ò÷µ&$$ÖŒ��ÿ›ámÕª•âìÙ³ÒÓ3gÎH'°™ó5[q×RCæ´*qèç«;2ÚR& Mºk×.]a³fÍ^zé¥mÛ¶÷ˆâ @·
-  €ò§Ûs£K—.æì¹Q„ô–þÀ�EÊ_{í5!DDDDxx¸â�wÞ)±}]ºt)’Èøæ›o„!!!ÒÓùóç!6oÞlNxGŽÑ•<xPP\ð�:uBùj»¿þúKÑ¼yó"ýK)§†zéÒ%éi\\œÑóƒ,ClµÜÍ›7ß|óMooo[[Û±cÇ9r$??¿ÜG)îü×–æG ;;»wïÞÎÎÎÿûß¥oT›1c†F£yøð¡Â×××Ì`Šœ�Ò¾†ç•a‚¯´çj‘æf†§Õj,5¹|ù²‰jÛ·oW(VVV%~Ãdq	Ê"�™yõÐµJMMõôôtppxðà�ù³ÎÏÏzÛ†Hk½�žuyyyâ7ùòË/…“'O–žNš4IñÅ_˜9_¯¥æFÃV%]â|õ÷ô(î–8Ã†gÎœ:t¨£££îÕvíÚý³Sqƒ  �[  @9ûöÛo›5kæããcþžEHoéMgee5û¯víÚ™Þ–·HrÁÉÉéûï¿/RGÊ½êVÞ¾}[¡Pè>ínºç´´4]IjjªÂÎÎ®¸àŠËzX[[|öÙgíÚµÓ¯fccc8hnn®ôT£Ñ-Q(æiNl¦Eí”››{äÈ‘±cÇZYYÕ¯_ÿÍ7ß¼}ûv9ö_Üù¯-Í�À?þñ!ÄŽ;´ZíîÝ»­­­…¯¼òÊž={„É­fLŸ�Òö¸†ç•0Hð•ö\-Ò¼¤ƒô¤½/$�;w.î‚³}ûvKKK…B±mÛ¶û,.€"åf^=ô[­Y³F1fÌÃÞŠ4!!Aááá!=5±"øÉ“'âW@'''ÛÚÚÚÛÛgdd¤§§ÛÛÛÛØØè¾Ï°Ä¡‹TÐ1z--[«‡.q¾Mš4Ñ•(
-!Daa¡~µÂÂBý“ÍœAu
-
-
-¢¢¢Ö¬YÓ¸qc!ÄŒ3Š›¦9½ j3n   å¦Ì{nQÜ[úøøxww÷†º¸¸øøø˜ÞA×InnîŽ;lmmmllô—c_»vMãÚµk%ölNnWÇÞÞ¾¸±„R®Ð�écbºÄü MÇfâ8 ..nÅŠAAABˆààà6”öëþŒ2qäÍÿðööÖ?Ž=*%”ëÔ©ãââ[\CÓg£ù	hÓ32<WÍ™~ñññR‚rñâÅîîîBˆððpÃjaaa
-…bÃ†æt[\ úåæ_=ô[Hßyúôi3g½oß>!DçÎ�¥§æï-™0a‚býúõëÖ­B¼ôÒKæÏ×°Bq×Ò2·*qhió6l˜®ÄÕÕUd«¥<µ›››ùƒŠŽŽŸJ)so €Zˆ[  @9Ðí¹Ñµk×§ÿ¢¶âÞÒ>\Ê1-]º´¸dJq�,_¾\Ñ©S'ÝIi7£^{íµ{6gw�:!®\¹b´C)‰ž’’RPP�’’bØIiKÌÒtl0Ço¿ý6wî\;;»±cÇž<y²lkÿ%&RZæÿ8;;9Ö¯_/õltsÓg£ù[p˜ž‘á¹ª{IZÇZPP`"HÉˆ#„=zôÐh4«W¯BÔ«W¯Èß ¤m(
-ÅÚµkKì°¸hËÍ¿zéíÔ©SBiwfÓM«ÕªT*éÏ}ô‘T²bÅ
-©¹J¥*RSêsåÊ•úåÒ¾ÏÏ=÷œôc~êÔ)óç[\Ãki™[•8´ôßgb¾ß}÷�®°K—.Bˆ"‹Ü¥5ò]»v5PC±±±ÂàS)eî Pq«   xZß~ûmÓ¦MŸfÏ�"Œ¾¥ß±c‡"00°°°0''Gúê³}ûö™ÙI^^^@@€býúõZ­V©Tº¸¸XXX<|øP¿ÕÃ‡-,,\\\Šä;{6çûýt6oÞ,„¨[·îÆ�ïÝ»—���››ûÇ„……uéÒEZ¼yðàAékßF�]Úža‰ùAšŽ­¸ƒ C999{öìyñÅ
-EÃ†ß|óÍ»wï–¡ŸâRZ¥ú3fŒÂÛÛ{ëÖ­			ÙÙÙRîRñê«¯šÝôÙhþ—šž‘á¹ª{ÉÓÓSqìØ±"{)=öööwîÜÑjµmÚ´Ñ�á’�?þX¡P(¤Ÿz3wüuå¥ºzö&ýÁÄAS«Õ÷ïß—Òý>>>º}3T*•¿¿¿¢}ûöÇ�W©TYYY'Ož”¾!³yóæE¾Q£ÑHõ…M›65z}.1…júZú4­JZ¥R5mÚ´¸ùŽ9RFÒîíí½{÷îääääää]»vyyy‰ÿÍË—8hÇŽ×®]“››«T*/^¼(-<7üþFsz @K  àiüõ×_º=7ô?•ÿ”ßÒ'$$Hy„o¿ýV*Ù¾}»”š)nÃNNž<)„puu�‹‹B0À°aÿþý…7n4ÞÈ‘#…ž¤¤¤W2gÎQŒ‰'ê?•ÖuŠòH@›¤‰ØŠ;0áÑ£GË–-kÚ´©……E·nÝ6lØ`âï†ŒùÒþ<xð@—ÖéÜ¹³ô`Þ¼yÅ�núlLNNnÐ �~…Q£F	¸lçªî%)unúÔ�ÿûßºÂsçÎ	!lllt[rwV›¹{Oqå¥ºzövçÎ£Í�ŸŸß¯¿þªß<::ºaÃ††56lmÒ²eË¤
-Ÿ|ò‰‰ù21ýk©Ñ>ÍlUâÐZ­öæÍ›¾¾¾†u&MšT$Û®V«»víjX³[·nú»¥›9ß",,,Œþ±Ç0`  q«   (•J5wî\›nÝºýþûïåÛ¹á[z)'Õ­[7]‰F£yî¹ç„cÇŽ5³­V+-ç9rdpp°bÏž=†¥oi6žJ¥š>}º»»»££ãðáÃuk]Mä#N�:5fÌ___kkk{{ûÖ­[ÏŸ?ÿÚµk)))“&MòððpssûÛßþ¦T*;)mIiƒ,.¶âJTXXxþüùÐÐPGGGWW×ÐÐÐóçÏ›ÓÐè)T†�ÔÔÔ7Þx£E‹666îîî¯¿þzAAÁ®]»œœœ„ï¼óŽÑV%ž�wïÞ6l˜£££‡‡Ç«¯¾š••e4gzF†çªî¥ØØØÑ£G{xxH{qR:�:u*²JzüøñBˆAƒé÷lè)Ð¥ºzímÁ‚FšÄÞÞ¾AƒƒZ»v­R©4%--íƒ>
-
-rppppp|ÿý÷‹ûà“'O¬­­---‹Ûø»¸£dz
-ºk©Ñ>ÍlUâÐ’ÔÔÔ÷Þ{/00P÷Å˜Åm>“��½xñâÀÀ@;;;{{ûÀÀÀÅ‹ggg—j¾¿þúë¼yóÚ´icooommíëë;zôèâ~x‹;[  Ð§Ð  €Qï¾ûn~~þòåËCBB¤<Qí¡Ë‹Éª‡ÌÌÌC‡mÝºõôéÓÏ<óÌÔ©S_~ùåºuëÊPýœ>}zÀ€_ýõôéÓå  ³�€  (…[·nÍ™3çÜ¹s³fÍúè£�ÜÜÜäŽH$ Q6üñÇÎ�;¿ùæ›ØØØ^½z…††>\· slÜ¸144ÔÚÚúèÑ£}úô‘;  JF  À,*•êÝwß]¿~}ÇŽW¯^Ý¶m[¹#’	h<�FsæÌ™ˆˆˆ}ûöÙÙÙ�;væÌ™Ï>û¬Üq   B�€  (Y-ßs£Ð(ééé{öì	»zõj«V­¦L™2}úté»õ   Pc�€  0%&&fÎœ9?þøã¬Y³-Zäêê*wD@MµuëÖÍ›7gfföíÛwÊ”)#GŽ´²²’;.   ”¹   ¨¢T*Õ¼yóÚ¶m«P("##W®\Iö¨­[·^¶lÙãÇ�÷îÝkoo?iÒ¤F�½õÖ[wîÜ‘;4   <-V@  !í¹¡P(Ö¬Y3tèP¹Ãj‘øøø={ölÞ¼ùÆ�ÁÁÁ¡¡¡&Lpvv–;.   ”	h  €ÿ3{öìŸþùí·ß^°`�£££ÜµÔÕ«W#""¶mÛ–��=tèÐÐÐÐ>}úÔòØ  ª¶à   ø?º=7¬¬¬nÜ¸±páB²Ï€Œ‚ƒƒW®\‘““3`À ikŽ»wïÊ   ÌÅ
-h   !„ˆˆˆxç�w,,,Øs¨š?~¼}ûö�7Þ»w¯K—.S¦L™4i%  ¨âH@ €Ú.::zÎœ9ì¹T�æâÅ‹[·nÝ±c‡¥¥å°aÃ¦L™ÂÖ   U[p  €ÚK©TÎ›7¯]»vÖÖÖ‘‘‘ì¹T}Ý»wß°aCllìW_}ß¯_¿V­Z}úé§Ož<‘;:   Å
-h  PKI{nXZZ®^½š=7€êë�?þØ¹sç–-[?~Ü«W¯ÐÐÐáÃ‡ÛØØÈ   „   j¡èèèÙ³g_¼xñ­·Þzã�7äŽÀÓÒh4gÎœ‰ˆˆØ·oŸ��ÝØ±cgÌ˜Ñ¾}{¹ã  ¨íØ‚  Ô"º=7lmm¥=7È>5ƒ……Å‹/¾·lÙ²¨¨¨àààÖ­[úé§IIIrG  P{±  Ôo¿ý¶µµõªU«Øs¨ñ¢££#""¾ùæ›ŒŒŒ¾}ûN™2eäÈ‘VVVrÇ  P»�€  5_TTÔœ9sØs¨…òòòŽ?¾uëÖC‡yyy�;ö•W^	
-
-’;.  €Ú‚-8  @µ§V«srrŒ¾$í¹ñì³ÏÚÙÙ±çPÙØØ:tÏž=<xóÍ7üñÇ6mÚtèÐ!,,L©TÊ  @ÍÇ
-h  PíMš4Éßßÿ£�>*R.í¹accóÕW_±ç ÉÕ«W#""¶oßž••5tèÐÐÐÐ>}ú(
-¹ã  ¨™X  ª·¥K—îÜ¹séÒ¥wïÞÕFEEõêÕ+44ôÕW_�ŠŠ"û@'88xåÊ•�?ŽˆˆÈÉÉ0`€ŸŸß[o½¥)Î©S§*!B  €š„4  ¨ÆvíÚõî»ïJŸèš6mš"33SÚsÃÁÁáæÍ›ì¹À(;;»±cÇ~ûí·<˜={ö¾}ûš7oÞ½{÷°°°¬¬,£MþüóÏ~ýúÍš5«   ’£  ¨¾Ø‚  TW¿þúk÷îÝóóó¥ßg,--ÿõ¯íÙ³G­VöÙg&Là3õ ÌwõêÕ°°°;vXXX>|Ê”)E¶æxï½÷>ýôS­VûüóÏ:tÈÕÕUÆh  ªÐ   ZŠ��m×®]ZZZaa¡T¢P(lmmCCC?þøcgggyÃPMeff:thëÖ­§OŸnÑ¢Åøñã§M›æççWXXX·nÝääd!„µµu�:uNœ8 w¼   U[p  €ê';;{àÀ�ºì³B«Õj4;;;²Ï ÊÌÅÅeÊ”)'Ožüý÷ß°fÍš-ZŒ7î“O>IMM•êäçç?yò$88øûï¿—7Z  €ª�Ð   ú™0aÂ�òòò_²²²ºqãË”�FsæÌ™ˆˆˆãÇ�§¤¤èÿÑK¡P(Š/¿ürîÜ¹2F  PÅ‘€  ÕÌ_|ñÆoè§�ôYYY½ðÂ§OŸ®ä¨ Ô`ÉÉÉõêÕ3úÝƒÓ¦M[»v­µµuå  Põ±  ¨NŽ;¶`Á£Ùg;;»‚‚‚³gÏþøã�•€šjçÎ�Æß:i4š-[¶ôïß?==½’£  ¨X  ª�˜˜˜:dggKO---mmmsrr´Zmƒ:wîÜ¡C‡:»¹¹É*€š¤U«V111&*ØÚÚÖ«WïØ±cÏ<óL¥E  P-�€ uáÂ¹£ þ¿¬¬¬�?þ855U¡PhµZ—&Mš4nÜ¸Q£F�5rrr’;@Õ¼yó^½zÉEmËå=¥¸¸¸�>úÈÊÊJÚôY¡Ñh
-…F£‘ëÞR999Í™3§qãÆ2F”;Ÿ#FÈ  # 0nõêÕóçÏoØ°¡Ü� B¡Õj“’’4�íYZZÊLILL5jTxx¸Ü�Ôv§N�êÛ·oÓ¦Må¤ËÏÏÏÍÍ•Þ7IIgÝ­V+•KûI�½¼¼¬¬¬d(Wéééþþþ—/_–; @5Æ/F €b5kÖÌô'Ž 8/¿ü²Ü!àÿûë¯¿ä@µ´dÉ’Ã‡Ë  zãK       ‚4        B�€       TÐ       €
-A       P!H@       *	h       @…        ¨$        ‚4        B�€       TÐ       €
-A       P!H@ j8…B¡P(K,X`º¦þS…ŒŽ%Q«Õ^^^¹¹¹æDXÚÙIœœœ:wî¼sçÎÒ JyLtÃùùù2dÝºu*•Ê°ÏŒŒŒ…¶mÛÖÉÉÉÉÉ©M›6|ðAzzzqSØ´i“~ù‰'ô�­ùJœlAAAxxøÀ�ëÖ­kccãääôÚk¯ýòË/¥ªfâL�\¹reøðá~~~¶¶¶�7ž:uê…ŠcN å«¸ËÓ\Ã+ÿúÙ¾}{…B±wï^Ãæ{÷îU(ÁÁÁ†C½X™y+1Áè¡+Õ]À°¤T·éR5BdggõÕW={öôòò²¶¶vuu}öÙgçÌ™sùòe³'  Ì¦ À˜U«VµlÙRî(Ê�áýN*±¶¶¾uë–‰šúOÍ¼¥woÝ¶m›ôRxx¸9–vvEDDD”* m)�‰!??¿ß~ûM¿att´ŸŸŸÑšÑÑÑ†C8::>ÿüóúåcÇŽutt,ÃÁ1=Ù¸¸¸Ž;šøO4¿šéW8`aaä/ýúÁ˜S§úš2eÊ”)SäŽÚ“'OÖ˜“ª¼÷ƒV\¹9×ðÊ¿~®]»V1`À Ã�ú÷ï/„X·n�é¡MÇfx+1ÁðÐ•ö.`XRªÛt©Þ¹sç™gž)ñ°@òÉ'ŸtìØQî(  Õ+  µT~~þ¼yóÌ¬\äöi¢Ð¨õë×K6lØð41›/...$$Dñïÿ»l˜yL¤árssïÝ»·eË––-[>|øpÐ A)))R…ìììáÃ‡?|ø°mÛ¶G�U*•*•êøñãíÚµ{øðáðáÃ³³³‹ô9jÔ¨ŸþùîÝ»ÒÓäääÃ‡�=ÚŒÙeb²ùùùC‡½råJƒÖ¯_ïÞ½¼¼¼¬¬¬èèè°°°®]»–ªšþÑ0<Þÿ}�FÓ¿ÿk×®åää$&&îÞ½»G�úmÍ©@væ\B+ÿú9qâD‡'N<~üXˆG��<yÒÁÁaâÄ‰†C›¸m•x+1_î†Ju›6¿avvö�!Cþøã�-ZDDD<zô(//O¥RÝ¼ysíÚµ�;w.Ãˆ   eÍ\ j¸¿zàÀ�BˆC‡WÓÄ�²¸—Œ–GEE	!:uêÔ¥K!Ddd¤™½™£HÛÄÄD!„­­m©Ð>Ý1Q©TmÚ´B,\¸P*Y±b…"  @©Tê×T*•-[¶B¬\¹²HŸ§OŸB|ðÁRá_|!„8sæLiŽéÉ†……	!7nœ��`¢3«™ŽÍÖÖVñäÉ=˜S§úbtÁ
-hCq—åú9uêT!ÄâÅ‹õk.Z´H1uêÔç[\£·ÓŠôP†»€aoe8¤æ4\¹r¥[FF†ù¬ÍX xz¬€ ÔR_|ñ…••Õ?þñ�âv
-./ÒŠ¹iÓ¦½öÚk¢ÂAësrr*[ e;&ŽŽŽ~ø¡âèÑ£RÉ�„~øa‘Hœœœ¤šR}½zõòóó“>ñ-„Ø´iS£F�zöìi~Ó“Ýµk—bÑ¢E>>>&:1³šiM›6B„……%''?M ò2ó*ËõóÕW_BlÙ²E«—cÝ²e‹î¥§Q$€R)Ã]ÀP™oÓ¦îß¿_±páB—Ru  ÊNæ8  ªªñ+ µZ­ôÝE‹­iâFYÜK†åÙÙÙnnn999žžž®®®YYYæôfý¶ñññÒç¦'NœXª ´O}L¤årîîîÒS!„ÑåÃñññBOOOÃ>ß{ï=!ÄÙ³g/^¼(„xÿý÷MŒhT‰“õôôf¬86³šé_®¤,¶¤Y³f/½ôÒ¶mÛòòòô{0§NõÅ
-è*‚Ð†ÌTªkxå_?µZm«V­¤+§ôTúàH«V­Ì™¯ÑØŒÞJJT¤Ã²ÝKJ{HÍi(Å–˜˜X¤•Ñ ZV@ Ê÷W €qµ!�ššêéééààðàÁÃš&Þˆ÷’aù7ß|#„		‘žÎŸ?_±yófsz3‡aB¡K—.úïùÍ	@ûÔÇ$??_aee%=µ²²BäççÖÌËËÓ¯©ßç�;w„/¿üò´iÓ„þù§‰�*q²&Ógf5Ãƒ_$Ú3gÎ:T÷UŠBˆvíÚ%%%éwbN�jŠtAÚPq?¼Oy¯üë§V«ýòË/…“'O–žNš4IñÅ_˜3_ŠÜJJT¤Ã²ÝKJ{HÍih›‰ ZÐ €òÀ €ÚËÝÝ}Ñ¢EÙÙÙÿüç?+hé««¤ŒªbæÌ™
-…¢âváprrzï½÷ô7Ž(m e;&©©©BÝÇ™¥R¡Ñš®®®†/ùûûwëÖmß¾}{öìéÞ½{³fÍÌ@Râd¥qu_öU3«I»Ò½Ô«W¯#GŽdddDEE­Y³¦qãÆ×®]“z—ª€Š`â‡W§T—PY®Ÿ!!!¶¶¶û÷ïÏÌÌÌÈÈ8pà€��Í”)S››3_‰á­¤´Êv0TæÛ´‰†ÎÎÎBˆôôt]I‰  <%Ð €ZmÆŒ���ûöíÓ}ß]9º~ýúåË—…½zõR(
-…¢E‹Z­öòåË×¯_/Ç�´ZmnnîŽ;òóóGŽùŸÿüçi(Ã19þ¼¢E‹ÒÓÀÀ@!ÄÙ³gkJ…RCS§NÍÊÊR©TÒ7k•Š9“•¾ìëÄ‰¦»2³š™,--[µj5kÖ¬~øA!ý[†: *Y.¡•ýôôô5jTNNÎÎ�;wîÜ™““3räHi¡Ò*îVRe¾*ómº¸†Ò¦%Ò^O   r�€ Ôj–––+V¬BÌ™3§Ü;7±Ð¸ÜAÛÚÚN˜0añâÅyyy³fÍ’Vr•-€Ò“¬¬¬�>úH1pà@©dÔ¨QBˆE‹eee©¹xñb]CãÆ�sppppp7nœ9Cë3g²ãÇ�B|øá‡III&º2³ZiI+þž²€ÊQ†K¨,×Oéû7mÚ´iÓ&ñt_?hôVRe¾*ómº¸†#FŒB|òÉ'Òæ'   2”Ã6 €š¨6ì­3|øpÃ;£‰eq/é—+•J‹‡ê×yøð¡………‹‹‹J¥*q i›—— „X¿~½ù�¡Äc¢V«ïß¿Þ²eK!„��Orr²ô’J¥ò÷÷B´oßþøñã*•*++ëäÉ“íÛ·B4oÞ\ÿ+¼LOßÌƒcædÕjõ³Ï>+„hØ°á†îß¿Ÿ———��ÖµkWÝÔÌ©f:¶Ž;®]»6&&&77W©T^¼xñ…^ÿûå`æÔ©¾ØºŠ`hC}¯´ë§D£ÑHM„M›6Õh4fÎ·¸
-ú·­Lôð”w�2ß¦Íi˜™™Ù¨Q#!D—.]Ž=š––¦V«ïÝ»'e«ùa1ÄÐ €§Çý `\­J@ß¹sÇÆÆ¦Äw¶%¾¤_&„0`€aµþýû!6nÜ¨ßÊPÙf'%›\]]¥Uuæ`´ÇÄ�ŸŸß¯¿þªß<::ºaÃ††56lmz
-æ¿ªcþÑ~üøqppp‰ÇÜœjexÕÂÂbß¾}¦�g‘:Õ	è*‚´¡â.,úå¥½†ëW¨´ë§Î²eË…‰xD    IDAT¤:Ÿ|òIqó*îbet
-º[I\\œÑ�Q¶Y¶-Õ!-CÃ7n�ÍÚÚzÝºuæÌ·V! xzlÁ €ð÷÷Ÿ7o^ùö)}@[÷ÕUú¦OŸ.þûÝVåîÅ_=ztFFÆ‡~ø4”xLìíí4h0hÐ µk×FEEuèÐAÿÕ€€€7n|ðÁAAAÒ®���ï¿ÿþ�7¤…uåËü£íëë{éÒ¥Í›7÷ë×ÏÇÇÇÊÊÊÑÑ100ðµ×^»té’®•™ÕLøõ×_çÍ›×¦M{{{kkk__ßÑ£Gÿøã�£G�.U ²xškxå_?§N�jmmmiiY†ô�ÒÝJ^ýõ+çåå	!ty^IùÞÊ|›6Ú0(((22òã�?îÐ¡ƒ‹‹‹��M“&MfÌ˜5sæÌ2Œ  LShù¶_ €1«W¯^³fMLLŒÜ� ¨–^~ùe!Dxx¸Ü�Ôv§N�êÛ·/¿ó£âÜ¼y3((ÈÏÏïÁƒrÇ‚ò·dÉ’Ã‡K_È	 @ÙXÉ      úÑh4ýõ×üùó…]»v•;  PE‘€ ¡V«sssåŽ¢¶S(Å½T3r4 @.&®ÀkkëþóŸ•  ¨vH@@—���™™©T*333ÓÓÓu�•JeFFFFF†~‰T!333//¯^½z®®®r‡  ª.ggççž{îƒ>(²“5  €	h ¨6tib)wœžž®_’žžž‘‘¡_’–––™™YXX¨ß‰“““³³³³³³‹‹‹›››‹‹‹‹‹KãÆ�¥wwwé�³³óñãÇ8 ×d!XØû¿8  ®À  ài�€€J¥ÕjÓÓÓsrrÒôäææš.)²†B¡pss³³³s×coo_§N�–-[êžV(U¨7nÜ(×©    €Z‡4 <•üü|i#‹ôôtirº•ÈÒªdiƒý¤l²´èX÷oýúõuë”���]]]ÝÜÜôKÜÜÜäš2     €™H@Àÿ§Ñh222ÒÒÒŠ$‘333¥†/eggë÷ %‹õ¹»»7iÒD?¹,•ëJœ��åš/     @…" ÆJKK+²¯…‰-/·¹°±±ñôô,²…E½zõZµjån@Úï¢´{\      Ôl$ Tjµ:%%Åœ<²Ñl²•••··w‘Í‘›6mZ\*¹;&      Ð d£ÑhÒÒÒRSS�f�%ú{+êÚZXXH»[èvºðððhÒ¤‰î©››››››þV$”     *	h åIÊ)›)##C×P¡PY‰ìííÝ¢EÃ<²ne§	      s�€`ŠV«���73¡\d×‹zõêÉ)ûúúnyÁf      5	h 6Š‹‹+—œ²Ñ=”É)     @B¨9òòòRRRRSSSRR¤ÉÉÉFwXNOO×oX$w\¿~ýâÒÊîîîrÍ      Õ	h ÈÌÌLNNNÑS$Ë,=V*•º&ŽŽŽžžžžžž&V+{xx�S     @!ÈF£Ñ$ÿ—.•,­Y.’e.((�šXZZJ9e]r900ÐÃÃÃËËËËËKÿ%;;;yg      �€*D~~¾.¹üäÉÝã„„„¤¤$ÝS�F#Õ—,K¼¼¼|}}Û´i£Ë2K¼¼¼X­ŒJvçÎ¹£@•PXXhii©_¢Õj5M‘B@'++küøñrG�ÿÃÅUG~~¾¥¥¥………Ü�À,¹¹¹AAArG ¨ÞZ­Vî€j&77×0›œ˜˜˜˜˜(=NJJJMMÕÕwww÷ññ‘){{{×©SÇð1–QýùçŸ¿ÿþ»ÜQ J¸sçÎ{ï½·aÃ777]attôG}´mÛ6kkkcCUÖ¨Q£Ž;ÊEm—��ðÓO?Éðÿ-_¾üÖ­[óæÍkÛ¶­Ü±À,}úô‘;
- @5FøZ­6é¿âãã¥Ož<ILLLJJ’²Ìº­–-,,¼þK?›ìååU§Noooé1© ÕÝ’%KvìØqóæMýÂ{÷î5mÚôÎ�;þþþr ¨v´ZíòåËß}÷Ýýë_K–,a)4  5[p vÉÍÍ•2ËÒjå'OžH«˜Ÿ<y"¥›¥ÊîîîRÙÇÇ§aÃ†íÛ·—²ÌºÌ²——¿1¨~üñÇž={)ôõõµ°°xôè	h €ù
-Å›o¾ÙªU«���ÈÈÈíÛ·ë¼  Ô<$ Q£äææÆÇÇÇÇÇ?yò$...)))!!A?Å¬[¼lccãííííí]¯^=ooï6mÚôïß_*©[·®���···���¼Ó€ª //ïçŸ~å•WŠ”ÛØØøøø<zôH–¨  ÕÚÐ¡C/_¾<bÄˆŽ;<x°uëÖrG  *
-	hT3™™™±±±‰‰‰�?NLLŒ��MHHˆ‹‹{òäI|||ZZšTÍÁÁÁ××WÊ#×ûìÝy\gÂð'@¸OQ*rãEðªxÛj­‹Õz¬mµT«k«mízPu­ÚzµžxT\Å£JµÖZÅ³^U[‹HÕ¢ˆà(†3�ÌûÇ¼›Íf2“'�dø}ÿð“gžù=Ofæ'oïÈÈHvfYuG3¾Š €ÒåË—+++¹w@Büüü0  †			9sæLbbb÷îÝ÷ïßß£G±  €Q`ÌKYYÙýû÷Ÿ={VXXXPP ñ¯j~Y*•úùùy{{·hÑÂÛÛ;""Bõ³‡‡GÓ¦Mqó2 @}9uêTXXX³fÍ¸/a  ê¢iÓ¦GŽ™:ujÿþý·oß>|øp±  @ýÃ4ˆ@¡P<~ü8//ïáÃ‡ùùùê?<zô¨¦¦†bmmíåååííííí÷ÒK/ùøø¨þµ³³»  �‚Ö@³BCCÏž=kÚ8  Ð ØØØ¬]»6$$$11qöìÙÉÉÉb'  €z†	h0…BñèÑ#�Yæ‡æååÖÖÖB||||||z÷îÍþÐ¢EöYø~?  ÑÉåòsçÎMœ8Që«mÛ¶Ý°aƒ‰# @Ã3mÚ4??¿Ñ£G¯Zµ
-   4$†aÄÎ –íÅ‹¹¹¹ýõ×ýû÷5îefg™�œœüýý}}}}||Ôðñññðð;>  ¹páB×®]_zé%î«üñG‡=z¤õU   ½œ:ujèÐ¡={öLKKspp;   ÔÜ´ärùýû÷Ù¹æ\5ÅÅÅ„{{û   ???Ÿ¾}û²÷2³ÓÍîîîbg  �9s¦M›6|óË¡¡¡VVVYYY˜€ €ºëÙ³ç‰'^}õÕAƒ¥§§»¹¹‰�   ê& ASEEEvv6û¥©a¿ ÐÉÉ)44488888¸OŸ>ÁÁÁì·ÿá^f €éÌ™3Ý»wç{ÕÁÁ!(((+++>>Þ”©   ¡jß¾ý…ú÷ï?hÐ Ã‡;;;‹�   ê
-Ð�]IIÉ­[·nÝº•““sëÖ­?ÿü377·ººšÒ´iÓ      >}ú°?ûûûÛÚÚŠ�  LA©Tž;wnùòåeÚ¶m{ãÆ“E €/00ðìÙ³ñññ¯¼òÊ±cÇp§  €¥Ãt#¢P(rssUÓÍ999ÙÙÙEEE„�fÍšµmÛ6$$¤G�-[¶dçš]\\ÄŽ  bÊÉÉyöìY·nÝÊtîÜyÏž=&‹  �A³fÍNœ8ß·oßŒŒÌA  X4|	aƒUYYyãÆ�ììlv®ùÖ­[·oß–ËåR©488˜�n		aÀ%  pmÚ´iÎœ9………eŽ?Þ¯_¿’’<©  ê×ãÇ�ãããÝÝÝþùgWWW±ã   €�0ÝpÿñÇ™ÿ‘““S[[Û¤Iv–¹M›6ìÁÁÁR©Tì°  `þþ÷¿—––¦§§”‘Éd?ÿüsŸ>}L  ‰üüüž={zyya  Àrá¬²²òÊ•+/^¼páÂÅ‹<x ‘HZ¶lÙ¾}ûQ£FEGGGGG·hÑBì˜  `©Î�;7iÒ$á2...ááá.\À4  Ô;__ß#GŽôìÙsÈ�!?ýô“ƒƒƒØ‰   @o¸ÚÂ¼xñâäÉ“Ç�ÿõ×_333kjjâââ:wîÜ©S§¨¨(<¸  êÅ“'Oš7o~áÂ…Î�;—LJJºÿþO?ýdš`  ÐØÜ¾}»W¯^±±±»wï¶²²;   èÐ@©T^¾|9##ãèÑ£.\�H$111Ýºu‹�����mÞ¼¹Ø  Ú¿ÿèÑ£Ÿ?®óÁM©©©~øáÓ§O1)   Fr÷îÝ.]º¼þúë7n;   èÐæK¡Pœ={vïÞ½ééé�=ŠŒŒìÝ»w¯^½zôèáìì,v:  hà>þøãK—.�:uJgÉ§OŸ6oÞü—_~éÚµ«ñs @#uêÔ©Ì›7oÖ¬Ybg   =àÐæèéÓ§_ýuJJJqqq·nÝfÍš5lØ0<Í  LéâÅ‹±±±4%›5ksèÐ!L@ €ñôìÙsË–-cÇŽ�ŒŒ|íµ×ÄŽ   ´ðQYóRPP0eÊ”ÀÀÀÝ»wÏ›7ïáÃ‡§N�š2e
-fŸ À”jkkûí7Ê	hBÈk¯½öã�?5  À¨Q£>ûì³‘#GÞ¸qCì,   @�à0#			³gÏ>|8ž¤	  b¹~ýzddäƒ|}}iÊgff¶oß>77700ÐÈÑ   QS*•o¼ñÆõë×/_¾Ü´iS±ã   €n˜â4Ç�íµ×Þ}÷Ýßÿ=!!³Ï   ¢Ë—/{{{SÎ>B¢££:dÔT   VVV©©©R©ô�wÞÁÝT   ³œfáÚµkC‡�<yò—_~icƒs €È._¾Ü©S'½Vé×¯ßÁƒ�”  @ÅÃÃã§Ÿ~:qâÄªU«ÄÎ   ºaZ|ÅÅÅÃ†ëÑ£ÇW_}%v€z&‘H$‰é×­Ð¥&V]]ýÉ'ŸI¥Ršž7«7èÒ¥K/¿ü²^«¼õÖ[÷ïß7R$ ³…ÁÎ¬ K‰V­Z­X±âÓO?ýã�?ÄÎ   :`ZdÃŒ?ÞÑÑq×®]ÖÖÖõX³D�³³sllìÎ�;+V[[›šš:pàÀæÍ›ÛÚÚ:;;·k×.))é×_@³ViiirrrTT”³³³³³sddäÜ¹sŸ?Î—sæÌ™Z—ë[Ì°~�ðP/£Þ"''§víÚÍž=»¤¤„o‹:—ëÜè¥K—†âïïogg8~üøsçÎé\�/¿°êêê¦M›6iÒ¤ªªŠ~­ú"ÜcÂï�ÛíÍ„¾ïl]¶Rï=o¦é¢,]ºôÞ½{µµµÆÞVýª¬¬¼~ýzLLŒ^kõèÑ#$$äÛo¿5R*­(÷Cšbì¸eÊñNøÔM¿QSvDÔñN¸Ç„ß;Xô`G0ÞébÊþ1öV´zûí·0vìØÊÊJ�…iÞGš2Æ,õxÁ&´ˆÁ¢GI½Z­3˜±sJ$’Í›7«/?zô(7ŒzB—=zp¿ÒY8¿@{ù^âv‹ÎNS_èìììïï?hÐ uëÖ•••	w, À1 ªÅ‹»¸¸Ü¾}»ÞkÖúvoÛ¶Mßbs|[§Y+++ËßßŸûª¿¿VV–ÖœR©ôÖ­[Üåú3¬»tv_‹|||®]»¦u‹|I(7šžž®õqá:W×ZX§íÛ·³«¤¦¦R®¢ï&¨Jk£¸»º^ÛíÍ‡ir£çMÆ4]LÙ·o_uuµù¤¢ñë¯¿J$’ââb}W\²d‰ŸŸ_mm­1RiE¹ê,†ÁN¸ŒFµôã_$­-âÛ¨‰;FÿñÎ€Mè[•ÖF5òÁŽÁx§‹)ûÇØ[áSTTäçç÷�üCgIš÷QgãŒ>ã»Üü‹ú%õjµp0ÆÈéääÔ½{wõå			NNN4i8 Ð@±ù^â¶NøU�þþþ¿ýö›@ß ¨XÆÅeCõûï¿ÛÚÚ®Y³Æ•«�cÆŒ!„DEEéUL.—wìØ‘âëë»~ýúÜÜ\¹\^^^ž•••’’Ò¥K­›¦Y«¼¼¼uëÖì¶>,“ÉÊÊÊŽ9MiÝºuyy97'!¤ÿþ|ùé‹Ö]Â•·(00ðÅ‹4µimßFÃÃÃÙÆfffVVV>yòd÷îÝ¯¼ò
-M3Ð­[7¶¾·¾Þ·HSå®NÏ°ÝÞ¬Ôc·Sn¥^zÞ”LÓEìçZ”J%eyÓ¤¢ñõ×_°â£G�¤RéÑ£Gë=vÅë.�•è5ÞYâ`Çè?Þa°Æ;a¦ïQœ8qÂÊÊ*##C¸˜¾'@SŒžã…Eõ>JêÕj�`¦É9fÌ‰Dr÷î]váÓ§OmmmÇŽ+�6???!!�Ò¹sgú®¦o¯@I½v‰ªªªÜÜÜ­[·†††B¼¼¼ŠŠŠh @#gè6N
-…¢S§NƒæÎM°ç÷ŠŠŠ)S¦xyyY[['&&B"""T…•JeDD!dÔ¨QZë×Ež<yB±³³Ó«XJJ
-!$00ðñãÇôM£YkåÊ•„�¶mÛÊd2õå2™ŒÉV­ZÅÍ9pà@BÈþýûùòSã¢é.áJt¶héÒ¥4µéu	eggGyôèË„*×ËÍ›7Ùë¡¸¸8BÈõë×¹eþúë¯!C†899yzz¾÷Þ{åååê[d–ÉdãÇ�wuumÞ¼ùÊ•+†)..=z´»»»§§çgŸ}¦ÚÉ¹ëªãk”À{§~L1SSS³råÊŽ;:99988¼òÊ+?üðC½ÛWWW/^¼8**ÊÁÁÁÁÁ!**jéÒ¥r¹\c£ååå&Lpuuõôôüä“OÔ�w�†ù÷¿ÿýÊ+¯¸¹¹ÙÚÚ¶lÙræÌ™ÏŸ?W½ªµ	ô}%ÜÊüÂ=/Üá†»	­Køê¯¨¨˜3gNHHˆ£££««kŸ>}<¨^‰Ö.ª/ÜM°[9zôèk¯½ææææààwìØ1¾Ö	ähu}3fÌÈ‘#[wèÐ¡‰‰‰4%¹&;6§9v4�RïøjÓy°«3å`ÇPŒw–5Ø1<ƒ…YvŒài�o¼æë.�¾ªã`GÙùbvÿx!°;Õ#�;­ÆIÓXáöj5aÂ„   �“’Ö¨ª_iN€&,=Ç6§™õ>JêÕj�`¦ÉyüøqBÈÜ¹sÙ…Ë—/'„œ8qB8íãÇ�	!ê[n}{Jê»K°ÊÊÊ"##	!ÉÉÉ4  ‘Ã´hV®\éææVXXÈ}‰=¿>\u%W\\Ü¢EBÈ®]»Ø2ìs¸ø®Æ´^7xzzêU¬W¯^DÿÏÒ¬Õ£Gõæ¨c›¦qg›3;;ÛÆÆ&((¨²²Rk~Êb\4Ý%\‰ÎuíÚ•¦6½.¡Ú¶mK™?þÓ§OùÊÐ7AØÔ©S	!6lØ¶m!dÊ”)ŠŠŠ|}}‰šaÃ†©o‘ýyèÐ¡êe8 ñ‘7ÕžÃ]W_£Þ;õcJ.—÷ë×Okµ4;pUUûŽkˆ��×ø›vÄˆê¾ùæ�T|”Jå¨Q£¸›/--e†¯	”}¥³	”ùz^¸	:wî&4–×?nÜ8¾®è"Ü’uY‘»\*•ªnQ½N¾ü:wŒzºlÙ2ÃÖ=pà€½½=Í\!›ƒ7§9v4�RïøjÓÚ"¾-šr°ct�w–5Ø1üƒ…™vŒ®ÓšÀxÍ×]ê?×}°ÓÙùâvÿxÁ×?\Ü’”+
-o…ýUc‡n,M{µ***òòòúä“OtFUýJs4Ù`Áè9^°9Í|°¨÷QR¯VlÔ49•J¥¿¿`` ûZáááJ¥R8­eM@3³oß>Â¹e @+L@‹ãéÓ§K–,Ñú*{~÷ññ9tè�êY>L	U(µµµ!!!VVV¿üòß&Ô‰ÂÂBö“SÜ;È„‹yzz}î9¢_«I“&„­ÿÏ\XX(p‰3mÚ4BÈüùó¹ùé‹qÑtáAÙ"¾-
-,Þè®]»TKZ¶l™˜˜¸}ûvõû’„+§WQQáîîîèèXZZZYYééééææ¦ñÉñ�?þ˜pêÔ)™LvòäIÕƒÒÔ·}õêÕÒÒÒ÷ßŸâææ¦±D5sÁ÷æ
-4Jø½S?¦¾úê+Bˆ³³óªU«<xPUUuþüù7Þxƒ¡Û�/^Lqwwß²eË“'Ož<y²yófWWW¢vë»Ñ:\¿~ýùóç'N$„têÔI#_��7B|}}÷ìÙóôéÓŠŠŠóçÏ¿üòË„öï+�&Ðô•Î&Pæèyá&èÜa´6D}‰pýîîî„�eË–•””TWW_¼xqØ°a5kÅw ªÐ¬®¾dÄˆ¿ÿþ{UUÕÝ»wÙù)õ�ÕËóå×¹cÔ]YY™••Õ©S§[]©T†……}üñÇ:KrLƒÝrší`GÓ(õñŽ/’ÖñmÔdƒC1ÞYÖ`Çðf2Ø1ºNkƒ_w©/¬û`§³óÅìþñ‚¯¸ø@šÕù–kì�Â�¥i/ŸÝ»wÛÚÚj<˜oCÂ_ãŒžã…*§9õ>JêÕjú}Øx9gÏžM9yòäùóç	!sæÌáKËþüðáÃ‘#GƒÁAÓd�ztVÂ·.ûŸç h…	hq|üñÇmÚ´áûÛ‰=¿§§§k,OJJ"„lÛ¶-55•òÙgŸ	l‚;~ÄÅÅqGMáb666„�šš½ZG³–@¹\N±±±áæd¦¤¤ÄÓÓÓÑÑñþýûÿ.\Œ‹¦»„f�-¢üØšÖñm”a˜'N<Xõ�„�èèh¾{ÄtöŸo¿ý–2fÌö×?ü�²eËõ2ìÐØOÅ²¾ÿþ{õ-²?_¸p�ýµ  @ë///�®àkÍ{§~LEEEBRRR¸ÒìÀìÇÍ¾ýö[õ…›6mbû_}£¿þú+ûëÃ‡	!NNN©ø
-tîÜ™ræÌõMÜ½{—Òºuká&Ðì]:›@™_ ç…› s‡ÑÚõ%Âõ³�ê{íµ×’““OŸ>­P(hº¨~	o…½d÷óóÓZž/¿Î£îÎŸ?/‘HêòL�Í›7»¸¸<{öL¸÷Àda°cÌx°£i”úxÇIk‹6jšÁŽ¡ï,k°cø3ì]§5�ÁŽáé.õ…uì]�/î`Çð�|ýSï„wZ�R¸±LÝ†¹×^{­{÷î|_½@ñ•1Þ`!\Œ;^¨:ÍB´š/•^ê˜óöíÛ„�qãÆM˜0�rçÎÊ´êá®¢AçAS�ÎJøÖ­©©!œ‹  ­0-‚‡ÚÛÛ§¥¥ñ`Ïï%%%ËËËË[þGtt´À½?gqvv>tè�¾ÅD¹)ìÑ£GDðC^kÖ¬!„Œ1‚á¿Ì.ÆEÓ]Â•èlQPP�úB‰DBÑ˜S(„‰DB¹Q•ÚÚÚ›7o®Y³&00�2iÒ$�fê¬�‹ýcàäÉ“ì¯þù§D"ÑøÏyö�êSN%%%ê[d®ªªbU}Mc‰ªù”×=ôï�ú1åàà@yòä	·BšØÞÞž¢1÷ÁÎ'ª>4Ç×^�T|	©T*Üá¾¢le~�žn‚ÎFkCè»èØ±c^^^ª%­ZµÊÌÌÔÙEõKc+µµµ_~ùett´zr[[[­åùòëÜ1ênÝºu���u©¡ªªÊÛÛ{Þ¼yÂÅØØì¸9ÙŸÍs°£i”úxgYƒC1ÞYÖ`Çðf2Ø1ºNkƒÃÓ]êë>Ø1º:_ÜÁŽá/øú§Þñm…]®±C
-7–©Û0wçÎ;;;­ÏI`ô9ˆøÊˆu4w¼Pï4³,ê}”4 Õ4Œš³k×®NNNÎÎÎÝºuÓO½Ÿ�œœºuë¦þ�4-¢o¯@IÊ]‚»œ}fH“&Mh @#‡	h|òÉ'mÚ´©­­å+Àw~/,,ôðððóósuuõòò~¢ª’ªªª´´4;;;[[Ûßÿ]¯bñññDÿ'�Ñ¬eØc1ÙŸkkkÙï¤b¿Û�ï‚C Mw	WÒ½{wá½þúëêÝÜÜ¸×1ìŒ»»;åF¹²²²ÈÿÞSIß>™™™„‡úŒåßäÂyÊó…7ì½øƒ–f¦ÿ›\ †p6!á&èì+š&Ðççëyá&ÐÿM®º•©ªªJ¯.ª¨¨8tèÐ?þñö±ÂÝ»w×ÙEZ{Lx+:WWý:}útáJ4~Õš_g«ë.))iÈ�!u¬dÃ†<(Ã—ƒû³yvŒžã�vÝxgYƒÃ?X˜É`Çè:­™fZ¸NáÎ}°cøÇ;­ýÃ×�:·"¼:åráÆR¶WÀ‡~ ñ˜8�<4‘‰Æ §³?›í`Qï£¤­¦aÔœì#e!›6mÃ    IDATÒ¯.‡}:KÒïöîÝK‰��¥	  �& M�}žà†Êð�ß‡BIMMýâ‹/!‰‰‰ô•,]º”Ò¹sgáïõÖ(¶aÃBHPPßu¿V4k±_%VVV¦¾¼¬¬,,,ŒüïW	ss;vŒ]]xç+ÆEÓ]Â•¬X±B¸E?þø£úò¸¸8BÈöíÛÕ²ßwÔ¥KÊ�r±U¿§R�¾µ±Ø�Ãk•””¤*Fù©dá<åÙÛè¸ÿscØ{MÙ¸q#·½4;0û‘ÞÔÔTõ…[¶l!œO%D.Ð©S'BÈ¥K—ø24�¦¯t6AßüÜžnÍ§’›6mJÉÏÏg½pá‚^]¤Â~àÝÑÑQµ„¯‹4ðíù*4««~eoŸIMM-..®­­-..Ö¹KpóÓ·Ú`]ºtQ}i»Áäry›6m>øà�2|íÅ`§úÕ;FÏñÎ‚;†n¼³¬ÁŽá,Ìd°ct�Ö;†§»Ôë¯û`Ç]¢Ñùæ3Ø1œñÎ4ƒåNKÓX¦ÎÃÜóçÏ½½½?ÿüsîKD&,=Ç�œæ9XÔû(iX«u2jÎÒÒRGGGGGÇ/^h�G“V¸}{Jê»K°ÊÊÊÚµkGÑzÄ hÀ´©mÝºÕÝÝ]ëË«h=¿§¥¥B"""
-Eee%û&{÷î¥¬D.—³_"¿~ýzúbÕÕÕíÛ·'„øùùmØ°áÞ½{r¹¼¢¢";;;%%EýOGu4k•••µjÕŠÒ¡C‡#GŽ”•••——gddtèÐ�Òºuk�.âö	;C¡s×ZÌ°î®¤¬¬,88˜¯EC‡Õ˜a¯cš5k¶{÷î¢¢¢¢¢¢]»v±åWZbbbÖ®]›��]UU%“ÉÎŸ?Ïþÿ|XXM3iÈd2WWW++«¼¼<õåyyyVVV®®®ªë0ÊïeÎ#Pžý|ÜÏ?ÿ,ü0_Ê÷nÙ²e„—Õ«WçççWUU]¸p�ýR#š˜ýR#�ÔÔÔ§OŸ>}úôÛo¿e¿Hã{™¢
-`ÿ<nÞ¼ùÆ�sss+**ªªªrrrRRRâââ„›@ÓW:› o~nÏ7�æ{™Ø©«I“&•––Þ¸qƒ=š(»hÀ€G�-++“Édk×®%„ØÛÛ«jæë¢ú¥ÑBÈ÷ßÏ~	áðáÃº”/¿Î£Ž
-…‹‹‹ÀàBoïÞ½¶¶¶YYY|´ž‘0Øóì=Ç;KìêñÎ²;†°0“ÁŽÑuZìøºK½þºv:;_ÜÁŽá/øú§ÞQî´4�¥i¯N›7ovrr*,,ÔXnÀAd²Á‚Ñs¼àö­õ>JÜja&È©Î€´zUhX=zíÕÕÕ÷îÝKMMeÿƒÍËË«¨¨ˆ&  4r˜€6µnÝºñ=²P…; <~ü˜ýkMõL¨;v°§{úoàÉÈÈ „¸¹¹ÐËÏÏïØ±#áÁ×šµ²²²üüü¸¯úùùq',¸›»}û¶­­­Î!\k1ÃºKg'Ü¸qÃÇÇ‡[`ôèÑÜÿr¨®®îÒ¥·p×®]Õx*¼Q­/YYYñMÖðõƒ@ÿ¤¤¤BÀ}©ÿþDí¦¤¢¢"___õ$Ã†ã¦Þ®@ù#Fhívn%|ï�z¹\Þ»wo¾ŽÕ¹WUU±B×Ð³gÏêêjÊöê,ðÁdhM_él‚ù¹=/Ð�;Ã0›7oV/À�±¨ŸKýÛÛùº¨~iT>jÔ(õ�¾ñÆ]*�_xÇ¨£;wîBnß¾]÷ª†4hPLLßÄ73;îæÌp°côï,e°c¨Ç;ËìÁÁÂL;Fð´&<^kí.õŸë>ØÑt¾ˆƒ#8^˜f°£ßii«³½:ÕÖÖ†‡‡Ož<Yc9·šƒÈdƒ£ÏxÁÝœyõ;JÜj�Œ�SàUš´ÂÁ„_¥¦³¾þþþ—/_Î ÀÂ´IåææŠÏ”qÇöÂ®k×®ª%J¥òå—_&„$$$PVÂ0{‘7tèP½ŠÉåò-[¶ôë×ÏËËËÆÆÆÉÉ)"""))Iõ}îZÑ¬õìÙ³¹sç¶k×ŽýhRDDÄœ9sÔ“'œsæÌ™4C8·eýý@3º—””Ìž=;""Bõ*¯¨¨X°`ADD„½½½ƒƒCDDÄ‚***¸Áø6zùòåiÓ¦EFF:88H¥RŸáÃ‡k|o¸Îf²ÏhÕª•ÖUØ«±={öp_Ú³g!¤cÇŽª%ýõ×ë¯¿îääÔ¤I“wß}·¼¼\}‹Ü­/ÑxõáÃ‡Ã‡oÒ¤	ûIOáFi}ï4ÊÈåò/¿ü222ÒÞÞÞÉÉ©gÏžêŸ�Õ¹WUU-^¼˜]ÝÁÁ!22rÉ’%ª?ÈiÚKÓ!ÇŽ1b„��ûELááá~ø¡êQ¤|M ì+á&�ŸÛóÂMÞa†Q*•Ÿ|ò‰§§§‹‹ËØ±cËÊÊè»èäÉ“Ã‡÷ôôtpp		™?¾úÁÅ×EõK#mqqñèÑ£›4iâîîþ÷¿ÿ]&“	t©p~á£.ÒÓÓ���ëë^¹œœ;;;�¿«pßMvZsšá`Çè3ÞYÄ`Çè3ÞYÖ`ÇŽwf2Ø1‚§5�üZ»K£þ:v”�/Ö`ÇŽ¦ìôÚii+Ü^ßÿ½T*ÕøÏTƒ"“õx¡5§yõ8JÖ¥Õ:;'ß«4i…»šò�Þ–ÎJÔ:88øúú¾úê«k×®•ÉdÂá T$ÿéêÝòåËW¯^ý×_‰Láøñã¨­­Ý´iÓÛo¿-v^ß|óÍ'Ÿ|ráÂ…¨¨(±³@c§úÛUì �WrròÑ£GÏŸ?__.]ºtñâÅW¯^Õzß41Þa°ó�ÁÎØ†‰��MMM;   Bˆ•Ø—<Xì`"½{÷fŸÄ—””¤ú‚f3´eË–Õ«Wãr  „\½z•ýÎ®ú2sæÌÎ�;�9²¶¶¶«³bã;€ÆC"‘,Y²dÇŽÙÙÙbg   BÁÐ¦SQQáîî~àÀ��Š� Àá¦0ÑµlÙrÆŒIIIõXç½{÷"##?úè£yóæÕcµ  
-ƒ�iôìÙÓÇÇ‡ý.   î€6�K—.)•ÊnÝº‰  @™LvïÞ½víÚÕoµ���{öìY°`AZZZýÖ  ÀgÞ¼y»wï¾uë–ØA    Ð&tþüùˆˆ±ƒ  ˜)öÛ	ÄNÑxeee)•Êˆˆˆz¯yÀ€³gÏž4iÒÕ«Wë½r  Ë‚ÁÎ4âãã;wî¼dÉ±ƒ    & MèÊ•+111b§   Ð.''ÇËËËÝÝÝ•Ï›7oÀ€¸}û¶1ê  Ððé§ŸîØ±#??_ì    �& M';;;,,Lì   Úåää„††©r‰D²cÇŽ¨¨¨¾}û>xðÀH[  P<xpXXØ²eËÄ  ÐØaÚD
-ÅÝ»w[·n-v   ínÝºb¼úmmmÓÓÓºuëvýúuãm  €5}úô�7‹   QÃ´‰äççWWW·jÕJì    Úåääušâèè˜‘‘Ñ³gÏ¸¸¸u[   #GŽtqqÙ¼y³ØA   5L@›È£G�!ÞÞÞb  Ð¢¶¶ööíÛÆ{‡Š­­íÖ­[§N�:bÄˆo¾ùßÄ  Æcgg7uêÔ5kÖ(
-±³   4^˜€6‘¢¢"[[[WWW±ƒ   hqïÞ=¹\nì; Y‰dÑ¢E›6mš5kÖÀ�>|h‚� @ã4qâÄ'OžüðÃb  h¼0m"ÅÅÅM›6;  €v999vvvAAA&Ûâ¸qã®\¹RRRÒ®]»]»v™l»  Ð¨xzz&$$¬[·Nì    �& M¤¼¼ÜÉÉIì   ÚÝºu«U«VÖÖÖ¦Üh›6mÎ�;÷þûï�3fÐ A999¦Ü:  4IIIÇŽûóÏ?Å  ÐHaÚD”J¥•z  Ì”	¾�P+©TºpáÂììlBHXXØØ±cŸ<ybú  Ð€ÅÅÅEGGoÜ¸Qì    �¦DMÐ  `ÎrrrLð„|Zµjõã�?¦¥¥�<y²]»vë×¯—Ëåb… €†gâÄ‰ß~ûmUU•ØA   #L‰šˆ••Ã0b§   ÐîÏ?ÿlÓ¦�¸oÝºõÞ{ï}úé§!!![¶l©­­7  4o½õVMMÍwß}§ZRRRr÷î]#  4˜€6™L&v
-   -***?~,vâääôùçŸß»woÜ¸q}ôQXXØ¶mÛpÃ  Ô‘³³óèÑ£×­[W^^ž––6pàÀ—^zI}>   ŒÐ&‚	h  0[yyyÃŠäÿ¹»»'''çææŽ=zêÔ©þþþsçÎ}ôè‘Ø¹  ÀRÉåòÐÐÐû÷ï7iÒdìØ±GŽ‘H$‰Dì\   �& MÄÕÕµ¬¬L¡Pˆ  @Óýû÷mllZ´h!v�ÿáîî>oÞ¼,\¸pÏž=>>>ƒ>vì˜Ø¹  Àb(•ÊÓ§OOœ8±iÓ¦Ó§Oôè‘\.W(ÃØØØ`  À40m"-Z´P*•………b  Ð”——çããcmm-v-\\\&NœxýúõíÛ·?~ü¸oß¾=zôHKK«®®;  ˜»Ó§O÷êÕkË–-2™L©T*•J±  4F˜€6___BH~~¾ØA   4åååˆ�BˆT*}óÍ7/]ºtþüùV­ZMœ8Ñ××wæÌ™·oß;  ˜¯øøøÅ‹k}‰aÜ  `˜€6WWWL@ €ºÿ¾¿¿¿Ø)¨ÄÅÅmÙ²¥  `áÂ…§N�
-		éÝ»÷ÚµkKJJt®;aÂ„œœ„  ó1cÆŒ¡C‡ÚÚÚr_Â4  €i`Út‚‚‚îÞ½+v
-   M÷ïß7ó; 5¸ººNš4éòåËW®\	ÿüóÏ[´h1lØ°Èår­«<|øpëÖ­ÑÑÑ›6m2qZ  ‘D"Ùºukpp°T*å¾$J$  €ÆÐ¦~óæM±S   hÊËË³”; 5DGGýõ×>üþûïG�Ý¢E‹>øàðáÃ3Ñ‡¶±±©ªªš4iÒ�!Chî˜ €†ÁÉÉéðáÃ3Î˜€  0L@›NXXXVV–Ø)   þ‡B¡xøð¡eÝ­ÁÆÆfàÀ�ì·®Zµ*77÷�7Þxé¥—ÆŒsàÀ�ÊÊJBÈ÷ß¯P(!J¥òçŸnÕªÕ¡C‡Ä  &¸wï^L@  ˆÐ¦ž��][[+v  €ÿ*((¨©©±Ð; 5899�=úÇ|üøñ×_-“ÉFŽéååõ·¿ýíØ±cJ¥’-&—ËKKK<qâÄŠŠ
-q3 €iôíÛ799ÙÚÚšý³Ï   &ƒ	hÓéÒ¥KEEÅÕ«WÅ  ð_yyy„‹¾šËÝÝ}Ì˜1û÷ïúôé¦M›?~\SS£^@©T2“šš}íÚ5±r €)Íž={ðàÁìÃ †Á4  €i`Út¼¼¼.^¼(v  €ÿºÿ~Ó¦MÅbÎÎÎ‰‰‰;vä~÷!D.—ß»w¯S§N«V­bÆôñ  À”$É¶mÛllln‚  0L@›TLLÌ¥K—ÄN  ð_>>>b§0®}ûöi|'¡JMMMMMÍŒ3úõë÷èÑ#  sqqIOOg¿–Ð   ¦a#v€Æå•W^Y²d‰Ø)   þ«¨¨¨Y³fÆÞJFFÆÒ¥K�½­*++ÙÇŒ¨­­=vìX```»víÜÝÝM ôÒµk×äääºÔ0aÂ„ÔS°l­[·¾~ýúÚµk<(v°$«W¯		; €åÁ´IõíÛwÊ”)ÙÙÙmÛ¶;   !„5mÚÔØ[)((¸xñâûï¿oìq]¹rEc‰T*•J¥¶¶¶¶¶¶vvvöööìÏ¶¶¶aaa¦Ï	 222êþ¸ö.øùùuèÐ¡^"�¥stttqqéØ±£ØAÀ2TWW¯\¹²´´Tì   	Ð&Õ¦M›ÀÀÀãÇ�c  ÌDQQ‘ŸŸŸ	6äêêºxñblHÃýû÷‹ŠŠ\]]]\\ÜÜÜLŸ ê¨¬¬¬   îõ¼þúëS¦L©{=Ð (Š7nDEE‰,Ã‹/V®\)v
-  K…g@›Z¯^½Ž;&v
-  €ÿWTTäéé)v
-#
-èØ±cXX˜¯¯/fŸ €emm�Ùg   ÓÀ´©:ôçŸ–Édb   ÄT�à      €Æ	Ð¦Ö·o_[[Û£G�Š  €L@     €1aÚÔìììúöí{àÀ±ƒ   …BñìÙ3L@     €‘`Z			éééx
-  ˆ®¤¤D©Tb      ŒÐ"6l˜½½ý®]»Ä  �]QQ!Ð      `$˜€�­­mbbbjjªØA   ±Ã4      & Å1nÜ¸sçÎåääˆ  µ¢¢"ggg{{{±ƒ      @Ã„	hqÄÄÄDDDlß¾]ì   Ð¨•””xzzŠ�      ,L@‹æ­·ÞÚºu«B¡;  4^2™ÌÅÅEì      Ð`aZ4£G�.,,<qâ„ØA   ñ*//wtt;      4X˜€�¯¯oBBÂÒ¥KÅ  �Wyy¹“““Ø)       ÁÂ´˜fÌ˜qüøñ?þøCì   ÐHUTT`Zµµµ©©©lÞ¼¹­­­³³s»ví’’’~ýõWU™ÒÒÒäää¨¨(gggggçÈÈÈ¹sç>þ\£*‰D"‘HfÎœ©u¹%%<èóóÕ Q·Zc´ZÀ¥K—†âïïogg8~üøsçÎqk¯³�‘4–«¯èââÒ£G�ü‘²!ÐHPîK¬êêê¦M›6iÒ¤ªªJ 6½NÎÎÎþþþƒZ·n]YY·N�Ço‡$Éwß}Ç]÷»ï¾“H$;vÔºiî‘ÅÍ»sçN­�åCsÜñõ$åI@¯w��ðÉ*((H"‘dffª–œ={V•áÎ�;ªå™™™‰$88XkÊé¿ê¥É  ÐÐ0 ªøøø1cÆˆ�  ©wÞy'11ÑÚºu«���	6d
-
-
-bbb„¯Í²²²üýý¹¯úûûgee©×Æ.—J¥·nÝâ.7 ¤Î‹F�ùu]~þO1õ$Æh5Ÿôôt++-·bpk«K"i,×ZÃ�hÚÒLž<yèÐ¡u¬$44ô›o¾©—<¢ Ü—Xªo;OMM¨Íà‚¿¿ÿo¿ý¦¾"Íñ»víZBÈ€¸yú÷ïOY·n�ÎMØ¶m›Öö
-t‚ðqÇ×“|ñ4¢jdæëg:OV&L „¬X±BµdáÂ…„©TJIIIQ-_±b!äí·ßÖƒ¦E4ãWÝ›lžJKK	!/^; €EÂÐ"›1cÆ®]»<x v  hŒ***ðh«©©<xð¥K—|}}×¯_Ÿ››+—ËËËË³²²RRRºtéB©¨¨2dH^^^TTÔáÃ‡e2YYYÙ‘#G¢££óòò†RQQÁ­vÚ´i”hJr¯éók]QëBuFm5×œ9s”Jeÿþý333+++Ÿ<y²{÷îW^y…²+k£NìŠùùù			„�E‹Ö:€õë×³?lØ°A ˜^'„ªªªÜÜÜ­[·†††æåå½úê«ÅÅÅlÊãwÔ¨QŽŽŽG�ÍÏÏW¯ÿÁƒŽŽŽ£F�Òºi�#‹]XPP0fÌBÈ²eËt6Gk|Ç_Oé$À¥ódÕ«W/BÈÉ“'UKN�:E?~¼Öå½{÷Öº!�-’Ëå:Ïÿ   ÚqGt0%¥RñÉ'Ÿˆ  £„„„I“&™`C¸Z%%%…øøñc¾2+W®$„´mÛV&“©/—Éd¡¡¡„�U«V©²Wt$„ìß¿_c¹úê”%…/iòkà«Pc¹‘ZÍÇÎÎŽòèÑ#’ëU’²ù¿>~ü˜âàà@³õÆ w@3úÜXzóæMBHçÎ�ãââ!×¯_ç[Ë°BYYYdd$!$99™]Bü²³¢,P/6þ|BÈøñãiÚËWàÉ“'„;;;�U„kàw4=)œVßå\:OV„…BÁ0Œ\.wtt´²²ºwïžµµµ··7[L¡PxxxhT¥×¹‹òü_÷&›'Ü P¸Zd‰äÃ?\·nÝ‹/ÄÎ  �Nmm­µµµØ)—]»vBæÏŸïååÅW&==�2oÞ<gggõåÎÎÎóæÍSP·|ùr›éÓ§ó=ïÕ€’ç7ŒQ[ÍÅ>5%%¥¨¨ÈðÐ f‰½WwÂ„	IIIDð&hÃ"'''ö¨<|ø0»„þø}÷Ýw	![·neÔf$·nÝªz©Ž4Ô}O�Î“•··whhè³gÏØÇ@ÿöÛo‘‘‘:t(,,ÌÎÎ&„\»víÙ³gááá/½ô’aIŒwþ €Ðâ{óÍ76mÚ$v  ht
-…���Ø)—«W¯Búõë'PæÆ�„�øøxîK={öTP:yòäÜÜÜ/¿üR8 eI­ß=E™ß0Fm5;)6wîÜfÍšµjÕjäÈ‘;vì¨©©á–äë
-ã)((`ŸŠÀÞd
- NçYYY¹mÛ6GGÇ‘#G&$$xzzþûßÿæ>Á†eðAÔ½{wBÈŸþÉþJüvéÒ%,,ìîÝ»§OŸf—œ:uê¯¿þ
-ÓúÊðÑ£G}ô!„}–´¸Ç�^=)¬.§š“•úS8Øçl°ïÛùêËÙ’†Ñëüoú3'  ˜3L@‹ÏÞÞþÓO?]°`Á³gÏÄÎ  �î€6=ö3¼žžžeØÏE5iÒ„û»"[‰†yóæyzz.^¼8//O8}I.šü†1v«5$&&ž8qbðàÁNNNwïÞÝ½{÷[o½#îÑì4���{§á¬Y³Dj÷îÝÏŸ?>|¸«««½½ý¸qãJKKwïÞÍWÞ°ƒˆ}˜ƒL&cÕëøeïtÞ¼y3û+ûÃ;ï¼C¿uuìQãííýïÿ;..Žýž=jàwúö¤‘Ðœ¬ØÇ:³SÌìÌ>ß4ß iïü  & ÍBRR’««ëòåËÅ  �î€6=777Bˆê›»´ruu%„”””p_b²•hððð˜?~EE{  š’Ü·Ñç7Œ±[ÍÿÃ?”––Þ¼ysÍš5���™™™³gÏÖ(Æ×”Øûþ”J¥úBöW¾[�œœºuëvðàÁ!C†èµ-htî�ì—æM˜0�ýõ½÷Þ“H$ÏŽ0ì b�Jö°%z¿cÆŒ±³³Û·oß‹/JKKÓÓÓmmmÇŽ«uCô ³³óìÙ³~:÷¸Ó·'Ôñ4¢ódÕ³gO++«3gÎTWWŸ;wÎÚÚºG�„�îÝ»ÛØØœ:uJ¡PüòË/ÖÖÖZ¿j•’^çÿ:6  L@›;;»9sæ¬X±‚ýâ   ÓÀÐ¦Ç~¸ûèÑ£e"""ÈîYÓÀ.dpMš4)""bïÞ½'NœŽA_RM~Ã˜ ÕZY[[‡……½ÿþû?ýô!„ý·±s7V?}ú”h›Rg§iÊÊÊÎœ93hÐ úM�ÁÕ«W/^¼H‰��goìmÓ¦Ã0/^dŸŸ •Ñ™3g!mÚ´aÕëøõôô6lXeeåÎ�;wîÜYYY9tèPƒï«e¦ªª*--­¦¦fèÐ¡W®\1 îqgXO•ÀÉªI“&QQQ¥¥¥7n,++kß¾={zqqqéÐ¡CQQÑŽ;ž={Ö¡Cwwwƒïü  & ÍÅßÿþw??¿Å‹‹  <–ÑÄFŽI™7o;©Õ°aÃ!óçÏ///W_^^^¾`ÁU.kkë•+WB>øàáô%Èo´Z;_Sïw„……B222Ô²38ìK õHàþ\�—ô=ˆÊËË?ÿüsBÈÀ�Ù%ú¿ª§p°Ïß¨ã×ÚÙÙ½ùæ›,�Ëåï¿ÿ~½ÜlkXOš†Ö“ûpgöÏIõ‡q³Oá`ß…º< šóü  ÷£1 –�;wÚÙÙÝ¿_ì   ÐXôîÝ{Ö¬Y&ØÐÖ­[}||L°!óW]]Ý¾}{BˆŸŸß†îÝ»'—Ë+**²³³SRRºtéÂ0LYYY«V­!:t8räHYYYyyyFFF‡!­[·.//WUÈ½¢SnƒúrÊ’Â—ˆ4ù5ðU¨±ÜH­æ³víÚìììªª*™Lvþüyöëaaa”]AÓF†aØy½fÍšíÞ½»¨¨¨¨¨h×HfiV    IDAT®]M›6%„¬ZµÊ€m5N“'O:th+	ýæ›oê%�(tJ2™ÌÕÕÕÊÊ*//O½@^^ž•••««kYY™@m:OÕÕÕ÷îÝKMM%„xyy±/éuü2£T*Ùò„�àà`¥RIß^¾r¹¼mÛ¶„�õë×¬E³	½zR¸*}—sÑœ¬†9tè�êíûé§ŸTËÕo”>zô(}îK”çÿº7Ù<±�À¾xñ¢ØA  ,’ �R©lß¾ýÛo¿-v  h,0-ŠüüüŽ;l™¬¬,???î«~~~YYYêµqÿ¤¿}û¶­­-w9eIá`”ù…·Ë·Ü­æ£5¼••ÕÞ½{é»Bg†©®®îÒ¥·’®]»Êårš€Á4Ã0‡RJJ
-!dÀ€Ü2ýû÷'„lÜ¸Q 6½Nþþþ—/_V_�þøe©>úù¯ýK ½ ·	ìGÜÜÜ
-
-
-´Ö©uÜåzõ¤pUœ4´–Ô q²bF&“±_ê`cc#“ÉTË_¼xÁ.·µµ­¨¨ �¡õ%šóÝ›lž0 Px‡‘H$ÉÉÉÛ¶mËÉÉ;   ‹��Ï…¶lÙÒ¯_?///''§ˆˆˆ¤¤¤.°eÚ¶m{íÚµ¹sç¶k×ÎÑÑÑÑÑ1""bÎœ9×®]coñÐªU«iÓ¦Ñ$¡/©o~Ã˜¦Õ¬Ë—/O›6-22ÒÁÁA*•úøø>üôéÓÃ‡¯K¸lmm�;¶`Á‚ˆˆ{{{‡ˆˆˆdddH¥ÒúÝ4rì£!T_š§îí·ß&ÿùV=>:"__ßW_}uíÚµ7oÞìÔ©“ú«ú¿ãÇ�—J¥ÖÖÖãÇ�§h•>}ú>¼´´tòäÉu©§Ž=Y¿(OVÎÎÎ111„�Ž;:;;«–»¸¸°SÆ±±±uc¼ó?  4l_GkfTYYyüøq±ƒ  @Ã×§OŸ˜˜˜E‹{C©©©ÿüç?óóó�½! h�¦L™RPP�žž^—JÚ¶m;yòä)S¦ÔW* h<^¼xáæævñâEv¢  ô‚; ÍÎªU«Î�;·oß>±ƒ          Ô	& ÍNË–-§M›6}út�¯�    J~bG S°”“€¥ä  ¨L@›£Ù³g+Š¥K—Š         Àp˜€6G...‹-Zºtinn®ØY    ,�Àwp‹ LÁRN–’   .0m¦ÆŒþé§ŸŠ         À@˜€6SVVV«W¯Þ·oßÏ?ÿ,v          C`Ú|ÅÆÆNŸ>}Â„	ÏŸ?;         €Þ0mÖæÏŸïää4kÖ,±ƒ          èÐfÍÁÁaãÆ�7nüå—_ÄÎ          L@›»ž={Ž?þÝwß­¬¬;         €0m–-[V^^¾`Á±ƒ          èÐÀÍÍmÙ²eË–-»~ýºØY          haÚ2$&&þíoKLLÄƒ8         ÀR`Úb¬^½º¢¢bÖ¬Yb          ‚	h‹áææ¶}ûö5kÖ>|Xì,          ºaÚ’tëÖmúôéï¼óNqq±ØY          t°; ègÁ‚G��8qâ¾}ûÄÎ   ‡êêêcÇŽ‰� ,Òƒ¬­­ë^ONNND `€ŠŠ
-±#  X0L@[;;»o¿ý6666--mÔ¨QbÇ   UTTÔ·o_±S €¥:thÝ+Y½zõêÕ«ë^    Ð“0#vÐÛÂ…—,YòÛo¿…„„ˆ�  ,XŸ>}bbb-Z$v ’��–ŸŸïãã#v h8æÍ›·aÃ†{÷îÙÛÛ‹�   ‘Â3 -ÒgŸ}Ö­[·aÃ†ás@   Ð0YYYÝ½{Wì  ÐpÜ»woéÒ¥.Äì3  €ˆ0m‘¬¬¬¶mÛVZZ:uêT±³    Ô{{û-ZÜ¹sGì  Ðp|öÙgááá&L;  @£†g@[ªfÍš¥¥¥õîÝ»gÏžo½õ–Øq    êªeË–¸ êËÙ³gwíÚuüøq++Üw   &ŒÄ¬G�ÉÉÉIII999bg   ¨+L@@}afÆŒƒŽ��;  @c‡	hËöé§ŸvêÔiÜ¸q555bg   ¨L@@}Ùµk×ü±|ùr±ƒ    & -œµµuZZÚƒ>üðC±³    ÔIpp0&  î***>þøã¤¤¤–-[Š�   0mù¼½½üñÇÍ›7oÜ¸Qì,    †~öìÙóçÏÅ –måÊ••••óæÍ;   ‚	è†¡}ûö6l˜<yò¹sçÔ—Ÿ:uêéÓ§b¥   ÐKhh¨D"ÉÊÊ; X°ÂÂÂ/¾øbÎœ9bg   B0Ý`Œ3fÂ„				………ì’�7öíÛ755UÜ`    ”\]][¶lyåÊ±ƒ €›;wn‹-Þÿ}±ƒ   ÀÿÃtÃñÍ7ß´lÙ2!!¡ªªê£�>š4iRmmíúõëÅÎ   @+**êêÕ«b§  KuåÊ•-[¶|ùå—R©Tì,   ðÿ0ÝpH¥ÒíÛ·çääÄÆÆ~ýõ×ÃBþúë/�çr    ˜­¨¨¨ÌÌL±S €¥š1cFïÞ½_ýu±ƒ   ÀaºAaÆÍÍ-;;»¶¶–]"•J7oÞ,n*    JÑÑÑ×¯_¯©©; XžƒþòË/_~ù¥ØA   à`ºá8{ölttt^^ž\.W-”Ëå;wî”Éd"    U]]�““#v °05553gÎ?~|TT”ØY   à`º�8xð`ß¾}e2÷Ž!…Bñý÷ß‹’
-   @/þþþžžžx
- èkÝºu………‹-;   hÂtC T*Ï�;W[[kmmÍ}U¡PlØ°Áô©    ‰ï! ½'''üñÇ^^^bg   M˜€n¬¬¬/^œ››;bÄ‰D¢1­T*ÏŸ?ëÖ-±â   Ð‹ŒŒ¼víšØ) À’,\¸ÐÕÕõ£�>;   h�	è†Ã××7--íøñã-[¶”J¥ê/ÙÙÙmÛ¶M¬`    ôbccýõW…B!v °þùçš5k-Zdoo/v   ÐÐM||üÍ›7¿üòKGGG[[[vauuõÆ�ñ‡   ˜¿îÝ»¿xñâæÍ›b ËðñÇÇÄÄ¼ùæ›b   í0Ý ÙØØL›6-//ïÝwß•H$666„�gÏžýüóÏbG   ÐÁÇÇÇßßÿìÙ³b �‘‘ñÃ?|õÕW‰Dì,    & ,OOÏÕ«WŸ<y²uëÖ¶¶¶J¥róæÍb‡   Ð­k×®çÎ�; ˜;…B1sæÌÄÄÄØØX±³    /õ_8páÂ±¢€‘4(33óôéÓ˜6mšƒƒƒØ‰ !ëß¿||¼Ø)  À²ÅÅÅ-_¾\ì `î¶nÝzûöíƒŠ   „üÏtFFÆwß})V0ž¸¸¸;wî9rÄÏÏOì,Ð`]ºtÉÕÕÐ  PG½{÷ž:uêíÛ·[·n-v 0S/^¼øç?ÿ9mÚ4ü�  `æl4~ïÚµkzzº(QÀž<yâåå%v
-h°:wî,v  hÂÂÂ|}}�;†	h à³téR++«Ï>ûLì     žÝ¸`ö   ,B¯^½Ž?.v
- 0S÷ïß_¶lÙçŸîìì,v   ÐÐ    `vzõêuêÔ)¥R)v 0GŸ}öY›6m&L˜ v   ÐÐ    `vúõëWRRréÒ%±ƒ €Ù9wîÜÎ�;W¬Xamm-v   ÐÐ    `v¼½½cbböïß/v 0/ÃÌ˜1ãµ×^ëÕ«—ØY   €
-&    À4èàÁƒb§  ó²gÏžßÿý«¯¾;   ÐÂ4    ˜£AƒeeeÝ¾}[ì  `.ªªª>ýôÓ÷Þ{/$$Dì,   @Ð    `Ž¢¢¢|||~úé'±ƒ €¹X¹r¥L&ûüóÏÅ   zÀ4    ˜#‰D2räÈ´´4±ƒ €Y(,,\´hÑ?ÿùO±³   €0    fêÍ7ß¼téžÂ „�äädooï)S¦ˆ   ôƒ	h    0S;vlÓ¦Íž={Ä "»víÚæÍ›—,Y"•JÅÎ   úÁ4    ˜¯‘#GîØ±Cì  ²éÓ§ÇÇÇ¿ñÆb   ½a    Ì×ßþö·ìììë×¯‹ DsèÐ¡Ó§OõÕWb   C4®	èÚÚÚÔÔÔ�6oÞÜÖÖÖÙÙ¹]»vIII¿þú«z±ÒÒÒäää¨¨(gggggçÈÈÈ¹sç>þ\£6‰D"‘HfÎœ©u¹aÅ¸è›ÀW·6nÍõÛdaêyœ��cccwîÜ)P†¯7ø–¯U�(°!�6úûû4hÝºueee”½   ¬ððð¸¸¸õë×‹äÿé{%ÃW†P_š°V½_ÚÑ—ÔpéÒ¥!C†øûûÛÙÙŽ?þÜ¹sÜ´^Vé{mÆÝºÀš‹‹K�=~üñG�ð¬zìpõ›7oV_~ôèQ�FÑîšNÓÙ½Â•p«2Æ¥oMMÍG}4nÜ¸¨¨¨z©P+�ûê­[·/^kee%Ðíêhv¹êêê¦M›6iÒ¤ªªŠo]�oß¦noPP�D"ÉÌÌT-9{ö¬j»wîÜQ-ÏÌÌ”H$ÁÁÁZ7MÙ
-Bq ÜR�ýÓà??Õs''§víÚÍž=»¤¤„>’Ær�~�èûV+¾OÅ€wäÎ�;þþþ‰ä‹/¾Ø4 4RŒšÉ“':”i 
-
-
-bbbtöCVV–¿¿?·€¿¿VV–z…ìr©TzëÖ-îrÃŠ	¿AÂM ¡uÓõÞdaZƒmÛ¶Mg�Mð-X«~;P`C|üýýûí7ÊŽ²D111ÿú×¿ÄN zèÝ»÷¬Y³ÄN Ã–-[ÜÜÜÊËËÅÂ0u¸’Ñ(Cyiª�f-c\ÚÑ—T—žžne¥å~�}Å–á{‰[_�åZk8pà _~¦¾;\•ÁÉÉ©{÷îêËœœœôÌ×p�}Kß½Â•WU_—¾_ýµ««ë£G�ê^öUšjµv‹Æ.·}ûvvyjjªÎu¹øÂ‡ÔÙÞ	&BV¬X¡Z²páBBû î””Õò+VBÞ~ûm­›¦lÍ�fXKù2èûç'ßaîããsíÚ5ÊHË…7ªó=â[]ka.¾�eÀ;rëÖ­-ZH$’¯¿þZ`» Ðh5–	h¹\Þ±cGBˆ¯¯ïúõësssåryyyyVVVJJJ—.]Øbååå­[·&„DEE>|X&“•••9r$::šÒºukõ¿|Tçßþýû«o‹o` )V÷&ÐT¨þ’1š,L½pAAÁ˜1cØ­ë[!·ŒðZFê@�ªªªrss·nÝJñòò***nšåÂ4€ÅÁ4X„ŠŠ
-ww÷­[·Š„aô¿’ÑZFßËúµŒtigØE`xx8»Jfffeeå“'OvïÞýÊ+¯Ð×@Y’ï%�ëíüüü„„BHçÎ�ù¶Xï®Ê0fÌ‰Dr÷î]váÓ§OmmmÇŽ«o`áÞ3ø]ßJŒzé[TTäáá1þüºT¢Í¾6oÞ¼7n¶ÓòírÝºuc‹ñøÜªê²œ¥³½ììäë¯¿®ZÒ§OBÈ»ï¾KyóÍ7UË‡BIKK£Ù´Ö—(Ï‡ï¢êûóSø0|ñâMm8Í>Iß.�Ï€wäæÍ›Í›7·²²Ú²e} hTËtJJ
-;6<~üX ØÊ•+	!mÛ¶•ÉdêËe2{	µjÕ*ÕBö„;pà@BÈþýû5–V¬îM ©Pý%c4Y¯`Ož<!„ØÙÙQ†(#¼–‘:�¾@YYYdd$!$99™&€%Â4€ÅÁ4XŠwß}·G�u©��+**¦L™âååemmÍ0Lbb"!$""B©T²Å”JeDD!dÔ¨Qõ¨~¥¹’á–Ñ÷²„~-#]ÚvhggG¾q•þ2Ò€k3áëíÇ�Bø¶Xï®ÊpüøqBÈÜ¹sÙ…Ë—/'„œ8qBßÀÂ½W—Kt½*1ê¥ïôéÓ***„·®~hp\Óì«[4 $÷¼yó&!¤sçÎqqq„�ë×¯ë»QÃÞ8�í-(( „xxx(
-†aär¹£££••Õ½{÷¬­­½½½Ùb
-…ÂÃÃC£*}UÊó¡Á»¨FþüÔy˜/]ºÔ€¨u|�„+&¼ãéûŽ\½zµY³fR©t÷îÝ”  j,Ð½zõ"œÚpõèÑƒ²k×.îKìƒ¢ÔÿË‘=áfggÛØØUVVª/7¬XÝ›@S¡úKÆh²^ÁØ+ OOOÊðe„×2RêU`ß¾}DðFK‡	h ‹ƒ	h°W¯^•H$W®\1¸vt>|8ù†aŠ‹‹[´h¡~-Ä^ÿ<þ\ Õ¯4W2Ü2ú^–Ð¯e¤K;Ã.Û¶mK™?þÓ§OùÊÐ_Fpm&|½­sºÞ;\•A©Túûû²3¤áááJ¥RßÀÂ½W—Kt½*1Þ¥oNNŽT*Ý¾}»Î­«Ú×4ûªÆiòë|§N�JÙ°aÃ¶mÛ!S¦LÑw£†½q4íe§Vÿýw†aÎŸ?O‰ŽŽfæå—_&„°�—ùã�?!ááá”›ÖúåùÐà]T£€~ê<Ì»víj@Ôº¿GôMÐ ¼ãéõŽ\¹rÅÓÓÓÎÎîàÁƒ”[€Æ©±L@{zzŠÿ?lÒ¤	!DëôjTªSü´iÓØ±Ac¹Å¸ômw»Â/£ÉôÁ
-ÙÏ@iÜŒ ³7´nTx­zï@�x|ë²—;”,& ,& Á‚ôïßäÈ‘¯ÎŽÎ>>>‡R¿‹íðáÃ„�ÐÐP…BQ[[beeõË/¿×Ãþ,|%#PFßËúµŒtigØEà®]»T—I-[¶LLLÜ¾}»\.çÖ,|Õ§s[”«¨ÿúðáÃ‘#GÁéÑzïpõ³gÏ&„œ<y’�Ú›3gŽ�…ûŸ¾oª¢©„oÝº_ú¾ñÆ]ºtQÝÈ,�\ãÐÖ÷¸¦ÙW5¶H“_ød.äèèXZZZYYééé)ð°{}ß á�4í}ÿý÷	!_}õÃ0‹-"„LŸ>�aöËH×¬YÃüçÐ|ðeÿh}‰ò|hXK}NÚ|Õê<Ì5vrá7‹r£zí“åÒ¹ãéõŽ¸»»;99;vŒfÓ Ð˜5–	hBHMM�ÁÅärùÿ±wŸqQ\mÀÏ.ËÒVP@D¥ˆ¢‚ ¨ˆØP,ØPQcìñ±§hb�QëcÔXb,€± Å#Š
-vA�$AŠˆ‚Ho;ï‡y³ÏfËììR†rý?øƒ™33×9;;;{;ÌB�dŠäŸ““cbb¢¯¯Ÿ’’B)?qdÓŒá£”eä·Ë<«&ºÌ&˜4™�s•£¡p£ÌKUû 2ÄS¶lyy¹Ì�60(@Ô;(@C=&^½z¥Ùâô§ó™3gägÍ›7�tøðaBÈŠ+T®GÝ3™6êž–°_ª†NíØ·”qíÚµ#FH¯Gqqq‘¾ Oåi•|ö³ž¡É�¾£ˆŒjpéHÏŸ?'„L›6�~Ú[RR’�™ÇŸýØ2¬ŠÍJ”-[ÅSß«W¯òx¼ÈÈHæfôÖåßÚj½¯)ûªÌÙt�ù<xð !dÊ”)ô¯ß|ó!DÙ-tÕ}�T†TÙ_úöáÃ‡S5xð`BÈùóç)Š
-%„Œ;–úçÐ2o"uw3–ÇC�{*ßXÝ¯Ÿ*ßæ,oè!3]e_Øï“•§rÇSëÑÑÑiÑ¢E||<›M@cÖX
-ÐU¿úÍ›7DÉ5#EíÞ½›üó1¬ðsE­fUé›JÏª‰.³	&!‰BCCÙ‡ghÃ¼T Zè?»366f™¡ÞA ÞAê±Xlgg·téRÍ§?�srräg¶û‡‹‹Ã%f”:g2m8¹º*§vU<	¬¨¨ˆ��ß½{w›6m!sæÌQ¸ff-y<!„¾Y­Dee%!„ÇãÉ¬�f``Ð«W/æ¿¯ö—é…§§§���H$êÕ«—Â>ªÌ<zìÇ–¡1›•ÔÄ©oee¥‹‹ËøñãU¶TöÖVë}-Á°¯Êl‘ÍÚ˜_AwwwBÈõë×é_Ÿ={Æãñ”]’¯îTõ÷æû÷ïù|¾‘‘QII‰H$ÒÒÒ¢o`òñãG�@`jjZQQÑ¬Y3--­ÜÜ\–›V8K­ëm5è)ù7¾~ª|›ÛØØHOTëˆÄ�œÆfŸd¿6ŠÅŽ§Ö+rþüymmíæÍ›?zôˆÍÖ Ñj,h///R3÷€¦®¨¨ ŸkA?Q„È�8ªÕ¬*]`³BéY5Ñe–ÁJJJŽ;¦££#
-é›‹±	ÏÐ†y©@µœ:uŠÒ£G–ê ê ¡~	‰Doß¾Õ`Y†�ïÌÌÌfÍšYZZš™™1ßpS­3emÔ=-a¿T�ÚUËI EQ			„KKK…kfÆÐÒÈÈˆÈ•‡èÂPÓ¦M5Ø­Ú\&C`` ýëþýû&Ôøœ“åâlkvZN«Ê©ï�tuu“““U¶T¶uµÞ×òä÷U•[T«eLLQ"&&†ýªªòÂISØß.]ºBvíÚEéÚµ«dz÷îÝ	!ô¥åÝºuc¿i…³X5î©¤�Æ_?{÷îÍü69r¤ôÄ:"1ì“ì×ÆfÇS÷9yò¤–––±±±Ì¨ Hk,hBˆ��ó7úù¶ÒÓ
-
-ˆ¢ç†K~§—•™®Y3�»Àf…Ò³j¢ËjÛ¼y3!ÄÝÝ]úænlV(ß†y©@ö
-
-
-œœœ!kÖ¬a >B ÞAêú^®ô}HÕÅðñMÿùáÃ‡ÿûßÿB>ùäöëas&#ßFÝÓöKÕÐ©]µœR•žžN
-…ÊÖÌ€¡¥‡‡!DæQuôÃµzöì©Á¶hÕ>à2òòòôõõõõõ?~ü¨0¡fçœìgÓX³Órªj§¾?~lÑ¢Å²eËØ4V–P­÷µ<ù}UåÕjIß!D¡yóæ±_UU^8i
-û»hÑ"BHëÖ­	!K–,‘L_ºt)!ÄÖÖ–"ÿ21lZá,–ÇC�{*Ó@ƒ¯Ÿô­®Þæ.\�ž^CG$†}’ýÚØìx¼"G�åóùM›6½wïû@£ÒX
-Ð¥¥¥ôÿßZZZúûû¿zõª¬¬¬¨¨(111  @ò1PPP@Žººº^¾|¹   °°ðêÕ«®®®„�öíÛKß›_þOŸåÈL×¸™f]`³BéY5Ñef2�ËÊÊè'üîÛ·�Mx†6ÌKÕÐ ªlPZZúêÕ«Ã‡Ó’633{÷îs×ê/ ê ¡Þ	
-
-ÒÕÕMKKSwAeßÇŽ#„8::VVV[YYBN�:År=lÎdäÛ¨{ZÂ~©:µÓì$°{÷î{öìILL,))ÉÏÏ�ŒŒ¤¯vpp`X³2-é*póæÍOœ8ñîÝ»wïÞ?~ÜÔÔ”0ÜUªöW™AÝ/j­�™²Æêž–WË©ïªU«ÌÍÍ%uy’«û¾f³¯2o‘}6Š¢òóóù|~jjªôôÔÔT>Ÿohh(SèdX•f/ËþÒ·{¦]¼xQ2ýâÅ‹’éW®\a¿i…³X5ÞEehðõ³   mÛ¶ÊÞæ£G�–yNfµ‘ÔÚ'ÙŒÅzÇÓì	äñxMš4¹}û6s hœKš¢¨´´4777¢„¤YBB‚¥¥¥|KKË„„éÊâŸ?.
-e¦«ÕŒ!û.(Û®²YÕÞefò�¯^½J122ÊÈÈ`?Ê¦0,U½È°e¬¬¬þüóO–U¡ Pï  õNEE…½½ý—_~©î‚
-?Ù³²²è¢€äÆ¬ÁÁÁ„†?Ø—_�²3æ6j�–H°Yª&NíØ·”_JŸÏ—®²†m•––öìÙS~%žžžÒwþeN«Põ¸Ê2sUfÆ~l¶Åf%ÊÚhvê›’’¢§§']d&ŸGã÷µ�÷U†l´€€ BÈ�!CägÑ�ûd¹*u§3ôE¦¿EåççÓÏ£ùùù’éôm 	!B¡°¨¨ˆý¦•ÍbóFÓ¬§
-hðõóñãÇô•à2&Mš$óŸL”šG$æþÊ��Ø�¥ÎŽ§Ù+Bß­ÅÀÀàÚµkÌI  jDhŠ¢ÊÊÊ80hÐ 333�@```àèè8oÞ¼¨-Ý¬    IDAT¨(éf¹¹¹«W¯vrr¢ÿ&ÎÑÑqÕªU2�V ”â—,Y"3]­fÊîêvAÙv•ÍªÞ.3SØØÏÏ�"ÙýTŽFii)‘ûû#6cX�È°!é‰zzzC‡Ý³g�ôy[ƒ„4@½ƒ4ÔGGŽÑÓÓ{ùò¥ZK)üd;v,!ÄÓÓS2E,wëÖ�2nÜ8öëQx&ÃÜ†Rç´D›¥ªýÔN³“À?ÿüsÁ‚�;wÖÓÓÓÖÖnÝºµŸŸŸÌÅqlÎß2H­[·ÎÑÑQWWWOOÏÑÑqÝºu2¥1æ5(S�®2ƒÂSJ†lÌ£Ç~l¶Åf%ÒÓ«~ê;yòd''§ŠŠ
-–íåóhð¾®Þ}•!�.í…„„ÈÏ
-		!„¸¹¹±\•ºÓilúK£©ò�F¤d×§Oµ6Í0KåM³ž*k î×OŠ¢rrrV®\éèè¨¯¯OÏe¸¯û#’²�²�XŽ¥æŽ§Ù+²eËú8 i< 4r<JêÀ÷Å_dddœ9sFÙ¡ Žxüø±“““••UJJ
-×YàÜÝÝ}}}W¬XÁu `ËÛÛ»{÷î7nä:€(Šê×¯_Ó¦Mÿýw®³ @uzðàA�=ÂÃÃû÷ïÏu ¥"""†RQQ±ÿþÿüç?\Ç ¨ø\ P�X,~þüù7ß|CQø—M   Ð°ñx¼;v„†††……q� ªEQ.ôññAõê¸ìÙ³‡2oÞ¼ˆˆ®ã  Ô®@CÃãñ”Í¢”ÿ�{ZZZôÚÚÚôs™   ±éÒ¥Ë¬Y³¾ùæ›hkks ªÁ©S§>|Ëu ÕfÍš5kÖ,®S  Ô¸êŸ&MšôïßÿêÕ«]»vå:   pcÍš5™™™»wïæ: Tƒ’’’eË–Í™3ÇÎÎŽë,   PÍp4T³j¹Ì™Ãõ  @½`ff¶~ýú¥K—:´C‡\Ç€*Ù¹sg^^Þš5k¸   ÕW@   @½4þü~ýú}úé§ååå\g Í½yófÃ†+V¬066æ:   T?     ^âñx���¯^½Úºu+×Y @skÖ¬177ÿòË/¹   5h    ¨¯ZµjµuëÖuëÖÅÅÅq� 4øã�?
-…B®³   @�@    ê±Ï>ûlðàÁ~~~yyy\g µ-\¸°_¿~£G�æ:   Ô     ~;räˆP(œ8q¢X,æ: ¨áâÅ‹7nÜÀ]t   6     ~‰DgÏž½{÷î†¸Î l•——/Z´hêÔ©...\g  €$à:     @Uµoß>00pâÄ‰]ºt>|8×q @µ€€€×¯_GDDp   j
-Ð    ÐŒ7îÑ£GãÇ�¿zõª§§'×q €INNÎêÕ«—.]ÚªU+®³   @ÍB    ˆõë×:ôúõë®®®\Ç ¥6nÜ(‰–,YÂu   ¨q¸4    4[·ní×¯Ÿ¯¯ï«W¯¸Î Š=þ|×®]ë×¯×ÓÓã:   Ô8     áÇ�·µµíÝ»wbb"×q @�åË—»¸¸Lž<™ë    PP€   €EOOïòåË={öŒŒŒä: üËÍ›7Ïž=»cÇ�Çu   ¨(@   @C#
-ûí·±cÇ4èòåË\Ç€ÿ'‹.\èçççááÁu   ¨%²!<{ö,þ# 4æëëËu   BÑÒÒò÷÷cÆŒ9pàÀ'Ÿ|Âu"  GŽyòäÉ™3g¸   µç_è¥K—~öÙg\EPhÛ¶m§N�Z°`Áøñãñ¿#u_ëÖ­¹Ž   ðÿø|þž={¦L™r÷îÝ­[·
-…B®C4^………+V¬øê«¯lll¸Î   µç_h++++++®¢ (<xðàùóçGGG¡¾	   ìñx¼/¿ü²K—.ãÆ�{ðàAppp»ví¸ÐHmÙ²E,¯\¹’ë    P«ph¨¦N�úçŸæää¸¸¸œ?žë8   PÏôêÕ+::Z[[»sçÎ;vì‹Å\'htRSS7oÞ¼zõê&Mšp�   j
-ÐP?ØÛÛß¹sgÔ¨Q£F�Z¼xqYY×‰    >iÕªÕÍ›77nÜ¸råÊÞ½{'&&r� qYµj•­­íìÙ³¹   µh¨7CBBöïßß»wï””®  @}Âçó,XÛ¤Iggç…ææær
- QøóÏ?�9²}ûv---®³   @mCê™±cÇ>~üX 899…„„p   ê™¶mÛ†……�<yòüùóíÛ·ß³gOEE×¡ 2Š¢,X0dÈ�p�   8€4Ô?7oÞœ?þ„	æÌ™ƒÛq   €º|}}¾úê«¥K—ÚÛÛUVVr
- a:}úôÃ‡úé'®ƒ    7P€†zI lÚ´éìÙ³!!!žžžÉÉÉ\'  €zFWWwõêÕ/_¾ôõõ�7ožƒƒÃÑ£GQ†¨^¥¥¥K—.�5k–½½=×Y   €(@C=æëë{÷îÝÂÂBOOÏèèh®ã   @ýcff¶uëÖ/^:töìÙ;vÜ½{waa!×¹ ê«üñúõë’_þùçÜÜÜ5kÖp	   ¸…4Ôo<ðññéÝ»÷‘#G¸Ž   õ’¹¹ùöíÛSRR¦L™²víZkkëU«Veeeq� þ	èß¿ÿðáÃŸ={–••µnÝºï¾ûÎÔÔ”ë\   ÀEQ\g ¨ÁÁÁ³fÍš2eÊ®]»„B!×q  êooïîÝ»oÜ¸‘ë  uHqqqPPÐ¶mÛ^½z5fÌ˜¹sçöíÛ—ëP õCII‰���X,E9::æää<{öLWW—ëh   À\Ä¤I“"""þøã�~ýúeddp   ê+==½9sæ<~üøèÑ£oß¾õòòrpp o#Àu4€ºîñãÇb±˜RQQQYY™���••µiÓ¦ââb®£   gP€††ÃÃÃãáÃ‡b±¸k×®QQQ\Ç  €zL[[{Ü¸q‰‰‰>>>kÖ¬iÕªÕøñãCCC+**¸NPG=~üXú�ËËËËÊÊÖ¯_oggwîÜ9ƒ   ‡P€†¥U«V×®]ëÝ»÷€Ž?Îu   ¨÷:vìøÓO?edd=z´¤¤dôèÑ–––‹-úûï¿¹ŽPçÄÆÆÊO¬¬¬|ýúõèÑ£OŸ>]û‘   €s(@CC£¯¯üøñeË–Mš4iÓ¦M\Ç  €†@GGÇÏÏïüùóiiiË–-»qã†««k‡V®\©°âÐ8=xð ¬¬Lf"ŸÏ!!!~~~œ¤   ná!„Ð`�9sfÊ”)Ã‡?|ø0{  B ±çÏŸ‡„„„„„ÄÆÆÚÙÙùøø2¤oß¾:::\GàŒ‘‘ÑÇ�¥§]]ÝóçÏ{yyq•
-   ¸…+ ¡Á3fÌµk×nÞ¼9tèÐ>p   ”öíÛ÷Ýw�=JLLüôÓOoÝº5dÈSSS??¿ƒfeeq ¶eddÈTŸ…BaóæÍïÝ»‡ê3  @c†44dîîîQQQYYYžžž¯^½â:   4@vvv«W¯~øðá»wï8`jjúÝwß™››·k×nÁ‚áááxh!4±±±|þÿ¾`
-…B;;»èèèN�:q˜
-   8‡44p666·nÝ266îÝ»÷£G�¸Ž   –±±ñ¸qãüýýSRR"""F�}åÊ•�ÚØØÌ�;÷Â…\g¨A±±±B¡�þY[[ÛËË+22²eË–Ü¦   Î¡ Ÿ‰‰Ixxx�=úõëwûöm®ã   @§­­Ý¿ÿ­[·&&&¾xñbÙ²e)))ãÇ�766öôô\¹rexxxQQ×1ªÙ£G�è'jiiÍ˜1#44ÔÀÀ€ëP   À= ¡QÐÑÑ			™9s¦··÷‰'¸Ž   �EÛ¶m¿øâ‹K—.åççGEE�?þÙ³gcÇŽ544ìÚµë‚Nž<‰‡U@Ã-‹ù|þ·ß~»wï^---®  @� à: @-áñx[¶l155�4iRnnîÜ¹s¹N   �ˆ–––›››››Û‚ŠŠŠ"##oÜ¸qýúõ={öhkk{xxôë×ÏËËËÑÑ±iÓ¦µœíöíÛ¥¥¥µ¼Qh`***’’’ø|þÂ…ûöíÁu"¨U¸à  ”áQÅu€ZuèÐ¡Y³f-Z´hÓ¦M\g à˜··w÷îÝ7nÜÈu€Æ«  àÎ�;×¯_¿qã}©���»»{�=zôèáèèXÅËHSRR¬­­™ÛXXX¤§§We+ ÐÈ%$$ØÛÛs�  ê(\�ÎôéÓµµµ?ûì3Š¢6mÚÄãñ¸N   �—H$2dÈ�!C!ùùù<ˆŠŠºÿþªU«²³³E"Q×®]éb´»»»¹¹¹ºëŸ?~^^ÞÎ�;ÝÜÜš:thÚ´išw½ë×¯7mÚ´K—.\�Ú–žžnaaÁu
-  ¨ÓP€†ÆhÒ¤IÆÆÆcÇŽåóùÿýï¹Ž   @!Mš40`À€è_“’’îß¿ïÞ½ˆˆˆŸ~ú©¼¼ÜÚÚÚÃÃÃÝÝ½{÷î�;w‰D*×“™™Ù­[·qãÆmÞ¼YåÕÐ šñòòâ:   ÔQ(@C#åããsåÊŸâââíÛ·ã:h   ¨klmmmmm'MšD)..þë¯¿èzô¶mÛ^¿~Íçómmm]\\ºtéââââââ"}t~~~ff&}Ï½³gÏž>}zúôé6lhÑ¢ý   €F	hh¼<==/]ºäããCA   ê2===OOOOOOú×üüügÏžÅÇÇGGG_¸paíÚµÅÅÅ†††NNN�:urpppssëÚµë“'O$O|)//'„9r$88xÙ²eË–-ÓÓÓã¬?    Ðh  �jÐ   P5iÒÄÍÍÍÍÍmêÔ©„�¢¢¢¸¸¸˜˜˜¿ÿþ;&&æèÑ£EEE"‘¨S§NB¡°¬¬L² ýóÆ�÷ìÙ³~ýúÿüç?U|È!     3 ¡±C   ê;}}}wwwwwwú×ÊÊÊgÏžÅÄÄ+l_^^ž��ýùçŸoÝºuûöíµ˜    >× ¸çééyöìÙÀÀÀo¿ý–ë,    U¥¥¥eooÿé§Ÿ–••I_þ,£¢¢"))iøðáïß¿óæMm&   €Æh B0`ÀùóçwìØ±fÍ®³    T�¸¸8…Óµ´´ôõõµ´´(Š222‹Åµ    Ü‚àÿ0àôéÓ£G�600X¼x1×q    ª¤   ++‹"ôôôJKKËÊÊôõõííí]]]ÿafffaa1iÒ¤V­Zq      þgØ°aœ:uª±±ñŒ3¸Ž    ¹ÄÄD¡PØ¶mÛ.]º8;;;::vêÔÉÚÚšë\    Ð¸  ð/“&MúðáÃìÙ³›6m:fÌ®ã    h¨S§NùùùÚÚÚ\   €Fh YŸþyzzúäÉ“ÃÂÂúôéÃu    Mèëës     !PdÃ†cÇŽ3fLBB×Y         ê+ àñxðôôôññ¡ŸÞ         êB@1�@pòäÉ6mÚ:´¨¨ˆë8     ¡ŠŠŠÃ‡ûøø˜››…B‘Häää4oÞ¼{÷îIÚäååýðÃÎÎÎ"‘H$uîÜyõêÕ>|�_�ÇãñxK–,Q8]³fòØwAÙdÖÆfCÒÓE"‘••ÕðáÃ÷îÝ[PPÀ~´YvœÆrØe‚õèÑã·ß~SÖæ×_•ž~åÊe£ZZZjjjjll\RRÂÐæžJO™:u*�ÇëÖ­[ee¥ôôÊÊÊnÝºñx¼©S§*[  @Æ£(Šë uWVVV·nÝzôèqâÄ	†³O €zÊÛÛ»{÷î7nä: pÉÂÂbÃ†Ó¦Mã:H�ÈÌÌ5jÔƒÎ¥¿%&&2$55Uf®••UXX˜½½½ôDúœP[[;..®cÇŽ2Ó%_¯Ôj¦,›.°AQ›)kceeuæÌ7776ÛbÙq¢Î°+4eÊ™6®®®·nÝ’L?~üÅ‹e¶N	ž<y2!äðáÃ
-KÃò™™ç¸ºº>þ|Ë–-‹/–Lß²eËÒ¥K;tè-‰®­þJOO·°°HHH�y§   Hà
-h &-Z´8þüÅ‹üñG®³    €zÊËËGŒñàÁ‹}ûö%''—••&$$ôìÙ“RTTäëë›ššêìì|éÒ¥üüü‚‚‚Ë—/»¸¸¤¦¦úúú*üc¸òòò°	À¦%‡}.¨lm’iSRR’œœ|èÐ!;;»ÔÔÔ¡C‡¾ÿ^eGØw\ƒa§ƒeddÐuçŸ~úI~µcÆŒ¹sçÎË—/é_ß½{÷ûï¿ûùù)Ì°oß>úö]c ‰Ž?.
-W¯^ýâÅzbRRÒ÷ß¯££süøñ†W}  `Eþ dœ>}ZKKë÷ßç: @50`À·ß~Ëu
- àXëÖ­:ÄuŠ@iÓ¦MVV–²6;vì „ØÛÛçççKOÏÏÏ·³³#„ìÜ¹Sz:ý5ÊÇÇ‡rîÜ9™éš5«bäã±Ÿ®²MAAAçÎ�	!?üðû *;®Ö°Ë,ûöí[BˆŽŽŽüv#""!«W¯¦'nÛ¶�ríÚ5ù®ÅÇÇBÜÝÝ=<<!qqq,Då\ºk^^^b±X,÷ë×O~/jHÒÒÒ!			\ €ºW@¨6fÌ˜+VLš4)..Žë,    ÀÖñãÇ	!k×®533SÖæÌ™3„�ï¿ÿ^æêT‘Hôý÷ßKÈØ¶m›@ øúë¯•Ý>X­fUìB�200 ÇáÒ¥Kì—RÙqÍ†]¦¥üD///++«   Š¢!¿þú«µµ5]–A_õ<cÆŒyóæ‘ê»š²`Á‚#F\¿~=000  àÆ�#GŽüê«¯ªký   õ
-Ð ¬üðÃýúõóóóËËËã:    °òèÑ#BÈ AƒÚ<~ü˜âåå%?‹.\ÒdØÙÙ}þùçÉÉÉ[¶laX9ËfÏdÓö˜B¨LïÞ½	!Ïž=c¿!•×lØ	!oÞ¼Y´h!dðàÁòséý½zõêæÍ›QQQñññôƒešéëëO˜0aÜ¸q&&&GŽ©Æ�<xÐÂÂbÉ’%K—.µ°°8xð`u­   >B€>ŸìØ1>Ÿ?kÖ,®³     +ô¥&&&m>~üH166–ŸE/¨ìúƒï¿ÿÞÄÄdÓ¦Mò�ÑÓ ™2lºPÓš5kFÉÏÏWk)æŽk0ìtÅ¼eË–GŽñððØ¾}»ÂíÒ�Ó<tèÐþýû%¿Ê8qâÄ‡üüüuuu§M›–——wâÄ	µ:ÈÀÄÄ$88øãÇ�?~<vì˜Ân  4(@°Õ¤I“3gÎ„††îÜ¹“ë,     š‘‘!„ùéy†††„�œœùYôDz%òš5k¶víÚ¢¢"ú‚\eØ4“¿U¢Z]`�aCèq Š=æŽk<ì„‘H´råJe÷$±µµõôô<uêTHHH¯^½Úµk'ß†~üàŒ3è_çÎ�Ëãñªñ.„�>}úÐ?Ð×�  4f(@¨ÁÁÁa×®]K–,¹wï×Y    @úéyW®\ahãèèH¹~ýºü,z"Ý@¡9sæ8::ž:uJò˜»ª4SˆMjÚíÛ·	!:tPwA†Žk0ìE•””;v¬¼¼|ôèÑýõ—²íNŸ>½°°°  `úôéòs=ztÿþ}Bˆ——}Uu‡(Šºÿ>}Ã   ¨^(@¨gÆŒ&L˜<y2n   PÇM˜0�òý÷ßggg+k3fÌBÈÚµk¥§®[·NÒ@!--­;vB¾üòK†,›)Ä¦5ª°°pÍš5„u—eè¸fÃ®££óé§Ÿ®[·®¬¬lþüùÊ®à?~¼¾¾¾¾¾þøñãåç2\é\½A   h µíÝ»W[[{æÌ™\    &Ó§OïÒ¥Krr²››[@@@JJJyyyqqñ“'O===	!3gÎ´µµMHHèÓ§Ï•+W
-‹ŠŠÂÃÃûôé“��Ð¾}{æ³¾øúú&$$0'aÙL³.Ô„²²²”””   ®]»ÆÅÅ™™™}þùç¬GYÇ«2ì.´··¿ÿ~@@€Â†††………………Mš4‘™UPPÌçóSSS¥oE’ššÊçóƒƒƒe
-â   Pu<–·ý i>ôôôÜ»w¯äÎq  õ‘··w÷îÝ7nÜÈu à’……Å†>«­HOO÷õõ�ŽŽV8—þ6”˜˜8xðà×¯_ËÌµ´´¼|ù²½½½ôD�'Y�–””Ô©S§²²2ééj5SŒ}â±ß�²6VVV§OŸîÚµ«Â¹
-7¤²ãD�a—_gxxøÀ��ŒŒ[¶l©°�ÂT���³gÏ2dÈ¥K—dÚ2äòåË���’Ú7ó ©RæHFzzº……EBB‚Ì;  @W@h¢k×®7nüê«¯^¾|Éu    PªuëÖQQQ4h�™™™@ 000pttœ7o^TTÝÆÞÞ>66võêÕNNNô­W­ZË¦¦fkk»`Á‚êj¦Yª�žžž……ÅÐ¡C÷ìÙÏ²ú¬�²ŽWeØ½½½ýüüòòòÔ½.›¾É†Â‹HþóŸÿ�žO   ÕW@hH,{yy•——ß¹s‡ÏÇÿå @½„+ €4ô+  Fá
-h  P	U3 ñùüC‡ÅÆÆâ*	      •p‹m €Æ	h ÍÙØØ¬]»vùòå©©©\g    ¨q<å¸ŽuÔÛ·oCBBæÌ™Ó¦M›Ÿ~ú‰ë8  À× ê·…ž={vîÜ¹/^ä:      ÷>|øpëÖ­«W¯†††&''úæŸ¦¦¦\G    P%|>ÿþý...AAAS§Nå:    @Â3„@™œœœˆˆˆ«W¯^¼x1==][[›¢¨ŠŠ
-Bý¯¶¶¶™™×1 €(@TUÇŽ¿ýöÛÅ‹6ÌÄÄ„ë8      µäáÃ‡„�1cÆ<þœ¢(--­òòrBý¯´òòòæÍ›s  ¸†{@Tƒo¿ýÖØØxÍš5\     ¨=tM999Y,‹Åbùº³´°°°ß~ûíæÍ›			ïß¿¯­Œ  À1\P´µµ·oß>bÄˆÙ³g;::r      6X[[BîÞ½½iÓ&úñì•••
-Ÿ9sÆßß?77—þU(6oÞ¼E‹æææfffæææ-Z´033kÙ²¥™™™™™®˜ hP€¨>>>ÞÞÞK—.ÅÓ     QÑ××Ÿ={öÌ™3CCC×¯_ÿàÁ¡PXVV&ÝFKK+11‘ÏçBŠ‹‹333322rssé233?~|ûöíÌÌÌ´´4É²ººº­ZµjÙ²e³fÍä°²²jÒ¤	  u  Pm¶mÛæìì|ùòåÁƒs�      Vñùü#FŒ1"::zÛ¶m'NœÐÒÒ’”’›4iBWŸ	!zzzmÛ¶mÛ¶­Âõ”••egg¿yóæÍ›7ÙÙÙ™™™YYYÙÙÙÏŸ?¿{÷îÛ·o³³³é–� yóæfff­ZµjÞ¼¹¹¹yëÖ­[µjÕªU+sss¡PX  f(@T‡3f|óÍ7�=ðæ    €ÆÈÍÍ-88xÕªUÛ·o?|ø0!¤´´”ýÛ…BaëÖ­[·n­¬AyyyvvvVVVff¦t©úÏ?ÿ<þüë×¯é–-Z´hÙ²%]•–©M·hÑ¢ê=  6P#¨NëÖ­kß¾ý�fÏžÍu      ÎØÙÙùûû¯_¿~ïÞ½;wîlÙ²eu­Y[[›.%wéÒEaƒ²²²wïÞInîAÿûðáÃÌÌÌ/^|øð�nÖ¬Y³–-[Ò7ô�üÛ¶mÛ–-[š››K®× €*B :™™™}óÍ7kÖ¬™8q¢H$â:      —š7o¾zõêeË–ÅÅÅÕÚF…B!]¡vss“™EQTVVVFFFFFFzz:ýofffLL}5ÝÌÐ'�á    IDATÐPþºi+++\:  . ªÙâÅ‹÷îÝ»k×®o¿ý–ë,      ÜÓÑÑéÚµ+×)!„Çã™›››››»ººÊÏ---•¯MGFF¾yó&--­¨¨ˆ¢««kmmmeeeeeeiiÙ¦MÉÏ¸å4 €B(@T3ƒeË–­_¿þ‹/¾À™   î£(Šë  u‚ŽŽŽ������Â¹ïß¿OKKKMMMMMMKK{ýúuxxxZZZzzzyy9�ÇkÙ²¥¤6mmmmccÓ¦M==½Úí @Ý‚4@õ›7oÞÖ­[÷íÛ·dÉ®³    (�››{ãÆ�k×®EDDäæær  011111qvv–™.‹ß¼y“’’’––––––’’òâÅ‹ˆˆˆW¯^åääBÌÍÍ%ÅhÉVVVÚÚÚµß €Ú‡4@õÓÕÕýòË/wìØñÕW_éèèp   €BŠ‹‹ïÜ¹C�ÿúë/¡PØ»wï3flÙ²…ëh  õŸÏ§ï-?+//ïÕ«WÉÉÉô¿qqqçÏŸõêUAA�––VëÖ­éb´­­m»víÚµkgkkkll\û]  ¨Q<üÁ@MÈËË³´´üùçŸ§OŸÎu  ¥¼½½»wï¾qãF®ƒ @zóæÍ…Nž<yóæÍòòò.]ºx{{8ÐÓÓSWW—baa¡­­mbbÂuRÐ\aaá‡´µµÍÌÌ¸ÎÒH7mÚT h\—y•——ÇÆÆ&$$ØÛÛs�¥>ÉÎÎ–T¥“““Ÿ?ž””ôúõkŠ¢š5kFW¢%%évíÚ)¬n Ô(@Ô”Å‹‡……ÅÅÅñx<®³  (†4@sáÂ…?þøãáÃ‡¦¦¦Ã†2dHÿþýMMMeZîÙ³'??Ÿ“�PE¥¥¥ÅÆÆÆÄÄäçç7kÖìë¯¿Æ3Ð¸ZZZjkkÛ¹sçN�:ÑÿÁÓHÌœ9ÿ‰Uu%%%IIIt1šþ7)))--�¢(}}}ºÝ¡C‡:tìØ±cÇŽòÇs €º	h€š’’’bkk{éÒ%ooo®³  (†4@SRRróæÍóçÏ_¸p!55ÕÉÉiøðá#GŽìÞ½;ŸÏç:TŠ¢îÝ»wâÄ‰cÇŽegg‚ŠŠ
-�Þ¿®Ó5jb±822òäÉ“!!!ÙÙÙ=zô7nÜ§Ÿ~ŠËÒ¡*Š‹‹¥«ÒOŸ>}òäIvv6!ÄØØ¸cÇŽvvv’ª´­­-n	 u
-Ð 5ÈÏÏO,Ÿ={–ë   Š¡ Ð0TTT\½zõøñãçÎ�+))éÛ·ïˆ#FŒÑ¦M®£Aµ)//;qâÄùóçAYY=K(Îœ9s÷îÝÜ&‰ÊÊÊ¨¨¨“'O?~üýû÷t%zâÄ‰Í›7ç:4¹¹¹Ïž={úôéÓ§OŸý£¤¤DKKËÚÚºC‡NNN�:urtttppÐÓÓã:/ 4v(@Ô «W¯úøø$''[ZZr� @ ê5Š¢îÞ½ûÛo¿�<y277wàÀ�&L5j”¡¡!×Ñ ÚTVVÞ½{÷Ä‰Ç�ÏÍÍÕÒÒª¨¨�nÀçóÍÌÌž>}Š×½’T¢ûí·œœ//¯)S¦àM
-5A,§¤¤ÐUé'OžÄÇÇÇÅÅÑ�¶mÛÒ·…qtttrr²µµmlw* Î¡ Pƒ(Šjß¾ýôéÓW®\Éu  P€¨§ž={¶ÿþ'N¤¥¥yzzN˜0aÜ¸q¸¸²AJKKsvvþðáƒX,VØ€Çã]¸paèÐ¡µÔRTTª¥¥5räÈiÓ¦y{{ãÞ8P£ÒÓÓãããcccéztBBBqq±ŽŽŽƒƒC§N�œ��ÝÜÜ\]]�ŒŒ¸N
- 
-Ð 5kýúõHJJÂÉ% ÔA(@Ô/•••.\Ø·oß•+W:wî<qâÄO>ùÄÊÊŠë\P³nÜ¸1`À …h¡P8qâÄƒÖ~*ÐLAAÁ¥K—Îœ9sîÜ9SSÓÉ“'O›6ÍÎÎŽë\Ð(ˆÅâ—/_JêÑÿý÷‹/!¶¶¶nÿ@= j
-Ð 5+%%ÅÆÆæÖ­[½zõâ: €, ê‹—/_<x°¢¢bÖ¬YŸ}öYÇŽ¹µgãÆ�«W¯®¬¬”žÈãñš7oþìÙ3T‹ê£âââ.DDDØÛÛO�:uÚ´iæææ\ç‚ÆåãÇ�111ýõ×ßÿý×_=yò¤²²ÒÖÖÖÕÕÕÍÍ­k×®Ýºu‰D\Ç€zh€×»woggç_~ù…ë   ²P€¨ã(Š
-÷÷÷ÿý÷ß;tè0wîÜ©S§¢ÚØQåíí}çÎÉƒ	!|>ÿüùóÃ†ã0TÝë×¯�;�’’Bß$zìØ±úúú\ç‚Æ¨¸¸8..NR�Ž��­¬¬tttôððèÑ£‡»»{ÇŽy<×1 þA ÆýòË/ë×¯OOO×ÒÒâ: À¿  Pg‰ÅâS§NmÜ¸111ÑÏÏoîÜ¹}úôá:pC,¯]»vÃ†&&&ïÞ½£¯ƒ
-…£F�:qâ×é zˆÅâÈÈÈ#GŽ;vL Œ?~Ê”)žžž(ö‡JJJ>|u÷îÝ¨¨¨·oßÓ•hú_ü‡( °„4@�ËÈÈ°´´¼~ý:¾7@]ƒ4@TRRâïï¿}ûö>,\¸ðóÏ?ÇÓ³ÌÌÌ	&<~ü8((ÈÂÂ¢{÷îôEÐÍš5{þü¹‰‰	×¡š½ÿþØ±c‡úë¯¿\]]çÎ�;eÊ]]]®s�çÏŸGEEEFFFFFÆÇÇóx<WW×�8°gÏžB¡�ë€ Pw¡ PúõëçêêºmÛ6®ƒ  ü
-Ð uJQQÑ®]»¶oß^VVöÕW_}ùå—(/6r'N´±±			¡Ÿ6¹k×®¯¿þšrøðáI“&qjPllìÁƒ�9BQÔ´iÓæÌ™ƒ;¿CÝ‘——w÷îÝˆˆˆˆˆˆØØX}}ý~ýúÑÅh®Ó@�ƒ4@møé§ŸöìÙC?b  î@ î¸páÂ’%K222¾øâ‹¯¿þÚÔÔ”ëDÀ%Š¢6oÞ¼råÊùóçoÞ¼YGGG2kÜ¸q—.]â0ÔšÊÊÊ‹/þüóÏ®®®³gÏž4i’��×¹ þçíÛ·×®]£‹ÑÉÉÉ­[·ööö>|¸��öU  ¡ Pž>}Ú¡C®³  ü
-Ð uÁßÿ½xñâ;wîÌŸ?ÕªUÆÆÆ\'Ž}øðaÚ´iôó''Ož,3·°°0??ßÜÜœ“lÀ•¸¸¸}ûö=zTOOoÆŒsçÎ¥/Š¨S^¾|~åÊ•°°°ÊÊÊ�Ž5jäÈ‘ø_U€FŽÏu €FÁÞÞÞÚÚ:,,Œë    P‡äçç/\¸°[·nFFFñññÛ·oGõbcc»wïž��)_}&„ úÜ999íÞ½;==}Ýºu¡¡¡íÚµ7nÜíÛ·¹Îð/mÛ¶�={ö©S§²³³�?nbb²téRsss//¯�;w¾zõŠë€ À jÉ€®]»Æu
-   ¨+®]»æààpîÜ¹sçÎ�9sÆÖÖ–ëDÀ½_ýÕÝÝÝÙÙ9::ÚÙÙ™ë8PçˆD¢Y³f=zôèÞ½{zzzýû÷ïÐ¡ÃÎ�;¹Žð/zzz¾¾¾ÌÊÊºzõjçÎ�·mÛÖ¶mÛþýû;v¬¤¤„ë€ P«P€¨%ýúõ»uë–X,æ:   p¬¬¬lùòåƒ3fL||üðáÃ¹NÜ+..ž:uê¼yó6mÚbhhÈu"¨ÓÜÜÜ‚‚‚?~ìíí½bÅŠ¶mÛ®^½úíÛ·\ç�¥¥¥%¹üùöíÛ¶¶¶óçÏoÝºõ‚ž>}Êu: ¨%(@Ô’>}úäææÆÇÇs   ¸”””Ô£G�   ‹/îÜ¹hBHrrr¯^½ÂÃÃÃÃÃ,XÀãñ¸NõCÇŽ÷ìÙóúõë¯¿þzÿþýmÚ´ùòË/q—¨›x<ž§§g@@@ffæŽ;"##íííxëÖ-®£@�C –X[[[ZZÞ½{—ë    À™+W®¸»»›˜˜ÄÆÆ4ˆë8P'\ºt©[·nÍš5‹‰‰éÓ§×q þ166^¾|yZZÚ‰'<xÐ®]»#FÜ¿Ÿë\ ŠéééM™2åÏ?ÿ¼uë–H$òòòêÝ»÷•+W¸Î 5h€ÚãîîþàÁ®S    7~þùçaÃ†Í™3',,ÌÔÔ”ë8À½ÊÊÊåË—>|æÌ™aaafff\'‚zŒÏç�1"**êìÙ³¹¹¹#GŽŒŒŒä:€R½zõ:{öllll›6m†:zôè—/_r
- j
-Ð µÇÙÙ9&&†ë   À�µk×.Z´è×_Ý¸q£––×q€{YYYô÷÷?{öì¦M›×‰ !àóù#GŽ¼sçÎ�;wø|~¯^½„¿Â„º¬S§NGŽ‰ŽŽÎÉÉéÔ©ÓŽ;(Šâ: T3 jO—.]âããËÊÊ¸   µjùòå7n<qâÄÔ©S¹ÎuBTTT×®]ß¿ÿàÁƒ‘#Gr ž={ž;w.))ÉÆÆ¦oß¾žžžüñ×¡ ”rvv¾yóæ®]»V¬Xáãã“““Ãu" ¨N(@ÔžÎ�;—••áQ¿   �ÊöíÛ·mÛvæÌ™1cÆp�ê„ü±OŸ>ƒ¾ÿ~ûöí¹ŽYÛ¶mýýýãââÚµk7zôh”¡¡Ž›9sæƒ’““½¼¼²²²¸Ž Õh€ÚciiÙ¤I“çÏŸs   jIhhèâÅ‹÷ïß?tèP®³ ÷JKKgÍšµjÕª-[¶ìß¿_WW—ëDÐ(ØÛÛ=|ø°yóæ¾¾¾Ã†Ã51Pg9::Þ¾}›Ïç4¨¨¨ˆë8 P=P€¨U666/^¼à:   Ô†äääÉ“'¯\¹wÞ BHff¦——×ï¿ÿ~õêÕ…r—sçÎ=zô¨¢¢ÂÉÉiÑ¢Eyyy\‡PÀÌÌ,""âãÇ�3fÌà: T jU»víP€ h¨x<�Çã:…œ«³£QkÊÊÊ&L˜àææöý÷ßî¤¾¿õ=¿Äµk×:wîLQTLLLß¾}¹Ž�—““ÓåË—OŸ>ýÇtèÐ!   ²²’ëP5(//oîÜ¹–––|>Ÿ>˜Ôå£J�ÊÆmccã'Nœ;wn÷îÝ\e €j„4@­jÛ¶mrr2×)  ¸WQQqøðasss¡P(‰œœœæÍ›wïÞ=®£©V;_ÉxRD"‘••ÕðáÃ÷îÝ[PPPÓ›VK�ú¶Ì^-ÄÞ°aCRRÒ�ø|œrÿK=ÝgªâàÁƒC‡4hÐµk×ZµjU½+6l�Ç“y’áÀ�y<ÞØ±cé_ïß¿?gÎœvíÚéèèXYY�=úÏ?ÿT¹fe¯”Âéyyy?üðƒ³³³H$‰D�;w^½zõ‡Øl‚Ö¤I“>}ú\¸p�¡�H$êÑ£Ço¿ýÆÐFšZbŽ'¿ÚÒÒRSSSccã’’6£Ä¼ç³íjBÈˆ#?~¼xñâE‹õïßÿõë×ª£¾Z²d‰¿¿ZZEQ\gùæ�¡ámW3Ý»wß°aÃâÅ‹«}åê¾•”µ!šžÓ²YŠåq•N¸dÉ…ÓÕm&�å8°9òÔ~¯Y“Qí9y<Þ¯¿þ*=ýÊ•+
-“H'TøiÅž¹³ÊæÊ´T9bÒÕø’B@-Ú¶m›““×)  þß€¾ýöÛÚßnFFF÷îÝëïÉIíäT6>VVV>Ô`U5š³†V^sj:ö‹/„BáñãÇkm‹ÊÔÁ¨Fª9b±xÕªU�`Û¶m5´‰gÏž	…BBHXX=%  €bllüæÍzŠü‘„ÏçŸ>}šyÍÊ^)ùé			VVV
-�W			*7!ã÷ßWÙ&((Heé�l6Ä2ždµG�¥=|ø0›Q’ŸÂf.›Ž¨;Ò^½zÕ§OCCÃ£G�*‰zŒþ/Ÿ‹/VTTp�å˜w††·]�‰Åâþýû{{{Wûš5~+É´Ñìœ–ÍRì�«ôtmmí'OžÈOW·™fc¥¬™ôš9é5›`2j"§��AïÞ½¥§�7ÎÀÀ€eZéO+æðÌ±•Í•iÉ¼†Ì_RêÓ¡ 8räˆ¹¹9×)  þ'è²²2777Bˆ……Å¾}û’““ËÊÊ
-zöìYËy4À|æW[)))INN>tè���!ÄÌÌìÝ»wš­ªÚÕÎhT»šŽ=vìX//¯ÚÜ¢2uðªƒ‘jHqq±ŸŸŸ‘‘QDDD�nhùòå„;;»²²²×¯_BŽ9"iÐ³gÏƒ¦¦¦–””üý÷ß={ö¤Û3¯VÙ+%3½°°°}ûö„ggçK—.åçç\¾|ÙÅÅ…Ò¾}ûÂÂB6›HKK7n!ÄÝÝ]Y›ŒŒŒ)S¦ÐÛbU­©ì©Œ^½zÑ~rÉ/Ë¼6–£]-£!£¬¬lùòåZZZóæÍ+))a¿`½@_µ'‹¹ò/øD`/>>^ ¨üï"u©ûVRØF³sZ6K©u\ý§úG¬,?ûfš�•ÊõpÕk6¬…œS¦Láñx/^¼ 'fgg…BÉB”¥Uøi¥ÙG‰Z�ÕÚ%ØI©g‡€ú.,,L[[»®� @£%)@Ó§ùùùÓ§O744477ß±cEQïß¿Ÿ4iRÓ¦MMLLV¬X!9|]¹reØ°aFFFzzzááá’u~òÉ'„GGGIc±XìèèH™8q"õÏ¥ymÚ´ÉÊÊbÈVZZºiÓ&ggg======ggçÍ›7—••IÐ™gÌ˜ahhhbb²lÙ2é¬ÊE9r¤oß¾FFFB¡°]»vK–,ùðáƒdnyyùŽ;ÜÜÜôôôúöí{þüy"Gf‹,»À2¿Ì°tîÜ™òÃ?ÈÌbè‹Ìª”½|OŸ>åóùúúú2'Ž¹¹¹|>_æJêì_åh¨»�1÷ˆåî!UeìjqçÎ�wÿþ}ù Ì;$Ã;‹å^¾|éëëk```bb2wîÜÂÂBé*·ììl--­ÌÌLéµ™™™IÆVånVTTôÅ_˜™™iii)eƒ¯lqé6III#FŒ {7gÎ™Þ±iÀü–gÙ–òóó‡Ú¼ys™=�ys*¡Ê¶E_æ¹uëVBÈ°aÃ²½|ù’"˜» ìÝ!3}ÇŽ„{{ûüü|™Tô×Ñ�;w²ÜDVV!DOO�¡ÍÛ·o	!:::l¢ªµ!•KI‹��'„¸»»{xxBâââT.Ë’åhWËh(tãÆ�æÍ›÷íÛ777WÝeå·.ÿ>Òà—ªÚÉ€üÑFþÈC©:n¨|•õ—áxÎFæ×*žH(|i¶+ÓµJåá—yP6Œ´©S§J
-p
-[jpäÔà­$ß†å9­6K©u\¥sÒÿsçÎ)ËÏ²™<6c¥r=\õšMk!gDD!dõêÕôÄmÛ¶B®]»¦2­ü§swÔê¬²Æêî4†/)ÿ¿ËX P-èÛíåääp €¢ä
-Ð£G�&R~ÿýw™?@“üµù7mmmÉß[½ÿž®ƒHn>@ß'ÎÚÚšþšÑ¿¢è÷¤•””ôéÓ‡Èñòò’ùÞ%¹Ã)m×®]’•07‹Å'N”ßD§N�òòò(Š*++4h�|y2[dÙ–ùåçôéÓäß—B¨ì‹ÂœÒ/}�Åúõë¥·¸yófBÈ¨Q£äÃ°JÍ}Œ¹Gìwù¨*cW‹øúú*+†W\>˜ôKÃfïÞ½³°°�ž;fÌI™ÇmÂ„	„™ÛDìß¿Ÿ²xñbŠõnæççÇ<ªÊ_Ùâ’Ÿ³³³[¶l©¬w*¨ÌÏ¾läääôèÑÃÆÆæÙ³gÊÚ(ÜœÊC¨2ÁÁÁ„�@@122¢ïx«]>000`î…²A�™NïWÒ7œ‘ Ã÷íÛ—å&Ø MLLØDUkC*—’öÕW_Büýýƒ‚‚!_|ñ…Êe™C²íjeÒÒÒ\\\ÚµkÇ°ßª$¿ckü�[Å“ù¥Ñ‹«<°È¦ÌùþJO—�>ž+#³òªŸH(|i¶+Óö¥r«ø	Gùë¯¿”µÔàÈ)³6o%ù6lÎiå±YJ­ã*�311Q ØØØ+ÌÏ²™<6c¥r=\õZe°ÚÉ)‹­¬¬Ú´iCÿI§N�¬­­Åb±Ê´õ¨ M)ú’ò¯¥XÆ€jñäÉBÈë×¯¹ @Qrh—G�åååÍŸ?Ÿbdd$3ÅÓÓ“^pìØ±ÑÑÑ%%%/^¼ KŠ&L�¬öÒ¥K„;;»ÊÊÊŠŠŠŽ;òùü[·nÑsMLL!’;“*´iÓ&BHÓ¦M8ðöíÛ·oßþúë¯ô•oÞ¼™nCgvuu�‹‹ûðáÃìÙ³	!]»v•¬„¹A`` !ÄÂÂ"$$$;;»¨¨(22²[·n„�eË–QµuëVBˆH$Ú¹sçë×¯KJJ"##é",›Ó5•]`™_~+ôy³fÍ$STöEfU/_tt4!¤eË–¥¥¥ô”òòrKKKBHdd¤Â‹åÉ«Zûs�Øï*ó(ìQÅÆÆ’¾'Ë`xÅ)Uï,•kXºt)!ÄÚÚúÆ�ùùù×¯_—Ü �RµOÒ—á¸ººJçéÚµ+!$11‘b½›µnÝ:44Tæš …C¡p¢üâ’Æ‹/&„´iÓ†îÝ�7¬­­¥WÅÜ@e~µºÀ,55ÕÎÎ®K—.Ì×Ä)Ûó!”AïÞ½éu2·\¶l!¤OŸ>ÌÍ#I3cccBˆÂÎfffEu
-™MÐ?§§§ÓÿÂpŽÌÌLú¯¿e®jT’Í†XŽ EQEEEM›6Õ××ÏËË+..611122’¹Óˆü~®pÏW9—¡#�ƒ÷ïß÷îÝ»uëÖ�=bÓ^Y`é[ãÜj<�OHÿ¬òÀ¢òu”ï/�Íñ\ÙèÑ?WýD‚yýÌ¯šZ¥r«þ	âîî¾hÑ"†–ê9Ù¿•Ú°9§•Çf)µŽ«’œ, „¬]»V>?ûfòØŒ¥êÈÃU¯•S–¡ær®\¹’rýúõÈÈHBÈªU«ÒÒ?+ü´bÎÏü*(l¬ÁJ”-(ÿ%å_«U jBrr2!äùóç\  (¹tTT==##Cá333ù•Ð§–––ÒçÍ›G	
-
-:|ø0!dÅŠ’YôzåååÁè?à:xð ôDúbLúW:á½{÷è_ÓÓÓÉ¿/ècnàîîN¹}û¶ô&^¼xAiß¾=EQÎÎÎ„�€€ ùxÌ§k,»À2¿üVÊËËÉ¿ÿv^e_N=å_¾ÁƒK'?~ü8!¤W¯^
-gX¹ÂSU–ûs�Øï*ó(ëTUÌž=[áp©|ÅeÈ¿4*×@ÿá'ýwë´³gÏJzªrÜèJžCÿo„ä–,w³3gÎ¨ Æ´üâ’Æ;v$„üñÇ’Y’[âÐ¿27P™_­.0xöì™µµµ···Ê6Ãæ¡†F¯SÙM?hÁÁÁ<O ÈŒ†²„ÊHš1ÕËÊÊã½>®Yú�©¶ñðð�ùæ¯2$›±ŒGQÔÁƒ	!S¦L¡›}óÍ7„�È/Ë<…Í\•Ñ`4˜•””Œ9ÒÔÔT³4½-é[ãÜj<�OHÿ¬òÀ¢òu”ï¯<eÇsù–ÒÓ«~"Á¼~ùé2½`?P*‡±êŸ ëÖ­srrbn©Ö‘S³·’L6ç´òØ,¥ÖqU2Ô999&&&úúú)))”’}Ue3ylÆJa3é5sÕkeÁ4ÈPÅœÏŸ?'„L›6mÆŒ„�¤¤$öiÙß2…ùUPØXƒ•([PþKÊ¿V«,4 ÔúÛõãÇ�¹ @QrhÉ£‡$&3…ÇãQUQQ±eË}}}É‰P(”^saaa»¸¸¸Hß®‘Í•ººº„�ììlé‰ô÷7Éß )Ë,iÏÜ@:¼mmmŠ¢ôôô!oß¾•�Ç|ºÆ²,óËo…þ[<cccÉ•}‘^•Ê—ïÆ�„�Î�;Ó¿öèÑƒü»¦©Áh0ôWá>ÆÜ#ö»‡Ê<Ê:¥±œœ}}ýàà`ùY*_q•/�Ê5èèèB¤ïßš““#i£rÜè{­|÷Ýwô,úbºýû÷Ó¿²ÜÍØÜgLáà+[\Ò˜¹w*¨Ì¯V”‰‰‰iÑ¢Å˜1cØ<É�as‡PeèAÐzôè¡ì>°ÁÁÁZZZ<ïèÑ£,ªœÎp-Ø›7o‹+ i½zõ’®aÉ·!„ˆD¢ÐÐP–QÕÚ�ÊžJÐÕ´ë×¯Ó¿>{öŒÇã1\¸Í&$ý¬¼ÊÊJé‰•••äŸ£|G4•***¦M›fdd$)n²'¿ckü�[�'ò	éŸUXT¾Žòý¥XÏ•�Ëî«ì;óúå§Ëô‚ý@©Æª‚Üºu‹Ïçççç3´TëÈ)ƒá­ÄÐ†“+ åÐ…’Ë    IDAT�«ÒC½{÷nBÈØ±c)%ûªÊfòØŒ•ÊõpÕk6¬µœžžž"‘Hr¥‚²´4…ŸVÌÝQ«³Ê³Ü%ä§ËIù×R,c@µxÿþ=!Dú~Ž  ’)@KÏb˜òõ×_E¤gff6kÖÌÒÒÒÐÐÐÌÌLúë“——Quoµª0JO¡¿î*CÕVZ­ü´S§NBzôè!™¢²/Ò«bóòõìÙ“rõêÕ¨¨(BˆƒƒƒÊ‡©œ®²¿ÒS˜{Ä~÷�Ä.))a9¼U´oß>SSS…ÅG•# ò¥Q¹†* ß¾}+
-mllÄbñÇ�E"‘H$’\Æ«ÖnÆLaKe‹K¦W± ­2¿Z]PèîÝ»M›6�1cFEE›ö›c8„*kO^·n]³fÍ!‡–oÀçóy<ž¿¿UÊL¯Æ{@3·)))9vì˜ŽŽŽP(ŒŽŽVk=š½¸
-—Š‰‰Q¶#ÅÄÄ0,ËœÁÈÈˆÈU4èZFÓ¦MåWR•Ñ`£¼¼|âÄ‰&&&ÿý·ZÊo]ãÜZ8`Y€V÷ÓDƒã¹üôªŸH0¯_åtö¥r«þ	B¯�~¢’²–j9%ëaóVRÖ†Í9­<6Kip—aúçŠŠ
-úé‹ôSï”íuÍä±+JÕ‹ÈU¯U«Íœô½hˆÔÿîk�–¹�Z�UÖXãò_RþµËX P-òòòˆª¿‹ ¨5š é2ÇáÃ‡ß¿_QQAÿ×šLc___ºÍÿû_BÈ'Ÿ|"™åïïO±±±QXÛ¥Ñv*S@9pà ©Ú=¤§Ð7·}ðà�²...DÉ­TéëÔäkLÒëWÙòSUPPàääDY³f�d¢Ê¾H¯ŠÍË÷ÇB†2~üx"÷wåŒ›þJOaî›ÝÃÔÔ”"y]I—Þœ²ØU4hÐ ùóç+œ¥rT¾4*×ÀæÌãF¿â·oßÞ»w/!dÆŒ’–jífÌ¾²Å%ÓåÿÄ›ÞQ%K17P™_­.È»xñ¢‘‘Ñ¬Y³ØïT›c8„*4jÔ(BHß¾}Åbñ/¿üBiÙ²åÇ�¥Ûlß¾�ÂãñöìÙSÅ„2ÓwìØAqpp(((�nVPPààà@Ù¹s§º›`hC_ªïîî.ýc*×£Ù‹«p)úÏüš7oÃ²Ì<<<!2W¦Ó¶Kî„#¿ÍFƒ¥ŠŠ
-jÐò[×ø·NTXT~š(m•ÇóÚ9‘�Çò#[~"ó@©ÆjùÑÕÕeh©Ö‘Sƒ·’|6ç´òØ,¥ÖqU&gxx8½,ó¾ª¬™<6c%ß¬ŽôZe°ÚÌ™——§¯¯¯¯¯/ù€Ö -sµ:«¬±f~Iù×R,c@µ@ êÍ
-ÐôåugÏž¥­#y¹¤å±cÇ!ŽŽŽ•••ÅÅÅôcÐN�:EÏ---íÒ¥!ÄÒÒÒßßÿÕ«WeeeEEE‰‰‰ô×lúÁ;Íš5;|øpvvvvvöÁƒ›6mJªö”9é)ôW8ssóÀÀÀäää¢¢¢’’’§OŸxxxPõÓO?Bš4iòË/¿¤¥¥•””DEEÑ!¤ÿ:/,,Læo¥ÿ�½ûŒ�¢j>~6•EH“Š”ÐDBïÒ{¯¡ˆ(ÈMQi"ˆ€"%�Ž (‚¤D©¡†ÒË¦ìóbþ÷>{o™�M²6ù}_ð!gÎœs�3³3“+³3†í[‚Mñ§¦¦Þ¹s',,LÊ0úûûGGGëkZ‹aSV7ŸN§ËÌÌ¬V­šF£qvv.Q¢„þ…„f)™%ã5,‘‘’ÝCJå„„„ÄÆÆ^ºt©V­ZFÝY
-;;âââÜÝÝ-}¯ßêXÝ4V[PòBùy“~		‘òAÇ�×7nÓn&Ïìä[Z]_>qâD!D™2eþøã�„„„?þø£L™2†kÉW°¿MC0êââ2aÂ™ï
-ÈÍˆü!ÔR}é-#éééRÞê?ÿù�¾Îœ9s„�fåÊ•Ù�Ð¨<!!¡|ùòBˆZµjýúë¯			‰‰‰áááÒç®B…
-FoçSÒ…L­V[¹re!„áX¬¶“µ�kºV||¼���““STT”ayTT”“““���>¡ä gHÊh+VlëÖ­ÑÑÑÑÑÑ[¶l‘²Ÿ29—¬Í†rýû÷·éY¦½gù„›V,VÏ&fgÛêñ<w.$L)<eÛ:QV§1GÎ ^^^?þø£¥š¶9³ðQ2­£äšÖ”’µl:®šÎ‰”‹·º¯š­–µ¹2ÛþË0j«�å~œò±Ùº9lZª°²M1Èÿ’ò?k)@Ž à¥’µtß¾}…éÎ;}åÇ�K¿0ëÓp7n”.Gôß…¼wï^íÚµ…:�.%%¥qãÆ¦‹‚ƒƒõÉP«1[­0nÜ8™´ZmóæÍÍ.êÞ½»Q‰iûV‡ 0~S¥J•:sæŒÑ¦”‹aËò›OOÚjÂà—|K”Ì†’ñ•ÈŒHÉî±fÍÃE¦¿ü[
-;;~üñÇ
-XÊµY�«›ÆjÑÑÑ%K–4l¤k×®ú:Jæ-33³|ùòÒ—©+Uªd4å»™<³“oiu}ùãÇ�_}õUÃ¥_5õïº±ZA>~›† —™™ùñÇ;;;õÕW6­h©;%‡P³õ-Z¤/”žäîæævýúuÃ¾L)üŠºÕòÈÈÈ€€ Óöô¯µ´©ù:áááB__ßÈÐ¦Ž”t*„hÓ¦�ieé®úÛxM×•255Uzü‘‘F�>Ê6GfÃ&Z­¶S§NE‹•ÿ�L„º¬žpsábÀêqÃêÙÄìx­ÏsçBÂ”ÂS¶­euuÙ>ƒ$%%	!Ž;f¶¦­GN³=Zú(É×±zMk–’µ”WMûºqã†›››Q¹ÂjY›+�‚#�*£6[Sž½ã”_ªpsX
-L~©ÕÞ6b©‚Ù_RþÿZ2£�ãH@x©d-ýìÙ³~ýúùùù*ThÈ�!úÂHÕ¤ßm5j¤_133³nÝºBˆ=zèµZíÚµk[µjåïïïâââåå8zôè“'OJRRRæÏŸ_½zõ
-xxxT¯^ýóÏ?7¼×jÌJuðàÁîÝ»—(QÂÕÕÕÃÃ£jÕª&LÐ?ÄS«Õ.\¸PŠÁËË+88Xz¸Áýû÷»uëæçç'}•ÕRûòCP¿ÄÃÃ£dÉ’íÚµ[¾|¹þ™¼FdÆbØ²üæÓ»~ýºÂ××766Ölwz
-gÃ¦}Ìêˆ¬î™™™“'O.R¤HÁ‚˜��`Ô¸¥°³cÔ¨Q-Z´°´Ôêx­n%søÏ?ÿ¼óÎ;^^^~~~#FŒHLL4¬cuÞtÿ½çNXøÛƒÂÝLžÙÉ·´ºaùõë×Û·oïéééçç7räÈÈÈH!D±bÅô•­V�ÿÈ+‚$..®gÏžÞÞÞ?ÿü³òµÌMOá!Ô¨~½zõŒîgìÝ»·¢]»v†}™Ê©´N§{ñâÅŒ3ªU«&}¿800púôé†Ï„µ©«u¤<`—.]ähSGJº–²Û¶m3­¼mÛ6!DíÚµ-­k5È¤¤¤Ù³gJŸÐÀÀÀÙ³g'%%åølØ*==}äÈ‘žžžfß<fÄR_Y;áæÂÅ€üqÃêÙÄìx­ÏsçBÂ”Â~³0QV¿ºì�A¢¢¢„W¯^5[ÓÖ#§¥Í~”äëè\Óš¥d-…ÇU³qNš4IÉ¾jZÍ”ÂyPräÉýQ[ª)ÏÞqÊ,U¸9,Í³’­`µ/«�*ù%E¢‘i@Ž‹‹‹óõõ�ˆˆ
-
-R; -Z´
-
-š7ožÚ�à¥³fÍšáÃ‡øá‡.T;‡Q³fÍž={N›6Mí@ò‹eË–�7.88øÐ¡CY«�={öôññÙ±c‡ôüS Óétï¿ÿþªU«6lØÐ£GµÃ±#»7òù‰Êñi<xð`Û¶m_¼xáíí�#ÈeNj   €—Ë‹/¤·x2DíXFrròåË—¥÷,ÁN:wî|ôèÑ¸¸¸‡®^½ú£�>ßˆWR!GH/úkÖ¬YíÚµ�;Föù�F£YºtéôéÓ{÷î=yòäŒŒµ#Ê1¹sÜÈä'ÊÞÓxàÀ�úõë“}w@¹Š; ¼T¸¦¤¯å
-!Úµk§Ý<¬Šˆˆ¨_¿~tt´ôŠ'Øƒ~çÔ«]»ö‰'ôÏ|´Z!û®]»6lØ°sçÎÍ›7oÜ¸q¦=yÛáÃ‡{÷î]¾|ùmÛ¶½öÚkj‡“rá¸‘7ÈO”½§±N�:íÛ·ÿôÓOs¤5 ¹�;   ð?
-(Ð¦M›Õ«W«ˆ#9{öl©R¥È>ÛÕÞ½{[·n]¼xq77·råÊMš4é÷ß7ÌnX­�Z­vÊ”)ÕªU+Z´è�7Þ{ï=²ÏÈ‡‚ƒƒ�?ž��P¯^½ˆˆµÃÉv=nä%òe×i¼zõêßÿÝ®]»i€*¸ÈUÜà¥ÂÐ@N?~ü­[·~þùgµ�]9rdÂ„	7oÞ\°`ÁÈ‘#I=#ŸKJJ
-		Ù²eËÄ‰?ùäµ#B^6dÈ�7n;vLí@ dw@   Ùõï¿ÿ–.]Zí(�ó®_¿Þ¥K—fÍšÕ¬YóêÕ«!!!dŸOOÏ6ìÞ½{Ë–-åË—ß¹s§Ú!ÏzôèÑæÍ›?øàµ�-$   €ìº{÷n@@€ÚQ '={ölüøñ���Ïž=;}úôš5kŠ/®vPÀK¤]»vçÎ�ëÐ¡C�=ôìÙ3µ#B4uêÔråÊuîÜYí@ d	h    »H@ç%ÑÑÑÓ¦M+S¦Ìž={¾ÿþû#GŽÔ®][í €—Q¡B…V­Zuøðáˆˆˆ
-*,Z´H«ÕªòŽððð6|÷ÝwÎÎÎjÇ [H@   Ù¢Õj£££_{í5µAvÝ¿?$$¤D‰»víZ³fÍ­[·zöìÉ37 y�7¾xñâüùó.\X¶lÙÐÐÐŒŒµƒ‚ÃKNN~ï½÷Äû“€<€4   �-			:�Î××Wí@�u÷îÝ		)[¶ìÑ£G¿ÿþûË—/÷èÑÃÉ‰_— E\]]GŽyóæÍqãÆMœ81((èÐ¡CjÇ6jÔ¨øøø¨€À   �-			BoooµAVÜ¿Â„	•*Uúí·ßV®\yþüyRÏ@Öx{{Ož<ùêÕ«uêÔiÙ²eË–-/^¼¨vPpH.üá‡öîÝ[¤Hµc�¸®   ²%11Qáåå¥v °ÍÍ›7GŒQ®\¹ððð•+W^½zuÈ�!®®®jÇ8¶%J¬ZµêäÉ“iiiuëÖ�8qbtt´ÚAÁ‘„‡‡ôÑG+W®¬Q£†Ú± È$   €l!ípN�:Õ±cÇŠ+>zôèàÁƒ/^ìß¿¿‹‹‹ÚqyGÝºu>¼cÇŽß~û­lÙ²Ó§O�‰‰Q;(8€?þø£sçÎ“&Mêß¿¿Ú± È1$   €l‘^·åìì¬v °B§Ó<x°}ûö6LII	ÿé§ŸÞzë-µãò¬:œ;wnçÎ�ûöí+Y²ä”)S^¼x¡vPxy9r¤mÛ¶ï½÷ÞÜ¹sÕŽ@N"   d‹tçlzzºÚ�À¢äääÕ«WW¯^½]»v>>>áááÍš5S;. _hÑ¢Å™3g6oÞ¼ÿþÒ¥KO™2%66Ví ðÒ9tèPçÎ�ûôé3oÞ<µc�ÃH@   ÙBúevíÚµ���W^yeÖ¬Yýû÷¿ÿþæÍ›ëÖ­«v\@þ¢Ñh:vìxæÌ™E‹mÞ¼¹råÊ_ýµôü"@±uëÖ¶mÛ<844T£Ñ¨€F   È:�N'}£|Ïž=K—.�8qb¯^½/^¬v\'NœèÛ·oµjÕŽ?¾hÑ¢ë×¯Ož<¹X±bjÇä_®®®#FŒ¸~ýúÔ©S?ûì³R¥J}úé§ÏŸ?W;.¨lñâÅýúõ›;wîâÅ‹�œÈSyïÙ    löùçŸïÞ½;**êñãÇÒ½Ï!!!nnn:�.55µiÓ¦j˜%''oÞ¼ù›o¾ùûï¿›4i²{÷î6mÚp?ðòpww7nÜÀ�—/_¾dÉ’E‹�=zÂ„	¯¼òŠÚ¡!·iµÚ>ø`õêÕ6lèÓ§�Úá °þ²   Ø¬téÒ'Ož¼ÿ¾þÉÉÉÉ))):�®Q£Fê†—?]ºtIzÚÆ”)S:vìx÷îÝC‡µmÛ–ì3ðòõõ�:uêÝ»w—-[¶gÏž€€€�^»vMí¸�{nß¾]¯^½üñÐ¡CdŸ�¼�4   `³ž={–/_Þlf³`Á‚���¹R¾•��°fÍšÆ�×¨QãÏ?ÿüòË/oß¾=sæÌ%J¨ +ÜÜÜxùòå~øáêÕ«UªTéØ±ã_ý%¿VRRRî„ûÙ¿ƒÜÜÜN�:Å_m�<�4   `3''§éÓ§;;;•k4šzõêqËmî8qâÄ°aÃŠ/>qâÄªU«ž<yòìÙ³Ã‡÷òòR;4 6prrêØ±ã©S§¶oßþøñã   >}úœ={ÖlåôôôÚµk<x0—ƒDNINN;vlûöí»wïþÇ¨ »#   dEß¾}MŸXêîîÞ¤IUâÉ?nß¾=eÊ”€€€&MšÄÇÇoÚ´éÉ“'+W®
-
-R;4 YçääÔµk×Ó§OïÚµëßÿ­S§N³fÍ~ùå�NgXm×®]×®]kÛ¶íÖ­[Õ
-YvìØ±*Uª8pàèÑ£Ë–-swwW;" ¹�4   �...ü±‹Ëÿ¼Ö;55•¯ÛIrròúõë[¶lY¾|ù_~ùåÃ?ŒŠŠÚ¶m[ÇŽÝÜÜÔŽ@ŽéØ±ã‰'Î�;W¡B…nÝº•+WnéÒ¥‰‰‰ÒÒh4šôôô~ýúÍœ9SÕHa­V;{öìæÍ›7hÐàôéÓ6T;" ¹Gcô·D vçëëÁ: ^-Z´
-
-š7ožÚ� Ž*555  àéÓ§ú''§¸¸8‘³Î�;·bÅŠmÛ¶eddôéÓgäÈ‘µk×V;( ¹áñãÇ+V¬X¶lYzzú AƒZ·nÝ¾}{ýRggçÑ£G/]ºÔÉ‰»ë^jG�		yúôéâÅ‹û÷ï¯v8 rÇh    ‹ÜÝÝ§L™âêêª/©\¹2ÙçœòèÑ£åË—×ªUë¯¿þš;wnTTÔªU«È>ùÇ+¯¼2sæÌ[·n}ôÑG»ví>|¸á7222BCCû÷ïŸ––¦b��ñüùó‘#G×­[÷Ê•+dŸ�ü‰4   �u!!!žžžÒÿÝÜÜš7o®n<yÀ‹/Ö¬YÓ¢E‹’%KÎ™3çÍ7ß<þü™3gÆŒS¨P!µ£ __ßI“&�8qâéÓ§Z­Öp‘V«Ý¹sg«V­âããÕ
-f¥§§/_¾ü�7Þ?pà@XXXÑ¢EÕ
-€:H@   Yçååõá‡J7AgddðPË,‹ŽŽ^ºté[o½U´hÑéÓ§×©Sçüùó<X¼xqµjÕÔŽ€úÖ¯_ïììlZžššzâÄ‰Æ�GGGç~T0ë§Ÿ~ªR¥ÊÔ©S§OŸ~ýúuþ:äs$   €l7nœô•ðŒŒŒ·ÞzKípLBBÂúõë;vìX²dÉ¹sçÖ®]ûÈ‘#÷îÝ›?~ÕªUÕŽÀË"--mñâÅ©©©f—jµÚ+W®Ô¯_?***—ƒ‘›7ovëÖí�wÞ©Y³æ…Æ�oø * ù	h    [|}}ÇŒ#„(V¬X‰%ÔÇ1hµÚíÛ·wìØÑßßÿÝwß-\¸ðöíÛïÞ½+ÝÍûÄ Ù»w¯üÎZ­öîÝ»�5ºyóf®ECÏŸ?ÿàƒªV­úèÑ£cÇŽmÛ¶­téÒjà¥ ÑétjÇ ä#qqq¾¾¾AAAjÇ ¢E‹AAAóæÍS;GuòäÉuëÖ©^
-III›6m*]ºtË–-ÕŽÅÜ½{÷È‘#ÉÉÉ%J”(W®\™2eß*–¯Ô¬YsôèÑjG�ÜvîÜ¹+V¨…ƒ¹uëÖÃ‡“““SRRRSSSSSÓÒÒÒÒÒLs
-h×®�ÎeÉÉÉÛ¶móðð
-
-zýõ×Õ'ï«T©Ò| v€R.j   à¨®_¿¾aÃ†:¨^
-eË–õöö~ñâ…Ú�8 �FS±bÅ’%K(P@‘˜˜˜˜˜¨vP*øûï¿Ÿ>}J:º}ûöÚµk»té¢v ŽÄÏÏÏÏÏÏ´<===--M«Õþ{óæM�FÃw)rYPPÐ+¯¼¢Ñh8ÚÛÅ‹oÝºE„4  @ÖùùùmÛ¶Mí(ðR¸{÷nLL¯Ëƒrï¾ûîƒÔŽêðððàô k¦M›vúôiµ£ l@   ÈjG   ¼\øB
-       À.H@       ì‚4       À.H@       ì‚4       À.H@       ì‚4       À.H@       ì‚4       À.H@       ì‚4 (¥Ñh4�ÚQX¡J�13      ÷‘€ò�ooïúõëoÞ¼9wºNOOkÛ¶í«¯¾êæææíí]­ZµÑ£GŸ:u*w�¨8¦aX¯T©R:tX±bEBBBî)ÃsÍŽ3�›ä�KF…©©©E‹õóóKII±´Ê¤I“¬6eÓA/66væÌ™5jÔðööööö®^½úŒ3bbbôjÕª¥Ñh¶oßnºîöíÛ5MíÚµMû5$[Î†-,Xðí·ßþùçŸmíÂÖPÍv$”m2%ƒ5ÛŽ¥ �6�\(Ø¬†](Ù© Rxž³ŸD›ªÉßä‡à(Ãx²s´—ŸûM>6³q&%%}õÕWÁÁÁE‹uuuõõõ}óÍ7Ç�!ß—Ùr%(á$¼ìt rQll¬""""÷»6{X¿~½½û}ðàAPPÐËpRkÌ†¡0<!D©R¥þüóÏì·ŸSñÜáˆ1çšæÍ›O�:Uí(ØºuëJ”(¡vÙ%\2*üþûï¥ò°°0K«¸ºº^½zU¾)å½ÈÈÈR¥J™­)ÕY¾|¹¢M›6¦!µnÝZ±bÅ
-ù~­ÆfÓùÂl»wï¶©‹,‡jØ‘NÙ&S2X³íX
-Ò(`ÓÈ•lVÃ.”ìTŽhìØ±]ºtQ;
-¨`çÎ�´_û
-¯Àsü“hS5™À¬A	Ó~í1dyfËÂÑ^ÉµÇÐä{4­ãÆ�Š+*‘i‰Ùr³íp’ÒétS§NmÞ¼¹ýÚrœÃ_´ŽEõ´ôÿ0@Q£F»vªÕj¥›ÎJ–,¹råÊÛ·okµÚÄÄÄÈÈÈÐÐÐ†Úµw#ªÌ€|–ÊSRRnß¾½nÝºJ•*	!üýý£££³Ù~N±wûöàˆ1çÐÙ”Ðo½õ–Tnö®ÿ­uëÖòM)<è%&&V¨PA:\ïÛ·/>>>!!á×_­Y³¦¢B…
-‰‰‰:�.&&ÆÓÓÓÉÉéîÝ»†½DEE999yzzÆÆÆÊÖRlY;_¶pïÞ½=z!êÕ«gS¶†j¶#�²M¦d°òíÈÇlT®p³®«d§rD$ ó-»& ^�Ûã“hSµìÁjƒª|räh¯d6ì44ùØL§WÊ>¿ñÆë×¯¿{÷®V«MHH¸téÒòåËë×¯¯¤e™]…“”!Ðp8Ñ8Ã´tNŠ��<x°��Ï«¯¾ºdÉ�N÷ìÙ³~ýú*T¨H‘"Ó¦MËÌÌ”Ö=pà@ûöí}}}=<<4hpðàA}³½zõBê+gff
-!úöí+•�Ÿ<y"„pww7oÃ†Mš4ñõõuss+W®Ü¤I“bbb¤EiiiK–,©]»¶———‡‡G“&MöìÙóôéSwwwggç‡¶“��àëëëïïÿÍ7ß!^ýõÇ�ËÏLjjêüùókÔ¨ááááááQ£F�hµZÃà‡êããS¤H‘É“'ë«¤BögÀ´ùÊfgL˜°Ô¸~&«W¯.„˜9s¦Â8�Ú‘Ùm®]»&åeŒ²Û/^¼ðòòrrr2ú3¾ÎàË(~³cQ¾o[�L%»‡iœò1CB:›ò[úòåËBˆzõê5hÐ@qñâE³«´mÛVñã�?Ê4¥ð ·dÉ!DåÊ•ãããkÆÇÇKÙê¥K—J%ƒBÌž=Û°Ú¬Y³„ƒ¶:X™ØÌž/ljáñãÇB›ºÈB¨¦)Üdò‘(iG>f£rå›UgËNåˆH@ç[vM@‡††
-Wàöø$ÚT-ûC°Ú êŸ9Ú+™;M>6£¥K—.•bÐÿÑW†ÂMÆIÊÐp8Ñ8Ót—.]„�Ý»w}»Jÿ#ñ¿\]]õ_R~öìÙk¯½&„Ø²e‹T"=«téÒ–ò’ÒÉ»H‘"Ò�™™™}ûö&ªV­«Õj[µjeºT§ÓõîÝ[ñå½öòo    IDAT—_óÛo¿B|øá‡Íš5
-¾¶œ’’òöÛo›¶ß´iS)É(ýØ½{wÃ¥_ýµ¾«²9F-X­liÆÌÎ¡Ùðô~øáap;›Õ®Í6«g¸Ûèt:é^¹9sæö¸`Á!DçÎ�Mƒ±¿ÙNîÛVG¤p÷°´­-Å		èlÊo	è÷Þ{O±jÕªõë×!Þ}÷]³«\¹rÅÅÅ¥L™2ÉÉÉ–š²Ô©ÑAOúøëÏn†¤3]“&M¤�?.„(W®œáßbË–-+„8~ü¸Õ~eb3:_(aÔ‚Â´QYÕ´#…›L>%íÈÇlT®|³êlÙ©	è|Ë®	h…Wàöø$ÚT-ûC°Ú êŸ9Ú+™;M>6³Ó»uëV™8­¶,¿«p’Ò#‡ãðm€c1M@×¬Yóüùó±±±cÆŒBøúú•4jÔHZ·{÷îgÏžMII¹uë–”ÚëÝ»·¾å}ûö	!*Uª”‘‘‘žž^±bE''§?þøC_ÁðøðáCéëKúû£W¯^-„(Y²ä¶mÛž>}š””tâÄ‰ºuë
-!&OžüÅ_!¼½½—.]z÷îÝ”””'NH	Êßÿ]Q«V-ÃaÖ©SG:)RDñèÑ#ùi™?¾¢P¡Bk×®}òäÉ“'OÖ¬Yããã#„X°`�>øZµj]¼x1&&fäÈ‘Bˆ:uê�N¦B6gÀ¨«•efLáu�žt™U¸pa…qµ#¿Ûœ={VQ¼xñÔÔT©$---  @qâÄ	³Ëlœf¯îÛVG¤p÷°�Ùá€t6å¥´%újIII…
-’g‘œœ\¤H___Ão¡ê>nãÇ�BÌš5Ë¨Ü´¦£ƒžŸŸŸÂì=_>ÿû[h•*U„‡’~”ÎPUªTQ2XK±™ž/”0láþýûÒk-=‚ÃR¶†jÚ‘M›L&%í˜¶&SnÓfU¾S9"Ðù–]Ð
-¯ÀíñI´©šÌñMáLû•/ÏýƒOŽí•Ì†�†&˜Ùé}òä‰¥Õ-ÍŒL¹’	ÌŸ')Ðp8Ñ8ÓôÉ“'¥E<0[âïïoÚŽôûy@@€aáèÑ£…ë×¯BL›6Íp©é¥Cƒô§Õzõê	!Ž=j¸Ê­[·„*T¨Q£†"44Ôì ¤'déßÆ å4¥go¹¸¸!ÒÒÒä§EúÂõwß}gX(ÝF]³fM}ð§N�’Ý¿_áååe4:™
-ÙœÃ”T–™1…×=ziiiB…qÊ\ë˜Ým¤×sé'Ë–-Bˆ·ÞzËl–Ú7{¥¨pß¶:"…»‡Õx,�(Ÿ#�Mù*ýÝwß	! ý8aÂ!ÄÚµkM›ÒétÏŸ?/R¤ˆ§§ç¿ÿþ«Sð9Õ3:èÉœG´Z­aM�N·xñb!Dÿþý¥ûõë'L¾£cu˜fëž/”0Û…é7så»ÈZ¨†)ßdò‘(iÇ°5«å6mVýºVw*GD:ß²kZá¸=>‰6U“9¾)‚i¿òå¹ðQrŒÍ‘Ù°ÓÐä³§¥Íöe¶\ÉæÏ“	h8‡¿h‹i:%%EZ”™™i¶D£Ñètºôôô…Ö¬YÓÓÓSöuss3l<11±ÜÕ¬YSÿ„\‰Ñ™ÛÛÛ{ïÞ½ú¥†Íquuõððÿû×lCÒ>úè#éGéîão¿ýV§øæ…
-!ž>}jX(eK¥ï[š+£ÑÉTÈæ¶ ¤²ÌŒ™&_.}ŸÚÏÏOaœ†í(Ùm>,„¨^½ºôcýúõ…{öì1�D&N…›Ãì¾muD
-w«ñXQ>G:›òRÚj¹ôç"ýýÅ×¯_×h4Fï»3\Ez@÷îÝÍv¡ð 'sÒ£G�ÄÿÞ…íîîîááãáááææfô˜{%£c‘ÑùB	ÃÕ½¼¼Þzë­Ÿ~úÉÖ.lÕ´#å›L>%íÈÇlTnÓfU¾S9"ÐùÖK~t–?‰Y¨–�!XmPõƒOŽí³ytv†&›ÑÒÂ…“‹vKíh4!DFF†aaFF†øïï†+r’2EÇá/Ú Çbš€6\*SòÁs+?|ø°páÂ>>>þþþFç~}ý”””M›6¹»»»¹¹�={VZ*%L-‘O@?yòÄÍÍ­L™2™™™qqqÞÞÞÞÞÞÒš6m*<¾ÍF™’,Ì€QV+ç`zÇŽBýk£­vmØŽ’ÝF§Ó5lØP~òäI!D•*UŒÞßh5N£BÓ:2%VG¤p÷ÐÇœ’’b5è‘€Î¦ü“€>wîœ¥Ïé¹sçÌ®’žž.½÷·ß~SrX�ôlz£N§ëÓ§�båÊ•+V¬BôêÕKá`ÍÖ1{¾PÂj/Jº°)TS¶n2K‘(lG>£ò,<^Sú¿üNåˆH@ç[vM@+¼·Ç'1Õ²3«ª~ðÉ‘£½’Ù°ÓÐäc3ZÚ¨Q#!ÄîÝ»­ÖÔét¾¾¾Â$É+¥w*dº"')#$ ápþ¢p,YN@K†{öìYzzú³gÏL+wêÔIªóÙgŸ	“ßº�êK·-×«WOJÛIOm>}ú´Ù°kÖ¬)„X½zµ¥qõìÙSqôèQéþ¡C‡Jå«V­B”)SÆRòZ"=c!,,Ì°píÚµ"ÏX°ZbÓµ`µ²ÌŒIíOOO·Ô¸¡„„„jÕª	!>ýôS©Äj×†í(Ùmt:ÝO?ý$„hÓ¦�´Í~aM>þìl«#²º{-ZTqïÞ=i‘”F7ìÎÒœCG:ÛòOZzÊ“Y£G�¶ÔÔÁƒ…Ò£™­tæzÒ›è«T©’��`TSjÖðMôºÿ>÷¹nÝºÒ±åàÁƒ
-+SÇè|¡„Õ^”t‘…Pem“™F¢°ùxŒÊmÚ¬Êw*GD:ß²kZá¸=>‰Y«–å!XmPõƒOŽí•Ì†�†&›ÑÒ…
-!‚‚‚Œ¾‰k¶�!¾ÿþ{ÃBé‚Ò³Í®ÈIJ�4ŽÃ_´Ž%Ë	héM»ví’Þ&×­[7£Ê›6mBfdd$''—*UJ±cÇK�kµÚÊ•+!V®\©ûo:ïÕW_]½zõíÛ·“’’RRR®]»Ú AƒE‹	!
-,¸lÙ²{÷î¥¤¤œ<yRz¥žD:Ñ†„„H‰×ãÇ�Kå©©©o¾ù¦"  `ÕªUwîÜÑjµIIIW®\	Õ_[Ho™+\¸pXXØÓ§OŸ>}úÝwß*THdã-sVKlš£¬V–™1é;tû÷ï7úÆ™ax©©©wîÜ	«T©’Âßß_ÿr«]¶cu·‘dffV«VM£Ñ8;;—(QBÿBB³ÌÆŸ�ÍauDVwéú5$$$66öÒ¥KµjÕ2êÎÒœCG:ÛòI:>>ÞÇÇÇÉÉ)**Ê°BTT”“““���þ74Ó¦¤?ŽÊdz			åË—BÔªUë×_MHHHLL—>é*T0zËPff¦T_Q¶lYÓ”±¥ÁÊÔ1:_(aµ%]d!T½,o2£H”·#�Q¹M›UùNåˆH@ç[vM@+¼·Ç'1ËÕ²6«ª~ðÉ‘£½’Ù°ÓÐäc3ZWºti!DƒöíÛ÷âÅ‹ÔÔÔÛ·oKù\£v¤ÂbÅŠmÝº5:::::zË–-Òm%2é]NRz$ ápþ¢p,YN@÷íÛWèÜ¹³aåÇ�Kgký“7nÜ(„0|‡iãáááB__ßètºqãÆ	´ZmóæÍMËõMI¿ð»»»!*UªdØË½{÷j×®m©e©NJJJãÆ�M—KÉP«seÓdfaL[�¯,3cÝ»w7mYß¸©R¥J�9sÆ0lù®›•ßmI;ŒøoJW†ÙøÍŽEùæ�‘ÕÝcÍš5†å¦yvKs	èlË'	èÐÐP!D›6mLëH/2ÕáÃ´©7n¸¹¹Y:˜2=èEFF˜ÖÐ¿ÿÖ�ôW+!ÄÜ¹s-ÊìÑFfBŒÎVY=Ú(é"k¡J²³É#QÞŽ|<¦åÊ7«éº–v*GD:ß²kZ§ì
-\g‡O¢MÕä�o
-‡`©_Kå¹|ð1­œµ£½’Ù°ÇÐäkºôÂ…fcpuu]±b…aÍÔÔTé1€F5jdxµüæç“	h8‡¿hK–ÐÏž=ë×¯ŸŸŸ_¡B…†oXYÊ¯5jÔH¿bfffÝºu…=zô°Ô¸N§“Ruúß|<Ø½{÷%JH/¬Zµê„	¤‡giµÚ…V¯^½@�^^^ÁÁÁFï©ÓÿÂošÁÔjµk×®mÕª•¿¿¿‹‹‹——W``àèÑ£Ož<©¯“’’2þ|©}�êÕ«þùçú[q­Î•M“™µ0mA¾²¥»ÿ~·nÝüüü¤çB…'ñðð(Y²d»ví–/_.=MÛˆL×†AÊï6†®_¿.]ÉÅÆÆš.5d6þìoùÉ”ß=233'Ož\¤H‘‚80!!Á¨qKs	èlË'	hé—ÞmÛ¶™ÖÙ¶m›¢víÚ2MMš4ÉÒA@áAïÅ‹3fÌ¨V­š§§§§§g``àôéÓ_¼xav8�=ruuuvv¾ÿ¾¥A™²:!Fçy–¦Ô¦.²ª.Û›L‰òväã1[®p³*ß©	è|ËÞ	h�²+p]Nmª&|S>KýZ*ÏÍƒONíuÊf#Ç‡&?X³KcbbæÌ™S§NéEA!!!×¯_7]=))iöìÙ���Ò~``àìÙ³“’’¬vÁIJGH£³|¼�ãâââ|}}#""‚‚‚ÔŽ¶‰��-T¨P�’““ÕŽ%ç­Y³føðá~ø¡ôì6ä-Z´
-
-š7ožÚ�8ª°°°�>úèÞ½{jÀ!½ûî»<Ø¹s§Ú� ·íÚµkÐ AqqqjÀ!M›6íôéÓÒ“0‡à¤v  à ’’’V®\)„(W®œÚ±ä¼/^H/t2dˆÚ±     €<ÅEí  ÀxyyIÿéÓ§�º‘ä8é©BˆvíÚéß× °DØ4Å7 _áŒ  
-‘€ ëœ��Ë”)Ó¿ÿ)S¦¨KÎ+P @ppðêÕ«Õ     ä5$ ÀºôôtµC°îÎ  ›pØ H8# €B<       `$        vA       `$        vA       `$        vA       `$        vA       `$        vA       `$        vá¢v    ,==ýŸþQ;
- )66Ví šÌÌLN ²æÅ‹j‡ Ø†4  @Ö=~ü¸\¹rjGÀQuéÒEí ŽÄÄDN ²¬yóæj‡ Ø€4  @uíÚµqãÆjGuddd4oÞ¼]»vÿùÏÔŽÌËËKí ‚V­ZÝºuKí( 80µC l@   ‹
-,X°`Aµ£€:Ö­[÷ìÙ³Y³fùûû« ãååU¶lYµ£   —ðB   À6™™™óçÏ6lÙg   @	h   À6;wî¼}ûö¤I“Ô   xÙ‘€   l ÓéæÌ™Ó¿ÿ€€ µc   ^v<   °Áþýû/]ºôÃ?¨   à ¸   °ÁgŸ}Ö½{÷råÊ©   à ¸   PêèÑ£ÇŽûûï¿Õ   pÜ   (5oÞ¼víÚÕ¨QCí@    ÇÀÐ   €"þùçþýûO�:¥v    €Ãàh   @‘Ï?ÿ<88¸^½zj   8î€   ¬»|ùòÎ�;÷ïß¯v    €#áh   Àº…Ö«W¯eË–j   8î€   ¬¸sçÎ¦M›¶mÛ¦v    €ƒáh   ÀŠ/¾ø¢bÅŠ�:uR;   ÀÁp4    çáÃ‡kÖ¬Y½zµF£Q;   ÀÁp4    gÉ’%}úôQ;   Àñ�€   ,zñâÅŠ+&Nœèìì¬v,   €ã!   Xôõ×_ûøø<Xí@    ‡D   0/!!aéÒ¥&LpwwW;   À!‘€   Ìuvv		Q;   ÀQ‘€   ÌHIIY¸pá¸qã¼¼¼ÔŽ   pT$    3ÂÂÂ’““ß{ï=µ   	h   ÀXzzú‚F�åëë«v,   €#   ÛºuëÃ‡'L˜ v    €c#   ü�ÌÌÌ¹sç6Ìßß?§Úlß¾½F£yç�w[¶l©Ñhºwï.ýR®\9ww÷R¥JuéÒåÌ™3V[Öh4�FayllìÌ™3kÔ¨áííííí]½zõ3fÄÄÄ(ìEâíí]¿~ýÍ›7ËÔ1d) //¯jÕª}üñÇÏŸ?Ïò ¬vzúôéN�:•*UÊÝÝýõ×_<xðñãÇå×µ¼©ÔÔÔ¢E‹úùù¥¤¤˜­�žžÖ¶mÛW_}ÕÍÍÍÛÛ»Zµj£G�>uê”¥Ý¼y³T©R�æ³Ï>“ï  À!ht:�Ú1 ùH\\œ¯¯oDDDPP�Ú± €hÑ¢EPPÐ¼yóÔx¹üøã�½zõºyóf@@@NµyãÆ�ÀÀ@­V»ÿþÖ­[!V¯^=räH??¿ÈÈÈW^yEašîtrrÚ¾}{×®]eZ–Ö2½ª7-¿råJ›6m¢¢¢Œj–*Ujÿþý•+W¶Ú‹‘õë×0@¾Ža–(Q¢Ä¾}ûªU«–…AÉwºk×®îÝ»gffš]j5¿l6C7nìß¿¿",,làÀ�FK>|Ø¹sçÓ§OË´l4¢k×®5kÖìáÃ‡K—.7nœÕð   ^~Ü   ü�yóæõë×/³ÏBˆ
-*Hôxÿý÷ÓÒÒîÝ»÷á‡
-!–.]*eŸ…6üî»ï¢¢¢RRRþþûï†fff~ôÑG9@RRR§N�¢¢¢jÔ¨±oß¾øøø„„„_ýµfÍšQQQ�:uJJJ²ÚˆN§Óét<�òÎ‹-²TÇ�Õ îß¿ÿÎ;ïÄÇÇgyt–:�>}zfffëÖ­Ï�;—œœüäÉ“­[·6iÒÄìZ2…–¬\¹RúÏªU«Œ¥¥¥uìØñôéÓ%K–\¹råíÛ·µZmbbbdddhhhÃ†M[‹ŒŒ~ôèÑš5kÈ> €¼ÃôZ€ýÄÆÆ
-!"""Ô t:�®yóæS§NU;
-àåîäätõêUéGéš9))éÝwßõ÷÷wvvÖét½zõBfffJÕ233…}ûöµÔr||ük¯½&„øâ‹/Ú¶m+„hß¾½L$ÿüó�ÂÅÅE>`KWõFåK–,BT®\9>>Þ(ªJ•*	!–.]ª¼—'Ož!ÜÝÝ•D¢0€Ø:(«�º»»!=zdydJ›2uùòe!D½zõ4h „¸xñ¢áÒÐÐP!Äë¯¿þøñc%�ž?¾X±b®®®[·nU  ÀË�;   €ÿoÞ¼yÝºu«X±¢aá€–-[öäÉ“ŒŒ!ÄòåË_{íµK—.mÛ¶Mª°uëÖK—.•.]zùòå–Zööö^¸p¡bÊ”)ûöíóõõ5½mÖ¨¾BJ¡fßÎ�;…Ÿ|ò‰Ô¬a/Ÿ|ò‰¾‚MŒšÊf »wï¶5 «Ê–-+„�ŽŽÎñÆ¥Í7tèÐÑ£G“› ·lÙ"„˜5k–’'‰ÿý÷ßÍš5‹‹‹Û¹sgÏž=s<T   ‘€   þÏñãÇ>lúÔ‹S§NíÝ»WºuWáçç·fÍ!ÄÌ™3333322fÎœéää´aÃ___™öûöíÛ¸qãôôt!Ä_|Q¢D	™ÊÒ.j×®­$r«oÏ»té’¢iÓ¦¦ëë+(ñèÑ£‰'
-!¤‡Y+ŒÄj ‘‘‘
-PÞ©”Úž1cF±bÅÊ—/ß»wï�7¦¥¥e¹#½äääõë×{zzöîÝ»G�EŠÙ°aƒácLÎŸ?/„hÕª•’Öš5k–’’²wïÞ:d?6  €—
-	h   àÿ|þùçmÛ¶­Q£†Qù×_Ý®];Ã[wÛ´i3zôè«W¯nÜ¸qãÆ�×®]›2eJãÆ�­váãã#ý§zõê2Õ6mÚ´`Á—¹sçÚ>3âââ„~~~¦‹Š)"„�&OÊí/^|Ã†4X¼xq ä!Ô¶êÕ«×ï¿ÿÞ±cG//¯[·nmÝºµÿþAAAÙ¿!zëÖ­111Ýºuóññ)P À Aƒbcc·nÝª¯ Í§44«’““½½½‹/žÍ¨   ^B$    !„øë¯¿~þùçéÓ§›.’nÑ5òÅ_”+WîÓO?�5kVÍš5gÎœiµ‹6ìÝ»WúÿøñãuÞq·iÓ¦�
-!Ö­[÷Ö[o)	ÞôY{F¤Ä÷óçÏM×•
-åïÝ6âííýñÇ›}¸„¥H¬ = ["ÝÂœ™™iXMúÑôæn™N…M›6Ý³gOllìåË—¿ùæ›×_ýÜ¹sü±òÁš%½~pèÐ¡Ò�£F�Òh4†Oá�æóÙ³gJZÛ¾}ûóçÏƒƒƒ/\¸�ÍÀ   ^6$    !„X¸páÛo¿]¿~}ÓE…6-Œ‹‹{þü¹V«}úôéƒ¬ÞAüèÑ£÷ß_1{öìÂ…Ÿ:ujÃ†¦ÕV¯^=`À€ÌÌÌ•+Wöë×/KC1CzGâ¡C‡LI…Ry:�.%%eÓ¦Miii]ºtùë¯¿”PµjUù ªU«¦/‘²ÕF÷)?}úTØ˜(×svv®R¥Ê˜1c~ùå!„ôo–�?>""BÑ´iSé®ð7ÞxC§ÓEDDHOÞÿ½ÃýÀ�JìØ±ã¦M›ž?Þ´iS›f  àåG   ×¯_ß¾}û´iÓ”¯2jÔ¨/^Ì™3gêÔ©Ož<y÷Ýwåë�=úùóçMš4ùè£�fÏž-„˜2eJ||¼a�%K–Œ9R§Ó}óÍ7#GŽÌÂ@,éÚµ«bÖ¬Y‰‰‰†å‰‰‰R0R«ÜÝÝûôé3{öl­V;fÌK7qg! ÃñV©REnXSJæJ‹²LÊ_?~ü8;�È¼=R¿¨wïÞBˆO>ùDÊ›[Õ½{÷°°°˜˜˜æÍ›KÙm  €<ÂôÛj ìGº7*""Bí@ @§Óéš7o>uêTµ£ ^
-Ã‡¯[·®i¹¥kæM›6	!322’““K•*%„Ø±c‡¥ö¥ú7nÜÐétéééÒ²ÿùÏôuæÌ™#„Ðh4+W®T¹¥�ÊÊ—//„¨U«Ö¯¿þš���˜˜^«V-!D…
-•÷¢Õj+W®,„0Uþ÷‹„„„²eËZ
- K—.™™™úÊK–,B+VlëÖ­ÑÑÑÑÑÑ[¶l)Z´¨béÒ¥J†/	
-
-Z¾|ù•+WRRRâããOœ8ñöÛo!ªT©buŒ–ÄÇÇûøø899EEE–GEE999ùøø$$$ètºÔÔÔ7ß|S°jÕª;wîhµÚ¤¤¤+W®„††6lØÐl§«W¯Öh4<zô¨ÕH   	h W‘€ðR!Hþý÷_WW×�;wš.2›”|üø±”ýé§Ÿ¤’�7
-!üýýŸ>}jÚˆ¾þ¢E‹ô…‡B¸¹¹]¿~Ý°/SfÛ”�Ðlyddd@@€iû‘‘‘2]˜mMº=Ù××÷ÁƒòñëW¹téR‰%L+ôë×Ï(ý�ššÚ°aCÓš�5Òjµ¦�YêÔì"'''³*°4“FBCC…mÚ´1]Ôºuk!ÄêÕ«¥ïÝ»W»vm%6òõ×_!¼¼¼~ÿýw«Á   ¼üx   ò»/¿ü²bÅŠ�;wVXìØ±ÑÑÑ�5êÐ¡ƒTÒ§OŸºuë>yòdÌ˜1–ê×«WOz´¤I“&½{÷Öjµ†…vU¹rå.Ì˜1£Zµjžžžžžž���Ó§O¿pá‚t;³MZ´hÑ­[·ØØØ±cÇ*\¥jÕª/^üøã�===¥Â^½z}ÿý÷ú%nnnœ={v```�<<<gÏžîêêª<È3gÎŒ?¾zõê®®®%J”èÖ­Û‘#Gºuë¦¼#ÒC6ô¯44lØ0ñß÷
-!J”(qòäÉµk×¶jÕÊßßßÅÅÅËË+00pôèÑ'Ož´Ôþ»ï¾»páÂÄÄÄöíÛ=„  ÀitŠŸÚ ûâââ|}}#""‚‚‚ÔŽ D‹-‚‚‚æÍ›§v €šž<yR¦L™•+W0@íXò—ß~û­M›6éééß~û­”º  @ÞÃÐ   È×¾úê«×^{­oß¾j’ï4oÞ|ùòåBˆÑ£GÿöÛoj‡   »   €ü+&&æë¯¿ž8q¢³³³Ú±äG#FŒÐétZ­¶yóæjÇ   »   €ükÅŠÞÞ,�    IDATÞC†Q;    o"  €|*11qÑ¢E&LpwwW;    o"  €|jÍš5�fÔ¨Qj   äY$   �iµÚ…Ž7ÎËËKíX   €<‹4   ò£ï¿ÿ>>>~üøñj   äe$   �ïdddÌ›7/$$Ä××WíX   €¼Œ4   ò�;v<xð`Â„	j   äq$   �¿ètºÏ>ûlèÐ¡¯¼òŠÚ±    yœ‹Ú    ¹ê—_~¹råÊO?ý¤v    @ÞÇÐ   È_fÏžÝ·oß€€ µ   ò>î€  @>røðá3gÎ„……©   �/p4   ò‘Ï>û¬k×®+VT;    _àh   äY/^8p ›››âÌ™3áááÿý·Úq   ùw@   Ï:þüˆ#J–,¹téÒ¤¤¤Ï>û¬M›65jÔP;.    ¿   €<ëÞ½{nnnOŸ>ýðÃ‹/~çÎ�±cÇª   ���€  @ž•žž.„HOO�‹‹‹ŒŒìÜ¹óÈ‘#ïÞ½«vh   @¾@   yÖíÛ·333õ?¦¦¦¦§§¯[·®\¹rcÇŽ}þü¹Š±   ù/!  @žeöNç´´4''§ØØX__ßÜ	   ÈW¸   yÖÃ‡M]\\FŒ±aÃggçÜ	   ÈWH@   oŠ��MII1*tqq2dÈŠ+4�*Q   ù
-	h   äM÷îÝ3*qqq<xðªU«È>   ¹ƒ4   ò¦{÷î&š]\\zõêEö   ÈM$   �7Ý»wÏÍÍMú¿‹‹KÏž=ÃÂÂœœ¸    r×ß   È›ôw@»¸¸ôèÑcýúõ¼u   Èe.j    ØÅýû÷SSS]]]Û´iFö   È}Ü  €¼éŸþÑét]»vÝµk—«««Úá    ùw@ €—Ô€öîÝ«vp`qqq®®®(V¬˜Ú±@Ë—/ïÝ»·ÚQ   äk$  ÀK*111((hØ°ajGµfÍš!C†ðÖÁ|kÔ¨Q©©©jG  �ß‘€  /¯òåË÷èÑCí(à¨:uêäææ¦vPÍ| v   àÐ   È£È>   ª#       °Ð        »        °Ð        »        °Ð        »        °Ð        »        °Ð        »        °Ð   /;�F£Ñh–§¦¦-ZÔÏÏ/%%ÅÒ*“&M²Ú”Æ€··w©R¥:tè°bÅŠ„„ÓfcccgÎœY£FoooooïêÕ«Ï˜1#&&F_¡V­Z�fûöí¦ënß¾]£ÑÔ®]Û´_C2±Õ¯_óæÍ¦-Ë°4¥Êc–§ÚÖÁšv­d%%%}õÕWÁÁÁE‹uuuõõõ}óÍ7Ç�amô   @î!  �§ìØ±ãÙ³g/^¼Ø¶m›¥:K—.½víšò6ïÞ½»wïÞ1cÆT­ZõìÙ³†K¯\¹R½zõO?ýôÂ…‰‰‰‰‰‰/^œ={v�5®\¹"Õ1b„bíÚµ¦�¯Y³F_!#""úöí»aÃ†¬µ�e–¦:ûƒµº�nÞ¼Y«V­ñãÇ9räÙ³géééqqqçÎ�[¶lYýúõm	   `7$   ò”•+WJÿYµj•¥:iiiãÇ�WÒšN§Óét)))·oß^·n]¥J•¢¢¢Úµk÷ìÙ3©BRRR§N�¢¢¢jÔ¨±oß¾øøø„„„_ýµfÍšQQQ�:uJJJBôíÛ×ÓÓóÀ�÷îÝ3lÿîÝ»ááážžž}ûö5í×�¥Ø<x0`À !Ä¢E‹”ŒH9«1Xšj[kJ~%%%uèÐáÚµko¼ñÆúõëïÞ½«Õj.]º´|ùrÐ   x©�€  È;"##�;V¯^½œ8qâÒ¥Kf«µmÛö×_Ý½{·ÂfÝÝÝ_ýõAƒýùçŸÕ«WòäÉ²eË¤E«W¯¾qãFåÊ•�;Ö¦Mooo//¯V­Z=z´R¥J7nÜøöÛo…¾¾¾={öÌÌÌ\·n�aËëÖ­ËÌÌìÙ³§��OÖ†\¼xq)õ|õêÕ¬µ�52S�ýÁÊo o¿ýöÚµk•+W>sæÌ€J–,éêêêååUµjÕÑ£GŸ<y2Ûƒ   r	h  €¼CºwèÐ¡£G�–o‚þòË/]\\>øà³Ï‰–áååõÉ'Ÿ!öíÛ'•ìÜ¹SñÉ'Ÿx{{Öôöö–jJÄŸ;±nÝ:ý­Ä:�NJÑfùùF=f¿åä§:›ƒ•ß@?üðƒbæÌ™YÎÚ   ¹†4  €c°úN¼äääõë×{zzöîÝ»G�EŠÙ°aƒô#•*U;vìíÛ·.\hk�7B\¿~]úQºó·iÓ¦¦5ƒƒƒõ„6¬R¥Ê­[·Ž9"•>|øŸþ©R¥JÃ†m¬Þ£G�&Nœ(„hÝºµ­c‘'ƒÕ©¶i°¦ä7�éœ+œ+    ÷‘€  È#¶nÝÓ­[7Ÿ
-4(66vëÖ­f+òÉ'EŠ™?~TT”M½.\X/ý'„ðóó3­Y¤H!Dll¬¾DºùWzŸþ?Ã‡·) =)ÙZ¼xñ64hÐ`ñâÅYk'”Lu6+³�¤9—6   ð’#  à¾oèÐ¡Ò�£F�Òh4–žÂQ¸páY³f%%%I·+÷üùs!„þáÒ¤B³5}}}õ%pwwÿá‡âââbccwîÜéææ6pàÀ,Ö�··÷ÇìïïoÓ@¬’‰AÉT+¬Y2¨`Á‚Bˆ˜˜ÓPm%   `_$ �\%}+–ß 9îüùóBˆ¦M›J·¿ñÆ:�.""âüùófW				Ü±cÇï¿ÿ®¼££G�
-!ÞxãéÇÀÀ@!Ä¡C‡LkJ…RI‘"Eºvíšœœ¼yóæÍ›7'''wéÒEºQ:t:]JJÊ¦M›ÒÒÒºtéò×_e­[)œêìÖÒªR¥ŠâÄ‰94    ÀŽH@¹ÊÃÃCaöqœ  d‡¥;�e9;;/Y²D1nÜ8…½$&&~úé§Bˆ¶mÛJ%]»vBÌš5+11Ñ¨æìÙ³õôô¦�I‘Í×º»»÷éÓgöìÙZ­vÌ˜1¹ó'^åS�ÍÁZÚ@�;wBÌ�;7--Í¦  €ÜGÈU...nnn$  9+!!aãÆ�NNNQQQ†�ŒˆŠŠrrrÚ¸q£QvX¯yóæ�:uŠŒŒ”o_«Õþûï¿ë×¯¯S§ÎÅ‹ýýýÇŽ+->|xùòå###ß~ûí$&&&%%<xðí·ßŽŒŒ¬P¡‚ÑS�ƒƒƒË—/æÌ™?ÿü³lÙ²Íš5ËþðßÿýÊ•+GDD„††f¿5y6Muökv…„„”.]úôéÓMš4Ù¿LLŒV«½sçÎÒ¥Ks`„   @Ž"ä¶"EŠ<{öLí(  yÊæÍ›ãââZµj`XÐ²eË¸¸¸Í›7[Z÷‹/¾pss³´TzÄ„»»ûë¯¿>hÐ «W¯–*UjïÞ½úGIxyyíÙ³'  à¯¿þjÝºµ···——WË–-ÿúë¯€€€Ý»w{zz5¨OI6Lz8•¥~ÉßÕÕõ«¯¾BLž<ùáÃ‡25mêÅìR›¦Zá`å™n ‚þôÓO'OžlÛ¶máÂ…ÝÝÝË”)óþûï»ºº®X±"½    vBÈmeË–ýçŸÔŽ �§HO~Ð¿ÏÐ°aÃÄ_šgVùòåÇ�/ß¾‡‡GÉ’%Ûµk·|ùòË—/×©SÇpiåÊ•/\¸0cÆŒjÕªyzzzzzNŸ>ýÂ…•+W6mmðàÁ®®®ÎÎÎƒV08EZ´hÑ­[·ØØXý­ÙvbëTg°f7PµjÕ.^¼8gÎœ:uêøøø¸¹¹•)S&$$äòåË£F�ÊZG   €=hx�Ëúõëçââ¦v   Z´h4oÞ<µ1¯k×®¯½öÚ²eËÔ€C*Y²äÜ¹s¤v    ùw@¹­fÍšgÏžU;
-      ÀîH@¹-((èÊ•+qqqj @Þdúìf%’   `$ �ÜV»vm—£G�ª      `_$ �ÜæííÝ´iÓ={ö¨  y“Î2µC   òÐ€
-:tèðË/¿dffª      `G$ ôìÙóñãÇû÷ïW;      ÀŽH@*ð÷÷oÓ¦MXX˜Ú�       vDPÇˆ#vïÞ}ÿþ}µ      ì…4 Ž:T­Zuþüùj      Ø	h@�fÂ„	k×®}üø±Ú±       vAPMŸ>}*W®<mÚ4µ      ì‚4 ''§¹sç†……]¸pAíX      €œGPSëÖ­ßyç�áÃ‡gdd¨      �ÃH@*½sçÎÂ…Õ      Èa$ •-ZtþüùŸ~úé¹sçÔŽ      ÈI$ õ:´gÏÿ×Þ}‡5u6l BØ	{É¦L� ²€‚ë*Pki¡V[\õÂŽÏÑÖJ­µÚj­ZÅ=ën+®
-VÑŠ 6"²ÂHH€äûã¼Í›$FEãþýÁurÎÉ“û{U¼yxÎì���ÆÆFº³         ôEº  !„üüóÏžžžK–,9tèÝY  ú�ôôô�7Ò�þK$)(`ôMMMtG     Ð }ƒ––ÖÑ£GÇŒóÝwß­ZµŠî8  }‚��MIIÉ‰'è„"***š››���Ýq žÍÎÎNOO�î    ƒ
-h€¾ÂËËkÿþýo¿ý¶½½}HHÝq  è‡´ö�=Ú°aÃÞ½{íìì¾øâ‹Ù³gc4     È	4@2kÖ¬¼¼¼°°0ƒ1cÆÐ  »ŒŒŒ¯¾úêüùó#FŒ8{öl`` Ý‰      ŸÁì€¾åË/¿üðÃ§N�šžžNw  ¼ÒÒÒ‚‚‚<==[[[“’’Ð>    À@ÐçDGGÏ˜1cÜ¸q©©©tg €AçÖ­[ãÇ�÷öö&„\»v->>ÞÏÏ�îP     Ð_¡€èsÆž={Þ}÷Ý±cÇ^½z•î8  0X\¹rÅÏÏoäÈ‘ªªªIIIqqq¨ž    à%¡€è‹FLLLhhhPPÐŸþIw  à¨®yÜ¸q&&&qqq£F�¢;     ( ú(…íÛ·GDD„„„DGGÓ  &ªzž1c†µµõ½{÷Ž?îææFw(     8P@ô]
-
-
-›7oÞµk×Š+æÍ›×ÖÖFw"   Äbñ‰'ÜÝÝƒƒƒ©êùÀ�‡î\     0Ð(Ò  žaîÜ¹!!!%%%'OžÔÖÖ¦;  ôc"‘èÐ¡C›7oÎÉÉyÿý÷OŸ>ýÚk¯Ñ
-     ,Ì€è^ýõ«W¯æåå½þúë�=¢;  ôKpss[°`A@@@AAÁŽ;Ð>    À+… pssKIIÑÖÖvww?}ú4Ýq   ?ioo���uppX¸páë¯¿žŸŸciiIw.     øP@ô&&&—/_^³fÍÛo¿ÞÒÒBw"  èëALLŒ½½ýÇ<sæÌâââ˜˜sssºs    À`� ?a0‘‘‘7nÜHJJòòòº{÷.Ý‰   �jmm�‰‰qppX³fMxxø£G�6lØ`hhHw.     \P@ô?^^^ÉÉÉ666~~~û÷ï§;  ô-|>ãÆ�VVV_ýõÜ¹s£¢¢ôõõéÎ     ƒ‘"Ý àEèëëÇÅÅmÞ¼ùÃ?<~üøöíÛñûÔ  ðäÉ“üñ×_moo_¾|ùâÅ‹544è     ƒf@ôWã³Ï>ËÉÉimmuppØ¸qcGGÝ¡  €���QQQ666±±±Ÿþù£G�V¬X�ö     h‡ ³±±IHHˆŽŽ^¿~½——×íÛ·éN  ½ª¾¾žªžwíÚõå—_DFF²Ùlºs     ‚` `0zzz~~~ë×¯
-…t‡ €W®ªª*22ÒÒÒrÏž=ë×¯øðadd$‹Å¢;     À¡€ ¬­­ããã·nÝÍápâââèN  ¯JEEEdd¤­­í…¶lÙòàÁƒˆˆeeeºs     t†`à`0óæÍ+..}ë­·FŒqóæMºC @O*++£ªç¿þúkëÖ­YYYááá¨ž     ÏB0Ð¨««GEEåçç;88øùùÍž=»¤¤„îP  ð²JKK,X@ý¾Ë¾}û²³³ÃÃÃ•””èÎ      
-h€�ÉÌÌìÀ�—.]ÊÍÍuss[¿~}SSÝ¡  àE„‡‡ÛØØÜ¾}ûäÉ“™™™³fÍRPÀwq     ÐàŸ. Ù¸qã222¾ûî»­[·Z[[oÚ´‰ÏçÓ
-  ä•——îììœ››{êÔ©ÔÔÔ   TÏ     Ð�à0 “É\¸paqqñ·ß~cnn¾qãFÔÐ  }\vvöìÙ³�œœ
-
-
-ÎŸ?ëÖ­   ƒAw.     €çƒ`PPRRŠˆˆ(,,\¿~}LLŒ½½}LLŒ@  ;  tvûöí   —ºººÄÄÄ›7oÒ
-     à¡€D”••#""rss?üðÃ5kÖ6ì×_mmm¥;  B5ÍÙÛÛ›’˜˜˜��àçç×³1eÊƒ1uêTé�ãÇ�g03gÎ¤^¦¤¤,X°ÀÆÆFEEÅÂÂbÆŒ©©©Ï™Á`<u‚v§ýŒnÈ¼½½}ÿþý“&M2dˆ²²2›ÍvqqY´hQrr²äœÆÆÆ¨¨(7776›Íf³]]]¿úê«†††î"ýßÿý_wQ»Ù)°<×òÌ.çguw6›=räÈß~ûMÆ9Ý(ã#ä�"ôõõuuu»û¦âÖ­[Ó¦M³°°PQQ±²²š;wî�7^àƒ     ?bˆÅbº3  êëë×¯_ÿë¯¿jhh,[¶lÑ¢Ešššt‡€Þ8|øðõë×Ód°KNN^½zõåË—§L™òùçŸ�5ê}PAA‡Ã
-…/^œ0a!dçÎ�ºººÙÙÙFFF„�®­Ÿ‚‚Â‰'‚ƒƒeŒL½«ë7–�öwW)ÊøŽ´¢¢búôé·nÝ’ñÆœœœ‰'–””t:jaaqñâEGGÇ®‘”””îß¿ïààÐ5ª<½§ŒÓ¤¯å™7\ÎÏêºó©o<pà@XX˜ìs:ØÝœü#B>üî»ïBöïßÞéäßÿ}æÌ™"‘è™1žùA    Ða4À ¥££óÃ?TTT¬\¹rË–-&&&‘‘‘¥¥¥tç \¨iÎ>>>:::qqq¯®}&„ØÙÙ}òÉ'„�eË–µµµ=~üø³Ï>#„ÄÄÄPí3!ÄÇÇgïÞ½%%%­­­>>>"‘è‹/¾èÁâ.º;³­­-((èÖ­[fffÛ·o/**
-…---ÙÙÙ±±±>>>„�7mÚ´’’77·.455577ÿõ×_Ã†+))™6m�Ç{êÈ‘‘‘òÄ“±ó™×òÌþ\ŸÕ]ÔòòrªwÞ¼yóËÜmÙŸ"c„íÛ·S;vìèúöÕ«W‹D¢	&Ü¹s‡Ïçs¹ÜcÇŽùûû¿Š¨    Ðuý> �@°ÿ~'''%%¥°°°ììlº@/7nÜªU«èN1H�9sÆ××—Éd†……Ý»wOöÉÔ·m<ï£�>244d2™o½õ!„ÃáˆD"ê‘HÄáp!¡¡¡2†jjj211!„lÚ´iÒ¤I„�)S¦È8ÿáÃ‡„EEEy>sÿó~ÿK±²²ªªªêîœèèhBˆ££cSS“ôþ¦¦¦¡C‡BbbbºF¢®ý�?þxÞKxÞky®.ÿýét&—Ë%„¨¨¨<ïh²Ï‘g„¬¬,BÈˆ#¨Ÿ�Ü¿¿Ó	***„�ÊÊÊŽ    ýf@ QVV¿wïÞ�²²²\]]gÏž�˜˜Hw. €H,ÇÅÅùøø[[[Sÿïuqq‘ç½aaa[¶lár¹Û¶m311ÉÌÌ<~ü8uôØ±c™™™–––Û¶m“1›Íþá‡!+W®¼pá‚––ÖSg­JŸO¡:ÄÞwôèQBÈÚµk»;çôéÓ„�5kÖPQ%Ølöš5k$'tòã�?***~üñÇ¯úYÏ{Ã_ò³^ÑÈ2P—3oÞ¼E‹‘§M‚¶¶¶&„ÄÆÆÖÔÔô~<     
-h ø&“9gÎœÛ·oÇÇÇ‹ÅâÀÀ@WW×;v´´´Ð ` ‹Å'NœpwwvqqÉÏÏ?pà€“““ü#$''Ÿ;wŽšç«««»{÷nBHTT”H$êèèˆŠŠRPP8xð –––ìqBCCG�ÝÞÞNÙ´i“©©©Œ“©U<==åÏùLò?kîîÝ»„�7ÞxCÆh™™™„�±cÇv= 9¡“¡C‡.Y²¤¨¨ˆj‡_˜<×ò\7üTVV~úé§„j™éH(›Œø|þ�ÔÕÕçÌ™3kÖ,==½ƒvZó„ú1ÀW_}e```kk;gÎœÃ‡·µµ½Š¨    Ð¡€€ÎNœ8QVVöÎ;ï|÷ÝwúúúáááT   / ££ãÀ�®®®áááþþþ;vìxíµ×žwœ_~ùeòäÉ’Y®'N\´hQnnîáÃ‡>œ——·råÊÑ£GË3”äÁ³®®®2N;räÈ÷ß¯¨¨øí·ß>oÚÑØØHÑÓÓ“qÎ“'O!ººº]Qo¤éjÍš5zzz6lèúôÂ'ç^TKkll|ðàÁQ£FýôÓO=8¸<Ž;ÖÐÐ¢©©©ªªúÞ{ï566;vLúœ·Þzëï¿ÿ
-
-b±X………ÇŽ{÷Ýw‡Ž	Ñ    ƒ
-h x:CCÃ+VäççïÞ½ûÁƒîîî'NüóÏ?©	\   �öövªz^¸páë¯¿ž——ceeõb£Qóy¥mÚ´ÉÆÆæë¯¿^»ví°aÃ¢¢¢äçàÁƒçÎ�£¶###ÅÝ<êíÈ‘#ááá„�}ûöùùùÉ“š¬*‰¤wR/»Îcíº*\wÃR³¹kkke|4ÕíÖÕÕu=DíìnJ¸ŽŽÎÚµky<5}øÅÈs-rÞð—Áf³¿üòË§.T"ÿÝîŽŒ¨ÇÎ›7�z¹páBƒÑuŽ±cÇž9s¦±±1++këÖ­VVVwîÜùòË/{<*    ôA( @eeåÐÐÐ¤¤¤´´4SSÓwÞyÇÜÜ|ÅŠyyytG èÓÚÚÚbccííí-ZT\\caañ2cêèètÚóäÉ“ºº:¡PX]]]^^ÞÝT_i•••Ë–-#„|óÍ7:::ÉÉÉìzÚÎ�;ÃÂÂD"ÑöíÛßyç�gKµÀ�æ´VWW“îû_yPó…/]º$ãêÑ‹W®\ézˆÚI�ðT,àp8'Ožüûï¿_8¤lrÞð#‹[[[�9ÒÖÖ6cÆŒôôôžYwïÞMII!„Œ;–š‹moo/‹SRRžú‹SL&ÓÉÉiñâÅçÏŸ'„P_   `ÀC rñððØ½{wMMÍÏ?ÿœžžîèèèìì¼qãFüþ, @'­­­111vvvË—//..Þ°aƒŒgè½Œ…Ö××¯[·nÕªU\.÷£�>zæ[-ZTWWçïïÿÅ_|óÍ7„�•+W655IŸ!‹·nÝ!Oj1ëøøxé�Tqü\ë\w2gÎBÈš5k¨.û©‚ƒƒ	!k×®íôÐ‚––ê©žŠÉdFGGB–.]úÂ!e“ç†¿•·ß~û›o¾
-…‹/îÍYÃ2ž¦(ûA‹ÔÏ$ªªªz>    ôA]Ó à™222–,Y¢­­­¡¡1þü7nÐ� ^Ä¸qãV­ZEwŠ�ƒÇãEGG›››kkk¯Y³¦¦¦¦§F~ê·mGŽ!„p8œŽŽ>ŸOM¯>yò¤Œq¨·¨©©ˆÅâöövjŠñòåË%ç¬[·ŽÂ`0¶o+
-d    IDATß.BªÆ5008vìXMMMMMÍÑ£Gõõõ	!111²/D�@àîîN177ß±cGqq±P(äñx999±±±>>>b±¸¹¹ÙÖÖ–âááñ×_577·´´ÄÇÇ{xxBìììZZZ¤ÇìšaÚ´i2¾7~ÞýÒä¹áÏ;æSÏ
-…ŽŽŽ„é?5yF“}ŽŒ£MMMššš
-
-
-%%%ÒûKJJ455›››©=Ã‡ß¶m[NNNkkkSSSRRÒ˜1c!NNNÏ    ú)|Ÿ /ŽÇã8p`Ì˜1ÔoÝFEEåççÓ
- ž
-èžÒÒÒBMsÖÕÕÝ°aÃ“'Ozvü®õ\UUUïÆÅÅQ{>L144¬®®~ê ’·lÞ¼Y²óêÕ«„eeeÉÿÀ»›µÐÝ°�@àããÓõ]¾¾¾B¡°Ó…t%cäÇ�{zzÊ~cvv¶¹¹y×£æææÙÙÙÏ¼™ÊÊÊÝ%‘½_ÆµÈyÃåù,yÎ¤¦Ÿkii•——Ë™ð™çÈ8K™8qb×l&L „ìÜ¹SÆ 
-
-
-Ò?,‘'*    ôSX‚ ^œššZXXXbbb^^^hhè‘#Gìíí‡]QQAw: €ÞÐØØeiiýùçŸ?zôhÅŠ¯ús—,YRSSãëëûæ›oR{Þ~ûmooo.—»xñbo1bµ$1ÅßßÎœ9B¡PzçPVVNHHøæ›o8Žªªªšš‡Ãùæ›oâãã•””^fdSSÓ›7oîÙ³ç�7Þ044TTTd±XgÑ¢E7oÞ¤Îqtt¼wïÞW_}åââ¢®®®®®ÎápV¯^}ïÞ=j^°l¶¶¶‘‘‘/ò©^éï*000$$¤±±qÉ’%=;òSQ‹lH?(mþüùäßçBRSS###]]]ÕÔÔ”””LMMCBBCBBz!'    ÐŽ!ÆÓ¥ çdgg?~üðáÃ<ðôô›3gŽ‘‘Ý¹ àé‡¾~ýzºƒôKõõõ111[¶lQQQY¾|ù|Àb±è     Ð·`4 ô$''§¨¨¨ÜÜÜ„„WW×5kÖXYYÍœ9óØ±c�ž ÐÕÕÕ­\¹ÒÒÒr÷îÝë×¯/**ŠŒŒDû     Ð
-h èyL&sÜ¸q{öì©¬¬<|ø°¢¢âüùóÐD@WQQiiiyêÔ©-[¶FDDH–     €NP@À+¤ªª|ôèÑÆÆÆK—.™šš.]ºTKKËÏÏ/&&¦ººšî€  ò*++‹ŒŒ´³³»xñâÖ­[³³³ÃÃÃQ=     È† z“É¤JçG�;vÌÌÌìË/¿´´´		9räH}}=Ý ºUZZº`Ákkëøøø½{÷æää„‡‡¿äƒõ      	Ð Ð«ÔÔÔBBBŽ=Êår:¤¢¢²dÉ##£ÀÀÀ_~ùåÑ£Gt ø¯‚‚‚ððp[[Û´´´“'OfffÎš5KAß>     Èÿ‚ z¨©©9r¤¶¶öæÍ›~~~Û·o·²²²±±‰ŒŒLHHhoo§;# ^yyyáááÎÎÎ¹¹¹'OžLKK
-
-Bõ     ð¼ðï(  ™‚‚‚§§gTTTVVVzzzXXØõë×Ç�occóÑG]¼x‘ÏçÓ� ‘œœœÙ³g;99œ?þÖ­[AAAƒî\      ý
-h èCÜÝÝ£¢¢ÒÓÓ‹‹‹?ûì³üüüéÓ§ëééMž<yË–-………t€�ìöíÛAAA§®®.11ñæÍ›���t‡     èßP@@_dii¹téÒK—.577_ºtÉÕÕuß¾}¶¶¶C†	?qâDcc#Ý`àHMM
-
-òöö&„$&&&$$øùùÑ
-     ` P¤;  €,ŠŠŠ~~~T”““sþüù.„……1™Ì±cÇN˜0!00ÐÑÑ‘î˜ Ð_%''¯^½úòåËS¦LùçŸ|||èN     0 `4 ôŽŽŽŸ~úiBBBMMÍ‘#GÌÍÍ£££�œœÌÌÌæÎ�{èÐ¡ŠŠ
-º3@¿qùòe???�ŒŒŒ¸¸8´Ï      =4 ô?l6{Ú´i¿þúkaaaeeåO?ý¤¢¢²bÅ
-›œ8q¢¶¶–î˜ ÐGÅÅÅùùùM˜0ÁÚÚúîÝ»Ç�wss£;     ÀÀ„%8  322š5kÖ¬Y³ÚÛÛSRRâãã/]º´{÷n…#F¼þúëcÇŽ9r¤ªª*ÝI€fb±øìÙ³6l¸uëÖÛo¿½cÇgggºC     p±XLw €ÖÐÐð÷ß_¾|9111;;[UUuäÈ‘cÇŽ;vìˆ#”””èÐW>|ýúõtyµÄbñÉ“'¿ýöÛ¬¬¬yóæ­X±ÂÚÚšîP      ƒ
-h àª««¯^½š••¥®®îëëK•ÑžžžŠŠøEÔ|ÝÑÑqøðáM›6DDD|üñÇVVVt‡     DP@À RSSsíÚ5ªŒÎÌÌTWW9r¤¯¯¯��ÏÈ‘#555éðÊÝºukÓ¦MÒ/µ´´${¶oß®««KG´ÖÞÞ~äÈ‘�7}øá‡Ÿ~ú©……Ý¡      Ð 0HÕÕÕÝ¸q#))éÆ�iiiB¡�Ãáøùù�5ÊÏÏÏÒÒ’î€ ¯DCCƒ��A{{ûS�:88äææör¤×ÞÞ¾gÏž�7VVV.]ºô“O>144¤;     À … €tttäææÞ¾}ûÆ�ÿüóOvv¶¦¦æðáÃ}}}ýüü|}}ÕÔÔèÎÐcfÌ˜qöìÙ®´²²òºuëþïÿþ�–T=¢µµuÇŽÑÑÑõõõË–-[²d‰��Ý¡      5Ð  �UTT¤¥¥QetZZZGG‡›››¯¯¯§§g@@ ~‹ú»Ó§OÏž=»£££Ó~ƒñèÑ#sssZR½$>Ÿûã�?>yò$22réÒ¥zzzt‡      Ð  2ñx¼ôôtªŒ¾yófmm­±±15-ÚÏÏÏÝÝ]AA�îŒ ÏG èééµ´´Hïd0#GŽLJJ¢+•mmmJJJÝåñx¿üòË�?þØÞÞ¾|ùòÅ‹khhôf<      �4 €¼ÚÚÚ222¨e£“’’ÊËË�ŒŒ¼½½½½½½¼¼¼½½ñËþÐ_¼ÿþû‡nkk“ìQVVþùçŸ,X@cª§úë¯¿vìØqúôé®‡úé§mÛ¶1™Ì•+WÎŸ?ŸÍf÷~B      �4 À***JIIIMMMKKKOOonn¶²²òþ—‡‡‡¦¦&Ýž.!!aÂ„	"‘H²GQQ‘ËåêèèÐ˜ª«„„„É“'·µµÝ¾}ÛÃÃC²¿¡¡!::zË–-***Ë—/ÿàƒX,�9      ;(  zFyyùíÝ¸q£¾¾ÞØØØó_¾¾¾ºººtgø‘HdddTSSC½d2™ãÇ�¿pá½©:9{öìôéÓ;::©xuuußÿý¶mÛ´´´V¯^ýÞ{ï©¨¨Ð�      º…  çuttäææÞ–ÒÚÚ*Y<šª¤ÕÔÔèŽ	ƒZddäöíÛ…B!!DQQqÿþý¡¡¡t‡ú¯sçÎMŸ>½½½�zÉ`0.\¸pþüù={ö2dõêÕsæÌQVV¦7$      <
-h €W®¹¹9===---55555µ°°P]]ÝÝÝ�Z<ÚÃÃÃÞÞžÉdÒ—”””‘#GRÛªªªµµµêêêôF’¸|ùò¤I“¤—¨VRRb³Ùl6›ZpCUU•Æx       ?Ð  ½­®®Žj¢ÓÒÒÒÒÒÊÊÊÔÔÔœ��‡æææææææêêª¥¥EwLø,--KJJ”””‚ƒƒ�=Jwœÿøûï¿'MšDMÍî$--ÍÓÓ³÷#     ÀC @³¦¦¦üüü¬¬,j±Ž;wî´´´èèè899Q‹u8;;s8,t=î‹/¾Ø¼ys{{û©S§¦M›FwB¹råÊÄ‰ÛÚÚº~¢¬¬<uêÔ'NÐ      ^
-h €>Gò<Ãììì¬¬¬œœEEE;;;ªŒvrr9r¤��Ý1¡ßËÍÍuttÔÔÔ¬©©QRR¢;¹zõê„	žÚ>SÆ½{÷8N/     €†  ¯{üøñÝ»wïÝ»wçÎ�»wï>xð€bggçææF­ÚáêêjjjJwLèmb±¸¡¡�Âçó[[[»{)�Çã	é=kÖ¬±±±	—ÞÉb±:=ß�ÉdjjjBØl¶’’’ä%u¦äåË¸}û¶¿¿?ŸÏ‰D2N{ï½÷öíÛ÷’Ÿ      ½4 @?Ããñîß¿÷_÷îÝkjj¢–ì æG;;;;;;Ó�äÒ ¥¾¾¾¡¡¡¥¥¥¥¥¥¾¾žÚhnn¦v677K¶;õÈO¥££Ói�ššZ§Ç÷544¨¨¨¨©©Iïliié´s{{{SSÓ3?‘Åb±X,6›­­­Íf³%ÛÔ~---‹¥­­­­­­££Cm°ÙìŒŒŒÑ£G·´´B”””TUU;::Z[[©2šÅb™™™ÙØØX[[ÛÙÙ-]º”Á`<3      ô(  ú7±X\TT”••E­×‘���““Ããñttt¤ûh'''TÒ½¬¶¶¶ªªªººº¢¢‚Ú(//oø_õõõÒo¡ÊY6›ýÔÞ–ÅbijjRÛT�LUÌ’Z¹ÓKyTTT2™L9Ïonnnkk“ôÑ]_JÚsémé&�ú*] 3™L‘H$‹ÕÔÔ´´´ôôôLLL,,,†êèèhmmmllÌf³å	      }
-h €¨¾¾^º’¾wï—ËUVV¶µµ•´ÒNNNŽŽŽ
-
-
-t‡íÇjkkËËËKJJÊÊÊÊÊÊJKK¹\neeeeeeuuµd±ŽŽÎ�!CŒ��©i¿Ò_¥õ……˜{ŸÏ—´ð�@QQ‘ê¦ëëë«««¹\nUUUee%5-š¢®®ndd4dÈCCCª¡655¥6X,½W      O… `à‰D’YÒ™™™999999|>_WW—ÃáP}´£££ƒƒƒ™™Ýaû¢²²²‚‚‚‚‚‚¢¢¢Ç�—–––———––òù|Bˆ’’Ò�!CÌÍÍMMM���©zÔÀÀÀÈÈÈØØØÀÀ@EE…î+èÇZZZ*++«ªª¸\nEE—Ëår¹�?¦JÿÊÊJê4mmmSSSêOÁÌÌÌÎÎÎÖÖÖÎÎNWW—Þü      ƒ
-h €Á¨£££ÓÂ¹¹¹|>ŸÍfÛÛÛÛÛÛ;88888PƒjéƒÊÊÊüüüP�3µÁãñ†©©ék¯½FÍº•î:‡‚‰ät
-…åååÒ? ¦¢ÖÔÔBtuu©2ÚÞÞ^ÒJkkkÓ     `°@  ÿQ__ÿðáCª�¦6òòò:::ttt¬­­­­­©¹ÒÖÖÖŽŽŽêêê= %%ÅÈÈÈÊÊªÇGîÎ£G�rss³²²rrr²³³³³³”••­¬¬lþ—µµµü+C_ÐØØXØÅãÇ�E"‘‰‰	µõÕÙÙY__Ÿî¼      
-h  èV[[[ii©t%}ÿþý'OžBŒ��©2ZRL[YY½äDàÈÈÈmÛ¶½÷Þ{«W¯¶´´ì¡‹ø¯ÖÖÖ;wî¤¥¥¥§§gffæææ655)++:ÔÙÙÙÅÅÅÉÉ‰ÃáXYYÉÿP>è_A~~>õ_rvvöýû÷‹ŠŠD"‘¾¾>‡ÃqvvöòòòòòrttÄ      =4  <‡ŽŽŽâââüüüœœœ¼¼¼¼¼¼œœ.—KÑ××·µµí4qxÈ�!ò>iÒ¤‹/***ŠÅâððð¨¨(‹—IÛÖÖvÿþý´´´ÔÔÔ´´´¬¬¬¶¶6WWWªp´··WTT|™O�~�Çãåäädfffeeedd¤§§×ÕÕ±X,www///ooo///;;;ƒAwR     €~	4  ¼¬†††¼¼¼ÜÜ\éµ¨xY,–¤Œ–ÔÓæææOí|mmm©mEEÅŽŽŽ3f|÷Ýwöööò‡áñxÉÉÉ‰‰‰W¯^MIIÖÖÖžžžXld+..N—RUU¥­­=zôhwwwLŽ     �
-h  x%„BáãÇ�þ¯œœ�G‘¬+-½ˆ‡±±±@ �DÎšÏçÿóÏ?‰‰‰‰‰‰·nÝ"„x{{Œ3føðáxâ¼Œ²²²›7o^»víÊ•+YYYT=fÌ///”Ñ      ²¡€ €Þ#ŠŠŠ
-<x ™+]TT$
-ŒnÿJ’ÔÐ6l°³³“ìçr¹qqqqqqñññÃ‡ð÷÷5jÔ«xF"@MMÍõë×¯^½š˜˜xÿþ}==½7ß|3((è�7Þ`±Xt§     è‹P@  ÍD"Qiié¹sç–,Y"ã4jÕŽùóçÏ™3'99ùÌ™3)))h �.Ò?ÿ‰D���S§N
-
-z®uÏ     <Ð  Ð';v,,,¬­­­»”••…B!µmff:uêÔ‘#Gb ŸÏOHH8sæÌ¹sçª««'Mš4wîÜ7ß|SYY™îh      ô{Ê3    z_QQ“É”. UTT[ZZ˜L¦††FSS“¦¦æÌ™3?ýôS'''£HSSS
-
-
-
-
-‹ÅÿüóÏîÝ»ÃÂÂÔÔÔBCC.\ˆÿV    `�S ;    !„P+A³Ùlƒacc3{öìyóæ6L,ûúúž8q¢¦¦f÷îÝhôzƒÁ`0t§xµzçÆèÑ£÷íÛW^^þí·ßÞ¼yÓÕÕõÝwßÍËË{Õ     Ðg¡€ €>¡µµuÊ”)_|ñE|||}}ý®]»JJJ¶nÝjooïÞ½³gÏÎ˜1CII‰î˜=ãUô¡´÷È´è;´´´,X�ššzþüù‡:;;‡‡‡çççÓ�     €X  ú–ÊÊÊ…ÆÅÅ¯Y³†ÃáÐ�¨çQEmÏþüÂcöT˜WqQ=…Þl/^ŒŠŠJKKûôÓO¿þúkUUUZb      Ð4  ô!çÎ�³°°Ø»w¯»»;Ýq^Ð½¬/d;uêÔ’%Kttt~ÿý÷¡C‡Ò˜      7a	  è+bcc§M›6þüÔÔTÚÛçööö˜˜///6›­®®G
-…7n6l˜ºººººú°aÃ~øáÉã©•(x<Þüùóµ´´ôõõW®\)]}JÖ©`üKrèÐ¡CÚÚÚ***¶¶¶Ë—/oll¤Í™3‡Á`¸¸¸H†‹Å...ã�wÞ‘1f'EEEÓ§Og³Ùúúú‹-âñx]Ïé.ŸÏÿê«¯†Êb±´´´Æ�öìYÙEmóùü¥K—)**Ê¾‡ùùùL&“ÅbÕÖÖJGjhh`³ÙL&S²ž²Œ{%Ï5ö¾���¬¬,++«#FÜ¼y“î8      ½E  ÐüöÛoL&sçÎ�t‹Åb¡PøÆo<õ/ÍÖÖÖ1cÆt=4vìX¡P(þ·ž9s¦ôÑ_~ùE2øS‡‰D¡¡¡]9;;766ŠÅâÚÚZBÈÑ£G©q~ûí7Bˆ¥¥eCCƒœ¿×ÔÔ˜™™IŸ,}¾ìï½÷^w${HHˆô~Ù÷pÖ¬Y„�uëÖI'ÿþûï	!Ó§OfÈg^#½ÚÛÛ#""´´´îß¿Ow     €ÞÐ'þ1  ƒ\yy¹––Ö·ß~Kw�ÿØ´i!„ÍfÇÄÄ”––¶¶¶&%%Qíç†!ÚÚÚ{öìár¹\.w÷îÝššš„�ï¿ÿ^üoåêááqÿþý†††ˆˆBˆ———ôø]ûÐ�;wBÌÌÌŽ?^]]Íãñ’’’¼½½	!+V¬ Î¹pá!dèÐ¡ííí
-
-
-×®]ënÌ®–/_N±´´¼zõjSSÓ•+W,,,¤ß(;†¶¶6!dóæÍuuu� %%%88XÆEIvšššž;w®©©‰Ú)ûÞ¾}›bll,¨óÛÚÚÌÍÍ	!IIIÏùÌk¤]GGÇäÉ“=<<ÚÛÛéÎ     ðÊõ•Œ À`¶råJggçŽŽºƒü‡››!$66¶ë!WWWBÈÞ½{¥wîÚµ‹2lØ0ñ¿•krr2u¨¬¬ŒÂb±¤ÏïÚ‡Ž1‚rýúué�………„;;;ÉžE‹B8°ÿ~BÈçŸ.cÌ®¨¥‡Ïœ9#Ùóûï¿K¿Qv;;;BÈ”)S¢¢¢;ýyÉ( OŸ>-½ó™÷pÂ„	Ò'=z”âçç'OÈg^c_ðøñc•?þøƒî       ¯B  ôsss]±bÝAþC]]�Ïçs¹\ƒN‡ÔÔÔZ[[«««õõõ%;«««ÕÔÔx<µüqkk«ŠŠ
-!D,+((�ÿ}^×gâ±X¬î–*VRR
-…Ô6�Ç£Ú[Bˆ††Æ­[·”””º³+UUU�@P__OÍe&„Ô××ëêêJÞ(;Æ…BCC¹\.µÇÖÖöäÉ“TYß] jg]]�ŽŽŽdç3ïabbb@@€««ëÝ»w	!£F�JNN>sæLPPÐ3C*((È¾Æ>bÆŒ±±±t     xµðB   _UUU§u{û;ª}&ROç“MF7*y¼!!äÉ“'uuuB¡°ººº¼¼\òØ½ž";Æ¸qãŠ‹‹Ï�;·lÙ2“,]ºTža¥ÛgyøûûûøøÜ»w/!!!99999ÙÉÉéÍ7ß”'äs}�LMM«ªªèN     ðÊ¡€  úYXXäææÒ�â¿!þùg×Cööö„�óçÏKï<{ö¬ä]ò ZéŽŽÉgggBÈ­[·žúûJ’Ó.\X__¿nÝºU«Vq¹Ü�>úHÆ˜]½öÚk„�ë×¯Kö$&&JŸðÌjjj“'Oþé§ŸÒÒÒ!ÔzÍò ÈsW­ZEÙ¼yóO?ýDùì³Ï$U¾ì�Ï¼Æ>"77×ÒÒ’î      ¯
-h   ßÌ™3÷íÛ×ÜÜLw�ÿ#„|òÉ'[·n-++ÉÉÉ3fÌ „„††B–-[vàÀ�šššššš}ûö}òÉ'’Cò V„HHH‰DÔžÅ‹B¦N�ºk×®ââb>Ÿ/òóówîÜéããC�óÛo¿ýùçŸçÝwß]¶l™……Å±cÇN�:ÕÝ˜]M�:•²téÒÄÄÄæææ«W¯FFFJŸ ;Æ¤I“âãã[ZZš››ÿøãBˆôgÉ€"Ï=œ2eŠ‹‹Ë_ýuêÔ)SSÓwÞyGÎ�Ï¼Æ¾ ++ëÊ•+³fÍ¢;     À«÷rKH  ô€††‹ððp‘HDw±X,
-…ãÆ�{ê_š­­­£G�îz(  @ ˆŸö,¾®{fÎœÙõïbËYˆÅâªª*jÅä¸¸8êüÃ‡B«««»³“šššNK�w:_ÎU5(¡¡¡²/ê©ažy¥/�òý÷ßwAFHy®‘^MMMnnn'N¤;     @oè+ÿ €A.))I]]}éÒ¥}§ƒþá‡\]]UUUY,V@@À™3g¨C­­­6l ©©©¹ººnÜ¸QÒœví:»î)++		ÑÕÕ•<¸�’��0sæLSSS%%%555ggçO>ùäÎ�;âë]___ÉÉ"‘ÈÛÛ›2kÖ,cvòðáÃ©S§²X,]]Ý?ü°¥¥¥k¼îb\¹r%$$DOOOMMÍÁÁaíÚµ<OöEu×üÊ¾‡”üü|Bˆ––Vccc×dÜ+y®‘.MMMþþþ666•••tg     èq_z"<  fñññ³gÏ5jÔÁƒõôôèŽ4Û½{÷|ðÙgŸýðÃtgé™™™Ô²gÏžµ±±¡;     @oÀÐ  ÐWŒ?>%%åÑ£GNNN‡Æ�H³úúúß~û�òþûïÓ�¥‚¨¨(///;;»””´Ï     0x € €>ÄÞÞþöíÛ,xÿý÷½½½©õŽé½�Á`èêê^¾|yòäÉNNNtÇy)�`Û¶m¶¶¶[¶lÙ¹sçŸþ©©©Iw(     €Þƒ  úUUÕµk×æææººº>üìÙ³t‡‚Þ¦ªª:qâÄ�;wÒäÅ	…ÂíÛ·ÛÙÙ}þùçóçÏðàAXXµ@6     Àà�5   ï*,,\·nÝ¡C‡lllæÎ�fjjJw(€g¸ÿþÞ½{�9Âçó###?þøcº!™M:  §IDATC     Ð4  ôuû÷ïß³gÏÃ‡Ç�?wîÜiÓ¦©ªªÒ�àÔÖÖ9rdß¾}ééé¾¾¾óçÏŸ5k›Í¦;      �P@ @ÿ ‹¯]»¶k×®S§N1™ÌñãÇOž<yÊ”)ÆÆÆtGƒA-;;ûÜ¹sçÎ�»qã†®®nXXØüùóéÎ     Ð' € €~æÉ“'/^<sæÌ…êëë=<<¦L™2eÊOOO&“Iw:x<Þõë×©ÞùáÃ‡VVVS§N�:uê˜1c”””èN     Ð‡ € €þª½½ýúõëqqqgÎœ),,ÔÔÔôóóó÷÷÷÷÷÷ôôTTT¤; (---III‰‰‰W¯^MMMmkkóôôœ6mZPP�››Ýé      ú(Ð  0&&&Rå`II	›Íöóó3fÌÈ‘#===555éýREEEZZZRRÒµk×RSSÛÛÛ9N@@€¿¿ÿ˜1cè     Ð×¡€ €�¦¸¸˜j¢oÜ¸ñàÁƒaggçíííååååååîî®®®NwFè£jkkÓþ•ššZVV¦¤¤ÄápÆŒC•Îzzztg     èOP@ À@ÖØØ˜‘‘‘þ¯üü|Bˆ“““‹‹‹³³óÐ¡C9Žµµ5Öëœø|~nnnNNNVVVnnnFFFQQ‘ŠŠŠ‹‹‹‡‡‡§§§‡‡‡‹‹‹ŠŠ
-ÝI     ú+Ð  0ˆ477ß½{7###333333++«¡¡AYYÙÁÁÁÑÑÑÉÉÉÉÉÉÎÎÎÆÆFCCƒî°ÐÃª««óòò²³³srr²³³‹ŠŠD"‘±±1ç_ÎÎÎx�      @OA  ƒZiiivvöýû÷³²²233srrZZZ!†††6]Ñ�ž­££ãñãÇ…]<yò„¢§§Çáp$³à9Ž®®.Ý‘     ,Ð   ÿ£¼¼¼kwY[[Ka±X–––æÿ²´´433377·°°PUU¥;ø ÓØØXZZúèÑ£Ç�—–––””””””––>~üX(2“®?E@Ý     Ð›P@  <[CCCaaaqq1Õu–——SEgyy¹P($„š››2ÄÀÀÀÐÐÐÈÈH__ßÀÀÀÈÈÈÐÐP__õójnnær¹\.·ººººººªªªú_ÔŸ5£Y]]ÝÂÂÂÔÔÔÔÔÔÜÜÜÔÔÔÌÌÌÚÚÚÆÆ÷     €v(   ^JeeeYYYYYYii)—Ë­¬¬¬¬¬¬®®®¨¨¨ªªâóùÔiC†ÑÕÕÕÑÑÑÕÕ•lH¥6ö#ïZZZêëëëêê¨¯’É×ÚÚÚšššêêjÉ­ÓÔÔ466¦jý!C†š˜˜˜˜˜P½³¶¶6½W      2 €  x…š››©&ºººº¼¼¼»îµµµUò%%%6›­­­Íb±X,–†††––µ­©©ImSs{utt!jjj2^J“’­¥¥…šÖ-ÑÞÞÞÔÔD]N[[›Œ—---TÅ,½Mm477744HãÁf³ŸÚÂëëë˜˜˜b"3     @ÿ…  €~<ORFSÕm§Þ–Ú�l±XÜÐÐ@áóùÒýuob±XÊÊÊL&SSS“zÉb±¨öœÍfK¶;5é’®YYY™–Ø      ÐkP@  ]ûèúúúNçðx<�@ðÌ¡¨ZYz�¤bf³ÙJJJ’—       ²¡€         €WB�î           00¡€         €W4          ¼ÿñh%©±ÛÕš    IEND®B`‚
\ No newline at end of file
+   IHDR  (  Ð   {lÝQ   bKGD ÿ ÿ ÿ ½§“    IDATxœìÝg\çÚðg�eéHï"ˆˆAQ4 *Æ†ŠQÀŽ’HD�‰‰‚%JÏ‰ž±‚1&*ŠbC±€Øb#Šˆ5TD¥HQa)²À²åý0çì»�e,ëõÿàfŸyæšqfvn¦1„B!     P%º     €úCá     *‡Â     T…     ¨œÝ  €•••UUUuuuµµµÕÕÕ\.·²²²¾¾žÃáPm„BaEE…ÄÑ™L¦���è×N�:1™LCCC===‹ellÌd2�ŒŒttttuuÛb~   }Cá  †Þ½{WPPPTTT\\\RRRVVV^^^VV&ú¡¼¼œÇãIW[[[___ô«‰‰‰Äf\.·¦¦Fô+›Ín.Œžžž©©©™™õ¯¹¹9õ³���ƒƒƒƒƒƒ­­-“ÉTv^  c`àqº  WiiinnnNNNnnn~~~qqqaaaaaaUUÕ@WW×ÚÚZt¬off&úÁÔÔT[[ÛØØ˜ÅbéééhkkwêÔIé0ïÞ½ãp8õõõÕÕÕµµµ¢‚çíÛ·eÿS^^^RRÂçó	!ÃÚÚÚÞÞÞÎÎ®sçÎNNNÎÎÎ]»vuvvÆÙ  µ�Â  càr¹YYY™™™™™™Ïž=ËÍÍÍÍÍ­®®&„hii988899ÙÛÛ;88ØÛÛ‹~033£;x³x<^II‰èÌõCaaannnii)ÕÆÆÆÆÙÙÙÙÙ¹G�½zõêÕ«—££#½± @9(<  Ú)6›}ëÖ­{÷î=xð 333++«¡¡�Édº¹¹uëÖMtNÀÙÙÙÑÑQÍ.Uª®®¦NãˆÎçdeeB:uêäááÑ«W/OOÏ>}ú¨Ù¼ ¨+  íE}}ý½{÷nþÏ³gÏ†³³s¯^½ÜÝÝ{öìÙ³gOWW×÷ö8»²²òÑ£G>|øðá£G�233KKKuttúôéãíííííÝ¿ºc €d(<  èÔÐÐpãÆ�.\¼xñæÍ›\.×ÆÆ¦ÿþÞÞÞ>>>~ø¡¡¡!ÝÛ¯‚‚‚7nÜ¸qãæÍ›wîÜáp8æææC‡1bÄˆ#ºuëFw@  ø(<  h�••uæÌ™‹/^¹råÝ»wÝºuóóó6l˜���ƒƒÝé:$�÷ðáÃôôôK—.¥¦¦²ÙìÎ�;�1ÂÏÏÏßßßÔÔ”î€  ï;  mD Ü¼y3))))));;ÛÒÒ’:,öóóëÜ¹3ÝéÔ
+ŸÏ¿sçu)==�Ïç2düøñAAA¨ë  è‚Â @ånÝºµ{÷îãÇ�¿zõªk×®'Nœ0aBÿþý544èŽ¦þÞ½{wæÌ™cÇŽ�>}ºººº_¿~S§Nµ²²¢; Àû… €ª°Ùì}ûöÅÆÆ>xðàƒ>ž0aB¯^½èÎõžª¯¯¿téÒ±cÇŽ9RSS3nÜ¸9sæŒ=ZSS“îh  ï  ­ïþýû6lHLLÔÖÖž5k–��Ý¡à¿êêêŽ;¶k×®ÔÔT[[Û/¿ürÞ¼y¸	 @ÕPx  ´¦K—.­]»öÜ¹s}ûö]°`ÁäÉ“õõõé’åååÅÅÅýþûïuuuŸþù¢E‹p €ê ð  hW®\ùæ›onÝº5tèÐï¾ûnÔ¨Qt'¹ÔÔÔìØ±cÃ†¯_¿]½z5nÿ  PÜ× ÐR%%%¡¡¡C‡522ºvíZjj*ªŽD__áÂ…999[·n=sæŒ››Û¯¿þÊçóéÎ  npÆ  E¶mÛi``°aÃ†àà`ºã@‹TWW¯\¹róæÍ={öŒ‹‹ëÓ§Ý‰  ÔÎx  (©¶¶ö³Ï>ûê«¯ÂÂÂ²²²Pu¨CCÃ6üý÷ßzzzƒÚ·oÝ‰  ÔÎx  (ãÅ‹'N|ñâE||üÇLwœö…Á`BTñý¢ºžáñxß}÷Ý†ÂÃÃ×¯_¯¥¥¥ê) ¨=  
+ËÉÉ:t¨��Mbb¢££#ÝqÚ5(<(IIIŸ}ö™¿¿ÿþýûQ{  ´
+  Å”——{yyY[[Ÿ={ÖÐÐ�î8í‘Ú„�ŒŒŒÑ£Gúé§[·nm³‰ ¨%Üã  ˜Y³f	‚'N´AÕÁ`0ŸÏÿé§ŸºtéÂb±zôè'Þ†ËåFEEõéÓGOOOOO¯OŸ>ëÖ­khh�Ò-�Ç‹‰‰ùðÃôôô†š’’"go2#Qµ�¨%Eôé¾}û†Ú©S'‹åââ²lÙ²ÊÊJê£É“'3Œž={
+jˆ@ èÙ³'ƒÁ îŸ‘Þ³Š0`ÿþýÛ¶mKHHPõ´  Ôœ  ävüøq�«W¯¶Íä¨õ¬Y³íº>L5¨««ûè£�šîÛ‡Æår%öÉår%>íWÎÞdFjî»F „„„4ýÈÝÝ½²²R(–””P¯���§ºÚ³g!ÄÒÒ²´´TJÏm <<ÜÊÊŠÊ	  ÊAá   ooïiÓ¦µÙä¨ck‡”””ÊÊÊ‚‚‚ÀÀ@Bˆ¯¯/Õ`Íš5„�N�:íÚµëÍ›7oÞ¼Ù¹s§‘‘!díÚµû\¿~=!ÄÀÀ &&¦°°°®®îÚµkãÇ�—³7™‘DmMwÇŽ„;;»Ã‡—––r8œk×®yyyB"##©6{÷î%„899q¹\.—ëääD9vì˜ôžÛ@EE…±±ñÆ�Û~Ò  j… €¼rrr!—/_n³)RÇÙçÎ�ÉÍÍ%„R¿zxxBâââÄÇŠ��%„ôéÓGbŸ½{÷&„lß¾½éGòô&3’°™ò ÿþ„�+W®ˆ¤i·nÝDCÆŽKùí·ß¶lÙB			iº@$Î—ªÍ›7ÏÛÛ›–I ¨Ü\  ¯Ìš5«ººšÉd¶Í©{jkkutt¨!B¡PCCƒüïk]]ÝºººÒÒRsssÑX¥¥¥–––ººº§iŸzzzµµµoÞ¼±°°hô‘<½ÉŒDš¹\__ŸÃáhjjŠ>¢¾‡!L&“ËåRÍŠ‹‹ÝÝÝuuu©~>|H]%¥ç¶‘˜˜8}út‡£­­ÝöS P¸¹ @^¯_¿677o³ªCDtˆOÄn°¦—‘¨j�Ïçóù|�@ DõƒøÍë¦¦¦–––L&“ÃáXXX´jpåÙÚÚòùüÒÒRºƒ  tT(<  äe``ðîÝ;ºSüƒ««+!äôéÓâOž<IéÞ½»ÄQ¨áÉÉÉ­Ò›DT)ÂãñÄº»»BnÞ¼)ñü»¨Yddä³gÏ~úé§ï¾ûîÁƒÿú×¿döÜ6ª««	!x€2 €ÒPx  È«W¯^•••Ïž=£;Èÿ£žµpáÂøøø·oß¾}ûv÷îÝ‹/}ÔÔŒ3!‹/þí·ßŠ‹‹ëëë¯_¿>aÂåz“ˆºˆ+11±®®N4ð«¯¾"„ÆÆÆæçç×ÖÖÖ××?}útÇŽ¤Ú\¸paË–-={öüôÓO.\Ø¹sç6üõ×_Ò{n·oßvtt¤nµ  e¨ü.  uÑÐÐ`mm½bÅŠ6›¢ÄµøÀºººÁƒ7Ý·:´¾¾^bŸ\.wÄˆ¿äéMf$¡P8sæL‰ß5,�òeT^^nggGIII¡Úïß¿ŸÒ¹sg6›-½gUnnnóçÏo›É ¨%  
+øñÇMMM_¿~Ý6““ç(¿®®nÍš5:::ºººQQQÍU.—»nÝ:j}}ý¡C‡ž8qBÎÞä‰TQQ1oÞ<GGGÑý0¢�.\¸0yòd;;;&“©««ëîî¾xñâ{÷î	…ÂiÓ¦B$j,¨çíNŸ>]fÏ*¯©©™••Õ6“ PKxª €8NÏž=ûôésôèÑvrŸ7¨Zaaa¿~ýBBB¢££éÎ Ð�¡ð  PÌõë×‡²dÉ’Ÿþ™î, rl6{ÄˆB¡0==]OO�î8  ˜Ý  :ŸØØØ™3gr8œõë×kiaGª¶
+Ølö•+WPu  ´žj  °3fìÝ»wÛ¶m£G�Æ‹ÔUjjj¿~ýêëëSSSéŽ Ðá¡ð  PFHHHZZÚóçÏûõë—žžNwhM|>íÚµ£F�4hÐ�7œ��éN  Px  (éÃ?¼}ûv÷îÝ<{öì·oßÒ�ZAFFÆ‡~¸|ùò•+W;v/î  h-(<  ”gaaqîÜ¹={öœ:uª{÷îÛ¶m£å¥ÚÐ*^¿~={öìAƒÝ½{wùòåxp @+Bá Ð"cÆŒOž<ùä“O¾þúënÝºmÝºµ¶¶–î\ €üüü¯¿þÚÉÉéôéÓñññýõWÏž=é  nð8] €Vóüùó6ìÙ³ÇÈÈháÂ…_|ñ…‰‰	Ý¡@šÌÌÌuëÖ%$$ØÙÙ-^¼xÖ¬Yúúút‡ PO(<  ZÙ›7o6oÞL�÷?~ü¬Y³FŒ¡¡�3ÌíHeeeBBÂ®]»nÞ¼Ù»wï¥K—ãÉÈ  *…Â @%8Î‘#GbccÓÒÒgÎœÜ£Gºs½×RSS÷íÛwôèQBÈÔ©SgÏžíëëKw. €÷
+  ÕÊÎÎÞ¹sg||üë×¯ÝÜÜÆ�?qâÄ?ü7.·‡söìÙ¤¤¤“'O²Ùl//¯Y³f…„„à‰U  m	… @[àóù×®]KJJJJJÊÍÍupp7nÜðáÃ‡baaAw:õôøñãÔÔÔ.œ;w®¾¾~Ð AAAA&Lprr¢; Àû… @[{ðàARRÒ™3gnß¾Íçó{öì9|øðaÃ†<ØÔÔ”îtÛÓ§Oÿúë¯ÔÔÔ¿þú«¤¤ÄØØxØ°aãÆ�D� @/  ´©­­MOO¿páÂÕ«WoÜ¸Áãñlllúõë×¯_?__ß�êééÑ�±½ËËËKKK»sçÎ�;wîß¿ÿîÝ;ccãQ£Fùùùùùùá¥ã  í
+ €váÕ«Wiii7oÞ¼yóæßÿ]SS£££ãéééééÙ»wo�ž={Ð“~ÅÅÅ™™™÷ïßðàÁíÛ·Ÿ={&
+mll¼½½û÷ïïããããã£««KwL  h… @»Ããñ=ztãÆ�[·nÝ¼yóñãÇ<OCCÃÙÙ™*B\]]���»víjffFwXâóù………¹¹¹¹¹¹�=zðàÁýû÷ËÊÊ!–––žžžýû÷÷öövpp ;,  È€g– ´;ZZZ½{÷ÖÖÖ¾víZVV–±±ñ¿ÿýo[[Ûû÷ïgffîÞ½ûÅ‹�€bllLU ÎÎÎNNNöööööö« áñx%%%EEE¢J#''çÅ‹\.—¢££Ó£G�^½z�3†*½¬¬¬èN  ŠÁ €v'%%%***==½{÷îßÿý´iÓ´µµÅp¹ÜüüüÜÿÉÉÉÉÍÍÍÏÏ¯ªª¢èêêRˆ½½½µµµ¹¹¹™™™©©©™™™è&“Ù6³SSSSVVV^^þöíÛ²ÿ)///((xõêUAAAII	ŸÏ'„0kkk'''gggQAåììlkkÛ6Q @uPx  ´|>ÿþýÑÑÑwïÞõòòú÷¿ÿ=vìX…^y^]]]XXXXXøòåKêBqqqII	u ÿîÝ;ñÆ†††ÚÚÚÆÆÆ,KOOÏÀÀ@[[»S§NÚÚÚúúú¢f&&&§ÅårkjjD¿²Ùì†††wïÞq8œúúúŠŠŠ†††êêêÚÚÚºº:ñEÅOnn®��Í'Ÿ|":QckkÛ¨Ä  µ�Â €~õõõüñÇ–-[ž?>nÜ¸ÈÈHU¼N»¾¾žª@Dÿ644TUUÕÕÕÕÖÖVWWs¹ÜÊÊÊúúz‡C�"
++**$öÆd2ÅovïÔ©“É444ÔÓÓc±XÆÆÆL&ÓÈÈHGGGtŽ…úWôæÄ'NL›6mäÈ‘			¸ @í¡ð   ‡ÃÙ±cÇÆ�‹‹‹CBB.\Ø·o_ºCµ�+W®öéÓ'99ÙØØ˜î8   B(<  èQ^^¾yóæß~û­²²2,,léÒ¥...t‡¢Á£G�üýý���Ïž=kooOw  P  m­¨¨hÝºu»vísæÌY¼x±££#Ý¡è”ŸŸïïï___öìÙîÝ»Ó  T… @ÛyòäÉÏ?ÿ|èÐ!ƒÌŸ?ßÜÜœîPíByyù¸qã²³³O�:åããCw  h}
+<,  ”vãÆ�€€ ww÷ÔÔÔµk×¾xñbåÊ•¨:DLMMÏŸ?ïíííççwöìYºã  @ëCá  Z)))¾¾¾>>>999qqq999âÏƒŠ¾¾~rrr@@@PPPBBÝq   •¡ð  P	>Ÿß·oßÀÀ@�wâÄ‰‡†††â=Rhkk8p`Á‚!!!6l ;  ´&-º  ¨›ºººmÛ¶ýúë¯999ãÆ�Û¼y³*^Ê¡®Æúõë-,,–.]ZZZúË/¿ˆÞû  
+ €VSYY¹iÓ¦mÛ¶•––†„„9r¤OŸ>t‡ê�"##­­­çÌ™SRR«¥…o+ €»r €VPVVöë¯¿nÙ²¥¦¦fîÜ¹ááá]»v¥;TÇöÙgŸ™˜˜L›6�ÍfãÕæ  j �Ó h‘ÂÂÂõë×ïÜ¹SKKkáÂ…óæÍ³²²¢;”ú¸~ýú¸qãºuëvòäI333ºã  €òPx  ()++ë—_~IHH033ûöÛoÃÂÂŒŒŒè¥†ðjs  õ€§Z (ìúõë={ö¼|ùòºuëž?�ªCEÜÝÝ¯^½Êãñœ��Mw  P
+  y	…Bê¥ÈÍÍ�‹‹£J}}}º£©9GGÇk×®ÙØØ80##ƒî8     ²‰¿”C ˆ^ÊÁd2éŽö¾½Ú|äÈ‘xµ9 @G„Â @šººº˜˜WW×™3gÚÛÛ§¥¥]»v-   /—h{Ô«Íƒ‚‚<Hw  P§  õRŽ?þø£¬¬lúôéÇŽëÝ»7Ý¡ÞwÚÚÚû÷ï·³³ûä“OŠ‹‹¿ùæº €¼Px  4öêÕ«5kÖìÞ½»¡¡áóÏ?_¸p¡““Ý¡à¿Æºuëìíí-ZTXX�³O  
+ €ÿWPP°zõê={öèêê.Z´è«¯¾²´´¤;Habb2{öìŠŠ
+ê%*t'  °§  „�Ç�¯Y³&!!ÁÂÂ"**jÖ¬Y†††t‡iBCCMLL‚ƒƒÙlö¡C‡ðjs €v/€÷]FFÆÏ?ÿ|êÔ)—ýë_ÁÁÁ,‹îP /¼Ú  £ÀS­ à=%z)ÇÀ�_½z•œœüäÉ“ÐÐPT‹��ÏåË—‹ŠŠ>úè£¢¢"ºã  @³Px À{‡ÇãÅÇÇ{zzBÎŸ?ûöí€€ ì;$êÕæ|>ß××¯6 h·ð- ï‘ÚÚZÑK9ÒÒÒ®^½êççGw.h)êÕæ¶¶¶xµ9 @»…{< à½PQQýûï¿———OŸ>}éÒ¥½zõ¢;´²ššš)S¦\¹r%11qÌ˜1tÇ €@á jNôR�7gÎœE‹uéÒ…îP *\.7,,ìÈ‘#qqq!!!tÇ €ÿ‡Çé€ÚzöìÙªU«>¬§§·hÑ¢¯¿þÚÂÂ‚îP ZÚÚÚûöí³³³ûôÓO_¾|‰W› ´¸Ç ÔÐ£G�¦N�êæævéÒ¥¨¨¨/^¬\¹’öªƒ!FKKËÚÚ:((èÊ•+8�Á`ôïß¿�Cªƒ±víÚM›6-[¶,""BÍNì1Œ±cÇŠ
+…Ã‡g0Ó¦M£†Ü»woÙ²eýúõ300`±X..._ýuaa¡Ìþ©õSþáDÖºJ�èââÂãñ¤w(¾�èèèXZZúøø,X° ¹›v„BabbâØ±c­¬¬´µµ­¬¬>þøãC‡‰ÿ�÷íÛ—Á`<xPbd0}ûöm ‰!enÅÍÍ�”åÉÐtÞ---ýýý8 fk;¨!! €IOO7nƒÁèÞ½ûž={êëëéNôÿ$î„544N�:Õ¨åãÇ�E>|HKZ5°gÏ&“ÊåréÎÒj^¼x¡¯¯O9zô¨h`tt4!ÄÚÚº¬¬Œ"qe311¹ÿ¾ôþ›;6hn¸ÌuUôill¬ô¥«Œ?žÍf‹7®®®þøã�%63fLuu5ÕlË–-„???‰3;bÄBÈ–-[d�RâVÜÜr�>¢<¤Ì»ŸŸ_ee¥ô$ 4Bá ê@ œ8qbÐ A„//¯'Nðù|ºC5&~ôP__Ÿ™™9zôh*p£–K–,!„PoY´hQ›'U'NœÐÓÓ¨©©¡;K«Y»v-!ÄÞÞž:¼ÎÊÊ¢ÞÚž’’"jãéé¹~ýú»wïÖÔÔTVVž<yÒÉÉ‰2lØ0é�7:Æ•9\æº*:&îÒ¥‹xØ´Cñ!<¯¬¬ìêÕ«K–,ÑÑÑ¡’QãI“&B:uê]PPÀårcbbLLL!“&M¢š±Ùlƒ‘ŸŸß(X^^ujETÒ47�Í…”¾+7¢<¤Ïû¸qã¤�@# Ð±544ìÙ³ÇÃÃƒúÆMKK£;Q³šRBtttÄr¹\KKKBÈï¿ÿN177oWçm:œë×¯›››÷ïßÿíÛ·tgiÔ3Ù–,YÒÐÐàååE™5k–ô±nÜ¸AÑÕÕ•ÞL¡ÂCžu•ÑÝÝ�òÇHé°¹Iß½{×ÈÈˆ’˜˜H9þ<!D__?33³QãÌÌLêŒÐ…¨!Ô3V¬XÑ¨å?ü@			‘@zH‰[±Ò#ÊÌ Ï¼Ÿ>}Zz º ð €ŽŠÃáDGG;99ijjÎ˜1ãÎ�;ª˜
+uÀápæÏŸoii©©©)üß_ÝÝÝEçUø|>uh5uêTé]‰¡Ž<ÌÍÍÅ=z”Ò»wo¡PHT¢ã-PÎ£G�>øàƒ‚‚º24]‘”[‹(×®]£n˜1c!ÄÑÑQæ6ÕÕÕ„kkkyrÊ9\žu•1!!�âààPWW×\‡RŽ¹W¯^M™8q"õ+UK¬\¹Rbã•+WB>ùäê×‹/R‹Hü,(ŸÏïÜ¹3!äâÅ‹ò�ÒFâV¬ôˆ23È3ï2× º ð €Ž§¼¼|ÅŠ–––L&sÆŒ*½‚: ŽEÇ%%%¦¦¦„�øøxªÙž={!–––¥¥¥Ò»¢~¿ÖbÆŒâÍ¨«·7oÞ,
+cbb!þþþªš½÷F~~¾›››££cVV-š®HÊ­E"Ÿþ9ÕƒÁ¸té’Ìö±±±„�1cÆÈ“SÎáò¬«Ôˆ|>¿G�„�_ýµ¹¥sSw’888P¿ROÄnnÃÏÌÌ$„8;;S¿
+ê2³sçÎ‰ÚüùçŸ„'''ñË·-<¤lÅJ�(3ƒ<óîèè(= ]Px @GR\\nhh¨§§ÞôºíVGØÙÙ�:uJtÇªP(Ü»w/uàÂår¹\.udsìØ1™]52tèPñK€ŠŠŠ455Y,u—pYY‹ÅÒÐÐ ñOõj£¬¬làÀ�¦¦¦ééém?u‰+’k‘ÈË—/544!ÁÁÁ2?|øÐØØ˜Á`È¼QâZ*"ÞRÎuU4â�!¶¶¶µµµB�ÚÚZ"v�u×ÕOS‡üó¢²U«V5ZPS§N%„üøã�rÎ»ô6�¶b‰äQfyæ]æu_ tAá CvvöŒ3X,–©©éŠ+äù“p« ¾ò%R�4ýí·ß¨'çˆ_,.¥+qæææâm¨#¤iÓ¦‰†7=Bå¼{÷nÌ˜1úúúm|s+’¢k‘ˆè%&&&oÞ¼‘ÒòáÃ‡666„�ï¾ûNÎœ2�¿…r¯«¢ù|¾››!dÓ¦MB�ššÒ‚ÂC¡IúŒË³K$çˆ23È3ï&&&2ó Ð… ´w·nÝ7nœ†††½½}tt´øi‡6@}å———7ý¨¨¨ÈØØØÚÚÚÚÚÚÆÆFô$Sé]Q?¿|ù2<<œbjjúòåKj @ pvv&ÿ¼&äÜ¹s„gggñkB@i³fÍÒÒÒÚ¹sg[N·¹IÑµˆråÊMMMêÎŠÐÐÐæZ^»v�º kîÜ¹ò¬BÍý7.ÿº*>â¾}û!VVVT!!áñèÑ#BHçÎ�©_ºÔŠ"ÿUaû”ØFâVÜÂef�gÞ=<<¤‡ 
+ h¿ÎŸ?O=!×ÍÍ�®—rH9àp8Ýºuspp022òðð�¯iWÔ_»ÃÂÂ¨_©»`›#~,´„@ Xºt)õžÁ6›hs+ÞøÐ¾    IDAT’¢k‘P(¬®®¦ú¿ÿþûììlêQ¶ýõWÓ–'OžÔÓÓ#„|ñÅr®rò¯«â#òx<WWWBõD`ùêærÑCr§OŸNùÏþ#±q£›Ë)Ô}ð}úô
+…½{÷&Íß/±O)mmÅ-Qfêæréó>þ|éa è‚Â Úñ—rôïßŸÞ—rH9X°`!dÏž=¿üò!déÒ¥Šv•��­¥¥¥¥¥•��-üß!Esä¿äÍ`0ÂÃÃÛæTRs+’¢k‘ð·•÷îÝ›ªR¨ÇÂ~ðÁ�Þ“§¥¥Eùê«¯äŸG9ù×ÕF#ÆÇÇBÌÍÍå/<îÝ»G=N÷È‘#ÔêÖpy§Kár¹„�mÛ¶©Oþ•²p$¶i´·pD™¨ÓJÒç½éG í
+ hG¨—rPï(h'/åhî8àüùó£gÏž|>¿¶¶¶sçÎ©©©Šv5wî\BÈäÉ“Eo:ËËËkÔ¦  @CCCüMgÐ*âãã©£µÁ«Í%þï+±�>}š¢­­-zymm­‹‹!dÍš5¢f¢S
+ááá-ÏÙh¸Bëj£y<•VzáÁãñÊËË¯^½úÍ7ßH|�`PP!ÄÄÄ$&&¦°°�ËåmÞ¼¹ÑÅÉù®C%–�h+nùˆòd˜8q¢”yoúÆ€ö… ´555ÑÑÑ]ºt¡^Êq÷î]ºý—Äã€òòr;;;"ö®èýû÷B:wî,¥6�ØUqq±®®.ƒÁ˜9s&!ÄÏÏOâ¸#GŽ$„lÙ²¥³¤¤¤èéé�7NÕ¯6oú¿¯ÄZTVVFÝ&þóÏ?‹§þ
+®§§'zÎižô3ÈSxP÷ÁË¹®6íp÷îÝR
+‰‚‚‚-“ªª*êq´MùûûK¼Œz&/Eâ=RH_>¢­øÖ­[—‰ü#Ê“¡ººÚßß¿i‹Õô,‰Ó ÖE  õR�ðððçÏŸÓ�è$~mO›6�2hÐ Ñ�@@½@zúôé
+u%
+###E‡�8.õ(ROOO¥f¤½Ú\¥�Jkú¿¯ÄZD=6ÊÇÇ‡Çã5úˆê-00P|rµ¼ððôô”]mÚaCCC×®]›©­­mnnîååõõ×_7÷øc�@���àïïoaa¡¥¥eaaáïïŸ�� åº²B¼½½¥Ì»ôƒ~é[qsÅ˜ü#Ê“¡Ñ¼SOU&„üòË/�:çóù„--­æR´1†PÖ³ó  T¤¸¸xíÚµqqq.üòË/­­­éï£Ç�ûûûž={ÖÁÁ�î8 ŠY¿~ýÒ¥K™LfRRõü.Jzzº¯¯ï²eË¢¢¢hŒ ‚Â h���½zõêC‡.]ºtÞ¼yÔÍ£ tyùò¥¿¿YYÙÙ³g©»Œ :�ýë_«W¯ÖÕÕýóÏ?L\¶lÙ¡C‡?~LÝt@; Ð¦nÝºõã�?ž>}ÚÞÞ~ñâÅsæÌÁ7"´l6{Ü¸qOž<III8p Ýq Zª{÷îëÖ­¤;À¡ð €6’’’•žžþÁDFFNŸ>�ÉdÒ
+àjjj¦N�zùòåÃ‡‹_²  -§Aw  PsB¡011±_¿~���Ô:>|ŠªÚ!}}ýäääààà   ]»vÑ @­hÑ  ÔVCCÃÁƒ×­[÷èÑ£±cÇÆÄÄøúúÒ
+@--­ØØXssó9sæ¼}ûvÙ²et' P(<  õq8œ;vlÚ´©¸¸xúôéûöíëÝ»7Ý¡ äÅ`0¢¢¢lmm/^\\\¼iÓ&ÑK @i(<  5•——oÞ¼ù·ß~«©©ùüóÏ#""œ��é ŒˆˆSSÓÙ³g³Ùì�;wââ@ €Bá ­£¨¨hÝºu»víÒÒÒŠˆˆøê«¯,--éÐ"3fÌ011	f³Ù‡ÒÓÓ£; @†§Z@K=yòäçŸ>tè�™™YdddXX^ÊêäæÍ›cÇŽuvv>uê”¹¹9Ýq  :*\´
+ Ê»yóf@@€»»ûõë×wìØ‘——�ª£µ0ƒÑ’Ð*¼½½¯\¹òêÕ«�>ú¨°°�î8­làÀ�£ÿþr¶oùZ‡õà½…Â ”‘’’âëëÛ¿ÿW¯^%%%=yò$44”ÅbÑ�@%zôèqýúu---ŸÌÌLºã´š¬¬¬ŒŒBÈÍ›7=zDK†¶¬CPó Ð… (€ÏçÇÇÇ÷íÛ700P(ž8qâÖ­[xæ¨=[[ÛË—/;992$==�î8­cçÎ�„êOÔÏm@(â2o€÷Ž @.õõõ111nnn3gÎ´³³KKKKOOÀŸáýabbrîÜ¹�Ž5êôéÓtÇi©†††½{÷B¢££	!{÷îår¹t‡ u†Â d¨©©‰‰‰quuýæ›opÿþ}ê:+ºs)ƒºÐ‚Ãá|ñÅæææ†††&LÈÏÏoÔ ¶¶vÁ‚VVVZZÿÿè¿}ûö:´S§N,ËÅÅeÙ²e•••¢O¯^½:cÆ{{{&“iff6jÔ¨sçÎ5�ô»wïÂÂÂŒ��mllbbb!åååŸ~ú©‰‰‰¹¹ùòåË›þ%XJÚ¦¤‡„–ÓÓÓKNNž>}zPPP›�"P‘”””7oÞôîÝûË/¿ôððxûöí‰'µÉËË?~¼���¹¹ù¼yó8N£J¬Øâ×;‰ÿ ¢¢ù•2­æ6|‰yšÄv /! @3ÊÊÊV¬Xann®««ž——Gw¢–¢ö{'NßÚÛÛ—••‰7˜4i’øNR „„„4Ýº»»WVVŠ�(ŽÁ`$%%5šô„	ÄÛ$''{{{‹‰��W4-õ³<!¡µ‚ÈÈHƒ±fÍº³(ïã�?&„lÞ¼Y(RÕ‚¿¿¿xƒ·oßÚÛÛ‹¯N¢µQÔFé[üçFš,±±œãJŸõs£¿QT‰ù±Ý(… HPPPn```bb²bÅŠ×¯_Ó�¨uPÇŽŽŽýõWuuujjjçÎ�	!Ë–-o`ggwêÔ©êêjjàŽ;¨�‡.--åp8×®]óòò"„DFFRmÆŒsæÌ™ŠŠ
+.—[TT´iÓ&Bˆ——W£I÷éÓçþýû•••_}õ!ÄØØ¸Ñ�Aƒ)šVþ�Ðº¢££544ÂÃÃù|>ÝYVTT¤©©Éb±¨:¶¬¬ŒÅbihhˆÚ,[¶LâHšJ¬ØÍý*…´‚ãŸƒôšÞhÃo®=¶; ¥¡ð €xüøñŒ3´µµíìì¢££«ªªèNÔš¨#†'Nˆ†?~œÒ£GñÇŽ‹zÒè•+WÄæääBºuëFýzáÂ…€€ kkkñ«³tttM:##ƒúõåË—‡XZZ*šVþ�ÐêöîÝËd2?ýôS.—KwÅ¬ZµŠ2mÚ4Ñ�àà`BÈ�?þ(âææ&qlZ6(±b7÷«JI/<møÍµÇv 4¼@ þëÆ�?ýôÓéÓ§]\\–/_>mÚ4mmmºCµ2êÊl6›Ý©S'j›Í655ÕÑÑ©­­5(//711�¥¯¯Ïáp455	!Ô>“Ú�B˜L&—Ë=tèÐôéÓ%îNE©žëêê¨'	…BêQ`�†0�@ PZj2C¶ÞR„¸páÂÄ‰û÷ïìØ1CCCºãÈE(º¸¸äææž;wnäÈ‘ÔÀóçÏ�5ÊÙÙùùóçÔª¥££S__ßt$­±b7ê¡mŽFš›–Ä¿¹öØî ”†›Ëà¿/åðññyýúuRRRVVVhh¨úUòktðAFðù|>Ÿ/�è@¤¡¡�üï�Ä_~ùevvvmm­P(|÷î�ÄžE¯:ÝœÚhˆÒ‡_2C‚Šøùù]¸páÞ½{~~~oß¾¥;Ž\RSSsss	!£F�Ýf=jÔ(BHnnnjjª¢ªnÅÇ�CKúo´áIá©š_Û€BPx ¼¿¨—rxzzš˜˜¤¥¥Qo"Wû—r¤¥¥‰~¾|ù2!ÄÉÉIJ{wwwBÈÍ›7%ž8&„PWV¬Y³ÆÕÕUGG‡rñâÅ6N+3$¨õjó’’’�>ú¨  €î8²I—èSjMkº¶.êàžÇãµzÏ-Ÿ–••!DüQrâKƒ`»P”¬k± @ÕÖÖFGGwíÚ•Á`L™2åÎ�;t'j#Ô~OÎÛµEvíÚE±¶¶Þ±cG^^‡Ã©««ËÎÎÞ¾}û€„B¡‹‹!äûï¿/++c³Ù‡¦ŽWˆÔÙeQ(­Ì� jÅÅÅ¶¶¶÷ïß§;‹4l6[GG‡Á`4}N]AA�†††ŽŽ›Í*rs¹x'r®Ø¢_---	! ÎªTsÓjîˆhøðá„�ÀÀÀ‚‚‚ªªª“'O:88`»P
+€÷KEEÅŠ+¬­­™LæŒ3233éNÔ¦¨#†F�þlîµâ,X åÏ7k×®m4044´µŽÏäO+=$´�òòòAƒ™˜˜\½z•î,ÍÚ²e!ÄÏÏOâ§Ô-[¶l*ò8]ñä\±E¿Îœ9³ÍV×æ¦ÕÜt›¾&rÖ¬YØî ”†­à}ñöíÛÈÈH###==½ðððüü|ºÑ€:x÷îÝìÙ³MLLôõõƒ‚‚rss5�8î…&OžlggÇd2uuuÝÝÝ/^|ïÞ=¡PÈãñÖ­[×­[7‹åììüŸÿüGty·”žå<>S(­”�Ð6jjjÆŽ«§§wòäIº³HæééI9pà€ÄO8@ñôô¤~ÍÍÍÔ××755ýüóÏkjjZ½ð¨¨¨˜7ož££#“ÉTõñzsÓ’2Ý]»v¹¹¹1™L‡ÿüç?¢Ë´ÄÛ`»�žj þ
+×¯_¿sçN‹µ`Á‚ùóç›››ÓŠmùüxoñùü/¿ü2..nÛ¶m³gÏ¦; @{¡%»	 tX�?^³fMBB‚••ÕêÕ«gÏžm``@w( 5§©©¹}ûv33³Ï?ÿœ:ÓHw" €v…€zº~ýúêÕ«OŸ>íêê«–/å h·Æš5klll/^üòåËM›6©ýÃâ  dBá V„BáÉ“'£¢¢ÒÓÓ½½½“’’ÆŽ‹# ZDDD˜™™Íš5«¼¼|×®]¢û
+  ÞO8PM_ÊqãÆ�÷á¥
+¡nn£;¼G>ýôÓÓ§O'''üñÇÕÕÕtÇ  ŽH :¼ººº˜˜WW×Y³fyxxüý÷ßÔ›ÈéÎ „âççwñâÅû÷ï�1¢´´”î8  ´ÁS­ :°ÊÊÊM›6ýñÇ•••sçÎïÚµ+Ý¡ @‚¬¬,}}ý³gÏŠ^Ã ð^AáÐ!½zõjÍš5»wïf0.üòË/­­­é Ò¼zõÊßß¿´´ôìÙ³tÇ hk(< :˜‚‚‚Õ«WïÙ³ÇÀÀ`þüù,033£; È…Íf>zôèÄ‰¸ Þ7(< :ŒG�EEE%$$X[[/Y²dÎœ9úúút‡ Åp8œ©S§¦¦¦>|xìØ±tÇ h;¸¹ ÈÈÈèÕ«×�;wbccsrr"""Pu tDzzzÉÉÉ!!!AAA±±±tÇ h;x�@û%þRŸääd¼”@P¯6·³³›;wnQQÑÊ•+éN ÐPx ´G<ïÀ�6lÈÌÌ;vlZZ.P'cåÊ•¦¦¦‹-b³Ùxµ9 ¼Px ´/µµµÛ·o�‰‰)((		‰��ïÝ»7Ý¡ @%ÂÃÃÍÌÌÂÂÂÊÊÊâââðjs Po¸¹ ½¨¨¨ˆŽŽþý÷ß«ªªæÎ�áììLw( P¹‹/N˜0ÁÛÛûøñã†††tÇ P ô£^Ê§©©1oÞ<+++ºC@Û¹uëÖØ±c»térêÔ)ºã  ¨
+ :={ölÕªU‡655�ŒŒ322¢; ÐàÉ“'£G�ÖÓÓûóÏ?ñjs PK¸•€wîÜ	pss»~ýúöíÛóòò"""Pu ¼·¨½‹Åòññ¹ÿ~£Oóòò222h	 ÐZPx ´µk×®xyyååå%$$<yò$44”ÅbÑ� hfcc“ššÚµk×aÃ†]½zU4üÍ›7Ã‡Ÿ7o.R €…@ëÒ…Â””__ßAƒ•——'''gffN™2ÏÐ “.>ÜÏÏïèÑ£„�ªªª#F>xðàðáÃt PŽx ZÁõë×GŒÑÜ#y<õTÜ   “´´´ôôô€€ ƒÑÆ9 ýc±X‡
+Þ²eËˆ#²³³ù|>!dñâÅõõõt Pn.h©;wî>¼ªªêÒ¥KÃ†ÿHôRŽÂÂÂéÓ§óÍ7tå€D DDDÄÆÆòx<�GÔÔÔ\·nÝ¢E‹èÍ  œñ h‘7n:´¦¦FSSó§Ÿ~g³Ù+W®ìÒ¥Ëwß}ðôéÓøøxT  'ƒÁf³DU!„Ïç¯X±¢¼¼œÆ`  JCá ¼‹/2„Ãáðù|>ŸéÒ¥ŒŒŒ—/_FDD8::nÞ¼yÞ¼yùùù111NNNt‡€Žäûï¿?xð u…•¸ÚÚÚõë×Ó	  …p©€’ÎŸ?ÐÐÐ º­œÉdöèÑ#77W[[{þüù,077§7$ tD¿ÿþûW_}ÕÜ§,+??ßÚÚº-# ´
+ eœ8qbòäÉ|>¿éÃ¬–.]úÃ?Ð :ºÂÂB//¯7oÞB$~G3™Ì°°°mÛ¶µy4 €Á¥V 
+KJJš4i’ÄªC[[ûõë×¨: @i/_¾LNN<x0!DKK«Qƒ†††ØØØG�Ñ‘ @y8ã ˜cÇŽ‚æ^Ü¡©©™““ãèèØÆÁ @ýÜ»woëÖ­ñññ<Oü~--­Q£F�:uŠÆl  ŠÂ œ8q"88Xâ¹ƒñë¯¿¶e* PW}úôÙ¾}ûë×¯7lØ`ggGÑÔÔ$„ðx¼Ó§O§¦¦Ò @8ã /)ç:“É$„ðx<�@```ðâÅSSS:b€zâr¹‰‰‰ÑÑÑ·oßf±X\.·ÿþtç �—ú7nÄ~Z®°°ðæÍ›B¡�Áøÿ­FKK‹Åbéééééééêêêèèèéééèèèêê²X,�÷âŒâ€/^Lw
+h�2226nÜHw
+5Äf³Ÿ={VTT$dccCw" Mbb"Ý Ðø–5õ“‘‘qýúuºƒ@VUUURRÒ­[7ªºýK]óð>»~ý:Ý ý*,,<räÈäÉ“é¢nLLL¼½½=<<òòòž?nmmÍ`0èm­¨¨{`èpÔ¿ð „øøøàO ª0eÊº#@{‡Ý¯JQ¯b±Xt�¶vøðáàà`ºS (æ½(<   Ôuw @‡ð^\ƒ     ôBá     *‡Â     T…     ¨
+     P9      r(<     @åPx     €Ê¡ð      •Cá     *‡Â     T…     ¨
+¹0ƒÑtˆ‹‹�Ç“§¥øÏÒ5×�ÈÀ�FÿþýåŒªñ$ZZZÖÖÖAAAW®\Q:‰ü‹ˆ¢££ciiéãã³`Á‚ŒŒ‰=…ÂÄÄÄ±cÇZYYikk[YY}üñÇ‡
+…ÍÍÎ˜1cÄ‡�3¦ÑWˆô§=z4((ÈÆÆF[[ÛÀÀ W¯^óæÍ»~ýº¢Íd®*„�üüü/¾ø¢k×®,KOO¯W¯^·nÝŸ–<m Ô^s[}w¹tíèúöíË`0<(±‡ƒ2Œ¾}û6ÐÜÎD¡¯€æH\˜Šî·›QôWÑq	!<o×®]#GŽ´°°`2™ÆÆÆžžž,¸qã†Üs R	ÕÝäÉ“'OžÜÂNš.+ÑŒ��•§e£±dþ�4÷¿óøñcQË‡ÊU‰9mDCCãÔ©SÊ%‘I4~üx6›-Þ¸ººúã�?–ØxÌ˜1ÕÕÕM{ÖÒÒb2™eeeÔÀ·oßRC”[V2g¼ªªÊßß¿¹9R´™”…C5¸{÷®±±±ôNäi£œVÙ¾@]:t¨åëXëjnµonx;ßÑmÙ²…âçç'qfGŒAÙ²e‹Ì ÒCJü
+�¢é¼+±ß–¸èúÂUtÜÒÒR™‹¨ýh‡Û€Lê¿ÊªºðèÒ¥—Ë•ÙRÎne~´dÉB‹Å"„,Z´H¡>å!>z}}}ffæèÑ£	!^^^Ê%Qtñx¼²²²«W¯.Y²DGG‡2lØ0�@ j<iÒ$BH§N�¢££
+
+¸\naaaLLŒ‰‰	!dÒ¤IM{¦ŽïwìØAÜ¾};õm§Ü²’9ã���„“õë×?{ö¬¾¾¾¦¦æñãÇÛ·o8p ¢Íd†>|8!ÄÃÃãÏ?ÿ,++«¯¯ÏÎÎþí·ßÄÿËäi£ E;<0jnƒjá.—®›ÍÖÑÑa0ùùù�‚åååQ§VD%�<{<ù¿äìD¡Ùinô–|áÊ9.ŸÏ6l!ÄÖÖö�?þÈÏÏçr¹ïÞ½{øðáÖ­[}||äŸý6Ó·/ ™Ô•UiááîîNùã�?d¶”³[éq¹\KKKBÈï¿ÿN177¯¯¯—¿Oy4½¸¸˜¢£££\’–,¢»wïB©!çÏŸ'„èëëgff6jœ™™©¯¯O¹páB£žãââˆØ©¿îÞ½[‰e%sÆÏœ9C166ÎÊÊ’Ò�œÍ„rü‡êêêBž>}ÚÂ6ÊAáR´Ã£æ6¨îriÜÑ…„„BV¬XÑ¨å?ü@			‘@zH‰_
+u¢Ü~»i‡Ê-d9Ç=vì!ÄÊÊª¨¨Hþ9¥W;Ü¾ dRÿUV¥…GBB!ÄÁÁ¡®®NzK9»•þÑÑ£G	!½{÷
+…â_Tòô)�æ¾uÌÍÍ•KÒÂE´zõjBÈÄ‰©_©¯Ø•+WJl¼råJBÈ'Ÿ|Ò¨g6›­­­­©©ùúõë×¯_kjjjkkWTT(±¬dÎø´iÓ!?ÿü³ô~äl&”ã?ÔÖÖ–rÿþý¶Q
+�¢5·Aµp—KãŽîâÅ‹„GGG>Ÿ/jÃçó;wîL¹xñ¢<¤´‘ø P'Êí·›v¨ÜB–s\êœLLLŒü³I»v¸}È¤þ«¬J>Ÿß£GBÈ¯¿þ*½¥œÝJÿˆºFvóæÍB¡0&&†âïï/Ÿò]ü<ûŒ3”KÒÂED]`íàà@ýÚ¥KÒÌ•ÖB¡033“âììÜ´ç€€ BÈÖ­[ûí7BH`` ôé6GæŒ;::BdžÇ�³™<!çÍ›G100Û½{÷ƒx<žm”ƒÂ¤h‡FÍmP-ÜåÒ¸£NNN„�sçÎ‰ÚüùçŸ„'''ñË·äÙãÉù 'ŠÎŽÄœ-YÈrŽKÕiª8-¬:ípû�IýWY•B¡ðÀ�„[[ÛÚÚZé-åéVÊGEEEššš,‹ºIº¬¬ŒÅbihhÈÙ§<ˆ$C‡}ûö­ÒIZ²ˆjkk	!ºººÔ¯ÔÅÐT?Mq8ñÆâ=ïÛ·�š‘!C†Böïß/}ºÉ3ãÒ*ÚLØÌÿˆxòêêê   ñáFFF3gÎÌËËu"Oå ð )Úá�‘”ª…»\wt«V­"„‹†L�:•òã�?Ê9ïÒÛ4ú
+�©QŸJï·›Qb!Ë9.Rt>DâÒ�	´�v¸}È„Çé¶Tpp°››ÛË—/ÿøã•N(..ŽÏçO˜0ÁÔÔ”bjj:~üx�@ ºWAEÌÍÍùå333¥“´d	eƒÿC`` ŽŽÎ•+WÒÒÒtuu©»E×�tIII>\³fÍÄ‰»téRUUµ{÷nOOOêO‰r¶ qhG¦©©™””T^^N)//ONNÖÐÐ˜9sfKº¥4ý
+ QK²<ã
+e•¦ ÐRtW>*§ê3Âÿý5ÝÊÊª¦¦FzK™Ý6÷‘@ pvv&ÿ<™~îÜ9Bˆ³³³¢'Ó¥ýåË—ááá„SSÓ—/_¶$‰Ò‹èÑ£G„�Î�;S¿¶ä”ýÄ‰©_EOPQhYÉ9ãm©USÙÙÙ~~~DÒe!
+µ‘Îx€íð/²ÍmP­²Ë¥kG'l½qe~È£Ñ„ZëR+êgE²œãRûä'OžÈ3GíD;Ü¾ dÂ�V0mÚ4WW××¯_S÷¨Bjjjnn.!dÔ¨Q¢·;�5Š’›››ššªŠ‰ÚØØÄÄÄŒ;¶¼¼|ùòå-I¢ô"JJJ"„xyyQ¿0€BÝñÙ5œjÓTppp£"çŒSS§bK!g3å¸ººîÝ»—’––Ö’6 ï­·£›={6!d×®]ÿ="    IDAT]¢©!-!ñ+@	-Ùo7Õ’/\)ãRRRRí Cwå£rmpÆC(ÆÇÇBÌÍÍe¶Tî#ê© ÍQô�‰R4=;;[KKKKK+;;»%I”XD÷îÝ£ž2yäÈjuÇ¤����e¬©©Ñ×××××¯©©‘>]‰äœqê9¹�:u¢Wsäl¦hHê^U==½¶‘	g<@ŠvøÙæ6¨ÖÚåÒ²£
+…\.×ÂÂ‚²mÛ6Ò‚‡­7mÓè+@�:iÉ~[â…²œãRûd33³œœ™sÔN´Ãí@&õ_eÛ¦ðàñx...¢¯%éã*ú‘èQMo.((ÐÐÐPôQRH}îÜ¹„�É“'·$‰œ‹ˆÇã•——_½zõ›o¾‘ø^-ê&i“˜˜˜ÂÂB.—[TT´yóf9_D%ÿ§âšqêSSÓ�7æääp¹\‡“••%ñ‚2›ÉÙ»wï_~ù%##£¼¼¼¡¡áÍ›7Ç�wss£�üm”ƒÂ¤h‡FÍmP­µË¥eGGi•×ËJÿ
+�>®”NZ¸ßnÉ®üãRûdssó�7>}ú´®®®ªª*+++**ª…_¬*Ò·/ ™Ô•m›ÂC(Šßq(½¥¢mÙ²…ˆ½ÿ®‘‘#GB¶lÙ">¢DrÌ¨äHÅÅÅºººƒºUQ¡$â¤/"‰‚‚‚D_ð”ªª*êñŽMùûûWWWËœ9?§ÐAUUõ®téÿr6“²p¤7èÔ©Óßÿ-å ð )Úá�Qs[½øp%v¹âÚ~GG¡ÎaR$ÞP!%€ôå#ú
+¸uë–Äe"qBJÏNs‹N|ˆü_¸ò�[UU5vìX‰!õõõwïÞ-Ï¼·¥v¸}È¤þ«l›]»v•§¥¢yzzB8 ±%õˆ@OOOñ%’cF›�)êG¡$â¤/"Š¶¶¶¹¹¹——××_�žž.qB� !!ÁßßßÂÂBKKËÂÂÂßß?!!Aüï…ÒgGžOÅ)ô_@%LLL°¶¶ÖÒÒÒ××ïÙ³ç¼yó222ÍˆÌf2ÿCïÝ»·|ùòAƒ™ššjjjêëë÷êÕkÑ¢Eâý”§�rPx€íðÀ¨¹­¾…»\ñm¿£¡nTðöö–2ïÒ¿¤4WŒ‰kúx\Eg§¹E'>Dþ/\ùÇ¥œ8qbÒ¤Iööö,ËÐÐÐÓÓsùòå%%%2g¼íµÃí@&†PÝ7eÊBHbb"ÝA Ô¶/�âðáÃÔË%èmçï¿ÿî×¯_×®]Ÿ?Nw5‡í:"-º   @‡'ž>}ºhÑ"Bˆ¯¯/Ýq  =Báña0R>}Ïÿj‚…  “ô]%…ÅbQwº 4‚÷x   @+0229rdjjj¯^½èÎ íÎx¼Gðg{)°p  dÂ® Zg<     @åPx     €Ê¡ð      •Cá     *‡Â     T…     ¨
+     P9      r(<     @åPx    tHùùùtG P 
+   €ÉÉÉ©G�‹/>wî\]]Ýq d@á   Ð!Ý¾}{æÌ™7oÞ3fŒ¡¡¡¯¯oTTÔ�;w„B!ÝÑ $@á   Ð!õë×/22òêÕ«¯_¿>pà€³³sTTÔ‡~hccš˜˜XQQAwF€ÿ§Ew€¶pýúõ)S¦Ð�â¿AII‰¥¥¥–VÇXø�@Cj{QXXhkk«©©Iw�ÿº~ýº��Ý) ]k?»_ uRTT$þ«¹¹ù”)S¦L™R__ùòåÓ§OŸ>}zïÞ½:::C†?~ü„	¬¬¬èJ@a¨ýÉ¸�7fddÐ�‚B***^¼xQPPÐÐÐàëëkiiIw"Ùø|þµk×ÌÍÍ{ôèAw çÏ?ÿd±X|ð�££#ƒÁ ;!„0`ñâÅt§€ö(##cãÆ�t§ y±Ùì¼¼¼¾}ûÒ�˜˜(åÓçÏŸŸ>}úäÉ“ýõ—@ ðõõ�4iÒÄ‰íììÚ,!€8õ/<h———·gÏžƒ>}útÐ A¡¡¡ÁÁÁÆÆÆtç’­ººzÌ˜1999—.]BáÑN¼zõjÕªU±±±®®®¿üòK@@ Ý‰ @M>|888Gj©¶¶öÂ…‰‰‰ÉÉÉUUU|ðÁ”)S‚ƒƒñåm…‡ªÔÔÔìß¿?>>>##ÃÜÜ<,,ì³Ï>ë@[8Uuäåå]¼xÑÍÍ�î8ðEEE«V­Úµk—§§çÆ�}}}éN 
+�÷A]]ÝùóçOž<™””ôæÍª	è×¯ÝÑà½€Â£õ=~üxÛ¶m(//6lXXXØÄ‰uuuéÎ¥€ªªª1cÆäçç_ºt©{÷îtÇÉnß¾~ãÆ�™3gþôÓO666t'€…Ç{¥¶¶öÏ?ÿ<vìXJJJEEEß¾}'OžâèèHw4Pg(<Z�ÇKJJÚºukjjjçÎ�ÃÂÂfÎœÙ¥Kºs)Œª:
+
+
+.^¼èêêJw�F(îÛ·ïÛo¿­ªªZ¾|ù’%K˜L&Ý¡  CBáñ~âr¹—.]:vìØñãÇËËË:yòd###º£�ÂÓŠZA^^^DD„……ÅôéÓÍÍÍÓÒÒ^¼x±råÊŽXup¹ÜI“&ååå�;wUGûÇ`0fÌ˜ñäÉ“¯¿þú‡~ðòòºuëÝ¡   ÃÐÖÖö÷÷ß¾}ûë×¯/_¾Ü½{÷…šššŽ92>>žÃáÐÔ
+
+åñùüÄÄÄ‘#Gº¸¸<x0""âÅ‹‡î¸Ü‚ÐÐÐ;wîœ?¾ÝŽ†††kÖ¬ÉÊÊ²µµíß¿hhhyy9Ý¡   #ÑÐÐðõõÝ¶mÛ›7o<¨££3gÎ;;»ÐÐÐ.àT´
+Ê(++‹ŠŠrss›:u*!$!!¡°°påÊ•¶¶¶tGk‘ˆˆˆääääädwwwº³€ÂºvízêÔ©¸¸¸³gÏöë×ïÒ¥Kt' €ŽGGGgÊ”))))%%%QQQ¹¹¹#GŽìÒ¥Ë·ß~ûìÙ3ºÓAÇ†ÂC1ÅÅÅË–-ëÚµë¿ÿýï~ýú]¾|ùüùóS¦La±XtGk©˜˜˜­[·îÛ·oðàÁtg%1ŒÏ>ûìÉ“'¾¾¾~~~óçÏ¯©©¡;  tH¦¦¦sçÎ½zõêßÿ=iÒ¤øøx77·Ñ£G9r¤¡¡�îtÐ!¡ð�×Ã‡gÎœéììþâÅ‹„„„�>úˆî\­ãäÉ“‹/Þ°aÃ¤I“èÎ-ejjºwïÞ3gÎ?~¼[·n)))t' €Œzt{aaáéÓ§���?ùä‡ï¾û.''‡îhÐÁ ð�A(¦¤¤øúúöêÕëÎ�;;vì(..þñÇÕéÑ¥ÏŸ?ÿì³ÏBBB.\Hwh5£G�¾uë–‡‡Çøñã—/_ÎçóéN  ˜¦¦æèÑ£>\PP°páÂÄÄDWW×‘#G9r„ÇãÑ�:Íª««‹‰‰éÞ½{PP�‰‰IZZZfffhh¨¶¶6ÝÑZS}}ý”)S\\\vìØAwhe¶¶¶gÎœÙ¸qã†üüüJJJèN  ž••Õ·ß~ûôéÓ³gÏvêÔ)$$ÄÉÉéçŸ.--¥;´w(<$`³ÙÔÃp—.]êããs÷î]ê¤Ý¹T"<<¼¨¨èèÑ£:::tg�ÖÇ`0"""îÞ½[^^Þ³gÏ3gÎÐ�  Ô�††ÆÈ‘#‹‹‹çÏŸ¿mÛ6›€€€.ÐÚ/ÿPSS³víZWW×uëÖMœ8ñÑ£Gñññ½{÷¦;—ª?~|ÇŽÛ¶m³··§;¨P�=®^½êïï°~ýzºã  €ú°°°ˆŒŒ|úôéÎ�;_½z5räH__ßãÇ�º£A»ƒÂã¿jjjÖ¯_ïää´jÕªÏ?ÿüÅ‹[·níÖ­Ý¹Tèõë×sçÎýòËÿcï>ã¢¸º€Ÿm°ô"‘"DM0±DÑÇ(EAÅL¬EQ£Æ�hIìÆ((¨¨IÄkŠÑÄX cCƒ‚ØPÀ. �íï‡yŸ}6[fg—Ý�Ýåü?øsgîÜ9÷rgfÏN›>bÄºcAzggg·k×®ŒŒŒ…N˜0¡©©‰îˆB™KKË	&\¾|ùüùó#GŽ
+
+ÊÌÌÄÃ’ÅÀ7Â¼zõjåÊ•7nd±XŸþùŒ3ìììèÊ†rûöíë×¯[YYÑ2œ.>ÜÝÝýÈ‘#¾¾¾t‡ƒ2ûöí3f~+@:q÷îÝï¿ÿ>++ËÎÎ.))iÆŒ­Zµ¢;(D¿}Æãõë×)))mÛ¶ÍÌÌ\´hQEEErrrÉ:víÚuìØ±­[·bÖÑÒ¼ûî»çÎ�ãóù}úô¹víÝá „2C���›6mzúôéÂ…333½¼¼Æ���ßE-4ñ�¦©©©³fÍºwï^ËI9  ®®îÓO?�4iR¿~ýèŽÑ 00°   cÇŽýúõûý÷ßé!„�y²··Ÿ3gNYYÙªU«þøã����9sæTUUÑ¢M‹K<„Bafff§N�V­Z5nÜ¸ÒÒÒ””gggºã2¨Å‹‹Åb¼É¸%sttÌËË=zôàÁƒñIÊ!„ôÇÆÆæ“O>¹ÿ~ZZZnnn``àôéÓ<x@w\ˆ-+ñÈËËëÚµkRRRllìÝ»wÓÒÒÌé=€Ý¸q#==}éÒ¥NNNtÇ‚èÄb±233§OŸžššJw8!„Ì™……ÅÔ©SoÝºõÃ?äççwèÐ!11Ï~´4-%ñ(,,ìÙ³gTTT÷îÝïÝ»·qãFoooºƒ¢Ç×_Ý©S§)S¦Ð¢“ÉÜ°aÃ7ß|3wîÜU«VÑB!3Çf³Ç�W\\œ››{áÂ…€€ ¼÷£E1ÿÄãÁƒ£G�îÝ»7‡Ã¹páÂŽ;Ú´iCwP´¹téÒ¡C‡V­ZÅb±èŽ‹/¿ürË–-.\²d	Ý± „jxéÒ¥ŒŒŒÓ§O‡„„|úé§/_¾¤;(¤wæœxÔÕÕ}þùç�;w¾zõê‘#GÎž=Û£Gºƒ¢Ù’%KÂÂÂ"""è—©S§fff¦¤¤,_¾œîXBµl6{êÔ©wîÜYºtiVVV``àêÕ«ñ½æÍ<‘H´eË–Ž;fff._¾¼´´tèÐ¡tE¿âââ_ý599™î@�1úøã�SSS¿üòËM›6ÑB¡–‚ËåÎ›7ïáÃ‡_|ñÅ²eËÚ¶m»eË‘HDw\H/Ì0ñ¸råJŸ>}fÌ˜]RR2gÎ‡CwPFaÝºu:t>|8Ý� #5kÖ¬µk×Îš5ëÐ¡CtÇ‚B¨±¶¶NNN¾yóæ AƒûôéSPP@wPH÷Ì*ñ¨©©ILLìÑ£‡¥¥åÕ«W·nÝÚZ¥ÊÓ§OwïÞ=oÞ<&Ó¬þèH·>ùä“/¾øbìØ±ø~„BÖºuëŸ~ú©¤¤ÄÇÇ§OŸ>C‡}øð!ÝA!]2“ï |>ÕªUyyy‡þóÏ?»téBwPÆeË–-ööö~ø!Ý� c÷í·ßŽ1bìØ±wïÞ¥;„B-N‡öíÛ÷Ë/¿”””„††¦¥¥	…BºƒBºa‰Ç�7Þ{ï½/¿üròäÉ×¯_ÇÛ9	…Â­[·N™2ÅÊÊJ·53d°Ùl�ØØØ³gÏjWL"‘8p 66ÖÓÓÓÂÂÂÖÖ6$$$11ñÂ…äaP\P"‘äääDGG»»»[XX¸»»GEEeggK$¥ÊíìˆéÚ•T¤EïÉ!i�››[DDÄž={[§6ªíÛ·wìØqØ°aÿüó�FËê	3óf¨…À�×¨6^z;�<<EC†¹uëÖ7ß|óÕW_?~œ¼<2SÆãñRRR,,,Þyç�¿ÿþ›îpŒ×‘#G˜Læƒt^³ÒAÅd2sss5-VWWGò¸-’(.X__¥´Lddd}}½Ò€·mÛ¦8]»’ºí=ê­8pàë×¯É#QôìÙ³Ö­[:T$iº¬Î5§£p˜5§÷¨·N»a†ŒJvv¶Úá¤©æ?Üx›Ó{rõI'¨Z/¹;wîDFF2Œ‰'VWWS\
+'N<þøã�¶mÛÚÙÙeffŠÅbºÃ1jQQQQQQú¨YvßÁãñŠ‹‹ aaaš‹‰‰ ''§5kÖÜ¹s‡Çã½yó¦¤¤dË–-½zõ"‰�â‚qqq àèè˜ššZQQÁçó+++ÓÒÒˆ7¸ÇÅÅ) ~~~|>_iC4-©“ÞS…¼uC†!_\©³gÏr8œ•+Wj±¬ná03ãa†Œ‡þâÿ¸ñÒ¸ñC'�G¨Ö�¼¼¼ÜÝÝ‰Ó/ÈD™dâÑÔÔôÙgŸ±X¬¾}ûÞ¾}›îpŒÝƒ˜Læ�ôQ¹âÞäÑ£G Àår5*FœBupp(--Õ( Šž<y lllŠ‹‹åfÛØØ À©S§äîÜ¹3 lÞ¼™¤!ÔK*Òº÷´hÝ±cÇÈƒQêûï¿g³ÙZ,«C8ÌÌ{˜!#¡ïÄƒ€¯ª’ŠtµñI'�¬š¢7oÞ$''³X¬~ýú•••5¿Bdx¦—x\¾|¹sçÎ¶¶¶éééx¢ƒŠeË–¹¸¸455I§»€†††¤¤$777‹%ùïï�;w–^Z#‰ˆÊèÑ£UU®j·èââ¢Q±±cÇÀòåË5mÅããã %%EéÜ”” 7nœ\À{÷î iï©ÚŸR)©HëÞÓ¢u$Dr±±±­[·Öîì¶âHÃa†Ã-iâ�Ç9¦¾ñI'�¯�ºóçÏwêÔÉÞÞ~óæÍø=Ðä˜RâÑÔÔ4{öl&“óøñcºÃ1!!!3gÎ”�Bìˆ£ˆtwðôéSggg Ø±cQ,++ ÜÜÜ^¼x¡ªrÙ½‰ì‰à�>úH£b¾¾¾  éOYÔôóó€7n(�[\\ r‹D¢    Ø°aƒbC4-©H‹ÞÓºu¾¾¾äÁ¨òâÅOOÏ‘#Gj±¬âHÃa†Ã-¹Ä�R¦¾ñI'�¯]#<ï›o¾áp8‘‘‘ø…Ð´˜LâQRRòÖ[oÙØØ¬_¿\ênÞ¼	 gÏž•�Hì¼½½ssseïÛ¹s' øûûóù|>Ÿïïï $©”	ùò¥FÅ¸\. 466jÚ@Š’khh  +++¹€%Éž={ ÀËË‹X–dª¶¤¢æôžlýTZ'wj^#¿þú+ƒÁ8tè�¦*i8Ìä–à0CÆA.ñÀc„”yo¼ë¥±5ÇÍ›7»wïnooŸ™™ÙüÚ�a˜Fâ±eËkkë>}úÜ½{—îXLLJJŠ———Üƒ‰ˆm^éÑ":: 222ÒÓÓ >>ž¼~Å]‰‹‹Kaa¡¦ÅŒö "‰:vì ëÖ­“�TÔ–T¤uïÉí¸©´ÎÉÉ‰<rü±»»»¦\©i8Ìd–à0CÆA.ñÀc„”yo¼ë¥±5ŸÏ_¼x1‹Å1bÉ™7d<Œ=ñxòäÉ Aƒ,,,RSSñD‡‚ƒƒå®³’üwPSS£X¾ªªÊÁÁÁÃÃÃÃÃÃÓÓSíMÙÝÇãÇ�gÏž ÎÎÎr§>Õ3ÎÓèÄÿwíÚ îîîoÞ¼!9¨¨-©H‹ÞÓºu]ºt!†Ü«W¯¼¼¼&Ož¬ÑRªF3Å€q˜!ÚÉ%xŒ�2õ�×¨:A~ûí7ooï6mÚäççëo-H'Œ:ñÈËËsww¸xñ"Ý±˜¤’’ 8}ú´Üt’]@CCC»ví|||ìíí»téÂãñÈW¡Xñ{Ø¤I“4*FÜú¶bÅ
+
+ÍúŠ~ðÁ ðÍ7ß(�«êž9âÿB¡°}ûö °zõjòý)yIEZ÷žâŽ@òÖ%%%‘£VVV“É<wîõETEŽÃL1`fˆvr‰‡Ò2¸ñ*lü¯Qu‚žTWWÇÄÄ°Ùì•+WâïÔÆÌH±X¼fÍ6›�çÎ´¶dÉOOOÅÀ‘ìfÍš YYY+V¬ €�¯B±ª²²26›Íf³eu§¶ñ°?GGGM�GqÁ'N €­­­FO	”~Ü±c ¸¸¸¨ÝŸ’”T¤uïÉùí·ßÔ¶Nq–¦Äbqÿþý»wïNý•‚ª"Ça¦4`fˆ^TÜx•lä¯±u‚þdeeYYY…‡‡?zôÈ «CZ0ÆÄ£®®nÔ¨Ql6{õêÕ˜¶6G—.]¦OŸ®8]Õ.àäÉ“#88X$566¶iÓ†Éd*ž0Q[UBB È>‰J1âõFÎÎÎk×®½wïŸÏohh(--¥ør(µÆÆÆ€““SZZZee%ŸÏ¯ªªZ¿~=É{‘¤…Ba`` ü—v%5§÷äŒ1‚¤u‹/&_œ¢’’‡#û¼vrJ#Ça¦*`fˆ^jÜxUlü¯Qu‚^úúúz{{Ÿ9sÆ0kD1ºÄãÒ¥KmÚ´ñóó»téÝ±˜¶»wïÀ‰'g)ÝÔÔÔx{{ÀÑ£G‰)»wï€6mÚÔÖÖªZ‹Òª=zdeeÅ`0¤D*Åêêê"""@’–R\°®®Žx¡¢ˆˆÙ'·(xûöí÷§ªJ*Ò¨÷È[W__¯´,--Ï›S‰M•¹sçººº¾zõŠJaÅá0#o3D#òÄ7^òvùÆkl� WÕÕÕC‡åp87n4ØJEÆuTØ¿¿��]ß¾}ñ©ÌÍ—––æààÀçóg)Ý×€öîÝ[:E,‡……À| j-ªö&ÉÉÉ 0pà@�Š‰Åâœœœ¡C‡zxx°Ùl›àààÄÄDÅ‡xÈ¡¸ X,Þ»woDD„««+›Ívuu�ˆˆØ»w¯â‰5Å€AÛ¶m©ìOU•T¤Qï‘-äZÇd2‰ŠõŠD" `³Ùä±©R]]ÝªU«¯¾úŠJaÅ q˜‘·‡¢yâ�/y»Lbã5žN0€ÔÔT‹õÁ444xÕˆ„±$b±8%%…Á`ÌŸ?_ ÐŽ92dÈðáÃéŽÑæ»ï¾ ‡“››+;ýüùó ðÙgŸi]óºuëlllž<yÒì‘ÉÓß0C†'M<2Ç�wttìÙ³'°Œ“$Q6˜×¯_GGG¯^½:;;›¸§œîˆLž@ 8sæÌþóºA´ùôÓO-Z$FŽyîÜ9éô#GŽ´iÓæë¯¿ÖºæéÓ§;99-_¾\a"Ó¦¿a†BÍqöìÙgÏžõêÕëÆ�t‡ƒ  Ò“tPVVÓÔÔtäÈ‘®]»ÒŒÙ(,,ìÕ«×­[·:tè@w,È¸tèÐá»ï¾#n4ÔÚ†>ûì³»wï×|#$G'ÃØ¾}ûÆŒCû·„t«ººzÔ¨QW¯^=pà þ K;šÏx…‡‡s¹Ü³gÏbÖ¡C¿ÿþ»��fH‘ê7³’„„éóÚ’£“a†BÍ×ªU«“'O~ðÁƒÞ¸q#Ýá´tt&üñGxxx×®]óóó‰×j"]ùý÷ß@wÈlYZZ~þùç[¶lyòä	Ý± „BdX,Ö¦M›–-[–””4gÎ±XLwD-m‰Ç¶mÛÿë¯¿ÚÚÚÒ†YzóæMAAžODz5eÊ''§õë×ÓB!¤^rrrFFFFFÆÔ©S‰'ï!Ã£'ñX¿~ý´iÓ,X°qãF‹EKf¬  @ 8�î@�9ãr¹3gÎÜ¼ys}}=Ý± „Bê%&&<xpÏž=ñññ�€îpZ"�o¿ývîÜ¹iii+V¬`0†Àì�={¶}ûöžžžt‚ÌÜŒ3ø|~VVÝ� „B”ÄÄÄœ<yòøñã111���t‡Óâ4ñ‹Å3fÌXºtivvvRR’!WÝ¢üõ×_={ö¤;
+dþœœœ&Nœ˜ššŠ×Ë"„2}úôÉËË+(( ^ÇNw8-‹á±X<}úôŸ~úéÐ¡C#GŽ4Øz[‰Drùòå·Þz‹î@P‹�””tÿþýcÇŽÑB!DU¯^½~ýõ×¢¢¢ØØØ††ºÃiA”xˆÅâiÓ¦eeeýüóÏÑÑÑ†YiËT^^^[[ûöÛoÓ²ö^½z1ŒwÞy‡byƒÑÌËíš_ƒÖx<^rr²¿¿?‡Ã¡�ÑêIPPP¿~ý233¿j�›I�4„Z2‰DràÀ�ØØXOOO[[Û���ÄÄÄ.ÈËÉÉ‰ŽŽvww·°°pww�ŠŠÊÎÎV|-	ã¿"##e§GFFJg)-Ï`0Øl¶——×¨Q£®\¹¢X†¤ÕÈçÊ…¤¶€\.—ëææöî»ïÎš5«°°�j§·ï½÷Þ‰'®\¹Ççóé§Å0ÀÛÑÅbqBB—ËÍÍÍ5ÀêZ¸ììl6›ÝÐÐ`øU—””HÇÕ�7¨,ÒüA(WƒÁFµD"Y´h‘¦›’!Ã3˜Ÿþ™ÉdVVVr¥š6“if9l�ÊÎÎ6¶‘VWW¡öL}}}TT”Ò2‘‘‘õõõ²uÓÙl6‡Ã©™ÿm¤    IDAT®®&&¾|ù’˜¢¸¹)­–Ãáœ9sF®ICT5�XŠd®\cÕ /3lØ°ÚÚZ-ÿfê¯¿þ²³³‹‰‰tÇÒ"èýŒ‡D"ùøã�wìØqôèQUû¤CW®\éÔ©“•••áWýÃ? €¥¥¥ôÿ@ŒcÃ¬KÎÏ?ÿ àñxtÅ`†fooOô†Á~°Ñ8Òj±>üðÃ¼¼<''§5kÖÜ¹s‡Çã½yó¦¤¤dË–-½zõ’›8qâ±cÇSSS+**ø|~eeeZZš““ÓñãÇ'Nœ¨XóÀ�ÁÁƒ‰�
+…$Oƒ$ö MMMW¯^_}õ•¦ÍQú=LqºÒÂTêQ,#
+«««ÏŸ??þ|.—{øðá#Fà®LV�=òòò~ÿý÷I“&áýŠ† a¢¢±9sæXZZæååé{Eˆ0`À€I“&~½|>ßÍÍ 6mÚ ...Ä×qr:„†ÕâIÐb±˜ú"†Ï�¦N�Ú©S'ƒ­N‹ÁfÒ#Í\‡26ÆvÆãøñã àààPZZJRìäÉ“ `ccS\\,7«¸¸ØÆÆ N�:%�HlP?ýô 8�˜H¼ùjûöíŠ››â”ÊÊJ °¶¶&)#G£­˜¤0•zT•)**²··€œœŠ‘´¿ýö›¥¥åÌ™3éÄüéw³|ùr&“¹k×.½®I‰D"‡ôôtÃ¯úÀ� *‘Hºté¢t×vÿþýØØX›V­ZMŸ>ýÍ›7rûGâc}}ýÄ‰ííí=<<RSS%Iuuõ¸qã[µjµpáBÙïú²5,µVµ¢sçÎ}øá‡ÞÞÞl6ÛÙÙùý÷ß?qâ„â‚ÄÿAFFÆ»ï¾ëêêÊáp<==ãââNž<)-¼sçÎ~ýú988XXX´mÛvÁ‚¯^½ÒGsšïÜ¹s pùòeÃ¬Ní`3›‘F¾.âÿIIInnn,K1T¥ñLh€!Ã0¶ÄcìØ± °|ùròbñññ �’’¢tnJJ
+ Œ7N:…Øjkk-,,X,Ö³gÏž={Æb±,,,^½z¥¸¥(N1ÑÄC"‘,[¶ ˆ“HÎž={˜LæúõëéÄÌéqóã�?2ŒmÛ¶éoHÎ�;w    Àð«&®£#¶Ø´´4 ˆˆˆ�-ðòåËÖ­[Ë~y1b„Ò¯ƒÃ‡—-väÈ‘=zÈNÙ±c‡Ü"²ÿWúM‘ÒÂÍYVétƒqøða¥ÑNž<YU=b±˜8”ÊéÜ¹óë×¯5ù³ˆX,nÛ¶íìÙ³³:òÁfN#�|]Äÿãââ”NWZñ“`È0Œ-ñðõõ òÓ‰ÄÏÏTßëU\\ Ò)ÒmaèÐ¡ °qãÆŒŒ ˆ‰‰‘(Û|d§ðx¼k×®0  úöí«´ŒRjP,L¥’2ÄÝq>>>#ii¶nÝÊd2:Dw æL_»˜C‡±X¬+Vè©~¤ÔÁƒÆ?ÿücàõVUU±X,KKKâF½êêjKKK&“YQQ!-óÙgŸ€¯¯ïŸþY__úôé6mÚÈí‰�]»v½~ýúë×¯gÌ˜ rSz÷î-·ˆª�$”~Ÿ“C¥Ù)‘‘‘Ç�õêŸÏ¯ªªZ·n „……)]ÄÚÚ RRRªªªø|~uuõÑ£G$‘H¶nÝ
+ ÞÞÞûöí{ñâECCCAAAXX $''Si�á¥¤¤´jÕŠÊõuÍ¤v°µ„‘&;ÝÛÛ;77WööY¥åe'šâ C`l‰—Ë€ÆÆÆæ#ž”jee%�"ÝvíÚ áááýúõ€Ý»wKT'rt{s¹ÒÂZ×C²8ñ¾<ÙÞ@rfÏžmeeõ×_ÑˆÙÒË.¦°°ÐÊÊjÆŒú¨‘X±bE›6m¿Þ%K– ÀØ±c¥SÆŒ ß~û­tJÇŽà—_~‘N9tè�ÒÝeaa!ñññãÇJ§¸¹¹É-¢ê£^)®ëÔ©SC‡õðð`³ÙÒƒ—ËUºÑ!ƒúä“O¶mÛvçÎi1â±gÏž•­üÞ½{ Ð®];}¶I{ååår§wôDí`k	#MvúÁƒ©”—�hŠ@KK<êêê¸\.“Éd2™VVVDö®¸ùÈ~¹g±Xqqq—.]R,C$¨¦ª°Öõ�,N\wŠ‰	‘Hãéé)ûË)Ò!Ýïb***¼½½`€ß>‘œI“&Io•3±X  ¿ýö›tâo¿ý Ò«ä‰É>È¯¦¦Féî²©©IZ³Ò)CnUõJn]{÷îUõw¥‹äççWHEDD<{öLòß“!,‹ÅbEiÍÇ0­ÓB¯^½âããõº
+*ƒÍìGšÜôšš*åe'šè Cúfl‰‡¾/µ’H$Òë0ãââçªš¢Hm�ö$…›ÌÍ›7€–(MHmmmPPÐ»ï¾+=" Òñãtbcc8`aa¡ÛÊ‘Z·oßîÐ¡ƒ�Wzúôéû÷ïÀ Aƒ¤/-4h Ü¿ÿôéÓšVH|q é—!¹)]<
+�ú›("~qŸ>}zYYñÛÛ?ÿüCR¾W¯^wîÜÉÏÏ_½zõÈ‘#mmmóòòæÌ™ÿm H$‰Db±˜ø>M,%´m±Þ�9277W¯¯aÒí`3Ñ‘&ÇÉÉIq�ðïà‰ë+¤Lt€¡–¦gÏž pøða*ÅˆgN("¦eçKeÿcÞˆÎ$®«Dª8::=zôÖ­[óæÍ£;s¤Ã$F$ÅÆÆººº>|øP‡Õ"ê\]]‰‡ó’Ò»T¥¤?�S¿ F¶rµSä>_¹¨¼¨ù[‡\â;«ìs�Ž9¢¶�RÄ….ÎÎÎ‰„xñüÅ‹Õ¶Â¨M�}0—ÎQlæ7ÒT­KÕ² pÿþ}é”'NÈ6Ñ†ôÍØÎx�Óutt,++#)Fo[[[�§KüÿÍ›7666666oÞ¼Qœ«jŠ"µe¨TB¥ps‚¹víñ8Ýýû÷SŒ¤%;vì“ÉüñÇéÄÜèr³xñb6›ýûï¿ë°ND]uu5 ;vÌ�+­­­år¹£¼¼\nVEE“Éär¹ÄE/Ôoù•­DÓ¯ƒÄëöìÙ£ö²àæ“[u``  ,\¸°ººº¶¶vß¾}îîî$Ñ¾÷Þ{;wî¬¬¬ÏŸ?_µjü÷ùŒ?þø# xxxlÝºµ¼¼¼¡¡¡©©©¬¬lË–-={öÔw»š#88XÏ¶¢8ØÌo¤©Z—ª¯Ä#wbbb***êêê~ýõWÙÂ¦;À�^[â!‘Hbbb ÀÙÙyíÚµ÷îÝãóù¥¥¥Ä¥ÅbccÀÉÉ)--­²²’x¼Çúõë‰ó�ÒË¨äßÝÍ,ñ
+…555çÏŸÿôÓO‰›aú÷ï¯Ñë§Z²Ï?ÿœËå^½z•î@ÌŠÎv1ÙÙÙcÝºuºªiêÂ… pïÞ=C®4==dÞÁ$çý÷ß â½"Ôr*[ƒ¦_ßP«“f*%WÿêÕ«åV=~üx’hA™„„bî¬Y³”Ðk‹šoÑ¢E¾¾¾zªœâ`3¿‘¦j]ªÖ{ìØ1¹òÒg7KË˜è Cze„‰G]]]DD„Ú±ZWW7xð`¥e"""dŸù&ÑgâA¤Ú×H¥’2±±±²÷¿!r� oß¾���øŽ#ÒÍ.¦¼¼ÜÑÑqôèÑ˜FÓhÇŽ\.W$r¥Ýºu€={ö(�»gÏ èÖ­ññþýû111666ÎÎÎS§NUõZ7ÙÔN‘ûøêÕ«ÄÄD___‡C²ïÖ	¹ú…Báwß}×®];KKË€€€o¾ùFz¹¼ÒE
+§L™âïïÏáp\\\zõê•™™)
+¥…O�:5räHooo‡ceeÕ¹sçyóæ]»vM-j¾‹/Àõë×õQ9õÁff#MÕºHÖûã�?vìØ‘Ãáøøø|óÍ7B¡P±°)0¤WF˜xH$±Xœ““#}` ��Mpppbb¢ôtÒb{÷î�ˆˆpuue³Ù®®®{÷îUüZB¾ÁRÙ9¨ZJ)Š(®‘J=²-,,\\\ÂÂÂfÎœ™ŸŸOÞ
+¤èáÃ‡­Zµš<y2Ý�˜†¤ÙwO
+…Â~ýú½|ùòÊ•+¶¶¶Í¬imñâÅûöí+--¥;ÔrI$’6mÚ$$$|õÕWtÇ‚ÒÌ¾}ûÆŒÓüo™“£G�ÆÄÄìß¿_öm­Hk:xªÕ—_~YTTtðàAÌ:èUYYI<|!º0ŒÈÈHÅK}B!S4tèÐñãÇ'&&>þœîXÌAs�S§N}÷Ýw«V­êÜ¹³NBZ{òä‰——ÝQ –.::úâÅ‹µµµt‚BéÀúõë¹\î´iÓèÄ4+ñxõêÕäÉ“ßÿý¤¤$]„´öøñcOOOº£@-]xx8ƒÁÐâý-!„�rppÈÈÈ8|øðÁƒéŽÅä5+ñX°`ACCÃöíÛ›ù,¤˜x càààÐ­[7L<B™�¡C‡N˜0aÖ¬YõõõtÇbÚ´O<òòò¶mÛ–žžN¼¬
+Ñ‹ÇãUWWã¥VÈôïß„BædÝºu�àë¯¿¦;Ó¦eâQ__?mÚ´aÃ†�;V·!í<}úT"‘`â�ŒA¿~ýJJJž={Fw !„�n899-_¾<==ýï¿ÿ¦;¦eâ±hÑ¢úúú�7ê6¤µ'Ož  ^j…ŒAß¾}Y,Ö™3gè!„Ò™É“'‡……%%%áS§µ¦Mâñ÷ßoÜ¸qÉ’%ø5×x<~ü˜Á`à_;;»îÝ»ãÕV!„Ì	“É\·n]~~þáÃ‡éŽÅTiœxH$’ÄÄÄ·ß~{ÆŒúiçùóçNNNt‚ @ß¾}Ï�;Gw!„�.½óÎ;&LøüóÏ…B!Ý±˜$��ýû÷_¸p!##ŸdeT^½zåèèHwý¿>}ú”””¼zõŠî@B!]Z¶lYeeå?ü@w &I³Ä£©©)99ù£�>zë­·ôÒÎë×¯èŽ¡ÿ×£G‰DråÊºA!„tÉÓÓsúôéß~ûmcc#Ý±˜Í�ôôôçÏŸ/]ºTOÑ ­ÕÕÕaâ�Œ‡§§§··÷¥K—è!„Ò±…Ö××gffÒˆéÑ ñ¨««[¹rå‚Z·n­¿€�v^¿~mooOwýO�=0ñ@!d~\\\fÍšµ|ùr|Ÿ ¦4H<Ö®]Ëd2çÏŸ¯¿h�ÖðR+dlÂÂÂ0ñ@!d–æÎ�ÛØØ¸cÇº11T�šššÔÔÔyóæÙÚÚê5 ¤¼Ô
+›°°°ÊÊÊ§OŸÒB!¤c...S¦LY³f�H$¢;SÂ¦X.55ÕÒÒrÖ¬Yz�i/µBÆ&,,ŒÉdîÞ½ÛÙÙ¹¬¬¬¤¤¤´´ôèÑ£;v¤;4„ €@ øçŸ¤ß¼y µµµÒ)Ÿ—ˆ�*sæÌIOO?|øp\\Ý±˜•—/ÖÕÕùùùÍŸ?Ñ¢Eˆ	iÁßß?11ñ³Ï>£;Ô¢�?þÒ¥K%%%EEEwïÞ}ýú5 0™Lƒ!‰,,,Þ¼yÃfSý½!¤WOž<ñññ!ù½6<<ßŠ‰áÃ‡¿xñâüùótb2(}Ø¾}»P(LJJÒw4HkÖÖÖtG�ZºË—/Ï›7�ÉdŠÅbéDéÿ;tè€YBÆÃÓÓ³oß¾gÎœ‘Ý`e}ðÁ	!ÓòÉ'Ÿ„‡‡_¸páÝwß¥;Ó þ‘H´víÚ)S¦à-ÆL p8º£@-ÝÌ™3}}}•Îâp8¸_FÈØL˜0AÕ,‡3zôhCƒ�Éé×¯_HHÈæÍ›éÄd¨O<~ýõ×ÊÊJ<Ýaä0ñ@Æ€Ãá,Y²Déœ‰$44Ôð!!„H>\éyH6›�7x ¤VBBBNN>W—"õ‰GZZZtttÛ¶mÒšP(Ä‹X�17n\§N�X,–Üt¡PØµkWZBB©boo?dÈÅÃ‡H$úðÃi		!Ó/‰öïßOw ¦AMâqëÖ­?ÿüsÆŒ†‰iÏx #Ád2W¬X¡x»*ƒÁÀ3¡qãÆ)n°ÖÖÖ111´Äƒ�iqvvŽŒŒÄzP¤&ñøé§Ÿüýýl˜h�vÄb±H$ÂÄ‰¡C‡öîÝ[î7T|BF(**ÊÆÆFv
+‡Ã>|8—Ë¥+$„LËøñãÏœ9S^^Nw &€,ñ‰D»víŠ��g0iA( ^j…ŒÇÊ•+‰aI`±Xaaa4ÆƒR…ËåÆÅÅÉþt%âããi	!Óåèè˜��Mw &€,ñ8sæÌ“'OÆ�o°h�vˆoxxÆ�>}úDDDHÇ$‹ÅÂ<2Zñññ�@úÑÙÙùý÷ß§1„L‹¥¥åðáÃ:Dw &€,ñØ¹sgXXX»víÒqÀÀ3È¨¬^½ZzÒƒÏçcâ��ÑúÏþÓªU+âÿgìØ±x@AH#111—.]züø1Ý�;•‰�Ç;tèžl5	L& ¨¼„!ƒ			3fŒô¤&-‹Ol­� ßˆ�¦hii™——Gw ÆNeâqúôéºººQ£F2¤â§)Ùåƒo¾ù†x#²½½}ëÖ­é!¤ÒèÑ£‰ƒˆ‡‡G¯^½è!cccÓ¿ÿÜÜ\º1v*�ÜÜÜÐÐP///CFƒ´C$²÷ò"dÚ·oŸ��  Ý»w§;„™Þ½{ûøø À„	ˆ³è!�DGGŸ<y’ÏçÓˆQSygnn.^ge*Z`âQXX¸víZº£@ê5662™ÌÇ�ãéS““““ÓÌp;5-ÖÖÖ påÊÜZMHó·S¤+‘‘‘III………ýúõ£;ã¥üW�ÒÒÒòòòèèhGƒ´Ã`0X,V‹ºÔª²²ßj¬¬¬Ú·oïèèHw HUUU:Ù¾p;5-¾¾¾ööö¸µš
+]m§HWüüüÎœ9Cw FMù�¼¼<ggç=z8¤5‡Ó¢Îxð—“PSSS[[Û¶m[ºATíÛ·oÌ˜1ºª·SràÀ�¸¸8º£@”èv;E:Ñ«W¯‚‚º£0jÊÏxüùçŸýû÷g±XŽi�Íf·ÀÄ™gggÌ:2	˜u Ô={ö,,,‰Dtb¼”$‰$??¿OŸ>†�i„B!õêÕ«®®®¤¤„î@Œ—’Ä£¬¬¬ººŸ¦gZ,,,ðA
+!„Bt	µ³³Ã«­H(I<òóó­­­»uëføh�Ölllþùçº£@!„j¡X,V÷îÝ/_¾Lw ÆKIâQPPðöÛoKß7ŒL‚��&!„B4
+		¹yó&ÝQ/%‰GQQÑÛo¿møPPsØÙÙÕ××ÓB!„PËTZZJwÆK>ñ‰D¥¥¥ÁÁÁ´Dƒ´†‰B!„½‚‚‚^½zõôéSº1Rò‰ÇÃ‡›šš‚‚‚h‰i/µB!„¢W§N�  Oz¨"Ÿx=Õ±cG:‚AÚÃ3!„Bôrwwwvv¾uëÝ�)%‰‡§§§££#-Ñ ­aâ�B!D»víÚÝ½{—î(Œ”|âqûöm<ÝaŠlmmñR+„B!zy{{?~ü˜î(Œ”|âñèÑ£6mÚÐ
+j''§ÚÚZº£@!„jÑ<<<ðærUä�'OžxzzÒ
+j—/^ÐB!„P‹æîîŽ‰‡*ò‰ÇÓ§O=<<h	5‡‹‹Kccã›7oè¤…’H$ˆ��õôô´°°°µµ		ILL¼pá‚\±œœœèèhwwwww÷¨¨¨ììl‰D"W!ƒÁ`0���B¡PqzsJ*E½-$•ÈÕ¦X³žz€Üƒ¦M›Ö¶m[KKKkkë���9sæ\ºt‰zÏ4³ÉJ§Ë.Ëf³½¼¼F�uåÊêíj	¨÷§T¯^½Æ;ï¼CR¡¦—Ëuss{÷ÝwgÍšUXX¨´fµ»{÷îãçŸVºøÏ?ÿÌ`0ºwï®¸v¥#†�‡‡GllìÙ³g•Ö¯
+õq¨´cõ±i�S»9ûûû3Œk×®É.A¬¨ÿþ²Ó‹ŠŠ†¿¿¿Òx¨·ŽÊþ_W=€Lžñ #‘!
+Y,ÖÞ½{%ÈÔ;¸Ðˆ�dggË�^ÕÕÕEDD¨ÝÄêëë£¢¢”–‰ŒŒ¬¯¯—­S:kÛ¶mŠÓ›Y’$Hµm!©D®6Å ôÔ$ŠŠŠÈ›¬¶gšÓd�þçÌ™3›¦WºÚ¾šYõþ$”””H;óÆ�ª„æm,Ã†«­­•-Le`§§§ÀÀ�•¶ô?ÿù ¤§§«];y„L&377Wé*”RZ‰â8TÕ±$qÊ,<IÏ“ ²9Oš4	 Ö­['�"lmm€Á`p¹Ü¦¦&é¬ï¿ÿ &Ož¬4Š­£¸ÿ×IÈ1ªã ’uäÈ hhh ;cô¯!KägFräC!žŸpùòeº1£ÚáÆÄÄ €““Óš5kîÜ¹ÃãñÞ¼ySRR²eË–^½zI‹ÅÅÅ€££cjjjEEŸÏ¯¬¬LKKsrr€¸¸8Ù:¥Ç-???>Ÿ/7½9%uÒ*u*ÎÒS�0`  téÒåÄ‰ÕÕÕ<¯¬¬,###,,Œb+¨´Kí,ò¿ESSÓÕ«WÃÃÃ oß¾ÃÐ+M<æÏŸ ––– 0wî\Ujº±…ÂêêêóçÏÏŸ?ŸËå@ÿþýÅb±´0•�][[Ëår†âÏCåååÄwbi>Ce@Ê–áñxÅÅÅƒ ¹±M½’q¨¶cÕ†­éŸR)*›óŽ;  &&F:…øU®]»vÄ›‘Ïž=+�5dÈ Ø¹sgsš@qŸ©“�cTÇA$‹85úðáCº1Fÿ²7oÞ€›7oÒÒÚë×¯àøñãtb Æ³Ã=~ü8 888”––’;yò$ ØØØËÍ*..¶±±€S§NI'G£Î�;ÀæÍ›å¦Ë.®iÉæ·…b�r³ô×$¬¬¬ àöíÛZ·B£ÂÔ¿[(N©¬¬ kkkŠaè•)&|>ßÍÍ 6mÚ ...<Oé‚ÍÙXŠŠŠìíí ''‡˜B}`ÇÇÇÀâÅ‹åŠ}ýõ× ¯víä>zô ¸\.ù‚ä•(ŽC*«6l�þ”ªPÙœ‰øE"1eÕªU 0uêÔ¤¤$ X²d	1](ÊG�iÝêûL�ô€ã9"9ÅÅÅ PRRBw Æè_÷x466»-@¦ÆÞÞÞÂÂâåË—tÒâdee@rr2ùs¨úé' X°`ñ«›¬àààHËÈúê«¯ `Ù²e<�<ê%IPl‹vôÝJ?9{6dÞŽ=úüùóÐÐÐéÓ§wéÒååË—¿üò‹Ò’ÍT]»vMNN éÝÔö”)S `ûöíb±XZF,oß¾]:·ùˆËŠtˆzÇê•Í¹uëÖ���¯^½***"¦üùçŸ Þ¯_? 8sæ1ýÊ•+uuuíÛ·÷òòÒ:$½î3‘é"¾H755Ñˆ1úWâAô&&ÊÅÅÃ#Î¨>œ¼XAA Œ9Ré\âRÅûVG�TYY¹uëVòú©—$A±-ÚÑw( ½{÷ž<yrVVVqq±H$Ò¢½âóù×¯_Ÿ0a ¼ýöÛt‡cª~øáøï×wâ_bŠ¢f*b‘ÞÐL}`÷ïßßßßÿáÃ‡¿ÿþ»´À©S§***üýýåî{ÖŸÏ¿qãÆäÉ“ 22RëJ”ŽCê«o7g¢'OŸ> "‘(?? ÂÃÃûöí �@Z€¸|KkzÝg"Ó…‰ÙÓ§N�€—/_Òuþ5G—.]¾øâº£0ã9ÅLì_›S¬¡¡ ¬¬¬¤S¤›çž={ ÀËË‹XVq³Õ´$É~€b[”®]í,ýõ ‰úúzâËŠ”½½ýÄ‰ËËËCU»‡Ô´É$Ó•®o.—Còw‘«¶ªªŠÅbYZZVWWK$’êêjKKK&“YQQ¡X¡D“ÍJñ‹»t¬j4°—,Y cÆŒ‘=z4 |ûí·N^&<<\£#¸ÚqH±cek£¾"¥J7gâ�%‘H.^¼ íÚµ#f@AA�D"4h O£Þ¹‰Ô÷™:é9ÆsDrˆ×üñÇtbŒðŒ‡ùhÝºuUUÝQ 3fLÇŽ?~¼yóf]•4-Íi—­­íáÃ‡oÜ¸±råÊ#FøùùÕÕÕmß¾½[·nÄ5¸Æ€ÅbyxxÄÅÅ?Ê"MýôÓO"‘høðáÎÎÎ àìì<lØ0éULŠš3¨d/”ÒÔ¤I“X,ÖáÃ‡kjj  ¦¦æÈ‘#L&sâÄ‰Z×)åââ²bÅŠV­Zi·¸Òq¨iÇêÅÍ™8ãqîÜ9¡PH\XEÜ1 Ò«­A~~>ƒÁ�ÎBH‡ðŒÙ,äÀ�  
+éJƒPs$$$0€î(Äx~éñõõ µwúùù�ŠG|Jþ{#Z@@€tŠìæ¹k×.»ü�²    IDAT pww—¾§EvYíJ6§-ë”›¥¿ÐHYYÙÀ� ""‚J+‘f³Ù  d'òù| `³Ù+1FuÆCít±X  ¿ýö›tâo¿ýFŒ(ÙÇOédc!žÂÒ¦Mâ£¦›xðîúõë%IZZšÜPT»v¥e?~<{öl pvv~üø1ù‚ÔWD½cÕÖFñO©)¥›³ä¿g6.\¸@<·j×®]ÄtâÎœˆˆˆóçÏ@ppp3›@}Ÿ©�0žã ’C\ÎwðàAº1Fÿ:ãA¼S‰Åb2AÞÞÞxÆÃðzöì	 ‡¦RŒÈíÓ‰2ŠÆŽÛ¾}ûgÏžedd�¯…zI’ Õ¶E;†éµÚ·o¿sçN 8wî\3«RDü*L<\HŠø¨õïÐH­Ó§Oß¿ $}³q!Íýû÷‰Kùi=¨ˆ$,,Œø¨éÀ&n“øñÇ¥ÿ6ÿ¶rOOÏ´´´èèèšššE‹5³6)í:Ö�TmÎÄI�S§NÓ¥§5ˆÿäççÏ"kÎ}5½î3‘é’þEw FI6ÁìÙ¤mÛ¶ÍÆÆ†î(ÄxÆ*ñ8EGGÇ²²2’b'Nœ  [[[�&+ýH<œÞÅÅEq³Õº¤Öm¡X§Ü,ýõ€¦ˆ·¡É>0T£:I
+¿ÿþû °iÓ&Ù‰6l €AƒQ¬Ä˜Öâ1µª�<¦V‹�åÚµkÄ3X÷ïßOLÑt`óù|WWW ÈÌÌÒÇþjÚ9eeel6›Ífëdû•hÒ±jk£ø§Ô‚âæ,‘Hrrr ÀÛÛ egµoß ˆ:t¨™M ¾ÏÔGÏq)…;ˆó‘—— r¯Ô5WF5V‰H9;;¯]»öÞ½{|>¿¡¡¡´´TîRÄm‘NNNiii•••|>¿ªªjýúõ$¯Ï“~
+…���ÒC¾NJ6§-TêTœ¥§ ºbÅŠÂÂÂšš�@ðüùóC‡¾ìß¿?•VhÔdâÂw{{û¬¬¬çÏŸ?þ|ûöívvv �••E±c`B‰‡ôÅ|rwK$’ŠŠ
+&“Iòb>Š‹P(¬©©9þü§Ÿ~ªô‚l	åjÑ9			 0räHòe©¬H£ŽU[›N¾vSÜœ%É‹/QùÇ,;kêÔ©Ät&“YSSC=U³(î3uÒrŒê8ˆä &*`âa>nÜ¸ Š¿º™%£«uuu ‚l1âÕÂŠ"""êëëeëT<ÉÞÍÙœ’jƒ¤Ò’µ“ÌÒS�PÕGGÇ«W¯jÔ3Tš,‰”ö^dd¤ÜñµÂðL(ñHOO€�*­�8•žž®ªB-6–ØØX¹/ÜlÉ¤'(½9„Ê€TÚ9�=²²²b0—.]RÚ!JW¤t–F«¶6*JŠÑ*’Ûœ	!!!Ä\éâÞ èÞ½»Fñ¨šEqŸ©“�cTÇA$0ñPóQ[[ yyytbÆ6VÅbqNNÎÐ¡C=<<Øl¶��Mpppbbbaa¡\±½{÷FDD¸ºº²ÙlWW×ˆˆˆ½{÷R¹MS ´mÛVqº¦%É�ŽÔÛ¢jíä³ôÑ$®]»¶hÑ¢Þ½{;;;³X,›���¹sç*}ÊªÚžQÛd‰DÂãñV¯^jeeeeeºzõj>Ÿ¯Q%´3¡Ä£[·n °gÏ¥5OVíÖ­›ª
+©l,...aaa3gÎÌÏÏWº"ê›@ÜÐ£G’†“HU�C¼ßPUÂ tEJgiÔ±jkÓnk’Cqs&wÛ@UU•ìtâÕæ 0þ|�â!™EeŸ©“�clÇA$0ñP�!‘ÙÇíÛ·�x¾8É^3[[Û´´4]½×˜áXEHtµ}ávŠ�þàöeÌFvv6ñ¢$‹©¾2ÄCHB!„2*lº@º„‰jQ¤÷�*…?¢–Ìä¶“!¤<ãaV0ñ@!„BÆ	³âïï�‰j9Èï`£;:„èdr[‡ÉŒÒ&f%  àåË—uuut‚B!„Ð¿`âaV  ¼¼œî@B!„úL<ÌŠŸŸƒÁÀ«­B!„�±ÁÄÃ¬XYYyzzbâ�B!„Œ&æ&((¨´´”î(B!„úL<ÌMÇŽoÝºEw!„Bý&æ¦C‡˜x „B!cƒ‰‡¹	
+
+ª®®~ùò%Ý� „B!ô?˜x˜›Ž; žô@!„BFsãíímgg‡‰B!„2*˜x˜ƒÑ®]»Û·oÓB!„Bÿƒ‰‡
+½~ý:ÝQ „B!ô?˜x˜¡ÐÐÐ¢¢"º£@!„BèØt€t/44ôÅ‹�?öòò¢;ý5jÝ! d†ªªªtXn§éƒn·S„Ïx˜¡®]»2Œk×®ÑˆùøøŒ9’î(�ÔÔÔœ>}Z$ÑúŸÖ­[ëdûÂíÔHäçç———ÓÒ1]m§žñ0CŽŽŽmÚ´¹~ýzTTÝ±èKÏž=srrèŽéÀ“'O|}}ccc'L˜@w,HÇp;5;vì8tèÐÑ£Gßzë-ºcAµtxÆÃ<uíÚï/G&ÁÓÓsèÐ¡™™™t‚�zùòå¼yófÎœ‰YBÈ`âažºvíjÞ—Z!s2mÚ´ÂÂB|"B:·hÑ".—»téRºA! L<ÌUhhè�;wþùçºAH½÷ß¿]»v[·n¥;„ÌJAAÁ¶mÛÖ­[gggGw,!€‰‡¹
+‹Å7nÜ ;„Ôc0S§NÝ¹sg]]Ý± d&ÁôéÓ£¢¢ð©b!ã�‰‡yò÷÷wppÀ«­�©˜<y²P(Ü»w/Ý� d&6lØpÿþýôôtºA¡ÿÁÄÃ<1Œ.]ºàýåÈT´jÕ*..nãÆ�t‚�9xðàÁW_}µpáB___ºcA¡ÿÁÄÃláýåÈ´L›6íúõë/^¤;„L^rrrëÖ­çÏŸOw !ô/ø³úã�?òx¼¿ÿþ»°°ðÜ¹s¹¹¹tÇ…�rï½÷^pppfff�=èŽ!vèÐ¡œœœßÿÝÒÒ’îXBè_0ñ0C/^¼¸páÂÙ³gy<ž���@ `±X"‘ÈŒß'ˆÌCBBBrròš5kœœœèŽ!“ôüùó„„„¤¤¤þýûÓBÉÃK­Ì‡X,NJJòõõuss‹��ýùçŸ…B¡@   ‘HdaaáççGwŒ‘?~<“ÉÜ¹s'Ý� dªfÏžíàà°råJºA!%0ñ0L&300°¢¢ $	‘rH1šBCˆ‡±cÇnÞ¼Y"‘ÐB¦çÀ�ûöíÛ²e‹µµ5Ý± „�˜x˜•Ù³g‡……q8ÅY|>¿M›6†	!�L›6­´´ôüùót‚�‰yñâEbbâ¤I“@w,!¤&f…ÉdþðÃb±Xq–D"ÁÄ¿°°°·Þz+33“î@21óæÍ³´´\»v-Ý� „�J˜x˜›���ùóç³ÙJ€‰2	Ó¦MËÉÉyþü9Ý� d2>¼k×®M›6988ÐB©„‰‡JIIñôôd±X²™L¦——]!!DÝØ±c---wíÚEw ™†ÚÚÚ3fŒ3fÈ�!tÇ‚Bd0ñ0CVVV[·n‰D²]]]•žAÈØØÙÙ�?>==]n#„”úüóÏy<^jj*Ý� „�˜x˜§Áƒ�=Zö.s¼Î
+™�O?ý´¢¢âàÁƒt‚�±;zôèÖ­[SSS=<<èŽ!„ÔÀÄÃl­_¿žËåÿg2™ôÆƒu~~~C‡MKK£;„ŒZEEÅøñã?úè£�>úˆîXBH=L<Ì–»»ûš5k˜L& p8___º#BHsæÌÉÏÏ¿xñ"Ý� d¤Äbñøñã]]]322èŽ!„(ÁÄÃœ}üñÇÝºuãp8b±¸uëÖt‡ƒ�ÂÃÃ»víºaÃºAÈH­[·®  `÷îÝ¶¶¶tÇ‚B”`âaÎ˜LæîÝ»‰·˜ãdræÌ™“��]UUEw �k×®-Z´èË/¿£;„¢Š!‘H¤öíÛ7fÌÙ)Ôâ{‹ŒSqqqYYÙÀ�éŽ5KNNÝ!�Çóóóûøã�—,YBw,‘†††·ß~ÛÍÍí�?þ ®§Eƒ‘��=zôhº1::ÛaUVVîß¿_Wµ!êÜ¹³���µµ5Ý� íUUUµÀíËÒÒrÚ´i›7onll¤;„ŒÈgŸ}öôéÓ�;wbÖ�2-:~±CKûEÖTœ>}ºÿþtG�´Gœ�¤;
+$$$¬X±";;{âÄ‰tÇ‚�Q8zôèÆ�wîÜéããCw,!¤ü±¤EÀ¬™(//¯±cÇ~ÿý÷Ú]Š�™yúôé”)SâããÇ�Gw,!¤1L<BFmáÂ…%%%¿üòÝ�(Á�Áf³=<<bccÏž=«]1‰DràÀ�ØØXOOO[[Û���ÄÄÄ.�‡AqA‰D’““íîînaaáîî•��­˜Ô¡
+…BÅéÚ•TôàÁƒiÓ¦µmÛÖÒÒÒÚÚ:$$dÎœ9—.]R¬G)ò¹²ÅHâQÕ"éËËËkÔ¨QW®\!o‹aH$’„„.—‹O{C™*‰Œììl¹)Ô5gY„¹¾}ÅÆÆöîÝ›î(”PºSe2™¹¹¹š«««‹ˆˆ ²£–CqÁúúú¨¨(¥e"##ëëë•¼mÛ6ÅéÚ•”STTäàà ¶±ªÚE#™+W›ªx(®‘Ãáœ9s†¤9†±xñbKKË‹/ÒBH  ~ÖArðŒBÈØ-X° ??¿  €î@”#v¦<¯¸¸xðàÁb±8%%EÓb~øa^^ž““Óš5kîÜ¹ÃãñÞ¼ySRR²eË–^½z‘¬�â‚'N<vì˜££cjjjEEŸÏ¯¬¬LKKsrr:~ü¸ª[h–.]*¨tõ’„ùóç¿~ýºK—.'Nœ¨®®æñxeeeJ«ôè¥8]iaê!)®±©©éêÕ«ááá�à«¯¾Ò®*]9~üø’%K¾ÿþ{|~.BÈ„Éî ñŒBÆ	·¯Þ½{6Œî(ä)îE=z \.W£bÇ� ‡ÒÒR� ¸àÉ“'ÀÆÆ¦¸¸XnVqq±�� œ:uJ.àÎ�;ÀæÍ›IB½¤+++ ¸}û6yÕÖC±°ªYªZ$;¥²² ¬­­)†¡÷ïßwvv?~<�1 „¨<ã¡žñ@™€9r¤´´´ùU—ï766Îš5ËÝÝ�ÍfÀÈ‘#Fpp°X,&Š‰Åâàà`ƒ¡ÅóÄ(¾IZZ,++ ’““;vì¨ÑŠ(.øÓO?À‚‚ƒƒåf/X°@ZFñÿ²eËx<yÔKJ999 >(™
+�7vìXOOÏ�7ÒB5&!´nÝ:]UøÑG¥§§?þ\$@FF†³³óÍ›7wïÞMØµk×Í›7ÝÜÜ222¨TÈçóoÜ¸1yòd ˆŒŒÔ¨Xaa! >\ÓVP\�¸JmäÈ‘JçÆÅÅI«’5jÔ¨   ÊÊÊ­[·’×O½¤Tll, ôîÝ{òäÉYYYÅÅÅÄÂ¨ðùüë×¯O˜0 Þ~ûmºÂ˜7oÞ­[·<Hœ›B!&{ú/µBÈ8áö%‘H¶mÛfiiùøñãfÖCìú¼½½ssseoªÞ¹s' øûûóù|>Ÿïïï T[•œððð—/_jTŒËå@cc£¦m¡¸ y±†† °²²’X"‘ìÙ³ ¼¼¼ˆe�ÔKÊ©¯¯'r){{û‰'–——+Ö¯öà%õYªZ$‡Æ›Ë‰“Z{÷î¥eí!í ^j¥žñ@™†qãÆ9::nÚ´I'µmØ°!**Jöš¨?ü0::º¼¼|ëÖ­[¶l)//���×ô,„‹‹ËŠ+Zµj¥“b´3fLÇŽ?~¼yóf]•$ØÚÚ>|øÆ�+W®1b„ŸŸ_]]ÝöíÛ»uëV\\¬‹Øu€ÅbyxxÄÅÅôíÛ×ðÜ¼ysÆŒIII-óý¡!3$›…à„Œn_„åË—;99½~ýº9•»¾ššÅYUUUžžžÕÕÕTª"þÿøñãÙ³g€³³³ÜiµÅ|}}@Ó;Ë©/èçç 7nÜP:—ø¢ 4à]»v€»»û›7o�ÔKªUVV6pà@ ˆˆˆPZ¿Z$…‰;y�ìD>Ÿ l6›b%öúõëöíÛ÷îÝ›ÏçÓBH3€g<TÀ3!“1{öl6›­“;=ˆ››å8;;»¹¹q8œ††WWWŠ÷ˆ<==ÓÒÒ¢££kjj-Z¤Q±ž={ÀáÃ‡5lÕ‰bP:—˜N”Q4vìØöíÛ?{öLí½.ÔK*Õ¾}{âj·sçÎi±89ggg  &&E|4ÚóN3gÎ|ñâÅÎ�;9Ý± „�n`â�2666sæÌY·nÝ«W¯ôQrrò�;w–.]úÅ_üý÷ß_~ù¥¦5¬]»–ÍfïÜ¹óöíÛÔ‹·/¯ZµŠ|)E$^ÓñÝwßÝ¸qCnÖ�7¾ûî; ˜4i’ÒeY,Ñ«W¯&†zIUjkk�ò›5
+ ÄÓ‡¥~ýõWé,c³víÚ={ödee÷!„�™�=ý�—Z!dœpû’zýúµ““ÓÒ¥Kµ®Aq×G8yò$ñD]‘HÔØØØ¦M&“yúôiM«JHH €‘#GjT,&& œ��×®]{ïÞ=>ŸßÐÐPZZJ¼�$Šwr;99¥¥¥UVVòùüªªªõë×g~âââHÚ%
+•5¨—”ºbÅŠÂÂÂšš�@ðüùóC‡îß¿?y×©BRxûöí `ooŸ••õüùóçÏŸoß¾ÝÎÎ ²²²(Vb0ÙÙÙãûï¿§7„�Ö /µRÁd±X¼ÿþ˜˜‡ccc<}úôÂÂB¹bûöí‹ŠŠ"®—pss‹ŒŒÜ»w¯X,–«�8º´mÛVîª_UGVê%Õ&xäm!©D®6¥H}ô 9ÙÀX,–»»{LLŒâ`¨tŽ‘t)• 	–––®®®ï¼óNRRRAAõNÓ&²/^ÜªU«ºº:íW?‰¤¦¦ÆÛÛ Ž=JL!ž«Û¦M›ÚÚZ�ªzôè‘••ƒÁ¸téõbuuuTF»ŠÖÕÕ<Xi™ˆˆÙ§{)˜øâ®8�zI¥]§ÈÑÑñêÕ«j‹)­œd¥"‘Hi/EFFÊíÕF®o×¯_·µµMHH0äJËËË,,,¬¬¬‚ƒƒgÏž}ñâEÙ2¥¥¥+V¬xç�wõ.’ím‹åéé9räÈË—/+–$.öëÑ£‡ªÅÉG‚£‚zó‰»¤ŠŠŠd—’nPááá²Ó¯^½
+ ~~~Jc Þ"*_{šÓj¹?MsŽÝ…ï®®®ƒÞ½{·âwJÇ€ì*´ë�Ï?ÿ Æwß}G=˜fL<T0�Äƒâ‘µ¾¾>**Ji™ÈÈH¥GV Ø¶m›âôf–$	Rm[H*‘«M1 =õ 9¥«c2™¹¹¹švŽâª©,¥ó.¥¤RÃ†#ù’Ú˜xÈzõê•££ãªU«´[\îJ;v, ôîÝ[:E,‡……À| QU‰$99 ¨Q1±Xœ““3tèP6›MVå~^QDqA±X¼wïÞˆˆWWW6›íêêAò«„ì�@Ð¶m[ÅéÔKÊ¹víÚ¢E‹z÷îíììÌb±lllBBBæÎ�[QQ¡X?ù&IŒ,�·zõêÐÐP+++++«ÐÐÐÕ«W+Þ·­6r½zöì™¯¯oÿþýyCyQQ‘ƒƒƒÚNVÛÿJ)­VññÄ%%%Ò¹²OA  r‘h7*(6Ÿ¸qÝºuÒ)�€¸ŒÁ`p¹Ü¦¦&é¬ï¿ÿ &Ož¬4Š-¢øµGëV«ŠD»c7Éw��R|ˆª1@Ð®C„Bá”)S €ÍfË�ÛÔ7ÀÄCÓH<ˆk	œœœÖ¬YsçÎ�÷æÍ›’’¹k	ˆ×`9::¦¦¦VTTðùüÊÊÊ´´4’k	 ÀÏÏOv¯¸¹jZR'm¡R§â,=õ 9Ùò<¯¸¸˜ø(,,ŒbCHÊÐÞ¥äe„BauuõùóççÏŸO¼*¡ÿþýÀC&r.\èââ"—K#dÒø|þ€|||ž<ybÈõ0  ºtérâÄ‰êêj�WVV–‘‘!·ïÔ©ÓâÅ‹¥·	Q¬\¶pSSÓÕ«WÃÃÃ oß¾²ÅæÏŸ ––– 0wî\*µQœ¥6Z*Íß±c ÄÄÄH§\¸p Úµk gÏž•Î2d ìÜ¹³9aS<®iÝj‰N�Ýäß=†B¾8�|hÑ!���Ã† kkk¹lÊ  L ñ ntpp däÉ“'ÀÆÆ¦¸¸XnVqq1ñÂ×S§NI'£³sçÎ °yóf¹é²‹kZ²ùm¡X§Ü,ýõ€¦ÏŠár¹BR†Þ.Õ¨LQQ‘½½= äääPŒ„:L<ä¼|ùÒÎÎ/‚GfC,Oœ8ÑÖÖVîz°²²€Û·oS,¯Ñ1B±pee%ñ]P:…Ïç»¹¹ ñ–�§éªµþ
+N¥ùDÌŽŽŽ"‘ˆ˜²jÕ* ˜:ujRR ,Y²„˜.
+‰Á£G�´›úqMëV+-£Ý±›Êw�cÇŽ‘C>´è�W¯^õë× œ��õz!4I$˜x(e‰q	ÄòåËÉ‹ÅÇÇ@JJŠÒ¹))) 0nÜ8ébtîÝ» |||¤çIU}÷¥^²ùm¡X§Ü,ýõ€¦;/Š!)Co—jZfÙ²e 0bÄêÁP„‰‡¢O?ýÔÃÃ£¡¡�î@Ò�/¾øÂÒÒ’üaŠˆÝQCCCRR’››‹Å"~{îÜ¹³ô+²H$"~`=z´ÒJ¼¼¼ àúõë­TëÂŠ‰ñ@çÐÐP‰DÒ¥KPýó�{oµÑRl>ñÔéÝ)‘‘‘ °{÷îœœ�¹`ò¯¿þ€öíÛ7'lêÇ5­[­´ŒvÇn*ß=T�=)ò1 i‡<yò¤k×® Ðºuë›7oª]J L ñÐë²D"QPP lØ°Avºì²š–l~[(Ö)7K=@=BÙÓµ}ôÅ†�”¡·K5-C\¢êããC=Š0ñPôèÑ#.—›žžNw 5Wzz:ƒÁøùçŸ5]�ØÉáéÓ§ÄKKvìØA”ÉÊÊ 77·/^(­$11 lmm'Mš´}ûö¿ÿþ[(ª]©Fÿçñx×®]#.m’½ÔŠ¸=`ýúõ‰$--þýIŠ«V5Km´›?uêT  îN–=­ñìÙ3 °¶¶&®X^¹r% LŸ>½9aS?®iÝj‰îŽÝT¾{øúú’C>4í�€€  èØ±ãÃ‡Õ.¢'€‰‡
+&�x—Î7666§XCC XYYI§H·¥={ö €——±,Éw_Š%•Ò¨-J×®v–þz€J„rÂÃÃ_¾|©¶˜ÜºŒ¤K5Rª±±Q®“u¥,Xàââ¢õã­2GŽa±XÒku4BìŽ¼½½sss¥·<ïaô÷÷çóù|>ŸxÈÁƒUUR__O<mYÊÞÞ~âÄ‰ååå$+Õ(B9²7—WUU±X,Ëÿcï¾ãš¸ß€?	IX‚ì!ÅÅrƒœ€‚¨¸GuWkµÖ¶Z‹bÝ»hEDÔZEÐVEqa±È*VE¥ 
+hQ¦
+Š��ä÷Ç}›_šq¹„À%ñyÿáKî>ùÜs—KîžÜgèëWVV
+…ÂÊÊJ}}}&“)1Ì€ÂM“|{“GKq÷‰¥¿¿¿P(ÌÈÈ €N�:«ˆïˆö<#GŽ©;N…aK,¤~]Sy¯å½V…k7•{‰æ[ž*}}}™§P³‘>!ŸÏ'�'¬�þ¸*[RåÏ§L$_«šîP‰Pœ•••ô8<
+ŽÌMÓrH•Räýû÷€‰G3ª¨¨055UíŽ!M�™™Ù²eË™3gª6(ñu$�TŒ= 8 Ó¦MSXUVVÖÖ­[Ç�Oü€ fff>”·Q¥"$èééÙÙÙM˜0A4Ò´P(€)S¦ˆ–Lž< 6nÜ¨Ô¦I¾½©D«p÷_¾|	 &&&<�˜ssþüùÄªE‹À–-[¸\®±±1ƒÁ(--U*l‰…t%ª]»©Ü{˜››“D¢ðPö€´nÝ FŒ!>ÚX3L<äÐ‚Ä£I›Zÿ?yò$ ØÚÚ7Ž 'ñPªdcö…b�«šîP�°¤¤dùòå `aaQRRBqGHÊÐ{H•-ó÷ß@Û¶m©C&ò„„„´lÙRâ':„´Â“'OlmmGŽ)¯/µBÄ×QUU•Äòâââ–-[ÚÙÙÙÙÙÙÛÛ?$S—››;|øp�ÓäI©kya�@@´Š¹~ýºháõë×‰«•�ž®RöŠ’¦bÆ    IDAT&”¿ûÄ“�ôôtbÜª“'OËOŸ>MNNN —F†ÝüM­sí¦rïáææ&ïåTÎeHnn®�� 4çÈÔ‘`â!41¡Ìùóç©#ú'I#–e¤M™2ÅÙÙ¹´´ôÀ�ä[¡^’$H…û¢šæ9äìíí÷íÛ7zôèªªªµk×6¦*Ššô�*‹ƒ˜ü5�U«Véëë?@"¤Ež={æããÓ¹sçóçÏs8œÆTEZ*ÎÂÂ‚˜Ç­¶¶ÖÚÚš˜q‚:ggg¢½ÖíÛ·˜B‰‰‰ 0räHÆ¿ˆÖJ‰‰‰Mºuyäí¾�� $$$Ë‰q�EÿIII!Æw"Š5Fó_×síîß¿?(º÷<x°¼—S9”= ÎÎÎ			–––qqq3fÌàóùJíjZâYˆf>ñ †Q333ËÍÍ%)víÚ5 hÑ¢…RƒÉŠþ$Fé¶²²’>,*—Ty_(Ö)±ªéŽ€²æææ²X,‹%¾›TªÕ´CªT™ÌÌL¢»áÙ³g)FB>ñ ±sçNCCÃ¢¢"ºAˆª’’''§ž={Rœ[My_GË–-€ãÇ�oÙ² V¯^­lÍÄPâcO)Ü¨Rˆ‘ä‘n!¦Â··²W4‚ÌÝ'°rpp €Ž;Š¯rvv b@Øß~û­‘aS¿®5f¯Õuí&žN�ß{H¯¡r¨v@îÞ½KL9kÖ¬¦˜_Ka$øÄC&-H<„ÿNcaa±{÷îüü|.—[[[›““#1qÑ?ÌÜÜ|ß¾}EEE\.·¸¸xÿþý$Óç‰þlhh Ë“þŒ©\²1ûB¥NéUMtÈÉ,¿`Á ¦²#$eh?¤äeªªª’““¿üòKœ@�.>|hÝºõ’%Kè!JÞ¾}Û»woGGÇâââFV%ó+ëÆ�ÃÅÅ…Ïçøð¡mÛ¶L&“d ^ww÷-[¶¤¥¥UUUñx¼²²²ß~û�èøçããCq£JEHxýúµ��ƒÁ�îÅ^XXÈd2^¿~M±6y«FK}÷ËËËQá§Ÿ~*¾Šó
+ ˜L¦tË7Â¦x]Sy¯å•QíÚ=~üx’{�ï¿ÿ^Þ©Ÿª�´´4âqŸÄ8cÍ 0ñ�C;�êêj___�C¼1œ4___‰IŽ¥?KÇŽ“®S…’
+ƒ¤²/$['YÕDG€œÌò/^¼044d0¢N„TŽ†R*AÊ4vìX‰Ë¤º`âAî§Ÿ~b³Ùyyyt"—@ 8{öl`` ��›Í666vqqY´h‘DWN�@ãïïO´“±±±ñóó‹ŽŽ–×Ø¤š¡‹d– ==={{ûàà`Ñ¤âeHö‚üB²V"$…$Êèëë[[[÷ë×ï³Ï>£e.05z÷îÝ Aƒlmm©OØGBú-«ªª"~’�‹‹#–üòË/ Ð¶m[yßNòÞ33³{÷î),¦l„"DÇwÑFŒ ãe“Ô&o•Â )î>ÁÕÕ•X+êàA úI@Ïž=•ŠAÞ*Š×5•÷Z^Õ®Ý5552£Õ××ß°aIÔÏ•È­[·ˆ9"¥gCoR€‰‡Ú‘x…B�@`ggÇb±ˆËöâÅ‹¥/ÛÑÑÑ¾¾¾ÖÖÖ,ËÚÚÚ××—ä²-¾„Çã999I/W¶$ù§‚ú¾ÈÛ:ùª¦8ää•_³f�øŠÂƒ#=î•W‰öZ�‡”|sâ9Ž••UŸ>}–.]š’’Bý )r\.×ÉÉIbøyÍAñ’YSSCf/ÍÏÏOæ,‹Íf‹ºWTTK¤Or™ÕŠ�j*lÄ-4qâ!!((¨‰2ü¦VSSÓ¿{{{êMCÉI¿eÄTk-DÇ³©S§Ê¬$33síÚµ°°°ÐÓÓ366vuuýâ‹/$F#Uø–QŒP¤G� pêÔ)™k‰ák{ôèA±6y«Iq÷	Dl �xZEÌŠ «V­R*’UT®k*ï5Ie¯Ý¢hE÷LæÿúoÙ²…<¥Î•Èµk×ôõõàÛo¿%�G� 9´&ñ@:ïîÝ» àääDw š?_
+EEEéééeggÓˆD#ssó�;w>}ú´¾¾þýû÷ÙÙÙ�ˆiàÌÌÌöîÝ[XXÈår‹ŠŠöíÛGÒT’Èg"""ˆ…‡ bNe�•xÿ¯««»wïÑ#V|7…7+Tîf¨Vö®¨¡¡¡²²299yÕªUMÚ¦±I½{÷nàÀ�vvv�?¦;„š1à›Í¾|ù2Ý±Ðy0ñ@ôãóù999Ä¨Ÿ|ò	Ýáh"ü|)ÔÐÐÐ½{÷Ñ£GÓˆ$¢[dË–-ÉÇ‚$ÆÃ166Vjpˆ¨¨(ñß&‡ ¢6“â•H/!~£ï>«±‰‡¸û÷ï£8ÄÆÆRŒD|øðaÄˆVVV2gÆ@H÷£c&%%Ñ0ñ�G†ÓE4b�R×Vôôôºvíš””¤¯¯¿jÕ*uU‹>*zzz?þøãåË—ãããéŽå?Ž? kÖ¬!º«ÊC¤«W¯vqq‘Xåââ²zõjQqAAA'11±¬¬¬¬¬ìÖ­['((H�; a<<<ˆ¦ Ää	Z�ËåN›6-##ãòåË¢Né¶M›6	…ÂÚÚÚAƒÑÒ ˜x �`jj:bÄˆÄÄD¼*#•ùøø­ZµŠÇãÑËÿKKK€qãÆ‘KMM€àà`™k‰VXDUâÌÌÌF�ÅçóÏ�;wöìY>ŸïëëKŒ I‚Ëå>xðà“O>€Þ½{SÛBÌ;wîÐ%ïß¿LLL¼zõjß¾}é!„èÄ¢; ¤Ñ„Ô:ŒjÅVÐÇ`×®]Ýºuÿì³ÏèŽåJKK€˜Ü—Ä«W¯ @4ºƒbùË—/¥WMž<9...&&†øMž<™d+*Ùlvhh(y`
++!¨ð)V¹žöíÛ@EE…²[l~ååå~~~¯^½JMM%æ½F¡�>ñ@éŽ:|öÙgë×¯¯¬¬¤;–fh``�””tûömCCC¢#;9===;;»	&¤¦¦’Ì(¬±Ý!PR\\<xðà·oß&''cÖ�B€‰BHÇ¬_¿žÃáüðÃtò?¶¶¶ ðüùsòbvvv �ŸŸ/s-±ÜÞÞ^z•‰‰‰¿¿¿@ þþþÄlYò}û^¾|yöìYÕÚYÉì/ØœõÓÚÚZ…�6›þùgèÐ¡7nÜPø¼!„>˜x „tŠ©©é÷ßöäÉºc ðòò€óçÏS)vîÜ9™k‰åDi¢æUäí¬tq0‰¹)4Óýû÷½¼¼nß¾�YB‰`â�Ò5,èÒ¥ËW_}Ew   DîmÛ¶‘'B³gÏ€;vdeeI¬ÊÊÊ"ÅŸ3gŽÌ×Ž3ÆØØØØØxôèÑj‰Y“=xð`Û¶m 0uêTºc‘-66¶ÿþ=zôHMM%d!„"`â�Ò5zzz[¶l¹páÂíÛ·éŽ|}}ß¼yãååµgÏž‚‚�÷áÃ‡Ç�GDD0€(6räÈ±cÇ¾{÷nðàÁû÷ï/..æñx/^¼øñÇüþýû	&ÓtH322z÷îÝ»wïŒŒŒšqÏšŸÏýúuJJÊêÕ«===«««}||Æ�Ow\28p`êÔ©3gÎ¼páy³7„ú‰7®Å	ÒLøùR�¯¯¯››�Ç£;auu51Å8ù—puuõ¨Q£d–ñõõ­©©¯Súœ|-yyñ2$AR¼”(Ü"•zHÊŒ;öõë×äûÒüÁ÷ßÏ`0V®\Éçóé!D'À	åÀ'!Ý^PP°}ûvº“øøøØØØ€€ ;;;‹ellìââ²xñbñ©9LLL®\¹íëëkmmÍb±¬­­}}}£££ããã?æŸÏ9Ž••UŸ>}–.]š’’rþüy333ºƒú�ÚÚÚiÓ¦…††îÞ½{×®]L&^[BHœÇ!¤›Ú¶mûÝwß…„„Lž<YÞüÍ†Á`Ë›P¼ØäÉ“©ô*zn TyŠe¨TB¥°Z‚ÑAAA¯^½úý÷ß‡Bw8!¤¹ðW„�ÎZ¹r¥³³ó’%Kèé¬„„„>}ú…Â´´4Ì:Bˆ&!�Åb±ÂÃÃˆN2©WDDÄèÑ£===oß¾MûS5„Ò|˜x „tY¿~ýæÍ›·bÅŠ7oÞÐÒ5553fÌX¸páÊ•+ãââ4­Ï	Bi&L<B:nÛ¶m�`íÚµt‚tÄíÛ·»wïž˜˜˜��°eËìJŽBá×%BHÇ™››ïÜ¹óÐ¡CâCH!¤>Ÿâãããââ’™™9tèPº#B!m¢æQ­&Nœ¨Þ
+B P\\LwÚmÆŒË—/OKKc±p4?¤ŠâââO?ý4!!aÝºuß}÷�žžÝ!„�–QÛ�6mÚ()5›§OŸfffÒR›Ö­[ãç«1Æ¡C‡²²²6oÞLw,Hû…ÂÃ‡»¸¸äææÞ¼y3$$³„R�Ú~ùóòòŠ��UWm¨1AÇŽ÷îÝKw,iŠnÝºíÚµkÙ²eÞÞÞƒ¦;¤5rrræÍ›÷×_}ûí·_ýµ��Ý!„�¶Â>:èÆ�ÏŸ?_´hÝ� ¤Y/^ìçç7{öìššºcAZ€Ëå†„„ôìÙ“ËåÞ¹s'$$³„jL<tPxxø AƒºtéBw iƒqôèÑ÷ïß¯ZµŠîX�¦»{÷nŸ>}¶nÝ’žžîîîNwD!¤õ0ñÐ5/^¼ˆ‹‹[¸p!Ý� ¤‰lllÂÃÃ�9rñâEºcAŠËånÞ¼yàÀ�,+==}Íš58 B©&ºæèÑ£Ø!y‚‚‚fÍšõé§Ÿ¾zõŠîX�Æ‰��wuuýá‡BBBþüóOº#B!Ý�‰‡NáóùŸ|ò	‡Ã¡;„4×ž={ôõõ/^,
+éŽiŠG�ùøøx{{çååáƒ„R;L<tÊÕ«W_¼x�í¬"gnnþË/¿\ºti×®]tÇ‚èWQQ±páB¢yFFFxx¸½½=ÝA!„�ÂÄC§„‡‡ûøø899ÑBšnðàÁ;vìX³fÍõë×éŽÑ†ÏçïÛ·¯sçÎW®\9uêTrrr¯^½è
+!„t&ºãŸþ¹|ù2>î@ˆ¢+VL˜0aæÌ™/^¼_þüùóçÏŸÓj>iiiC†ùòË/gÌ˜ñàÁƒ‰'2ºƒB!]†‰‡î8zô¨��Ý¸qãè!­qôèQKKËàà`.—K,IOOïÓ§ÏO?ýDo`¨Ieffôïß¿E‹™™™ûöí377§;(„Ò}˜xè�1{ölì‰u-Z´ˆ‰‰yøðá×_ 111C†©¬¬ŒŒŒäñxtG‡ÔïÞ½{#FŒèÑ£G]]ÝŸþyõêÕîÝ»ÓB},0ñÐ×¯_õêÕÜ¹sé!-ãââ²gÏž½{÷Nž<™Ëå
+…Âªªª¸¸8ºCCê”››;iÒ¤Þ½{s¹ÜÛ·oß¸q£oß¾t…BL<tDddäÐ¡C±[9B*˜1cF×®]/_¾,ZÂd2>LcHˆºìììŒŒ’%%%K—.ussËÌÌ<uêTbbâÀ�›-<„B"˜xè‚òòòË—/òÉ't‚�ö)--4hÐÓ§O�h!ŸÏ¿~ýzQQ��!*RRR¼¼¼¶mÛ&síßÿ=kÖ,GGÇ7nœ<yòñãÇS¦La2ñÂ‡BôÀï_]púôi}}ý	&ÐBZ&33ÓÝÝýáÃ‡Ò=:X,Ö‰'h‰
+Qtþüù¡C‡ÖÔÔ\¸p¡¤¤D|UffæÔ©SÝÝÝSRRöíÛ÷ðáÃ‰'bÊ�BôÂoa]püøñàà`###ºAH›<þ|Ø°aeeeÒky<^dd$Nm®±¶oß>~üx¢O“É<tè …Â¸¸¸�öèÑ£°°ð·ß~ËËË[¼x±��Ýñ"„ÂÄCû=|øðÞ½{ØÎ
+!e9::^¸pÁÕÕUOOOOOOºÀ³gÏ’““›?0DN ,_¾|Íš5¢´�Çã<x0**ÊÃÃcìØ±æææ·oßNII	À©9BHs`â¡õNœ8áää4xð`ºAHû8033óôéÓ666l6[b-›Í&~GGš£®®nÂ„	�X^UU5oÞ¼Ž;¦§§=h	!„	L<´�Ç;yòäŒ3ðW=„TÃ`0&NœøôéÓo¿ý–Ãáp8Ñ*�wöìÙ×¯_Ó÷öíÛQ£FÅÅÅ‰�@`2™}úô9wî’‹Bívýúõ²²²Ù³gÓBÚÍØØ8$$$;;{Ì˜1  šˆ“ÏçGGGÓúŸ/^xzz¦¦¦òù|éµ|>?##ãï¿ÿnþÀBQ„‰‡v;~üø Aƒé!]àäätîÜ¹„„'''"÷ááátÇ… 77·oß¾yyy2G p8œ}!„4&Z¬²²òÂ…Ø­!õ6lXffæ†ˆ¡�<x€¿£Óëþýûýû÷/--%É: €ËåFEE}øð¡ÙC!¤Ý Õ�9s†ÅbÓ¢ÇîÝ»ÓÒÒèŽB—6ìáÃ‡EEEãÆ�sww§;œ�TYYYjjjCCƒ¼žlƒÅb±X,6›Íápüýý­¬¬Ô²i//¯•+Wª¥*„B€‰‡V;~üøøñãMMMéÑ#---==ÝÓÓ“î@t–¡¡a¿~ý:wîœ��Íçóe¹‹šT]]ÝË—/;vìÈf³‰ÔBô/‡Ã!þßDÓ¦§§7Eµ!ô1ÃÄC[eeeeddüðÃt‚èäééKwºO ðx<}}}ºAÍgâÄ‰t‡€Bºûxh«Ó§O·jÕÊÇÇ‡î@Ò}L&³„B¨‘0ñÐVgÎœ™:u*¶ý@!„BZ­”‘‘‘ŸŸ?uêTºA!„BˆL<´RLLLÇŽ{õêEw !„BQ‚‰‡ö
+…111Øñ!„BiL<´OZZZQQÑ¤I“è!„B!ª0ñÐ>±±±]»võðð ;„B!„¨ÂÄCË‚3gÎàlå!„BH»`â¡eRRR^¾|‰í¬B!„�vÁÄCËÄÆÆvëÖÍÅÅ…î@B!„R&Ú„ÏçÇÆÆâã„B!¤u0ñÐ&·oß~õêÕ”)Sè!„B!å`â¡Mbbb\]];wîLw !„B)­ÑÐÐpöìYlg…š‡P(<wîÜØ±cííí9N‹-\]]/^œžž.Q,66vôèÑ¶¶¶ÇÖÖÖßßÿÌ™3B¡P¢BƒÁ`0:vìØÐÐ ½¼1%e¢¾/$•HÔFesâlll<==—-[–––¦ÔñWê8€òo�ÅbÙÙÙ�;6))I^1???ñå~~~2²HÿþýF¿~ýHvJá^K,œ<y2ƒÁðöö–Ø�@0dÈƒ�Ï�BH;Åœ9sFb	Ò			 �——Gw HS7EÍÕÕÕ¾¾¾
+¿4jjjüýýe–ñóó«©©¯S´êÈ‘#ÒËY’$H…ûBR‰DmT6GR&((èõë×ÔßÑÕÞqL&óòåËÒÅX,›Í®¬¬$VTTK¤c dgg‹êÌÊÊ’·S
+÷ZbaEE…�� ìÞ½[|ù®]» ÀÞÞ^¡5Ýç!¤ó €øéIÀ'Z#&&¦G�NNNt‚tßŒ3®^½jnn¾sçÎ§OŸÖ××¿ÿ>;;ûðáÃýû÷›={v||¼™™ÙÞ½{¹\nQQÑ¾}ûÌÍÍ¯\¹2{öl™•oÚ´‰ÇãQ	ƒbI™_mÔ÷EæåÕ¦psâe*++“““W­Ze``pþüùñãÇKnüqPá� "¬¯¯ôèÑ¨Q£AHHˆt±áÃ‡óx¼_ý•øó×_mhh>|¸¼H"##@___ôµ°´´Œˆˆ €o¿ýöñãÇÄÂœœœµk×À‘#G,,,Ôµ-„BMHüÚ‰O<4ŸÏ·µµÝ´iÝ� ÒD¿È^¹r Z¶l™““CRìÆ� `llüèÑ#‰U�=266€„„ÑBâ§{÷î pèÐ!‰åâ/W¶dã÷…b�
+7GRæþýû¦¦¦ «T$
+�ƒjo„x±/^ €���ôÖ£¢¢ `øðáÄÂaÃ†À±cÇdî&—Ëµ±±€Ÿ~ú	 ¬¬¬êëëeî”Â½–¹jîÜ¹ Ð·oß††�×§O ˜7oIm��O<B*|â!>ñÐ)))¥¥¥&L ;¤ûŽ? kÖ¬éÒ¥I1â–tõêÕÒ³Ê¸¸¸¬^½ZTFÜwß} ?üðC}}=yÔK’ ¸/ÍÀÃÃcÍš5 púôi¥^¨ð8¨öFHkÑ¢…ôÂ   ‡“˜˜XVVVVVvëÖ-‡$³†¸¸¸²²2ww÷E‹¹¹¹UTT\¼xQáv©Û³gO»ví222¶lÙ²eË–;wî8::îÙ³G�›@!Ô¤0ñÐ/^tvv¦ýæ	}ˆnÐãÆ�#/–šš
+ ÁÁÁ2×I²t�ê‰'víÚµ¨¨ˆh9C‚zI÷¥yaÜ¹sG©W)<ª½.—›••E<I�èDN0335jŸÏ?wîÜÙ³gù|¾¯¯oË–-eÖF´­š7ožè_5¶¶ SSÓ¨¨(ƒ±qãÆÐÐPƒebb¢ÆM „jR˜xh‡óçÏÒú(”––€££#y±W¯^€¼NGÄò—/_J,g2™ÄOø[¶l©««#©ŸzI’a¦(î‹RÈGµ"Ñ¾}{ ¨¨¨Pjs
+�ƒjo¶¾¾¾««ëµk×¼½½å=:˜<y2 ÄÄÄÄÄÄˆþ”öâÅ‹k×®éëëOŸ> fÌ˜¡¯¯ýúõ¢¢"j;J‰��Ï²eËx<�Ç[¾|¹···+G!ÔÔ0ñÐ999yyy˜x Ý0yòä.]º”””:tH]%µ‚@ Pí…M}¬¬¬¶lÙbii)sm`` ��ARRÒíÛ·å}EEEñùüqãÆý¼-,,‚‚‚�¨CˆºlÝº•øÏ–-[Ô[3B¡¦†‰‡¸pá‚µµµøhB5[[[ xþü9y1bxÓüü|™k‰åöööÒ«˜Læºuë `ëÖ­µµµ$› XRf÷5¥öE)$›#G„amm­ìÉ�ƒjovIIÉòåË+**F�-ýT„`bbâïï/�¿¿¿Ì® B¡�èFB´Ú"­­Ž;FñøPdhh(ñ„BÚ-pñâÅÑ£GëééÑú(xyyÀùóç©;wîœÌµÄr¢Œ´)S¦8;;—––8p€|+ÔK’©p_š1“²HŽCcÞ{{û}ûö�=ºªªŠšV&Qó*yí¬
+
+ `äÈ‘¢æg#GŽ€‚‚‚ÄÄDò½C!ô±ÿÑ‡ÓÕ@/_¾d2™¿þú+Ý� �Ó¤Ãéš™™åææ’»ví ´hÑBµQ\Oœ8 VVVÒ_D*—Ty_(Ö©ps$e233‰átÏž=«Z$òŽC#ß¡P˜››Ëb±X,–øQ/öþý{cccccã÷ïßË¬dÚ´i$W™iÓ¦)<>ÔP,Óx8œ.BHe€ÃéÊ�‰‡¦;zô¨¾¾~uu5Ý� �Ót7FD;~‹Ý»wçççs¹ÜÚÚÚœœbÒ=Q±±cÇ€¹¹ù¾}ûŠŠŠ¸\nqqñþýûÍÍÍ`Â„	âuJÜ,644tìØQæ/ *—lÌ¾P©SÙ{â†††ªªªäää/¿üÒÀÀ  |||yò6GróF,X  â§ùÎŠ¯}ýúµ��ƒÁxöì™D±ÂÂB&“i`` š²„ÐÇ y0ñÐtÁÁÁ#GŽ¤;
+¤‰šîÆ¨ººÚ××WÞØâÅF�%³Œ¯¯oMM�x�Ò7‹âÝŽSRa�Tö…dëJmŽ¤ÌØ±cE÷ßTP?�|#„Bá‹/Æ�;w‰µaaa 6É „#F @XX˜øIŽ!õƒ,/6uÁÄ!¤2ÀÄCìã¡Ñx<Þõë×ÇŒCw èãbbb`ggÇb±Œ��]\\/^,>#„‰‰É•+W¢££}}}­­­Y,–µµµ¯¯ottt||¼Ì^Èâ¦OŸ.oX•Kª¼/M�ÃáXYYõéÓgéÒ¥)))çÏŸ733kL…òŽC#ß hÕªÕòåË…Bá7ß|£lTÄdâÝÊÅÍ™3Ô=¡B!-ÅŠýÂ3yòd!éoN¨9ýñÇÞÞÞOŸ>ob�aâÄ‰ Kw é ü|!„TÆ`0Îœ93iÒ$ºÑ8øÄC£]½zµcÇŽ˜u „B!mÇ¢; DæÊ•+~~~tG�R3òÉÎñ±3B!�„O<4×‹|1ï<    IDAT/>|ˆ‰B!„ÒøÄCs]»vÍÐÐÐÛÛ›î@Bj†Ï4B}„ð‰‡æºzõêàÁƒé!„B¡ÆÂÄCC	‚ßÿ}äÈ‘t‚B!„�`â¡¡îÞ½[YY‰‰B!„ÒØÇCCÝ¼yÓÞÞ¾[·nt‚B©ÜÜÜÃ‡·k×®]»vŽŽŽtG„BÚuóæMò17B5�W¯^…††–”” °µµm'ÆÑÑ‘ø�©©)Ý‘"„�vÀÄC}øð!999,,Œî@Bèã5dÈbæò×¯_ˆyüøqbbâãÇ�ß¿ úúú:t°··oÕªU‡µk×NOO�î�@!‚‰‡&JOO¯««>|8Ý� „ssó^½zõêÕK|!—Ë-**zþüù?ÿüóü_·nÝ*))áóù `ll,z*"Ò¡C[[[šö!„h†‰‡&ºyó&ñkÝ� „’�Ãá899999I¯BRRRòòåËŒŒŒÜÜÜwïÞ ›ÍnÓ¦M‡ÿêÜ¹s‹-š}'B¨Yaâ¡‰nÞ¼9lØ0º£@!¤
+™OHx<^QQÑ³gÏòóó‰œäîÝ»111oÞ¼ 6›M<qú/###šv!„Ô�óöíÛ¿þúkÅŠt‚BHmØl6ñpCâw¥úúú/^ˆ÷!ÉÈÈu 100èÐ¡C÷îÝÅ�`ï„�–ÂÄCã¤¦¦6442„î@B59}}}"�_ÈårÿùçŸ‚‚Ñã‘«W¯æçç�µLMMÅŸŠ8;;wéÒ»Ž „4&'))©sçÎvvvt‚Bˆ§S§N�:u’X^VV&ž�¤¥¥�8qâåË— Ð²eËÎ�;Iˆó¿é!„dÃÄCã$''8�î(�
+…8Ó‹4�@Àd2éŽB³à1Ñ666666žžžâ‰Þ#ÿýwvvvAAÁ•+W¶oß^]] æææÄã”nÝºíµºuë†ÙBˆ.˜xh–ººº;wîÌ›7�î@�†
+…)))—.]Š‹‹+..655�8q"ÝAiŠÊÊÊgÏžÙØØ´mÛ–îX4KIIIaaaÛ¶míìì0¡(==]âþ^c‰z�ˆ#k‰²‘ØØØM›6ñù|‹Õ¶m[‰l¤}ûöø+B¨`â¡YîÜ¹S__�O<�>ŸŸ’’—››kmmíïïß·o_¢Á÷G®¾¾žhÿîÝ;333‰¡„ ´jÕ*///55•Íf·mÛ¶mÛ¶–––t¥é<==½¼¼èŽBuÒ#k½yóæÉ“'�?~üøñ“'ORRRŽ;ÆårÀÆÆ†h Õ¹sgWW×®]»böŽj
+˜xh–ääd{{ûŽ;ÒÒõõõW¯^=wî\|||eee—.]ÆŽàåå…cÚðùü«W¯†‡‡ÇÇÇ2ŒK—.0€îÐ4ÑÓ§O]\\ˆ.Ëùùù­Zµš7oÞôéÓ;wîLwh¨™˜™™õíÛ·oß¾¢%|>ÿùóç¹¹¹999Ož<ÉÍÍ=þ|EE ´lÙ’x"ÒªU+úbGé†P(ý3yòdñ%¨™�=ÚÈÈ(66–î@�¸\îõë×cbb.^¼XSS3`À€±cÇŽ;3RÂƒ<xêÔ©ÚÚZ&“ÙÐÐ  l6{êÔ©Ç�§;:Íµyóæõë×“j ‡Ãár¹;vœ>}ú¬Y³$FUB­²²²¬¬¬ììì¬¬¬¿ÿþûï¿ÿ~ýú5 ˜››ˆ‹‹‹›››»»{Ë–-é!Å`0Îœ93iÒ$ºÑ8˜xh>Ÿoii¹aÃ†Ï?ÿœîXÞ¿îÜ¹ØØØ›7oòx<__ß‰'Ž3ÆÂÂ‚îÐ4BMMÍéÓ§8ððáC}}ýúúzñµÆÆÆùùù8¢(	.—ëââRPP Ê= €Á`°X¬†††¾}ûN�:uúôéVVV4‰4PIIÉßÿ"r¢çzûöí‰ÄÍÍÍÃÃ£C‡ØQ!&ò`S+’••õöí[ìàñzôèQddäÉ“'+++ûôé³qãÆI“&ak‘û÷ïGDDœ8qâÃ‡Ä/#Y‡žžÞÚµk1ë Çáp<8bÄñ…B¡�ÇãÀÝ»wïÜ¹óÍ7ßŒ?þàÁƒ¦¦¦4…‰4N«V­Zµj%:s„Bá³gÏ233>|øàÁƒŸþùÙ³g `bbâêêêîîîîîÞ£Gwww}}}ZGiL<4ÈŸþiddäîîNw ¨™TWWGGGGFFfdd899­X±bÚ´iØâE‚@ ýí·ßä`2™+W®lÎ¨´ÔðáÃ§L™òë¯¿]ŠÅ-Ö>|ø`ccƒY"Á`0ˆA±Æ�O,áñxOž<¹{÷nvvößÿ}öìÙòòr °··ïÕ«×À�Ð£GcccZGÑòçŸöîÝ›ÅÂ7E÷¥¤¤DFFÆÄÄ…Â	&lÛ¶mÈ�!ØJA&&“yêÔ©Áƒß¿Ÿ¸9– Ž9‚¿­RvõêU�'Ýª–Åb6lçÎ�´†´›Í&ºòùüœœœ¿þúë¯¿þº{÷nHHH]]�¾¾¾››[¯^½z÷îÝ»wïîÝ»ãÅ¡�~ì5È�;wF�Ew¨	ÕÖÖFDD„……åçç6,***  ÀÀÀ€î¸4���A|||ïÞ½_¼x!‘{°ÙìáÃ‡K4B$,--·mÛ¶hÑ"‰å,«}ûö1118Ñj$===—Ù³gKJJJîþëÌ™3¯_¿f±XÎÎÎÄÃ�^½zuëÖyAèc€‰‡¦x÷î]vvöºuëè5‰ªªªððð°°°ÊÊÊéÓ§ÿúë¯®®®t¥M¬¬¬âããûöí+
+ÅûFÀ�?þHWTZêÓO?=zôè½{÷ˆÞ Àd2™Læ¦M›°‘j
+D/b~C.—ûðáÃ?ÿü3==ý÷ß?|ø0 ´k×ÎËË«_¿~žžž=zôÀ˜é*L<4Å½{÷ø|~Ÿ>}è©ÙÓ§O÷îÝ{üøqƒ….[¶ÌÎÎŽî ´RTT”‰‰I]]�h	‹ÅZµj•““�Qi#&“yäÈÑ¡Pèææ6wî\33³‘#GÒÒy‡hmµtéR (//'’�´´´õë××ÔÔèëë÷íÛwèÐ¡>>>žžž˜„ ¤Kð‘º¦¸sçŽ��Mûöíé©Íƒ:wîœ””tðàÁ’’’~ø³Õ|ñÅ{÷îýé§ŸÂÃÃ‰%L&ÓÂÂbíÚµô¦¥\\\V¬XA4²g06lHOOŸ:uª¿¿dd$ÝÑ¡�ˆµµõ˜1c6mÚtóæÍ×¯_?|øpÿþýmÛ¶�ˆˆðöö677>|øæÍ›ÓÒÒdvñBi|â¡)îÜ¹Ó»woº£@êQ\\Õ¡C‡S§NMš4	ÛÍ7FHHÈþýû�; ÷îÝ[¶liÑ¢ÝÑi«õë×ÿüóÏeeeþþþk×®e2™ááál6{Á‚<OºBMMOOÏÕÕÕÕÕuÁ‚ ðôéÓ[·nýñÇX»v­‰‰É AƒFŒáïïïììLw°!U`â¡)222fÍšEw¨±ž={öý÷ßGGGwíÚõÜ¹scÆŒÁ“�tìØ±6ìÜ¹sæÌ™Ä’}ûöåååUVVŠº®"˜ššþøã�ë×¯?uê‘3™Ìƒš™™-Y²D(.^¼˜îÑG­S§N�:uš?> <yòä�?þ¸uëÖ?üðÅ_899ùûûûûû{{{ãøiL<4BYYÙ³gÏúöíKw Hu|>?,,lÝºufff?þøãÜ¹sÙl6ÝAi½ÔÔÔE‹}ñÅ«V­-d±X±±±………ø©‘&Mš4xð`‰å›7o¶°°XºtiCCÃ²eËèŠ!qÎÎÎÎÎÎóçÏ—/_Ž��344:t¨¿¿ÿ˜1cÚ´iCw˜!0ñÐ< €ž={ÒRÑƒæÏŸÿèÑ£uëÖ­Zµ
+�S‹¼¼¼€€€   ]»vI¬255uqq¡%*#³ÓÑ—_~)>ÿüs&“Iô FHC0™LOOOOOÏÐÐÐªªª›7o&$$„††.Y²¤[·n'Nœ6m6ÄBHcáï…ááÃ‡¶¶¶ØíXÕÔÔ,\¸°gÏž–––999k×®Å¬C-jkk'Mšäàà�ÍÕšßW_}õÕW_-_¾üäÉ“tÇ‚�l'Nþüù¥K—zõêµgÏž®]»<8,,ìåË—tˆ’„‰‡Fxôè‘››ÝQ ¥¥¤¤ôìÙ366öðáÃñññŽŽŽtG¤;V®\YXXxñâEºcùHmÝºõóÏ?Ÿ;wîµk×èŽ!2gôèÑ'Nœ(--=wîœƒƒÃ×_Ýºuk??¿Ë—/ºDý&­ÃçóCBB†âââ’““3oÞ<üU^�¢££>|òäIÌåèµk×®Y³f�7.55•îXRÌÀÀ ((èôéÓeee¿üòK}}}@@@§N�vîÜYUUEwt!L<4@CCCvv6Îc­EÞ¾}ëëë»uëÖ={öüúë¯¶¶¶tG¤S
+/^¼hÑ"___ºcùØ1ŒðððQ£F>~ü˜îp¢ÊÈÈhÊ”)¿ÿþ{VV–ŸŸ_hhhëÖ­?ýôÓ‚‚ºCCè£†‰ýòòòêêê0ñÐÿüóÏ€²²²’’’–-[†:ÔnÁ‚VVVÛ·o§;  §§wâÄ‰víÚâoÆHëtëÖ-,,¬¸¸x×®]ÉÉÉ]»v]¶lYyy9Ýq!ô‘ÂÄƒ~�=b±XÝºu£;¤ØÓ§O ééé8üqSˆŽŽ¾qãÆ‰'pf@ÍabbrùòåºººéÓ§csy¤�LLL/^œ••õÓO?]¼xÑÙÙùÇÄ©Ðj~˜xÐïÑ£G�:uÂ¡�4_nn®···��MRRR»víèG½yófÅŠ‹-òòò¢;ôvvv—.]º}ûö×_Mw,©ˆÅbÍ�;7//ïë¯¿þê«¯úõë—ŸŸOwP}\0ñ ß£G�°�•æ+//÷÷÷oÕªUBB‚……Ýáè¦6…ÂM›6Ñ’ÁÍÍíÄ‰»víŠ‰‰¡;„TÇf³×¬Y“’’òæÍ//¯ÌÌLº#Bè#‚‰ýrrrºwïNwˆ�Ç7n\CCC\\œ™™Ýáè¦ÜÜÜƒ†††š››Ó’müøñË–-›?þ“'OèŽ¡FéÙ³ç_ýÕ¥K—áÃ‡gggÓBL<hÆãñòóó;wîLw ˆÌÚµkïÝ»wñâEœä±é¬]»¶{÷îŸ~ú)Ý� 2;wîtss›>}:�Ç£;„ÅÜÜüêÕ«]ºt	
+
+zóæÝá ôQÀÄƒfÏŸ?ohhèÔ©Ý� ¹.\¸°sçÎƒº»»Ó‹ÎJKK;wîÜæÍ›™LüRÒh,ëôéÓùùùØÙé ##£‹/òùüàà`ìkŽP3Àk<Íˆ˜xh¬ÂÂÂ9sæÌœ9söìÙtÇ¢Ë6nÜèéé‰wh…Ö­[ïÚµkïÞ½iiitÇ‚PcYXXœ:u*99‡ðF¨`âA³§OŸÚÙÙ™˜˜Ð’�ÏçÏ˜1ÃÎÎîàÁƒtÇ¢ËîÞ½{õêÕ6Ð¢jÎœ9cÆŒ™={v]]Ý± ÔXýúõÛµk×÷ß�¹4R;ƒA×|_4nš&4{úô)>îÐX{÷îÍÈÈøùçŸ���éŽE—mÝºµ_¿~#GŽ¤;¤„={öïÙ³‡î@Rƒ%K–x{{Ï™3§¶¶–îXÒe˜xÐ�UPP°~ýúõë×÷êÕ‹îXtY^^Þo¿ý¶bÅ
+ºAÊéÐ¡Ãºuë6oÞüòåKºcA¨±Æ±cÇ^¾|‰Ãy#Ô¤0ñ Ù“'O0ñÐ@B¡pÎœ9]»v]³fÝ±è¸C‡µjÕjÂ„	t‚”¶jÕ*{{{ìeŽtƒƒƒÃ¶mÛvìØñàÁºcAHgaâA§ººº¢¢"L<4Ð‘#GÒÒÒŽ=ª§§Gw,ºìýû÷‘‘‘K–,a³ÙtÇ‚”ÆápBCCOž<™““Cw,©ÁüùóÝÝÝ¿üòKºAº†ÏçoÚ´ÉÑÑQ__¿k×®QQQâk“““gÎœÙºuk6›mii9räÈë×¯‹ zk�WòìÙ³   -ZXYY-^¼XºÑ —ËÝ¶m›‡‡‡‘‘‘‘‘‘‡‡ÇŽ;D£{xx0‰ùacbb†‡‡‡hÉÉ“'½½½ÍÌÌôõõ;vìøÕW_½}ûV"Î>,[¶ÌÖÖ–ÅbÉ8B1gÎœ‘X‚šqµ¾ÿ>Ý� ÿ(--µ´´\±bÝ�è¾ÈÈH}}ýòòrºAªëÕ«×äÉ“éŽ!õøã�?  !!�î@�v€3gÎÿ€¹sçJÜ~ÇÄÄˆ–À`0ÎŸ?/Q€¤’ŠŠŠÖ­[‹¯?~¼ø}~]]ÝàÁƒ¥7äããÃår…BáîÝ»   @|/ÆŒ {öì
+…�`Ú´iÒ5tïÞýíÛ·âqŠ7a�qdÄÿÀÄ£™]»v ªªªèýÇ‚Ú¶mûîÝ;ºÑ}^^^“&M¢;
+Ô(ÑÑÑzzzyyyt‚�zŒ=ºW¯^�€î@�“H<Ú´i÷öíÛÂÂÂÀÀ@ 8p ¨°ŸŸß•+WÞ¼yÃårEƒvôéÓG¼6òJ¾úê+ h×®Ý­[·jjjÛ¶m+~ë¿uëV 033;zôhYYYYYYdd¤©©) lß¾](–––²X,6›]QQA¼¤¼¼œÍf³Ùì²²2¡P 111åååµµµ©©©}úô€5kÖˆÇéààpùòåššÙGFüL<šYdd¤‘‘ÝQ ÿ¸wï“É<uêÝ�è¾§OŸ2Œ«W¯Òj”†††víÚ}ýõ×t‚�zddd À•+Wèi1‰Äãúõë¢U `bb"Z’��`gg'Þ6ÉÀÀ@¼6òJºté /^øí·ßÄ777 ˆŠŠòÈ‘# àááAü   þ€ÀÀ@âÏ~ýú@RR’xùùù Ð©S'ñ8ýõW²##þ&ÍlãÆ�ÎÎÎtG�þÃÏÏ¯wïÞø[W3øî»ïø|>Ý� Æ
+µ±±!ž×#¤F�åííMwH‹I$>|­â)Att´¼Ù6Äk#¯D__ ^¿~-*PUU%^ÀÀÀ  $6—••€¡¡!ñç¹sç ÀËË‹øÓÓÓS<‹022 ======&“Éd2Ea³Ùlñ8Éò`çr:½xñB¢M¢×�7®\¹²sçNœsG÷DGG�?žÉÄo!­7gÎœÊÊÊ‹/ÒBê±bÅŠ[·nÝ¿Ÿî@�Ž îû	77n
+…‹-ÊÍÍ%R‹wïÞ)[‰ZŒ3ÆÒÒ2--­   ???==ÝÒÒrôèÑÄZ"¯àóù|>_ ¿Ï«D=Ô	æææ$[ÁK>�Š‹‹èŽý¿���#F2„î@tß£G�ž>}:yòdºAjààààëëIw ©Ç¨Q£ºvíúÓO?ÑÒ}Dk¥­[·:;;©ÅÍ›7•­¤}ûö pûömÑb˜ggg ˆ��_xéÒ% èÜ¹3ñ'‡Ã™:u* œ<yòäÉ“ 0mÚ4‡C¬íÞ½; dddÈ{ÂC&t*..Æ'š#%%%55uÃ†tòQ¸té’���——Ý� õ˜={öõë×KKKé!5`0.<uêTMMÝ± ×¦M Ø¾}{UUÕ›7obcc,X l%D_óeË–ýñÇïÞ½»uëÖçŸ.^€�jÅŠ'Nœ¨¨¨¨¨¨8vìØÊ•+E«³gÏ€_~ùå—_~ýIX²d	±¡#GŽ<þüÃ‡õõõOž<‰ˆˆèß¿¿±Šç+:ßÇCz—éeiiFwè&NœØ¯_?…Åh<‹4ínŒAƒÍœ9³©·B|ûûû‹/>>>  öþýû«W¯îÙ³§±±1‡ÃqrrZ²dIaa¡Âúå½#2—‚˜˜6›mccãççM¥C‘ø—¶žžž½½}ppð_ýERÆÖÖ600ð�?þ ©JÞå€Êæ$|øðÁÈÈ(22Rá¾4)I1¡P(Îž=hggÇf³���]\\-Z”––F	ÅR?+ˆh�œœx<žôrÕJJSãY¤	�<<r¥¥¥çØ±cÔ_B—7oÞ,\¸°uëÖDó¡–\,´"H•ÁûxH¯-Ü¾}»ÄY:kÖ,‰W)¬„Êpºƒ’þDx{{×××‹WëââB¬ruu•Øâ²eËÈ?YTÞSÝL<äí¹F�åµµµã4#èéé�>}ZaIÏ"�:�£²²ROO¯†ûçŸŒ��àÜ¹s¢…{÷î ;;»ÊÊJb‰Ì¯Qssó�×Oý«¦¦¦Æßß_æ†üüüä;(Q¡6›-~G(³“É¼|ù²Âª$¦²9i~~~´ŽÜ˜ƒ ]¬ººÚ××Wáá’Fñ…J�¢UGŽ‘^®ZIõ@‰ú5ä ÈÛ.���~~~J½„óçÏ—ØGv¶éÈF£‚T; œx444ìØ±£S§Núúú:tØ°aƒ¨Ë„Ìòò[XXÌŸ?ÿýû÷êêê¶nÝêææf```hhèææ¶mÛ6‰¬C(îØ±ƒxáÎ�;¥÷+!!!88ØÁÁ�ÍfvïÞ}åÊ•™™™$qJ†-þ‡Î'…hÕ'¯µjfß|óM«V­¤?�Òh<»´âÄ¦"::šÅb5Ï6Ä�I­[·&î`rrr ..NT¦G�;wî¼ÿþû÷ïß¾}{éÒ%¢½¬��yåÔ/¨Ä„Jfff{÷î-,,är¹EEEûöí#:áM˜0�ú†êêêîÝ»çíí ƒ–Y¦¾¾þÑ£G£F�‚ÿO³²›“FìNCCyåMJ…ƒ@RŒxbfnn¾sçÎ§OŸÖ××¿ÿ>;;ûðáÃýû÷'	ƒâ•:+D·•ŽŽŽâˆI¿¡ÔKªå jòA �P¡“'O²ÙlÍŸk«U«V Oï§O�¹r)þM<�L<h“žž ÏŸ?§;$äóù­[·^¿~=•Â˜x4Þ'Ÿ|2`À€æÙ�Çsuu€U«Vñx<b¶£¹sç’¿êÏ?ÿ±Aå¡˜xÜ¸q Œ��=z$QòÑ£GÄ3ò™’¥7TTT âI—yñâüw0x’˜•Ýœ´ÜÜ\ HMM%¯¼I©|¤‹]¹r Z¶l™““£T_¨ìYAÄLôï<tèÉ¾P/)M]g‘†’MSQUUÅf³©<	§ÑÂJcG�×™+—R0ñ�GvâÁãñöîÝÛ«W/cccCCÃ!C†ˆ&%©¯¯ßºu«»»»¡¡¡¡¡¡»»ûöíÛ¥xhhhm×®‡ÃéÒ¥ËÑ£Gÿ³U
+e„BáÏ?ÿ<dÈ�–-[­®W¯^ýæÍÑZyA‚,âÛÕ –}Qñ½\]]­–ÚPcÜºu rss©¦rVÜ¾}{ÆŒ,ËÂÂbÄˆ×®]S¶’‚‚‚±cÇ[ZZ.Z´Hú±)ù	ìîî.ýÅG|ÆÝÝÝEKÈ?eÄkkk?ûì3===*‡ˆœ@ °··•W@æF‰ŸE»wï.š÷ƒÏç÷
+›÷¤¦¦2‹5sæL h×®ÝÛ·oÉ_Bô(µ³³#/&ï‚*±œèº"³’�� ˜>}ºR¢žxXYYQ‰YÙÍÉÔ¦M›­[·’—!Ù¢ø›®Ú;®òA�.6eÊ Ø¼y³²ûBñ…ÊžDÌÑÑÑ Ð¦M›ºº:yûB½¤4u�ErÈ·N…��Ïœ9s$ª•þJTívEØèû %ª$///  €¸š,\¸Púj"ópÉ,#½ïä×;’À$ê§÷–Lí 9d$\.wäÈ‘2O”ºººÁƒK¯òññ�Ä’¹sçJ”‰‰‰ùÿ­**#Ä{Ù‹tïÞ�¸c 	’âY®®}QÙ©S§Øl¶ÆþDñQYºt©ø½89êg¸8‰þ<
++¡ÒQŒüÞ½{7 ˆ?fÌ Ø³g��Â§L'q(¾õÆxüø1 ¤§§“a‰�¾zõÊÂÂ Nœ8A;~ü8 ØØØHÌˆ$“¨4ƒÁøý÷ß–'æsUØ¼[Þ1‘Xîèè YYY2+yôè tèÐ�â†êëë333‡
+ÔšZItâ§ò>RÙœLãÆ�S­›‡ô›®Ú;®ÂA�W¬]»v  ìãê/Tö¬ bæóù]»v€üQz_”-)M]g‘†ò­S±iÓ¦6mÚHT+~¢6æv¥ñ÷!Ò¯•Ø„P(,//···_.q5‘w¸d–‘¾HoWüzG˜øÿi¿%S;ÀÄC‰ÇÎ�; E‹ûöí+**ª««KMM
+
+
+…[·n 33³£G�–•••ê;T    IDAT••EFFšššÀöíÛÿW#  ´iÓ&..îíÛ·………DCÏ�þÿV•‰ˆˆ  ‡˜˜˜òòòÚÚÚÔÔT¢�Äš5k„B!I�BjwêÚ•………Y[[7¾ÔH¶¶¶?üðÅòTÎ
+??¿+W®¼yó†ËåïÙ³þÛHZa%_}õ ´k×îÖ­[555‰‰‰mÛ¶Uê.--e±Xl6»¢¢‚xIyy9›Íf³ÙeeeB
+Ÿ2Qœ—/_VØš¢ãÇ�ëëë“t§‘·ÑŸþ Ú·oÏår¹\.ÑC4©*¹’’b¦BÑHV$²²²Z¶lÉ`0nß¾M^Ræ5UDTŒš]|ÒYqµµµ ¨Y—Ìú©t.÷öö� 
+cVjs2…„„8;;“—!ÙA‰7]…w¼1A¢ù»F‚â•=+DïÑ©S§  U«VÄk%Þ;¥JJkÌ¯_C‚ÌØ”’œœ âÕŠŸ¨�¹]Qï=•ôîÿÿòË/ÀÑÑ‘¸šÜºu‹HA¥ÄCú›™âõNúØŠ/§ý–Lí 9d$D�Ã‡K—vss€¨¨(ñ…ÄOƒÿ«  ®_¿.*PPP  &&&ÿ¿UEeúõë IIIâ"zcwêÔIøo3™A
+©�åêÚ•…††vîÜ¹ñõ F"ZógggS,Oå¬HHH°³³c±X¢kžx#i…•téÒ D�ã…Báo¿ý¦ì	   þ€ÀÀ@âO…Ÿ2Qœoî)úì³ÏúöíKR€d£Äª öeÚ´i7J\zÀÜÜœÈ»äÉÊÊ"~üæ›oV¤DÅÔ›xèééÙÙÙM˜0áÎ�;äÁXYYI�úJ%`*›“éüùóL&S…UÞ›®ì;®òA�.¦±‰ŸÏ'¾ˆG—ï�R%¥©ë,Ò�ƒ 36¥ÔÕÕq8Ñ|D=â'jcnWÔ{O%½ûÄÿ‰éáÄ‡Ó¸xñ¢ÄKd™e¤?¤¯wÒ»/¾œö[2µL<ä�‘xC¾È¼6ß�¹ËÊÊÄ¿ˆ3Cü{D È<}IÊ€žžžžž“Éd2™¢ÉáÙl¶P($	RHí,W×¾¨låÊ•žžž�¯5ÒŽ;ìíí©—WxVDGG‹NW	Ô+Ñ××€×¯_‹
+TUU){Ÿ;w ¼¼¼ˆ?===Å/
+?e¢8Õ;¨Kß¾}—.]JR€d£ÅÅÅ-[¶´³³³³³³··�‡K.))‰Édêéé×¶Y³fÉ+™ššJ4ïY°`õé5.WoS+*eJJJ–/_ %%%�©J)Ïž= …s\ÈÛ¢ô›®ì;®ÂA�WL3›Zÿ'&¶µµ•n¬¯TIiê:‹4ê 4RïÞ½¿øâñjÅOÔÆÜ®¨÷žJ¼ñ%
+¯&2k�^(óCJýz'½ûâËi¿%S;ÀÄCŽ¦š¹œ8‡òNJ’2B¡ ø|>ŸÏÄ ±J4¼q³¡²/*¨ªª"nq½RRRT˜?›ä¬Ø¸q£P(\´hQnn.ñùîÝ;e+Q‹1cÆXZZ¦¥¥äçç§§§[ZZ?!ƒ2Ÿ2b\Kµ¨¯¯ðàÑ�œÌ�ZXXSŒÕÖÖZ[[·hÑBa=ïÞ½›={¶@ X³fMll¬¾¾þ‰'þøãé’—/_>|xUUÕÂ…:¤Æw„8Áˆ<Pš(?T×æ ÀÞÞ~ß¾}£G�®ªªZ»v­k&×®];CCÃ'Ož¨öré7]…w\„âA�WŒxGÎŸ?¯äNP}acÎŠ)S¦8;;—––8p€|+ÔKJkÌY¤Q¡‘zöìyïÞ=ñ%â'jóÜ®4õÅBbæA øðáƒÌ’Rê×;uiêC�šœxB<ñððð €ˆˆé4…ø½ðøñãâ�=
+RÏÂ$^(±Pa™Þ½{é$A
+ÿZNbfS‰M¨k_T6vìXòqlP3VVV2gÉ‘GáYAü¼$>¤É…”ýPljE~…ÂÏ>û 6lØ@Œ³lÙ2Ñ*…Ÿ2yq6Æ�;w@QÃ6’�Ó¦?~|Ë–- °zõj…[$º•»»»½JÖ¯_ Ýºu,E(FEEí–,YB}Èy¡J,¿ví ´hÑB�ÃéR)“››Ëb±X,–øˆmªUE]çÎ�7lØ ì«ämQÙw\åƒ ]ŒxÐÌÌŒâxw"_¨ìY!ó‰' ÀÊÊJz_¨—”¦®³HÓBc„……‰õ’®¶1·+MwO%¾Dº©U\\œÄKììì@¬+‹ðß·†|+Bj×;­¸%S;À'rÈH<víÚ &&&aaaÅÅÅuuuiiiâ¡ÌÍÍ�?^^^^^^effR½$7Cáô_HœmvvvÏž=«­­­««ËÍÍ=|ø0Ñn„$H¡Phcc §N�’h9*¾	uí‹ÊüÙgŸ5¾ÔDKÜäädê/QxVtìØ ¾ýöÛÊÊÊ×¯_ÇÄÄØÚÚ*û Ø¹œü
+…ýõ 8;;wêÔ	 îÞ½+Z¥ðS&/ÎÆ8pà€©©©h€T™ämôÆ�ÃÅÅ…Ïçøð¡mÛ¶L&311‘¤ªøøx àp8¢9È?|ø@¼Aâ£¾“ÀòåË•Úy¡J/;v,ñ~L‰^˜û÷ïWaA¥Ê,X°  ‚ƒƒ_E#GŽT8M
+Å-ªðŽ7æ H#º®ZXXìÞ½;??ŸËåÖÖÖæääPœ@Pá•:+$bnhh Îdé}¡^RšÏ"�:�qýúu  º×KWÛ˜Û•¦»§_²jÕ* hß¾}RRÒ»wï’’’ˆqÄ_B[XXXX]]}éÒ¥6mÚ(ÜŠ�ÚõN+nÉÔ0ñ�CFâÁår‡R„Ba]]Ý Aƒ¤Wy{{‹Æ¨QíC"½�ø¡K&¡PH¤P(œ={¶ÌåâÿW×¾¨¬wïÞ_ýuãëA�qõêUP²ƒÂ³Bt+2kÖ,e?T†ÓUx\\\ˆU®®®[$ÿ”É‹³1/^¬p™­ªªrpp ±ßí~ùå hÛ¶­xÛeq•••D7q‰ÉˆÛ###Ñô�òHµ9¦ªÌåÕÕÕÄ°¤Ò|}}öÆ¦òFÈ,óâÅCCCƒ!êN²³JmNžùóç:TÙWIoQ…w\f=BùAa±êêj___…‡KÅ*uVHoôØ±c2ƒ¡^RšRPáÞiÔAPÙóçÏáßÀeV«òíJÓÝS‰/)--%hˆÉ‹Å•'~£'µ–d+Bj×;­¸%S;P2ñPvGTØq9V2¡PÈårwìØáææf```llìíí-jòQWW·uëVb•¡¡¡››Û¶mÛÄotTû�È\˜��ìààÀf³»wï¾råÊÌÌLb-I�oÞ¼Y¼xq»víØl¶¼³\]û¢2WWWŠSe£¦sèÐ!333¥^¢ð¬hhhØ±cG§N�ôõõ;tè°aÃQK_ê•…Â‚‚‚ÀÀ@ccc‹ùóçKw TxvìØA¼Pf‹2òO™Ú¿§†>oÞ<ò227JÌG&>ß¹@  úŠL�:Uf=“'O OOÏ††™µ‰ø’¾Ú‰¨+ñ ŽŽŽöõõµ¶¶f±XÖÖÖ¾¾¾ÑÑÑ�éÅN¥Ìš5k `øðáâÅdRjsòlÜ¸Q…u¥·¨Â;.³‚Ìƒ °±ÑØØXÑ =ÆÆÆ...‹/VØ�žâ©ŸÒ1óx<'''éåÔKJSãY¤iAe<�Édž={–¤Z•oWšèžJbÉ“'OF�mdddaa±`Á‚ììl �ÐÿèÑ£]ºta³ÙmÚ´Ù°aCCC•¯*×;­¸%S;ÀÄC†Pì$&&†äžä;©K—.]fÌ˜±nÝ:ºù¨}ûí·W®\¹ÿ>Ý�|,.\øÍ7ßÐj*‡Z»vmee%Ý� ¤6–––›7o^¸p!Ý�¨GXXØ²eË¼½½éŽEg1Œ3gÎLš4‰î@4NS�j…âr¹‡î(>vÿüó�h*%ÔÔêêêŠŠŠˆÞ&HWYXX¼yóF4Ì%B:ÀÊÊª¼¼œî(Ttûöíêêê—/_FDDc”‰ÏAŽP³ÁÄƒ6˜xh‚ªª*KKKº£øX<{öL ˆwEºÇÂÂB ¼yó†î@R++«ŠŠ
+º£PÝ…Ü²eËV­Z-X° ºººW¯^Ä˜HC0ñÑ�¹\î¶mÛ<<<ŒŒŒŒŒŒ<<<vìØ!>@³DyâO>Ÿ¿iÓ&GGG}}ý®]»FEE‘l‚ÊKòóó[´haeeµhÑ¢ÚÚZ‰JTÀR\5L<4�Çµ:EM-//�Á``â¡ÛˆLç)BºDÛ�Ë—/ïß¿ÿáÃ‡•••mÚ´?~üºuëðDcÕ××�92))I´äÁƒ<¸råÊµk×HnZ,X@³ �?ž;wn‹-&NœH²-’—TTT4èåË— ðþýûððpµ<÷Ã'´ÁÄC`âÑœòòòlmm•ši"ßÀ>H—h{S+ÿ«W¯–””Ô××çååmß¾ÝÔÔ”î �\{÷îMJJ233;zôhYYYYYYdd¤©©ibbâÞ½{I^xãÆ�¸¸¸·oßãYïß¿Ÿ|[$/Ù¶mÛË—/‰aýoÝºu÷îÝÆï&´ÁÄCp¹\L<šÍóçÏEãÇ#]%zâAw ©�‘‘‘¼™¼R»S§NÀž={æÌ™cmmmmm=wîÜÝ»w‹VÉ9fÌ˜ÿcïÎãš¸Öÿ�?�„]6Ù÷ZQÜ+¸¢¢‚TÑŠK­Z´jÅ^­¥.mm«¶UA½ÔÖ÷­ÕºáŠâ..­X·«µ‚Z@¶ ™ßó»ùæ†d2�$“„Ïû_ræÌ9Ïd–Ì“3‹££cÃ†ÙåúõëÜ}qÌÂ¾hråÊ•½{÷vppèÝ»÷Ê•+k¾tH<ƒÄÃˆD"<ÆÍ`rrr”'æÇÁÁÁÊÊ
+‰˜†a,,p¾rïÞ="z÷ÝwÙáˆ»wïrÌ¨ø.”Æ�Qaa!w_³°o°éÑ£‡¼‚âÿ«;’`*++q œ››®	1˜¼¼<777¡£ ½suuEâæ„a˜ÞP` 666òÿóÜb«1KáÄj5S¿eÐ´äææº»»è03ñ CjÙ²%)½NþàÁƒDôÖ[o,v äÜ¹sò’óçÏ×¼YìHP«Õ­[‰‡Á`Ä£–¨[·.ÁœÈd2Œx€ÁŒ3†ˆfÎœ¹uëÖ¼¼¼¼¼¼Í›7GEEÉ'{­×Œ3Îž=[TTtöìÙ3fÔ¼Y}%5Ð/€¸¹¹åääEmÙ_òòòŒaÄC¤†b�nÝº‰D¢®]»r´À]ÂgªºvXb±ØËË+,,Lñ¡ŠÜ‹`$[‘I'ÃìÞ½;,,¬^½zVVVmÛ¶�ŒŒLOOWª–œœêééieeåéé9hÐ ÄÄÄª÷ŒÉWMHHˆbyHHˆÊµ¦´Ô¯_ÄˆJ“Ñ¸®¹·Ž©J!ñÙÒmll<<<üýý§OŸ~ñâE¾ºÑ3¡ã9@µÍœ9³gÏž¯^½úðÃÙ›Ë'L˜ðúõëÀÀÀO?ýÔ`aÌ™3ÇËËëáÃ‡½zõrppèÕ«—ŸŸ‰Å5{£ 11Q©D£ª�p—ã$"ö[
+´wï^‘HTPP ÛfµÝ®Le©‰üü|":räˆÐ�¨}–€¼ÂíÛ·å…7oÞT×w	Ÿ©êÚQbaa‘’’ÂgŒd+š8qâÀ�…Ž¢:
+
+
+‚ƒƒ5~¶………ƒRY'$$¤°°P±M¶\,K$’/^°…yyyl	Ïm@"‘œ>}Z©Ç‚po!S•Vcî:C‡}õêU5W†1‰ˆˆ¤k�ëº†õAOHËs<¥WZZíççgccckkëççSVV¦®¾ÊõÎ]‡Ï,÷îÝµ³³suu�2e
+ûåèîîÎ¹ªÒW¯¸  F«M›6Ìÿžh
+¢6ì/ìOàÆóžøªGCù¤6‘µµµüÿ‚ÄVVVvãÆ��Êd²¨«¦n)äêêj¢#cÇŽ=räˆ‹‹ËòåËïß¿_VVVTTtûöíuëÖuëÖM^-""âÐ¡CÎÎÎqqq�?–J¥YYYñññ...‡Žˆˆ¨ÚrPPPyyùž={Ø?÷ìÙSQQ¤.vm–––þñÇ���åååß|ó�¶‹£nQ¹ÍplH|¶4¶°¢¢âÅ‹çÎ�ûüóÏmllöîÝûÞ{ïÉfY&t™¨ñ€?ö‡9Åû¼­­­çÎ�{ýúõ’’’âââë×¯Ï™3GñQ¨J+šc¯¬É,-Z´8xð`QQÑ‹/Ö®]{âÄ	"òõõ­ÉÂêkÄÃT?aÄÃTVV:88$$$è¶YSß/ôáÖ­[DtëÖ-¡Ñ°v¤R©‡‡­^½šˆÜÜÜdR×w›ê¦òiçÉ“'DdccÃ¿;Áýøã�^^^BG¡µÃ‡‘““Ó�;w8ª?~œˆìííoÜ¸¡4éÆ�öööD”šš*/dWÖ¦M›ˆ(((ˆ-ì×¯mÞ¼™Ï6�••EDvvvu”hµ…pTæÓŽº:×®]cßR—œœÌ3£Õµk×Y³f	Òµ‘ïì ÿs¼¢¢¢èèh"òõõÕwTÚb¯õÍÏÏúôéºuëØ=zåÊ•5i³F#*/U,Q¬)‰Þ¼y3aÂ''§zõêÅÇÇÑË—/ÇŽëâââææ6oÞ<æs¯íÛ·:;;[[[7oÞ|Îœ9lRÈ’J¥111íÛ··³³³³³kß¾ý²eËÊËË•:­³b�êâ‡ZÂÂÂâí·ßfÏ‰uEã~QRR2}útOOOù…’JÛ^ffæ�!CÜÜÜ¦N�Z\\¬mÒ´û¨‹DÊÊÊè¿ÃÆìÀ�999íÚµ›:uªŸŸ_^^Þþýû…ŠLëuï�5zþü9»ÆMÈ–-[ˆhîÜ¹­Zµâ¨Æ¦³gÏnÓ¦�Ò¤6mÚÌž=[^GÑÐ¡C­¬¬ÒÒÒØ÷Ÿ:uÊÊÊjèÐ¡º\ #Ó¾}û¹sçÑ/¿ü"t,5•››+Èh-¾Mj{{û/¾ø‚ˆÞÿ}¡cQ¶oß¾^½z999Õ¯_Ê”)�:uš2eJ�UÌB´ñàhP©qöÏaÃ†)-Ï;ï¼£X²uëV¶¾L&Syç¾¯¯o~~>Ã0¥¥¥½zõªZ¡OŸ>R©TeU5~ zEñ0Ó¦MëÒ¥‹Ô¸_>œcÉÍÍ­W¯žâ¼ï½÷žV4î>‘è{§éãÇ�õÝ‘FÜËË^»¿bÅ
+†aØßG‚ƒƒ5¶ÀÝ¦º©ÜíÈ/µ"¢qãÆñïNp—/_&¢ÌÌL¡ÑŽ��qw0Ã>bRåÍ?ÃÜ¸qƒˆš6m*/‘¯¬ÁƒÑÏ?ÿüÓO?Ñ�!CÛ@FFFß¾}‰¨W¯^*ë¨¤ÕÂQ™O;uØ«X6lÈ3£U§N�õë×¾ßª‡qÂ·‰‰ Þçx–––Í›7_°`AEE…¾£ÒVJJÊÀ�Ù'm4kÖlöìÙòõ^mº¹œý³}ûö×¯_ÏÏÏŸ6m999)•tïÞ�­Ÿ��@DÞÞÞIII¹¹¹ÅÅÅ.\èÒ¥Í�;—avXÊÙÙyãÆ�ìH6l`Ç€–.]Ê›ÊÀ´Zd]á¿Q‚^íÝ»×ÂÂ"77W‡mrïÞÞÞ)))Šw *ÖŸ5k5nÜøÔ©S………§N�bÏ‡øWÐ¸ûpD¢?§OŸ&¢çÏŸ /nU¿Då]vv¶¥¥¥µµ5{ð‹/¬­­-,,”ò¥ªë—ûHÂó8©.¶ÀÀÀ¼¼<�Õ<š)yúô)�:uJè@´Ã^`]RRR“jÅÅÅDdkk+/‘¯—íÛ·³k³wïÞD´cÇ†÷6 Û›ËUV®v;³—””(}¦¨´´”ˆöîÝ+HïÜk­v~›˜Â9žM<.^¼ÈþÉ~-U-ñðð`ÿdŸbyæÌÅ6333‰¨E‹Ã°�ôÚ´i“b…õë×Qûöí9bãÄÔ7l”Fâõë×b±8))I‡mrï{öìá¨Ï¾èÀ�ò©òK}xVÐ¸ûpD¢?ÇŽ#"cxÄÇYÔ÷ßOD£G�–W5j}÷ÝwU[à.á3U];ŠÜÜÜäÇIîEðh¦D&“Õ©SgíÚµB¢}'666¶¶¶ì)÷6`iiéåå5|øð+W®T­Ã¤V[Gk|Úá˜½¨¨ˆL?ñxüø1�;wN�Þ¹×Zíü61	„s<5šx”––²Êd2•%"‘ˆýÓÎÎŽ=æZZZ²‡iù‡‰„ùï¡_éWjö…òcœÊØø1õ¥ñèÚµëÇ¬Ã¹÷‹—/_rÔgï‚P<A—¿šg�»G$úsàÀ"***2X�ê¨[;2™¬iÓ¦DtìØ1y!›/5mÚT&“q´À}$a/z.//W,”J¥D$‹ÕµóôéSömM®®®OŸ>åß�1èÑ£Gdd¤ÐQhGß—Z1#¿ŽeøðáU§ª+©Jc­¶ŽÊ5†½}®Q£F<#1N'Ož$¢gÏž	Ò;¾MLáOƒ¾G~_©|ÃU*aö"ª¬¬¬¬¬”ÉdìW>;IñöqnJm;ì ¤_¿~G�UÜTôÊÅÅE¯íóß}ô‰"ö<[ñi€Æ&--íÁƒD4`À ù}œ ¢¤¥¥U»eWWW"bŸO%ÇþÉqÇ*ûŽÐÐÐ—/_Î›7¯Ú½¢]»vþù§ÐQh'  €ˆöîÝË§ÚîÝ»UNeËÙ:U±hŠÿ1oì‡É^™cºîÝ»çäääåå%t *ÔÎo0i5M<Ø“ûŠŠ
+]óØ‡_¾|Ye¶DD-[¶$¢C‡)ÎuðàA"b‡‰ÈÓÓ“ˆ=z$¯pöìYÃÄ¦eìØ±�=:wîœ®¬ÉvÅþžªÌùóçµª q÷•¸_ÙQ“z´k×ŽˆØ§µÊ±Ç+v‡ØØX±X¼mÛ¶{÷îU; ÃcÓÚÞ>üðC"Š‰‰áþ¨Ù×t,[¶ìæÍ›J“nÞ¼¹lÙ2"š0a‚Êyß}÷]{{{{{ûÐÐP�ÄlÌ®_¿CFù¬­Ü¿¿E‹BõŽo07ŠÛP5.µbx¿sçN¥^•¯ÚwÉÆ�‰ÈËË+!!ááÃ‡ÅÅÅ¥¥¥wïÞ]·n]@@ óß›Ë]\\¶lÙ’›››››»iÓ&gggR¸¹œ}È�!C?~\PPpðàÁ†*õ«.~ Ã“¶mÛN›6MW­ñÜ/T–þùçDÔ¤I“3gÎ¼yóæÌ™3Mš4Ñª‚ÆÝ‡#ý1òK­^½zecc#‰>|¨4éñãÇ666òøÐ±¯kpttÜ²eû0ŒÍ›7×©S‡ˆ¶lÙ¢±öÙ…ááá<»3W®\!¢Û·oˆv†BD®®®±±±™™™R©´¸¸øÎ�;ìåÕÂÂÂØ/ øøø¬¬,©Tš��½bÅ
+öG_ùeT,î•¥í¶Ä³ŽV[Gemƒ©¨¨xùòå¹sçfÍšÅ^Ý§OÅËMÑàÁƒ?øà¡zÇ·‰‰Â9ž:5M<ª¾¢õÿ·û¿"Ÿc«RÉôéÓI†aJKK{öìYuR`` üm_Jã!D4qâD¥^ÔÅo Ø(�ÊâÅ‹ÝÝÝ•®Â¯6žû…œbùóçÏ•ÆôÙ³ùÍ +0švŽHôçèÑ£DôúõkCvª’Êe_µj)¼ßMIÿþý‰hÕªUêZP÷i³Õ*++ƒƒƒ«N
+		Q:'SÛ“'OlmmE"‘ücîîŒAee¥‡‡ÇòåË…D;*×”Òg[PPÀ>æ¸ªàà`¥ûp¯uÛwœ7 ­¶Žù´ÃQ',,Ìž'QCo½õÖ‚„êß&&ŠªuŽW>Ìš&¯_¿ŽŒŒôññ‘H$bÕ�’OIjjjxx¸···D"±µµõõõ�ŠŠÊÈÈ`§–––FGGûùùÙØØØÚÚúùùÅÄÄ(½cxãÆ�­Zµ’H$6\¸p¡|°RcüP½�ôä¯¿þ‰Dì�5Çs¿�S*¿wï^hh¨���««ë”)SØgá»»»ó¯ÀhÚ}tcï‘ÈÉÉ1d§*©\ö:ÑÎ�;UÎ²sçN"êÐ¡ƒºÔ}1Ë«•••-]º´]»v¶¶¶¶¶¶íÚµ[ºt©ü¥CÜ±1Ã¾ˆMžiìÎ¼ÿþûê9c&“É’““ìåå%‹íííÛ´i©ôl1™L¶k×®àà`www±Xìîî¼k×®ª¿îs¯>_…êæâØ ´ÚB8zäÓŽb¡•••››[—.]>ùä“óçÏs/…I¨¨¨°²²bŸ},|›˜(â<Ç«ÆÎhTjgM¨6î�¯W¯^Ã†:
+V®\ID���Õ®`ØK‡³³³…dóæÍVVVx®?˜4ö1e×¯_:Ý0�o“P½ÄÃTÔ$~ƒ>Õ
+À˜Íœ9sß¾}ìs�„5tèÐ³gÏ<{ö,!!�}¢‘â{a5V0Bìó¬Øg[AmT^^žšš*t  Õ—žžîààÀÞcmŠÌòÛL›b‚C"Œx™ŠŠ^?åM    IDATŠ&MšÌš5Kè@T\ÞÐ©S'ÅË5V0B×¯_'¢ÿüç?B†Ó¿ÿ��¡£ ¨¾)S¦ôìÙSè(ªÏ,¿MLÇ9ÇÙ¸Ò™9ûgaaaDD„£££——W\\Ã0/^¼øàƒœ��ëÖ­ûÕW_)]á¹mÛ¶Þ½{;99YYY5kÖlöìÙŠwW–••EGGs\÷[5;P*Ô˜Mhødÿ@âaHH<ŒPtt´³³ó›7o„#%%eàÀ�õêÕ“5òóóµª`„ØG”^»vMè@Àp~ýõW‹ª
+0:tˆŠŠ:Šê3Ëo“ ÃÄcØ°aŠ5÷íÛ÷Î;ï(–lÝº•­/“ÉÆŒSµq___vµ–––öêÕ«j…>}úÈs$f‰‡zþü¹��ÍêÕ«…ÄåååÑÉ“'…§¼¼ÜÛÛû›o¾:€ê(..–H$¿üò‹Ð�€éá>ÇSw²®2ñhß¾ýõë×óóó§M›FDNNNJ%Ý»wgë'$$‘··wRRRnnnqqñ…Ø7xÎ�;—ùï»(œ��7nÜÈ>Û}Ã†ŽŽŽ¤ð.
+�‰Gü|à€ÿãááññÇ/Z´¨¬¬LèXÌ�“““H$zõê•Ð�€áˆÅâ?üpóæÍJ/90	ååå¦þæu0u«W¯öóósttüúë¯‰(??_©äþýûlÍõë×Ñ/¿ü2bÄ777[[Û€€€]»vÑž={ˆˆ}Bã�?þ8aÂwwwww÷‰'ÆÆÆÊ' €ÿ1wîÜ¼¼<ö­I Cb±ØÁÁáõë×B™››»eË¡ÐZzzº««kÓ¦M…j5öiïD$éŠRInn.û'û¶>}úˆÅbKKKKKK‹fÍšÑ£G�ˆˆ½æùÝwßUlŸ}qêÝ»wõ¾$D„Ä@I½zõ"""–,Y‚ç/éœ‹‹F<j›L™2å‡~À("˜œãÇ�÷ë×O$	ÔjÖÖÖìä›¢R‰âµODTYYYYY)“ÉØ›ÎÙIü‡�•Ú$¢’’’.‚"$ ÊfÍšõìÙ³;vˆ¹qqqÁˆG-ôå—_¾|ù’Í0R©ôÌ™3ýúõ:0CìÉ½ü­ÖºÂ>÷ùòåËên,iÙ²%:tHq®ƒÑ[o½ÅþéééIÿ!a�={V‡ñ#ñ PÖ¬Y³>ø`Á‚ºÍòÁÙÙ#µ�——×üùó-Z”••%t, |]¾|¹¨¨‰èƒ»»;%''—––ê°Yö^ó!C†¬_¿þÑ£G%%%eee÷îÝKHHèÖ­±Ï¼š9sæÖ­[óòòòòò6oÞ%ŸDD­[·fëdee¦¤¤Lš4I—ñ+&Cxª•!žjeÄž<ybooÿÝwß	ˆY6lØûï¿/t  ©Têëë¢ô¼y £µpáÂÆ�˜*îs¼ˆˆ•gãJgæUOÔ5–LŸ>�ã„¿´´´gÏžU'Ê_Þ¢4BD'NTêE]ü|`Ä@…úõëGEE-]ºôÙ³gBÇb>¼½½³³³…Ž ‘HvìØ‘ššúÓO?	 /'OžìÛ·¯ÐQ€yŠ‹‹‹ŒŒôññ‘H$ºmyÅŠ©©©áááÞÞÞ‰ÄÖÖÖ××7***##ƒˆ¬­­�?íççgccckkëççsôèQ+++¶…����7¶jÕJ"‘4lØpáÂ…ëÖ­Óaü"Fáö‘¤¤¤Q£F1j^º%‰GŽ)t  Ú›7oZ¶l9xðàµk×
+‹™ˆŽŽNHHÈÌÌ:Æ_|±jÕªôôô6mÚ —¢¢"77·„„„±cÇ
+˜$œã©ƒ Õ¾úê«�7Þ¹sGèXÌ„··÷Ó§OñÓF­õÃ?tîÜùÝwßeß&	`´>\QQ1hÐ ¡07H< Ôúøã�[´h1cÆ¡1ÞÞÞ¥¥¥/^¼:†X,Þ±cGiiiDDDee¥Ðá ¨µoß¾=z¸ºº
+€¹Aâ –D"IHH8qâÄöíÛ…ŽÅx{{Ñ“'O„ãííýÛo¿�<yræÌ™BÇ ZyyùÁƒÃÂÂ„À!ñ àÒ½{÷ˆˆˆY³fá5‡Äˆ(  `çÎ�«W¯Ž‰‰: Îœ9óúõëaÃ†	€Bâ Á²eË*++,X t &ÏÁÁÁÉÉ	/s€¡C‡þüóÏ_~ùå²eË„Ž@Ù¾}ûÚµkçãã#t  f‰€uëÖ�?þÏ?ÿ|óæM¡c1yÍš5ûë¯¿„Ž„7eÊ”¸¸¸9sæ,^¼XèX þÃ0x÷Ýw…À<!ñ Ð,22²C‡BÇbÚš7oŽÄX3fÌø÷¿ÿýõ×_OŸ>]&“	 Ñ¥K—=z.t  æ	‰€f–––¿üòËÝ»w.\(t,¦‰(ŠŠŠÚµk×úõëGŒQRR"t8 ´mÛ¶¶mÛ¶oß^è@ Ì ^š6mºxñâèèèË—/‹	kÞ¼yff&~Þ¹‘#Gž<yòìÙ³þþþxg«¼¼<))iÌ˜1B`¶�x ðõÉ'ŸøûûOš4©¬¬LèXLUóæÍKJJž>}*t `DnÝºåååÕ¡C‡øøx¼b„rìØ±/^ ñ Ð$ |YXXlÞ¼ùáÃ‡QQQBÇbªš7oND¸Ú
+”¸»»§¤¤|úé§Ÿ}öÙðáÃÿùç¡#‚ÚhÇŽÝ»woÔ¨‘Ð� ˜-$ ZhÖ¬û
+‚6‹Iòòò²··GâU‰Åâ˜˜˜”””+W®øúúnÛ¶Mèˆ v)..>pàÀ¨Q£„Àœ!ñ ÐÎàÁƒgÏžý¯ýë÷ß:Ó#‰Ú´ióçŸ
+©���[·n�5*"""44ôÑ£GBGµERR’T*Eâ WH< ´öÃ?tìØqÌ˜1ùùùBÇbzÚ¶m{ãÆ¡£ ãåèèøóÏ?Ÿ:uêáÃ‡­[·ž?~qq±ÐA�ù[½zõðáÃÝÝÝ…Àœ!ñ ÐšD"IJJÊÏÏ5jTyy¹Ðá˜˜6mÚàUŒ QÏž=oÞ¼¹fÍš5kÖ4oÞ|ÝºuxèÏµk×._¾<yòd¡0sH< ªÃÛÛûÐ¡CçÏŸ?~<Â£•6mÚäååáîaÐÈÂÂbüøñ7oÞ2dÈ´iÓzöì™––&tP`žÖ¯_ß²eËÀÀ@¡0sH< ª©cÇŽIII¿þúë7ß|#t,¦¤mÛ¶D„«­€'ww÷5kÖ\»vÍÕÕµoß¾AAAéééBf¥¨¨hÇŽ}ô‘H$: 3‡Ä úBBBbcc/^¼eË¡c1îîî¸Ú
+´Ò¶mÛœ?¾¼¼<  `ðàÁ—.]:(0»wï...?~¼Ð� ˜?$ 52}úô¨¨¨I“&%''‹ÉðóóËÈÈ:
+0=Ýºu;}úô¡C‡rrrüýýƒ‚‚Nž<)tP`òV­Zæåå%t  æ‰@M-_¾<**êý÷ßß¾}»Ð±˜†wÞyçòåËBG¦*$$äÒ¥K©©©DÔ¯_¿€€€ýû÷ãÖs¨ž³gÏ^¹r¯…0$ :±sçN¡c1�:uºwï^AA�Ð�€	ë×¯_jjê¥K—¼¼¼†Ö²eËüO¸mÅÇÇwíÚ5  @è@ j$ : ‰âããÇ�7aÂ„½{÷
+Ž±ëÒ¥‹L&ûã�?„LÞ;ï¼óÛo¿egg�;vÉ’%žžž#GŽÄÝçÀÓÃ‡÷îÝ;cÆ¡¨-�x è†……Å†ÆŒ¾aÃ¡Ã1j�5òðð¸zõªÐ�€™¨W¯Þ‚²²²¶mÛ–��Ð¹sç­[·â5;ÀmÍš5õêÕ1b„Ð� ÔH< tÆÂÂbÓ¦M‹-š4iÒ_|�÷{pèÜ¹3Ð-kkë#F\¸páêÕ«­[·ž4iR£F�,X�››+th`ŒŠ‹‹7nÜ8yòd‰D"t, µ ›;wnttôÒ¥KgÎœ‰^ÕéØ±#Ð“N�:mÝºõîÝ»ãÆ�[¹reÓ¦M§L™rñâE¡ãã²aÃ†âââÈÈH¡¨E�x èÞÜ¹s·oß¾zõêAƒ½~ýZèpŒQ÷îÝ333Ÿ>}*t `¶š4i²téÒ¬¬¬ØØØë×¯wëÖíí·ßŽ‰‰ÁVD$•J—.]:yòdwww¡c¨E�x èÅ˜1cöïßéÒ¥>}údee	ŽÑéÖ­›¥¥åùóç…Ìœ��ÝäÉ“/]ºôøñãˆˆˆ5kÖx{{wîÜyÝºuoÞ¼::0œS§N)AïØ±#''gÖ¬Y†P!ñ Ð—àààßÿ½¢¢¢}ûöiiiB‡c\Û´iƒÄ¦aÃ†sçÎÍÌÌ<~üxëÖ­?ûì3�‘#G¦¦¦âv¬Ú`È�!~~~$"™L3zôè@í‚Ä@�š6mzæÌ™Î�;4�ºRÒ£G$``AAA[·nÍÌÌ\¸páÍ›7û÷ïïççûìÙ3¡£}ÉÉÉ),,¼}ûöàÁƒ»té²hÑ¢û÷ïñÅBÇPë ñ Ð/—”””ýë_“'O?~|QQ‘ÊjÅÅÅLpÝ»wÏÈÈÀå. //¯Ù³gß¾}ûÖ­[¡¡¡ÑÑÑõë×÷õõ�‰‰yòä‰ÐÑ�ŽÝ»w�ˆØ¡­ŒŒŒo¿ýÖÛÛûŸþ:.€Z‰€Þ‰ÅâeË–�8q"55Õ××÷òåËJJJJºvíš‘‘!HxBéÖ­[EEEÕOÀ�Z·ný÷ß'%%½ýöÛ.lÜ¸qppð¦M›ðd³ñ×_YZZ²ÿ¯¨¨ ¢gÏžõíÛ·OŸ>x¼€!!ñ 0�>}ú\¾|¹aÃ†}ûö]¿~½â¤¥K—Þ¼y3$$¤V]ìáããÓ¼yóãÇ� ÙÚÚŽ1â×_}õêÕž={<<<>ýôÓºuëöèÑ#>>>''Gè ¡Fþúë/±X¬XÂ¦çÏŸç�w"""Ø?@ß�x NƒÒÒÒfÎœ9uêÔÐÐP6ÍxôèÑâÅ‹‰èÅ‹¡¡¡%%%B‡i8ýû÷OMM:
+€ÿcmm=xðà­[·>þ|ïÞ½M›6�7o^ýúõ{ôè±nÝºüü|¡„ê¸ÿ¾Ê×ØËd2±X<xð`¥´ ô‰è‹H$‰DBGatÄbñ?üpíÚµ'Ož´jÕjÝºuŸ|ò	{åqyyùÍ›7ß{ï½ÊÊJ¡Ã4�þýûÿñÇyyyB ÌÖÖ–Í@þþûïÕ«WÛØØL›6­Aƒ#FŒØ¾}û«W¯„´pëÖ­ª¯s‹Å666©©©Ã‡$*€Z‰ÔŒjhÛ¶íùóçÇŒ3uêÔC‡ÉŠ+//?vìØW_}%lxÓ§O<kŒYÝºu'OžœššúäÉ“eË–~ôÑGAAA+W®üûï¿…4`æÁƒJ…‰¤N�:§OŸîÕ«— QÔNH<@_†ÁÓñ9ØÛÛÇÅÅyzzÊoydÉd²¥K—®[·N¨ÀÉÙÙ¹sçÎ¸Ú
+L‚§§çÔ©S�9’ŸŸøða__ß%K–4nÜ¸Y³fŸ~úé¹sçªþ¦ÆàùóçJ—°J$WW×óçÏwêÔI¨¨ j'$ ‚‰��ÏÍÍUyaÕ´iÓNž<iø�·y€É±±±	
+
+Š��ÏÎÎ¾zõê¸qãŽ?Þ³gOOOÏñãÇ8p ¬¬LèáÿÜ¿_ñO++«úõë§§§¿ýöÛB…Pk!ñ^EEE|||çÎ�ììì8ÀN’J¥111íÛ··³³³³³kß¾ý²eËï�c/sª¬¬üá‡7nlmmýöÛooÚ´I±}>uˆhûöí���ÎÎÎÖÖÖÍ›7Ÿ3gŽâm”ê‚”_d%R X"oA'ËbNž>}º`Áu·s03tèP¥ïK³ôàÁƒªB ?‹N�:-X°àÖ­[W®\™:ujFFÆ�!C¼½½Ç�·k×.Ü
+bŸ¥+‘Hš7ožžžÞ¸qcAƒ¨­‰‰‰J% ?D”˜˜(•J r½”––ª¼ö´OŸ>R©TÞMœ8Q©NRR’bGÜud2Ù˜1cªväëë›ŸŸÏ0G�•âÿuµ,æäÃ?TùéÉI$’·Þz‹]f¬¬¬ÌÁÁaÍš5B ™™™±±±ýúõ³²²²´´ìÙ³gttôŸþ)t\µ×—_~ieeÅT;wîüòåK¡#óGD‰‰‰BGaŒ0â!°+V;vÌÁÁ!>>>++«´´ôÂ…C‡%¢¸¸¸3gÎ8;;oÜ¸1'''''gÃ†ŽŽŽiiiqqqŠ�?~üÀ�ùùù�?2dÛ¬RGu6lØ°sçNooï¤¤¤ÜÜÜâââ.téÒåÖ­[ìc^9‚dþ7Á`U]LÝ.‹(--uqqñ÷÷·±±!"‰Dboo¯t�~yyyfffxx¸y?äÊÊÊªwïÞ¸Ú
+ÌFÓ¦M?ûì³ÔÔÔüüü#GŽtëÖmóæÍ~~~îîî#GŽÜºu+ÞKh`ì³t­¬¬:tèpìØ1¡#¨ÅÏ1âaHD”˜˜Ø®];"Z·n]Õ
+~~~D´iÓ&ÅBöÅsíÛ·—7BDÇŽ“W`/Y©S§ŽbGÜuºvíJDgÎœQì(33“ˆZ´hÁ0G�ŒªÄ£j¹®–ÅüTTTÜ¼ysË–-3fÌPÌCå×üë_ÿ:LýŠ‹‹suu­¬¬: }ÉÌÌŒ‹‹
+
+b‡Aºwï}õêU¡ãªØ{9ÂÂÂJKK…ŽjÂˆ‡"Fá÷é¤¤¤Q£F1x‘AˆD¢ÄÄÄˆˆˆ’’’œœwww¥
+¶¶¶¥¥¥¹¹¹nnnòÂÜÜ\[[Ûââbúï-%%%ì	+1caaA
+cëØÛÛ³§¹l	»q‘D"‘J¥vvvê‚”·_u³Q,×Õ²Ô\llìÅ‹uÕšÎ1SXXøêÕ«W¯^½|ù2??ŸîèØ±cÓ¦M…ŽN_òóóÓÒÒ‚‚‚„Žj*   **Jí_¼x166Víë[YYÙ?ÿüóìÙ³çÏŸ———·hÑ‚ýeôgïÞ½þþþì
+˜�ääd¡CP‹=Ç9r¤Ð�¼ªÓÈÏÔIánoþuØÓz•×ó¨|Õ«^ñY–š¸xñbzzº¿¿¿Î[Ö	‘HäèèèèèèããC
+yH~~~II‰­­­Ðê…““SXXÞcÒÓÓõÝEVVÖ¯¿þ®ïŽôÄÚÚÚÇÇÇÇÇ‡a˜¼¼<¼0[ßJKK7nÜ¾}{¡]ÊÎÎ6ÀÑô‡<�½õÖ[ûöí›4i’Ò¤–-[þùçŸ‡?~¼¼ðàÁƒì\:ŒÁ××÷êÕ«—/_îÒ¥‹¶A‘H$b¦¢¢‚ãÔ`ËÂ‡¿¿¿1ÿL`ºFŒa˜Ž°Oì(:~×03ì:BGÕ�aG��7Žˆ¢¢¢~úé§'Ož”••¥§§6ŒˆØ'MÍœ9sëÖ­yyyyyy›7of¯aPùªj›6m2dýúõ�=*)))++»wï^BBB·nÝ¸ƒ$"öú«äääÒÒRu]lY   älmm‘u Å>ps¹!Ñ§Û¯_?•ë¥´´´gÏžU'–••É©ºÊ”
+ùÔ™>}:ÇÂ$Ã0*Ëÿ¯«e©¹ðððððp6 rØ¿ð= Æ Ü\®F<&‘H>¼lÙ2???{{ûÀÀÀýû÷‘µµõñãÇ£££ÙI¶¶¶~~~111G�eI®C+V¬HMM÷öö–H$¶¶¶¾¾¾QQQÜAQ\\\dd¤���D"Q×¾!—    Œžj%<ñ@ì5è¸@@°á{
+ Œÿ8€s<u0â     z‡Ä     ô‰     è     Ð;$      wH<     @ï�x     €Þ!ñ      ½Câ     z‡ÄÃü‰D"‘H$tÊŒ3*>ÔEÎ±DÝºu‰D]»våh°yóæÜŠØØØxxxøûûOŸ>ýâÅ‹*[f&99944ÔÓÓÓÊÊÊÓÓsÐ A‰‰‰ò·½vìØQ$ýòË/*gÿå—_D"QÇŽ«ö®De„b±ØËË+,,ìÌ™3*ÛWG©‘úõë�1â÷ßç¨£®£jÄ¬²;ŸõÈsÙU6Å­RØJ‹ÀÒ¸º•:â³É™:†avïÞV¯^=+++‡¶mÛFFF¦§§+UÓùG§mMî­Tã²˜ÜÆ£Xwa�Ž^Scx*?™ŠŠŠ�7öïßßÝÝ]"‘899uèÐaúôé—.]R‰º°)‡ £ 11Q©ô‡ˆØÒ éjµgSZ	¯Iê"WW~ûömùîvóæMu3Ñúõë¹äØ‘‡úêÕ+ÅÊ………ƒRY9$$¤°°�a˜U«VQPP�Ê%í×¯­ZµJcïÜZXX¤¤¤¨ìB%•�H$’Ó§OkÛQµcVêŽÑf=j\vuMqD«¶Ò"0üVwÕŽ4nrÚªùþ¥ÿï©‚‚‚àà`îO’ÑÛGW�šAj\ŽF”Z«€ �Êîª·ÉŠV×oÕYrssýýý5ÎÈýÁòŒÄ\AÆ¾J†:Ç39H<cŠ%ÿƒ‚!›ÒŠá�Ï?ÿœˆ¬­­‰è³Ï>S7#5nÜX*•r4¨XRQQñâÅ‹sçÎ}þùç666DÔ§O™L&¯<|øp"rvvŽ‹‹{üø±T*ÍÊÊŠ��wqq!¢áÃ‡3óêÕ+‘HôèÑ#¥¨>|(‰llläùŸU¦X§¬¬ìÆ�$¢.]ºpÏ¨®‘ÒÒÒ?þø#00�ˆzõê¥mGÚÆ¬®;†÷zä³ì›Ò|ÕI|V·Òì|69mUâ1dÈ"rqqY¾|ùýû÷ËÊÊŠŠŠnß¾½nÝºnÝºÉ«éé£«Þ~]ÃeáÓ¦‘l<:Ü…�aEó\R†a*++ûôéCDõë×_³fÍ£G�¤Ré›7onÞ¼ùóÏ?ûûûsÏÎ3³?ÿù*™à9ža ñŒ)n”5?/ÑGSZ1pâ!•J=<<ˆhõêÕDäææVVV¦rF___"Z³fGƒêº¾víš££#%''³%Ç�'"{{û7n(U¾qã†½½=¥¦¦23fÌ"š?¾Rµo¿ý–ˆÆŒ£±wîŸ<yBD666Ü3r7’••EDvvvÚvT½˜«vÇ=j‰OSƒWšÄu+ÎÎg“Ó–ñ$‡&"''§;wîpTÓßGWóýZÛeáÙ¦‘l<ºÚ…�dEst­TaÏž=Däéé™��Í1—ÆöùDbÆ‡ ã?_%<Ç3$‚Ñv£dwÈâââýë_–––òIÛ¶mëÝ»·“““••U³fÍfÏžýúõk¥›â®_^^×©S'{{{[[ÛÞ½{ïß¿_ÞŽžm>xð ,,ÌÞÞ¾nÝºS§N-**Òö[JWœxìÞ½›ˆÚµkÇ0ŒŸŸ)äJ3îÚµ‹ˆ6lXZZª®AŽmÑ¢EDôÞ{ï±²éÄ‚TV^°`}ðÁÃœ8q‚ˆ|||*++å*++5jDD'NœàÓ;Gö›ÏÍÍ�{FîFø'JU/æªÝñ_�CâÓ”Æà•&ñ_ÝŠ³óÙä´e<‰ÇèÑ£‰hñâÅÜÕô÷Ñéd¿ÖjYx¶i$�®va#YÑ]+U`Gâãã¹ÖØ>ŸHÌødüç«„ÄC$‚Ñv£dwHö˜%ß9e2»Ã+ñõõÍÏÏWœ‘ý¿ÆúR©tÀ€U+ÈÛ©Z®±Í¼¼¼(Nzï½÷ø_tËÀ‰{ÍëŠ+†‰��'¢àà`•3VVV¾ýöÛD´råJur|hì5»6dÿlÜ¸1©¹�a˜7nQÓ¦M†‘ÉdMš4!¢cÇŽÉ+=z”ˆš4i¢xíŸU¦XGq¬Ü¸qÜ3r4’‘‘Ñ·o_âw©•RGÕˆYewü×£Æ�ø4¥1x¥IüW·âì|69mOâáããCD‡ô÷Ñéd¿ÖjYx¶i$�®va#YÑ]+U`Ó¹wïwÀÛçŽÄìAÆ¾JH<Ô@â!m7Jv‡ôööNII‘ß§•��À&%%åææ_¸p¡K—.D4wî\ÅyÖ_¾|9988ÄÇÇgee•––^¸paèÐ¡U›’ÓØæœ9sˆÈÇÇçÔ©S………iiiì‘W��MW‰‡:Š5³³³---­­­_¼xÁ0Ì‹/¬­­-,,?~\µA†avîÜIDõë×/))a´ü†+))!"[[[öOö®¶�ªŠ‹‹+ÿý÷D4jÔ(y…‘#GÑwß}ÇsÁ¹ëæååq|¤JT6ÂçæòªU;fÅî´Z�Ü!ñlJ±AŽ�Hþ§V«›Ñf“Ó–ñ$ÜŸ	Ïj5ùè´­É±•ò\•½kœ$ÔÆÃgQW­Ž¾W´ÊØ”šRŒDþ¿ÊF8fç(çó‘šÍ!ÈøÏWÙ�    IDAT	‰‡H<£íFÉî�{öìQ,dŸ…wæÌÅÂÌÌL"jÑ¢…âŒ<ë·k×ŽˆÖ­[ÇƒR¡Æ6[µjEDìõZ¬ß~û�ÿñE·™x°'ô£G�–—Œ5ŠÔœÐ3SYYÉ~V?þø#Ãy*S{õZõ�šœX+…Tu’››ÛÅ‹9>Ïªg·´´ôòò>|ø•+W¸ƒQÙ‘¶1«ìN«õÈÏ¦äøˆäVû[_ã&§­Ú“xðß[yÖäØJ�3ñ¨áÆÃgQY­zŽ¾W´ÊØ”šâˆ„ÿìå|>R³9ÿù*!ñP‰‡`´Ý(ÙòåË—Š…vvvDdiiiiiiaaaaa!¶D"Qœ‘g}[[["ÊÉÉáˆA©Pc›ì£3öúòåKþÇÝ2Ø¥V2™¬iÓ¦ô¿—0;vŒˆš6mªî¦íÛ·‘§§§ÊÛ`8>´[·nQ£F�Ø?µøÖöR"uë<}útÆŒDäêêúôéSîõÔ‘¶MUU½õ¨2$þMiLiRõ®s`ÿÏ½ÉiËx½^�ÃþŸÿÞZíýZ«eáÙ¦‘l<ºÚ…�jE«¤T�ø?ÿùŸÊÃˆÅb"*//W,”J¥D$‹ÕÍkö‡ ã?_%$jà‚&†}2�Ã0DTYYYYY)“ÉØ;©¼¼¼êìÚÖçCmš�´´´Ñ€ä¯^bïŸyðàAZZšÊ¹F�Ý²eËçÏŸÿôÓOZu·wï^"b¯p#¢€€ "bo"¬Š-gë°>úè#"Ú¸q£ü_¶¤&êÕ«úòåËyóæÕ°5¡:ªÞzTRõšâCÛÕ­¨Ú›œ‘c——Ý/4VÓ÷GWÃ™ç²T�1l<5Ù…�jEóÁöràÀžõ]]]‰ˆ½M\Žý³nÝºêæÂ!Œ—bbü¤9¡j�x(vîÜ™ˆ._¾ÌsF�õÛ·oOD			*§²CJ?½hlÓ,/µÒX®ò†{9ŽÇÔnÝº•ˆÜÜÜªv¤®ëŒŒöqº¿þú+[ÂÞîààÀóá†R©ÔÝÝ�ˆÖ®]K¼ËçÃ¹{÷®X,‹ÅwïÞåžWU¯)EÕ^�UCâß”ÆÀ”&i»ºùorÚ2žö)«ÎÎÎÜžþ>ºšï×Ú.Ï6�dãÑ¸¿h\–±­èª”*°×­[733Sce†aú÷ïOD«W¯V,\¹r%0€{^3>ÿù*aÄC$‚Ñv£T¹C²?N{yy%$$<|ø°¸¸¸´´ôîÝ»ëÖ­¨:£Æúÿþ÷¿‰¨N�:«V­ÊÎÎ.--½xñ¢üæröáß;wîT¼”Sc›fys9w¹üÅ|>TªöøñcŽóUTT4oÞ\þe ®‹ŠŠŠ—/_ž;wnÖ¬Y*_ FD...ìs¤RivvöŠ+T¾Î‰ÑòyZ}8S¦L!"þ»;ªvS¬š¬G¥�´jJc`U'iµºùorÚ2žÄƒùï{å\]]ccc333¥Riqqñ�;w”Þ+§§�®Ú5k²,|Ú4’�G‡»°Q­h>KÊìææ{ïÞ½ÒÒÒ‚‚‚;wîÄÄÄT­¼yóf"rttÜ²eKNNNNNÎæÍ›ëÔ©CD[¶lÑ‰¹‚Œÿ|•�x¨�ÄC0Ún”êvÈéÓ§“*gä®/•Jûõë§®©ˆˆ•åÜmÖÂÇé®ZµŠˆ‚‚‚T¶Àþ‚µjÕ*u²ß4UËÕ}ÈD¦ô�QPPÀ>K±ªàà`ùƒÑäØò²T^ªËÑ;÷‡óäÉ[[[‘H¤tƒ¸:|¶žU;fV×£bHì¾Ã³)��U�¤Õê®:»ºMN[F•xkÜ ôôÑi[Sc�|–…£wŽI‚l<*ëWo6¶­qI
+
+BCCUFboo¿yófÅÊ•••*—.$$Dé®î�ÔÌAÆ¾JH<Ô@â!m7JŽ2555<<ÜÛÛ["‘ØÚÚúúúFEEedd¨›‘»¾T*]¶l™ŸŸŸ���½½}`` ü*©×¯_GFFúøøH$¥f¹Û|ðàÁ�!Cìíí]]]'Ožlö/ìÐ¡íÜ¹Seì;tè ®ÁòòòfÍš©û†cYYY¹¹¹uéÒå“O>9þ¼ÊŽd2Ù®]»‚ƒƒÝÝÝÅb±»»{ppð®]»ªÞDÈb¯Á}ç�w8\%�ÎÜ¹s9¾óTvT½:JÕ$f¦ÆëQ1$Ï¦4¦rÿÕÍ“Ó–Q%ÃÈd²äääÁƒ{yy‰Åb{{û6mÚDFF*=êG]õöku[)ÿeQ×;÷$Ão<:Ü…#[Ñ<—tÿþýÃ‡oÐ �µµu�:u:tè0oÞ¼þù§jÍ²²²¥K—¶k×ÎÖÖÖÖÖ¶]»vK—.•J¥<;2ËC�ñŸ¯5DŒÂŽ�””Ä>ËŸcW]‰D‰‰‰ìô'??ßÙÙÙÆÆ†}ÏŒ1‚ˆ’““…À`ÿÂ÷ ÿqÀ0çx¦Oµ2gÅÅÅkÖ¬!"ù	     ‚ èû(	"zÿý÷…�€%Ç‹JÆüó ð„Ý ÔAâaÎ,--›4i2vìØ/¾øBèX     VCâaÎ***„ààÇN ³‡Ý ÔÁ=      wH<     @ï�x     €Þ!ñ      ½Câ     z‡ÄÃˆD"îç¦    ‰‡)1õÃÔã   €jÃ{<Ìš    F#      wH<L†ü"%‘ÅÅš"‘èÍ›7&LprrªW¯^||<½|ùrìØ±...nnnóæÍS'Ù¾}{`` ³³³µµuóæÍçÌ™“ŸŸ/Ÿ*•JcbbÚ·ooggggg×¾}ûeË–•——+uZ5fÅ ÕÅ    f—Z™­ñãÇÿöÛoDTPP0sæÌ&Mš,Z´èòåËìÔÅ‹·jÕjÜ¸qDÄ0ÌØ±cwîÜ)Ÿ733sÙ²e‡ºpá‚££cYYÙ€Îœ9#¯pýúõë×¯>|øèÑ£‰Ä°K    ¦#&C>@Á(à¨ÿðáÃë×¯çççO›6�ˆÆ�/•JKÖ®]ËÖÜ°aÃÎ�;½½½“’’rss‹‹‹/\¸Ð¥K—[·n-^¼˜ˆâââÎœ9ãìì¼qãÆœœœœœœ68::¦¥¥ÅÅÅé)~    0'H<ÌÖêÕ«ýüü¿þúk"ÊÏÏW*¹ÿ>[sýúõDôË/¿Œ1ÂÍÍÍÖÖ6  `×®]D´gÏ"bC~üñÇ	&¸»»»»»Oœ8166V>	    €.µ2[:t`ÿãåå¥²$77—ýóÆ�DÔ§Oúï¸„|8âÑ£GDtïÞ="z÷ÝwÛ2dÝ½{WÏË¡{ééé#FŒ:
+ †apŸ�™IOO÷÷÷7@GØ…j³ììl¡C€jBâa¶¬­­ÙÿÈÏí”J¯}"¢ÊÊÊª�(Þ>ÎM$±éŠ¼»’’’j†®OB‡ DDoÞ¼9sæLÏž=ëÔ©#t, 3þþþúÞÅ6l®×. ÀÈ5hÐ Ç…ÄÃ”°'÷b±.Wœ¯¯ïÕ«W/_¾Ü¥K•Z¶lùçŸ:thüøñòÂƒÑ[o½ÅþéééùÏ?ÿ<zô¨I“&lÉÙ³g¿V¢¢¢„ê}ðÁÍš5;tè�….ø-$''  T¾òM‰»»;%''—––ê°Yö^ó!C†¬_¿þÑ£G%%%eee÷îÝKHHèÖ­�3†ˆfÎœ¹uëÖ¼¼¼¼¼¼Í›7³gðì$"jÝº5['++«°°0%%eÒ¤I†‰LÎ�;w¿þúkd   µ‡HñÉBIII£F�Â³†C$%&&Ž9’ÿ,&LØ¼y³b	»²”.�Rú“OÉŒ3V®\©²S†aÊÊÊú÷ï_u#00ðèÑ£VVVDtøðáAƒ)N�8qâÆ�{Q?Ô6£G�¾sçNFFîñ   óS�s¼Z?7š’¸¸¸ÈÈH�¿:cÅŠ©©©áááÞÞÞ‰ÄÖÖÖ××7***##ƒˆ¬­­�?íççgccckkëçç#Ï:ˆ($$dãÆ�­Zµ’H$6\¸páºuë?˜�?ÿü399ù›o¾AÖ  P«`ÄC0È†¡v9rä½{÷®]»†Ä  ÌÎñÔÁÍå `8×¯_ÿõ×_wïÞ�¬   ¶Á¥V `8ß}÷]§N�†*t    `hñ  ÉÈÈøí·ß~ûí7w   ÔBñ  Y¸paçÎ�ÃÂÂ„   € 0„+W®ìÛ·oÿþýB   ÂÀˆ Â÷ßß¥K—wß}Wè@   @ñ  ½»|ùò�RRR„   ƒ Ð»ï¾ûÎßß_éÝö   P«`Ä ôëÒ¥K)))GŽ:   F< @¿,XÐ³gÏ�
+   	#  GçÎ�;räÈ±cÇ„   † Ð£ï¿ÿ¾W¯^ýû÷:   F< @_Îœ9sìØ±'N   #  /ß}÷]ïÞ½ûöí+t     <Œx €^œ>}úÄ‰gÏž:   0
+ñ  ½X¸paŸ>}zôè!t    `0â ºwêÔ©´´´sçÎ	   Œx €î}ýõ×ýúõëÞ½»Ð�   €±Àˆ èØÉ“'ÏŸ?þüy¡   #‚ Ð±o¾ùfÀ€Ýºu:   0"ñ  ]:~üø….^¼(t    `\0â º4þü��¡   ã‚ Ð™£G�¦§§_¹rEè@   Àè`Ä tƒa˜¯¿þzÐ A�:u:   0:ñ  Ý8|øðï¿ÿ~õêU¡   c„ Ð†a¾ýöÛÁƒwìØQèX   ÀaÄ t %%å�?þHHH:   0Rñ €šbfþüùaaa:t:   0Rñ €šÚ¿FFÆ–-[„   ŒF<  F†Y°`Á°aÃÚ´i#t,   `¼0â 5²wïÞ?ÿüsûöíB   F# P}2™ìÛo¿>|¸¯¯¯Ð±   €QÃˆ Tßž={nß¾�˜˜(t    `ì0â Õ$“É,X0räÈÖ­[ëªÍ°°0‘HªXÈ0Lß¾}E"ÑèÑ£Ù’ŒŒŒ9sætêÔÉÁÁÁÚÚºyóæŸ|òIVV–ÆöE"‘H$âYÎ0Lrrrhh¨§§§•••§§ç Aƒ†áÙK,{yy………�9s†£šŽH<<<‚ƒƒwîÜÉ'¹nÝº‰D¢®]»ª«À0ÌîÝ»ÃÂÂêÕ«geeåààÐ¶mÛÈÈÈôôt¥€•füòË/E"‘……ÅòåËùÇ  µ£€ýÙ’ƒ "öÀD%&&ZZZÞ½{W‡mþý÷ßöööD´{÷nya\\yyy½xñ‚-Qy4sqq¹~ý:wûU�{êÊ¤²£���ÂÂB>)±°°HIIÑXM)ŽH‚‚‚òóó¹#aÝ¾}[>×Í›7«V(((ÖŒÒŸ}ô‰Åâ-[¶ð‰ ÀìÎñÔÀˆ T‡L&[¸pá¨Q£Z¶l©Ãf5j4þ|"úôÓOß¼yCDÿùÏ¾üòK"JHHpuue«uèÐaùòå×®]+**ÊÏÏ?xð`“&M^½z5sæL]EqèÐ!ggç¸¸¸Ç�K¥Ò¬¬¬øøx—Ã‡GDDði„=Î–••Ý¸qcàÀ�ì‘ºjJøD’ššúÁð‰dÃ†Ddmm-ÿ¿’±cÇ9rÄÅÅeùòå÷ïß/+++**º}ûöºuëºuë¦²ÍÒÒÒððð6ØÙÙíÛ·oüøñ|" €ÚKñ{#†DÈ†Á”íÜ¹S,ß»wOç-———·mÛ–ˆ>ÿüóòòò.]ºÑÄ‰¹çºtéÙÚÚrW«zÜSY~üøq"²··¿qã†RÍ7n°c2©©©ZuôäÉ"²±±á�V‘:tˆ£†a¤R©‡‡­^½šˆÜÜÜÊÊÊ+>|˜ˆœœœîÜ¹ÃÝ”<à×¯_÷îÝ›ˆ\]]/\¸À= @­‚s<u0â Z«¨¨˜?þûï¿ß¢E¶„½ô¿¤¤dúôéžžžb±8<<\$µiÓF&“±ud2Y›6mD"Ñ¨Q£8‹Åk×®‰Dñññ'N¼råŠ��Ï�?þÈ{Ÿ‰“““.–�6mÚDD³gÏ®úr’6mÚÌž=[^G[:�dóæÍÜ�8p ''§]»vS§NõóóËËËÛ¿¿böå�sçÎmÕªŸ¨þùçŸÀÀÀÓ§O7hÐàìÙ³¼  j/$  µ]»v=|øðÛo¿U*7nÜªU«rrr*++úé'WW×[·níØ±ƒ�º}ûö[·nyxxüôÓOÜíLš4©¢¢bÛ¶m"‘hÓ¦MŽŽŽÜ³°¶:t¨î2ý�.Qxx¸Ê©Ã‡'¢‹/òlM*•Þ¼ysâÄ‰D¢óHØÑìµUìÍì¿JW[±Ë2lØ0žQuïÞ=##£U«VçÏŸ×á£  ÀÌ)àR+C"Ã�i*//oÞ¼ù‡~¨XÈO¼½½SRRä7^oÛ¶�ˆš4i"•J¥Ri“&MˆhÏž=|zyúô©……�5Jcå›7o:99‰D¢³gÏr×äy<´±±!¢’’•�“¦ËºT¶˜——Ç3þ‘(]¾¥$;;ÛÒÒÒÚÚš½5ÿÅ‹ÖÖÖ�?æ¹¼*¶¶¶Vl  äpŽ§F< @;;wî|ôèÑ7ß|SuÒÊ•+$¿šhìØ±¡¡¡>LHHX·nÝÃ‡ÇŒÃógõØØXö­cÇŽåæærÔ¼uëVÿþýóóó¿øâ‹=zh¿@âææ¶dÉ’ºuëê¼e[[[Ž©›6mª¬¬6l{k¾««ëÐ¡Ce2™Æ´84hÐ ¬¬ì£�>*++«v#  PÛ ñ  -TTT|÷ÝwãÇ�oÖ¬YÕ©���J%k×®urrúþûïøá‡zõê­\¹’O/gÏž���µ´´ôóó{õêÕ¬Y³ÔÕ¼xñb¯^½ž={6eÊ”E‹ñ\Šª¿Á(Uðòò"¢ÌÌL•³³åõêÕãÙÑÓ§OgÌ˜‘——úìÙ3>ñÈCâIÃ†9`ïa/ôb±W[mÞ¼YÞ‹§§'=zôHã±Nœ8áååuüøñ#F”——óœ  j9$  …mÛ¶eeeU½»ƒåââ¢Tâêêêáá!‘HŠ‹‹ÝÝÝùÜZýæÍ›ˆˆ™L6wîÜäädkkë­[·ž>}ºjÍ”””   —/_~üñÇkÖ¬QùfÀêaï–Þ½{·Ê©l9ÿ;ªëÕ«úòåËyóæi	û([îHzõê¥nö´´´Ñ€ä¯&0` =xð --�­Æ.ËÞ½{yFÕ²eËÔÔÔºuë8p`ìØ±•••Z,  ÔZŠ?°áC"\ÿ¦¦¬¬ÌÇÇgÒ¤IU'U=ž°¦OŸND[¶lY²d	Íž=[c/“'O&¢víÚ±�|e“œÖ­[K¥RÅj›6m‹ÅD4mÚ4™LÆsÔÅ©T~ôèQ"rppÐáãtïÞ½+‹Åb±â+ÕÅ#wìØ1�‘T�$7fÌŽãÿ˜1cØjìãt���5¾R1àßÿ�}ŒØøñãù¯  ³‡s<u�x%˜œõë×[YYýý÷ßU'©<�>~ü8ûDÝÊÊÊ’’’F�YXX¤¥¥qtqèÐ!"²²²’¿ƒ¼¤¤¤yóæD-¯¶téR¶Ç3fhµ<†aÂÂÂˆÈÅÅ%>>>++K*•fgg¯X±‚Õ>|x5:š2e
+…‡‡kŒGÑ{ï½ÇÉüùóÕÍøêÕ+‘HôðáC¥I�?¶°°°±±yõê[2dÈ"ruu���ÍÌÌ”J¥ÅÅÅwîÜa_ ¨.à‹/²£XS§Nå^
+ €Úçxê ñ6J0-ìpÇÇ¬rjÕè—/_z{{Ñ�Øö¹º�5’Ÿì*yñâ{ãÄâÅ‹ËÙ_ýíìì=z¤Ø�J¹¹¹KÁ?ñ(((8p Ê.‚ƒƒåOîÒª£'OžØÚÚŠD¢+W®h\ù\………ÁÁÁU+X[[/\¸�#†U«VQPP�Ê©ýû÷'¢U«VÉ—We/JÁT]®S§N±w·öÙgÜŸ	 @-A8ÇS‰‡`°Q‚iY»v-ÇT«ž�Ž=šˆºwï./‘ÉdìkÈßÿ}•�°/ô÷÷¯¨¨PšÄ¶6dÈÅîTÒUâÁ¼k×®àà`www±Xìîî¼k×.>—©ëhîÜ¹ŠÉ ŸÄC)ö)ÃD´dÉîØ·šìÜ¹SåÔ�;wQ‡{INN<x°———X,¶··oÓ¦MddäÅ‹¹—ëèÑ£ÖÖÖDôÕW_q‡ PàO£ðÍ—””Ä>2Ÿã»tE$%&&Ž9Rè@ 4+++kÙ²ehhèÏ?ÿ,t,@Ë—/Ÿ={¶D"Ù»wï Aƒ„  þÎñÔÁS­ @³M›6åææ~ýõ×BDD³fÍš7o^yyyxxøÙ³g…  €$  AYYÙâÅ‹?úè£úõëü?üðÃ0ÅÅÅ={ö:   ^�x €ë×¯ÏËËûê«¯„   L àRRR²hÑ¢É“'óyQ7   €:H< €Ëúõëóóó¿üòK¡   Ó†Ä Ô*))Y²dÉÇìåå%t,   `Ú�x €Zk×®ÍÏÏg_=   PH< @µâââ˜˜˜ÈÈHOOO¡c   “‡Ä T[³fMQQÑ_|!t    `�x €
+oÞ¼Y²dIdd¤›››Ð±   €9@â *¬^½º¬¬lÎœ9B   f‰ (+,,\ºté'Ÿ|R·n]¡c   3�Ä ”ýüóÏR©tÖ¬YB   æ‰ ü�ÂÂÂeË–MŸ>Ã    CH< j5™L¦T²råÊÊÊJw   €n!ñ ¨ÕŽ9Ò¯_¿óçÏ³üûßÿž1c†³³³°�  €™AâP«=xðàäÉ“=zôè×¯_zzúŠ+†‰ŠŠ:.   07b¡  !=xðÀÚÚº¬¬ìÜ¹s666áááNNNBÇ   æ# µÚ_ý%•J‰ˆý·²²rûöíiiiB‡   f‰@­vÿþ}†aä–——ÑÕ«Wûõë7xðàŒŒáB   ³‚Ä Vûûï¿«VTTÑ±cÇž?nðˆ   À<á€Ú+77·¤¤¤j¹¥¥¥��Ý‰'ºtébø¨   À,!ñ ¨½<xPµÐÒÒÒÁÁáäÉ“;v4|H   `®�x Ô^<°°°P|‡ X,vvv>}útëÖ­   Ìîñ ¨½>|(‘HäŠÅbWW×³gÏ"ë    �Ãˆ@íõðáCùp‡X,öòò:sæL“&M„�
+   Ì€ÚëÞ½{ìósÅbqýúõÏž=Û¨Q#¡ƒ   ó„K­ j¯ÌÌL"‹ÅM›6½té²   Ð$ µTEEÅ?ÿüCD>>>'Nœðòò:"   0g¸Ô
+x¹xñbll¬ÐQ€.UVVÖ©Sçí·ßþì³Ï„(99Yè   ô#ÀKVVÖ¯¿þ*t KEEEuëÖíÛ·¯���Ð±ÔvÙÙÙØ¿  ÀìaÄ´€_dÍÉï¿ÿÞ¬Y3ggg¡JJJ5j”ÐQ   è€ZªS§NB‡    ÿ�½ûŽkêúÿþÎ"ì�€,AQ�-âÂÙŠ€{kÕ¢èÇIq´nkµŽ:«BÝ{/ÔºpT\¨8QY2d*;lBÆï�ûk¾i!@’äýüÃ¹99çuoÞwî½ç*<Õ
+!„B!$wXx „B!„ä„B!„�Üaá�B!„’;,<B!„Br‡…B!„BHî°ð@!„BÉ!„B!¹ÃÂ!„B!$wXx „B!„ä„B!„�Üaá�B!„’;,<P+C¡P(ŠôË OŸ>
+¥gÏž:ìÔ©‡Ã‘Ü!Eˆªªj»vízõêøòåK±=óùü���aÃ†«¨¨:ôÒ¥K|>_Ð¦[·n
+åÂ…b{¸pá…BéÖ­[Ý "Ä†¤Óé&&&£F�
+Û}$lLé“ÔÝþMXëº£Kó– ‡Ã9~ü¸———‘‘ƒÁÐÑÑqss|ýúµ„D!„�ìñ…\ºtId	’  öA[…–óÙ¨û¹•¼<>>^ði���­ï… pôèQÉJø==ztqq±pã²²²¡C‡Šmìëë[VVF4Û»w/ <XìÊ~ÿý÷ °wïÞHI¥RCCCÅ!V}SšM!ÒRìöoÂZ‹½Á·,??¿W¯^RF%QËùýB!Ô|Ðªöñ	�x 6îØ±c Àd2?×gÓ¦Mµµ|�w    IDATµvHüæp8œÂÂÂçÏŸÿòË/ªªª×¯_;v,_hŸxÆŒwîÜÑÕÕÝ³gOFF›ÍÎÌÌ
+
+ÒÓÓ»{÷îŒ3ˆfS§NUUU}øðá—/_DJOOôè‘ªªêÔ©Së!6dMMMLLŒ··7�Ç[¿~}ƒ«ÖXÒ$»ý›°ÖbI~Ëx<ÞÄ‰_½zÕ¾}ûƒ¦§§³ÙìòòòØØØýû÷K(HB!$Â{ø­›"A«ª†[Îg£îçVÂr6›Ý®]; 8pà  ÖÔÔˆ}¡ƒƒ <xPB‡õ­­­ !!!Ä’ €††FLLŒHã˜˜ #–L™2 Ö­['Òò·ß~€)S¦4@rÈììl PUU•üBÉ�4¶AÂöoÎZKù–]»v Œ��³²²ŒJ®–óû…B¨ùZ×>ž"áÔ–Ýºu+//ÏÅÅeÞ¼yÎÎÎ7oÞÛríÚµ °yóæšššÆŽâêêºbÅ
+ \´pâÄ	 X¶l™£££HcGGÇeË–	Ú À¬Y³ àäÉ“<OÐŒÇã�<yRðlóijjÊ¤ŸF‘°ý›¿Ö¾eçÎ�€Õ«W›™™5wMB!ÔlXx ¶Œ8·‡Ø‹%þ­ïl«	&ØÛÛgff9r¤	�3 "##‰‡ 0~üx±�Ç� ‚KÒdmmýåË—‡
+Ú„……eddX[[4¨	yl6;66væÌ™ àëëÛä~šLÂöoþZ7ø–o)+ŽB¡º°ð@­’4“)eggß¿ŸÉdWL›6�ÉdþóÏ?™™™uS©Tâô-[¶TWW76�µµ5 ¿~ý
+ ;vÛ˜Xž››+X¢6.ŠˆŸýýýë®š4sI™L¦““Óýû÷¸{÷îÆ®Tƒ$'‘¼ý»Öu5ø–ååå€¥¥¥„ÌMZo„B5¨Í:qâ—Ë3fŒ¾¾> èëë�=Zp2O]“&M²³³ËÉÉ9xð`cÇ>_¨	üýýi4Úõë×‹ŠŠ  ¨¨èÆ�T*UpzsnÙ²ÅÀÀ ù]5JƒÛ¿ùk-Í[Æ—8B!„Ô*Õ½\©nâ"
+âku‚àº±;£T*õ×_€­[·VVV6*Ozz: MLL  %%Elcb¹©©©`‰™™™··wMMqYÂÙ³gkjj†baaQ÷åb¯ÖÛ&''gáÂ…Ã†`‘!	I¤Ùþ�Zk±$¿eÆÆÆ  2qV}[!„BòöŸÂƒN§ —Ë%)Œr¡R©¸÷#?�?NMM€!C†Î«2d ¤¦¦>~üXì«&OžÜ¹sçoß¾íÛ·¯QÃ]¿~ <<<ˆ‡½{÷€«W¯ŠmL,'Ú;åÇ�üÛüËÊMMMƒ‚‚†VTT´fÍšföÖ(Rnÿæ¯µ„·ŒØÂ·nÝjîÊ „BR#v¤i4ÙAZ$á¯*CCC ¼¼¼Ñ“c¡ÆSQQ9sæÙ)¤Õr¦û¬û¹»œ˜­µ>fk=}ú4 Ö¨¾¡ß¿OL§{åÊbÉýû÷@SSSšét	l6›8`rèÐ!�8ó¯„�#¶Mbb"�N§Óé‰‰‰’_+ý@6�rû7m­¥|ËîÞ½ )))MXEj9¿_!„š‰¸ìðÆ�di‰þsÄCUU špe-jƒ!ÍíêP”””\»v�B¡¤¥¥‰|â322¨Têµk×JJJÄ¾vÊ”)�:u\&^.—[\\üâÅ‹eË–õêÕ«´´tÐ AcÇŽ%ž2dÈ¨Q£ÊËËû÷ïœ••U[[›��ý×_õïß¿¢¢bÜ¸qÄý¹†ŸŸ ,\¸ ~üñGl€Î�;Ïœ9“Ãá(ì ‡ôÛ_&k]ß[æãã3räÈÂÂÂž={îÞ½;99¹¦¦¦¬¬ìÓ§OÛ·o—ÅŠ"„B¢ˆ½;ƒAv�IxŸàÅ‹ Ðòo¶Õ6èèè:tˆìÒj9ßÈÖýÜÖ]¾wï^ <x°Ø¼¼¼ `ïÞ½õu(|õyÝ!Ä5jTqq±pãÒÒRooo±�}||ÊÊÊê‹��´‰��­o%ÿ"‹Ý>ÙÙÙjjj
+%22Rì6iì@’4jûK¹Ö’—Ô÷–•––6LlNâj“– åü~!„j&bÆ”�¤%Â#¤Á#òCÌÊ*|Y³0¨ÿ† 0uêÔúfÂPQQ144ôððxñâÅõë×uuu…hiiÝ½{÷âÅ‹>>>FFFt:ÝÈÈÈÇÇçâÅ‹wîÜ{;?{{{â²„=z·å–•öíÛ/\¸�Ïç¯ZµJ†ÝÖ§QÛ_&k]ß[¦¥¥uûöí›7oŽ7ÎÜÜœÉdjii¹¹¹­Y³&%%eúôéM!„ªñ�€Âúò2!!¡k×®±±±²ÝéAbY[[Ï›7�¸ãuËwùòåI“&ññjx„ä ¿B¨ÍÈÎÎ677ñâEŸ>}ÈÎÒâüçˆ‡ºº: 4v"QÔ4ÚÚÚeeed§@!„B2ƒG<$ ? ¦½'nºŒäMGG§´´”ìHéH¾]7~éŽB5›Í,<ê!z�‡®®®<n4†êÂ#!„BmLEE Sç#t‘Ç&&&xÄC1´µµY,Ù)�ÒÁc!„�ü{w:::di‰¨"�MMMñˆ‡bûö�ì!„BHf°ð�@´ðÀ#
+Ó®];ÜÔ!„Bm	‹Åb2™L&“ì -‘háallŒG<�x „Bµ1¥¥¥x¸£>¢…G§N�I‰¢lŒ��+**ˆ+�B!„PÀb±°ð¨�háaoo_RR‚§ )€‰‰	 äää�!„BÉˆ)<  !!�Œ0ÊÅÚÚ ÒÓÓÉ‚B!„d£¸¸XWW—ì-”˜Y­ôôô°ðP }}}--­/_¾�!„BÉFnnnûöíÉNÑB‰ `gg‡…‡bXZZbá�B!Ôfäää`áQ1…G—.]>}ú¤ø(JÈÊÊ
+„B¡6#77×ÔÔ”ì-”˜ÂÃÕÕ5**
+oo¬ ¶¶¶8‡B!„PÛÀápòòò°ð¨�˜Â£oß¾ÅÅÅqqqŠO£lcccy<ÙAB!„Ps}ûö�Çãá©VõSx¸¸¸hjjFDD(>�²qtt¬¬¬LKK#;B!„j.â6ÜXxÔGLáA§Ó=<<^¾|©ø4ÊÆÑÑ‘B¡ÄÆÆ’!„B5Wvv6…BÁS­êC»´OŸ>W®\Qp%¤©©iee7jÔ(²³HeÂ„	dGh´’’*•ª­­Mv„ê•••Ev„B2�””dnn®ªªJv�JÌ èÕ«WRRRaa¡‚Ó(!GGÇVq9�……ÅøñãÉNÑ'==ýÑ£Gaaa©©©dÇQ´×¯_GGG“�IËÜÜ¼uý~!„+99¹sçÎd§h¹Äñðôô¤Ñh�=j�ßp·.ŽŽŽwîÜ!;EÃz÷îBv
+©„……>|øÞ½{t:}Ê”)sæÌqww';”¢õîÝÛÓÓsçÎ�dA!„”Hrr²��Ù)Z.ñG<ôôô<==oß¾­à4JÈÁÁáÓ§OµµµdiõØlöùóçûôéãåå·eË–ôôôC‡)aÕ d§@!„”KRR’­­-Ù)Z.ñ… øúúÞ½{gz•7GGG6›�œœLv�V,//oÓ¦M:tð÷÷ïÔ©Ó‹/âââ/^¬Ì{Þ†††d§@!„”Hyyynn.žj%A½…ÇÐ¡Cóóó£¢¢™F	ÙÙÙ1Œ>�¤U
+1b„©©é‘#GV¬X‘——wúôé>}ú��‹dµµµ,K™ë.„BHñ>þÌçóñˆ‡õNNNVVVwïÞUd%¤ªªêîîþìÙ3²ƒ´2÷ïß4h�——Wvvö±cÇ’’’-Z¤££Cv®¡°°�Ïçã„BH‘TTT¬­­ÉÒrÕ[x €——×½{÷Eiyzz¾xñ‚ì­�Ç		qww÷õõUWWòäÉ»wïfÌ˜Ád2ÉŽÖ‚  !„�"½}ûÖÉÉIEE…ì -—¤ÂcôèÑ¯_¿ÎÈÈPXåäééËb±ÈÒ¢UVVÙØØL�:µ{÷îÉÉÉ¡¡¡ ;WK„…B!¤xQQQÊ9¥�ô$ÞÞÞFFFgÎœQXåäééÉãñ^½zEv�ŠÃá;vÌÞÞ~ùòåßÿ}llì¡C‡:vìHv®–«  €B¡èëë“!„R</::ÚÍÍ�ì -š¤ÂƒN§Oš4éìÙ³
+K£œÚµkGÌÅDv�‡Ïç_¹rÅÉÉiþüù¾¾¾Ÿ?>vìNÑ ‚‚]]]:]ü]zB!$s)))¥¥¥xÄC2I… L�:õÓ§OïÞ½SL¥…—yˆàóù!!!?üðCÿþýSSS<haaAv®ÖçÒE!„,**ŠÁ`8;;“¤Ek ðèÑ£G—.]Î�;§˜4JËÓÓóõë×‡ì -Brr²¯¯ï¤I“ºté}èÐ!sss²Cµ&™™™X¤!„BŠôîÝ;{{{œíF²
+ ˜8qâ¥K—pŸX®<==+**ðnUUU¿ýö›““S~~~DDÄßÿíèèHv¨Ö'##ÃÒÒ’ì!„�yòäI¿~ýÈNÑÒ5\xÌž=ûÛ·o×®]S@¥egg§§§§äg[�>}ºS§N8|øðÛ·o{õêEv¢Ö
+„BH‘JJJÞ½{7pà@²ƒ´tÃ‡ß»w¯Ò(-*•êååuçÎ²ƒ�£°°pÂ„	Ó§Oï×¯ß‡üüü(
+Ù¡Z1<Õ
+!„R¤/^ðx<œå¿A ðìÙ3¼Ä\®|}}Ÿ>}ZYYIvE{ðà�³³sDDÄÝ»w/^¼Ø¾}{²µnÅÅÅeeexÄ!„R˜§OŸ:::‘¤¥“ªðøþûïíìì8 ï4ÊÌÇÇ§¦¦æÑ£GdQœòòr??¿!C†><!!ÁÇÇ‡ìDmAff& `á�B)Ì“'Oð<+iHUxP(”œ;w®°°PÞ�”–‰‰‰››ÛÝ»wÉ¢ ÙÙÙ}ûö½~ýúñãÇ:¤­­Mv¢6"## ðT+„BH1JKK£££û÷ïOv�V@ªÂ ~üñG*•zôèQ¹¦QrC‡U’Â#>>¾OŸ>555ÑÑÑþþþdÇiS222444È‚B)…ÐÐPâb]²ƒ´Òººº���;vì(++“k eæëë›––öéÓ'²ƒÈ×ýû÷{öìiggÙ±cG²ã´5™™™xžB!¤07nÜ8p ŽŽÙAZi XºtiMMÍ¡C‡ä—FÉõìÙÓÀÀ mÏmuïÞ½1cÆ<øúõëšššdÇiƒ°ð@!„¦ºº:44tÔ¨QdiQxÌ›7oçÎ�UUUò¤Ìh4š——W>ÛêÕ«WãÇ�Ÿ0aÂ•+WÔÔÔÈŽÓ6áM<B!…yòäIEERjDá K—.-++Ã+=äÇÛÛûùóçd‘½ìììQ£F4èØ±c4�ì8mVZZš••Ù)B!¥pãÆwww333²ƒ´�+<Œ��ýýýwíÚÅf³åHÉ6ŒÃáÜ¾}›ì 2ÆårøáƒóçÏÓét²ã´YåååÙÙÙvvvdA!„Ú>.—{óæÍ#F�¤Õh\á +W®ÌËËÛ·oŸ<Ò ##£ÁƒŸ?žì 2¶ÿþ×¯_‡„„hii‘�¥-KJJâóù�;w&;B!ÔöÝ»wïë×¯~~~di5]x˜››/_¾|Ã†ò„&Mštÿþý’’²ƒÈLZZÚÊ•+×¬Yãàà@v–6.11QEEÅÚÚšì !„PÛwêÔ©tèÐ�ì ­F£ X¾|¹––Öï¿ÿ.ó4 F� ×¯_';ˆÌXYY­\¹’ì m_RR’��žÌ†BÉ[AAÁ�7¦OŸNv�Ö¤)…‡ššÚúõë</ó@HWW×ÛÛûÒ¥Kd‘�k×®Ý»wïàÁƒ***Ä
+…B¡PH	CâÐŠ‘˜˜Ø¥K²S „Bmß¥K—˜LæøñãÉÒš4¥ð  ??¿.]º¬[·N¶iaÒ¤I>,,,$;Hs±Ùì¥K—Nš4©ÿþdgQ
+Ÿ>}ÂÂ!„R€3gÎŒ3FCCƒì ­I:�¾cÇŽ+W®<|øP¶� Œ9’Á`\»v�ì ÍuäÈ‘¯_¿îÚµ‹ì J¡¶¶6>>ÞÙÙ™ì !„P÷æÍ›×¯_Ï™3‡ì ­…Ïç7ùÅ“'O~õêU\\V{27aÂ„âââ°°0²ƒ4]UUUÇŽÇ�,¼œ8Ù©9¼&#qhˆ��wppøðáÖ!„�\�7îë×¯/^¼ ;H+ÓÄ#„={ö°X¬-[¶È*?~üÓ§OóóóÉÒtÇŽc±X«V­û,—ËÝ´iS‡˜L¦½½ý‰'„Ÿ}þüù�?þhnnÎ`0†òÏ?ÿ7 ®Ö�ÜIZZÚèÑ£555çÏŸ_YY)’�ÍfoÛ¶ÍÕÕU]]]]]ÝÕÕuÇŽµµµÄ³®®®
+åòåËÂ/¹|ù2…Bquu,9{öìÀ�uuu™Lf§N�–/_Îb±DrVUUËõ²ï˜˜ƒ�7ñ@!„äêóçÏ×¯_ÿùçŸÉÒ
+ñ›'((HEE%..®™ý åååÚÚÚ»ví";HUVVššš.^¼¸îSÄoæÌ™"ÅË—/‹´F¡P®_¿.}'æææÂO�;Vø3_]]-öÊ“Aƒ±Ùl>ŸOœ!6bÄáðÃ‡€Ý»wóù|�7eÊ”º=888°X,áœãÆ�“ÕoœÄ„Åòë!„B|>?   cÇŽ‡ì ­Oswƒ¸\nÏž=ûõëÇãñd	,X° sçÎ­tÃ;vLUU5;;»îSÄþ·……Å­[·X,VFFÆÈ‘# oß¾‚6¾¾¾wïÞ-))a³ÙYYY»wï é;Y¾|9 XYY=yò¤¬¬ìñãÇ–––Â»þ[·n ]]ÝãÇ�çååååå;vL[[ ¶oßÎçó¿}ûF§ÓFAAñ’üü|ƒÁ`0òòòø|þ‘#G ÀÌÌìòåËùùù••• °bÅ
+áœfff¡¡¡eee²ßÐBFŽ9yòd¹�B)¹¢¢"MMÍ?ÿü“ì ­’¾�ˆˆ R©'Nœh~WHXTT „‡‡“¤)\\\üýýÅ>Eì‹ÿóÏ?‚%©©©  ¥¥%X6bÄás“TUU¥ï„8ãèæÍ›‚ÿý·páA\!ò¹=zô( ¸ººGŒ ûöí#îÝ» FŽI<ìÙ³gÝ7(%% lmm…s^»v­�í%ÖÖÖ›6mRÀ@!„�Òúõ×_õôô§6 F‘Í‰Ë—/×ÐÐHJJ’IoHÀÍÍmúôéd§h´çÏŸÀ›7oÄ>Kì‹WUU	–ðx<á’àâÅ‹õÝmCúN˜L& 	7PUU€üü|ályyy  ¦¦F<¼zõ* ôîÝ›xØ«W/á*B]] h4�F£R©T*U›Á`ç,**jÔl‚oß¾Àýû÷å=B!¤´233ÕÔÔvîÜIv�ÖªY—lØ°¡S§NÓ§Oçr¹2éfÍšuùòå’’²ƒ4Î�ºwïNœtTb¿Ÿ RflØ°�ÏçÏ›7/11‘(-ÊËËÛ‰L>ÜÀÀàåË—©©©)))¯^½2006lñ,ŸÏ .—Ëåry<qRñ”à
+u‚žžžÌ³‰ˆŠŠ¢P(Ý»w—÷@!„�ÒÚ²e‹¡¡a@@ ÙAZ+ÙL&óÜ¹sÑÑÑÛ¶m“I‡ˆ0mÚ4
+…rñâE²ƒ4Â·oßBBBæÏŸßäˆ³•¶nÝÚ¹sg¢´hÂíb¬­­àÙ³g‚%OŸ>nÐ¹sg ¸sçŽðÂÛ·o€à|***?üð œ={öìÙ³ 0eÊÁ-Ø ¡;
+icc£¯¯¯àqB!%‘’’räÈ‘µk×
+ï‰E6… 888lØ°aÝºu‘‘‘²êéèèŒ3æØ±cdi„K—.©ªªNš4©É=XXX ÀöíÛ‹ŠŠJJJBBBšpƒâZóÀÀÀ§OŸ–——?yòdÑ¢EÂˆ	©/^|úôé‚‚‚‚‚‚“'OSã	ÏU5cÆ 8wîÜ¹sç	, :zôhzzzUUUMMMRRÒ‘#GúôéÓ„oŽÈÈH<Ü�BÉÏÆ�-,,„÷P£Éð´­ÚÚÚÞ½{;;;WVVÊ°[%÷èÑ# x÷îÙA¤Õ·o_???	Ä~ð„nß¾]äSêçç'òª;‘f:Ý~ýúÕý�8p`MM�p·ŽŽŽÄSNNN"#JþÍ’ùoY}Œ��wìØ¡€�B!%ôüùs
+…réÒ%²ƒ´n2;â t:ýìÙ³.”a·JnÀ€ÖÖÖ'Ož$;ˆTrss#""»øMóóÏ?ïØ±ÃÖÖ–ÉdÚØØüþûïM8æc``>räH}}ýÙ³gŸ9sF¸“É|ðàÁÖ­[���UUUÕÔÔœ��·mÛvÿþ}ÁÉT„éÓ§‹ü 6~üx333ƒ¡¦¦æààðóÏ?¿ÿ¾±�›#;;ûÛ·oîîîŠ!„R5553gÎ>|øÄ‰ÉÎÒºQø²>ýÎ�;#FŒ8|øð¬Y³dÛ³ÒÚ²eË¶mÛ233µ´´ÈÎÒ€C‡-[¶,//OT¤‹/úùùkhh��!„jk6mÚ´mÛ¶¸¸8Á=ÁPÓÈòˆaèÐ¡+V¬øé§Ÿ¢££eÞ¹rš?>—Ë%nW×Âýý÷ß>>>Xu(ØóçÏÝÜÜ°ê@!„d.11qÓ¦Mk×®Åª£ùdÄ x<ž··÷—/_Þ¾}KÜ
+5S@@@hhhJJ
+�F#;K½ÊÊÊ�?>uêT²³(WW×ï¿ÿþÏ?ÿ$;B!Ô¦ðx¼!C†äää¼ÿ^äLlÔ²?â Ä�ÌKJJˆiPó-^¼833óÆ�d‘$<<œÃáøøø�D¹”””ÄÄÄôíÛ—ì !„P[³uëÖgÏž�;w«™�Ká æææ.\¸téRÝŠPØÚÚz{{‘D’Ç�wíÚÕÀÀ€ì Ê%""‚Ïç‹�¡!„BMöêÕ«uëÖmØ°ÁÍÍ�ì,m„¼
+ øþûï�9²råÊË—/Ëoå±hÑ¢ððð–|›”'Ož8�ìJçÅ‹]ºt144$;B!Ôv”••M›6­_¿~Ë–-#;KÛ!ÇÂ fÌ˜1þüY³f}üøQ®)ƒ!C†tíÚuïÞ½d¯¸¸øýû÷ ;ˆÒyúô©§§'Ù)B¡6eñâÅyyyG�¥Rå»·¬Tä¾)ƒ‚‚<<<FŽ™ŸŸ/ï±Ú6
+…²páÂ‹/æææ’�EŒ/^ðx<<áGÁŠ‹‹_½zåííMv„B¨í>qâÄÑ£GmllÈÎÒ¦È½ð Óé.\àñx“&Mª©©‘÷pmÛÔ©SÕÕÕ>Lv1¢¢¢¬­­���É¢\?~ ƒ&;B!ÔFÜ¾}{É’%›7oÆÛÊœ"ß¾}ûÝ»w~~~<O#¶UšššóçÏÿë¯¿ÊËËÉÎ"êýû÷®®®d§P:<èÞ½»žžÙAB¡¶ ..nÊ”)S§N]µjÙYÚ �µæìì|ÿþýÐÐÐ¹sç*fÄ¶jéÒ¥555ûöí#;ˆ¨�?º¸¸4¿
+…B¡PšßOKQ†<x0dÈùõ?jÔ(
+…2lØ0á…|>ÿ»ï¾£P(“'O&–¼ÿ~ùòåîîîšššL&³S§N™™™ö_ßÆ¯»œR?ÉCðùü«W¯Ž5ÊÔÔTEEESSÓÉÉiþüù¯^½i2lØ0cccccã¡C‡^ºt©î�ŽˆA;uêÄápêË,!­HliÖKšwAúëÛÚ:�nbb2jÔ¨ððp	ÍêëYò@Rv"Ð§O
+…Ò³gO±]¥§§Ï�;·cÇŽL&S]]ÝÉÉiÑ¢E"Óo4ak „”YAAÁ„	ºtérðàA²³´Q|ºuë�N_»v­"m{~þùgccãÊÊJ²ƒü‹E¡P®_¿Þü®ÿ±Tüˆ²’’’ áááòâË—/ÄÑ¯^½*X¸gÏ 011),,$–ˆýÛ¢§§÷áÃÉý×·ñë.oÚ±ÒÒR	7–4+++:t¨Ø6¾¾¾eeeb“=z´¾ÌÒŠŒ.ÍzIó.H?b}[[•Jmì[ y );!ÄÇÇžŠ��y6::ZGG§Á~š°5BJ‹Åb¹»Þ‘•½    IDAT»ÛØØäää��¥ÍRôßàà`
+…"ò6j”ÜÜ\UUÕ½{÷’äÿ<þ ÒÒÒšßîHïÐ¡Cššš555r…¸�¹¹9±ÿ��� ¦¦ ·nÝ´qssÛ¹sgtttEE‹Åº}û¶µµ5 4Hrçõ½ÝõíA66üÈ‘#@OOoçÎ�ÉÉÉ555ñññ‡îÓ§� Ù¸qã @WWwÏž=l6;333((ˆ8‡mÜ¸qu“ @‡Øl¶4	›ö”0iÞ…&t[·qMMMLL1]�‡‡Gcûl°�ôÁ~ùå `2™ °dÉ‘g¿ûî;ø÷XzaaaMMMbbâ¾}ûš�!„ø|~YYYÏž=­¬¬233ÉÎÒ–‘ðyåÊ•4�8‡5ÍÜ¹s-,,ä½Ç)½£G�jhhðx¼æw…;
+Òóññ™0a‚¼G©­­urr€_~ù¥¶¶ÖÃÃ fÎœ)ùU¯_¿ 555ÉÍäZxÜ½{ ttt$4{ðà hhhÄÄÄˆ<CjIâàà  ”&aó�Æ¾M.<ÙÙÙ  ªªÚØ>eUx°ÙìvíÚÀ� ÀÐÐPäÏQw%%%53Bñùüššš¡C‡êêê¾ÿžì,m9‘W¬XA£Ñ.\¸@Êèm@jj*�N?yò$ÙAþ¿5kÖ8::Ê¤«º;
+gÎœ0`€ŽŽŽŠŠJÇŽ—-[VRR"xöÙ³gÓ¦M333£Óéúúú^^^÷ïß<K\v"Rå^ºt	 \\\ÄŽH<äp87n´²²RQQ±³³;~ü¸pŸ?1b„†††��ÁÜ¹s+**¿Ãb±TTTÎž=[÷)"LeeåO?ýÔ®];�Æÿ÷K}.—K4ãr¹ÄÞóÄ‰%�Aœýÿã�?€••‹Å’ü’²²2 011‘ÜL®…qñÃü!¹Ù”)S `ýúõbŸ]¿~= L�:U$ÉÅ‹ÀÂÂ¢ºººÁ„Í/<ø�|dRx6¶OYW¯^ü’:;;@HHˆpƒöíÛ@“ÏåC!�ÊÊÊaÃ†©««?{öŒì,m9‘y<^@@ ƒÁ¸qã)Ú€iÓ¦ÙÙÙ	v"É5uêÔáÃ‡Ë¤+á�GìŠpppìrÕ}Vøj“]»vÀˆ#„‡>|8 ìÞ½»îˆ‚‡3gÎéöòåËDƒüü|SSSá§ÆŽ«øý›.¨¨¨×`"«@T‚`_¿~Õ××€Ó§OÍN�: íÚµËÏÏop¸Ù³g6ï£G�lôèQ ðõõ•Ü¬¾íVwy¶°•• H>ÜÁçó;tè â®" ÄÄÄ €���H.—koo ýõWƒ	›öT]Ò¿�êV¸±ð©V?þøccûl°�”ÁˆKn‚ƒƒù|~PP øøø7˜?> hjjúûûŸ<yòãÇ�§ÉÃ!„”Vaa¡‡‡‡¡¡á›7oÈÎ¢Hû‹ÌãñæÍ›§¢¢"rý"’R||<•J½rå
+ÙAø|>ßÓÓó§Ÿ~’IWÂ;
+GŽ 33³Ë—/çççWVVFDD'™¬X±‚hãëë{÷îÝ’’6›�••µ{÷n:7ýÛ·ot:�Á`KòóóƒÁÈËË«;¢à¡……Å­[·X,VFFq�@ß¾}‰K—.€:<yò¤¬¬ìÉ“'Ä®‚÷o&Mšäåå%ö)"Œ™™Yhh¨ð…ÑgÎœ kkk6›Íf³‰Ë0®]»&Íp999Ä­['MšÔ`ãØØX
+…Òà·G�-<Äª¯sUUU ¨ªª’œAr³ÊÊJøï9c‚AÏŸ? íÛ·'^ÛœÂCÊõ’þ]hÔRìèüÖHµÁq¥é$++‹F£1™LâºùÂÂB&“I¥R322mÊÊÊF�%ürmmí3fˆ\iÖ¨Í‹R6yyynnnfffqqqdgQdþñåp8'NÔÒÒzþü9‰1Z¯‘#Gº»»ËäÊŠf277ß±c‡LºÞ' ¦Ñ™µ‰˜ÊÉÖÖ–x6bÄ:�.Ø¥>7}Äˆ °oß>âáÞ½{`äÈ‘bG<üçŸKRSS@KK‹xØ¥KøïE½7oÞTð®LUU•¦¦f}aÄVÄ”¬ûöí#¶Ã”)S¤‘(· @OOOP³‰KZµjUƒÝÖ·Ýê.oÂ¤¼.—kggÿ=“¦Á§¤\/éß…F} ëmhhøòåË&Dmp\i:Ù¸q# Lž<Y°dÒ¤I °aÃ‘Þbcc·nÝ:vìXâ° èêê~üø±QÃ!„”Szzº“““¥¥å§OŸÈÎ¢DHþãËf³ÇŽ«©©)×)AÛªØØX*•zþüyrc°Ùl�&8©™„÷	ÔÕÕ€F£Ñh4*•J¥R³ï3>ŸñâÅúæãtHœ,Þ»woâa¯^½à¿;åb÷œ„wCw½$Óì)xWæþýû
+åË—/bŸ%ÂÕ}*++KGGÇÄÄÄÄÄÄÔÔT0®dáááT*•F£gÛûùùÕ×2""‚8¡kÎœ9Ò”ÄD¹X[[+¼�Íf �N¯»RÒ¤�ë©VÄÏgÏž cccÉ×ù4í)Ò¿�êV¤qNNÎÂ…@___dBIiúl°Mƒx<ž��ü·øÿçŸˆwAÂ‡*11qðàÁðß“²°Æ@‰õäÉ###ggçúþ'ErBþ_d‡3cÆ&“yóæM²³´>Ó¦M³µµžÓSñrrr àéÓ§2éMxG�˜¸¦>|>¿k×® 0oÞ¼ÄÄD¢TÜÓ]ÐaMM��� ¤¤¤|þü „gÈ[xHHÕ
+�Y³fuïÞ½¾g%„©¬¬´µµµ°°ÐÖÖvvv–fb´²²2bGpõêÕ‰‰‰Äê?yò¤nËÛ·oµâÜ¹s¥<GÌ\”žž.¼0--�Ø›—r¥êC\\¾eËÉÍ~øá øý÷ßÅ>[ßÅåÄÏ§sçÎ @Lw+¿ÂCúw¡QÝÖ×˜82æïïßØ>›_x<|øPÂoýÃ‡%¼677 444•!¤l¶nÝJ£ÑfÌ˜!˜)L‹ø‹Ìãñ,X ¢¢‚×š7VZZšŠŠÊáÃ‡IÌõaÜXÂ;
+Ý»w 	×{»_ÂXß¸q£î®ÆO?ýDìY;‘���õ�X÷aÝ…uOµºuë–"÷o***´µµƒ‚‚êk !L``  œ:ujË–- °lÙ²‡#.hvqq!ª”ß~û ºví*Rîž8q‚8|±`ÁéOÿóòò€/üë¯¿ `È�!R®T}ˆétuuu%4»ÿ> hjj6j:]ÁÃÓ§O€¡¡¡\)ß…Æv[_ãÄÄD:�N§Ó…7�b
+±óIH>9�¸ç ººz£2#„”GEEÅÌ™3©Tê†ZÂ™êJ¨¥üEæp8þþþjjj÷îÝ#;K+3oÞ¼öíÛ“x#óððp �Õm>…wŽ? &&&GŽIKK«¬¬¬®®NLL<|ø0qêT§N� `õêÕ………ÅÅÅ—/_666®»«ñöí[ èÜ¹³­­- DEEÕ7bÝ‡u÷5³¶¶///'®ÒVØþÍÅ‹étº„SüëóàÁ
+…âèèÈår«ªª,--©TêãÇ�%ŒuçÎ PQQÌ[ZUUElö­[·
+š	¾ï_¸pa£ÖåäÉ“  ­­}êÔ©¼¼¼¼¼¼“'OjiiÕ‘4+%11€¾¾þ®]»RRRØlveeeBB‚È‰Ë”õôô‚‚‚233‰‰
+‚ƒƒ%Ü@Pð�ÃáD~…‡”ïBc»•ÜxÎœ9 0~üøFõÙÌÂ£¸¸XUU•B¡Ô½iFF•JUUU%6º¸¸lÙ²ååË—EEEµµµyyyÿý7qÉ�ðm+±ð@	DGGÛÛÛëêê
+¦¾DŠ×‚þ"s¹Ü9sæ0™LY]- $rrrÔÕÕÿüóO²\¿~ du¼RdG�ø†^,¾Ðþ®€ŸŸŸØ]GGGb¹“““äÅ¾\xá·oßLLL„%v[E®I�Ÿ#FHž¦Vì*™™™�Ð±šsçÎ€¥¥¥ðicÂ
+‰ËÄEn…Aœp¯®®.8Eª¾÷ $ÏÕËår}||ê¾Ê××Wä»(	CHè¿´´Tlÿ"/,--%&�­ËÇÇGxf0±›—(Ÿ$„ið)	ñ¤¤QÊÆÙÙÙjjj
+%22RÊ¨Ò´‘Ü€˜ó`ðàÁbsÇÇˆ9êëDWW÷Ý»wÒçA)‡³nÝ::�îããóõëW²ã(µ÷ÇwëÖ­
+eÛ¶mdiM–.]jhhØà=ÝääøñãÂ'U7SÝ}‚°°°ñãÇ›™™1555‡Ÿþ™¸·(‡ÃÙ±c‡­­-“É´±±ùý÷ßkkkÅîUìØ±ƒX¾sçNÉ#Š}¹ÈÂ¤¤$âfCúúúsæÌ!Nð022jþê7ˆ˜Xì}Ä®qÁƒ§§§`	�Ç#æ&þá‡ÄöCL%Ô«W¯ºwH zL&a÷®Á›„ÔÔÔlß¾ÝÅÅEMMMMMÍÅÅeûöíuÏ jò$�Ç		L}¦¡¡áèè8þ|‘Y›x<ÞÅ‹}||ŒŒŒètº‘‘‘��ÏÅ‹ë‹¯;hmmmÇŽ%„ið)	ë%ý» åˆÒ7^±b•Ò¼¶‘ÜÀÍÍ ê›0ƒ˜¿ØÍÍ�Ïç¿ÿ~Íš5žžžúúú4MCCÃÉÉiÉ’%ÂSîJ™!Ô¶¥§§{{{Óh´uëÖ‰½áR$
+_âŸfRìß¿?00ð§Ÿ~Ú½{71i=’¬°°ÐÆÆæ—_~!ÎüV°àààmÛ¶·:VN{÷î8pàãÇ�å=ÖþýûW¬XñõëWâÚ„B‰ÅápöìÙ³~ýz““'OöíÛ—ìDZâný‚®\¹røðáéÓ§¾ÀFîÞ½»°°Pñ£WWWy+�Ñ£G?{ö¬´´477÷È‘#kÖ¬�ÿÞ)\~Î�;7|øp¬:B!	ÂÂÂìíí×®]»víÚ„„¬:Zˆ–xÄƒpëÖ­I“&y{{Ÿ={w³T^^Þ¹sçÑ£Gïß¿_ÁCoÚ´éìÙ³Ÿ>}Rð¸$ª{óww÷ˆˆ¹ŽûîÝ;ww÷Ç�8P®!„B­TNNÎ¯¿þzêÔ©ž={:tÈÉÉ‰ìDèÿ´Ä#„#F<xðàùóç î�$ÐÔÔüý÷ß>§à¡Ùl¶¼w¸[šÐÐPoooSSS•Ž;.[¶ìÑ£G
+ØGŽqppÀª!„ª«²²rÓ¦M]ºt¹ÿþ¡C‡ž?ŽUGKÓr�x²³³GŽ™““sãÆ�=z�§Eãr¹nnn–––·oßVä¸+W®#¦¬EòSZZjff¶qãÆÅ‹“�!„jA8ÎùóçýõW‹µ|ùò%K–7´E-MË=âA033{úôiÏž=@Li‚êC£ÑöìÙúàÁEŽËf³†"GTN.\àñx3fÌ ;B!ÔR°ÙìcÇŽÙÙÙÍ™3gìØ±)))kÖ¬Áª£Åjé… hjj^¹reÆŒ~~~»ví";N‹öÝwßùúú.[¶ŒËå*lP*•Êãñ6œÒ:pàÀÄ‰uuuÉ‚B‘¯ººzß¾}¶¶¶?ýôÓÐ¡CSRRöìÙchhHv.$I+(< €N§8p`×®]+V¬øñÇ«ªªÈNÔrýùçŸqqq§N�RØˆ'“·ÈÈÈ>Ìš5‹ì !„ÉâããçÎ�kllüë¯¿úûûgee7ÉE-\ë(<.|òäIXX˜›››RÍ¡Ô(ööö³gÏ^»vmEE…bFÄÂCvìØÑ­[7œ!„�2{üøñ¸qãœ��ïÝ»·bÅŠ¤¤¤õë×��I«5 àééùöí[�ž={Þ¼y“ì8-Ôo¿ýVZZª°ÓÒ°ð�·¸¸¸+W®wA!„”MRRÒÊ•+ÍÍÍ‡B£ÑîÝ»—žž¾zõj###²£¡Æie… ˜™™=|øÐËËkÜ¸q{öì!;NKdbb²fÍš­[·¦§§+`8¹
+¥îM3”ÍÎ�;íííÇŒCv„BHqJKKO�:õÝwßÙÛÛŸ>}zêÔ©111—/_<x0î´R­¯ð  MMÍ���uëÖ-]ºtâÄ‰eeed'jq–.]Ú±cÇyóæ)`,UUÕšššfvÒÚùåÿòåË¹sç~ùå—V½}B!)eeeõíÛW__?  ÀÖÖöéÓ§YYYÛ¶m³³³#;j––~Éž={6yòd:�~ùòåž={’§eyöìÙ€®_¿>räH¹tâÄ‰ÀÀÀòòòætBìU·ÞO£üò/Y²äÚµkŸ?Æ9‹Bµa‰‰‰wîÜ¹yóæ³gÏTTT¼¼¼ÆŒ3bÄ¼„£-i•G<úõë÷þý{;;»‘§eé×¯ßÄ‰+++å:�ŽŽNee%‡Ã‘ë(Ê©¨¨èØ±cXu „j{***nÝºµ`Á;;»Í›7›››_ºt)??ÿÆ�3fÌÀª£�iÝ… Ý¾};  `É’%óæÍÃ™v…ýùçŸEEEÛ·o—ë(:::|>¿´´´É=N"¢^"Ü’B¡”——ûûûëèè˜ššgQQÑ´iÓôôô×¬Y#räáìÙ³ÔÕÕe2™�:uZ¾|9‹Å<Ëf³·mÛæêêª®®®®®îêêºcÇá«VÄžF%²¾üÍ´uëV&“9þ|™ô†B‘ŽÅb…††®ZµŠ8™jÌ˜1ÑÑÑÓ§OõêÕ·oßÎœ93nÜ8²c"ùà·W¯^ÕÕÕurrŠ‹‹#;KBì¹&&&ÊoˆÈÈH HMMmr>™"ŸRâ¡ÈeÖ7nÜèÑ£‡ð’Ó§Oíy<Þ”)SêvîààÀb±ø|~uuuÿþýë64h›Í›¡îB9ýf¥¦¦ª¨¨7¿+„Bˆ,l6;::úØ±c,puu¥Ñh4ÍÅÅ%00ðÒ¥KdDŠÓê�xŒ;öÓ§OfffÝºuÛ¶mÞK›°dÉkkë_~ùE~Cèèè @III“{à‹Û¹—Ð>--íÃ‡,kÁ‚ àççÇf³…—:tˆhyìØ±óçÏ›™™]¾|9??¿²²2""ÂÃÃ#..î�?þ €={ö„‡‡ëêê?~</////ïØ±cÚÚÚ�?–~Î´Ææ—ÒÆ�-,,3C B!$+ååå/_¾<tèÐüùó{ôè¡¥¥åææ¶xñâøøx__ß›7o¾ÿ>88xâÄ‰x2•rQd•£ <oÏž=Ä5I¹¹¹dÇiBCCàöíÛrêŸ8méîÝ»Íé¤¾O£ÈrâáË—/‰‡999b—´k×ŽxHL9.ÜgJJ
+ ØÚÚòù|ggg 8qâ„pƒ£G�€«««„lbƒ5zµëG£Ñ‡nB¡–‰ÅbEEE]¼xqýúõcÇŽíØ±#•J 55µ=zœ<y2..ŽËå’�‘¯uÏjUŸðððiÓ¦Q©ÔS§N0€ì8ä›:uêãÇ�ˆ£2§¡¡±wï^ÿ&÷Pß¬P"Ë‰‡ÕÕÕL&“XNüuYB¡PˆC^•••4MÐ	ñ¹ ƒÁf³ÕÔÔª««óóóƒæçç·k×NMM�¸._l6±ÁdøÛ4nÜ¸ÔÔÔ¨¨(bB!r•——gdddeeeeeeff~ùò%99999ùÛ·o @¥R­¬¬œœœœÿÕ©S'âÿ_„èd�‹þýû¿ÿ~îÜ¹ß}÷ÝÂ…ÿøã555²C‘)((ÈÞÞ~íÚµÁÁÁòèßÄÄ$77W=‹EÔ tU·È¾Ð! àr¹u;‘þ¦‡
+åÿ—éÿ'ï9Þ¾}û÷ß_½z«„P‹U^^.ü‡”ÍfWTT4§C===â555UUÕf…CMÂápŠŠŠŠŠŠ²²²²³³¿|ù’���••EÔ‚sªUUU----,,F�Ý©S'[[ÛŽ;
+þ/F¨>m³ð  }}ý���«W¯ÎŸ?ÿúõëÇ�4hÙ¡Hchh¸uëÖ9sæüðÃ½{÷–yÿ¦¦¦_¿~mNÄÎ=‡Ã¡Óeù™tppxûöí›7o<<<Ä6èÜ¹óÇ�ïÜ¹ãçç'Xxûöm èÒ¥ñÐØØøë×¯éééÖÖÖÄ’gÏžÉ/?�Ç[°`Aß¾}G�ÝÌ®B ***ÊÊÊÊÊÊJKKKJJˆŸËËËKKK¹\®à_�Çb±êþËçóKJJˆ¾n5B¡Ptuu%,TWW'ö€Å.ÔÖÖ¦Ñh‚§†¦¦¦pWšššÄæººº
+…F£ikk+n…eªºººªªª´´´¶¶–ÅbÕÔÔuEaaa‘�ÂÂBb‰ð•ªªªææææææ®®®ffffffFFF$®jÕÚláA7n\¿~ýæÎ�ûý÷ßÏž={×®]J;AÛÌ™3/\¸0wîÜ¨¨(™ßÂÔÔ´™G<ŒŒŒòòòBBBÆŒ#Ã/º,X0sæÌ‘#GnÜ¸qðàÁÆÆÆT*õË—/OŸ>=qâDDDÄ”)S>~ü¸xñb :t( Ü¾}ûçŸ ÁtX]»výúõëâÅ‹÷îÝ«««^w~[æŽ‰‰ùøñ#Þª!T‹õíÛ·‚‚‚‚‚‚üü|âç²²2‹Åb±ÊþUZZJÔ"/g2™ššš:::T*Uä_�fccCì—ÿB5 ACCCEEEðPEE¥™ÿÃ?TUUUWW€pµ#vaeeeMM�ÈÂ‚‚b!Q8‰´$
+­&ÔQL&S]]„VœØhÄv4)T…¡É[©¶¶VøF½l6[ð°¤¤„Íf———«Éb±jkkë›æ^UUUÿ_...ÄÏ‚å¦¦¦íÚµkBN„$k›×xˆàóùû÷ï_¾|¹µµõÑ£G{õêEv"r$'';;;ÿþûïË—/—mÏ‹-ŠŒŒŒˆˆhrþþþ'Ož^B|2¼”¢Á%.üë¯¿ÄÊçókjj¼¼¼êÁ8pàýû÷‰ÿZîÞ½KÔ$3gÎ<~ü¸ð(õåo¬ììl{{ûE‹mÜ¸±	/Gµ\.7''çË—/Äl{Du‘ŸŸŸ———ŸŸ_PP ¼Ó©©©Ù®]»víÚiiiéêêjkkkjjjii	jýKGGGGGGKKK¸`Pr‚zAaSVVFÜ—(„8NYYü{ô „Î1#Š:áòF¸½Hÿ„&Ÿ�&RÀàtuu†––qÜF[[›Á`èèèÅ’––ƒÁÐÕÕUQQÑ××'Ê'„H¡…!99yöìÙÏŸ?Ü´i“rúØ¸qã–-[bbb:vì(Ãnƒ‚‚¶lÙÒœ³­X,ÖªU«îÜ¹“““CüA—Uá ><xðàË—/óòòètº���···ŸŸŸ‹‹ ÔÔÔìÙ³çüùóIII
+ÅÖÖvêÔ©‹/þ�ùÄ‰Û·oOII111ùßÿþ·fÍâ”*Á(õåo¬‰'¾{÷.&&FÉ¯JB¨Íãóù¹¹¹¹¹¹©ÿÊÉÉ!
+¾øg0†††íÛ·755ÕÓÓÓÓÓ«û3þ­@µ"JTxBBBètúÞ½{ÇŽKvE«®®vuuíÔ©qƒ¬Ü¼ysôèÑåååø=Js„††>üÞ½{ÞÞÞdgAÉLeeeJJJJJÊ—edddddäåå444¬þeiiiiiÙ¡C+++###¼Z!Ô–(]á EEE«V­:|øððáÃ:Ô¾}{²)Txxø AƒNœ8!|9u3ÅÄÄ8;;ÇÇÇÛÛÛËªOeS^^îæææààpýúu²³ „š¨ººúÓ§OŸÿ+;;›xÖÈÈÈÒÒ’¨.ˆÒ‚(3„§óF¡6LÂ�;wæÏŸ_ZZºmÛ¶Ù³g+Õ…¼Ë–-;|øpLLŒ¥¥¥L:,++ÓÖÖ¹IoâÄ‰Ïž=ûøñ#Î‚PkQ]]������Kü›––Æår)Š™™Y§:”ó_„PÞÂ *++7lØ°sçÎÁƒ:tÈÊÊŠìD
+RSSãîînbbòàÁYU\FFFë×¯�IoÊæìÙ³~~~wîÜñññ!;B¨^yyyÑÑÑÑÑÑïÞ½{ÿþ}jj*—Ë%®sttìÚµ«£££½½½­­-^z�Bu)uáAˆˆˆ˜={vzzúo¿ý¶téR%¹Ëæë×¯===80{öl™tØ¿''§}ûöÉ¤7¥’œœÜ­[7???Üzµ4ÙÙÙ‘‘‘ïÞ½#êâ¤)sssggg''§®]»ÚÙÙá•!$,<  *++×­[·gÏOOÏàà`ggg²)ÂªU«öïßÿñãG™ê™;wnrrò£G�šß•R©­­õôô¬®®~óæÞ©!Ò•––¾}ûöõë×oÞ¼‰ŒŒÌÎÎf0]»vuù—«««��Ù1B¨UÂÂãÿDEEDEEÍ›7oÃ†"wJj{jjjºwïÞ®]»Ø»”    IDAT°°°æŸpµ{÷îmÛ¶5óþåJhÃ†›6mzñâE}÷VGÉUmmíÇ�‰JãÍ›7‰‰‰|>ßÖÖ¶G�=zôðððpssÃ!$XxˆºuëÖÂ…KJJV®\¹dÉ’¶}—¥—/_öë×ïðáÃ3gÎlfW÷îÝóõõ-,,Ô××—I6epïÞ½aÃ†ýñÇ+V¬ ;BJ$55UPi¼{÷®ººÚÈÈ¨gÏž={öôððèÑ£G›ÿâ	!„H�…‡UUUÛ¶mÛ¾}»¥¥åž={Úöõ¾+V¬8xðàû÷ï­­­›ÓOZZš��ÍóçÏ===e•­mKHHèÙ³çøñã‰› #„ä'===<<<*****êÃ‡åååººº}ûöuwwwwwïÞ½»©©)ÙB¨íÃÂ£^YYY«W¯>sæÌðáÃƒƒƒ›¹_Þbq8œ>}úðùüˆˆƒÑä~ø|¾‘‘Ño¿ý¶páBÆk«JKKûõë 8Ã&B2Çf³ß¿ÿæ_III|>ßÒÒ²wïÞÄ‘�nÝºáUU!¤`Xx4àñãÇ‹-úüùóÂ…ýõWMMM²É^BB‚»»ûªU«Ö®]Ûœ~¼¼¼Ú·oêÔ)Yk«jkk‡öñãÇW¯^uèÐ�ì8µUUUQB¹\®¡¡a¯^½úöíëéééââ¢¥¥EvL„RjXx4¬¦¦f÷îÝ›7o655Ý½{÷°aÃÈN${»wï^¾|ù‹/zôèÑäNV­ZuëÖ­ØØXk{ø|¾¿¿ÿ•+W?~Œ”#ÔÉÉÉoß¾�ŒŒ|ûöí»wï***†³³³‡‡G÷îÝ=<<”d†t„j°ð�VNNÎŠ+Î�;7pàÀ­[·6g½âñx^^^999QQQêêêMëäÊ•+“'Of±XxîP}ø|þâÅ‹÷íÛ÷÷ß�1‚ì8µ&</!!ApLãýû÷ªªªîBììì°Ò@¡�Æ‰��_¿~}HHÈàÁƒ·oßîææFv"™ÉÊÊrvvž6mZpppÓzHOO·¶¶ÆëËëÃçóçÌ™sêÔ©‹/Ž;–ì8µ©©©Ä=Â‰›…vwìØ‘8 áááÑ­[·6y,BµIXx4EDDÄŠ+"""Æ�·eË–Ž;’�H6Ž=:wîÜþùçûï¿oZ†††x}¹XÄ±Ž`Õ�P}8NBBq�p¢Ø`±X
+ÅÚÚº[·nnnnîîî8g7BµRXx4Ý­[·~ùå—ôôtÿ6“�HÆŒóæÍ›>6áåÞÞÞ&&&x}y]K–,Ù·oV	+((xùòeTTT|||\\\RR‡ÃQWW'jBçÎ�›3áB¡–�f©­­=qâÄúõëËÊÊV¯^­­­Mv¨fa±Xnnn¶¶¶wïÞ¥R©�}ùš5knÜ¸!¸¾œËå&''ÛÙÙÉ:f+³~ýúM›6�<yrÚ´idgAˆL¹¹¹?~üð¯OŸ>q¹\uuu'''·999áD·!Ô&aá!%%%Û·o
+
+200X¿~ýôéÓ[õÕ�‘‘‘žžž›7o^¶l™`aNNNtttƒ3z]»vmâÄ‰/_¾{òäI—.]Þ¾}+çÈ-—Ë%Î°Âª)!6›ÿñãGA±‘ŸŸ FFF......D¥Ñ¥K—Vý7!„�”°ð�™ÂÂÂ;vìÙ³ÇØØøçŸž7o“É$;TýñÇë×¯ïÕ« <yòdüøñVVVQQQõ½$99ùÑ£G7nÜ«­­¥Ñh<�Ïç{{{ß»wO�Ù[‹5~üøÈÈÈ«W¯6ù²„ZÁ¬SÄySQQQ¹¹¹  ¡¡áêêêîîîààÐµkWggçÖ~d!„PÓ`á!c‰‰‰7n¼xñ¢­­íÚµk'OžÜ„–HÇãñ¼½½ÓÒÒ¢¢¢<¸zõjâs’žžnii)ÒxÙ²egÎœùöíñ�%—Ë<E£Ñ¦M›vòäIfo)222†VZZzçÎ²ã ${Ä�¸¸¸ØØØ>äåå€¡¡!q@ÃÙÙÙÙÙÙÁÁAEE…ì°!„È‡…‡\|ùòå�?þ8qâDûöíW¯^=sæL:�Nv¨ÆÉÌÌ$¾˜ÌÊÊâñx À`0þøã�¥K—Š´¼råÊ„	ÄvÂd2.\¸}ûv¹ÇmaÞ½{7|øðöíÛßºuËÔÔ”ì8É@mmmbbb\\QiÄÄÄ¤§§óx<{{{GGG'''¢Øhß¾=ÙaBµDXxÈQ~?~ÜÜÜ|ÕªU­«üxõêÕ°aÃÊÊÊjkk‰%
+ÅÍÍMìÙVÓ¦M»|ù² ¥€ŠŠÊæÍ›ëÖ*mCjjª��MÝåÿüóÏ¤I“ºuëvõêU]]]ÅC¨ùª««ãâââââDÎ›RSSëÚµk×®]§Na™�BHJXxÈ]k,?‚‚‚–.]Êçó…Ï› 
+…’––fee%Ò¾¤¤ÄÎÎ®  @¤=•J=~üøôéÓåžXá233»uëvâÄ‰áÃ‡òx¼Í›7ÿþûï3fÌØ¿?ž^‚Z�—žžŸ��—��P^^ fffÄÑ''§®]»ª©©‘�!„P«„…‡‚ÄÇÇoØ°!$$ÄÁÁá×_7n\ËœÅ¥ººzþüùõ]•A§ÓÿüóO±÷¼}ûöˆ#ê.¿sçŽ¯¯¯lC’ŽÍf÷îÝ;::ÚÈÈ())IGG ¾~ý:yòä·oß>|xÊ”)dgD¨^\.7--�¨.ˆcŸ>}ª¬¬ ccc{{{GGGGGG===²ó"„j#°ðP¨¸¸¸�7†„„X[[/]ºtúôéõ}w¸uëV}}ý9sæ(8aRRÒ„	bcc‰ë:DP©Ô^½z½xñBìkÅžpÙ½{w¹d%Ï¬Y³NŸ>ÍápÆÔ©SOœ81qâDmmík×®á}KP‹R[[›’’"|(ãÓ§OÕÕÕ `ffÖõ_D±�7G!$?Xx�àË—/»ví:vì�F›1cÆŠ+DN’æp8ß¾}Û½{÷¢E‹�Ïç9rdñâÅ§îe
+%33ÓÌÌ¬îÅžpõåË—ºaµjÇ�ÿßÿþ'øÅ¡P(K—.ýë¯¿xöìYrã!eFœ1EÄHMM%~(.. &“éèèhccÓµkWâÚ[[[<!„�"aáAš‚‚‚½{÷îÝ»·¬¬lÒ¤I«W¯|S~ùòåÉ“'oÍêÕ«7oÞ¬øxiii³fÍzúô)ŸÏþ�Ðéô]»vŠ}UÝ®*++ÛÒáQQQ½{÷®Ç¨Tª®®îÜ¹s7mÚÔ§NF­›ÍNNNNLLLLLLJJúôéSbb"Qf¨««wþ—��ñ¯––Ù‘B)5,<HVQQqôèÑ]»veee:tÍš5½zõrqqœìD¥R'Ož|òäIƒ¡àl|>ÿÌ™3���UUU‚]m*•Ú»wïçÏŸ×÷ªüñÒ¥KD{555âÄñ¶¡°°ÐÙÙ9//�Ãá/g0,Ø³gYÁP›Çår?}úDÇ9”¡®®noo/8”acccccƒf „j�°ðhª««Ož<¹sçÎÔÔÔÞ½{GDD?K§Ó½¼¼®^½JÊ¡ƒÜÜÜyóæÝ¼y“BùÿŸ
+…’��]ßí)X,V—.]ˆ®ÌÌÌ²²²›W^xÿ¯½;�jêÌû þ$$ö �°È"‚"àiÇaÜp¦Îtl;U™ŽÏØcO7�³ôÌôtÞqë8¶Î8uµŽsdZ+Ô¥VÅm¦‚²(²%!@�°$!!ÉûÇsÌd€m…°|?pnŸÜûôw/xÎóÍ}ž{-–+V\½zuèô3BƒÁ(..^¼xñÄÓO[[Ûýû÷í3†\.7™LL&344Ô>`ài¶  0… xL"f³ù_ÿú×Ö­[µZí Ñ-‹ÅJJJºxñ"}€ÒÄËÍÍÝ¼ys__ŸÑhd±X|ðÁ–-[¾nçO?ýô¹çž#„Ì�;÷«¯¾šÀ2ÇÑž={¶oßþuÿ^œœœ"##+**&þÆLiV«U¡P<zôÈ6WêáÃ‡2™Ìb±¸¸¸DFFÎž=;22Ò6c
+‹ˆ  `êBð˜\äryXXØ ·aPl6{Ö¬YŽú‚S©TnÚ´éÂ…V«5==½°°p„�_~ùå“'O®X±âóÏ?Ÿ°
+ÇOQQÑ3Ï<3ì“¾!ƒÍf�Æwß}÷w¿ûÝ×S…V«}üøqýöÓ¥8ŽýMº�éR  0Í xL.¿þõ¯÷îÝ;ìdB›Íöóó+,,Œˆˆ§¬VkWWW__ŸN§ëéééîîÖét:�Ž�úûûoß¾ýÙgŸõ÷÷oÝºÕÅÅE«ÕBôz=}:§V«¥£s“ÉtëÖ-__ßèèhºÏ¨¸\®‹‹Ë F�@àäääää$!®®®‡âááA‡ûnnn„�Çårù|¾@ àr¹\.×ÓÓsØ¿…†††¹sçöõõÙB&“Éb±ŒF#�ÇKMMMKK{öÙg&ÿÛ!atuuÕÕÕÕÕÕÕ×××=¡P(,‹“““X,""""<<<22’Ëå:ºj  €ñ…à1‰‘HD‡ø_‡ÅbùøøŽýe;š!t:]oo¯V«Õétz½~ØNè—¯ÎÎÎ<Ïb±twwóù|¡PH§~q8ºþ„æzˆL&kmm]¸pá§‡étºþþþA�ÝÝÝf³Ùl6wwwÛïÓÕÕeµZ�Fc__!¤··wØ´FŸÏçr¹<ÏÓÓÓÛÛÛëë}º¨ÉdJII)--¥CF‹ÕßßïêêšœœLóÆüùó§Óc»àÑëõ¶ß6ÍÍÍô¯ÔÝÝ=""Ë¾  (�I$;;;++‹~ÁÏ`0,Ë°ƒi&“)._¾œ””¤ÑhT*•Z­V©T­­­jµº½½½¥¥Eý„F£ô0\ûq6…{¯€ËåÒ!;½™0´¹\.‹G>£G�EEE}ÇË2F&“ÉŸt:½oÓ××gß8(qutt
+Z|>ßËËËßßß××××××ßßÿæÍ›×¯_'„¸ºº.X°à?øAZZšT*ÅZŽ™f„‰R#,,lÖÈ   ö<&‘ÔÖÖº;ÑÖÖÖÖÖÖÑÑÑÓÓcŸC†“““ýs]½½½…B¡¯¯¯P(ôóó£Cg[À ƒNX½^?(�ÐG>~üX©T�FûÕ¾¾¾"‘(88888X,‹Åbº-‰0Ïj°X,J¥²Ñ�.E'JB|||èü(ÛD©ððp???G  0Ù!xL"���uvd2™\.ojj¢Ë'œœœ„B¡H$òòòrwwçóùgÅŠAAA4cà;øñÓÞÞ®R©ÚÛÛ[[[U*Usssss³L&knnV(¶_P@@@HHˆX,ž5k–m`` ƒÁpôÀ`CFSSScc£L&3�„6›J›¶Œá¨'Ë  LuŽÑÑÑQYYY÷¿4!„ËåFDDDFFŠÅâ���ÀÀÀÀÀÀàà`|¡>9©Õjš@äryss³\.¯­­}üø±Z­&„p8œ°°0Û°5<<<:::44idbôõõÕÔÔ(•Ê––û•¶ÅT� 22Ò6?*  @$a¢  ÀS‡à1l3ÂéÏÇ�Ó=¹»»ÇÅÅÙV�b^ø4c4
+…í·OÇ»���‹…Íf‹ÅâØØØÄÄD‰Dm[—ß  À$‡à1.ËÊÊJKKïÝ»WUU%“É!111‰$::Z"‘ÄÄÄˆÅb&“éèbaBi4šêêêªªªêêêÊÊÊššúçáîî.‘HæÌ™#•J¥R©D"ÁÜ¹aéõú¦¦&zÉ6qØ)R¡¡¡!!!aaat;00Ñ  À�<ž¹\N“ýÙÞÞîââ’��0oÞ<š1bccõâ?˜äzzzl!¤¼¼¼´´´££ƒÃá$$$H¥ÒÄÄD©T3£&Ú™L&¥Ri‹
+…¢©©‰n´··Ó}8NpppPPPHH  Àä‡àñ-Y,–ÊÊÊ¢¢¢ââââââÖÖV6›=gÎœÄÄÄ¤¤$©T‡o¬áÛihh(}¢¬¬L«Õr¹ÜÐ7‡,X°à©¿lN¥R8p€Ïç¿õÖ[O·çètº††:3Ê~Š”R©¤ëõÉ“ùQ¶iQ¶‘HD_%	   S‚Ç7`6›¿úê«âââ¢¢¢7nh4¡P¸dÉ:LHHx*ïÉ°gµZkkkKJJnÜ¸qíÚµêêjggç¤¤¤ÔÔÔÔÔÔÅ‹óùüïÒ}}ýÞ½{�=j4×¯_Ÿ““ó”
+ÿ¯®®.û[2™L&“)
+…Ba{e¤P(‹ÅôöÝ WÀí  €éÁct]]]yyy¹¹¹:�.666%%åÙgŸ]¼x1fOÁëíí½sçÎ•+WnÜ¸QRR2000oÞ¼•+W>ÿüó111ß¨«›7oþñ�¼té‹Å¢¯ˆYºtiAAÁ·¨ŠÞ¯úÓ~m7“ÉµÝ²Àòn  €™Áãk©TªüüüsçÎ]¹rÅh4¦¤¤¬Y³fùòåö*n€‘utt\½zõìÙ³/^ìîîNLLÌÌÌÌÌÌœ3gÎG™ÍæS§NýùÏ.//g³Ùöo¥ŒŒŒ|ôèÑ×¨V«[ZZäryKK}“‰R©T(­­­mmmtƒáçç@-‰‚‚‚üýýéËñ  €™Ác0ƒÁðÙgŸåää|ùå—...ßÿþ÷×¬Y³jÕ*G—0<£ÑXXXxöìÙ¼¼¼–––èèè�7þüç?°ßÍ`0|ôÑGûöí“ÉdL&Ól6êG ”••ÙÒ…B¡ ?•J¥R©´M‹âr¹b±8   ((H$ÑŒ ‹ýýý±´	   †…àñ_%%%999§OŸîééÉÈÈxùå——/_Îãñ]ÀXY,–ÿûß§N�:}ú´V«ÍÈÈØ¸qãªU«t:Ý_þò—?ü°««ËjµŽú¯^ ÐPa›eûéãããìì<1§   Ó	‚8sæÌîÝ»ËËËãââ6lØðâ‹/úûû;º.€o¯¿¿????''ç‹/¾pvv¶X,ƒ�Áýß{^^^bb¢ŸŸ–t  ÀÓ5£ƒ‡Åb9yòä»ï¾+“ÉÖ­[·mÛ¶ÄÄDG5S0BÈÌùósÔùæççïÛ·ïÆ�t-‡³³³Ùl:ÉÊæÎ�;,˜À  `¦˜¹¯Í¾víZBBBVVVZZÚÃ‡Oœ81]SƒÁ £Þ)ÔóT,crZµjUAA�F£Ù¹s§@ `±Xqqq„''§¡·5”J¥#Ê  €éo&ƒÁð«_ýjéÒ¥>>>ÿùÏŽ;6kÖ,G0ŽÜÜÜ¶oßÞÐÐ°iÓ¦ÊÊÊÙ³gòÉ'»víZ¾|¹@  „°X,6›Í`0Z[[],   LO3.x´´´¤¥¥�8qâàÁƒ			Ž®`‚xyyíÛ·¯¬¬Ìb±¼òÊ+			yyy���ûöíËÌÌôööniiqt™   0=Í¬àASGGGÇíÛ·7oÞ<Iæçìß¿_*•º¹¹q¹Üôôôüü|ú‘ÑhÜµk×Ü¹s¹\.—Ë�;wîž={ì_¼@g™Íæ÷Þ{/44ÔÅÅ%&&&;;Û~û=ÍJúøã�ÓÓÓ=<<\\\"""Þ~ûm­VK?Z»v-ƒÁˆ‹‹³X,´Åb±ÄÅÅ1ŒçŸ~ÔžihhX³f�›››��Ï–-[t:ÝÐ}F(f``àoûÛ¢E‹„B¡³³³H$Z»ví•+WF.ƒnëõúW_}ÕÏÏ�Åb�zU
+
+F@@€^¯·¯­¿¿?((ˆÁ`\½zuÔjÇx¾ŽýúõŒŒŒ+Vœ?žÉdÎ™3gëÖ­¹¹¹jµúÍ7ßtt�   0MYg£Ñø½ï}/**J©T:º–ÿ2�Ë–-ö÷b0RSS‡~´téR£ÑH§-YYYƒö9sæŒýC;·X,/¼ðÂÐ�$‰V«µZ­­­­^^^„�'NÐ®Ž?N
+…jµz„ž‡joo
+
+²ßíÇ?þ±ýþ£3ôm‡�PÝ~î¹çìÛG½ªÉÉÉ„�½{÷ÚŸÂ|@IJJKµ£žïd`6›7lØÀápîß¿ïèZ   `F˜D#¡ñöÿ÷\.÷áÃ‡Ž.äìÝ»—âææ¶ÿ~¹\n0nÝºµfÍ«ÕºsçNBˆ‡‡Ç±cÇT*•J¥:zô(�‘¿{÷nz8ÎŠÅâüü|­V+“ÉV¯^MIII±ý/†ò>|˜xæÌµZ­ÓénÝº•””DÙ¾};ÝçäÉ“„�°°0£Ñh4ÃÂÂ!Ÿ~úéÈ=õöÛoBBBBŠŠŠzzz
+ƒƒƒí�µ.—Kùýï¯P(ŒFcGGG~~þ²eËF.ƒ¶ž?¾§§‡6ŽzU/^¼H
+…½½½ôƒÁ ‰lç>jµ£žï$a2™.\HÓ   Àx›\#¡ñc2™D"ÑŽ;]È`t‘É¡C‡†~OÉÎÎ¶o<rä!dîÜ¹ô?épöòåË¶êëë	!|>ßÖ2ì�—>2õúõëö�uuu„�ÈÈH[ËŠ+!ýë_8@yá…ì÷ã`:::š’——gk9{ö¬ý±£C{X¶lÙk¯½väÈ‘ÚÚÚ±”AÛí“’ulWU*•BvîÜIÿ“Þîˆ‰‰±X,c¯v„ó�<JKK	!7nÜpt!   0ýÍ”÷xTWWÇÆÆ–——ÓqçäÁårõz½J¥òõõô‘«««Á`P«Õ>>>¶FµZ-
+]]]é²ºžA¯×s8ºƒÕje2™ÄnÒ°o�àñx:�Ž>M•~Dÿ !l6Ûh4ÒÝš››%‰««+íçÁƒtþÕ=Åápúûû;;;éS\	!���´zì¨ÅÜºuëÅ_lll´õ™‘‘qüøq¡P8B´]£Ñxzz~£«zîÜ¹5kÖx{{766²X¬ððp¥R™““³~ýú±T;êùN*QQQë×¯ÿÍo~ãèB   `šc9º€	¢Ñh!öcÍéÄ–:ˆÝbë‘Ñð°/’³_¼îåå%
+ƒV«ussûÎÅ~›b’““kkkïÞ½{óæÍ»wï^ºtéÒ¥KÛ¶m;}úô¨�Û§Ž1Z½zu|||EEÅþýûù|¾R©¶­ëã¥›*|||ÚÛÛ]   L3å©V¡¡¡„�êêjG2ØìÙ³	!çÎ�úQTT!äÂ…ö�Ÿþ¹í¨1¢Qd``À¾Q"‘BîÞ½;ì�0ÛnÛ·o¯­­}ï½÷vìØQQQñÛßþvÔž‡¢‹CŠ‹‹m-×®]û¦Å°X¬äää·Þz+77·¼¼œrùòåoT5–«Ê`0è™¾ÿþûtMÈ›o¾Éf³ÇXí¨ç;y˜L¦G�Ñ‚   Æ×7œš5…-Z´(33ÓÑUöþûïBø|þ�
+…Á`¸}û¶ýârOOÏãÇ�«ÕjµZ���MgïZ\>¨ÏA�t>Ò?þñ½^ok<vì!ÄßßÿðáÃ:�Î`0<|øðÐ¡C‹-¢û|ùå—ô‰ºf³Y¯×3™ÌÂÂÂ‘{jÔÅÖ£³dÉ’“'OÊår“É¤R©víÚEár¹#—1ìÅËUµZ­f³9&&†öàëë«ÓéÆ~é¦Êâr«Õzüøq'''™LæèB   `ú›t#¡ñséÒ%ƒññÇ;º�ÿa4Ÿyæ™a¡Á`X²dÉÐ�ÒÓÓûûûéác	6l6m¾úê«#ÄQ�FHÉÏÏ§ûŸ:uŠÜÙÙ9rÏƒŒåñ²#3lû¦M›F.cØ’ÆrU)úP/BÈ{ï½7¨“‘«��ÓµZ­MMMÞÞÞ›7ovt!   0#L®‘ÐxÛ¶m›³³³m$=I�Æ={öÄÇÇs8�—žžn{ ’Á`Ø¹s'ýÈÕÕ5>>~×®]öããa‡³ƒ»ºº¶lÙb›,dûèÊ•+k×®d³Ù®®®‰äõ×_¿wïžÕjýÙÏ~FY¼x±mg‹ÅB»nÝºQ{¤¾¾~õêÕ<ÏËËë—¿üe__ßÐýG(æöíÛ¿øÅ/ÂÂÂØl¶��OrròG}4000r_WÒ¨W•ºsç!„ÏçÛ‚Ö«ãù:VsssTT”D"±=h   `\Í”§ZQ‹eÓ¦M999;wî|ã�7&É›ËarÊÊÊÊÎÎ~ã�7è»V¦“[·n­]»ÖÝÝ½°°ÐßßßÑå   ÀŒ0S—SL&óÈ‘#»wïÞ±cÇ²eËìÏ
+`¯±±ñüùód¸·ÂOiƒaÇŽiiióçÏ¿sçR   L˜™<¨×_ýöíÛ*•J"‘¼óÎ;½½½Ž®&ƒ¦R©–/_ëèrž«ÕzæÌ‰DrðàÁƒž={ÖÝÝÝÑE  À2ƒ!D*•–””üáøðÃ#""þô§?uvv:ºiƒÛä  3IDAT(˜D8NFFÆáÃ‡]ÈS`6›sssçÏŸ¿nÝº”””ªªªW^yó  `‚Í¬5C©Õê]»v:tÈjµ¾ôÒKYYYtý4À4ÐÒÒrüøñ#GŽÔ××¯\¹ò�wÞ‘J¥Ž.
+   f¨™<(�Fó÷¿ÿýèÑ£õõõñññYYY/½ô’···£ëø6L&Ó…Ž=zñâEWW×Ÿþô§¯½öZ\\œ£ë  €Áã¿¬Vëµk×²³³?ùä“���Õ«WÿèG?ÊÈÈðôôtti £(..ÎËËûç?ÿÙÖÖ–ššºqãÆµk×òx<G—   €à1œîîîÜÜÜS§NBRSSW­ZµjÕªððpG—0˜V«½téR^^ÞÅ‹;;;£££ò“Ÿ¬_¿®   0© xŒD£Ñœ?þÜ¹s_|ñEoo¯D"ùá˜žžžššÊçó]Ì\f³¹¬¬¬¨¨èòåË×¯_7›Í.ÌÌÌÌÌÌœ={¶£«   ‚Ç˜†«W¯ž;wîÊ•+,K*•.]ºtéÒ¥‹/ær¹Ž.¦?‹ÅRQQQXXXPPP\\¬Õj=<<RSSW®\¹zõj???G   0�oL¡P]¿~½¸¸¸¦¦ÆÙÙyþüù.”J¥R©ó[à)êèè(------)))..Öh4¾¾¾)))iii©©©ñññNNNŽ®   `L<¾“ÖÖÖââââââ’’’òòr½^ïéé)}"111$$ÄÑ5ÂT¢ÕjËÊÊJŸhhh`2™QQQR©499955566¯à   €©Áã©¨¬¬´�+**úûû½¼¼$ILLLllllllLLLPP�£+…ÉB«ÕÖÔÔTVVVWWWVVÖÔÔ466B"""i|�7ož@ pt¥    ß‚Çx1™L÷ïß¿wï^UUÕýû÷«ªª
+!ÄÝÝ=::š¦‘ˆˆˆðððððp¬™öärùãÇ�ëêêjjjªªªª««éŸ„@ ˆ���‹‹“H$sæÌILLôððpt½    O‚ÇÄéêêª¬¬|ðàAåmmmô£€€ [±Á§(ƒÁP7Dcc£Éd"„¸¹¹Ñä)‘Hâââbcc1   fG2™Lr¹¼þ=|ø°··—Âf³}||D"Ñ¬Y³fÍš@·ÃÃÃñ�¸Ãõõõ566¶´´ÐßšR©¤ÛJ¥Ò`0BœœœBBBf=+‘HD"‡Ãqtí    €à1é˜L¦ÆÆÆºº:™L&—Ë›ššè†B¡0�„ƒáïï,
+}}}|}}}}}ýýýi‹��vôÝiµÚÖÖVµZ­V«[[[U*U{{;ÝP(Cb±X,‡„„ˆÅbšñ²    �)Ãjµ¶¶¶ÒB‰Z­nkkS©Ttpl6›éžÃ÷	//////oooooo¯!\]]{RÏl6kžèèèÐ¡V«é%íïï·åáááççG/)½õLÃFPP�³³³Ï   `J@ð˜&¬V+�ííí---ê'¯{zzì�âr¹^^^\.—Ïç.—Ëår===é†@ àóù<�6Bœ��y<!ÄÍÍ�Íf3™LwwwB‡Ã×c6›»»»	!:�Žæ�®®.«Õj4ûúú!½½½:�®··W«Õêt:�N×ÕÕÕ×××××gß¨Ñh´Z­}Ï...öIŒÆ3ÿA7‘-    ¾#�™Åh4ýŽØ!»N§ëéééîî¦�cì_ šåe'£²…
+{ÝÝÝ¶;9#c±X#Ä'.—Ëãñ<==Ýù¡9
+    Æ‚ŒIgg'!¤¿¿Ÿ†�žžž��‹ÅBo èõzº¢Z«ÕZ,ûmûŒŠËåº¸¸j¤IÆÉÉ‰¾ËÂÕÕ•.Îöðð`0l6ÛÍÍ�ÂãñpS   `2Cð     €qÇtt     0ý!x     À¸Cð     €q‡à     ãîÿ±¶ÔôE×ïq    IEND®B`‚
\ No newline at end of file
diff -Naur ns-3.18.1/src/lte/doc/source/figures/lte-epc-x2-handover-seq-diagram.dia ns-3.19/src/lte/doc/source/figures/lte-epc-x2-handover-seq-diagram.dia
--- ns-3.18.1/src/lte/doc/source/figures/lte-epc-x2-handover-seq-diagram.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/lte-epc-x2-handover-seq-diagram.dia	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,12 @@
+‹     í]ßs£8~Ï_Ay_öê<ý@ˆÍf¶<YïNîf3s‰³»÷äÂFq¸Áà’L^îo?	'¶!NŒ„MNN�klƒ„ ûëî¯ÕÒ�?}›†Æ-KÒ ŽŽ;À´:‹Æ±D“ãÎåà—w´óÓûƒýÀû�ÿ›$ÞÔàgD©øtÜ¹Î²Ù‡‡wwwfxŸzYœ˜apc¦ìð¿^z‡ü ÃÎûÃxÚ€ïežønþ­—eI0ºÉ˜ySvÜyã¯“$¾‰üNqÔü¸qÆ‰që…Ç�ï®òWçpÞÌáR;Ï´=ó&l”0ïkuÓ¹î6MÏX²Úìt§?$»Ÿ­RÑŽxrÌü¨”MÞ×Ãß—4ÿâ±­²­ì$›zÉ$ˆÖûá÷&,n4)„�ßÛ¥®å`<Ü“×w7j¶»°Ùî’f»Òá,N²Ä²õ.Gq2/*zÍ’¶}?éØ¹ˆ=7¬£¸
+²,ÞpýW^˜¾d Å×m{­æN’À^q—Ž¨hå.ð³ëá7E·«hý^Që·AŒBVvõA”Ikþ^Nó«O'GïÇÓkJCÑZ¥yð)³™ýzó0¹	|–n³åc*Zºžv¸é®¯÷ÒS|µb¬ó.Bïž%óæ?<šicþ€çˆcxã,¸}øôäžÄ£ÿ°q6ìEæE¾—øÆ;ãSñ³NwAÿ¸óÙZ¾[«ãã­q \»]³x!S˜tñêð×Á£ªíÑhµé„_½MB6oÞ6]»‹øÛ&¦ew±Ëß·ëpGÑ�E~~õ/Sùïîv×ÝLÇ³Õ®Ëô5�rÂ†Ë:U¢U£+ñ÷²Ä­â‚‹JºÖâÃ/Æ5.!�\–²˜Ë¤ãñçãYW‹•V‹¯‘}�÷’q‰ƒº"­. 
+e8B†ó÷#h™ AÜÍ…Y±¯Œ«ô L¶»/Ë•¸µQÞ$·lè)¿“c¶~‡^_•É~uÓüQYÅ`×€€:�¥Ù}¸6Æñ –êû^z²hòü8lké¶ìŒÝÐK’øNú0-_0˜º]l|ì¶B�Dî2HZk
+Zr2x8™Vž,a+¼Xb�¥ÔKpN°šr–‡Tþ»vÖäŸ(ö*$Õv R	†`!Â6%ÂËc*ÿ]‹ðšÓÝˆ0®+Â+a„"ŒpS"¼<¦òßµ¯‰0°Ëð€}ËžÈ0˜Ë°-Á‘ 
+e˜š�8v×6!$�{Àt´»Ätäl)Ë™¸èµ•cªØâ<±tÜJêâäóÙYÿdÐÿùàìóùo½OŸþ]‘Êx†ÿ«"“ã(+ëZ|o\yÓ ¼?îLã(NgØŒ<ÞÉ%®8ÿ$¾I–<UÖ×_Ä5&×¥—ñÔ§ËáŽ…ëuº,‘Ri›h×ëi*“g–U¯#/&Ñ”•?ÑÒhîyÊ¸Œõ|�–Üæ—TXnz_a¸oaäÊÛ®‡ôš‡”%ùÔÍÉ¢rbûu8û!þVâ*�º0K»P!Ê|X®¾îÖ~Ù”?Þ$ZÏùÊMÞüº ×hzÎä�[»É
+ÓïH0ýH)‡` ïB“¶ß2±CîÐ¢vØþË~³¶>õ¢taæéÂÎdá-Ë‚±÷îCúoÕÜ#î!js¿ss/ƒ‚¢²cŸr›L%¤©Teà.¬2ÄMXåíÇ£Í²<³ìJ FUšeh™ÄV¹ˆÈ!7Ç9ËÔ’€ü‚G½cvÀÎbŸ}Ðö¹ûÌEêp¼µö™îÄ>ƒÚS¡Tj XhDš0ÐÛ�Ghy 	y•Á%�ìvYè�—LX¦-t£š‹¤¶ÐíµÐ«éCÚPú@	Ñ
+Q­,%y¸¢ˆ:�ø’ˆE'uq�¼Næ€¥–¯¤”C«û µØ€C/°r¬Ý¨ýØ;ûùóïýóƒ/çý/½óÞàôó™ÛfÀÖÕ`«ÁvÀ¶öÔNH»@%÷ÄýX——wrÄÃ}!Àÿk:¸.íŸÐx€Úáyÿ_—ý‹ÁÃüõ(ÿmb¬HÓv5Äª‚XK%Ä.¯ý±Sˆ­ÃS`Kq½T Û8[€Õ&0%ÜEGbº ®´XLw¢û�ê=ß7.ûÆ	ZÞ¢ô[.¤½�Nó!º$Œ%20–¨MŒaÒ,òb¶è°mìÄ?>Ÿž�žýª™‰†@¶à�5Èjfb@Ö‘ÁLPµÌà K/A¹úÐö²ÃÞÉ?µ#Û3A53¡™‰Ý2`GÌ•�×ƒ–Ú)ÂkÎÓzHL à^3l]NïS¿÷»öšËçW{ÍÚkÞ¯¹vQwi¡Òb/¡¦6â�A`;ÝiÛà9ŸŸŸÚ÷Á²ž3n*¯‚ÉMâ‰ÏßßÙµñ[<
+Â »?É’ð4ºŠÿ¦kåU±Bfµc­ë�:ÖÜKÜ‰c-	ë@[ýÚFžõÃÚFÐn‰oý85ùÁËÖÞu3‹p‘ÑÞµö®÷Ä»†@ÆJ2@=Ò"kihÒê"�†—•±4Òj¤Ý¤•QnGÕÖ€@›:]g¾fwTP—¶eÍ®�üÄü¾üódÂÍR4@S½v—žÇ¶? ‹$L±PJ@dRDpW,î M@ÉIƒ¶L³¸8^zƒË‹áà¼wvñKÓ¼Áÿé$."šÖ\ðN'YÀqÁXÆ¢z*Ë? 6]›ÞÉtM‹%‚pK ýùüÿi:YÆ|�òøÒ\j4Êk”ßiÆ�ìåeù!¢¶È/_"Ù�H±Dj]Ê—Þà£qñÇéàä£¦¢›)DAºESÑûÃ’È¨öÃXmµ_žõÃh¶v‘õÃXgý4Ô>µ\d4Ôj¨Ý¨•Qó‡‰ZBÚ«a"i(V#Â¤=„ôeÈ±vÐÿs0<ïê÷.úšªh€�æ"¢©
+MUì”�¶Så[ÀÚE+ÝÚ £ÅÖ˜6±µÁöãÑ[Hô4j×Ia¢tk»ê<î	ˆ“Š=[³'àÅ¯~ùõ½­A3^†G=¹¨µÛ@º›mPíÚ!lu‘Ê‰–bS‚ïäˆc"AÄé"·%õ¢_¼ìÚHï‚l|m$ì¯–f7.S–³Ð‹˜q3ó=ÞÞü7‹)GI!¬:Ó±Ønc1¼›´1Àµ`Ï=Ê;`O»¶ì�Þøkà§3þp™Fü�øñw‹øH1â
+"VB¿¡ÚeTN»
+ŸöÓœ~ssúÍÝš÷pÈ"?¿ú—�©3Ü­Íµb<[íú±ÌR.·UN¹"$c9•!]¾Ý;tòídóýÞ¡«˜t­1¢—°®P%íº¥¿5ŠŸ%›®Ü2ÁÜìZ ð–X^$c6<ä£Úùðˆõ°(w}	“â*Å¢ÜÿmÃä�³8z7{!D¹éy)ó�DT—No<fijÌ’xÌü›Dû»�l@OMGÏéi'ŒÐŽx`[Rb¥÷-Â;)*î� m9ÂylÇ¶1çlß2½sL³`ˆ‹’{†ºâ¾I‡´*'2�Âªc3„LB\ ¢3  ¥vY®â°|ehå¥!xqyUøùC/Iâ»jõ¨Ûò0dÑäù Î®ÛÅÆÑnF7ÁTª”RÞ(´Âœ»€MèÆÊÐÊ¨uã­êFý½€Ú‰ñ€æL®-H=® ‚É%ê™Ü•Q•¨…»õ°•¨EÈŸïf¿gt%þjô�»ùÕš‡›ZW‚Ðª\h�ó(´€6"´OGU*´Û[mM¡Å–/Dí†è Z°ì¢ƒ¦Ü 7¸è@»!oÕÁ@ÆÆ§T­rä>:Çôõ(P½åX[¹öP­oU9d,Y«v5ÅÜr@¼l9 ÝT ko°Û^+Çþ+’Po¥vê)*,¶
+õÈÃW1w°åX[ùJ@+Ç[U,c9/ªV9DZÀY¨F‘hÊ­BÏºU¢ôM»UoV9d¬u§vM�yÌ�í§1W’f”ãyT¤À‰VŽ·ªõ×&sÔä?R¬Ü~4D±®Œªä [S¬;£X	B«tD!´¹Ó3Z„Úóìýšÿð&…¶—ŒËd¶vÅ@k?ZÚ˜Ì’M@K¶–Y/«•®ñMrË†~�òû8fÕÖü¬!½M`¼DU¶ÔsßK¯_àS-OîÚA”ÑÃvå†Õë’WŸNÞÑ6Æ¸ötD»�¨…X’o@”¯²‹-SpÖmYÐ<¦,9ø~ê}3hYÆ4ÕÓ«_a7O¯èvõô=©ˆ´ëïOÕRÍ Yuå s�åþlû@ÖÖ ÛÐæÅTˆ‹Y²û²2¶‰‡ŽB�uL‚Äj¢Ü{Í‹)ÅìAB±(jÇŽ<j™0ã„…¡qú³ÆØ6ˆ‡Ž®¤Ô»7eTR"¥ëÂ.‚€µ¨È(´£V}¯çgƒS�­`+B[5¶ÊÇÖâsèÝ³äýAñ�ÿ›$ÞôýÁÿ °ýð  
\ No newline at end of file
diff -Naur ns-3.18.1/src/lte/doc/source/figures/lte-epc-x2-handover-seq-diagram.eps ns-3.19/src/lte/doc/source/figures/lte-epc-x2-handover-seq-diagram.eps
--- ns-3.18.1/src/lte/doc/source/figures/lte-epc-x2-handover-seq-diagram.eps	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/lte-epc-x2-handover-seq-diagram.eps	1969-12-31 16:00:00.000000000 -0800
@@ -1,2995 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Title: 
-%%Creator: PScript5.dll Version 5.2.2
-%%CreationDate: 5/22/2012 10:57:55
-%%For: mrequena
-%%BoundingBox: 0 0 420 364
-%%Pages: 1
-%%Orientation: Portrait
-%%PageOrder: Ascend
-%%DocumentNeededResources: (atend)
-%%DocumentSuppliedResources: (atend)
-%%DocumentData: Clean7Bit
-%%TargetDevice: () (52.3) 320
-%%LanguageLevel: 1
-%%EndComments
-
-%%BeginDefaults
-%%PageBoundingBox: 0 0 420 364
-%%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 Configuración de dispositivo, compruebe que "Memoria PostScript disponible" tiene el valor correcto.)
-115 455(Reduzca el número 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 364.25198 ] def 
-%%EndSetup
-
-%%Page: 1 1
-%%PageBoundingBox: 0 0 420 364
-%%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 1212 3023 M 1212 2991 I 1213 2990 I 1214 2989 I 1216 2990 I 1216 2991 I 1216 3023 I 1216 3024 I 1214 3025 I 1213 3024 I 1212 3023 I 1212 3023 I C 
-1212 2969 M 1212 2937 I 1213 2936 I 1214 2935 I 1216 2936 I 1216 2937 I 1216 2969 I 1216 2970 I 1214 2971 I 1213 2970 I 1212 2969 I 1212 2969 I C 
-1212 2915 M 1212 2884 I 1213 2883 I 1214 2882 I 1216 2883 I 1216 2884 I 1216 2915 I 1216 2917 I 1214 2918 I 1213 2917 I 1212 2915 I 1212 2915 I C 
-1212 2861 M 1212 2830 I 1213 2829 I 1214 2828 I 1216 2829 I 1216 2830 I 1216 2861 I 1216 2863 I 1214 2864 I 1213 2863 I 1212 2861 I 1212 2861 I C 
-1212 2807 M 1212 2776 I 1213 2775 I 1214 2774 I 1216 2775 I 1216 2776 I 1216 2807 I 1216 2810 I 1214 2810 I 1213 2810 I 1212 2807 I 1212 2807 I C 
-1212 2754 M 1212 2723 I 1213 2721 I 1214 2721 I 1216 2721 I 1216 2723 I 1216 2754 I 1216 2756 I 1214 2756 I 1213 2756 I 1212 2754 I 1212 2754 I C 
-1212 2700 M 1212 2669 I 1213 2667 I 1214 2667 I 1216 2667 I 1216 2669 I 1216 2700 I 1216 2702 I 1214 2702 I 1213 2702 I 1212 2700 I 1212 2700 I C 
-1212 2647 M 1212 2615 I 1213 2614 I 1214 2613 I 1216 2614 I 1216 2615 I 1216 2647 I 1216 2648 I 1214 2649 I 1213 2648 I 1212 2647 I 1212 2647 I C 
-1212 2593 M 1212 2561 I 1213 2560 I 1214 2559 I 1216 2560 I 1216 2561 I 1216 2593 I 1216 2594 I 1214 2595 I 1213 2594 I 1212 2593 I 1212 2593 I C 
-1212 2539 M 1212 2508 I 1213 2507 I 1214 2506 I 1216 2507 I 1216 2508 I 1216 2539 I 1216 2541 I 1214 2542 I 1213 2541 I 1212 2539 I 1212 2539 I C 
-1212 2486 M 1212 2454 I 1213 2453 I 1214 2452 I 1216 2453 I 1216 2454 I 1216 2486 I 1216 2487 I 1214 2488 I 1213 2487 I 1212 2486 I 1212 2486 I C 
-1212 2432 M 1212 2400 I 1213 2399 I 1214 2398 I 1216 2399 I 1216 2400 I 1216 2432 I 1216 2434 I 1214 2434 I 1213 2434 I 1212 2432 I 1212 2432 I C 
-1212 2378 M 1212 2347 I 1213 2345 I 1214 2345 I 1216 2345 I 1216 2347 I 1216 2378 I 1216 2380 I 1214 2380 I 1213 2380 I 1212 2378 I 1212 2378 I C 
-1212 2324 M 1212 2293 I 1213 2291 I 1214 2291 I 1216 2291 I 1216 2293 I 1216 2324 I 1216 2326 I 1214 2326 I 1213 2326 I 1212 2324 I 1212 2324 I C 
-1212 2271 M 1212 2240 I 1213 2238 I 1214 2237 I 1216 2238 I 1216 2240 I 1216 2271 I 1216 2272 I 1214 2273 I 1213 2272 I 1212 2271 I 1212 2271 I C 
-1212 2217 M 1212 2186 I 1213 2184 I 1214 2183 I 1216 2184 I 1216 2186 I 1216 2217 I 1216 2218 I 1214 2219 I 1213 2218 I 1212 2217 I 1212 2217 I C 
-1212 2163 M 1212 2132 I 1213 2130 I 1214 2129 I 1216 2130 I 1216 2132 I 1216 2163 I 1216 2165 I 1214 2166 I 1213 2165 I 1212 2163 I 1212 2163 I C 
-1212 2110 M 1212 2078 I 1213 2077 I 1214 2076 I 1216 2077 I 1216 2078 I 1216 2110 I 1216 2111 I 1214 2112 I 1213 2111 I 1212 2110 I 1212 2110 I C 
-1212 2056 M 1212 2024 I 1213 2023 I 1214 2022 I 1216 2023 I 1216 2024 I 1216 2056 I 1216 2058 I 1214 2058 I 1213 2058 I 1212 2056 I 1212 2056 I C 
-1212 2002 M 1212 1971 I 1213 1970 I 1214 1969 I 1216 1970 I 1216 1971 I 1216 2002 I 1216 2004 I 1214 2005 I 1213 2004 I 1212 2002 I 1212 2002 I C 
-1212 1948 M 1212 1917 I 1213 1916 I 1214 1915 I 1216 1916 I 1216 1917 I 1216 1948 I 1216 1950 I 1214 1951 I 1213 1950 I 1212 1948 I 1212 1948 I C 
-1212 1895 M 1212 1864 I 1213 1862 I 1214 1862 I 1216 1862 I 1216 1864 I 1216 1895 I 1216 1897 I 1214 1897 I 1213 1897 I 1212 1895 I 1212 1895 I C 
-1212 1841 M 1212 1810 I 1213 1808 I 1214 1808 I 1216 1808 I 1216 1810 I 1216 1841 I 1216 1843 I 1214 1843 I 1213 1843 I 1212 1841 I 1212 1841 I C 
-1212 1787 M 1212 1757 I 1213 1754 I 1214 1754 I 1216 1754 I 1216 1757 I 1216 1787 I 1216 1789 I 1214 1790 I 1213 1789 I 1212 1787 I 1212 1787 I C 
-1212 1734 M 1212 1703 I 1213 1701 I 1214 1700 I 1216 1701 I 1216 1703 I 1216 1734 I 1216 1735 I 1214 1736 I 1213 1735 I 1212 1734 I 1212 1734 I C 
-1212 1680 M 1212 1649 I 1213 1647 I 1214 1646 I 1216 1647 I 1216 1649 I 1216 1680 I 1216 1682 I 1214 1682 I 1213 1682 I 1212 1680 I 1212 1680 I C 
-1212 1627 M 1212 1595 I 1213 1594 I 1214 1593 I 1216 1594 I 1216 1595 I 1216 1627 I 1216 1628 I 1214 1629 I 1213 1628 I 1212 1627 I 1212 1627 I C 
-1212 1573 M 1212 1541 I 1213 1540 I 1214 1539 I 1216 1540 I 1216 1541 I 1216 1573 I 1216 1574 I 1214 1575 I 1213 1574 I 1212 1573 I 1212 1573 I C 
-1212 1519 M 1212 1488 I 1213 1487 I 1214 1486 I 1216 1487 I 1216 1488 I 1216 1519 I 1216 1521 I 1214 1522 I 1213 1521 I 1212 1519 I 1212 1519 I C 
-1212 1465 M 1212 1434 I 1213 1433 I 1214 1432 I 1216 1433 I 1216 1434 I 1216 1465 I 1216 1467 I 1214 1468 I 1213 1467 I 1212 1465 I 1212 1465 I C 
-1212 1411 M 1212 1381 I 1213 1379 I 1214 1378 I 1216 1379 I 1216 1381 I 1216 1411 I 1216 1414 I 1214 1414 I 1213 1414 I 1212 1411 I 1212 1411 I C 
-1212 1358 M 1212 1327 I 1213 1325 I 1214 1325 I 1216 1325 I 1216 1327 I 1216 1358 I 1216 1360 I 1214 1360 I 1213 1360 I 1212 1358 I 1212 1358 I C 
-1212 1304 M 1212 1273 I 1213 1271 I 1214 1271 I 1216 1271 I 1216 1273 I 1216 1304 I 1216 1306 I 1214 1306 I 1213 1306 I 1212 1304 I 1212 1304 I C 
-1212 1251 M 1212 1219 I 1213 1218 I 1214 1217 I 1216 1218 I 1216 1219 I 1216 1251 I 1216 1252 I 1214 1253 I 1213 1252 I 1212 1251 I 1212 1251 I C 
-1212 1197 M 1212 1165 I 1213 1164 I 1214 1163 I 1216 1164 I 1216 1165 I 1216 1197 I 1216 1198 I 1214 1199 I 1213 1198 I 1212 1197 I 1212 1197 I C 
-1212 1144 M 1212 1112 I 1213 1111 I 1214 1110 I 1216 1111 I 1216 1112 I 1216 1144 I 1216 1145 I 1214 1146 I 1213 1145 I 1212 1144 I 1212 1144 I C 
-1212 1090 M 1212 1058 I 1213 1057 I 1214 1056 I 1216 1057 I 1216 1058 I 1216 1090 I 1216 1091 I 1214 1092 I 1213 1091 I 1212 1090 I 1212 1090 I C 
-1212 1036 M 1212 1005 I 1213 1003 I 1214 1002 I 1216 1003 I 1216 1005 I 1216 1036 I 1216 1038 I 1214 1038 I 1213 1038 I 1212 1036 I 1212 1036 I C 
-1212 982 M 1212 951 I 1213 949 I 1214 949 I 1216 949 I 1216 951 I 1216 982 I 1216 984 I 1214 984 I 1213 984 I 1212 982 I 1212 982 I C 
-1212 928 M 1212 897 I 1213 895 I 1214 895 I 1216 895 I 1216 897 I 1216 928 I 1216 930 I 1214 930 I 1213 930 I 1212 928 I 1212 928 I C 
-1212 875 M 1212 844 I 1213 842 I 1214 841 I 1216 842 I 1216 844 I 1216 875 I 1216 876 I 1214 877 I 1213 876 I 1212 875 I 1212 875 I C 
-1212 821 M 1212 790 I 1213 788 I 1214 787 I 1216 788 I 1216 790 I 1216 821 I 1216 822 I 1214 823 I 1213 822 I 1212 821 I 1212 821 I C 
-1212 768 M 1212 736 I 1213 735 I 1214 734 I 1216 735 I 1216 736 I 1216 768 I 1216 769 I 1214 770 I 1213 769 I 1212 768 I 1212 768 I C 
-1212 714 M 1212 682 I 1213 681 I 1214 680 I 1216 681 I 1216 682 I 1216 714 I 1216 715 I 1214 716 I 1213 715 I 1212 714 I 1212 714 I C 
-1212 660 M 1212 629 I 1213 627 I 1214 626 I 1216 627 I 1216 629 I 1216 660 I 1216 662 I 1214 663 I 1213 662 I 1212 660 I 1212 660 I C 
-1212 606 M 1212 575 I 1213 574 I 1214 573 I 1216 574 I 1216 575 I 1216 606 I 1216 608 I 1214 609 I 1213 608 I 1212 606 I 1212 606 I C 
-1212 552 M 1212 521 I 1213 520 I 1214 519 I 1216 520 I 1216 521 I 1216 552 I 1216 554 I 1214 555 I 1213 554 I 1212 552 I 1212 552 I C 
-1212 499 M 1212 468 I 1213 466 I 1214 466 I 1216 466 I 1216 468 I 1216 499 I 1216 501 I 1214 501 I 1213 501 I 1212 499 I 1212 499 I C 
-1212 445 M 1212 414 I 1213 412 I 1214 412 I 1216 412 I 1216 414 I 1216 445 I 1216 447 I 1214 447 I 1213 447 I 1212 445 I 1212 445 I C 
-1212 392 M 1212 361 I 1213 359 I 1214 358 I 1216 359 I 1216 361 I 1216 392 I 1216 393 I 1214 394 I 1213 393 I 1212 392 I 1212 392 I C 
-1212 338 M 1212 307 I 1213 305 I 1214 304 I 1216 305 I 1216 307 I 1216 338 I 1216 339 I 1214 340 I 1213 339 I 1212 338 I 1212 338 I C 
-1212 284 M 1212 253 I 1213 251 I 1214 250 I 1216 251 I 1216 253 I 1216 284 I 1216 286 I 1214 287 I 1213 286 I 1212 284 I 1212 284 I C 
-:  L ; K 
-N 984 13 M 984 248 I 1445 248 I 1445 13 I 984 13 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 1 Lj 1 Lc 6 Lw solid N 984 248 M 1445 248 I 1445 13 I 984 13 I 984 248 I C 
-: 0.668 0.727 +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
-/TT353ADb00
-[74 0 0 0 0 0 ] 
- 256 array 0 1 255 {1 index exch /.notdef put} for 
-[0 0 0 0 ] 
-[1 74 div 0 0 -1 74 div 0 0 ]
-/__TT353ADb00
-GreNewFont
-T32RsrcBegin
-
-1
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-
-2
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-
-3
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-
-4
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-
-5
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-
-6
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-
-7
-/g3 [17 0 0 0 1 1 ] 
-/g3 [1 1 true [1 0 0 1 0 0 ]  0 0]
-[<00
->
- ]
-/TT353ADb00 AddT3T32Char
-
-8
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-
-9
-/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
->
- ]
-/TT353ADb00 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 /TT353ADb00 mF 
-/F0S4A F0 [74.477 0 0 -74.477 0 0 ] mFS
-F0S4A Ji 
-1055 153 M <01>S 
-1082 153 M <02>S  1118 153 M <03>S  1155 153 M <04>S  1179 153 M <05>S  1208 153 M <06>S  1242 153 M <07>S  1257 153 M <06>S  1292 153 M <08>S  1336 153 M <09>S  
-7 Lw N 1055 161 M 1373 161 I : 0.668 0.727 +S K 
-; 1 Lw solid N 2184 3023 M 2184 2991 I 2185 2990 I 2186 2989 I 2187 2990 I 2188 2991 I 2188 3023 I 2187 3024 I 2186 3025 I 2185 3024 I 2184 3023 I 2184 3023 I C 
-2184 2969 M 2184 2937 I 2185 2936 I 2186 2935 I 2187 2936 I 2188 2937 I 2188 2969 I 2187 2970 I 2186 2971 I 2185 2970 I 2184 2969 I 2184 2969 I C 
-2184 2915 M 2184 2884 I 2185 2883 I 2186 2882 I 2187 2883 I 2188 2884 I 2188 2915 I 2187 2917 I 2186 2918 I 2185 2917 I 2184 2915 I 2184 2915 I C 
-2184 2861 M 2184 2830 I 2185 2829 I 2186 2828 I 2187 2829 I 2188 2830 I 2188 2861 I 2187 2863 I 2186 2864 I 2185 2863 I 2184 2861 I 2184 2861 I C 
-2184 2807 M 2184 2776 I 2185 2775 I 2186 2774 I 2187 2775 I 2188 2776 I 2188 2807 I 2187 2810 I 2186 2810 I 2185 2810 I 2184 2807 I 2184 2807 I C 
-2184 2754 M 2184 2723 I 2185 2721 I 2186 2721 I 2187 2721 I 2188 2723 I 2188 2754 I 2187 2756 I 2186 2756 I 2185 2756 I 2184 2754 I 2184 2754 I C 
-2184 2700 M 2184 2669 I 2185 2667 I 2186 2667 I 2187 2667 I 2188 2669 I 2188 2700 I 2187 2702 I 2186 2702 I 2185 2702 I 2184 2700 I 2184 2700 I C 
-2184 2647 M 2184 2615 I 2185 2614 I 2186 2613 I 2187 2614 I 2188 2615 I 2188 2647 I 2187 2648 I 2186 2649 I 2185 2648 I 2184 2647 I 2184 2647 I C 
-2184 2593 M 2184 2561 I 2185 2560 I 2186 2559 I 2187 2560 I 2188 2561 I 2188 2593 I 2187 2594 I 2186 2595 I 2185 2594 I 2184 2593 I 2184 2593 I C 
-2184 2539 M 2184 2508 I 2185 2507 I 2186 2506 I 2187 2507 I 2188 2508 I 2188 2539 I 2187 2541 I 2186 2542 I 2185 2541 I 2184 2539 I 2184 2539 I C 
-2184 2486 M 2184 2454 I 2185 2453 I 2186 2452 I 2187 2453 I 2188 2454 I 2188 2486 I 2187 2487 I 2186 2488 I 2185 2487 I 2184 2486 I 2184 2486 I C 
-2184 2432 M 2184 2400 I 2185 2399 I 2186 2398 I 2187 2399 I 2188 2400 I 2188 2432 I 2187 2434 I 2186 2434 I 2185 2434 I 2184 2432 I 2184 2432 I C 
-2184 2378 M 2184 2347 I 2185 2345 I 2186 2345 I 2187 2345 I 2188 2347 I 2188 2378 I 2187 2380 I 2186 2380 I 2185 2380 I 2184 2378 I 2184 2378 I C 
-2184 2324 M 2184 2293 I 2185 2291 I 2186 2291 I 2187 2291 I 2188 2293 I 2188 2324 I 2187 2326 I 2186 2326 I 2185 2326 I 2184 2324 I 2184 2324 I C 
-2184 2271 M 2184 2240 I 2185 2238 I 2186 2237 I 2187 2238 I 2188 2240 I 2188 2271 I 2187 2272 I 2186 2273 I 2185 2272 I 2184 2271 I 2184 2271 I C 
-2184 2217 M 2184 2186 I 2185 2184 I 2186 2183 I 2187 2184 I 2188 2186 I 2188 2217 I 2187 2218 I 2186 2219 I 2185 2218 I 2184 2217 I 2184 2217 I C 
-2184 2163 M 2184 2132 I 2185 2130 I 2186 2129 I 2187 2130 I 2188 2132 I 2188 2163 I 2187 2165 I 2186 2166 I 2185 2165 I 2184 2163 I 2184 2163 I C 
-2184 2110 M 2184 2078 I 2185 2077 I 2186 2076 I 2187 2077 I 2188 2078 I 2188 2110 I 2187 2111 I 2186 2112 I 2185 2111 I 2184 2110 I 2184 2110 I C 
-2184 2056 M 2184 2024 I 2185 2023 I 2186 2022 I 2187 2023 I 2188 2024 I 2188 2056 I 2187 2058 I 2186 2058 I 2185 2058 I 2184 2056 I 2184 2056 I C 
-2184 2002 M 2184 1971 I 2185 1970 I 2186 1969 I 2187 1970 I 2188 1971 I 2188 2002 I 2187 2004 I 2186 2005 I 2185 2004 I 2184 2002 I 2184 2002 I C 
-2184 1948 M 2184 1917 I 2185 1916 I 2186 1915 I 2187 1916 I 2188 1917 I 2188 1948 I 2187 1950 I 2186 1951 I 2185 1950 I 2184 1948 I 2184 1948 I C 
-2184 1895 M 2184 1864 I 2185 1862 I 2186 1862 I 2187 1862 I 2188 1864 I 2188 1895 I 2187 1897 I 2186 1897 I 2185 1897 I 2184 1895 I 2184 1895 I C 
-2184 1841 M 2184 1810 I 2185 1808 I 2186 1808 I 2187 1808 I 2188 1810 I 2188 1841 I 2187 1843 I 2186 1843 I 2185 1843 I 2184 1841 I 2184 1841 I C 
-2184 1787 M 2184 1757 I 2185 1754 I 2186 1754 I 2187 1754 I 2188 1757 I 2188 1787 I 2187 1789 I 2186 1790 I 2185 1789 I 2184 1787 I 2184 1787 I C 
-2184 1734 M 2184 1703 I 2185 1701 I 2186 1700 I 2187 1701 I 2188 1703 I 2188 1734 I 2187 1735 I 2186 1736 I 2185 1735 I 2184 1734 I 2184 1734 I C 
-2184 1680 M 2184 1649 I 2185 1647 I 2186 1646 I 2187 1647 I 2188 1649 I 2188 1680 I 2187 1682 I 2186 1682 I 2185 1682 I 2184 1680 I 2184 1680 I C 
-2184 1627 M 2184 1595 I 2185 1594 I 2186 1593 I 2187 1594 I 2188 1595 I 2188 1627 I 2187 1628 I 2186 1629 I 2185 1628 I 2184 1627 I 2184 1627 I C 
-2184 1573 M 2184 1541 I 2185 1540 I 2186 1539 I 2187 1540 I 2188 1541 I 2188 1573 I 2187 1574 I 2186 1575 I 2185 1574 I 2184 1573 I 2184 1573 I C 
-2184 1519 M 2184 1488 I 2185 1487 I 2186 1486 I 2187 1487 I 2188 1488 I 2188 1519 I 2187 1521 I 2186 1522 I 2185 1521 I 2184 1519 I 2184 1519 I C 
-2184 1465 M 2184 1434 I 2185 1433 I 2186 1432 I 2187 1433 I 2188 1434 I 2188 1465 I 2187 1467 I 2186 1468 I 2185 1467 I 2184 1465 I 2184 1465 I C 
-2184 1411 M 2184 1381 I 2185 1379 I 2186 1378 I 2187 1379 I 2188 1381 I 2188 1411 I 2187 1414 I 2186 1414 I 2185 1414 I 2184 1411 I 2184 1411 I C 
-2184 1358 M 2184 1327 I 2185 1325 I 2186 1325 I 2187 1325 I 2188 1327 I 2188 1358 I 2187 1360 I 2186 1360 I 2185 1360 I 2184 1358 I 2184 1358 I C 
-2184 1304 M 2184 1273 I 2185 1271 I 2186 1271 I 2187 1271 I 2188 1273 I 2188 1304 I 2187 1306 I 2186 1306 I 2185 1306 I 2184 1304 I 2184 1304 I C 
-2184 1251 M 2184 1219 I 2185 1218 I 2186 1217 I 2187 1218 I 2188 1219 I 2188 1251 I 2187 1252 I 2186 1253 I 2185 1252 I 2184 1251 I 2184 1251 I C 
-2184 1197 M 2184 1165 I 2185 1164 I 2186 1163 I 2187 1164 I 2188 1165 I 2188 1197 I 2187 1198 I 2186 1199 I 2185 1198 I 2184 1197 I 2184 1197 I C 
-2184 1144 M 2184 1112 I 2185 1111 I 2186 1110 I 2187 1111 I 2188 1112 I 2188 1144 I 2187 1145 I 2186 1146 I 2185 1145 I 2184 1144 I 2184 1144 I C 
-2184 1090 M 2184 1058 I 2185 1057 I 2186 1056 I 2187 1057 I 2188 1058 I 2188 1090 I 2187 1091 I 2186 1092 I 2185 1091 I 2184 1090 I 2184 1090 I C 
-2184 1036 M 2184 1005 I 2185 1003 I 2186 1002 I 2187 1003 I 2188 1005 I 2188 1036 I 2187 1038 I 2186 1038 I 2185 1038 I 2184 1036 I 2184 1036 I C 
-2184 982 M 2184 951 I 2185 949 I 2186 949 I 2187 949 I 2188 951 I 2188 982 I 2187 984 I 2186 984 I 2185 984 I 2184 982 I 2184 982 I C 
-2184 928 M 2184 897 I 2185 895 I 2186 895 I 2187 895 I 2188 897 I 2188 928 I 2187 930 I 2186 930 I 2185 930 I 2184 928 I 2184 928 I C 
-2184 875 M 2184 844 I 2185 842 I 2186 841 I 2187 842 I 2188 844 I 2188 875 I 2187 876 I 2186 877 I 2185 876 I 2184 875 I 2184 875 I C 
-2184 821 M 2184 790 I 2185 788 I 2186 787 I 2187 788 I 2188 790 I 2188 821 I 2187 822 I 2186 823 I 2185 822 I 2184 821 I 2184 821 I C 
-2184 768 M 2184 736 I 2185 735 I 2186 734 I 2187 735 I 2188 736 I 2188 768 I 2187 769 I 2186 770 I 2185 769 I 2184 768 I 2184 768 I C 
-2184 714 M 2184 682 I 2185 681 I 2186 680 I 2187 681 I 2188 682 I 2188 714 I 2187 715 I 2186 716 I 2185 715 I 2184 714 I 2184 714 I C 
-2184 660 M 2184 629 I 2185 627 I 2186 626 I 2187 627 I 2188 629 I 2188 660 I 2187 662 I 2186 663 I 2185 662 I 2184 660 I 2184 660 I C 
-2184 606 M 2184 575 I 2185 574 I 2186 573 I 2187 574 I 2188 575 I 2188 606 I 2187 608 I 2186 609 I 2185 608 I 2184 606 I 2184 606 I C 
-2184 552 M 2184 521 I 2185 520 I 2186 519 I 2187 520 I 2188 521 I 2188 552 I 2187 554 I 2186 555 I 2185 554 I 2184 552 I 2184 552 I C 
-2184 499 M 2184 468 I 2185 466 I 2186 466 I 2187 466 I 2188 468 I 2188 499 I 2187 501 I 2186 501 I 2185 501 I 2184 499 I 2184 499 I C 
-2184 445 M 2184 414 I 2185 412 I 2186 412 I 2187 412 I 2188 414 I 2188 445 I 2187 447 I 2186 447 I 2185 447 I 2184 445 I 2184 445 I C 
-2184 392 M 2184 361 I 2185 359 I 2186 358 I 2187 359 I 2188 361 I 2188 392 I 2187 393 I 2186 394 I 2185 393 I 2184 392 I 2184 392 I C 
-2184 338 M 2184 307 I 2185 305 I 2186 304 I 2187 305 I 2188 307 I 2188 338 I 2187 339 I 2186 340 I 2185 339 I 2184 338 I 2184 338 I C 
-2184 284 M 2184 253 I 2185 251 I 2186 250 I 2187 251 I 2188 253 I 2188 284 I 2187 286 I 2186 287 I 2185 286 I 2184 284 I 2184 284 I C 
-:  L ; K 
-N 1955 13 M 1955 248 I 2417 248 I 2417 13 I 1955 13 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw solid N 1955 248 M 2417 248 I 2417 13 I 1955 13 I 1955 248 I C 
-: 0.668 0.727 +S K 
-; T32RsrcBegin
-
-10
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-
-11
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-
-12
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-2036 153 M <0A>S 
-2058 153 M <0B>S  2091 153 M <04>S  2115 153 M <0C>S  2148 153 M <06>S  2182 153 M <0A>S  2205 153 M <07>S  2220 153 M <06>S  2254 153 M <08>S  2299 153 M <09>S  
-7 Lw N 2036 161 M 2336 161 I : 0.668 0.727 +S K 
-; 6 Lw N 1214 584 M 2118 584 I : 0.668 0.727 +S K 
-; N 2186 584 M 2153 604 I 2153 563 I 2186 584 I C 
-2153 604 M 2186 584 I 2153 604 I C 
- O 10 Lw N 2186 584 M 2153 604 I 2153 563 I 2186 584 I : 0.668 0.727 +S K 
-; N 2153 604 M 2186 584 I : 0.668 0.727 +S K 
-; 6 Lw N 2153 584 M 2099 584 I : 0.668 0.727 +S K 
-; N 1392 440 M 1392 529 I 2009 529 I 2009 440 I 1392 440 I C 
-1 1 1 1 scol  O 0 0 0 1 scol T32RsrcBegin
-
-13
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-
-14
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-
-15
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-
-16
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-
-17
-/g115 [42 0 1 -47 40 0 ] 
-/g115 [39 47 true [1 0 0 1 -1 47 ]  0 0]
-[<fc0000007e
-fe0000007e
-fe0000007e
-7e000000fe
-7f000000fc
-7f000000fc
-3f000001fc
-3f800001f8
-3f800001f8
-1f800003f8
-1fc00003f0
-1fc00003f0
-0fc00007f0
-0fe00007e0
-07e00007e0
-07e0000fc0
-07f0000fc0
-03f0000fc0
-03f8001f80
-03f8001f80
-01f8001f80
-01fc003f00
-01fc003f00
-00fc003f00
-00fe007e00
-00fe007e00
-007e007e00
-007f00fc00
-007f00fc00
-003f00fc00
-003f81f800
-001f81f800
-001f81f000
-001fc3f000
-000fc3f000
-000fc3e000
-000fe7e000
-0007e7e000
-0007e7c000
-0007ffc000
-0003ffc000
-0003ff8000
-0003ff8000
-0001ff8000
-0001ff0000
-0000ff0000
-0000fe0000
->
- ]
-/TT353ADb00 AddT3T32Char
-
-18
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-
-19
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-1392 507 M <0D>S 
-1435 507 M <0E>S  1474 507 M <08>S  1518 507 M <0F>S  1561 507 M <10>S  1606 507 M <11>S  1645 507 M <12>S  1679 507 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
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-1716 507 M <14>S 
-T32RsrcBegin
-
-21
-/g89 [50 0 4 -48 52 7 ] 
-/g89 [48 55 true [1 0 0 1 -4 48 ]  0 0]
-[<0000ffe00000
-0007fffc0000
-001fffff0000
-007fffffc000
-00ffffffe000
-03ff807ff000
-03fe000ff800
-07f80007fc00
-0ff00003fc00
-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
-03ff807ff800
-01fffffffc00
-00ffffffff00
-007ffffeff80
-000ffff87fe0
-0001ffc03ffc
-000000001ffe
-0000000007ff
-0000000003ff
-0000000000ff
-00000000003f
-000000000007
->
- ]
-/TT353ADb00 AddT3T32Char
-
-22
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-
-23
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-
-24
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-1749 507 M <13>S 
-1786 507 M <12>S  1820 507 M <15>S  1866 507 M <16>S  1910 507 M <12>S  1944 507 M <17>S  1975 507 M <18>S  
-N 2186 919 M 1282 919 I : 0.668 0.727 +S K 
-; N 1214 919 M 1247 898 I 1247 940 I 1214 919 I C 
-1247 898 M 1214 919 I 1247 898 I C 
- O 10 Lw N 1214 919 M 1247 898 I 1247 940 I 1214 919 I : 0.668 0.727 +S K 
-; N 1247 898 M 1214 919 I : 0.668 0.727 +S K 
-; 6 Lw N 1247 919 M 1301 919 I : 0.668 0.727 +S K 
-; N 1318 809 M 1318 898 I 2082 898 I 2082 809 I 1318 809 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 1318 876 M <0D>S 
-1361 876 M <0E>S  1401 876 M <08>S  1445 876 M <0F>S  1487 876 M <10>S  1533 876 M <11>S  1572 876 M <12>S  1606 876 M <13>S  
-1643 876 M <14>S 
-1677 876 M <13>S 
-1714 876 M <12>S  1747 876 M <15>S  1793 876 M <16>S  1838 876 M <12>S  1871 876 M <17>S  1903 876 M <18>S  
-1936 876 M <14>S 
-T32RsrcBegin
-
-25
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-
-26
-/g60 [38 0 6 -47 36 0 ] 
-/g60 [30 47 true [1 0 0 1 -6 47 ]  0 0]
-[<fc0001f8
-fc0003f8
-fc0007f8
-fc0007f0
-fc000fe0
-fc001fc0
-fc003fc0
-fc007f80
-fc007f00
-fc00fe00
-fc01fc00
-fc03f800
-fc07f800
-fc07f000
-fc0fe000
-fc1fc000
-fc3f8000
-fc7f0000
-fc7f0000
-fcfe0000
-fdfc0000
-fff80000
-fff80000
-fdfc0000
-fdfe0000
-fcfe0000
-fc7f0000
-fc3f8000
-fc3fc000
-fc1fe000
-fc0fe000
-fc07f000
-fc07f800
-fc03fc00
-fc01fc00
-fc00fe00
-fc00ff00
-fc007f80
-fc003f80
-fc001fc0
-fc001fe0
-fc000ff0
-fc0007f0
-fc0007f8
-fc0003fc
-fc0001fc
-fc0000fc
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-1970 876 M <0E>S 
-2009 876 M <19>S  2046 876 M <1A>S  
-N 1214 1590 M 2118 1590 I : 0.668 0.727 +S K 
-; N 2186 1590 M 2153 1611 I 2153 1569 I 2186 1590 I C 
-2153 1611 M 2186 1590 I 2153 1611 I C 
- O 10 Lw N 2186 1590 M 2153 1611 I 2153 1569 I 2186 1590 I : 0.668 0.727 +S K 
-; N 2153 1611 M 2186 1590 I : 0.668 0.727 +S K 
-; 6 Lw N 2153 1590 M 2099 1590 I : 0.668 0.727 +S K 
-; N 1377 1446 M 1377 1536 I 2023 1536 I 2023 1446 I 1377 1446 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 1377 1514 M <17>S 
-1409 1514 M <08>S  
-1453 1514 M <14>S 
-1487 1514 M <17>S 
-1518 1514 M <18>S  1552 1514 M <0E>S  1592 1514 M <18>S  1625 1514 M <16>S  1669 1514 M <17>S  
-1701 1514 M <14>S 
-T32RsrcBegin
-
-27
-/g38 [34 0 6 -47 31 0 ] 
-/g38 [25 47 true [1 0 0 1 -6 47 ]  0 0]
-[<7fffff80
-ffffff80
-ffffff80
-ffffff80
-ffffff80
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-ffffff00
-ffffff00
-ffffff00
-ffffff00
-ffffff00
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-1734 1514 M <18>S 
-1768 1514 M <13>S  1805 1514 M <0E>S  1844 1514 M <08>S  1889 1514 M <17>S  1920 1514 M <1B>S  1952 1514 M <12>S  1985 1514 M <13>S  
-N 2186 2932 M 1282 2932 I : 0.668 0.727 +S K 
-; N 1214 2932 M 1247 2912 I 1247 2953 I 1214 2932 I C 
-1247 2912 M 1214 2932 I 1247 2912 I C 
- O 10 Lw N 1214 2932 M 1247 2912 I 1247 2953 I 1214 2932 I : 0.668 0.727 +S K 
-; N 1247 2912 M 1214 2932 I : 0.668 0.727 +S K 
-; 6 Lw N 1247 2932 M 1301 2932 I : 0.668 0.727 +S K 
-; N 1377 2823 M 1377 2912 I 2023 2912 I 2023 2823 I 1377 2823 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 1377 2890 M <16>S 
-1422 2890 M <12>S  
-1455 2890 M <14>S 
-T32RsrcBegin
-
-28
-/g121 [38 0 2 -47 37 0 ] 
-/g121 [35 47 true [1 0 0 1 -2 47 ]  0 0]
-[<fe00000fc0
-7f00001fc0
-7f00001f80
-3f80003f80
-3f80007f00
-1fc0007f00
-1fc000fe00
-0fe000fe00
-07f001fc00
-07f001f800
-03f803f800
-03f807f000
-01fc07f000
-01fe0fe000
-00fe0fc000
-007f1fc000
-007f1f8000
-003fbf8000
-003fff0000
-001ffe0000
-000ffe0000
-000ffc0000
-0007fc0000
-0007fc0000
-000ffc0000
-000ffe0000
-001ffe0000
-001fff0000
-003f3f8000
-007f3f8000
-007e1fc000
-00fe1fc000
-00fc0fe000
-01fc07f000
-03f807f000
-03f003f800
-07f003f800
-07e001fc00
-0fe001fc00
-1fc000fe00
-1fc000ff00
-3f80007f00
-3f80003f80
-7f00003f80
-fe00001fc0
-fe00001fc0
-fc00000fc0
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-1489 2890 M <19>S 
-1525 2890 M <10>S  1571 2890 M <08>S  1615 2890 M <18>S  1649 2890 M <12>S  1682 2890 M <1C>S  1718 2890 M <18>S  
-1751 2890 M <14>S 
-T32RsrcBegin
-
-29
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-1785 2890 M <13>S 
-1822 2890 M <12>S  1856 2890 M <1D>S  1885 2890 M <12>S  1918 2890 M <0E>S  1958 2890 M <17>S  1989 2890 M <12>S  
-1 Lw solid N 241 3023 M 241 2991 I 242 2990 I 243 2989 I 244 2990 I 245 2991 I 245 3023 I 244 3024 I 243 3025 I 242 3024 I 241 3023 I 241 3023 I C 
-241 2969 M 241 2937 I 242 2936 I 243 2935 I 244 2936 I 245 2937 I 245 2969 I 244 2970 I 243 2971 I 242 2970 I 241 2969 I 241 2969 I C 
-241 2915 M 241 2884 I 242 2883 I 243 2882 I 244 2883 I 245 2884 I 245 2915 I 244 2917 I 243 2918 I 242 2917 I 241 2915 I 241 2915 I C 
-241 2861 M 241 2830 I 242 2829 I 243 2828 I 244 2829 I 245 2830 I 245 2861 I 244 2863 I 243 2864 I 242 2863 I 241 2861 I 241 2861 I C 
-241 2807 M 241 2776 I 242 2775 I 243 2774 I 244 2775 I 245 2776 I 245 2807 I 244 2810 I 243 2810 I 242 2810 I 241 2807 I 241 2807 I C 
-241 2754 M 241 2723 I 242 2721 I 243 2721 I 244 2721 I 245 2723 I 245 2754 I 244 2756 I 243 2756 I 242 2756 I 241 2754 I 241 2754 I C 
-241 2700 M 241 2669 I 242 2667 I 243 2667 I 244 2667 I 245 2669 I 245 2700 I 244 2702 I 243 2702 I 242 2702 I 241 2700 I 241 2700 I C 
-241 2647 M 241 2615 I 242 2614 I 243 2613 I 244 2614 I 245 2615 I 245 2647 I 244 2648 I 243 2649 I 242 2648 I 241 2647 I 241 2647 I C 
-241 2593 M 241 2561 I 242 2560 I 243 2559 I 244 2560 I 245 2561 I 245 2593 I 244 2594 I 243 2595 I 242 2594 I 241 2593 I 241 2593 I C 
-241 2539 M 241 2508 I 242 2507 I 243 2506 I 244 2507 I 245 2508 I 245 2539 I 244 2541 I 243 2542 I 242 2541 I 241 2539 I 241 2539 I C 
-241 2486 M 241 2454 I 242 2453 I 243 2452 I 244 2453 I 245 2454 I 245 2486 I 244 2487 I 243 2488 I 242 2487 I 241 2486 I 241 2486 I C 
-241 2432 M 241 2400 I 242 2399 I 243 2398 I 244 2399 I 245 2400 I 245 2432 I 244 2434 I 243 2434 I 242 2434 I 241 2432 I 241 2432 I C 
-241 2378 M 241 2347 I 242 2345 I 243 2345 I 244 2345 I 245 2347 I 245 2378 I 244 2380 I 243 2380 I 242 2380 I 241 2378 I 241 2378 I C 
-241 2324 M 241 2293 I 242 2291 I 243 2291 I 244 2291 I 245 2293 I 245 2324 I 244 2326 I 243 2326 I 242 2326 I 241 2324 I 241 2324 I C 
-241 2271 M 241 2240 I 242 2238 I 243 2237 I 244 2238 I 245 2240 I 245 2271 I 244 2272 I 243 2273 I 242 2272 I 241 2271 I 241 2271 I C 
-241 2217 M 241 2186 I 242 2184 I 243 2183 I 244 2184 I 245 2186 I 245 2217 I 244 2218 I 243 2219 I 242 2218 I 241 2217 I 241 2217 I C 
-241 2163 M 241 2132 I 242 2130 I 243 2129 I 244 2130 I 245 2132 I 245 2163 I 244 2165 I 243 2166 I 242 2165 I 241 2163 I 241 2163 I C 
-241 2110 M 241 2078 I 242 2077 I 243 2076 I 244 2077 I 245 2078 I 245 2110 I 244 2111 I 243 2112 I 242 2111 I 241 2110 I 241 2110 I C 
-241 2056 M 241 2024 I 242 2023 I 243 2022 I 244 2023 I 245 2024 I 245 2056 I 244 2058 I 243 2058 I 242 2058 I 241 2056 I 241 2056 I C 
-241 2002 M 241 1971 I 242 1970 I 243 1969 I 244 1970 I 245 1971 I 245 2002 I 244 2004 I 243 2005 I 242 2004 I 241 2002 I 241 2002 I C 
-241 1948 M 241 1917 I 242 1916 I 243 1915 I 244 1916 I 245 1917 I 245 1948 I 244 1950 I 243 1951 I 242 1950 I 241 1948 I 241 1948 I C 
-241 1895 M 241 1864 I 242 1862 I 243 1862 I 244 1862 I 245 1864 I 245 1895 I 244 1897 I 243 1897 I 242 1897 I 241 1895 I 241 1895 I C 
-241 1841 M 241 1810 I 242 1808 I 243 1808 I 244 1808 I 245 1810 I 245 1841 I 244 1843 I 243 1843 I 242 1843 I 241 1841 I 241 1841 I C 
-241 1787 M 241 1757 I 242 1754 I 243 1754 I 244 1754 I 245 1757 I 245 1787 I 244 1789 I 243 1790 I 242 1789 I 241 1787 I 241 1787 I C 
-241 1734 M 241 1703 I 242 1701 I 243 1700 I 244 1701 I 245 1703 I 245 1734 I 244 1735 I 243 1736 I 242 1735 I 241 1734 I 241 1734 I C 
-241 1680 M 241 1649 I 242 1647 I 243 1646 I 244 1647 I 245 1649 I 245 1680 I 244 1682 I 243 1682 I 242 1682 I 241 1680 I 241 1680 I C 
-241 1627 M 241 1595 I 242 1594 I 243 1593 I 244 1594 I 245 1595 I 245 1627 I 244 1628 I 243 1629 I 242 1628 I 241 1627 I 241 1627 I C 
-241 1573 M 241 1541 I 242 1540 I 243 1539 I 244 1540 I 245 1541 I 245 1573 I 244 1574 I 243 1575 I 242 1574 I 241 1573 I 241 1573 I C 
-241 1519 M 241 1488 I 242 1487 I 243 1486 I 244 1487 I 245 1488 I 245 1519 I 244 1521 I 243 1522 I 242 1521 I 241 1519 I 241 1519 I C 
-241 1465 M 241 1434 I 242 1433 I 243 1432 I 244 1433 I 245 1434 I 245 1465 I 244 1467 I 243 1468 I 242 1467 I 241 1465 I 241 1465 I C 
-241 1411 M 241 1381 I 242 1379 I 243 1378 I 244 1379 I 245 1381 I 245 1411 I 244 1414 I 243 1414 I 242 1414 I 241 1411 I 241 1411 I C 
-241 1358 M 241 1327 I 242 1325 I 243 1325 I 244 1325 I 245 1327 I 245 1358 I 244 1360 I 243 1360 I 242 1360 I 241 1358 I 241 1358 I C 
-241 1304 M 241 1273 I 242 1271 I 243 1271 I 244 1271 I 245 1273 I 245 1304 I 244 1306 I 243 1306 I 242 1306 I 241 1304 I 241 1304 I C 
-241 1251 M 241 1219 I 242 1218 I 243 1217 I 244 1218 I 245 1219 I 245 1251 I 244 1252 I 243 1253 I 242 1252 I 241 1251 I 241 1251 I C 
-241 1197 M 241 1165 I 242 1164 I 243 1163 I 244 1164 I 245 1165 I 245 1197 I 244 1198 I 243 1199 I 242 1198 I 241 1197 I 241 1197 I C 
-241 1144 M 241 1112 I 242 1111 I 243 1110 I 244 1111 I 245 1112 I 245 1144 I 244 1145 I 243 1146 I 242 1145 I 241 1144 I 241 1144 I C 
-241 1090 M 241 1058 I 242 1057 I 243 1056 I 244 1057 I 245 1058 I 245 1090 I 244 1091 I 243 1092 I 242 1091 I 241 1090 I 241 1090 I C 
-241 1036 M 241 1005 I 242 1003 I 243 1002 I 244 1003 I 245 1005 I 245 1036 I 244 1038 I 243 1038 I 242 1038 I 241 1036 I 241 1036 I C 
-241 982 M 241 951 I 242 949 I 243 949 I 244 949 I 245 951 I 245 982 I 244 984 I 243 984 I 242 984 I 241 982 I 241 982 I C 
-241 928 M 241 897 I 242 895 I 243 895 I 244 895 I 245 897 I 245 928 I 244 930 I 243 930 I 242 930 I 241 928 I 241 928 I C 
-241 875 M 241 844 I 242 842 I 243 841 I 244 842 I 245 844 I 245 875 I 244 876 I 243 877 I 242 876 I 241 875 I 241 875 I C 
-241 821 M 241 790 I 242 788 I 243 787 I 244 788 I 245 790 I 245 821 I 244 822 I 243 823 I 242 822 I 241 821 I 241 821 I C 
-241 768 M 241 736 I 242 735 I 243 734 I 244 735 I 245 736 I 245 768 I 244 769 I 243 770 I 242 769 I 241 768 I 241 768 I C 
-241 714 M 241 682 I 242 681 I 243 680 I 244 681 I 245 682 I 245 714 I 244 715 I 243 716 I 242 715 I 241 714 I 241 714 I C 
-241 660 M 241 629 I 242 627 I 243 626 I 244 627 I 245 629 I 245 660 I 244 662 I 243 663 I 242 662 I 241 660 I 241 660 I C 
-241 606 M 241 575 I 242 574 I 243 573 I 244 574 I 245 575 I 245 606 I 244 608 I 243 609 I 242 608 I 241 606 I 241 606 I C 
-241 552 M 241 521 I 242 520 I 243 519 I 244 520 I 245 521 I 245 552 I 244 554 I 243 555 I 242 554 I 241 552 I 241 552 I C 
-241 499 M 241 468 I 242 466 I 243 466 I 244 466 I 245 468 I 245 499 I 244 501 I 243 501 I 242 501 I 241 499 I 241 499 I C 
-241 445 M 241 414 I 242 412 I 243 412 I 244 412 I 245 414 I 245 445 I 244 447 I 243 447 I 242 447 I 241 445 I 241 445 I C 
-241 392 M 241 361 I 242 359 I 243 358 I 244 359 I 245 361 I 245 392 I 244 393 I 243 394 I 242 393 I 241 392 I 241 392 I C 
-241 338 M 241 307 I 242 305 I 243 304 I 244 305 I 245 307 I 245 338 I 244 339 I 243 340 I 242 339 I 241 338 I 241 338 I C 
-241 284 M 241 253 I 242 251 I 243 250 I 244 251 I 245 253 I 245 284 I 244 286 I 243 287 I 242 286 I 241 284 I 241 284 I C 
-:  L ; K 
-N 11 12 M 11 248 I 473 248 I 473 12 I 11 12 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw solid N 11 248 M 473 248 I 473 12 I 11 12 I 11 248 I C 
-: 0.668 0.727 +S K 
-; 204 153 M <16>S 
-248 153 M <12>S  
-7 Lw N 204 161 M 281 161 I : 0.668 0.727 +S K 
-; 1 Lw solid N 3155 3023 M 3155 2991 I 3156 2990 I 3157 2989 I 3160 2990 I 3160 2991 I 3160 3023 I 3160 3024 I 3157 3025 I 3156 3024 I 3155 3023 I 3155 3023 I C 
-3155 2969 M 3155 2937 I 3156 2936 I 3157 2935 I 3160 2936 I 3160 2937 I 3160 2969 I 3160 2970 I 3157 2971 I 3156 2970 I 3155 2969 I 3155 2969 I C 
-3155 2915 M 3155 2884 I 3156 2883 I 3157 2882 I 3160 2883 I 3160 2884 I 3160 2915 I 3160 2917 I 3157 2918 I 3156 2917 I 3155 2915 I 3155 2915 I C 
-3155 2861 M 3155 2830 I 3156 2829 I 3157 2828 I 3160 2829 I 3160 2830 I 3160 2861 I 3160 2863 I 3157 2864 I 3156 2863 I 3155 2861 I 3155 2861 I C 
-3155 2807 M 3155 2776 I 3156 2775 I 3157 2774 I 3160 2775 I 3160 2776 I 3160 2807 I 3160 2810 I 3157 2810 I 3156 2810 I 3155 2807 I 3155 2807 I C 
-3155 2754 M 3155 2723 I 3156 2721 I 3157 2721 I 3160 2721 I 3160 2723 I 3160 2754 I 3160 2756 I 3157 2756 I 3156 2756 I 3155 2754 I 3155 2754 I C 
-3155 2700 M 3155 2669 I 3156 2667 I 3157 2667 I 3160 2667 I 3160 2669 I 3160 2700 I 3160 2702 I 3157 2702 I 3156 2702 I 3155 2700 I 3155 2700 I C 
-3155 2647 M 3155 2615 I 3156 2614 I 3157 2613 I 3160 2614 I 3160 2615 I 3160 2647 I 3160 2648 I 3157 2649 I 3156 2648 I 3155 2647 I 3155 2647 I C 
-3155 2593 M 3155 2561 I 3156 2560 I 3157 2559 I 3160 2560 I 3160 2561 I 3160 2593 I 3160 2594 I 3157 2595 I 3156 2594 I 3155 2593 I 3155 2593 I C 
-3155 2539 M 3155 2508 I 3156 2507 I 3157 2506 I 3160 2507 I 3160 2508 I 3160 2539 I 3160 2541 I 3157 2542 I 3156 2541 I 3155 2539 I 3155 2539 I C 
-3155 2486 M 3155 2454 I 3156 2453 I 3157 2452 I 3160 2453 I 3160 2454 I 3160 2486 I 3160 2487 I 3157 2488 I 3156 2487 I 3155 2486 I 3155 2486 I C 
-3155 2432 M 3155 2400 I 3156 2399 I 3157 2398 I 3160 2399 I 3160 2400 I 3160 2432 I 3160 2434 I 3157 2434 I 3156 2434 I 3155 2432 I 3155 2432 I C 
-3155 2378 M 3155 2347 I 3156 2345 I 3157 2345 I 3160 2345 I 3160 2347 I 3160 2378 I 3160 2380 I 3157 2380 I 3156 2380 I 3155 2378 I 3155 2378 I C 
-3155 2324 M 3155 2293 I 3156 2291 I 3157 2291 I 3160 2291 I 3160 2293 I 3160 2324 I 3160 2326 I 3157 2326 I 3156 2326 I 3155 2324 I 3155 2324 I C 
-3155 2271 M 3155 2240 I 3156 2238 I 3157 2237 I 3160 2238 I 3160 2240 I 3160 2271 I 3160 2272 I 3157 2273 I 3156 2272 I 3155 2271 I 3155 2271 I C 
-3155 2217 M 3155 2186 I 3156 2184 I 3157 2183 I 3160 2184 I 3160 2186 I 3160 2217 I 3160 2218 I 3157 2219 I 3156 2218 I 3155 2217 I 3155 2217 I C 
-3155 2163 M 3155 2132 I 3156 2130 I 3157 2129 I 3160 2130 I 3160 2132 I 3160 2163 I 3160 2165 I 3157 2166 I 3156 2165 I 3155 2163 I 3155 2163 I C 
-3155 2110 M 3155 2078 I 3156 2077 I 3157 2076 I 3160 2077 I 3160 2078 I 3160 2110 I 3160 2111 I 3157 2112 I 3156 2111 I 3155 2110 I 3155 2110 I C 
-3155 2056 M 3155 2024 I 3156 2023 I 3157 2022 I 3160 2023 I 3160 2024 I 3160 2056 I 3160 2058 I 3157 2058 I 3156 2058 I 3155 2056 I 3155 2056 I C 
-3155 2002 M 3155 1971 I 3156 1970 I 3157 1969 I 3160 1970 I 3160 1971 I 3160 2002 I 3160 2004 I 3157 2005 I 3156 2004 I 3155 2002 I 3155 2002 I C 
-3155 1948 M 3155 1917 I 3156 1916 I 3157 1915 I 3160 1916 I 3160 1917 I 3160 1948 I 3160 1950 I 3157 1951 I 3156 1950 I 3155 1948 I 3155 1948 I C 
-3155 1895 M 3155 1864 I 3156 1862 I 3157 1862 I 3160 1862 I 3160 1864 I 3160 1895 I 3160 1897 I 3157 1897 I 3156 1897 I 3155 1895 I 3155 1895 I C 
-3155 1841 M 3155 1810 I 3156 1808 I 3157 1808 I 3160 1808 I 3160 1810 I 3160 1841 I 3160 1843 I 3157 1843 I 3156 1843 I 3155 1841 I 3155 1841 I C 
-3155 1787 M 3155 1757 I 3156 1754 I 3157 1754 I 3160 1754 I 3160 1757 I 3160 1787 I 3160 1789 I 3157 1790 I 3156 1789 I 3155 1787 I 3155 1787 I C 
-3155 1734 M 3155 1703 I 3156 1701 I 3157 1700 I 3160 1701 I 3160 1703 I 3160 1734 I 3160 1735 I 3157 1736 I 3156 1735 I 3155 1734 I 3155 1734 I C 
-3155 1680 M 3155 1649 I 3156 1647 I 3157 1646 I 3160 1647 I 3160 1649 I 3160 1680 I 3160 1682 I 3157 1682 I 3156 1682 I 3155 1680 I 3155 1680 I C 
-3155 1627 M 3155 1595 I 3156 1594 I 3157 1593 I 3160 1594 I 3160 1595 I 3160 1627 I 3160 1628 I 3157 1629 I 3156 1628 I 3155 1627 I 3155 1627 I C 
-3155 1573 M 3155 1541 I 3156 1540 I 3157 1539 I 3160 1540 I 3160 1541 I 3160 1573 I 3160 1574 I 3157 1575 I 3156 1574 I 3155 1573 I 3155 1573 I C 
-3155 1519 M 3155 1488 I 3156 1487 I 3157 1486 I 3160 1487 I 3160 1488 I 3160 1519 I 3160 1521 I 3157 1522 I 3156 1521 I 3155 1519 I 3155 1519 I C 
-3155 1465 M 3155 1434 I 3156 1433 I 3157 1432 I 3160 1433 I 3160 1434 I 3160 1465 I 3160 1467 I 3157 1468 I 3156 1467 I 3155 1465 I 3155 1465 I C 
-3155 1411 M 3155 1381 I 3156 1379 I 3157 1378 I 3160 1379 I 3160 1381 I 3160 1411 I 3160 1414 I 3157 1414 I 3156 1414 I 3155 1411 I 3155 1411 I C 
-3155 1358 M 3155 1327 I 3156 1325 I 3157 1325 I 3160 1325 I 3160 1327 I 3160 1358 I 3160 1360 I 3157 1360 I 3156 1360 I 3155 1358 I 3155 1358 I C 
-3155 1304 M 3155 1273 I 3156 1271 I 3157 1271 I 3160 1271 I 3160 1273 I 3160 1304 I 3160 1306 I 3157 1306 I 3156 1306 I 3155 1304 I 3155 1304 I C 
-3155 1251 M 3155 1219 I 3156 1218 I 3157 1217 I 3160 1218 I 3160 1219 I 3160 1251 I 3160 1252 I 3157 1253 I 3156 1252 I 3155 1251 I 3155 1251 I C 
-3155 1197 M 3155 1165 I 3156 1164 I 3157 1163 I 3160 1164 I 3160 1165 I 3160 1197 I 3160 1198 I 3157 1199 I 3156 1198 I 3155 1197 I 3155 1197 I C 
-3155 1144 M 3155 1112 I 3156 1111 I 3157 1110 I 3160 1111 I 3160 1112 I 3160 1144 I 3160 1145 I 3157 1146 I 3156 1145 I 3155 1144 I 3155 1144 I C 
-3155 1090 M 3155 1058 I 3156 1057 I 3157 1056 I 3160 1057 I 3160 1058 I 3160 1090 I 3160 1091 I 3157 1092 I 3156 1091 I 3155 1090 I 3155 1090 I C 
-3155 1036 M 3155 1005 I 3156 1003 I 3157 1002 I 3160 1003 I 3160 1005 I 3160 1036 I 3160 1038 I 3157 1038 I 3156 1038 I 3155 1036 I 3155 1036 I C 
-3155 982 M 3155 951 I 3156 949 I 3157 949 I 3160 949 I 3160 951 I 3160 982 I 3160 984 I 3157 984 I 3156 984 I 3155 982 I 3155 982 I C 
-3155 928 M 3155 897 I 3156 895 I 3157 895 I 3160 895 I 3160 897 I 3160 928 I 3160 930 I 3157 930 I 3156 930 I 3155 928 I 3155 928 I C 
-3155 875 M 3155 844 I 3156 842 I 3157 841 I 3160 842 I 3160 844 I 3160 875 I 3160 876 I 3157 877 I 3156 876 I 3155 875 I 3155 875 I C 
-3155 821 M 3155 790 I 3156 788 I 3157 787 I 3160 788 I 3160 790 I 3160 821 I 3160 822 I 3157 823 I 3156 822 I 3155 821 I 3155 821 I C 
-3155 768 M 3155 736 I 3156 735 I 3157 734 I 3160 735 I 3160 736 I 3160 768 I 3160 769 I 3157 770 I 3156 769 I 3155 768 I 3155 768 I C 
-3155 714 M 3155 682 I 3156 681 I 3157 680 I 3160 681 I 3160 682 I 3160 714 I 3160 715 I 3157 716 I 3156 715 I 3155 714 I 3155 714 I C 
-3155 660 M 3155 629 I 3156 627 I 3157 626 I 3160 627 I 3160 629 I 3160 660 I 3160 662 I 3157 663 I 3156 662 I 3155 660 I 3155 660 I C 
-3155 606 M 3155 575 I 3156 574 I 3157 573 I 3160 574 I 3160 575 I 3160 606 I 3160 608 I 3157 609 I 3156 608 I 3155 606 I 3155 606 I C 
-3155 552 M 3155 521 I 3156 520 I 3157 519 I 3160 520 I 3160 521 I 3160 552 I 3160 554 I 3157 555 I 3156 554 I 3155 552 I 3155 552 I C 
-3155 499 M 3155 468 I 3156 466 I 3157 466 I 3160 466 I 3160 468 I 3160 499 I 3160 501 I 3157 501 I 3156 501 I 3155 499 I 3155 499 I C 
-3155 445 M 3155 414 I 3156 412 I 3157 412 I 3160 412 I 3160 414 I 3160 445 I 3160 447 I 3157 447 I 3156 447 I 3155 445 I 3155 445 I C 
-3155 392 M 3155 361 I 3156 359 I 3157 358 I 3160 359 I 3160 361 I 3160 392 I 3160 393 I 3157 394 I 3156 393 I 3155 392 I 3155 392 I C 
-3155 338 M 3155 307 I 3156 305 I 3157 304 I 3160 305 I 3160 307 I 3160 338 I 3160 339 I 3157 340 I 3156 339 I 3155 338 I 3155 338 I C 
-3155 284 M 3155 253 I 3156 251 I 3157 250 I 3160 251 I 3160 253 I 3160 284 I 3160 286 I 3157 287 I 3156 286 I 3155 284 I 3155 284 I C 
-:  L ; K 
-N 2927 13 M 2927 248 I 3388 248 I 3388 13 I 2927 13 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw solid N 2927 248 M 3388 248 I 3388 13 I 2927 13 I 2927 248 I C 
-: 0.668 0.727 +S K 
-; T32RsrcBegin
-
-30
-/g39 [47 0 3 -48 41 1 ] 
-/g39 [38 49 true [1 0 0 1 -3 48 ]  0 0]
-[<00003ff800
-0003ffff80
-000fffffe0
-003ffffff8
-007ffffffc
-00ffe00ffc
-01ff0000fc
-03fe00003c
-07f800000c
-0ff0000000
-0fe0000000
-1fe0000000
-1fc0000000
-3f80000000
-3f80000000
-7f80000000
-7f00000000
-7f00000000
-7f00000000
-fe00000000
-fe00000000
-fe00000000
-fe000ffff8
-fe000ffffc
-fe000ffffc
-fe000ffffc
-fe000ffffc
-fe000000fc
-fe000000fc
-fe000000fc
-ff000000fc
-7f000000fc
-7f000000fc
-7f000000fc
-7f800000fc
-3f800000fc
-3fc00000fc
-1fe00000fc
-1fe00000fc
-0ff00000fc
-0ff80000fc
-07fe0000fc
-03ff0001fc
-01ffe00ffc
-00fffffffc
-003ffffff8
-000fffffe0
-0003ffff00
-00007ff000
->
- ]
-/TT353ADb00 AddT3T32Char
-
-31
-/g116 [66 0 2 -47 64 0 ] 
-/g116 [62 47 true [1 0 0 1 -2 47 ]  0 0]
-[<fc00000fc00000f8
-fe00001fc00001fc
-fe00001fe00001f8
-7e00001fe00001f8
-7f00003fe00001f8
-7f00003fe00003f0
-3f00003ff00003f0
-3f00003ff00003f0
-3f80007ff00007f0
-3f80007ff00007e0
-1f80007df80007e0
-1fc0007df80007e0
-1fc000fdf8000fc0
-0fc000fdfc000fc0
-0fc000f8fc000fc0
-0fe000f8fc000fc0
-07e001f8fc001f80
-07e001f87e001f80
-07e001f07e001f80
-07f001f07e001f00
-03f003f07f003f00
-03f003f03f003f00
-03f003e03f003f00
-01f803e03f007e00
-01f807e01f807e00
-01f807e01f807e00
-01fc07c01f807c00
-00fc07c01f80fc00
-00fc0fc00fc0fc00
-00fc0fc00fc0fc00
-007e0f800fc0f800
-007e0f800fe1f800
-007e1f8007e1f800
-007e1f8007e1f000
-003f1f0007e1f000
-003f1f0003f3f000
-003f3f0003f3f000
-001fbe0003f3e000
-001fbe0003f3e000
-001fbe0001ffe000
-001ffe0001ffc000
-000ffc0001ffc000
-000ffc0000ffc000
-000ffc0000ffc000
-0007fc0000ff8000
-0007f80000ff8000
-0003f800007f0000
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-3007 153 M <17>S 
-3038 153 M <1E>S  3081 153 M <1F>S  
-T32RsrcBegin
-
-32
-/g876 [29 0 0 -53 28 10 ] 
-/g876 [28 63 true [1 0 0 1 0 53 ]  0 0]
-[<000001f0
-000003f0
-000003f0
-000007e0
-000007e0
-000007e0
-00000fc0
-00000fc0
-00000fc0
-00001f80
-00001f80
-00003f00
-00003f00
-00003f00
-00007e00
-00007e00
-00007e00
-0000fc00
-0000fc00
-0001f800
-0001f800
-0001f800
-0003f000
-0003f000
-0003f000
-0007e000
-0007e000
-0007e000
-000fc000
-000fc000
-001f8000
-001f8000
-001f8000
-003f0000
-003f0000
-003f0000
-007e0000
-007e0000
-007e0000
-00fc0000
-00fc0000
-01f80000
-01f80000
-01f80000
-03f00000
-03f00000
-03f00000
-07e00000
-07e00000
-07c00000
-0fc00000
-0fc00000
-1f800000
-1f800000
-1f800000
-3f000000
-3f000000
-3f000000
-7e000000
-7e000000
-fc000000
-fc000000
-f8000000
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-3143 153 M ( )S 
-T32RsrcBegin
-
-33
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-3169 153 M (!)S 
-3204 153 M <1E>S  3247 153 M <1F>S  
-7 Lw N 3007 161 M 3308 161 I : 0.668 0.727 +S K 
-; 6 Lw N 1214 1254 M 310 1254 I : 0.668 0.727 +S K 
-; N 242 1254 M 276 1233 I 276 1276 I 242 1254 I C 
-276 1233 M 242 1254 I 276 1233 I C 
- O 10 Lw N 242 1254 M 276 1233 I 276 1276 I 242 1254 I : 0.668 0.727 +S K 
-; N 276 1233 M 242 1254 I : 0.668 0.727 +S K 
-; 6 Lw N 276 1254 M 329 1254 I : 0.668 0.727 +S K 
-; N 470 1144 M 470 1234 I 987 1234 I 987 1144 I 470 1144 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 470 1211 M <13>S 
-507 1211 M <13>S  544 1211 M <19>S  
-580 1211 M <14>S 
-T32RsrcBegin
-
-34
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-615 1211 M <19>S 
-651 1211 M <02>S  687 1211 M (")S  723 1211 M (")S  
-760 1211 M <14>S 
-T32RsrcBegin
-
-35
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-794 1211 M <13>S 
-831 1211 M <06>S  865 1211 M <05>S  894 1211 M <02>S  930 1211 M (")S  966 1211 M (#)S  
-N 2186 2262 M 3090 2262 I : 0.668 0.727 +S K 
-; N 3157 2262 M 3125 2283 I 3125 2240 I 3157 2262 I C 
-3125 2283 M 3157 2262 I 3125 2283 I C 
- O 10 Lw N 3157 2262 M 3125 2283 I 3125 2240 I 3157 2262 I : 0.668 0.727 +S K 
-; N 3125 2283 M 3157 2262 I : 0.668 0.727 +S K 
-; 6 Lw N 3125 2262 M 3071 2262 I : 0.668 0.727 +S K 
-; N 1937 2118 M 1937 2208 I 3406 2208 I 3406 2118 I 1937 2118 I C 
-1 1 1 1 scol  O 0 0 0 1 scol T32RsrcBegin
-
-36
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-1937 2185 M (!)S 
-1973 2185 M <0B>S  2005 2185 M <0A>S  2028 2185 M ($)S  
-2065 2185 M <14>S 
-T32RsrcBegin
-
-37
-/g449 [53 0 2 -34 51 0 ] 
-/g449 [49 34 true [1 0 0 1 -2 34 ]  0 0]
-[<fc0007e0001f80
-fc0007e0001f80
-fc0007f0003f00
-fe0007f0003f00
-7e000ff0003f00
-7e000ff0007e00
-7f000ff8007e00
-3f001ff8007e00
-3f001ff8007e00
-3f001ffc00fc00
-1f801ffc00fc00
-1f803ffc00fc00
-1f803e7c01f800
-1fc03e7e01f800
-0fc03e7e01f800
-0fc07c3e01f000
-0fe07c3f03f000
-07e07c3f03f000
-07e0fc3f03e000
-07e0f81f87e000
-03f0f81f87e000
-03f0f81f87c000
-03f1f00f87c000
-01f9f00fcfc000
-01f9f00fcf8000
-01f9f007cf8000
-00fbe007ff8000
-00ffe007ff8000
-00ffe003ff0000
-007fe003ff0000
-007fc003ff0000
-007fc003fe0000
-007fc001fe0000
-003f8001fc0000
->
- ]
-/TT353ADb00 AddT3T32Char
-
-38
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-2099 2185 M <17>S 
-2130 2185 M (%)S  2179 2185 M (&)S  2195 2185 M <0A>S  2217 2185 M <05>S  2246 2185 M ($)S  
-2283 2185 M <14>S 
-T32RsrcBegin
-
-39
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-2317 2185 M <13>S 
-2354 2185 M <06>S  2388 2185 M (')S  2424 2185 M <03>S  2460 2185 M <06>S  2495 2185 M <01>S  2521 2185 M <0A>S  2544 2185 M <07>S  
-T32RsrcBegin
-
-40
-/g1085 [37 0 3 -37 34 -4 ] 
-/g1085 [31 33 true [1 0 0 1 -3 37 ]  0 0]
-[<0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-fffffffe
-fffffffe
-fffffffe
-fffffffe
-fffffffe
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
-0007c000
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-2560 2185 M (\()S 
-2594 2185 M <07>S  
-2609 2185 M <16>S 
-2654 2185 M <01>S  2680 2185 M <06>S  2715 2185 M <04>S  
-2738 2185 M <14>S 
-T32RsrcBegin
-
-41
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-2772 2185 M (!)S 
-2808 2185 M (\))S  2823 2185 M <0B>S  2856 2185 M (")S  2892 2185 M <06>S  
-2926 2185 M <14>S 
-T32RsrcBegin
-
-42
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-
-43
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-2960 2185 M <03>S 
-2996 2185 M (*)S  3033 2185 M (+)S  3069 2185 M <0B>S  3102 2185 M <0A>S  3125 2185 M <06>S  
-3158 2185 M <14>S 
-3192 2185 M <04>S 
-3217 2185 M <06>S  3251 2185 M (')S  3287 2185 M <03>S  3323 2185 M <06>S  3357 2185 M <01>S  3384 2185 M <0A>S  
-N 3157 2597 M 2254 2597 I : 0.668 0.727 +S K 
-; N 2186 2597 M 2219 2576 I 2219 2618 I 2186 2597 I C 
-2219 2576 M 2186 2597 I 2219 2576 I C 
- O 10 Lw N 2186 2597 M 2219 2576 I 2219 2618 I 2186 2597 I : 0.668 0.727 +S K 
-; N 2219 2576 M 2186 2597 I : 0.668 0.727 +S K 
-; 6 Lw N 2219 2597 M 2273 2597 I : 0.668 0.727 +S K 
-; N 1850 2487 M 1850 2576 I 3494 2576 I 3494 2487 I 1850 2487 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 1850 2554 M (!)S 
-1885 2554 M <0B>S  1918 2554 M <0A>S  1941 2554 M ($)S  
-1977 2554 M <14>S 
-2012 2554 M <17>S 
-2043 2554 M (%)S  2092 2554 M (&)S  2107 2554 M <0A>S  2130 2554 M <05>S  2159 2554 M ($)S  
-2195 2554 M <14>S 
-2230 2554 M <13>S 
-2266 2554 M <06>S  2301 2554 M (')S  2337 2554 M <03>S  2373 2554 M <06>S  2407 2554 M <01>S  2434 2554 M <0A>S  
-2457 2554 M <14>S 
-T32RsrcBegin
-
-44
-/g364 [34 0 6 -50 33 0 ] 
-/g364 [27 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
-fc000000
-fc000fc0
-fc003fc0
-fc007f80
-fc00ff00
-fc00fe00
-fc01fc00
-fc03f800
-fc07f000
-fc0fe000
-fc1fc000
-fc3f8000
-fc7f0000
-fcfe0000
-fdfc0000
-fff80000
-fffc0000
-fdfe0000
-fcfe0000
-fc7f0000
-fc7f8000
-fc3fc000
-fc1fe000
-fc0fe000
-fc07f000
-fc07f800
-fc03fc00
-fc01fc00
-fc00fe00
-fc00ff00
-fc007f80
-fc003fc0
-fc001fc0
-fc000fe0
-fc0007e0
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-2491 2554 M <0E>S 
-2531 2554 M <05>S  2560 2554 M (,)S  2591 2554 M <07>S  
-2607 2554 M (\()S 
-2641 2554 M <07>S  
-2656 2554 M <16>S 
-2701 2554 M <01>S  2727 2554 M <06>S  2762 2554 M <04>S  
-2785 2554 M <14>S 
-2819 2554 M (!)S 
-2855 2554 M (\))S  2870 2554 M <0B>S  2903 2554 M (")S  2939 2554 M <06>S  
-2973 2554 M <14>S 
-3007 2554 M <03>S 
-3043 2554 M (*)S  3080 2554 M (+)S  3116 2554 M <0B>S  3149 2554 M <0A>S  3172 2554 M <06>S  
-3205 2554 M <14>S 
-3239 2554 M <04>S 
-3263 2554 M <06>S  3298 2554 M <01>S  3325 2554 M (*)S  3361 2554 M <02>S  3397 2554 M (")S  3433 2554 M <01>S  3460 2554 M <06>S  
-N 243 1926 M 2118 1926 I : 0.668 0.727 +S K 
-; N 2186 1926 M 2153 1947 I 2153 1905 I 2186 1926 I C 
-2153 1947 M 2186 1926 I 2153 1947 I C 
- O 10 Lw N 2186 1926 M 2153 1947 I 2153 1905 I 2186 1926 I : 0.668 0.727 +S K 
-; N 2153 1947 M 2186 1926 I : 0.668 0.727 +S K 
-; 6 Lw N 2153 1926 M 2099 1926 I : 0.668 0.727 +S K 
-; N 813 1782 M 813 1872 I 1616 1872 I 1616 1782 I 813 1782 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 813 1849 M <13>S 
-849 1849 M <13>S  886 1849 M <19>S  
-923 1849 M <14>S 
-957 1849 M <19>S 
-994 1849 M <02>S  1030 1849 M (")S  1066 1849 M (")S  
-1102 1849 M <14>S 
-T32RsrcBegin
-
-45
-/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
->
- ]
-/TT353ADb00 AddT3T32Char
-T32RsrcEnd
-1137 1849 M <13>S 
-1173 1849 M <06>S  1208 1849 M <05>S  1237 1849 M <02>S  1273 1849 M (")S  1309 1849 M (#)S  1330 1849 M <07>S  1345 1849 M <19>S  1381 1849 M <02>S  1418 1849 M (-)S  1473 1849 M (*)S  1509 1849 M (\))S  1524 1849 M <06>S  1559 1849 M <0A>S  1581 1849 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.18.1/src/lte/doc/source/figures/lte-handover-algorithm.dot ns-3.19/src/lte/doc/source/figures/lte-handover-algorithm.dot
--- ns-3.18.1/src/lte/doc/source/figures/lte-handover-algorithm.dot	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/lte-handover-algorithm.dot	1969-12-31 16:00:00.000000000 -0800
@@ -1,21 +0,0 @@
-digraph LteHandoverAlgorithm {
-
-size = "30,30"
-
-GET_MEASUREMENTS [shape = box,
-                  label = "Get measurements from UE\n(The eNB receives events A2 and A4 with UE measurements)"]
-CHECK_SERVING_RSRQ [shape = diamond, fixedsize = true, width = 8, height = 1.0,
-                    label = "serving cell RSRQ <= servingHandoverThreshold"]
-LOOK_BEST_NEIGHBOUR [shape = box,
-                     label = "Look for the neighbour cell with the best RSRQ"]
-CHECK_BEST_NEIGHBOUR [shape = diamond, fixedsize = true, width = 9, height = 1.0,
-                      label = "best neighbour RSRQ - serving cell RSRQ >= neighbourHandoverOffset"]
-TRIGGER_HANDOVER [shape = box,
-                  label = "Trigger Handover procedure for this UE"]
-
-GET_MEASUREMENTS -> CHECK_SERVING_RSRQ
-CHECK_SERVING_RSRQ -> LOOK_BEST_NEIGHBOUR
-LOOK_BEST_NEIGHBOUR -> CHECK_BEST_NEIGHBOUR
-CHECK_BEST_NEIGHBOUR -> TRIGGER_HANDOVER
-
-}
diff -Naur ns-3.18.1/src/lte/doc/source/figures/lte-handover-campaign-rem.pdf ns-3.19/src/lte/doc/source/figures/lte-handover-campaign-rem.pdf
--- ns-3.18.1/src/lte/doc/source/figures/lte-handover-campaign-rem.pdf	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/lte-handover-campaign-rem.pdf	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,1218 @@
+%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 609 363 ]
+   /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 609 363 ]
+   /Group <<
+      /Type /Group
+      /S /Transparency
+      /I true
+      /CS /DeviceRGB
+   >>
+   /Resources 7 0 R
+>>
+stream
+xœ+ä*ä23°T0 Bc3c0�œË¥Ÿh �^¬ _a©à’Ï„ µSÙ
+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 609
+   /Height 363
+   /ColorSpace /DeviceRGB
+   /Interpolate true
+   /BitsPerComponent 8
+>>
+stream
+xœì½wt–Õö½ï RÒ;!	A=ÇÞËñX�½`AŠPDQTEH!€ U�Þ;	�J(‚4QQQT° ¢ˆXQÄ‚Èù~sú7k¹x×wÞ—¬g=ëÎýÜuÏž¹æÚ{föÿûá_8üwøïðßá¿Ã‡òïÿ˜þ? ÿ¯ýÑªOÕÚ×çÈý}�ü£×ÿ}$æ‡‡c¾çóPÌ7�Åìé½wG´¤KÌŽû¢o‹tˆÞå§ÎÑ¶{¢·9þñ˜_
+�ø/§wŽÙþD­ßž¨µ·KÌN.òhÌî~Gíí³gtìº'ký>¬îcã^Yï½ÞGîç×þöÓîÁµ¿çöªýcþÿX{Ï3Gý:¤Îw=kí®îÇŽú¹èˆÿ¨½gX�/¹2?MO<*ö�qq/ŽŽ]?¼îçcb_c{xÝ-S’&°gfêScâ^­ÎÍ,ËºdÁÑad½MU¹93RúNIš4;í!n='£åœŒÛg¦ÎÉ¼µ$ýÞÊœÌJ}bnfÓññK9rfjÁ„øšÒôö¥m¸ÚŒ”§Ëœ³ðèP•steÎ?9—+³�Ÿ�Ö¥&¯vYÖå‹Ž+O³Ó:¿pBX}v˜•ÚmùÉ¡:·þ¼úWÎÏ«=5i‡-<&TåfÏN{°,ë¢šF1ÌÆÄ„ªù“¦%?7&v-öl�íö 9y<ØÜÌf<ðôäA£cß˜˜P=>~ñÓGþ>*vÃÈzïÒ8âÑ’´ç¸øå4û°ºÛh(6h%äÂöC1ß>mm­n½y´¹môR‹PrV¸¨E(eçYáâ6ÑÊÖ¡ŠÏ¡éÅ¡õU¡ëá�«ÃcH­M´âžhŸû£OØîóëƒ1_!”Çb~fãÞè}6:FŸr»Çc~}$fòí}‰øº×ÚW|ä~Žä9ÙÙ)úlD½�†×ýì�èD‰‘5¦G-“;‡õ¨õÇäÄéÈ)Ð+ßÀÚ?ñ²HsJâd„5&öõ¡u¾}¶Î×âŽ�~LÜöðáÈYi]‘Ñô”g&'ÎBÐÆM+³O(oð/.RšÑvfjá´äƒkï¢•8wD½ª¦ÌJ}œV}þŸ�6Ÿž<d|ün=#¥7­]Vÿ
+ú¿Ò[¦&�›f¿.æ3.nåsu?åFãâVq¯9·8j
+B'œ‘ÒgJÒø®1?�Ž}“N8à¨_:GÛŽøo·Z¿Ñ,Cë|�8�/øxÌÏRŸ�´MGÞ-lF¶�^¼(´¼)nÆÜž¾"t>?ÜôŸpWëPqcxæ²p/º!ô»)å»Y˜p}èÛ"ÌnFñÝ.ZÃ½hä»£7îˆ–¢w\e|ªÖhë½Ñ&„Â7†�4u~­ýhYþûÙ #±ŸÒ1ú„=h.šÅ÷£1?¢}íîó]±)ó] y¡8Æ�dXÝ­œ…¸Ÿ«û	 øCêìàso´‘6ç:®°ÏõÂBî<Çô;ò÷¡u¾A£ùæ�J±=	¶åçÞê9Üˆ¾� FÅ¾]–u)R(I¿vÚ#‹Ž	¨gyƒsÙžš4rfjOôUå:ÕSg¥=†:WdŸZ–u1*61¡¥›ž<€í’ô{*³Oœ›yóì´‡«s3æfÞ‚¦ÏÉh…fMNœ=%qÊÔ¤Q†=yáÄ0¯þU%éé|#qº·›’4qfj>ýj~Ã^“‚ÜË²þSÞàßeY¢°“gNL(›š4vZò³<z]šqÛ¥éwÑJX¤é)ýéEÊQ6"÷ïý»ŸÃy(þhÕ"é8v ]¦óó�YCSPÉŽÑÌ ÆùÎh9†My8f'ZhÒyøµ}´S€QÅBÒç1§ƒêqÊ“µöbUÐ>L4jøô‘ûPœAµà}Žüt�º}Œ¥X{76ŸŸèxô(&WÀš��{	}œ‘Ò«;'£5–üÒç­õ6OKÎÊ~‚LL¨,IïÄ�¡qq+èÕ3S{`¹&* x¡åÎC¹*œ�špÁÅÇ€l~^J°.hÊœ½ì¤P–uŠ„Uæ‡¦ð/‹(ouÃäÒôvU¹YÏÐ)t“°· !úˆ^ÏÉh�ærY4KÀzbM£`—u!§,þ·‹åÝççÕaƒAg¾Q:^„NJ˜‡e#&%Ìuk`±yeáÔ�†-’£ŠÙ�aì}Ž¼î‹> µùn*1¡ìäx '§Y˜x](h¦Þ½Ö8ß½s[˜[¨ÁØ‚€é5¡;ØÊ)÷FÜ½Ž¸‘&æ8x Ú†Œ�{¸>Ç Üžf�rDpCÍN,d¡�µÇ &¢Ø¾7³+ŠEE¸\)‘XE€dRg'N¦	9"qä>)q6Ž8KC1GXÑ¹õ¯Ÿ�ö€¬ßƒ“gLJ˜ƒ˜ØUï]0t+Ïº€vÃ‡Á`‚˜Ï`ç±„3RzáMMêÑ%�,’B|¸4 ½+Š}£�¹ ‡á¨ÌÉl>-y�î7²ÞF„Â“Ðåä×í¦ñGÕ{§X^^½¸?úØ½GõÿßQZŒ6ÇgÀ¹%ŒE;n�´
+åm£—‡¢kÃS ä¥áîfaRãÐëšð$BÁKi¦¡’ìAén3Z…²[.ûÜ-CX·G‹‘á`ôñÆ0ˆÑþô
+nŠþÒÂlšÇ»‹GrÈC^<³‹†oz0ú‚ì8µBÓñIºòÒù‰l³‡dí:N gÒ‡Ùßï(ë	‚ÈÐb·$ 2—ew‘qðø¦+â~#k´˜;",¼ ö÷Ò)Cjï¤#¡Èô4omDŒ'3_%y *†dÑ÷¹™7ÑÀMÔ­*7™NNœJ@L 'Îä´¤¨0ßô.Þ¥"ûôyõ£¹¥éwãÓÎJ{tzJ?TÜDåQ7úªÇ�øàƒà¸RØŠò¬ó¹ÇƒÎ #×Äz }¾qä8‘�˜, w^ýké´<3ŽÜ¬Ô'y¤ê†i<äÒãGÒÙèä‡!òú�VE}èù xW(¿._*öHÌ�( š‚ƒŠJb{e�?£K£�|èöRÿ­‹<Â1±œˆâô’¶b7@[÷0ä£rp¾tÊo46n59æˆÃP®fÿ£~C_8€~þl�/1ªøcðÐgë|…bÎÍ¼UB5Àt,�w‚0!~1šã›š4�V‚­Ãclçf6™’8uRb‰ ±w4n˜y+(Œª¢ƒàæäÄi@'è6?¯.¤ƒžO?‡A¬:°»ôDï–€9:?×ø¸{Ä4ÿV48sZòPôk¡e+ð”#]S ¤óê_Ã#MJ,Å ã©bÞ±ä¨0ž*¯€IÇ,ÐxÈ¨0š…™å‘À}Ô”äC“¢‰½ÕÂ´!í�h°`¸í¢WØ/GåÇkB7¼tx4„mð‘Œí…áÖëBþMaP‹…læ€ªüÔ4ŒåWÌD†ýr�^A@'Bïe7Û°!NÄ&cý{
+ô2Å½â#ìÁ0¤H�‡G”È‘ý€oG—À$b¢ÙC`	ù ¹ƒ˜…w„kãÉc‹hí		ó¹î	0ZMrºGÊ`6Õ8À�0¼M7À¾!;\ÃS¢Lˆ_PÓ¨—š�Pƒƒ„¥å"xû˜2àHAÀíá\ÞkÌÅ¹Œ^àÜ@öØ¸5`%4Iä­�rÜHy†·†Úð¾txÄ†>ó5|�ÞÀ^ÇìÔøIs¸+ �wexjß$<y¼2t¹%ŒÃu9;\JûCPó[`”ü‹‡óïpè‰€`|wGë¸ìÝÑZ‡˜\%ÝuiJAd¶‹L.¦‰´9Xû¨m�ü+<4DOÉö^äãH÷G›9Œ×A¦<yß#÷q/dÄ›¢Ñœ…thl‚°r/WÃÇ Ÿ›æR…vhé¯HŸ#ñô¸8Zü\½Íê3Ö Ž¤<^¡5ã·¸µH^�‡‰!¸ù“ ¯yõ¯.I¿MDf§u�ÓáÿÔ4ŠAO§'?3>þ*ÑÏ‡qŠphÑ,`n\ür|Zø#2­Ì9YÏL)÷"Œ§E¸Ù§UdŸ<#¥»�M ·àýâã†q$WCqÑéÕ“¸>¾ÖäÄéxà8Qœ5=y 	×Ã“sÜéññË VN»–.Dß8HˆücÏßý†ÈCñG«ö+¤£¢exz‚Ktç«^jÃÛÄ•;ºùÞh#N20‡n¢# "�ü‰Z¿áŽr0ª‡f¡ƒè/VÚýXôKÙ1ŸÒ99‘›¢×|sjBG¢ó
+XÙ `¨›�¾r/Œ'–W­ÈÔvÝKÅ‘¸pü;²ÞûØaØ&S†¹Ã¬ÁÝ8f^ý+ÔÛ n€B<=L%Ž%Ð†ÕyQ"EÉº {Ë¯À"÷ZzB€¢5\­$½#ÿÎ«=úX•“‹¡)è xÊuÐ(¡ÓL;&š‚’Œv×ä¼”@*$åZ låv¥mÑnÛ†dsB£Ð;Ø)Õ¨Ø·0&¼ ŠÖÀgÀFa¯zÉ¸!&¶`¢;ÇlG:˜;}0æÜ•«ÃcÈÒqgôB«0¯E˜Åñ7‡áÀ"+�Ð›…É•]}A¸åêð8È¿\¨åQ"Ð®2_í¢5tÁñËœ(Âøk/¹Rt$U,0å™9‘ñx£b7ðÌØgÀošŒ©dk<.îEÎå
+x;üª�å€­q2_\a!nä8´Î<Zfný°�3Rúbîðá±™ìÇÍàH¬%’­Î­zbµ0qœŽí‚>`å ó`&qVê´|YÖE%i� ’H�‹›bîJ3nÇÌbä¹ ÃèÒO‘¾úU¿µ÷`±Aø,‡á\É—3˜à-h"©Ã~™¹'z\{(æÛ�R¢\ÀÜ¼CôÎBPvêÁè!’‡V´üåáþ¦a4øxUxøÆðÌ­afó0Ñ \ø¨py|Ô|Íb ‚®1»ñNA™b£„?uŠ¶âßUÈ1¡t(,°õ„äyþ›ãÁ8�–‡µ±‡Ù@ã4¾¿§ÆÃ‘]®P:;:v|™ý\Šãqeñ9¹)×GvÜ«—ùÃ{é�úo4ˆ´Û&P¸£,àþy'y®îÇî�;éæF\‡^ÍPX^†ïA³ƒ’€NEƒ³¦&�Â¿E^&¾´®³RGÇq�Ð#ä…(é•ÙÇƒžlLJ(e' �ÂC«rñ/þ¦ ²‰J¢Ú€×¤#¡°eY—Òý`š\-F£ñßèŠˆwˆ.>r¯ññKñº¹ ‰nªÛ4å‚¸vŸåWž
+G�‹O'¥•¤·7Ê™<ø`!ò§¿û9‘‡â�Vò°®èW¡Ítlï�>¹+zÝìm‘W¹ëžh°È‘h+6Ó‡X9¥{­ßÑN‡PàOº/íß>	Áì&7�@‰°½E¦6‡5&n�«$jâ¶tpí�#ê½_(ãÙß>{Ñ/¸D›€3˜/ÀA?Ä]d�ÆÍªÄ¼fb91›hzT’ÞÁ‘Ck 5ö€DÓSúã‹ÎLí©~/è‰R Ø^0´Äæ"o7[ÿzìmun¦Œm³Êœc!�Ù§p0ÈN.µâT�EÅ–g#´`({Ðl2ÿ‚Œ+O·1U8)w©ÊÉÃ_L¹‚ðº3º†
+W7LÃcxÑ>tvƒe@¥§Ëh=45.n³C£«»Í'pñ+2âÿ&Í›Ä~0Ñ�@„³€Œ-Ã<>X]ØG‹0püOhwV¸€CÊ�¢Ïnèõ¡÷íÑ"¾/÷A9AXNAÖ@`wƒÏ¶�öÒ�]Ûèe\#¤éö6_~Îsu7ûp+ÆÐç¿€K^gbBoÁuðdzIúpF:‰|›Mš7Åy@€#"ÀmÀ3)Í¸=+µ;MÁÅ'%– \
+A``ßˆ—+gÇBÒA7¤7„ÔCC ex=Ç€§xûl{k¸¥éí¡ˆ	‹ž`ÓÓÙ'ÍHéƒõƒ–ñt§Ñ±ëÜqqËé?t¤@^w‰CE"¼¨ÑÃ è'´€6AYèá7…!šþqà1òÓ-a<È‚@=cçh{ãPÙ??ÜÔ,Lâ°sÂå7„§}²ÄÔXè6�”¦?å.¹ý§„EwGoÒÈÈÝç|m;ÚFòlÅrJÁ/d�î´sÜ›í-ï´¿ ®X,�Ã�ÚäC=hÿ‚˜ìAâEò|`y\„;â±ô’ëK|Z‡ÙÔm½Íî¼áèrÌðºŸÒ‹„æœÅýåÖÜÔ	)ßcb_ë¥>C Um4þZ˜Ž�j®ý…»î P´_h^ýëè(`M^-<8¿a¢ÍÅÔÛlÃDI7=ß†žCŸMäëÓåþUšq‡­G¦$MF1Ñzˆ!	ðå°9·ãâV7L)ÍhWVÿ
+\b:$*\Þà\\èŠg w|fÞÛBwµÞ˜öØÌ”":	Ý›�xJ8Ø8Ã´	ÿÒÍ05P×ƒ„È}?üÝÏaˆ<´jo›ÞÂ3ü¿î ðiæb7°“E€¼twôÎ-šþ˜âî‹>Ä2£b‚È}­B:[d*¹ÇÙb�rVÅ q +ÇÐ�1òà/{ÜóD»ÝÍÆ½DµÙxÚ°òw>h7L
+hÀ±�oI7æQù	U2Û¿œþ‰Na�1S}mo�vh�oéÀèà'šj Aö¼ÊöŒ”§«rsP„ªÜlTë‡®á�Ò¥ççÕÃ±ÄœrY6lp5ù9ŒgMÞ‘\jáÑaù)hë…5yµ¡ $ÚºäxüÕ^U¹J3Ú¬½Ô #ÌN]ç*�•Ã@X¾yÔ–#±ÏT�ó
+�·ŒˆcIð,Z ¥2Å»xPS¾ˆó(›�ý	¤&$Ô°A;ûð�a ß-Ã\ÌòýF—_ú\ºa�±½ñšÐí†Ðÿüpó5á	ÄqahŽ¹†­ Í;¢çÁD®ì–­M´‡‡¯ÝÙÏÇ·|BÙÉ£ÓÐjó˜\¦^
+Üz(æì$¬¡‡E‰ìCè &n¹‡|ô–_Ê DÄ�[ÂñšTšÖ×f¨¿Ë /Ð4Mý�ç hŽŠxs¢�-RÄÎ‰5�¢I‰³i´	ñ50>¤@— -®#µl}râ\}`)€ƒŠ¹ºˆsÍ0fÞ:5i¬[WÌ&t‘Ñ»
+�&8jÏ„øÅPQ›^/pòØGƒÞ¼m…o€Œ|sºGŸ„6¢#—‡Ž4òU¡+‚€Ý_�×+néÍáÙ+C—¦aûa ·†é¸+ øˆL%²x0æ+üOôåB_piîŒ–uSè- FS³Í¯h1zÜäò!Fã‹¯íóùGZnZ,îÿd-ëæ t¿@œ�æRèN¿#×t	>Ì÷h%�­«ÀÎÃí�Ž†p÷áHôùÓíáe‹�Bî…kÓÎCùÜAF.U @ô¨-®ÃO†¼ØiQ@š�Ad´-wäW rBüô¢2û<[Ä�Â¢#Ù§=s‰S%n´ƒÀÎò¬x6 ;+õI°r‡ƒ¤‘ówøo)OM‰ˆËÌ=>¹ºa2ðÁAå{éñõ	ë9™-0ô“I
+fÐ|Á8ÌÅøøÅø	|ƒÚôÃ©Iãñâ,V'£=“�uú0ý§:7cVê¸X‘;ÿîç0DŠ?ZB›¹ñ5]ûÉ¿í£·pt1°(æÑ¶ÅÊ•ô±ÙCc1ì¡Ûs Û(ŽOa wËOt«�Qz8?õRD&‘Sð“5™ej‚ïŠÞ±T¬ÑL=¡Ð‹�ìÇ»ƒ}ðøühÓ´äOº«úíeŠúX ›û:?a	ù`ô`…tZ “Áœ‘RŒÖ°GcnÇÎÍ¼E@kV� D`ªË1AÆùã€ËU§ÐEÃ ÆOl`W�Å¹™7ásÎ«��ðäæ¬:ÃF\Ñ vr
+Néü†ñš”¼–ToZò�N0Nêñ–ÐÃéÉƒ Ž9­QRÞË7ZO³`7 5j¶‹-*ø7š£'B·º×�8�O.÷b?;EŸ_ú6ÓZ…ò›ÂàëBÏæa*àxKË¯ #¸u¨¸)½+zõ¼ÐøÖ0“s!žÛË!#ô0—»`œ[Ä_ÒDØÎöÑzn.ˆ½nR—}5xÎ‡‡,0¹×¥—ð]!=w38÷‡˜ðïà�ÏÕýÛ‚@ÇÆ½b“†ñ‹0Søíãâ—a‘,†ˆ„ÖA‘²ìO>^
+M2²�jhô&¼#…G@4p“æfÞLkãóÐÂ€¬cüÌ&Ö’¦æ`¸$^�MI§>N?áÁ`+yÄ|kjì]öâÈ‡mT½wÁºâèØ·\¼8{@%ÿ=èžBÓÑ°Ù¸÷F<I¨bó0™_qE€E0±u¨†9âÌ4EPKwT ùœ‚dQ(€éhÀ|^Bdm¢U
+*Þîã?`mÎñ½M+ÿP¬�áðT|®à#ä‹‡ôHž|H"ñŽô.MóÎ{¸”OŽ­ó5‡)zçg®V ŽY¨èe¡­ó�û«®Œ_ª1ó£Ð_~ÂÒ€ª‘V�hQIú ½Âfj[ P¾Âuzkx„‡¡Ã#_ ÷	o
+a'À„¾ t„‹cra w¸FŠb}ˆƒ–a�€�¸£U¹Y(nN>Çx*ýŠ=;ög#i]‘/`�”Xªñü>Ø”q¸¹j½§'?SÞà|ºNœ¬»?Œ<=yOè�ÖÀ4°[�[�µ'Ä/¤ÛÐŸý
+‡!òú�Vña(Ö•Êœ”à�ãN5W|øGh1Ø‡â`pJ}–•ÓÙÉTŒ³°®h(ÿö¶‰û_p‰LX˜åÜÙÛbéénƒ3[P%¶{[úÉ>#PHOCïD=^¥¿ñ�-ECAÌ‰	•
+¢xéY{ØQìZl Þ&*�6)¼•�¢_tþŠgÒŸéÃ°E”NA¯Æ*ÎÉl¦©Æ«[”Î50;8 �]tŒA¾%(f;óŽœ[ÿNG‰€Ëš¼Z
+s5n\Vç¦Ïo˜È¥Vžn§ñTà:0
+‘©Ê9œ�›Ùô\vRà:‹ÿxHV¨ú PåÉñ?ÑÁ©I£`1 ‹¨·Œ‹{qPíÝŠhúM¬áwZ²»eëü±�ã�§Ñ,LD4—…7†�-B)@	%�˜`��Ç]Z_î 4ÁJ¤é£|°˜sÂep,ûuâìÖ¡BŠ)%1Å7‡al+õ`V»h£¯Ó~‹1GÜôì³•#Y^Š·á_c»<-†d£›8¯ƒÆ™×púo¼öëý\Ý�GÅ¾�Ð1×“æq¼ÅÆÔý¨šWÿŠññK‘>­Cœ”0gnýëg¦öÄßxå<ãŒ4ü
+ZL„ À8¼=¡xûOk+àX‰ã„—%©)Ã¯4¸'¡@Õ1weY‚ãžo26n�‡÷ÓÍx6$îüÑÃ–èl^ì?zè¸»éÃ!„¶‰V ‹·…Ú“VÅ÷€¶_n�EÒ°‡Û.	w6“š‡)·EpipfnC‘ Rk½º¡Dø9hÇÐÎôsš´HÈuô‘óDÊ·4§ÐÈO þ×‡ƒ|†Äá_¢ÃôQ,¦»1½\Ö�àØ-üMJ˜Ëk¢b|kXàw0Œæ¾òo·çÿ9ý´ˆª®Œÿ
+v`
+h(ùº»q~õ/´ïÚ1”»óF,M�B; /Í2,Å(yHL=„B¿Ðîyõ¯Ã•Õ\I“™)…Ó’‡V7L™j§,.IïPÞàß eiz»9-qÀ8 "ûT<(œÕùè$%é÷kÔâi“.QÞà –9Tµ Õ¤‰xDô.öCiçdÜ¦IœŽžìÁ—ö~HÆOS,ÐƒtÞš›rq�·"û$�šþÿåÝ"ÿêï~Cä¡ø£U•÷µGà—ò¯æP–£˜÷lá˜DÍv}¬8„h(*�‘ø �ÒÙO<vÓ6zÑ§ò{*öM/”¿�2Ò‹dí¿ÑøYaÿß¢ |0A=6ày‘èÝ°:_Šh|2ÌøæïšÚA†;p¢ ò+\5°Xqe7bùµ2ûôÄ¤{W48£<ë|4E–öJ
+5ÑÍƒúH7žgö¶‡¡gÃ ŒOIú=ø„àÞ¦¡ä	¡2û$ý{”'ö¥s45ãÑËÿ2]qªEø,?9Øç(d{@CîX‘}:‡šœh±:ÎSšäÅh(à£AÁ±Ì¾¡Ýé|Ã[+°g/®ä²?hl‘Ï9) ÍŒÙÎO�ÈH“0DCv0ÄB“+Ãƒ'†“nýõÓÈVaÄäüÐä¦0äŠÐ¹u¨jÆ V°ò¶0ŸK5ÅW…Gf³¦ž�;F[0eôÌãm¡ÚÇ
+è'ÊüPÃše®µŸö·0þ:;�²&›¾"•ð½Ç‡€5î&�ª@?R¦Ÿ˜mHs�"a–ÒzˆR©O±ˆ�— {ü
+œùl#¾VzhQ©‰%ËƒŠ+œ…Œ`Ø½yõ¯Æ<âÒhP®ëß4áªåþ59qÖTyP4;òÅÀ©ô™áŠØÁoÁÂ8<lr|üócã^„êÂ=1z‡±q«±�tBïØôG.0âžèmhøíÑ‡Ö¾<t¼%ŒG—‡û‡ÂëBÛ|_ÄuA¿š…	8L4Ž#‘à…×ŠkŠJrG7…"ÿ„Ðû)ÞóÔC¼œÊù¼=„†UÀÛ/<*½UuBrñÀHÊY°ÇMiºO_99Xð/7â2®×í\Müq'×¹´ÑÆfã—K©õÀDtÓÆZíyvpAžŠ;Zøú+\¹XZ�ÚòHC:\zlŸS¼¬»u€„¹\Ñ°NÆíåYàÓ¢k(#X)Í:yNFküb]ˆoS™óÜ$pŠþ€»[’ÞÕ:A^%G·°4ÉÌæP5¿aReÎ1\Ÿm°=³Ù¬´Ç¸Çƒz¨ª%W6Lf®Ì>~NfôTã«£1jÓcé�J¨, ¾éT™tšEÚ/<‘ÿÓ´*Ú‡‚<¥Ùü.1;ñoÁD,ä}Ñ÷F› GeÛ}„�|(æ~$æG<d4ŽS à¦EŒÔÚ�â£Ñí£õø–œX WÃ¨Êc´o°}�òŒª÷n�¿Ÿ4ú¹ËÇaFÖ{½ÓØì×½,syÊ¨yŸÝÐŒÄÄÑ™éðý-n'„ž‰¥Yè–
+#€m5¯1kŒ7ˆ‰À®jzâFŸ¬Ì9…R4Î-8¢°¿Y©Ý!}Êg¼s´¸ñÿã0ÂB·ÑLèóÇYúdUnnUNöóõKÃÊÓ|“ý\
+‰¹4}:¨…lúì¤˜f™¢D–®•ÑvFJoÔªºaŽAFg¤¡³"^j PðŒ&thŠ©Ic,¥TÒ'Œ0¡¿¢Äºù¸.pÀ–aÞµ¡>?vØ,L¾#Z
+ ²ÿ¤pòu!ÿÎhÅái›.!’ìÄVß-ÃÈcÌA:�Ÿ¯çD6°ÆwGëî�6Ò=èÈº¯M�ýàOâá"í£·ÄG¾4•#ðKÞÿ¨½È®@±=ÆèþÖÏRá>€àŒª÷`|C�0¬�§­a!''Nk5^Ã£@¬˜&¬¢y8ÿt@°&ï(ÚsTÝ0µ:7S•nž’8+Š;A€HÒÈ¸8KCL%·P:ê4M7wà²x,@°ÆW¨pÁ2*z¾ÔÐ|éœÈÂbSú	z^»ÞÙ®Ï{R¡½·Üm`ÛÓüiI€òxi¸ëªðð…¡Áä¬V¡.ÿ€Aê"Z¯IŽvð�Ñ£/m£—8Ò)y‡èÝn*DpOô'z¸¬2M~æ¾xªJ©ø�óÄ+6<vÔý(0Oƒ³4¤ù¡{)h¥Çå¢Ë [¾ÉÑ¸dñ�Ë~Ÿ¬ôH®àå>
+•
+Ìy¥’^à8ÞÝé4¦s^@ptì›ýzçÞ/ÍÕCÅð´éÌ\§Ø&²ÿè§N‚^Ó%èB0ÊQ±”7a¥$àòIèÚW™óO¹1×{ >Ž+€ÅNÔ
+è´ÈÕŒ¶>ó‚/T–u	 †q�d
+ºiÀ¡	hÎ¹2ªª êAt˜I	eô.Ø"¦€ä:J'Á•}ˆKÑaÀM.‚{”c@I\2Str¸s%�g1f?ÎJ{œ¾w�¹wÛßý†ÈCñ§ˆV+Ðán°êulGÁÑÄ6b‚ü„Oë™˜Á,äu<ñQËšÜåáè®¤J+þå-TÊˆŽ÷RÞ‡;À`¥OâÙŒÆÛüJçGU©Ã_QÌ.1ß¡)ãâVÑÁ„­Ÿa'QmT#‰ýÄ»C_è¨ðúüèØ70Y8¨˜¡˜”XŠ«É1Ø=§“‹wôTP÷$ðÑ«mà1ú´ûC=3¿ðDTÌsüaØÛUg„N/žiØÇOóóê šlð½êt#�|4YÏN€•��ÇW/
+òuOðW
+µÅ­ˆkòŽXqŠa¥Ç�ÌÏ‹Ã8cÌ›âo˜†ËÊ‰s3›z;/Îë�‹[yq0S´	må�…>5‰Phv¯ &ˆ7…Á˜â‹C+¬qÓ0úÊð´ñŠÐéòp?&oç?¡ÍÍaøíÑb ´E˜Õ"”à½´³1Ô¸Cí¢W0à’ø.~‚=é ‚6?j£ÙäZ¿)Ðë S™A?ø¸:½%_ÜÊGêiÉt…2³ØL\#ø;è‰ïÔ÷HËG +±ZX/¤3%q*Ø¤ƒ?åC€â]@7À¤œñû,‹'í1�	<\‘}ÊäÄÙ "�S†�Åÿ©ÊiT•Û |D4£j) Vd©�¬1ÕK5ÖÝÃKw‘1nXKdÁõ¹Tˆ»+¶gÁ˜Ø×Ùày„ÇccöŸ°¸‹â¦?
+Œp0ŠmÌó¼‹V¡Ä	Áó"ñOZ‡Š«Ããx#´!~KãÐñ]ZÓìˆCDrBÇè“–D¼]C¹r75©ÍÿÖÚïYT4µ³3Ü	è· ã
+•¬
+W
+¿å€ YÅ5O­åÉQ"äÂ¹B½Ÿ<Œ
+TR¤Ü>Ï„5î_g§‡³‚VœÂ;ÒìüK;à?ã*ÈÇ)ç_—R,Ö>ÅÍÚDÀðºŸ‚t.X¤8Xeå™�ÒòT<<Ë3kXµOxzJ«ˆ•ÙÌ’wRžáHä¥x×õø9hž0¨¯×$²¥ùh>z82Fq‰Ñ5¬�BÜ_Ä•Å§òâZ¥·Û4tf3Ü$ÌÀ
+ˆ?L³®ìãiF.ˆ‹E¿ é3xÚ8ÂÙQ8Wƒñ¡À_Näõñ¦&Ä/âDô”òÌS“F* z8Ç,Dný»ŸÃy(þhUÐ•éyM3ËÇÆî¡éò]ßs·¶«¹Äëî�6;³ð˜¯ÚáÙX…
+jõë ìm#Cƒxb9yBñ�*¾ñ‹‚Ò÷ô×H, ‰6¡¨‡ñ+rÃ~Pò£ŸC4†ÕÝŠSBÜKêÀO£­<ÀŒ”b¬1'jÜãÊÑ±o)l5çÐIGUÎÑhô³"ûd³±ÉƒñBÁ¸9-ªsÓ„G· s•9ÇÕ"�'Ìæ²“òÖ^jˆ¹üä VB¡œ«ÏÂ}Ðä²¯üÛò"¹Ô«&Ö4Š@Rv‹l;ý¬ÊÍâ vz‚¤%Næ¦C3+²Oã@Ó3x`Ì57Â_Å˜Ü<°'bX 3Ø(Lw¾†ÅààØ ªØ&€ö"¥ Åƒ­(wu›òìFÁ+ÏWÝ-?3\xAhÂ¯@$8Ø2Ìá°+C—[ÃLè	@ÉEš†1çBpöÑ˜ÝAcÕq–�¯:ÉvÏ+Ç5B¦t’'Ÿƒø<èÂKÊ8‚÷Q‰Bäô`9{ˆ&ÈGÂ$þ8¸¶�Ðö>býf¦vWzË‹pgÚw—Æ+™˜O·iz¤ßs2n£õ”¬Ñ‘ã9Qâä`ÁhOçì4 Ý@\òj,ä¼ú×”eýG8ûÀü¼ÚKO°ðª)ý|¼�b÷è$–›ö÷UHG�åNJ˜^CxŒü#0ï˜ý/=j…öÇÙóù>/¾AS€ Žnm¢­C5Œ»I¡ÕA×…¼}ô&péµqîˆžÇÁ]á O6ì¡è®	Øñ“‡€z:ø‚\PÒÊj}ø×ç£=µxÝ­€h…h|‡jD½Íªêð°ÞWa<cc£÷µwŽ¬·‰ÍÈ‘èø0*¶@ÄÁuü­2@í�€‚� kb‘{4@Äòõ´À—Â‘0ý�[…d=4Ý_§¹ƒ}¸C0GìŒ†è·pA/Å€óTªø"¾®
+×ÔLK†W£ ˜™Rðë¬Ub	×ìpYA+‡j³nýJÒ;LH¨þ1†p=,y-<ÚÎË³ÎÇ¿ªÊÍáy”<ÛÁrˆTQD!7™ÿ“~·Æl�“ûtå¸¸xSåY¨<È�)E3Rz[âdJ?Ðœ§ŸÌÏ«ËÁ8fÀ¿¼Wà±y¼ƒ…ÈÏÿîç0DŠ?Zóòe]bv¢˜YöàÓ¢}Ð‡®V¿e¿¦Bö Ú^c®Çÿ¢³¢wzÚ(ë‹\äA…ªþe3QF/AÐ!Úè“�žàµ5%9ÆýØ _ù¹îŸ«ÎÕW*UŠ�ÝªÀN´òM|3~Å=Cgg§užœ8mjÒ´Fão�xÖdUN®&n�œ8[77óÆÒŒ;¦'ÐFš†V®œß0aZ²…±•f´ƒÖyhåq;ÀÜ|´;õ¯@ã › `
+ãðfWž6àÈ5çÛ~þå
+Ë4¹L“’@$Øj™•
+é)op>ä€^x;ÿYšqguÃäòÿBã¬R«ÅŸ\Ï@Ñ,¸UÓJ~#<=ù^#æåûp×þAá?:x=hcàÛA.wUxôÆ0 (ôpÖkÃS§‡]ºÞ-…iòëµ¡‡æ¼ªù‰<"lû¡ó­aÆ­a:Tô–0ÜÄÉó-®ãsþµÉèèK�´¤`ÒAI¯ÃzJ“Ñ<Æ¹P1“üªˆåßU4Ï¦Mñˆè ìÚ�YÆØú(:.7”ÙƒI0†HoÛ&j|`(} „2`Ö ‰Xf$ŽL…˜­ Md(çÕ¿
+ˆ|±¨KLˆ‰ôŽ©hp6�‚+‚d¡\¡¦Q-\³±ÎÒÞ±°ŽÁJs;ú`�tÄ¿�˜P­ê¬[FÔ{ÐÁ z`§×,å¥@^\°hjroôA+£�•4û…¡yëP Þ-À÷ÀK�æ+eÆæ”Ó¢/|@ÆÇ´•9õ‘ÇAY�Gy À.t¾§²rúØþ>\ÇÞ
+"õ0Tµíž¢?i#OK#®mÑwsX•“PS‹ß=£tET¯HÄ¦¦ ]ç÷@e	Î8,PÈñàì qý]S!‹4âj\RÑéæBÔ{×
+)Ç/+Ö`¯'Hòx>®7wZÚW³“8ÃœåS«\‡ýCêì@Iq„ÆÄ®UÜÔZÈ‚à¥TXéfsfJ*¬„ÖÞÀhÈ·•Ð±iýU_âZdzÒ£p™Ð,@k 2†Mp„èZØL}†TŠg JÒã�ã5!hèçÜú×[„XfSì‰
+Ì+ÑtÐäÅïÂ›Eyk4¥~®îÇ<Ã¬Ôncã^™’4þ !ò·�ÿîç0DŠ?Zµy˜â%‘½
+Ç#1»°~í¢—U+à‹ŽÑL¥C`*Ç¸‘�0Êû£�1’ØXŽô!&U
+ýÀŠ	xIº	b"vÐîn6ã¹Ã?b÷ŠÙá)ÌÀÀW Y¶	æI®@‰€NJ•vLwTÉä#ö 5øo*ÂóŠ�uÅT²¡rs·LL¨@gé«Ê¨´ò§þ08Å•½<2
+UÑà�‡å½p‚�¬júþ¸êÜúØÕEÇ¨“®9Òi¼4ÍcççÅ¾t®á ßœ‹:°ŒÖä�Gj€x’� ¬;!8Ía±Ìø½+NµS8RYÉ—h²ã¶g¦ð<^ecŽaÇ'ÇQGûTî»Çži%„â®>v²SôYµa“ð¶(Ú®	O\Z_ÚÃ
+¯ù×„npÃ3ÂùÀ b*/ïy�$iÊ°ÉØóvÑKN�ùÕŒy¨Q×6Ì2.P‹0KeÌìmCî.}°’¸ }Ã‹ºÅ.°œMéâŸRU
+…”Xˆ£GŒðØCÎ�U)I¿s:6nïÁ:MJ˜‡c€Ü;šc¬šœÕXxäÂ„â™`—h‹¤Ê9ÖKÄc9ña8eNFK¨º1ˆê‰ÀtWdŸ>;íQü�üÚŽ¯Êi�„iB-'7ÇSí JzíŽeVq‰Îž{Ë•±«Xìb\Ù
+ÿ•è…jq6ð¯=yAÐýL\tªe(¥ÏCíUvµGD€¤Ë±ù ÕPEA›’p
+ÉF/‡'+d·±ø+ÏË]€Tº}‘4eD½iä;£åaËiªq3d�éÛšÂ¶¡à"#hÏÿ™F´´Ò÷OÒ)Ãµ¾æz½�sâÎ-²Ð êRû�JÇ¿L•ëvàùpŠE˜×{GyUoq:­flübw}=ºL¾î>õýÔªj½øIséE>â¤†ÎÉlÎ5½’ o‡F(Œyž¤�ž�ƒÖà¦z•T@
+�Úf¥>Ž†Ž¸LH2Œ‘H0µÊ�™ÍÇÅ­·wÈˆ¡u�Gè?tNÄ‘æ	á•¨¡U[ÍÍ�£ugIzû§ZiFJ_®ŒkzÒ qˆ*çÒÉyBZÂËéš7?ìV˜ÄÁ&}†ÈÿþÑªí¢W¬ø�—ƒ»;Z—/¥sŽ€]Å +hç£¶ÑKêï¯Ä&v û^µL3•_°ç®èuìmç˜í>^„
+X)ÅukÓ @C±´l£#nêûPç|+Ïò“Ç¢(Ój¿‡½ùP-Ž™ÕÏ�_ŽzrM4•¡ßb%Ð# Ä+® …(‡A'ÑŸ�¬È>C�ñôtôdÐMËy´*Ïº@	þ=}Î‚ÒŽ€)vJÙæÀPÃã^:ÇP“P®>;¬>Ë¡³§¬½<Ô4Šá04½ã§Õç˜eVõ×ëj�ÎgšO›<`~^]•¸3Žf?úhÉ›w()ï´PÖ?Nˆ_@³²y¢]øÒ´¨ä±R830iÆ€k±e˜si¸d¼:<ŽÃsah�q†Ñ´‰V]ºièoiûè­ëB!²(o�"eü%Ä
+ÓI¡6[Ø�|�Q÷”øUÆ|³×ôLDé\ÃÖñÁ„òÌ<Û“
+)ã€�ªRÙ¯"ˆ¤°ÃX×çê~‚!n4¸Mó‰¸a$-`Æ¦ÐµXË)E $6Š_•ajl‘†±&ïHßë¥T7LÅVc½Ùü¼ÚVÊ,ûý6¦66Sü=ÏD‘Ï·X¼VÚc‹� `Un.7åFXW�zå²ô%ž�§ÅPNÊ\¨ÇPÚ«½OËCä40¢ò[éù@žÏ0"($�º Ü‚‚tŒ>E³ðCPö{m�BÕ‚ðš ãÍ-þ*H…¸Äûü9R
+Ta�AIšK3öUF¡
+ /0>P›gé†ÕÙæ îµsARÀ«�¡Ò·yüUêxEE�6©½³�JÆ��[í$‘'Yï]¤ Äð80ÜQx÷¹•¬¯e‘®cã^*T.3¤[$ñMnç©=Ühå5íøƒðq�—·å`nä�µìœœ8UU2Þ÷¬œiÉC}˜]¹Ï£¾’š.Xœ¾À´é¬Y©ÝÑSt÷Q.Ræ²æ›Ù_“W‹c�&DsQ7lŠúãäX¥ô¬TŸ¹Ž’JŠËœÇ7Ì±2çn=¸öóÆá¤�ÈøÆ¥éwMJ(«É;Š†BO•¶y±ªÅ¦ÏÐQmžq Í%é÷$Dþúáßý†ÈCñG«>³“�WéÇ0zž#Pˆ;P½Ö¯q‰1¹¨3ÊÛCµæ°	O²mÃZú=Ê7ßÄ1ì�Èp®¯;À•½ÜÊS"�\‡=>½Â�<1JÅ÷ûì›Ïéÿ¥Ñ>‹CPXpÓ¦&-{µá_Õ$_ªüâ¡ÊöL¿�‘ÒO…‘g|tfÜÂ‰	e8~s3›@!Ñ”yõ¯Ÿ›ÙŒ³TÇø\Ê[ïã\àX„ëy¨ªåE*G²¦Q-°’mw]yºEò¬:ó Oä,~åàU§%NÁ1>èÊç«ûšŽ¶¢vÙÇ×4Š¼J$àèŽÀŒæZü@l»¢’jx_üe²¼§¼õl`UTás_¼Ìƒ¯Ã fa"V·U(é@ÆëCOH‡3Þ†`¥ÁJ--q×u¡à†ÐãŒƒ­VÎ÷÷Dos:Žû4RŠm‡BÂÁ\¤ÃOm£Õì÷Èg¯Æãµa±ÉØLOþ<9Ý'š}ù�Jç|R¿Ú]5Z7a¬÷N‘…jTÛË&MÄÿA²ž­€Ñ†M |ù¿ ŽE¶h:Ø6¥Á•àvž¯S†5+«…¨ÁÃx,Ó’‡ ëWÎ³èel ÆÏ§%Ãr.4šy®¢/zjØöNÐÖÃº°lXHžª$½ãœŒÖ
+¶ümBü"0 `âùyBÏŽ÷$PSxg.š†Ñ¾ËíÑ"/N¥å<Š•Y¼ë¦0ÁñðÒ
+ïü%Ò°ù_}- Åèáš»·Jqùª¯�Ó]]!Á�QqB|EYØs�Âá€9±³èE”¢u?pYÍ3Ú$¦–Þ°¹`´Iµ’N7ƒJû¸«�q€å‰< *0DÏÌ·
+ux1s_ÍŠK¼âó¼ãúëƒ?H(á°"…:³¡µl¾âš(¦§‡LOéïÕE|Tª¨@Ó1|Z˜‡á•'%–¦cã^äÕ¿K¹Ø‡(•£1‰{‰ä‹Ö»øÐz:FiÆíÈpTpÂh%€+6:Xõ]/Ç£�-°Ey
+kòjƒÔ<ÒäÄiXœ%U´[l�éw+ÁäÉññ/¨ÄÜ8Éë^>[g»“Ê9·s.Æ‡gÀ1˜‘Òç`!òý¿û9‘‡â�Võñzò@•ÚdJ¥/'÷pÌ.´#Œ'¬ªã6)‰²·W•f/À~-gð=‡Éx~‡'ŒÖc<¢•L9‹[ qEVIr;©æ\ö@½ž¤xx–q¯5²~×Z»Ð,/z\ œ/UHÞ=1¡jpí�ôÕQõÞ¥ßŽ·@Äê)¶@CÅÌÔ:'ÎaUn6h,¢^fJÅ©·
+TŠ�A­ ns2[ÐÏQ€ý%�fâRB=àžÍ��€‹5«¸ò4bå„NVçfqÀW„—Ï3^ùÖõvŒ¨žhà¸Ra®»ØsîÈÂkªs3ç7LÀÈCcyTOZlK�Ì«5Zls"q+§œ°ªæéUÕO.šÛé�	g~¸hÂ«³
+7Ìèø±g(³`è†…¼%ŒmmƒxOÝjR}exðªðð5¡;|ªˆà �ÍÃ4_ù±]´†#ARU®Ûì+E²�Uo½bá5¹ÍÓc¡¨*"±Ÿ¯½ÂÞYe<Ï€fŠûìö•’¼*‹—P%v«9ŸÿgÔö_¡þ[ažxè†$‚h`÷àPÈªœFl—f´Õ\óGØ+-í×ˆÄÅæz¨Õ.ÕPyrôÅYøš€1ô‚ŸU9yC/5Ï)S“FWdŸ¿@ôåÎŸ–üœ²r:p$œÔÐ2"�~:‰�‡ã´ø\¹ÕySÔèÓ*ÝÖ2”¶
+e4 îbË0÷Æ0°y˜ªõ°ÞA@(hˆ‡én i/¹¼5��fþY‹†>ŒpÔ1¶ÄŠFÊ~�Qœ¢
+DãèóžLá¥6TŒ½6çÑ2¾ «—‹Çì«JÕ&ˆ°k=wá‚ZO§ÒÃYÍS˜œ]ªÎ—x,ƒ´Ð•/LÀñFàO#®;UÚâs­bö±×'¤Y”óÎÄMyÍ4î„£¼€ú+æÙ¨.O«Ú;=2mTìœv�Uj�JÒTb‰"Kß·xc||Ë“Êh…èQpx‘U€ìŠ~!A`‹›â”.²eòP+ L“Ô×”X…ÞSi ÔŠF¦>‰Ïð\ÝÍs2oÅM¥·XTjò@¬„�í§=Ê-&%”¢ŒXž­,ë?øŠ
+s¯àÄ³Ÿ+³�ã.¸vª�YÅM"7ýÝÏaˆ<´jœ[¡1Òïø¾+z»´aù æZ©ð%2ÛT#¾.ÊîE Uò,ª;ÀZHËJj£ìØ_ZW&·c™�Î¾Ëý«Ú?Ð©±šÏPU÷œûØ:J¿Ñß >UÆþÄsèØÝ€>``é{°¥Ø?‚²°G3Y/ãÊŽ‹[1!¡ÆŒ@IqüÐH™¦ã/c'ÆÐf�Ž¶J×À�†hžÀŠbKÑ&gŽ=¸áŠÓÂšDO3¤{ù_áµK,\ÇÖñëŸØr4û^»ØÒ=–+˜‡#WŸÖ]eä:>ÊŠæV7LåâV[ 7“³PÞê†iÜëyqÒ²¬™é¾ÆFx<ÞböÍkÆ·	_ºjðúé­>ž[øÞ¼žïºè+…âïõ•Ž±ÃHopÄü*äõ+B'ö@!¯=[„YªÅú²¸+zvïc�J(ÿƒ
+Ùê¥Ê0>kj¶qsW‹RÞîy²Ê‡ýNU_¶iqmXÒ–žZHTµ˜>.ü³�K×˜•|%ßMCÿ•\ïÝ€=t,›2zÖ‚D>ËŒÉû†–H‚ýÁJÃ‹ÕyzÊ3ž0ÎýÓ[×JI*²OÒ8À¶6nÎ1 *;¡ê�ÐHé´š¼#=ûÕ–3Ó¬±ÍCB³.ÔžÚ»›M÷¨È>�[«ç4¶¢s¶^çºßÜú7×À åîÕÞéõ„i‡|ØÑZ;¡í·„	ÿ	mÑÍó–ßúß†ÐpZIíó“
+þ[æ)PÒ>ZOÒçU;î÷þZ>c UØøÆóFd+«âN¼”8,²(š­ããŸ÷yü¿ÂVa�8jÞµhõÚqqË¡oüèÊóÄ'UÅû6xÎ$`Š&~e4\ÀãD�@æ²œEWÁ9ñ\K¸·è*x§ñœÅ\}ì« ×‹„ÀÈ�/×Ô*á?�w>@Tl±µ{X@ì�ÏÙ,êF-j5m¦%Ç�Á¹åâ0DKJ}\ÃÝÛP[ŽÁŸ©n˜¬eXã°à)ÎÏ„øÈ­ÄDÔäUió)ÿR�ÞhÜf>è�*¤/±ß—»â5!€xªª]°û€×MÏÑÊ3lÁ¬Ì[•IÝ´*'wNfó©I#-;ïHKEIé¯Is¼q«f¦vU•=T†ãw�ùË†¿û9‘‡â�VEÓU= Ó÷ƒ/�„µT±Ö�|€9­óø /C®Ý-C—=bçÁ+ÁÊ‘¾„–œb„ñ¢ïWzf+�6©Zò>°²§…È~�Þy1-ë³¯ðÀª¯û=ÙÁT¨ÀëÏˆZŠ€lÄA•cü)]—+ØŠ�	óÐœU´²2û$-&•¿À
+ÜCÄ0ÎN{ÿ_…u}
+ÄDA8EX}Ž!QIzG‹2Í=cùÕÇ¼ðìÀ…G‡ÎM\Ö·Û’žO,éÒô¤0ôÅ³äB‚†o5¶„G ñ�fÔºör½žeŸõ×ÙvUn‡-;é@	;6`š ,ûA^>Ik	˜¶3]’ÞÉŠ®§uÒª[¶Þ:¸o%ÜÓ——ß]]u÷ÄgŽÝ32kË”ÔiÆ­}6a­íÐäÝ½pI¸�fozÁú¡‡¾ö®ê™?†tø©M´
+$(8¾‘�¤¶ó¸T¾–8ÄÈs5ì9"î³�ÃnóñŽ�¾*@W×!A~¢8"Ð%°ó67j`ºïè¯š3=%¿ñbh
+p
+†ì«Ì8Uæù‰×”Ñ¾ÃÖ µ²Õ­«[¬¥««”E^æ�¾ª�Àša$1žÈWqy¨ÑŒõ¯X|¬±xþUöMÀTdótÅ¾ž§‚H™ø9ôX	2‚H‚­s2[(¬ñix«²S×iÞÏ 0–$Xgç¤„9S'û€§‡ïÒ8¾úp�­YIPï†Ð¯u¨zHóõ¢÷� e*öhÈµZÜ¯]bvz"?Øhªj�s5ä^lEiÖxÅ›žV¹h“Å”Æ¾æ!¬J?±‰Âáu·æ+çÙ@ÏGí›¬:MÜJÔÄKß@Ä@Rô,ÆþwÓøüÔK¥Þ¼>-/ØS…"}åk€@Ó—¿sÔÉk’‹÷íBLhŸå6ZÝ˜éØ“²wÒ¯_«˜d¥Uö«÷®/´§ÙÒ�ù2 ;l”‹û‚\ÒÌM¡fZFjg!Zž§ÂK¤Tn¶Õv³ˆ�6@9öÁÊB6L(M¿—ø¯Õè@gz‚¯¾]�[låWó�SŸ I¡½ˆžþCO˜š4N“ž#4•y)¢Ÿ›y#Çkjò--Z9?/Vç>ÎóXHmý<:ˆûj®ëéÌøç*`²©4ýnU¿œ0+µ;;CäÿôŸ/©îünzG´ôþè#¦­žl¡ ë0¡X9Ì¦’Ä×|
+ÀÛÍÎ»¢WåÛ‚­€‘Äfâ+)ò÷öÑ›0Ê6Ñ
+¯-à‹P¨{<_À¯|DÎë•¡&Å\òÀuÏ)hùÅ?b†ÖÙA÷ÖLÐ/¾À¢&¾,ËºÍÕ`ÝGøŠ>;i‰TÉƒl±$[×b¿Á å_üÛ³ mº?ûTì'ÄmÉYIKïo¾tÄÑéÒæÅaËú=µªí%K´àã+DÅ®ò«gMVåfÛÔä±ª- ²ùú¥†�ðGÐð¥s�Nr<;AØÕgÙ0¬C-(¹X£Cp[_]o–+à…‚ÎZsÐÉbs*ÎlYÙíÅÑÿ0_eÒ•ŸöN± ÅŠ¡o?QÏ*½w‹ù|„$bŠá/ÎxKß4Œà -�Cq»èå›ÃPXØ‡?¯ÔêŸï äè«\á½ £¾P…Eâô¥Iþ¨UÏ¾Òê„Ÿ=®´;$¨Ó>o*‘ï½ÑûR-Ág�ç»ùp+V‘�Žjú×g�blÂ€s5ä‚­ÃºŽŠ}#	…œ”X‚!ÂÎC1`ˆ¢ÓTä¤öÿA•s:ª¦ôÕåYÐÎPÕ|hd!Ê'Ù8yyƒ³1zåÎ=°2‹JÐã/½q¹ýë	’X9¯'ÏYX`ÀW­÷Í¶ztM”.wµå˜$Ìµ˜ËÏýBKk=«\ÂÏUãÂþÀyÐ:Ô¯Ñ€š�xƒ=-B	nI“0²E˜©D
+hðtzP7ÿzÚÈŸ³u;|Xõ)[WÅæm;z»þµŠ¦ÊuZSlˆVYdÆV/ž£4+†ÿW	YžMeWq_áx[µJËåÐ© / ’·à_Üæ^ð;¡íg^ŸÜ²’­˜ÕT€!òúª·Õï55iÔ [t»æ4÷+Dv�Ç§�^;‘#yN>õrÊ*¸ôµÏ¤€ï(¯×ê±Z¾u¾SÁ¢7]èÃ�oneiÎ½JÓÛ�‹{qš*‡³'aŒE&¬ã•GØZ±£Qç)}éEJ‡¼oSaxÇ ø<ª~íE@Ö mYÕ¶ ¤/xg1®ñËT'y=@	¤“püœŒ–¼µ'f"n:Øç·Zòc)p	øÒOTWg(xfJáÈzïÏJëÊ¯t!�÷àÐýüæßý†ÈCñG«¢Ñ^üß£ÍùÓ‡:x! &Q1�+ð{{™“¼A#Kû!ü¤¡ïj¡ÉZ	b}*
+˜*Sòk¥Š¼ç#E*Üú»�âbE}ñˆùÒØtÊGáÜ´bg bŸªÀ=ó¹Hçªw½€#q}KÒ;(ûc'�Yiæ«xx­¾ú„2ÝŽÁÙkËæö5è[ªD§¥6 Ú ¢Áh“ÕnU‘d_LyÅsý¡uËžî¾ é-¹§¯˜4rÙiG‚w�P ï�+ã^ù·YT ªˆ}æßWÎ7æøæÕF'AO€ÒQ’¬÷ÚËìH.î5y”ºÞŒý+N±ã¹‚�ú44·*7µ¦Q­		50lrÙcë\RQ°®¢àõ	ç|:³÷›eEo�oöÅP›²%•qNš‡É*<¾'¤q(º-Ô\
+›‡©l7“ÀJd×!ÚµñØãbE!z{_?ˆÝ¦Ù1Ú™©½­€¦/‚–¯©(£ÛÚQã«Èz€e |Š_¤"½›}‘_rÂ3þd	¿´¨×3§t›gµâ'6nˆÄ±x¾|¶Ž>à¡¶šò�»…�&ÌÃœ²�¡Ã ÁïÌ¯È­ï�‰S™}"ÿ‚n/�cu�h|°Ò3nlA–£MXð/vT‘}
+Gúð¸Vm¬‘„{<Û¨"×Yr_Ü«Ù'ó 0\[è!µ;kMÉƒ-›o»GÚ`áiaïä´FëP�ÓûÆu%=ž­y˜OÔÁ¿úBr0n¥þ”õ¶•òÒÄ´R±rð5iŠ ‰Â�¼~¡8ãPÕW¢ÄJàƒ+ÐJÊ§x�–T…ÕŸÅõÆsˆéUUñ6,Xµõ6È^Ò²žUÜ%Â€'†öûý°X´•§RÊÓ¾D¦ÍKZñ‹%{Z+Üiõ�^4	°Shë^’Ž:%q
+=A³›´fÍÞI‰¥ô¯$)pßCßà,^„fyd�h´Ò€8Â‹há$¸Yà4xâ€ÊœZ•ª”"•Qº
+	285ileÎ? ƒô+:ŒtüËŸj‹ïäÕá0h5 üYE_«ÒÜ žˆGmxÒÛAñÍ4�;³€·†ÿfA;i�ÍL}Ê‚ŸãªÐÄ=6Tk<·Û”Ä©*}ùï1±kñ"×ýÝÏaˆ<Zéc7�³‰‰SÝ€øº·NZ7“«˜ÕO|€;ÐÃ¬ßøˆLå§�Ücp“m@�ý…šdô…ø×‹µb!½ s‘â0QdÏYöjçN.´4ùO®Ú¾âªâÛÍ�FÓ‡Õ±YþI	s Dt}…ÒDU[ú!Ì˜_C_¥Kk}·´c7›ijTk�E«žm19yõJÒÛWåäzº±%€äæ@1jòŽ•–ïo1¨Ý;®hv–ÑÀ1CžP€ƒk<œ�àËçÚ”"8¸þZ¥{œmÆËüÚÅ6ŽúÚEáí-bçÕþ ˜k.80BûêEö¯qÌ“ÝbÇš…?>8‹ñ@ ˆ$ª§°�‡´E—ê†ÉZœ}'þ°
+·þ”o,3Ów†Î·¤y˜‚“ƒe¾:tmFƒ›  28VBêa|¾P²‡HÁµúÒwÂuøé1U,Ò‚Èô
+¶ñsT€ÎRüÀ>¤© ÿ\�›j“#¹>];FX™ß˜í…fGú´µg1`}�f_Be±?ô¼òI	¥ ¢Wz�àxð¤Öl*Ï:Ÿ6ÁLiMù<,-‰	U±�öÈ¿O†�7&mî•�><Ðô’Gt + $'‡saóÆs°Õkçj!ækç7LTtë=–”—òvCêÅ‚ŠU´­‡Bv=·k¯Z£ûWló¹4Îa«P�—‚ûa	€GØ2Rø¢ùÊÚ&Èðz}}�£tË�^ŽF*ð£çÝû"8#êmF=Ù©UªßÕÄâ:�£ÚHmå£¯}•º8Á¿èÈÃƒ¡ð#­¥X¤â&;•:‡ú}>"/x®"ÉBã+& È‘ž˜P¦äÇ·áø^DZ¶Ì+ÚùsÂUUÄ;ŸÓ=2y„J.w3Š½Ç±jØ>F„@‹•!Ë}Ù_¤;ØÐ{FÇ¾¡0µ �è>ž	Ž.FHâáqŒ¥#9ÈK£CÓT®¬DGp>}–.Á6þÇÛ$uò`Š/à9µXÌ@­bäþ‰Yà
+
+	kc‹�æWÞà<«Po³ìcCT³·�Š;Y½Æ4’‹ïÄ¹¸
+÷Y�âÉ‰³è´À=½ý`!ríßý†ÈCñG«‚Š;ý	¿*�¡Cß�úDóèA­àæ½Ñû¾€Ö²�MD~|{´PUD6ú0¬¾µsèêjO£öÉ=äƒÙ÷È}2æë€]¯öïÐû<(©SE_
+šš4R‘�ßÓÙ<?k�¥k½45i´’Ê'x\:ºæ!‹V†Åf¬†âWåæ¢ ôU4�qáÑA�Ûª¢ã‰ð,!Î¡fü°Ö^€Hö/<'sÙˆAË½Ð±ùjÁßk—ä^F`ÝUaÓ††ààë—Ø0ìê³ÂÛ7Yœ��é­»Òp“=À+ÄÓ¢w®”Ý>SóäðNSÁ®¯bE\�‡óz¥ež‡æ¯Ç‚áºÏÉ¸}jÒxY«ðæÉhÐºBÚ�Ôb‘ŸÁ5èú|‹0[ã~ÐøEZü¸”ß²Ú«m;x=¥!PDãU¸}ñÁù9ˆ¯¯F¼A¤O»…·ãJr‘»¢µšå#¾à5õÔÌ¦³¤b[à~�F'¾¥€_S·Ž“o±ÊIÒÿ¨ß`ns0¼ðz>¾ (€¸ÈRoƒJÀìØ¶ñðã-ãÅ$Z�‡¬—¨` �éFÀåkQÇ6§|º‘Ê’ôN¶RÖ…\Á!ÎP\smqÏ8,'ŽÍØ¸ÕÜQEì/óRŸ^3­§1»
+þì¨tx”…�7†¼¦’·š†1´R›hˆùˆR�Q_¹ÿQ{»Y9«;ÆÑ{ùæ'�Â
+ÚßKà¥€´žÊ×I[iQŒ=
+ä¶q,¿`|üó¾tØ47ó&åË¼‚L5'ø¦~Rb‰–ÕøÓÍéQ™ÝË
+;<;=yP¾€žö-²1Ã¸5ÌS[¾Î22BX>XÊ}X•D:Ê_Þ¤8Xê&_Ç
+�Žcx*iÒŒ4Ž¢jËÍ0l?¨�§‡ûÁÅ½¸ú %Hâý¢×I­ýºXë,[è§—e]Ä¯´<Ž{ùÊžÀ(
+Îók©Ç^JÎŠá|!W‘»æÜ:	°.±u“ÛÒJŽ¡0ÙêÜt¾é¼¸*5µäÅACÐ³ÆÊõÌ›•ö(·žœ8Û¢u'«hpU8›W+op.6¿æÝisº.oT’~?®;Or�¹çÕ¿û9‘‡âÏ—Tö…S1k^iÜ¡¾@9
+Û!z—_ï�>õ°)Hìá“µöªJç^¯G§å´6È¯7ÛEk0†}´š9¿Â>”ùõ9ßlÿ5ÛÈ_�YÅµ6Ê�ÆSåš^»UVèG…ùýÊOlc
+°¥S§`.° Ãê~�/gÉ’±oOQŽ J1;íÑ©IcQ%_«2çh¯�àÎJ{pœ�ö�¿F	UKl#Òø$£Q¼û^ÿ�Ù[`Î²<ÎµR ìÄº²óåó=áŒ†¡—tn¸Ùào…Cø¼òoÕ¦kd±Ã.6ºê–™ýKt/6€oðI¶ûž`%dÆù 
+MD+yS§ÞNÁ<YÀË†ÓàXc-”<èŠÐ©I	‰Cª g<Å'}õq[ïl›ç˜#5\ì°…MSx•ÍrbÑŸ«jt½H‰íH„zü¹ÆRã_öw¶ª¤ß±ÓWýàvª³ôáÀ?WÎå¾²=Ä^m ij)%+ º£_a¬øf{fj¬(²öõ¦1�´FYÖ…p
+@��Î¿�”e]Lk³ø››ÙÑp06Jãc§A-1Ì‘¦�Ÿ}`HÜ×b¦Ía©¸(Ó’ŸÃ³ZtLÐJÙ7cñR0³ªt”�¾ÐÙ@ZÓÊ+·³´—�œÎßæ7	#ðUðO²À¶åè>CñŸ…¾AÀÔGN|/×G1Þ¾‚ˆÆ½¼¬¨‡Mv Ä«¦�•¿XSuo+üÛÈ�­ó¿
+ƒ:¨[Á+ú8m‚hy2‡ˆyfâP«<ð)Çk-ï2.×RÑo Oý'k¿‰^'â_f°­Õò‹5û}-1D]ÔVHÑÇ˜ìÇVÖU³“€£'ò¨¤¤•Âãí€`\Ö¡u¾æ=èÎˆa?g±=3µç„ø…À±|y79q&'BñÐn_ÐŠ‡D;¦$M²õbên†E¯»?G16ø Ó1¼>:Å)•9ÇZvUö‰úœdIëZÓ(*Ïº€w‡ZmÕ´GU4Àê¯ªTòm*›S®è¾«ròÀe�q²ÆQ¹¾×ö¡çðŽðkŽ¬iT¥�}9Ë)Å"ÿ§ÿhU_\°óE=îŒ–ù’‘BIKg†V`µžøp_ÓAu;7*êf'Ûž‰–aKÛF/b1î‰Þ.²!ÖO8÷žè.…aô¥Ø}ŠÊím�é#›¶…Xo°€c¬—K¡æ³
+5Še¶Ê¹õ0¿�Š (q°Ëœï¥•a^ø– ciÆ�n}¤2û]iF;#yuµÖüQ*0’~šÅ7‚M¶ªã	6ˆZ‘}XKŒ­Ö�¡B:'˜Eåûå…÷ZÞY]ÖÓ×\ÞºáÀàê«Y€+ûa—6ôz¹MS�\ŠŸ€¿õ×°®:SI”'ØaÙ§.³ð’«+²O±¢£ÃòŠV—ö˜O¤‚Ý(²ü^ó>¿±*—{{(²ôÖ0îß"”`–iðëB¡–!û®KÌNÄŠ?Ãñ^æËìó5�ÆYyVÛ+" .‹Êóí½BÖlÝ[�f÷xiA_ž²¯ê¡y¨3hËM¹‹Gì@wI÷PEÙTçs'WóaF�UŽÅ&æò<}Ör`„}Vå±¹6'kÓR­1>ª:Þ]A£«r³VXŒÓe*Âp‰‚yFR¶tuÎÑ6¾-òzr€WC2bžZàõçÕolË–YÞ\CDl£îG[%“ïìb�1tl€#ê½ïµ}<vÚŠêªÁg^�N“âà~4½äF¾ny11Û=lØJÐØš,Ûœxúd¢£m-˜X|Ä~-�ú2ÍÒSËyŒµ¢î[€3ËËPòïÓNJŒ4Å¾Mß~VUO!ƒN|¸‚­l°>RÆÁ×êá¦`�Š¿}æ:Åc'”Ð§�'$ÔðŽ —¼qAÆQíñ�ŽÔƒkïr@›Ÿð¬Žö„´*~õcÄ‚9îBs®ýƒñÓØ·4i»ÃlÉ-šb?X	´© †ÇzIXõL£Õ*�ÕÒªÿ%�à] >àÆÞ1±DÔoö¸øe<W¦8€VB»maµØ°Bö”¦ß�vWå4ÒúwVý)sMt!ÎÏ«èC9KÒïåßš¼#ð.À8,ðZ™óO_fkfj!>3L™»Ø"Ý©�OO:£ŒVã7aÞ¤ègš93µ;Mê.:�ÉéZIaÂABäO«ÿîç0DŠ?ZÕK½ÑÃ�Å^š¢rVX,úàl«ˆ!…9Ê îÆ~b”S¹Å÷:cXTo|ïi¾à`»èebÂNb?¹Ž
+Œ˜•àÛK@ûPÞŸ1~¶ô¹ïtÅ°{ê–LÊ&#ÌW1.ú¹ï±gzò3ª[ÕKAû3&%”¡Zp:®xŒû*œ¡¬óGf¥vRç7Œ_V±ÿ<Â`:©ÄTz²?*æ¶}ŒñŽ×/1Pó*Ð@ölhbC©F/
+[gtè|ó#•|¯½ü —Äb—°EöûÊË¾Æ0
+ÍdSl¥xN
++*ËV®\¹¼²ZÉÓ°9x³¨¡Ö³�î ÁUúo—çe¨ÐY•ÇÌxŽMÇ~ða-Èk1Qž¦�ø0ø0ôÚƒ'}•%­s´Oü‡òv{ý@'•=ØÐ]Ñk�*ù‘kÊƒÚ¯ÅGvá/©bÌ¢¨6œ«ö�ùðØHÙ— Äz¨¦(BT|ˆ­MìÐ ³ð„;<s¥êÏVÖö’’ôû±9 eEöéÈ\¬€dÇ÷ŠS¤Õ,²²ºgÃñ´‡H-ÔØ¸»("uª5;lÎèÙ"•ÙÇƒž*I×ÁÇ·! PÕ£ËVUÏ•ØC,-öS•Ö^†7©®Ú7ôgšºÐj6® …éêm¢ôyA­³|lÄUÉËµÁà¼D¿//Î—r²úx,î¯ÜKÙ wÅ§Á·à¨€ê»àO…˜ }ªÝ7É*½ñUçž`™ú`Š÷ºü46n�¯±¦(‚t�Zû'žD+¶ÛõEYxYÜ$1Ói^.@�µx}9^ßk¡´ ¢/ 2­köÄJC:o¢†¶ºŠõù*“0PU½ÛÊÁ´ <T‹ûTº³7.n9'r  McºÍqÚ8ÖY‡y…½ññKiÞ‚&â¥41=´2$Jœ
+µä ’‡ìö¡×´ÛÜÌ¦^º�Ö8ë`•¬¬Å³¸UHD¡Y�½2ÈX–u¹$¾Šƒ%{™¥ÊZá�žL ›ËÒÁT@¸.Ï~šQ|öÃ¿<nªœÊÙ‡!òú�Ví¥þ0ð°¹ýß@%Š,ÚÖº‚ƒ´�V{ F‡è=Ü‡@¯Sg©1ÛµîÏ*ˆŒçˆ±+�
+Ü­½)¾3ZŽG�›í é¥\1•nÌ{ý¹Ü!ê+==®¥"P+”kìá‘î–Ó�}AºaZJ ;ÖGUwfØ·¿¢æš@y”Téò!¥éwAèð3Ržžš4
+�±:7³4£�ÖŒR©20ZQYî$qÉñîx`<! P�çU= ºûób­N±¥lÛlã�†qÀß[��QvpI0‘�WÐlòi–úÁ1/œh¯»Ò¶WiŽR+Àv±ÉÊs4Ë©ð!Pk�’ßØ.O«üÝ‡à|¤Î+Þ �6Ñ‹|-´ôâPâ^•b°r¸^O¬�ÖƒðaL;úÅ+9 …”‡®.û�Ýk�Ž}Ýl}´=>† ÝSák+´+Ø€4µdäÏ™>ªFÄfd*¿hËS·¹�_UåàW_�B�+ÿõÚÚìGd€))ÀÇÆbô&Ä×Ì«%b�¿XÌ±àˆì°ÏóóêzðŒ‡W•g]`‹\ç�Q¢©ß’ãÌðÒžPuÃA•wðt¤Ã‘&ÊSŒàóÍa¶`ÙyÁ‹™s€z7²¬I±Î§ÀX�V&]­ÙÀÝý•
+®y¥q(3]ZYQoø8Œ»y*Qõ½gk„|Ÿo¨DÆ^˜²˜þÃîƒu �•-­·ù­Ä¡š�Àñ¤ÄRM&~ÀÚ<ÝxEz/ ÕP:-êq)-ò;ZD+	8>¢�çÕ¿Â*�ÖÛì…âqB´ÕV/�¬eVöªxÑÀ
+Òá•}¢_3ž‹9ÖIç™’8Y)“¶ð–§$£nœù¯ø?.Åßnr&K§õ»V�V_†[cìßzM×|5‘“kNk†[I„´äY{ZÄWÊäËtâ´ä¡ÜQ‰]V/éûˆî(…àjñŽ+ {`ÜLB0M{Lµ‘/fƒç)ÍhË#©ê`7.[‘}ˆ>ÂÁ§&�„¨¾4;¡· ‚l[5‰´®8'tœ4ÍHðløÞ@ããÍúÒ!£c×[uè´Ç¾ºÎO«þîç0DŠ?Z]ð%àÑL_‡h£WÔ|Ê–ãùÄkHºÓ¨í­ôd-�÷&gÁ%£¯��£m¨¼9.Œû	ßdôáîhÌÉ7®uÛèÅVjÀÒCzØè.vu‹VtúÚ§$Ø£•[t‡¥zõ5ò�Ï”iëG�9Ç¼üµ€Î³Z
+¥öñz²uì„¹£m¥‘(¤w‘~[“WkvZg ¨¦QXYU6;í!Œ°(›“Ñ
+›‰¦8­³r*¡ÃÇ‚QÏ²`H8ÈûXv²åkÙ“»ö2CR60¶@$–�]sþ�ˆ®`Ó”Mí,Hèª3Í\ó+¦›q|MÞè«v[ÙìÓKÓÛ«*ûPÃK=«”¥…ƒÞ-Rªþ—8'í¢5^Qûìþ†¯Í„Cî“ƒV·¤îÇjFÅØb¸|ñ…|-ü‡ýÁž{º—2ÃÈûØ —×æ¯¹êeÓ<‘–»ã…;FŸx”®Ž
+ùZe§h«Þ¥qÚO´t‹¥œ %#ë½ßWø°:Ÿ¿Ž¶Õ±ßDˆ|›‰©Q¥÷ÁZÀè>¾µêÊÙ@ Èƒðzt4šÍ<Ö¿ºW“w®ˆ‡ñ h»"7"x¥UÐ=YýÔµ’Üÿñ­¬î™Æî­`àIFH±�v)å•àÃÀ8|Rtr®/i*ô�õ«
+óþoð¦0ˆ—½#zÞë6ø²&>âóÆYÞÚ Ê×y|¶Î×ôIyëg¦z:†F*÷JÒDÚ‡ÖgÀ¡�ÓSúó$ &þ¡†O¿UÍ™'A.°�Þî¡•}�š½ÐßFZ¶p‘^JBm¥ã?-IïdëDÇ½Ê€$k�_¤À¶ÅTo3‰nÃeµ]6&v-V�UíÖ_lœ6q¶
+æ|á‹ÐI
+Ã£¡ [¾ÊWšöb ø(…�qt?‹zRý:.n]aÊÄe�µ‚È÷}H“wç�D4Ìa×Ó!Þc”ˆÉnSÚËp_L„gæÅ- 9¯.ª¨�€žçˆÐœËt®¦È„1
+�í‚º±QÑà,šŸDƒ-�]ZÃJ¹¦ôÃK1G%aŽaÞD:¥éíÜy.'WÃ�‚´Òh¼/á_Þ‰$Dî^þw?‡!òPüÑªøöto1µo‹´²�Ö×”/<P6äg\b_óËÀß½Ñ&:6¨Bñ�¡ÓŒÕn%ƒXñU¡ä'x�ç˜s.Ì´£e‘‹Ý€B_ˆ™‹ø -_6óëéÒÀ4®5FæÞè­[·tìÅZ"#à…å�îR�‹•èÞ &eÞÃðëL[µ‰KYÝ0Ù*–gŸûÀØ‚¡ì™Wÿ[2²ah83µ;Y’ÖÉHÇq¶¶”=^YŽ`+ê£v^ðÓ
+[ãV	:×^j{6ßoìT…-Â:ÁDÎ‚­¼yõË—ÄÃ¹feÎ±¶ó4«îbcƒŠ*Ïº•ç,h/aš¯ù\šÎ“Ói1__Ly7Ÿà„h‰Ï?h=7Ë4,íƒwmƒiñÆÙuÞu›É¯fRd£ ¾„.××,Ò.�Qä¬|�¬óV'õ}E‚|¬ KÌN[&Rq°t G/±®Œ×_œFÑ‹ÜÕq² Çìk%yóªz©?Ñjyªœöî½ªtâÕ�‚?B°x–Ù‘ÖÕ“Ä—*:Ñeª•"«Œy<²€¼ƒƒÏg"X~ò�Ásp�Ÿ|íÎê†©lxÀgq$þûmÜ@`KX‡‡ÇÅ/Ã~zž�“8_Ô©›¸9ÍÂ[Ó’¢]ô
+®‹"½Ù˜‰eÊüØÝÊ†¿ëcÝ ‡W˜ñ�3,9ÄæÛ¢Q±k±«ó&Á†ÀeçŒp(O#)¼HÌÅª¸Øºöc&'Î¶:¥q+uúkãâVy5ÔYi�Ž³rß€:ø~:%q
+Ð‰ÝÖÐú�Z<e=†}TìÛ4�g/ÎHyÚãj¸mîë ZPNQÑ÷.šÃ--q§
+Ñ@Ïáš¼ ä-£’Û‰¢¼
+ÀÛ,ÎÉh�dqMÝZ©LÒ=x�e€V‰¥è;Ü6ÞÅ{DBß×°Võ¡aß+èï%
+ù½E‰Ÿ?i°÷ƒêÜŒ)}xÚMá-˜WÿêÉ‰3ççÕv—ÜÄ-Ágë½ˆ+-@Û:?Eï´Ìè™^¥V®iÍ‡TÊ~m‚��;A»MNœ†šðÀeY—zqUn¯ƒþ>WwóaˆüŸþDþ’/vàkãª¼ðo^¢\16h‰º½ÎY°‡bšïxñsÇGq™• £Rð¾ÀV ”ØàÇá ìÑàÛ'ª&j«BôV]tÐÖ³ðZ„YZ+Ö8ˆŠ7î÷�¿ÊºÊ˜ìÖˆÍ¯úw=>­*6NoÇiËÌ*I¿ßjõ'<Ðù'£VôðšFµP+ìúR™}’†ìêaæ7LÀÞ.²¼€t[22ûD4hÉŸ%ž€ñé<qã½v@ÌÑò>.°iÇMÌäú6hI‘g…�­mŽ’=ÜÔ°òr›¬|§©�Âr>ŒéæÊVöT‹·,Io_“w$O…éSDAKÞÂB%}NPQ"oß-½)¡‘Ÿ2XÜ‡‚™C=	Q‹O}î•09 ³©8Ì¯“é1‡˜GTÞ3ò”‘½c¤*­¬½GõÖ¬äšê�ïSÕ×�—ÏHö±ÈK%(Ròˆ�½wŒ¶Ðú�°«¬Ï;ÓÛ4 Ùšgü:«xýôÆ]¿]*öx±VEƒìñŠ‚}UR¦HtKˆï='ãvEŒìò4/¹ÁS?p�l@ ·ÛS“Æ->Ö
+/Ð†4{eÎ?�ÝÌÔž6š}žÑ@¾}©k„kÿžoß>¬Ê†}ŸnˆiâíÌ«=âŽeYÓ1„ÊªÜ%™�Pcæ=¥P‹”Íœ’4©��¼€èó'èÂ�Ñ2ÚdÌ7§nÓ3¶¾‰Udå±}‘GNG:ƒkÿ 1ÛÏ”äX…í8ŠU6gÀ'¶€_ÛXD@P'ÐÐógÙ:)ÆãÎla¸eØs'\Mâ]€AJ”¨PU·UÃímžœƒÃöP±†ÜÑDèÀhÅö Ë+Y¢ú<mÀ�JvlU=ŸÏ<•cRb©†n¶«x]Ž¢äñ4wù}Æ‹êhîr5àå%%9Ò)d±díAZPì=º«êØÚ‘Ýký®ò°6ù8-yO5;­Ó´äì„oÎÔ²hŠs@ÁiC_xFJ‘G‘Èß†wÿÿØ{ð¬Êlí¿a¤C �@H(Ž£c›qÆ±Ž]ŠØhR¤+"‚‚ŠJ‡P¥
+R¤HMH¤�„Þ{/Jï½wu°Ì÷[÷
+œ¹ÎÌœ?ç0sý¿Ïc®÷z¯�ýîw¿{?Ï³×½îçYë^|]nÆ “¾)^…mh£Ê«õOO.Vž+m�rX¾ˆw4$ïúEv“ŒÉç\$P®ªßïò´rGÀ+O#�ÕzñVn–ý7‘_Ï¾Ù×/ùïø£U‡˜Vì'„ç½Qh5XF{¹ä8ÙÆÎ¶4¹«ih›ë @è°‡ìÁ‘× ;¯¶‘ë…`+°YlÏ¥Va|n*Z+HsfQ/4C
+
+c=°�˜zU°ðHÎÙQ*%˜N8,ïf¯”‡U÷%¯k¹Ûyöùd¬—Lâ»˜ˆa•�À³õèˆäb5¥^5Ðõsx
+T1üÏY¥s¥D?žý$4dJ±jØRì!Ô#%ú™¥¦ÐrwV™0Ó(ÓD«‡D¦ÇÞzbx-kãJð3k3«˜±åÓÍUµù¸Aážæ…»šX¼+@ÉG�Ð/«z�;ØW°íœ«nªt‚f^¸£\$X &• pŽ-Ü&EÓ×G`‘ÒG]ß,´Ç›WµÉNb~iU	~®PŒýy °½¦[á#>aîèé%à±`½Tr×…b<ã¦�MŽÙ”‚BwÐz|
+£dÛËÓ{=z—óJj\gÓäê‹üyqãGQ'ÚÝr5eÀ¦1¯ïíù§£�oùkæ°*ØdsŒ9/¨4ÐRÞNt²Ù¿�p+›6·JÙ‰r˜D\q8>viLÁÉãÂÇcÖèeŒvféüP?¼h¾·Øç“á¦ +÷FOGÐSìÁ÷À	áE¿Ì»ÛúÅåwl½RÓã+eZ(žÀ�½mJ±W²Ê„€“§Žè¬ÈÉ×Tó%íö‰&O4ç|œ^P`ðñv–8Œ}Þ*ý�ƒªöø£ÝàÞù.tÃ—Û>Ï¿Z)çŸaó'îÇ9-á1ß&˜$ÎË‹(…ßÖ(' .3JxÑà†%M(4DÊiëÙ]`†tuö¨ÌÄ&ÞQ±‰aŠ•]Á“.Ñ#zã@ªNìlxÇN®Ù£[�‡.†ñ-KôO†ô±s-Àó¥’"G•,y@äñg$J¿Ñ#è<ƒ’�€xœwÉ¤ö3†cØ`0p$ïô)ãzÎhìnà²ƒ/N‹½šÆ	yBq–š•Ò²‘ç‚ã!h
+:Ê�sý ¡óX�˜Oq¬\¦²M]à‘‡ˆët^ôJj…h"o¡îëä¢�RK<B[á}�¼ÜxrTMØ¨þÑJ{‰=*�Õdä�í©ÅŸç2x¸p¹1i1÷¥•øƒ'qÓ¹Ï_ òÿé?ZÕ×žáŠØ±$âÖa;^‹lìxmžÂ»‡ÂïTúa7Ã»nh¦—ÁR½¼Ÿ”D¹.bÆù¨N�…ƒÍÙ<bG¬ó¸×
+F±öUƒpÌú¡Å�B«ÀÊú¡…
+¼¼Š¥m£X~ËgáT~ÎVC°�ÎŒºkÞSÀ76<qpžý<hØQdAXóÉÃÇúƒÃ”lh³gœd\¡±¸Ù©%ÄÆòÈ0¶ñ-‹´v£:×*<Ç¢‚kéÁ{féÜ¦R^ñš¢Î“¶Ô¸õUC:ì3ÆãŒùåea«÷[ªÛ×miìQÁÞ¬¯l©¦ÊYÙä-5,ð•^NÈ‘<§)ÅËÚ,PäG.ØgÀ„e'=>¤¡ŠU5v}?ÚA;GqÎyBã¬+¯H$í¤Ö³l¾n|¡]­˜ öó$VŽw%$.Æ‚±íb(.órœ^UÐ¡ÖƒZñaF»µSjHVïŒ.–StY“';ÇžO¼ih£/Ç·ÛØ9ú–üÉ¦nùlé™Š[]bÃÅH½Î²|oXói@é™�V¶þAìjZÌ½86lÐÑÉÅªÃUÂãeœv÷y\ˆuá½ÙÜ�ŽXþ°Í nªd¡ÈóîÔð}"ìåmZ{õÆî×=›�èJG;Í,��SylRÑ×ù]Øð�™¥a}y‘éÒ1Ü)în¡³HÕ?+N}'Ê¬iI¢%Ù,b‡•s1×ÑTV�á_F#÷Qµ~7œ= §’|‡%DvÄeÂ8Ã:•¤�®œ‹v|D¯IÀ°‡Fõh¸! Åw¥öÝÇN­ÎJ8–_å6zhÃLy7)Ü&í¯ž¼ÒÚž-Yó¨T©�_6zËO`–×£äz„þû,Ö4<I1«ß(Îg¿"iW:øÂ‘!wb�é@3çuZèç&¯òìõµ¦5Sb§³øwjñçø®º~EôÍue¬"jøÔUg¡~ì±0ž‚™Òß³•\Î6­d4ÖË°ª¾OE\,þ�\´!˜…ôÔQÖ2qX	®�ýÃòn‘¶s§k’ÃÇ†�Ÿ[
+*- ]ªJ)V=¹ÈZÛn!÷Q†%¸ìº@’Ùx£9ãf_?{ˆÌÈÈ(W®\¡B…¸ÓÃ‡_ßß·oßx _¾|ÑÑÑ�7>}úôß~“;wî
+*ìß¿ÿÿsÿßÿñ[ªÙú�ø{€"ƒ¤¿­ñ%xJWåÐ¹ª€S˜.–Kþ¥Eîå°jž!îKNJC0Ä„rbºaŽBKÙ‰9}ÛŒù¶ëy”MB›<8V«“GUàÀª
+¶» B“ß‰›ìvK¸Ú+bÈpŽé.E¢’‘sxZy(x@´g©e™å9ÌðVÆñ,Ù¢‘
+ºX¢r�QZˆ|ž'‰u�Ñk–4?aXì$˜±ìH•N¶
+Ñ�Â+�9§*XT�ÎJx<k°ÀA!/*Zš$ï -vx{]ãŒ»ß°ÉXm-kÿB¿zÅ0”/f•±óX:É³Áõ‚M¥¿�Péó˜”8…ÐÀ[hZ›–t/‚&Â2+pb»-×a"ÀJiƒŸñ‚)Ú¿Q%Ýá/«¼"ÛÊÖÃÓÕ1�¸úØ7+k•g?gèk±=Ä¾QæøEK7q Xé:fô‚ã‚&¶,{ìÃ¼�ïÔ!k‡¾¹²Ëý¦,‘9|CË°ã\-[„÷ÇVa¼<==¥äúK”‡Â	µ¶Ûòzò/Æìãº`µh…n~®Úñ�ãçÓ*ÁiõËè•ûÌáÍh©©¶ (“q¸W²÷X`ÿâ¢p<èI›óZ¬$ÖE¿Ï®áâ3´é1wOŽªTqN<.¬¥$7S±Æ*Ú¸Û‡= �ÛáùDŠµõC‹À}ÇgYÁ;­¤cóiÆøˆ^Ã,6i£Ô›»�…iQ É”î
+÷¡«
+§¬™{;,Ì¦vMqÈæcyñ©-¬—ŒöªX4€ƒTBð’ïþœ_¹–Ó·NÂk€iï,ÓRãîÈî‰3‰OÂ-3œŽY¦IÁL~”{LñFâ¤Ñ`¥�8ÒÉ<Žßue¼~¹.±ÓÄfµÃì5—yf)L…•vªƒù5¿îú9òÊq Û@¿´ï2àÔVwÛa«¢9ç@ÏPËðêF;ºiq'¤©'þ\¦=±œŠ¯O-^9=ö6×…³@÷ˆ.š#}GZv�yÀ¯éó´Ì,UÐ’8¬xôt|olá3�o)ZØtö¸$~qR‘÷èPºƒqHç2P¹_,Õ “G0V®Ìßoo"/fÝìëg‘‰‰‰qqqøOù§?ý©ÿþ‹-š2eJ™2e@=ß?~üø\¹rMœ8qýúõåË—ÿÝï~÷Ã?üûÿáŸÃRÁbZô¸JxüÑù#&ÑÑ
+4„è]¸VlÞ-Ä«¤kêhœæc]Ì¹Yh.ô‡aßa0ß»Ä‘ðÐ×C_	=·7­U¶ÈÙF¡ÕÒ¾Û�Á÷˜Ø6aßzß.¦�vƒì…,±H~yàšå“®
+~øÑCÇÍ	7Ø“"?Æq‘‰Ýc`ó(ÅGtU¥ƒ‘^BkBáÁ|Kþ�¬HVÉ¨©Å+Ì• Š´RŸq�/œÑeÍ<w 3ëå#á&žð¸ý5C½�•þc-ž> %\’ r0öyC{�•à&³“ã]ŠæÂ¯ð]Ì²d™ŸK*ÚœGø³<{±É4…+ ôÎIóîy'ì4ïž>àåªÙO#ÐQ X<îEO`®ƒ­¹£‰%)„LÂP@Ü8GÈkÔ²�±å0Ú+ç9Œ˜A%ÅnxŠŸ¡Ó¿Ôª�ºY�	 ó" Ñûá#ãVk¹dH£�ŠŸßqÍè÷×ô­ò×ÌÐ¢»½´¨Ê*�i:î!¸Ba';1e89ÜX Òó-]yäÒc3±p_üzm¶‘þ#­õ÷ÖŒì¤%-R•Ëhjh#Íî!Ç &ž	ïÞeô&ŸÒËpI0¦YÁ¾˜U:‡ÊU¤B¾hÞµ„zÉÕø–ŒÞ¹qÏ|q‰rÏ…ï`kŽç%³
+s�™…� [ÆÔ¬îÆ~wiÝÂ“è/ÈÑÔâå”Õ;	ËŒí¥µñ^äÀ$z5dÎ@¿d–Êi>ž
+0°!;MyuWRÑ¦ô>B”\¬ÈÂ·$§cµçL�!<Éç eÒÜdKÉ|Žêâ‡šžü¾ˆ#Šqñpv>’òÛHC·p\=}•“\ŸSåšñ©<ýª«”\(o@îs<ƒô)·ãå&áb¶p™w3·ß× õœ³KF9¡ðg}r^Ñ\ôNî‘¾Æ�ø¸†ä¨Ú’¾i:ó®,�/=ˆ#€×�3)ùtüä� ©r^ü÷Ç§¢q88ÎˆÂmÀÀcÉ,U 'Yñ`‰ØN+Äá?—©%uñ{t¶4-@ìšPx_w…sZƒ3ð»¦éÑ‹¶¢›ppn"3oöõ³‡Hÿ[»ví‚È¿ýKNNûæ›oþ*èlÑ¢…ï?räH(š;wî±ÿþ¹t@§k�y®‰pÅ0v‚Œ^”ç#ÓØÙÓE±ˆXE¢'Çq vkàõ \·\jcÛñ¨;›‹qÉ6ŠÞñ»ÐONU+HÛYrß¶…Ö€›ªWxÞµC•/`ùü„ÛdÏ5sÎb,ISÄµ"Æ³Æ~M	^U`¾«´1t�w’ù”Ç¤s¦ È˜V26©è[08¸¡2"ï±ª‘±¿Áº.0óø+×ð=]}Î‰ëŠ…ªØd]E‹Yö€q›A}VÂ�ûÞ	v62p„¡ ”ÐÉ]¯Ûäî7mf|ä`ø&ø¶nªbç7u‚§Lq;?C×ƒ�Âu½¯ªÌNø´6Í‹qö"›Õ‰<ãžJ ôç±«žäÎíc�ƒ‡ýœ!4\¥e£u^¡ágX?œd¥X³ŒõM˜bg”ôBœB¹ b®!Î‚`Çæ¼êb>Œ÷¯p“ ÿm4–!-<Ó ´T%¹wû(òÜÛöŠ;bDaÊ”	ø­®Ob01Ý°¡‘R˜�ìãºÓãÒxI‘ó²JCv¢¿¦—14tÕ¾Œ’Å—k]Ø•|>|}¹l}]ú…§ûv5±Š-àæÖšæðX¦jyY=l^0ºôþ€¶J,ÒÊsà>K/–tÑ´¤õÄyô‘û“ÄdÄýÊW½@†fäÒ‡IŠ–Æ„Y`uÓbîÅ„‚Pªn_Þ*öFÕÁ2ã¢ÐAÉQµr)ÑOÂ›’Š6I*Ú?àz6ïù1ãÖsñè<%�ßUé5-ö­—TŽÍRª0q9�‘.–p¨IŒ²“Þ·ÜÆ<ûigÌ; Â¸MÜ!ö€b=¬¶rKÀO	 àú„ÜŽ§)@z¦«ä¹„ ¨ÔÝ‚è68�åä`½Eä>ê³·Vc=ñŸ“CE=Ósx¾µªóW0ŽÛ©<îÓ¹üKÓ�€Àú¤È�x®¹BÕ)HWÔ9 T¨—Â¯3¸qØ51 qO¡µ8í3 ¾„È¶ÓJÆL´ ý€c––­§¢�©36 >î‘Ã2JÂª$i­/æ6¹<š�±76|<·�¿�…™Õ�&’ªünž¦Ô¢­x´ {�oÝ D^H¿Ù×/É_|||xxøO?ýôÝwßåÈ‘#%%åúGwÞyg÷îÝÿÙþösž‰õótfOg°s‰ŒN
+áœgÿõº˜e€Ê(oo¯:�®‰íJÚ¯iæHüó‚”–i‰êŠôèös†&¡ðDOX€Kb3á’&Ø"Ë€óxžTÔë†t‘>‰d@ÕýbâD=<Ad§x²øˆG¯‹T”Uý¡t\«8lªÂú~šûž0¸€-â +ã[¸ÖÀ…‹Ób~'}•wLÖ5¶6{ëêå¦ð ÙX`£ºæiCRï’ûíž¸·…¡¡)”5Ã»©’a"Û¦ÚZÕ ^É6,rãófŸÇ­¯Úöü{þ#€vñ}¦Ô*Ý˜Ê£
+Ìå¾TFvŸ· wÚ4´³yèàõLR/!¤â&# Îx¿À])uë9
+«;&ªêz_U%î†íò’yLßÐ¼[T¹8ã \u8Î^�´SŒ{ŠŒ[0-›òÂYø_�”žÏf­¸ªÔW+û‚;ä°
+åÚÖ^YEžÔãQÍô×/‰ždÍ.{B„'î¹¤¹'­c~¹BF°»Ç²aëà’.ÜG¿Xr‡�EÿŸ"ÝŸ±.¨b0ì<áŒ€ Ý±ê1{çëF Ô½ >�ùëÀQØã¯’3mj/áé·oÏõà‰Àc#‰c€ÝV�¦µ86¥XU¬7 å9#“£`f'mèéà òõ†)ï¯-ãÍ#±a‹SŠU¡w™øHÀ"—á“¨œ�û¥»±ÆbvÃ�?…°Úªú¤È6<¹“‹6†I›î39#AFM¯›ð•\¹ÈJ+mD4vŒfàW*�$�vöfç´p(Ç_“wÈ» _¬ä\äÇJ“¼ª˜–)�T•r¸qÒ&fn²®ûdR.s*àÕuY%&`j½>£.—Õ†ŸËõXI—ˆOp0FÌRÒÖ$)6,ïo+’´œ*>¢Ç¸B£@=J-ôW€Ò†ý#´üIí�Ì¿€‘�»-ïâÒô‚iå¾ø"JÎNãÚæ�+4w—€gÇJÉDÕù,ÏžÔÑ�t=ñìðë’uµœk,WháÖö»;¨«ªH¤ï¼ õ/ù¯ýû/ òë¯¿¾ãŽ;>þøc¶�µ+K–,¹þéO<ñÎ;ïü³ýÿìç8‹ŠcÀ·WLi»ìŠ·ß‚€Øa­Eè˜ÓÌ®JÍè*‡Sà¢7þEL%·75Îí®Ú0´pä O±”ÌˆE`ò[5‚ø&¡MuC³x¯Z¡ 
+ë™“©bG†VJeô¬§Fzp W-äH`”ÇŸO]õÎ%ì€ÅF®g«ƒ=q^çÎ$"ó™>‡¥/‹mÁý3�2�‡N)^™'“‹W™s'ôdÎfr±HYeÂàØ(ì'{œEp ddÃâC7Èƒ6‚ž€#À·ïÝkq­O{ß6¸ÜßÚô]áž|åàÇÙÀjçYñšÇ,VvÖmvZŒ'¿À:ÙL]Á) •ký9Aã±…­pûzü—zÅI›NUâØ:eL÷S0{‹�Ù†&DvÀ §D?áu�°Ÿ<æZÚïBg´Ò <G]þËyœÂ*ö¹C‚­Su¿KJG=Ï†òM~œ�²ÂKkuÓ8=Eÿ6	môGÞ[²\ë¥gþ£Ë:¾R¤¹ê‰™8i©~ãÆ©0>d¼WQP0a½Ô¸&9”{…¡¤T’,Pç!•-{ÈÜ6ÀJÏ¸á}ó+Öøt–w“ëÏãóÐ/¶v©Eá%Ì>UFÉ¢XTULò H.¾ƒØqÍ3{2o§ksþnÿ9ÞØzp‡+ÇÚc«!8“£^›ÑkrT]àd�³h:ýu[I,ü)Þš([‡qº	 ›œýXZÌï�9ŽMÆÅ`áÙ°ÚL%î—Né" ÌcÝª__/¯i8œI=`ŒÉƒX Äám|äŽ%V�!¤úÍm™²À‚„ÈÎô2§òÂsœV™‰[ñÖ,ÞX�#A’¶`ÝKRr–”a²›´óƒP
+<‡T†ÀœXï_�ÂëÀgð‚¡Œó*Rà²Ìü´j`á¾öúÜTòÖ‚¤V¾3ßj˜�$ïNj*õÓ/¬Ý’F@›æ–÷(ót=?*Ù¢/u¶�yÀñ+h(<–qáãqåu|NûC¢�`úÚV�mÂ§"�«âœ.Q[—oOq
+z?Dmž¢’
+Ë±3œö­S¨û>½qu�)7ûú_‘ÐÃòåË—-[ö/ùË_ÿ¥éO·çD3¢:]B·_Sv<kÀ£{HáÏ¨jvŠ'hk:¤UÅ+�Bk0¤FÀŒƒt8ÛR¨[§hÚ[+Hy#´YA³¦<ðZhØžb3±�Ê(Ùî–VPkç¬tã\ŒË•\WHS�­s˜¬¶FC.zŒ+[Y!Q­�³>?)ÛÅc8["YX-0†3Ñ“Á‚Ø|ZdPidþ…i1÷Â#ÒccÙs÷˜©´øUU‘ð|:l)¬[ºý53¿@P>ÒiöS[ä`qÃsÆw2s½­ŽíìnìkeÐÉÙ\X »Í·ÀJÎ—„¼Ì¾=HˆlkÁEæ�ÒÎgTÌÝç´¿Qò£…òb~1D*÷°%±ÈÛ€ ·ž‚&i1 py„Óbî¶Ä¥"’‹Õ˜RìÅ¤¢o¤–xÃ›Y:7ç·0Èð$'ÚXZÍ­õ¢ÔH2îCs©ÑpÈWòîe):Zß“t"#„ë-Z43eIŸœV?Ëuß×²u;•†Hj`l’ ¡ÉÑ0°Hü(	ŽrX	Gµ-ÙçÖ¦¯¢jDO9‡’ff{60A™¥óaý2J_¨ÌnÊUt\4Àf\ï7Ú&zýµ·e°ç-÷|Bi8/Ú+¾
+=EwÓt
+_‡�ÒÅ€&/L"Àá<W‹{}í nh&°èÕ½%^±'‹ú2ØÂz-fˆ˜¤×GÐ¶|äýÂxÃhO.ÚþN(<0>¢×¯u½¡é1w‰þ‰³£ô '¤µñmè/>žÔË÷ñÓ)Ñ�%GÕRŠ@�ilåWÔ§ïJÿß4Ü<»D|½÷¥¡ºú£yÔá^PcJ±j 2ÝÄOHU¾mOSHÞÆx€Õ*ûø-é	Ðq¹NM5Øô¾kz÷U~«„q¦+*l§žA|¹%./LK‚z	>²€[éàJVÈVÃ9OÓ§�i™Ô«˜òò‘–×9t¸E�í¶Z©Pð"–ññÇx)g®®­ÍqŠxŸÄXÊ,�WíŸ“nâšS¢Ÿö'È»Ø}£´HŽª�ûk|îK³¬¹*šhbá<A.±|ãLÂjG˜Å-3*’Š6ãGée¯Ñ©˜áK4ãBäù)7ûúß‘àãóÏ?Ø]¹råúžÕD«s�ž’­ÆûÂ†ÊIRxvœPÒ
+xù*/l Øå?$¯-`†gðÍPvHÉ¡­µƒ4«C¡Üì‰Dç¶($þV‘=0'À®r=¦µƒŒ–aÇ]ö¼F0¡j0²nhŸªÉ!N«2µ›1³@°*Ý›€¶WkµÊ¿<Q™æï•v‚ó÷TZº—;W1ÙÝøx|ÄÓ¡°í§UPµ<®£¤x:cÓ¦•,V¦ÇÜ‘{¶’‚5ž¯òXKT¡Ãê‚e¹æI[[æßgKË òpg#,;êÛtß‘®†�Û>4|äÓ�í+»ßTŒe£3.é3ýÖì2ˆ*s0žã.æ>#•¹s}U†‰FæÆ=8Á5²2µtMà1ç_îK‚áUa‚t8)˜‹=á~1ËÜfRÑ¦0b‹Ñ-ñ04+åñôŽW°Á"l,F .j`y‹R];§ÊS®÷~Ü-6*f§,okë¤'è EU]òòj\6=È~/°èéö>'Ïw¥ô“‡¹2„Ú©œ=@ã) ¾ŠÔo‡5È�ï‰ýÁ¼ÓDØÙV;wa«É%ö*f.…ä»V£³‚5;8I¤#ØØ\ÕÿviqÅ/Úþíõl'ÛkŸ•äŽÔéßÉE›06Òb~Ç•ÓžJ½±)VU»Ò,´^ìžö_ÉwÇy‚°±\?ß‚†àq%iÁÂÀ2l¦Å–¢—S¢ŸÅŸ±yŒÈ6s~à´¤/M7,^2ù(5úÏôà´Ø20ÎCW
+mï·Ø×ðD:Â,s0ÿªŒ’Qª	…I‚µ‡õ§–xàË,UpLÁ©t ‰Ù×,ë&.L6¿OnZÊiE§�§ÊIé“óŠôÖLbš'€vzÄ)¬xÝïu¿ÛÀA¶¹A+C\´! éqÑªÞb5°<:ë`žÕqEž[þ&gãQ¥Å:[.ÒWPQ¸66DõDöKZ¼3ÃfR‘hvÚYÓ ËhgÉ“ºÎJ_�Ù'•Ør�¡Âw]î¦³LYçU¤ÙÌìÞ)Vƒ�p€¹lš¬¤/<È�¾¦ýá†|…«¥Ù-öÉ’�¾°5âbÕ•Z’ ,›­<DªÁgòX•.JfáSðÚÃh%}0÷F!2ùf_ÿk!ÚX¹rå‡~øë¯¿þÛ#ÿUá:ªÜj\€1ÜÑ*òäAÀö2ŠÞ #‡¿_®¯´sU“®ßã^‚’xS€ ã¼‹„Ñ4™¶/îW?‹Zx:P3Hjj5³®Àê…æ‘Ð
+˜£&QÏxÌÆ“çKBè›<k v0^‰ý©d50�îÙÐIU-„~^à ¯×ìÚ;^º»|TŸ—“jÇ)Æ<ObwS9»Ú]µ”×°IK«é]<¿Òi5Î
+À-„Hâ`ã
+by0³3¬:ócžj‡A€<iÎc\-Tò±ì�TØ©’M³§LËš¥…-”^,0@	éfü³&îom¦›ýXìÝÍÌD›¢�beÁbPÌÕA5q·Í}Ï¾QØjöò1�3t_G‹:µx%¼V‰´÷M-ñPfé<˜Dm+f^q-•·ø³…MFÕ�ù‘+~K¯²$Pˆ­ [­¤fd[ÙÆÁRŒ�ÓÙJï¤é0¼x#ªÚyÉ×¯½r‡ª][}œiÎërm™®·šP¡c83žWK×»8Ž]ßÊr|N(éªË³ke'KÝ}0’%i(e@T¥¥…Ê1<æÒ7ôì~ZliÞ¡l80¦k$&¤�`î¼hgà×…žùwSeë¸äö×‚ýï…4q{l)¹|v.Ïš§è÷‚Ð
+…dÄõRÀ0ƒ‡Aè‹^áËkghJs)ÏÂX›jKÃêª@R»ôØÛá¹`bJôã´3C‹î€	f”Š\d’ƒo¥
+p*Où
+–¦œlý8”�´˜{";qË¥Š(Ìr-_¦¯À´•t³éq}ô]ì…é8iËü	LôH>‚˜Ã¾Uc¬ò;Ö©€Ôæk¤Ç„OªäØ¥sy0H±^¦¥£êÉÛ¼€²É¡[9ŒÎÜ¬UlÌ»‡“àƒ10¤vÇïÒ2–i‚;]wÝGŽo€Ñ®nò]O…f¿	·æÙÏãìgÆWhi�3hÏÄ"-UùkÍ¨shg¼YÍs¦sãží¥DÎ)®³ªÐh+½¡j5—}.tˆb„ð¡óÀ´‚WK§n	Ã@Ë(G@¬ASkÍq*­�­PÙ”)xhÜ�tçðBGÂ»GX
+d3_ñç¦¸;žiòÿ7 òÜ¤›}ýì!òüùó7nLHHàNgÏžÍö¥K—~úé§*UªDGG/\¸pãµ?ŸkõäŽøøø6”/_þÞ{ïýÛ¤�¿ßÿÿø-W«æ]å�<KŽVâ¡}óz¾`§´/cÔ,´ÛÒÃ•¼ï¥ŽÛ^äQEfWBUïþ|ƒªÊÕUv6
+­á�›†v¼ã£
+A›F¡U\1hÿj�Œñ„w¼ôçlBËê†¦cW?°%­£€uGIpUŽðŒWûåœ8r˜¯¶º`|ÈA¹­®¢„\~ô:Jâ>ÀGZÊ·¢¨JYžsŸT§f`¾Tóè=0O~†Â6\f+çÅ"§«ï–jfŠ·T¿fx_4¤ÃºBá N!¡-ÂZË d„?²±«Ipbpp´»Yé­5dmçëöEˆ$ç�õ8‘Ä6ZR[Þ- î®ï�H×÷t¦Œ§UnÀz	™¾É‚ò sV—¹d”ª?ÀXmyÀ!2IE›ƒø€Ë”b/ƒ§Ü5¸ÑšN:ÆCªÄ„MVK"|,œ‚“C.‹´ê Ð,­+ý t³ŽÚ¬Æîëö”.ZîxMˆµ“Š¹°íuŸÝ¥i.¹u†�
+:ãçìqÉA¯ŸÕÅêdmÆ6v4°Tå}÷zÌ	G­OÌ0Õ·�—•Œýé¬…·|Õ?·¹q°�Þ¤°(À‘�`" H�l¬díÏ4ûî¦ÁŽzªnöR6ý4Þ»mÚ–fIˆì¨’Ó–V£ª4èîTŠmûUó(ºL`lñUÆ…�£ÅÜcê»YeÂ@ð¬Ò¹RK<ˆIŸZ¼¢:¨8?Ì©‚IMø&þŒ„ïž™u›…i1ê¸)ïJ¸Ì¬Û:¬ÎÂ—a�
+¬ÚªŒø�ða@Ié¾i	Ÿ0rF˜ö™Cá>héç6O¾Iø’`´ù—€È!�”NgétÉõ¬³(—ü«8›R$–ñÈØ4²eâ,Wåâ×9†Â€§^ZK¥Il:—6Áz¸¨ Ä_ÏÝ~UO†Š¦ˆ >×âô0	šÉZÝ>âìOó®çzj6[Ê _ûÒa|DMç^ñewŽwi&$n!?ÁOs0ÎŒ×Ës½V ŽOé—1S¼F„û7µøs“Tu�ç2È$DtÁ·ä¸d<ì<É¨–^« ûì4¼×¢Ÿ)r˜x7ÂŽ°§át.W¥zÍsãåjJ…àÑ_ ò_õ—˜h•ÅþöXüöÛoƒ¿ûÛ½{·¥OŸ>%J” �Â¿•øgûÿþÏK*»j´—›Ç(y~ºëky1Lœ+´ËñƒÅ‡¨T“¯ÀæÀ)Ï;ˆûÕ_„–r@—k1ððDÓ”ûø«¤�ª�Cë×z	L¬|Q-]3H„lÂ«£á�pFx"Æ³f0é•às ûµÐÜ7C»ÀJ±Ô 'ˆÉ9›‡´Ía�Ø[Éw_–Ðú·Õrø³e²¤dv>—ÈS4(Vó²€Ã#e`C3!V¼ã”bX@Ë¼(ñG«©àF—p	—ÓÁ”Ùº¤B"±·ëÊ7ñ¤H¬.æòU9Þ×õæj6Åz¸³½C9~l ŠÅÆt¯~Ò Ò5Ò-µä÷Vƒ	C‡¦ �4&î7–¹‹æ0U€>þš‚VKÍWœ©ªO¼0¹ÓUÜÄa–(P>­Ž½Ìù³ÊäÀ´‚¡)ÑOq$O·œá‘²´ñªÖÍuÆ°‡˜5¯L4ñî´Œk¦´Ù–Ølç¤S»|™ÖuÃÜ)G•^ïåW€r,žGp±�?C§¸Nl‹Ðq²Z\4ý(AàS×u|n�ã=»Çï´»ÖÇU…d­ðz8ŽYV®w[HqJñ²Y¥sÎ¹Ã“2ÞÇ-¡/ i³U	‹öäN=œÕ“;œ6Òìð}‹%~Þþ=ð¡-GšB`eÛ‰ŸƒóÇçßµª\–Vâþi%c`ªÙ´£îš½¸p’ë‘éÊQæ¥–xË,�ˆ¡%ÝÒ•=ãuJñ*Þ&[	dä`œçßcbÚ´³R9*Žóî´„ÜäbÕÓcï`(Ò³@?à<†ÁIï`Ûù×jp—ø#ìË<GË²0Í„Èt=Øœá8yˆKZÌ½\<ãÜo‘Î•¿Ü•,/Ò ¾gï\WgtŠŸT~�‹/ñ«�\`†´ì†Ò#˜}<^“Š|À×]½‡qrÙÜB®+€‹”mökZà{�ò(×Ž/4JåAOC~iIi}lÂã•ÈÀÅ|ïYEš8=Fó»ÐmnlÂ7€§D?)}Ô¯\\hrÑ†ZB5ªÀ|žzÎ@[yJ¦Ð¬_1Lå5ñ*i@Ì�„ƒ2$Ú †WÀ‘ø*0NÅcne°
+¦Øªeñ*X Ï…”nÆ9FöÄ²QL$ö°	ÆFvˆÓt®Ân/(Ú*ÅU 8'CýF!râÍ¾~öùÿË­êélŒíö6ËqÉÅ9A4ÞÑêÞUeF›~ïíUý[�­pýjPŒ!Ê€ï“ó[ø‚§7vR�Ïk¡9¾¼è:® "ï/ ;Ð°Z0¦~hqƒÐˆa�Ðôú¡… 2ÐÉZA*ÈVòÅZA
+g`'à¼ºžŒ§ÝyAg8)WÈ-x©Éngå˜ónöxWM_’LÍ%OÍt×—a/PÀE\Š�Unrk°(I,ÒK‹‘„Î¿'»Z¦Ø‹D@0ÂVFùI#•&ðœ¹ž“ký`{³Ãð—CíƒCí1ÂgÆG{ØalÀ\lêµ¾Íµr¤Ÿ�kpQn|ÔÞ&ïf‘9@¿Z*¿{‚•MÏ¿“È1ÐÛëÁœžøÀ§óî–ìLl)¦an£�ÉÅÆÜAO”Ûò.@	áEÃ/¤'SebDo¸ žógyöxô4µê”/îÀ‘ŽŸ9pÖÄ¨Ad{ïÆ¤Æ[ÄYÝ�ž†ãsòo›ÄÑN’?ª-m^ºƒ=×¥e]Ê”ÜéøR¹?M?JíÓòzú*]‘É¥ÿ }˜Q‚Á|aÇ:ª\FàTxMèÒ
+Õˆ\þ°M±Âô-ªZvXÔ~ß»æ½Ð‡:X˜ñþÖÖþ83ÛëÙÁà)Û|Ñ…&E¶•zá`ì|W�".Õç“m.ºÐ�Œ’Ea42¸€9M.VÚH_pl`Õ9 £T>]ÀÐ/sl	õ–Å÷YŽ­XpIà5µÄCBØ¼ì±`æ_
+,©–óü¨V�±¬–âe§Å–Á3Bä µéGz¾‰=G0×ã
+�ˆñ²<JÞ4¥Ø · }£‡Ú}:ÌQšÿýy"xRhää:KgtKKy~ðÈóñ©@[~|?0÷Ý¥uÉƒ`ÀÚ_HjÐ\`>îÈ¥ì[ˆá9õ‡N’D{øÔ3b”rÖ…[!¡@0gƒÿb¸°®*§ÅIðT¥ˆµÃ	&@Œ++ž£š,í®‚ã�{.O¿hå)¹$¯•ðì‰!XH¶ro¯¨ŽÉp~ç„ž•ŒÒkÂ]0YQ¯/©æ|/”	öqBÍÀ¼žÙê-`zÄ2·3è®VE¥×�³å›q­ÝuƒyvÂÍ¾~�ÈÇ­Ê(õ•D0¯µ„™b(ö3I%ÕÓñz…�%Âƒ5ó¸JU·¿"×Œ(¾éó‰MÏ€ó€�z¡y©XTOdOãÐºA`W74›ƒ1•Ç# Û�Ck!¤U‚žõB9²lÐrÁÏyÉ­aÇ„–ciU±÷˜kÙAf•SpŽK‚xú”¯ÞO+òÈCÍä\Ðzz2†¢‡eãÞ1†Ü�Y:F)%úé¬2!›™,�+©hÓ¬2ª¤|›Y?àÒõÍÜ2sŒ§¥c{y¿zÉX!€x°�IÌò‘nÔ
+\î{ÇË±>f¢ÁM2\fÿ{v<øˆeæÌØ^žÖ‰…ûaa¸#ŒŒ²ÌöO(<€G•à:ÓJü�gké³‹0Œ­—,Y¢ºN˜,+C©Í˜k6ÒcoÇªh>99³TÈKf©‚ØO«ÿU´)?'åÏi)ÑOð]`O[ƒZÓh`Ü�ˆÉW&¼¶�c†…ïHj»}p¦c„0Š|x¸Š/—ÝY1Et(õC‹T6ëÌG¶„ú­Çð0èS©›øÈÖ �Ò¡t®«ô0œ|6ÀSb1ì´ vL³X]“£j[T§ÉŒW™nÙß¯ÑSÜµWŠ¤S D€÷ƒ[£ƒv½n«�»Þ0Ofg#ë¬�­_ÀG=A×ÀèMÌá™l9vŽE5ßJGàx­Æ<w')§ïiév–ž¸M¥>
+[w"o•(ï4Àq«|òœËãeáXwÚÆ¼kU¼—= j¡ê)E^H-ñ ÑAÐØô˜»0éøÐFÅ]·�ùQRÑf*>rrT=SVU†Ç”b¯¨úá Ïr…%I)}�UU‹è=º`Í¨¹ÖÙðqL½Í%ZÍ©U Œåz<µh|õ}“«Í÷ì6ÐA6ÿ0à¢à·“Jó_'ñ�yš‡9ª•bËq�®¸f<ÀÄˆüK<Î‡“hFô°šqÝBU°3»4“ªqszÙºá%>ÕìéÓ~ŽO(	ñu@¹É×îëy—. �IcÈ¨Œ˜QÊç5˜“îe-íj‚ü‹]Kk0Òªh­à4Í¥¼˜ðû1á‰x,®i©tÈ”ž3XÙÇiÜ²äžZ3¥v;×Â�ošž|þ•r<úayn"ÏŒ¿Ù×/ùïø£Uûç:§V0ÎYÙð<=ž F—W¢gt)6ã»8«…tÉ�XÛßƒDPELœñªC+�<°ï�ÐÖ²A‹¦¡mØC�ýÍCÙ)‘ó®ÅýJ0ü•àóêÁxÀ&DŽìiÚP#˜Ø4´½j0’ÃZ„ŽWFy,¿Ëaà&Æƒ¬ÀÈžÌî	›À¢ÞAê¿H‘û> ÃÜÝt\—ñ¤¨ë>	†Ã˜&ÀM$×ÿG«¹\:'x„£&B”S�×@,­à~Ãµ5Ê#ØPÁ¢;à#PH7Â{[¯Ü^783Ö@þr¼¯ÑÉ=Í‚ýï§G‡;§>WOœíO­ÆVÅ°�ß¾`p/³W¿•Þ}CRûíC+SØƒI~a±fÉQu¬²¤É¯U\®R•À4Ð°DB²«¥·†å/¤ÅÝÄËC%`ÓJÆN-^‰gŽ©ÔõZð‘”èg°ø€N|D¾;.|¼Ê%5y“}‰÷Ÿüþöq¿ÅáŸiÁNåöNxi§ôÄ.aoi:/Ñ‚_Í0 #Ôß@ù¥2±�î"«s®³ŠbT,b´°_sõ§AÉvÊ«ÅQá+žëêqVX!OâófUŒz�k Êá“£,ÐŒ%(ãH´©²Á�âY4‚ÍrW5æy´Øãª¶4ì1T'ÙLø®&Z5®m°ôÑW/ÛŒqG~ÿÇ¬Ôî_Mü`Çˆê‡qù¼l®ÎQïÅ­Ð¤ô�ÀÒø.¸ä3ôÈ´Ø[¹0ºÌøã]»éü€˜{™O6nJË¢ÍªÇèÖçèYà�cpl€Bú×b{¢Òw`(ÝÊïrd†QÎ\™¥
+1†±íR×Y72ÿ¢ÉEc´�oè�ªá,›Üò¶/=K‚æ"ß¥1UïøpæÇ™‰­vÎ´pV¿Ô‰¥'ºx�Oæ=Ø|hãÄl‰Ô­Šy›ªhöo™c3Ÿ&%”o$>¢[œU¶â˜dÎjôTmúË­‡óAúÝ'«ù–Ä"öé1œ$AÔå0ßIV®±Çƒþœ
+&èù)&ƒ�ï+åHîš\´¡
+„ÍÑÈj6üÂ€xW¼9øf`´W7PnÎüá{à3ÐzøŠZšŸÆã0-¶$ØÚ;çw §�jà¬$�lIÈ¦€×^žÌ"o#Û(ÚÁÊâXløxÆÿ�Bä˜›}ý‘ÿŽ? s�Ö"’^Q]Óe¾à•ˆ“É~O¬ð²Ë¾^à%ÅÙØÁà¼‚!ã$N¥–;Jêü­Ð>gšÕ‚/„–a$kéµ‚TxbC£�ë Ÿ�ÊÁ€ûÓAtµ‚à²z0NúJ0ìÕ VéàßjÁˆÉ»açÀJí\Å‘|É9›…ö6âz¸TX‰'¡{qaŸ.îa¥…,³.'4Ë�¶§ìÿbL¬ŒHx’×"„ $DtP0_˜8@„1�3lzÉák”�”/_4‘sì0æ×’Ó«VîllÿíiP�Ù%óc}ƒc½19àØ'Á¡ŽÁñþöÎ‘®3°¦r¡EïTŸýYŠM½±÷ÓÏõË}qæç‹¥ºùYb‘˜Dœk˜!V‚q©í2°à"0Â²2+š½»]fpÄg–
+7é×˜»ø¢/Mj9ò1n‹í.ÉÅjšJIh“ÅÜácàHÐ)¬Ëì³:«KÖ´Î+‡Iï±¾o„iß©¸C¢r´—w•ò*Ým…cä¨ðòzÊo‡+ãþ’âr¯¸|=à(uš£tœŠ¿ìöªÐ€l?IÈg3¹¤Qf)Žq–ÊÙáNÙÑVî¢jq_´‰J`—âÖŒÁÝe€ES¬VP1èÙ©Pxh;.ÄÞ·mf•®a§e­v6š �í´`ci"qn<¾ê¶¡1‡ãrþ4u€Õšñ`~Œ¶…G?jRª‚í^¸LË/WµJ Ù´ÓïU}ÒØÛØ†ïK"çª?góG:Ng:‡�Ødø´’ÑÓ-”ú	>µý¿¶Yw˜,}¤$‘z¸:
+ë}'£T$�Fcä§•,Éõð-“‡*ý+“¹Ës”1Œ�O�¹›†J‹ùý¸ð±*&u ~
+ÍÁ2­rëž!ùâ^ ”ïÈ£_Þ<îÙŸåÙÃ³àâ¨š†ÝØ}*Õt%š*n¤‹Ï�Ì¿26<Á×"µ:y’‡Žm*!²“Êñœ÷âkü4hËy¹�IWù;@³�¦èßO¬˜ÝAÎÃ• ÷N$¥¦hj{@$fGŠ²û˜ô×ÉëS«tp1©è[ñ¾Ò¬[ÈýÂ%Uæx…°ûK•1©C©ÅåA“ªÆlpR‰ó)’Ø‚ñ<9ª>�Æ WhTJñ²EšË•„iœ•rXÓÚÜ/¸¨ñDþ?ýçÙEk‘< ŸjZY*.CÈëk�–¦Ä@êª9´Æ¡õÓÃvšp+#–çA2 Ø'¶Þt¸Ah	hˆa„KÖ	MgOí`Z‹Ð1¸Þk¡95‚W;oóÛu_ÄMü~r¿jë›ÝŸÔí«ï/é^uFÍ`×ÍªZÄœ¾|ÂÁÄÚAš«}¾|Ö,´¯v�¶ÂGÚXôÎ!È&Ÿ¾Ú"A×«`%�ÙYVš»œçcÛ“ïTÅï‡¹Ïq�š•>¾ÐÐ¬2�‚½ßÑÔÊÀIE>H*ú&vvéÓYØ7àt0Ë7£%B>ePÒ­/oÔò«—ÌÞlgóx¾þµÿ=ã•ØaøË¹DKõ½²*85Ò‚vŽt·¾ká%³nfö›�¹˜Ü~{—hKÌŸÑoæg…Žd”Š°$Í˜»fÞ–]¶iÞ�fŸa+XÔ¥š\¼ ïÎy�b”*°öûTZ4/`xñäq‰¥ßÞ -æn[²,cªØþS‹—ÇRa¬ÂBÞ-�¸‰…ûãÛKM:×½›¥­í_‰AÀva$�b3í­¦|ZÅ}µ;¡ˆÖ#¯‡¾‚þ7­}ß4í¿ç¦pÃp–$²´ñúÒ$_qm=-5ñùÿé]¤J‡«†‡(ƒ’Ò‹þ„®2@O_‡ªhOb…?®|ÔüÏyNòU•ÙÀÈ#nÉÉÏ‚ŸzÂ.qou°ŽÛÝ48ÜÅz“6‹üÈ4ñJ^J¼qjÓU˜}F?�)•h4¬G>Äo¿¸ù•lá¯-BŸZa5UÄ­|¶js»°•¹C=U*|ÖmÆS‹¼ºÍœ.:Î§m³Jç°eÍR…ùÔ•]•<Ò’Á@Ÿ‚ªº¤&êëü4ËØð‰\96Ÿoaó]o0UÕ§ÙŒjúÔÓ|àFðˆ.žR¬
+¸cÓŒ§Ò›¦Tpê3hj(›Å…æÙËIØ éœ„Èñ=”æpFIÇçÀPN’Xä]¢—þ›B}f26<ýs]V4i³rÇÉA1Î�ÑP‘P[Cì­ÂÊŒ7£gqB±\$?¡²¡Á«×©Ð;‹8Šj ×Í ³J�ŸH�R®ío?�ûÇ™µ†8œâ:UÞq©ÔÔ¯ºtîAZ‰?ðtCÛ%o;×æÏ‹Õpi.•ŸZ¼2 ‰§:Ö
+µ�s	w/h‚­ð [F×l¥9#z�+ô—zƒyzäÍ¾~�ÈÇ­§µž®¦¯¸˜.V±¿.àÁ6 Lg…§~˜ã/V�éW?yDŸ¯:±ˆ�`Ž.¯âÀM×ÜnÚÆ§ §Å:‹¬šaò,/înP$¡qŽ5Iý—wy!­Z‘./„õLì¿¤f0¹|Ð
+°«š_5	\VF�’¯S œŽ³ÕÓ(´¦^h¤£JÐd|#´ÙóMüòÀM@žËƒÃïBOxîðZMj2ß—^µ°—¿ÙœŒò¡6ð)8ˆëÈ‘<ÚIE_‡-N.Ú0©Hs«H*ÚR`+JZ9²0W™AŒ00„e¤`(˜Á=oÛ$žq“‚“Cƒãl¶r~ªQËó)6¡w!#81ÐÀ`õèÖ/«Å›3`" ¡Ùž/Ù4Ì5qö!ù¹W[¿5SŒ]uYQ,íúr¶|æ·«Ï..ì“®žÈÉÞÌø)šrS‹—Åþ`W"ÛA:L=»TË£œZü9¥�–o“:Ê˜Ð2€ 3·ÊËü©zÚÏ¢Ié÷ŠÛU½€2ÿv´Àãƒ:îÿFh+pIÇ½‡Z…’�X"ÕVS!SPÖ/ÿÁùU‹ùªim¢1ùVs��ú©Å+¥Çþ. `	3­Lö3p1™/k­jkÄs€Â…ðýM•Ôm
+Oa¼žî€9â¢à¨àÉàÏÐ¼4Îo-wêã¼W€õŒ¡†ø0‘y9Äô¾Ç6;°Bç7WËî�Û¬;°Ró‘÷'O‰~ŠNôLX÷v|uÒzê�AV™ÐÔâŒÆ–Á�™)èì¦•Œ…$r$ÃŽïáUt€‰lðu­¨G# yxz#ò/Áá ÃÔA3¾”è'½$H49ê5xŒ¬·åk¬µå¹‚™Ö×Ê=F�s^ä#…9AwpBM=£
+e_qN[Ð4øý‚I±|C©ÖÈ™Ä4×j¤Õ£t<žžˆt´ úsŠÞÏ©<ßÖF—U§jå€ÈEòÄáÄ*Çs è,½ƒœ
+Ã�µD’ÀM…÷lÃ�"ß*~Îg·>Ï¿2È}Á
+ñ4u¿¤ãšAj•™î¯ÆY´ï
+fk­lŽºj™eø$âÚ–¯ÊxSŽdÂ”b¯pð\^â]Ê¬ì®0}£9âf_¿@ä¿ã�VuM~ŒOŸœW\J±köTªÍ¦2t}>ß<½ÜÇâ„zØ½.ª{ÅH†Ç¹^«×®R•ä£rþ¿wiV^šL;/P=JË,câ !m³!qÐüO-þÞŠ™;yÐÒ��`Kë†f¾Ú˜>¼ðj0¹f�ônØ¹:A&Û•‚Î5‚xXdãÐºZAZ³Ð^�wÅÆÇÍ¬²ív~”ƒ9ÃA…Jžâb:‰×prÏdá¦<(—ûå©ì¢B<qoòäñQáÂ%8«
+6QšÈvøí¥ŠÙŒª5S:®¼{5dK¹Í2¦rSe%EÖ1ã¼ÿ}[„³€�Ç>1™�ãý�ÈîdA;ÐÉ¯çÙÜÛR¦ò·AF©Òs>_¾Æ•~%¾™ÓwÂú37OMÙ3¨#–ÓuÕ6V
+¶ÔÛúúï.¬Ì‹|úÖé9Ig$}wüàWµbM_]¶zþ½a_ÖûÝ©™¨ùÂ�§g�?œ8|k—w,ö�Azì¯áÅœ#œQ*RÙëÅ¹Œ6Ö+AØ4{�é
+ÜiÌ8ˆ1‘Ù9ƒŸìÂb8®¦â)¨!ÌµçÛÔCi’Þ¼×c�ÙÀ_jö­;QPÈ†¡tc†n…lò²
+2aæ¡AHß;ÃGô—jZzÖÃ«"‰/Ð‰ŠY˜$uð®XÙGQ60ÑcY!wø!»s§;x‡EÒ¼ÛÆ€àh/;À4çUÇ“žYpirÝ#«çoÍj¿¤ÏÐ£SF�:f[Ç¦g÷-¥µ÷¼wç¥õSÏÎ~"©çWµK^X>åDÆ„ýŸ4ò[}o°¥á�gL=‘:üà¨žË
+[[íwgg‚h&Ðô°ý�û0ø-’uºÓEçÝi@<¹h“Ä"-|ö8-æÞŠÎbZ>oÔ«™¥
+1n“£j'GÕ4eþb5 �ðH¥$ÔR¡“ÿx#5c$Ž·gd�ù ŸJ	'«äÞùisð4":�È¿ÜÄ‚r�KŽªK¿3ø9'(À‘*®±‰‡LTÕÑš@XÊ$ñüµŽ>ø™ŒÍ©ÚœCœ"ZÇœîxi�Vtc&C(a`¸‹®yàÙ>#¼š º‰ÛŒ šñy •º Åi©q>Çós’¹;ª8¢õÀœÄO—ŠÎ]ÁU¹>m|DÜgVïæ(¼çœ!ªiçCR˜æxGût±…ïI4—’+sÙš+îá³Í~Ÿªe´sÍâ.÷”b/qžé¦3,mñ´`2çÿo°Èá7ûú"ÿ.@d|h‰ºiŸæ>é¢¬žú�ßCI¸Žírü€]ÂÄµ“>ª2õ.¸5ƒt´¤o+ªk$ÃŽ{ÈkÃÐrW'ë*R �KPN°¬rÐ�ç¢ï³{[æÙfM²ò½²ƒ»çÿ±z0!uÈÚ7sl6h°V>x"¨['4½Z0úù cÕ`¼ò¥àÓÊA�šAb…à}ˆF‹ÐqˆÉKÁ@ˆä‹Á€:A–âˆ.¿vIõ&Î¼: ^·
+»Àµyýå®ÊFùP<\3éÂ³<A¥å.I�.ŽªÄ±õ¸Ä#ó/à¡˜[2%úq<ö¤¢Í1PpLOQ‡Í-ºÏÞ}QÒjyTÊ°ˆÖwŒ§€‰Àå©áRè!"Ó98;ÑpF³½ž)ó€_“3vI›3»ØU}ÙkÞñéI'³&ìîPu}# ´µ^ÑããZ]Ù2ßCg±™»[ÿþdR{l2ÿúõ¬*Wt÷'­Î,_ˆ1ßÙóÝÍ­k.úcØùõK=®"‰á5ÕôßX¤kJô³îc*'E~OÁœÎK]È,¦	C=&<ƒ06|B's'¦byTú¶=Æ¹žóAUëøÉÃ¤]…FÚÔ—T:ÊY„–4
+­†ò¿aÈx	¦Ïc©©Þa— ³³œ²R5íÙï9 ôŽƒµ2­Ô”r _–N7…ƒ>8[SšôˆË˜ïjb®mEÓ´6]C§ ‹ôpy¨Cp!-8ø‘1ý½-l½‡î6$æ›Œ÷~8±doBdçC©³ç>UwÖí¡o÷®ûòÅ0NHÄ‡4ØýîœðâºYg2úmkYv]¹Ð7;W@í�fº‡d{‡++ß±êÏÁ…Õ³6U/¹·_«3+æ{0•Õ‹¹Ç6æhÆ•ö_¬‚kÊgyšLO9!M‹ùÝè³è,+öýë@ø®Øæû%vQM9/c½AÍ�4…1\á\®3 A×4È­‹�è*|œµhÑ¢ùi3½„¥ë´ØÒÀ_œE~. ‘á¶dÁHägµjÄì�úiŸ>UÉéºCÅb[!ªÂý0`�¯ ªÒ·-DZäjN{îâ#zL\pÌOKhÑ²MÁY–dWMÆt«ãV0“�ê×7®ºw›´à8à|oöÊq5÷ëkå <7—ôãr
+€Aâ«û¸<÷5º
+ªMÖ%%ú1EH´ÁÞò}Bd'œF�OLõ¬{jz6Å2b
+ñÓÖq~w‹¼í�úÖ „ÈSCoöuƒ™‘‘Q®\¹B…
+ý'·wß}÷o³ïß|óÍÿ9®üŒþh
+1¿r¾N3ðqñWž ÓµæâLÝtë‡–µqÅÙVœ’Ý<¬ŒSŠGwÅùC»)\GÓª›óðEû_Å*ºVÏaWê†fYÒåÃÇÆÆÍØrê„&û[>4l\Ü‚!-çõk8‚ùr0ä… oóÐèdýÐÂçƒNµ‚©Ï�9'Œ²F� DÂ«#_†6â°z¡yåƒ÷0­å‚–^©|�ás�r˜&Ö<tØKqÁM0ÅØjžÓŽÙ9'áÂ*w~ÂE·Æ…�ÇO–,3îñjOãru,0Ï(‰H�½MÏ{1xþ–tðpvd)Ú‹"]È’r°­�ãÅ™±s.Y\æ#y==Ú˜&ÔR ø~”ã/»¦ÿ/úHêøoW[ûlŽ‹›V¬y:0º÷m3¼œmCÅàò—Yû\°êÉœgç�[õÄ-›«Ùlªëã+Î¯È‚¡,î7ßÚyaÍÜ½ƒ;b�—«pÉŒì(Êš½}ÖDÜã˜—y©‹±œÒ²4Õk|¡QØ‡!ÒS=¬¥4È˜ð$UÔ]Lûxõ‡Îª¥+)Îc¼<PÊ
+yhüH ÿpí ”îîAz“Þi‚vw{-4‡‘Ã¿Ì×›¡]ÇTä•…L;eÔyÙP©Ån•æö‹`�ˆ¥µ
+GQµMBð×–¼O_xxdaT,³X´J+ÙŠä™ñÁÙIÁ…i6%~n²eªâcìyË +©h3®FstÎÝš—ï>ž<ðdÚ onß\3?0Êi�Ý¯^þ)ÿùéÒæÂâñ›k—äç–O_[>ÑAiB…åóŸˆÿøÀ�6ÆÕ/oZ&9x·–ï6¥Ù¬Ò9Tt™gë(È*ÿ´’±^—Fgø1J9ØB.MÊµ-ŒÒ¦å#;e–ÎêáÅqð¤È6ŒFÉì˜–¼rbÄ' �Õ=O¢Çé9’<õà£;BžÏùé\×P% ¿à/a
+€�	L%æ0€ï20ŒWæÝŒ‹"h»ä°â¤K%pÈ“­:«Š])\;(�šÓ®x§\l×6|'ìôØðxz™=9%SÌUÚËëÊé
+iuE)IüµçIäQ¥¯Gæ_ä…˜=¥‹ŸþÔ”ë¦{.%›œ29‚\W}au?qº>P-ì)ÅªpmPN.OSÐ}uþDZ	Å7æ×å9Œ�Ñ�‹L�¹KKð{çÙÏÍJw—Š“À¯pZîÝ‹¶üß‘‰‰‰qqqø{ˆ¬T©Òu·V�ñÛ­ä#ÛÂFoUÇ+ó9,!^>¡êÃùj:¦¹²ì ñzúØ[dìy!ÆF²›ÍmâøêÁ8€õÍ�eØqr¬"8’b-�º›“€›ü„'† v€ ¯òAk->.ª¤B@žÞâs|2x­BÐ*ež‘`"¿Úú\ð`ÊoqfÅ-óð!��Ý7þP°ÝQ¹{VnR¹	ò‡­´×Ì@¹Í*×Ñ…O¥¦rØ´LMÍµùgy÷`ÓØæñü;ÏÜ_xov&ÞP*ÇŽúö‚EÂ;ŽtwŽ÷³ �#]ƒoÖKç¤ yÇû›½ÅÕ÷‚A‡f�ÄŸ?6©ï¡^e1ì—¾œ·ï½¼ëEˆ°ð&ÅS!¸²9#¼­vplXõ#C|ÀåFÕáZû´â9ŸÎ.ÉÂ>M»áÕ» î³+çÏ¿//W8½Lv¦žeÿÅÜ™ý¤ò¢”A�bÉ©óyO,ÒÒX¤E÷ÍÁa4ð Øîat{;î48E+aŽ°„^5F’M&dí
+çô¾­e‡}'ù£‹ø9-ÃŽwÒb1ìžž=´UqËÇ1’8<ìÁ³ªŒ’lÝ^/d¯óŸgBR†X¦Û"HXu+¶�*0/=ænºÆ£_`¾é±¿†”M‹-åõSh+<ºàXc‹¼ŸK
+.fÙºðéQ”®ÚêtöÁÅƒÇç-¦s·¼õÄÖF·îižã»C_®|,DÐ§tÇ¡¸;ÎÏ¶¥ÁëÊ'{ˆ{†f¿¼må¾Ö! ¿hÒ=�ï8™>lõw,½ßæT¹†sË²fßn…A!‰.-«�›7¥=ø{W{p²ŸY:7tòØei'~”••´ùÃnÜ¯—2t1a¼5ö@‚’Š¾©È€0&�ˆÑž¨ÈU16ˆH\î0À
+DB9Ra	ê&k\p
+'äƒ0(ÏQE+Å
+8<s;:6|‚Jeí’,Û	Ooì¡	„¡y·¨æòš‘æL@-çéjê‚[TÊyà‚Ñp†‡&3ñ©{V §…©�Vô2„šà§[VkŒP)Ÿ‰=”Í=Òv~²š,VÁí°„…÷xñJÆçÄÂ®<ï@6‡1ÙÏ§@›ÃN)^ÅâÓò}™ý(;q?å>šZâ\%äÎ¡éT¤Yœ
+¾ð]�øç´N�ÖÙæi`Óüþ§ÂZÞ Dž|³¯ÿÖDëß‹�‘uëÖýŸ ÈÏú�V’PÿLžêÐ¼;T[í<Œ Šd¡ûš1 5<Ó�‘ŒSxêq,[¯[¾wé:çV¶#Ìm@ž>¯]¥’ôç Ø=¯cÕñZ¹/–$ÏÓ ûë…4mƒc¾ô{#´l}:hR5ñTP¿\ð/>ª¤Õ-iÚþdP¿Bðþ+Á°G‚Ê\Rí é
+ž%AÕWƒd>I¹`€ø¥`0@ÜÚÌò‹ÿâ_¬º¢(/¨îÉ¯a¡*`fÞöý¤#ÔY¢gŒ•¢|×	‘x@xlÓc3¥ØK<ø¸ú�¯<ˆI„D`$y1Œ1ÎûÞ±ú§‡:§›q^¶ ²¶lNÊþÖF|T€ïò„ÂƒÏ,2†x°SéË›g]Þ”|:¹ÕáO;5©™©ñ~ðãàëµY{[š¾°,eÓ+…@ÆÓ;2¬™³H
+@	[±4�×ËO}"eÈ¡1½—?â
+³Ê„al�E«�¡vF	—Áð¦ÅÜMžT¤Î€$�³L¤:ÿJöà>�ï¥°0™¥ó1r¸Â=sügÆ�¸¤qU	<‰ßB#û‚5-ßéZ½Qà’þÂMz5˜úzèKe ÍõyWHeÝÐtÆƒËüBÿ!l0À,{.ïúˆñÉ[ŠóêNZ^f$mbåü"ÛXºJôc4ÅŠ‡‰L¿¨²éÐD¶"9Ô^g‚'‡˜—‘:g¦@Ä¸G :y~yÖ²ƒý—¼¸<áÂ²„ƒŸ¼|ìÓÇŽÑB
+£?7gèåM™–Å_\¿«ÅíçM:3sÄ‘¡M¶¾õØþþÍÀ8š2ôüŠÌ3sâOÍŒ_õDîµÏ§fáDYÀÕš5-V}Ñ}�OD°sR‘$ëíš Jn}+¥xYÕ—,kY®%„ÑLŽjÀ=&G½šZâ!7@XÙ«nù_åŸ)ÑO@Ù/9ôÈáÊ@Tq®Ï5_§Pá�˜ÑÃ±ZÝ3ý|Õ´Ú¢P‹Þq@@¾ÂeÃõµyY™†k´4¼Iy1³Té{=àËo�G¶|œw‹ŠHnô5Ÿ¡rut•†¹¬¢Ý´ÌmY' &FŸÊ;¡ÐšEÐ4¡ÛR~š©ÉÛ¹À�aJô³}rZr´êpÍäGm;ßj�Øáü£ÌÂÊIÿáPœ‚ù%,°§»fb¹5È8Çóhó+y¶DóN*ò¾«£sOýH‰~Ê¹ªÊ­ô@nÐSBøèÆëEžt³¯›‡È‚æÎ�»T©RÍ›7¿páÂÿQ~v´˜(ÿ#ò¯ô�óºx<&*§¾S…ÿ~tE)¬€ØEžû1_.`ÞÁ4Žº:«/Ei–ì0Ž"D€�€GÎLYÒFe° Á†¡åP+H×*m9¼¿|ÊN¨8Ëw9m�Ðôgƒf/C �µƒŒÊAw`´F� s¬ôª´ç#MÏöy(¨ÈÕ&q*¾Ë¯ ¬ƒ dóÐA. Ê‰¡Æ27íÁ8×	2=c½�2C±Ìr8¶·Å¯íªÔ¼QeÙWñÎÊc2Ê”¢¿ä1L‰~FºÓb~—&~Rä‡¦Àó{Ó¦³Œ€J6ÿ‰q†hl}ÕÈãÉÏŒ¿|»9¸�i(¹¯•VÑ«®@‚àðD«@ñ–qœýï»ß.r¤÷]l{ü®×mV�Bg\9Óº½a‘­Mîâ§-CSõ+-häI›è[*ñKˆP%bl‹'Jp‘�¬i±eTØ×Š`g|Ë‚Z#z{_	P­ª(‹=YŒF“%9ÉÀÀ³šYç°BƒÌÄ�ó²h®IÎô…HÓì‚ÅSàfÅ ]õ`,€Ø<t ŽJ¾oZU=PjJá8=X?´�ßê¢Òl.‘Jï¸p¢§»ÂP”Ç=�Q�aÕñ…†£à7å©80ÜìúrÖ#î±Ð¤¼N}n­Æ%§—ÚºðÒÙ)šažÁÍ*}<?„chùm´ŽÜ3Ø÷¾õÅî7-¼‡å×B÷*!ø6 ðª²E¾zí.¼:ˆŽ€ãÛ²õvcl±¬�šv“—ßš£\8/P¾J±:VøRÚì6^²ÄØðI ©ª´X¶;`âº¤–øSf©‚l(&³%Ïä¨zrrÞ÷�‘Àõ ›6nf¬|Ë�‡Qâ¤FÿN:)ò£aÂ¸ù—t×ì¨k“2&G˜í‰`I“¯Ï}ñjŒX	€F5æŽ�\€ ‹ïä^ÓÓ9‰ç}(¾kgà9R}ó“žŸ'¥µP§™ž©�Áq$)°ß9¦0nw¤”Æµ^pd;N8+yöÅ*÷¼GeÝr\¤òHbÝêŒ\¯¿L÷Vô>Ààg¨K !MQÓ¦’¡2gñ	‘iRÙÉ%Jf±aÏm&D¶ã×U{k-îeb‘˜PsLÁ¾…Ñ¸Aˆ<>ðf_7	‘S¦LIJJZ¹råØ±cccc+Uªô?A”ŸÝŸ‡ë0¤•újU³=.±«"W½´½›8%ƒœü8ÇU× cxcµm˜I+ÌemÞ»ÔÙbb³+ËwÖ‚&ÜÍå:g¦,ÅþÌNYáè±u0…f¡Ý`%6úÙ0´sÚ$´¡|Ðºj0êµÐx(š/C_	>oZ]#ˆ¯d=t|.øè�àð±V�úXPã… /<‘w¾û”qÌ6PÈz¡ù˜Ü*Ao>Âð‚¼À+¾%ÖXE*/:£ñ:†uC3T¡à;_8ãN¯Ë ¹ð,m¢ðs¤NiQ�>Iá’tÏ ^ÊÑ65žäb5qé±�ÓJÆ,¸×f_±¥ œq÷Á•5¦$ðÝŽàl¼Ø©Å+)�o$öÀv <eïÛŠ*imVkò]³ØjÓHojö™ÂIw½¡	½Zf´ÁÍ5OYÐÎŠGÌhCNMmæaÁsÏŒRE b°ƒ®ô)¾Ä"­ñÕUhéy8ˆ-¶šìçpnèw%geLŽª5®ÐÆ/
+Ø.„gúKUìÍˆÕrq�ƒ¢¿ð£èý.2D0ÊÆ¡µ¼^Ð­Ðy¶•÷:‡.¦‘Ù¨šÉ�ÀÏÁ;b£V0•q¢RÝ‡éD0s—øž”èw’è4³æºaÓbK«úð˜ìÒ-J{É(±I…± Þt.tòÌ¸àÒ›_”‘Â€ŸX¸nAÈqÖ–J9Ì"¬Žö0²y¸‹
+iUÉVy¥×Žt³yZz
+”-˜ªº½ðR`Žø6Aô”½Ó/À%#Äô7
+?-¶¤q.}BÕ
+zJü;Láº€òcLÚÅ$æ¦—1Å×©Å+¨pÛãñÝ§¯hÕ™KüAó�¯g”,Nï$mªº¨OÒ›ž¤Ã˜§å>¦�³Z «-PZnàp0Å´kr�c€&xz=MhttRbw)�‡QÀÏ,U¨Ì’Üz ñ-‡1×9¥Ižå»’Ï¹ºi
+ÔáÒõ]A7ÀËç©Ø§hÒN¶(ù]GóHa q\ 8®"Ë&£7Ô2çI;n÷Èxc�&Á–ó 2ö>Éù-'QòãY€žKÒºù²lp4ÏÍçH—v•ž¹
+žþ ÊVãG˜Ï~¡ã¯~âÝ+¨ZtSøX^|ÝªŸä[ÃïªRó.×%›ñÉ‹•=�ÇISÀ­±iKÊ»­OÎon"ÿáßñþÿøõÏþnÜòÿÃÂÄ×ÿ0Ñ|ºk×®?áÏõ�vÀÿ±ÌµÜg:ÈÔ¼ÚïÚ_í¥´éÚ›^U
+è8x=eÒ•èclûa^IYlß{™Ä·ÿò±ê7g¦,� DÌ]¥ +TN­»0z@¤ê&ï#´YE=¾ªL~3´ûÕ ¹j0ºqðÎk¡¹`LP©C ÊGƒ±¥•‚Îì|4x	ë
+»|>èÀ{• ç“A=Lnå GBÙJAß­&þòJ0ŒŸã¥œlõ:OH�éX¶{Øq�Ñi²âxM†›åR]CÆÓdôl~§(¾Ë>Ô;»’;¾ú<«Çgår†%GÕU`nféÜ»ˆÍ<ÚËåÙ	Á¡NaËZ¬ù®ÆF:Žt·©¿ËKƒK‹Ì€_œ)>Ö�ñ`;ƒËÍ¯XL¦‰¥7È®LaÈø¬ýëºXWì?|ƒl©ëw»Á¨Î¾Ý>ÂÒBa<k2!²CzÌ�ü:læ2¾ÐŽI,ò®$ø:ié¿úÄð|› 	’Û!Ž°”;U™ÝoT*ô*f�ÃÚK¨¡�©3Ù’tÛ6Wß!‡OJ\moêIhUì!-Ìhy5˜Ì§t„íG¿L¡Ëèßg‚7Ù®|ðR0G¨lðvÃÐ
+˜ÚAÆaßHÍõk—è¡Ë¼G<ÏÈA™‘e)zö:½ Î8è0$öôNVé_A¢AÉ�M�¦¾0-ì`Û ž‹¸4&øHƒŸn¹9'™uº¼ÌÈ&Ô$…ûãÆ|õ¢A¡-W·ó€¶à#ÍNƒoP²Õ ¬`=N/à´,¹ßÀÑ#]çH@ÀÑÐ˜?˜?C7-ÔÎÌÒy¼ö%fÙ¤uJE&G½
+„ÑÌº-ð¬�Œ’QìœX¸,Ž ”¼T”j/Ä¤Wh”•è*4xe¬
+ªÒT@¼‹M*B?-žs:l(=æ.š‘ã…µP5°~ ñ—Û6§]0[áÑøWz2‹ù=rãŠvŠÔ²
+À–k#ƒSœÐMÒÃò}ÙSa¢Œ¼S¯"Ä],¢“Ê+ÛŒe¡Q`w¡*ÌëxÅ&âQ@½u~NÎIä’ì*çq§—ávÄ–w¿hÂwE›Œ.˜ÕÕT4-ïÛKw™`¦ðë¼Ð[«<{žçd¨xú?þ^Ÿ\W@I)Ç&ß -´”ãiUÕ…œ?0÷/æu²Òcï`°qS7Ê"ûÝìë_‘—/_æÓ9sæÜø	®´þ[W­»õ‘¶ŽÁÖMB¬-ÃN`÷(=…PÁŸ§;)ÄN1º0}ŒÌö×P’O;šooŸrÂ÷LMåØ¢bþ¯¸”k{óC
+„–½v©yè X	´¦ðGnZ)€å½vRéÕ@À¸*A¯ç‚�±Š•ƒ8ðèäßrÁ»O¯¿|"¨órðYÍ éÙà-Åù´úmp<TÅüÂD@FX¤(ÉBMÆ&rm 5¥yè@YßTÓ×³RsU¼Ø	oõ¸\Ðóº<»säžf@.´Ó<í»ÒQÿ0ì;ZŒ'ÎÓŠ=éeé¥xÝ‹hL˜Zb‘<ŒÀMJôSXE8à±>9~8¿fyÛã—·¯9Ü%Ç×ó
+1Ë§¿°	À3ãmÏ¤`´”¹ûM#)–£=-Ö‚Fê=ÁJ³�EÅàC-AIÌµËq/—|¨•ˆzÂÀÑØ§Å–I‰~šì¶ji=çÒ4Óox®±'ì1°cÃ´î³A¢++U—Ö"1t·Jë.TÈân�ø’†á�
+à?-q	‹Ó€âêÐÚÍµôÜ,´·“f'h·»‚»�?\‘:AàHkC*éÇrAË§ƒÆ0Í?Ua—t7ŽÃ€Þç:GëµÐlü�¬ä_Õ_³ÜX/ÈÅïúD‡»süC+NËOÍN“?ÐjJ±—þ	hËñý™5f}pfÃñƒmsXÊä Óv0/%Ë¬½ðí&#•à&ï‡»Zˆ2Í~¨½‘J/ªEGÀâ·×±Æ‡¨n­‘=Í‹÷ .>]ý¸-Pº'ã]àÂø¢ŠOÀþæ›(}´Õ+yH’;1¿um=˜&ð—U&”ýçÔ�âÞL*ò>ÀÁNrJñ²¥Š$GÕ}@Rú.iš0Ef•¾œuÝMGOa?Ï¿
+8`”‚; û§¯¢ŒBzy)lìã_8”çBª°ãay5a™3&^˜ÀŽéq]RŽÿ\`ÂAÈ³Zí9¿�±:vUäê£ùg=Y*aý¼s1ZôÙÎ»ƒ�aPøXÕl>~:&<idþZìû ÆÜùQ§ŸV:$×9ÐŠïrBSMÏ»Ça‘¾æG±<Ž¹z6Ïö6”?à’›Ý$Éå³¬¼sk£5o¯IÚå\6?4&|²‹ùª¦’3sƒ8ÝmÚ¡ß ÓÁ»·…æ³Ÿ�wƒ‰3v“¯9‹¼^uñó_`•>.u´!dSëqBF¥ßžRàÊ¹÷5cOGCˆ8ÀgìyÐºÝ’=Å*™VKg<€q¢Z-ÃNa?R	`°°ðJ”ÀG{+“d“®MCÛUtþ¼'Q2D_ú»†y½Ð<Æ?È€¾æ<XEèÆA_P4æØó|Ð	è|"¨ûPP±JÐû‰ v… M�`â#A@óÁ ÜA¿ŠAÛ‚O8sù 5€ëœa" ¨V<7	m‚l>¼Á§\’åQ×]üÄ»ªâ5¼¸Tnàæz@C€•�8»»Kÿã+»^³ü�žÕI9Þ&ì;ÀQ%‰M„—eRçÙ+ýðgA±+ÚüôÓOf·ÁŸc°ˆY6U�yf¥ÙsašÍ¦z¹I¯¥uàÃìÕ1Wä†Tºj„ÅYŒÍ²–3ž2ãÖìÌöxˆŽGKÚëv©+ÓJÜ¯ú_Vº×ËMŽOLˆl?±pÿ)Å^°0†ˆ.®ä‰M––æjz\+×g°`’L
+¯ö´j/f%:Ë.uÖŒ=-C›ðrIsúÝï%t¿œñ€cæáÊtÎ;é}ú�¥Ah©*‡«Là_0‘3èàeô°ËP¤wðjêžàPö2)Å+þ»ôZ'-ouº¶À ôˆë£<GFÈ’òÀG´Ï¡ÏÛüõ¯?��Ö¶xâÓàë9–�s>ÕV*ÏÆ[H�Á*¤‡~9ÚË²YMb÷5%T¶´)ôµÏÚô8Þ$Ô„ï°™Xº†“ã´@]iÙƒÖ)sT§t†6â“8¯äS ’íŒ’Ñ½“Tô-»»Êßiº•N~=£TÄ´Ø[Óbî× •PÈÔèÇFX€ß’\¬ºR!>svÑŽ31â^l L0h0‘AÈGðk Ó4dŠ61þ Ç°rTCmOõ ÕÑ3yÑ¿
+z™Á –x^ks;Œâå_Â‘C­ö´Å0ðÎ0°T©ü‹y:Z|éN)?ïwHÑ½m�$âÁX>±‹|uyã@Ï1…LÛ\%wÍIøj,@œ'I‹³µI›ø—'c4rm®b8ªºß)ün„=¨€Sõ°UÎx/g©¤¶í^U–oaˆ€x>Õ-šPxðÓá’<éñ=|þ–Öàø®V&r9�Í`ëná@_{5Ì‰…p´×ó\þoƒÈóçÏoÜ¸1!!�ãgÏžÍö¥K—Øß¨Q£ÔÔÔ•+WŽ7.66öùçŸ¿YtùYü*©|½ ñ`	ÎtÓú5#ª×-ß»6^Âæûäºâùà�¤¥Ã°ôéYÕŽg€YÚc×kŠv(C;sÛlòÖõUZ„ÇvAÊ¼p@ƒEå_ H<Û qUƒ€\ãéøTÐ #ùj0!�Ìz¡ù•ƒ@!ìòÑàÅÇƒš˜ÙÇ‚êOõžš”¯ÃÁÇç‚¶° La£ZðÅÓA#¾-mÚoø°·œ�ŸÀ€ó»4B‹›Ý© ŸC\!L‡›U�à£ØX, Wî*
+ˆ.p§êxçÁ1žVO!ì)E\Ö„Èv<€é±·{2‚ö­œ–ã¯]³¡ãì+;×ø8Ç™	†}Øg¬1ˆyi¾I¹b~�H4òzºèëáN�GŒ¸‚ú–ê6=�uÂe°ÕXcøãÒå<>	—�˜,ú½ÕÅ0½Û³ëD{�OÓÆð&GÕÂ^%}S2;ƒ&E¶‘Ys D‰f3ÀDÕÃÝ8®Ðh†�æÝb
+ö¿úÉ‹©}h³›¤8aE$=WÈ	i^P2Ö	2•†s…~ñ‰wÍ�w(á‰t®øX>x¯Bð~õ`Ü³Á›5ƒ$úO©j0ŠŽk¦\!/§Å`spŒS-Q`2ƒW}ôòëmsØÜ8n2±p+ésß|%ŠZÔÛ9®_s~öÇÖþ´«iŽS#¬Ù]g‰—ri¡9$t�M«V³¾0¡¤¦¦2mÄ9¡ý!ûFäkf“Ê5OZûƒ˜–)µ:ÃD%z€›ÐFë¢;Ø‰3#ógæJ}—/ÚúãV)þ˜U—Ã ¼
+ÖmkR�¥ó/¹?à^’Š6É*“c.Ý˜9¬Ç`q�½}hÞ­Vß0|2_ûè,ÇJ•¶Y‡Ïƒ=XMC)ª–Ñ¶)ïc=†É»[i’V§€ó¤ÇÜ5<ßÏˆÄÐªª�wR#ë=IŸ¿(˜¡å›³ž¼?ÐèÞŸÆìbõ°ö�tÀ©À8|lÎ¯ÂUóÁ,ï8ž»äb5Lm5ßÚøˆî’ÇÜƒ?ïU¡ù"”‚Ä6«Ôc
+ÝÊsÇÄ�cdrûà¬¯rrÚJÚ›zJEŸ¯pfü
+ØŽŠi—ªÏ•r¸*å�¥’–½Ä%3•�Xä1Ðý8“£êsr"³À!CÒ.[í‰$à&?÷Yž=sƒ‰»u“¯Ï‹üO+˜.d­ZµJ”(‘3gÎ[o½µU«V¿D´ú_ �V)–lÇ±÷òµžê¨ìï“ÏéÈÈ€çaqˆï¼„VgÍœxùMÏþ„!ê«ìB6úä¼¢üÄ3%Œx~>Ç¿jLm§'ƒ€Vîí7­í(Í1¥f|íóf‡çƒ †”í†¡•¼û„*äâ© ~ÝÐ¬ÇƒWËo—Z<¼ðb0àáàù—ƒ¡ƒv¼ê4!`ëÓA“·Bû°· dÝÐLl,ˆü±%ß�„˜p³ï«ŠS'Ó@0�¯{ØÚ’A,q’ûõSZ	Fì$Ú7óØJÔîž62¡ÐLP	‹§UÈZ8ÿ+ò;Åi<h+†PEè	0÷íVèaØš§ƒaù·cë<ã¼]3x.ôŠ5:÷¾mñ$‡ÚYæ¤Ò']7WÔ60;liò±ùÐFÓ–yÎP.31¢7†—kàJøu¯@a5ˆ!#%îçO,Ò"9ªÎ´’ÿ‡½÷ ÏªÎÖ¾÷F©IHB„€SœñØfÆÏôÇ±÷ŠEìb¯(1” *XD¤÷��B*vÅ®ØèJ“*ˆR|ßßºï„ï|ï{Þëâ�çûÎyÉõ\¹žììg?{ÿËº×ýÿ¯u¯Â²¼Žeyar±`(,#Š dLÓü‘0	µ¥ÕøÒ´FQõ-ÃnÐ³´oŠ£•ÂSì'Œåµ¬â:Ó{»Ž½�³Ó×¸"	|$(?£Ö�¯rJr/W€K�\tž‘ÄM‚×Ÿ”ô »¯L?Â;ÑUë+¼ÕÅŸŽ
+ÃÎsÊÖŒ÷Œ­ã°]5…mÊó.¨lõ—
+ï"¢§.Àodõ ¸"t4‡Îæ@À5ƒƒ$.ï�\.ïYWÔÌrIQiëì Ç�Ï�#|È>€»ðÊ¸øŒ£
+Ä¨½¢Jz?@¹~•ÕÕ$¡“Qñ³M»šÂVÊ¾É„ËW´<¶ªõoª‘È|ÓšÂ=¸ ¨ã¿áÕÄ"@Û¦Œ1ç´€3ªòc‰TJso²À\v¯aÍ¦ñj©ª µœ,…´%@Ã &¸Œ#€pDÂi³— k
+gýRáy3‘Òèv�Þ=€‰/²¢ˆjè,PåÄ-Þ”W³?j8Þµ�Ò¨ €£ë>u±–fqÀ,å_‡G*ÜÀˆŒ2.žÂ=T·¨û‘ñÙžq\+�îEQ>Âgm�\˜K¢X�ˆ��<È§yöSuxËr'N¹ò'×Tí°*U-Y¥œŽ*„æâöÄ[?‡}ƒž¸^éõ^ƒÃ�”¨2<ÝSˆìó}_ÿ¦…Ö½?{ø£¼È�<à—w%´V	ÚøuÅûŠNjØàžañ”É�'N{¸aÔþSEÝ¨„‹¯ˆáºµA¬Üjÿn›uNIîÇjñq3Íîú¯#ÙSŠÄ`z³OF_^‘~ †ò‘3“Á§'�ß�Òw1’§'ýyïÿ‚°XÑkòî„ƒü&ùÛ	I‘NÇ—ðAÌ©‚`Ÿ€¶ ¯œÌ—B¹¨wuºàÂd*~›‚p\¢‚?:²(¸‹"sm‘„>hfÔ'¡[„Ã=�%Ûü!EßÍŒ:ãY#°H¸î Me«?¿öÀqÈGPblEý>€iÁÁ8æ_›Œ«��½æ‰ØÒZ^$Ožï•9CúöŸ#'¢Xï�ÂöÕa„—Ü®ì�kb¡I¡“\SåüN‰ƒ¡S§%>hZ1ûÅƒë‚Cx¹„V”°oõ÷)m›ñªˆ)†›T´<¶È=xí±<ÿœ‘™£Åa™! Ã3ªELaµ$ƒù®ª*¯P=¬×°ZÅÚìs)d÷²v ÂÇ€ôa?¯o°ÊaQW¤³éÍS“ÎN†Á(E$—Ÿ›Œ£§ÀÍŽ±ÜZÛ!}�3CW2Tø cÌÂžçˆ4î¾“˜ØÞfêŠÜïÐp(¨Óøœîpg2°â�?K+Ðb‘€£XôBµo|eß à\„k‚_‘AÙ5˜;'G”ÔùJ¨‹«ôÍ2ÒA`%×¤%ç\Q:À¢+£Ñ#0J:ïŸÇ%,güÝÔ2Ôé‹­a‰ãvÞ÷¯hy\”ÜÊ¾orÁAÜ?ø(wëqÁ\x\p®G£tæ¥Úy_]pø¤üSèGÎ‡Na|Š®,ËëÀh”DÌ)õe)…GW¬7CôE·jOm‹cuT�ø©ôC¾Ä÷€”¹zDìÁ¨Œ3Y{—ÓÂPá&_ýÐþ›Tj€Â�&<(dkv�Ô»�†qbúþHi|A)›À—bÅ3€fãíHiðK•²rîíü	\r\¯úrÏ[\CïÓã³{‹iÕÍÜ­åÓåÌSc¥’J¾�5ÐùÝ�ÍuÒO«¯OWðuÌñnZãâ=,Äù4#Ÿ÷‘9’5ƒKMlq53ÂO¶â]À11‰x¡ø*x�ðÊñ9E{!ò¿ô­ÚSÉDýU†	Âøé¡˜œ¾±ž¿C)½á°©$\ÔìæÕE’àŠÍøÖ:^•€ÛÊîuûæ[4Hâ…Ù˜|Y°ÒlBØô5PåÅX†(/°šY²cQ|r�a0¡x°¿ó’rSHð~ÎvN—b`Û'0°K:�™<ù×äâS“~àéII	§ÁOJzòí\
+ærqú„‚@Þ¥é›=#Û.6U¬p	·z\r»áÒûVÀ.£½XÛ¬Ì#¦Ÿ¨D¹…fQú³ãsîfúÔæCO&¶¸Ò¤à9E¿¼òËÄéx±ìvJd§{@C0Ë˜Ù•„’ ¿Aº©QÜv>³6�ñäLŒs¨¹Þ®\„`f½9÷Â°Õ\s:ë„°·–oÅnƒÎïþµ.>¸„9¾¢l;PrÆ?ŸÓê�ÜÕ³?¯«�5¥]£—C]Û¶yuÁ/Ççt•öu¿Q™#Cê3·³4vn¢9Ò3ðsÑ‡Ï±
+c¥øœù•–ÓÚÂ. ´‡°¬DÆ§—TMîhÿ*‘»Â«súž˜Ø>™x^2I[�Õt4]V2p´>ôS
+ùQ'‹¡‚�í#uÐ¹×~Ž¾ßŒQªu¼§±fµ…­¦ÐÀe-N«¾¢’U3Ohƒ‰/í"ÕÜG#®xe?ÉõŠÒ	¹·rÃô t/TÐÛ+;õ¶è”È‹¼1ºƒ~taÐÏî®+zyüàÔÀG|’wþ`‡_e¹þn-Ï¿B9çÇñ@§¶Û7$�Œ@îþü…Vù!ÑƒOÿØÔ„.™9”ç¹ž¬Œé\5
+µe6L)nÆ¤ãÐe-.Úlš0õó��÷™”¦Ò”fÓM|œÂÿ	Bº£¯ðAviÑóÙ±Š<Áƒ•¦M(Ã+-Éxß~;L0]JÂ_+Ïk;ànõcþË”q8Ó
+tVjÿr.ÅrÄNïý¢Ì¨Ëƒrúñ’ôUKF3ÑÑB.[Ûoj1óÇ�¢5\/]ñÏgH}n’/ËP|TõDTft…ªemppþ]gæäš¹ïÕÝnúíã®Y£4�'¹¾Hwì+�‰ZI®ú/äÛŸlú–ËÜ0YäQ|â7@í€Æ‹ö"—÷ü¾¯½ùCüÐª@•C]¸ôV½ð`fp*Þì+]G=YjOyY0F‹"Ü–;éÛåêÞØ€uš�z=¦=Çm°E óvÕn ªàhŽrá7Ä*Â:-Dàò.IZò�Ofâ sg'#ŽJ®¸*�Ë8;ylr+°sä¸Xgÿã“;9Më¨3:¦¯Ÿ–<—äxXlr7	„öÒêt¦»¢p¹10ÚºÜÌî­æ£ã=0Ì²R’`ÿÇçã¾–æ^?)ÿ,ÌÚTeUTµþý´ƒqØ0‚b˜VÐmyï€<,ml2>H·êÁ]7&ÞÌ¿4Ìæ°Œ©Æ†ËgÌ²Ðýe  öÍE8gÎ…±çˆi…'ò>â'�®ž„Ñ`�ycMu>ˆ©wTäëGF™{W\ªn}„urÄ'LÊ?½¦°õä6?‘Q¡M¥Yãsî™”&7$¯£ÆÐŒåO6�Av*èà¦o™?iú’åyi4:QÕcA,ŽÍÇíÚSùG–^“.‚æó'ÞÑYÉÐS’ûNJºC/Kß“ÔÃ{�G¼àòòt6�ÅÇ¯M—:ÖHµ�šN£2G©ªÑ\êè¬Á#3ÇU´<ŠTÑò$pGÕX.¤;h
+öÕ_Çâs$'ªŠ ·fP,–Ò8°B:¬\õ@0wÚ“f™YªÁ4Ç¡Ù=LéÓ ïgG;Ž|Ê©pIúÅb€|Äàè¢^�¢*¿ˆÛõ¿6?ËZ\ê2Êôt¯ªõ‘|©¢[[ ‹8-¼áSœ ,NÈ½}BîmÐI¸p@#Ljy
+hˆ'ãTE¥¾1.»Ä� La€Ï±U¸1@$,gZñÆJã4&˜\ZnqXF-¾Ÿr|z«Q�k¼·ÎK™õO)4t�ŒFD¢öU©b5ØÂWØfHh‰)" �Cí4jk1i;ïEU“Ü`7»G}I5•H`ð…þQw£R2ƒŸØ!·|z­�ª8Ñv't;v¨ß�¶b¯T®h›”âBÝîñÆs$}0ž‹p?œÏ³÷2Ú»KsŸ3ý½˜D&B‰2×xîGB[w]p2í@S{Á�/Á½¦o3 ]þ’©±"ÿKÿX€Ng5f­X+Žgî"Cç);JKWg“×"ð£¬Àð¸*�WšNŸ)Ã(Ò:±¶Ldhíï/Êx@+V‡ã€`)\˜>U¬]NŒ…U˜#ø³ÀN2’Á8€ïœdvõä¤Ü’xFòøiÉ#Ì+ÒÏMÆý#é|Qú4·qeúÉÙÉð““ÞŽ›UŒÇÌ«ÓùÀ®Â„–óF!‘zFa¯…N~´¬Ï¥@ñÃ5V 8«Ã3j†gTB1Ëã²{Tµþ�·“j
+«[ÿ
+ó$ÙTBîæ\ ÙÏ‹cË¢+ËKTÒ·(‚p6=éê±±Õ9Ì5Vt³MãÇdÄ¢†±U$$ÆÛg‰Š½gÄeCÎå8¥üN›\¿3%SB	O@_T!	�¢ªõïªŸzÀ>üµ¡�ØâZì*\	ÜäÑàÌ‚‚<‡Ë˜Â{Éš½>!ç.µb<fz¿Fá³9ÿ­ªÉï�dÙ×®Ðq_äÀn Ñ¼ÀnÅ{úHqP¯á/]�Ô\”>Ó5JxÌðÊ9ý>j/òU…â,‚øs‚¢¦×òV|u°ô &*íqã¨¨øÜ×òï�Iùg—çŸK‚‹IŠ¼³2Ò/ÐFh5ˆ†=YpE$þÃþh|ð1
+z>;‰0D~‡fàI¡Ñê„úÐ8(®ðöƒŒGµ¬³¢…é‹èˆëâ=Œž–�ºŸ„Sµ ÿ½F_X%À•¹jÛæ€ÚQMòð`÷L(!>•©%ïBÒnÍåÎy8Ö´)ä¡è¯²¼KÀGú:	žªrâ€Éÿáå>yÏÞp¾#stÖ % |+çY#”ùøÁ£¡6¿†ÿ*­ã­”Ž‚1ä6^¤5óåt¥ t™2+{Ó¿pU‡ßp}•$ŽUY×	õ.áMÞ�•RM¿ýc/nëZW²ùRå}låLK”¸(¾4„zG”à·Œ(:f‡å¤ÈPÈo´œÕæk¸’ÛàÎcã[ åU·¬‡ŽÀ?ÖîêÑÆíØ"Æ¤+È?Ñä=Ã1×ÁÔ0÷û¤n©kúQÔûv�W`T3æ�Ã¢ œ¨êÅ#h´È[®Ú�].×øÒÁ·–‘c³u!’Q÷=_{!ò‡ø¡UûÇžûNí§‡8Œ’Á·jé#Ü<ÐŠ1€™b8:%FcÓ·•2D²W¬�|ã¸VfA©U€G%û9gðKW¢ïœ.cÔÝÔ`�Ï/‘äƒ“º„´õF>rYú>Ç9&S»*—+êº�˜P^¿4}ã¨ä2ÀôŒä1 nÈGŽKnçLx&—ßf…·4øŠÓÎIFq)'’€‰$Õ·*
+¨H	,¼é#î
+”äVoPÌmh³çÿ±>Óp%î:°¿£‘UƒšÌ®lùüÿ)íYFë‡í‚”EuããÃ0Â0¤¼%Â1¿“bÏúÄo L.±Ìükeß`7ØRñˆˆB,V¸†µÇº†:úau¹u¡Œ}J]rGÐÉãÂò»~‡×ñ|~ìjý>Á„NÊ?ub‹k¢´…XÛ5áwmÛì)m›ai±~ã²ï…ªŒÌ�¿ú�ËîÉƒUlòÆ¡<ï¼1Íƒæ(=í}.ZÕ«
+<ŸõËÈð£€0^˜z¶DEÇ$Íúµwgðˆ.I_Á âê(•c$ýŽ'sEúžÏÉÀó“êî‘4��Àô¼Wuæí–&ã‚ŽÆcáÇgwWõá¶[\…UÛü�)íNiÛtJ»Ægú…yùÐh(¸ÞÜcq�:G·E Î†òp6@L\ŽÓ¶Kn�vž”ÃÏ2k¥¹7z0$Ç.Pôòu*FtçÓöŽè`Ô…;A½w�ªÓ�sä*Ðéje wuÁ/q]bäü«õ”¶YÜ3ÏãTØE,kaá”¶™¼ñ9Eã²ûmöÜ„œ;å­M€èAa—ŒÆ²¼ŽÊÐÿ¬¬E'À±¬ÅeÐ.Ý7>çnú”ËŽmþP,žgL‘–Â‡R^…Á}tòbømPqª_à	k¥t�ÿ€”v™ ¥ÆÕM^ÆXe<ôQ¹m¾”ë2æs�²’ÐÏÕt™‹b{eÉu·-¦Eèöq	Ç<c.höîññyø<ªF7ƒëó/qÒ%J$yÙãáñ²‹Ô]!ôTHL‡Æì&ë²òuÖb]ýý·¸Âˆñ±w¨Oï´ö²Ó¶ñEZ¶]eìii+J®ûæ•ü2ÞÍ1_Ê~šÃ§¸­<åx$ÓÒÁMßz4²A?ßSˆ,þ¾¯½ùCüÐªt=–?VbßùÓJgcjUa£HÚMŸzËÒû`[=´¤_÷�Ç<ØÄµ`
+¬�œT‚÷uy:ûÚt‰*2ow°kïµ‹ŠŒ.ŽX·œOñC
+n‚wL–Žéë�¾Né»ª3øæ÷ÒôMÈãÑÉ5œ…„›\”Ns*ÁéÉ£pØ“)Œyy§ô�«Ò¹õ³’!aWéeØÃn,6Ë¿\QÚ-Àt³H2·$£T,5äÊ™ª˜�QYÃ�EŒRiîÍSHj[D1ÜCŒ¢xîaa'ay@ Úòéõ± 
+üEJc�H3ßPz0—u#cÛë‹þA@8™0­aLS  ñ®§¶Û·<¯=Dã• Ô°·ðMøK¤uhs-”´±øê/š_“ŽÙÅoïÄqŽ#UJsoÁh—ç·ç£ÁöNÈ½½ªõ?–m÷yÆ!M_å==+m±™2JÓEÊÛ6—Þv�ætÜæ{#Ja—Ãr°~îw3>í/vê�Ôq×X¥áÊtÎMÖŸŸT�™(é‹NéÛ®­†o†×DgÑÅ&¤Ø=+Ÿˆï,T(Å8È‘–gb±Ge”4ñgPšuRÝ&,°…_ñá™±«‹„Ñƒ†Kn	ÏäËIAí¿x4¨åŠÞAÕßÎì{l„dlT¤V,ß•çŸ‹U,Í½˜{ñàðFb·QU)­ïÇo¾Ëz8ïü¹N_.Â†U:9âµ$4Çù|IË­ôÚ¤ü3ªZ	€‚k5…m4uWiî’.À‰¹�Gd–V´<¡,ïR¯{ƒt¼p	´‡Ø>H'Òd-–¾Éù¥¹·V´<^É™Êhn½ÄÁMßÁë£ßé<@éš>pIz�µ„Á,0‹ù“	èÙø#½_�»"�îíZ2ýNÂƒ+@ÛeâVK¬¸Å<rÔ_¦«ÐW–)ˆIÖ²‡�Ô<±§°Ìa3ŽR0í¬™MBûo é@IØïÞýtá­‘œòßÂgïW^6wØª5¨½Ùj“Å•ûEÈëV;ùÞEbàuXc¾”³¶XòãMÆaIOíWÒxÎQ<+s¢¶¥¾ñmãBh•8b‡ö\€nÙ=ß÷µ"ˆZUr£›%X€ˆEÚÑ'¤ ¶`¦lë˜•R^"µÞwUü}—Àt5SÀ*¬ØR¯ç3Àl-�<ˆm´û§]ƒ­Þ¢r"$vOI—[Ší“Ò{¥Q[ä�§ù)§]•bá&ßÐà‹ËÓ™˜S‹á ‹í“²ó“
+~s&r]ºLì�¾€e%/Kgt“äõÕé|gú;“¬|`ÿ-Nráá>÷Å:ÌV+Fª†ÝZ'R1¹B:ç®	9]*Z?)ÿìIù§U·þÕÄ—ãÞcèü€^P¸kb	/gÄ²Ûq± g¸ü¼HÂ8}‚Bs)d\pyü3¢Åêè�	_:2s¼×yFgÆ<JçH ðù_Ä™ä !
+Åá«ß;*_�ù…É²¿Yu­þ ¸×¶ÍÅV×¶mn*4¹ÍO`¬|Â7ŽÏîÀMÆ4 {¦Ç4ÔZÝš©��o]XAø�Ã>%D¶Ô…D¥¥ð•ëXa»b>ö¬7(Øéššv>-y'ÇŠç'•pÜÜ!œx=Þ‘6wÜ¬À-É7}+ÍÏuNGb`” òàˆòßû Q¤Ê-pðšÂ“hH�Ý9ÖÂ© aôx,@äª‡bSØÕ®qW>½1œ¨åÜ‹C¡~€ÐÐ­nƒ`‹óþ Þis`´íÓÚÉ¹uºói[¾ÑaZ!%§²V¸.Qåªõ¯ÁMŽ[I¾²ÕŸ´²úëêÖG„žÃ�£Ò
+¾
+ã­²ÕÑ°``:ül,_mT\ÐªÖ¿�2‘¹·Å
+s”®‚Š+lüÑðŒÉÊÄ_Î™´s–Ó†5{
+æÈðKõ/žû™Œ#ô¨‚gœ�Ù»SœIáÒÅ¡ã÷¦„U)'b±©Ÿ3¿<w¾õYOíæC�Ä
+—;PÇ9’ýbqu&¦Ã*èv‰V¾Å“´›ç¬�Ó'âåvI\®Z!Ê[]¾·Y“bu‘¶ùÞ‡ÓSz_®Îã²#N´Áñ¦`yZãZ= Ñ"Ë�_Ÿ®ª÷ä·¸2·Ç½™/©í–ó€ÞHí§Ý[9c!ðîªÒ²[M{ò-.iª‚›¯©èóB(9ãv!òó®ß÷µ"ˆZàÜä��XTP7sdh³¨L«‘c¢²SIìòKF‹Ðœ^ÔM#Êå5€×00œH[—ë´_(¶y�E»™�ÃŒ!#™!Í¥®NZàœº:]À€Wxœv}ºòÒô,*o”è1¶}2áÚt)ÖÕÌVrF2P'¬¸2ýR	áâŠŠœÏ™×i™WUzv«OCà å¯1>%Š‹³p¨Tžw!ÓgLóþC›=«r	Ãp*ZžTÓ¦Ýä6?J0¼a÷~U—÷m�l#Ìå}ÉÅ&‡
+ÙEA1Âs;„4?½!¤r DPrÉ­±ÊÇ9°K>;ï’  Ø[¬"Øf1Ýh4©@oÁ²•æÞˆÑ®is@(®^G[bWKq ¡ÐrXHåð¯ˆNñöh›&·ùÄ¿ËÌƒLi·ÿô#"ÿkÌá¢OÈ¹Ûjœª§\)£) Îƒñ9EX&»d[F>Ñdö˜æ�a²\4ÁÙ¯
+~Þ*Õ[¬âEázáÏDNPÃ•Q-Â·¾=3gÄu9=éß%u*é&:‹žådúKúE±'ŽÕê)¨Ákp�Š‚l@ï°Ã½š�{k(äÞ^Ó¦-Ý„æy§¶ÛŸ. ^Q+9Š‰&úäÜèœz¿%Þ\I7üIï¸Î2Ž‡—Oñ" ¤ÞWêeMÞÕÖÞðk|N7¨wMa+\Îé`U©V$*]o/å‰ÆÓ)¡R^X@{Ö¶Í2zÒ‰ÜmY‹K�ÈÚÂ¼/Ï»€æGf–‚øœY6Í®-Ì)xRÕ~ˆÄ7 ]3‘	53*ÊóÎç´qÙ=©HÊh¼ÈMR¨UÊQšïxT�‘)�m—‚Ö—}¡ë¤UPÑ7|`Žsñ¨Õì%‚®/1Éj¸; y™å¼žh2ÃTÑ(‘[“+½ÓGb5ŠsXU,Úhí)ëtÉh¬Â7}3fáŠpW½¤÷`¤�¼(õì^±:û~g9Æ�ƒ«µÀµ™ÑÂd¹#¸j”±f¾=öaÍ¦ÝS§8½ÅÎ›Ã�œÓíØƒúðƒÕ=_ÔGÑzà¯CTîy‡Tñ†ôD£’–ý¬KÈuFÆS‰"ÖlOpØœõéÕ¹½ù_ú‡V•5ô~Õ…§s5ùP|p	ã
+ÃÈ˜w¬š†ëff„6á+2Ý\Iqe_y¤u�?×hiâSŽ()`ãî 6é¶E®“åqÒø.—¡¼8}Ò‡µ¼¾Á*mAVƒ�Ø¥ËÒ÷ ›ŠöÙyU:€³Þ5gÂÏŽŒ€Y&S1°�G ²c:ý’ôSQ%’¬;/™tsƒ�€&ï;§Ÿá=zµ‡Ãz0þyïk¨²áZÚ�)€MŸÓ'ÈàOš…?]IyrÁ?Ï¨-kq9¬Á™Fàiæqac…í/Á&ÞüC¼	uë[•Ïx[p–�ÎŠeÕÕ�ÇRÞgwy@-€­æDb“y•æ^÷dÓé*f·¬wìï¼†eæöøì2¤8ó"ýàØê
+Yì#�s¸ ò°Ð\ÅTÖ¶ÍÁ†‹ƒÀy;¥m&PòtTV:¬¢å‰@üÔvûqVnb‹«FfŽÒô�ñ0<£fló‡èpYTz…\ñOœ1ªòž¾³â
+Ö‰¥ãd¶{OYÊo;w‹ÎÁ
+µªI¦¼§× ùªx5½cúúùQ,òC.reúIÑ�nÒ*tùQybÛ‹µ—„Ý#øFÒ;¸éÛà£‹|ÕÖ´ù1 `:$úâ½¿GÑ;öHTì¿ALpY·è 1!ûEë‚+=½q‡ÇÚµ�àŒF×ZØxžªƒzªŽŸŸ«šöÏ"y{µûä'wÐSÜUÄ<·û >¥m88õ€}à¼ey—pƒ�«ô\gPã�U}©[iîÍ’Ó9Ò'Aò²‰-®C¥“S!ÿívS¼qA'kp�h"îydæ<œš�%Ç·é®Ý1† Š/ÄW%ÇçÜãµ`hãâNEŒ€œý!Î³˜õxDVM|¼ñÇÎž¦/€B¬)³þ\)üjI±EâÿÃª‚¡u†­@†«•õŽ0Ñ™LmoÐ0Âí¬vS«Êp¯÷†ŽË"ðgwQEm.äf´9)'»![â<k™ÎvŸøß©OÄç9å{i}Ì‹óÆbû½±¼®XÚ=´$b:Ù·¾B�µ¡¬
+å�ï{bÿüÓ)÷¾9éŽ9¥×Ìß®ù]s*n›5®Ó"†+“å^%Â86‰oÙCˆd(~Ï×^ˆü!~hÕÈßi¸NÊ«qà-?®ÝíõÚñal¯c€™0š/àÕçEns`�g™K‹Ú›’è¨¨Æ/<2=)®ICÝŒõTt~¹?‚x§^W¥s¹%~c!»(Ì†3;¤ÏC01§g'#AF.8J‚õáÎéçÐI®1±h*ØzQúÌ9Éh]!6³4²ºõN«²cl½hÃ,˜�Ó…G«lõwEq¿‡Ù‘Y†]šÒ®É”vMËò.Å”EaUª­jõGWx¯)lýü/´æ©½?ŒÇ#–URÕsÎ†ˆYûx�)öŽ$Fxãä0Ús.Œß ¨«u||Ž²	NJœ±…¤ÍÁwKŒŽmþ€”ßÞ‚5LÊ?
+p-�ÁðÂk@mì³vâþÊ‘‰-®ÅVc–�?>¨Ø�+82>»; tÏ¨,Í½Þ;,Ø:]¬Òt:��-�”:ÖÌûÑ®î+‘Æ×'Vƒw ¨ó}@F Ò%ÿ:¥ïÒì÷ÄâgŒïEÚiÁù�þC0•÷1NEBkJ¼#\Ü/ƒ«ß«ˆ'FÛÒ+ôŽ#gèDŽH­7nÃÔb¡ÈPâ¥væà*ÄŽí‘Ñ#ž+Ûx/ #?*E*;ÆI4."ytÏ¥w†»òÁ©á«xë–Ç-1
+HKv‡ŒöëžMlÑ9Ò1Úf1”Ý_¨¿†›	bXpÐä‚_ ÖQããáüL= UÀpÑØìû9Ÿ¯à|žñ9Å eiîMeyÆ4”^àñÖlÃšMÅo	á£üöô;°ˆ3SÖ¢t†žªhy¬DArÓ±Ù÷1[Ì`¥cK€K%î@ÁMÆ?Þ!”ú©¤È—ÒÅ^¥ä¥(”í.îFïG±ãývÐÝ2øŸƒÃ2¦>b_FÚnÝ•ˆÊTò
+3Ë°"‹±].è‚Ýš]½•« �Ï�h[�‘q¹^ëK±Pé€X;Ïªª¶Úk³BÌu%RÆã~J¤‰ÊG8‡‘Y¬�D°’Rün™’¢þÖÈ¬}Çøñ¶#ÇU¸Ë_çåbnãÚt©ƒÁ\+¶§bÌT¶#¢©im®Ü;¶2§<iåƒ?ÞÂ™S~wÜUŸÖ–L/-š3àïk»ÕÕHŠöQJfTÃÜSˆ¼óû¾öBäñ,2sT"ÈTÐ„XX[P"çÐN—*‰ÏÄ^ñ†ÿrdxFƒ‡óa
+T\è.9¨Ë­8á"WÂº·^èÕ³L)ÆA.˜PÖÀS•�H0q#­cúCš‘ãàü³’¡V…u~F{ueú14óÜd’# çyIÙÙÉˆ3’Ç€H‹¦:9½dßXéõ.7Ï\óî³C¹Æ+•F=3¤E$ãÌÍ‘×ÁÄ�˜—.Ë?grÁÁà ÆÓûPð¨Ù¿bò†V>m�gFk2.¼:v±Àó.‰­®O¯£…„KFÊÀ5Ê.?Z™
+âÉ7B±mè|—Ìàæ1˜#2&‰f¾QÙê(n`\vIUëßa]•,�]Ùê/åy€HUë? ‘mÈx÷ùdÁHòt\6=¬Ù3æ,ð”(÷“Y¦‚¹kÁM'�ƒ×à‘+Øb°3b¸Ÿ÷ûQ]`ƒ1ç„fW%Ð W¥óTä%hx]º—æâô%l„‘¸©hçèwº›e\ñ)©î¬•ðçÖ+sŽ‰*;<OÁƒpc‚·kàÀîkÛæòÔ¸0kœ×ÿ²ø”ÿƒÓâwHuPîÌ¥áŸà±Ì<!6‹­º@OÁôg!O\–]]p(Ã £Xž€EZÞã²û`¨A.î¤,ï¢Q™#éš±4÷–qÙ½¸ òy­”ˆürxF5^ÌÚ^Ñò¸Ém~é�9]øŠ²¼Ž¥¹7<§2"³”~ùOð\2¸ž{¶<ïüÒÜËò.¦û˜¡Z2Ýî¸²åŠÛ)@�BþkÔá®Ï‚©w¼+˜¸�ÎzÒKJü_Átàj^ó�ÉªØÙ[Lv¾�HìøäâÀ»¯*ú³æm”0¹6�wüŒ8×ÇÚ¤Žl ¨SÙ0\ï#ÄÃÕ’Ê»Oû!é?[�„~¡:§Ëz+ÜEZp±!(½»�Gm…¯åQ¯wØƒ3GRŽd½fìÊ´Äà±X½–|wXHöþˆÎýÚëö.ÿÇtv¶Ù«+ýâù�G§lî€cí
+_1ë«ñ—Ìßa^å=ŒøÇ§�4^ýì“O=–±ÜµæÍv4ZBëí)DÞñ}_{!ò‡øQ^ä'a$3¦„~£% •Q¡Œ§/É
+\XF`LóþZè€Y|¬Ò¥Ë¢ŽOSVHXN+N¨"Àw.žeóúm[fÖÕ/ÑN'3³¬$ÆÐrF¤Býç(ƒ`‘ÎcGàâôÅKÓ71¤ç'Õ‹Òiœƒ¥åàM6`�J5N#ç_‘~'eòrå‹Ó—ýÕÞ|Ñt[%›`y«7‹?¯3ûðTè1n23¦Ô´9 "ò;~
+g4&Nnó³‰¥³i?««ïØE+pòÂºF1ÇóëBt`.‹:ÇÐ^‰•†6r$´Ë”ÃtB	±á\6êå8Ìæ˜æ[›ËÕ6¥B‚áåyA*A@N€4ÁøÊ#Žè¬©ìÃqn	°›�sGUë#•ÐÑž2)ÿÌ/}�‰†k€˜c›÷Ã¢ªN.Ìe€V6Ó­�…0B-#aX³iŠ²X…íÅ²1$7}{ló¾ªè±äÌ(œÑ RÂijh#-Ïqiã½&]Lw0 @Ã’É—¤/{=œŽ;)éqN2æòt&�Å	—§³éAE±î²²«×Øµ²· Ê£”%ê ’ÇÌ£A‡§´mVÑò¤iÖ)ìÑ ’“,_úÁ)ÑÎŽn‚¤Cê£òiAñI Jºã½£â|FFäÉ|86úwlv_Ú§»"Ùê7"¼ÓâŠÜ®�ÚáôH
+CÄ�â#ÜßOF¡– ä„œ»ÁÓQY#híç¢:çõ`:(	Œ—´9ˆ_Ä	€&‹äI? û*ZÏàTŽ*+$è=�©Æ*±ª÷c¡£à ­Eo,Ï?W	ª[@É>R•§ÓcG/cÊC’ÄÑ‚ÀNÁÄ&‡!© MìBJ�y‡Šøx£äKzÙTË»u‘k“9çŠ±ä!F×ƒ
+_gB�z*¥1ÌµìF‰>»[Rž™î,3K:{_ÆŠÐžþE"¡Jš^îoç‘é…¼F-þ!Ç%ø¼]ûA‹zÔ/¨òíÅZ2µHŽÔž×»\)fDD¾¶ Å]Qºt—w<¥Gñ…óÔ¢Teã�Ÿl:]úÃß)7|‰N‹R¤÷ªòH,4ýì³òÛ?)9 @yÂuŸüfpGå#³ÉÜà8%—Á²žÿBäÒ[¿ïk/Dþ?´ê“M_c¦+'(b¹q/qSM±�R«v‚Æ.×Qå_ŠlÜ.¬Üì`6ç=1C¹HDEáÔµ»g‡óñ{ïç˜Mž)Ž‘†„â©\j6qš”ZÁ»e€˜ÑÂ,\Rðšt!ŸuGŒ*'_š¾Å«Sú6<ÔŒær)Â7™§GtÞ“·“x
+ AÅ6¨
+Ø*W—}ž_–w‰Ê×^
+ ALÆeß‡™Ó| V¶XÑòD°2BF®‡ùunÅô#bÐâœ3þ¡t€¿�9‚ƒ»eXfŸ¤#gJ¡å‚Øa190^9£Êñ)íaf+[þO¾O}•1—rî¦¼0ØÊà&ïèÃ2¦ŽÏîŽ§Š•®iÓN;.Ç|aÁÍ1Í™Üæç alcEÀç›tî¤üSñmªZýC-]¯¥Ò7XK¸P3º€§–€s­Ñ\´•…¦1°·«è§‚	7:°¹¸nÙ*,äÝQËc�˜à‡7J¾ž;ï¾úâs’‘í“	ü«}RÚ1}×ŸÇáX·im¼80éÛCßOéç ‘5ÍœyÄ ƒEòø 	T+âKÛ5t�Kž½¶0¿²ÕŸ¬ûDF
+Ì¯•‘ñç:i8º’NSÛ{ùèÌxYÒÁ™Œô¦c{xÑ¡�AXjdFÄÜF‡”À”u–ý|hÿ’IÿbHÓ—-´áðŒJ©ÀM§ýa…xY0ú‰-:Cç9t‚‰Õ­�à¿c³ï÷É-�áøðŒ*Ü]êU>Âx¡ðs&äÜI7qòÐfÏáÀŠÂÖïsK ªô¿ #´ú÷òÈÌ1üWº.ó€ÔîGuq(‰�Æ*
+wøD“ÙQ¤ãG[¹0ASã"Z'ð‰&³˜ŒVTÚ`èÂIs2rù»×`$*ò™÷ˆÅñë‚Ã•Š¸ùE¹;Œ‡¾3æÁ77Ø¨\ŒMõúuë\Ú€ÿv×b/c€ß _Ñµ>¶'0½Ñb©fÙÎX¬›lvW:ëIß¸2‘œí-ŒUŽðÛÁ¸pÔ²¨¾×2J‹¦êÙzä0n·E¼Oºé©íÃ{?—N¼u^õýVw›ÁkÀO×V=øá¤žŸi�G±‰ÆT‡xjÅ˜íiIå½ùÿÏZ•™â€´Ýº7@•VØ>¸?j¯gâ(S›ÞSY„+˜Vcš?*�¦Žv–DÀÿ07�WÑ°ZDÝ¥ª‚�t`ÛÛCþØCl#/†(S†ñÙ1}Íj¨p
+¾ˆOÁ8L@¸Î%é+74X}Y:ry:«Cú,lÅ	XPÕiæxƒÊ,ˆ0& çî”¨¬¥ðbßAÄÜ'ÏÎùÎgnbšFgÕJfY¨mõgG-ÖVµúCM~¦SÚ5†¶<{`lD¾|x˜âµÙôöŸë~|v„•Ì:1˜cdúŸ„eÁ•‘üøú‘Òµ>/Îá oøžÆZßñue °íU­®a?¹y0�{Y¸UH&È…qmºiêÚÂ1y›¼;*sô„ÜÛTÜaÀ¤ü3C3§à0Þ¸f%OÄyaoGeŽFGg=ÎÇ‡5›:Pj!Xl,®Â�¦/I*g._Í¿¤ ö¬+âÑk@ç…éS´--ÖCËe¦ @˜S Uêq¬÷”1Ü67�qãæUø?g‘Weé•€|Ž±„pU:÷ªt¾rCÖ(©|EqXÎýëaBÐ`JÛL7�PÛ6‹g¡G¤Õö7~EËª¦Í-µÜ\i88'ôË'ç="aî!wL83´<ì2•£SL<�ßú\ì¿YÝúW.›ùb8y‰Ã:´Î	¥›¤ê6t`T—Ž²†*Èøü.VJ›¾=¹Í�0ÁÒÜ™MåyíkÚ@ÛŽÊ9!ç.ÈcÔãÈîÁ—ÝœÅQáÑ¢fGÄÃÌÃáòVÑ­g€rtÖõ”¨Úâu½•=¼¾‡[«2Ç‹iIP•{°ªÕc�–¹ÿŠ-¼FŸrQƒ¸ázZ˜§»…Jù&ÍëœhØx‘67;B•¹æü‹î
+©ÒæBYÌ³~°”Vº_U`ä,Wg+7@SXÜÆ‘6ÞÊ±Ðœ]A�2„Šµ3rW8^m(äˆPì+e¥ÅŽ	s_‰·‹ÚZ,œÅ„(´Ì½cUIîDŠå;¬ÆÃF(…Ò=öxÝ×§«®o°ªsºÔ*v|G‘sŒï—¦ ßvÚùéDõQÎ‹#º¥?°Ë�ß­®&iøt�Uzö"—Üü}_{!ò‡ø¡U±{.øb�¼P�ÞžõìÏ™Å·%d1 †6{ALcÅ‰!¡uÚ¯ŠBìË!M§›9za�qˆ·,}ÈõÞÎv³†¹Àè=µé“Ú+ßèLIóÊô#¬¥Ë2^‘Î>#yì‚¤æÂdŠ#yÄß¸9Êo¶TÎ=»+°½&S]Ù‘±ŠÇ‹2Ž½eC0h£²†Ê]/}ãe‘òÜ8r¦°N�/åh×bf	²<ÿ\øWmÛl‡÷‘gqXP s÷ŠRÞ ’.¢ñÞÑ|à ¦8ÄT�Qe«ë1×üsýž
+$YÆ£÷ôR-èåCc�pxF5ö“{€Öa¥U¤r•ô¶Úæ½w~•‚ñºK´cÙÊZt¬„	ò,XK.Åc*°ð^Bîí<�ÆŽpŽf/bEùÓ©¬tvÞÑ;Ö¢ƒáß¡Ma3ˆnò|èá0*°Q»KHóÂÈ(_µ3ÕUb¼Ü*ÇqièMoA^�.ÐZÁFéE|£ÄÞÙà[W(T#VÈy�“B<O:*k6
+ÂË-%0z ¾4÷Vj?UµÆ¦´Í˜ÚîGpd×1ûÞ7Jò"I—�€Ÿß¾ûWJÉ¥�3r$ÔŠŽ	÷ÆË¤8B\üÉ¦¯qAzÁŠýöß€xgøZËÅ’ŒNˆÓ6îš±Í¢¹ÊóÛÇRv‹N-O†$2Ò “˜S-ŒŸM�0ºðRÀS¨==Å –àá\:‚®ç|G’‹¾•ÈÞ`Ù‰RÅJFØ.M›7˜;8~Š}cDfÙ�f/kç�ÑÂÍso\ÇÛ®ÿÈ¤öJ÷š§�<·íÂßn¦qo�ãÒç@íµéRE5;ÒxƒÕÑù"îœ�ÊÇ>Çü®^îxgTi–Y‘Rá4;½Á×³Þ9§CçJ¦†aÃ(b„_‘Fu_.°‹÷Žº*�CË«òã:¯®p¾AŠFp‘îÜ	Ú%û~çÝmí¤o³�2–qq'í^!kÃ­âÈÙ“W$vìrbUxX=õ\¼	¶¿ë’ñV‹áÝi³é-`%:Åû=„ÈÅ7}ß×^ˆü!~‚EÆÒÊg…â®ê^mvã„œ.x’¼WÁ—·cÎì0m”�}–)l÷ÏÙÁü)•ã×�6‹Û:ÉM>dä€€ƒd8aEZ»×XlZ]I¸Äþp'RÚYÆ¨fº<=³ÐTÊ@$Ðáãai;¥ïr’r]º\8²’�kùh—§¡7â™¼ÀŸõÉTÝ.E÷ÅŽÌ„œ;KsoÓ¼?- �#W¶:Ê0²²¼‹'äÜ�í�Ò®amaËŠ–Ç–ç]ðê¯#/Àâ-!¿yd]šd?,vµ°ÌX](L¬ï�P8çíy¥u×Ža™?/ŠÏòŠªŽ¿#�	…tÀgy‰\DÝjÉËãWoÒ‚ó[ÀJ‡ô·ŒW¼e«7XŽRËw#¬+‹'ò±¸ÒÁó’h{Ha;8ÈiÊÐÙ&p\(Ñ°O´ªê)?
+iøÌ§wG”6„±fE²f¼zzŽ¯šžoÒwÒçé2PÛxBRt~R¡êfOpÚy¡ùP	20)ÜùÜQIRDYÁPÔÇzåÊm—ñXS`F¥¹7OlqEUë#Gh>h‹tfbÄ²þ"¼º2Ê~ý:\zŠÆó”à`äû>KìQžò²F\uë#€E‡.:(€Oèè)Z†ÛöXâAîÑŽU‘d.˜´¼¶fÑžõ‡#“bµ�}<ó…9ÂXÂ	ájàfí¬qÏ|Å¨ÌÑœ Fàá†9ŽÎ¨eœ÷aît"]ƒ}VTvä¼…ŒX‰Æ¯v
+¼áR…{–;w~X³§œò€/Ä™”¦¼©…4/ÃGE÷6¶»ÎáS%×šØâjçS(“kWW¥ápØ
+¾ÅpætžîuK¯�á‚¡
+à†;—Ý§o�SlãBÊ8ì¦ÅPr´K´ŒÌs·B…ïíÊmŒö›lðÖ¡Ó@ºi±Âå¹­Ûc}g¤©/I_å{iä¾cjäüyEúA‰¨®’Jv¸–hQ,s½¦‚}QÜ–7˜kãx&âvlc`c‹îŽÄ¥ØÌµöÞ‘jC¿`áY>måÐ\y²é[^Žsœ<tuÏeÌßð}_{!ò‡øQ^äm‹oÚìyé‰}¤à�{Ë¤Ü¸NÈò¦	£Ê$UÁÖepÃ8ÉÈYKŒ
+ÌE(J5\ÙCË;%Ê³PJøšb‘p~o‰Q3»J˜…ïÂ÷ÀY‘ VÈ(UD÷Žb�#§Cú±ÕaF5f
+¤Àö2¡®KW€•W¥ó½á®=Ó%X€¢–îJ®Uí‰Nÿ”«¼EúØ qæPcÛ¼ß¤üSqï-áfa*™Å ×”v�x_š{ÝSÊ5ÅTÉ¢îÕ�z`–ƒ•ü2þårÆØd@p†¤­gŸK¯ ¤‘‘O�ª\�×«J3wÕc-™Þ
+´ÊÓùê4Bñ%í¾DÅ¡¾¤}¼Ud­?:Q¥…6GeÀ–§ÈWyCUŠÐw*¢‡cÿ‰ž7Î±Fýî`Q@çö¨ÎZ^××\x0¨÷F€kµXþÝ«ÜIpöÈc]Ãù×¤Ÿ‚×+Þ¦cúxj]ìˆyQú4¯ËÓÙŠ7H¯ñº*�Ë‘ÎéÒs“ñZÚZájËvø¹=~Dh
+7	¯‡Á¶ªqüme«¿ÒS ¦äLYÓæÇ5…mÀ5ïBòÞÅ5xÿÜÏ£Ghö�w8"Lä¾ý§:ù…™'Ä™tY:Ëú< ø56»ï¨¬a´›CúA–ËÒ÷%›?‹j5ª!MCÐ@ûòk†4�ŽñtØ¤†ÖzÉ¡Ž-o)£â�IzeŽÿ”òê‹xD`bE’ FZ‡ùb\vOH==+í‚ˆ(vÚ>ÇäÞôVˆÈ·zõÛkÑôšÜ×-øöu™ÔŒs­¦næ+ŠŽ[DËsÎ±8¹¢ê`†™]oMË˜¢ªÙ»4�w9ãµXõ}T™‘³Ù19÷D9ƒÏMÓ„³[¹ 2e–*vý3\©"Á«‹…ì.Hj4»½Ÿªpó®)°[ðÜÁÜ‚·…rŽ¢hxÒnÚÇ¬/@ù­Âx¶)s—Ú×t�ýÍí^UÙ…¨´e��TÑÒ)ÛŒÿ>ú.>Åt7¡�®~Ë•§U¾ÞE®œàŠ±R®žÿ¨–m¹aïÈ»wj56L™¹{‘Qöû½öBäñC«Š,lÇø |*¬³÷Õ/Ljü"œ.ŸÃèb$à—‚#Žùg’Z�C»0>%Üñî°fS]žsÇhÑ2ìf¦@{Lvmú/ñ$
+¥»†ë¬î¸8Œ0˜ØU1„—†@`â�
+2÷¢ôÌLJfyxQ¤¸8Onv”šd@¾ôtl$×qýV�y<‹ÖÄViú
+–
+cëFžQU–×¡¦° |tE¸k™5°¶mvmÛ\l/–ù™ŸH.à� DXIPÅ¿„´u¦œÎâö�Î®ÃP/«¾õÇØãøÓÇãS¿‹%¾©íöu‰XÝÞ:GË0m�=ŠqÆI 1�hï”
+Wc1UT9øÕð¯Þ*½çØ*Ð–Çq®‘s»Ëò›v³UÐv¾j_>oc{¿rÀmoUÕÇ²9ü}7O÷¢Ç»ÅÞÐL,�ò"§Y.àìd¸–Äç�š<àb�§'�ð_%B®ä)Tt½b•_¢Ëèn¬¨w¸ê½ú‘Æ˜sÄ±0¨Ó°Œ©*Ð™7¹ÍÏžþ1,ì‘ú2d¿±ñG�„$ào×ûˆŠÒ‡ÔÓþ`oÀGH½láw® ˜rptÖãÒE¿vRþé#2ÊÀ2hÃX¢ ;x"Ú¦Ã#Åàœ!Ù��.PX¢RJÞŸµ$7E"/™9Aa9«…òé¸ì•�‹@2«<=¤´É“F­¨ÑYƒT‚êËÇÂëÛÌ|”`ì‚²¼ŽŽ…ó"€k,zçÚˆ.ÛÊ™£³žè­ÐS«Æ�A]Õ‰ šºG}Ùkô„çÚ²SÄm{erDF¹¨Ü·Ú°ØèÄg2©Æ™åk´ìÿV„7K%ÀhrgÃµŽ1ðò»ÇŒw^œ1ä5ÉÃÙwË½?ûª¦ïL&øð³–Oìþqe�§•½õ`«-<>äŽ–w¬˜ïfE ¬·Ž�£R�gä•Ö©~úBG™â*{wÒù;ü‰	Q‘«¼ŽQ¬ãwÇPŒÎ5�Ëi•o¼òÊ+ÏU¾¹;sCa…�Þòh
+ÊÙ%=¢ÁóÛÙ‘ÿQ?µµµÇsLVVVHÚ.[ö/ÿõÀ4lØð¸ãŽ[²dÉ¿ûøÿþÃw�ÎzÒ
+9ÃšM³›å7ý-cv»*ÀÇ˜Ç``¥ìý.£[ÊÉŸ©ødxÆdåVl³¨£�x1;¼hô­¤ÇLÙâøG¯yâìÎNbúð/£‚’Z�Yg�/å1Â¥™³×T®¡(|8yD[cß:©ÄYÌ¼¾™øV319Ç€»
+•ò¼‹&·ù)&Å)l-�ÅÛ�5´ºàÐªÖ¿	Ñ¹ÇKEÚØ¢B$§´k‚Q
+£>ãI±Ä
+Ì9Þô4nFAòàÈ¬ùàÇçJ°NõŸûE°Hà¸²ÕÑü�kÛæ”µ¸ì‰&³m»zJ ’ixFò¸ž}ÍYÉ¨pcÛu¿‚ƒüŸh2CRºk½å¤üµµ*ý�J6l�¶(gm™R­#…MŠå‹aeG]¡V[æ·^Ë¼]aS�²Þ<Â�\RêùÆ±Ä×¦‹/LjAÃkÒ…P­î ³UÏú™«Ò9Üó…éS±,°Ï·�Ò·µ¶¶ QÜÖz²³`r~n”HÎ˜2¨ñÇ€£ä7£†cEËËób§�®)Ï»(ê·mf…ðÊV³€*�L¯Mi›Zâÿ¾
+ÇCø]p8'Q¢EE7\M’�˜u¾rxt4o0t!Ëi#xã@M,0¦âÌð;/™ÄcÞ´zƒÊû®sÌ$�æ�{ð]RÆ¼×Oƒ[<Ü‘-#2*%Ó½sxFµ÷
+M?5ùÈ2ª½Üb=êq„«9Ó�Ûsl-_×'j“½¯šŒ^Þî×Îû:nÃ§
+A_&ñ´Ï]0Ý1É†DR@•‹8 N«ß�`(T´Õ%’ø0 Z^ÉRä&×%ÂåÝQ^hbpöŽlŽï"N¹kŸºº-ŠÈÚ‰ûÇ@Âë+Êþzhûeå¿ãj­±)yàÚa—zÁÄ{”Þ�¹:]à²k×¤‹•s#ÓŒ’/bdv‘€4�Ö8IÇ÷À�Æ˜ÐwW¦sø]\¯í£�Ú¯¸ìué2çžðAYâ«AIŽÀ¸½aä^v¼«s²º*‹ÄqûN…óÐBdH ~¿×{ˆ,---))yøá‡ÿˆ=zôþûï?vìØ÷ßÿØc�=ì°ÃvîÜùï8þ¯þX£•	BÏb'�f5 Ñ"æµÐmû#ÚI‘Dä#®c8<£ª¢%£€9'RyŸZkz›2-IŠ¥“s1qÆ°7<™AJõýÊÌ³cÂ(Yõ(â¬°�p°™­EñèõññéGXl~_�L¶(ú¥é[œo¡ÈÝSXU,?wAœîâ�.Pš{·j¡QKÄÐ[\‰Yy@ØGÔRlÑ©²ÕQ-O®jõÇÊ–ÿ€Ü[˜Ùò¼A½°¢Rqqˆ$†zæñÁP\�Sì ÕyÃc±½ÕC©+(Ý¬} ¤ xJ»Æ“Æø+©ÿ“ …&³å`|ycƒu×¦KyRXüÐÑç$£ø—c˜¤^gãˆ×ÄÄÂžõÒ™Ö ×JFl.&Ø‹QŽ“÷*�k²x¿©G½õë#ñ@	ÄÍÀb,�‚ûMwp¤H!Ø7•ÉÇ]uN—�—”ãº@ùµ…:çâôE0‘“Û':¤ÏÓY×¦K²[è2Úæ–v3bÕ”�èM€iX³§¥_1
+Yš{ãØìûñÍ Ã’š7.»ïiCÈ>^JyÞyÏKžÈi‰´óÔÒÈc=¤®/8îf^w…éOÿu¼Þùs,€ÛÛ©hyÎ>×„ iú2C]›\1z�ø+cø}ÎŸà>tØ…Þx"'å9¬Å‹�ÎoÂSòÔ7^µf#SÀTH›ƒËGñú�x½#_8â�qºyÎkÝ^Ó‹Ü�€Ý/\mJÌqG�úxr¿„°–Ù\3¶i¯É÷ÖÆŸ#“¥,º¬Dhë�9îŸ¯î"ÎÈ„ê^ßï®”ÁAîÇ+ðEÚmôQo…ú8 ÆŒ¡Ô¡Fpš’oÃª\ª±ë4ýË7úæiIþ¥P½/�$Ú­²ïGŒœÐ…kôÝø»ç”4üÎË¤ÎÄôàÄÓ»Y[–F(L/R…‹µÿ¾äqqîÁâ9%Qgm.#—O�‘É¿¸U:%Hî>ßr3üóeœüYÅòæ_–¾O#0¶ÍvŠ%ò,ýÛØIç
+J^Ûä$ìç^ˆü�ýyï½÷þˆüÍo~sýõ×ûýòåËÓ4}þùçÿÇÿÕ¾kh³iâPQ(ÐÉJ&ô>Þ{Y«+¿c�«Ù37òÎ‡”aÉÁ/ì`OžlúÚý1‹ßÅ_å#`nï(¿ø"¼R^t„¨æÔêõÚÅÅû¯„PpY‡Õõ¨ldôbW‘÷Ä¦äVí,t�'ïùÍ\à¥í¡:©ókÒEÅ2¶=ëœÃMJ~ßŒA`B™›£³×‘u–µää±Í€?V·þ7��5ŠI™\pØ'!�×¶œÜæg“Ûüºá@JÉlv ß’±é¦ý,èäkGÄŸpÃYÚçšq´âF‰÷¯ÿ6(¤æí?Åe§´ÍP
+^ÃP“]»® *�ý! öê�rÇ&4Ç%w^’¾Ls�š<ÈÓuL_sñì älSç±º`
+ˆ]²…w»³à£‚Þ�¶8;ÆžŒË ÙWÐx&ÃrAR[,hv€e³G„…o“5_„Â-INpÙñI@ð´äApüü¤òÔ¤/\d‡p	gsO¾ë>;ÏIFƒžÊgù´KlCm g„××¦ï§‚ïVQrîÀ‰Ël¥¹7U>±ÅUxÒ/=ÚX[Øbj»ý§°�+kT·>â…ñLÊ?‹¾sî$/G&s—â8�[[˜/p<žKáŽËîÉ72T¢ey-Ä­º¢_ îg'#ÏK*h„£’ËµÎüŠe�1³ø0JG
+�í#¬gÈIÆv›T‰¶x¡ÏÁ?,µž¶ô7Ù·q<°¶v¯¯xX"¥5“:"ê¦5ØF_xõ›¡Î�9KÅp–+Wá€M®ãÉgé\lµ´i‰ª}Ñ³|Öéÿ^Nì#6ÄTÌç“\Ns<³�Ç�{ÅÞ"´@mm
+Ä"C}qFnÛ›•Ê“]Âƒ›®Z¼×sœÀ_šÔ÷à09jù£'/ö°ì#Á0¾‚oª”±¸SË§_iùè“Û¤Hà-îÇ©IEQ·}¶¿âv= Ò\–ÛÀ\(§#vZÀ
+![ÔEYi47ãH†»TdÁNø5éÂÝ~#¶QSiýîÕæz¯ò[3Í=„È…W}ß×ÿ�¹mÛ¶}öÙ§²²r÷	tPïÞ½ÿ­ÇÿO_Çw�È\q€CÅC·8‚¿hdæØ‡öß0"£éa¯ù¸Z�tž`f1º <®8¤éKX³‘™£í:v×d|2ô“W+[ê[ß€ñQÀö2¯ÿH6y•·º”ã¼ÃêRZ�Y¡-þ™»cS��Ží-VÔ%é«^<aèr3Hyè›¼b†È4ôZ“oFZå;yXE’o‘Q>&kà¨¬áäüË¤ü3Êó.‚,�i>�ªiÓÛXÙê¯˜Óê‚CKs¯¼¦IƒÜŒèšƒêJâbf�‘‡~÷¯±ÿ¯œ}ŠÊ;º ä¯ã¿P•·þX§Š;_ŠŒU­‡ŸT´<	Ê3)ÿ´²¼KŸþI2:kˆ±WÛfFäj”ÛÐ\š¾}v2}ARs|r¾ ÊCá!cN±iŽ£¸K�—XZ¯H)]Ø.g‰:8§HÙ]´ªÆ§°Æ4'ˆ˜oÀç7gÒ›@¸Ð3"+&ÃâivòíôÎ™É``š{PRd5·wBr7Të¼dÒÉI¯S“~ç'U°ËNqÏ#8“ó¹2·d¸ì*†ùUàÄ:×Ûu�g¿XîMSLûiìâHLÌíLkÐPåùç†xÁÁã²ûÐG°ïªÖ¿¥Á8é	ü–fŸS1ÍçU_£<ïËÛÒeô—cb-7Jrç[;Ž.«lõ'ÆƒüD“âkÊ»àÚtñ™É<>ïyN ¡:¥ïÐJ<šèÆgÎ@/–¡Eã�®æ5OçÓ©¼øvm{}óÐþ›h�'›¾Íïªlˆ¥
+jƒ, dPã�o<Ï•ª8nÃî5õÚ6,˜$Ä½ÓÐ¹›>¢¥à»BáaµrX"‚Žya17³0îÓXN©0#V�À·Vù¸½þVKêöG¶8ÓÐÐY\'ÑÌ›ï¼œK› +=ëü«M!q) sr¥‘NB©pœ\Õ÷#oPVôú¸gÖö»”\i4T&õZiÝìp©‚žÊÎðC)Øé;'ÃŒ÷€�d-Wx×†gä|‚%±3\AÉ×!kÀP¤ñ	¯o°ÊwL×®µ¶ ·2æÈÏe5WRvÈŒÃî=íÆì)D^ù}_ÿwBäŠ+øsúôé»OøË_þrã�7þ[�ÿŸ¾Ž“1>@†³ho<W2,¯1I“š``0AFeŽd`�ÏéÎ¸ÖlšALÆ*J¡î›þWÜ¯]~	nOW&×`ÃÆuazÆªÑ4§;µDjuëQ˜b-Â|¥��õ–× v¯Jç1›LùŽˆ°ï
+2<M˜L¦“ÅÞò}±J¼Ž‰P¬€vUŽ›oÇ¯_Ô–zšÑ;2³ttÖà	9]˜¶0AìOe«?iöÒøìîœ =‰Ê™#U·è'XT�ø›ÔòRà"¼0Å0€{ËiÓ�(ÄðbŸÛÃ¿*ZÍ|í7±5	s�Bº<ÇË‡†­šU+ðlºÃ"ä-O”ÈØføïÍò·iÍúO±ÌÞ‹9#ð×¤�srÒûÂd*îJÄð¾"q1ZÕÞ²7eÆ@/ßÔ`†g°“ZÑbíÎ+Ò£×ay .½Iº ÙùIµ¶o6r}È,ªÒüËdß„‘?ÏIFqò)Éýªm½…ßVž?+¦Dì·,MFG3Ì°xŽ<q  –ß˜<,,= Ñ’QYC—ðÚ¨ÌÑü±Ù÷ãºH+àð™¥´<Ø‘¤%!ŒShP]ðËg�ò;tæNË³Æjê4±H’ˆ@>ÒuÄr…ÒÜª®jýÏ|j\v	ŽÍÒîMÞ±‚·JÓu)þØ‹d¸žžôú¡0í“Òc“›9x�Ö™y:×HÂö�ô‚9²ƒ´í®p�‘Loò&"‚š=åd
+‡KLf‹áŒËzÿ‘ËzmSªÅ¡z¤T…ÍÎ’°$©•©"¡µ~ÓA,|÷Ïm„HÃ•Cš¾ì,Ó@>ˆÇHWºègq$à„Ï©PŸJçß$Ñïu®Jûû}§Jvôu[Ý­†BNæ·kúÐÅZOžÏøä«]È@Š…/Mßôî¶KO2ÀtK;¼ä^"nè]#)ßrI:]mòÅ=õáîœsC$P¯²óÌ¸µv+ß¢Ô0NÂ…ØZØ7†uHŸç{i>eyfÓÍul¹s^z�õ·Eêm»¥sÄ“ÇlrÄ¾—¥Ê¸½¤~˜»å´²y/DþÇþüçC¤tçB~Sš Á4ú´,ïbˆÞÐf/Ü¯"òÀ:ÕçÌçäá•
+p}ÆéÒœ<¬ÙTÍ�P ïs9óÑ¢š–7ÇæË1þÚî(ãÖòV¤Ô2ËLé=FÈ·' \Kä³ÝéN1b¶*ŸsµâC–z]ˆçM4‡	©ØÍ×ØX�nwVï€F‹]¶^5ÙtQTüvžÈEˆ0Ñààøì#2*&µ<CÊã—ç�ÿÊá|“ÂÆÖ¶âÏòüö¼ûøýæïTéˆØŽœuÄ0/Z¶Ðùë0ÔSÛíQ”©‰b‚m›�°Xo.ˆM†"Mns w82söS©dM_–Zé¦‹Ó—GÊç©�In:-yÜqèmuY:CëHu[{’s§%ëýÅðº:–ü–^¨SŸv¸­
+8ÂøÀAÎçRÅ
+Ú<=yD¼ï>žÊKÿ–ÎÂ€`ghÿé³Ç%·ÓþFî“+œ‘<Æ{ËÉãÀ_Ñ1}ýŠôÃŽétï«ZÎÚ5#¼éÓ­.Çs~è±¨â/mÀ½Û'VìŸžQUš{3í6.û¾ÑYO*1ÿX€Ï"¨ø`´jHëmð�•L‡ßà½D€ëŸ´G©•Xþe]z.È¿èµŠ–'[(•�1:ë	¶ê0öaä8NÃi´�ÏSœ‘<-y˜.83X\œ¾k:q<\`Âœc‹Ç\óŒaš±g,EÎ(Öª`Œpá)WpœdHöí;g@hôn£7•Œ¿£{}4¸Õº×Ë“:´Uñœ›¸ç\›.áúZ÷‹<�>Ñ×ëÝÔ|�«rÐ8cÝêwÙJê„bvId—2>¾ó‚-½æ½ûºpšúÛ¸9ÂÉbEˆGsÔœê¡oìóº.·�²M mi–b‘iïÀ:ÿÑÛ¾·HèÆúuZšþVÌt§#÷´É²Ø`Ç×Y×·—BËºµ\siú†O{0ÔžË-ÙÐYÕÕÁJàƒ#ý®�¼ÅèÅµ£OÍ|ñ4hXGAØRáÑeŠü\q;»¬½à‚GV)T`ð,÷æž³È—}ß×ÿ�ùŸ°Ð
+.iúê &³-A*ˆ.J27¡ºýD“™™�s—*œ>ÍÀ°ð#ƒYû5µ
+É[!¼{†ÿªÀ\ˆ€Šó¾ àö‰„wTåg5<ÎYT¨ð�êÎla4B”´?²ÝQëÌ#ûœŒ|%ÄÎËRíRûïh0×°Ã*Êü­Å[x¯œîíÞÖT!È•èþ‘/?OrwñhÊõŽŒÈ¨ÛÕì% ’á=PXÕú÷Õ­ÅcâÛCŸ+[ýIU¨ŽÄ�ŽÌ5‹a”ù§×æWµŠÜÉi
+q�BïBz1–÷üþ2µÝ~˜hima‹Ú¶ÍÅbö™Ò6cLó�œ3¥mÓšÂÖƒ›¾ŒÈ(Ó-&ƒiÂºDÀ�Né»ç$#/H&ŸŸTœœô:>éÂoà‰ãç%e`¤Ò%Ã°ÒÌ}>‹ÉRhÓ‡^nÅ=¾2ý[Áì9h…•àƒÎß÷.›¢Xw)Nr'û"p2>6¤kC�Ô—zü ÃrIúÊ‰I7î
+Âž“Œ9!ézJro¯&S¸7n	„WÏ—rØ.C¤ó&Ü¡JÏÙÀø±¾“S>íÒhï3À‘÷Œ¥Ø‘lö"D’Æœxt,r\v/À÷#zägñ›^ÀåƒWNi×¤¢åIÏýÂ…Ì
+Ëó.r-ì²¼‹àõ“òÏ¢7'äÜ9±ÅÃ2¦à;ñ~h³güÎ7y¤á:—�AÓÎäÙia~—ÜS>.¹ó¨¤4Ã¥	•[q’WZ€†¢”t•Û¬1¼”öì¡<gÓKÀ?6°íî…ëÓ^Ó+V0§ãš\¹éªt¾c85þÈÑ¡Åb@N\‚,õF†äƒÝ0‰´Õ‹9t
+>­BR7=¹á¢}êÄÀ¹gºÏ�vúºy
+ˆ]jùz×å±Œ•’³fÐ§^Àä»èMm~¦Œ�šÕå Õ<W’q_Ö“µ�.^à
+ß[R™÷k¿u‚óëÕ§»`%7 ‹,ã
+t�<�ùŽ„wÖ	iÃbu‡dI–b"TààÅs’ÑJYšMû;ðÏ;ÎÖæ"=µOá9íÚG‹¹À–ë2«dÃ.	/­OPÝÖ½>n/DþÇþüç‡ë<ÑdvxPã�ñ|°3½Ã&X‡ñàlì <
+óø†9‚ÕbTô�2¯Yí‘†k¸ŽÂÈ¿â_Cš¾Ò?
+Ó|ýxã(/‘óµœ öEðžòÙ­\Á™ZêßÂí^W¦j‹+¦3’¯•Mæe=:ž-Ó ý ”ô¦ ðÁÐµ>FQ$&¯÷®Ürã5‘7+ýa�r–·A¸�ÒÜë1¶�6üâÉ¦¯K hEiî-Ð7h/oJsoÓüÑ1YÇe÷Æ+_²ð™Ø%¤?/¶ú\Èìyb‹+µö»Éÿ‹ò\r×!:`â›¿…ª¨}+§ðvY¥‘™c†eLuŽ*-L»qW�ÀC`Ò9á‚zzòØ©Ißc’1ØR�?ƒ	N]•Î='Å#ìu'àRá%Ão•YfúËnÌ²lŽâí?²2ÚÁöÒ+ç{ùR,­Í· ©ZV]Ô>™È•/Hj8[<1)>?©<+y’#à#ÿå|îá„änþä ÀÁ{¬ÍMŽnŸLËØÀŸ+²:™°c‹ô ×ŽÈœè<Ð*°Œ)�G©vOPÕŒþòÜºÄJu»F80ögª�¢Ò…y c¬f–LÈ½=z¤MÛ(¾\XPÝúˆš6…OEÕª¼1ÍQ±æ/œàœð¥c›?‹Ä,�ÎzÜDÞQ Ž~tÝÉå­Å8/)?%¹ŸÇ?9é�§q\r]Ã ü{rEû¤”Nñâž«³aöi:Ë\àÎiÿ+¤ÏAê¼<¯�h!òÙ¿Ô;öwÖ‡¨­tÅê>±¬ºÅÕ0þÎìcš@µ¼«hOm#¨¤f�íi'ïhÅxµq¼³ŠÐá·0YŠDèœH—ñ¼ô‘ë\J6Ø&å: hïÁ2ç;èöàhø«[$Y³Ð÷L3Þ¼[ÇAcÊélaÖJH¸Æ	Ï*¥¢Cú¼ÂžCÈ·{}~"íqd@oñæ¸i,6J¼uÃmjF ÂV¿SBî^Xf ÓlÆ!_‡Ã×ÅjsxÚËëC¦3†•>K¬¼z
+ñ±-tÒžÜÏ�Öy_^íÿ…²?VYºÁb}‘/#ÑV¹,H79ç{‘ó;}ß×{ˆüòË/gÍš5~üxžôÙgŸåýæÍ›ÿG}Ç¸qãfÎœyì±Çzè¡ÿ2¹cÏ�ÿ«?Öh�¤f¥_ÑÝ!×øc¥¾>›+Ë»ðr+0¡*»€K�úlló~˜ ÉENW=Áw'¶¸dEˆ~³—Êó.™9Ö	‰ÐÉµÊªR;Q \	#;µß±NÑ};´´û­§ÊË‰%
+cú?)õWÆù�±Tø…—S(®DƒÏê°Æ¿Ãæµd·Q¥”VƒŒÌ•\¬qL×Æ‚QŽiþ°DÃf‚J#2ÊdxúQû)ª½÷äUÕúŸñ0¼øêµ…-]"ptÖ�ÒÜ›ašæ,Ï�8¼.›ãY-¥:‰@uÿ^Û67W£ åQÓ�q<XB1ŒÏ¹þÂ·ƒ’ã³{h)»Š)æøœìO‡�•Qýà¬d(6öÌd06Û=9:éŒ…97{RÒstL˜n
++$]’¾Œeè”¾£—*»¹û¬Š›ð1¬�ƒ5ÀŒ@m‘hOLýiÉC|D™˜µ€BÇô�³“\Ga9å0YÎù[r	èpaú÷ðçä<Ž�Ð«¿&ó¥*¬üa·Hš˜Š]âþ9âz34Ò÷ýÎ«
+SQ¾ü2ÐÐÊ¢x2yÀ9aøm6mTæ(p³ºõ¯„üŽ"Q��EÂ.içÚ¶9x,QE:§kU«?âÙ{)Ïk_žßþåC—×ä=q‡ª‡WN.8ˆfg$Ð#cš˜�s‡£t¼Öáu{fAÇô5-å…<ä½SúÞyÉ$X3­}br­q~RuzÒËlQwL±b{–ò°i/62hñI Æ6oŠ­á9’]ç´SÇG9oÔ»ô¸«³r÷h=†„ j9ýxKƒ¯èz�áuÅ.Š¼rÞST†Š‰&ŒL¢Ð,m°í²ô=ç{ºÂG\½X‹�žG ‚ƒÏB`Â³«‚ö;Î�åþ­¨Ã9¸ÙÞ‹ìËûË:^H¿S2Y^_üNÌç·K§ñ/šKµbgJ�r÷|[lbnfLzgÐ=ŠòÝàU&ïªÓ>²	e()xoK÷ú0¼z{‘¡¨BsùF¯�s„îP†õL?¸R$_ÊW;×ÒE$ñF¼qézâŽCæ¡•¤˜×ZÚÊ÷";~ß×{ˆ,--Mþß?/¿ü²ÿÕ¯_¿Ö­[|@Þ¿”ø·ÿßø&Å*Á¸î}"ng%s
+»í]0p£�QrñGÃ¥BC_7VÆ:mã�¼²
+;Ÿs�JÁ¾«j¼Ÿq5¥Šl~xÿ0Såì¿ŠéÛ]¾Í
+šM+pÔ½V¾Ò”ß¨²�Q(\~ûNûð·Ésf[^›a/­Ug¹#ÛÌŽ`·Ú•+7)£sž´>¢;7¬%»—Fe�T‰¨?Ï˜7t=YG´NlÑ™û‡ Öæ*—ü…žž Öl*.³ºà�I°ÃpÒ©íö
+ŸþIÝn×±Êwé¤ü³Œ˜0+›aœ+Zž¨ Ë‹T©fBÎÝŽ9Ý¡´åyÂ^'äÜi-h[0GUÀbŒ6Á_�ÔŸÜ�‘†ÎK* ;�s¡¨×7p†�Oº€�p,çYÉ0ÞƒPØ"/ q'‚aë®Iž”ôÄ¤{[¯ÛÖ\8S¹±¥Ç&·��ñ€†,B(€	h®>ÐÌ kÌ8�ÁENLº—ÜÔ*Èðuì-ëú()’�ÎüB1µ·åjü4ZƒQG;Hž½z@£Åc›?8.»~Ëøœ¢±ÍûÖ¶a(–æÞèJÄŒ=:‹¶­-lõÔ‰
+2öšÚîGN¥qZ‡#�Çeß[ž6"'åŸ]Õêô`È×gß?:kÐà¦o©
+ä€G®{²é›’Š‚ý­ðþ÷ {Ž Ò˜'%%Ç'wŠÂ�¤qx�Ã€Sá8^ŽÓ/&&ÖR@v¢4¥ÅXcLºü=IŒ~Èi´ùùIµòøà‰Kºƒ¿G«Ó\ÓüÿÐ2wÄR@È¦q&“B)»œáÎ41òzïÒq¡§#˜>ü‹;¡ûœ8ÏÕœuÈ„2ßä#<µoãÆ Á�õô"¹¸m,KÓ~‹sµv«ð_â�BJ:`ß…ßErÚ³•o2Ó”¾…ÂÅïÛo‡¤‰wÑ*´=—ÛæøvÈ‹ÖÕÕ
+Á�ä¾ÔâçÖid¨_+?áú@Ø¯~âïó¬F‚WÉ-)`û·*Žm‘Ïð¾œíÙüK¥Û?q’¯Ó'•w¶Æº—Ö~—äÂ7Þî¸ÿ�—ªßCˆœwÉ÷}ý·‡ÈÿO~hUÐkŒ«Œ	ÂDc€6�Q»“›aŽÇVàŠÃkpã�•nŠÀje€W/¥ªãêû%»
+Ä”æ^g%I,—Òëkëœó-‘;Ùôí{C(`Ÿr®.6\²ý7Àé¼›_RäŸ1àí+üo‹4Z79\ÓL“,Æ¿¼^g¯ÕxSÒÂ‰*è¼LZë¤4Òå•Ç	¹·C&U#ê‡Aæ÷ÈÌÒ‰-®Ö#Û®mïáÊÅ;¬¬Åe–;Ãê
+Có&åŸQÓæ€²¼Ž“òÏIÉu©&Ãå”¶MUèêŸù/'×¶mñá(×ÁBciL�—›†gT:â¨X®©s®µ±Ï‹?jÒ ¢\­˜?O‰Ä±''½¡6@!Þ8Íxn2áŒd€"I^ UiC¬(ÿí�>Ëg±QÅJåÀ† ¬˜zÀgƒ”n3>ž›Œ?&¹9HJƒUç$c¸2öÿÒôíc“[aL˜qBZ1ïÚ'­â_§'�ò)P•~¹8}‰¯ÃúÁ­@
+žÂ‰'˜”zõžMv¼AóÑYƒC¢ÞSQ§†5{
+ø£5pÀèDpXÆ”ªÖ¿1©œØâZ¼Zv?:ëq¼|•	9wá¨àçÀÍašÊæ8�î ï”P3çG™Mpoo\Á‚¨ôä±<ï\5kà€ÔÜ	DÕE�\pP$e-GÚ'yR¬(OG»áœ�tÅ3ÑºÜ
+màÎÇ[PÔå*[rïŽÑ†
+.ÝâzÄØsmYÎw…_ç¼+¶
+ÜÜ€­´›Àës‡�Ànœ}i6nÉÑ›ô/}ÇG*Nw½E‰«½â¶2ép\u�é³Ú%Œ­"èÇMÚÕä=OdÚÈ	ÅZà|�–éÎ-Òþõê÷]}ËOßœp_¨âÜñ‹ã{½?öö¹CÏYîúÌw‡­:<ì.i’s„±ÊÜän½øÏXÅÝ}´ ±…ÁãegÚP¤/D5ýÃ£ ÑÀ2·	~‡ø&§q·˜ÞsÁËÖÒ .ÓæxZ®Ã7â§yr5¥In´�”6+q~¦Ò^%¶˜-i�†í&oA–g�—‚MQ™¶V‹å-	# ÷"çvø¾¯½ùCü"ïûQˆá jÖ…ëßhù˜æ�	ò^™9›3*kèˆŒ
+ÞX�Û2´Ù4ìXƒ‘á#ÐI‰4~çReÆ®oÔº¬¶…sú*DV9#±^äR§:Î±ß¥xž/\FÜ[í®ýT"õNF»øfpIû±:¸ByjKU.6èÉ
+Ñ\ñ9�–¹ž×Ê@Wa¾^.iá0ÙÑ¡ÛÑ2ï©¤Â‡"§ñÈ£²F`�A±š6m‡gT�¤c³ûVµþ½ªF¶‘°ù-Ïü>ØšÉAÈ‹’>L.8ˆ?gü#6Â8V´<Î«µZÜ»itÖP	2L¥•ª.Í½™s†��Ò\Žâð’Mj¹�öÉ,ƒBhÞ‡­œ™<93|ZòÈQI'ˆá•éL˜å­1æû©Éƒ¸ÍLØésJâû\š 5|�Æ”¸ßZðsAKò0ÅÂœ˜cðÏH?%¹÷´äaü|ð”7€)„QñB½9_Xùæß“«ŽIn )8Š•ãdnOÉõ‘ ‰É½*Ã ZM—OÖvpÚµ+Tº(‰r¿{DrÐ8iC›=?"c’Ç›jj‘Q6)ÿÔÇÏ+ËëPÑò•ÿ¸‚Yž®oÆeßWÙê¯IXyUë#ð ËZ\^ÑòUÑºŽÏŠWæÕ´iÇŸ8ŠÑ×™£“Zž¢‘?˜žr�+2–hÛòÁ¬ä |™i´64:ï<PúâÔäL1Ï…�çk¹Ÿ™<é)Z˜ÖÓZå·Øj*^ÄåéLÉ©}ª Ô/å½êâÎ‰À8_2‘º~·	¯�m²5õà«¬"‡šaRîÞD/{›²Hü—3�Š×zÝ¢`î5Â…®õYü\$â‹ð¸@™ëÊ€„	ò8\“¥�@ê›š/|¢ýÒÊGfE¬Ñi³oi± oÃ­Ïâ‰¸ÙfhÔ
+F$�SŠö±°êÆóÙÉ0îáÜdÌn©:GŸÒ†üæ1{E®Ð:aâV²~¢ø„UZ(ŽðTQõ¹n/ãß¡mwVZ_I=à[®@kð€Ó7€?h>ç+_l±]æ7y§:H‚<±|m�‘?ï‰%ëe´s¸LJðÐèSËê:E”f±6à^ˆü/ýC«Â¡ðv‹¥•�­(ëóÃ³0à`¨Ö—–²Û¯�È,#‹¯áÞ;÷¶Èð€@�/ŽmÀëVÉžéc³ïëÑTÁ|‡˜æ·Î˜é3%á:G‹¤’+œ�á‡îÜ.gÛ±j2MK¤¬UW©ü¦°¼˜ÿz)füº­– |¬Ñ2ž+j‘4ZÎ`æƒNN—<Ë�Áš¾¥hÞÅøXWžKëŸÕÞIQÝïÌê‚Ã‡6{±¶°eÈŒg÷˜ktÝø,Í²m (žvÓŒ œÝ9 .®2hNë#*[Åg!’#•ÇGŽiþHe«£9nÆ
+[á@Ì!Í^‚’Ó8ÐjZÀŽ·óÁ8¯Ñaj@" ü:!)b¾Ÿ˜t?1¹ç´ä! ‰)�õû°Þ¥Ïðâ ³Ë|bÒÍËVÁbcy”ö$èŒd +ª¨˜Å{P!l)†°Ãæó-|KŽÑÓ’ï;0D€û4Ð/Ç&7ŸÜÅ‘“’ÌÎ	É=pÐV™•ãAF§ló]N	ì*ÃÈÅ�à†_DWJm;cŒ‘	O·�Áï¢�€EÇ£KÂtO1Æ8½é†ããÝU´<q\v	=B“j½ú.<Ü�ªV ÁùÈ>½ƒãÇoX?ãü©ÐB?gpÓ·AÃòüöÌ°¸OÆnµšŸêGkµŠ^*Z!;¼ˆ¡Adü§ót8Ç$7âËáÃàÌ8)†·¡vh¥×]¯P$É-‘´¾R»{_¸“3�íÎÅÁ:“Þ[£Ú•ã¼¢¨˜Øy|ª«6õ¼}© ”´­e¦”2¼Üiüë6Õ�b6]š¾am|æßÂ]©nNðb:”»åµfþ%®”Õ</:{®‰Œ¯ÅPañ)ù«›ÊúÎR\è¶;
+>­èÿîc�Þâé\Ã‘«qWNy¨«cÂÆîÉI‰0¿OÓñíŒ™i,ßEE¿Ü½¼Àý…Z)Z(|¯ËùåÞ¸šÈaíÆÜk”â¸2×’‚Üy€¡ÍNËŸžôg@2ü®Ð˜äNðÙ¸Žótð…´¸ºÌ€®àðe–íº]~Çypç™<*>guŸýê*8[ÒaO!òÂïûÚ‘?Ä­
+]yÓÄRà�Ï¨±„²!W`ÒU»j—ªiÏÄo1ã°°‘™cùsTæH¬6Š÷p´!M_á4Ì>V®§j‚<Ñd&ˆÿz_É5Xù8 Ü¨åNKØõÖvÖ@E!¿vè ÷ã¼‚ªˆô]f£Ö�Ä,\¾ßjGïK—C5)6ãËYL˜1/ÕÙÐÈRäíZÈ€xï~;$¼¼ž«8Éñ<ö¹¬E'q–é˜Ùñ9÷pÃ=°~|Nñøœ¢êÖ¿ø¦´Í€žLi›YSX Ló^Õ‡ñ¦ºà—¡-PØº¢åñåùçTµúcUëžz@RÙêÏc²‚¼
+Ëì	‹�]ò�cšÀVÃ’hl>(Ù£¾2¬éËñÕ/}�ASØLÙùIö«‚ãOœm×Qfâ;§$÷Á\´ß´¬¤‰ÎMÆ‚˜…XbMŸÂ¾9oZÜäSÌ¦�='}\r'öäìd$Pë0ðñÜd¬¡™Ïr�
+‡åd¾è„änð&ë�í“‰@6¼ ÃÂÒk ³³ØÀ—[•+‡iz¸!–sÃ£!"1ôš¥„~òÝi	†Š�_•5ltÖÆä˜æiL{ŽÌ-þx¯’vÂ§´kLnò^iîõ5…­pQÆe÷€QB$é¸áµÐÿÑYƒ&åŸÅi´?×t,^ÊÀÆóýí`¥÷œÍä:§ÅJÖ¥ZA».vxŸ”RÙl �–Ç‘ )0³ ¦¢o¦S@Ú�–ç…ïÁS+Òr6˜«ìÔM\�1Œ;!yíØï3,Ò\L“®ª¬¬(áz—$³J’™ã½Ú¹s†ä+…ÐÌ›©‹/±P•„sç9ÍAº²‹­HÃÇéÜnú
+3ÍKÒ—ÇÂCqM:Ý¡¹pd¯4:Ù"ERB¨mÕù�½âî&!‹Z5ð½scr—e:{§€99)áàÉIoçAãÖ26üÈŒgn´ºZ‚<¾+¯)nm‰×Rxc=­%}8óß�CC1È¥#·ˆ?%¢8‹k:u¥HôV£ºlµº™õ-áÈÍôJ5B®¯‹×
++×]§ªmâ›?o¥—ÊuÅÉ®QËì½>ˆ±g{‘s.ø¾¯½ùCüÐª øX¢Ú|8Ì &x§4ÿ¨!^ÙêoüYSX8.»Ïÿdï= ³.Ó­ï;z¤�ªXÆqF§œ3gôL·cGAÀÞPì€é„@šR¤'”Bzµ ¢éÒEŠ "‚(ˆ2ßïÞ;á›u¾÷|‹‘3Gß÷�¬ge=yòþå.×¾®û¾®½Ù)…ØŽRñ=¬	ë�Á)¬zˆ9°Âñ¢¬SÀP^b÷Ý†ÙÇ{g´`G$½Î'mµ°iýVÞ(1,®ÞKªr3ÖlpÔ:ÿFz¬_YwI�wHòÊ±D×[Ì¦°I†™L[;ÌbùF„TGMFÊ‘ÎêiºAÉ}®
+‘rz¤e�2šy¹|,�Xó¼Áq•ûð¤@?w2Ž«ü’*ÊïÅ˜O®uQN„Ñ‡°ÌÄ€cR‡”•„'kþ Änãif4Ÿñ8’Ž¯òä¨äÉƒûA3TÄÄAùUZ™roÜ@¿ò{°áVÕ4×%àåd{o5•Ì´ó7ê…þ�Âhærƒ0w‚²NxšÏy�Q’Vc,‡lªUhÎs[Ü@|kÀ9€33fCð)W–àb‰M"¤~l¹jÕû¯Áb5Ù^¬š?¬ ‰Ûàó;ÂUÐ� ]"ŠžX˜ãôSð½ŽÏ9•·±L¢[&(ÿMûÒù«Õr%Iü	Aâ‹åx§[åBûx´ð°J‹œVT­þI”ˆÊhÂ›è¤%ÍÅáá+êÖI 'Þ¾�ÉW'Õü÷‘I3•½<jLê`¾8:5¿NêoAafóÂJ½ËEñ¯>åim?2´ÇüÈr6Ÿû'xôêöù÷á&™¢ø/­�ß‚¯B¤cM%Ì&>‰ä§Ò 4‘¶´>Õ¶ïŽ‘à £ÚÜãK' ‚€¯‹	Ðh(ï89V|‘òˆó€Ôô¸E�yÃ=s¹N‚3ç™ÐÑæ_Òr÷»ÞÑã)”Ç²Ž>el˜‘žÏÍMÊpº'a†<ŽšJ‚ÛPMâ|'©ÞóK ä¶�7¾ç2†Sïß2¡ëû9O­ë÷à<Óâ9™™©@¦ƒªQ{mh©OŠîI˜ÅŸäÎò²D£©*hXî¼váŒÊüc¡(m¨ {ƒÓy×<…ÅL•û‘ƒ-¹Þ>&íÄ|žQ\«hŸ#U&¹]Éiï9f'à¥ÁE-¸Ñêü×Ç["‚Þä"5nÏ™‡C+½#‰öþcñ˜ÂÌ'‘ïßqª¯Bä?âG™Gÿ“lI�+£˜ozk	¢½Eôç½Åì”ñÄƒXo,UaFc¬¦ˆá  1;�ï{×O[@àoã·œùwø:§*¨òÌ°JoƒP€/§š `A,¸c‰3ótK'3"æö”ß"?£UK°™Q$&	È6q+X]M1Ì¸:É9óørÎ²Ã´�«¡Ùõ˜JZnò Ä¹X§¡ß
+óÓÛ‚eÄÅc+¿<:u-\‚k< Æ�Gáøª÷bl‡'½¡]ËúØañ…^¹Ñ2šh5ï	Š?�Q<
+"tpvjí\Ä$ZÔâêkœë=¤âJ…çë ç[§Õ¥drÂ{]‹ç"BÁ3ß±KJYUx‚÷·‡|ì$o˜Ýw„bPILhû˜òØ�ÔÃ.I�zM‡!ÅV;ÿŸ5Ör(sÿ†�éC"V³ù:†+Áå°NW†G	!ë†^&Õ¹)tÅº*¥òùí¡àŠÐD©°Ã®™9WáN^7ôt"=gs…È‘Ža²zj+Gô5_á™Dý£9> Ž«e´	…¶)÷g¦u*¨òì¨ä‰ô#„~Ñç³AŽ¤%9†–àÝØÊ Äœ”\/qàùf<¨bØÈn—“’?¡ê]Ö¤¦g_I\Ë å�²m¿d¬â§Ñ¤ü—±§5ÌM^£2ðXOØŒÁt‘K³Ó>¾9ôVÃNr¢)=‚…ÍÔ�§¿\ê¤JGC¦#è«ªþ"&»þœ+bŠ¤Ö’‘¢¤ü©3N]¤©*�È¤ÊñÜa»Òd×.gÐòãfñBì#T¸Þé�bŒù44Ä´TÁ#M�?˜°”ÈW‰ û”áó…%ŸÖÖá=	3QZý‚¯€›":ØííÑÞâF)ƒÄ,®Üä=HgY`«]¤YÏy$Œ®Ë°y&|Ø®”\ßˆS\Î^^~ ®l¯Àii™TW:‘•3sÝ–X@Ä‰@©¬¿­ÎòÅát9g;58¶PªOåÑ†&ìâ®²Äß¥‹”Ï©úC‰Ç_¸t¥ut{'³LvS*`_iÝµToèd!òöS}ý"ÿ?´*AbA•¦+lÅÈh•iÓˆ¤Ùƒ×ŽÏx¸¨Z]Àñ•ŠkTþ°°êý½´S)ÂÌì1©¯ŒHzÃ< Ä¡ ‘Ì;Hš�Ù×©bõ7¿&Ti9`“‹€Áë6ìÆ‡3`…Æ¥õ’Èì‡ÖvgŒaß,2î˜‚#MüÅœj Öhú´Yh~ÚÇ®ÒÒÂËûÒ¯?(Òã�`º’š;Ñ²Þ~K]p¶Ì>n¼!¹½å#$šIh,íË)¼/¨ò4weÝ¥âêW�Œ|³›'Ÿu¸É·F§Žáù@P¯¤ÆUbW˜£
+ŽVEÕn4‹«ß€©ÇDBæ¦õ 5”ÛdlåA´'—Ù—¸‘€¨ÒW² ÄGx°˜bœ¬%“”9K‡ÆcÐ #À‹¾7v’PNqâ|/¬9EPÈë5ðÕ]Êç˜q°6wcIž‰Á+0 ^†öqÑZ.Ãæp	çK€˜ÂHìøÈmÜ:ÞŠ‰F9-x]h8Þ&©*ìØJOa¾ø,VÚÃÇÞÅ‹lc§mÍz×ST$¢Â‹ˆbô²ãsÉŒ4ŽØ*¶3 �3¼»ñEÉ�¹iYx8vTðCø�8‘OòÒ;e'ó’«3ŠÍKï€·SRãr|gþà«˜÷Ix7sÁT6Ìg1ÞJU¢è�'±î“×1HÉ–kyB$/Ð=#ÁbØ¶[=³_ù=’3{ÏÛX­D¹Æ{“…zÛÎüÛvóèÉˆÇªv:ÅÄ¶íµ�èÅ^³”« ñ[ïôi¨¬r~NÿÈéº×\FÚÎþHÉ6«-ZñdL8Ùª=âƒ¸Ft7&èYèm8×áÒãÎZá$
+‡77#Ý8cÚëÜiÂC'½p$“P{$aa—W¹[pJQá¶çceG¾ tãöî„\÷QlýMõ¼ç}I­ñNKê!•}í´¯¨¢Åå|]aÝ.¹Ë8ƒæ­°&žŠÏy@‡~&žRÝÍNî�Ÿ“ä¨íàLn›Ïù/>€‰¼Lúô\¬Ê\(ÌÝ ƒ {¥ö¾ä–Ì^bý,æ2ÃÌdžO:]çŸùãü‘ÖkD7ØçÜ´.àcd%­Ö€OÆVî‡	ÂnÈõÅ.asz�yì‹Ë\•ûd§ÚdMªõk\tŽÔ˜­¶ZÀg ÌMëŽýˆ±<à±Æ$59*n<1)ÙÕ¦à´œ?Ùâ ªÌýki¤ã°,	ë(Eáˆ–ÍšåÌífq�ïñ*kÔ¡ÓS©LÅ`¿(ƒb
+Pgå¡u,ãtå¡¸7,§"ˆÙÙÉ\Î©MÉÅÜ<�>FxÚÙÉã3-ªv3¿‰5 D/.íàB•×+©qŸÓÄ,xÄÑƒ7ò¼â2Ê5ÂxðØ&|îâîÐL›¼½Uœt..àn¯`µˆJp¶±x ¦¦QíÈûÞ¼>´s6‚)¶€*Ð–Ê Ñé£ÚyŒ¢ŽAh¥ûæ¹‚g^þö6 ŽÏ±W}Ø^_É*ó�B,Ø5Ê•½1tæ®…1„�—†»uW;9 Nh,×„g0eÜŒª5g™âÒ´uZ�<bv5>äê®”ì¢^î¯ì�N¥Éó±ã<üè8F)cÌ{åørtè&þ‡e4cnZ·Ü´®’<2i:#-n
+”ßÅ:‹±�Ã9ùoNÊX“fp’¡ß•ñ\ Éçø½‡¶ �J–¥à@í®0™§�HôtÅï›W4½Æ#4#žŽu‘~Ÿ‘™©ÄT‹bðF|àŸq n§S’<h1Î�ö=~‚ÙÆ”;|�ñ yÇ}&Bo¯Fˆ7%*Ò˜�ÊHEð9Þ ™ÃµEªRbC®åZ—4z’ß<£Å¼€;‡™ÉK”¦dòf”¼.Rñùf,$|ã½g®5²ñ¯ê†ÀF,`g@9¡%itÌ†pÃ|ë¶0ÎÚv’ØX©ÌÞ­æZ�ë¨ŽF¹áGbx¸>ó_ Ó¥-âêñ‰ÝV.5i<ŽŠóŠ½‰Ïyž�?ýxBí‘È—û±R¬¿´è§W¨”3{¤³ÖpT#¹ÓôV¦V MpÞ¼zÀ˜i/òy3<(c¿SO"�êëŸù�ø¡U‹«_‹q "‹q•ûX‘'§Òº;àœù 1&u( 5:e4¨ºBrÀðJs‰†°T¼ÉI)àë„Š±>"iÆ+WK|y
+(#B°v|‹ú”;Dl5$R
+DÚ:•ö‰‘TâÆÊâYŒ7×RÙfÈéÅacM®Å­:‰…ÒDÇÎýðR•,ù—öå\Ñ¬i�Œ¶ø£ó™Y¦¯Ê”¸ÿvó8<i,T‰%™+D1´Æ²ÑUÛÂS¨°ƒEþ–Ê}‰
+	0óÒ3'TkD„âÈ‘TÀ2�çâ°Âª÷ÅrKE”®š:±Æ4#Ï¨@uamÅS÷Œ2�‡zGI¾HôÁ�¸ØÍûtLg­#Å<=å¦®½#zWQ¹1oã¢R^·$RsÎü½	s¼�…•ð¾‘¦µ®hX ÓŒ¬þÓ5nü§öa ZÅE¤%N!&HT°ójLÈ‰Js€NU¢­Á€ ©¼C…±Ä,.™ÿK¸ƒq×Õ.ñÔb»1\EfL~nUt�h©p�ë)¤Á´ÇL]J÷%cÊ±$L#¼÷—“È`ÄTZ?DRnqÉðýÞ'T½›>’°é,¶¨Z=NžŸÞ�ÿrŒRÎòóŒI|6›ƒ‘Æ´æ¯Øª÷¶‹œf3|Ñ´<ƒMnÃ~Ä
+˜ åÍ¡7Bûˆžt÷,QÂÍ´¼¢ãã^üo++×(‰�<F+˜z®¨­„(5îq~ÜNÇ­¼÷ò;#¹Cä—‹Å&®¡¹Lz&¥��à²£Ën’Ór
+±ëGŒÔ.íq*é�¡X+ÛL«ÎwñÁŠ]’¬º×X¹Ãñ
+œuÂÓ3KæÎŸ?fÉ›Ú¶Ûq[È} :½‰ãD#Ð8Z]‹C#áÛN€/Uúèü:Wa<”°\+!³¸¯Z3t�³.jfr*'šjCs¾�³Lå×Íåæ9˜æSÜŒgë­k3b>ã6S²•.l4Ý_{1$àrrÆpöŒT;yL­$Çý		½M{òPY1�y‡HüöiÊrV­ÂØ-1	öôR—{dòtË€:cÿä	èÖ6<Õ×?!òñ£(2J'`X0þ3ÎDCØ
+b¥~å÷òrœL¨z'ÇŒI"ôüTºukgœøîä³Î�‰©éí1þØ.b¨¢j·b¬£ob´U´RéšK1MÚ'zŸ“O?çt"2ŒáðJó`Ø:if¿ÀVÑÀne˜™‹RB¥‘ @g¾%‘IÆ‚A•rp‚ÇÕIüWÅÅÛmOÌêßN‹f¦<Q	Î,D‚&þUQÞ×þ( G&OÃNæ¤äòD%€&nï‡WZ@›OšËWò«´à¹)/V†äl8¨�¯eø lÊ¬ô¦uU°ç9)cp˜ž–óã‹D:Ý¥ª@`b±‘¬bz2y•Q°Ì©8L^“¥ðPŠúa 5�iîkiÅn³Z�e"•½ó‰3{%µ|Ð¹úÊÿÙ“¥(ÛÊAßçb�L™)g]rWÂÜWÁbÕtl² ;¨�éSm`&±a©=Ç~7…îJà|MÖoúå¡1¨AD	 ‹fmO<¿²]ÄóJ\û¯t'¥0N `¢V¤?Ûü¼í¾K3FžÀŠïâÕèàÈeÁÈ¤ÁéºL%K2äLÁ`£ñ£c“Ö™ž%öä¢œ™Uµ´eDÒœè®Tø 
+›Vøˆ÷ý”±c
+Ó›å7€ÇÁ¤+„9Ô(ä(qe#Ñ%Ma%bº€†5¹ÿuÑ½ë;êsï#œø0®üWùº°Íú±ÏlûàVÒkn™ÎÊ–tÅ1-oB•þÇi³»<«ám4Ç\ZÿüÔàî¥W-îßÝç`•PË‡9“àiWñ£†a”È%^h€0`‚ž½1t¾%¼H/3ù×¬’7A–†![ñæfs¥@$Ç»4Üí(Øˆ¢¯y“/Ffû„œÄ¾ŠÎv<r¸ìrŽy"f@mUÁËZü4HaÓFØ®7]-ãðÞ„×­ ¦.ØàÙWÜŒÙù¸´3ý¼lò=-«~$â÷ãÚšŒoðÜ¸n@‹ä;¼Åqñû.Ì‘@ùw
+H#é�‚âHzìŒË²ôˆ¾÷‡'¿Ðº¦Á©¾þ	‘ÿˆZUÛ…»€$1�/�:ê¥rŠ«_
+‚ƒNWÀ¼¼RqÖÉ«£ÅÕ¯æ×YóÝ1©#ÀˆÜ´.ãÒz�˜ýá•æå¥w$t.9õq•{W¿F1ã§¢¤›i�*NÈLŸPõ­m¾�¯n’Cì Å½eª4R¹‹;,dC¡å©cJ`ØÉ,óö¢6Ù·ŠÕd·w+¼Öd5½ÈŽ÷}öôP¼fê*S%p}•'éà—+ò°D‘Ö²Äþ`ci–áqóqw››–5"i6È1…ñ_¢˜þå?ÅaÀnã`D_¢âÒÜ´n@d~zk™ˆ€‘qt.Gbóñ¸((Ì“–
+ÊŸùµåu˜›RªúÈQ3.±ç~ÄzMml/öJ¼‹•†´\lŸ[„6tf‡võ–(AÖyuÈú³’Tˆ©™O¼”„ÅS]@Ì�02Šï=¦dtˆaÅ¾B™ÊU¹«n¯`‚øŒ6÷�!ÃUá1áãk×‡¶=ëã«cK9æêÐLg»D~²Ä,Ó¤ØfTzGôÑ v‹êW±>'D+Ï_ˆ€b‘	ðéºO4¼E›¿Ó:Ýé|ÈÐeò]D¼ÁûÁ>K12¶<Ž¡# Vº	/È|›ÙÉ%@pé\ð*kt£¤Rvz¥wå®0E1Ñj¾³G¼Á­Má-Ë˜NiF¯Ú¹t±“¤.ì«p0/ãwÒÒzNãmE�×Žo¿~ÄU»á–É�‚ù·®…4uA�šy
+Q±möÊA±óI¼™ë%kzÐ¢�Šž6{{ñÉ˜‹²”¡ñÅû©{ä[î ¤”©;…§ ~Ä¸!tR Y"Žñè2#�Î¨0 Ê”<³Òl	^HçüÎÕy^,@GÞúÔ=ùS	cjcôÀaÂ­a˜
+xg>ž°7hÖHÞ
+Œj~Ãƒ	K³¢ÊþkïŽiÎÓ9œR­Ó<‘ãEžÛ›’™qt}(ì‹ûŒQS
+<’°Æ’É/çŠË�øôu	h™…¢�­$Ÿí@$Î*ÇGbÿÈ•´¡“J>ýÆ.&‘¾îªå,ÉÉBdýS}ý"ÿ?´ª‚»w	A4¬ú+W.^ÑÔ'OPmcL(Å4XìFà«çWyž 
+£SëSG-‚€Œý™M$å€¬¨Zƒa•5ˆ³øœo�§^139÷ ¾`¯¤>¹ÏÉ`¼˜¸…È«KÜ4ÜêÅØ.eÁšø»Ì<£DÁý6kæ‡Qò^ÿ8Ã–aµôB–kI\2É‡ƒ×…¼°3}ÊÔ#¯Ä1À;ã4òí$®Á~W¿KKËŒ­<Ë'X*í´~"Òzš,èÅróÒ:ÑcRó;/æÇNv¹nTÝªô¦2‚vË’¿�Ä:zâ‹=T®â!ÐDð—OŸ¶OªI` ÁÜ ¢¶ÛÃxsk3…e�ZZkfÖQ‹Ä8´S)·Øq¿ñ®nï3c*�’¥öT¬}è–Ð+Ê�`ß8¦½2¦žˆé¦¥+´öØ¥Fëkê‡AVm°¤õ,,ÿqW˜
+ HÛ}5f¶QsUxBëi»AÌ¨ù+7À~Ž÷�{ˆ*Ÿ6ì¬»Â#rÂ¤T¿QB×!U½:(q#ª°jc)U}J;sÏtãM¹X1^ÎÔVf\H�JÍohÍdŸ»¶—³á*28{‹`óÅh[nÞËøN^çäÕíŒãc!ê¤º¡G‡s?ÝviqË5Ååh“�KÕtýÕÅ¬ûQéûgCñÝjn*ÿ?ì„�öËÈn»hÀ•{:žy|æ�ÅÝ�ñDÎïužU™àÈá1©ÃìIòŒ >E-Ûú$®"”ÈË*zÁ²¿ÞVÛœþÍ³Ú¡sj¨ñELk-½�÷%?óÀ0"¾kÉí?hÆÝÍqÏ˜Y÷$Ìá·ª·ò˜Îé½)t¥Å®-yF3»YLÝYë†(	üiãu@ÌØ0m¾™18íÌØ§ÚkR˜êí�„…~
+~ë’“>¤ì�ƒZGÝ”ÁnóCqG5û‹z(féDõ3k"¬ö†2_ç´t·)øZÆéƒk¦¡+F]Ó^Hg­úÂÜ¶OFi’õü×þªwy<1³øÓ¹i]MI‡uý'DþoýC«‚ î(X R—7^ŠÚÊ‡ð«±äØ–‘ÉÓ� >ÁŒW¿!ŠE–Û§Ç5Xó§�,#“fTi>±æ%Už�[¤ÖQËÄ’Ö\Dpøù�y�oÏ'¤/•ÛÇ,šù"7c(Õ½‹)À	Ï”~k1WðggY ï‰ã¶IŽv¿‹ž:Ä\…¨âÂ.æxGå'ØÖ9‡ÁÅø6¿CÌcA¤k@°0\Å’âÞyÛÊ ùém¸ì'ö(§âjsÅ•@¿SVn’€‘ã�Qð‘&â1	gtžh™ù —C	!ßŠµàÛaâmÀKu%¦8šàH”,_›[Ï1‹D%Þ}TµÒÌî»Âd-þ|*àM°¯ 50_bù„¦°-Å’t—F!Wq¼æõX+Ås*qf~c*æÎÚÿ² PWñþáçpNåÁî0¥§¥…TM¹¤ANtÐ(ä(í·§â²uœ�»½WV”ÈâÆÐI´±o›kELìÝ\¿æúkSœ={Ú—Ç”fÄæ.7£G†WšÇÐRfõ9ópc
+ª<Ë˜ìƒÍ÷0J‘J1r!~LS+Å:WLP‹Óí•ÚQ°•/:s8–•ÿ¼,Åë¯mšâÛú¼¢ýÊ™6NÁÅ	ÁbÓ&]å÷¸j}·rÇ‹ÆRwÅ]Ä,ª6]n´2û
+µKæ<a [»‡ÇÌŒj1©¢æ«úÿG”“žÚE¯¤o,i�c9KŽâèîQU92ÿØcÌR
+g¦M8 £Ö%¼#Æ¥ézÐt¸.>~ Êš5J‚�ºä¢•˜ƒßÅ`#š»#Ñ¡| ‚wuÂS×…Ö<Wã˜ïú±K�þò[LJíÄ~?¤AÆãß2qä“8Ef¸5mÆÁ*´œIˆ—ï5•xçHï`2Bø¢T	vó°ÜÌC	KPQ/æºNFqëë\—«s0ççlbÆç2O'8ùiL+çáð­ÖÊ£–¾ÛnËiyßóñX)³‘^ÍEð‘ý@“1GºhyÜ»9â×=,.tîmI—2¶vL]ƒ µ½ú}’¹êæS}ý"ÿ?Þ‹òÒ3sÓºM9ë<'¨¨ ä5¼ô!—ál›ÛœQW\ýúñ�`£˜†@c»rRÆ6ŽJ.áÕ¬Í›Põn<öì”B@s\Z/Ð�¯€¹ã3žÀ^�N9jÒ¢¨Ò:Ør‹KJÜ"ÞÔÃüfó]0¥—r90bÎap9€5ÖUX“:´}D>Þö6QÜ|�S»Å¯¸NùÞkT�	ŸÍÅÁ`vI¸·2sRòZ*™Ç‹uÄÑ´Œ÷G%Oæû—ÿ„6á�5Mˆp¹I`qLêˆ¸p7g7¨’ýã¡ZSå€Ñ)£™/BöOY\YiFlu  äÕÈü‰©t¥ü€
+;�ßèt#çÉ›rùöPàÌPÉt7òÿ¸æÅkeøùÝcQù7<,æÈõ�N¤Éú—ãÞºr–¦[Ï5ûØéÂÒžì7ö«�E‘h}ãôË!eiS¬}Œ8Öã¢Ð¢¿>ˆçOèÁ]aß¬0�`«6L”ácd‹•ôókÎ�´¼—’$c‰+ÖkæpÃ˜)ÿÇ„oJžù÷Œþr=ˆÅßÅ—™4‹Îò:$>›ªûcÍp)!Å˜u3&u¸CKÓ:IÕtß¨ä©ùÓ©2^1�\Zdófèš÷Þe™Â5×ñ sŒ6Ö˜ïÞWëåIãæLì»jdã¸�§r€õ-‚/'”5Új[ð-e8¬“`ô!s{ëR6ùt@íÏ¦¾´¼$kíØ;·ô<óWï¢.ã+Ê$ßåµ×å3Ä²‘Ó�2ä%FgÆÂ÷Né"µGÏ•õøwà2¤‡ô›¼ ŒâÝf4¥D]¸à–ð’’»i �á‰n¯ð¼®šÄÕiFÓø	—…{øúÂMÐì»3Lº3L¼!tVø�SW?¾*<Q?ñ”!"ÆÇ$eœ Íö²D¼Òu"OŠtÈÑ7'·ÀñBT.Y²žµw®¹�¢.ç)h%ŽñÞ%#
+e9æ–1œ�ÑŸµ -ãe®×œäÖpÁ±¡ƒ:‰õ®‹hy¸¥§#žäÆ\šm¾®k§Q«RQ"“@C©Ñ_ÛEù¿"�=úCßÂ©þÐª¢»\rb%õbMØ�ý"NT®Î¶¢j·Ž«Ü€µ›	\fÇl‡·‹ª5ä“œ”p„À
+ûÏWÀÐñ�ŽNUT­Á¬óƒ³7#qM$²ËWå<âJ¢KSôpõ¨“•¸†èŒ)<>ãq®%ržu=c’ÿëŒ4ðÑÞ&]·�÷þŽsù|`ýs:.Èï´fFá‚¬ê_YÑ¹ßÎxw EÑI«… V¨µt\´Þ1ìo|¥âjsÌv+%fŸÉýhv�ö%7¨ôi¯£Å´pÌ	<ÀA·J6ƒƒ¢«%´l…³@ðÊÈí¥å>ÉŒÝŸò/¯)Ÿ<ªø¹NP?ÊVìpV!Vpq]!OÄ´•¢ñ$…«È±$ÌSÙó˜óÓ2f6ÆPëÇu�èÛZ4)fG7+¿iïviAo�Õ{isZ#©ÌRƒ`"£(¹rÚÇ1žÒ†‹ëÂhjeÂo¿.2×mÄèaB1�€uƒ0B;A)Ýè]­¬Æ
+©`oUÚ¦úa�õ
+®Z0WŠ0G]vÁ…²¤çN³Ó/¢nâïÅá�ð€ÞúQIÚ!zÐ$‡tMnÚ8<1ÔŠ™]1�¹SéSo›ÜkŽ`ñmºÇÌÒãÊ
+4ìBHó"H…óÍ‡cAÜNÐŸc†µ™ÝúÜMØÉÂ¾‹ž¬yf†þt`Ò\ê½Ö¢ê¦(¾ç™Ä_*·Ÿ×aBgqó9ãAkÈ‡-¹v{w»CÌïÝ)·�Ã+½™)ÖSóy+Ó È16éJ�þÄw‰1W-CŒa-Qá@Òu%Úã^Ïyû’ë=i—f ‰U)ÖÃ2ön]n
+Ýýzáe"Ç†!ìÀâa	-†Q×…6÷$Ìª˜yFÚ—ï_:Ð­t(Ñ%#�s2$n
+ÝGæð�€&P{w˜*Òir'Ñ†`¥vÖªÀùKí°oÒjð„ñÆ3š«¹–XÉn´óÆã¸¤oAI¿Û-ÍâŽÌ{ž­¤xEwm»h%Á¬}üKû_pÏ^žb16ºÅMŸÏ½M)Ò*|ïE¦eàC×n[¼’bž‹Ô—–x;Yv�UuOõõc€Èo¿ývæÌ™�7¾à‚Î8ãn©bÅŠ¿ûÝïZµjµzõêúî¾Ï�ö"7â�cØ™’#“f3­ò«<fRr´÷q|Ä(M©]37­‡vm†|…j
+9—�I*(Ü’›Öàc†r’	Uoe%ßâCbFÐF9óèÔ‘bxt ´mù
+1#Æ“Ï1b%5.#dc3Þ^Vz›Ï‹�Ò¦?d)¦’v¾{<asT¿úé¦!÷oô>^Î$sJÑå1žHŽhäaÆÈ{IÊf$+Žð¨.Ñ?ë
+Í¾1­÷3åÒ|E+‰#t!ÅÈÇDÓbÊYÄ…
+ª<©ü’æš îE¦·ú�1ÂµPm#q¨UÚ½C›;Ðj§Iö¾ÄŠÚ›'ØËÀŠÃs�+Ï|�]n	ÓG…zÜxWÉ©"æˆã§òv�È93Íäé¼£Òc¸UÎÌ3:À‘nì1e½ÜÅ¨¡}éÚìq—æ¹xÓåçÎwuºé²‰vË(	`·b?±6`·VbÇ`rôo>uÚ^ó|z×I§�˜ò¼*PL5¦¢×Ïù\Ši_f•"`bB~%]f2åó¬ð~Œ¤XºFÄ¼GisFþ•1HBÕŸ9ì²p’ù9¹+í�~§]ª/,¨Ä÷Ö·Ì›ŠgDy«‘7Ý.Ù–Ýò½¡O¿õâ£Å ¢]“—» ƒtÙýw¾å´¸FNUUVí•7˜€ÍÃü›¹~s ’%'ñ¥YýûÄÙ´Ð5•víì0xQÚ HÓ)«v�iâb%p–r«z!Ñ™™ZBü·Gåü›	÷´þ9O‰4CîI˜-�³IõB¿†aäïÃàÚ-áEŽá dÂ0ÿ®üsh©€fð_Àëö0^™9+ë†Nvbœš�2yiRP˜óÁÜ60mZÙ„Ì<_ñv°ö
+—{3Ññãsÿ/qþáq‹rJÈc·çl[i…ï¶:9_álîm¸¯pÆšW$Wô)¡´Åß1> u¬5^íRbIºêeé˜l·æn‰3ÆíºŒNAg�$D®¼ñT_?8DŽ3æ¼óÎ;ÿüó›7ož““3gÎœ·Þzkúôéýû÷¿ë®»RRR®ºêª¥K—þ°7ù÷þÐª¢ÆU±„¡Ò|F…ø*‡L¨ÖhX¥yi�	»T¯	EóÒ;tŠÄ#ëóÓÛŒHšC„å„ÀXw_q•Ès2ÇÑ©Ù ]Qµz_ã3ÎKï”L9ë¼Âª÷I|¡õ„j·Ç¨³â;Jìœ,À�ê”ZâGûÌÀ%ñ)©%9°Ú6ÚëÊï£y•R%T±¨ª}ùcm×·<3n¨X{¯ÊÄv0O[‰¯•YÖ]TÃŒùL&N_!@óD ÷»ÈÄÌrEãðGƒ€}˜ÙnQuúãXÒž¸FÂš«]-Ò#ÐçžA|ž�‡RDsPìîëÄNë¤0bS`æÒŒ-…&¥l©ŠfU²ÄXÆi¢9]Pª$mÆ¤©ªÞ¤gô¥…¨T¶Åµo|Å›h¶X³¨IK+Þ@\Š™KÑaæ1Ëd§b$ uõ_k³<¸·É ÅÕ­ÆkÖöôc-$ÔR@¬u¶Y4¸�’kåšÅ|þÜ›Co©]¬+‰(±Ã·DË¹Œ©M,.,Ì=–µå*Ü†U¾“$_T°ÅÒ°Ê‚ØÈ†�EÀ½ŠøR¹Ç.exáåz'Nx×O«²q­Ø�Ï³Kýö¸ÂíV Åwâ¿ªt˜w˜îŒb.LXµŠv œùéLðq±Ê¨ró�Ù*–ÚÒ%’ýV¤Ö%:s@…Š‡ŒSx€¯M|‹áÁ'\‚�42r[1Ì¶÷A13‘‰@_à"zA•ñC¿÷Ö–1³r\å—T±òãÐùºýËïV�ÌV¥ØÅg±+há‰Ì2JFq ê&XáE´Ž¦¾!t¤#"éM˜Æ(½/áuØÕ¡ 	Þñ­ëC;Úè|RÅƒW†‡o}.Ð­7†ÎW…ÇùM›àÅÑï*¯XHï‹ÐY'<…¿Äx¾>´ÍÅjF)mEHf±É{‰‹^2–É0T\&ÌèÂã² �×Fì~tÓ£ëébï3Šäç#Ÿ„�„«@[ŸÔIÈg§ATbó�óÞ1vc¬èçÕ{¯šz	¨£Æ›÷‚1&sàl´³øZ+	ð¨ø3ÿß‘uëÖ]¸páõß#GŽŒ7®eË–ÿ“·tê?´ªôŽ¯4wh¥%L4æ&°(å‹7>¦ØøŒÇ±äc+“:8;¥KâzÀ‚¾J4�ƒQÉS"¯W,é2¡êÝ¸¾“jýÒbÍ
+3G(WgsÉÀÄXÝSîßwÕ!¿ÇV~Yl<]ãÚfò´Io0ëcš_JáàÄµ
+èöÃºFƒ¯ÈÂltî"¶ˆ§`Ft½â½>7­uYºä±¶*9|¦Û}ŒùN¥|ûº”åíx�®[Ìö�Ré¸
+ªâ�{pØ4¯hµ�26M)=Ÿ9EGù!õç±ÛíåxÞÐJÅŸ�<�ÖãÈN2‰/)«ä…˜k9s˜ÅâÖûR™ÿ‘™i%Ê¯¹JÎ‰*½ü«Ldá3—ª1ÌY`…çÍÔÚf¤ä’‡™°:V;j““CÎ,UP"Pµ)à>­œ9½ ¨3Õµì|cbKWÐÇ¿ò»�tj¦8éön³Þ
+¦�ðNåµ¡·*®•7•n±ìÎÈG7ÿ®0I+iÛÀPžNâËSÊXƒ>qI¦÷žüá“‘©,Fµ®cu)½éÄNó™Ç|íy^�ï}æaî¹³xn9Ø¡œ´Šö¸°ˆ1Æs1ø½1í´.+©E–ìÓ>¶�á…5óç+	j5�pG(f\ìˆ0¯EÜ–ŠV”–Ä¼óÛ´¢Z Ž…‡�åR2lè;Œª‰/ü4æëßš?þ«yIßRhø-Užå1	~ãâ™‡99�ƒ/JO¹TÈ“%ƒž[&ýü!&Ý«²xe€²‹Aºh-…“ŸÐŽÁŸ‰£1“¶§öñ•ÛLìÿý¸ ‚õÃ ZæêÐüÞ„×qrn¯ðàZM�ùÛðþ{uhúçp¿/
+].Fúíz4a#Gâ` µ4&ƒÙk­—†»ñ+ˆ@McíÌ|ZÎæŠBé}ÇLÞã§qx ™‘Ýb�÷Ax4ÑÏµ$Cˆ¡buª¦QÉñ+•)}&Å®/´I±­½†®!5Sá¡4Ù#Q€½{ÈŒ—�Ð8LÀNú�yÚQ‘’ÏþN•�ëha	=ë[¢I0¼ºhÅ•U´©si ­Ê��$D®¸þT_?8DþùC«âˆ‚hÌ)/I�I}Eqßc�#ŸL§‚*O‚ã*¿5"+÷_åIq’Ì‰¤^ß%‰%Á,PlX¥…£SGæ¦e‰årKvrá¸´^ jaF`NŽ«Ü œrÖ9Lv«Ï‰.‰a‹ªÝjâÖüôVRNìc!c¾BD6 ÂÎáIop{8Û€–Ðy/Hn†	Âda|zƒ27ëÝN)GMRªR¯Ïll;	¤B¾Ç(�©µ5¦¡“¢-¹%Ê‚î“åÙÎavpÃÂ¸ ç÷™#‘@ i.Ó�Ù#ÊÄ5�$þÅç/WØ5¶ò@‹2_ì‚òuîMSx«íö£	ë½×æ §ãºNíî(Aø&~»H<"¹YÃ�ƒé�\ûØF!4Ñ:Õœ6bõ¬xÏÓ_NõCp¦ö×xî¹s7Q™Šñ1{ì½4¶·ŽƒÌGÄ‡®È0õsQ¬*rsaë¼”çLûüN
+5…µr>wIPR?¶h{ÝÐS5;=°¥.ÀçY²Þ\Èš¶â—þÀ²GF�¬Ò4àˆ26‰Nâre¥7©-Œ¢Åíø,ŒF§
+óRÁéqG”Æ�´3˜Ò<†®ß(Ê˜Ë�›¦¯c)?êgÚ‚\LËKÉ—¸ãà¬’·œ÷UOnjnõÚ>UÐÇŠT…GkàŒÙÍàÑh=e£}®2äå€ÝkßGÁ$îù¢v½¿æAb2XâZ&MÍŒcºÉUøB_ùŒ©a‡M¸s9›wlåËm6-†–^ëøO³”xÙþôÒëÎÚä†Ÿ‰Lé›p½ÚK[¯à†ÐáÁ„wZD2Õ‚B&!áí!ÿ†Ðéªð±$=H¨2â¼ý)ÔÇUà PK¦%NC½)t§Ñ¼ÆN×óu€Æ)Ð4Š#òöp¡z¡?§Âës{¤`>r3€7¯RÄXSc-0úZù«Ÿ¨
+éˆV�Ð®ÝÆ½FLÈ•«°Éõ8’fŒ©²r¯CHº¬eˆ<ì…Æ�3Ç?)Í7óÛ)ôø½ÞÍt
+™y9Lç.:¾£–¢Æço-_#à|òBäÿÖ?–Tf>‚\ã3ž`DV½×�dA•g¦Ö®6´Òb7ðnHÅ"<
+/—ÿN¬ù»ñçWyžˆrLê0ñu_?°ÂVÐ�  TÉ|NÂròÅI53ëü  r9èY\ý†g+®^'
+V¦Ì87U«æ¦õ�Í&.¤ò&"iZg€›ÐòEé‰DÊ¸ŠKµì¬§ÊèÉ*Š?`%ÖVZDzZ+{�ùhST‹11àÚpßæ½¼ûUtì²•¥G-×¡•Þi£r'U¦o·‰L™“W?QöÎFhDø	Î‰Õ1«ßJ|Ÿ)÷þ˜yQÌódXÖYÕ­0&œ¤Q£š¯¨`âu'¥¸,qæ1é&
+ÃæˆD:£Á×1J.iQÝý'ýz¯ÖY»‰èîTÃ~kJŸž"/òf+�ì Ì‰¬YŠ¹hpe×ìr¡%Ë·Óž¯ëVÌhªê�8ÿ*Á‹-´'!aˆÅÃ~ÞŠ(ˆ xlÆÞúªÀ|1'7S+öÐÚCDäîúG±Æ–4oÇpòvRHôF�|¦¼&“×‰
+,® ˜[¦�P»‹¼×�Æ³3b~…÷éÀúNeÀjNîÊ–ÓÕ×„géAÌøõ¡CbvÉBâ>~»,]ì4sÌãmâ8Ôp&;z2ag§ÒeŠo½A ½ò/x)½ö‹´¯A/€�xn	ÿ“ÁO'æ¦u!‘ÀSÙÉE…15´v±ŒØÇ9®øŸœgä†Åqs�œéd�‚vSFÐÇÄ4ËEAoŽãÉtc‰djX"‡aæz-±Žo	/^®¼>´§ã.	W5#ˆûðpø„ ù
+ÝJ§Ó€uÂSÄÚú]Hwßº=«”¹;¥>ÃW¼/@ï›=˜±aÇ•–4nÇ2ž—tÑÑô,ÕŒÍb–øÄÕC–�Æ	”þft•8F*÷`Vi0¸ÙK(834B7Å•¦íò–�™4¸U-4EyÓ!ZñÊ’^O—™W×I©(é�¹]zÜ[4&A:Iˆ\~í©¾~<yàÀ�Ž;^vÙe]tÑÏÿæç‡¾¯ïóC«Š?mFñã:¦o&Õú·W*®,¬z�ÞÄš—ä¤ä�Ïx„ÃˆïòÒ3¥p1I…�ø:¸žŽÏx”0Š¤(¬úÀÄšœPõžqi=Æg4)¨ò4??½%qåèÔQàg—ÖsR­_9Š¬æõÜ´®à&G–Ô¸ttÊcFÚ�Š+³“' Ðƒ7h#d‰TNv4Ê0§dvb²JÇÒM½¯•Ê¾Gù ïË€¯cxK£6fxº^ž‰’®”æËY²ÝEtéí9—Lr&Ìô2#VË1‹Á¾RáAï0æ¤Hssðä3h×c}ÏH~U„¥bLºÇàb¯ó1Ú}ûÀašKT°É÷&¼ÊÅ�·†!¢²yÇ‰¬~þt2ƒ£B¾åüLK†i‹ö¨•‹­LmÒÚ^b(rsá¸NÐy ¸4#s5¥óH�¹$·aŸ8B7:íDäE‘œAÛyR¥K°¹Ì&vÏ»�8í*ÃYÇ³ðPtqßU>Ò
+s‹q~àOêö{Ulþ±wT›Ç
+îã™e…�Î³å*Yê/#µuEÍ½&ò‡C´¶ªøKÓ>Ÿ‹+�‘¯Æ2-3ŠžŽ¡Ä!ÚËlG·äD=8!}“˜…+i•…·„—ˆƒf–Ì%äq¶ß•ÂõnÌ&ƒ¤ƒÀÚ�¼Oº”ÑÑó/Ðß©—”×D<USåzígÔ1	~M�êÞ±Bùõ‘\n!w®lð<1n•(ÏŠa‘Œ=–#1mÅ=µ3[d‰ô!§7èM~Åå\g$Åœ¯&né¤õ£y–²¤:ÅøýèÍ¡—iÙÄE³¤7o]øŒsfrÃ0JÞZáä­áü‡kÂ3´‡ý"ü’7˜¢Øs—RUê´!N#¶MFYB¨ óµ¦r´Ó·—±Í � æ×æ@x0ê–®sÆ¸ßI5‰Yºs©S}|3zéJ Ê›æÞ¡ãº©PÔÔC<¦Ì�hu}wœ•òño#Û€¶?xd×}˜¿qô¿-)î¶vH‹×³oÛùÂ¯öNþîØŽïŽr�ÖIŽ2bûjV—ûÒdG�Kûwy¯¸ðµÍ‘(Yvœ,D^sª¯DÞrË-\pAïÞ½ÇŽ;îo~~èûú>?ÊhÝ¤¹6IÚˆýèå	Uï&$t±Þ,±�^I�Ë±ü"�Ëœø>!$�'JÒ…+®b^3ý‹«_W\ý¦Âª÷ãñâßj±´ÿÄšó>?½uA•f¸ÁŸ_¥EA•g‹ª5ÈN..©ñçéçžÎ4WmfWŽ'F+¹ÊØÊƒÄK°�H–á3Â‡VZ’%Ð¦á
+­§E®hâNÜo'W`x­`ÍT¹‹%»a	ð|×¹ßíO/5q`¢+;\p-^…9˜PŒ1oRk+1éºŠ$–Ia˜61ZüF!ØgrS�˜vL9äû@C§ :âh¯$=Mb�Ü€1Qbêq¥€ŽÅö‚…ü‹¸Œ‡Â8»Ú±c™§Ý2–öþìåBÎbµ+›¥Ý4Œ$ÏØE5†*¾Û£ú¾Ýâ…ˆ™íÚvŒñcfÜ2{ŸFÆhhF&ÍÈRB©|Ìûvçø9ÛÄÄ¡Öâ´Y“ç|¸¡¤²0¤ wEäè…/Ì&16”‘øÅÃ�šŒŽPåºÐ¦�R€øÓu.ýPÁÅ{NþÌ,]ŒýÆ™öœ–Gh=�/í	dé‘éPZÏ{£Þ…4ia”*VÆAgCµ[‹woEb¶Ž‹ì0r¸m_v>æ¥¸šF¥Mt�‹âµƒÕ:DŠyZ6�–XÕË”z¦râ&ñ9E«Yªº’“»øÀKåˆ"/îP¼¨�ë1©C¥Nž	Š¶=î€à°ax‹ªÕã*¸ˆÌ<Ì®Q€u�$¿GrQŸ‹ò!sð�$ÃI³Vø÷Ukþ\}–Ë]Õ›‘=žgÉŒ>O\Wq]#„ë‡A´ÕïÂuÿ~wexW�núK¸ãêðäŸÃmÀ_ý0ØÛ²IÒ ™"â[Â0ÿ*á9òÏˆW'*™š/�¦v'Êx5"5òæéa»sŒ=Gp&¹µ“CƒŸØ1•‡Ý¹ÊÂúæ-W& ×Š‘rp3,¬fv#|‰¶"PêU&Qê2a:qDý]YÕ¾zàôySû-yë®ÜŽ+'tX?òòí¸O#“§·×öý	îhkØ‰rE[iñô’:¼zí\ ÿ!211ñ�wÞù¡ïâ¿ç‡V-©q¥öDIÿâ]<Oâ8<RÆÒ Ä-L«9?…Uç§·¡ÓG$½j!Å¼ôv£#‡LqvJ!_™Të×}€ãØÊ}qwÇ¤›P­ÑÄš¿›~nPŽk»¼ôöüæÌ³´¹ÙØeÖƒ•%5®(¨Ò£‘—Þ	$zý"néòÜ¸²:Ø•œ÷b’Ë0 ¢Q=��\"1ŽµŒöWK)›q¿U­A¬åÖ=Ïªl¡qdAYò|Ì½\!ÒÈ•¦¬4w+së×-f9~§šëèrÚnZ‡Ô&ã~g8õ\ÓçªˆˆùäˆKóœç%ASÈŠ/ý€3ô¼å�YŽ›}±>ñÇgZ]Üm9ñ{/³„�£x/W|‚’?ßæ0Î ò«}|ÞSËžíT"ªNïÊ™'çˆwÄ$nìxpm5FXq* ™|‘ö-qMçXÆ²XY»Ÿ¨Ê&6NV)Ùé2Ž9â¬ïi‚û íµéÌa…!«¹gJ¼ÊS¨Ð{§2?ò/^w…)<,fÖ€(jÙ�¬ÖdwÅÉE„	ÒË>à…âÌ¸_Ëê3Õ¤ZR>èEf¢$×;ÆÌT:Ê‰ôÈòjø¢YÚÚ‰×lðNû÷fåÝ	3Ä03Ù�®[çCB'Ì5šÓLÇè({n]'Sy9Â+ÿ&H'Ä3á�„AÐÑ°b‚Ý*öÂÑx€x•8�‘ö§ÒbE¢Hü gÐœPõŽÁQ`nYA•æ9)ù`Ÿj¿ G-qb|³‡Uz·–Ù——ÖÙŽHù¾ì®Œ,.-ZøcÌ:”Fp¶•ÁÅ³³ŽZn¥kxRWñ\Úý.\ïMÉ«Â—†»ÿ	ÖnùW†Go
+Ý•Hö_¡éè_~‹mo“«QÍaJ<;zg˜H+�¼8®�"UÑd¼ºÒß«žz ›Ï¥x×„i[o>f‰3Äh&¹¥ñ½”aÑðÊw#ójÂÇž¼œÙö‡9­vI¶hUg—ö.cõ‘,§ú“&X‘×dK×óôªz¤OâáiÃß{¨Ü[Yr.Šôæ»óL¹£¥•ÍYÊXÆiqÖÄIBä²«Oõõã�Èßþö·³gÏþ¡ïâ¿ç'R”;\˜Ñ„)Ì„ed2%A"PÐdêI¯ª¯“QKÃºäiÌÐœ”±Œ~W¿Välƒ§œu.ˆ6:uðÞM­]}Æ¹aBÕ»
+3^iîôsÎ 
+µ@ôÖ´sÊ*FÎÒÄÈÏ†Hì	Âª6¤ 	tŠ¬æ}•dÎcâ�Hz#�›–%!æ•ÊÙ›ÌìxubÜšS²S¯ŠòÈþ�EõÖ&÷ž„Y’g]j¶ü@ScÁÍ˜,Þ¼È,ãê9Q|�¥•–qT½g–áØ÷Ž1l\ë£)ˆO]c.ûé©Ícf
+SÅlðBˆÐWjJ5ÿÎž§Ôx-ñ…!R4?íÐDÙzŸbŸ	µ¸ôu¡-VBä"KAÊj&í¥[ä
+>	{õRð	k¯Âç¯L�ëˆÆkAt®ó:x@ÚÙ)=J¬�k¶|>zí{ÎWXènîS´áû¹Ÿ(Y´4Ý×ìm´p7A§hÉ·ÅL5 …ÊE*]™tOÂl1bÚCÊ#ÐkØ±»ÃTÚ¤YÔ¡ØÄÁÞåñ×½±H;¨8î Ãg'ÕÐVÜO¬÷Q6¾ëâyÉ1”ª‡(Ïj¿Ü¼”×]}¡Èýb&_*�Â¢Ë~GtÛ¸[Ó¦Yö—»£ÚXñ-©žv&CDpÑœÌ7;‡'«4c*f_Ç*ž3Ž�­<€VíicWâ"jóâáüôÖÌ8|nZ�áIoð@d–á1‘ƒ7ŒÏxpd©_v3ãx:ˆÉÈ¼ˆcÔ=çlãð$ÅëýXzŠ“;Ùl˜ôkÄ£5!«Txë¸‡¥23cÓ™:IœÀó	¥úÂµ¡ÅÓ§íýC¨û§Ð€?¯© £ðá	. ‚Þ\IÁ"Pš‘ Rµ–¯›}÷ÚÐŠF–Z÷t©¡}ipñ–7�bõ—)áR*Áì¯ÞOç}—2BxîPœ�ß‰°b—3 Û¦E²§Ç<}X¬zü—™‰‹oiƒæ#N"&Æƒ^ Í,«Y~æ´/¼0+—ë|ÚµRL‚š<xùÈk?î‘~”ñ0µÿŠV‰˜/4—wäOÐàXËÕYÐÊ÷ûPJ@ob	l9uêÔ:uê¤¦¦rüÎ�;ÿö_}úô©U«Vùòå¯½öÚ?üðûa
+?+V¬¸ôÒK‹ŠŠ6mÚôáßü|ïþ€?´’Òv1™•ø±@Oqõ:ƒ7bGD¿tsvlê œ”ËÑ<ŽKë™_åy^Sj×¥•Ð…¯ðEŽgþ$ä§·š~Î™"BŸL°Il8>ãQ°Ø¦ÄGø.qåŒó‚2c[æ¦uÇ&Œˆ\¯Ï�2£GÀt\Z/Õ˜Œ±’c7ÉptŠ•b¯2q^Ÿ8/'%W¬›ï¸F ˆAà÷ó"QÄâ1=yaÆ•ºNÆpùSbztç]ûö"«lsú7Ì >)Ka�‰è`Šårº‹U›‰\–ñòµ<˜2Z$<d¶m’`Ö›ØÓyDÎö—ÚÝ—œ{"^ÍhÒ±´¦á°úa¼^èwMhq_ÂÜ{f`sD>yûóhBÜ¹3”�ŽËµþFÊ³v.#Šl§ÉëZû–Ú¨urÝ±¶q§7UUñ™­·Š�Kÿâsë™¿Ý;§¯T\E;d§HÆñ³¡ß•çKGÍhgÆoû´y¦ˆâw,v›Ë{©î¼/á¢	Zž€â�„…ÄÂ®€Ó1«@I`H{Oëpê†ÖÆx¾ŒEÓ<ºÞVó2ïS‘Å%v(†‘VuGx’ÃcËï/6#¥›ö�9á]nIß&	+„áXo§åÔpZà·„`ç©¨Ùs/é¹4ÃNXéäI.uA%×eü8%øk'_\crÅ%æNjvñGq~œ:Z2æB'Íå¥üÕ!tVqõ«Ò€ªåo²S
+‹ªÝ*‰ó¨"Í¼Zi	ý‚—¢Ûå¸ ¸ŽÌ)Æ!¿1ÎÚ×hJ—•Ô¸’Nôj­ØŽ;}K9-ð@€Ñö‘%ï ÆäËåˆuî¥á®CV½Ðÿwáº[Ã�ß†Ë†º	|lrÀÇ;B1tsx‡ÁE=´¯–ÜŸ°ÀB�OGmµ¸VãÚ�ûq%,�/&Þ¯iÃNrá¬WåõU>k´:ñ�U­ÍoïrHg[q÷»W	Ì]oM-ícæºG^ˆ©e[¼=ÍÐr&°½eªg
+í+¯ÿ°wb·5cŸÚ<¶É‡Ù¿Y]Üõý¢ÎkG4üÈ»Ìø'’·ÍéÔ*nP.÷ú*Èh•Ï~Qà{÷|’¹ôÊS}�$DdeeõíÛ÷?Aä˜1cÊ•+7nÜ¸÷Þ{ïšk®ùõ¯ýí·ß~?XYºté…^þ??ßïl?ì·è0[¥9ŒËOoKl˜—ÞqLêðñOâi}u6ñ@Æd­ ¸	Õ•Ô¸Š¯V½—™Ë\ÎN.‰°i�‰(‹«ßÈ«Þ7¡Úí“kýS@à9ëü(.9¶òÀ)g�——ž9¹ÖÏfÿ4Lªõo…Uï™Tóß§Ö®ÆyòÒ:�¶ÀbQµ›ÇV~Y	®]ÄEp7é˜Ôa`nÿòŸº‘éð²r0TØ�kçPÈ£·˜{$Rôo0 2Gìé1ñ‹¥[¯*Uà¨õàbVYb~,	€¥bÿ=ÍD¶é”E—ÔÄ-µ‡@,¤©l\¼`Íq¶|)9Œ]^Ëu*ÞµY°L-båŽëC[¬:ÿ%$iFãšÞzs«‘ÆY¤s·…\îŸ#±Õv¿UU½×iu`Ao•„s9úÔž¶×ýL}`?\©,T•y�.î,kµÞ×Z›�M¦-fÍ·T›ÿ-Ñ�6qŽŒHšÃ°Ò‚Yì:JñõöŽäàÄõâºYiIk�Ùf�­ºrW˜|oÂ§QCh‰?pKèG¨”rµÓ}†QQ9BEå¢‡Ý„9‘FË­_Ùè9ÌtÄj	$¯i;�ÙŒy" Šá¡5„E|ÅòF<—–ŽÒžÜ'ç~p6ˆ‰9NP¡Í�QÂ% û¶�§%Äž¥i¬´ýÜºÉâ@x“^°L‰á@ŸžÑª'2�Ãâü‰zÐb¿_�7òB¤¯(¤Á£êe¥%àã¨äú(7­+~ˆÜË©4òðJórÓ:”ùUZäWyN+*ñ˜Ñ)9øœ6>£	°Ë×‰Y8†^ãž-N0ÊœÅû5óžäÞvð%Â¥ãÊ‹	á'vc%�µ®Nh.ÚŠX»qi¸›€Z4æmÁÊëB›[Ã+7‡>4¿™´9Ã˜^¦õ8Õ�¡#™óx}€Þ‘ûôÍEkð¹¸R?¡OL+úÚ‹áY:@ÅŒuÛ+Ò÷š*6JK¯ûcÎ¦ùü^ŒO7í Ðãö÷p2Å#ç•1¼1
+îí¦„ížeÛˆVä|Fß*lãÒ¾œõ>h:qnÔ&Å_¥&+•F&Ípú«+vÅtw@Áï>o—»siOç-Ÿ,D^qª¯¿ƒ@±ÿ‘_|q³fÍüþ£�>JHHxíµ×þ^@ñÏE]tûí·¯^½zÏž=ŸýÍÏ÷;ÛûC+IàlýÎLTíáûkþq\å^D‹XÎì(+œË˜$�:
+Ö1°5±æï˜ÈSÏNW"ëÚÂª�ª<£ZH°õ‘Âª÷ƒz%5.+Ìxpþ¿†âê×ó‰*"{$‚°ü©¹ŸõêÏÂäZ¿`^f<TP¥9“$õÞ%oø$7í ³¨Ú- ä+‘N¶¤‡øß'®åË Ë³ª‡êÈl—œØéüU•«¯”œÁF¬œT¥¶0ž�“izj’.]g6u/#5õ*�c§,ºœÐ”˜e¼P{�f˜éª‰¦Tœã�–ð‰™!%]±ÊœÉVƒR„8Ó[uŽc¨¥|·IÜ•ÓpË1A7‡^÷%Ì»'aö=	³”ñRÄo¯¯ŽLšEPcÑ+ss)•%nÖ0ëc1¦ L:¼ß¸Š3«¬~”Ä3—Vø |ŸRäËÂV(Éy?xÏX£ƒJâ™F¦µÅSa]ÞÂ·x.ì•7cmˆÊ*;+Ç•P‚g1ŒøÄ’*™î:‰0n·<FXdÑ{�C›ð¯ÇJ…·s*,p§2¢0·w¹ñôŽq“{pB¾ÓS1hÎá1ý mîmGN(–¿ÏD»Ùª%â]‹h0¿%¼ÄI´û®ä¤ß–˜ïnçó˜R;`6`eH×¢ßaK¹•rSˆéŽîPÊÓÎì”ñÃ*-fNN\'èÉ˜t‹©Ñ¡ø¥Ü¤J¥úÒ¸ |ÂkêÙiÌ& ÓŠ‰Ã,Ãhãpâ7‘x’ùUž‘ôªÂÏEœ§”ÉÅûH°œ4ÝroerÕJ¸1œL˜+
+#“¼â£ëB+{Œ	·3kþê_"x7.½$\}mxžáwKèKþ.\Kh	hšóáq-°+õôKWCt�Õ›,+Ö"®«ò~½ƒA“!$ƒ¸KÎÕA%†h;A'mëÕl”ý@_ºð°ùÝ}bØ.ó0DæÞJóñ@ÚkƒUûÔ1iÊL�¯%…£VW@œ×¢ÈøÆï^€eÄrLµÃ¯µŠMxo»«þk‡sáhU�Ùàx�ÃÜI/É«�,D^~ª¯S�È#GŽœ~úé%%%' ìÖ­Ûß(þ©P¡Âš5k¾ßwl?& ÓDŠ;«<2šM€wÄ’*IîŽ¿:>ãI0‘9Èû’—ŽM4ýÜ0°Â–(™Ö³¤Æ•Ä}3˜¶®ÝàObÃ9?‹¹@DˆLá×. Þ´³“¦�STåU\ý@pÆyatêHÎ]ßäi“Ï:äI	By�‰Sj×ÎOoÍÉ¥˜tœpëZN¨z‡¨›c×;&aî“ú
+ÇdYe²Â¦€k <ýŸ�†¬”æÖ1IJLßí!ŸÏ™Lj©ÅØmÙJdì§Ólüg·˜P·ÿÁ„w2¥PÉa®¦óÛº'u6S¥qBUðÅEl²v²`p,ÀÁRëX
+LwÓî¤é+±À +�w‹¡ÆIþShðL¤=™²pÛÂ—%Æ8TQ°‡#"˜×ÅTœ4H‡2RPéFm3…)½À4§i+fwö‡ÿåE§ó],°Äa·‹Þ<V‡Å¬æ¸[ý¡4¤¾µ·ÉÏ½dµbË;E°µØ~ú–Û×ì´�ŸÑR›pÜ1ÄhDŒ3Md�­C0åÑh¯�ZdŠ^ jÍuãÐÀå*\Ë‹œmJÓS�¸FÀR]ü~©Õo6Dz¡€cjøðêÐ”÷y:‹øÝºöâ* l¼#êÞÖx×Æ)Fô�ÑÖÔ.NzáAÌ¯K£y‹Öõ2æÇ³´J	óÛ+ûºSL‚ZÈ'ãÒzä§·eº�Jž”—Þvjíê"§ê72i6Ø1_ðcG§f�ÏxŒÉÅø¥ØaÆj~z+€'RA&ÍÐÆå|¾B_Óq -/çú‚)'¼J†„ûÎ©,¼§�yXž’�·_ÚóM_žüEø%áäÕ¡Ù•ái�-ÂÏÉRz�T˜'«nwWf)�Û6¯œðF*To¸þâñ„(¹N›ã»zYÙ_ßº×£Ô[¨ÔÁ‰<…ÅkHiº•¡h:A«yû› ¹ŸX­4¡*íçk¯`»È‚³½#�å·f–è#•=þ;GYü×þUÝ	alNJA[¹Ê=´%1(q“Ò×£bïñ-ÍöÓT®2CÝ7ìûñBÁIBä»—�êëT r×®]ü¹`Á‚\zé¥O=õÔß(þiÔ¨ÑÐ¡C¿ßwl?Êh½|†p}³“‹´²Z"vñ&üÉ¼žTó7Ušf'æ¤Œa:g§àë©¸|b�?1[�¹™ç…‚*ÏñçÛ—Ä¥Ô)g�¢M¬y	îqQµ†8Àkþ~Jíš„“xÂs¦Ÿ{Ú¬óð:©Ö¯9¸¨z]Þ—Ô¸bbÍ?TiöÚÏÃÔÚ5ò«<G8™e³Úá]c&Öü�Ñ©#° \ˆ#�ýÓˆ› ,¡ëÐJ‹Í²h1#†±@é8ýÌd;®ƒÃèÝ&ÝÜÆñ9™‰cãsQÝiNK•N0È[K7£a-*çR2Az‹ãE5ìßš‘»a%Qò‰X{¢Zb@§u«Æ“‹×íU>Ìlý0˜µ:íh½ÐCtÂ|,Æ�a’òêÛâ–—‡€<g‘–¯àëžD”M£(á6ñŠ|�¹n+iók1=Í/�Ý¨¡¢Îc`“š^–zõ$é>G>‰íÂbÐ¹œ�¯ó_À¾*ß{'‡ñEu19`ßöù[ŽFé; Çä®Y*Çv‚¨—‚Móe>y«ÕcQ�¡[Ã°ºáG”¢jÇ=XGÛbu±¥® %F×Êj'—I+ä=õhg9&£f)N4_¤›D%Žít„·�ðC0ª¡$,p±?=ejk+Yh{qøHXDG4Ãë†žDRÃÈúaï¹4�˜èeoy·ÑÊ³ç¼—›µ´¸åÚq�míxáö¢®kZn}[$Y•LÉ1%8Å^B!³˜�gkG£€FÆÉ”ûñÁøŒG"&&OeÐÔÚâï:¥v­’—M®õ‹âê7â.Î8—@rÁ¨ä)ÓÎN)®~ýˆ¤×6ª<åT7&Â„ªw2�é}.žTy:?½Íè”.Çuéô—EÈ£ˆ{¯6øbÁ¯jlß5�{‹Ó3Äß¾†ù›ðûKÂ•¼kBÚŠ?	¯mO¬É0}š$,§/œ~f>[Ü&WùŸŸ:OÀ‹0Ú?æ¬cü4ðÚù½&<t&ðK"
+¦Y\MÌ ¥�´ì”°—Ê°òÇ8Í?áDÁlV)‹û1k�Y4MÄÛ¹�©&�RÎ_›XJÁ,°EéÜ<¯Çº¨Ütò¼Ô‘–0Ìì)¹ÎÚœS“‹ÛÛË¬9Iˆü_þüÿ áÿòçä-ÿ?"_xá…ŒŒŒÆ�÷íÛwàßü|¿³ý°?‘€®ÒúšIŠS:2i:‡yŒÁ]ÊbŠÂª÷å¦u!²S
+M?#Š,¨òLaFãâê×å¥w"ÀžôFA•æyi�±±`_~zK&õÔÚUsÓ^ =	™×SÎ:{r­ÇV~¹¤Æ_À\ÂCN&N>ë'Ìß·.	|È¬['ŸõS¡du0‘iÎî�òÂð-ìNJžiß
+3b¨«àz¦6ÖcÌ�¯º¨ø˜Ö!w5?m²Ñð�„·ïK˜+Î«)¢Aë�‹{UxLlœQÉ$W*4ˆ‹0~#uÝ8[�ú¢ŠŒ/0žÌ8æ>Ñ�©#�šé1÷µaÈæ¿×†JY‚±ÅD»ÂîŽPLTE,)Jçæ^,aKý0�o¹Ÿs�ÇŽôM+ß2
+—˜EÄœäN`"Ûúq¤*;¾5éïG$½¡utTù<„ý4=N®Þ¸iÍ.y“:\g¬í%•“Å´¿Wíè\	‰~d-Å&G¤í{ÜÒŽ’œÏce[Cï',Æ «(`ò-á¥»ÂT>·z/ŽÞþÓ±¢üm"Pó«Ð�`¨XŒv=+LwÒ)D"Ê9¢\šÍt={kzsxQé²Ë½Ù¥,ª—�ñ{ÜèÄEg¹šôÆÐ‰ÑûŒâ:˜É· ÙëBëKÃ�Ü NHE€ÏÍß:º¢Ð{NÝ�ýg&½¸z`£-�ªêpÆ·“ú®2e¢–æbµ…yÅiÿþ1=ø}>Äªã‚æ¤ä2³€E �Q�u�vNyeæl£µ™24&&îeÜ|¬zß´³+M=»rQµzøŠ*°¬å�îœalåþªÞ72ªÞÈJðtð ÄQ½ü>Æ€X÷Wö�ÙÈ›{«Æ�±:°Â…ísEzÿ±Wiú·AÊÈóê‰Ÿü’p5ý¢Y³ýiée›BßÜûdüZÕLÑ1p#þ›ýUBl³ðu.££±0œ7&h×í:îŽëgFÒ<€ˆú­ï‰Jë¨*56	€öða-»cW—Õ"¶–»âHNÎSšMÂ{% ¥¹¹,jÃ9yþ~¬Š£Ë¸`^nŸë¿L"Q•M~"3/ºEÖô�MzÌ'(y#«zˆ0äd£ÈKOõõãYh½ø¿øù~gûah%ºëÊ„+óÒ;(`©¸Ç‡ƒwC+.Å-ªv+>- F¸ç$�1©¯`*9¦¨ZB9ÀqÊYµ	³“K^ýY˜Të—’LUNÅ¿&ŸuAqõkù]TífÀtÖOBQµ[y•ÔøsÌÛ©ù&>ÐŒL˜©Lž_óÅ©µ«”Ô¸j\åñ–¹ÊèÔQ %˜8©Ö¯òÒ3¹F&÷Ft‰çÌh×&Ú¾XZ.�Çø‘„uøxfÃ 0»µ—•´ÎÖL,Üó1ÑuÂS˜ß›BwkôÜr£îƒˆS@±Vq¹5.©]§v6r~l¬k—RÆ’ƒâ–Y�À	WúDg˜pÂj÷'¼‰Ù±€ñ‹J ?¨˜äÙ¦¸ä|ËÛy\‘ÆjyQããœsÕeïÍ,åÏ‰-˜,/ÿr¼8Þ¿¡î;LX×™b&T»�nÕÊê¸(y)lòÈäé  `tÔ‰^‰�RÒÈDÂv¼ ‘ÉÓø®¢Ô�y›‚n‘úm1…j0�à2ñEÅàÇÌ™‰MVFÇ«
+%ß“0‹Vº!dÞºÝ²@´kÂs[Â=Ìâ0ð ¥GxŠ6Q½h16Y0QŸ«™ôh<�g£¯²”ÑY\åþ¸u;‹þ¢�9mûHî7Á~Í‹7rMxVÝÛ¸±¡(I;r3Qí7aAå=Ñ9y’pä%öWŒ?�@Rhþ6Ã	ì [ydž‘g–¾|È=›sï�ù�]j9M%u¸I#“f©ãmš8‘íŠð†Y 2‚•ùé­
+ª4¥Í™‰ªÞ�ç	Ø	:›â7â+2ÚKj\‰·É¿ÞüM`2jî\É„-ªÖpBµF¼ÆVˆGš›Ö�3ä¾E°©Å–Ò@_Íuc¡DâÓÔ;ïÅ‰jŒ¼\G­‡ç02yjZ†Ñ¨ùò:]ÃŸ4écQ àƒçâÊÀrzV;¹k\�ÈIÌìÁ´Â¶ˆƒâ ‰\Pl­(—ZÐ�¸jŒ(†“™pº  ž×µœ¦°�ÄÉf`‹“p€�1„)éS�OòÒÛãXzƒÃ˜›<cY	ÆÆ>åKF-—9âö�K"Û\ å‚b1?R”ú…d;™ìÝw«}Ò#Ê¼=ž�\lzL‘q}­*0eÍI¯æ=¦ò$!ò�¿œêëÇ“®óÒ­$ov’¼ÜÁyª�Çg<ªuÔ&ùém˜³DŽb/]û’�ò!áðƒDÂ½šTëþ¥u¡+™ŒEÕêf<hV�ig§r$Çà ƒ˜ÓÏ=½¸ú5\eÁ¿>íÂøzõçaÎÏÂE�¯_8g¤u­õ+pô$Œ�Y¯qúw-©~õÄdöå¤äTyŽc”šÈ‹Gpf;ð)€cýT:· é‰Db†óÝ¹ÊHßëuK"¢	BÉRÌsö;f–ð£á„æø3"ëp¥Öo?Ýje^›õƒëí$<|B…Ø\Q¹7+…1„E’Æ�q	3æ�ËN6£n
+]	!‰S€®"þhÈ�ðÝa$áŸð_@Ó‰ ÷%Ìã¿xã*…ˆ, \Wõ}ÎœÙéºN\nÌr–ö_Äµr0/½cOyãÃ+Í'´Œ©�é­”Õ>7­.Î†(\ó[™$kûGò–·”0ù˜«hsì¹²æ�Kë…y!H!xÁöö/ÿ)@Œ}¦�†§t™I3ñÃ›�ÄÌ–´ í#É’‚Ú^<á€˜Äz¿_î7á'ƒ�´†‚Ä¨ö¸vyd±£�£1q°¨õ£.ØB®B$Nã`äiy�šß�â³õªŽ¯Ãáa"Ê:ái<%~ÓÜÃõ¡Á&�Þ »1t‘Þhƒ:¥Ôù>Wa�´ó gÎ<gÏ�gçö87–¢®³§i…ø*3^y§wù˜ÈªÑ¸L•<9*¦�yLñ{Œ2ˆ‡T\A{2q¤7š;®r_ÜÈéçü“hbÍÿ(®^‡‰ÆT¢…µ­ÿ[üLI€ ¿xåC{¶Lœâê7uÆ¬¶j·å¦už|ÖO9'ççä›C+¾+Fô5¼bº8æ�{kq:’Röd<ÑÇÍ¾%ô½2<ÂX½"4a|Šqõã18º OË7cÀ{iÅkŒÚŒþÚ˜kuÙLPÒf�ørfÐ2x_ª’8&)ÏCÖ%ñ& Ÿƒìc+`h1hG%O�”n•–D:‹Ä5fb�3ähIËëð\ÒØ&R¬XŸ%Ì�[xŒ@.Êƒ+“êsoPžØŽñ™é)Voå¢|�»r-ßrÚ`ÍÁ*,�99ªŠú:Sëü}â´š®2Øoéh/eDÒì“„È%>Õ×IBäþýûW¬X‘——ÇñsæÌáýÁƒÿZVô‘››»|ùòk®¹æW¿úÕß[ôqìØ±ÿ–c~T?´ÒðJs	o–6f2Jâp¡GA•f…UïÏ‰/1qwH˜_ì*¶”á4¶ò ÂŒÆÄ “Ï:_$½[O1‹§Ö®:ç‚ ïÉµ~1ý\ÞWÑðoA@ì@ÄÁšNb(¦�S‰À“O ÊÉµ.ÂU…‰.óÓ[cº'Õú7üdÃVL>ëg¡X†¸¸š<dVi1·Mt‰Í·\;N¸xGcŽœT£æoçÒˆcöíž„™Ì÷»Pàô^žw9€)ÎÍÃ,ó[µá‹p­1�@ê	…qi£Ìéðv»ó¶Ý‘P0eøÒÎgFAÌ‹Ë°ÒÞ�#Š¼=ä×=±çºÄûuÂ3ÏJX�˜T7¼pW˜B”ŠÑ¾*<¡Õ­|¢¬‘ÐÉSè„#ùëä6gÚÁ5IXq‚Q-S‚ÚùÚÊzÌYOs:KI;±™Lÿqi=µæ¥—ˆ5h½Ü´nX×!—N¬ùÇá•ð¯1©Ãù]€½œ¸Žèž¶ÍKokîŒç,©q9ýË¨0h›pdeú9”°üŠ¿ßÑ®<wTdQL›_® G®
+�Ñ Ow{(à=ÿº,Üob7Ev3y�Y"µÖL»±7†ÎDßÀ'¤ïh‚A:7ÚóÓ>¦‘‰zp3ƒ¿Žå'b½.´‘þfÿ;B‘DwH&x”$*
+îˆÂKn
+YW†‡ñ^€`ÎãØóþ„ù`¢µ†ÁJí~îbxä?·©¤çš¼k‹3×¿b÷”îËsžZWððú~å?Ã¨2nÁ ú |)–ùàÈUk ¥ì¡ÒÏ%ÆäC �fŸvv2n$Þ`Qµ[§ž]…i…yÇ�Të—„“	N9ëlž÷/Î›u~`ŽL¬yÉ”³Î}ã åµ #þ$Ó�ï²LÉ)µÏ²ž@98qƒ¢"]€ý�´Ãå{¸špÏÌ{4ã–�‡ÏÀ˜äÙ«ÒôüÌ‹Ø<MêŒb²}k*xç’�†NÐªûwý?ý«·§öZ¦€‹ñ¯ÅíÖŽ¾jc©_ù½8ºæ(ºoˆ»šßö{y.+e»�LžJ ÈÀÓ"ö£ru�—¸üe4b
+øýb$#Ú§$í·8	Þ¾7Ä—õ“B):‡\Yé ‘Ö³¼²“r•áö¹ù©8$ujg¿úçÑÓÐB®]ŽXZ^aWvrÑIBäâ?žêëäë"ÿÓæ¼yóü¯Þ½{×¬Y "¿G¥ÿùçŸ?`À€ÿª¸cíÚµÏ>ûì]wÝõ÷žö‡ýQFëË¢xkdòt0Ž‘)í§‘‰Ï|*Á È� ¶pÃÀMB<¢	†PÜg</fæL¬ñçÉµ~Å—+-~ó7 àO˜Î8½˜Pe®vTÀÒGúµŸÇt�©g§�ƒÀ¢¶]r'T½‹™^\ýúiç$òföOCnÚÓÏM §ŸsP‹MŸñ0ßå7WÇŒsZÌ#““`·Çg<NëBcæ”œØ˜dîâÄp)ëÛˆ1Ä~bo™DgØ½aè£­Ã¥ØÞkÂ3Xiì*Ÿ …À"†Ý.t�3Ž9å¦aÈ¹Zœ÷Þ+ÍÞÖ|éŒ±ï>‘µ0à ©¤„w?š°N%ÿ¹˜ÜB§{fˆÓ;R±ˆü®z`“-3„Ó~mh¥BB˜!†m7Í‹Ö¬v‰:
+ÔzTõ,;œì×JŠÌ•¯h�×Ú‚˜ìðè”rœ|>¤¯ãîUzK¬D\YMš™�\˜›Ö=Ê–U½ŸÎ�“¯šW¿Aº„q~ÆVîK Ï1yi�¦ÖÎž4—¯
+V½—ÇpÑéÅÕo2Å®(µ·�Hz�–¥âJì¤…-:IÿKÉNû„8ë•:	cKûRàaõµ¡`ÇÂÐ7…îjÉôÍZÑ˜b!˜KðX?º'aGÒ4‘ŠGFÐþ´R³X²×ëšð,Kks˜Å7ÍÖË©šŸö1])¦åÀÁ#Î	wE_(c*&²â´xM¸¡tÇ¸º2¬âN¥ù‘¸7à[JÇ¼vÁH‹ÚM‹L1ØYHËã°a9ñ?‰,°ð]<Š™qîüûO›Ó#ôÅ”Úµü…2}¦�S‘©óW3bR”Ôø�92ûüèLN­]�ßÌ©IµþubÍßO;;‰ÿòb2òÝqi=è÷içT`B™rfsP ïè)nU) QÓ¼½6ÕAŒöEÚó]�k'•™¥rü&Ñ,J—Ú)M�¿Úÿé*únÔ(Ïç fÄ„ù}¢"ùaå¦n3‘Åðš+FÝ±cr¿LRðkÈmÛ§t^œ[g‘B³S
+iFj1hmïCÂQ`=e&hlå~˜ñcwQ#O´9Ã•ñ§ò„Ê'œåì9qôíÇ9á`P›¬ðAw±ï“ÛÀP±êÀ4Ô¶ûF/°Ë¨ÕÜ/ÈŒRé¹®–ª{”áBÜ¹“«™bÝ´,LTnŽJüv^'O@÷?‘ÿ¸ŸU«VÕ«WïÌ3ÏüãÿØ´iÓ^x¡_¿~�;w¾ï¾û.¸à‚¤¤¤çŸþóÏ?ÿaoòïýQ]äÎX“•\ÂÈžô“Ú1A%€È�ËIÉ:ùS‰åCˆ&œ®Ó7ú~Oü@fºv9¡ZÃQÉ%“jýŠ	Î¼f2Æ$œ¸|Z™(Ì-©qÙÄšÿÁ,Æã0—T¿zÁ¿,Ã´³+-ú‡¥1¯	-><d"JŽœR»æôsþ…Qw*«5Âáœ™ÏŠª×ÅDJÜ‚eæB 0·="éÕöR;eš +®Œ°’8¯MåÃ	kˆÎ´µºyŒ+]žÄZJù#-%}@cEëNZ¾�Â…nœ°„�ä©Óö>÷¯³ž¨ùz»3Ž�šýài‹\Q¥.Töé$bÑ�ì îpAº¾¾ËsKxñþ„€@©µÜ—±KØd1²î¬šcÌ	£8§ª$–ùY Ú+wN±
+Ol$û]$h!ÅLUy˜„MÖc…´ž÷G³€\´LvÊø’W<ò	FÃÒÅ„ó´¡"Ê[‰tèèÉµ.ÄÏáCbLl5Ö÷“…mQæäB\tÌ¾ÌÎByþ»œþ'ŽßÚ*��Œ+×é÷©ä‹Gbþê>°é†Ð�F¸.´úi8÷òÐ˜ŽÀ�!ˆ“~ÖgBÖ	O«øbU³„�ñ"xOÔ	¼æàäh!z
+ñŽˆR·Ç™„ôÑía<n†ÂŸž·„—;mÃÐÖ¯6ÿK_.q[ÂèÁ­K2/]Ð(äÐø—‡nYuC/Æ/!æÆ 8 ^:ˆ"`A('ÁM<“§´¾­º•�ª|Ùê,èR#¼7—ãàÄ÷·ÚPûPêÅñOj‘p%A"íæLTœÆ<&úÕŸŒ<‡1™x&SkWŸR»6ó•™}ÑZ?÷ì˜~N9ºì�_°’è7Ryn÷35ðd8yaÕT3É#ºÖ]ž€C$á�0Þh½æ±0ê}œ<VÊD_bì	¥‡ò‘Ëíy@ë–ZÇæ£Ô²qæe2u<—æ¿|>µ÷{X•q—-Õð£Ñõ>(º>[t¦ëñÜP�c\EJ�(òõ*!!á¸Ê}pÑOðIŽ6Ò¨‚ªPU5À,0”fŒ‰¸oÓàÄµÒh˜ÊuÜáE«ºä³¸x›ôF<+¾£ˆo(©ÒÑ(XÀ=àËiGr¯XŽ#%#mÂóbmx^®%ºøÒ«Ý©}�¯ëË±¥ø!ÉÔãÎ9ÃÉBäïOõõƒC¤vîÜ	26jÔèâ‹/¾ðÂÿô§?=òÈ#yyy‡þ¡oíûü8]G«Ÿ˜¾—E¹Ìle0¢0Œ¯$®“:\Ë¤Í@Lì¡[,» ˆ ñfsÓºàå‚’‘Ÿ§ÊsSj×ˆÖõ¬Ÿ÷)£ày>ÌNž �LÛ	Õn›ó³ðÆ/¢o>2ñ	*�ÔùÿÆ'—©‰K<©Ö¯9§H\ëL>ë§÷ÌÿWbÉÇ0 ¦€{3ˆÐ‡›,¥¶OÅ‰ºox¥7³saQÍŠ#œzÿñ„Í€~²÷û0°W‡¦ á@	Ò¤tˆ%u7FsÁwyax1&ÌM@ð¹jGt˜3ªÃ¼6™Œy¹?ažVü–bKù.á	‘&Öû	ÎEbuùS—Ørw˜†Ö²j�E	ùï]1~)âUÐ��ŠÛ7NË–ÕŽêNnF¯ng”VØ17­xÂ,Æ÷‰z%›ˆ©½É‚½Uràö�‰[ÀÐ±©ƒ(´Ø7?½U¤¬<ÀKyÌ Rq%½6¡êÝüf` ŽEÕê¼KÚ¬Q�¨ž•zæ:å3/¢Áû©” “B”ÚV1Þ¢rú"�Kìë…þ’¿Ü÷‡P÷Úð<Í‹£rUx(¤Ýøïeá~>¿4ÜíÄ+B“úa€»�0ðšðq@v]hý`Â»´'K§ð»IÂJun±ÒuÐJNOåwïFo�Î\Üê/%%,ïÙhÞ¨ÌyÏÿ%�$Òò×†––xæèàø²p/¸	"·8í0ƒÄ©›æ� "f$xÔX#ZÂ£ÍTë1ØG>[Ü&ˆTÆöŠLu,“®0£	³iœJ6 µqi=ðÀækÆ@’áÍôñî<x7>ã¦ (Ét“;ú«’—Š{ªcqõëäÏ<M�§8?sÅ©î�ùS´4Á&ÑºÎ&˜UH;�9Îý3$Ä[[*§ð×iç¦Q�e½DÙæÄ„ÕX„[JLJPlÍI4ÉŒÉ�­XÚûÌÃª›8BôÇ%þ7t3ú¼Å¥Ÿß0¥Å¬iý—MïýöøŸtd|â'àÈ'ŸEI*®&ã8Xè™ÍøaDŽÜ3¿ÍØ¯mJ†Ü®˜2ñ9ãV	Ã_­´dx¥Ú÷œI‰…£¦Ø“o�­`âÀ
+[\œò¢ˆa]’	ÒiËf—5AœÔ'ú–1Ò´ *=ÛM+´fªuÕ§ÝÊÒeAêözƒé;Iˆ\ôûS}ýH òþgÿþýMš4©^½zbb"¸<cÆŒÿú¯XgOž�–Veø‰©ãpqõ«Ç¥õÂ7SÑUK%Ì;‰#·Â�-ˆµŠM&×úŽœVÕ² 5Æ�$H
+ZÙt�ÄÊÇŸ„·.ŽÁ Q¬¤ÆU<GŽ #Ç3Îûu<€ÏyÃï¹¿Œ/BËÿ‡¼÷ Ï²Zö¾ï'(5!½7lX@Á‚ˆ""6�.Ei
+ˆ4QA%ô^¤·@B:)$¡zÒK )Ò‘"ÕÆ†ýþf&pùí}öwØ¯‡}ÎÙo®çz®;÷s×µÖÌf­™ÿ "øÕŽ+qj²#Kb6cX²¥�¥Èâx"øó|£"ðFÖq
+ŽŒ|]w;j$u|Phc#fAØ>å›Çwgâ[2ÃÙ»²ó6ÛFt†zD÷C�œÙ¨Y:5ëÛ4žB€£ÔÖÊÑºKÝ–•ªŠbXâ0b�×wÆ¢Øq'ë;4hsÃÛÎ€†Î´ZN(€?eóWø8Õ�PïìAíƒ�u�@€‚®FÛ7VŽ5ÎM±ç•uù"×·Lô˜‘ÿX²›­ž(W€Ô]²zc•µ·w­…ê˜TAFß/4rRŸtAyz;Î{Dj`ý¹^“ã|†æ”)’ð.A÷¢å”¬^î8ÍŒ2ç0¥BJÓÉ‡ŽØçãä¾?Åx&šÚäÁPw(Õ¯•L™åvh©ú‘/;-^t=åT›4¦w6]ð‚S—¾ •pÃiÌ	þÅB°ax÷x4´¯Ï1X tºëÅÒg@UZXKVÍÁ¤¯T.ÑpóÐ:ù_VMÿøùÑl÷­�Ö£ê<|O<÷7œÏ±@j9}ßr¾ÒË­Ø%F��¹bÉ›ô5^×_’¶[åNÅCÍ+¿¥Ùâ8ûé)+£¡˜Rõ®ÑnCÑÞRÈÃ}‡¡Ãñïhg<AŒ@+²#+¡²#K¤4�ë5¹ C%´;Â‹‘¿â	1&EpdÁÂÅ7‚Õ*Ó³­LÄ"$ØE"�lT:WI Ïóbi&8;6!Ìx°c¸ç´<ãÙfVq¥Ù¦ÝŒÐªlhÔÍeàCyMÿbqb¼µ´hH9¸Ìñ¸i8YhŽÁ®Î±Åø~²¬fƒÞ�5AMÄNFoJ@Ì3Z�”E¡/žï\¯Ièœ²¹|Ót#”Ó�An”û�3Lb¶×J<¶gŒM• bdñ÷0f!ƒœã•{YhŽ°ëx<¬%Õü†{Ñ&3=–hÅêíšõŸøòlÃ´Â¸ñêXü†7Žƒ•	ÐšýF=‡µ€L¹/jc§Ý-D>ÿg?ÿÏBdëÖ­~øáÕ«Wïß¿¿gÏžÅŠ;zôè_ÿ1ëì?ÅFK«2ÆR›Ð�ŠÇÁHcD!ÂŒìÏ	%Žk¬p"V•'öÃ¤Ãô­ðçÕÊ}
+ØÂDÞSë¦‡<¯™ àiÚz¢¤u”‘ispMUÁS¹åcL\&l<ÕTAÞó"ûæ6òA‡p©õ•DdEø¡jÀâÌ°‡¸»¢ŸÿÈJÀx,£Á‚ÖØVæ7!bÕZTëq(p÷^sº 1x(R§T‘X~méZÖv·qå)ëõyìjÜ®€Âä,­Ç±´Uß3þ‘ë § ÃA=äâ]g>H‡^Õ4yœÊ$4js'Ë8?ßw­ �k;5Úd<Ú˜+ã4¡šp`ÙƒfF·š–4ñ¼ó—E$9¬“ë¸qqA49@‰~°R#Ñ:³×Ié»ñt4÷M*€ B8£vA%âÅh^äZ�3¨-_a)ÑM9‘÷�•HÂñ9hÔß/ÑZÚãÉtºeâHŠz`Så\ê­jJâ%8Ì8·±µfx,×ˆD)ÍŒ}Ž?bÅ/Ð$š_sœF Âðô1*pÛyS„·~Gì‡~˜+o8ÝA"-6Ñ³™ðc/£YØÀÆ°Ív)€USiuÒkÒÊ)·_W'OÐ˜7 wÿYâä®kâÇä&Ý<wàšñ]³cÇdÏº¬³Ï-]Ñ˜sqc9¾¦Ó ¤…ô6	�DË¦à/w_”†8®^œ¶Îj’*ñÎ%­×ùkÔm~?ËG@ 4,s<À$ó¨¾Qèö8ïÑ”V€;3?èÍ¥’$õTfØƒ£�Jðí…éÊBSK•Â8¤å³#KÑA˜©Àè‚ð°ìM"9 Xä"k*ŠÈ¬xLæaf—žŸR)Ñ¯;f$ã/“®’HxÒ¦Œ”»øŒR|×IF®4&]ƒ�ÖØ™k	Zªø¦ÕëTÎ
+I`ì«³ú\‡!¤]©ÛêëÉ<†&amãF\��¾šÂ�oÅ�e¥|³ç¦ºoÐ¢–RºpA�±ât-Ohˆ,ÏhVétFãw['ù§¡phI-n’?JpMÂ‡°:€ìÁ÷ÿ`í£K„À=ïÛ‡¦6Ž®fi/6ZPu«†Ä‹hX¹ðhYd<Ì‰QÂ}”¯õÅ&�wC$Æõ[X¥TulÛ´ª¿“tNMó¼e<º<Zè.!2¯ÒŸýü+!ò·ß~û—Ýë?ý+W®ÜÀ�mûÆ�nnnÙÙÙýÇi,ÿTz‹F´®î/õ['[\"@ÃhDgj*âÔ`vdqKE¤ë#dvr©�·3=rCžs"‹æDCTñ,ü•O©ÌàKyÖ&ñ„Eb÷Æû~½ú)g‰Æ>«ž’Ù$ŽYU^P,®uó«{@“kb—óƒÞæD>à,{¸âo�= 5@É7¯€Çj#YCÎNë”È�Ž®ƒVjGS6~j%yE®|µ�AõœQøŒL­‘n¥ÕQ†¸Ÿ_ù­ÛLJ8-Fuh°k>úYá¶Y1zLnöp"£®�9ãCS¿/V§v¿W†ÏµèX‹	iéÊ5ölð8xÛ‰Æ¥jèLÕEÌô\›¹;ÛÜŒ |� a y<¼VmÛïÕŠqeãµè‹AB€ö‹ÕÒE ¨5ÌfH§µ­ãéSzw23ìaT.š'%°‘NÊUIòÿ09 Íb�A?[^Vxj–á�f¦—0Yá¸œŒŠúBkÅÿÒ	®PÞ®ihGú)mK?a÷ú½£2�a!4t&WqêëäsßòNÅ×œ®¼luçÃ×�nlÐ;¯:hs¥ž3óÆ|ÏºLŒ1`ÕU¸ŽÍ�Ó2V¦ÅÞÖµ‘~é/9 1t·.
+R'¿sÕ¡ØEx�ýk/ìRu¤ÍuóVë_•Ó_w>ÁDáƒc[Íi¡��³uŽ})øK³ãEv[åœ°ÖßÝ‹Z¶Z¥–÷§g,¬‘†Â×–µ~Í�‘èk¿ÏŒm•XdGx"bBVö¸¦\Þ|ê˜”ËïV–—îX÷¬8š¼˜wÉ1È6'€‹ìØZ¿LìHç>5×kFfè£¸`šý1<šá±Ì2yk¥ï>�#ÉÀc˜ñÍXBX¬ˆ¤1�3À�VwRÚ%ø1±K�ÂP )4jT²A%eèÊÓJ£Ûy}Œ4ž—•bhaâê*v-£)Ø]“ü?²
+Ah!¼à9^³¹›fÄ¨ ¿ÉÆp‹Ãx»ªìU°áv\y²Îµj Ô6ž„Ÿx<l9´P««¢Ç8K3qÒ¹—y—’úQê[ºÌL;®É]F ki˜ÖW!#§Ò’ÙRê]×5EIYçßŒÍû)û÷€Hü¬E‹µiÓæ‘G¹ÿþû¹W©R¥žþù/¾øb×®]÷î¾wó÷ÙgŸU®\ùÌ™37oÞœ1c†��Ï�?þø�ÈþY’Þ4ÑïSÌ$º[3cµþÎrˆƒí¤tå/0uhE®Kãb4‚ƒ8œe—‘A›Ø+AI�õ›û„X¶H7â�DÓ•Â$úè’Gd¾ˆ’Žú•YÖò²™_�\Syýs¢~â"8�¨‘ÔÀzØÃØÏ2%%q€_ 
+¸>ç©4aÍÄ’ßÅxÎÓ¹Ö«heù°Œ-\BpÊè—Q€€#:¨²´;t#þ#
+S	$ÍgÜ��¼IÀ¥U.Xœ¶ç7˜(Á/£åA‹¶wtq�”qît¦4‹SP/ø#Z4a ‡— £ÎÆ¡�ñY´fÄr ¡®3¿I3 >F¿ê´¯ëÇ¯yÅinrŠ•ŒdÊ(vÑcÜml3É–êeDsÈ²Î’IAa™Ö“ª‘G0{ú(K6Ý—äßÕ�òÝ
+ÆiTj/X•\H,C43¨Š©ðq€ùxÎ±52ð45°Á<ŸÁt4Ž�–ñ½Î†Œ%@Ù}ƒzRG€-t©q·êÒ°peójm\h�ŠNå'œò¸�µœ¯_vš¿àÔ¦S4;5Ô£§°ø×2RéP’N¹ÃO‹zÇ,¡YhC.ÈÅÁß®½œK?ÒõœÑºbøGrM-»¹‘vS"£™Ø0œ‰Ø9ì¡…-VM”­ZÆ:U“+mwé"ÝJ°•†J´„€ÕÂÄ?hík– ?R(~`å§nWP­èê©î…é{8G@š·]'@&2hFrrÀût ‰|mŒðá¡–}Ú’ÓÂ2‚�y•4�v^®BžòaÛp3É¿cFHÅ´àªiA¯áÚ‹,óäk†5†´+Fá«)Hûu e<ã?âwq;ÝS}dŒ:ÐÓœ#SþÈ;ž—Tx¦ 3€/˜2Ý}í7%©ë·Ö²ŠØ^‘¾Ša€±
+üÉ
+¬˜j›q Õ=ŒE6­ ‰ÖÊ¤5ƒÄg×t~uÆØ8‰¬2ò´Z)/ ³™3KçX‘™Þ×rBJ„rNŒJÏÇ…G���Š’ûÆ“På8ºN#p/¶(�;#`[\
+>Ò¼�Qè A\“³èÍqÅÏÕ€Ò>,¤+�Ù8ZçßÀ\Ç–/ïÌ$ ë4Ë]B$–ÏŸüÜ;ˆœ;wî<ðÐCuíÚ5&&féÒ¥ëÖ­ËÉÉ7nÜ{ï½çééY£F�Í›7ß£»ÿ§ cÓ¦Myýûî»Ï××7??ÿ¯ÿ˜RïŸ¥Úã`+1@_#¹rF;€‚¹¥Y‡{ùFy20”‡3Þ(%ñã¼G¥‡TI®–¥6\,"{aôf†I‰+4g®.šdG¸£WÙ@µjzH%~EÀ1›‘n�Ö+Æ-s®°áEmv²fs0‡ár"õ &î¤¸Ÿ�È¶8¤eef	u->¦NÒj–ßŒD¿N`‹ÙÓq{‘·g Køgú³¡3E‹Üei‰ùKÇ0Õªÿ1Ñ8j•AðA8�±8m­M²YØ×D™€Faý±ëÈû®à Þk5 ¼ŠJwûõsáù)@KsM|€UóG2¸5š¼ºÓŽ^wº¾ætjÁÐ·�8/·³–ñ´_ËDëZ+©ÌÅ…´¢ÙŒÃÜò>ì­�t¸Ô·:nø˜Ø“›ö·¸J-T��Å.‘Nî«3BËÁN²åïÛ‹EXÎBž5çeÍÓÒ­Y^’‚¦pù2}‘ð.®=ª=¦y%CuŠ¾ÆL�Eà/¾ƒU»ˆÒPO+~Ä+Ð5�¯qyM>µœ~æ'6p&¼åôÂYã_KZÄháZ‚‹–ÑSZà>ÛŠQ‚˜`íiœ0xy´9>;ÝACéL,&ÍqÚ€£¹¬ÜÍE“ÚD¢QÙcðXö�Fþ|Oû[¤NèÎ§˜1Zé2	Hå
+:6$cŽ‹(yï%6&•,è-Ô+W,½ÎÌ�²lhÑß• #s{´¡À‹x\äø3«QÔMú(‰ÞCŽr"‹n®î¬{®p‘‘ÆßÝPö#/Èºg
+íL®À¿°éÖœ2n¸¨‚›8ÆV—á‹ý¾€št´¯ö‹:ø×xµn×µ,Ž$2Ü©8pÐ¼VyJ+•Ã„F!p]ªÛ4øþ›šR´E]ª«Êª·3|DRVf,B30$ ¸XïqE™jðžìÿ¡`k±‹ñ¾ýŒq£×˜Ÿg{&‚›É-S1¨RÞ%¡¬Ô&L_`Ks—–k@š´* öMÉC žpM+èŒ[
+JŽ.vQ1Ž§Êâ­•4~=×ÑÂÓ¹t‡-PJM[Ï$n*�í™<Jv¶ŽGø„¦Xn·ò(ã‹ŸÒäB*8ºØeÞ95tü¬rwÃfÐô«³Æ!À¹ÿY§N�¼¼¼ô+~Y\\\Ïž=ÿ¸óòåËIIIC‡µ
+
+Îž={��[—-[vñâÅÛ·oÿüóÏƒ‚‚NêßD¢HA]v?4Biº>~Vy >‘¹%‡Ä•Pºçb½¿¡ë%}#¸Šf17NôëÎÈLòÿ_@”Já‘“ŽÃ‘Tª�é€éÚgÄæÐ´Ë•‰VŒaðŽýˆ?ú!ÿQˆü¦j2›ÄéÈ;ÿæ”q­¯$ÓG(Ôµf‚„rA.‚f�À€÷3BŸš]:CŽ‡·$Aä¨¿rkƒPx‘
+YÖU4*Š¿@Ëÿåk˜ÇZ-ß å_ñzj!'T®±M¢�üÜæW{ùË²ôüÎ®“(a49
+Ùøœ»iÅ
+%šÛ£Y{ë¬ÈRÑXêHZåJóƒÐÏVœ}‹ßÚÅuý�>o«+› bgžVâËSZqqpúËëþUVí\|(KISÒžó6V·½¥Jœõ+Fµ]²Šf5à•Ð�C·Ò|„Ô}º(Ùÿ!|ˆðÆÁTKÆKs
+îg?~ºDW†bö¤Õa¾ø!Z¾]OwkAŠ�x:i¿ar©Ûšª)!C•�†mÀ[ã2ƒ\¯9�yë—�÷ðé°[^u:¼å|EÓáçâÝÛ4&-¦<«Â)H)ÑëZšn ü²",´�­5ÓZ�£à©q|iaÚ
+Y® ;Ï[Ô±vÙ °¡3™N¤[iÐAgÔçÓøŒðsÜÄ—äÙ´ÌÊ†wå×8:ëˆë[]`5]ÖPÅ¨G5æ‚Qgk¡«C¸íX&XƒèpM8]«Ó­=�Æ66^fèãœ£éNæ
+áäýHÞâsØoR`¢´¦‚³±ªx‘Ø0ìGŽ�,®¶ª¼“âN>*?¥¿’àûU’ÿGô>>¸¦¼ßÂÅª³WiI[^4½“ë8c,°Rªí\;A%jûK`®÷Ôù½wÇ¾¶+¶bnæà­i_ìHyo5 …U6»t*~ãMjñ¸ð­H_É+CÀ"£B4�ÂmÔR°ƒNØÛ`†™ŽÌ¥`Ýç=/k¹pÁ/3ÀhCdœ×QÞòL&À$1Q^39`rÉ´ˆŒç­5ÕÃ]­¨·[…ÁÒiöÓÐ¶—IŸî‘Ë~�†ÍähÀŒ3Æ Œ
+^Š´µTåø‹FÕþj±mG-¢[ÆÆÓWóŽIþî"Ÿù³Ÿÿ9á:;vì¬X±â�GêÞ½{›6mîÅ½~ûí7œÇôôô;{€Ë!C†üN´2~ÀAô*”�¡•v'3VcZ”ê�cgl ÅR*Ýc%¤8=“üÛK9� :Í¸/·GX¢"¼P¡|2BŸDÌ‘VÂê
+‚}ñ¾½DðË‹§)©bn¡­6¿„®Ø^K~B3°“m46R�~`cAx8ò.i9r‘†Ç§‡¼Àó n‰~�çxÅÌ.�6¬èï¢—<$_U†N{Ç™ÞAJ­~Ëù­¡3U‰¶óúõœ±À¢&6žÑ²VÇð
+-HÒœdó€Pòà‘±ˆ£LP­BqVDˆÓ5ãï'Ô8ßXž\·Eë/ç¡`›‰Ã¸‘Ó•Ãg*
+_)_ÎÖsF7p&qdmY‘ñ²ÓøxÁ©Ís¾è4D7Aóv®œò©ÛeÅÊÓêKj¤q#Æòß´:Þ/"Ë*ÑìDA¡©Ð-Ø3Kç¨ÑÒ[-åèüÛÔùAoâÎÓÔ˜÷Ø-ØBIþq9qö±‚ ÍÌÐ'ÀG6PÂ]ég)êìÌyZ*¹„E ab<Sƒjg„>�C
+þÚÊX€"­¬Ï‰ËÆ[ÓÎ8k¯9]ª9-Ÿuª£Š#Í$MÅË¼0KŒÑ¨«Ò&Ð)QR¿ï �„ò…ÔM–¯-ûÒ¤4¸)=\r<}õ÷×ö”ÒÕ{´FäUåÜSÏÅ`ÐL¡Zk:½ù	¬ëÇdzÕùˆgP£ER* Õò xì%î¨kÄkô¦7,}ûµÖØ•‰n�•c¨h|Fåg‚ß$bå±eŽç+‡Þ$´[=Ç´àª©�uA@~’5úÛ‹lÊHyñè‘¤cãK‚¤|cL"Dê–_ElN3;•ÕÊHMðý"5ðõæf©Wµ «	Ïcój_ë:#v†„Ž®í4 ¾’Ž€–r_›Ò|}z¿�±¯mKm²xÞƒ³¦xl_4n—�õ��$9ž�Mâ}£Ð*JÜ4[KP’Ã)JÕ5ëšÑ2ÃcYzH•D¿Nò*ô•6q>C±Àu¹g)P#±¯Â“#Ì¾Q¶¬É0FÀµ4í”D¿®rMŸa±Þc”u_¦p…Ž@„W`É£Íð4ñjÁDŒvj1¸Á/|ÆÉ’;y Eoð–Om¹9lclê“JîÑº¨W§Kæ)�×Ö7Õ:¡šÿ"y(Å.r#+ï¢ëûqî"é¾?ùùCä©S§¾ÿþû[·nýýOÕªU0`€½—íY¿~}™2eîÅcäeffÞÙóè£�äýW…ë0H´ ëbÅ™ÀÀÐñ³ãMså„<\HZ4nË0ÉÿcŒ:|-ìŽ7Á`°ð)0v$‘#…è#øE›_E´ù¬ÒùºÜr¢f¿­æØt«Ä<îly]��XËÏÉ¯Éx‘üúíË²�`Óš«qº¸“È¦ÖG¤×°¥É¹ö:Ãc	¯¦ÄPW­T+Ã¸ƒkos'�€ÊÅS@¿ñ¯æv]eÐ~8ºPxRƒÏ£T1ùýù±ë(Úµ¿–“cÛb,ÕgS).-!Næ�èÄ1³@LPÿG.÷�EÉƒèÞÚÎ@p�ÇxÛé�·‚'‹Â¯ïŒ}Ýé†NÖÓ1¸<@ÞðÑIj…äpe‹ÛÔ‚>«c!÷K`D—¶úÃìF{°eEÅxÎÓù«¨n>êé¿‰·H3²�6^&‘Ã>@aî’†ƒfÎ‰,Š¢–)ñ‡
+µ7ýHo
+·RH%¬ ºR×ˆ»iÐEwTÖ>zRgŸ¤Í¢­z±™òÎÕq†âE¾ê´W.Ð±ï9Õ�j9ý91´6�¬U±®r$(fdòQJ%$¡š¾Ò*cì¡¿ÌqŽ–
+Î›€B6—YZ>6�RÚµ’Á– Ã´ž’Ý]¹={±–EÛb·`«`JYõgì":ˆþº3oõ­]yô§óFàÈ�ê0æHr¼Ñ° i5¦­¾(ÔÕŠX¼-D†æ�\j7hˆèe…--[Hõ¯ääU19°XÖ©«ˆK¸JýÄ=ïÊöîwd›~¡ãØ@.î¬G H“Eƒ¯{®0ÆUçoë/‘òs9².ùõBûfU¢° Ú[Â.DƒámN-ùQ+OýLC!ïÉh€¤WÓâ›ìž×`wÜë›çxÎ�-›¶xâÚE]†Æy�5À¯á¡–:„ÍŒ±„ºÀSN	lŠU`ºEUGË8ï@[j`=ì4ô	'ù·Ë-Ç7ã„–Q’çºXïŒ.ÀHÀžºþ¸“wáRæ9¦6œæž�’Qz½1\ÜÄ2d?Þí¯–ÿVÐ�W¶ùX€{žÃÐr¼,@¬ËIÂKïáƒròœ7Â-^y}¢TQ¿">VCdŒ0Ú]2t‹håñ¬ü–•š,„ˆ¼zõê'Ÿ|öõìÙTjÕª•‘×=ñÄŸWXªT©C‡ýõÉ¿E‹½GÏV³fÍråÊ­Zµjß¾}_}õˆ¹uëÖ¿þcÖÙŠ�–W[üœ¦í@|úIù¿ÅÂ·\jF]L�3Ò0TèÉ¿Ï¾)qDsÞ5“&2Ô%Q˜šõ_¶ÜFÌcLÄ¥eEXÒÿ+ˆvå[aDÀ—?&v/ø¸H!•s±�š&rü†E –±Ÿ-umk”öƒùÍ5³#‹áBÇ#Ï¬u(nSzw ÝÕÜÉªïL@â?¢~5¿c£UÎÒ|ü«`ª¯¿©ù7úçq®ióx\XÑ_9­È‘ .WF7~àÚl.¸W)ªum¯Ü¤RÚTí¦lê­\«x0í­q’¹ÆsÞAò8Îà*¢{ñ¡ÐÆÌ¹Û¦ÉÝ75zvgwáB_Œ±ªÉkûÙÏsr }Ö$W£îeé„vbŠ£[t½f(Ú³dŒó…vB_i­±ÎË4ÀÍLwÐª¶¼%ùRÛOb®•nÊŽ,E×Ø,Ûš—FNN£¯-Z#Î{8Ï£gÑTV¿O«=îÄ>yÍéÊ+ãAc¨(.ÁC¯éô¢•À;ÜjL<t›¹Tôfb¯ïÆT;3Âï—_¬�ë~`^ÛƒvÁ~Z¬ÓêÈ’Bö’‰€×o!±vÀV­},u»l‰Í(y±Op—èn÷¢óŽEFuVÒu:ÂHð85¸+CK®lÖ
+YBâŠÕ„ac‹Ît7}Mÿj	ûŸ,¸Gžgà©¬Z„ÖÄw¼˜\jæeJ`c¼o”<NÓü ·iÛä€ÖË1Ä¦[e¸‚˜‹›«K³ƒ‰ÔID|ØÞþ¶L³XÁY¨Jó7%CêÊ´à—,zƒV¦<I>N±‹4”Ñ�*Çû!Fš|”ú5à®7¯ƒr�ê$‹”yæBÖWËrzÆ/Ÿ³lLlZ‹ôÔˆæøwK§fÍõ™2Û3Y8"‹Îõš„‘œöð¬ÒY:ç™5Ócáü ·ÊÓ>«Lê˜6U"}Õ!O["¿¥6°¢$óƒÞ�Œl¡«Çñâ®ò<RÌÝ{£W‰,ºa¢3¼ñÞß”øžq®4P‡”@xƒâã"ðss›hÓR§KtÊwÃF‚o=“t1}paŽ¤ÖµÑiŠk´û•Ç`…–ÞË1Ú‹×È¢…#•ëÒ±Çhe:>èÌ»„HzùO~î)D¶k×.00°sçÎ�?þøk¯½öÌ3Ï,[¶léÒ¥+VlÒ¤Éßl‹}w	<ºG^$gÏž²�:àé§Ÿþã¤ë?b�½{6Z^¥¡1Ûçu>aÃ	¸´ô"Ì]à�Ž–Úô9Œ+u>KöÿˆRÅÞCqI’ü;HFsy‡ã-‡QÂÊ8ÂùYÆ1¾Ö…ZÔ?Å|FÑÃEØ×éZ$ú–ÁAKŠäƒ€³Û[Î–×äW6°¢9Æ´÷æÎ®âB®®Px­ã\àFd¬ä{(Ñ¢ÆçÌ�°úSÆ3†®3…©eÊ¯}ì:‚^Ååì#$“× ÇA·Ë³jÅóV�±o¡\ìDaZ±fËÓ8�<M ¼jÜÎèa´(> bëE�» ±uir/~
+8kÅ#Ð« è©<ÒKÌ™Õìõá•œ×pm@´–ù¹¸3Z¨ë’º´ÂÖnµ±¢´ †2Œ]Ö„¯í³Ç“cÒ`ÛO-õí4÷µÏ(¢ŒÐ'ÐZ :jŽgÌb†Ì}ŒžÕ²µD?!Ê6;²xfè£y•Å&±¾ã GëDöÐétî<Ÿþ8˜U2ï×C3mO*�ÄÓŽ/~
+<âáÕ/À<Àm4
+>Þ4¤¬ê®•·æE¬@'.Þ´&Çãúnôòžm¾OêW×g×ÈWŽáDcŠ |B›Yì¢e#×&�e,WcÆü}lp�^ë)ÑS×zhí`e¶Ï7
+nÚœë;ãÙc98<$ÖTM§�RÝù�s?,²¹ÛC+â‡æëZvž¥Çj%©KY“ÓÑº(É•�¡i•4�¨_^‡¡¨kýèÿ(ðaÌó¤ÉŒÑÔ¸W–ÙAÃJœ%l•^ a1s5®[Dæi�Y}ÎÙúºô"ƒ�ÉOË4×Ã&lßˆÍ—I<ÛëqÞ£s"ïGNÑüÀ®Éô¼ºÀ²�m“šôwEVK=çÐz ÑìÒó5qîìÒÉÂ‘ÞtFz­1ÙµZ->wñ—#s:M�®ÓÑ©��ðc½&êìq»´à2åî5›Ì+K#`'p¤RGöÁ”b?{R›ÈL~-È‚K% ©H+ôÎ c)=ä@
+_’'Ñ�¡õXïñZXa‹ePr€ÜÜÁY‰bÉ�Ã*àa´¾ÉÖ¹^Ó�Ñ¹\“©‹JÀ#‰™G-@q¬ÐžïQv©÷ÁEŒrD)ƒ~ÑIÔß‡.ñïÃ4Ååäxc�¾Uìªž¦´Ð¤’ÿ	 ô>|˜��¶”:ÿæà^½zUªT© @ÞýÂ…qqq~~~ÑÑÑ÷îñîÝ¯0¥Ô6ôÿ<Ÿ!JÖz„a¬q×›…ñØ3I‰­ºhµ¬„=-¸ AHy�±§Vbf‚ïWŒÿ´àW²"¼1�—)Ù8Ã•ô°TÈ
+‹@Ø®¥Œº²œ³õ�ÂdÙ¢Ù�¼-5œ�õœ�ue~U °¢³§©H=Pˆ;™W©p……ƒMöK<Ïsò-Ë�!ÏpA]›ø”áÊã)	ÿYÞN	O [m]›ººýˆ›%‹ƒ¬Á-–§u
+ —£¶œ‡N3²SµK�"‹%J‹ƒ r!eh14a´â”ýÊ¿}$¤ç&ßÑJZbñÿ�\G£ŠààÜ°(ÌÐYËVž—QV
+ÜÓlîÔœÔµ®‹IxÉ»Nr}g8ÒM
+CBŸ+Ú›Ôe»¿ªeCsðevé:‘±"¶¨)§iq›çùDëä[]¥îl™Ð*Þ§Ÿ¡žNÍ¹-þ¢Ç²#¼ðDèqR^�o1]*Ë²/ûeZ¯œô ZŽîbí?¡‰©¨i>+¯ïGêƒ,D•i„ÐA¿ïZŽS¬¥Ó;±µ�èÛN÷¥"?†Æ–Ò{Â
+~ÚjµŒ~áÜìFÇç688õ•3ó¿Þ=¡úÙ^÷ÿž=yë°R›¤”ž'¬œŸÍX¶Íò¥¿¦kÌy¤ý�f+¯L+�n´!¶
+ˆÉ�úÉœm†¹ù@¡•ƒ¤_8Ær3?œ	y¯Ñd}Â˜\�v8gé!'³Ák.h¨´Þ×4Mþ(ƒ�ã5Cs£Ò40“Iðû‰Hòo/©©¡�³�«1«´*xw.im$d¤�í [ƒ@X¨½Í¥kV<ælª.ó-»Êd \0+< [H»[¸[´}?mË„Â�à›mÃÆêHbÕ`![]KŒ(Fh’è×=Æ3NBpƒ_¶Ø-À+Ùÿd?Ñï}‘Z–?›ð>ƒ�–üx´Hh(ús
+À¤)ZeG–@-ÐÂŸà±’+0ä¬°O{}ªžé's<çrµ¬ç_^6bZöW9YÝÊÍÌî»4§WfFËy	¾½¦¹ç+Ø§|ÓÔÆêªã°7aø)·ÀzLw”ˆ’s�Ú°Î—jïXà+gI‘R›c<c·£‹]ü¦ä!K÷ Ñð�Ee¼¬ui/ñë@YÅXlÅ"Í²dd­n)ôJw	‘ÔŸüÜSˆt¹\{öì±íûï¿ïÞ½¶ÍÆßß÷Æ� dñâÅm2ö¾ûîëÖ­Û?[ZëÈÏO�‹}(“Û�wWƒsŽcß2¦»¯BjLË%û·�î¾RWÉe¥€a�Ðƒp~PíY¥³ðÝ8%=øE+¾œZ`µì~,’kæü‹äˆëÕ^¥sª¦‡­êÖ/>ãÖ7EÒ9k[M9¬ ±¹ým	À«ÅìÙlÇ[ÑI$wAX$
+2=äYF>ÚÀøèP¡ª0×pVYˆDšÛeåãÑ™ýtÚÚæiÁA!JyžQ|°B5{t�£IÄ'†)U£åˆõSmµä,tUù¥Núq¯>êi*‡ç)ÍþÀm¼-¬_§Z¸+çç|«ºÎ¨ö®½m%}{£Rú¬58ß¼ïZú®3¿µk}+×j¼-.zrº^ÜtòR½Õ�µ)b¡Ÿì‰KèdVs¨¯jÄÈ´ô�*³=QÚè(”^FÈÓè+©Âò¶�²	5®-õâzÐY¨/Lz”p^åBÆËá`�LöþÀòQY‡mÌÈÁ:š._2Æ >ZÒÂŠš;9BÙçd�,ÔŠP¦÷}âK•O‰œ·rE’‚ôùw)Ý²ÇmÍ¶+åë}*]D«çŒÛ4ÞëGÎEaä+��0´ÛT³Q¥q#Ë÷±™vnm•_¸Þ+€fç ¼õ¶®oÛ¹vsYœGž„›p­\kZ¸ÕsFWsZvÖ8O: lãÚ?,Ï<ý�\l‰™ë[®G´º±<€æHJ^9(€‚ÅïÐ¸Öš‹ZI“‹?c¼˜UzM*ë†eÄd|¤µ·½%" ØÉäêÓ*GU4ŠUgWvÔÓq{M‘d„Ÿ¾­*væ®úŽe‹°ÇØêt¢$@ƒ9Ä¨àÉ±î“lÐÔ	]ÜN+ùYZÃ˜Öi,_çË9ô5€L¤6^"
+ðÔ>wÐ�Vsº+6RvDi:�· ûÌà"™\UÂ“üzhVu
+*E«|�äß‰1£)ƒ3C�ã5‹mN×Ìë
+ŒI‰7h¸(±j§Þ²ñ‰Yíf-lÔjŽwü’É+Áeå¸Û‚U¬;Û97,[q9'IåŽ%t„R¹å£"|8¿xÄ\éÖ# ´%Þ·ÛJ} ã ;Ä!|�c«D‰g­ÑM<S]ŠÚÁ¯6z��ÁìÕqÅOÝ-D>ùg?÷"¹ø¾}ûl»X±bw¶ÙøG÷½~ýúŽ;Ö¯_ñâÅ{÷`÷ú�·cðLs_gÄžÊqŒÁ£.Ò±xß~ÑVŸ·ØuF*.9 �Æ¤10Ø“ú„Ž�ý™Ð49 5Õ
+MJe«ˆÒè]É
+a g…ûc|bÖ‚†2q¤“x;°ˆ‚Å”e¯GeÙÅ¢^ùiï{ÎŽ·El¯%ûeñ¥¦Æ`èæê¢+ð_°·euRë2#ÅŒvž�QÍ3£y#Dõe¦¾Õ;ÖÌÁKX˜æ|1øµ2…°#eh	d
+ŒVÕª´Ì2E¦¼£—”CC
+ ëÚ	›zÕI!|³0¶ašåa’Ì8_üß]ÝNköÙÏà˜ïÎÇ”;'÷]'E«0/3ÆQ«8¬ñ'»ÁJô0`ÚÌI‹Vv�6®<ãšF‡[ŒÐ õa¿ÒÐJ°[˜0K§ð$H7>ÚèÇ8×Cs$úÂ3&Þ·7
+*Ö{,�eÔFtPV„÷rqÿŸ4Ä…Gß‚}67NOÑ_èj¾mQ˜�X;´?]¤bíX´�i(E$K‰º]QW3·Ø|2X�ŠÆh�Ö‚¼ÊKsÃB§ŠšG)7@±�×‰k°gÊ+gÇ…_\4fMFôö”«ðhhgMü<ˆ&d÷U†jŽÿB*5\µ$5ÄížÂ³…†3n~S_õ-ßKƒÇ[ÄbÁJ¡ƒZºVqþ1¨Å	52ùÄaßòü@3ÖgÙ«�¼œeKÃZ)é�ùh¦oé†ãsºûZTwZðKHÖ|	 ®`~½„‚Gx.+#ÁÛòï#4r®Òæ¬© " ä™#‹Œ1&ßpö6Aø®µðêðÓÆ&�²ü*‚¼H–€eå™ÔŠ^&s„ù*.Ò|ÃÃc‹Ÿ¶9ü››±P³Ò?ˆbžØHQïÓìäz®×¤¬ð`ÀÖbÐ/å”)¢U/û,–µ�JÀezÈó8\JJù¬Æ<W0¾ ¬!’Çcd”	¾=�à©¥6±Áà‹±·Ñ*xjÉá´‹Ij¹=¹ÜÐeñ+—NÈÌùx¢ú¡­Þ7»¬&¸oÄ�´zÍø† =òÎ«°:I	hŽ%cù/šKrh~Ð›ˆ<ïˆÞ©Íª´Š9cÀJƒ`XšøºÿÖ4÷µ¶æÈm5Ü¶HöežÑªsÖ¿D6hÐ µþ¹¹¹ÝÙfãïïû÷S¯.\øû�ÿ+þx;™–é=XS õƒ±j·Ã  âƒ1	jXÀ3R†Ò8SŠ�Ç ÔÊ5i–hZÜ–aá9e\¶
+i“uèR oAx°äDGx"æH="ŒÈ£�Ù@üv€ÍŒ¼#àÆüÊNäÝ”â¿éZxNÏ$}ñ·µËUO©—*5õÞNðí…Ä)ÀÝ0 äZ’Nh±Ñ÷Ié"”§VÆÙ9XcØC!ä‘4¨³r°ÞRï‘ˆQ¢oO##8Vc±lq+Ícu4ÔO¹¬ó·ä3X]	K@]sºî)Á?QVÅR4ðéÎ@Û[ÊYîn$<?û9³QÔJÐ}§ægž/�Æs´˜Û]Û9®à+Õ]­ð·$9ƒ<Ø÷@³Äê{¬´"³i ®Á¯™è@º)Îg(>Ž±ùñmtF‹”ÑW¯D"£/ì>z'e÷;…3äët�¼äDY¯¼IË5SU9î>™í™Ì½¬°Ã‰¶Rø=¼,Æ ÏÏƒqÆëÅ8ä_3Ñ•ó€±d+÷×Y³jøwˆ3:Ë¯£wŽc�¨jºainÆjöižï~-»p|�ðK_3¦8ÚÁt£š%×µæãé�äs£—=¨³ÙBV€S�Ï®™)ŸÓÈ¸½­]yÝ$³r5;,×Hæ• õ'žœ«qSºØøúëDý á&Ý"Ì0žs,©*Æs.&Á¯§Vn +í“ZZÎ#Žž-òÒüká:ˆƒäwT•yTä)�OçàGÒA{š‰yI¿àìï{_H:ewC�œ© '‚\Èè è€S”¼T8TKê£±:¸ÌZºâÍŽk]Œ”xŸþóƒj­ÌÌ²ôüÜxŸ~ÆÉ,FoX$²œ\ÿt[¨ÐºzX§2Ñ¯;�Íã¼G Ž¨‚¬_ðNÒ…ÂƒøUÁô~ÞÎhñ´t„±%pëô�Ê@Êp�õš(´‡¾=Ó+~”ýUFR¹	iÁ5õ›·ôåHŽY4~ÕTß]:yû°F‘º?¾_"þ`û5Èp:/„üÞ#0]7ëÂ¥PÛ��: 'È@’Wœ�ê-®×ÌV™‡1B«0ÂPQÊÖiVEW$¿ã^ƒÔy iVF¶Ãa_IÝê»-†eEþÌçžBdýÿß¿¿�¿ÙsòäI|Ï{÷x÷î�wAŠmIZ³žoXemtÚUëËËpÂÔŸç3¸’OÏ@�a€´¬l?#ÌÇŠK®Â†–'èŠà[Åc‘üõ/l²ÎRlFtÃ[,h$ÂÎ7Ú Ãxë›2¿ZÐDöl{SÔîä®zª^�ÍÀ(2‹�mF©eê!<3²0Dô­¸x@‰¦³Iò8ºÚHEŒ±_ƒF”Ðci…äðG0ïgx¬àKže@gŒg¢­©¡ë¢dþv/%À‡PL’ì’‹FŸ2Lcé‘�'”L“Þ’·(Úuú©Ûet2…6IûH¼«°¾h"üö×vvp}Vâjbæ
+­<o lìÄ Ÿñ1y£fNzS'÷‡kÒq_KØí	�EüÅØ-£™^Ã xNáPòXˆÝžìÿ¡Òy­Àž×¢ÞÙî˜.wÿÐZ–D@_X®;Ñ·´<f	�é2î¬#ûñ%ÒòE92§Œ›–wi—àû…qoª%¿PË“] ”ua c³Á´˜N†ïåÉ-B•TK;+Íéw:ù¿5…1�cÓ€tñm>±ŸL±éM†®ÍÐF©{Îõ{«‹nRïÉæÇtü
+£_ï’‹ ]Ý~TbÒ¸™ï»–wpí5žÞfNgi8ñ.­\›[»ÖFiè²�Õ»Z‰-%£fµvä‘A’xÎ“PÅ;S³ÿRxlš$²\?M©µX9‡Ã¦ëÛ8bFÄÊØiÿým$\Íæ]wÖ•é w“î8ÚSî¿k%b"XÙRDƒLG+�ÐZÙÔ×Úœ¡ÍoKYp-ChQZþÀ-]¾=»œÈ¢¹‹“ü:eEøéúE¥áaiÁ¯XéUfÝÕ.Ê
+ (u–Õ�×4<„Èf�³#KqÊ‚ðPSð±Œ+% ™è	~� Tí3ð´¦LS¼ÂÌ°yZt§€\Œ¥%½G®7rñÀ™KMÌz»KÎ×i9_ÆfvÍQL–Úñ%¹­:Ïgˆ~Çz�S�õÀ†�å92x8ÒbÝSí”V	˜Ñ¬«ky‘çè2l<1óÄH¾¢+’$®.—ëœÛQÇÍ<¦	•‚ªì×²¿°éß"ïòo¬þI¢ÄþF�…³ùÜsÏýw?ÝÿÍïØYü•.–ýn•Õ˜—8ÏÉ%xè¨Ù¥SrŒ3œ¦»¯ÔÐè#|Ï*�9?¨&Ï²ç²Â�W'%°	Ædvd‰D¿O-âƒ—É'MeJ‰Èª(?…èdÛ˜¦2~%z Ïe_sAÌ}-Dih/}‡?‘�ü´£ŽÌ2É5”Ò™aÜ“%�å¸1ãX”fLuß :à† ¾4ð•×Yâc1ˆõ›‹”)WÌ$•ˆeÂâ™¤Ñã»(Ý!&Z‚LYv¼V78Ô_×#¦ºo¤I?vQIXVh[ Q'ýDiG)»—¥íâv7hã91éq»úÎØÛù›ó@Ct5ÚôTª™õœ1ï:)¶š¦Imûðw¸ÇsœJžVü, ÃËN*¹AF3 ËF]›\åœÐ‚Ž&“ÐrôŽEìXn�X/å¤Gd�¸¼&àT³DâFªŠÿÂ¿‰ÏB‡Š³_U¦[�
+=	Æ¡ŽÀ8uý¤Â,ï¨5.¶0`-)x@KñHÇ¦”Ún<€ÈL�%³%Ç|4¬‚ÇµÀÖ™ÏyÚq—mŽk�^¦§”å”®7�Eÿs£éîk,æDiOø	«Où¥e¥Ò ›.è{š€îUäMˆÓ†í]{é2v,`ô}%yÀI¤ûÀÐ¶®M¸�xÄôH
+hr0ÀJ�Ð¹Œ´¯Šü~;:W–À´dç
+™É¥vb?¨GŸ¯´ÆO0ä´/^·^@ÇJÈŠ_Ó‘ÚŸF>ØAþÅPÙßVÄá»–â9úXÜFä"¿²|‹U›“mäŽK%´eÀšAêŒÐ^Ÿv°>Ì?^ŸA‚ g„–ÇÑ“‰ Èû„!VÁÎH’±‘x�G×Ë´Ã£…SCÜÅ˜%„Ü£‚Ä )ÕOaœ90j«¢Ù‘Å�ÅOH…/~�QÆ-5°nŽÀ¨¸–FÅÌe•/«<I—/eÑ}ÂÎXïoýºð`X +`Šz™\r7§½€OÝ™ã975ðFQ’G%ˆ;ë=�öÇID~µ|s<&j�mNçúˆ6#*Îg
+½'¯Kî–Y&IÉ×ReÝctŸQ¤ñ�Ç”Oƒ|ŠŸ]ì¢MX�ƒýz÷á:´ÉŸüÜ;ˆ\õŸýÝ9ò%ýãI^úÃß«¯¾Ú¶mÛ;Ë—ÿ»þx<DsC�>£„äšÑó¾]3t†Gît÷UÀ�-Ü#æxÉ@V«€æÌNºÂÊ$ùwÀÿbÏó‰^$|æAH‡±$a!3ò-Ú’¼øØ6v/^	Ò�Œïn$¹÷=çÀbŸ+šùpw9ààGbïi"Jƒ€Q[¦DŸƒÂ©��|¿â¾`t]GåS�ºÅ+`X2Î±ð‘ )ëæ¾‘§•Šu¥Ó2ÃÁ(M	x÷ôç_LY,C0e‚Ü!PXÉøGÃsºf�í™-SX[¹ÍE3‚žwê«‚Mè”†‡ðÅùÍZÐDå²vØ*½…{mlW~-'JC^O¶r­FÍ6t¦jTÉF­Æµ¦…kI'®�kC]gÄ—Ep“GkŠ®…Ý² ã§Õj¶\ÄþY¥àM 0àÑ'¶@fõ¬ÑÒ¨8ì´VZp5Ô é@Üš½‡#ƒÛˆ–Æ…a{osÙ‰®FcçU’9@;€ž3)Â—Ó*¢�n@U.ÂÏê/ØtÞ‚£,áŽ1†Ûnó¢jó/`Œåf¬@}á]âS0ÒP¹ÆÁ‚e‚UƒåÃ'Ñ¯3ÖŽÎq]³ôCsä¹T´Nh)´MFÛO¹jéÄ�J ÖG€ìßQú$}5Ì3ƒÃš;Y`ì}¶¹“³(mu_Í%©í(qö­^'}ÑOwÌ’Y†ÉZçyë}+4Ì2TlÂA­Êt^\3‹›¡±-»Ÿá
+X€DVð¸)À&¤(ÄsÇ—Ä7¤/¾ï*Þâþdäï¬çýBzäPG‘öàN
+ŒÖÑ™p]� ¼ðÝlR—g@Ø5êà²Nqÿ¢ ùÓ\¯)’¥èÓÏ‚œnº ìª,m™5w‹,"«Ê[$ùÓÂC€f¹×ÓVÏîeá¿
+‹ ¡LK€€w*•d„>™ú˜å~*MeSì�wº ìvr
+ï.¬M’”T~~Ð\t³ØxT#VýM7­“ÒnAXdV¸?x‡$fExqä4÷€)ƒ½´ñ"Øº¼ :A­Äå˜^‚¸d®×dÞ‘ýÆÁ>Óc! 7Ýc%°¨œ®{5¿ã€•aiE$µºîZOSN¤d	;9+hˆÔ½Éàdq£Ç�#ý.!2÷ñ?û¹wYê÷Ýw7r¹\EŠ±vþÍñ-Z´¸GOò¯ÿã-:Ý-ÐbTÆ»æE46
+Á˜öjÀç+ÔlŒ+FÎìÒÉñ¾ýÒ‚_Q†Š%Tl3Æ38‚˜ -9…™SÆÅ'9 `AxøòGÅì±Ìôª-rñ�8#/G>•y$œ ·ñ`G™zý¾³è4ÀÑ¢L ¥ÁÐÕJBä¥¿ˆä¢]qîúëôZ”ÄÿËœžÐÙÇ‚jjvCFä©$Ísø¢-üþu£*å4	ò’X'%°)8Û3³ŒŒmaw/~�­¡òBkƒëÁM1øV¿æÌ AF)¿n3ØšWòÎ]?#{Ô™@ËVÀ¤oäÌúÀ%&(ÏÜÎµXÄmì­3“ jk×:0±©“ô–óå;ÎôºÎÈæN6ÚûC×ö¾ª¢åMuýë6gû¼åúøÅ¦(q£$#O“w,\a~Ð›Ï(O�À�Ä€7¢ >*R†¬’(=àO¨]šŠG‰ÃhAE‹qÒPæÀM¼öã¶€§^¢Þh²›Œ�Š ¥†3ýn9¡|Ä‹—ÜÛmŒM~<ÌÅz�·ºÌZ;)EúYËÌÒB�Òƒ_¢Ùee
+UòŒ¸ü¥ç+©æ7–•�/‰r³šDQ:-Ç+£¦°s¸�å¸YY¥*K\í¦3«$Ø'´U×",–!ÂÂ´ŸüÜíz'×qzaIÚzžgIZžRæ}àÚŠçN5—òÙ'”[`>–}‡_Éú…krqå\ºÂóŒÐº3óƒÞžXò ¹Høt©�õy_™W} Á‘_ô€,CH�¶zXŒmF5¶ÖÁ¿´0–$pIûËäê»âE²mA­?ýÐKú…N¡›påè¸ERAàY@y��þÌsÒ´ƒP³ž3æùâîŠwÁÙ¥…¯ ¢cåç€BÆ Ín�”+Ì±Å�»MÕ‹`½�…³º®žpü]Wæ�å¬ð [µ´Õ®³PB6Jç•’œ”ó+ÃPÃ–[™‘ÍcIVÇDë¹?†òõ$I$ìáÔÀ†ØäFuÈ&øõà3¥Ô†
+ƒ„ý(„Ïys¼f%ùwâ59w®×Œ8Ÿ¡Œÿ™‹SzAééŒUYÆœcüpk¬<b,!Î³%U'Ÿ‘3®l¶ŒÒŒñ¾Q¶˜«–Jà<xjŽ-|·^äãöó/˜hÍÈÈ¨\¹òÚµkûí·›7oÔ­[wÆŒ÷ú¾ÿ�ºyÓVè¾pû-jó«!±ã…|ºˆ1 0<Ðð¸ ¦®\ˆñŒNTÏ9ìd¡îæÕ­á™ØÈÖèÕ¹k˜RÅæñ2ÃÄ—dÙ×òYkQ„°1‰7¿Z8éÊÎå{ë›Î÷]ä§zË,Ó¡N‘(ôƒÍµ®UâJD	k�‘i¾¯†µo%üÒRlnÜ¤’:�úŽIZÐk ¶´ûöÔ<n·¿Ï-šŽa['X:a]£Æõe»¡ÞÑ6F3Å�&–üN¹Ž7�•Ò9’!ã™€>ø´ÂÎ9+òh	ÈRŽÜ}þ#6¼Í¾ški1–èg<AKèS¿ò¨XòõœQÕ�¶|7qæµsí|ÏÉTj Ü®Å¹*¯æ¶÷œ}4PS:®Ä	cK¤p’ð%¤‚²lªµZF+ ½³Pyqñû„ö³¼¨>ã;BÇb–E6�‚bÄÁÇ¯a½mÊ�×žm¯BAÑ’	¾½´­¶ÖÙ<ž°§D†H¼FËÌÒYŒ1ÆÏäR;çIÈÐ Z”TÏq ^$Ê�‡•‚†G×1ÌÐr€#æž…•Ï¦±ÊÆ?�äÿ±F!n¡—�!eÔ¼L§ß.Œ›§Y9·ôa¤0ú@�›bÃh4HHx°mº»]¢ƒ03ØIûsîâ´uZ€{¢Äó”]”4p×Ü£mm[$ÿ“‡rS†	½<Îã§nW¢$äx{”,ðé¯ß<Ét÷U\�7â¦*Ä
+Uœè×„o<&‹dË}Êf,isDƒVrŒ§¥mù˜.4þáOdiòÀ‡2¯‚¹»¡HÄéQÎÉÁ" à#Ð�À¥…ýd†–¥mñ×l�L‹PÜ0ÎR]³Ã¢ø—~gØcØ€z Ð~HKØ‰ˆÒÂ|õŒH+²¶\		-1Ùf„l¹œÐàã©ñØôl¢_W[LY®œR%6<€ÞDä3ÃâR¨é!ÏqïËÓrÀCweæÌ’ÜŒ¥9…Ü#O'ø}F+-®’�ˆF@‰��Î0`Hð=¡Ä±Ì°²š€60É¿£58¯cÓ¦‡TB.Œ‹•Ã¬ª¸"®âÜ™¥s¬³e�¢Id©ø©ÙžIJ+k+ØiX¡€iOM¶UšÇíe	f`0fpÉG�]#ç.!ÒLÓ?óù@ä<°eË–?îùå—_Ê–-û7‡ýüóÏýû÷òÉ'½¼¼þè�ÞëÇ»´*ÈØMÊ*É\«3hõíè-�*ñö]\'m:‹a AáŒjÂ”Ò¥ðñ¾}¦ŠI6"Ñ¯;¶CTŠƒøHÇi•¥^(#3.‘Ð'�w‹tEv°HA@�Ûþ¶ g±±³®b_mÑH=Jøx”†s¬·ªˆvâWr:J‰C'pdm`ÄPêÄ‰ÿˆ6€xž\Šsi€
+§¼ÞaÜÎõšjt¯<[vd13ÏE²½‚ê(gÈ(ÄvšûÚÔÀw¸…‘Ÿ¢´Ék�Ú¹â{ÌÂN0>û«BÆÅÖ(ñCÆË1@*æa D”•U=¶ü)¼H\Í¼lu(´b¢ò¤ …À¢qÓ}àÚÜÊµu­%€mì}×R ¨…k	ç*¥¶ð—TZu›oäFÊª}džOéXo‰–§ñ—W<&„óf¥Khëƒ2WFO™c.+bOŠ‚=ƒ*1N$Å •-øòx1tý…yƒUƒ³ÃRó‰ñLäúXÔÊàwò+en±`?	ŠT´)ñï‡iÁ¯¢šÌà§œÈûý>Õñ¹pÛñâ}û&´Òdöö–¯¥7šwŒ’·•GÚßfbµÒî´`«DüÅl3¶ÞJ¨p[ˆQïj}¨«8ï\ßõQþ%|¬Z›�Qõvì¿®u‘5q£vôÞ0¢ÉÚ„1+éS%ƒý¡›Û9¾éANŒÖa`�8…èl¥¥ƒJ¸$ñ¾ýHàÃÒ
+…¯,_¸l·JóLÕâ<êz�ÇP·o\Åãý"Å8i.‰,l/ˆi”ˆñœs5 lrÉÝÆ¨À  @-+¼ç	/Œ»¯zÊI®bÖ‘%’¬×Z½2_á± ìc½³ÌeIª ”ƒå+žÐ¸»'eÛ\ÁJÆÃLþEÇl0-�ç‘Yœ·Ã6.5¢¯ˆå™‘ ö	ñ»gÒªÌ4M»®©ÕØ#°ß@7ÄV×ÐßÙÃaRÛYŠžÇ.,ðáa ›N5,Ö)¯–ÍA³Óà³=“¹£4œ)‹GK­jÆ°õ ÇF[„CE¨ž%¤ç Ì¸ÒB$Âp+ñŠ¥ç3B0¶-5RM¯€}ŽSúiÌŠôß	"‹/þ7u!ACpðoûä“OÀÇÌÌLy¯åËGŽ6yòä{ýx÷â�WÀ`¦g-$R¹_~Eƒ�›¶I%¿ëîvÑ*§ÑZ~ÑFçÍ£Æ¾~Sâ0ðñM‰ï±ý4¥åOC}ávaõÍñš™òBJ@DIè8"ü°…Ç¬‚¸“y•åD-à0î¬# 	4ŒB@'³} ½s¨³º*d!§rO3çÌxJ‹€Ý¤¦µï!8¨Vã‰úÌMÒln�ñ<QÈÿ—¥WEñò`˜µÈBVx�Æûµ2z™õJd'$ÞáY>€#OÎ�ÎIÖÃßAZÑÛ©�õµˆü $bžÏ`T1‚3Ý}5ÿ*sõú�ZŸ�æ²9=¤†ç¬“ÕJ¹ó+ZK"ˆÔ�4ìÊ¢-W´zÅ%£L×’Í×š9óÑØM�ö4u’Ú¸64qâ´~Sn&_5ÁiË%äk„>Ê*ƒÐ’×P) ÈÜh	[—0¢H˜DIÓÏâì?¦ù§Õ
+ùÍPŒÀÍ	²A7¡“é¦}-Å�±¼¼o«Ê‘–§t›Ð0–�ÎƒYAP;
+m,¢¸<iÁ5(º´à—hm„¯Šo©©Tj³j³!š  ëe´s¬÷|
+tût÷5øïs<ç
+ë…Ï0´"—ÅÓ§N=ï>®ø©~ºÈ0Ð
+PgµS®2>(mb„vÃØÃ&iéZ¡á)�ù¹N›+¿î~uð¡Á93ñÖ›9é}Ã.$�_5±í¶FÎlöÇ[E#·p-Â’ùÌí*Ýô¾k™¡­1Ž.ö“�HýzáíœPâ8�J§•t] \ V–iÕH¤ =Oãc:JÔ›"/ £µÒþÈÂÉ!‚ƒx‹ %-¿«¡ø˜G>ÙÓ´°S8Å¤,9 %F ãg‡—²ªˆÀG‚Ü¡¤>�N„òBuU]ðÎB}p­‚ÀÖ×kˆð<ò“†±!%êÔÜ\£p•Ÿ¶Ô0¼ó�UË§äšŒ"6ÀÖô�g¹,ÒÇax‘RÍä)©:ŠKHï‹ŸøHa5X«2£óÒm0Mc½Çekx�Vˆ®¥�Ó¥ÖÍ­ÀM5–@
+>
+¹bÈ3XIþx)®¬zÃSš¦WSŒ	È‘ªdëã}ú£t3�ÓQnVrz¼tS2¾  ¡e×±*c	¾_òëÈb×E–<4«t�IGKZîjKGbpÎ*½ åy—iÙÄæó/€È†–/_~ÕªU8�7nÜØ±cGÍš55jô7‡…††Þáh½yó&»wï~é¥—îõãÝ‹?^ÿéFŠ»»ýd)„ýEÁê‘fN×±ÕTE«`'[ÑŸÙ¶xE­î½w†ÇŠÛ¶VÃuºG.£]¦=Kg§‡Tƒ²Âý‘ÃJ£hÎ‰¼�ºN']�ÂMÕtI«¶LÝàž  ¾#Ÿ‰ %Q‡:Š‘ÌåŒ�wù}—ÂeJ™˜­)ÓD‰~]µ¸Û¥^úRÃµ&àˆ£�ÚAv4¢¤ÕÁåáî9‘EŒTVg�A@›õBÄrÊ¸á{ê<R�Ì°ÐÏsÕ"�ô:
+Gã‚†â(¡ ‘ –¿™¤°'„Õ§ø)$Ëx½h´8ï‘VÀb$¢Tâ}ô)"9Æö‘ëà€ÛECê;ãA–v®]Z%ä½£ùç«;mßq¦7t¦¾ãÌÔ’;»NÔuF êÙÙG\žÍí]{Ùù¥TŒ?ZcE$ÇsVéôaºü$!Fž‰ñ¾Q±^3B*J�û°ÚD<ž’ö_¤ñÆøIõ†8’h9”6½€#ÉÆ±>¢ñÐÉ(OZÒ˜qV(/(ž7Å¸<IShöÙZ]‡JÄa§åô�ç¤¤ËÓ!Î¹¶Œugé
+]GGð´B~ü"V�†#¦%ú}†öCq#Þ(NÊ=¤[åÍ¬<0aÅÑ#:'E„ñ&¤
+°ÏpÆ30ªñÛ7•šþ7¥å×�§ÅÄD‰º]‚“>›ré[cE³â1ï9R'æµ(²°�kwü°<�»¥µk=½`ŒvlQÍt¾g´NX‘&­Ì¥t¿ª «´Hü÷’\EJYIpKy6pÒ1mÎDâsz â?" tÄé1Î±¯%õƒoLÇS#ä‡·Îè;ZO½§¯e^Ùä0?Ø™RÙ
+`rXmVáCÖè,›Wß¢i#Xª²§B¡?‹T²Íñ`¢Å¯Òk¶:)ŒÊ„ã� ±m!yOÊêäÃ"õ8†ì¡»%'Z™Š�ŽŒi±uL,Ž1:w­åÝ03ì!ãELh��¡¡°òjÙ¥ýºa!\Ê³×G	àjÂZ,c ÷PsLÞL~™-ÞqC‹¡Þ�¡È2ãAˆ÷íC› ¹œ‹ý¬ádVÐêAcZó�œŠ'î™È¢ßl~@ë˜[Ìü¥iîkµü\@ùï‘/^lÙ²å�@�ûî»¯uëÖ—.]ú›ÃJ–,yøða6p0Ïœ9c;q$ïõãÝ‹?ÞTó¹öUOm†^EhõÞíŸº]ÆŠF‡[Nº­?‚=Záè
+ãGÛ."ïX_¶�=Çk	,b}aƒ)Ïy{F‹–˜üˆýFAÉ˜7eˆ€q’oxQ2f0Âxf‚Î²v 8ž*ˆÉûÑ?|)j¥½ým	‘
+Í¢4JÀâ[k‘O‘UŒ�§±�-^‹èŠgTST�0EKbW�„q–Å })Fr�Ù[«	tÌ-›Ø€÷ÒR•ÍÑl1ž‰3<–ÒVž ¥­Üæ;”±ê0«m�ƒ÷­¬;çxÍYì*„*¦I(êÔì�híÌ[£åGíŽcôHKWns'ëyçMÍòØI¯½ì4¯ë¯çŒzÏÉÒÚ…R‰R§[óo+×*ee¿¬lxB„º–ÞÑÇ< 1Çk6n/e¥÷,œÒô„6Gò¢iMåÒÂt†
+>í†#I³£�¿k©I�d®Ï¨x$ß' )·@	[=ˆ�µOËÐVÇZ‘RÜÁ¼ãµSÎÒN2Y§¡þlÓƒŒl•ìHw:BØÉ‚êhnÎ˜$©\?e¦Äge„–4JÜIF&(‰=?¬è¯Êe½ŸÎSü<Š1Z òcuÐjÔ,èoW9åØ”xY;–ÉÏ„Ý÷Û.®“=¥¾ðn	©ª¼&uàž)]ó†´‰­çŒc‡-oë’ÐYPS“m¼H„ë­ö]Éx°†èû$H	Ÿ¿ƒÑz�µf8×¸0ì1ö?Æ$F#þö	ž -$aâ$J¤w;ç§±OÎN‰8ø‘s1IÖ"�õôÄbùá«Â*«48·@µ@ðy Ž»ºB!=²I¢ñÚ×Õ¥¯7+M�qXÍÈ¦kå*ÁòjËÒzIÐ&]‘Y ��‹µsÙ° pÓªÄr+ ÆY2´´(;Í`6f-]éxœ{ñÌŒºÈŠðÖ%òwR›fG–H	lŒ JÌmØÃ "š„q˜‚Œ¼Í3¤A:•V)U‰ÉªižRT:=ä¼ÂÏyà]¼ooFÑ4÷ü¬ð`Ä·QYÓq'em±ä!P°²t’‹ý¯¶î¯¸ 8›Èö˜RpÌŽ–¨§ãÜtRÉï0?ÆÿqhQ!…füã,€›w‘�üÙÏ¿,/ò§Ÿ~Ú¬lü‡T¬XqéÒ¥lT¯^½OŸ>×®]KMM}ðÁÿ5�÷_ûG«"òƒ5Rëè�ÖèÊó]ß9;ïTQ7Òcc@½H™Hœê¾Á¸1•Ãíú'Ö{< µÃxVS>c’Ì•0Ÿ~V?•¸ <Ìˆ@ùˆÖyÜU_ü/ê�†hc|IX<#Î:Y€²§sôKçä ÑŒAv4xãŒr²ÝbÐâ­ AFSiæ!Ñ6Ãcr�˜c±¯×{RÝIË7sVZÐkŠ_N49Âã™À7ˆë=q@ó€z˜ý	¾_¢–ŒOlZÄ¡£5ý:ƒ•1žq C´xþb8ÓÜ7XÉ$[ÿBŽèÊnúÖhëÐØ­]ë,WýC×¥ÍCW7vb;»Nâ36p&¢‡é©–®M�DF óc×Ñ®%m\Qïì×[g‡ÞÃòA0¶éG£NBŠÑ`oãŸZÑ2>xYk[/¶röèLIE¯.ó«+rfœx.'¢¥_ÐÏ|hU”­)F°\F™h)�s¸«ª|ÆãËÐû9eŠ Íô5_ƒÞ± l*%}õÅÇª–°²Œ¢ì�dÿ¶€ Š.5°à’ReVéL4JÛL<tŸá|cí3\¹;èlõ›êãçkjüE|ÉoJ)ø	ÛO‹ƒüb=Ü®+ ^1*ø>®c,²ì§ñû(\Òï838 ‰G×|îv�o­&™PÏCw`–Ð}­\«9Œ^»Í"{Qóª.ïºí-¹Û&ç•»ušÖ°®¬‹x”ÏÑ†Øit�@Ï‹…®œÍ–`¢Ðòßw‘az”s!Î9?GPŒ=t6$Ÿ}ïË”,âèh™Å]ÆŸÖp£�µ
+æ@•0!¿)#7å.x‘ìa?8{à1P·¼.;¹ œ+äO‰¸Ù,gEø±mUº0¢Ø–IÔçd²Ôšõ«EÕÝlŠ5-¸Új�wÅ6@¸0¡-øÇ2©³#‹éðH¡C|L°Rê–F—º´!Ocöhàëë«Z'åa p~ÐÛ¼Ý²²…™˜(œy>Ctî´'ú­…c›áe•Atqd�Æã}†¡Ë¸.G½Ž­t2T,ÔG3¦WÑeSJmNãð°XïoxÊÁ%‘–i]šÜ4XgÕ¸Ñèb—•ƒn}¬÷Xºþ.!réÃösï òÆ�ÿÔ11113gÎdcãÆ�~~~<~åkTý/úãáqOÐŸ6yÁ–Ny´~‡fêýŽÃÒKƒÐÀƒ•£Ûf¢,ßêFYÌÉí21?N÷XiìÙ ;AIæŸxRûú!š0#ô	¡WÕj fI"/H¥ÐÕÉZ§%�D›b’i¥�Åm9=Fñ±‡(PòP'çÈç²(ÆpVu»°3ùÖÞ”[×Ž_ZõR˜²J¾'ë)õ;•1÷ÂÒ)?Lè†ÂAç—’°ðÁ«§Ógœ[4ûûa¸¯«5*žJCì^EH1YçùDÇûF© >—Z©´Êéº¹VËô@¾P€–žœè×¥ßmòÿK,üÉˆ_4§øì0­Üd\FQLc‚h€)žˆò™ÛÍí|{Wè†îmåZ‹näÄ4væ|¡!¯\ß½ê´kæÌ×I¡›j;ƒµ€Å��=×ÁµOç`OöÐ‚\ÜÂjØY…t¬kEmd­Æú•ú¸c;ùf<TUŠ¹g4§¦&ªw”Èx ½sv²ô‚yôìÜÕP�”æÏ•+Ü*Èù^VùÙ#™'NfÄîéÕV”jñ#ð‰6TuË«ýä…µÙKqÖ>ëömÃ'ÏæfÓþØ!f®°?+2býÛOþ¸2ÐL{nÉ‰ìcòMÂÐZYVž‘òü<Ÿ�²&.D R†÷s´ä(­Gb–0-‰Ò&CŒƒÎ¦Áµ‰%÷NßÛ=˜+FêK{Féàg›~QÁ¿Xi³†Îdäå]'•¦næ¤}èÚ®öI>ô¾kik×Ú.®S�]'póÕÈ<o«ýÕòÄfÐR¼×èž9ÑïSF‘ØdUyÑó ƒ¥íÛt%%0ô¢xŽ;8Çû¹™øà†¸¡ˆÆá™OoKê¹%îË}sêž Èxb ˆÃ;3ìÁ¯ù±Ï^>�skJ©mËßèu"'ÿxÒ´Ã£»Ñ+ ˆÄízÇm×'/oÊ.h"‚¶õM×åõ³÷~Ö€›Z¡O¯æ¶ûƒ'/®Ï–¬Ø�_¸¾Ë�K’~LŽèÑ§Â¸^E&ø6³‡.6Â�BêÂ×”,èmaac©–y[µÚZI®`|Î:á9?è­¬ðÀ´àêóƒÞDô„= ádí–k•X|Æ%I²'§sZbRìUì¥D¿® 'Ð‰y¼L'…b<cc<çr:–R¢ß'ZXäeàL²BJ§š\DJJL¦ß|Í+ 5ÁýzÈ’Š°ñäê„Æjeã\CKâh«LSLÒÝát¢Êxž1yšZS{ç¿D>ôÐC&L8wîÜøkAAÁ§Ÿ~úÞ{ïý‡¿þöÛoûöí»råÊ=z¶{ýG«¢–•mr¾…và¶ð1˜Ñ0Jür7[}2H	�Çh�¦ÖÅ†ý}|‰“$xa…t…Ô}µQÕ)µi,¿.e"RjYr¦j§‡Tbä#­—WYlZ[ÙßVðd<¦¡‡» ^L”<û�s9Ç95\ô3GâurÔ ƒ»=µòî-Ñûó*!��$¸®¼sxô'?oº¾²Û¥mëd¤ñá¦ç—Ç´~bí³®+{¶äUqC-×šÂV›ÁÁs´þBfè£ú]Õn"kqÞ£ã}ú[Mù)¥¶£Ó,jN‰_æ*Éíb™â©ø•VÂ•CPCÃÞ„l'Z—kÍ>)Á E'…�Óµ0Ó%)Çà:\¾ãL×¼È¸*o:Ÿ×w& �q'ÑÞ½ƒóØÎµ›>µ8~R¯çGxeüæi±¢h\¢ÍÝñj§k°.¦8/‹µÌ‹ãZb*i¹ ÒÈx.²ÖÓùqªs¼¯~÷Óˆ‘VâÝKDk-TS/<¸aA·r>»ùýJá±ünüÌõï¶[]Ñuqk>ÚÒfVE©¾æhD÷Ÿ¾ÍÞêþGÇËöRu-Ñ�–[·îeÿ]ýFŸÏÏ¥Í·}úyî+’:tlùå…e=…/Åg(^|J@Sl~†�1€sÁ £Ô“Ý 2”Y÷šRÖß#™ùî›7À8ëÐ{2à•rG“D„f
+'XD´ö*íùZšýC×6Ì%ä9ÑÚµ¾¶3è}×rSƒ�…þ×fºÆ¨æ?vÖéá–ç‘h%#Àÿµ4<°ßdµD°´)/Ba¤¸«Jó‚b’ü8ÌkÇøÆRÆ‹r¶e~ýÃä2'º6æL?1Ð�=Ø�@$ç7ie,ýüÖá•Dvöêœ]¡Ëúç‹\Ù¶\¼þ…â¶¯µÿ¹ÔîWwæâ'Ò�'¦u»òmÂñÑvÖ3UÜÌ·œMoú›ØýÒæ\<ÙÆ~t~yÂ¹Å±û>¯»©šÈ‘DU�yï±iyNÌ}L¨˜+ËŒÝ
+œÙ"‹.@?�SÉ3%r—á°Ò}‹4ÿ×r¡ŒÆ�¬_ÍyI 3Â›{áÓ%ø~©c5�&û€WHÏb)�Â˜LÚ˜ç´¢VgpP	@Öp®Ljù·�õ3Ý#—!VJe�Ezp¢Á.•ô¨R;ùXÍ\Ž¡õPtè.„7Á¯§•Ö¥[ÇHäÖñÅOi)ê+š¨»g ®­È‘¾_Þ%D7ïŸùÜ;ˆÜ¹sgýúõ‹-Z¥J•Î�;2dìØ±ýû÷oÙ²å#�<âááÑ£G�.üñ”«W¯nØ°aÁ‚ø»G�wOÿhUŒ^„º‰ÛÔIDä1‰‘úúÎX4@iô ý”¶ÍÐÅušï(Í/ë§ö°0ÂW‚Óšr™Ñ¨åÏ�/~’Q’êšËdMÂÊÒ±‡a¶¿lŽ×¬¬q4”Ø
+±B'[M Ò[
+IxÞ_ŠÔã-üHÀ¸¼ç\Ës.&j¸B”¬Ú \ªí×e„¿u8qÓŠr÷ËÌjYåy®ë‹~ø·Sû/o]~bV”äbW)äÝßé‰óÙcO$Œÿùè¾Í¯»¯xL‘’T2�2;ÂÓhgÒCžM®†™„­«^äì[,R-}Þ‘DFü>×Êz]-$ àCé©órYý¤@ùb‹«4…Œ?b5Ðçý”Š<J‰Ö-)Ïˆé¢î»…“h¦;ÑÀà]gÞNœ0Uü†ói+×š7œÏßp>ÓÙ¿­­Õë19ÆŠ>�(vÝ²!è,>-ölSJmAÌé|día«K)ÍÈ³Êe–±Ž— 
+ŸCéŒ–ŸÒÄ»ÿá+Y&£#Phšöróø’“øzg³çn©Nk_Ú¸pó%ha®°½¦t±¬©mÈ-ï§¼c9³ÂˆVŠíókrxÚùSîÛ£—šðn’ÿGÃŸ„� â³Q}xgšžcinB•Pü”äWº¯ÁÇÔØã}èÃZæ3ƒ¿Ÿc% “ÂÊØ~(:>–¦j™ KÒò>q» �7[ñ(þVà›âvŸÒê{6u’qê1T@Õö®ÝÐØ™‹}‚þŒRçÑ*¿ ‹–.ªqãûtÿ$¯0Ïg.0¾$n>”M.Wf,“]�"ògFošúÙö™íõØ8wÀú¥ó÷Í¨µï‹2»Òºì^Ø5Qìé©%Ž}-®ýÁö‚}\1D`/úÍ–3öuxèò¶Õ²úíi"�¿«�t%BDo^Û•Ã÷éÉ5OÍìtlB»S“H½­Æ‚¤Èö*�{u[¸«ÕÛê~ûÊý×÷oþ¶zqYª®%Ý·Egã…¥°ºxŽRt Ja´T„©$ÓFW|ó±H[…a³#<€QZ€�«´¸LNä}™a#b!ç½�¿™Z¡ËŽ,ŽeG”¦}b½¿@•>H¾Æ¡O‚el34Ã«×<ŸARä4Ö{ì¬Ò?¸“èŸ‰%÷£�&–<€•Âþéî+'—Ü�m?©d�¦C®Ç¤$ÉÎñX¿ld–é2žZê[z“{ß>¦w‘ò’vt¾û’Êÿ“!ÒþŽ?26nÜøÙgŸ}ì±Ç^|ñÅöíÛÇÇÇ_¿~ýoŽÌÎÎöòòrww�üÿþÝÓÇ»G´*îFmgps'%€š}Óéi«Zø,H7–3f0X%k4?¾çd :¸¾C][ÌÉ`e¼ÄÓ1ÖhïþŠ›—ª�·1fFeè©I…¬ÔBŽŠ»�BCKÄûF¥6žã5 ŒlYÊêa™myMÔï‰�âNþ8Å¹˜,Aïg':b�ós=F„È|´�]ïýúËé“U›Î²‚vy}Ìþ®�£®äìT’ãeòöçÄ¨—7×}`Ã‹E®ÄTr­{Fd8 îd�¥Ö5–f¤;É¿vì
+™z•xÝY¥ÓÒƒ«ÄûöÕ²òøŸÌõš>×k
+Ò¤Ù{�&Üš…·“vÞcnÓ›ßì»<"‡aEØr$¦H[×FðÑâ!-OÄªxôn´lÚG¦‰ÿ¼Sóc×5àH�Ðe€cç­	’Oobù4s2Œ–ÇTtG×a[ågé�±ÅÏŽ+~Ôžë5m|‰ãôOˆÔã¿`xÇy� ƒlºO˜åž*,6±»‘¸�*ßw‘ùU1Wb£DŒ@`r©ÝÜŽnEÅ�Í]È¹gS†ñ*
+öÚ¾ûÞw¡íÑ™œk¥Í~Ê­‹Ú¤µ
+µØ™UÐF9]Ï¹U9ÂëRyÐÑ¸)Ë_®­ÙOÎðX1Ç3&5¨ú�ñ“îoõy1Q4#²@jÿùô·¸�$ÿ¼l¯"74Îö
+Ði±¬V÷mŒ,S^×ô�ßÍüSêÂPëbiZþêÕ«¦åbCš¿I/Ð’ÝÅ»ßJ¾îtoàLlåZm?-Ÿ¹]µR µœ¾m]›;»N~®¼ôƒµû*±Ro©6"‹ŒGƒ—d£¢ñVæzM€õ$¡~JK¦‡T^Ñºf^±4òæŒÌþñæ�ŸÙ8oX^Ê¤âŸ:2<øÌ$·‹g‹r! $}ÁÐe4N(qœv8“»BæR5ÝÿAÉ½Íœ_¾ÏÛU¯àˆ­‚Œ°çÔHçç}9<–L9¿püÏß­¸º=û`çÀeŠØó®Læl®!0Šsdpã}éš«ÛWl~£$ÎfžVÜ¶¸V[v´”.„—ñ“_YfS%ñ³láJ·ÍÄÒ×Ù^Ù‘î–c"F‘Eï<âJŽH�vöÁZ$¯(«p;%Ê{ìSK{&ÖQŒg‚Ö|ßÄ`@ÏXê"(©9¶]Û	¾_Y¢>&2KÃ‚nX&)�MÑH
+”ß!&ˆÃ�\F‚®˜ìÀ‹ü¦Ä!:wÝ…à¨«¸—Îšá±<ZBò¶Ñ¡ZËæ²Ö�á:£%ÄZ¸¼î"=øg?ÿhÌíïá‡ž5kÖ­[·þ»ä¿à�V­ã©ê4ë8ÃpF´’ïŠ†Îd]RA´Ot‘¤ïFÚlÔ]ÜN÷WL´Ìè(ÍüÒ2…)–Fgg…Ð$¨b,+�-<`Uc<ãFhE¶$ÿ�1Æáß/ÙÎ}$Ò™Ì—‘<JatyE0Îè(�÷ <=ZÜôÀ¥ÑÇšÈØžTó\nÚÊç¼P'F½tzVGtxAçÇ9¯_Z3óÚÖ‰?¦;>¬êáñ‰€Ýü7Ã/¬ˆÿimü¾ð^-``í3…³¾¶b"a;a_Â"ð1³"ü€�ä€6¸ÆHGzÈó�2\M’P¥€÷ðÂð—Ñ½(½h�šFÜhœPi€Ve²pGËŒÒ‚†¶ª+‡)ûŸÅ�hÈoº:|=ü¸ó8­ÝÉu¼‘ƒIðÑ5ø;5œ�_s:7t¦—¨n�ØŽ‰¦;ºáûhù§SýeáX2a­F†º32õG�àNb·h—y¸c©�ï µ$Þé)}¬,Ë‘0G>“E1üzúâB¼„Sž.Î>?Åz�çÊ¸¢´ä…µ9{›;k†_Z›paÙ´ï‡|x|ØKÿ‡¼ó€²ªJÞý9Mjèœ:!Ž˜aT&E@‚MÎJ”,ˆHì¦É dÉ¹¡¡ É’“D‘$IrE‚Øƒˆ0ïWUWžkÒã?3ÿ5ï®»îº}úÜ{ÏÙ{W}_í]û«sÓZó%ô)OHËÕ¹6/·ö�Î•-¹€c	/Lj-™Æ‰˜?}~åbÝñYãÎ¯\xnÁì³fç>A_s��p�ëÔÚ%+xW™è»žÔä±áZ@p�¸8¿\zD·]ÇÂL,étVàØ$ÝÜ¡[o.€§´¶•ƒé¯ÊW�’œ	ë éç5og'‘ã;ÎzêRßYðŽ3QË’njè®à•Ðrbò'ÚÚ=ÜYu\‰1Õ|d1K7•È´¬IËJžžè»YVó}×à˜vëü¢åèSþßúfáÍ	õ×w­»er÷=ÍÂ7M¼qÆàý�£·Ííµ=µ×É•åè,âû©ÒMKï—:>£¼ÏK^Ü�K{žþ´bÞîŒ«[F]\œp~Ê?Ìo}¢»GjàpkçÇ¹Àå…YQ~;£ù·“«ŸôÂÉÑ­EVUÓ±Á¼½¹˜ÉÞ–O_ÙœñÝÒyÇG¶ƒUî¬¨TVëTš¤$¯à¦‡Ý¤Së¦£ð-Ò<vÛÐAÿîªâ¬xØ]=¸Ûš†å>ÄkÑóO­=èÄç‹ÖkLÔü¢¯Pã0´ìè@!í�<$5¼145%´ÜxNHO]H–œöˆÚ:*:bƒ˜¤êdŽg  Ä�Ð-¾Ä¤Iy£ “l~5#²cfÅG8Jci&Ø	­CzE—“–ê2eUà?®EØ¯© ÓÉ�Ø†q-WzŽ!z§yßÝ>ÿ÷@¤¿¿ÿ>þY»ì«åÌ®áŒ¯ëd>íThà.©éÌjâ®#`|Ñ©‡[ˆw¦áê8i-Ýý8m�_:L\‰Çæƒ8Q¶Ïw¨Å{Hmw/ø"*1ùn«ö+‚�Þg!`x›þ"ö"�½u¿^_-e1cheE=ª›ÊÛ@ÿ2‹•Á‚ Ö¶™¸Äa¹,ßŽ�Ù×ï&:W×8—:S„Ï/ZžñOƒOÆ�‘Ç»…éò0Àz)CVXµÐ`§£s¬kèW>ÜB¦s÷i½¥¸ï®áÙ›iµž¥^IÇòo�§Î@D™4L5ëºqm„‡Z9½…h¼øìJúô$ƒÜ&}ªIæs pWU«;ˆÕò
+Ÿº:@µþl–�Èq VÎúXgö´y“MC �»Œƒ±ð_?¾ën©ìô'N$fyÛŠ¦×ÔiOâ#„–Ï8o6u7¿åôÂ™Ww>#œ$,‚ÞhI—ë´¶ÕÏ2¢$í[žÓ’Ùã5¹ýK\î…—B³dGÿA¶ç”•¾€xÐ€4ïÕÕ‰œ,¹4šUì	Î!HÇñ‚¤Ç»Jí®&'ïoz ÍÃ`+!	Ž—^8ØT\«ôÂ«ºÕî9g{åÐ=�¶bÍ„¦íiÂ×ôŽÎr·×ª÷&øn&ÚÂmÂLTvl ÍoÑ--Sè ]‘ü)%ä#î�Ç¸²•q>¨ÕQ�‘•ÁËVô´²üíÞJü,™Š>úmGê÷õÝEt%ƒ¦nëž‚¥tñÊµ¦ä9š½’“HØÎ‚˜˜Œ,›[ÏY`uC M¾žƒMÁmlk]Œ³½-¥þ[©¯9c
+ãªˆ¡¦ù§Ó©á•-¹¨{òòr1"sÑiÀÒ·ž †Ö§ŒÛïÊK/™ZÁ®,IŒ�ççK$µºt-‡¹0Cx&g~;6ô»i›ø ¦ªžûÄ³™Ó0ŸCÍœs#CO$<†îªä¥¤Ëè¬í¯{´yeH)¡:«µtš‰Þ›F+½iÚY¼JqçgÅŠ­Pˆæ.§›gcýdÿHÇø•Cz¯¨Uî‹7Wµ«¹zâðì¨‡æ}�óá¢�Ïœè8Æ1¡Z$kßFïcw‘oÒ,)¡�i.MrÎ‘mþéJ•+Ì	éÙ›ä»Æ]§Ì‚ŠÃÃÓ#â§ø-"¨Ô‚Î=ç†vÖíÌ“53gcžq"ý–ðÙa…ò2"+ÓAZk´ÊX%ˆ)æ~«ke¢NÎ�ú�a¶’ßÒ	´[w^Rù¿	"ß~ûíµk×þ§¯â_ó U+:=€9 ²Š3è]wky§õÎ‡˜v}'·�»«¯îŒÁ�±hËR TÄ'ã™áKï¹Û1y<0¡ŠmQ7AœƒUhjãžHÒ¼”*iòÚ–4hU†{ç¿e…ctn_4®óÂšã¢�K¼œ­Îó^J2=.Â˜*¾¶lÁË¥/|lzdC@dO¼lÃÌ±z<Æù1Î©DQ¡ÖGÚŠ'‡0ñýçúbï8ì”ä�¤Ì•LÄ	`û�ØÏòìÛ‰uMpÅx±JÍµ{c‡�êö«Iiñ3ÇAb¹œ³Ö¡^áLPÄX&ølUíhY¨ÅÊ¬ê½./^¶}ýxÝß¦ànÚÖˆ
+o€6­Dœ§á<\åkº†xº¢ÞxaUgDe§�øŠó^5gd¤ãÿ¦Ó­‚Ó¥¶“ò´óúëNû·œÞÀh]'ÃêpÑ¿ü
+D·•{PdÒ½dëæ;ñ	ôÔ¸"{eQFªg®¢›p)Zˆó3ÓÉ„oãñ~¸èãÝt÷Áp¢{¯=5œÑ>g2"_Ûù† ãÉÞ®":0Ä÷žî+Š(ó´“Bf¶¬I	ó±ò ¸b¾–N‘%é=E,®—uÉG5ãQ*ÆhîÇ«i5³£ï‡¥†7J�¨&‚N3d#yð`Èa…îì>4Õ?×GtÀ�XÂ?7%9EÊåF
+yûÎr\{äûÕj§òÞ´m«5É{Þ¨šëez�'ƒ¹º3ºB ÙÐ¼Öx#Ü¦Ž“‡!„ÄRhmˆ(vôšÓ†Žkân€ºÀX0(Ý}y	3é}¾—T:–j\³Éûh!‰„“`%~;»ëê¥Ÿd-í7aqßÔ¥ÏG¯Ú{e¿.+›U¶"žÒI²"|)ö(ECúº‘ƒ™ÈÄË9Î	?Ì¶„XçRºœÏ¤�°¦#ï;ßtCï  @!ü‡âÏã
+Q»÷%é)©ZF˜}d9õ$ù¶Œ\Œ”¶|Î³×‘Ñ¢Š=–¬ÅŸD¸„Š²»ªÊËë;T_Þ´ò’å­´÷šÏçÏ·¨¸¥ô”I�¨šUƒÂH>ÞCÀÆúfG—.eÑVe–5Eg ì+›8AwƒŽ'ˆ›4°£I…;…½«"ÒD‹ËØ5Þ¶üÉ5Mb7æ)*ÊÞÄDŒóùJ'f×Mö[aëDrÄg›”ßòùJhXÀŒ¾2]v…q€2„l¡ˆªÖsæ�oú°û½›çÿˆìÓ§OHHH»víFŽ9æw�ÿôuý3Z5Þ™Ê{ç‡âo+9}1aB²ù”ÿ'ò¾š3Ï 8˜ÑÆ=IPSÓ™‰§mè® +?Êw]7°_ã�ÅipDc¢<@¶£×�pµýs–rtZq
+Ûo¢Šm"¼f™ùcŠ!êT‰~QàW½ýÇ…á!1·ÓòÝø~ëÏû?<µíÖ‘6ùp×8ÛÓ�+‹Ä!`ø67‹Oøn’ 'Ž„åuo¼œùUUÙ&²0¢âj Ó&â½¦”Çä‰%s‹»V€ KL	í’“YJ	é.•wÂkc¤øj.K„=¦…7ÀTÇ9� ‚6ÙÄ2X¯X7’¤±	| §ˆ0ü¬;h¤�ŸMñ}àuÅÒuh+ügcwµÍu¿ë~A¿´“j†—húâe§	‰é¦—�w	ažp^¨â.í”}ÛòŒS‘ç³Ne^ñáçœÎ8Þð©Î„ÎDN#w%7áÙØ®’¼�EŽ[zÄ4”,	ÓªÊê†Ê1óÂZs›sC;âÀ‰q¶—Ï÷ó‰­çf~xuïÖýóÑìp¢’ËÙòz1MÀñÛQ˜à–qÔP�]U(Dü­ˆET',"„¥=²ö¦&�k5A¢™t--“ð¸JB Bu‚›vÁy)aÿð¬ Q™EŸŸÜ®eÂ³‚F«ÀEñ…VmþUå†Îs#ÜB_¥j4¾*©^Àõõþ­Ð6µ“×e¹UÄ~ß=D*K¼ÒÞë;xMD£�‰P¨K5g`Gc–sj¿ì4…Ÿ\VtzaJ4;¶C³‘D‘XÏW�=µN+ýÛÉëb­tL@jzV„!–Ø¬Å•2T¸*¬ £ÀuKîkxnÄòÆ¹÷ÊL~˜+}±¦Ûõ¼ƒ[HÉ'’eú”^¸4ßùõ{çtysa¦„ÿ?¤òVÙSVù5×žj.�‡”i™ºŽ[Ê	>¸<¥ÂH#ÝªY_¨£ÔQ±;º�(rmi�*ÝŽ×[a¶ðO:”óE�Y3ÆÁGþ›»2±ó†AíWŽ±jô ÜÇâD2}Ô`]ml•«E@xo¦¦>;xP¶¤ëøN˜‡UÊ
+£wt¢Ç³£ÐùØÄž–:›S¾šö”ia\a‹ËæàDß�Œ‰¾ëußÖ2­�µH(zàFQrÐ0)Å<d^X�?§D~Áw³˜ó>­ÂMñ›¦˜$rÁË¦Ì¶”iIp-|†o¶Êÿ!ò©¿óøO_×?ó UŸqÞÄ�Ë:oÁx1bIÈ0¤·±»Žðs~Íi[Û™‹Çhçž.	[ P{å#õÝEËäÚÊWKw?!$hø¾{”sˆLqéü«¥{@#žä{8Íø9ÿÒØ“ÈåG°z«¥ÙžWUÐ@àÑObÍ}áÏÇùìšæŸ‘õøÉq]ÿ|ëÖå]/ez2ypÎpc< nùÊ¥ÐÃ•*•W“L
+mÖH‚Êò‚˜ëËˆíYQë>éXÍ÷õOz4Dâ „ÀeNtq"M“AÆŽT{§�Îï%â�ÓÂë*5�m³”ŸÙ¯» ¿Áƒév˜µ˜®Ï”Ð´\N^¢.JbSýµŽ!.7A�hQø«&u®ò¡«ðÃÊ@¾hên$yÇ™LŒOßUtºÓøo8]‰K9OáuqÈ/8ñU�á beg Î\‹KnªìôçüšÎŒŠNÏxg:ÿ¢G 9Ð`W#£ó0¥>º}¾¯Ú8—�á[=hºÉ´xßS$ƒpåôÚèÂ'w%fÝ¢#–u%N!BÁÇÅã–ÁD¼ô…¢6@�à�‰+e#OoÊ£�¤�­ŠÓ7m%	Sö˜¼é‰8Æy[¥˜Ü¸üŸ?â)â</¬%ÐœQ…È�€¾À?LåÌ�³¢ï³“~Ñ×™À
+¾K‹È/›ÚžÇÑA?¸)-.t¢ï&n�7€@Éí[=\€)I<ÐÙÆ=g`´3\-Ìlì®�]ÐtM©�µ—1O«BµÚuzG¯‹ eswO5gÄKN‚GÞ’rèi³7ÜEôt¨¡»ŒŽ ©õW.ZaMMiÎã§m+å²ù›t÷±…ü––<@êÊ�§žÒ�¦»¸@Œâæ•®Ø±Þ÷Ó„7bÇºc¤S¾-ÙnXÄ‘Ö—²³U¥« ÇÝ5ä´cxŠ5›ÎÆ�&b/°JlD*ž×–�|”éÖŠÂ$!™€©•ÐâHýˆÕ ”ôšÍ ¦ ˜í>áVÝA‰AI\Ù¢òòšå°¬yaÍ—Ÿgrúª‚IÐgÅ¾1C$œ’�\2´šä˜´ð:ZohúÜÐv*â—‘ÚY+¢žÖÝý½g÷Ï,öø8®ÈÞä OuGd* ¨KðT$žOZBœTdÑ«Êƒ|-L�xÇŠ�’š	öµVµ»
+æBÚew¤huÞÄðÇÙ£òMg¦úgZÕÝ;„ÈÜØ‚wùü�@ä†j×®ýïÿÝÛCÊC;µp¤ï8“0a+GˆS}Ãé2ârDü*v]Ùé×È]MÌ¨ :F­û~þ-~Ü¸�»{oî~UÇImè.ÏÝÆÖs²¬œ“Ög?ÀAQ­“h{”9käE-_uQkÝÞÒ�?â¦DsØg7Tph¡<�Z‘Ä"¬òH»|7.l½´äÃsÛnn,›ïü8q³øaÞ`ìßO¸üaŽ˜?”ž|îS5ü6bûøp)FÙT(ÔÒ’
+å=µ-�uSYÏB$ü37® å‘òžød.5=¢ÚœàDLfŠß¬	3Lo,Ï×Í¸&ý£=9�Æ�{úûÌî;öZ‘Zkµ-d`Aš·³^j“Òøê~ºítˆîèüXó$iXÅ I×Á¥?æ”ÆâEéI>ÿ©Ë‹ûžpž§ñ	ÛË8¯•wÞ¯åÌªêŒˆw¦Tpº¼ä4zÚy�“a>ô#þŸäˆ÷ÁJúŽ/‡äðåm]™þÅWã�yrÃ]ä¸H‹ôq ŽjÚŸÆ!à^pJ©aMñ`Rë�|×Ïl=;ýÃ«û¶žè‘OØˆîÐùnœÌu7A:âD7y¿¯–D:xf«B,)sw¯«ŠËk²‰#U´ò)<ÙšZìÉÛ•Ä„åÆÒRƒ%$¢�)&u#+Oö[ªºÜ‰êfD­©þ9pzghÁkDZ¯á+K8äMm»Zš�óËHoÑ•ÒÄ³_Ûº§†Êló[°MOD÷t–mo´FÃh4Õl<¥\qC='ûy§†Šê|aÓª€`MÙN•ÉÄ¾Û-f‡á@[¸{°›<ç{š¹»0ˆ_¨Óì2ý²<s8]ü<sÝš5kxµ­�VqzÀ,Uæi™Q37®À—•”.£ØÜãÔõ“[¿›˜�q,žì!ý‰îžp^by�}åÕºÆ9Î‘…{ºÉ¦X¡”œ/"ÉÍåÈÉ^žYžÐK“Ãß2b2VœN´žÜÄMØÎb�¶û<u@Vë�mä±¢Z»«ËŒÍUâå¿RY¦”'“‡^^¼ 6d±–ZÆ 1´™�ãa;sC?�Iøâ’·�1*8Ÿ÷pÑ™�“Urp¶l›úTÅÏ»'}’ªÅøi–á1Ùoß“]Rs†óU (C;¥U³¢aüŒ-r„¦f�`é3§AK†{_äÈ´€TÜ‘UÅ.6Fºl×›•T–Eä€y™EŸ»Cˆ\ë{—Ï{‘ééé}ôÑœ9sxóæMÞ<ùä“üè+¯¼rO÷?ûàßv†ÙÖÈJNâ;ÎDì‡ †Ceã�©Ä ˜È™¶Éq`�_5ñà0q"ð§¹ñ·l¸ä8ØÆ=ÑÖ•ªÁ„?&ÖQÇGÙ2Ï$Ýk	ï�Öb€”óž¬«Bçæ'€ŒV–Q²ÚT™sÆÁ”ö×•É,údOYUÁÀ/Ìô—ðÂ¥@káÌD+Áœ1p �sNè–„ÓIZ‰²¼g#<VÌ	¦£Eh¹õ%yJU‹2ZÞâi™Z"ÂæEqÎ+õZñj‰ÕcIy¬¢5SJ'/ùd1ž™°Q4¾dñØÙÁƒ°‘œºã¦_4Áoëâ‘k'¥»?oH¡k‹'oTèWèîØ"‡ñxÜ&- 5ªÄ	cP $âÛpÊJãàf	Cˆh Gn“¤£©ßrzAE€?Z›Ø„÷uœŒW�–Ï;ïð_ ç\Áù ž³€nÒžÂoeÒ³þ�ÝÕVB‘ã„-‰jìôH_•€	÷–"Ôûp5Óæ,ŒõÏ,ö7›Q#·¸k›XiI‘‘o%­ze)�éýH�h�ÞD¶ÛtÔÜ�NšFÒ_&ôÀDºçLtÉ™øs>+JòOIk[ÍËkUµ±"üË\«­[IvktIÐˆ”B¢ËôØ¬ áøOÝWš¨�'´EØ¸@&Ù påªûw—eJP¶lÃ/I“´‰�'ù®­LÐ’Ê?RMòþ×ÿB[%É’ñé¢p¼¥»ŸWZsàk±[e yá*pEö'ò†XC ºÄŽù!tPg=Â{-è,5+ñÆ&Óa5F?Ï\­¥¥s¸l“UY¹ØA1.Ú0/¬µ	ƒ3bi4úBèg;¿œ€"zmÝéVà:x ‘<A´+K4ÙuŠG6 EÇYŽXŸ•Åâ$!06»Â+„ÒÐM„–¼Yª·t;I)O�Ð}uä$‹U%Ó¡:»t®ûÚôœgk$È·áÛbÉ<V“n"ô Gžw±èÕ‡1€E:=+êñœ˜èU�Éfÿì¨GxÃ¾9!½ ¨©áMÆùEˆ¹qùSÃÂÙLªwªÿüÙÁ‰aT€’ð-Ïñ1üvZÀ\Z�WÎ¿EÄ€ÉAÃfÌ-MŸ­ÄãÄ¡XÜß/`¼óÂÞ7jÌazÀ\Í€Ý`5"1ÏTÿ,¬Ff_Ÿ65WL{¢ï&-ƒu˜€nsÇé—Ï{
+‘C†q]·dÉ’
+<xp¹rå¼½½[¶l¹gÏžÛç6lÉ’%öæo>îÝåÝ»­Jè÷šÓ®¢Ó$~Ä»bã8R�ÞÛÚ=ZÃ™€ûÅKài!ÃøŽWqbò2	:#‡s6ý4|5ž¼¿jD-(ò•#¼Ï'Ê|]„3uâîÇN^—Ô!‹`L2ØFzŸµÂè¦k± &œ¸†,[ÞÂëb,XÇ×õ%Ü³ 7{)]¦�yn,+•”á™RT«ªxæcÊiDŽX´)Xr�PEêÏ6,¥[UÞ_ÏSà WÃÇM8‹¯ÂËôÎc¿,{2pEëšËÇ¦¤…×_R:pAÓOWŒ�™Yì¹œ˜(¼´J‡õ†‚BnAöéX»tìª”æ§<´;½Óî¬Îë–&oxy²ßrXîDßu’Üþ$¿UÝòýbUàM: ¿�øÛvœpK÷kÜ2*ñ¸@ÃÒtZqi7 {�¢@fj9s[^ròÔl«®Ï;ñZ¤iÓ[NÂÛÎb|hGê99ôH;¯s|¤¥³—¤Ô0â–U+é†NŸÔÂ@r‘&�J�ˆÏ‰ŽË-îeE±×j¡è
+Ä<ó�Ë$!jNHH5}ŠÃ´hýØ2­mjç4ï­Ó„#=3HÂ<9n“@’óe]òyµB¢"ò©ò¤²UÒ#‚­[ kiQŒ—µ¸Ã£üâìà¤ÙÁý9Îuj]fÂ„L|”V2Úª‹M—ñ“ª!oû·÷WE8œí˜ÂG“”“¨3üA+HJvR~hãžú@ÅÌ5Êû’~�jVêqÝy©�{Q’9‹@ªYÏÉ¢ Š/;ïÂpÌRxå4úžIãƒ€|s/©S& —n:æ¸Ú‘Þç­˜Îh 0hèŠÌ’mâ·Tk‡µ-¹×¦;DÏ¡¢`L€õ®äŠªÃžÑk2"X]˜ÉÑòúíDÿR–Ä†tŸõïË¿°^yž¬Eèš{dÏ;Zè¼�ôÝ¶W¥GöÖ”¹,H6wT•eJë5FÚ"¾­PØFž»*I'ÊÛÇu-2;ËæjDÌ¼¬c5é`AËd1Ê$ôç-Gt9;¸¯H(zF`hV¾YÙÑHp*#²Ÿ%Tü¬È~º[6<'Zõ4�ÅÐ.¼Ô°fãŠìRu«ïG˜-F:Í?MbÌÀ±ã%ý¦#žç³"{‰Í$ZJrÖ:R*_�ï³ ¥�0ÑÛ	˜g»u°†àhZvc
+3NË‚Ø–.-Ü|–Ax‡É]ÜåóžBäþð‡¡C‡þYedîñ…Îœ9óç¼üòËƒ²7óqï.ïÞ=¸YUž¼~uôºˆÙÖw´sÏ€†@'¾×ÊÙm8aØo]'‚ÔÆ=ù‘ˆfï†_ñ/Ýä!ç:r~±¥“DM„°}dCÁUI�ð[ÉŸä·ï4= ÆÅ¨ÖY‘1x¹Üâù²£ÒâG"æ_ìIœ'~»Ã—Bk±Y ñr–øäféšã	R@ ) 9³ès_¼ ¥~ë«‹n#>X4@y ‰ÎÿÔö(¾òµfã;q¥…0¦¨b>éY.áG«²–å¬3×”ùšÈY|ºÞˆCN�xÃ*µ2E«”Š›&†ì˜â¿pág;’Ÿ[;ñ¾CÓ3–M_3  l©€HÀ3MB£ë©*ñƒtOœ™Õ‡^y0\¨U�¤S@·>§d½ãLÂå¶ÐÈEyÈvH|/^·²Ó¯ºóYUçÓŠN�·�OðÆš=õe‚È|Cu.ø.šokæîÒ
+\·ˆn´Šâ·#ÔÒ'ù®åßÕÓü3´rÐ«ÅZ¾�©Šg%�D6¢,lõË“ ‘ð„#´'q\/Ñ�ßG‹Ñ¤´¿}ðà{2@_ ‘øó�š	rómV)˜>Â[JA4-¼¥ê�Þ¶Ÿ.=¢ªÈ°è¼«FA® ”dŒ OT¾iþ(èµÚ×Þñ>_òÄ§á­X$¾‘Ô4ÝsZ!KB ¸�wƒ 4æÀ+>�.3íbÕš“,‚ñoS%4æ+Î{Àbcw-¦QÍUßYØÔÝQ¬ä$ðêXÏÉæ³°XŸ‚–Ð#ü–*íÈTj‚æ0[-Lë]øÔœ`P>+;êAÝI´›hˆ@)-¢¶Mq¤[&0NKbtøi"/¦ÉAË“T@*“Ò& ”ÿ¨$ó¨ÄŒ¢E?Ê“x,+Zôø‡žôc`ñ62ò…a˜¢™\Ã3¡Ê%¯õié&ÓÇãç8NY´å„U�zêaa8ëµÂ®Y0ŸèX^Ky�t‘.;Z>¹é,IáÑXY‘ŒË—+¹7¢vÞFªDÏÌ
+Ë	iáuxÏ0X$â®Å•¯¶K�¨2=`æœ�EüÌŒ€éD…Ä˜Êc—¦„t�â·š”4Æ«òe8m²ßÊ�S¦úçLô]¯.#rg (¡Ích1~ bØ£•]f\Á@$Ó@J9ü¨5°6À0y#:Z²(y’Ñõß‘Üµk×ŸU®œpò¿fOÇÿóA«‚}šxpÝòÿAF4{ß=I†*ãi9zvðº žbËïê=œ9#�g[÷4Cˆ7Võ	ÌÀàÍo{¿„[µDÝÇ½YD5¥Èg87�1%¤;£þ™Þ²¢HkK{Äèd•°œÇ-cÚ²]«…$¬^˜%;¹ Ã@$¬:��Øú åß ÂYMÅ	`Ñ€ ÎD]Pî‰?ŒOÞú’gFÈ*øØ‚ÈZM_Ç¯•Rw¹q²Š=ñùÈ1š`pß¿ä“%ØìxŸ]D.¸è…±~ÜWFdå¬
+½VžÓeIjó=)ŒÍNØ¶°ï²”
+«hÕÒùÕäÄM÷ŒVÒj†?[ÉBÕ^øú�+VºËZ+Y’g¹+é‹
+ÎÄ’ôwJ¤ODhÒe¼ÓéFó–Ó§¦3Så’r�c"M>¥ƒ–öÖò[¶©Á–z�Ã`øSýçC`RÃã$A7¼þô€YF$¬~Tú÷(¯kÊÂ–Äæíåyn¸Ä çÇJGà�iLüXß_5jt¹§Äöò*ÚYVI¼(pI_ðž˜‘nÅOÊìÜ‹ŠŒO{&ZP04ä§-ÒÊÙhŒü“|×äÄÄÌ{éò‹‘ušnq3Êûìô€Î�çÖøCXÙïï¦ÌU9”í– kÉºŒÒ)~‹hpS2W™#I‰±ü1Û¦Dðž S¬g 4¶†û²Ó´¦3�æ}×ÝQÑÜ›¥o:×r’y2VqŽZ†õ<&†½Ðpž.^Wù“pÃtMX	7WäR±õê3pÂ–©¨øX€“ü^-éHëAiy=Ð|4�K™²àx~Œ,.€wŒa‚ ðwtátC—Ö†ŠBù˜$œêÉ´JÍ7ÉN££…j6�u
+KF¥Ó±GÞ€˜VÅÃx&ãÄÒÛ8(*Çªâ(;>Þ>ÃsÑ}VùÎ—s$íêEguÎüùEË/Qy=åB…sã
+eE•âdFš©s˜®±ä2©žÜšq˜YìÙÜâp°q#,"#òõ©þÙZk@j%ÓæZe«ßJÌHë�tª2tbŠ_®ÕeVÝòxàra\‘q>{ ºœCP‰-à© T)!…&r2Âû{Þs>ôuVÐh­å-ê¯°,ÌVsênj™ï]!ŸŒ:ÛfË8¼CˆßïòyO!’/ÿúë¯í}¾|ù~?¿zû±úÿõ¸w—wïÜ8>³‚Ó	@Äü‰PÞs·›@™.Ð|û¶3»î¬š Xt‚.â0ø”V.¾Ô_³1“ÈRôç²ŠOþÌ€Á™à~'ølÃö!í#¼Ï32~P/ÍÓn—Ú%%¤[zDõ…q>¶7?-¼¶ÔIFeZãÅ¥Ö‡bªßŽ–d`‘€åÚn'o³ääH=¦¾Âr1dlð“BWÀÜgeì¬F3¶Ï+‹ù‘²ò¨Eñ A­ðÓº'<¢EU²œ�åß07´3#�ï_6<c^XK¼.kå¨!@<h23pw!6pìDYëOÁ‰È¸‡@l¢$�ä™�Á#­DûàÁ[Ú ¼h.¼®Í»Ò4¸Á¢ihÍë_!*�¼.â{ñÉlênVÙÀ9õœœòNk–æîžŠNO;­±»†WÂ¾Ç2£toÈFz­§”Ï¾Ø=ß+�¯†î¦GTÃóH¹Iì�ñ6L^¶Z<) Eûà�é¼"Šã4ôLŸ~7A‚ÉýøD6Ðìx<bÒÞR>x)Ñ´q)�¤±Š¿¥µmç£ìCMü9ÎYÔÿD6=O««ÅS%JHr=Ÿ?$›>¬‰–VéMdÁ{H;ïT³ƒOôÝ¨¢úGxôˆŒTÆ7;#p*Ã·ÆûÞÚ>ø4Î±X€Þ±šÈI’K,zGªÉe:�-èÿNBÛjÚöq‚qS5'H'º×zKxVu>áK0¥ÖîÛ¾Aàß[´’D–Ê–õhQ \4—­ûïVÅHåßˆZÈ+²&š†¹™z00R¦á/J8#e‘~ùq©dæÐ¢®Ó@†.Ì�Ÿ`\ñý —•K–=�ñjÇ:‹q�›à,Ÿ2ø3õ€}µ´*e3¡šRl®’Ø YÖòÙÄþ–û�5Iú·ÖV^¥<JBÅGå¸I.{’ÃŸ�åE‹m»Ör™�y++ê1ÉJÒud~à!A�Ôâr$+êÑ¥÷;¦Ãcµó,Ÿ9;úþŒÈJD‘�aF¬†~�ãïÏkÎÓ‚ÍÏŠ|¿¥ù‰…±PqF>ôinh' Y*)LOJä>7ô"Äñ>Û NÄìŒ–9Á‰º›2wNH€u²ßrÏ¿¥#½ÏâÐ&ù®†@Ž-r óaÔAº 6‰2Ú—áñø8vdõø´jÀÁ;„Èì¨îòy¯!²zõêMôAY­Zµ&¿{Ø9>¿{äÏŸßÊ.ß®¿ÌÁ{wy÷îÁÅ·p÷Ò›¸Y Ñ¤)“$§}5æ¯•öÈðÔÔ#Ø?3Øˆž-*­XqQóÏC
+¿c„èh™­[¶wÎî‹S"œT@™ôÌœ–ù¦M§ LE[i’"ã”ƒ ãžx÷‹‰Ýö(·oRµY}¶§õY¿$õôØ0âG!64º£�Ä´ñ±º{WR,ÆIp÷ÎbÍ‘Ã¸dzJ78[]WÞ¿ð^ÖÂ´®ºè×Åqü:	Ö*ùu¥U-(\ò%&Ž§Óª0+ìknhG¨,wÄ{žØ¦%?Œû0. à-ò§gT c'­V#þ–æ¢‘iÓ¿ÅaâÊð¨|ª‡ Ø%ÐÓªYµp÷€n&³Sß]„OFùf ’8L´"YÄ2œÿ®ûGøoMg�ô­¹Ó°”¾’„s€Þábpžt<G'Àá‘¸Gan_
+Å„[>¿Ì›é¾6)“ôºÄò¢>×Vb
+âÙ,0@¼´dàT¤…3"+ÂÆMÕgBD@Óá	q¡<�<0o	1–'åÕx‘-BY±›Ve�à	mxH•CÙ Z)5¼<ÄäÊ‰ñaõü¢nv›ÌÐšøPKIf«û‰3‰
+‰”ñœV?7Q7Ô0t“”BÜ–Ì5Vâ;Ú�‘?¬Pž@ÙÐ]‘ hœSÛ™K§@c4Áx?ØÊ=ØØ]K/@`êënŽº
+zÚ„ÌÐBy½u&ax¡‹\aÕV¦§øçb,„-Œ7ødn\>x�ˆ–%Bm•Å(D@¾±„í¼‚Y'{j,ßV°R¦OËžG¨Ë7íä|Ãœ˜bÉÁƒ�j­;‰³LëÆª!Ó›&<ä}QÎ³•ÃÄùf~Nê^Õ|õ¤^dyéb«žlÇ¸åÚÒ¯t¨õãÊG=}gôÈÓJ‘2–l×ÿåïÆúòÞ¢ÎÜânV±?ÒÝ¹’ÿ6Ÿ7K `œ`µ®T•·tzDÈa ¡¨ªîç=-fzã¦gEÜÇ¬D¨ÜwLU÷ÂôàÚ!9è“ÙÁýÛ šª�›æŸÎÁ	¾_$ÑZ_aÂœ³ý¬È^àÏJÁªÂùZ-c÷í õu*7ñý0‘³¨Ô–)SäˆmkÅèî"³¢¼Ëç=…Èjÿðñ'gee•-[vÝºu×¯_¿yóæÞ½{ß~ûíÉ“'ß»Ë»wZµ¥{ —«)7ËÔE_ÖT)G&â`m#˜ÕäMPqrÆ‰nÜ¸ió8XÈ9ã‡¡‚ÐIªãŠìÅü5B91Q''Û´êœ�\˜Èx–ÈQjÈ†ÚòÞ•7¦‡~Ñ#~óäÞû†•ƒcž{:Ü¿wV#|ò÷S<Û%M½ƒ°h\Ö�mdsZ9÷($n‰%Z^ºŠUQtù	UÙ¨¡Ê®*òºòQ�Eß.˜ŽÍbæø(b“¼¼ÊŸ¸bœ›Î¢Š.ñ™ÅÊpäóÌU¶¾�=NðÙŠÅá•»žÇZuVç°é›á¨yÕtVÙ	 ›¢£‰í$h«í%â 6$ÀËé|tM¯¼FîçñÎ™Wœf¸k:®š3ª†3®ž“ÕÒýº†3¾ª3<¥¡=¸hS±#25þÐ_ÕÎÓ_Sý3µØ±ì˜N�¬áRÃšâ£ åRé¸”<é—=ïˆo<ÒZ|ï‰n<òFÔü:H„.iQ}$â Uñ®�üÉ~Ÿwõú“e‡Ò x¡œèXðw}q¤V`kyIO:‡I™ÿ\¢Êœ‘¯ƒ\oÄkm¬°ùE_á8<QCVÔãÄ ð–‰¾›²£ Š_ë¯¹7Ç´ÙEUo¨Ï{<$@i•þtte¢ªÏõQÝx†®Í™X²žª–`ù9!®¿C¾ss>þúÓ—Î�(ñãô¤ås?<4¡ÅW	²Lüqbe§?=B©{7Rßu·‚˜º/òÞ4pcP¶m„¤ùiô¾Í®ƒh!‰Ï§ÌÂ{§„t‡yæÆTà`ºp(Mœº½hËh§©�wUyœI²"I,>ÚÚâ÷“dj…s€°Å’î2p¢ïz+çÊp•²S	ý“™íÊžêZôæ@t)uÌ«8JEæÊiVúËÀÃ”š�|±&é¸W=Ù8r…åLËIæO:KlMwAÒ³vÜÎ$ZäOBc[aÉ�ËoË‘ku¹LÌŠú#=íÄlßg¥èD’n‘hJaÍ´ðzV:ynh{­,Y>-¼nfÑrbŠ¦EÔ„’†vá©Y=û1^Æ€é Lò[‰/‚–¤EÔfÌ`˜Zk WÆ(µúïŒœ	>[øì(ï³–´CòAŸ8‘^ƒ„Oñ["‹|¶%IåMö=¶ºþ*ã½~çk‘YÅž¸Ëçÿé€ûî»oûöí¿?ríÚµ’%Kþ§®çn´*¼Wª¸‹@IÓ¥Ä-}àRp­6¹j"¢‰š‹wR‰Ÿñ!6=ÅÐ²mAJØŽ« Hè0ªð)9IV‚‡0ªá´0|Ø à‘ƒ
+b/¦.Ác™µ¢K;;?³¥Gõ-Ý*ï^Ž ñ›ö6�ÿøTßü8“á)ÚY]„ôŠ£®'ß0áùå�
+=\'<“p‡/›5"ÞÆ…Áênœ?ÐlÒåøì×6aq�rZÖ¢¹¡�Ó#ª¦…7È‰‰Ê,ö,a#Gˆ_D"Râ”†ÓüÓ°GÎÔ=kk¤Ò„ïZ¬¸Ô9½ã¸bâ‹P¸<+·Ú_f\÷iEÂ›ýu\?Ùbp4Tå–o�K¿­{º±»†x°…»¯‰»¾µ{„nzÛ‚×-ï´Â¿ënÑÝ¬)@ç{î¶êÎXË}Å9óå|ÐRŽé•û;Ç%ñ
+.ãœµªò$•¦i.Aqð`Â.ZÉJHK¦MY­ ¨¢©4-,)ñ¢ª*»i´~ŠiÊi£™Ã-+e"î-¼Ÿa©m6ì¯›Üu%z4Îà›E/EsþE†¥Œg¯œÌo¿Dà0Q%I&ˆz@¬/™[<�’*%H:È^¹˜È9!½Ws‚�¸L�à(ø]•KÁËáa8´9E½A+ew§Š5¥ãÇš¹;-4Ã~²ßJ•µ¹iÕQá¢½Ss_zÂþÁ/öÖþ®±û!$ÉÃ–÷/r“²—p˜e–`LïãÂ+É<Ê{Ý2yÚ6Ô`Y0Ÿ�nð[üô`•Tê/µD×Í
+‹VÞø*7Å°œÒ€È‰Ž£ñ-~¤eh(ƒŠ÷¤èì©!Ðv¢‡ðÃ³Ã¤G¾¯}ÑZå¤Zx
+åðq°cª–í"!,‚42ŒawŒy˜	ÌÐ �@’Ž¥âê2©ÂYƒ(+½ÉŸØ©¤ZÅ‹©b)2£¬2 ±¤Ô•kêÉ@¶ê]˜• å“åÛ™bbt6qÊµ­/ã)ü1_Sà =Ë4y�âOÀ�(étÕ¯“õ Ä	ä›DUÂiÊ«¯Ï9šÆ¼EƒÍ®@•Ð¿ˆw$´Â9°)†!�lŸ‘¨sžö@eÏ£:Ñ%1ãèÂ§0R©é³•Ñ…OU]êàï äxŸD¸;ŒWeó%4€žñz,“~‹ï\£õ¿	"½½½·mÛöû#úÓŸÿS×s7ËhmçžÅ£Ò§ºOöñ‹Uè«ûæ´ˆÞ¯høUþÛGKx¥„~HìÃ<•y$p�q¢{™[daï|Õ¼#`hf¸> ^ñ–&Ç!¦WÎCnwLï¼sFû/R‡oš>èÐ‡AÆ½üÍÂJgŠÀœ"nAäYªˆ¯>ÙËÃuÉÀ×ÐÕëš¹¸ya­4<QW?N‹ˆ7\ë‡-Û–äõêI°)^µä}õœ˜˜ÕÙ™ ÞÊ¬¹qôH´¯ÍÕâg´œâ;Ü&_.Ž:¤ÏÊ¬¥xàìè?hž­:•wžÛçOZ5Añ±¯ˆíÆ0µÊÕUÛÿ¢õÔz}¥´ýž^"Ð÷“ŠÛ|÷›è­q¤•{‡ÜÀ]ÒÂÝžÖp&p›‰M\+ex¶ÓÐ]Á§€c|µJ™�µùs~7Q¹®¨Ê9‚iÓÅ)¡��HÙÒå·PËˆ|W&ÛócƒhL!üº_@tQJ‰óÄýû@²;ðÒ²—ü]‰ys:Iœ§ì(oÑw>¾ºÎ�Z_´sÏ%¸5#`¦föÈˆ¬D8�]ÂÊ!áâ¤Ì®ÖF$²Xö€%ü¿0/¬%>-#²¡¥MtK!ËÈ×èG¨£kl‘º.ù4Ÿ™Yôy8XÏ(ð`ð|mÃk™ž�ñbZÚ!ÿÒmªg9¨Ê9’Ôj	Ø¦&4 ì±a5¶�¬òÍ �¶÷öýeJÃããêVÉñ_ª9#ë8i•œ¾|V§U÷ñ2C,ÏàÃUúhv·ÎÜþh)R:ù|XKsX­à�Ü#£ËjEÁôxcÓ¡piú
+$á«·Ë€¡=Z�ŠøfBGÔ`~;ZºÞhÚq¦E¼õYh Ig'ìpk`%wM¸J»eG—$þÊ*ö¤D‚¥t}°¤X"(Ñß««äwo€ûêÊ^KTæÂø~ÕÔ<"u�üØŒ:o8ÙŠTzJçhÞŽ¨îˆŠNK-Y@Å‚8YsV‹s§t´
+(u0¥A”+ú<&Æg!Þ:]®K°™Y¬LFdE)çë�ÃÉŠzœ7ÁÞŒÈÊÉAÃµ(í@¸´„a3Å/N¢•”Ç0„TŸpGFzŸg¼�€Œ[?áýýŒÀ©�[Ø‹ž«x~Zèà«ï&ƒ•Sý³%CÌw�¤I«žùTÿL¼(¿ÅØ ^Mîø!2³Øwù¼§Yç>þâä5j<öØc«W¯&x¼qãÆ®]»*V¬ï.ïÞ=hUÛ�ÙZŠÈÇùDi¤_SR=kÞÛtD¡¾ê^.áX(¯0†Ê³U§QÞg�Âya­ái¸Á	¾›5[¢²¢�<h¢ïFþÔ±]^²ïó¬S`øÆ�E«Sm w%fùâ£Ê»Ëaì›§%jï{ä}Yù:ÞUþEÌ‚g&xù¦½8j³SŒ·�÷ë�ÿ–×I�•\¡&?¼„s 2"$Ì-î¡²ºöáZ|Ût]•%ÕÌ3‹>Çõãra¶ È‚ØÐôˆx–§‰4âÜ0xéÌÀñšpPuÏ¤«ZÀ•5þÙ´Ümåë³"_Ón¶Ý£–3Û–ebþ[€¦å Z¦M[÷LUçS\n[÷T#w%A"ñ¾º’“D	b‚›üYW§Xë99DPvôT!t+ð” O-‰~Õ–çÀkØòœ�^„Øø¢Ô°wAÿ¹¡� ,Z d”Ôý²šÉ_Ê#R�«ßÛQvÓÈF¼2Û&9®�TÐ¯™L½Z¸±D6-¾ÀÕ˜Š ·c…¼Aˆc±‚›Œ�Üƒˆ˜xåzˆ1é)ó™YQ�@N²£e0ß5\jNô}tá ‘×LGhrQûióà*šÏßm\‘½`â5A­Oú#z¯¢…©´ƒîÛ•êÉP›!Á1Ú$	‘±|Sw3ÝÁà™ÞeÏ¬‡ÓGlO¼{È/Lú`sÏ¸Óï¹Û‰=­öÍNG´qOÀXÚÊn©l87K§ðm–�á‚i|�º«Êßq1:Ñ�ƒ‰ÑøöôÈ*´X®¤ì–]WØDihè"c["+	‘Öï,ÒìPDÚÒ(Úu„7žJ”’s¾Ÿ,}$á§.ü‘øyn<ARggðÓŒÅZ¤f­n² â#ü‡ØXmVÓÐ` ˆNÎ[ª°ª: ,cC¢KM[¥¯MbW‚ÊòBwù¸
+ÌÇ´èDH¬Ì•’éVþ%ºª’¨ÉäZÆEøÒÉ¼zE[Ä:Æù‚�\¶–Æ{™fPqœ`‰¾föƒtÑtX=æ‰.}@¶ÍKbË x¯hö{z’ïê9Á‰|§„	Àiv[‹Ñ
+ËÙŒ¼#a^Xs…Èï8‡tzÀÌYA£5áð[8mˆg]ø'›Â	 ©šÿ«uþJôšcØ5,ˆñÿ¹CˆÄ;ÝåóžBd³¿õ¨W¯ã_ÿîÅ‹5jt;Q'þüMš4¹|ùò½»¼{÷à>R­³>Z×ÕPr€(WŸå¸I‹cÎÝò]gÌÐ©!…€Ãp6ü¼©Ž-ž¾Cf½db?}zÀ,€F—�ÅéåDÇÀ�Uu³ˆl?×Ú©¢ê_Ú3½ƒmyILF2ÉŸóä JÁˆv‚†Ä�VùDwqÈRº·¾¼‘ªèñÿ7üÄ¸ðÀ:ÝqÁR÷‰‚®’?ã·†97´sJHW8$ñ&¿žQÿ07´mvÔCRæé	Ù§GÍ‰)†Ó†`KzyÔãÂl¥
+ÏÈÔð†’|Rô9,ÂH)uzÀ¾w7Å!�¤ÓY1Jv>îÇ9ã{UÔô²U‘ƒpbh„T¦ö?IÒylÝE~ßË+®[uuòºQòˆ%;y]Œw¦ªî™ˆ´¼˜þmg\k÷(�' Šgnçž‘‚žî9îÝÐVëŽý8´`a>ËåÙÎî7¾ÛÎAÝ@Ñ
+—r�¹½?q§Î~Kä+
+ˆšËŠçÜ_WDWè$o+kdFr¤*‡®¢•hîpTUvY¤¡Q`á^rð Âs"Yhf±gé˜É¬À±x<�UÎM¯«ÓkYò3'«t|½”Ð¹`“˜&8"rÇÑq#ô2¯º#Rô´šŒ, [ÉÿH¥´ò×U-gü£íb0C«xòg’®KÚ†8É¸·Ï|úÒ¹YH´vlÏä=·¾[h-Ñ=KS7p[•†ù+’´tµ~É-~«Ÿhü`E=¸BxB¼( �{Ÿ_ôU‚&+lš3&˜cú–€
+TYzàEð¸¯¶öB}ÍÉ©$k˜ÃÉ^ZÊê±h¤èŠ¿!ØÊGøNYÃ¥5¶äJZ=ÕJÊG‡=‚•–Ã¼I‹#¯Q)r KªY=âQÈÁŠù~†Tj¥®’ì®îÙAlbìkuòÁr´4d!8°­WÚ|,ÐÌ×Ú†0Ë¶FÒª�Ó”{OoLL—ÖŒ»ÎŠ*¥Ùª-A:“�c$×Š3Øuf±g°JŽ0®À2Œ‘oÀó ÇYÅþp€‰Zm9ÙÊ‰‚§2/º‘‹T%cMÁw?Á4ø]Í©Ëãä´ðjÔG§ø/Ðýk²þh%c =ÄžŒ(È3òÃð³Y8ø'|˜!ÆEÜ!Df-—ÏçDëÏ?ÿ<jÔ¨ÈÈÈ%JÌœ9ó÷ÿº~ýúÀ�¯^½zéÒ¥múàÍ¿íÂþå�È|×-{Ä¤ª?’J‚Ls©©»©·–Uø”�¶¿ƒ!ÁøÑ²Ašúµ	Œ˜0ôIÎÕqê€™Àëðu°bI?“å¼§‡–8js5¶ ˆ-ã±w“>Þ¯5±>˜°l„Ô‰#ÌÿXO"¥<µ!î/�'Á@¤ÅÖ¢ïŸ8�±jð-ë¾›Ä/¿heŠö8%®3T…–W ®ó#_“4•ðFHª<r{BÜxnq/"_l“×œèØ…±�:ÓÒÖŠ´B'ù®ƒaB 
+ºqÒjFèn—­ "Q$S’Ü
+ rs–bjŸ´§ªó]Ðý�ßs‚Õ;&ú0èäÀGÌRÛI±"·kTp:ãŸë9Úy�#Æ´zt°Ë5¨èë5¾P×Únà±Y­™¸Œ›çó×� 4Ãc@rã
+áO áË4©?i…àiÛ5ƒ[6XEëº5ðz°©òfá=Þ�ÐÒü<-‰#šêŸ	¨qkV¤Ò´è§Ì†DømQ“ÊO/Œóžæ?Ï¶ì65sbŠrU:7Û§7#p*(‰#J	íÂ�càMóOãû5J6³à�hv­§Ì7r�ÉAÃˆ[!o¢+[ø›ñîkò…òúê¦±Eñj©;´a%±`&Ý´p§jÈ¯¤éš–îþÚÎÜÆîú¢ž“ïLõ8±ä-Üý`"q¢‰ù·÷úŽ[¦/@p.ZÂ 1,ˆƒBÌ/ZïDÂ´$áÐáiI›C yýªªæê¼¡û[ÈÜ‹TDí*OBxÙÌØH…q†Hvñ‘6rÆ‚5z3zñç5÷¢)¹º~Ë:{ÔÃ.V¨=Z*ƒ�W`¨âDxüY•/~D0ûe`¨*àý€8À$-nQáVÓŸg$p„`VjÌ= 3&Ù
+˜ò_ËÛ±/„¯J­ä aVõŒ¦ÈŠz"Çåñ$êä^æ†vÂ·ÐDŒ
+�Øid%xx#©€Á‰Ú˜åÊ´ˆx@�K­¾3 †9§„|”]×¿‚ê©Ø„Ajtkx¡‹*w˜‘	>bÎŒXÆ«¡¢$p½i»‡ø8žr¥å#oà†¼&³jšËª¥™ÇÜ)DFTºËç¿"oÜ¸1qâÄ}ðæ—_~ùës|}}oÞ¼ùo¸˜Û�ýû÷WªTÉÇÇ'   B…
+·}Ø°aQQQ„ºo¼ñÆ±cÇnŸÿ÷ŽÿõƒVÅQ¼ïµ¸f€ÖXgT0`t§Ï
+|¸Ö½Bô$Ûc‹�œ36°qF‘zÚ/AÆÙÁ‰²øœ ¸Lô];Åä3"_Çô$)o´��¼zÄ#bcn6q·6w¾)rˆN‰
+­JÝž‚’Ç:«êxñ	ðgq�Åu¯¸å/ÊI¼c«0Æ*e€CÀ×ÉÆ|Iµ½Nœ«%Ý×â`1b(bPTÕuÒÊ²ô€£k1=,s3iG�½yKQ¹³� £îv<ª9!ûl*.Ñ_BÅ¦öoq·U'±2LV�þ‰Wçið¡•”oh-û/;ËÖòÃ*è'ó®ø^Õf9ßÊ=ØÄÝHüÈ›Öîuwç×t¦7t—”��DM˜LÒœ+›Bì+é:g0[gf÷Çiãœez*ä#îqFÀL"8nYçÀ_Úú’g¢UœsEOÆ¯8ÉJ³Ð#RÏ±œÌuÓYÄ2ô‰,èK‚•"€%Ýb6“4u5�×®rã€ÎgEöj2ÃRF®h“"bAÃàWŠÚ•$mµèóóÂZ ¯`bj˜äcÀd¦ˆæêlØ‹–�¡E ¶Ò­ô¦Ns�¤;€HÛ¯¡â—%ÈÞ´CªÕp…6Oå|PìGl¯ÃÛÈ	íCkÓŒV�*Q‚Á#DñZÇóA=À÷ž»£¢Ó“–ç_ #Q?I/#HÒMÆ‚¸e[Ð„ÏhJ›Tm&¹þôi!"èOd1«ÐE­tÿÁNf±2&Ê­qt X@Øn»ŸD˜¨²¼�¢˜ö…¨§6UbùºêwêxºŸ×‘�%¶ÌôUgw«ØM““6�è¼¶Wb:+èÆo™Tš&ÜT!…ïºÐ	�<â,Œó‰ÔG<3ŸX¨(ù—”WÓ–—IÝ™ÅÕò§­�,+é)ŽcU1m~ÑT[AF^9�ÑbKÄ€K%%¬<áŸ0d†
+7™sÈ*ö„TÒ‰+¬t·$tÔê‚ØÐ…±|3fÈåÑn<1^*ß×â­�Ó°|„!ÄE2N@Lxà8Ÿ= $4ŒÁ0'¤Dc×ŒôáÊµÖ«bÏ(Õõ]J;™Ž.|
+«Çä‰¾Ç>ÂØƒq©øêzàcÇÅÁñ`Z´ú›œ˜r·Fx_è¯“ö˜?€3!Eÿ5ùë¯¿06<BHþ½3ßzë­åË—ßÓ‹ùýãäÉ“!!!�7^¶lÙ†ÆŽkÉÕ*T(99yÇŽàæã�?Î-üƒãóA«UÆwiõyY_î¡YˆýT´·R¸#!¿b¨ÀŠ1êq>»&ù­š8‰R÷^m�Ò;7® ˆ™YìifQI†:&oyû_¼ ÔZã¦¨mŒ—ëþ‚µE“
+”é¶hIV\´ežã„áÆPhQŒŒ—#2õ÷Ž–â}]s‰ç«rã
+bŒð!²)~9nÙ„¦µ²3�-ô•˜î˜m€"œ0Kkå”ÑUË¯ç†~€ûM	éÄ[„o„sâ„¹_h?FàjNÎB°ya-ÁJ¼´i)|":{‡u²÷~‚ÚÆ=EPàœñ™=UYŽ€¥™»Ër9p°–Ýªi9ßàrµfÊf"—ÆîÚ:Nê[N‘f#÷ó–î�Ž^‰5yrKsw�©­ò§ªàÖ]!?a¶¦h‡ikrÝq™,òËåªð0mâ/‚8Û &K`qùq;©aÍÌû™ð¦T[xÐ“î»£‚  Î›Ý*Ây´£GO•'Fv<'®Ò rAl þvzÀÜÔð´¹µ[÷4—Ž÷Q/Í ãÂl‹¢li˜Žd{�=Åo‘*°0~'¡‘•�í¦#t§íÚG§yG‡“dãÿ’0ì³Åv«éŽÔ½]Ã¿hî�„í0=KÏÆ‰YI)xˆÉé^¡ë*E~xéü´asww÷¯6§ÍÃUl–›nªå$¿çnãv€Ná'îYîk€–]4ùiË•‰T÷š%A	lßê½dfE•Æóƒ,:é|æVÝ
+i‘­a*MýªŒ|‚5h!!k-EZŠp’ódOçh�Àu�knHŽ9lhSñpBÝ±)yØ’Ê—k9lmÀåçû¥‹×UKÙå©*GiaS75l–Ø “Jâ¥<ØM´¸¶´GéˆÁ ‚e=òòYQ¥èôùE_4e›†š¼&åÞgðjâ�b"4ë%XAnqWUq^%8Í�ËÇÔ/TedV›Ž?—Yì)ÆavÔ#ºN])5¼	‰/ÁrÄDŠö hóVÓÅ�äÅ*8 óð�i|àkÕúts!lðy¾aZ@*ï­à£Êý�` 1üph˜ÀdÝ‚�0äà¤‰Hx	>hó¨`%Ñ"ÆNxJ*IÞË·%ê¦WŽ[�-Ýw¼à!2=¼Ö]>ï)D¦¦¦>ôÐC ÑàÁƒóòòþñÉ=zô š{ï½÷Öþ%•›7o^±bÅ¿>þÔSOµk×ÎÞŸ>}ÚuÝ+VüƒãóA«â^zªžªÙžd€ªŽè&…Í!âGFq“J*ý¬eÜ2 ðÃÄ&£¼ÏI{jØ»ÉÁƒðiD”�ŒÆ¹MEF¸mÅÂ@`•V)u©Öœ2ÜúŠøä5æ‹¸�N·~ÓVóâÊIœHPi8È+Áã¾Ú¿˜¯àió´²=ùQ±&Ì95¼1Aw*âÊœó@ÙÉ+Q0@€â�¹¯œèâÀ=žá™^‡‹áŽÀ±Kœ°újá¢¸F;†0Í?dœ4F‹?î)K±h‚kbìÑÊv`G#½Ïjéœk£¹h€ÀV?’"b-Êã½mÐ àyð¶qO‚u�ùMÝ�D1Ä�ÜÅ�ÝÕ-Ü½/8íJN0ZÕù¤ž“Põ•"ƒ—“
+x6ïpS¶N:¬PX‰‡$¾æíÃ�K­öðtÄ&'¦(Ô�1X´Å&üÎÙr�á-t"DE Tóÿ÷ÕÕ”ª<ª¡²c®’DñøyºÞ’iIØ £ë�ÿ–…1eT®‡ È Mt�h9>�kÈ¸¶ôˆüÆ-CipË82! š—›¢ýñ–¦&—¨uI4…ìkÙïéŸF—Ñœ�cTÍœk¶’Æä|ÛÍD»5w¿ÒZÒ×` ü|„ª-›¿éM§[m'¥¯Êà …�¼.—Vù”f¯ìôoáî(	'û>ômrÒ–©]¶‹ß:¬úŽé}Ö¦'î]–¶iHQ)(³©]Š˜(%äcŽ0®¸�ö™¦¶ Êdˆ ŽÏu~[TjÖL€•–ébBe%¢ŽgVJ„w”BË/RÓ)b•oN¬¿m@Ý]U<ß	PÊúoÐÐºªr»šŒŽŠeºyy=×#¥™EÈ¨Ÿ’Yßèâ’HsŸ“Q[.ìa¢¼?bÂðÛÓÁàá»æ#\'Ç5Ù¦ ÎçøJõdÍÆ
+1s)dV\N† ,(lÅM­ˆøÅ¾	6Î/ú
+€•YY'púlÇY¦Üd¿bƒÒ#ªN”…ÔªXèÌÀqZ²;\ûeØ€õ°AâJ<•î[Ü½güp�©á�ù¸/¢x5êcŒ:ÅÁ¯8Y—e$ÎmfàX†�æçO°­d„ÿ:õ½f\ÓÙò\Ã§CµlúÊ�n.ø3i^Y‹¿cé€´ðÚwù¼×ê:ÞÞÞDjmÿÖã/Nþ7—TŽˆˆèÞ½û«¯¾öÒK/mÜ¸ñÏºZš/_¾ùóçß>ˆïß¿ÿß;þ÷¾\!ò¢f¡T¾ý+£t¼Ï.üX¢:L&=¢:Í(eŒÉ`&ò_@3«Ø“Œ.}Ý…³…ªq0'¦˜­Fi^¨ïÂ¸B —¨÷—Û_«Q	¾×¶C‚tX´Õq¹�7”3——ãød™Vj "öøu#�Âýõ=ù8.ÚRt¬z�ª{Ðflê}Vä Ã^6ï{_À5Aï‰Žaû]µŽÑÖ Ù›&ÎÖJSqŽnhÞ3þ¥\x“3zS-Sw½ß¦õp¹Ã$�÷À MŒ´ÅýÁUø”EŽXÊ«"{‰Í{j*N¢j¼ÛBUG¯²‰S@L5�ÏÁvî9`±¦;þ¬¾“Ë5×ÑÚÖu�ŒzN6ŽnÁ[SÃ‡£®åÌ©éÌ¬éÌàû›¸ë	m>’@õZCw¹Òž[\•eRYÑXî—ÈetáSP_Þk¦ñã‘¯åDÇ-ÒRÑ&mD¿¬)åÁGp('ÜÆ$qxnÒW«…zò'Ž]Ž<.‹JRÿèyOF–P¦ ¡ŠzRûi”÷Ýìyµ‰»¡…ÝþêÓBW¬0ÃL“Áè”«4;GÃË›Ø—íý§Iù*ºC‹ñ�±…Åiótêò
+ç³ oOQ>Dò£¶½"IëS›€îyüÕvÁÐæ^\CSwÝäÙJ"øh•:¹`ÂsÀˆä²;x}_×É¢ƒ *ô@Éq¾gTÕcíÃv¶Îw0sø.~J3´äOãè­œS¡ù’Îr_°�G˜·C�’Þ@áé<¿ÅïôX ¬Cc40E”pÊÈ mI‚Æ·}ý˜	Ñâ¾ZÒÙ4}ðžxgGƒ˜uƒ>ØcÅ8l�c^X~N@×p³‰ž­(?k]ž[0Œ6ˆënÄIà£À“wë¬/ ¤É¥å©²O:œ2yBN€/;ºÄšÒžUHÔ-ú|•à¯‚€Ga_™ÅÊ2HìÝäø¤”1Ã€Qq¡¤™�ã�TøÊíÏkÁ÷6lŠR„|¤ØGÂB­¸6œ<%´Ë4ÿŒÐd�}ã¼‹´VŒ—ï±�ŠWÎáœÙÁƒ†Kå—«|jvpŽ€¤ãŠìé&û-Åã%Ið˜y0ÙÞC’'Ê¶‘UœfóöŒÆ$-Ó[#.[7R�2¥lüN!2¬Á]>ï";vìèüîÑªU«;ùÔÿH]çßù¸víwQ¸páQ£FíÜ¹³}ûö¼?~üø™3’K¼nÝºÛg¾øâ‹:tø{ÇÿÞ÷s²¥…Àˆ,ô`Ô)"\�P™Ú¶,ôø­4±&ÛY6I*%]œ4³Â(²¢Ã¨§ùÏŸÚ	\`Àc_â{c¢T–­ø’1·uºÈ…ÁâxÍ²vUr,9Äº­�ä²¾©"ojÕÝJž©×oÚ+‹Ö«€Ì§ ÊMšE‰_@3Î17�ÜO’&‘Ôk.åk÷k±†ŸTyLMÈšûÅjØ:Â;á“�9h!¾BkÖià|X�*è]ÏVª³u,š«7T6!Ïv…ãx�'ÝÊq­���ê”DKÜDŠ’òËr®˜à¥…»ÏvGâ¯ÚJõ¥+:Åºà#$$�¬ï,ÐR¼Ma¾“È›ÿÐÀ]¢™®—lÃN�ºì*Ñh_e…-€r®ŠŸÆí(×]L\ŸÒ55¼�n¾èËñ”�nYÅžÈŽzha¬piIx<�<�M‰HöÁi5‡¯µ"’é`[m#ž¦bÍ“(Ï¦™ZRB?Ä;™?�3tñÊƒ 1\m;/Ù`úŒ>³Q4ð5âë-CQ‚zz�ïÑÙòÏµ�.˜£[MIutácŒO\%Ý§¿r³ô/ï-‰Ã+0g¡dé²T,òÙM§ð¦m™`MÒ…Zc+é…�´†2TSÛ™ÛÆ=NƒwðºÐTKÞÀR (ú¯î()æjê¨uSß;Ú-ßõþ…o¥õØßÏ°–.B~®G—*ÖA™têÞÓ/ØícZs™EŸ×Äé’ÐËÍJ<ÞB#õl¸°…H‘}{IÆ?ŽE˜ö8@)«öœÕcÓ)kvZ;nÐÆÏz®ù¤çÊÒù†¬¨RºSf4c•C¤cª’‰ÊTf#W8Êû,˜’Yr2\ÕßÍÄ’\¡¥ÝbÎŸ[ô^GªU>í©o%ª¢ÐXL\lQ'à>?òµ¥ºà¢Ê„"@Œ¬36ý ;K¸ÍUÝcÜˆr†Uƒ�%S­'P]W8-¼®f7½,ubŠBðæ†¶™<`VÐ†j/t'†Í-žv¤‹I?­–UÊ¤éå‡P/×ŒÀÉºV> JâÜ&òmSü–Z¦1d˜ãšßž“ùP�#4‘›ßò…s‚’ƒKbžïŒ+•Çß5Õ>œÍ$á|ÏB$.ë.Ÿw‘•*Uúò·Ç©S§îäSÿÄcûöísô±cÇŽ{ô<òòò¸ñš5kÚŸ7oÞ,Q¢D¿~ýþ…‰½¨�òn•ív$¶Â–Õÿ¬4ÕVUWjÄ€�ê�ýÐ'ÀÜÐv˜ o€B¨fµ &›2¢hª)²ò(ª51Vúm£®P,Vµ1‘||Þ³ëÜ6[‰ºÎ›•À™÷Õ•ùUSíÀ!ìª¢eÊKžÚÂƒ“±;Ûe™YìiâVx/f‚ê„½5õâ=wpÃ¤,1ÉR‰;FÉ¤è˜:9A�Ç9¢ìüš˜žÇ]KŒéŸ)%0WL\–àY»•øÛ&»¡â®óúˆÛ?þ¡¦|n€qÄ‰ºLðë¼Q¡ò¼Ž^­.!‰SÅñÚè&Ž³|Ä‹›j®Î»îÖwœIœ£U�½¯ûzk 
+@'hÎ•‚þV¼1¦m…Ñ	d �¨¢ï¤îOÀtˆ·îú|L½S qÁbM_œÖ27®€ì}Ô£ˆB§pœ÷ÛTê†³þI-²ù¢G[U–Àž–x9"‘´ˆšÉAŸÀ. ,Í~ÿÙ’x¹G®é¬Ëa0Û=ÊSçƒÉ÷ÖÆÔYë­¶!w†Ô‘‡¢·¼\8¢ÞZR�ÖN’…fnMr³…É*ç	›hÕ2çU7à+Y¿™Ö¾ ÙS²×‰k é ºZzŠ†U¥£ï8¹•{�‡À´uO¿WvK6q×ÁLèHKMgœ¤_ùí¥/²ÆnïVàç±å¿Yù(4¦ïo…á¸HlÊº ¿Ê€�™pIŒ®ôˆx<3QRf±2 �ñPc‰.C0Î-±MÊN©:Ížwt)ð5éla§%¶½¤«–å%ðÄF¶¾äá6RŸ¥œc›Leb$ì=Ð4´IxúBÒ“Ü³ $G’<›rµ¸ð®35¼©¬ŠhF3LU©Ô“9Ñ÷ñgf±g 5›w­¸ÎôˆjÀ¢nÐ+ÇMiPYv²ß2ÆØÂØ@0:':FËdD¾ÎŸ6ýCàkm>
+F�ý ã‡�,Öp’55¬) Ç{ €ôà?¤68BöÎø­â B\3ã|vò^&`ÃÛ²/¸d@ªpÇ7J·r¡ô¢û8M73žÅR„Ëù|5D¦IOá€Ý‘¢>wž_Ô‚8y¶„=¦È‘OU#¥>¾¡gM„Ù¦¤’·Ñã–­÷¿"4hp'gþÓ`Üq]7R¼yùå—Ï�;w�~ÎÏÏ¯gÏž·ÿ|óÍ7[´hñ/œhÅQÃÛM·Y�Ï>FƒŠÁ Ê«R=�hQÅ%.++« ,Šìa˜AÛf÷‡ÉkêxÓ4±÷DÑä�¾oŽ¾Y¡ûÅÒuOº®R½`;;<©ãeà,\SJÕÈ+ªæUy9Â™‡šI
+Ÿ	«î¨ ;(Ëˆ°Ë²åù59²H÷’à¢¡‘)²ù±›ŽÒCc|‘V°=ÑØ]Ã_×Ö=cõˆòØeÜwŠ+#æÕrá‡¸}†:.E”|×Êø/”çÙ»¡‚)iÙ1«ñ>_âl“Tg5A­Z©Ç¢†z«‹×U¬ýÉqâ O…ËD‡À
+V¯K“‡lËGñÌ‡ë99íÜ3o8]ºËßtºqÍ2D=mÄ‡ï¨êçvê9l¢¯·&‹Ze^U’ î!ýd"HwC·¦guÃx/)Öé»–>Å-ƒòiµgWÇU!;ºî4;ª¤åYáW	–ª»–¢�OzôT¥’ÑãÒŽ:ÑÍÇEâQ™vKo„s&>�Ö?©K·_Ñ& Ù;ÿ- ²¾»ˆX¸‰»ÑD�l‡K’’V8»:@TLe‹„DRn
+Ü˜è»GDïôÕB‰+%é”n¥�ˆ^ª­jk@º˜~ØMüMœœ`õ5t­öŠeª$©¾„j�é©º:„œ4ò»®ÑÐkÀeE§'-Œ‚‰Z6î`¼,Ÿ¨å$wÓ’©’¯[v[J¿/G¶Ïÿî^~bn¿]ƒ]/˜°Ö�·$:³Ý@}7©ß‘1N ÞÁáÓAB- ‡ìÑÂ¶U_*²Å„ËFÅRºÑF•W‰ë­þ‘#¡½LÀÖ—ù(¥UN±…Œb™Ê™Â›J%ÐtÜ&¬Œ{$ÒaøYÉFf_m®pz@
+&LÇ8ò¦ù§K–i¬_Fä›\|vÔƒ-Æƒ�&“nŠU’„W c×Ì’?Î˜ÁðyB ~ÛiUNàƒÃñ€ÅÛ}éoç÷ÂÿðçÂ8_¢lÞ02Ucg¤j’ôf$0t	3“ƒÑnÊÍ
+¯+ìò_Ùâ·ŠOËëŠÃ…O´ˆ9ÈÈ—ð… ¿ªÿ§�ø8¤‘š_ôxþd¿å£´²–+ºaynø†4Î�!'»J}¶qTæ#ržÀ¨‘ÕÞJµ>È�î‹$Ö¸Ëç�C¤¿¿¿··wlll›6mîpG“øø‹“«U«öÂ/|óÍ7ö'oø³F�wòCÿÄã�7Þ¨]»¶½¿uëÖý÷ßOùç]ºŽ•ö 4ï+yVÐX<ÿÌÀ	ØþdYHZÂ˜d0Lò]ÃqÙ	è·Rå³Úbkðº™�cÆXº…6-nÉl–Ë½ú1IÏ^¡9r˜¨gôV"‡ÐO+Ò¬~+�¤Ë‹øXÑC.+nÁjZá‡ù qŠ(ºÄË6g~Er^r¬ÅÚ'l³FSè(¢‘?è¼Üñ�uû¼j†Ë$ç»î“eƒök6éy¯•ØàÕb®áš¼îs§à#·Ÿ¤›)0"¢ml‘ƒxcËP)a¿Â «ù;›¹_Z® m~4±k+.ºa;@¡†ŠÛk8ãuÊô’–àKô”[:Ã…ÕrfWu>mì®�w¦½çnÓÐrGuç³ºN&'7q×ƒõøí.:§ªeA.òåðÿRÐ³Z§ò·ÜNiªÿ^ùsª}'5JBz©èe+2Eóâ‘D:õqO£êi?CŒ€ß–­å|´ˆRÄöˆŒá¢eª¼òÉùE_]çÍûŒÈJ8+ü	ÃfŠß"Ûh%¤»‹BÂÀÌ¢è‹:N*1@	� ïúêÌ?ÒÊ	�YÊ\ù ©‹qÉò«-`ì¯S|s»àHoé¦*N~ÁÖiÀÎ™¬¦a ¼¢¥+åTˆÓi:ž 1­ÝØ]G7™Ž�¡!<qú1-&žUÛ™WÇÉàO^è“´Ä@Ã÷è2÷Ÿ„Ã<ù-eM?ðªí°½Æ³ƒûéjÅ&ø"ü¤èóYQ¥mŠ5-¼Î¢âuS:ÂTôEÓ¦Œ¬<J-ãòb ÏWU	mjÒÈûíjP@$¦�é‰\)’­@Õ	Ì¹ h^oeV�kfàqc‹‰Þ¶•P�…¿\àŒÿŠÐAô€‚*×=Á«hÅúŠnUè‡¢¶õ˜lÀ÷]ËÏY¨¨ÛùgÃ]¹Ù�ÒU±ì3Íí)¬
+«�áióÂZ)>«~DØsÐz EAêñ>;ø~¨—jìôTñÕî8±'àH›ÏmÔ2ž¡jºÏâ{Ü·iÕÐ°Y6ž�+.!½ºay;wGø‰�óŒz„«âƒ³)þ¹|?w=¶ÈCÑöMðÝL[ñY†4?4#`Æ 5s�wýÚ„â{èfg"Îï£ûæî"Ûßåó!2==}Þ¼y›7ož>}zttt¥J•îäSÿ£µÈ"EŠìÜ¹ó÷GøóÞÃZ²dIþüù'Nœ¸ÿþ?ü�_?qâÄŸÛÜ1{öl~½B…
+�=öØï7}üõñ¿ù U5îXgKÒøú.„w2±zpc�×›˜‚di‚Ï,%-¼>^Q’ÐŠý‚žÒC$hÂÞÃ”¤~œ¢°l«üÐÖ#l‘k‰rfèî
+IqJ¼ô£²ÎÈŒ}“Š_aû&3yÆö�ËMªPGDc«™ìhªn<•Äõ�îZ„kfþ©èE_·…ª¶Rú;#~ï‡ÛLÐ€¢›äÀÿ„Kì§Iºl$!!~ŒOi€yw‡“çx�tÌ3Û. 2B¬N‡•š²5AZ@ä«lÃc’n�|ß=J¢úf×=E`‡ØD_áuñZ¯;8|¼ãLÆ9ã±ßv†ð»šè²×Š×óçŽ¬Æ„E ÜïMd^„Î
+åátÉõ
+‘µ¦ö­ž0Ò‹?ÁóH¦bxm\´±w­?û¸nh}ƒÆ¤”ÃÉ¡yÙÕZûøS=UËÙÀ3 ðoi5y¥øïœ�>0.:—‹?áÂFzŸµäe×I°úÝ4~='»Ž“Î½÷×â†ýÍÝ=¸;�ÔÔM‡¼Ö]‹Îà²hÂ	Ç[»Gz(’jdô'b=ºÉvƒj#\ãK8M—Þ~°â›–¡JcòUƒ ‘c;÷\§ÿ‚“Ð§-ÜýÄ’u�ùœ_Þy¬$œç·ª9£­¤5DKÕq7€¶ÜWKwØŽzspÁ_øuM�K†‡J^No2=`vdÛ=l1.9h¨.£‡‰z@q�Pª,²¿(ío5PDîO‰ÆÏÑŠ¥e±è�?"È¸½¼GŽÃ2�9_´ã*ŠqeE=J¬ZsÉ:‚Ë,¦Sl7.O*7E¿À.Z¸{¸ 4$¢£YðÓ)exèö¨An911J±:@·RÃrå
+|ãUí!ÿTÿù`ýÜÐ Ï|È¨°Õ—ó¡OüI¼©%È+ÎœÊhÁKL˜ÉùœÆ—Ïœ¤!Gñ1†ñ3ÉAÃ	½µvOÓ×œºÆ`0º1¶‰éˆ!~`´ÎÀè›¯idÝn³sæ²5f¼4;¸ÿHïó@'�€.Ÿ²”Í
+;ÁÓ[æÍðB­VIà™m…Z@UÍÞd»B4ƒý‚Vð¹‰óÑiœ+õ;„È¿ù˜Úåo>ÿÞùÿSpY³fŸ:tèÐÿôƒÿøøûÅ>üô¯ý•ß?€û%J ŽeË–Ý°aÃíãC‡-V¬€þ^"àïÿëíç±9G©!ÅŸ£¤Äá)í$¿U~ŒšQ7#pš¦µdk¥ÑSXô/;êaÜï|™ú¨šö.ŽYÙöºœ˜¨Ó¾Ì¢Ïa&æK­ˆ<¶€‹"‡Î,Y;ÂF‘;Ó©TF–eÊW$fÁ	ìxCþÜPæÿª|ðgf±g-8]ë�ëÆù ¸x$8žnN¹ØS‚Î0¶	^Të{µÍO‚Œ¸5›Š4kið¸Só6o‰÷ÀF »€t‘OÑJVOÊ&îqÔºAà†%jâu‰nøÚž:§×_·pÚiKrºÂu¦Ž“ÖÐ]¦Ù’ßÕu2ø­×�öRÌW×+qÂZË~qMg®ÞöHÖræ¨¾Ù/¶¡µ�»”W|²%j&ý¶õchÁ<Uü‘îHB·Ò&ô¦í­ ñ*RHTk&C�à<²GÄ»j	ZV†n‰²Ò`Ð’±¡Ëuÿ†sLõÝ* J³
+DÌíÄ{¼ÙÌÀqP¯q>{À¬aZë¤[¾ë�p "5–ü
+Ü!ô®àtA+P~P�´-´äcê446×ÜÔ<Ý�ø«Í¸Úú2®Õ6÷[êl¼3\†ñ[à#�B°ÀÈÍNƒkþðºùe+÷0`M�ÐûD¸­ÝÃà €9©éÌlé~MÌ^Ó™hÒ­Ýo”¢ìQè\a¥«q¹ ;(cë§ŒœDÝ6¥²Ø;¦ø/Ä¾T%oPB4¤àÒˆæâ¸ˆ-Üç™lÃ‰Ž%ºKyÐ6™­Ó’š¶Gr(¼q±gñ6-å¹õ=ø¤ê<<ï))Úàªäiq� >\Ã®0¸tƒH†™–�¾ÚÁëLÒD –ÜÔü¢¯HyßÕ`�,Þù§ƒJÄƒ ƒ!#²rvôýJJç¢â@:¬�sLk+#òÍÅ÷y6ûK±*-Ç½g{&%äcÑÀ	¯¯ÖýVõh(UƒìÈà˜ð-ZI9&#ò-8‘ $MW
+V´Z�VÍ¥ùKg0¯šœ“ÅoiúM_h!@¬+G_«b†@§XYÃè¢�•º„Â}Vd/_Eô
+ 
+ù,a&ÎÃ¡Å`w0xÞÒ@øé ÿ4Xœîš9n3¦2@EBLëé!’û½Ëç?‘?ýôŸº“mþ—/_>{öìí?‰×Z¶lY¿~ý¹sçþõÉÍš5ûÃþ@pwEË–-+Y²d‹-þ§—÷¿áAûŒ÷Ù>ªðéOTˆI›gÃ|p¤ÕÃï>2À �Pb<£Ë2ù‰·™E_ÀVHñÊxË±!Z
+|¬x Éô~6+ª
+üaÝkŸð@›¤í=¯ÏêI�
+mó>ás-�ŽãÅ�È¾cÝP)ÕxË‰ÉcG_Vôì2�-Éªœ¬*Ð­¸H­<Þ*#òuÌAª¦jÞ‘‰±ãÙÀ&–Î8 §¢Ó3Qê`ž ’ê:YÕœ‘ø�t½®¥u=NØK€6>Ëí'ü–ä3Í?‡Œcï)Iªy†•šqUuVeÒ'ÜÁë{œ­L)p;�¼.ó[�î=¤ç.+zÅi\	!LgPcwÍ{î¶ÊN¿êÎ˜JN®þg"®›È¥²Ó”oéîçïLá³æål©w¾[˜çPÕ�ÃòFç$E—^{YÒ« ú3áá0ç…±¾™ÅžKk†óé8„Ü¸‚9Ñq¦šQË4Ä¤–ñý¦>`ªtº7!Dæ`$¥µ\Q[PrFà­`»ž`D%øð`‡m‘+Ip	¾žuÞ&.{ÝéXÃ™ÀZÏVý€{ £©¹}]ÖÉ{×Ýúño%5m(÷K«B6lÃ‹Æø¢Î÷ð)@Ó"Ç%0m$rÜH“ˆp$¾™Vu>.éþ«	Ã;_uš7r?ÿÈëg¸½ÐÈ]	EÑäœÏÁG¾çe§©îT=µdþ: µ¶“Â  æê(@y  Ù¹6-Q‘’"{ñÌšvÒw^X3M_¥(Ù)'&[˜œˆÏnL‚&·x>Keœ·´ÊÅ´<¦D€¿çÝ›“3ßó¯2¢+îY¡P %Æ”:ÏŠ�`€ÿ‡½÷€²ªÊ¶þ÷ZRQU@‘“v´ãë¶ß³[»�˜P0gÅˆ9 ™¢  AD�œs, ÈIPˆ¨¨ **
+‚ˆ "JÿkNàßã{ßãÑýô…;î¨qëÜsÏÙgï½Ö\kïµæšZíbqÂ_Äˆ+êi·ó>Ú)†îÂB¸1ó"éa­·¸
+j¡¹µL$ñÆlQZÄZ†µ€N˜^ãdF¶_Ù}ËnÀBÒ‡f-Á£TR#dŸçùÌd 1�-ž½�oÈSãAÏ®S•_ax£mœÓD?ïJçà‡â9Šq¼³9fÔú­áŒ®–ÿxãÀò¯Ñ�@;ö(ŒÈ+—yÁÀò¯�­ØÕÄœ§=‡ÉGeÞhõ	!æ»˜4´gxöl¥=®â3gbítWéÐVë´«D/ö!ŽƒŠÞbæC'ÛƒÊ¯¦K»*ðL´‡~Èi/rýúõÿÏ3AC0ÑŸ?ýôS\Âã�?¾~ýú™LfäÈ‘ÿÇÉ»víºå–[J•*eß–·ß~ûÿ“pà‡ù¢ýã*ö2-	ó™	éx•>e6�åCŒ%ÉLC[N¨\à”.­�YÇbf>Î#A%1ÕŒŸ\åÖIy÷0i§U?Û9wæ¡r.U”hüCX†®]Ž3t>ñsl=/Ðå±¢bÝ_Vä'AðøÓÐKcéÈLÐàö¬[iBL¦V»„– ÂXà+·aþ‹˜%VEðJ˜ä¨Ê«Òlà	µ|}fî ƒýŒr»:3åæt~ôú×àîð)¶s¾–æ6ØqŽ@¾ Ñu4Ð´ä"hKô¿J\}~[øJËÅƒ½]
+P¢|£h]±±E„Û§›¤!´¼0uÇ19-Ýpvz�[_–Æ7NpvÐØÊþ˜ƒ;‰êÆÿr3ÐöiqÑ{I¹kÔ°øÖUE°v,éŽüä/V„Ó=ðMÀÇâ§ A§¹†;zi�¨n£úF�ªóD…4§^Y¼ BÂ™S¯\Ô<ÖQ¬1ï1õEÏr³H½<…ë�U¸Š1¦5íÇM»,�mœúŸ˜Î=)5Æ‰¾0=,p|�®¼¼c‹>û¼¥BuÔÂ8ËèÐù¥¢Mûàèjn›÷MRì=Î1Á,G§ ²7džuêbŒr‰½R{3À;º‰QfÐ1WÎIÍ±[ÔásÍá ’‚†\\³oÌ-~õ² ø™vªÇ°¶øÅÊÉ�_›Ôb]ïKÞì‘·§¸Í«Ó|}\Ó÷º‹°WäŸk�*ŠYêc´7Â2¶b_ñ§ýÎì-›3"@Fz~î±%–ˆLàà~ý_CF\À¥$#DçÏaº V iÓ†`ÄgÕá*¶d�-z¢m ^¾(§¼PyšÌ¼ÂéÆëÇE2“¡"6ßwXäØFÉàÍ&DÂ\~…@ªèÏè+‘½RóßxŠ!YËT
+gáØŠ½´AsÏ¸JÝB]T»ßpJÕ«GåŒÑþcc|n½ÒA å�{=‘N›õÌð
+ó]ÎL{ÙëÀe°‰Ù5±r«aâ€�ÈžÉ\�\¥™2›>BÒ#q;ˆ&¶2ë@@±å?J8"ÚÉ§i3×áF¨¸Aå_5ù(ÉÐã„ši“YZø£<µòtžá¦,ô!^$†_;• þ\	ÝIË½å¼Ko?TX'zA;BˆÄf8Ê÷BdÓ¦M§OŸþÂ/Œ=ºvíÚ48’_Õ­[wÞ¼yþüè£�þêW¿Ú¿?Ÿ
+
+N8á„ÿëOp<Wêõ_´Æ‡_†H,+×@g¶ó—™ÆÃTc¾E^›¨çÐ¢l…ÎƒhÎ™µŠÈã„ùWåFÜ·5ÿÀç`dÂ¨_2ù]0Â‹H¡^ø‰üobu(ðñg¡–þî ¥¹ƒ`ñÍÿÿì	¡%Ì¢3§^yg|xÒ\Žuc”zÜ!“;Ä%0P]ÄÄT6ÆÔÎ*ºaêqwf€$t/(vešŽ¾Å‹yüW;§u^3ú¡7Ðx÷—ø¢M©ýc[¿Ñ÷´Ï¤�·‹úu›ðqŠW[]ÛqFL‚Í�”¯±…ƒæá8Šúò4	[]}IuVº—Ûá:\„›*Åà.e/dDo£™QËx»Àm@us_Þ¢ ˆj¿AÔ#Þòæò¹Ù²O¼£ß¸¶µH„Ö£ë”U½vDö,ð[}`ùÕ“«Ü$Ïæ;Í×í2Ž«ôH*RjL‘àùÍÁes‡| —*æx«Ênf3¦3kÿ˜‹`D¡Á¦T½
+Í9¡r>æ´ž¿D/(çH¢OxðJ|Ù(õÆƒÃ$h˜zžœ.>;Ýÿo©þù©OAŠ5è1:×†ç¥s0*.Kã€°C;•°(@=Ûù8�tÅ½%¶¡íï)±™QÀU¼:ÍÆ4j£`f:öúÌ3\Yœ·|~øã3Ì—‘ƒSO‡s‹k2ø–‰qzºùÒ4äe,hÉM±59#Š¿Ì“«ÒÌ…ÅË±p¸¸È]woüI÷ê{î/µmf¯×Æ7}·¸ãëÓóW=óSº%ŒªG3Óùª9¸Å>)ï^Ôš	�év×41m8"‰Dˆ!ü§HÊSÇ$	�–_Ü£D@"Ëøg«VÅJ¸ìÉ¥%¾‡C™iÕÏcDGz*‚“+íYO{Uâ>²xh?¾,Mheb6yw^{
+»;*qÉÔëJ
+Þ<æOTñ7ÓâŽÉªÌ>ÁÂQ©#À¤Í‘i˜õ"øXXê §ˆ8Y`´ddö”`õƒs2Èêóâ"
+LmŒ3ˆRRQÚQ¼û(†™þa:•DvñèÜaü„fŒÊvcº|@ ‘wD40EŒVF.R�cö¨†]$y! °èÊß4%>ºü‡×ßvµw*é¬,Nè¦Åê.ª Ó1–ëW›¥‹ˆ™Éu”óõÑ"¯¼òÊš5ksÌ1ÇwÜý÷ß„øUºté5kÖø3¨
+2úó+¯¼’��ýýÉN^ä?ûE¯(·¦»j¸¸Ä³E6Ø¢±{›åx`T>íñÏÙsðÝ˜TÁ½_¯l”üîë¿L­ÖhzÍ?ãŽ¯Tˆi‡a<£ÖoALë×ü“Á=¥Rq³ëT	?¥Öñs�-iÆc/½…O�X@¥�›ð/Jcî±W¦C9¸Ê¤wXÄu0ª›6PºÖŸ±NÅ’ñxŸ(¾ö±ÒÛ]g
+UvCf9RI‰zükºïì‚Ô¹IŒªÄ£äàÅixT5JsP­}Ü4oòõ%—L~,vÍz\º|\‡UíNY	þ%6ç—Œ ÈB…å´‹Õ8zø5·dV‹`;èæXÖ|E·Kf^“4�Ó�&4¿¼’É¤®`ˆp[æm<y‘Ýðq@^šÇ9á/'àþ œU:y~gæ­ÙnòáàV�	ÚDPëFÅ¬Ã¦(#d=ëE4ê�Ä â¿ô)³iJµËQÔ��þÔÀ=|tÇ–À¼á+¥u×aàdðüjz�“ñ4gÔü½ë/Óù8�EU¯òºº9¸ÜBÞ'¡m�Yú_uº÷`Ïƒ5Ì-™~Õ,ó.ž#]ôçt¡³*NM×ž™nÇ©l”ú€n-­J~Ñ·§¡§aJ¸x‡ƒ˜<¯×ÌQD\Ý~Cf:ð†X)�œ|ßÔiïŸŸ:º´1H‡k�
+ÎM­¼{	ç”Æp»ZYù^ƒ•@0Þîµ™'JÙ-Ïð+…Q=Å = 7�îót\„!ëUw×ì¾«'ßòæŒö+û�±µgÙ�/œûŠ·•Òí1S«5D‡ãRñ—~Ã¥_©ø¨¸ÍA„9usÁG:ß%±	#s*¼øùüÊÙam"Sv0ÁÊg„ÅèH*dÑˆbs:||$nRÞ]ÜzLî0îˆŒãà0
+(sû�-U“þ´qØ¶ä·÷”ØJ?G*ÓÁá`ÆPá¶b+úà—ˆ›&ˆ•äuÈ�M»‚Yf§:ôZ¿²Óêá6âÄ�È.Ž‚e‘NrÊ¨œ‰EU¯±Û8)ï¾‰•[ã;�Ì.…¹ Î$ÑÜ ñ]\Ç}™º‡7�‰ 7 Å›~›RíÕâ¹Ÿ»pÙáær2C"T÷jcp^•_Ý3Ò1˜˜vvUåVV-Æ5àâª^4�ƒË¿��°¤]«Ž7½ÊS8¯—P>”;ë6´�Ûa®)DV|ä(ßÿTº5j<ñÄ™ynn®?ózé¥—þ=Dþ'çEþS_ô*C�¡å,Hó?3âøã*öd²i�¯B�›‰”‰!|ÜœºY³ëVFa2áQ¹Qw¸æ¿‰™ÿ§(Le7Â¿`¢wqÝÊ³êÔÄ>\ ¢€é5ÿøäÏ“ÓÕ�|·D|ÈÊ¦¬‹éÕÉ£Èù.B‡€»ú92"¹ê:H~¥…©ßºBÇŒZ¿£acrªÌqë‡#±î}ÌE;�@É%v*×þŒdT%hˆ‡ê;'µ�/ðÑ™÷•­ÿ!>È¥iÌE©w»Ú›‹ú,sÓ�þôV�&+z^øV×SÞí•p~ˆJA÷âá�Ü)–ß¢6Ü›2+Ñí¨Mé]™OðMP×*ÕñlpË(› “üüìô H}]f)í¹3³±±¶çpdð7iZŒ¸6³l=?âU¡¢iáiêUiÊù)Ís®¥åª"¢.ßpˆ¯w¨/‘U¢Ÿ±(°çéLTÖ˜ÜAXþŒc”Æ«0n½R˜.Jq½mì(Œ,6Žá„Jö+éve¡ÇOð='Tî0³Ö/ŠkœÁçáÙ³gÔ<axö\´MT¢Ìž¢� 5h$-x~ŠÑutõ‰é< ÿ’4¢az„çÂ~ Œþ5�iHº0=ÌsaÒÐÏt >È…=ƒ»G—r~)<%6Ó±Œ ÇõQû�S? Î´ð*Ã±åòTd>[ÏãD‹Oau0Ó£+ãÅípð9N÷òáÔtÝÎ	—¦Ñ4�ëŸ—Ú:…G¡Ñ_1”ÚE1ö©¿¹U¹]·fÞ˜;ðå¢{ßü§OpRfõ^ýP¹ÏUŒl7N7€‚3‚, ?™ÿ¨bzï[ÆÆ)+·|JTÆ$Â‚Â_üë >º=buŽ?¸)ùò©ÉÅ¯‘&þEd"žç”(–Êi3kÿ‰[yV�Î�¿Œ „$FJf¥î´'æŸý>ÿæ+0»}8æ³x::
+«Üt>ïáha—6àIq„ENõ•ê†ÀóRÍ‹"&	88)ï¤Ù³‡FQ€78®R7‰ 
+×¶,rªš•QC²žë«73EU3¨ÓˆìÌÞá:Æ	åòCfc¬ˆVXÈ�?ºKluÃ˜„*P»íQ³¯ônT�i¯zÝÇh­þåÖ«¬Õ$‘H¬¦…G²íóüÊ‘¨V€üÜ¹�ª‰üŽY,ºFJÈ³ƒË¿Ì�LOÍ›ëwVu¤váQ~àx ³ès/ú–Ãà¤—Ž"é„£|ÿS!òúë¯ÿãÿøÔSOµjÕ
+ˆÜ³g��>üß“¯þ'çEþS_šž*}ø¡Jï­Ö~â8t)ò¥xïþQr(ëtÝ„ ø>‹i<:w8j�ãˆhX\½>^TõZÌ*Ž»&øì:ÕðGÐ¥È»7£nì�UÚC‰Æ&pá€EQ¡£€øÔ/ã+/¢¢@Ã¥ÊAp©'q�ê9*Ô©{�ujrþì:U§T½jLîð‘¯´aÚ¿K¤Ñíà\MC)êƒÒ­ÐŠxg¦;@¥3Ò­`ÚhCW:œÙ»þ¦ËÅêèÔþË?´hÐ=ÏMèõä¤n+ïª´
+­{[æ-@Íe5°ÃQ¼¨î›´Š|¡ÏŸ¹QË°/^ž&r}|Ì›3«®J3í• Ðç¤–¨h>Ó$t>Ú° »¤|e%<Ë¿r‹¹¬9ß(oá/o9­¯µSjg;ÕÒr^§¹€L­†,#ÝÞZ•š‚jB·VVX"»ý4€nD‹ŽÎ‰#i¥Šk©Zf�éöÈ\êÎN³ëVÂàqyAï@q\g^€6™\³
+½$;|A¿ ‰Ûï*`�•ÿâlD•/ÉåÏKmxÀÓÒõJ.L�œžšb3œžn®Ÿîö9b£ŸŽ.¢·¥¾ÎÅßÄ2ÁßQ:F„˜6�d�7ñ(ém ”ãô�	dÐW×dæ_˜ºÓWŒ;½zvz”»øò:Ÿ1âv€,Î;£€£Êíð°NM×1vü|tÎÎ½%¶‚ãŽ‚f²ýËÇS:¿9êÞ·'Þ²¾[­=³{uN—çF_ñ!�ïZÛJŠìŽ b 
+ÓŒÀÃâ_¥Q9c™ÒaÖ+Ï_¤oN½²™†BÄÏ1B‹ÿ%ŒCs8<¥¢QæD�º'F�• ø�÷ˆëx…V…gU¹™± 2ú”ý˜¡ïª˜L“..V¶œ¢swÐ]ô­Rt7ºN
+s8¸›Jïf^"½˜å¹³–:°Õšà©qŽ²Ef‚�Šl‰*3 ‡êÊ�å|ohŠ¥jÚÔjM˜Kü$*käŒšYûç“«ÜâºÛø_(¢AåWá÷õ+÷®·'a¤=Zz—êÏâàÄ¼æ8q˜yNNñy@•qü*´AöÙÊ™
+±x�Ew¹x«BÛbÑåßøÓ.ÿª’¸�Z«„Žç´]»ƒN@‚
+Î#`��c¯ÓT–ù‘ˆô¶y\�éJîô<ºè!RlGõþ§Bä¦M›N:é$n‘••5mÚ´ÃÇ9ø÷Ì6~ý'çEþS_Šh}UËõÏ«woe¾ÃŒýZWd¹¸Æ_ �qã3Y•X{ bóT®¸Æ©ü;)ïn‡ Q§×üW/ð‡[1£æïÑœÁ$pÜÁÓáŠ]ö¯“SL½V®'kWqáO†SŽ¯ÔyÅéÿÅÇÄmä‡Êöº­Îæîf2™U§…Ø>ª‘…ªk ê9Ûõˆ¿€§ J¢xqÖÐ–'§‹q@½³Ò=7e^Áèø§7Nqï�Ýøúö–Ì].\Òñ”·eÞ¾>³"Oð}.{{f½*q,»:3�ƒÀ%ÞÍu™%8­Ü ÅëÁÓ•ÙšKB	‡ûs}æiŽ ‘ &Ðª¢—®LÓPÚhlpAì.«Pò¸<xIœ�çÒ(õF�£¢ÁqnÄã Æ�ó¹C†ÌdÎíP/ªs´At[S´®ìß6ÝîÄ¼áV*£We,Õ¼>U6½æ¿‰äü×€ 2ÎPÒáSª^�{ŽA‚ûÕšjœÌoAXq¨nB'«ŒãÌ «ø(w�;ŒÉc.T‡ã<”fT ÷[c¨œ™š�œš\ŸYÆÓ�›Z‚•ô*xtQêuA*¼:Í¡›eÖIàÔÝQ½ü¹&i ‰ÃÎ_Ô;§ñÿÌ¥K1B5>`¢0¸Mµ¸Íuø-]Ôr‹k3Oq¤aê	¶Ú©äŽá'Ü¨¥…�Sï?Òí1§ÜW—Ó°…´ü­Â¢˜è�ÃücÊ“}sx…¹Ú¹[L? ®Ååø	óyNÝ
+¸HZ´¹	Â¼¤céC†a¡KñôUw£ñì:5¦×üÓ‚àßÈ�{l‰¨Æøí8ü<¶,_89þµ0b7.ùÍA3éÃ’i (<³öOf3ˆ4»Ÿí*Ê‘üÚ©.t¬¶ì‘‚5ø’¸–JA�T&d
+Ü …I¦½ÈÍ‘ÞRþe JŽ‚ƒC"f­À7;ˆë›ÇN`*‚›ªe6hTÎ¦%úx¢bÍ!g2È–v­ßà¯�A
+Xm«”¥•]cõr5óMU¹'1ŸAO.¨ŠÆO£Ä´ùn;Åu{Ó�Ërr~dß¼È:âBmŽ¸V.‹È0ÉuÁ±ù"Káú]Eàlìôƒâ° ×åQø	?gÐ±Ó ÿèü°2©±fUYf/GhØB¤ª–ÕûŸ
+‘~mß¾ÝQ:‡_Û¶mû÷…#ÿóó"ÿy/zUKñß1™#Ý£ôvfòøJ]"Ë©ê5t{Q•›€<“r ÅèI¦�FdÀ´ê‚¶±Ö¯E¸ñè	�¡3™ÞSª^‰©%ÙœÈ©S N­vÉìºy“«Ü)u‘/ùþuàº�J.Ÿ]·¢÷bøJôÚÙ³ëTwFz€ÓÐð3jþý r	×óïä*·Ú€Tþ€^véÔÊ4]3ºweš¡E×àÇOŒP›¸*(êóSºñê4·y‰]¨S#PˆjEUrþõá›åW¨DÔcË(Øñ>§)Wq®Š+<¢{Q§hNF=âñ-Î êåof¹ËÒ\•KÂ[l¯Ý´gQÎÜ«IFãÔ ÜÐiœÌ	À1Š«A* …QJx^Âú�fWk­œAÔÂ=¢q³r@;(·VÉ[”‹Ò�œX¹%"?°üká*V»T…¡;ÍZ¦r{M¦T»�ãâ*9ý, “&*&Dø¹JQ•q$9ŽJU]
+‹kœ�³é¢ 'T.@Cr/k¡¢@æÌ[ˆãEªüåRZÈÃFI©Ÿ�ï[8àÑæ
+/žv_½å½ÚðàüÎ—LÇ›ø€*<}¬Ì‰;b âºÆt##â}CŽ ÞˆKÓ(z¸~º‡»€q¨z'ÿß4³‚!hœ(çqó�ÁÂ='µ oÏOOIWs#œÇ¿¦ËYºúœôcÇWðä_>€ŒQ‹\^$O4$R wa-˜G=H'Jo7Ã<
+V!LíT“t–}5µZCkbÞCtZä®Vê>2»—ø›P¹�ìÀ³æ©Ô£ªçÔ˜w¬
+�ýÎDÄ'®¬ñ9¸“¦®*®^Ÿ3‘¸ÙuªšÙ¥�9>9ïN& ÃjÈP*ßÓ_ÄÄÈÝ\Ub*±ËJûò‹˜Ãw+i÷ª4…¯ò1‹:ûÓ§&�ï¦¸;tíI]¿ ×ØG”—1TÂ›ãúª—1–Ÿ�­ø8ˆÃÉ€KP`ª{,(a_Æ¾¢ë°è@mpp@¹5â€º;8³–`w)Àus@^aá¬ÚÇ�°¡¯Ê¾Ï”¶m/çqh—Ðf:D)¢.�•Þ´aA‰%`3(l¾z”˜k(æ+üYy¾³ð”•Ø¸¥O™M¢�›_U›€r8V’ïW®yÇ-ð(Q´�‰ÝI�¬\ëÂ~:·ë~ÌÞÿNy„¯ÿfy‘È/s†9Ì@3Ÿ1êD¤ó¨§å‘®ÊämmnCÐQ6íIÓ£\N»Iy÷áŒàijWk GÄŸß‘wjÆ¬:5«Žy,“Ê…œVý¼'´	ªÂx9¯«ê˜	Í®€UìLI´7ŠK8X;ê•G(FçW1ñEHFfQÕëhÛ„Êí9¨ŠÉ¯÷8Ùß�Š+�sœÞmá‘-E�z# Ä}C¯z	'ñ”t•v»6¢xqv Gp´â+Gþß–y"ÿb ç [P•8€ ŽÞƒÁÞó&ª†_áÂ¨"áë\-}AêŒÞ˜Y~mæI|Lô3¸:ƒ•èyš>ò÷¢Ô¸åË&§¥ã*ò�¢¦ï+±Ý+]œ€ÓT Ý%S?¢Ó�T×ÂC'ðøª2+®
+ÚyA‡£d	ÊD¡Mk—ilÅ~èR|QIÿ¯œ¡ÃvÄ¼¨êÓªŸ#Zž'ÆäÁ4B3LPUPŽ£LfÔú­¸tÆsñ.b¶éqÌ× ÊÄ¤
+ {¾\•;3ò-êf:ðq€¿–û^‘÷ÈÙ%˜øØ’î—-¾ãŒüûK}>¡ßlŒ“ÓÓMò¾G€P|`˜€Å«¬˜ô9�€¿ygf#C@O‚’áî¥ÙNé
+îò4Ièù,#ˆªçäKÒ(Æ‘Ÿ_”zÁrí_Å¯F9raêŽÕ(=~(æùÆ@.Œšà'B+íÛºkÙÛúNiwïðì]•ËXÐÛœÉpÐó‡*D�p}C”³*ãœŽ¹2«v½ÉUnQ<[5‰É9€ÝÌÚ?F
+¤ ¡˜[¯´IVœq�'ÄtÕãYµ�Ed�9õÊ2pv#F,^$C†=ƒãï… áÙs]ÝÆõ\xÚeF±:TùzƒŸI¡ÓD¿ÿ~¬Nd6a´Vü0#È\3¯t�'¥EÔO]7„çõ"¤öõÖv"+1‚‰ÌjCðÛ±{1ÙL@ÄÕ ¦.s	ðbÎ+òŽ.Q’`Æ+"ß�|ë¹#{•ÙU<Ê¿.Ò†"3�ÛaÅq_ÅîîG¿¡"h*¨G#û#âg€ #Â	vän00ÏhÎmXt�šO2½ia¡(ßi'˜SË!¬ÜY0g‘™
+8sDvñB¤Cv�æýÃ�Èÿfy‘
+!ØÄÌÑ.ÕË¨A…™ÝICåW¨dÌ8d/
+tÎ­÷£Ñ¹£Äµx‡Š£Íš^óÏs�Í0ÕM«‚û€üòyr•›)ôtf­_-UêŒš'˜‘Ò£w-£LÞ¿üq{x¾bV—ü:Ž€›ËNˆ˜ÔÊab^ó "¨WZë®93¼Â¼gþÈ"çï§ºº_23q£¼²çiŒì Ê�wÑoF(# ÷Øá\�ºHÙ.¸:3OY�ëøIqcÜU9|-Ê¯€$­£.LÁ/Œˆéçå*1À<-�RoîÞÉ�ìq{f?Asw43º·I
+ã$â1ñs'³‘8¼ø°4ìÜÔTBýÞ&¥AÛE±†�Í2ë•cò!ÊÍ%`42Ë	(Š.QÑr¿ùúÈÁËd½U^ÿJ<ÞalTz„ž,ªÒTé	EHOÕ+du`ÀÏÃªW±—ÒÊú€Œ8A¼é|||”-¶Ç8ïý2åeÇjm ,.¨tŒˆï5Wƒ‰k€-\¶óRûËÓä‹jÞ:¦Ï”!M×]Zë¡Yãž÷Øü×·Ý0!è1üñ‹R/Üvº…¾uWh£vÚei,¢¥i<ÄOM×Ñ±D²ÆzRŠ}3G¸#hØ$º,M¤ŸOO73ˆç¥v@!§1g§æR‡óS'œÄ³Ò½8P€8É9©9i-Íàˆhßb0ÊO?oj˜¶"Bgp“] ’žw–N¢]
+·ÅC šMQÃQ/¿›ÛZìéŸ†9ª‚n½ã`ÅÞª�Sƒ1
+ŽbR�‰HŸVÅÿUè·2ÖúÅÔêÌ®S}V�:½;cµV«ßª5Ð(A`q¸5>Þs•C&Iÿ*±—©Åã\œ†0“1Æ†àž[±0™W~ØØ¼ˆ¤à¨òVrÆ—¯z³'V5•(ŠUÐ%8Ù¢äCÏSç—Šì	mˆ‹b¹²Ìv¦6…Þ—ùƒ:Â¨»ïÒa¢p8\Òlå*îg…†{ bÕOÙÁ·Î^¿œdÆT0s…IºÙ<þãe¶€\ü
+EÇ ‰»Weùn‘É•�¼v1�×k}uw,Ðb-|Ly£�ˆäÁ[”Ø[ =MGû¨¸À�G|Ä9ö(ß?ˆôë¿S^$Ò”Ë¿Á4C¬¦×<1
+¢UÎG®™Æ*ò>crÞ�ÊizD„Šã™º€G¦T»œÙåJñ8ˆ0Ú³VÛ
+¿ž]·b þø G™6"³§V¿pv�*3jþètÖ/’®bp§£ÚL¹ÓÚ9w\Û›;b+¹ié¤¼{@ö9u³ Ä¾e7Ò€�åÞ@
+˜ç ç¸"¤ãÕ�¹{KlC72¥vù€ýnÊ¬ò6Ÿ’ÖwÝ[â³ÅÏàÜ!Ô(sD®ºê Ë©Ü†2GKƒq(±¨­j4ã+µ ‹o¸Pg1Å]Í
+¨EZ¦GQ5NFÃã¶h'ô~®pzjŠ—„K…–ÆyÁiBí»\™œ—Úà]7eV<TâkWÆ²‚Í�¯ú×Ž¯ UÀš¤ƒx)Ÿþ|ëúAÃ|ezIU.F‡ˆ5b"Š³¿ƒ¡Wì
+ºqRÞÝh]ÌŽÈ0ƒãKå"m¨uAWà×s0­ì¹®³Iš,Ú‚ÚGE‰ÈŒ “éIl\lœ5\9€_¾åc”iNÏOíÿìÈ¶Ï·8öüññ½^WfæÍ™Õ8ŒØ
+4íÈ%:‡NVLïL0ÎÛˆa\ø–Ïb}ï¯ÄÆ/šeÞÇ—qÏµ=,àRt¸˜ *ýÆÀ<'µd|1x8^?Ýõ—t‰ó;¼~{‡–ÖµA¹€á[X¼üé§Ÿ%;«ÞP¯³a5Ñ«<>>&�\ `AÀ[ôÌ„Êí¹™ë±3ù—)=§^iºi¢ç�PŒö.®qÆ¬Úu˜êœÏä7?þæÜz¥@@¦}äSÔþ)cŠøLVåD-À2@ƒŠª^ƒXyßF­ßˆ„­”œ”wÿ”ª× Ø?>3�™«f˜gž3"L*­ü/Ã×fª3¥é.,æ$OÍ8"LBS8ª^ù×æÔÎÝöîQÍäÙ‡£|çWXJ]DMŒ×XÐx=Ãwû @Ì}ËnPý*JµA{‚±Nû°öv=ðÍx£ãûUÍüMÄ\|óÇUêÎqÅÿ¼G'ðP´D‹`O*ñäSt-Þ9enã«Ò<m¡¾DƒU9
+¼Š0aï¨bð�³‡¼8Ã¥�U/}Â…ÔM½«�ŽàØw5IA}É·¶œ<r„9*{ÂQ¾89{öìüýþ�;wî÷Õž£yÑ«Á¡ý)}\ÅG™ÃL!&áä*ÍøÌ$Wá¿˜ }WþåˆÀ©õœG0HEf1ƒÑ¢LòYµ�CyN¨\ç+uŸ^ã$É~Ÿ…?K“òt‚¸6³öOÀD\µŠåý	¯�Ë"õÊO¿gdjµÆ´T}"~~/V±‰@ãFujˆ¨Ú#kóI0Zûìß"5´_±ß„oÈ>ò…˜ó¡iæeUÂý8ãúœ”.Â`6k+ê¥7¯x1n&²0¡Æ±¥ïîÊ�Q³®þp‹(ð"¹ æÒ�ª›k‚ÎçQªüÅbâb–ó-¿’;ó"z½�¯ŸîDß”xIAâHj¯m™ý®À	rE_éøÀOºG­Þ4ÒÔs�$Úh	d�E™{�… ­õŠ7I×Þ
+:g%#ˆÓ=&w ýF?›äç�ŒFšZ­Ñˆì™Œõä*·ã¢�ñ\BÇV»Ðdž Ï§U?»_��@)¡:¿ªˆ÷}Ú‚|© 8½×‹¨6|Þ."&”LŸ€GXtÏ~ï‰C't~eÈ=+Úßøð|pp‹E=î2ð¶•§d®<?r#e_�®Ð~î¸k2óèazž1»;¨ÚAµ³émYý>e¿vJÎðŠ7£ÃWøz§¤k®É,TrÍHïc£ êÙénvŸœš4N}¹wˆhŒ(`Bµ;_ �ç/bætRÒ„¼¤7M¢Î¸ˆèøc—Ëìtú{ZÜ•^T~5_Ñí*­x1vÈÄ¼1T0&'VnY¨µŒá¡;Â©ÁVô	&vc°!Ÿù}„ô(Xî1gJbÙjïË%�WÐÔÊlÄæéî
+}yÍ²ï’mä"aLŠì¨û]™O°X°dfl??uÔzõ3Ý~´_üEk¼Ð*�ÏA1;•òIÖº�èàaÙL*‡¿Êƒnc6*ö…(·kœÙËªeß%éÆî·s7†Y�/¾žr:bÅUé¥åômÕºîsÞVè¡ªï™K‡6àï÷ˆnsNçtÕ1ßºpü H�ü’‰j*!<¾âÕ—‰GpÙ‚a®Ù- ý,vc�	ÎÃG‚ìñÛ®‡ÊúÈ-ýŽ7ØŠ9ÿô!’ip”ïDüñ‡'ýš?þ¯ýëï«=Gó¢W£ÈKù—�´1‘Sü$Óå©…‘§f×©Œ2‹�ßiÕÏ
+U%ÿŽeJ éœzåˆXƒY›Vçb'£BíK"òXÈÅÕëÏ®›‡·ˆÛˆkÉ½LäRTõº`]_²Lq�ÓŸþ]ä
+æ�”wßâ_'®YTõZä�R/AKÍzº§ÊWvÄï”ù ÁÔu¡ÀEj¯õŸ+S±B% ¢yt#þH“4¤aê‰ÍŒêž_¼Ýˆ§ ¡Úˆœ\)Õ[ñ5ÐÆvˆpF”ùo4ðý%v $Å>º‚Ë¢
+Ð0·fÞ…ñh ÍR—3Ó(^lòÓÃ8,æšSâ|€ÄqoSâ’ "Ÿé|nj…N¶_Ã_Z(Â´§îÎ|r¸"0!†™o±bÖtÂ%¾ÄŠîaË1$G×“’¢^®1Ê£rÆ+ªðPo`ù×ÇUì52{šH$¦*ê¦‡2éžœRõ*…÷ÕÇg½8¡r›áŠû>”¤+¶«Çw&åMÿcQÐiôv¬ÏÛ$¢œÅ0ñ\(aú„¿¸�XI—âÑà<þ6ýá”t5Ø„ëíZŒ}¢¢TEÞdDi+ ó=~Hÿ3Œ/$wïÓ{Klk”zóÕ5™ùr*ße/LÝ8ºî²4žŸœ—ÚskìÜÏ©=ó„Þæâ´�»ð™·!¿TµëàtÕ.Øþ
+“+3[º•Ù—æ`Ç ‰ªôåÞU]òÊæ{ØÉò ßôšFô0‘£©Õ2d€ v'ÿñ9õÊƒ•óšãý9¡˜	?7˜�sgÕ®7÷ØøžˆêÌÚ?›QóÁbÔý=±p$n¿˜S¯ÒŠ�£U—iUÿrïŽÌ™DS#ºÑUÛXq_÷ÆîÀkZk}ˆ¡—nÎ¼ªù9Fg0'FÐ�®ê„#Yµ>÷ÇÒÁo>.îòÆ¤ëú^²®ûq»§wY3­Åëão/rKFì–ŠÇ­t Ó%v Ù4€9Ã,B`{¨Æ�6
+·,·Æi˜^©Sô±â|Í4ë[v£Š^ŒŠÜ‘Z¶Ý¦½Â7Á¾áÙsºh5U;>4ƒJ ·®ãÁEàïL¼Ì˜r>8Û28@°â¾3E çpÜñ~\!¶Y³ž6	<’Âd“Ÿ!EÇº–Þ K…»×QÍ|@òÃÿ�yÌ1Ç¼ÿþûäÝwß-S¦Ì÷Õž£y…ƒŸ3Í‰1é}…ñ/rÙÐ¡ãGàY(	n6ÂhèDÆ§T½wcbå6|“;Tß- åÔjŽÎ†S‰D£xµŸum,«V»³ž[ïGÀe”R�dóÓç›1©¨á:?�œ4ä«™µ®‚†�‘}lcn¡%ÁI|•3#�1ÉAÚÌœta÷v%ÆÞ£¬:ªJ è¶à(UœË^—YŒJDI"N@£º–n~©¿á_ä¡èë8 WgæåÇbé#"²Ž@]!¸Ô8á¶Ì[JºÄÓüGQcc+áIn­4ù`b¹3³QÕx7Ò*F¯»¢ÛyßL°}o�( (%\Kª€ràoýt7—ÕS|Âí@µê=Ô5o“”¢  Ù(‰Xb/¶+� e²Ûõ}ÐØ~;ý¿GäÂìéèC€2£‚´¤#Äªe>ŸVý‚HéÊÅ|@/a{xïlDv±ÙÈ9�À„QjöÂ1¹ƒû(Ñz¬@–	om^b7h•£K~ƒš¥césÚ�I ê9VêÂô½D?ã **xš6|·à¶Ü¦µk\6%€tåé(Lš3Òm&R0	<]�&§“±@¸©(Ó?ñÑË·fÞà"âNŸÉ™rK?¢%è¼{®|Fº•»Ÿ›Ú¨(äTeJv==ÝtEšÆù
+7ºA�[Œ[–ø§’™ÐR›P4 /²eÔËˆÌÁÂR¤´?÷žlZÊWírŠÎdb«*ÖL,=FA‘fí, ˜(à£
+?5Sâ[0QÑS…æ8EgÔúÕÄÊ­ÇVì?«NeÜwU±E½ð¢Ç'Œ­Ø�ávöëôšÿ†/‰ðZ·«ÎæViõwx4šÊ 1dHOá¬%úŠV–ûésOø)Ÿ¾E|èöv
+Mñ~ókdÜÅk»UßÛñ˜3z½6ü‚MÝ�ýpZÏ×ÍúÚ¯;+ˆ™Ù®¤—+]F*Øb•³‘¦â‹iu®ÒgV IË5–Ù«¦Î§\�C¡œò�yÿx”v�=P•¯zÆ”Qï5î‹!ýy'ÑÒ2ˆøžü;"{V'íZ"2æ‹sŒ+ðÚ'Pxkwi—á£åv–Í�Ùí˜X.Å3v=È«;;¦-Ò.Æ,Î<BˆQaöQ¾8Y«V­3füý‘éÓ§×¬YóûjÏÑ¼´M<zBåöè=>`î,ÿÆ”j—�Èžn ÄÄ¸EÆ'W¹ÛÍéœG³dÚð-5¢Ë¿Žù<Ÿµ~1»NÐsv�jÛ{Q¿OFœ^U¾�{¬YAþÜDÞÒ3«ö±ã*>†<»n%¾Å9ÅB6±v”Ñ‰";¹È”ªWƒÑ`.Êá±ÒÛQ˜v4Í„¤Áàdò# B‹{•À_Èµ2æ¦ß˜y]Š8ó·q œš¨âÛ#ín)Ú[Áüt<è<~zKæ¼BôÆá*³0ç‚YA‘ZbïýQÝãKsÁ¡F\,õ~K¨åÕÂ²](ä[#ÆcŠ¥az(DÓî{^jøÚ‚qRð\p0ñpñª¸HãÔ ;¸z^¬t]i7Â—^�r“Ñ<¬ÜÎa?ÑUqíƒŠm�
+û¾-]´ùá0z×pB¬,åŒŽ@ˆœÉ*»1‚„sÆ døíM'ËgÜØE‘ŠÄþ÷Â”iŸ•†)Ž²âŽFÐ®Á�– sPt�Bt>º!³eVâƒò Õüâ¥öVû´þÌÔ/Oß>‡+‡Æöh�:CZÉoLOÿt6Ñ� 
+ÜÁÃŒ—èæ¶ÈB¸/tõU:þN|}ëÁ26±<Xb³Ë‚ ‹`¢–X—*
++p™é!PÆ=Ü‚ŸžnÁ‘çF®ÃgFÛÆ·À—d]A$õê¢YaMË¿ÊÙá"Ëˆj*­Óªàþ73�ñÓgÔüƒ|ÉK\]«IW©–¤˜¬úU½qàsÿrëÅ˜QXAR¾B6UCd1Ã:2{ŠÊœ�äWª�þÎèÜá ¬èF£„z—HIXå”UKôû«¼�íz+
++Bd0cä¹�`PZ—Ü‡Aßž�äÙ8+ÁÜ£Óèÿ®uvÏì»zXÓØwîXáÛ�×¬ëwÕ[Æ:
+LlšyÑ…Û"Ñ>èh>ëþw^õUAçw™`tH;•'æ¡2ÎÃÛWfÀ6ù‰Î‡î5QFGÍ¦¢CU>ÆBi¹ßz»ÐÄ…Z¼å‡=ŽÙæ*¿zx…ù•ØMç0ô€¶J÷ˆDh—÷%½ôê.®ÄA&=–¯ªy¼é7œësdLn9˜o!Dbåû‡‘­[·AÉ/ôâÿrðûn×äE¯â#0!g½„]„„2?Eç8gd|¥®Ì0NugîÅdE,\?ì70åøã#sŠfÔúÝøJ]Škœ!ö•†Ê¼ëVÎ­WJÉtW©XU‡©Õ.ä5B�Uk²ùœºY³j‡ÏˆøƒÑx‘4@ä<pqô:|zÍ?‰J½-èŒó¢õÀÊMž€(Ì÷hªI¨ÐQ5‡ï¾ñÝ(4�GQã9*ðyŸ;E	‰%è1pGKF;P�
+QûÅ‹@Q»T}ÇC¤2˜?ã3z†k¢:8‡[€¶h '˜Ø�EEXÕd�Òã82èùë3OkÝµ3Ø§…Ä`†áš 'ºEj€&88ÎãC½ã‚:²¶~‚DÝÊ¼¹£ë�tPq(	èS¾Øf¦£¼(ä-BD[‹¨#�ã¯½!¾Ú«Ð�YØíô¤K!{I!*îeO:QV¨8òèW6ÂæÁP4†â"_Ìu!¹{›X…£7vt�4±ö¦µäq°p‡ç/~úé§ç?�ÓÇ[Ñ¼ËÑÆr-qÚŠò½=³ÎrÎá‚/¦L˜*"ë-ÎdìœÊÇÃ¢Àå-ÙÑáNSÚé3Ø$Ø*XGØ'f”Y2ÆuÐà$V†Ie¹0Z:¦+tÿ£kÎý*@ÛUÔBl-æ$½�	AGÑ«,›Ûß¬ˆÒÄÊ-™Ø8ìC²^“;H!:ý1™á®95¹Ê­¢ˆo&¶ÒÁS«yQÐÎäLF¾&W¹a±y3»nWCœ'Tn£P«û‡WX0¬ÂbÌKT(ÇóŽÚ‚pD~Ÿ}Iž‚)„]aê &¡©ŸN¢C00°):™¹Íƒ{sœÒK<> Ú§þ§­Ë}M‡Lï¿ò±Ÿ|5úÁ·†üì]0Ô…ÈMØÛ=rê±jö7÷9ÑÒ¬PÜÝÔ=´Š9&ŸUa’•Ã	•æ)RpÑŒ::y×Æå7¢ëß?¶b/Ýb³ZÔýkxdæpÇCdSÞIÔrëF1ïâR ™ŠºF 6“™¯¼¢‹,Ð<0NC=já×UYÍŽ‘)9·ð�ràŽÁn'†=1Ñ}F?3¬G
+‘YŽòýÃ�È}ûö5oÞü˜cŽqÒZ¶lùpüWy™aÞÌK(À)U¯}´,ó§iÕÏaF1µœÑØ±
+�ù«7Öqå�å©Õš0a&åÝ\N«~.‹Œ€[³ëT�øó¨Xº
+]Š?ÚN«^@Äúå
+r?/‰-È*MgÔú>&Vî´êg1£¦Vk¬ø„;çÿ8"÷ \ÕÇytjõñ4™u 1f³X±�ÐrnRåW ….pì°O„�ioÞ6¼	ŒR 5Û,³Þ¬­ÈÁG•Cˆ¶´î×ºˆ@�RùZ•2F‰ØåŒ?mF@›—#H`WsIüÕàÛ‰fàR]Õ 95àfPß ™QÑ P‹›‰NF9sèlÌUÚÈsü‹–æ:œ`&X-9âÿnáó)é*-GáÈ*ü�ƒh~.…yÓN"¡ø¥w£Š�B­š¾�‚Âqd{¡x`/Tîà¬Ä]ßK6RÏèÕì)(p† -!<Óoéd¥ÕìùË¥@çw‹’O»´·Kù˜û¸‚sêíÌ¢`õÈ[›fVˆëìI¼H/6�„áÓý5]á5dF„ç¢ýØ'ôƒÕ0õDo{w�Ñ±£Çø2â‡‰pí´*¨f+ž8¨ÚLÁBt¸=Î¡?é[1mÁÎ¢)ßõ°\Øm_?Ý¥R#‘…z~*<-5Ås?+ÝÃ±axî¢0­õ(îO—°ô.¤²í6uŠà¨OGçS:üÚ(Pa†hwÑ¾q‚b¿Çy/Ç\ÅŸBE‹ô�é5ÿH?kw£—I¹'åÝ…ø`|jw£	 Xbõ`ˆ^õúÈFF&˜Èi „YïS1Ä9¸]nÓãp”W;¥áÐ?Ø…A°ÿ<}KïÑ?ç¦ÖtFËYé¾“S“óSGŒ‡ÓSÓF©·B¯ÛÓ]�S:„! ®Ë,½÷Ä“;¿1éþu#oÚ0àþEEÝWOh¿†wû²;‡”Ù�cÐ]vÊ¹ÈƒE23;Ê¨CT;+ÁÖ@é(ü;ÓõÓÃ m¾Ü‘«Ì:Úeàé:ÀÊÐpž®K”q\ÎºÒ¨o‡=ÌÅ•Õ¸Kˆù‰³EL?Ëo¸¶Šòåjôc-~××-½›s˜r&°5Döm]Çi~ŽŽÊ?&wˆbh¿8Bˆ–µø(ß?ˆôk×®]«ôâÃ÷Ý–ÿø‹^�]§ªª§½‚xŠ	ê	¬/eÚ®È@¢¨Ý–=SVª£HAÌ¡YK]Re>.\úÛ$þ–6EUoT¶]×EÇFÄN¥\KÄ1/ªzí3ÿ’T	è®µ~;9/h–ÅÓØ|šôœ1*·�­–š¿Ç¯,ªz½‹ÐY{ð+­ýCµË¶–FýZéí¨f²	H¶Ûe%EŸ®cJ»Ì"ÚsÏ‚ÉÏ´×rè*4'ÎBŠ, �=ÿó¥ÿyãÜi-ÖU@«|	ŠÑib®TèªÍ¨SÇð•ªL~à0¿›3¯ò/ª_	ýC“.H]šeÞ�Ö+R-q‘s AIZ‹v/\,{þ¶ÌÛŠ°}‹ÖÒ$d©ÔºîUŒ
+rio¡��cØÇ	.Dë½±P~øXê êÈcLQ×Ž‹ÀqÔZZ>#vøBÔ“aDöÌñ•º)(h�|öUbªŒXMz’VÙÒn5#¶¸f´¼ŒýÍƒfaƒÖ“'á'*ÒfÊ¹©U£ÔG…Nº6Hè%§›aÜ•ÙÈXx›>¤“9ÂÃº®™ª0ï%9ÎÈ^�ææâ¸S¶Âzî,Ò!\Á^$}ãÉâ’ã¹‹ÓõY¾âút>· 1óƒæ�e„›¥ÇÑ{„‚ñ[abd	1"6ßab=ëL&v‚Š‘Eé+$ˆyˆ	ÊÌTôÔ—¢¨ÂÁiÕh3wè¨œIXsêæ"ztòÈì" éàÀqZõóÁÁa*ežŽÌ)- îg;ä…«Í¨ùŒÉYµ�•3fzÍ?ã‡£Bœ,>ÉÈ…tò‚'msÔ–©äÕÖQ½Ç£1X‚È–@$ïŒtdýtÏ™éðQ¥p>ýKºŒo/J=§h Ë‰¨È““¾r–¨K¬FbòvÉÈÛe|6Sg*B&âE9�¯¼B_1X¸ä<Hß`²}ŠV9DÖ&™è>7…8�cÛÉ¦>n¦jWÅ–š�ÓÚÇBèWBwÈ�Ù%ß®MÉíîA4Ö$<H¨6vIš^ã'Ž_uéœvÒÜEAA_8„Ÿ£
+ºÇþ¢ñ
+ç 5ÈÈÿXˆäµvíÚo¾ùæûnÅQ½bh‚×b•Ñ7M©Iã{—ù¬¹õ|(ªr>Ú˜Ü�H3_¯oÙ…Œ§‹”,2—þ4ðQE´ñ.#QKU•‘ñ‘ÙS‘â%¿–ò©Õ)ö¯@ç¼ã‚d`fíŸ °Q(
+S6šS¯ü¬:5±™'W¹}\¥îØ�æšUpä6@yLî`—xVTÛ‡ÌÏ¢*7‹qñ«ˆ%ƒÂ‚DØÚ”ò|�yŽöÃèõ(pÐ±·fÞ2G¥U(ÿvŒÅ±H·+G v–n´e{%,ðÛ|ÙÞ�•Þi^s¤[j0�Á&kc‰¾-o¯«&™˜”æ¡@Db°µìµGC4öE©—<”íxXè"m�½Õ4óm»*Í�ö^ÀE{F;­‚zÇêz«Ìï@ÌBU0ì*‹µŒ\£>_ûÎËl„#×èÆ.?òÓZñ6ãË,SÅ½§µãóÈØMÌ0øŒœ +´I•þ¶<rÊbƒiÍðZ.Àt8�˜žD•µïì3žËªÛ@	=QªÎp÷l¯ˆÒ7f^t^F+¹�ŠÞà€ILŽ|­f›dûÁ(Ý¡ý¬­Âíx�Gez„a`i`á(Íg#¶àK/i!}³WÝÏKm€rú\æSU:äCf>¯CŒpð/O›¤ÁŒÍãñ
+C~©°‘°µ\;Òk¼±{%ÞIâ€`�h¹f9¸É¸à9"PZ5]‰m‰5ÈÌC™ä8òC£T
+Ç¯�Õï¬µ¥¸^qk¿WCX¸2V¨v3ó/Ö×çÀŠäbyñœ4‡¹Ü´Øõc|è˜Þ
+.2ÓÏb`U5½�—Ùðd£Ô÷—éøsÒC×ežÂë?/µÃ†òâ4”ã’šÝå©Þ*€r#ÃUQ4
+ïcÉ(=6‚šòD†61y€Kþíp(“Ô‹3Þ×î«7{¼Î™¯ÚvŠùùS�ç²£‡úê¤\KñùÐíŸxEè ÷xù7”#ü–}ü˜±ªb¦ÞØ®œ©Xs.��­‹ˆôë!r ¦
+ã4æ¥P);™~_-ÔDc
+•;‰ c@ÉˆwBj×þeÔ×Bä�rÏåû‘%K–|ûí·¿ïVÕËy‘ªŒ¼4dVŒÎ†Ìö8f÷¸J�0ÐXª*25Ø¡tÞ;6»GRåË?ŸRõJÜÆâ§M©v°8«N­‰•[¡Š•f~öÌZÇ|Ø�Ž¯jµ¾zóüã	~Îâ3(·sJÕkŠkœ‚˜óó`ì©W*¶AEØ5¼Â&y×}�ÙÓ¢\]ö)mœÜ%<Sº“˜ z*w}+-ú1òÈ4æSaG~Û)N•™ŒÓ¡²ƒ;�4}x1Ö&®g~»’ÖQtÒeõü.TèK'a+ráò@ÂšvmP�´îªµ¬ïÀîŽBV9àï´Ëÿ1ªÝÎ™·ŠmŒPù‰¶ o´�Xìðk£šPÑ ‹&¿=óZ¨­ä×.­ùCÚKíAh™í^t’	½[¬\‘mÍ·"¢ÜŠJá|Z®0à�XþŽ…Pnã:4Ì£QÙa']­H‰OGfOa¬M°ÉÔ5”‡þžŠª|a–~6óO¡hÍhX³Ìz�¯eü,øíäÐ�þâmx« ô‰d¨¬A]7Hù8€ô-'t?&ˆ_l`ø‘y4ÅSmñVW‡Xãz–yí—gŽ½úÇ(8€¿�pZ(îôúÌÒüè·Ý¶�¦G±CPò8�™9uñvÆ…»7UÀ­V _ŽPŸ4‡K]˜º¹l%á©yçk“‹skîÎÄvÓÛN=€Å	b7]ÎW‡@9“\YKQqlnäbr•;@LñëÎ óñC™äH25)ïA`‘œ€=3£Ö¿ð•	q¾¸ÃŠÕêâ†QX¤üË§÷ ”^Ø!r—=\Ê“>aZÒáŒÚéé&Œ|gžúüTxNj‰ÛX?Ý…÷MÏ0K/Mc¦žÌIìœóSG<Î¤�n¼_EÆ‘5ÆH;Åo2cmÞÐáÌŸ+Ó4Zâ0`oÝ:ÁŸñrA·.1…öófv=^f“�t;u2­+½ÛÑ¤LÃ«ãÖè^W6÷Ò7S}…‘É\õeUYõoZßëE	Éïw¦,`Ú# ‡kÓðÁ4z^î¤-f’ÄTw›]æÛuh-Ú�‰�µsäy‘CÊ/?Ê÷ÿBä?ã¥J¯ÍZÆ°sÌ�‰y©0ÁË€žàØŠ}&Vn-’ó(É·£rÆ¢?'æ5.à1·ÂnãŒš' ÑÓkžˆ:Qã*öR…úfEQïøD¼T ‘ß¯3ký¡žYûÇÊà˜0½æÁÄ¨pWí2Z2¶bÿyÇ¦Iyw3·Ño¾êÝÄªeÒ¿Ü;C²žï•ÓW2uAÌPþ2>]Ö¾ƒ£%z§��âkýP‰Ï3Ÿ[Ë©tv¡×N;4$yiUòà.�£]¿=€#gºxq‡ˆ_ÙQ`Z 6¥d†àpYÇÎ¦+)´Ywïm{A£=4ƒrrDþ”Ø¬½�*æ»H¹Û/ò™Æ(sªØÔ=^F?Þ3Øü®>@Û:)AI^!ËxC&·,�>q­EÇˆÐãM%Š­/•¸÷”˜L^e°p[ YÛó¦uPn�ìê¯yjô•ã!é
+;×ŽÆQòËV-ln»ì6º½…8[\Ôc ]Šî½4�Æ“Ið¬Óö¹K·((ô[×Jæ¶]ÇÃr5F–¡¤—:([ŸQpêœ½×Î‘9?_�¯ŠðÙÉ(Ó!œ¿Lñè†+Á½Àë•5�ºF‡ã�6N”$ò&�¤ç<\<M®¦,×bæ	.0 ©…zæÌ.»Küu¬¬ës}fiG¥~ \îá1¹=£‚Ï³ìFúÄVa!]=¥êÕÌðñ•:÷)³)Ä$ïÁðËlRÿ¦zO3U{$fá�¬g‡W˜�ÝöEK…y3ký‘äc+öLùvZõ -³Bq›[ÆZ\pÓ*Á.†›>tµ2a òÊ4�n§Óx@Ñ@Â;35«Ÿî"Ê¿¦+1èpóÔtp9¯xÑ¿¤±ëNJ�®ÉÌ?L©Á4¸QÁ«tÈõ½‹Ï®i®²à[˜ÌÞÁï ‰ÊWÌU?2ÿ:�B‰p0_³+êÅ¨ü«÷Uñ9‚W;*qã0…Ž6öÒÕ|kžF¥3ïPeÏÝ2B«8ƒßÕ»œYr�í·!?dö€ËÓpòýŠqu1V:MNëü“J?q¶ö¦÷v<´ÉkÙ9bˆ|é(ßÿ‘ÿŒ½Ü²‚|÷Å8:g#[Tõ†q•ºáH*®µ›Ê®m™=UQ¦w�ŒBÒù|(®qæÀò«�6,Øé5Nž#n›Yû¸?IÈ8—Å1ÄmäÊJ‡<WÌçA7«v�q•ºã'2'‘n\ÑQ9“˜œfzA´GçŒžZ­ñøJ]PÝ*w@áL¨ÔÑk†èÑL=�ÞF? R¨Ô©ÛÖ!Ý˜¯ÚúFR ÄØ¿CëòoÛ(¹û�—ÅÚªÞ"o;‰¶·‘D¤ T¬ø6Wÿ1OˆA§‹`T,ÇQp'dT_Ïûû(m&·@ÄlÐ»9™#Î‰à�¥�Ç„:BùÈÛ]-ín£ÒƒBVìoó(ƒ¢Ö‚äÞ³³°UÐYËJ|ãM/ÛGæiU¾ön$�rXÇ9SîÆ‡:3‚ÕÃ©)ÿú°
+Op‚Bñ¿°`6iQ_¾ê§^šƒ«K8øÏÓ¡Û2PHRýè/[ùçJÚ‰˜ýÌR‹ÏÈg@Ÿõš’OoÉ¼�q®²×¯4.ÁLÇÒQ´ÁÔÜ‚¯
+Þï¨$ç›D•L%˜0¦8þC²^àé8(Gi«¢”?Sí�…âü€Ö‚Øg–!Àz1šß�YîÍM:™�P©,à£XÉªŠrðÜ(îÂS€�£å«�¢žïÂ`­Ùm.§èÚÁõ‹uÂÒ»ÅšXŒ9<{.c7:gÔ¤ Ù™îúž@§²«î™S$÷°ë´êç;3‹Ï¢Ø}U ;GXœõ‚H•ƒ§Î†À˜D~[9°1!ÍQÃS+ød'RfÍq)ÞdÇ£Çp-TU+ë†ýpjºüc:í´tCýtçYé¾SÒUg¤Ûæ/UdòÅ•Í`è Œ=Õ¾‰ø7ÌŒ†©×Ä|€v”¹èT_lÆ‚îõ¼u€§±ºk¿QÒŒ‹íJÚjý¹Pî-ÇD©ÿ?Rêb„ÜŠÒŸKÉŒÎ¡·{*œ›iÃ”vÈzd€–üÆ	ÔþlÂóN‡"t»])<Ô˜aÉ.ZGOš©Ã»	27;¤M‚°LeeÍ@!D*2ÿ¨Þ?ˆÜ·oßßÿ[TTôå—_~_�ù‡¼Té£lò2â9«v=¼HqæŒ7‚ì˜:ü»1¹C•_=4ë±Ï½>­úY8›XÂæÒ.'åÝ?§nÎ,®ñW||¥Â	•
+&Tn;¥êU£rÆ`ú"òQy0‹Vs|Ñ/Žêä*·›§‘Ïè­Ü><µZC”†wÏ'VnÉôs,­nW�ñUªÈ¶ôñC›,ÞôÊ›²çðD>A.U—ˆµš»ÖˆÎt€`‡º`2ß�Ù¬l÷·ÄÁût—Ùa«Ò™^eu´¹,ÉÝN¶²Ô €@9·6Û�W ÐÂ™_;ì]�äy¨/4¡�o�,È¾ æ­™·ÌÂ”Ð<Çé�XàN:hšyÉ•‚yGf
+È¾ó6¨}aìrÄ¾RÔôÑ2”yêO""èå¢”\Ï·`(èæ5Ûüp…V;¸—qÑÃ°s~™W½ÚZûj+~<eI,¢U(°F,Ýhaédæ©4U0»”
+ÖÝâbg§ø9Ù�¥wß£üS{ôÏ«!ø[p¡Ë8qhP§ƒìš[\Nº“šÁ¯5å#ìæ8nÑðì9ù1ô›/�™÷Õ;‰€p©µÜ`+U)´~à6	ív]‹¿ª²ÄçzÞ9>Œšë;xËÕ½­pŽ]Zñ²æ§Ãu*³'räs‡GØI”sÚ ô„·1ö8®©µ ¾¤"¬¶¨òéWc+ö{<¸âóùW[ó˜öŒ/'«xÙs®n†A‹UÉÅ¨³þ`Má²8bž%úÖ†¦KY#¨}óüÓ×g–5J�+ØæƒÓÓMþ‹‘p~*8=Ý|fºã/éÒ_¦_áKªìõ]LË¹ÅOÒ'@'Þ=ÆfSZ$�cqKéó&i â¦ ¸Ü…9Üºä>æ‰i�Eéðž·#ŽãžQüÊ™V.£XÓÝü�IË_ñ¦~¤Ø³Ï:Éþ”èíFšœƒ©Îy“®ó:ª“1¹>€¯�>ž½�By;É¾5tæ‘ÝÎáFŒ ïÕQ‚ïLZÞAÍ «öÎìwdÞ—•þ=lóŒ[ÿ�‚Èßýîw+W®ü¾[ñ�|)eu(‰Ãˆì€zZ\íÅLPxÌ`„„BèøjzÍ?cÐââa ¡0±cçÇÈ®*ŠÊ’ƒFdÏÆÊš^ã/*�ÝwvÝJc+>>¼Â‚	•�ÈöÓkœ4§n'‹“òîþ�_4çOÌk®[<Œ¢ÆÄæ
+ÜnjµFüÕ¡}±¯œ?%Å²ÄÖZ�‚´½Êš;•™ÉD-!q®¾Z1ÕïÓæZÝÅâ%{Í*i8è,ÊeÄ³Pf$
+Í`¡¢9˜éQ†ë>ùbkA™¾Z·|DÑA]dŽ
+D¤÷�]-¦‹ìpko˜šÆ$ˆ2‘€ÑT¨%2öñ7f–ƒXãª)¹÷ÜDÒqyPËÞýt¢ºÓäóÕíÄÙNÛ\(“ÛµST�œwc!8ÖÈ�1ûVD×g½àGqf¾í�NZPr˜(Ã­*³»ÈköNj„gAË¡Ìñ°:)è]k’O€’hñ<ÎÓÑr¼	ç~žš®S@Èç_ˆÄ¯@çÏÞQ{¸b£ÝÎšý Ý«Õ]‡6›¾Â=ï$~l—•ª¿ßf�éøPÔzÒ‰
+ÆØ_X*2P¼0TÕâR+ÔÂ¬×`AóËÓ$-b?�û#R¦Í8¼¨n¼{®Œg„ãÓ8õWÒë‹<lÇCèì8¥G"~2bw|ò…(evÆZœ6×èp)ÛO•­°g?BOs‡Ñ½ªVÓK±7Oð•€²sãóR+áŸqAÎá_|ÆC±èÃ¹#Ï2:gLß²š=›ëƒ¡LZæ^dFÄ¯ú•}W39XU{ù�¯$ß‚ƒÆnŒ1œÁÂÁ
+µK>ÃæÒ4æäÔäÂôð‰éÜsÒCà)ž£¢Ëke`ÐiéÆ?§øÐ uuü\ñ!/jU>eÐ¥ÜŽŸ0·ÅÍø!“‡ž¡cmÚÑÿfs¥=ŽÎ½ÂýDÆ‘JÐŒ#Ž¼)U™ÁT ÒÏ–DÌ*NÓ£°Ýh»ý€æá¯+fšÓÀÌöX]Í�†aQ såbS¡C8³àÐí¼åmu!ÆÚ½�±^˜IÏ6ÏBäÀrkŽòýC€È»ï¾ûG?úQëÖ­ÿ}�åÿ¢/zC‹¹'Š•µøz8’øeÌ¢q5wÖØŠý=•_7¡r;üÍ¡YË&Vn5:gô˜ÜŠA½`EÞ‹ªÞàÒ½³j×Åˆ�Yë—ˆüŒš' ©Å5þ²ð§‘ƒÉÏ‡W˜ÏÏù;»Nõ¨$›S4TÙÁLåÐ	9c¸¯Úð˜æGdÏÔBk�Ãó€Z©w}&s¾´=Ÿ� ff;-°0o‘42Ž�j‡eå¡UÇ}Þ�rº“ÊQéJþJÊ6|Æ|é[æ¼y#±ù?°ÏªU�mŽÒ’Úc¢]Z”<gªÜØf[ž6nÛÆ¾ÛËèmJ¾gîèVÁV·
+ìPÚÈgfÀÏB;ÞÕ­–õ<H[¥?H–?rÌæ´mo$ÚÞðÚ)V×™]YÑ­_Ú¥Å1zÒ'oÚ÷¢“‚"ˆNs•÷z Í‘bŸë~Ì>:AqSÏ¡Pnâ
+ÀÕæéhÕ°þwŒÎãú|#þÅi¨*‚MOÂ�KÒ(Ÿf+Ãb"=|[„ìÎj$u8báPx-N6{xXÔ»�Å€ý1*”�Vï§Z
+w�»Þ<œ…á¿&v¸bÔˆö4?çRŽzU°q¬0;³¯¥Þ™ho”0.ä­%_{è'+'w_…¶¨ÞãÛ®úàs}.�º“Ì@Ð�Dz×0å"H½ái`¾2e£\¥w+¨’á‹ú,ª¨xÀ%� ˆ¹…ô�˜ª2Bå6X¤#²gˆ¹Ñ.ÿ¤Xâç±*>„S–;bèøè,[¤ÌÚŽeeŒD¤³Kj{éLFÐ)N]ejÞ§4%°;1JÁ6«ÀÄ?§§�RïMg˜uáìôàiÚ‰é|I /ìOé|*/»(õúkº¼Qêƒ9�ý`êŒAç8ß\U¥Þ·gÖ¹|›¶z#zÙV‡\Ëívó™ºô�Õiç¡›}¥#[½ÈÃe5¥e6{:çp6Å¡–Gîâmeª€××Þ t¸»0ô›æŠ²³èüJŸÏlñ4cO¡,ad¤�\HÚÌ“¢ÐœÈ‰a“£+þGA$¯çž{î¿øÅñÇÿüóÏßmù¼DÐMì‘§T½’ùÀŒrÝí¡–€G*œDúxEUoœVý,žw¼†UXè˜:`WÇ�s´·òÆœº¸”ãZGåŒÃN§»7HõAº¡YOÏ¨õ;Ìë_î]æ3ßâÈØK}¼Ì¦‰•[�«ØäEéáœêàf4ŒÒ�÷pwé¡2¨ÊAåW#’”Lmzo›&×:—ÿšÌ<ŽtOá±®n¸Tj$´Ò~j-_ßŠªq'šÊ‹cNÝB\D5–dKìuózy=¥¤¨¶ÒØQª×fßgZí»!;�ÊÃ{.XÈˆž)¼”–ò�Jk=qešvQzßJ+`K•TøÁu™§Äº·ifG@L/¡ …Çïöæ]ûðw8§Ãþ�±2á^*ü�—¼:žnÝA(ô¹sÞÑºkç–ÍÝŽŠæç<…Ø{v4×z&×ä}i¥(Ö÷Tù+˜n¹|ì�+‚yuøCDººC¬ŒíD3óÆA£UX/| X�ŒŽ3DÁÒc^	o­ð$®ìø¯¿Ù›èªH*b÷)ó‰Ç”“LŒîZô�Ší=y=Ö€K“xwÇ�¶Ï@Õ­
+9~»U¥­=.[6©×3ø•}.{«ðÌï)¹yR¿'�Ó‡aã¸ó’ñW¹–k˜f�bwò5kQoA2òµ¸Á¬PŽÒZÔA“\Í�~¦©f%§TÇ¡©ö‹ÄÜ‚, S«]<¶bo3¨ƒ†ˆ*·^úÜþà¬
+[¼§mñ}ÎìªG¼˜ñ P ÓQëŠ<¯­äåêÌ<f ÃÇ4»$�¼<M6ã"Ø$fŒNOM]g¼~ºë¼ÔN‹ÒÅB &þã9©…èèøÊj”`õ=†9qEš¢‚›ok[a�C8ÎôVTÏÁèu”÷Ùc°8ÙÛˆÌs~Kã¯É,°ãÆìrV&¸†P ¸
+%VüP›òßZUïúEÜíCàÙ«±.äÜIm/îà«ã
+-Ô‘Ž¿bbHÜÞi™_Ûhüÿ¿Ý·Ê{Ú¯’—Ÿ{^isóH9Z±‚Žòý�H^{öìÁ‘,UªÔi§�Vÿï^ßw»þ#/‡ëUiŠ&ÈÛC²žå¸ 0�É‚„@£s‡gS«]��M|(ªz-æ&“ª E!oÚÙuó®sÞ%b>¥Ú¥¸“ å°
+‹DàrlÅ>Qà¾Æ© ©Â„žá²*É4Ìåâr�ËIü|r•fÜ‚YªÚâ#Ä‚¸[z>–ÅòUtF? gP×LiG±z[Jµ6Þtò.š¸Ïµ$²	oÅyÄ¦nóê\ËX'ùõ…�ŠþÏÀü^aîc¥·«ªÑ.mp¼íX”3¼+´(N»ÆÊí®êçÃ³gÛACKtÚð�pãÆ·ï§‘3P*0Ú	_ŽÿqÌÉ-™7x{6rÞÓœ[3o8ØE•qk�3å±~akÙÑhž®kììw>šVÙg_sÜ{%"ø›�hGá!v*’•ÞÁD�£–Òæ¯�dê]#d"h
+%›ï¦(Ø›3¯vŒäÐgpTºz~êÄ‹(à9œ~…Ö½1³…snj…nÄµä[Ž7L�`çÓ¼|‡€{ƒŽßÄØ™7¬ƒR¶ém§°¡”¼l3À'‘÷W.–RyüažÊWHHÁ4ðšúÍ¥0–œÖêå:Ù¿âD±EŒ¯=²
+Ÿ÷®ÚKf�{ºè±—º]_¤ÂÐ»pš”2¹’ñ:;5çRÎ[aŒ¼±ƒ·Ó…Ü¸­—f²æ¨-­~xéu“Rù"Æµ/(Ya1¢�é²GºXË4e¾~†>ä`%¿Šœ2›�—áû9)=¤r7åq+o¯;ÓÕEÒ–\§Cû¹ž‘K•ñ ›ø4^˜aONM¦ž8’ààIé¢³Ò=§§›ŸþtJºêÄtÞI©Ñ™év:ØRJÈ³æ¯£Ã™áfˆð§Ì<.Ž.ZøHvŒ17bÂp&#ÂÉÁ`;¼âåSEyn0Lrü7òvî�÷D�qËÌ?Öå¶ìßµTÜ©ZùW«£<�•¬D:KÈ‹®øƒX§è"®¯rZŸ¹4ä£±iYÉiÀ7kWá¤—LÉË8!Dö/»þ(ß?ˆÜ¼yóÅ_œ••uóÍ7ßþw¯ï»]ÿ‘WM¹õS«5Ñ·J�¨ªñOö/·U;ÚàP%��x”#³§dó�Kª ÒrbÞƒýÊ½Vò/³kvFÍ?Ì¨ùû‘9“å„ÎT�úÆ€ T e³êÔ•3V„Š}¢jsÖK\Dž”wŸ¯€¤�Éú°8‡ALZ8­úyÊÃ}³àP¬ˆ¹½æ†ö“�÷•�FÕ}ø„IË¬vj?Y{Å:¢•w¼óºÌbçx	NÁùÛDOºW[!*‡ñ1Z.VËl£ÍN÷+Ðò�¸O£4¹ÅªøÅw£rÆGBeD†oÕFÞÚÍÍ‰WèÅ@»òhHYçˆxüÊQsŽÖk+×†“�j-ŠƒWD†Q¬hv~ÇSàˆu9ÓãHÂ_ÖîK}Ê~Òå�¹i«¹¦vT£ÔP«Ò´»ÚáÏ[N$TA�ý=JïF]{[V)!ë€H‡ÁhÁ°Û�ÂcEihÅ2ôÛ•i†‰.]Š6sü¼ÔmÆpàtð›ŸŽžâ4\-F_ÃŽ§ö.Ý–Y€‘æm@ÙÞ�L»
+Fî6‡‰³Nh´ÃÌÒ^3ë c¦ ªÔð1�àÄpºŒÀ¼‘RýÆ‹Õ�´é,žùE%·‹Óø–nw`0NÓÌ‹“yfdëî9v1óª¸÷«×—™å€d+óËÓDe|t(sª Í§SºÛ5Yœu.Â–Ý~‡9û¹Ó–÷~mïp.$R¦„Êbçì«@Ö¯r&—âä»c¾n®:h“«ÜÙ_ù˜®¦Á­/;c/Ñ'·gÖ¹F‰Wi3ŸUvó-|Cf¹ÖÉ7�—Ú\–Æs&c÷ûôgK›óS¡™ JÐŸñ’4â´t=ˆ‰‘€_idíEÎ<'5ç |¼*Íp9hæaÌ×F©OÃ��Æ»3Ÿˆ>ñ#`T±7€æ¦ºR€ô‹*¼õ)Æ'“qh¥gí�lá¸‹ÖµŒ…ÐoTPf�²¢¢òšÃº´Iœ ¶-X”	ãÕ4ó2�,Çv­ÉÉh„Åóãp¦˜ò£#¯Óó\üûlÙœL§Yt‰´ÓÝŽ`çÃBd¿²ïåû‘£G�®X±âÙgŸýÁ|ßmù¼bhÊ½;*g‚Béö€Y#²gàÐ�¯ô0NåØŠýMÅYTå&bÐâÍ)øù©Iy÷Œ¯Ô	oqbåÖ“óî7EœøÁÄÊ-ð•¸±Kh“;Hu	û�}Æ\\Ð«ã*>Êí&Tn¼ªpó³*8øöØŠ½Ð`"o¥!ê€×]W¼¦à =—yâ_/9¿CÄ×›•	Ê¬8HÌX"<Ä6ŠÍà·Ìðü’®ì¶Ç¡)”�*fËP
+•Ü*ê ›P©ã€Hñþ\†â
+�†ñh¨5/½@ËQÈüpŒè\RÇ(s¨VÎn#f†ùK­º¨©öìwn�?w�Úåò¡Ò$«LÀŽêFA]’F™%ï²4Vìv«™£ËwøkÎz …ÐZÆƒs:œ#y8
+Â’ÎÀiO'â‹ÔæàÃ1ƒœ÷€Ð9ô	 Œ©ÀÕT6%–(Qþ Ëu™¥¨‘vAÅN.�Ç}pÅ(Àú¦ØÏ}nj-Æ¹çÌçÙ,³×U 1"h4•W›]ÞË«‚^å1½Ú6¨üj7Ûk•‚õw}Žø¨¿òx^â³ôg@¿=‹¶¢ýdŠÑDq@uÁ¾éUÿ¾óJ)-qÒ%?G�?PâKÔ;‰Úä_?ÑbÅÀû÷¼­øòÌ„¶‘³¹$ÜÿRÄ$Náì®åM­‡ÿîö’¬²w#–£k¤êD^j�àütøe”§’õ<(Æ¤¢IˆÌ#¡Ï¿Ó*ÄFÅêDø±Ã8™ŠÚ"ÿlX…Åóš;ÈjDölWv6bl —ùÜL¼%­%ý¯TgGá¡µe2Æ0æ
+C úbá‹b¼ù÷œôŽ3€…�‰ÿø‡ô—?¥§¤«9àcŠ^’†Ÿ�8/µÃpb€T$eŒž‘nU-Ô!×dæ+>y'àxw,õ¬¹3ó�91˜êJþ˜ž×ÄnŒ�[TàåòüÜ6¡˜·‚ø�m£Ûß4«’¢b‡±Pò)çÊ…Â;Æ�™2ÿ`(ìÁ 1/;#=bæì@ˆ´#ó­†‚˜õ±P{Q;4UV‰‹#R«ÐT4ò!Ò¥-�æýC€ÈóÎ;/''gØ°aßwCþa/‡ë v¨> pAu•µTaOUiŠ´N¨Ü…?¾R7þN¨Üfh…°`q•_…ƒ©òcLÒ2:gÔÔj�”œ5 gð®žQë7#³‹”+ô,Ž¤øÆ—U½çÛ‰y	öì'ä¥Þ7**1}:¡r´ÄÈœ"�…¯pˆ˜–œïµJ ÷
+˜4ÞGæ˜˜¥…'\`p4;™sLà­oEFæ2�H¾Ïçfnõè~\¿îŠoQ…‘öô�TÆHåài*-û§“ƒ÷[±ô<íD:pŠéUL;üJÕ±}Ç¬´-_F2­-”»ê’:ÜÔÀ¤Ñ]*Pò¹ñÑi×W¤"S|kç-Ô
+äŠ4•G›x
+×]ž”jñ\ÇÈëÜîBQ¦
+±ÓíÈvñÇn Ú)M†Ûq\üÏûLK«N{„…Ç¤°œÈn+�í±Î»À(=ÆÅè´Së.Žó¡q ^™¦ƒà¨8î^?Ý‰þt}1‡dàM0
+æ=s^9Çégÿë@TU­#ÓYt#
+hp+ç{¡µ_ÙtõÈœIàN;%ººÌ.Î#öž
+~Û§Ì&í~Ñ-–×ö*�b‚½TÇÃ*Û4HÅKù³<O­RC¸5ƒxQzL;§›x:æ^¾6½�%ot·oi¼SùÚiÛKnNì‚ÎÎc�R†2ìf*Àx“èw¾jQÂÎÎÛHM’Uù_ñ, ä˜Ü¡ø�®¶
+xöØí1\¤P«"ÞjÄÙ”wÿ™“¦Ú‚×Æk�*¸ jÓÌ
+l�‘€1fò•ïÄÎy…wU�îôtHGû±0~ðû šKÓ¨;„tRW @™œ.6Ç­Ð3ÓíW¦bzìúÌR:­Itfºãò4™Ñ¿"MLù–“u÷'i9¾§J¨¼J'ÐšŠ)¢-•�4é¾6Xø2´íMýF&a3�·Äf,¿Éi|à­Ò¥o©0÷ÞÓdÊ!#×d8&ù¾HÅÚÉcâr*"=Ð–çº'€x=sOFøf—$Ð->e>ˆ[àÖ©Ðœà$ §¢ü�‚È/¼ðã�?þ¾[ñ�|«CÖr0�Âß€T2ã%>+ã…Aå_Á'RØy‘kìŠÀ|ˆŠENà3‰ðr<sÆàÍZRTõF|¥q{	&ÞÇÚŸVýn¡Ü�Y#²‹M€6¼Â< W”¡U�ë³=¯0ß‹ù*—°…3Á¾­hþÏÃÞD…è€2NòºQkDV¹æAeò#2Þiò>#¦³ûÿ6ª"f-u®1:Í�4‡0‡Ú‘ú�Ø{¤©>•/^Òîs*XùD¤!Äs-Va¡â*?á:¨Äø)½—ÜÎ…ÉâZ)s�§Œþ�Pg&v—¬u ‰	Z1Ýo�E+D{R¤
+†ƒ AC	ê­e¥…ƒÉÓ¹†ö.ŸîyXÌÌÞâ²]µüØZÅø¼v´Šå£ƒéÒ^­E©Š`�Éì„*åð´(JFÃëM[ª:�k]¼ƒÖ¢0U©ó%N:5]h6L�xœ§C6—õ.³'‡Z)‚ˆqÄblo+dtƒ£F½#9¬ÂSô3–± Á£r&†{Uö=®ÉÐÐíb³Ù32{ªwZAUNNÝh[vKóCl�.ô½h'Ëh{Yš@›™QNºaøìu{Ë
+ö¨ìtø"ªù[ôs¡"¦´‰ù¥w<y›ÛVósŸòP¾µO¤-†µüEÌžÍƒã]Úýçûª ˆhäŸëËVóÑø>Ž÷VtôV§ò¹t©}ì™Y`EU§_2£)£Éd3Ó»ü»�TWzêÕi6N"ãuim_ 3&ž”.b2ü"ýŒë€­—¦1R>ª4ÞáüÖ„ð@Ì©éÚk3O1â¢ïXÂ_†˜ë01p-å]¾l×õîX“�µÞLWÆ p#U¯Ûå0Î�4o'·ˆâ­_ˆQp›Ø{V{¡^EÒð\�ˆsµ¥ä«Òi&XEó¼+Êu¼2`#GÛ©Á|(öÏ½˜o&d›få:œ3bútŒZ8)ïäý!’™p”ïDþ÷{Ñ«Œ8ZeRÞƒöþFåŒE$— kŽó3¨üJá×Ü)U¯Eè:ãr‚•`¢ü¦'ù-˜âKNÌ{�“'W¹er•;¹?a¶p£NA;èŒª[¹ÃÀ_|1€XÉ •bU¿9Òã˜=è:1�ÌèÕÃ#×ÇÁ›ìÞñ±©�áW¨4Ãö±+tsŽÞ·§‰‘é3EK¾ÕYüèÖµR´Œè8Öuw1ÒÁ•‚5~ dX¨²ÇJïD{O©z�Ë‹Á`%–?n#Ž§—¬gÔú�ƒÖåY ZÎM1ûMË:ö²Ã¡mP/»™gUÌi#õÊë|õª4ë.‘·ˆP:ØÑÏÔ*ë8ÓêZ¤ëŸ;íË{‘W§¹.¦Œ+Mïk´UTí%qGd££s½øì´>þm±šË¼š¤ŒËmæßSeägÑ®|ð.¸Œ§Àe¦wFhâ3t¡…Êµ_}UšÝ(=Žé‚—�2ÄÞÆe�ñªBý_¸¬PŠo­dP•Nù4Í‘úün!ú»Ýá jQ1¼;Ç6ú$%	¾*ìÛ¨j‹°g°ˆWù]þU„Ìþj®N°¿æXo4Ø@Z4}¹û÷J÷ÆÞ-§«Q† ÏÂÓ™å=¬]¼ƒ\²¦Ñs²§õ6)ŠàOè´ÂC•˜:äeÚe
+óÉ÷TÈ‡™ºU1ây˜ùf.âæRÇ`æYþHÔ[Üâ¼`ZÎ	ŽÏá
+Zù_èŽ.òëMd³)šþ2¹(àÅÈš Š!`‚Dç/ið[M£ÔQý¯LÓþš®`Jàfâëaü!�|njyq®x×ÈmÄO¼(õbÐµá8ƒ#R±ôcÑMó:-?ä3v”vžÔ½–#’ü„.j”zã¤«¸ù;ÞÚnÉPÏ:tÍé±üVe‹#.”mýjÿÞ4›;ºç™H
+WV~É¯š)µŸé­çk€B±|ëH-fÊoóUW®àPú’³�´ÿþ�£Â\;Æë<`¨£a�ïc`õ°v7ìB$“á(ßÿ‘ÿŒ—ZEKø~8ˆ£ç"¸xƒÊ¯îWö]UóY:"{fQÕëœ­ž\åŽIywO¨Ünb^ó5O[±?	6×¼æJ‘Ø2¡r>ˆ¥Ï«]ÊßqEÑM©v‰ÈVÉ þHAAO Ê ¡CnLÏˆâ“ö;£rÆ¡ðòPhÌ_ö.Þ<rÍöšj� ð¶ÿ�½ó€Òª¾Úýy1J›Æ½¤ûEM51&1±�½bo±Ç.
+¢0e¨‚Rìt†6”º
+"¨4E”.]:"‚€"ÅÜß~ž™YY÷û’K–7w}ß³fÍzç¼ç=ï9ÿ²Ÿ½ÿÿ½Ÿg¥røƒ Ç«¬N™�ÜÀ®›RÓÊiÙ,`džòòº2�¯Ú—E(âX[à¼qåíÄÒÆbÅý@'¦X$@õÐo°Ž¬q—<ŠáØùá9OU¿`F±Ö–_æ‘ù¬4ˆ×Ì(VÔ£)Ÿd³
+7s)­ydt8ÉÜwl‘`x, G�éŒ}eÒ—�…àŽ«-a3E^7C¼jË•4ø9�SFª°Þ›‰NçËS2g‰Åó˜^VbâË@Ã*'4×¬á•+cÐ,/‚ÑÃ> Ó˜©Ë’g¹Ž!r·ÒÎ˜h¥Â‡‹“Î—'ÏcÙÀÊK’îê‰8H³cÓ¤¿|ÄÙªå	Q¦7qšÓŸæ’ìÈp'VÑ†}ÓgÐÈÞÚ{®Êj3ã1BºK°Ò‰¦CžÓŠñ@ Ê×]HtÉ dŒÉíßÖ½â~àó-SKæ¾õÖ[ ¤Õ¾¼D‰-uRÓ�©Åt7aÒž;ç_Þ¥kè)¾Ea@ï)‹þô ™ŽœšåÕï(å+£aï]i³ý4)jí±23N¢„‘RBƒ¼Pe…‰­h&JÕC*pØÁƒ<¬NÓ(Y¦Ó¬ò­Õ’ô—£oÜ¿+"ß˜š"ÀÜ¿K½xwj·qeÒ�Þ¤›À>ºŒHäÒÐÚ@0D2y^•@öô¶¸Æ^áµÉ(ùBs¥ú6=K,É†�Æ(¡.MžáK…¹%D£Œ®Ã7^”täÙ/Ožë` kÝ>*oIÍänigîðÎÔG\�+{õ›;”NhDÁ¢§;b?¯’¾60‰xR¥úl÷Ò“ª†w+åu�3ÁÚ”fé¬fäó+jå}^Ip4j)p§ùµˆbØM^rñön¸—`ît–»
+«c8õÏ˜¤"î÷�AäÿèZµg¥�£ro’¢ë\å¥¼�‘à†Të…©›ˆ™’ QÖ	CºõOÍ¡�ÞÈwpZTý¡âZM†ç´f„hu–åÑ‡Vë&Kn¾Äù£rÿŒKOl¥DÐ•­7nHµžÜI°ÌeçG_´ÈvÒ5f¼Á&ˆwë ÊÁöº$ÿž�€ßî�{L§éßO™#ùJædR{.¸HÁzbÅ‰ÔÕ F>¼ö}¦›òîåªïÊ,ôrœˆ¦CJ +¤T¢WE_ðAß´™˜,í«.Ä4È˜šaßöÏn‡c DÒ„0¡O”ÓÆ‹£aªb„ñ<BˆÐaø..åÙMk7«°[•×óÄyD”nS1ÂÞC±ˆ¤Üõ‰˜Œ¶Å„0 "çY‹;m%œN#÷8øHÍ ã%#I(ïKs’;ssä8ÝÉ|‘+Äùº«“áyÚ¦93¹ý¢¤ßÂí]œtÅuÇèqŸ@L¨]ýR¯`xµq³^ùóëœÞpgj‘è¾z\ÀÍ·»ú/K�uú}�ÊÞµ¬=�· D‹Ûšò=bI7C´3=%¼8cpV¿¾ioÛÑb z=\eQ`èu{ïñ1Â�$ÖM…ŠœJvŠ’–Ø¶¬³É`7ûipá®ÔR3~1Ý•Z,Ø¨�¼÷°ÿÚï‹È�ˆÌ…u\“îoz:Åˆ÷
+j;UÜxKÔ.Ž�fî—2u<¾ÔÁ³.ª&E¬;ßŒ/bB)k�pœ×d
+WÍ¨è0Í®˜ñUÐçfQDv*úØÜ4È¢Ëèe�]Äƒô>ýKðeÝê‹’B©Q¿‰·Æà¡A”£õ>�ðÛäeé:9Îuð”œßÅ¿ZbXNaÑZœ+Z	,ã­Çc/oó­RÍf:ókúz¯!k“t	^
+ïòÐäƒ¼ë…qº€©a4o³2m½MÉ�90$¨”Šè&×Û2E0ø£�ÇyL¬mJ—zJk¯˜YªûøŒÓUÎ3­Ä¹hÅ$Àt
+˜(î¬ÐÇi9{/¿Tu>/Ž"{VÜù-�Aä¿â‡Vuª	“LÄ°`vœÏàÚ¦ˆF¤ƒËê,;m´Mc��˜üsÆ! ÈF	0Ÿ¯²’€”+Éz~@F	À!½ž]ØÂFòñA™C\¬ä@>ÅÜšÝÕ!÷`#AF,µYŽJÂ7{]õoJ1ó“3ÚÍèbU†´S²U§¿ÏE
+
+KKYMx=8sPhÖT]$œ¨(�œ+àÅí	Çq^å+Ä�¹{ÅƒÈKàŒ‡ÿrÚ{AçUqØÇ³cœÇÖ9�`|býÚ…Y/UN0NŒ‰SAóN¬_‹;¡‘ÅŽ²Ð©An
+žÝ÷fRZ›û7Ü»|@ªLïi•‰èr;æ¾0«ñØ/Iºañ@+¬™R#†;™ˆ¹ùùÂ|©òaØÛ„ÒÓÓZ›Úk¶R,ùÕÉ®éÔ{é´§éì\7‡Ý8/y£‡�"š à¼ÿ‚¥º<y–(”<?y’·°–:óh×i–T ‡cš0h˜3Ôy_�¿Ätßƒ¡µ·—3Åb¬­x4»H¿ßçfmÏ­rú1€Hçš›_]K¬óqÀ”,õ€ŒF\ÚVP8ÝÙVtMy�§xòñ¯]ë
+^XàžQáG%[Î±Î×±…ºDu‘ú¬Ü&}.c³lby¯‚>óû-™ÔUëœ–èRÙþ‘2~˜¯½ÇjÒï¶¥¬€[M(ÚI¡tÛ2ñFå,Y~í¹YŠ›d óY/Œ˜€H$‡[µrrÄ¹%bFÝ)±Ë÷é%ÇmãÉÐMt
+}ç¢oÉ=Âµ¢?¢Eú÷ÔälPÒ¼O¸L4ä—ÀðÜäaùi\v¥¶8ß×jç›Ê|žÁqóü¤1¸>2ì®Ô2‹£qA^çú@	/î5Ó/(Ö2ø–8›K§¡­vGj‘·ÿ´HrhÓP_ÑL¥^ÄËAAPëãÃ˜4@[É1Î­d²‚Ø@¯°Õ~ëÈIøÆŒ@Íá6œÕ¦âÇ=|»×ÿiXæ©™¬¼EÒ:|ž`|¢•R5×’mÇ òô�$•§Z¤ŽÁ'œYˆ1°NAzSu^WeÜa‘€?N‹êŒôé˜q¬ç›Çu`fîú¨·aÐ†ÌVU@¿�ûÊ•1ncj^Ù/ý¥Ùïá|ëbåzWÚbšïëy; ¶AÓÞÑþcl„=Yš{ù%¦Év»Yð;b¨›ƒÑ{�°õ2”%ZHægZYô§½,?÷Ð[
+tmÃß{‘géÅ�Ÿa`•™³·gŸ½<Ý�jÏò€,W¿s
+ð9~”Rü0"h�ó°ìÎý3&fõå¯ÈVš3"§Õ˜ZK/lÍP8ãT×ºÐ‰IQWq0ÚYõ}fJáye–?Çú9‹ÆÖÆ12± À¢$#Wz“‹‡åÁ>`@ZhŸl’üåJÎTÝÙ~ËH©^{¿l¥o¡éÌgòš�+-E¼µÊ½_bšZ¦¥äÒÀç³Ø–[DH7ð¹+“þŒ@$¯›$ÍÁñë’q¼{nòöS&kÎ-Z
+vÉ§é©íØ˜)Ô¯ùT±N¢úÙXZàPyM÷PÇXo¶Þ�Å¼ÑèÜÚ“#ÞàËÌiÐ¾Å ¦ÁéYùaÙ]¥’Å\ÓKûÏU^(3þ-s&/èsS¡zÙÁÑ„Wã½‚
+Ä[ónjþ=J}\ÜáåqL4/ÌX{Å•û­Ì³à…R©?	C)õ�7Ì(^ôÍEf2šì…pØû�\3•"Ó­<�TâY,÷ñ¥-#}e—ÒnƒÜº�Ž¡šk$¨þq3ã‡¦6‚ÜžåÀc	�ˆq2%c‰™ew1>Í»2éÇð‚¸ç?$×š‘Uµ¢ÑÑ<£És¸8Ãõ²¤'Ä”7û™3É¢H†Wã{9<uŒÉmsñ	lc"p©»B}©d¶Þi)
+ Nãaµ&ü>C—k%…8kWE±pj«YšmsC|'NÓòËÂ{t$h¸R[ö�´#é’±%ïwNµfÖF®æ*š‚ä~ä@®r‰n)kgÙyA8Ã|ËQB¤‹¾Íï1ˆ¼öÚki„¢¢¢ò#Ý»w¯[·n¥J•š4i²nÝºÿãñÿüÜ€ªŒ4›Œí. 12}ÓÞÄu/Ìê#æ«eXrÐk_¦ªö±]ñÏ	!‡ç´ÅR=[yÀ1¶Îo@X �ºÂKšé3¬Á­:ˆB^¿TuÇ¸C™×»dù'ä÷Œ-§˜MwË½ô¦¹6Å¾êvÂ~o¦Ë»Ûo…;ç�`ºù—)ÐLK(Ê	YŒY3Y1FãÅª�*8 JºO…òk\pŸ<ˆ8…po@!öÓúìýÓ'ß{µî<Ž6m_tÌ2 câ Ìá�{½VSç�Èyb\ÝŸòà¼_÷Ä«,šý—œ5@À:„4µâñ©!ÁDÛ:_*¯ã'ÕŽÿ7^¾ãq\ªÒ�1¼/Ø­pn¼"y	Ë£ìz`ôcY†Ý &ó�Ö`j›:Õ"óëÚ¼¬îÏq¥òH¿V’Þá‡cg3&+è»+leå~¬ñWÆ4N•,Ôb‰v­r~�ÀUÉo]˜´Óñ7/MžÁ´r·Ü¼ø®Ð•Ü³3©¸Û6eåÕ4¯hf7óÈœ\š4¥MÉXüO{·›ÌŽ)F¹sÆ	ƒG:òQ‹ªB›•…‘ýaQõûÄt:G›ékÅÎÔo@Æx+¸ñ‘’Ú´$7,¶¤+mq8¦èr#gVÛŽAd+áâíùÆñ»©Ë±ö 8âMº[C<+ý¥iŸ‹“Î4]@×ˆ1à+€<¡q¨’Àu<×5I‘+nT*«"¹Ë’^´€a¶”òlÊ›\/zs©¶e4Jô/ÐFG˜�Ï»&ÏqäÎa…(�¥Ë(ý7jsm·§+orM"µQXÄmÄ"@ê@ç’äiþ=?ÉSWöRòÌÉÓ|®Ç“Î�MM’Çø÷y}2NÞ)ƒp9{mhq.f�œšœsSê%?�â6h«ë“‰òÞkšôÇ‹À›
+îÄ
+8Ž�ÇÇyp×:1øidn[ÛÁ³ÐòˆäcfrÐdG*…7Ò$!^Pê¥”k9Y¹7›•põŽìÃçšŸ9·�/å>iÑ|á½H{;L^<W+ˆÌ«µÜ [FèºIdÿb
+”‹8Ðªy¸a˜©£çh}¦âžoùûo‘#FŒ8óÌ3+V¬X‘………ü;tèÐ4nÜø”SN9|øð?8þ_þ(Š$¬õÀg*î’JÝ½+oÊ×Ò:^ë°ìNÄ’„„XuŒÒðœ|ö¿¨z3Â"¡_útðžH
+ûÿ¼t|Ú«¸³ÿRÕ…m#cv(`Á¬ÿä»ƒj{Ð�WýèÅª‹‰½¿Þ…Èæ r	»·t\,FãŒMÑVD�	ÊÌ®Æa¶ÚIvú=[ª"ÞÒrüU‘ÅG–|Ë\ìa™[•‚ƒf r7S\«±jÐ^Ö¦êüQ¹7\)÷ª´]é¸ ä3ÅµÎ�{ã”DùÌ°ìöcj^>ºæUãêž<:÷¬11ãÐj=Šªß_\ëÜ>is‡ç´â‰D"4Öàƒmï]ËÓ†®sñ~Š	ºyjOªü��˜°àÚcÒj�,z‹ou2´ ø]j·hÝ�©×h%-±Æú’•±&»&år0Éí­—ÂLü¼ P{Õ‰|X¹2…JÀw'Ë‰«¯Â“ùW%ƒ¬¡ Ìœ‰ _�…ã\¯/KzóïyIK.jð/†‹GÐòoHBÓéÜ-—zP¡±®¸7°Ã»¥ªë9ülåþ‹!àx="çq€Œ¿bÔ+RÅ²ž§ƒðXÄe4€Æä]30s”h+zàÀàÈU(8Áb$Ö.ºFÏtN‹Ô©ÂØû|•U}¤xB_`úèú”E‹½ÊüÕ �Ç›jÞ•¬ç¨K“Š³Þº;2ah¥>H®;hÕˆ"�ûÆìÙ²Þó”éU>UèÜ˜™–¹)5U;ËÍâbIJ@ÓuÍC
+3¨ì1×Vx1“¼ŽÝb’9èýÓ^*c!¶5ÉÌ#±»½U,ïqWâÒYÊpâ²®0¢å½Ë¬:Ð7%(æp˜Gø‚çÅÃáEì–jG›/åÁ½Øº��üÅ‹@¡Ê¯ÞM|iëØL_ÄÀóv¹™ý*™°M“<Qdyù¹Gˆ¦< ô§5–qœÑ:jyÝžáÝR¬ã`¨Úvƒ¿�§ Ë„n‘tJ§ðŒª[iº-î
+ŒöÓ){gš¼ÂÂåæÝÕjójw¢æÝ2®ã]Hó«ãŸèÎKE»¼ÅÜF«ÜöÀó�z/Ò+çßæ÷ß"7mÚT¿~ýµk×þ-DþêW¿zà�ÊOH¥RÓ¦MûÇÿËéENt6£‹>$çÑo–^~9í^÷I›õt°y¿†ƒ¤�³b„�–Ý›ƒ¥Raà6ò.îúàÌÁ/TYÂ!êä:X',î½ó?�j(-ƒWzWŠÊAÐY¤aŸë»B;UK¾kó3¶-W5{‰ÙQ˜õ¦.±Œ¯lìaÙÞ/|š(Å8¥@Y:f@eèš–Sd_Ÿ‰«¾¸e÷KŸBü+>œzÆâ!ÕzÓXQ�çGÖ¸“'’äe _NÅT`‘g•{Vš‹`½Åa;LÍKFç^GDÃe_ý^R\ë<mDNK‹hH%p©¢ïõ¢ãXEè*øþÄ
+Îæ´1#PK­&áBkMoæƒsIÒ�	{AÒVU	‘/Á[*y›'ñ¦‰Ø\z'Äzj_•bUœ@öy£�wAX/7qD[™°Â‚OÄº9»i2PÊ)ŸbÜøj¬4�V+qAÒæÒäé‹“.—'/4N¹&Éù€&À‚›föŠäÅ?§æpo˜#,d�â öe/ùe%<Ý"0–Á,zÐI­Î&2kŸè‰æà`€ƒ  ›nXvF/ µQ5nUãÖA™EÀb¿ôiŒ:Æ-ÝQRûŒ15¯ä#„�ø6…Y/á·0ê†TëT¨Yý¬Ék*Z€vòKØ2šx�gçØŠÛB¥b¦·�Žà¯%›ñ€HWÒþØÌ/ ˆ±ÕÒâ|U—oq(½Æ 3[‘sŒ†fã	õ¥FŸ/XPüØG}î^Òò;_=ñýå#»~@r?Ý+î×rô"×3
+(¿0ˆÓ×ÂÓ}þ:áÎ^<]Ñ¦~	+¹[:Ke­«-1Ã hK²Û\ž/Ð‰õ|¥ÖL°ª¦6¾C=GÎÛëŒ%ƒ”Š÷7ß’z;¶Ñ�ûºõq‡¯KŠ	™›—'Ïs}†Ù%IwesÍq6}Ê8á{¯KÆ©àôM	ˆ/R¥ÆBœ�ªFä_n@ü~|‚òÐé¢Œå;‡‡?±,ÿŒ·ž>ywIß™£Û.}é/óœ*¶ÝÍ­r¯½á(–­½Žp[ˆ6„‡âa¹sûlÎYÂ™q©5gÍk¡ˆû ÿr5îJ‰ëC [+öx\WU’v$žaaŽ"»Ÿ°ï[þþÛBä7ß|Ó¤I“_|‘×åyàÀ�ãŽ;®¤¤¤ü´O<±cÇŽïøß»¸¨æ*u‚eÊ¥a±Âœá^ ({TÚ±Ol¥-5¹¨>RBéÍé¯bm0D}Òf:ZTôt�"¯,Bñ\å5"çÉS’áè�^•¶TÚ©ôÔ/œqgíx×­[Çªâ€¸É$ŸŒÅÕ}í•¿í¼MUg‡ø{yB8oi[«"ÍmmËêÑBì¸Òg V�"PR¨«gõïUrDŽÓ@(éÕn‹¤�5iÏ	áy Ä11{/ÂÃ’ÚgyõxtÍ«¾Ñ¹×c�ÇÖùí°ìŽckÿî•F	�öàÌATì
+íÇÕ=i`æHŒ3ßÈ9’¦{&Ôßp¥ƒc^3°)Ó`¦@µáó3©™¼M“A@ŠçÅ!ÇhŸ“ÜQÒQ<ˆn˜ø®ì3�WÛ2ž�¥j4¤„oÛ‰ø,¡‹ÉÂ’Ü ®K’§ÄJZ¼{u2Ì	·Vb]ã/ßø6Iš_œt½6sQRpm2š· J dÄx‚ãÀ76„#Ú"�!(Ù!: È°—ŽýQ8%Šw&.pm,>U,†WYÝ!ÊT·ItþHl ‹þôÂ¬~Úê½‡þŠ|éwÐ#kÜ­õ�b|­(ãM{Xä_í#Ï˜1ŠOU°0ëe¼ pä$.ÎiÚ�óÞ_¹üV{Ue‚žfÓuÂÆI¾rA§cáy"žT1ÑKœàld°CJ^Qz@›Ã�¿*–Ü$~¤ÑÚõ[lJX>ÂAg5›Pô©>ìÒ(hÐFtŸÝ¾ö¾¾×|RÒóG1ùÊŸ¤ïÄ5±Õæ®ì#ü¹h$3ƒ5R`Œ`JNã´™š”–¼Väö¤0uPUœkM³ã-¦Þ—Šñ?°àš£6Â=nûZ­H02=­àBþ¼ØÚøZdD=šÓ4î‡
+�Â1#Ç…P±¹É(º7žwj{Ï(‘¸™&¼å›KA’;êtY"�×ãªECÛ,ìvÆ†g.[2$þð¼¥]~¿N%¡¨´é©‰ø¶«jc­ÈÒ·ñÚ;ŒÞ¡À¼´9�ÒM½þ8báØq8(¢¡yŽ‘­j¯Òˆm´\†Ÿæ5�üXaÊcù¯þyþùçÏ=÷\€ò¯‘›7o¦AfÎœY~ÚgœñÐCý½ãïâ‘ÑšÝË#Ò˜Ø›`òŽ«{2 Ø×jRTýHÆ¦!±WÀ“Ö¯¦ôMŸ@`¾†VëáM¢aÙí$;EÅ€sD¹3Ý4ËŒ)Bæ³ò¸ÖÆr®R €Ž ]¢´äm¥ÔÆN�Å›<-¥Ì‡€6í›,¶ãíÐ“Ñn3ËÀ.Wâ0¥¿E=Äû6ã¶•Ôm\�îôÚ �Í˜übÕÅ¾[‹cr>ñ “ãÒ+9‰æ*Ìê;¦fÓÑ¹7Ž­ó+‚DBH"Ä‰²JjŸ]RûL§¸Ö…)¯}?–^ùkå”Ñ5¯•ûç‘5î#ºÁ,�¯÷CB!"S©œô p†d=oBN1@ÆE±š†Ð¼@dâ8öêd6Ç4/'Oa°f’©ýÄW™äl|ãë’¥÷/ÒÖ²&ÉcÊ™Ÿ	ê¹¬ƒ«9WßlÌ®›ÓŽç4ÍåÞ¶'ÄG!Ùio`%9	C¸8ß þ)¹•“ÏNîÅº(À±†Ïä)÷€å4#�IíZk�qµ wÓ¬ºåDyéÁ#aRS/)0¢\Q+:‹WäÝO#¿þ£„A‹3CcöOmhµgÆÖ>×…¨DõGg¦ƒ·¸"¼•{sl=§¿Â¿*SšÛ«Òví°¯‘dØ~oÿ)²ûZ&×wnžC'�HœÓ¢ôÒ+“¾8¢´'°bÖwÎ1a.M¾â/åñ~A#·--SýÆ¢åÛNµêœqè…—?wý2em}:¢ë»áQˆ"&Ov^‹±Uû°»|-#ïš>—µŠÕŸÞ_á�G,ˆgc»5"ùåR³]Ë©EÅÐFá¡”qºp·Ë*±0â¬O]x<8P˜ÿ�Øu�¡ôÁgp‚ˆ&Ö7'!7}2ž·¬ÍJÓ�›<äÅ^¯Žj�t‹¤T×Ù³ÍWR“ÜB€l‹‹k#.�(ôèzÚ¦ç¯X×ãâ�ÎX”÷½�d¯~ø„mcûÌnVi›êÕ–0h.q®l¾¸{¢teïJ†f–2šöYôÓ„¼°‚D#˜ñ•çuÕU^¨O.VÍæ‡<¸ö‘W¸×°<N³¾ÝQ/´vA„oõûï	‘«W¯®U«Ö†üï¿"±3^Òôöœ¶1;sÇÕù¥ID_N{üÕsPß`v0JÚ•ëŽ`Äðºù ·ðFä´;ë‘³šQü\åÕ8êå5Ú˜)ÑüîVÆfTsXÒ¨wåÍªy\a-Z«”âOZÐ­­êŸ:á+†·kÌåæ1ÎƒVë>±jxó%IÜUÜg‡pÔ7š,‘/•üñg\ÙüiÎ&íŸ1	j+�VÐŸG£)´ó8…À�FÀ s|xN+‚‹aÙ�‰D€¹¢êÍ Á‘5î% SóÒ¢ê÷MýQB¨HP3¶öïÁÉ�*×:[=¡^#bN('Ô¯÷Ú÷’quO‰%Ù·rÌõèÜk&5¬Š/©ý§g+oŒ*øÊk”Ô´¶G©‚yi–£×–ŒÔ‹U^RÖéÔ›Ro\š<CL‡õ¸+µ$žø÷ªdÈåÉ—'ÏÅ 3SÔ©osšÖßÖ€žÎâ�>àD%?,PªCäí_ŸLäKÁJ³kbÕuÁáÄ†¼9õ&a_tiòôeÉ³g$×c=ÎOò¤ŽéŽØºÛU¥â<ûäŠ\¾Q¼Öápë¨P[éMXàO9�è‘•vÑ"ŽíZ-SÌzV¬GŠš�›a)pip�¢U	Kjÿql�_°Óe€#ŸšX?d¸šö�ÞdÄŽ¯÷ýÑ5¯Á/¢—qZŠk�Ëàä‚Œä15/ÁužÓ:ç•EãõâVËd{ùâñ2µ,i¯¥a±öàq7Õ™T4'Wª^~¬Yw8GÁ‘AÊ‘¦É ŸoÁñpÊ«½;#+fWóxdQ›†;Uë;eÅO}Dsû0}„ƒÛÌ—ä•Šn7…©ã8Q¬ÇN_ëÒº�OL›/öû]¸:‘…¢¼¬¶e
+Ý83wÛá1|äµ_ï\;Ã¹Edp}åÅÏrÆc‘ÏäæùF‘~ï5)"X‚§oçEÈYì5Ï<aqŸÜ£ËÀÄÐra‘TígyL—nÑPÖëáëä_c‰Ûëÿèü~.ÓsÞð.³Ÿ»rMë¬}ÜjQ�YùUªööCyÎûo
+Ç%ÚAžÃ�Ó\�!ªeä÷=D-zåô—>)Ø_æ<“Hˆl?ŒŒäJ™Ò-§b}ÌµÕ*ÐG�Ñª½Ëoõûï	‘ b*•:®ì‡F¨P¡B“&Mþ/.´â{cy\X�åqÜ×³ÒvÌ¦{HµÞ®ñÁ°ƒ½ƒúf-Ç`ÀW'žÂÎ;ghµ§ùUÚê2ì¨¤ýÄHå Ó
+Ø*Œ——zUÚj�¦«,‘ ã6	©Ïê(ªK‘>D;ÍÏFÃ,¦Ž]bÏùNÀn"§Ÿ*—5rQÆ<‚÷.™ájVot’$—åA^®:oHµgµŸµ;Ã‰èš^•¶à9DdN+€�ƒ˜_üà�¦P rï„zßœ9¨¸ÖùÃ²;½ýó”$ÆÄ8Oûq8NýaRRû>k"ÌòÄúµ¦ü ™qrRRëœQ5n£M?M ’&Q”[4ˆýOÂ[îÙ™ <,v†¦ s
+úõÉ+-b“ÏKWßec�ALà}URèÜBUJ¾fs$c>Ë|bØÎÑ²Û\oÊ4Múƒ’ .&HuŽã0ãJ[u	áj2¬Äž\“amÀ‚G¾‹hBÊG]¹Ÿk“Ñ—&=�Î+’¯H^>-¹�«Ñ;üËõ%°»Æ›È–™À·î	F2ÐAž)¹=]O8@á-ð–Yq´ù)­¤Üà�#r#xd âØf½@ïÐ³ãêžÒG¸:Ê¸Î/©ý‡1µ.Yã.bºLÄ�aœŒ­ó[Wy�ªq;¡¹@Ù7ím-ž,w…dš#F»u°�™eÔëo–Â¼,éMXÒÑÎ�“f´!íCá¿�Gr¾¤Ñ\ò@„�ÇhÓÚZåçìÒBërW%˜È¨³…Ã»Ì�÷Ö°'·¨
+_#ºÎåLo+¸jƒ›©FÏëºf5TÆæ“Æ0ZîŒö�¥]þ5£VïW´Pé%¾(Y¾¡/€ÛÏƒ<¦Ê\“éÑ¼¶�ÑJª¬›ÎIà
+Ö	•Ý&ó@|çžZ¼7AÖ$¿hžé�êV98æV¹2øxeÒßš)’?>"éäØD Â¬JsWj™#»vºù{•i& Ÿñò%[ÚŸ1¯ÍOÖuøphÛ`eÈ'^ä—@Þó·‹·çm§¢Y[¤Uf­äï¦ÇEÇBñWË	w…µK,½,ì¡+"èO¸U§7XWÅL¹æõÅå;zv�®¡Yó­~ÿ=!r÷îÝ‹ÿæç„NèÞ½»ë8þo¥ë`T8¿Â!ÇL½Xe1±•èÊ_î“öŽê/vD5}æH‚/«;ekHµžÀÍÓ¿ Z|:Š¶Þ5T¿¶×992J”ÏSŒ�1!Ò;³»vU‘Ô‹bc“Ø=(X—2ü˜>Nn�MÃŠ»8³[Åð�[„,ÔzÓd9ÛE»V¬ˆ	.yzí ¬S.hl:hÀoð–ÊæcZ½�™/ÞžÜw�È¾À7�‘|‰‡¥¬?Ò7}A"vud�;	Aö‰ªƒ‰Åµ.(®ÕdXv—é?IˆñÀ>Â °¤öïùHIí³'5H#BžÓvbƒìqu~>ã¤M´âL"ÓQ¹·¿`Æ¹¬Ä:Wr‡ «Ôuc±´�Òq{ÅªÑ—ï›¦Á7€?ðëü¤5¸#²è¾@ÒåÉ³R7^®�ÕÚy]RL³`—îº’UZÑZˆ•æSXN¾‚[„=Ï×Ö-¢[‘?Ä_ #>1£ª/N:sà G€TnIBW³®OÆ�•ÜiÝâ& “¯JƒžÜ!ÝG7¹Èóè´[QîDßëÕ0ç6wê]c5uƒ€‰ƒ3O%«Ÿz=L�1q|½Ñì…Y}è&Z’vSÌØsRÃÊtÖ+ß¥›Î¡ýé;>RTýÁ	õë*Þ¼s`æ¨‰õk ˆŒ½Å²‹»HDÉÉ8lQÚ“9Òñ£sÆ¼#É˜ñZ(�ŒQ¥yïI­¥”jòZÓd æ_¤Íi.k)òà·„¢ô,ÜZ�._½1õªI³9¨2À¤8³ÓÅìt·%*Ê8a6ÇV‚jäM¬­ÒàÏv °VJœŽES3�´¡ö¥	Ì]ÜzW(_/4#A�Ö�?µéüæ±»·¾<•‹H}c™ïöêd¨â¦º«­âëø‚kz9TQËÃ@RŽÍNÆ[~ÔP,#(¸|*%Çe Ïk¯€†õ§)X¯N†™ªNú5“œ¦=TÕÌR=øf±vöT±ôwañÅŒ®ðß9yIT93D•ÿilÞ£[½H%°3ÕÀv‹;ó«¥Ô¼`�{Ù…WÚ”ÜcrK:Å¥Ê~|�k˜º@Õ´º´ÿÑ/´†ë·ûý÷„Èÿíç?}6láÂ…�7>ùä“ÿ¶èã?ÿ/hUÑ"6ÁuÙ*FÁ€4û(0'E§•Ú§J×sÚsUV«`íK©@ÎÂpõÏ˜JvTz%§¾M&îÃç«¬r½¶¢³qÖ ²¸ lA½öZËòtn)Ê­`D6;×tR‡¨køZü«�RâM"±µD’¡‚w7¼¢Ëäb¸r'ªìØÆ9ŸÛ“víA—]µõI›Ó-N‹*ÈaÙxL0kPæ0Ì/ð�·0<'ã9¾î�±ºÄ,£ro^'6¨ªõë$Î>5Sóblìë?N¦�˜¼ñ“dbýÜÉO‘óG&Ô¯3¡~="MÎç
+ ©–òVFbOíÓGä´Œè;s0_Á¨­Ö*ujI;í+•çR*­n)VŽ×8ðM’$mù{zr9`DÜw^ò„�ø®1VšÉŽ5fŽ;Òû€ÞvÄ8äG
+Ä8ùäëÄKð¦×¸øK´¨lÃ±Ø4ŒÛ¹ÉÃ\
+ L	'­ëAÜ„AÃbü)¹Dæ8ÆêÆ  \]�Ñ3¹hÈu¸¸ ¬.½`ÞNùb�vŒoe(†ŽF¬kiùž•vÎ€¹ÓYé;†1àÈÁØ…¬ÖcxN›!ÕzfõÅ{¡/F×¼fpf!1»R[Ïzõ{É„zõ‹ª?ÀŽãø�•túèÜëðql8ò¢êv½U-¹™5Þ1ÔZDd<ª‚&Ä ÏH®7w..�YÌõ�kQNoîLâ2�žFæaééµE>•wâZ6\9²ÃGCš/ïs÷Úÿ‘ãv>±¨ËkT°°ÂßÂÇ�›-Bò¸€õ„Ø=eZ‹X†æ
+„~ÍD !’™¥Þ}ï.%~GŒÕ�	—Þ8ûwÔI¡Ú¿º'Õ®÷TÅ*Ï©sq%çð7OD·hÅµÃ	móƒ-DÁ„~�Nþtb¿ù£Ú.~ïjK§=®â_yJ½¹x„ßå�HmîcÄFò³v è|e¶wˆ9T
+½!8`S¯à¨XÝæ>E…ó$‘lÑž‹Ïr}W‚8ß[DIsÐLt–˜
+xäõ€£×�i
+º—Ò¾‡V\w‚ûå¹pÝNˆfuuùóÚÊ9d¡LÍ1ˆüùó·ÉO·nÝêÔ©ÃA ðo)þÞñÿüC«â™ŠÄr‰ÊØõI›ýtÔˆ}<²ÆÝ–YÁV`šf”€›rìWŒÎ½3ŽßÞ?ý5 .À1ís®—Ú¯œÛ?}2ž9&xÊD`¾ŽO=¸âœLX'ÒéØ˜ ÆtZN­áó¥VAµ
+<7òŽÇ›‹{­¹¸±ÏP.Ó†Û"ýS\ÖÝ*ÜkŽ)‹; æ”9Üu%ÏWYÝ&øÍ‚HV¬tÄÑ°�£so xäÑ¸U<„Ñ5¯ÂÀFÖG�Ó0¤ç×¾O`rá„úµ'7<ž¨$BÅ†•�ÎÑ5¯æà¸º?{õ»	ç ‹ãêž2û×É¤à ö™xsšÐSe’ç�«ûS^�Ê½ybƒ‚kº`LÍË‡g·%1È´Ñ7�rVíà>ÀØ2ë1&—&=.LÚ^‘¼|Nr¿×3Å	öÂ}©�˜Mæµô§FŠÏ|™M«ÅõÁ,¦6PÅþ‘o/9æUNÈáæîòäy%ü€yiÑÇ@À·ç»xÔÃR9ÓƒkCÑþœ&Õ"ÓÞ½ÆÉ£ôóÆ¨y‡À“‹w>þ�CÖ{O²€‹üé56ªm‡¹ãzIrl¦wL„È“Í{EÕ›á¼ò¶€ã`ŒÈy|r£ÔØÚ¿ã—~¤ýÇÖ9õíŸ'Þ£œØ k\�_rdHµgéúˆ‘OÏâÃŒÈi…Ã3²Æ#rRíy.ÅHÀ�Áµc03MzozÆ¿×H•Ö¸äÂ¤àü$w…F8;¹ÇT¥´*½ÈÀ?¸38a–à¥0DÍº Žšâñžmªû‚Ž{A¯Ö·møß2²û{y•>{ÕÊam=}ÆfmÞ‘lÓGÖÌ2#·R:×4…©°ïsÚVë¨Ÿ¹BPU�{¥JüÝT 6uÑo1Âòš{pŽ.øò„ÖyË	Õ&ÄsWUË§ß‰ Q³›­ÔIàìªÌ;•ô‚ï¤¤Ó÷»Ôøúù«W�U
+n·ËæµYR”·üÉßÏò¢�9ieì|-�˜ñüU�¾MI³ŸšTD\lçJ>òõ©%sòåï1ÙÁ5F;(éÄ³‡¤e@;ãDN¾S»0qç"yØÀ°´¹©ùn‹×éN”MÿÎ`d:Pi<+¸Õ.¡*~ÈÉZ¥ª JEöò;FÆ;­µkÅÉ£„ÈÎ'ù–¿Ç ò_ñC«öM{“h‹ß õÊe¾P 	��àøPÉFkJNn”´•N+îz_±_bUðó±`’y]$:î¨n³¶F 5Bq&.²Uµ8Y²Ê®ÇŠÈ±Â�w9µëÈð#(cÆ… „²R™,EÕ;oUÚv©È çˆL8’ ÉLX#®ªM« Õ‰ÏSHVéKÂF³‘H›~5–çRÃ²F„4Øû@$v•X¯¸V“Â¬><&�h8©AºŠ/à/ö³ŒÃ@ÀHlŽ«óó7þ#™ù‹Xk�úÃØ”,®Õ˜×¼5¶Î¯Šª?4¾îOÀSÀQe Ùàé+��Ã«šñ«ö¹å5ìÄ2®ëÐ«“áøÀa‚‘ó’Ç/J
+nLM¹2é]RLð¢<�yÞtBæµÉhLíéXÃH¢#pXæ¥ylWGŠ^”tô~�äEfcÌ�N	npõQªÄŒf�zÜÆ¹Éƒ—&=E�»ë�ÉÍ¢›[ü<‘…8Iµ}9l}\Rb¨^EOaäÅ^~Äl´Ò&ÞË Ä�¢û¤z¼±úÆ	­aÁF,n	#mhöSœ0´ÚÓƒ2-3 cý2¤ZOÜúqBýú´3ý‚‹‚ëBÃ�œ #—”Ô>sT�;Æ×ûÁÛ?‹sfŽ$®Œ¥òºÿAŠs2(8çÊÁØÐ‚Ãvs\«füUŸG£)hó“ög%wóàÊnŠ"Vði4#í©pr/CTás”(J×iÁ£b ¿5ÊE×›.Jª¬œöê[O_?+ï´YÏ\ñQ÷‹¿ô§í.µh£•UŠ+¨L#¶qbTìßÚæ*l5¯ í	úàuÐ¡Öö¥ï´”½A¬à{´ç�áÜTq©-µPN[éŒ[·K½<å!…K­ÅóÓYÛŽRŽ¯³‚‰K`˜eÚs°aû\�¶ùÔ‚HøÞ¶fÙß{üÇãú¼swÅÉÜÍÅ¬¤}¤[Œp8ZÅ]ÿ¤dSTúSXŒv+�º3¥dŽÔXf?XaG�ˆ
+­éf¯˜áÆ$}Œ”æz•€ÈH{‰-K¥UvÓƒ¦§“äú^¤vowªpfíl&•ÕDï“Á±Ÿ�[Ô5/†èWæ:Æýn¯øº ´.òˆ¨�6Š4ž~›ßcù¯ø¡UE6àhì³ŠÖ7XË™6"CÞÈ	8r#rZrãKEÀ%ºéàƒôä3â¥ª‹òc±t&¥_ú ¤Xì6bçMnÃpÂøƒ¿!9ª�û`“«¸_-ò½ý„™å4PŒyªÕe–‰²r¿—;ðWäÒñÙc6K—ƒYàƒšOÀ››ƒdl³%°±bÃ>Ðí„HT`$cµ�ºF
+_­_
+^ -ýÒ§×:è’õ<hE|�Ù|ýG	³^žÜè¸Ñ¹7b‡ÇÕ=‰LœP¿±ç¬_‚Œg¡LÿI)ãëžÈë'ón}mŠ5&`Áh6ò/Ÿ|'Ôk„)æ{±ÕCª=G´.ÿ$˜o‡çä·S0UŠ5ÛÔ4éÏ0ˆ(’ç=?i­MÉ>Ò)Ž¼Êk’–‚½"Ô‹f¨ö9ÖÁð½M�Ñ)y†65¢D[¯Ð`¿*>¦›ZPs†Vng[¨¸l’<F›{Œà‚œvnòpT$“›&ƒ$9KšKùh'´ˆÌÿwmèÀ%[nn¯m,Lt�`ä½ÈÀîµò³•×Íî‚KÆ(âà¨Ü›dL §†VëD2À´ þ$^
+ž¨|ãóhü’Úg�Ê½…v¦ý	Û½Ö�ÇÂ‹Ñ5¯¢"Øÿ^BÊgÇÔ¼´¤öŒ[<Î¡Oq`ž­¼‘àÿ°_ú´•vq?Tj­L’¶Ú‘¼>™ îÓÊ“|?á¢¤}�ÿ ¸Wb‡­ áZT§¯`~›‰jØd/¼ë@õÉ†ÛÞ˜ò6öÿõ’¹#Z|<è¡åãz~8ºë¢çkm-À[cœ9_Ìiß8Çù!Á~ã¦[ÇPÂ
+.‹©7n;Ý¼í9ç˜äÜs®A¶fŠy~ÌãÜž•>ór"CÂÛ” O·¾R6òªÎªÐ1¼ºZÄRÔÞ¦,~Jš,goo™«µczÎïš~ÐÕX|5³Þå3­ÅW#ïw³-­„°€²7.‹‚‘Ú¦}ÀÁ¼Xgú�‚ï|Sn¸”7µ"ºÃroRŸŒÝn•Áæ�QÕË˜…àˆS‹ñ%:¼=Òv	)Þ2	†…/uöŽõÑ´ö{WßŒfôuwT�ÚQR§ƒÈÿ¶?Š"gOu�8�2²vˆâFþj`F1c›©„!qÜ7Ø"xß´·¥âº¾½ä˜ñÞc¬ÒæÖÒê|ü¡¡Ù]>Èk	fíôVþ�j½€W®iñ5Ñ`~ãJŽ›û÷‘
+æáŒÒ?sz‹ézË£±ÆrÄóÅ¹yùÂGÖ)Qa'X‹H[±–Êþò)gÃr?âž…×ÌwÌì Ì!ÏJNwpæ`ÞR­ÇÈéŸþ*ñËUçËîPŽÎ½n\ÝS°ºë×ÄÌŽ®y�Æ[?ëúºÂF pœØ ‹ÓOŠ’oœkªD(3pÉeçžžøS%µÎ™qR@$ïNlPmtî5|Å°ìŽ˜ôqu~A¸:Be&Ò’Þã°—~ñ.­•|yj"Q<÷‹äw­°ÒZíƒMÃsÆbçEà°Ñù¨`¥˜Ðö›H¥b™-ö¨ÒŠÓ_TQò¸HÌnŽ/Ú¦¤‘�¤±5˜ÏZóÑrE7¤^
+Í<ÀmH;i¨VncÏñ–Ô[ÜUÓd €Œb¦.Mžv_Ç9œ`‘_½I„ØQË¶Õ |'º`tîx,„xDë’{†8¦fS€rd�{GåÞ<¹á	cj^6¹áñôÔ¸º'On”Œ¨þèÈwMj��3¹QŠÆUãvö�ÓN&öçü9§E§Ðòm*®uþØ:§šož’8]yrd[ýé¹*«<ø0x,t@i¡�ŽªÉ¥�/Hžäqh‡ÆÉ#8 g%wá–Ü–z�óŒäFÌ¯è,öâ!èIwØx:5T	¥_Ò5Ê+û„–òÈŠ1]?š>ufß¼©�ªÆ¨qÅ‚gÿôi•:šGÝ2z,åß¯šÊužAåZz"¤.”`^`ØÅýrÈÕ‚6æœI�qôÝU–[§MEŒ÷;,
+¬›‰wžŒb¥o´£ùfäÈy©Eùª3âƒcžŠæ§~²{d‡ÅEm—¼Øô“ÆI3•Éo¹1UXìõ"ÆI{ïm«CóDF´ÙIì"ïñ;‘	ïÌu³ž}½@öˆ1ðM€ãFn§j‹Ýh#r­ë=Ë(GÖKÐd®9…øFñí°R¶òyÖIë“ë2Tk¶¡k¤š±‡ãe1®ó‚ªË­šÍ	¼{”Ùá;ß|Ëßcù¯ø¡U-cÑMÑ@!Lôªœç‰¥’ ív¥q%(iŠQÜ$UU9Pt¯»dLTudð^Z�ˆ‹c¥jqÈétÞ:‘TÐ×@•uñl¥M5Ü®LäÑÄ’^ ÂžÜÛå»Të±JR»˜D%Sn/ÑÞü(¨ŒÅPFŒ¬±V)î”�¼tâAwqóƒ³&»}@ÆØaÙ½AUtRƒÌaÙ]´‡õ›±u~‹!�”ÈÜ›ÞPÌ•Åƒç9b„ùwÖ©‹˜â9¿IÞ;#^ÇlÝ“ßøI¼ËqìðìSÁÖ_b¥9Â/ �A_÷'¼;(sé°ì"Xû¤‹ôsË-• W5Iš«dûƒÆIó“Õq,V–ÂnŒ€+×¬KK;”kIÈaà×™?R3\/¹„wÿœšsG¨7F=�J1ò¢ÙÜ#µ¬aæŽsøƒJ}½ó~é
+mÇìpPû¢¤ƒXò†rKVôãÎIîÛù*‚\b.Qq®éJF»èw¬�VçŽ˜g�AÕR›’$î›Ã9ô�)aé¯á·Ð8’cj^‚B¯�¯÷#B{‚tbü©Að0ÍJFÀ˜{-­M€Iƒˆô…s8ˆsBûc¾ëçÊ�¹Ó¹Xê×+ªþ žÑ½ôLÌÏYÜ^/!*„sêžèâ¤3�i—à¦ÔTBéöe‹¢w§Vš`¼@Dè"Øe=JGôâØW&í:ËL
+‡{–ócÿNå{ £U†ñ¾Eâ¸¬h1æ?^,Îˆy' ¤uÎ½»	?SÄk­­æ�Ç˜ËùÖ×î(åqïàs“Ý#yxG»RqáO½”ôËiï8K‡»õÖ¡uœµ™VÎE=®à¸_Lnæ¤uàl�PÌÃ¡T…s+%è=&j`àÑéyb< yË€.ö›Í�ØBß•Šì&—4šÀ\·ÅémVT¹+µÔü*º\kã²žô�ãGžE[ÃŸˆ¬ rh¥¼³ËK¸^hµçiq4Ìc»2qO‹¡ó�Þ#ð.Ï1ˆüý£zœ¯M4æ‘ë	gäWfjE¯J[óC€/úSŸ©ÍÊ•ƒ2{FN83×Kd=%á½Tu‘@�H0vR"È(ñÄÛ„·yÄ!ª.¤vÆÚÆîÌ;ùeŒåuWH•mLÄÞº¨Õ>ÃêÞ§2d¬÷]©e^5í¤íEg€/ÖaôÔcR`U¼�²+ihNä(6¡EÃsòÜ^®úí€Q%@Æ —Ô>kŒ9('Ö¯1©AV”`óûÖOÃÒÎú•!ò"ÐpÞYÉûgFD9õ‡ñ.ˆ‰á%®=‹7‰.±äXlƒìÄúµgÿ:B`z\ÝŸ�¨ÞbLÍ‹Åß^ÈÍh±qƒkE>0—/Mz0Ù©½…)°ÜÆ�©×˜ûX¥n³®z9½f×ôZœ	|è#•Žîµ²’³îýº£Ò¢DQ>NšÔ‘Y‘¯ËÜ‚¯IFºîïº¤P¸15åºdÜC¢ %*8.Ožw‚P®Úó)@$¢*€Ý¢ñ<b·<’¯*l}Z�=Hçš–oŠÀ&Ktæ%ÕÅ6%]F�HèM\Y\ë<Ñ_ï‡àÚ«‘Õž˜‘Îr�NãÓÚtÙÛ?�6�ÝÉF±}ô³xˆ4Hþ†î ð,©}ÖÄú5‹k�2ÉÒVC³»€ÑxV!°àúd¢ ßæ¡ Ê“vW&}Åó®xçö[²ÍyPm‚÷ï‡]�.€,û§¿Â”á‚.fä¯yo¤Ó�eÛ.7õÎ'FÛ‹«Nžá|p¸w™”�$�ŒíËf�µ&EOâË"�?â$“¢Ë¡Ú))óÝ&8²ä´¦Ï*�È×íÊ´,�K3{Hêú�êúÃ�v¥á“¢�òæ>£s‘èWÞ`•–ëf—™<ÒÕ!O)æÛ/1œpSêusýñÕGæ+Tˆ1©Þ´ û`EÎ‘ŒfÜÓy‹w&•$—uˆçL\MÜ69ÏïJô€Iÿ8¹½üjºUk°;ZÅª€¸¸�.®üÕueì¬ïÌ¯äêù>íØó,tŠd²÷[ý¶íQ}xóÛüƒÈÅ­
+xI‡}Ë°ìŽC«=F¼Pe	S†	…EÎ?îkÕEŽAó˜ã�DXÎ‰Üø*K˜Å±P™Õÿ…*K½}IäÈx³)fVb,¦¦ItÈÌoÄó‰µ*[WÉ%ô××n¸8ád2\rªØ
+¦,¬:AÙk›½ÏÂtæ
+ÄÀ›+€b¨û‚®¾´ïŠ}ÀºvŒ[Úû\åµÏU^CÈ6P¤+¼Æ´Ž­sÚ„úµ�*™°.8ÊjÜ^\ë^v3‘LjX‘gó§‰li2÷·Bºï%2Áü‹¼ �?^/¹*¼€�€æœÓRùÅ>¿÷ÇäÝßG€	Úò��•²ÆÕ=Ié= ê$\åq,¹‚q0Ùµ¢³Ùç%­.Kž5V–Œë¬\ õçÝ®æ¶|a[­ÓŠTaµ4ÃÑbÀ+¶EÌreBë�× ³ãNÖ®ÓjL�«ó´x{DY‹¼v‡])\$Bð¨€t&æ—xJú€Sèˆ‹“®lÖ)Òqý]¢Ý«b–eÜ¶Å²éÜnATåo^Ð`xH1ùc
+ý5 cÂðœüQ¹7Oj�E8?²ÆÝckÿŽ¾ I�¿:¡^£wÿý?Np?èÚ|a“8çµï,F¦qÃªáíÈÏqvñ„úõ\P•à”ÈqtÍ«ˆîñ—Ì¸Èˆe:(ÛöP�J�~�ñ’¨‚y—ç=3¹CKy;­yC2Éèÿij:EòeÚ ÛiÞicg1Dåaî—Š}l@”/žXM’Vâë¸‚3ca…­ ¶jf·šî;/Å6ÑbVpæ³|»Zóc_lg:âl,ÈðqÈ{!WÉ?Q;_TÆÔa­L˜$ÛŽh!w«÷+{TúÌòÐN±ãàë%s½LJŸö¬´ýi‘Òçk—ÙE¾òÄ2‘0rY'k™_ÑË­ZÉŸkB¾#ÀØn+¬™ä�ü2]c;v«øºn°6�ž}Âf’JaX¶*õXÞÉ+âÜg2•5‹¥ü AP¬ì«ËÝrÉkî3žø]×Ûž¼XuE=]'ñ*û®hlc^™dö1ˆüýc¥:º{ÅØì`Àó‹�b<+¹÷u6î�êaÃUV0SCª=gÉH“{÷I›kq=Æ†ˆlWF¶)I¬í}Òæ …ÊÞßÆ/ì`$]ÈP Ù�à_/1©L8’·�?Àd¿#µÐ{Rßo…w/†h [vv'3ŽaÌÍ€³¸‘V
+6•:[—²ÛÍÝ‚®òu	“GåÞB20£”ÇÎ„· ñèÞcëüpŒbÆ'À–w²°½d'ä€kØÞ’ZçLj˜ÆŽ|ty˜_Ç’œóþã_ÐSžrÎ¢‹:9È»³N� ’‹xÁvÆIFÛïó—°eHµgûMw_L�c¦P‹4I}Ä¤ú.A™A§œ¯3èà—ªÎ'Bo[ºQMäú/Ùá˜ÔÎ±Áä³^7»>™@€Ï¯t$±´Á½é¼w—�cç15®¶~P‰Rï™àË’^Ä‰M“ZÅÝpCê1u¿ym2ptÒìeIoŒ•iÜ@UC¼e‹5ÆÖyL\¾ëº),Â�Q­Çb:¨oÚ[ør¸p¸g#ª?Z\ëÂ õË˜Dƒfõñ1ñ#>¦æ¥ fIí?â±àœðwLÍ+§k˜sèÿ¥#ˆIAOEô5Šª7‹T«z?*©}öà¬�€#Çƒ*ç3YÜd†YãäQÚ�húöÔü¦É ¦Iÿò2š×&/VYÌTrùOÔ)xûwœÒ¡tëô±Ó�œ£UšXx¾N",K™LŽ‡€WÚ[`®7Ð¹p¾
+¼0"õ¥ÍŒü—«¾Ï»VU�uP´·LÉM^·i#[Ê[@˜pø
+°€ ·uìG„˜8³˜ùbÊ\‘êÚŠìtmé·WºS!µ�w¸’'âA”kêÜ†ÈI.�ñóE/ Ä˜�Ü›‰—±	¦”ô¨÷y| ÎÎ	LÿNÚT5Ön§ôtÖ¦g»2®-Ns•ùž(ÛÙíù‡ö7Ä“¿÷‰(2úà>Ñ/ØòÜššã¼ ©s¢[‰ŠÜæj&¥6Îñ@¥ÝäãíÓÊØa¦]'1pµäöXŽ"ÝDßæ÷Dþ+~$©ü¡Š>>ÎTÀ¸�)©}�ˆõD©º3«êû-Úžøô…X}Ý¢ÌÏµ¸Û”Þ à4¦á¤ÅÓ™œ�QÂ“NØÎH¾v³M´$™ôÆ„¢¢|ŒÅÆdkíX1ÙTŠx•×%ãZDžüf+áÚgsšAy�s�&æ3‘+³{B¨Ø£ÒNÝä²¾ioKq£p?<çI¼ðh`Æh�qd�» D±”_IhÉ»¯¨:Ãá!X6<§V—ð�„ ÈãÿÎ89 ‘DlïòÃóã‚&Éü³“E…õþàü8ù­ŸÅiïü..Ë‹Èj�=¡~îJe0ÎØŸÞ•¶ØÙöÆíP. Œ{@¬íÅ:¯—ÒæNÍôÍ¼'ö¶(ŸÁwV£nÝàž2»v£@@ÉÅ�3ymRLÿb²°N˜ô§"wñ°ëìnOÍ™ç†–J°¤ÎKžà»¼R§Šõ5W'Ã´Šmfw{½hë¸1ú‹ƒ&U–àz-®–Æx2îSl#dhµnª¥]_˜õ²7Ê¢#ª7Ç+YãÕ¢^5¦æ!:Vóât\PÏD^Ü~ïÀ_:á?Gûs„“·>¼$yód ð{4;×á­÷ÿaæ”ÆÉôòÈQ89�I1 c¼$ob·kôÙ°‚y£[,{á®y®è¿*)tŽ]¾6Jeô&»ê2b^´	t§5IP®iBZ¢HÁÍŸïÖh«¡Û^�¶ u�{Ÿ§ìRŸIñd_„Ë`ƒß!W8ú
+NÛÖRd$r·¾XA,~8\Ðƒâq�èÏŒjª�Ú®­ÿ�¹Ä¿m«)é% ,cF‹À‡ËreWÙ­
+—,ðúðÔ’¹à…+^�ÇîíNpÊÜéÖ^dððë-Qçk9}TA;£€ÐVÄ•4Ú:úk] ôi
+S”{=êå™ð¼¥i®l¢-;Øø3x5ÆÍ»£òw!çx±šÛ£yEþS*^)2ºÏl”¬‡âô	ÄŽœi…´Ýu+ö*Û–-´9ê(òDþ÷ü¡U�<%Þì`äVèz\_óŠ`—$ô%s°OÚ,�‘‘Â|Ußcü3×T>BðÌ&—4º‚k ù�¯˜ÔöÍ¼¦¦ƒžMâi<`ÕcíàG ó�äl[¤÷‰wðúT¶Úûnø�ÒušŠ)6©Ž*¡Ö8óÜª@f…bÜjëÿˆ!÷g;²Ð«¾ëN÷÷OŸ¬:‹uýÒ§NnTÁ¤+“V§&6È*®uîøz?_ïÅµš”Ô> Wçf˜öãúˆùåˆ9ï¬°Ì@$6–øeñ•ÉÂó“/Û»°IXf¢›ç8b´—ß”Ì;;Nûà‚ Ð	õëñÙøêé`4!í Ì¡tÍU–Û©h¬)+x@~~îTG‹ŽøÔÁÒ5’€°ª¾ßS »Gw€ŒZ·\É³ó)œ�HA©¼Ö›€íKiÄö;%O	'»ÌíªçÆÓ_”i£ÎúôÒ¤‡)¼°ÕQÂþH(!²§°T w{YÒ“AØ’I%.uIò”ª#XàH«`û’Ûã
+ÞP31¾5bºÊÚÊ1¹Ñqcj^Î	D÷80!@–{Ýøº'ÒS#kÜ=±AN°àÖ>›¿@˜8UÉÆG‡ÒAoœ¯ig|˜wçÄîði‘�LÆº·²°<‹k]4¹QjRÃÊ}ÒÞ¡qŸpüDXúMï>éØh/ñï°îÓ­´ë‘
+!ßÖYÄ­Ž,ì0§¸¼H+3e[�ž/Rÿ¸_úã1?ä­~éÓÌ7EXÖÄÕÊxüë€…{àãÌD~Ujq„Þ´®%_Ç9F.^ï%J¼<Ì�Ðw�U(ÅMnÉ«‚eúÈ{g%²£µâ��çÞvN¶ÁW 5ò�Þ+ôò²“<ÇŸ?"åÖ¶¥ª A¦ªÅÛ/M¤=»¯¼«Ý%þ¬vlñŠyöƒÎc:G!Itüˆ¡pfpŸ;3–ãbv}Ïí–Ô›&#j¯Å^•W¯¼1õªwdìvº”ÃdÚÖÜgY×Bz�ÄLæ
+Q—ká}Øgµz†7ëepï;ü·„ÈîÝ»×­[·R¥JMš4ùÇÜ2Ç~hU<ó^�hŸñW	9Óˆ¤:j1GÀ·…¿Ú}þ¸OÚ¯äh¦ìWä‹Ex¹fv•Êä—åZE ç»bL³é=ce;Ùv¬´¼»/-Òíqn^¬¶".%ëö‰òÖÖÜzSpDoNM·N½TêvI3â°tÀƒ¥Üá¤ã‘Ç”'©m¸Ø5ÀªðtšéD+´”§Àƒž˜¬¢êª¤ñ?Fç^?¡^#ÌoIí3Šª?2¶öï°ŸD(#ª?êj;eƒTÇÌ ¾wF„'D…Î–\tq2÷ôÀGÌïâ+"‰%çü&ìóûg*º9#þåøÜÓ’%W‡q&´ŒÜ×“	õ¾;²Æ�#kÜ1®îO#�°êûíJYÂáÓªªesì×TØ*ªä­®²·¦g§X¬Ž¾ õbS¯Ò©f,3K<V«0ëEæu¿ôéO¯ÑV«Ájý m£ò‚¡º®ßþTXàÏÍ¦«mÍíxàÞMS-I�äp3bT[h^zóÚd”J¶?û]r7 ˜«Gaæª«’ÁÖòã •î�&à'ß¾\u^«plJ}f;;öÿ¥ª‹
+³^ ªxwpÖ@B¼!Õz­Ö}l�_Ëî8¾Þ÷½R:¶Îo&7üÎàÌA€`Äò§Eð1&­MËƒ�+o|äÈ¢ãßÅMcƒ’Æ§Sø}Ä ðŠúðœ¼�cLvDC1ÀÌÝýHÕ­½o\ðÌõs�¤ÊX²æ&M�K34û)ÀÑÓ�‰ƒWÉý só}ÒfÒžâ\*ô-^èwù‹U?’¢ô¾�%¡q¤oÚÌÎÂ£È¢‰ÊÐXP?îÎ“‰=û¦ÏœÕïéX8ÞcNãøUVm9Óêá†BuånE@_wÓtk^îo=ó-¶CÅ5�zªÜãÏ¥Å³”sÞª1üçÉDuIÅX
+fböI›MS˜–ÇéëŽŽý-<5cF³þKÓ8)(\¬é¦Ía¾3*¸7‘“÷
+¢ñ7k�RMÙa-Aïs}“¶¿ñf¥+¹IEo y­ÊáŒ_F¬’öYŒ•Óº
+ñÍä#®Ë��Åíí}°ÂÖÐùR>m;EöÀ�tñtÔ¸ö‘'#§q�_àË¹°ô(·9'ÿ¸¿~Ëß£„H3”:tÁ‚�7>å”SþCé±Z¼À‰eØôKŸÂP¦}ôu�V0\Ä­ÅœÈiT™îè~…™{Ÿ¯²š1\Zª¸[$íúS}Û´º²LƒÿãJ9x¦b,¶p¾÷â›‹cDÜã»�?{•œP&N·ËÙ<«Ö:]‡@Ò²é¦eäƒ’·¦æŠ�ÿ¥‘/b¶bµøöVJ2'<l_Wb²ü—™Ø?cRŸ´¹±‹Ze1Ácß´2Æ­öLq­ÆCª=‡žÜðøaÙíù;3Ês&7J3‰8ÀÇ©¡uõÝˆû¾Á#âçGHð-»!ÖN1ÂóÏ‰t¢P’ã˜b å|Žóî¼3cï’ “ ë�=ŸØ –™sŠk�?:÷ZŒ¤µ/qÈ™¶Êb}ëÖàâ|Ú±
+Äç´á9­µó;›n2A.†hPfÿÎ,i•Åbxø@n�UÏæ%`ÕËÕƒ‚y‹æê¬z“‡bkæ0ßÕFxí@£Ä 1ë‹dpg)7uŸr{VpÂ%I7oSÞ�zEâ#“Ì€}Kê-ú×~Îí©ù7¥^ç|Ì—×áõTÒÈ^/à³�ÈyŒûWÐ´
+dSóÊ’ÚgáHŒ¨Þ<jëž<,»€vOãgáºD"±6‹A=âýùgGD9W^ÊŒ“Ôà¿ŒŸø�–§;8“.{G…«„ù€iQõfŒ�15›Ž­}ú¨Ü[^ª:'Ä9À�íë÷È{­¬·6G«Ðö;Hì›ö6ƒ°STøºõh¼ÿrÚ;C«=Õ?ýð«G¥�ÏU^'ÊŽå¼ÆØ©Ö›#Áè˜1‰‰Æãh×ò³¾io2õo¾NWZA |ºâ‘ïõ%ô*Kø–ç*¯~By•¼EÿÒ•ŒmmsÄ~¢v0wš…†¹À:¯˜¦öR�SÐ];ŒOÂw‰‚ ÒÑ;hÙ‡ñÓ^;4…5¶€¡òÒõ(P:á�	:–e…uRÊmâ].~g*J®8H9%†ÛPßnå®G½O~ˆe|ã¥TïW>¬¦n.þ%Çéæ–/g·ù—Žd;I“Å®x;­Ù2eá®:qr1qeä†i-š�›ä‡2,5z—k�õ§Àár)>ØU‹Õz½ß®¾Ë®;ÉOˆ\1zýS­ÿÏ òŸÒ¹8öC«2&±{Îåf.3g�ŒU•KìõÖ	Þï Ì!¦ˆ-¼ôuFxaÖKÊtýHõ†SzDöøçâÞÙë
+…Xkª´ÓÓDŽî×8iÌ‰w|iìÉ'ýÈ‹ùù¢—4qÖÕDÄÒL_Ï™t˜b%�o‘Z\Tü95GœQ»ÀÐ?§f›2QEX»™ª�cÅf—qµØ{cF÷÷ ükþOŒø¨%¬Ù£so˜9*„�ëþ˜àÛ‹MžÔ |%1§D%V‘À®¤€np¿-ßÿc˜Yì0Èøá¥�†&^û’‹.J>º,ùàÂdáyqÆùÃ‹ã5Ø
+’bÀù8¿ãêž2ºæÕC³»H˜l‡¸æJ”v‡«Â;–¥ËÖ˜\ô@¼©eC©$cŒ2?óxœã‚5%ü™5j^�­ó+«‡x9ÍŒ6I/°�Þºå³t´ÒJzÓå~asàäÉkWy�Ëbç%�cOðXîN-»8éÊ™W%ƒnL½*	Œ±BÌ"úŽ‡òÞ_‚+lõÍ©é-EmíUñEj�O1õ0ü1ü:qHµg	ö	q!è�WE²®K06üGieG4é¯âïÜÓJ·‰‰ijº(æá¥Ð/üKÇñ.-u¬b~ ;Æ×û#¿_úýÓ_¥ai6šhà#‹GtywHÞ‚Â¼-*íaÜ2„:E	çr:ŒcäŒ«ûS;–±š]iKte•ÅNÇíŸþZaVð— x`fýÅÓ‰'yç›ÞŠëcÕ÷,Æ%²à2¸/t&ïÌ(Æý³`· n³‰&¸HG1+v×bBYo×ÊjämªTä�k!� +yñý°v9¿È¨gº]eÆ£‘ˆØ5A¥»!_;iÜYèò�Í·Læ"(cÙíìY'8�Æz U�œXã�µbñ½¹s³79-.Š)º+W¶£	K�`%D€	ö.®t†ª?^šâ.ðuÔin[í–~íbF®Lój·ô3+µõ€	¼»ŠÅðS<©l¾‘¶}Bé=–k_¶éö<JˆÌÓ�}›ß£ù¢V-ñØ�2Z'0Àˆþ:*m[Ë¡[LDcG&…÷&0ŒØ(32s�ÒUYs=+mg
++'6j…¢ -#ÄÛ%NˆÍüFÄ}„ŸÖ›h''ÐD%×'ãÚ–õµ÷.@( §h¡c£°´bo^mÿÛSó8ÙD%¢M[|Oj�Ø‰£f—’û÷Z�kR^N{×&˜\-×„Ô¦ƒæŸ’ÚÂc'Uã6pS… *-'fyEå^à’°Ñ•��§b�1¹Ä XZþ¤||G ßGWÄ»•®\.¿!ì3ÇWÜ;ûÔdÕÝa¨csó»‘T9¡~]PCGkÓ±[·È\N«Põè\zŠ	+E’BvHµ^˜5€³9²ÆýÒ§pñtz«ç³•7ŽÊ½pyQ+–ÌkéIMž“/Â‡Xdv™�98‡�fQ•Á…ÿŸÛ-7™3–Ò¾TüâˆUzé«'›!ÐÄ“‘†×T¢EPþæÔ„ù<zkð,´î•BÑÙ&AíºÉGœ¡¡¼Öµ.H;@œáÙí†ç<Iok½%µÏ]³é¤†U¼4J�HMn”¢f(	Š¦^v]éë÷þXÚ)tÄLíQšòÎ@R9‡__hBýz\hµî¸OÞ†sÍ‚²’Vã³åE`{Ø‚¶¸Ü¤îXŒ�10£Dš§+ñ[ÆÔ¼‚‹Ð¶"Íë"öƒNÌ;š‘À°gP¯°H«¨z—öÏ˜üÑ•|jpf!ÀúRÕýÓ'«»W˜Ö¸mÙ&ƒVZ$Q.áø‘/R:Ö:U€¹É”¤/BB¥Êjïóª�7	bv:"ÃÝb¾»nXl_F&ÿd”ðïñ¡ÓÎCÔRÉ6*ÄøÂYÇ6NŠ#jëy°QmÍäÍ z'E<“G¬9Ëë*ñÆ¢ŠsxãO
+‡Í:r[ê]o¶/ýÆ=^tírB©¾‰ƒDožZóÚ»ŸùeSÆ%–Œ"ñÜî2(‹“á3kU{k&O»¨×%%Œ^ºØB´NÊ5÷»«c8ßšå{¾ö=¤ü~Àw{ÉíÑ&ÿ­ róæÍœ6sæÌò#gœqÆC=ô­Päÿëš«¬´j›÷ ÌÄè²f«�e	³Þ–ÓÌ«X]­£~Ê0g™¡Œ@BQÌ&Vô1�çïuÕ€qN�Wx¬EÕNãÖÛ…VOPÈnÐ­�Æ|y‘Ñ¶‚¤DA>œië ÐS¯8ûú–Ô›OwçSHº�OÝžšoýtQjvOj-~_­døÝªt>¬D q§xÔ1›0)øóÃ²Ûc�‡ew‘óø Ìá}be¬{Qõ‡Šª?\TýÌïÄÙ€#€H¤¿kì�·1ÈŒ“Ã /½&BBH¢EÂB•e×—þ~|W¼»øÊdÍýñbåm�Ä•à)Pû–R.Ç×ý	_GÐJôü½PeE9¿‡õ\KŽ5½À�Q5n”9TŠf³1­Cª=äÍ~
+”eŽ  õ¶�ÇsYpŸFè}ÎR­·Õ3iï|Eõz$0ïó&Gœ„lù0g[ÑÚ¡`Ul[M:mG]†e‡d|?Äuq:=FÆ©;t·™îK­—ÌÐ&,’‹"óPyŒQ�b³ÆW÷1Ó­. ’õüðì¶2Jp´W{2aþøº'ŠOþôé'Åšê¤™´¡sV‰é/ú‚Æuáà‚&á™Ð#‹.ŒÞYÜ4œ“%WÇA"zšt™Ý~i™1µ.îQi×³•×‹\1´†ñÍžÏª6öYnxNëÂ¬‹k]Äø‰6Ï½al�ßŒ¬q¯ijŽ`*ÒÚ¸%„*EÕïþðOplgõëø8plíÓéq"V/ÈKWfõu¼YTýQy;=ºînž>i3i™�så£½í/U]ø”¸°óÎn•Šë>—FÒª¦œ˜9RÐj=»HX­´¥u¨G>[ç‘6©ÆaµÓ½´,L„»ÌË¶NÅvaQû2Úºr'Óžƒ°ŒÆ›A¼žcÎXúš~÷:°ó|žPz˜‰ÐA[íÌõº¥Ë@:ˆ(¨)%´á�öe[„�K %ÜûJ[\ùÅ•9çqINwŽ]ã�ÊmÛbXl­
+ïu¶`=Ì[œ�õ°þˆR7™ÖUÌEÛMjá<ÆÖ’÷Li§Fpìo: Úÿ(!ò¿ü)ÓùßÿÞùÿÇ/:‘ÿìÍÕ;xoÆ€‰˜\'oHÚc¹—Müü‹{&Õ‰Àå“QÓ½÷XE@Q…��iuö�«�eKõM›ÉTrœh&�1¾ÈŠWÒ5ßˆ™–±¥mÃ‹ËÉÎ»1õšG)žäUÉ ~ÍÈ*¹œU×%ãnLM!B¹*"i‰@ª/e²,™²ÅžøÎ÷³Üsß´7¹IÐGéûµm·L`‚Ã¾­öôˆœ–xûøð®Xœú£�‡ˆÒH1yN¨_Ë&zûŒ�ÅöÆ&WÓˆSˆ‰P–Ý­«þ"@¼5ö+?¼4Nà ç,½¶%9NÔÃe#¯òwQŒP\«±Rž¶ñv×í<HÖscaÖKLÕþéS†ewÁ®žàÒpÿ 91/hNÀXRûl°Þj_‰.â>E˜Iƒ`Ø1°aÚ[;˜‘š¶‹R¶ëñ—”õ±™þ&h:ÑÎîÙÈ_Ø*v�Xéc§WÑÔî2ëV ë—%½îN-ÓßåÍÅ‘~{j�Ä’ð ^Ä4Ý�Lz µ™™.!÷ÚÉE
+®Lg@bÜ@y•K,À¶Óþ@$N£/óÔ.V]¨Ð~rÃãˆiUâzP/²§~MMOñšãx5@$GÀGn…¾ã7ÂÉ?EpòÄú¹•£s¯+©}¦”Ý^ÓÜ6ãŽ8ºE,„ýØâØàYfõÇiöÕ[UoPã–gõç÷<²Æ½V�ÔÆÔºHJ17ðË¨ko�ÌÁ&{¥Õ ˜�ÈÌiIGÐþýÓ_QÂs!sSRGZl,ÏnTmHrw� f[ßôéÚD˜9"§•�Ÿ~éÓ-H-!õ­b“8Ìô,aÑï Wv ÖŠ‘¿’Vì*ÂÏŽÇ—v�“r]ÓÑN2¯Ö/·@i°æ¨Jjw[¼Àà¹&)òâ€V)7:µ/OŠ<œoBfñÁFV³3ÄD²÷W‡fAÈ¨>%dƒˆÇ� µŠ*ncÉaÍ­ú2¡Ø~­ ò2¯y$E„ˆUáS·¦Þq]‰íŒ	4œÔmÊ‘á9yNŠcî´	Õø‰¸�#XàÃ;Â<5SSs”ÙªÂ‘où{l¡õ_ñC«j÷ù`§²­ŸîÒÝx®òZ-Ë/2sÁ#³‰™Ët¦‡Ö]kòËŠ°˜&
+ÐüŠügU�‘8_á	ÀýÕªæQäµé_<à]šÇ[†nr¬Ýai•÷8õ~X©rìõÉsÐa“¯IF›Ü¡å—Õ3ž™&=.øÎ7.‘ÖŒ> µ  DþuN²U–°Tà£]@—#ŽÎ½¶¤Ö9@H4:÷ÆquOáà«be!Š$`™sZäx`xÁDl/¿Ä‰ ñËÊÛ#NY~s˜î�m"xäÈê{’m½c›Ì>n:®ŒT“ï%XÎQ5nï!êrZ›‹»¸7&¦jÉß¤;JjŸ5¦æå£roÅcsiÇQ5nžÓx�X¿6wØ7í­ñõ¾7ºæUCª=`Z0}f|ÝÿàyÅÝ}!åˆê�ÒËDÐÒú|'âëŠ»^N{KÎq¢ÔN‘
+²†×ÆPÚ�æõþŽ£-¤v1¬üè£	±<¯J
+M}[ê}bÉk“QR_Zvu2ìÚd´ØMß–‚áÆ{Së½¨²‚Cr¨>î¯àhÀ¾õÏ˜Äè5Ä¨¿
+X!:‹(²öï'5H‘óDÔzœ. zòbÞ™�’Õ‰]”Ì?7zdÄ�!´ßÜ)|^Ó#ôGxÁ™ãêžDÄÊ¨¦Y^;—áú˜Vµ†¶+Í×Î4:÷z¡á#cëüz\ÝŸ�¯÷UŽœdGMJ½â®ÐS42Tq­&¼ËˆòÆÖþÁ•ûgñÊÞ‡FãÓ;Lpl8(¢§{•nÝ¬_ú\¥Â.ï“6‡;#ÀÖH²ª´%2~ÓÞuŽ“nl�_16ˆC½ŸÛ+6D6hí=Òni[Ü$á.—žNÈôOÕÙY ŠŠ¦?ÍÑ~Ä‰¤G8ÑIåJb/ÉÇ;‡ó�	ñ\ê�/sA%Í~…�T¾V|*ø¸Ì”ÎÉå96’?Ø'çv?¾�v9¿ÒöÍ!)3Ðyv¯S¬]
+-Â�í–Z�LØ†Ÿë:í0•ìÔy=Ùû›]}5®ÏðÎ“.§×²�<)“KI†á9”g(9ñ	�Bt‚QzÜFA�rá6ü·‚È¿K×ù'hUWä¯j„0Û«À§@˜âM
+#¦m©\ïÓ-\²¯T|×Iû5Þö¸þ‡Ö{Ü„iÊ{§4Ü‘ú@Î{ùe [ÐÊe÷Ÿ?ÑG,ƒ(‹uŸTÂß½+µôÞÔZ°¯Ëñ‡DÇºäÏ©Ù*þ]|Ÿdßù qóöÔ¼2zÆM|Š8ÅÚmÒ^;KkÒuÙ<¶‚›ç‰‚{¶â~‚‡a�ÆÛ—Âx`8²Æ] É´žO,;?RyÝ©a„ù�©EW“.ˆ5=l2áÉÒëdœ¯(!×>œ¬¾/ùøÎ°ÉÄ/ÛE­—'ZÅ6Ùœ_G˜ƒ©Çœ‚Ø½f!4’^•4H Ó?}2ðäM¨× [ÄÉ `)|7áØZRûü;¦æeR¾8›I4ëTÂÞºø ä`6±Ìãë}_Á×ù„c'¨ä:\_»™ÏWYÝ=d6íc]*Æ‰b�©^²Öå_µš›qŽôoMÍ%HÄWÁäz£Ç1 	ŸoŽò4|˜×'9“¾»6#EæÅ`%¼55‡Þ¡ÅºyP	É±åÔ/â5ž—ø‘›SóJÂÆ	õëÛí	™oSóbuÍe¯ÿ(6s£Üæ7J0þuiÙ)=/ J^ãÉ,»NÞË=±¸J�¬y ~ñsðé2>Ù;?K†g·–Ýá�±3‚gìÜæöZü‚924»kQõGÇÔºXÜ—Ž«ûS¼,3/MnX‘Ö6¿=Ý1±AöØ:§�­sêÈwŒÊ½yTîM“V�Ô ¬$
+ÆQR­'o�®y5#�!G	€2ÞÆÕùù˜šMAa‚Sî„>’Öóƒ³úqš—[fŒé“6›Ïq%»¾ÏkfÍerW7©ñÖ¤’™727ùe2C¸L8�|£WhûEì¹Q‰:{¼ŒðLÅ=y¢ôf¥>²TÉ¨»]4Ä§âixì²,—Y¼‡™	Ö~xÞ7b±"/g¼8³®�,€Á®_íUc™É–M’PL®å— gd2nAC®`z[õ`jÒ¶xŠŠ#¡È>»²]ìXä#©Š³¥¸Ü<‘Ò0Û‘óÇÅoÜz<2�ÙI;¹®‘<zŽÖ'bÑì[ýþSEÃ†[¸paãÆ�O>ùäcEÿàÇÜ€f£êXæÚWTªç&i»RuóGÄVªwz^ÜE•Ú}cNf¦!µ7×—â8a×1…£Ëö
+E†Ðê?'Ÿä‡g¾@ªÁ;îI­±*ØÇP¼%õV'åÜ”zÝ©’ªŽüÐ«©×%%·¥Þ»8éÊ¼¸,éucêUã#§9ý»lß?ˆ/ÀÄ–"xtá³¨�>•o¹e`F±öì¢A©Ö|!„\pÏáóQYÄFäOÃ2ãÛ‡xÄ/(ÍŸØÍ;;²qVÜ€¸ü&­µ^Ÿ¬¾7Y÷h²ö¡d}‹dm³xýé€dÍƒÉ'ùÔ —^€gßýC\™æ-ÌêÃ={E¨Õq‡pc´Ü7¼#TœX?—ßI+MjX…ð–�Œ®yÐðÞ‰³p_‹í¹_"b‰¹‡«IõéBËÑ¹7(Ëå²É7€; )#Eé¯áê+9d[9!!6“ØÛbsÄA‹:Á9y/ÿ
+‘KÏðÀ¸áØ8íªg¥íAräÏ{Ä½÷ñã¾¾95ËÃ»œySj*˜ø—X3/ö"­!ÒŒ.Š?6Ñ”vû9RTý>"/Æä¤™ôBQõù;®Î/À5Óç‚žs@ÛŽçGf^
+=²ôêèœ|S�ö…ˆ#ûtV¬»6�-ËHÚùqÂø¡ê¯��ÃpÂDwZÅ÷^¨²„‘CØHKÏiýÆ‰	§‰¥ð,ûL¬_«”Tðä„xà&Þy¥Q&â†á_‰�à|¼ Á™…EÕï_÷Dz¿Eå“ãúgL¶ðåðœ¶tÀÇE¬Ô¦}Ì˜³#r
+�éaÙí*¾À9ÌÓö±úWÂÄá>½k¤bÃñpbæfv=&¿ ªË™ãœ J�Þá¾KKëstµyí”íæìènAé³BBÆ_ ¸¦’P1àW‹˜´‡Çq`ÔU^ç$'ù¨^éãÇÃìu¶ÒãtôÃBtŒoñãôw¥YÝx‹|]û2.÷n"»pB5®O¥IÁëuwj™¯Ì5óB@a«2?ã#6¤™¤i¥-d+JYp•”ëz|F£—¾½ëªé°Ñ<ºŠµç´?¼£Q'ô¶S¢N~Ì…Ð9Jˆ|¼Â¡où{ôÔÝºu«S§@	D£øÇ?±Yy#ƒGiüû½Ú©íƒ­à�Ê‡C#@²ÈëÖõŽBªÞ…q
+PèÊ o»óY§¬{W]Ü;›‹Ïê¾Ô®`G±XìnS¦ñê¤2Æ'è¦ôC—%=µ�µ÷¢¤Ã©ÍâƒZE¬�-Å®rÚ’kš&‰Aˆ>€Eb`¯MF{ã’p’o¼*¢|¼(¹jWªyzÄ5A†¬Ù$RÓýüòDX &]oÑë1þ³^žÓ»‡qÃž¼Œ¬q_,ÀFÎdlWaëÞÿSi‰Áã4‘·,lÑÊÇ·ü6b™Wß¦ó»ý¹8¾®yàãæÎñî¦öBÒóãã.]�Œ�z?t&°)iOÔ¨w ˆ#kÜ@›„‡�púI‰ªQRyEÁÄ¡Ü!æìv)DQõ‡B±^‚Ì,�Ì ÌÂÕ[€°`1ö–�YY—OÄ²œÓø:°Ó
+$ã˜mÞDe+QÕ˜Q¥nQÂÞ•6ÛŒ`‚Ú•%\-ª`g¿íâß9Ö¿ÀšÑ¹×$Ek¾2é{M2Ò”Ô ém©÷Û–³Œ¶g�U˜Õ�Ø–ÞÁÔ;¡×¥¤öïÂ1š"J?~1ÿœp]hð1ªV/¬Ä+#Z¼"ÙÐ:v„é›u�$Ÿ<kÝ�¡×•ò á±Œ¨þ(Mäá*ë½]yÝkœ-L°OSO3Ï¸:¿´ðYŒü*öCt÷`ú;×
+™Ó~ÆI¡\éD#bÉ±uNÇÏaP±F‚1€X­û¨·9@(ºÎÆ�,®u.Ý¤„Ÿ×1¿ê×æäþéSp·Ä°#kÜ‰;Ç/]Ô²éSgä]í�Î%TTÁ*b|ºuPæ0‡™Þò³Šw€Ä¦[ø<’�[d=tÚŸ¹àE!ÉÄÄ¦³§÷<¹²„M?Ñ$°>OÛ[ÌòÔS„!@ž·™ŒíÊÄ,nâµzeJ€‰!äÔùØ‡¹=Îw\aŠ§ƒŸsLŒ_¸ÂB8›dÐ¾(øN¬‰éhWÈÿÎ7Ò7ùÜ�-ƒYQð.×w*c ð*Î›öR·ò7­â.zœf÷³¨‚ÆªÖ_‰æ"ž®•¥­ddq@“Ÿ5Dü–¿Çèþ?¡S^âÌÿÅÞ{@gUmëßk= „$¤Aà9özôØ°¢‚‚Ò{“.`¤$@ iÒ¤·@BHHOèÒ›t”Þ;HïŠÊá|¿9çßãÞûÿÃ¿ßg2Þ‘±³³ß]ÖZ{>óYkÎg2¤	¶âo,xÆÞ)þ_5PÃÀµ|ÆÏ*òo“‡$pÔ4Lh‹S�(rŽ/|XÈX•FgÛ8HÏB¾u+“8³Ò6š@7ã‰¯h5ò*»8­ñ´�Ã¸“È¨ê†4•šÇ!˜ !(ÉïÞÆ.—oµô¶ˆ¤T^–\{h&GZ¦¤™wÃzË§��èüÓÖTëL¦”•HnÂXñVNLÂ€Ì¤&ƒ>˜²ùŠÑƒ”-úÿ‘³ŠKë^¼ƒ• —ûÚÊ6¶p„³@!aŽ˜å½-e›cÌ,ïm-¨ja?Û„ÀY´•EüJðŒª1€e¢ ú€XÚ‚²~"�þœ *Åc–¹™Ìˆòl€¦(»LÁÇ ˆXW8Ü$=¼®–ÜªSfß;98O@ã@&›©œä¿ôá©1MVjZà™_ºO&¯0ÑØ(›?ÿòöôu_É�]ØYy�hþ\K	ÃúÙÆo©á&´ò~hæ­À¤Ôu©@d5÷5ˆ	\¶õö°ßÊd[%Ö³UrÊÓŽ;ƒ¹–ÈOÿå8rôÏKÁšñè I,�|ÖŒ7¼)]g4­ è!$.o³ßGº¹£=Üá.Ò)ôÔ‰�nw3ñd6”?'¿ŒB@@lõU—]�ºicúu ³d³>ÍñEqŠè@Ój»pPux½‰À.s£c@ÌÜ˜¾Î~“¹Ó,•BpRz\K¯®åF—"Ç”�žü+'ú!p“ˆó™4ÊÏ{Dc«�¿¤ 1©!_jnævÆ0 KÅ‹ +SBz1z‰ÈÒîIþK“ƒ¿²¨fÅÇKº°r,°uy#\š
+�Í¯v¼/Ûëï/·¡ÉÎ§Mý _Ô”Õ5{eÕE™C±sÀÂÕÄ¤0N„KÞVâ5'ÛÖ,’[Jè«hð¯VØÔŠm™—Ý'µ.Ë ÃÇƒ»õñ‰üÓÔ ¹¤Ø·§°×Û{‡U/÷’IX˜ggUþHÊ—X••9°h1›eâ_&lŽ/��ÁÙ$3wkõMèš¡’^}‰h1‡&O4\ªÒûJÎÑ¿"»ˆâñúÜ…È?ãG‹a�ÂÜÅ²x­Ë¦ûç[S¸@0ð0Ññª$©‹’7$|Es|3$VÝÀÜB1»¡ŠÄ—MÆß¤ø-nÇÖTRø'f9¯)fû%•âÉämo·zt¿´óÂ¨-¼õÜlp°ŽK®ê¾†c6òætôN5tùÍ¼•5Üx�ñm×Q+w`�Íên4(	·í,ÕmÀS@ÉøÛÙ^–‡w{nHåÀJ`áqþÁ,OoÍS]”!Ø:,RVäsd±éž¼ÒAØ1K‰ì'„¸­-§š9	mÁØ‚}Gº»#_Êš#¦øpW!�:ÊþÓcÜ�#å¿ç¦	zî¨ç«4‘Qª2–�6· üÔ�.¼ŒØÀ13â5«DiÕ'E÷õ­Ýü¢³R\†×Ü�XìÒ…û�•#Á «âAM›"†Â`ÖD¡=¸&sŠUL*ñMrpÞúé�‰@¤
+ho¤¯ñð9S0Yc¹1«Ððà+¶žõ¥– ´<S–î«
+Õñêa|`”_ø]ÇÏÁi©ï2ê»,:ŽÅ±oê-¥[9†>51�N~WTzú¨1Ž8_@×ió^`ôÜ–j@&v	Ò$å•£žÂ‹Hû$2G‚¦Ý†
+šÖñ¼F¿çŽö”p¸$ŽÊÉAîäw¬·´?¤Rø~{a”²©¶øBVâ™ëò˜I%ÆÐŒÙ‘7_—Æ¦U×¼$ý.‚öZd„áOñUò‰)m|K@ÐˆdNÔ£¹1Qy¥ƒ¡ü@Ïæ—.ÎWÀwø>N)¤2¯t	@ok‘ÐC827£�¬I3JÃŸQ}õ-�}š…^¶Jz$£TEF)ãVÃ_WêÜ (ñÚ»Ì†h¦éBóeL«&]ÎU˜Ølñ±šó%;ân jâ¨S|® ¨Ó¹XQúMÃc±e›o¼�C}À.,iHê­ªT]ä´-öÕü²øÛ©Ž}n’æ «Ù[«Õ½íŸcg$ 7 ÀÜx++ç+QtÁÐ�WeODî šýXã°´”­FûÈR©%(™†­Å2ö,�ÅjÆáÚi‚°„keç[†ÚZPþ„¦Q_ÍiUÎÉÇ*ŠjüÿEö³_÷.Dþ[ÿhD«è+âsòvŒ-ºSÕY%aÐÄ¯èkU²Zra''ù¯àu³Üc‹¦@¥b¡?¶ñvêòßMËÛ5‘œ1:9£bçŒ<b'á&ñ¾Ââ4jI�_Zz[9}f5ôæØr<Ö©¶KÔêÉG?ö; 6t¸Qm½½Œü—]ÍšnŸZnj7±™·ª‰÷mko§ikpŒ‰ƒ†\½–KÐ5}¡´¦Å~pÜ˜š©bò&~¡ulqk152•$ì)ifhgˆ.qbÐd[²éVøË’ÇÅËç!)ð,ž­-BßŽõ³¼ÿ#±Æ{ZIÁDÃVNvg&Ê¤ëÙ)îô8™neÏ†·DÔ.%tàì·™wA¹Àk°	®¾òY·µÁ#gfü˜=þà„¯L†ß\å‡ÿqnIæÅo'ú±ñ¦UÏ‹}C¥”^¤õ/€E6@Iè ;1Ë&œ.§…7�àÿˆ9=p¯|zxýYa-±¥X`UÂ\J?+Ñú,?C6éV›3Bbû¯™ŒÃÃ–)UæHÆ‰å<ö*d…`¤"mu7‡Ç’"{«¹aôÆŸ ¥w¬x½)Ò«,˜)ülÊš¼&¢t“êÔÀh§…7£_RBºç—Ê�‰N*1
+O¾fQ¬{[É+<æ(KÃíÝñ~Ò)§†©£ò�4>=uf¼¬ ƒž?T÷M�J}‡B×v&]É¯sº�!3«ºM_ººsãÙ³Îdöih=—•C/|;õxêèã	± ìæJ‚ÙQ�ÃdW>'|6¿´?§]¢)œy¥CµöÙƒë^—éVž”‡ãaŒ8r<p–Ö21hbvÔ“y1%qØhsÐ�‘ÉÎ¬Èçx=ù.Ô‰Žƒ‡Ò)¹Ñep{ÀY`Îèÿ”âs Uƒù' -…dŽh/ˆ9¾Ø+‚ÌàŸ�grèôÔ”â�h‹+°z¬|…S)Xˆ^¥ÊªïÆ$Mâä3C?5©U¶Š`ìu‹Mhðg‘W`É}ðß®šÂl©ìééKý»Iï'¤Û¬æ!†;{H~Ù
+N¨¡GyÒÞr»4 ÿ¦EÚs“¸1&
+d®š®æËŠ�ÜU×V°0_ÊâþAƒx-è&EÞi3ÓÔÑ;	°â„ˆ¸ÇE1ø[¹1]‡º’4NO.�f‘E_i0�UTá[¿"?IØ?ô¹‘Æ­úµN € VÖŠiñ3w”�­N–M½j¢Üu¦&Øž¶Ä^Ž×µŒC`+Ö¬ƒwj !:'MŸ×SUoÞÑ3làò¬ÆqoñôV`EUòú‚U=¶\cÐöÓÛõ¾9!�‡å¬ãfTq_q<Û˜Ùjnxko;ÿ�-·Ž!Í~@³²‹kémLuÞõ‚Æ­�âÞÚz{8ž=v„ÔÙSäStŸJn^3¯81h¬ÄTª2lzP‚(Æ„�šÝöZF©
+") Ôï},äœû%>ÄdZ·VQ—
+>:	[Ä&ƒ†Ð–ý…¹\ž/fùÜtALøÖ{{-•¶{è›�ÿµ‰¼wØ¬"�·âYw`@³]mâä—×Ï_ÿf‘UJ‹°Ï?Nk³·CÔŠg
+�_³D€YJÑ“)'sz˜\ÀË¬Q ‘Y/KøkLTNôùeŠåDÿ5-¼ñŒC¡«ðˆ”�^lã«ˆÐ–QENZ¸~JHOº^×.?KcÒaZìx£xØ6ž’	ðö=±élq.‰éP‘óëô®N7ÁÒ@èV8&�ØÊÛ«aô;ßjàrmá²£ß)í´õ,-Íö£ÆQl0pÌ2~l+³ÔÛ „-BêM¯–·£¾¬EB*·Õ�YVaŽýäÏK¹Ò?ŽrçF¡�»šÈñ|‘¾æŠ¹ŸÝ<˜±ÿÛ†k9gJH|çäØ˜¶—§žž“ttHU0×Ö=×—wG'Çž_<ëüâ¤ý½kÂ^¥p3˜øW™¹•Œ×W�©31fòËø]ó¢lÛÒ¶h:I©èâZÝûyZ[+BùÊ´ÀTYñŒz’3àðNé”i¿aÐÐOœ ‰àuÆÃá}ÄR¿Wy4;réìRU€WÍîYÃFrp\Á)Åçkm¸]¼#ô,”�1Ïž¤#5|zŠÎ[Þ49;@Vðü¿ƒ÷ñ¦Lò_'Së4?1Ï^ð!Êïx³p·ilÈ ­ä¥qA¢{Ï¨Ðú&àénS!Ðâ˜¬d[g­ Ë‘œ_³8w‚8½%0fCh¢ÿŠ’–˜c¢è†‡ûÊ³»40.7HÕölÊˆ�ÊŽ7[ý…‘"°°Õr7LÄ@à9«Ìbq£ïÛP‚¹4”Éí2ÌLÓ�«[ª©F0î¶™g‹ÁÖš\7Õ™<€þnˆ¼þ?w!òÏø¡U'[ÏÈ1ñ^›K±DB|ES·RqÔ¹bxLÈž˜bØgáÙ&œØYãáÛx»-	Qµ¹þiµ!ÌK´¥pêV³ÞÊ:¨ÞþENU³À>h ¼ƒc0ª6=ï¨í’ØƒêÕsi¯ºº€àsîÍšn²|¯áÆ×wÕÝîáCï»†.¯¦ðÊŸiPPgÖhì-€ivðŽ©ÔÆ5þä¥†È½e˜Y“5ÆL‘r´'°TÌiñœÉÁf…µ.á/ð;W~é@,!n?FOêBVôé ˜¼¹Ð–vÂM6¿+le[Mwêkwr¨ðÇ%w‘EI¸Ì*-ª•ò%wutþY8‚U¯Àƒ¶’¯WËÿÒ‚/Ï¤wºZÅ—ó‘Üñáß~Þ·ìdRoˆÒ²§Å2›:·Ñ[/À*Q¯á� -ó”¹Ànæ”Õì¼ÐÎ*¿3š×¿}tÑý ¡>Ú§X¤‚2÷p?X:Ý¢@Lüê´°1ªV…Äj.wèí üQ³S˜”¥É—©Îüõgv‹•\Ïzn6ÎÄ¿ƒfD6õ–1ª¸�ZÕeg#o>C¢¢ëÜÎÛßLã|ø`¿Ð²\*~U'¢»Ó;ÝºtF‰!�,u ¢óJ‡ýM�‹‘ Öf2›Ío@�^À3¡ �çSÝ¹$Y”<ÚKZuW#Ÿ +è�YõÚ¦®3~ø²ÕÖÕéJz�3l«å6×yl_û’»šÜûóÁßW/bÒI4þ¹‰{º×úî•BW¶­ùöÉÂOËo~GhæZ­-BoæF—¥ñE?&rñãr¡ŒR•ø3¯tPNÔc8-t”)l®.�ÁÏ‹)•!Ù”‘/fF¼NàÂ18A"†
+6Z`¢Ëàø4;¡]C%Ìi�æ,Ÿâ+ÓgbÉMÔn\Ñí0P ü�T|	@�Ü§¯R3“¼c Ð•àéäâu•ó²Eß	¡+¾„?y;¸7.Mï[áTè¯‰üªØsÆ*>s0�p¸j‰™@˜åÕ‚)Z÷ù„¨ÁûâÓŽÙ…U'éäw‰SY6"y»|ËÍà Fš„¸‚âÚ© Ø.‹T×ÊbWÙ¯õû6Ü©d¥TûkiÓ´º–8f½DÁuž¡N.]þø:èžš
+®ÎWçñ5I9O5Z�k”Ã¦<O»+|�f±hÿß	‘�½kðs"ÿŒ×±À3Ëì0	'ãÐÔ$¾–’Ê;‡?Ÿš½„«�R1·j�È626€°Ø{nÙŒ‡é¢`Ó8 ¿–ƒTyÿ¸s&3©œ×5›öüØï4æ‘¾Pœ²ml,ÐtZÚ{GÀ hoI}—e�ïºîõ]fCo$”��É­äz½ïúUr=°·µÜT=ÃÖ�¼ƒ˜b~s‡ m7¡ºÇ8!¦;î¶Ø£e4/bšçòD¼>¶bp˜À‹¼¡þßñnÎ.YM“µHŸTbøÌÐ�óËÁí·Å&ÀQêHþCÀ„‚›ˆ’@cÊÃ]%/Ì.ym…»˜é.Ï“×cqr–ÇËˆ­88÷×ŒRï‰¾ëò/ìü‘Þ]\4nïÇaät”( pSr*‡ÔÝÙ¸( |iËêÍï£±Æ %¿¡¥Xi°Ò*‰”¹÷N±’üÒ*Ï^d!#S
+ƒ&‰ì@éP,l“›��NoGã­Ç\àÒkRÞy-¾)Z÷ØLPWlko¥:ã$�ÄÖÑ6_ª=géh:KóXsê¸U„¸ô†knS¯tSoó'~çèVz“ÿj}Ìïù|êw®“Ÿ,�1fÌ‚Ù$†D§Ýóå®$gP–äfàÃ ýÐ1Ý¤0V9as¦øÅÃ39ø™pIa‘#Üñþ2éz<^f¿9<JŽß2ñæ¾ÉçV{~Eþêò%·¼ç~¨&æ§&ÔÞÑ8dgCw}Ç·»›åœ4ûö:î\ÞÐý=Þ†^ÝúíªrE¥zÈËr9h©I,|XºÒV!%-¥œŒF¯ñÆ£­ivä3\}VXûŒRè5ö€‰°$^zÉÚÐ[ˆ|9+ò•¯_1+¬8hë³9QÃqi¦ä3D3J½�õ¦ãhœÁƒAÀ‚÷ì'Ó’£5ò°‘¼Œ„À™£ŠœWl›†¿î•H-ÿµ¢0éÿ)¾Vì{"½lÓ˜ ±á‘»ÞûÄÖ A²‡4¬�#­&,¯¶:6—-ÉW£R/Œò…†Þ0ý¾ëV3t‹W.iBú8ot:Ïhs¸¯¦dÂÍp$@?¥ø\“´	.ªò˜§m
+KãcOiŠÇ=áoª™°›{�hÕèª“­R-Áåt�U¨ejè:{M¦¯U�Ò@´¬‰OGÑtÆ¾Öêóã‹mù�ÙÉ»ü?w!òÏøQ‚/½o•yGj¬ïŽ	<BMÒòÇÝo+Œ¶ÈÞKódy)àƒ´Dl¬j3ZP¨E¬RZa2,{Œaso-pÓNÖ›ÎZ¦0c’#µØ÷^ËÞ:)·O£W}ì÷c-7Äf¾è*|Þs}j¸qœ°Ž›QÍ� ë»ìç]EXÉÛ®PØÔ[ÁuÝ,hHsou]—D‚°ÐOL.ÐÙÎ;ˆéÖ$‘um¼]& «©”’Ï·xS4¦îª	È`—x#0ÅV™dÔÄ´O0ÉÁg—¬šÒ%;òï&€&S�ÃhJ]M�Úu’¥1ÈË±ÞîúZwyŽ¬ˆñçú7dfOÅ¬$¾îôâ¹X×Ç¿r>³ÝÁNòÝÆ^ß–mcòÕuÉ'G¿}>»äˆcöv«tù»Œ³ù£�ëW•J”ÏË<! `*1à£}¬·g ¾L•| M\ô´ð&&Ž¡6þ ¦÷hð`%X!¬Š¥ÐIÜ!=zZÄ‚ÕÚ³*œ·ËùÉDz¬†rqŒ­ãA½ã¾häÍƒ'šž€I:Tuƒ«¸AX$`‘þ¢kèÄ&ÞâfÞ
+ Ö|$·ß{[ÿè¤›–X$+c¡™}ëŒG$ÌJ �&‘»eò2÷ˆˆ®Êì¨+sßÝD‚¦N�vÒäÏŸ6Êº0PÈSs	`~ÄíéÛêø¨ê‡â^99¹Ýžæ
+‘cŸ¿±/ãÒÊYgR:úÊ™”vÛkïjUæÚ÷ó/,K?>á3É4yß—uD®Ô0W	ï)§)œO	bæDÿ�¡’Qê]¸$Dw%'ú!.:3´£²Åò<ObªFÁù¥ýs£Ë¤…µ˜(ÈØg’ÿ2 ~lzx£Ä Ééáu“‚ÆÀ.§&�_¼ÎT^a¬=Î[>ÛV´‹1ÌaVddô}�W°Øä pv’ÿrÚ–nyF9iÅDàS4»Joùò�I�ªºÆÞþ´|Š;“fŠs&±º™‰O»ðK fxLð-’°*]Rh¬ÈySçH·àÍÒ×<Bg¿«Æa5ÎçÔ$‰Ïÿ)övJX³á¯j ç»¼­–ü¨²—ùo�BxvÙ*1S*SpÁr^¦ŸÃwñÕËÁ`±†öÓ ¨µw’"¹(.‡†æþ¢©G8Û]ˆü·þ¡Uyƒpºj ¯k™H©Ï-F‚½8Z³`ŸiõëŠäOV<Ë¤°ŠV³Û’yMÑŽ³™°ù�´}ŽÁ�äX<+ÑÎW üëCOÞ]ºº®�d¢êÅÀfb	;z'Z{;¸llf-7¥‰·´¼kYÙõªé&ÖqÉ`_C—_×Í=«¹¯ë¹´w\ø#ùžëû�Åï�D1{!øXÙõ†9‚} !,¦�·ÊÙIl€iî‡Þw=uñ�áäÃ
+K9r->~L‹îí …€uíþè�Â×a‘šë�ÃÃâ²Â(¡]y1%g…µK	‰K¯‰HÝ‚•– ãÀ,í%°(øøµûi‹;=Ö[¼Sü^GrÎ%†òè•En_k1Ý’*ò‰ ì¡n¡‡{=Š‘‡Ÿ‚‰üÞø¶|‹ß|ÀÍ�o	©Yÿº�‹h•¤ƒÇå8 ¼LÖÚÊÏ.YÓV¸r£c0°9Ñ$÷]ò¸Ã°ð'(‰¥ÕL�© ŒVŸLÑz@{•Dœ3E/3“ü—ØàQÑ©eá‚Œ›.ÓõâÍ½S­½�ô>ÝMï×vÓù/ø,Öv‰à#¾>O}—A³¿ïúÓYZEk<Î½£¥r/àÒð›«|âwæ3]V¶Šr	Ÿ\|¡FòÔš�73´ˆŸÒÂE/dE¼l%°m²š6¤`‘×V¹³	îRŽô�²'¦A �ÆºSÃeçÉa¡'†>zvªÐÏÄi9Ò]ˆçîV¡º<
+òZw€•·+mykFw[ÞôÕuuJ/Ö}ÍˆÎßõ¨5Wù#}M¿H�µ5¶êY	ýJoà*�H˜«¦“<0Oƒ©òb"`µà#=˜8+-¬9ðQP¶Prð ü•È[iòõºšÜ ÄçöÂtþ<czPÝÄÁI%F¦÷Ñ%¹_“J|ÃEù¯æA'k²dªNK¡Åèe°R×Úö+ÖÌ°Œ?ËÊ·"³¼È£ïÛ¯hû=æ¢§ªÙsQ�>ýU!æ0•¤ZúÇ„å`Sxã•±…?Õ8©Bó,¦K“‰Ž«jåKÞäf,FuŸ®q<Ã2NæTwrÛ¶PÈm«æÉþþ*d�eÃÉÇ1Õ³Í2U¨8Áè# ÛÔ€LÕúY!ÛWúÙŠth:çcØ7œ�xuÌÐûi¼IóárèzëÏø·Õ-¶óõé�‰ª½üwBä'Þ¹?ø¹‘Æ�ÿ<ÁíØ¢»0>:s%•TÅô7�ð?Ëì´%†^Ê1;*Aü+ãS’˜îýMå
+¥²¤¨9i²üÆùº…xi†‘”âå<|¾`¢å–ˆÄð«æ†a9AF€µ¹· „n4÷¾³ò­¼jº)0M]gÌ‡†€q•]lko; ZÁ}öž‹Í5à÷Óî…—]Í7\³ŠîsllE×ù÷9†ô-÷Q÷Õ«®.Û D²›HÅ^¨í’€H¸jÁ$ÏsŽ+‚žì´r9û�2.©É,§y}¸CñWµn-&KZN—WrvÉj¸�ló"[B^é�5/údÍ¤ðD8—à®,p3°´~°¼^Z\ë-é!]d�^#²<šM¹¿½D•œ"q>ûÚªfZ•Lo%K™"1ZMhößÄa8Ï:�`­Ö3ÛsÊÂe‘k™¦ÆçF—.(ë‡}ìˆ|)¯t‰éAÓTîµ�“QêíYamù/O‘4îq›ZÜp�•µÊht½•G¤¡0n6AGcë:ùŠ;È<C¿]5ž0Nj€Â'Á“iì-jê-×Àª­œz„n1Ë»éA­£}àm×"	°ÒwŒUSI¢Dm Ð/–"dÑû–âÚ[}~�1Œyg;;ê©‚2÷Z2Èê%fc5Úöb¦´-Px´—ß™ñ�;?-Y¿·…ÌÄ^.¦‰osv²$‹€#�²ÿ#Õç©å›E‡ÂÓ¦Ëi×t­µvrìÚ¶¯®éZû»Žon®ì·dòèõåñXLF‰Û 4—>åf¢;2#^“—/	†¦…7•aÎoz--ìÃÜ˜h¶ayôNF©Ê�Ê¬Èr°]˜þì’UE»µÄH jFð@[_ÈRC¿ !‰iáÍl…W‡®ì#¸c!J)Á½iü"únzà4Í"ñÅ¾êÄì ƒ`ºvÆsƒ®ggB@¦©ˆ«–Ýš‹ÜŠ;[% ÐPà©è~v2,UŸ7bj@.{tåú7UÝ¹d‰`ÆMUI“²/éZçñqTs¥ª³—UdoOjåk¹ÐÌšÒÝ‚&_Â+Œ2-&®¨‰�ûMVÝîMqóøÅå¸“F¹S¼Ã$uÞlHÊ'^=–‘�E¨ë
+N¨­w‰ïâ=bÁT+8$5‰u«'(aÃEÎß…ÈëZ•NÄ'·2gÃdIýŠ­eë"Ý-s«,Ø@d¼YY"[¹ª*ˆVµÊŠÁšXö0ÍuŠ»-:§êsRÃô]÷%vŒ�=ùJñª&ÿAh DCß¢æÞÚžZM"‰é«é&·ñv=ã^iímƒVw£›y+¡„Ü§À"Ôƒê»,þ|ÅÕÆ¨‘oº6Øªn(³–KxËµ}Ûµoâ-©ê¾®â6õ–q|%×½™·4¬çÒ9ƒB¤d¯[ÀO+o›Õ+o©õ5‘ó––^½©Éž×mmÔtBìÙù¯e÷×bš=%”ý 
+‚åjŒýÞÜÜ˜ÌTZxc ;	1<Ö·Ð¯'×oí=óÊöõ‡»:Ÿ*¶úä`1ÝW¾uPÈéb¨es�ì„H‚ØjŒ3–Ù2J �Øçõogä7€h¹“ß>¢s­ÏJ Ð÷UÝ|�ÿ½—Ç%�]VÇb£Lrð@Ðp¡D‰Ü›_¦(ï;ö¶¢kU´¼Èvb*ÁÇŒR4?qÉÍ¤6¥6h.Ë‰³èÖ‰þRáºÏíÌÓvÞ>Ú
+÷ƒµð6ÒÅì×é÷Ë5Ü¸J®'8¬êÛt57ŽÙÀåÒY�½·gúÐM8E8QÊCÏ³ÔÆÊ\ÄzóÇl‚‹Ç™?²)ŠyÜFO‹ˆíÇ{_ cœ‚2…ñaDI¾ª;Þ¿ÐÍKë/}ûÅ‰ÿÚÓ²Ð±>â�àÉ ˆ¢*ÐD:åôha÷4µL�&-O>øXúòÎW6}öÂêÏ«¯îôþ¦.¯n¬µ<cÆ²‰ÃÖÆ7ÅM7”×<‘¥#lÆçDS#KXŒ´ÔÔo„÷ÂFvä³p½ôðzÜóœûÙ³£žN	éžý7•Cï úçAùÓKÖ¶Œži�IpÎ +•Å—R$$NË¤.¦¯U—~MÁ°œR¼Àòé/0ú£Ô
+qG±ÿ`_Ë‚GñÅ1ª§D/k°7í¹G‹kü¤‚ƒØUòÙèè`¸‚Ý°…N™zRý.K¤S£ª\Q+gÉ\–É`JÜ‹¼/û bÕ¾.[mÞ ñÅ¶Ò¡¸=ªªwx¤
+pœ–«óàCu}|˜ÎÙZÐ)×²¹_åªs¬è3°®‚'‡m�R'CN2¤µÔìŽYamùÜ-¿iR|Î`pœ�vàN4Ð÷Œ^De…~2ikÕ~—Ø×ß	‘Z½è}îBäŸñC«Zñq<s+J®QÓ×ØCçZIzMŸ?as§Ôý¹* [�x[æfätÓ0&lÁ0P&V—�Ø©¹o¬GM7QyÄáŽž$†˜qkäÍÕ‚�TÒü88¥kRK*¹^\¿ëºT¸'v’Ó¾îšVr=0˜°E= »Š„}×uCŸrÏ½ãº€¤º¿Öw™°H5°£±ºõ\†—ƒë¸ä
+î“šnRE×ÉÖ(k¹)-½Í6ð·µ·Sií€êB^TEm¯•UµÇ�¿X×8Én8ó¹2âŽÞ©¯4-”÷Åª�óÊXf–E~Z-@_.à¦î�Qb8pv}C—[·þuuU—Ÿ¶HvÜS|m%ûÝù"#á—	Âeä¿ý„QB$÷|¨y|MÄ¼ùRp“Lô–Êò/(äÚrBIÖ¿.‰á¹ÖÚ—Å,›ò9šñê¬°V– KIâ‹|V#¿Ê‰~ 3âuxÛ	Ð~«Úæoî;ÄWtFî(N;Ã/Ú¦ß1Güiõ@co‹WÓ]µôÏ®‚�k´ýeœ\ °E'`·Žø3tÊ+®®½	bVsÃyóùÍ¿*¸�ñ^¸ü¢æÞjz�Å±Q��#V"M%\nuô;eå]îPZnÃ’ò,§IËºá_°Å‰þk§%äFß!·Ë¿nÝ:•Ô…f·LÉëkdöÌaš &àx,Î‹¸:ùÓr]iÿ½­…<â·€€&wÞ8ùãUÓ‡¯š<på”Áëë•¡ÙWN¾²\	6.¯BLš‰³µŠÍ¬¾`Ë¦«Ÿw9Ñ
+?&@)w“_ÚvÉjÓƒ&Ã%ÓÃëæ•Í/]œÞ™úé¬°Ö¸.F�g”šTb„–
+m?£Ä× #X95 TÅ±ï
+ÊÜ£˜8w¸„\.SUÃš	»ö)]Z:% _fîýM•À©t™7PmFsj@&Xi¹ó·ñe¿	ºŽÔtK Ó@à6qKÍ"¼ª•Vê|ÂowRì‡é<ª•µEã°×z\Š„–ÁMN.¾ÐR6lÁ”ŽÓì•­Srè_�\½NË(àŠF0mªÑôïD™%Ûnu²TSëºÅÕë’Ð/4‚Õ9²ßc‹î¦}t¢ì�lUÃTrpñ8©|´ùŽbpZxsös‰>*& n2ÔÙòjàÐoZ�óÇß	‘Œÿ?ø¹‘Æ­Êa˜V7­—(�×Ê¹"hlÂ­€C×®Þ‰b5­EF‚EzkÉ9Q\´aÆ¿­N2fâX1P±·…ô!_°Bºµ•÷ƒÖ¾#ÓiÏ‹ (¶†hÕ² 2˜BSoé;î‹&Þb€´ªâ¾‚NŽðM,'òø†kä€r®Ú«®þ›®5ØÇ•uŽõ”‰$4ö‚Åœ¶²‹å‹\þ‚q~ÏÅ[_+ï{pP×Ë®sÏ˜bÓOë¦r &÷Ï‘�´¾¹qk
+WÀø«jåU­vZðNêâÅ¥ŒR•0™o%Î�0Î2}7µÐ¯§a‘i×÷¬g|üñY;=Æ�™¤Â/Ýe±RøKùPJÚû×r¸›P˜=-„*îj,S¯ F"	8JÁÄ—ÄðZ˜+H%4vÉ¾ÚÍÊ\‚Êü%;ê‰Ä ñY‘/¥…7…äÅ„a{1›Y‘ÿÈ(õÞ”âóé} Û¨Õ{3Ô	Ÿ›4†ç�8�Þ·ØE]t>'’¿’'Â¼Œ“)£YJÃE ‡çComKoê*ðºŽ�ÍÎ™´nb\Ö¸¶è/|!úëu×Ä¦j¸ñå]K†ÇwôN˜ä ð�eT0„F9­rÖW9¡NtÜ0Ñ'®BÙ�æê±Zl‚ƒSBzÁ  åO‹óp¬O¡GÖ_YúÅù-N�)tv²H!AêiaÚÐ„9ê$sÚG{ù”]Å{ i­utº»�lo}_Lêº�qïoøôÕÍ�þ±jD—ïFºª_›-ïy�GÚ?;ê1œ–m5|2†MTÖ�Ž`T¤‡7ä_öÉ‰z˜ƒ6æÅ„g”z×”óg†vN*1œ±$5Ú"_R�„
+ ë¬°vy¥ƒprf†~B·¦„ôÌŒ(?#xøÂ‹Œ“ÃG3D&° ÑBcóèYŒ |(Ô$Ó�±*W®j®;€]Ó#F5f9`aGNð_Ç8-÷À!¤š‚!âZiáM,B•—Âª®[Òb¬NfŽ”Âj"<ÎØÐÅýßL¯~\±m6m¸LLäõÑÓÃ�ª©¹8fNÀ�g(×„kíÍk¼SVv¾É{ú_*€Ÿæ�TŽì¡yZ­ÛE‡YqíG6<muœµ�Ár<�«h�’¨9Ñ’|Åòã2JU´,r”ÚnÙmŒ®äà>I%FÚÜlÅë»ùoýc%•Û¶Ú(/º˜nCË¦å5+äXäÿµñŠ¤VˆÜ†´.mÿ¯3�î½IOimŽåX-S¥ÖüÇëVÇM³Á™eÅèYx�Uôæe±â§­¼­´Þ	,�Ã°x�@ª¡+À<j²y>ðWÛ%ýÝ•«à>}ÑUæóœ{ëm×p|ÕÕOÙ®ãfÀ4+»¸jnð
+h²¾ù¶ëñÔ*“I…á*lƒ˜PEî�û·l>î6NÄ·×r?¼†Ê>d5M+@ýlï >þ¿¬ž£
+m×”çe¸£ÉÁýf”ò~åÅ”‚Àì<$ju›+É4FøÌDÁk+ý6¿ãú¾…eÃÌÊâcaˆX`,3XyvŠ;5T¨
+;1ÂûZ‹¹–�¶2Åz £F¨%Ö›ó`Ò7¼%{d6ï%ŸÂŒÙa(Ìº×%ŠÎ‚¡yó˜˜¬Èr[ö¤†~žñ
+Û˜ÙŒR•a"8ÉxõøäS²q­§N^äBbÐX^ÿÁ1•�štÝBT~G
+$õT{˜ˆ�
+ì’Ö’‚D8*:c°gpFáïýªÍŸ›=¦ÇÌ¾¯l¥Gè¸¦Þ2˜~C—‡Ç÷7Y<Œ*_�×\K@SUÓqÀ$?×x+fÍ"@ø ß‰A“MÃ�T	…ÊeÑËÿîËþ ÝŽõuW—ã“øyóôÃ*®//"ðw ñÚjw>E<“c½}Ž
+¤’î€ÑÓ_`%½@wHfe_õI‰hU‘¥ï«ˆß¤®Q�@ûªç…ÑÓþ¹Ñeø-ñ7U«{JƒŠK§ï€lx
+°ˆ—2G‚yêK±ì¿¹”�ÙQ�ë\q5ÐŽ?§¬dVò§‡×SQô—&Ÿ¯©ã�ìO*1FóÒàAºæ¸€³™ÒÌˆ79ƒ†Áœ’ê6å5\7š!Mï[’ˆ$EÊ|ìÍ�Üi‚„Ï+0-08»Óbú3VßG½Ä†•60€]Ø¥‰ö`g`Ê4ðo\Ñíñš0bµ�iÀäw°êÊ+µøH\¯„ÀYp4%}RËÃ0‘mËÏ•J÷Ó’—?Ïýhc´X˜™&iÝðË:lõ£�«ó Né¢Õ0àÂ€2WT=�k–æ‚÷Šº²·UI2RiñÞøœ\‘ûç´!¾ò;!’á~îBäŸñC«Z=P,!~&¯˜˜°âVC¥ÞÍ._¥o­r«iG"Ñ6DE`[ªFþ›ÕÎè¯é=µ,;�Ä°§ãô_·ŒÚyûysÚ{GyøãJƒùá�¿Zy­>#Ué�ij¥ÈÃ !Ô²©·¢º]Û%”À:.¥¾Ë~Ëµ
+ßwÞu]¸ÜHìjU7˜¯¼áš¾åÚ6ôæ¼åÚëbå¤ªnøÈÍkÐN=p–³iÆåÑÆ’b°¤ƒwÌ„b°ºryFxÇ=·¬¤…Šœ09Ä8ÍŽÇÍ¦¤±
+kH”]@>RÅO*á¶É,õ6&qv©*Øg,ó¢‡¿6¾­5
+[ºËsÝÕ%¾¤<pÃ›"½‚5ÀHrŒ„J6“é¡$H¸Û0JèÉî¦²
+f!”€æ†ò’)Q@Uåä+H¬¦Û„ÑLgF’Öc¢�H€2¿t fYJ>OÉŽü;÷mÌ/ã�Ö"’Ñ8Ø·ou¸R‚{c|°ŠøØŒñšPlƒ‰`c°<¶ÝSâ—.¨@½èšªä—TíèwÊØ7–í7BSÏ×qIt.Igu(;·]ðª*÷ôÉ˜¸¼þ_RðL4›õ0ÝQÃ�kãíf�‰ú¾ïâ1>m<©ËÖUµ\ÅEå)¢#4Þò@JH,6™'ýMà„*(+Šp`ÞÆá/ÜÅl_tñÉ!"¦§„Äp4ì±8‘z +AÏ³Så+‡»
+V²Aãó›ž2þH×XÁPú‚áôŠš�©²½tÊ’ÇûÀå•ÏÊ‘F!ÙƒiU"‰÷òðm4ßrlÙ™ñZVäZ9º\~™ûÀÊYa-é¦´ðÆ¸aé%kÃýšäàŒÉi�3éÄ™¡ŸáhdËè¬ˆ—ih&à¦†vWt>¸I÷©ÌN<îP‚|1NÏ�Jç‚M–5Ï6¯¿®Ýoî �C59â"�ºØ�QZWŽïš”%>Ç›R«i’0$¤´e‘–5iyZGfŸÍ¬ÒŠ–V¦V�
+€ËÁƒav\×ªAa‹\'Â«Ë‹ò&¦„tg¿-jÌ_´¸ê­•yÈ‰J¦ßÐßÝ<»ŠZüfå˜0@0n >È9UÌv­]dä[´'OÊSèKÑgj@&n„ºÀ.] �mGÇÛÒSju»‘ÿÖ?šô±™žåqœp¹1ŒŠ†2mÈ 2zhÀg³–is&qª7«3ùšÒxpÁZœ�1[e”Á Yî!äÑ–#¢ÀŸrÆÍ¼U T®±· ¥·µ™·Zc3v6õ–ò-�Î’æª¹ál ˆÐ=]�š]ÃM¨å¦<í^xÓµ²ÊJ|…ŒÀ%Ë»– .¬–&¶ö¶qÅfÞ
+M„”Z�ü.YnïNùrS0°ŠTm.
+3¼’“‹/ä­Ç#Å\Ð\“‹/ÀóL/Y'5¤ÛÌÐNxþI%FYØ$yÙÓb¡R¸ð}!'¾’�Pp¼¶\ÂY/ÏÃ»­–ù›öˆ”­W)ìõ„žœKÂ>JdH{1éðD,3&]Ê9u�ÓJ]à�å$˜}LñÚ—Å8Ë\ßÛjl5ŒæŸ°Õ\B‹1UÀPçÆD‚#6�IkÉCay4 r,Ÿ¬ÈçÔ^Íî±™‰ÕÂ:Yj¤iGcâ¬zK�Â2�h®”©ëXÝ¸TßeÒM¸7´sso>Uç7&6Hªæ¾N¾¤ã}�¼yðM^ÿªn(þcÉ
+oi"­ˆ]mÔ¤¤ÝÜÞDÿU¸ý4­*Õƒ�VEôÉŒxKù^’îàx	sŒ•Vïp6èˆ¿zHïÀ²éDº>'úAZ’&¥Áu<5B¢q ’Ç4Æ¿Ý×Fþ†®˜—I�@ÛAIP¤>æÎ1w*�ANA@ZÞH¥•hÉ‹)	ˆ›œŽ)pçÐ^ë&Up*žõHzxÃYaeE>Ÿù"ÿÊ+
+VòÈtbZØ‡³KVÇhÓ)À(`VbÌÓÃX=å™¡ŸêÎd^v�á<ÊvB@&ï;£\ÃÐbàãô )Œj�Ï<ÄhÔj\kÒÃë*\îàOàL3MÖXô8#�ý˜‘¯$?b%/H›Ä�‘DX¡Uý°HºÉŠ‰h�¡à_Œ×z¼VI%¾Áá”•Ó€|Í­X®¤X”è i€¬Ž)ºŸß€»BØ*õâÖñ-“ñáåHA#lkZå.­õyFÄ¤~–drAÉ5<é˜VQÏã+\kvÉZ¦ÛÃ«­´ô¸Tõ_Êw­ð‡®Â·h"UÚÉVV¾šVµÂm<<ôwBd;ïàüÜ…È?ã‡Ve„Xþ;/o‡úr'zª ›e‚àhY²’ê©.³ÅËŒ×0B+2…I´Ä°ZÉŒOŽ·zâÍ½Õ ¦+‡Í´IËX=Ï'~çàw�%¶K?���¼ù0; &qô©ëRßt­_p•žpOc*Ë¹jX×·ÜGµÝ´÷\ü»®¬�#¹³¦›RÝ�©áÆƒ�ÞJ®G#on%×³¡Ëã†¡�†ªàµ‰ü˜ŒO+ï+0g*g}µô’YõX!Œ'5ž|�
+R™¯{×"5ô�bº¨~Må­É‰z@�è¬xV".°cl`!Ý@:‰�l¥y£d–.yj¨(…b„!8œ<^Ôÿ6Z’;fvÿG‚ûÚ	2‚˜œJ4ÐjÈÙ0Ô[«òò'üTBGšÊ·Ök4Èw¯Ê6Ð™ûÁk­aö¡°ÈÉ…R
+¤&73âIš£A’ŸéòÖ;×º7‹aQõì”Ñ÷í×ôíS‰AqÑ‡«@Š.:ÿ¨µD©¯³ÊàÄª¨ŽêÆï�š’9p€h›ï7Q0T•vrÛyûÚ>2uzü’ñqéýkÌm¦ÅÎPH›¤ÅÌ²�ûÔCC}ÔUûMÃøÏrŸ6›”Ã@�àxjÈ—¸+š7QJè›ò2èóÕ5/£º,ãŠ"k#ñUèŽóÉRrÅ$ipŽgƒ­4Èú×¥…­¸$p¹«± +ÞÈžR>ÛV$Ù^1'sÙ²eË2e¢à}¡�ü¦ý9rã[2éj•Y¬&ÿeÃ¢[­4ÝÁN~›ë’õ˜"c ½ÃN0± Ì_€Ñ…Zž² La˜£­Ó_3C;`ŸÙ¦gsc¢ø“î›]òƒYaíËÖdF”ÇáÉ‰zt¬dïŽÐ…lQ©“ü— L*²ö„M'¹¥‹§àø�V´ª–?»¤/Â^ú´’(µ¿!ì»øÌŽq«yú¿YuþefµDËE�Ô†‡m?i&‡i^ÉYSIš�i�µ:º›·Hµh.
+HÍ
+kÇ;‚„ lT@j«•Â„ãØs°tc ØÌ°½ÎœDÓ”NõWaLÐ‹C8¹ø|.Í (ôv¡‰è¼ñIcZXóÛK™úõÓF™¹"�cõ�46x¯ÉÒ š¡ytj@Öe©¿"­¦êùÜ…È?ãGK*Ÿ0} UjýUE8×[@ŽÕGã­1j€ÉêèwÊ ’ýCTÉ¿¿Æíha¬kxûl´ö¶[h«U ÑhœKP€ªnpï‡™¦Œh"µVò~Øœê ¬µÂU-¼�`_u7ö}×ŠmÅ¸ °¢ë¤ñ¨)œóM×|Ý5ÁÆÖt“Á¾Únº1P¬+÷ÓØ[TËM…¶˜†6ŠYf£�Ëném±Ü:«áõ•³Ÿ2­¼‘X¾Ù¹Ù©ÓM¹€ Žñô É–8Ï«”õ4´1£T%Ñ .ŠÝÃç•¶¨Q¬’�ÝM„ÊÁ&À8Ì/Ÿ£=ÏÏ�µHÌ2@ÉÆ¾ÖÂq0k¼Ýœñ–Š%A@á’Ý×½.Ø1!D\†Â¶�—J‘I`E6øsÝ«b„±öü†¼À%óËãn­64x"/µ–ˆm�†`�³#ÿŽQµ\r 3Å[�Á¥g p¼–[Z…uÂ¤�…4×è¢‚¡æ/õ–8®*@'Ù¦Ÿi€„þXÍSwh.T‘Noî}×ÒÛL×ó§–0;ÃÁ½S|+ö\©sÌ¬JÒ]2ÝlîÊh…’….¬†€°Úd Œx)OX"¿tÁÆ
+¢gÎ†¨Ê·—8Õ“ƒ…?^]ì.eËÜ©T`/�–Qê]�ÓšTbŒÓdFù‡jš_ÓRqH$~X%t JÎ¼r~&ÝÒ�¼¨åò§%0•†µ‚Ë«_†8ï¯â;áÿH¥•ûåÌÂú¸¯ƒ8 d4Ùù¼˜0ÜWK�Q�ðf°{c—ôŽÎ™û”RÚ2p
+ÏG©ÜÚôðúXxÖ]­DiB~™¢A=„þ¥OA7«¢Å;6CÖ4åp=Šv¦sa£ô,Ý§«œÀ£Yam \¸"XÈ¬ÖûXD‰<�L¹±ÉíxIºìa	�ªÔ*Ä"ù“¢E[nÚz¥MZ2æµâÕO6õŠ¯n$—>M	é=¥ø\9|$ R}o½½bë@·ÁRs'ÍÈš¢¸úK¹¨¦LÎÓ
+õEþQ ´Ø÷&³£ea/šø$÷Æ·l†YªTp9îºŠeà¿´áŒCí$ bnôýL­ª™ChÂËbšZëŽ�ÐIWIúÀ…ààß‘{þàç?"‡úÜsÏ+V,""¢E‹gÏžý¯ÿŠŠŠ*R¤È;ï¼sèÐ¡ÿÏýÿýÇò"- ‹W ³ok:Ár®Ÿ&t˜î½Ít+ô‹% ÚÜ)f\ë¬Ý²åéþ3öO+Ã‘&¬­Ø÷n$œQÃ×Çiègh+å’/6ñ¾OkºI \%×K¨1�ßh(ã�ß•]ï»þ@$,£–KÀ–B3!†ìõ¸�Šä\­í’€Hx%lÒ
+þ²ñ¹¤o‚ÉboíÎµ>ÝMÓÓcHkå õ¶=g’TˆÛ(:“Å~˜ä¿,½d^4L.©áôµ¡]¸ú6-–W:D	šÐ#–ÞTa'±Ÿ`¬Dð±¯Dæœè.åIªãÕe2¿
+P^Ì’¨�}m„nè²ÑDnÆ
+µs	+¹âPÜf²ˆ	‚’@'1³@$W4E—�å·ÕøÐB½~Øöµå´Òý¾,<îSŠ1=$º œSŒq†]b3JUæ¹ÒÂ›à¢ã6ó¤™obXxêé�Óƒ&'•Î†UÂÂ¤†tµøgzÜTXMWÇdšLqÎÊ¸›Ðœí4ízcˆû�b0¨4ë&õm¶€’8QÌ øÜï:cÈ_®[Dâ� hüyúˆž¿´XuÜ	|,gfÄ[¹ÑeA
+KÀ‡á'€�F´¯½­¥}¡©ÅW9=Vü˜àéq¾EÞcq’‘�dëtà›ºê9YF…¢
+‹@-ˆ	”rØZ*Ä@m¹“¶åÒ4õ¶Z¾éÖÕ:ßÎ9ÄÄEfçñ‚²"ŸãÈÙ¥ª°3=¼!}Ä`ã+Œ+ø;_á¡ð¾à†3C;ÊzbH7`HS?^¥; zZÓPjpÌ‡­˜È‘|x—á•–<òÅÁ3‚ñD �šj«lx5³KÖTy¨ÙþIþ+ &S‡ pUIétB@ï‚i�Ú4‹ÆÞ™<P=ÉM e?)2N'9/â,a uZ6kgïÛ“3*æ�4þ¶¢/ò%^Ö/&"g•§%ðž²_coVØ¨cL‚Ô*¼EU28uòö(ž-´Nêœ–:§tœyûJ�3¹=CdžHoï²Ý?§íï-¼ ?†%�0ú¾ýø�:{
+ÿOC§Œ:s“²F)S+óñ�'¦©‹xx´jÚJLTPBÕâû�ÙÚmÿƒŸÿXˆüÇ?þ1lØ°eË–Íž=»lÙ² žíOLL,\¸ðŒ36mÚT±bÅ'Ÿ|òæÍ›ÿ‡ýÿã­Ê Öø™º7×Ëã�|p¹„€4+¡«a®×m¤SAY¦ŒS�YütÃÐO­½�À�bâÕ�ýN«V¹¬EÂì`�S¨çf?ã^�VÀ
+aŽ|�‹6tyµÜ´VÞ6,dsoŒãM×Öèªº¯¡Ýçªç™
+»dg'¿Ë0Ä¶Þ^ÖÑZNbV7^Ã9´¤È+ïÅ¥{IˆÑM“ÊáÆLˆÕ$%;z'4ðæ”êkI@&®ìì’5ê¼wÉÁ_iDýÇX,p“‘Qª¢MâáÒc‡ákXQÌæÎ‘lÛüªE?²}4V"$Ï&.™*{á[¢d±‡&ù8Á-W”ü»0G)êQU¿êè§–&¼W“m}O'ôj
+hb„!AÜ ÅÊYš.(vƒŒ3,r.OÊÝ.–Å¬�œè!)Xf	ùœÌŒx‚©ùžÅ÷±Eì¡V¨?Á ’vÃ8Xyú¾¾"z—ïS†Z0¡–Ê½ibqŒ®¾ª®Áglà Ãé;6èŽá+íTHGÝ›C_¾jÕÞùhê�TXÐP|á³Ü[NÔCÜ3|*;òZ8 ;ÀØ™Å‹â6€h»ûè’y:VæZ/Ì’üš“C$ ‡?�Hü;�ÃÀ ˆÕß°lšÈ<¸ž)îâ¨Ðã||¢F5>§‚ì§$ìª‚  ­m19²,R±÷æDÿ×EýK¼c§Åê,T�#þ"ulø�3+¬�,;Æ”Jo”—�z‡ó@™³"ŸOû(�˜ñi�)°~©>\|®æ\œÑ€älÞq�‘×°Sˆt�¨Ü"3´Q�YJÅ¬°¶Y‘ÿ˜R|¾Ê“ÎÕEÉµV\C×"wÓþqšòµˆ‡/V¹×ó¦mnÁí–:Áét‹nµ”Üa|»ÁÁ@¤)lÀañm4´6wÌò…9‰Bó*<Ž¡¤	šZ2šSèÐ=õíOª$ì.–õQ-qMÕ<=¤ðuÐP•Žàð1,ù“GNk1JÕo¸è˜¢ûmi);ê	�Xkgù¸‹< „�sòR¨ Â.›DeÔA*g—¬eÅ:…{Hq¯ª.úº +ÁËË“ÂIïBäÿŸ?ééé~~~?ýôÓ¿:;vìhû�?îyÞ¢E‹þûÿÇZÕ¦;€ <v†¥Ì Š[%²0¶Ž`¥liZ’ûšªg¬²RìVÖ­«¦rhL‹H°Â× ,�NÍ¯k¸qªñÛ~×±{\˜õ¾ ¡kám¸œ†Þœj‚}[1ª�¼¹˜J˜¨7ÄNrØî�ú..9ò7¢©·´‰·º»äTðM-p	àøøJ÷U¼æ°ëäÞRÓ¾îª¢sº\rÙ|«¿ÃØž�;¶èvšBgrryq@Þe°€íäàþ¼˜ù¥µÆ;€ãº×z„â=kË|~X`�­*²ss%±´PHví!Q:Gº‹)>ø©É3„Âð›cD`'Nìê¦wÄcM~Dƒ*{qIAclFîÛÇÄtc‡…E¾+s³Üƒä¤?+ jîwÔk,ÁB‰¹†­Ø·°º˜å¥š_0»du°bbˆ¯‘!ïòt9Ñ¤‡×Ç)²è#¹t‰†’¹Ñ¥ñÌ±T4Ö‰1 r>”AK]QA°�Œ’ .áª;÷[ÏB·Ú{Çª´ð#ŒåztðŽÍÏ\MgÁñëº´ú.§hÐ_n ‘q:SDÒ;o:ŸÆM4ƒ@tD§MÁn+¥*eG=‰YI„¿úŒ¬Ñ&@()-\ÁWLÂˆ»rêkY¾¶Rhþ‰’âAA'i+ÎÀ#sÂ.~7¾Û~Û(QÊ¯AÓ¤:ä‚} Ù5d @Û2“Æ…Brrœº@ÔãÖŒÔGm�2.Ï1ôéb¥ó&Çjr¾l³VXks®À}…Ü˜HÐoDÓs^àxŒ9v÷ÀÒ$ÁÀ4-¼9ŒUšâ	À©5ÌàSøþO‚,ÞÍ‡.1¶y»5Ð÷ë©®oˆ65 gLÑ½À¥ÒLI'Œxd•1ßšÒ=+²Üx‘Á¹E¿Ó -£j9WMNsÏj©ÙK"ÿ¹zB±uÒkù½U%Õ&<­¶Ú ‘+?[Äó4G‹c2#^òr¢Ð¹Šeej$Ï)©�µlLL¤›øÅw'Ñ8°þAÐa«xÅ-ñR«RÇ>=ZË6lQ"pBzÅ‰õÛBsñþ²Ak'Î²3sÁ–hÁA›yÖ˜½TÜÅÑ÷PžùûÙ%«ÈLKÐÔ>ZÃOCx¥TGZù;!²…Ûò?w!’ŸäääÀÀÀ[·nÝ¸q£P¡B™™™wþõÈ#�ôïßÿÛÿ¿�Ð&ZU­â¨ªè×Ú.·ty]ŠÁ©PÀU�·¿dbÔT=Æêz3€ÁD« hâüVGÒ$h°Š6¿
+2št¹™ÇN~—ÀP¨ß§~ç`Žõ]0ÊWnK¦¬ýÐûŽä‘?¸Üò®åÛ®ccoa-— êUpŸ²QÃMà¢ ¤ždç+®6œªØÈ›Ñhç¨â‹6Œ)6á ÞúÛ*¨ò,¼¶&¡†3	ðR$Mä‰RC?§A0þŒð)Åçð/>–5 ©‘I,$EâuBÏJÉoÕe)ø L6�èŽƒŸÉ‚”Ôõè#�©G{ºŸHŠÇÕÅîâl™}=ø‰RÂkøõÀ0ŽÕ¯ù&‡‹HíŒcÏëÌu9Æ/×ÂàÄì‘àÉÊrink¼ô)g*¬ë_4œ§!‘‹t	Låãr•1­ La^sî_Ä[§cŸ± Øç”�žt.žpf©·i¥ñbcuõj=æ‚6ÁjÑ>æÃÃMT¨ä=n_¬ C™%£ßeH€•ÈŠ÷ÕÊûža@¿ó€s%ÂeÙ¼LIDe�p@�| Ëúè:Žçò—ëê§AI.XÐ5¼†6I�Üø #¸ù%†gE>ÇOg²Bô-C›ð[[È,ëá.¼ª¥¯èøã¡Î4…ë²³¾.26“¯ãQè’Á¯Ê>24~c„d”÷IoˆwaóÛ�G.dqY&Ñ@�pö[Ä”µy^LØ¢G|³Ò;O)'}ÜGç­"ŒÕ÷ë¹Y²”,ÈX0-¼.YNÔÃÙQOY ’fDö™ú™hÓ•¬+Z‘Ï°Ìáó0fl-ozP‚x•V
+ýÔÐ)Öt%GÒõ¦ÝÊW ¥:Ô:=¼È9Œ<^¿¡`À‡Õ¿Ó,Œí¸L€,_7æ8®è6›�®]Ãg„¨­n `…:ÅºÃ˜ìÕän&ù/}ß~‹ï£qòœax‘ß²•Kh‰„ßØHLÓI›Ï€ZJW·sÃ€)—3q-ƒU 	ž{�ýWÈÌÆ}ûyF(3Ð�kgZúöîk6ån’§ ÎLT™1ÒÑby¥ƒ5×é+Ëùå)pÞû›Ê
+eOš–TâÞNÎ�Ð¢<›DÏÿ;\]’H˜$Kö{°¢–÷»!rÓüÜ…È+W®<ôÐC_~ù%Û'Nœ AV¬Xqç¿¯½öÚ'Ÿ|ò¿íÿßÎÉÁ½TTÇ@Ðr=,··ºC¶´„GŽ04öìox'rú…~‰•lŽKí¼}Ìã�ÐLÉ6óVuô;ã³ZÆ5Ýdƒ'­æ á4Àì µ·Ê ŒÖu©ðÊÞ†z.à1ßpÍ@IÎÓÌ[¯¬å¦VuC@Æ�¼ƒïzä=×[©â¶Áq ¶‹ßOm=™Òº„g8O?©Jƒ56AŒ^"úzSK~UôÉRø:¯/”)_aCð6u*iÆ–÷+'úAÞ�œ¨Ga+�»ì¨'æéâ öÍüÿÕ/je�r¾ÐDÄšªö|(¿wU#ü±pŠó3$Y@ ¾ÎÂ,3öd„Ýìk+§€© àÃ¤N«Ru¢ç†qNéÂm`	1›R¬¹¼äqHrG9AdÌæÖ*Â•°Æ2­÷´ü¶ÌË­�•ñ2’ÛæAÆ…2³ÚLÃ°É=ŒÃì’5�T.�Õµ,{ÙuÐZ´V#‰Õ¢7q°“JŒÆ¦Ñ†è(™Ã*¶�¤ÿ˜ð/7o	 -½-|4†Y´ñ?’HõýtÓ¼Ì•z@ÆXí;ú�á×Þ3…ÏË¶teñÒ4fY×ƒ2°öÜ žÜR/â¥¥ªÐl€;’vQÅ}÷²4dóÞ4¯¨v’éh¶¬!©�i:Ë—VÓNWoŸc˜áå†ã¤êý|.ÍNZHbTXú†Äá¼ ¾¤^b‰¹¢•Õ¶iíu¯úRN–?#.
+7Éa6nASls ˆ3ã±ð<"º†ÏÊçœ¦=ÆË|`ð Ý)­ãóè!Lsfh=U´ú	C £üÒA°°Ô�/g…µÂ¶ÓY|wŒ¨«ÍQ�šx\é%k�5ãTì‚?éYŠ«�RéÞwÐg˜$	Ž‡�êl­h�/Œ%š¶5+ì#�´¹šÜzhU¶é5ø)Xf*:6ÑŠËÏbHhXÎuˆ­rü›‡WÍ�#ñBúvq	^I.—(sû‹òJ‡Ø”ï¬°¶xh“ü—d”z—7”Ñ	Õ‰âÑ ºÆ®´XY N­ÉË{@d©ƒ,�µg´^É©~¢ö“Éºòhl¤…}Èñ¥*%M*(ëYTmzx}2nMÊŸ©!ÝxFÐPEÒ-KÎ–5SC¿ÐòXÇ­î�‰Üâ<ÐD¿"×ÿÁÏ8DB+V¬øöÛoÿòË/ÿú¿
+‘Œ(Ë°¶y-8ã Ñ(¾Â UL‰E+pcEŽTÌð&n¡ÑFÀ1VpP‚ü­ÚZwUÃôµò~xÝ5Â$Â°{ "È¥µ36ò[Ëy‡€Eceö½çâ›{ßˆM½åï»þõ\šêÅÍç»œðm×XU!�µÜPÜd¿xì×"�×9sì=2;ÇM¼:^S¸ÕÑRïò¦U¦P�Çm<ã? Ô5Éf´c%pw5–{_fÄ›X­Ù%kàùƒÊ­P/M˜šN¸a öµM›ÍãJbu±½Gc%‡îXœlœOÐ1×'‰qÞVC¦ø0Úf?1éš*þVVäóZC,³ÎmÒ£Gf†v´¤ ‰â(+ìƒ›�+	�}Bn‰¯û˜ð+Xi”AF>c­X¶¹Zeifh'ì*œˆgT¬©�‡EÅ`ò/ž²PI-Ë»I?[¬ FÀ
++ë´ÕzîÖJxØšfPƒí(8Ê¼\7QOÚ¥iÎGé¦ž2Hv2Hô`o½lú®=eáÒôÊ®YÕ!#˜w:ŽN¡)tÙ´¨Æ®¼²Ãv!YVµx’Éçç°ðà�tÐÑ^²Î(¶µé�Kyâ½ë-ûá•¾Ê)5|AP“Äð\Tuì¯«‚La
+�ÄE�iZ¸,(s/mË�Híæç|±¯&adÛš˜ùŠMwsZF‹ùü2÷áq±­%#+qÿY‘åxKîPiÖ$õ£L)OV²ör]!5{ŽçaA+¼šÜèûEp5¼1QfÄ ·�Ö’Ãpo´Þt&ÿbOZXsPž¾¦C-ÏQg)W€¼ô;`!á:þËq†is\D+é‚WÌ»Ãy€ÀºŸ Ö–'8U_ñ¤~/ŽÆš.Ô)JÉ#cœ pª¤zÂÒ~A.+ˆ xñPYã«8f&ec�‚ W„Gë„Õ÷R$ºø\aµ�³8 °Ór$‹¢š‹tÐØ±ê	$ªÎctå èä&q*LvUý®3Y¯ð/X¡
+Œ ¯ðia-ýå@©>I¿´ð&¶
+/)'!=­œo‡N.�äöh:ÆƒL_ÂUxpðZ«ã­SÚžù;!²¹[ý?ÿÉ	>V®\°»~ýú�=ÿ·&Z“¶¼`«Ý>+\Õ_
+…ÿ4¹øbÓ£¶|m+<jk|Vrˆ/ZHpf5A0€&’ÙÌ[À5öAå � ¢¡Ë7PûÄï\—
+ý¬í’ê¸½9�¼¹€ÀÔ@Ç‰ "vµžK¯ìz±§º€r9�*Š±µEÏÖÞNl/Vº­‡g(•8î/ó¦órY‚Yo,<Î'ï/¯#Y�×j¦U_Þ/æ5Ñ óêYå’ƒ¿ÂqÅáÿö!)X$±f�øê-bHù“ß›*Š5q•úš¿_Ó²·•À"ÈÎ³Se9rG])ûxðS™åƒHò/HF‹½¯µ/âqýër~ìonWMÛä¶ñäÁÝŸƒáÍ�‰((sw(w‹•ïÀGþÅ-I„j™{ÁG`77ºÛÆVL(Ûâ°¢<NbÐL.Æ9CJØ?/E—ÂÁXÙ˜˜Ä‘Rþ²t0o:0�ß>Išî¢äŒÁ%‘Ó1A+…ì¥ñ-=T	Ó´±WÌ¾šWKo*—<§r7T3g�fíZè~ÛÜ¸^å
+Œ9fƒ�ÝžÚÙôÆÁtíšÖ´Ã‚}Á4h"Yª“À³o|K¨,äÂ“¡›Lã�ß;ëKô/ÿ¥ �ðÇc}$ØõôhéÇ�êäÀò@½‰waaiÜ¡Ê__Õ2Ä“ Ê™¡KVãcÒet>×‚'òVøŒpv`šö”©`�!Ç²™ùÅ:Ëj�:KŸ’=¦^®Ë eØ OÙÈ+*Å”KU,’‚ÆÈ„@äô~TbÐD…æWÙÆ».1×e
+c¨A.¶ÆynR²–BzÁõtŽ47=¼>hÈ¿€r«Î,u´‹/á ©ÁËU´å6Œ€®>_¶rÛ*±¸œ¢yô}ðFŠ`éq‹öœ Óž6'�;
+f�2¦@NWÒhisJ—xÓ¼ZQýøL	j–ñ(ƒÏ¦×’tW0RÌjÝÆŒ^-p¹‰;¹¸y«�ÉØÐùÕÍ|Q«Ff©Îù5]L<ÂoMÔ{ŠîO¯;+¬=˜ËÀÖÈ¨ö %n3_Ì‰~(©ÄüÓÇ˜ú	®-Ö)5´‹"ãdÆ<OÍ-¥„tçmÅµÆyƒäš‡ Åd7Þ…È?ûÚøþûï¿øâ‹W®\ù¯ûÿo…ëà
+ÆiL¾yw¦6Ì ´úVXªRÏ]˜
+•ß°ÙK[`ÂV|æwQ5Odâ¢¾Ë4�Žž¨v7pyí½cÝ
+ý*ÌNâ.$’ß„ÁA:ŽÁ‚€À'iäÍkëíÃx¶ò¶±\‚’UÜW-½ÍFL+;mypüÀ}1‰×zÀ¨j K¾	^½>H+.Å«´ì MÈêí+×%†Î$¬ó*=ºJ´ÔŠ­7íGNh‡7žõ$¼wY‘ÿPÑÅNÆM°o«�oùfVÙA eÁë=% uoW¬&À…üá±Ã§†Ë,+p‰>ø™fGªÔ'_a?{àždHè†7%ßÍòÇ¡VqÀf\áeÜó”€üœè°rØÉ¬ÈµôCÃœ¨GMZÍòæýUÂr0•¼³b®ÿ.&[Ê{ËÁì™]ê}Äf@ž3fÄeyÙéw(6~6AcìÛIõyep…H¿sWbýî;>VçZ1Y6§ª¤òL¬Î?Ø²5Î'Ä5Ò‚2ÇñŽp�p½4ûæ|'¿Ëlpü Í§ƒú©fŽ…IÁ“4gK¨ ¼Ó”8?ÖƒA›]²Zzx}¿…^Ã+X­"á ŒÄ)=*}�¯bÒpø!{ZH�Ðæ�z¸¤dtö•wÜ\Io@Ìï«†Òã´$èà–LLƒ»µÙžÊÆPÑ"ÅRŠ"1h+:r»;²«†€ônô-;ê‰¬Èç8À„ú|›’™e¹QOð_ÀQUüSCºÑ;€W^L8ÆO†^Ã†c®!ò)!½y1Ê‹¡†'2†Ò¸y�]-%<‚�2šÏˆ‡³ÈÃ¶KÿÓ‘É°ª®sG‘¯KÐK±ts£%Ý[Ö0£‘óhRÃÀÎ¢t°\×È&ÛÇÝ©Òß[ÁGîAK‹nP§BB[µ<÷|QàYi¢Usyx‘*˜ó³”ÕÓÕžÔÖ;l(rE“–kÁ!°ÉýpÈÙ¨bƒ=9›"ø
+];þ†Þ±nž=Œd�KUÎÉÄiñ�ŽþçAËnVÏŽzšs*‹œÃå¼†</ÏE'Çó/®Å\Dx=ÍËÃÊsNKo
+DªôÖ>Åúý¿_Æ¼©[ú?ÿ™yëÖ­*UªDDD,]ºtËí›kµäŽäääÍ›7W¬Xñ‰'žø¯Iÿ}ÿÿøC«šbá ©�¼Ëæç­Ü¶¥DõUÓ··pVx�Õ�Bâ†aº?õ»ÐÂÛð‰ß+0¤©F×Ù`ÄbèÀ>ÕTÙgÙˆ™ÖÞ Ü„c~æw©­·Wµzò't²’ëÁ0ZßeCK9m]—
+Ú‚¤Í¼•\¶ÕQÁ�}m¼=¼cPTn‰ƒ±Þf]MiÖj:XA·xF²b%šyNC’.�ÑUx…Èo Œ9Q�ñVb÷pPACœs‰£xHLv˜�qË¶Ã¯Ô€�Íïˆ)†­°�ÕÅ_UÍ¯æ@[v5+-Ëa:û
+8J…ˆ¯„9Ba Sp�å[*ù
+WÍ.Y+5¤«­á(´›�>ö†•P!”™’ð„ÜowAÙB*	@Ü1ÂÜ³±*ÈBNÔÃéá¤(dY?hˆ¬ÂªÀy¯\•³® 7Á'?>;wÀæ‚îÙŸLM}<!«ÿ¶¬®ò?IÔ5 56¿
+mŸR|>xM#3Šúè”»±øÛjÇÌ›¢‹éV˜¾bâ©ÞFzœívÞ~@³›²3,_±‚È¶2n(Éð“Â…÷JH'ò/ž"©ÄhHÖ¡TÏ[¬ŽEÅäD?(±:/jS%q9Øü™÷²µŠ¬ùJ×|.’:H¸ý²·¥ ¤„<iÔ÷Õ|E¨AaÍFÏð‰ñ¾`óÞŒðî…~Óø“dFÇäÆDÒÂøTFl±´ŒšÝŠŽAEGœ–9÷û(Avˆ'¸©¢L!>‘«“?ÀêJ’cL)ÎÉÎ ì ÄWÁÈ(õ>Ä0%¤‡.�Ï(õnjèšÛ8Š“¹h‘¾‹¨ÑbiKlª·³j\Ñí±÷ÜÂÂò�+ºí6âŒç»¼&š¸U'Õ—ÇÊœg*CÂ²ÿp˜5Ès˜VšJä^‹nƒãkÍRÐ¦À>†~cwtœ¬QÊ$<ðÍñü)ÉE·«þüE¾‹Ë­…·ŽèQã¿–!ÇMF¼§š·x€'ÒkMáäÊå?U¹¼×š ù£Ù.ªJ(ŸÇ‡×˜yV‹A=ÿ³0èYaiyŽ¯8ò8-0¿Bs!G¤H4ÔÇ\Ä[ ñi^Æ^VäK¼&8“:“œ+´´Ø:­0²AòR‹­£)DžNožæý�ÙÄ-þƒŸÿLˆüùçŸÝûÙ·oŸýwÈ�!‘‘‘ "Pø_%þ·ýÿý‡³õÖ¬^ËŒÀŽu—€–£à–ŠW3…cìáù÷Ñh
+ó¢5äªÑO«›lRcV×ƒ7‹¯C Ù«Õ¯à‰FåZx›øn7¾²‹}Ëµ«ê†@"@·&ÞŽlì-0q•ºn&“c´ ò4vj>ÈÜ†.&Â»ö‘w¸™·šcbpI
+P-«¾„á ¢@ýDõñ°aº¨ó22t1¶$/oôa8–Vñ¢—Ñ�Ü˜(­c[ßô,oË™}¿U`´âõ¦¢³äq�Åõoˆ�%Ñ ²Låè(¶Î²¯�0GS<Ã Ÿ,[’Ê«‹­ÆJ¯‚n/Ê.¦~gÕámÞRkÿj±+’ž˜Æ#`X2#ÞÈ|æ£EC‡/éÛyq·ÖùÎ‹�ºä«n‹[IN¦ Ï/SC‡}–Z½‘Ïr«ØdØ(ž3¦[Ó=±¨ÙQ�›Ì,Í2#x`V­©‰�,ÄNÎ±dfíÍ_—½ŽÉ�7âÛQ§±Š*ÕµÑPLÃõEq‰ñ¯Ü0àHOa�½9ÖÅôco—íœQˆ<@Éðó»¡!aR¾AªÌÛÐûv™VT‘2‚˜8\Ó5²Èz
+‡`q@(YæÓèPsÖ½.”�†ÝÕP<Z^Æ««»R_£‹;JËÓþ å¦w$�†ƒ×—N_€t&•0C*O½p¨ÆïÅþÚƒUÉß
+Zwàl€ 2;˜–ñ
+F² Ì½œ¼[þ´Ü7\šh¹­KáòMð[4e²°Ì¢G—Æ[ìkzÉº·ss>ÑÂ‰ø9¸
+´×åêy¥C±ÉZÿâò¼¿:Ã²Ü˜PR3„e Ñ¿œŠ¤ï€Î¦ó$3”v¥i9æºéáñ”¦ä^c‹n·UM�·Ú¦ûA˜â…N.¾ ÇVpÃF‹UñÅ-* §BQwÒb�¼_Z^d|P§pÏ$�QäœÏ:¨¡°ç¬ô¶IKqäÂ×iŒ#(çxè6Ü�«ã€Îœ�Q=©øè-èÉµØi¢úªï1:iY<lrp?ºÆˆ¡&vm²”^ã_L.¢ÖG‹Å’À»áòìèyÅð¸U ’ßô;ž³âiª‘,ºmVXËì¨§@[Ú„æU1À!tn�ð;!²±[ø?ÿ™ùgÿÐªð¯�÷þ¦•kNZ�ÈX«:g²Ã‚%xU½‡jêãJhx²ÂŽ`è Õqe�`Õ±– _So9 fµ<à˜D`Ž?›y«øV}—	brL7ƒ�ls0ü+ú�É™ùóCo¾Îo,m{ï0l™˜|ËÀ×Êf�Î`"/,¤ÒÖRêšº%|„c&ÉzÊ
+^¥QENª0Ë7¼JŒç´°æ|^Œ-9oqVÄË˜_‹3\ð�oºÌ-!]Ä¨ßP\MèÀšr¾ä‚íu4cQ1öµõQ,óî¦2¡'ÅëHÜÔÄ<ð±|Ðä¿ð‘G{K8)×²ÉO�íŸ©{ÒÍƒk±à—Á<‘ºœ:#³Ÿi†½]8*uÉˆø´§¿No±dzÂ´ ÙxÂ¼¼Š‰/b�µHÄ;Zð	žsÇCiÙÊ4Ž…íaK¹(Û5!d[Z³éM×Jý¾çÒ›¯Íh¶Ds®wq]†
+í†µä¿Ø´ž€ZO-cDõÔÔnO†›§¿lN|¤/N<{š{ky.+"Ù£�T	±u"+O�·�ÉµbÍ8ˆIÊ˜ô >½dYc½ßÇ—é>ø¦f�ÄQ¡_ ï¦®ÃŸ´?È(+’„òËjrù
+ø-6£.¹3OÊFväßóbÂ1ìÜãŠ¡¦ëLËÕ¯Þkëi.0Ä'á+¶ž¥bt ywæ2#^U%ù'1õ�£×Ê�/2 3#^éõ21—&7&:¯t�;»dÚFæë[¦bh-Î“ÜwvÉª	ú¤£•”oVæ6´¼c&_1¢'1™šŸÈ~­¹œÓª0L5Ìgr{©¡Ÿ*aºˆîà0-{9+òp‡ó$M´%~]ÓO…yIu�Ài¼_N�q½ÆŸ4‹À�€ÀƒR(MÖ%§1~,��KèòhÞ(CÕr«7­t#ŠªB¬ó™ ¹ÕþÀá® }Æ¶®Z€zƒS _Ÿ"-³™·{¢ÿZKÒÔªÇÉSd…4Ÿ?SBºsÃI:‹�ÁÕ9jIÃr9�‘F�´Óð&úõÝ *øÈŸ˜G}©<bOŸÞ§šëJNJ±õ8$¦Ë%ó·‚ž­~'D6tsþàç.Dþ?´ª–r;Ë+0@Dï¥b»f|KÈw^µYMÓ¢Á\[Å·;eå{krSco‘ñ5F@Æðnëíá`¾hºÓCÌfSoÙÇ~§0�ªk½Ç”vZKXã÷5Ü8Ð³�Ëmà²›zK›{kÀS�í)hâ-V[ºšoÙ|]o©á¸Ì­ëÒTÈåŒÔÐÅS•A�L%L7¼ÃÌšúºWlAAª™ˆTÈÌ/¯fÇ�ÄÏœ#’_�óJò:€#&»Š«ŸõØ²§D÷{ždÜ×Z[N lÍKšåñ¦L·J&]UUïü@föàÐF½erï=	’!2ðó@	gÅbc®ÙÏá/‚Yæ7ø¢Y,åÔ€ìšRÚUBv²€¨ÉÅ¿µ²,X`IC(5.·ÕôŒfg>5qa÷.º÷Z”¼xVôçpŸZ¢7£T%˜¦�gÄÎh´juL±ÖXŸƒÙ�qàüãã®'�¥Å¦?¼4¯Û‚ÔÇ§a@RŸžþùÎ‰ÄUf ¨\ùU“`ÅÜÑøí½#ô5°‡òAŸ!ÔÑï�NŸÒq&E©Œ×YF…&<þÓ}ûKqÉöõUÜþUKëþ€¡3ù2¬±ªÿ=ŽÁÁç@�ô’µeV3úþo‘€Ï¹èbÉ† %ÍH“òž(Z7¯û€�Þ±ÐVöóÁÏ±ªìY©Ê�ë^"O§€°œ|�(½×´ÈIîœ1Æm3 i‡öÞQ-<Ñ‘ÑI�‘ñjÐÎ $ÍÈ Ê‰z+„Ö—`zAY¿¤£e®»LaÀ�¦#’ƒãÅo‰|–3ð-¾n2ì<°Bcá�³KVc00PÒÀD:w\±­ÜaZx38^ÍÌÐÏ|OÅW“f¤dÉ¬Ä�‘ÄJÃc®ªðÎQÀDÿ5œ‡ûÏŒxMUANsŸ´3F^×Ûbxw€Qú%'ú�Q÷‡»idÎB™Sá»-¼kœ˜ —y@Î?3ôc­Y¼²¿ÖœµŠW¼zŠ5ç #Õ½ùªŸ0SYPP•’œV•j.3øóKð œYCˆ?£¸xÇUT€n#`‡À�©ŠÂ›Ã$Èv‘¹÷6Åj±Ö|‹¯ã¤…}h¤lUU�°É€g°Y!QŽ§3J½§k+i[…þÕª_ÄøoXóÝ‚2÷rr“ï.tx.çÔZœÓivÆçÉ+]Ú{"ÿ­T]ç’•Þ°Kðï'å%Ý>^ËÔbýøÍ‘ØjŽÑ%E¨Ù¯ «–HþUs7«|Í%þüÈ“6ÌNbØAH¢jrž±b¼c½Sì×ªñkø
+Wlåýð‘w^YÏ¥�˜zßµó`KAF0ÑÄ½5œõœ®�žë­ö–;é£¡;ªsõ³ê`¬µb*&j ºp�ñŸ<¾ØVÑ)1ŒWU¡¡‰ÍÉðFÄr¿øùº…û²¼}‘i–ÇSÎDu0¿²þXAL«i‘a„±®@;~"8¸·µ.�µ–™U©´ÛZ
+vì¨/H*UéëùV-%Ô§¦Ï\¾‹Ô,C4 ØL¼Vl‹ç6Å�óÐSˆ›„’òàSÚ‘×­ ñ‘…<EJ¹¹ÓX2«dûEÓó&ø¯ÃI�˜hüÿ´ðF¼¹˜8KØ?Ã�RƒaÍ1©ÅæhÎøLPÆ›soÊŠÛ’û}V÷�9ƒ·¦ÇîÈë½tdÀ9ì*MjˆÖS«ÀôÕ0f‰ùô“˜¨:éM¿ä²ùvsœnmhém±R/Àý8Xƒ4 ž´�/ðxã¨ûŽY­"_ü6=¼ÁŒà�‘²—”¤ûÇœOlgå¡ñ. �P0ˆ³ä'¾,@	Ò�ŒBk‹ëBµ…Õê¾HWü6LpÀX¤h¨>¿îO/HY‡Ã5)o¥‰ «ìÏaÙ°IiÝïíÃ‹\ÈŒ(�QåO»¤—†tS8{—Æg,õÀ×Â>KœOxS@�_¦¨ª”7šÖfždô4c”böóbÂø £`c•�fv g“ü—á0€A+~OJ€+é	Ç%ÎÌ�‰ä~h:†�ªÆž¦:39rÕ�]û;�ñWQšL¾ÅÉ§äÐÑŒ@·“·‰Ï¬°öZdy•*¸n§�€0Í&Þ‰« _þöÞ¸ª:[ûÞ;Ì™2»�ZmÔV[ÛYAEEQÐFœBB Á�y™‡ 	IÈ„€"3‚J"¢‚ˆ"¢(‚r¿ßzVb}õÖ}¿â¾|VÝÛ/©S§NÎÙgŸ½ÿÃzÖóÿ¯õ¬¯…†4Å~_Sb<@âü'€N¥H|lqNåbX.¤’¯wÐï4Kßªd K25;-ø6j&_a^ƒÎžçÈHxÙ2÷×y©Vëc%rÖJ}š«+Kh—�ƒÁ·øé7ÅsqN0œSê9Ê¯\Í°™Û—‹‚3h¾59úM|Iå¿Í¯K–g·¬íTc¬3-¹¦?�6=þÜƒ!bÊU\°û!ò� ð$§ ò�ø£U1J¾½˜+Ý	0H¡ÀÍa,Þ€3� F¾¨‚×œKòàHX!Æ!ÛÌã÷^üýÉpœŽAŽõÀ6r†ÖáRÌ`«pßõóÚ|œ,¶Ww¿z:â@ûpPÈñ‚ÑÍ`h‡pÇg[iæEw¯£@³hÆ@5¦åjàÀŠ>nÂ{WÎÞ—l;ìW¥p�Y<UU©[Ç|Á†0zÇG‘“¢&cÜ0&¸—+‹Ì9?P`y±•²ºÌ¸‰‚aå¼\
+²¬¾ÙXäš[lÓÊ±Ò“ï66“Úªj'Uí´2L7­ŽÕ}"˜wÚ³)œ72kl¥¬TVÉJî^o$”Ÿó ¦FØbâ{)ãþ­Sø…g(±ø­×æ—e/-ËYXvù�srËJ²×TÜýpqÊ•³’š”¤þ…y�á-Ï¬�‘Ç `Ã1qÅ)Wk‹j¸iš�H@ì{EV@UT kÍår—^žË Ñdsy´0&:Gàèk¡žYUGû7:ˆÁÀP(éµÎá.ˆ?ïg)Ç7Ž}�³Æ¯p¤§×ÁS¼<	8Àª«bÅrÆáÔ˜×,¹>õ¯<€þ’Ôsá5Îñmü
+sf<’jáE•+¥ô høÁ�Ò>j"yÕ•ÅŽ­|X+Õ¡nl-oÜ³ae6¥r1"*ê…œ¼8ùZ°4ñ)®™Iñ¼6O»(:Êã…opŸùƒ" Ö›èDÔD¯’Þaº¸¼¸îÚÌz&¯Ÿe+¥wŠžäÍN½˜~™ÿšÉ·
+[Òž�è<´cc’–,£¹¦Åöƒ¾•¥×ÅtKm<?dæ=æ5À«(ùz¬´¿†¬Ñ­Ò¶}§ªäÓ¾Â;@a^l6sD°¸iBT¾VP§¨œÁžñ�¹AFH—ˆxžù	íxBy<3è`ò2µ>`p14£ZU?îÀËõQù®«*<~¿„épó~%M`¼æßÖâ]£i\dN`aÒ-@7¥( ¥4—m˜
+ô9ðæHm7HÔÂôL¢§æF¯8Ãe(6i™Ô~¶s�ôí ó¥Å¤–3ž>r­æ#­<#j\d‡ñ&¾MÍá”l²^Ußa]¬˜+çät"�&)¿Þ¦*5ÃƒvhZéDþ�þ£UUkû˜/†¸ÌxwE8Âø÷
+}N;„{½?aå÷ã|üû¼ÕPÞÛ&\	%”2ùŽ~&2¶Aöüs¨"§Å’0¿°“�†k8Ÿ‚†-ÃyŠuÜyä[b‘ÿÂ®r<†Èùã3‡|±´C¸ñáðmŒ‡©’ÎÁ!*SÈã�\.Åªd´c¯L+À–>Ö(Ø{·ÜÝÍEI·à±ãûÍˆïâk˜^±½,#¾6;õÂÒ´z‹­zÑE€WAâ–¾�Ysù••RŸ¼€k˜¾Ù¥á’W_\Òúºš&®Ó{Ù�îÛ7Âö‚ŒÐCH"æ×kb„ÿÕÄö%±ºªö‡å ´µUVó‹Œ×p0ÀO±ížÐñY¤¬ÐÃ‚qà6¹A_“Ä©È•rmÛ1ÜŠ³$ýšÛ0wY‡ù�5	Sƒ¥VãóÂ¤†‘žð¨‘^Ä3÷¬mÎJò‘Êÿ}ÌÜçŽºkBß°Æ’âü
+ÙWâ]=LJâ˜¨@ÁÞL›çØ¢�e5à)l‘Â¿tœ‘^ãYŽÐ¶ª¥ ìñ�G�€å’°‡ÃkXu{†Ž=–ªÂ%A�°]X§ÉÑc…ò½ñ{/n?Ïe±�nÛ‹¬W™¯Šë²¬¾½¶Ø›*•Z×Þj[½¾¬�‡&Bði|ºÏÇ+ˆyGXZ?Ð2û%0VzHPû}D‹'?zíUœßGû(ðû�ÉÝ+› Û¨bÄ‹µÍ÷ªÄQ›Âã@:LtIÚ9¶|û
+WÎÁŒRáÔ˜W°Û3â»Ž­3Î€Äþ‹ ßgß¬½Ðð:åê9g*PõPaÒ­ kiz2–\‹¹´ï@²`4L9|; ävóè}Üf�6v‹ ÞçHSœ«v@n^4ÜjcM�{‰.z¦Åöá×U¶8¨•ÈÌKª$>Ïp"%æ¶�©$úD‚s})ÕÅ{{‰K2%¹w~ÈeÙTzÕDøQ«›\gn¶i•¿	Ð¨FÆq/RŒ/¡Îm3âŸâö½ˆÆËIœ lµRËPT	¼ÛvçMº—~=ƒ“+ç}§føûLSNh.I;‹¯ƒƒm•†Éð„/�gc°™ä�Dœ|‰ÉŠ˜Xv¤QQÜ n„.ÀÁ¦I•`²hJôìŒkîIÊxíO×3§N"›[ñ÷“zœ‚È?âOá:¿¹–f®Âo¼ p-]jÛÈL™ª-êUµ‹„Û¬5UØßú.ßÂA=×Øé¢ h éŠ¬ÎZ‡Kø¨]øÑS{[Å §ôå–A'!|ýñp+˜ˆiÅ�”íÃuœ:	LÃ:A¯èµ˜¡½um9¦Tö¥vÄ>†ƒ(ãÀâ
+€?ÉÉþ¦°ðýÌg‘øucf: JAÝ'FMæÄ0™DXž’´?c-1’ÌhôÄuQ`–úÝ¹Ù’ÁYo7¿nYv»×_sk¸tÊHÓkaÖËCô,ó¦�Hòla«ÍbC[x ”«®3³lQ%WÛûœÁùfÕy�µ,I;w´(ù:/4FƒÐ˜�kÚÊ�©
+Õ÷ªÝ3SãºÐ*j¶NE¿˜÷<(#åÉx¬„<Þg°3X	ÕP~‚`‘FT?bšcc[J8v•ŸfÖ‹JlWUˆY¼°`!e|[òšZ]1À�à�~¸±¨�„ËéJ¸ÿávß¶V.än†nÕ³*ð!$5²©%ýÿðTndDÍmø?Êa_œ×�Ëà.¸rÐÃ‹1,Tzà¬ºw¹‚¼Ø3÷é/‹uQ ‹Çí€}FW_y�4T%Ùg+ 5jVšBÝM•zª€&›úœåÀÞé»œ4£e(ÔZ�ÑÆ&{ËûnwÍõs¿®8ê) 	6ŸV…˜Àwèn
+o�M¾Öuÿ _ï”˜€&tÏÓm@O¨�§üXA™ØX†7÷s0�ó†Ã0>²8?±ô†%­Ú>tN tLŠß‹0õ´˜ë†
+B¶PUF÷	œ%%‰3YeS{þ�\œ|�ël0•¼n£rý¦0x¤¾BA¤O�ÈñL:�_riÎÉ­ªk s›ž
+Akð¦o‚Hn×œ=p„ó¸ŒR+é¸Aùe‡nú²Õx:'Íêù*Uœr…²5‹¹)NÎ›^ºtLí•ÌŽT+™ Í%'ÿŸ÷xÁæcàNpµLú‹Ö†b`‹¥é©’\x¸$õ|Õ2xôdâ§\Ã·hR‘Äu"ãk”³·mf|'îŽŽiµª‚Üžù	Bä}Á”“|œ‚È?â�V»‹žt1ôÅ±òð=¯-Wa«@L6Ðw‘\BGåŠ”aÅˆû©¼2Ç€}=$fzbI0’`â#á
+eú�æ€3X¡gDb*ï¦{9æVáBàðÍÒ"hÈ9¹¢ÃL+_‹Ã
+µ˜_æuŽÂä8VË-çwa,9ïÀ§Ç?‡[Î<™žLyÅÀßçêŽyqÝËÒÞ½Ð‚í•’v;öª¢^�À áç¯ø›ec~×75|\ÙîoË»6}ÿ¥Æïu¸nÑ+Ý\“ˆ�]2fÀÚÆÕ@ÉíOsüH‰x åj‘Ç�î�2öUJ+h d�§ŒÎøÊª×‚ä}�üç¦'Ô�ßâÊi)‡WàÃßÛ†Ð>s‹–Ð´-Ž6§—é[îäfÍÛ�œ5>²D¥]÷2÷±BxLaîwBÔnÖEÕ0­X¹’Ô¿`dTðè=aAñÂÅ‹¿S¼ÌK�pX‹¾
+f©È/\›ÚùF$GJ„|§»+eÙ
+Š¦×¼™W"ÃÑê)dg\A6¹z¼—�‘[³²ïg›3„Þäúé“q¨½jxeâêPRB@ð¦©ðGà£4=ÝEÛ@1¸$°èÊ´&åwI¥ª<í�öU
+›ßPY­Œ6ÇEY¡õt½ÓºHõ˜Ï»á™k°iõh"­ ïRàåŒÛÅ”a„Kãy}ï�’­æñU¼xg¸U\Úb¸Yaíé#†¤¦8årn à¾0éü\qòµ˜qºfFü?qðÆ7Ùfù1¯ó»ð\LZîÁøÃþ˜¼É‘``: ÄÀ¥ja¿ã{îŠQ±hnÊäI#òâ²•�¸„FöœwÐœ±
+p€* Í§üã° ±èã…Ï¼°Há…®8ÞÙ¨V;÷�¡“£G‹¾}ê¬‡Æú‚aÆy†Tß#ˆ<¨âìGø
+ÿv3±úŸ$
+½ÓZO·×a¦:8o�©ÒvñŸ¡Õa¦ßós~§\'·ÄÏº÷�¬ù‰³Z VòËµài×	¤ò/Mç!Ü–î•�_1§•TKå%«Îl‹-«ß¨½’ÄÉÑ×?Ámv�>Zžk‚·)—â¹á±Ø®}R)·¯±245>v]É\¹ÖŸ‚ÈÿÑžôá%n%’óÖŒÁÙÃ²6~�¶x¦›‚ùíYž›8˜aü»Jëp–êÁ+}Õ£t<�îÀGØö'¬àž{‚7øÅÇÃm�†«1òXŒ'çÔþæ1Ì&Æ¬ÌQNe–˜çñp ’ÛÝÃ4*Ã#™tØ[&,Ójš$‘ööŠx˜,í0‘È
+&#Žº�f\7)\‹gÈÔ`fÍýSPžQ§,=Ñƒd(­ÛÉÈœ³—ù²
+€·ogå,îýÔŠ)ƒVMë¿ôµ5»lÍÍÁÒi£>j®kbt.ÕÂÃy„›lln éEá¤Ÿ<\™âÁ¿Vµê63Ý^Uû_š–9!²ÒñªI{}#ÛX€t…öyE+ 2žEá¿7Uô§²˜õ`‹±ÿ�YÏw2ÓJª¹+mÁí
+¸Ã%Ì�kU	j/QL£-²A.8rAñRÌF‰×’h¶P|'&.âÇ3¦ƒŸë¢õ^ÏÝ ñù—+¡»]9‡>uFé9*æ²‹ %<qåj¬
+gè/aym$má_Ï+á~¹$(•ô÷Þ ñy†Á¯g§^@+ståò++©}yfMðÑõ@:Ü°�c@I<× £G8Þ¢z®°–÷-Kè'èiQÊ—ž–¦'[Ñä[¬pà‹=„jÍLx¢$õ<®pzü³4roéóóÌèe`?.¥}½þMc÷ª–øˆ 2ÆD$ßTKÞÄƒ�(ïÏ
+ð
+\ÀDã·Ì3ôä-ðöyC”ÔNÜ¬±—ŒÄ…Àì—¦�…ýj`1OzÝU@ù-¯ò	WÂ¥ä^
+2µ´øN4hUœ™ÐÉ•dŒ
+Yå…ŠZ9Ð‘HÎb&Ë@aH
+¨ŠÇ~€‰»ãSú÷ÉT[m­~·pa3„4×j,Nê¥±!AžQt}‡!­Êÿr7Ã÷¬¤&øIÜp“kZú;g+ÏˆbÈk*cÔÑ§P3é'¤*Òó@Xü.£¯Õbþ§‚ÎReÉÁ\	æõŽá†ÌwoIšN‰®¦»¨pÜuô)gË‹Ë‚ª»vŸ$†ž²¬ÛN‹I¯×ÌØÀ½Q¥ËÉ£¦ó&_¡m}IÖ´ûjnÄß Uù]œí„H¬âI>NAäñG«j3ñg­[ÚŠ™¯žeU2µ=}LÑåCÒzÕPI«£Ÿù*™2ÄSìëegláœ]¬˜ò! �ïÂ.;…;´_¹kùH¸üÁ D,ÒŒ'˜è+ºÜYåB¾^pð(Ð©ú5Ÿ`šøÊù—\•-Úàªym©X˜ãY"�kÿ¶«¢´µ¦<&'ÁL�1{œñMP–Gœ	eÖ°°RÕÏu­0I€V.¾ÙbÝuF:Vti¼¬Íu«›&.–µrØ³ï¿ÐØÔu”»ñ�j8Âa1‰m‡~zMÌ²Ç¾òl
+78~ü€�“]™�z‘ÄÌ¯ƒJxõÆßwZu•Óÿc^Ñrš?D:~_þ3bŸË#xŠ¢W÷Ã(áñ4|üh€]û™’Ø7˜eL£Dçš¡®½’öT‰ÀV®½ö*ÅÌ[(#ž<�ùTÄ7¯(ïÕsOÀ2‚ü’Ëà‹8?¯žiè MÉ£ÿŒØ¯ê�_ú‚<múrg<ÜîvÏFü òG¼ò;çdì)¦Â6õ¸T»ö‘ñØ‡Â€¸*¬œ¿0]Ù1ªsÝ�cƒ?�e3%yø �´ P�ƒM	P�: ¨-__bíì1Ã::‹�<\™�3òÝåWTîsz‡Ÿ]»›Ñ…IÄÁ˜C”°ôÛcá'Üc‡páñp«§
+æjñBª5›�=qƒŒ@°FŠÙÝ,@7æ5 “�¸Y+6‘Ø
+²_œrõ¸:Àˆ	»¤AL1;zDIÚ9aPÒë7Øá’´?ÏN½˜AŽLŽËñRFZ„aÅ¦Æ¾‚ñSf%5ÆÚû.<ýuòXOqÒÊöþ¥÷_7Y˜ÅŠ\í€µ÷íin„ËÐ¶¦Í%½µi¢‚R8¡–"ßÁkµ¹¦+™Û—þ¢Ñ?ÌbÞaDñ/s�r‘®aò±¥dø•jqÎ÷ 
+‡6y.†ÌZz§´“{§¶>gqyxœ�[Ãeb"ƒ}¼/±ýÕ&y5£ahUçÝi±¹¦D”riizêÈš}WyVÝ»¹Y_wÅëà<øE¸^X�¦`öqþ‰ªCGs•¥'Àýå&]0;õ¯œvjl÷è•Ï{¦8åJ:È¤Œcûó¯W*9qºSùßóÏó"™Èµ#ÌýWdè0Yt±Gºb~!�ØÀ—TÙÕr|Ð‹È{¾FwÛp\äPÕ7¶JZ|‡gv8µ„–²Ì&ß£R%ÜúI»pÆkÿPPßtyOÎï…ºçwÓ©/ÊUå˜¨,3KÛŽ?C-�×
+¾¯M“<•¤±YÌÆÂÀµ%´™Ig=âz¹´²êŸ‹œÛ¯,#c‹ñÁ{Ý[×J-Ï¬CYr©™Y/dÿÞUÆS°±¾½ðI¹ÞÞç0ðÎ¸âJK:à +�uGeYI`¦	ÍôÌ»9õLv ^Ã©–HºZ’z>ŸIÍe¸ïÊdì'ØÊB‚`M­²&‹ØºÉs'ÄÞ•ûbÅÈŽâ6`Uµê;n™Fƒ$Ò¹˜}@“71h4Ç»ìP“²ÜÂûžîb¼Ší_Ëe€P�ääG1Jà|–_ç¹m¸ŠãŸ·Ô×-ô¯xå/.íËkº[
+çq„%tõû­Ú½¬\~hHõ=ù	íd0wXñ©¨™<,8§ÞiðÌ D_WÙÄ„òÌêàËì”ú^~EÒ4õxáÀÇ¿€ ]i•§®³çßCq<üuÍ­†žïSuãTæì­µ^R¹6[‘yzIÚÙ¾.
+$1ÆÔ¤G<Wwús»ðÃŽá§Ü£6ÐwåJjƒ[å7×EYsiOÚœ¶í+¹'ù|ßÁäXŒXøã´Ø8ÍØÙ†`ÊXiL˜=ša01jê›€=œ»fÚÂ} ;Êz/(/®à~ñ]F‹!A�=t:�IŸâz™Ý6¶5 5©º¨™È/òÚŽ©½Œ!g¿b‹«_z (§âM†‡^LwÍ•›ë%<ÆÖy—%�ÕýŠ-ÿVjr ±8x/[a Í"¼ïî
+W^^sf'³R•¸M‹3€Œž"yŠù‰�À»yÍI€¼.CÚªsÌ©µžâY'|…9äI÷u‹×KàƒPE†SE½	à<F“2ZTôj”@v,¼›†-Jº…‘WT*sá»Ù©—øÔ7=àgLí¥|4.²\[�ë˜ªŒC&ˆméÚ©FKÁÕ\”‚Äûñ=TÓ³÷	BdÓ`øI>NAäñç­rŸÑL[¬®«IgY¤â÷-‚Bæþ+Zcâ{½xOÍó…PÕïØŽ=Ôz)0z#ÉÅ²~�õàxß²ñºÉ�„Ë|ÍM¡>û•2¹²‰Á­ÚaSU•ô
+?šuºÉþp€ãu—ˆMÄxÍƒFúU­Èap+>¶hR!Ò”Ó–„m¾`%˜\Ø¦t¬ ±†…y
+ 1’1L�Â¤s$¤Ã§³’šàXº”hˆ©œ+Ý9+)u�Á(éÑ­|´á£* ár-ÜùzŸZüjƒJô„<rªO²÷-Pç.[úsYìójU{ôïò+Xr¨ž™‹×ª4«o¸ì,†ÛÅT:êŒ3�†GáëáU«å?Ð\0Ù•\æ{L±o#pØdK�€Y6•ÝÛ±Š´¹V5ß5“Xs%•é•8Z¦~sôt„ém¾,™z¯UÌÑƒžµêÇÜ}r‡
+§ˆg>â€\+Oö…%É†–6Î‹î§ýÊû½õ-S“h§Ëƒc…Ä2¾äÆRJÎ0E×@¾h{˜ ž¦¯(ùF—BåÙ·#1€4#	&Z_\_¹ à�hu².7ø£ËÒm™7ézŸžZ ‚é¥�KŠ÷Â`2ê`d¾÷Š%§hj�%£)\<ªMø^Ëpž‹·s×Ý•‚ýw	}†.½àE£ 5´êHƒ±$S6¨¥¢—¿´rœ1¯â°1¼ÏEÉ7á¶Áàœ|«óGåî�Œs”ò¦UÙˆšAGkapˆk®NŠšÌy±'È}-}¹ršëÍ}Áp™G*;5µ8å/*¸ù�IäI¾³	L3*„Œ™—Uà•Je¹Ù¾iõªjn°€j«›³“;Ryå\@Ÿ3<>yékVhïW%‘Ùb¼ÀbRÉxG|Ó¼tüšñô0$e·Ý <j’²]V*èîUí¼¯X IIõ‡V5®]{¥gÔ2µ*Ì ²Œ8&;”¯£<³�ŠÇ…§á*ô€)—-¹·á­à2÷ë�|ÒÙ¸‹fÄoá_AäZ�‡-ÐiëÍ•˜ð„’´?Ñ)zÎEž DÞ:ÉÇ)ˆü#þhU çÙˆÃ®qê:*e{öÇL÷j�X€Ná½$sê™ÝX6<‘/¾`u 7ç(QÑ%Å¼¢±Ç+b:ø:ÓÃ-aüôÊ¬Iì<Ÿbê]›Å÷­,oîôãn0]ÐŒ÷ýqØ”`uÔK
+zj¹;öcÍ™´�?ì>3¶ÔöâmaäbÓb5ÒáªøV¨]Èñ±ºVŒ/£ŽK”cTË3k £EÉ×ñÚd±E.`‘‹JŠø×ËÙÏý“ír L4UÕ‹+1°›U* xˆñ2ô¿F¹«o¶¾ËÉ=ÑÀNu�™wÕld…·$†ÃÄWTêé”õ=;ÚÙM�‡ƒÒ˜�†k³´SìE<‡H>…cp?|ƒÒuá\Â�Á�kÞ=D¥fû+ù»Ê;´''Ácaâ»Ž½zpfŠãwÝjû¿Ï)Œª·zÊ—²DöŸ3­¹M¼éûÔÙ¶ì°4÷¾¨]K‹XÆØŠÛÚr¦’×žÀ‹©½JÛ:ôìXíFµÆÛ±Z™góÎ	<zª^–žTž¹T»�
+æO6E÷+¬=}‡ô-KP�ãé,>ujÍN½”³§üXTmÇëys–y)V>ƒñÃÈ�ƒ€Ü`aÒm\¿"—êÅç÷ð�…Ÿ2šÓÜca²HÌ»o»0-�ýç6ób³Á5nJ[ ðÓÐ÷øüÂÚ»D¹JDM‡O§\�¯È¬ÔÂÂ@íµí€3ÒV¼ca6µWaÃg&t’Ã³FEš>„jÔ½Ÿkà‹t1Î$sgrô¤¬Å% óÏü®/ÂO11ÿ§¹_n–ëôh-×5ÉÚù’~qÅ`8&ðm"3‘’"ÿÂË13f¸#H©}\¯¾#	*áTàøÉyXÆU™xrì+|Eyúó•’ù¤Š^�áyZl_OJâ^¼Ð$À°QÝ“Ey±9žÇ$B½†KbTóCteAâEÉÿ`¦3œ0¢òqx˜û3âŸQ¬ªA9C²×Z#ÄæÐUœz
+Ö€_(�E^iz:žýhZÔ�‰Ñ�´ÅÕ¸—LÎ(æ5L�¾uƒê¡ŸhDë�ÁÀ“|œ‚È?âÏZs«6"]ƒÚ¥ z(6ƒ‰ÿh¸Ìzñ4Çôa0‰X œg NeŒlÝŒóp0t²mø>¢]øQ7Ó�;Ð1ÜÊ;þº*¡c=vðm�S`ú¯¡€ÙÁ�ö�„%)å—õg,y×ˆÊÄÎŽá§8�¼¯ óöÂ¤Sà¸|ü;!2|d‘ÄI^PÒô<ù„Íp+2Ïdš€zLCæË˜™ÐŽ©4«îÝË®0Ä´ú‰‚ÎE¥E‹/^R^äé%€9W*³*„÷™É
+-_ ~¥F+dd™ŠÑ{&;¤ƒ¼öÖÊºÉKëWj±¾w•¡¤–ÍÈ—¤ž?«î�X¹Šz!SoFüS¶òYã+|]¦›‹èbs0Ñ–Äª�*€	 ìqZ%g¡ñ³Õ‰.QBOÑ8‰ÙQ½ªo†*Ÿî¦ê-‡i7ÕýÁòIU»VªGqÔ9]ÆO`½ì‹I_ç2~Õ¤O•ñƒ¯3àÛÐÑ<s08âºþE~]Èkñ-R'ûÒ#$a
+øä’ˆ™¥rïqI2ƒÏÌN¹t‚‰Ç>�Å£Ë°lÀ™³-àovê_­–´¤� ‡¦nš–	B$}e‘…ôÔš¯%Y kŒòk§Òå’8ÃŒøÎô‚¯(ý§!¾Ô@ò}oV«Bz­¹z_Z‘¼pÎ€vÞW©¸Û<fÍÓ&Nk>·œ#€`èv3õŽG×´¥E|¿eü.pÆ™¹#©‰~2-6W¤ ×dË4ÅžõXxß ~³Î»CMê5ßyç$Xl-8¼Ëµyú¼’8VÓÈyq=UrqªVÚ?â^ K¾
+*Å×wÐ#óŒÆnÂìk'ñ]‹Îã–•»]õ¤f{Õ3®ßSDœÙU…30\@¶ÉÙÒ(_Ä2(¼g‹Ëã0r€xÏNÒ½tëÊê^ë¼¯D*¼¶#c@µ¡·K†Žc¶ËWüž›r}|<¥ O´ËVHnÄ±™3tDÍmsêø6°E ‹YÏÁà>M]œ|maÒÅ)W�kkZ’vö´ØþJŠ,æ#Æ¡¤)‡âWÀ%q'�ó[*_õ�ÉÑ£Ìm‹šˆËœÅ}Â¤p~ UÍ/+>KO� D6úœäãDþ´*#“‘–+A€®™Asˆ{ß]•Ö¥¶–¹la$Ÿ²ÃWØ`à&ž³'¾éÞÏ1‡oó6Ó#ÿ;YÉª=Ò_ËŒ†…�´ûµÖ*|—ïbX|AÆQÛT:%í•%
+ã	Ú}T«×’Ž«k*ýÕ¿¶¨†Èr…Þõ``ã2†m;¾öB¥Ô=Ë\Ãºªþi;fvÃË\(Iû“E®þÙ–7™J™g(¦ô)WžY»jEK‹`y@ž¥1þÍÐ@”¥g´­.-ºzÈ<Ñi‹eˆü]i�×åÁ2c“M§îzc—ØdOrçH»Ã‰Uºú…LdeÇ3éúsý˜PŒa?Qf·Ÿh·‰þáŠÜÌ 1é '$K[`žˆ�=ñåV_Àžƒ¡Zô;†UÁˆåˆ$b{l�X–§Pk½áŽx‘NÒK˜‹›”«�Ä¾V?ñ7:,à`šóãç¸pD‡p#]ìB…ž9è9/*�Õ·SU?*úÙPåª¨†Ñ—ôŽ¦YØ|íE“,YÏ2ø”§ð„!‚JØŠkÝf%içò]VšžZ’zž•YT°Î†ûÎZÝÌÓ­7/¬ì‹Eªh¼ä’Ê(,Ïñ. ñß–
+�å¿üÅ²ÈKÓS<ÊC
+'=ºÉƒvú©=%Õ¾¬u¸˜. […Ý[ AxíÉPÙbÖ|«—Š²¹?Àí«4Õû …U}ªµGEØ´[jB+`+¶SVYNâ1üØ
+ÐÀk&ý»QþN'PI9CUö·P%73K…ØÒ,Ÿq‘;�BÕéü ÍkÎ8ªÖºIRfà"]3Çrç£òÅ7¡™“|Æ	×>‚sm-*·Õòô«Y©Ç1µ—2~Þ°
+Ô&ÉÁ£¬¦Æ R¿õÝïJ­®°*º'Í5N¥b÷±´/>à$QîÂ¨ª[V˜8³ü)Ñq<MÄÝñ$YÆ1ø€8î-0¼æ6¾n«¬çYæÔ¬¤&ómÍáåœ6ef1œð@Š’oÆp;
+à™C§‰¦Åæ0ðf§\Â(iRŒÆ°;‹¬~ÜpÎ¦Õì¡B5;¾So:‘QJ—1`´eYÌ˜Lo>‘ÿ£ÿhÕM5ú¨m�¨ÄÏ3ÚÌÂØz±E˜ÌVæEwÁY/‹ßûø‘p)ÓPSËÔënP!ªo·º V‹Ý.\çû’ (Ô�c°'O†»žQŒ‡J uNê¹�*aº¯ØU	ÊÃb0_<´µ§-~“’ºÎn&¦ä5æ*ã)W
+ZE^ÜŸŸ�ZP÷>ð¥9Ð3?±ÍyÜVmPÑÌ#É†_	À•¦�} ž@I�vŠ�ù…›xÔ ÷QC•T¾²’Hò¼æV…å46{Í\{»�¦%ƒ\VYy²éA;€ã’K*«Ïû"­ë‹âÇZuÝ³-Å¯8åj~zzü3…&4jzÜ‹˜1õD›Þ’ÖÝ
+çtwÑ"õ[];Ô÷³\Ê·r�ëíÁüæZÎþa�;U]'£�Ò³jE“èQ4^s� ‚óS‘}ó‹8²¯*rrøø|Ä—ÙÉ•H¯'ûÈùÙ-A{‹Û±ÅÕ3Žu²ƒà¸.ÂƒQ÷mp„ÀbNëU“fÄw™û§`z\7ØýÔØWlc4*ãƒMƒB&5ÝLðÁ¢@sm•ëE�éÐùòF¼´17;õ"x½Eº^`k&±{¡uJyfË©oû�t�µ^l�(çäx®”¶®¦ÏLxRéÏTYõc¯ÐÍPô¢6/Dü¢HìÝx€ŠjûÉ³€=UØô3_îeû�ß»Þ÷N£it øª%Ôâ’}Mktíà[{¼?RÝ�Œs¯KˆëÂø†¸Hí¼oâ:9ðäÂ¤’ø~‚©$Ó!àm‹1WåT�ý†'B|@pUŸ"­€¥ãZ¬
+k]º�aÀ d*q× +]Ì%åj0,AXƒÝÚ« &P>KJûü4ßâ<žbÉµ1=•4ºÓ«~ÐZ]·®ç´J*ÙëÅ°ø–é´×´Ü`)ÎQ�×-£í·¦à0¨ÌëpnÍÓ�µsº@ç™=#þ)üœ¢äëèh.{fB&¾gîåÙËúà63ºøîŒø®åQ\çäÌªIjÒ“¢Ç�t¥éiù	�JjãI~EjêyœoG¹$ã`¦øW’bxÁóy,TÌ¸=Aˆlô8ÉÇ)ˆü#þhU&‹ïú† üÉˆÝ­Ã%Ú�:®aW{0¿—•ä0û;äÁ.á2«ü¶Møž;ó-¯�ÅPå�ÍMÿ´´¸o8ï30æœ$§*·Îe©p2V;ÐSÙšž:—­zÙYçu]9†QÍG¢f@gpq‹S®’8ù«Ò»¶•:Lá¼¸žx‰øœL& S–‡¡`¨ÏQm§å™µl—!-ó-eGB-=âË‰Ù„•¬¾Ñd �PS3»ÍHÏ¦�Ý¢R({™–XAOx
+oºP€ñÄËí#+·t¯„w©´½Î++‰WÂoaÕy. ”¼Ï�p%X¹²ô¤üÄ6&æcÇ#±iR.ÚÓC)‡´ç]Á`¸¤“JÞTAê"~énšu¶f®ÀÂ­ž|š£ª(ØXLßÈš9ŒO½R6î:þL-æj�½}ø/Wª÷ÕÔÓÜÆÉ}iÙQõ²éANŽGÄ‹ÇÂÍà¦JvL×^ó.ÛCIïsýs%~~sál²¾æIâàEÜ,$öG{F�4ö
+ï^€ÏS˜t«¼‹søˆærJHKš8Òù¦a-[àPøŽ]MáüâÊäš$Ý°à‚ÊŽ¦S8³-§_lP‹™•ì_`mØdZÏSJ±ç9JXP¡¨ÃÏ™¤0Äù›Añ*Öö`PÊ;´ž$Ýä[ç¬VÄ¤æÀ¨]iMõU�z=š1µ—®¾øPÎK1Î’ß™€¶„´ã¶Yâäoá!Àª¸F»²þ·˜Ä�Å“|TP·9_á²g&´ç‚MÜä’Š“bùÕï+g³P™ƒ;T]«¬8ùF ÌDa=b‹º
+1]­Z�Æm¹0°RyˆßÂLÊ;/®—/ÒN‰,ÑÂ]Æ(k} Žx�’@öGœ`‘&ÿ3Z«F?ºÞN?U¯ó¦ ÍUÚc­U|V©-~Zª#°ŠÖÍ¡e†XÊäl%b‚ã[åšØF}»D~ÔÃžÅV²óOj4+K-Éñ³êÞ‰36;¥>¿(ùzÉÐµ—ÖÐ|�®FÀài`[ †@�£}8¾(ùF‘çÁ4¹wõšE½2b·tÍ	Bdƒà¥“|œ‚È?â�VíîdÀwS„¡ïdA\}Z;&îŒÀjL •Ž·ûiK?èUã±Š žÒ¾‡3ò&†ÂeUºÁüØ¬®´æ¶«ÞÇ~¨�Géð£�YäüÏ˜e_ôãG½T¥I`ùc……ÿä5˜|óBNõ‡–%=V+˜˜Ìô‚Ä‡†ÕØÉ;¾‚wÇd™«BE“£G«Lùè‚Äû 9õl¡Õô¦ÒþÌëÒôdbšËÁ½}®…s€˜&#PßJÆ[öÇõ¬ ¦†ØÐÌBU±½À"4“w0¼Vgù"{áá‘&z±BD$ö2ïœJ€æMø?íXY–žhéWiçL‰cÊ‹Ëæ#Pƒ>²Z	Õ¿VqáÍ%©üí‰`åyP‰wxq[Ð•.£Ù{UÖ–ªˆÃ1�\-¼jUÜvœ=í‚gÐÍW¶U¶ã{,'
+aÇpùnšÂ«>óÊ¡OEìÍÕëƒA‰R w ˆ*º�Þ÷íl×™ï]¥S×W™
+8–k«v&iŽyt¡ŽÁdõ·HÚe*À7	”›ƒYÆè%Ý”ÓY4Ë¬ºÍ
+“nÇd&Ý—ä5-�_�OCÑæ.8¿è"3‰ï(®•Ö¶"YçUíÐÔPKßü¥ÜYòµq-,œÅ·¸^4Œ¸†T+óëÉÑo(Òé†+öÜËc1wÚ„+$#°Œ†z$´ÄU	õïté*ÚÍ½A/=¨ú—M�”M.~\�¹4¸¾£»%ì`cžV²
+ŒÑ\ÕW;=tÓÂ/%ß�%!Q�>VãK ‹3Hì"9tðÒ¾GK2ÖÚÃ½¨xGÅhO=ìY´îN„×”Æ™wªg½–9R"û¸`ýÐj	!nw•9åqpÙ‡LùJ*Oƒ×]êv?Këg®Á_ûªJxŽ4$]ÿ³’(˜ö …Íô”zÞK#mku) …÷<)Œ†¾q Þ·É5ãsãtßì”Ë˜­å™51Œ€?§8åNˆÃœŸØÚ#x¥0[¢S<¼ÂÚÚ¾ínÌqâi$cs »Yu›ðë /)ë1VA­…}}\²�ãä!õ l€ñ‘¥×„ÈÛƒçOòq
+"ÿˆ?Zõy«^tŒ	îJàÃ-ŒaU?Bý°uØ[Ìš\åÝ˜A Vˆd² …ª¿­“¥ÿsÑrWà�ÑÀ+=¦&yi®TêÜœNÁ�ÂaÁJ,¦Lì+¥xXj cž©Çpõ4m`BEsLuPõoyíò,rM­p¹jÜ™3_—¹€[Ë¨¶�•˜�¼Ï;ØÀ¢äð½çŸ‹�÷ÖofBGg(–s±YW0+ÊûFI.6@dúð>àˆæ…‡³òì,�îbã†¼ñgŽ4MTû_—�ô`Ku×*+4Ó‹‰¸Ü¨›h®³ n3`\ÙéñÏb…”ëñÓ¤¨ÉUzæÇ±$84,�©*Õ_à·ˆ<ÞL„Q‚e€NËp.,FnÉg¸7/™ØÑ×®L/ôPõÉÞZHd9y–àLÕ7~¦ÙUŽsÝáŽ¶¡¿}"ÜÞ½ŠÀ>kÉ­¶àáµ
+Ä:à1«Êþø<Ki�’@7NªåYënL¨/­+xu}*Uó½Óãºa¦ DXQ5ŒÌ/H| ÜÄÖaÓÞ:ËÐZíºå³’ãT¸ûQžYT¥…qlTÎø,OÁ/‚•›«“žhÌ™µ å™Õæ(¼Ç³)U:äFÖ•#±o ¬À/¬gÌðñÿdÙ6Y­ÕS¢Gàtù¾ª×¤Pmš�iÚ¹y�GË¨
+Ø:º†öi¾Ë;]ÍóÜÇüÊ’x©ûŸ}ŒEnÃá‘×·Yu @¨µRö~kx�m.8#™Ó÷U¿æ ×d‘DÿZIvƒæÐ†�
+bvpNçé8� ¯y ©48ãŠg We¤¾ñ�»ÉÑcT\x<«îÝÌ ¡5¾òÅpiÿîâÌMNÙ€BŽá§sM‚Þ`]AÔgN+Ie~W¤üÔƒ¨±3’ªû@ ¼›.îgõ¾ƒTä�ê)ü&Õ‹ùRÏk‹�Èmâ:jÖïä´¾àÌrÙVÇ¹ú·¼ÉŒf¾3‘y]‘yžT@´ýý”úåÑ´h[’z>®Ñ´ØþŒ.‹Uˆ¬(Lj1Äz Ó $~©äïáWèi�ä»`_Qòu€ &ˆ‹©È<“Y”ü.[ºI÷«zÚßÀqŽT¡„Ò„È[‚§Nòq
+"ÿˆ?ZUÖözXÑ�o½¨ŸçxUŽGÃÕ¾ ª�×_Ux}�ª‡‹‰v-X¤³	,$�3´7À"ñ¨]—[áÅ¶0#^=3âä”gIåüä:�ÝL®ó¨oœýN4°WœÖ0CM¼±BŽýTLÞ³Xú'3äBïPù¡ë´£¦`íq#ñ<¡$¸�–/p¶ÕÑÀ|Ëjó=Ì3oú¿XHH¢­yš9­aÙýWÀ�h` ºéÁÊzóÏ©LB71�«mAo­Äå¸žuMl�r…¶/­Ø½”Bù‡ñ-ÎÃMæ3æœ^–Pæ'<:ÇPàBU¥oÆÁÌAézM÷ÊAžwãñT4N¿4¦¶ŠÊnžÁ27FÒqtÇƒA©‡Êx�N×Þ¡ã0×®¡ÔCµZp]@7^(Áç;œïk'ßÙIAÅŒ¹Lßw·òÝvá‡PQú�÷ébÎ¬E]dõxNPX=M ‰ÞôôÞémäq‹´æöÑ�˜tÌ,ìÃ…ÍTÝ«2W„àbfÄwUBwfaR#zãC»aÜJÓêM‹}¹4=“hu£ÇÍN½Ø-åRay:µé>x"	¯"é:Ëœœ«ÕsžƒòŒ(ŽÄƒú=¼ÇÞ3¢Qtæ”–ùE©©ð&ÝáJ¶¾ƒOÐæ´ÕCA9í)µá�¼Ó:\B[Ñhø0J¡ÊÕÒ·*æª”«»û.pn¥’4÷ÇØ¦g–e/N·‚n
+mÅ,kÝrßâÂ´¸žàŒVW±öbÐ‡+gRàjJ°t)T‹7¡??¤ú-–î�ÓÑt¯E<y"-‡¹î«çÒ2‰@á\sa+½”«uW³á#®œ¯û>_1ñ½;íÍÚ«@O¯m:@1` $7‚ø+¿ËØx³ÎBmYnQ5çÙ\*ÇXBG�wµ?ØRÐL¹¾Ÿä'´SiÈ· ’Ê")Æ›¢7�ZÂ‚U´ñ:ÕÁì³c¨'_ƒYÀD¨*Y¯²Œ8UáÒÈÀ¢8ãÓ³êÞ‰«21ÜWaÒí°×éñÏ€×\ŒIÅá5à«²z³¸îKÇ_yð•jFŸ¨tÀ)ˆüïùG«2+™ƒLpŒ-#3Ø>\ŸUUpÄÒvw)Kz·*}|
+¢¹f5FRµ9Öc0ØU¬"Ïút‡ÛäUY’“ðE_hz<ÜÞ[ûY¼àT}Mˆìg‡Ñ>ª6âÅ™Ô‚ßÄ¾EA‹˜D
+ ±½3ÜZU¬ÛèºÇÃj|Î€TÑ„›%³¬0©¼Ï
+§&_ë±ñ.ŽÍ¨VÙ ÇKÒþ\œrUQò� “buêaN™;ž	Š£å™Õ]Èãé>âùƒ«²9JþZi î1ˆ\}³xâE–ç190é"i|Ä,æ»¶î§¥?[	<ÛvÄðc§Ç½Èõ3ãàGL^œdÌ”êóŽW>øFY’_…;VO�¦»'Ý2œwO0
+—ËÜ>\G75ºÝ¼®ÄöoÚ†ïÓÈô×ÝÁ0º $u¤�¡¾ØQ9}ÂÊrý„ÞäÀÊ‹îZl(œÃœ¦s�NWÃËVà
+}Í9Ý�ê¡„Và’“ó£¾rþ\ÄaAó÷J˜¯eº½ÊÍüŠ×¢ò‹²L‚lËTÿÆØ:ó ùFïPSÜ�š)=¥/0\ªûp¯ËñÅÒôÐ° ±¥Ð_´€bÂè-Ûñ<z3|Ç6(ëyv$½ÆðÀòÕ×’´³éVW’/H|ˆÑ`àqÓãŸ·M@+PÕsbÔd‰¯î`Du¯.VmæÖÿãÖábˆ6MDúŒ I!øî6Ðž=êK1¾Ëÿª¢‹V;àQRLIEünWÄ÷ZÒ|„øxZ–”½M/�«Â8cÿA+¡Û6%®\’åƒµðÂy8F©¯ë8³ÂrÖÂµ�øµsC“žSæþˆš[¥xŸoµâ^ì«èqÌéa?·PòqœŸîcöqßcUâÿAzöå3*êq"’[à¶@ª;ÏVDœTÎûóâz¸ –-µ(Oçô´G.ÄÑ:óXŽNãÁÐâ[ŠSÚrùº4ðÇ‡2g™Ñ*¸9ìƒHÎˆï¢bÖóïBùK0eÆH°ZxRÍmü�…Á§\Mcr1LF[e�Ë1“BÀÍYŠ,àlEÕZÂÄ„`ÎN½×Îck•¿ÙG¶[ÊùO"o
+:œäãDþ´ª×0’ Ü�Ìç3ÓªpÖ�  
+¬ï•|œÕslÎ}$\*�—O…n½Þ1D’ƒï<ÒâTO;.å‹ÕVãHÔn¯ìÉ~Ïð¨øÁÕ÷x±r§ÈÁaÒ3ùAe;~Î’†¶üêqÒ´G?ŸSZ^ëgÄwöÒ±’,»Ó=’¯)¨{?ãÉŒ³âzig�Pæaé Ê€ÊÍN½È¤2"aï˜Öñ’¸¹CÊàÝ•[²Âõ�hp¼%?J¿eù†�®Â
+]r‰¡$Fø½k*å¼üÄ²ú•¯À1“”ó{Þ¥WÀVCUœîkÇ4T�¿­–n•ÿZµÃL^n›ÐOKR92Ñ÷“
+*J
+àqÿŒØß(È¦×îzÃ+ñdY�ƒ¾`%`Ç¿<<¨õw9A½g5æh�ô¾ûßö g—‰ðÕÂGÂežÚ@ÏºH/Ã ÇÃ{òzj*³ÏU=å¶—%ª|äÑ°Üãa€‘—o|Ùðuå ð;�bÉš1µßÃ‡¡<þJ¹ü� ›˜n:"I×L�yÕW¡ <¼I�¼²Œè’Ôó°iÚ_NµRñÏÑã|Ä ðÊYóÎ©\Q§MÈ´�äbQkþU	‰f˜P©Âež¶R›¦Dún?Ó¸ø¨ÆÖ6\�ÿ€£òH¸¼u¸ˆ9‚7‚Ó\Ò†Í‚ñÜ/@“kUBlØ{2/˜Âçë},•æ¸
+KíóýAq�’x8dñÉg,r%‰ãÑ¿´§*\l¶²Œ†ŒïAåzKá§*Ä·ÆEVhüOÁ�ðøÎ¯ÝüÏ€'Þá}±E[ÿ¡Œ	Þbry¿1}úØ�Ž×Ï­8Øeö7¹�¸æ^Æ|m_CŠL‡­d@ä,W‡ãÂ´KrÀW˜§<¤*pX±I{U®n¿—Æ`ÈôÒå»ç„ŸÀ‚â±@�•ÙG;ž‡¡±3Úsý´ÃÌ„vêñ^ÐÑðß)1Ãäm^O·2–ò[š"®%½F�«’õ�3)z‚é3gžùŽ�Ÿ¦Ì5ü(¤{µá8@ôâ�Œ%¦$Í29z¬àƒ�­óvizÖf\�¹Š¬KfXÚeT¾6|×€•'‘7�žäãDþJúøEaù‡¤Åz¬M¸˜c
+kËÉR?|ŠÙÑPUÜÏ<SYeÞï$�ÖŽáVøˆ*Ë[0ð—%ÃÛÙê;X°ë“»]vü\„U­rAl&u®RÔù·—ÁèÆUOÉß1‹½Ö³vü¿ð'÷ÐTH=Æ-J¾Iµù¬ò8†”1¬º®s$ÛÕFë-ƒa"Œa¯bÃ›Ì&¦IqÊå=I÷7v3•°?GKmµß:«2âÔI¥ÇíðbÍ­¶pê|p¡’A0Â®Vçúç|XdÒñìx
+Îz”Ö”œsVPœS×·8åJî¢,=‘çezâÁ‚ÅÉWè®X¿\ñµAÕx�	¡ïè�A1œ¥møüåöàÙ;ƒ×@FÞ¤+aŽà&À¤-àƒ�‚^t+t£í/èS­ôr*/š©#O�prÐVEÊxí3õþ7J9ùZ«è›éw¼&|$>rÀí£*ÌøZ=¤•”£šPxéRM±¼•§µµ­ÿ}*®·«hÚ›ñÏ©`î
+l Gª¸Ø—öjï¦ßg&<13á1:H/WV1Ž~‘”\½Ã;õ_-ÇáÁdñ]Ž,Ï¨ãÉï<±4=ÃHÇÁ71¤p	4¢Ùµ6[¶È�Ò/Ød.þbÕEMÆ¤S!/.‘G+¹~ŽËÑz�ƒ~>5šü4;Ž
+­M_´	WyÜŽ×ƒËRÕ æŽÒ�m	º—åÝÛj3måûï¾Fí%§­pv�Ïµëg¼ÒÕ¥k½Tª›èÁ1µWò¯ª4î“FÍ�Ô&­·lòÈJW,è‹‚Äû¹/>’Pê>¨
+3Þí™_Ú'‘Ò­’ÖÙïË9æ í§Y¼ÈŽbŠ~P‰á�P“à_?»¼ƒ ·ÀÀ6è¤nÐãñ¼*woËýÂ£^¥M7[ç'Àh [¨™f‚mw®Æ{ñpàivÊeÐFP�ñÀ}¹8/pJ¥r�e|Ä=ïúÀ"NhŽ) ÑŠs/¾_·ð›ÄÖ.9h;Œ	�ze& ²Æ²*ù‰�àÐN2Ñx[‰ÒÒÇ‹0P‹Ëˆ…išà­É­/”nIÙ	BäAë“|œ‚È?âÏó"]á Ã¦1VÒ¸¾/¨ˆ¼â7Cú˜õXæ–á[*Ó`i ÞY›p õZ–ôa*•ñ±Æ×�´vyÙê–¼“¥¥$ð,Ö’Ý¯*«t3ËdÄh0C=\D{£‡TßÃ¤S¥òOeŽÈ±ß†95-š:oáµªxA¿©1¯{Â²æƒQN‹Í�bÒÌ,x¥«è`ý°À*3”�!aš@$0Š	Õ\-ÐƒìI^òãÃ‹¼ã²f�ãTÔò¯¨TÀ†Tš¢Ý¹•©.°˜eV2¡�ÇÍ³Ì>|×U¤ëR›ë‡(�•†‹Žg+­Ë­x˜Ï‚ñ¸SUi1ù\ ­IÐ4¼?˜y0ãáp>	ÌA-ÁÇ«ƒ&¥ø™�ƒÜû‚I˜hÀHãžwsØKŠ¤º/˜Ò:\BWÒËØs¹=[Ú‡ÿ¢£ùWÒôÛÄ.÷âùxèŽ«ÐË˜h%õìõrÃt®gSæèR±‡®^H·r~	Ô¬Ã&Ó‰Ì3–œî¦ƒ0G´€×pÇBbpäÏw¥µôš8Ew¯�±Â£p]Vñú¿z¹šÝw$±œFwr,Ýã"sExVálÛóuèÔ®e"ã2I�0Ü�ÈÇä0íýíR¤h…$�ºJÃÔØ|ø6"Ñ%âÀƒª•É¡YhŸ&Á  òÖàŸl¼DšoäÎàU¯hƒ+â¼>K¹Æ à|¸(±Ò­¹4Q¿tÑ0Wø%�¾ãƒ¥ÆÈÇ¹õbR9¢êÌ Ê÷û¤Óû�ÕQQmnìeÓÈãÔØþ’Uÿ`âàÖeªµaˆ<ºÖ:ms|úê™•|Ÿ_QË'ŒI:ÑG£íKÖøê‹¶Ý‘e¢÷?þž½ë;¤€ ÓIà)G×ïõF•ä²ÂG2Çˆ–s!qzžŠÆŽQ
+ä`áþwLsÞç$V³Î»t¥„A^ ªJRÏ/MO§J® AûîäøÈÙ@=‹e0müÈüŠÌ3KV—3j"½?5v š×/zvê%L:%˜ÜC;äÅæ`…xVÉypsÆ'ÓO›ÃL±0½.crvJýŠz§©Ä9×?•!z‚ympÿI>NAäñG«öÒžFÒ£Iy`qz[‡‹ªx¢É’kçq+$E
+r–ØÅ;^ÙJ)o_koqÇ{ä†GT>~Â1ª9k­ k/M_”Ã´ö´yñ…Ë’3ÒÜœ¾f…÷¸ ÿâÇæšÿ¼�YÙïŒ_'FåUÕ/øˆIª}sjf4Ž4p\�}0µá:søW	·)#òY¾Èá_øÚ[RdU…ñ†´+o€›™§ÛªÝ_*wË3¢]ç“×Î%]Hçƒ+ƒ=°ÆéûYï©®‡i®Ö·Çê›*ÅÍðf!˜À´—Ÿ°´;‰ˆªåµ®>W’znAÝæZn8Íêé˜"äO^Ñ,_»p´ïà(‘ÿ Zm‘ó� _É‰î	Þ þ@ÆûƒéwC¯
+šZëûü¡pŽk24F4ºƒn *ó]Þ¤GèÕ)[¦fŸñ­Álïe�TÓ[Z…ïòúÉp—/)8ýá…«øºlŽW„#¼ö¨b„L|	ø¼¸lø ×Â±“Šp(ÁÑ¿3âŸTí‰ñÊ¼^A'j}`ÛØ:óFZúü|:c[šžZ˜t»B›þªàŠç[ÐŒ…IÊ3kÐ T”|>�1²o
+®W•*ØnR©¢cÖ’žÆ�PM�i&•Ï0Ãæßà8VÚkÇ`É¥±cbG¢x‡;„r¤“ ãf�Ž¼€qÓÈ÷£é…G• �—¤ÆzM4Ó º'åÒÄœ�©¡òaßÑb¾)¯ZQ¿yxn‰jEýÊdQ™Èà× …e8ÖøJÚ¶Ç¹<åødK´ì[áRoÜÄpòlG�ÎKg+^Èceñø:7åûÝÌ8/œáq>¾¾:\®)- }rÓ~”®ÅA'�8*eõð|ÄOø«\ÏðkI\n…¢r©Ü¿å‡ÙƒZ%Ð ›3H6ü.—�óÐ ×a^3gA=zßêNÖZ_”|™™Å§…ÀÝ£*½-ŒyUe²_ÂÈp6éÑ=•×ËŠÔmÎHðXcš1q¨ÀV†H
+hªlÖhû4j"ˆ^sž™	KRÏ£ñ’ ß°IQ“¸xÆ!Ã	'äDþ�þ£U½à#s¹—´È¯DÃ-øÀÙZOs�8 �vwboaˆUÌ©QW…˜PÞ$\ªbŽG¡-Šheº™h«p‘éöDü‚ÝðžwÉäò‚tÝ‚ÝÐLüT;2{<bÜwßp­Ôiæ93'FMq©+ö„¨BÕ}ÌŽi±}qóõ:%/®›V–†ssÄ´¯ë¿°XVy‰0f´¢4-ƒ�˜è¸º‘|Æ“aï±‘Ng§^dÑ§.lþW[2uÝì‚Ä-×ã
+fY30”ƒ+‘ô;fåß+µCh>zÿ†ŒU°:K�ÿ\izºª ŽÏ&Ý:«nSnS  zAÌŽ-õöà@xŸ‹Ø(1ç[![•ê{ƒ1�‚ž7mÝ`”Øçû‚Éw¯c�ï
+Ãt 0¼I·ŠACúô¡ Œ‡²,WxÅŠg¥CÎœ¢æAÃÀ{Y[™Ÿz6]É¿¢¢K1ã.EH_ Ö\žÖ
+¼®‡EÒòçqþòv~SÀd)Gò‚”=œ…¹æÆ±Õ˜º˜ÁU .Ë3¢hgì*YžY¿ÝB^“ÿáEä½p¤Ã£“ÍLhG›s†Ù©—eÄj—ª}iZ=:k¦mt>ÄaÊ¿ÏjfBpÖÌtâÔØW,Â9±å¤èqŒ+•�§hÏ¥yq=¤Å½ÜªDÕZÝ×*_ó2(�‚lùs<¼—FÃÇ =›Sijˆ9žÉ-Á“‚—ð<y0ã<ÎãÀ=ûÆk„ñš³õT°qU"ÃJ{±N'•`´äà¶:cå°ÌÚ4ýp¯úêé¨¾aáL&¨Øõ_•²±ÆÒ¯’îÙ;.²B”ÓRŠ …^:¹h-iQÙ%¿Ð˜\ó4/.{T­ñšïr%YŠÎÊÌá©�÷>%}|#ó�ÊäÝÊ™5�M”U»«ßj!wH¤’»(V–ª\˜ŸØJŽo§ü�^V…¯,€G‹j¾ÁˆmIÚ¹3:)ùñ [YF¾ÍìÔqƒgÄw¶å#ëÇVVã#©	Ój9®Î\Žg€Mˆ,€â2UØSo.¿t®­Õ‡ -g.Hl9ÑZ—â¼Ñ†Ï=œÆ:É–âï^ã³‚º÷+ÌõiÆsg�Ÿf'_‡=Aˆ¼:hr’�‡È.]ºÿ¯¿Ž;žŒü;ÿÑ>L�vá‡¾Kˆ¹óªJÇø|0( ®m.yÑb6¶ËTnöxWåHh¾ÿÏˆ}¾}ùx¸Õ#7új6Á@yHàXé%h™;=¿ÁïB'q/åÓnÁŠb-Ý™äá!:J	œ8ÞJ–ÀÌò r}[™G%¸úŠÜŽG­ê´[qt1žÈ–ŸÐ¶,=Ùõ¦í¾.
+’bN§Ä­Ðn€èzt "žç’KìM/à;«î½Ð
+_¦ÚL¼å²@Jç@dÀA/ÇŒÇübu½ ‡•¤ý	Ø}ÿzã’œ¬dÆqN¼Y|]ÓÙNOã»®Î
+ˆÛ”´Ìåw°ÆLXÉ°—2ï¦ÄŒà²]9üÍ:%˜ó›tË-31[¤ƒŽhô¹%èl.MÄîk‚¦‡o_Ü|sÐ_åÎà•;‚Þ×­Ç‚B¬4˜x{ðV
+IŸâÀÀhZ‡‹Z†séPz¼M¸‚“ûÂ ÎŽP‹ ˆ�øuÏRšÃFw®¸Éä`I-Yù½ØÏ¸r±VþU¢~§(Øˆ¡{Ž��,ãî ÿŠ÷ÈÇBÒ­*/¸ÁCn$LÚN˜(+�ŸV/}fÂc�nŒ'¶ë„Ï3«îÝØXlTIêÅ)W ‚|T’ögìžÀ4—‘0ßº~°ÅuD�Å3ÁYÂ'‘öõ`ŽÉ‹ÍV9+åÀû–�j+®¯ˆ–o´èÀ˜Ú+#îËÕã]F^Œ{¸eåE~Aû4zÐÎwCšÃñgí°H‡H©màg~ïalMƒ‘Ã­9ZŽæ<`+�Éy˜G¸ôÓAŠm}rO?î>}µYé;�®wúŠQ3ËFaúÐÔ´3^%,’–WI,‹÷ß¥U;¥OþìºÇL(—h†Àe@�¹‰ÓÂ9³”×ï!¯œAa®¡�L[~È÷gÑjAZ¼µeà—óó)ãù¶\ª´š÷¸KÀñŠ-ò´1º×‹G;—nžíNJÛÍbP'FMeYblFìÔØ–	û'óˆÒëú>KYzbQÒ-VF9z�(õ	¨ôªeÐ…±Á¼À}â‡Tfk"¨ÇL„*ò[r´:jÀtfnâ�YôNB›âä¿�‹,‘óÚñu~”»~Ý
+UçN‰ÁˆÂ	Ukc	s„Cx‚yUpÇI>þKyÇw|Tõ·sçÎ“ƒ‘ç?Z„‚9z¨¡+™+6uµkÊñW2,fêÌÇ6á*¼e«¼qÙÃ¸ç6¾Ø^)ØROI€0rˆg�q¤×HÂ0÷{HÈ…¹Ì\`öUˆîæO~]â0¦¼gg31- ½ÎÂ³·�‘ÌDóì-¦	S’á�adêI—µLÄÀj“ý)¯_¼z6¦•±-ñ¨l%3v€‡p`™)ØX«›“t˜r�w{ƒE]p~åþ# ªÅºË�BÏ:_rYel*Ÿºø9_´JLàT˜Y¾^‘yFqÊ5^B‹“Vv3®A�
+ã‹2»µ}öÈ5öô«¼¸^¹Úî¡8y&£û'^²ŠÐæ}Dï ˆ ã]Á ëƒVƒî€æýA>pykÐåžà�»‚�Zô›£áÈ¦Á°‚ÖüßÁ†k!”œàBÚˆÜä±¬Xi¹O»ø·Uø.FÞÙ
+ˆœ«àØ\-Ô{ls?+žµÇyî
+öM¡)Ç_•::Ý‡Ù„æ«èüNxF#6ºÖ:é–¿ŽVcgAb^ð¯„Ô¦%_[’zþÔØþ´•Bû¨RUW)õE)ÔêÏ…IÜå :¡ZPòc¤‚²Aø]‹ä<à¯iášÒÝø?“£Ç2<ðI ®xM|
+õÀbfá¹‚ëáÖ<¼VúNGfž£ä»rtA®e¸˜ Ø"(Äu¡åïf@ä/Hs~žÆÃá;Ì”Öáb@ÐÊ¤Jž°è§}Æ,	ñ .]¹ÔeüéqÞtµd&‹KãRŠæúYé�»q ™z4^˜ü©jNe©&K®¥R.ºY�J†H¤W«F˜ úì>&»º ŠHîõBÞœJA5;¼$çT©�Oé_—óõ²ËœYe%�ùÏùz,€8àÌ#^ÚP¾Jê\ìÙ² ‹WXæz,¾«ÆgZ¶}Ÿ¾ jÇÕ™G·Ä®>pIŽŸU÷.:«$õ\h&=ÓWyè¥“¢'Ú^³E¢¾ñŽ•·«é\¶ú5IK©Ošú}ÚY�>&—§„HÏv2Ž=>%fqríQÖŸ™ðó‘ó+°§þ ‹ÅµqãŒÛ²ô$îË¶¶3k©€Èå¼S”|=-ÃÕž D^Ü~’�ÿD¶lÙòä ãÿ–?ß‹Ì¶,ÅÏ°rŸ#ìÃ¼	•`.{È¢DSñLóèA>^4™gl)£�×OEìÍÒõP~/<ÞE´Ÿr�/2³0éVc7ÂÔç°6ØO…8îáÙKú¦¤Ïw0Ž“0ß¨ZÞ±‚a¦^^\w—jAfƒt£¦K �b¼ŸQ5·QJ\*-N¹z\�¹Ì°&/6Ç‡t™	ì<aÛ–#ðxàåâc¥i+ÿ(H2‚¥ié<é‰ÿž[Ç;ko5¬tÅ3%-Ã=³s�çeõI¦×59;mq2ƒ,7¡ž�ï”w¬èyòX{l;Ì®T‘y¦ªð˜VóÓÝz†¥&ŒLÞëÕ~Àþ¸Þ;Æßê×,×,˜@×\4¼1xôÞ`\£ ×uÁõƒÜ<ryp#\æ¦à±K‚«€N¸|(œÓ xw¥qÐ×Þ1Ñ�„ËÚ…ëîrá�P~œ_ÚŸ=¥¨­ÖáÒ'M²ÛÖú\€Tº1{=kÒ¹mo1£~ª¿ìFÎ…ôÕ6`qdÍ�±À|W5�
+éwº˜c¸e%AüŒ¤[­Ò„•qùçœÞ‘(ßMÓbûJî¦¾PAÝf–žrÃ PƒS`”°rª”�1¶ÎÛ¦À™zQEæés¬[‡û²yAâCx, kiZ¦•¡Œ,ÇJ‹µý›µ—ÀÙ<°T:‚«‚g)'b9X¬’?ðÚå×äÚY4iŽ’eð4:«¢Mw‰3ÐþO†»ä6ïÆ =Î	,žö¤µyH0pã¿mø¾/_ÓÎ/žöK‡pƒxýß¬÷*ÐGsê7�zRpé/î�x)Õ�ÕàfpŒ¯c+YõgF@“­Ý_†õôè¡êk[4¬+¨,š©Rð>p©Ò–G9³…²‹ °X	­ÏªŒ³=ì…K€K¼#.,GuÖxÁÉ9!óñ÷ÍZÌ­�8I�ð¸‹eõ×ª?ªê-ñôþ„ÈY4ûàêû%9ÞÕK-[ kÔLÆLAâƒ"‹f§^P˜t{¹ÍÜóÁJH3ˆn¥Ó;Æ‡‰?=þ9Î0%f�GAÀ.óhRô(¡&]%‰t{£öJF>­©êÕ^É€ÁÁfLß
+‚­¸Ù{ïw=ŸÎ5áÊ–�G.RÁ›mý6*ßëªð¢(ùæ„ÈúÁõ'ùø/AddddõêÕ322:uêtðàÁ“ƒ‘ç?ZãÆ4ì)'–ÉÒ6\Å‡ñáßzŠœ´A¾çß¶á<\8…¯ôV”;SÞéd'++¬ìa´ñsüyã˜{ø:¨ç|ðe"0U1.ê¦ž×¸|ª{µ^Y ù&¾—aÊ1õ6ŒOviNf_lb¸2’§ÄÅ©ã#å›�˜ð*ÕžÀõ ŒFÕÜNáC&5ÖŽÆ¸¥†\/yj  ­ÀÞ–¦§3› ’=?,ƒ³Í·,ã{æ�càXžYÃ¨â9•Ú;ïz}¥¿ÙkHŠk¹¬º6ÀŒ3ï< î-Õ�\{»QÅåWTø >É¤›™Ð�ïJBç¦™	�¸|Txæ2€î¥°-¸Ð í†•öP@Åÿ€ÄnÐÚØ^:Úr_0kLÜ<ó`Pòp8¿Iðò?‚é—A1Àw{ð|ó`êMAû‹ƒ+YÐ8&¬óñp›/Êú”w:„1z@çA�Î€•ó<nå€l%÷iaá ½�•ó¬Iü"†^»¯ª>y¦¼Àq—¶¢Vyô²B”·a½Ž!ä“®dÀÃZ”Û¬ØþB¬œiÂD�Ã8Óh¸*�ô‚¸C¼‹-LjBÒõ’WF—•gV‹S® y9XEîäR€£ÂóÛ`ÃÇZ€â`Eh¼.üZU0b+Ÿ2²ÊWÒZÜ¥-€Ï¼Ò‡dáÍ÷sñUÐŠY€c	yä;Z	wEq;Ú„ïÝ¼Î,àòèq¼	C‡T6ºù"§Ö\Ö/dù	ßšd0¨Úæ¯ª<þLÚ–Ÿƒv¯Ü£àéÓ—N;j³©æFmÿmõš,„“U�'Ã-¨"çÏ¹:s¶àRm§,2§ÆgZÿJð&�W•èÄvœ:Â•r¥™ãE±U;Fù�×°óµ à^ú<Z’—öI]Aõ³Þ71Øê_{5´©1™¿tŠöFÀcá!÷äèZ«ñ{!n ý8=þYˆ^\OÜ*z';0ÚÕïU¨e½ÌÜ|q�\~„-MO-J¾nrôP’QÄ3F†3ƒ‰˜‹XÈ<›Ã(Â'çüžšÐã3!jÄSšê3øQùNóµ*2MúK\0ŸJt}ÒCˆœ5kÖÌ™3W®\9qâÄ´´´;î¸ãä`äßùÏ¥œôá ÷Pª8Sˆ…TÉ�EÌt`”™Ø,�|ÞÄ<7Á8	—*onfÓuB8³Uù#|O„õTÇ!Õ-�£“$ÓŸ3Y9ÛCá€s)-B‡³Oe
+äæ8C1[yRZÚí› LIìí¹¾¼%ä�üÄV¸©Ê\[�£h^k�…lf™�í´³ñå
+“ÔmþF­÷!Œ|Ä€Ç¢Îª{FÔ³4ºó‚©1¯ØvÕyL�j°’²ŒX¦•¦§M‹íçÅèy~ï*ÛÔ³R’•Qå™µÞÿ‡v-“š,3AžÓ<ŠÕ?S/rÅ3?ÕìÔ‹yÍ·^0‘™ƒLLæsÜë:Í4A­)Ü/ÔFº²Ã\5ÚSÈ/��Ï¶àÉOiF—0¢k0Âw¯h¹û_ åAØ,˜—�<žœû÷ éÝÁP>º/˜\Þ´æx€µIÐ¿}¸¾UøîAa‹`6Và¥±íQK‡ÿH¢ô?´?ôuå—°ã{h­ +ç;Ok�w3^°.à»fôˆ—‘ê¯:pìÄ#²TÔl¿ÔTK—µI^\7L0Šãôù‰�ÀÊE9óÆÔ^�íYk˜3Äª¢$´Ã±¡1!ét7í¹ £1˜X×òŒH(X©•´ÇG–(œ‹·p¤Óq¢$Y6eF|§©6¢°±­”ö¾·Ÿi õX²ß½8gË¦q¡Œ6GVx„pÃ 'nnLÃ /|Søž`”Ö`G+ÚíS_��QÒ´ÿÝÁ0Àgƒ9E«ŠfnõÀí\b´ûúý.y[Ë¯in�ÒÔ1¯ëÊ©¸<×[v:oÁÃÊs”–¸A•O:Nâ
+�RÅù™;í© Në‰Wªßa‚\‰^�|Ë¥äª
+çí)z©XŒWZg²+AÒ´w¸	î™/Á�Ðû®ân^ÖéÇ50~öxæ…×) ¡cæo®iâÛü�NÇ_Â&ÝÆƒék“ÖÜµ¶<n% Xíãž`=;«îÝ^"/(/6fçb­¸aÀy € ]’ö'¾Ë¿õ®ŠÑ‚çL/ó‹KYòw´Ô°€p?¥OŸÂ‰Wç-.›3Kë²7øÄó"ÿÓ¿‹ƒúÿéãwüzòüüüÓªþ6oÞü¿|ºxñb¾¸eË–“G“Ë?çeÅ‘z™ ŽÉÅ3ƒÄô²°-Ã·0�x¹LÕÎá®§lž~�C™þü²•ÓÅ6n•úq_¶u5æ>s~ÎÓ[–ÖéÁoÌGÕ%7|ôÕž	Q3‡×ÜÖ»ª0è Iôš;ã�Õò/˜ˆËÇG^öŽq‹mÄ×P0z¸p“¢&«x=ƒ¶3n'ïä'¶d ÏN¹T¡q×s˜jÖw´b»¶õ–?FY‘yfAÝf¦´sáÌ„Ç|‡Ë•@R“¤“+sŒƒîa¨�Tþ-I=¯²4aÊ¥|äªÚ¼Ù@A^žÁV¬±Ì.ZòÂq\€#`+„ªÌDgÕ z0¹kUA298mðYl åå�Ýq¥8íš’9\¯aÐ\»'xã²àÚ»ƒ!7O\´Ê’.þŠe¦×îÃ%›ÓîÞ^ÁPÏ”„Q‚¼mÂUÂ­Â…¾¸
+c´]p©µE&’^Ä—ü+2ò­ü«¯\0ÇÞN-Ãy^BK„ëg%ë-«‹å4å4Õ5s]kOß›U÷^ü|:×åJ&EMÄÀN‰õ€>‹Ðµ ±K
+]ÎÕJõÙ4 Ôòõj?à±cQçþ)ÀÀbQñ:àïxø…I0‰s¬&È9;å2‹Ï¯µÞV’¯å<œVz×-±Æ´¹Tßåi�†�â¾V3Š¸˜QµÖÑ)Œp/Ê; ùòòCá)-,ì¡„bæ>Ã­Á?¥ü¿“¦¾!h�äýÁK´*î
+½pW0Ð‹Œ++äCÜŽ‡QÒò!sÏä9åìH‘ã§�>YºF|ß×raˆÇU|ä˜êeë!}uW¬rÅ×lûîvNâIú¯J„'W²êÌGßò %òó«ë!ƒ€Ò¨Ü¯d“êU–å�¶¨Ë…wÅ9W’œï�Rù8ÀôÖV5?'�»ï”=’àÖ›¦Cè*¾\?N¬k’ã¹˜›¢–¨R¤¥œL�ëFwÛ~}eÎ<ÀçS	;C”=TD_Ô½d,I=‡Ê¶³¥ÂQ–GÿªÆA­µä_>RLNW¾õ“ªRC†ßäèQô{~Â£<$my@ø`\LAÝû§ÅöçÂ”ª¶…é¯‰VŒØ©VCa9n¼å¡X!­7N"ÿÔ?ÉÇÿî‡:ôIÕß/¿üò¿|úã�?òÅ·ß~ûÿ8ùwüó½HŒžüÃ_Ä�BC´@´ËP±­Ã%ÌJ/ûÈ`îlªt<ñ\5sm£ÊËú …âF0´Y£‚õ¶òÃw=”ŽbÊ{’y¶%2¯P ‚•g•Šã—ÜÁV`'Š¼Æ‚¡ŠñøÊví£&Jó(ìŠ{É)ª8¨±:�Uy°‡¼9L&‹fkmó©?rÙ�-ÅðšzvzrUôé�L@¯ªzzö>çò+ì�wT�×ræ©@³%wÔ½Ïæcz²å¤gÄq¾5§^¥b¶¨kMæ�§$@á/yqÝñrU�o™˜Ô“)Ræa°<­ÌÇ^–7WÁ‡Ò;@Ãzêf¹]¸®EPDÂ5`+Mƒ‚oÚÝtl¼z^Ü‘¹#Èmã�{ƒ±*²¸4±ˆˆ#Î&]ˆMÌ‚YRæYzz¦‰Â˜÷16°½º¶á*¨JŸ3|÷Ù,9/”õ°OU`,ý\â�¯œÃ_\­ÓJb�•Qþ	.�¶Æö»ü æ‡G‚™•¯ZN#h@]kÄ�ÎRRÛSœÞ�ù‚øcßè\ÜÞ/Jþ½ŒË»Çó¯Ú¾X’ú7¼J!/„uj¿8IÈÛIql†ÖØ5=þylµ$—‚›°$×�Yóc¯IA#(©ÿW)¬tÁa¨zŽ@Í3…oºà´€ŒðG:ˆ&¥GhÛ»‚A4àíÁówƒ¥øŽ Â×Û‡ëh=¦$ÍNÃz^*mÞS¡qNá½–Š‹ÛgUŠ¢+µiÿlíÏ©¢ÀÌP/¢OWlÏ1Œ¿ðHŽ‡“J÷`½È#ªÌ‘ïðN=Hu=~ô¸t°ÞÊµñ7îëÏ.îá{£t½6Ðgð~‘6÷$PW?P90ã�ªPplrô›\ðèZñ‚É;)z,Ï }Íõk‰àÑÒ´±9+]‘YM™·Í©tk;ª’rgÜÔYu›2Ñ¤×Ñ†™Žk5æRÏc´L‰!õã±%©€§xªEÉ7ÉM2;xåìÔ‹h&>—Á(Âg£ë9	G‚›ŒI®„±Ç©¦Æö™òÌâŠÌÓñÛ±?œLµ´žÀ¡:Aˆ¼0¸ð$ÿgy‘Î"·nÝúðÝÿþÕ‹ìq�Y :V&	ò„	Ê}#5ò]@$+êéä^VË¬õ´ï´˜cõvÝr2G˜ÎLß¯T¥ûC}�S}8>²æf¦Ã j€Hæ”�*ÅãW�EÁùÔ¶þ^@�	�m2,«¤àF×Ý2ÕëÈY°€q‘åŠem*ò8dÑÖRž
+@¼€QUÁ—ðêÇ0ž‡KÉñ¬œâ¦¥é)¸š~«¥›rÇWXM�”âM/ß2±�ŒXß¸\Vß?™J¾«È×nåÅ7Vf…`¥AOèÌ\‰0û¼j³(çŸ™tLž•ü~“ŸØ°V‰Ÿ•Ì»ü„6&{3pBÔ,†×ÂPÀçZ§ÞT€‰–q�	¤ã$
+ZzSÐ³êÁã®n…°@F@ÃFAl¥i0²U¸ j©*ÌÓ9ìî`(Ü�×øEŒ [á;‡ó]"‰×üˆ‰{ã¡YZ`ß«È®ÏŠçÙÚj/ìW/H?2f´<¾È¿rŠ~P�E[hUIÜ©Æ"&ÚV³ÀÄ½Q{ÇKÉ|7‹‘¤q¼à æšÛã#‹ióÂ¤[Ë3«Ó›¸7–C—üw6Ê�Z¶Zì �ZœójE½Ó`ŒZuJÌ`È®Ñ¨šèY,áˆšÛpQ&G�a‚`â”˜AZþÝï•ªL«Íô´‹¹H wE);|Õ/"G­àš6è7y±Nˆ<ÈHã3‰xquÐ„VmLl.mô»*htKÐ‰¾hL¸'í;4¸r]¿Æ/¥_ •Òl<àAà´¤¯HKùK&�ßt•H@?d,Ï€Û÷ñ0ù”�Trk“ëúzFgne„ªÿdi8¹¤�¤�¾~³öBf\?¥êø~(7îj‚ªÆ®à«M.z`Zå*›Õ½ªÔx'zûŠØ1ô¤UVUÑ:Ž÷ëgv åðž´_Áié5uÍfã�ñÏYáìØl¥ðØRªïD0ð'Á£©1¯ñÝòÌ|kšÕõÈÂóÂfÆw¢g?t. 93áq(ªJx\"áÇ«f&<öq°âQogÀhI*ç
+�š¹ìÃÓŽlƒ2æ5&ã¤è	*Wýó×µ^¥éé¼æ»´’ïQ2ZN"ÏÎ9ÉÇ‰CdÛ¶m‹‹‹W®\9iÒ¤´´´F��Œü;ÿ	"¿’kú™/õ(;cÏ#ár×€92ý™¼¼ÀHª²ÕÁ,Y&»ç’óª2ïp�ûXÆ¶nV÷g×ÀjVèJ{4æ¸J!çs7•ŠÐûÕó>°«bû<òwq…Aš*¨7ÀÖ|Ž©x¶*|ÆèÕÞÄ“ŒFˆ &7R‹úµ4=Íåé°™À¦bÊ]1žŒ*?ña¨¥’Ç— ã�å‘@Þôøgáw�£#S`‘£¦Ag§\
+ð½wUåÖäìÔ°±®°ä’JÑ3 °8ù¸Œ²#ÏsM7û|WH¹¤™	í™Î¥i™¦­÷"$HF»¨=!²À6JâŸQ5¨§µfµrôH¯Z›#y'«}ï»H˜_È}„‹Ò"(‚	>”Ñ_‚—èòmA×Ëƒë}ož€³Ü¼	Ázc¥±ÞXc¾r_0™Žƒ¿¸¤ðªâhûÛ„ïa·ïò	:ú%Q×!ô=¸œªøU:‘÷•	{¤ –ãn}•+W=ˆÃ`"<Nb/á��Ú‚,V�Âªøù@é‚6
+2¼M…ÝŸÈ·=¦î^›Æ¿“ý´òÙƒ0¤Õü„¶|
+§P¡ÀKµaÔö!˜k.;œïÀ¿%!¸Ož‡%äär])£/°Ë•`÷°ÒX=üL	8?xí*ª—T÷½`xÄ]ßüSzïK™Yà&½@kÃÇñ@nž»&¸^SÐ¾EP|o0†IÄdÑ¾¤•Æö+Ú®ènÂÏáYõû¤÷xD˜x�_T±€o<ó”é<Ñª™ƒP¦”ÆŸU
+Ö†n-¯B!ßâaª¼µ©z0€—ÕúÀ¡,•yõÀ0t÷,öò²œŠ¹LjÄÒøTÂwsèÁþ–²·¯í~ué<@¯ˆtvé+E×ê«IYVõˆG«ZJET¾©Ù‚¤òC¸?ÓJiSWKñãM- ô5q�ºÍUº±Ž�ËQ$ÞÏñ]; Ä‚÷,Ú™ÁÀ´ÂûÂV0û€Q~« ñ!iï©±¯à'ÓÑÀ†…)Ï�ÀÐã€¦J9�aªÂaµœ;¼$íls¨µêÉqÏ›®EÝæ<,Ò¸:sÇ»/�cN"ÏÎ>ÉÇ‰Cd‹-RRRÎ<óÌ³Î:ëé§Ÿ>ÑúÿñG«2w˜}Œ|‰bñÂ‚ÀCWSõGå‰ol¾ûlÄLÒ,ÕØe¶ßg[îÿi¿xj0“—iõ¬	Œüä�sîÜºŽ\_9Ÿ¶G©Ä1Ÿ¶¿×€ð�}•?â+®x�Ìî	‘ùÚvœÎk^LŠµdÆ1Âþº\:�­¸jåhsa‘¤6žÒÂÈ¾oŽïg›±˜ NqÊ5:Æv~b+§ ,¦ŒänÎÖâmg°ÏÕ0Å–v—zìüs,žG	w—[´¤É¹Äy‚¤¥‡džÉÁd&riZ=üOf+ÀW‘yþ-óÚè¿Ëw¥KÐŒ_ä^$™XC¬TÃw¨Bë×¹äâ&®®ƒQÊUô½Ð)ÜIï€nÃO›yw¹@!ì;my0(itkôi¼Ø0èî2dp°y0íÚ 9¾�ðq
+½äµkÄy	3/î©®?ì+ºÍˆ³Dòë¾éK¯¨œ“Ç[rÏ˜ëñ­‹|ºê6œª
+±Ñ;ÔâêÚJ-áeúîãÑ38›ÿUÚžúŠI”¦(=øš‹îJ—ÞÍ$²tyfÍQ57*›û\¼)«ï�ÐgIk·âáÐ§ô�¸Ãå¸=ð«m”Ð;†}ƒ™HuÂ£fãóbs0Î°NeÁôqm& ]{wí:ù/Xé®~Ú‹wÚˆ©Ç»Pñõ°òž4‡µ4½S2¹íè¸<žŒrTG5zÂî›ýÐŽáVZÈkôëqn~Wð:\’i¢„ÓŸ8 šcp¿”äwÓ;Úíµ*-tÍ¸:ó×ú:°—óP„íQ“ë�µ17]7×b|d™o5Ž°jÎ¿¹ÐpéËãU²�_ˆiîôÉëý(5õgÄwr<U0ç8x/m‘ô°ÉÃÎU½žg¦•Å¼[ò°Ë*÷©­œô7¾0ë
+6ÌV÷ñlqŠÊ2b,91õzyñ%ãÒçÚ�`Ÿ‡Êà˜ÎjôP’Žóâ×®©¸t<áÖÒx©<£6Ž´|QKÜ`h§ü�žÅb�%ÝÂ,I%ü,øËÏ¹ºçdÎò]R¨µ„ÅYRˆµÅ<Ë[«Î§=•2hdÍOxÈ$>t‚Y/H>ÉÇ)º?â�V•6Ë>æƒÖ÷›”�u·¶³IqnÑ¢ë‡]"`„fqð“»Ÿ°ˆ�osävº‚Êãªô‘#àëmáè?ôª
+/çlJñ¨œž�ãØê»£jýëÿiï\àt¬·=þ¼$cÆ˜a3cÈBªSÂévÜ/	%—”(réÔ¥(ší^t(—P!Æm\3¢Iå¾µ‰Ô–.„’4.¹åv¾ÿµò~æÌ˜Ù3uÆ¼Úë÷™Ï|Þ÷yŸ÷yÖûüÿkýÖú_ÖBMPjÉ×±O\M7ã¯û”é‡Ø@nEË”1¥PÝ^¼;èE”!}uvê*^Éq—ò¢è:¼ŒU.çµdã¬�rIx=:"ÛÌoHŠ¾ƒO1ž8„[ôQç28Yôñ6L.ñã»’uöÔ$®ó¢šêjU—ßµ¬»�[\&%•méùQ4MmG@ê²D–ºe‡ F&ÆqKì¢êA—Ð=ÁÑ"2ócÝ.ì�H¥È·$‘×j�†Ë %�N¹‰V�ÍïIVy—~„	[°®­¼„ZÞ£ç›¼[kxÝíõ#´¼ÓkUËkOtÃr]ïq^?æÛÖÒ{«©7Ï‹ÚÎ·\JfÿSÒÙMx^6þô•Ö|Anª…´`KµÝeO±d*�D²¦êI-C,•‚¿éÌÎÈqÁÛheII·S‚Ç=Ø7-ÌDŒ@°?©È"I14XÖE¬Hp£££±føùRÝl,<(9¨Ÿ¤y\´v›ðFÈÇ²îbv•¾A)³Ã-9B×"<'áš´²Kò)Fk	ÿr¦Ôƒè-×ø„°DYéJBên`�i$é'»-ü?œÖyÆmÀ9Å·<»àOüdÔ§Ž÷˜f”‚GZySò½SÝ«ÿ ÷6±$ŒŽ{7òú´öf¢ƒ-½É<g>’Á·–Ö¼Ç‡Ò ÷xÃÚùÞ—yÞº¯„ÿZ§Rkaë´¯,‹Ý§YŒ$±Ão¹î%'Ï)©×ü«Ìçn,3€Z˜[×ö¼äfQOi4ŽÐÁ4“¿Ž_-àI©Óê2Ðy˜šâI,Ô¼Iœ éwvô—%@3dƒä<­©L¦¸ÝbNj'ÑœÃô
+œC�9%ÚJê�•´;žŒ›Œ¹y©(<ˆÇ"•_ZB‘hŸ¤á­+Éÿ»àkñª´(¶4mç*XÅÆJu¼9P›«PdÉ‚R7âx‹¿Ú€>öŽ[oPÒ”¨³þªÛÑ\¦½jzÑ¢Ýu	N¹Ë’²ùð¦ˆsÕUCÇñ„ÄÜ"E™wžUD_èX×Á¶¸¸F‘ˆáÃ‡—*U*((¨aÃ†»víÊâLž*Ü'åÑ·ê+™t©#¥öë™Ÿúc‹åì/x8î*,»g;ù¶ÐÛÑL"_Aa5	ö Y×ÑÕ÷ƒÎVpeì<¶¬Ïq£+/¹ÂÊ;ãe�VÛ‘�‡±™²…ùWlÚpÈ‚eøe9ÑÙ”ð!ŽÏ$‘~¢èïÂ>ÅÑÅ´Òó'†¾1I1£\ë‡ŽpAººî˜úž.éáõÂR•6qµÊ*<(I­}t® –« š\¦8ú(ÛëžG)$Ev÷•ÿábFˆúÛPË•§ç0¹t4ÎêøÂ«e!A=)Þ1lQéX¢’…±×&—.	'¢GËÜÊ“’e½	�2r}�IÁ1f<>ÑU¹u®J'e£wc÷¦„Måùóùy9bµ`CI÷·¡¦×Ž@¦ž×õ>oÌÞÌ2c¯1K¯ÄÞ\�a$º¬ãuæd™µ\VËë€u}È[LOxÚU¬XÈõñy$sàvš•F×½’¬`ËK¿mpÃætýÓ¹QH°¯GWß^üÌÚè tsýß\øY)~|áõ²úñ;Lf“GASJÈü3ÿa%Ýhàªý 9åºJªó÷0w„	aÓ¸2�+y!’ˆ´´íˆ§Áip¥Ôî‡ïÄGtNKŒè?;²³æ—pË-ŠçQcŠ1k³#Ÿ@f¬4"iIAÑ%	ÞêJ Ú©“nÜ]7ïÃk’öÍÍúÉbïï»ø¶iN*P
++¯Â{ÔS8!’X~ÔzwÝáµ$~‡õô’ðÞ¾Ãk™â·õßîÝË¥Z{³uå°ä"pIPi”'|»Ð2bÒ&Þ Í…¥©ÛÚúÞ‰¿èy¢°º‹J«¤½x±œ(Š©Åæ`%ÝÅÉÅµ,D [Vµˆ�m�ìåá7*ßµ÷­…ù	ªÈò«Syï�‰NXOãDÚš«~ú‰sû7—ùÇUÀäëš–™¶–Ý�§¤”Éa¯u�nÛáî3Šá©ŠFïvYÊËuK‘‹¾+	ŸUüiÜ˜·£êÏ�®…3¼0¶<~ŽÐb?HP*>oJŠ©†¡€@inˆRòÔM.E)ŽS'ôš(�Ž'µÕ† ïnçlT��Ñ
+•2n?Nþu×®¨ÛÑ\ôUxÖ­a	8íxÜW™;ÊXÐÃ8ZX’y%ï…L³I‘1^Ñ?øg™ML�:µ`Á‚Ó§Oß´iSƒn¼ñÆ³gÏfv2OU³s Pè –í�-Ï»d·¯[–#;ÿ©…{0ž˜‚Ç};uí«Nˆ`HÑ>Õ…èñ’ŸGg©´ZêÉuF¥jÎmxS£™7qeãÐD�ÓÑ<\–¯ðB¦-Ruä‡SK½c©ðäq¤Ñ™z•Èq„¬r|¿ŽÞsiVÙM<’E³\fÅít	$F‡çšøœOBEt„Ží’”.=·DÛäÒ‘¨†,ûyQSœ³`�µh¯Æ�«nrÔ	or#)Õq-)µ‹C|„¢N‹K¶–ZÉ1¼Ä&üI^ �Ro® †¿t/?r—¼šg&^­kãe;Ûì¦‰G�	åÉÃ€„�Ïå;—q¤{¾ƒyKï÷1§²]}$Dù°ï}^ËFƒ©Í½7!A)hµ‡ëTÖö%!¨„U1e\S—ËvË÷#´‹ì•Ïµ”ìw;«ÍG+;¸D�’hwŸf
+¥MiA­0¨“\2•ü+þ	Ä§öPe%ÉZ�ÃJ\Y6eÏqÛ]‹$cå$fM7±X¢½Ô\êÆ?Ã¦Ñ?ò$‰1ƒÄsK¶Â`ÒÜn;dä£²BØU¦Ö štúu)Âe!GZGvÈ>†5Ã›’ª�.¦Óyƒ>€C5¡ð*º"aî$éÙ@~5W†I¹—$Ëý Q¥rœ›4§¥dïwZ/ìaßRë„G÷Ï�‚gK6ö´ò¦µöf5ó^Ãë ~§�êzÿ�—B¤Oë4ñÃ›ZB'‡¯Ó”š{B¤•›{o4õ†â|ŠN9vÓ´uºh
+FydxV¶²ømç¾ÔcÍwJ¹OS¼,yÑŠß"qOiy-þ¨™èt	IîºBœŸš"I'd± šü\Òþ¿1æI­m§+
+ÐhŽHvYTû¬ÖÑ"éƒd‡¯lJ�6½àë®ÒGØÚ‘®"‰—Gãº¼º„¦Ä¥�¿ÿiJšxF±´¾d×	›>Ñ¥ŽŒ®ëÖãE5¥e3È`YŒw'¾MLóI¶�žx¹t-©¼¶Ò­*wå?^•´ç=¦†Oä·[¶¬K±u1çÒÃÝ²²:Kß›>Vr§·ÐäuÐ¥ŒÛ;gÉéçt-®Œ´t¡lRd	¯ðü3ŠÌ&ªV­ÚµkW}ýý÷ßû|¾åË—gv2OU?T[Jè~¥	âžt©8wâ1>æÛ&[ ¾@g…¿ç –A×íèZV).¿?^ò1vð­ï+ûÊ¸²1Êå”“QA]«Ó_Vqp~©+„¤æÐ5] ó n¢_BgZ)r|áu˜JbÝã*}„ü]£çÃ}èÈ¤"Écƒ¿DM8««{{qS§ƒ:@X˜J(R6L5—J7·K6Ô³ŠwÓ²Sô|ìêê*ƒ7/¾&–¤“C©èüøvTƒ©á¯» ²§Ô­\­ì%Eß©…oðKUùtõ-¿•óÀq]Tº”.�BÉö§ˆ…çDv$z…=‰e9A'Ù¥ž(é¿ŽO	Ÿ¤‹søQ£‚~ÐÁU®üVÖJ�Äo‘´ó_ÉßIì–¦éà[KÞë� Á–6òúÐ"-½IØd‚šÞø¦ÞÍÔŠç»RŽùí–ÞdløÝ^_¢H)¾ü)}`ƒè@ÃCnÑÞ·Nswëd¥fIB6Ý8@DýaH5!¶?ÏöPgW�Ó.ÅšL›ÖÔ]ZqÞçu	B¿–U7#qd`s†–„ß
+]F|Í•ù�¥ÂÁÀ‚-.>§DÚßžæs¡÷o«nÞ$Z‡@1ì<@ÂÚyè3®o‘9\¨2P×ÄJ9ÝsK´án—GÄs	aSqþùÃbk1_]TìŒjèØOz!ªd{;§µ½4Ï°äÊ8"E<Oð„ñX:ú6µó¥´ó½ßÜßÆK–¹ÝíÐ"î
+�$íò€7ï¿¼Ûú–Öõž¨á=TÝ«Ç£�zån¬U–¹®å:4
+kxmQFÝ©¹ªðjh5ž³(çÙœjjq­µ�£™âþ&YAüYã$ÄQÝQ¥«h´²€¤‡uûVú»D[úJ›J2óTHQ|~,L×Wv¼Âû<�qÁŸ»ÕóÊ¾RðýÇ ¾ã-O^Çç9¨©èQý/&E×ñvºý )OéæïÜÐÊ]4¢Œ-4“¿ûè(ÞµËœ\É#ä”1„¡œ©#R3îyüa"Ê9.ÇL´ÉìÄÜ<?º6ÍŠÖ¥Þ­%•ÇÚ�}@QR¾Ž2¾ê*EÞƒ²Ër¯7¸,.S}—„xóõF|Ê}‰pÅ!JöÕ>ôVè;š¸8�>&ð`lW6)²¸üÿŒ"³ƒS§NåÏŸþüùþ#•*UzñÅ3;Ÿ§
+ãôý¢£2šÊã©é2 ¿nùök¨¨õîù“± Yè¬xªGQ(-\/9ÐDã&©#]YXYÞà2’¡eÍ×Áq´R–áý Õ‘ö7u”ËÉùÝ•ž&EñNëw9‚øŽ?t£ñÉ¦�Y\1YVel Ö¼Ã­I+U	%ÂÒJÿÆtÛ!KÞ/›DZÊ:™{¤šCSÔGö?,1jÎŽìŒJJr•ê\S—Ò­¼ÉE‹�Ý’²ùÑ Ù®ÞÄ%Ç¾&zM.ñ¡Û2éã ¤¡‹„.e—Ö_aX­Ð$ËðÆB¦.ñrìµœà*JDôEH©ý÷ÍÔðq’‹c6œïb®1;DLZ£á%ç0ìV»$[ØReúÉyìšîc(»ÔwJürŽÃÞŠe~£…7¡‹ok¯�,y…`ÿbõ«Å„-XàzÞ“m}ïr��°ÀOå;$�N(ýé>ÚT—­;©yÒÔ rþ@ÙÓ'…G¿Ó\gºµG+ób‹Ê`|©‘ªN¦Öù•ô§˜Ùù´»ïŠ|”ˆo‚Ëu3@*�Ž"¾ ‰	ÏyÔ<·q.Á×è)nuÖ[#ƒBŽ„ÿ<7Ùæÿ†Ö\–D‚ÏÌŒè­o¸,Aº¬ÒŸ.±ÀDôÄƒ²úE8·ÇIf®kÞ¹).­Y_n„ší�~%ÝÏš	Ar–ž�"e[e,ÑEÖ]|ŸëfFybnˆUj§þò��#!!ÞHco!$žtv·×Ÿ^2í¼-6ðž¾Í»§¾×�¸’ƒí|Ë¥Ë<Úu“ÚÙŸÐ(„œñn]ÐR°›ìÍ�w»rVÐðjd—ó¯è$8Qš‚Nï)}y­¹`::N/Óš®œ™ïPßFÖü|©ùë¸>MÆyIÂCZ�ß¥yBâe×¤öIhT³Åê /Òj”Šã!ë¶p5¾¨Éúte€£ÅO$�Ä
+4Ë…í‘iˆ	í&Z\[�€N
+$»…Çá“%‚{-^|M¯ÑÖ5U½‰¡ïÑÐn¢ÄÕˆJŠ©ŠzJå$úŒäÆFsc4¤¼Ë$N“E8Oó–Î#u'káÁÊÊ87]x•|ñIH8*¹LñIEÌ‘T«nò^ù;FÜ:'²ƒT¨lˆ�è/îÄT·hp#ì,c+—”Í—MŠÌÿ‡ÿŒ"³ƒ½{÷ò V¯^í?R£F�îÝ»gv>'ëp¨®Ì—Ý‘®8²ì&p[?ú¹T9;áJ4uCaeUÿFÿ”"Š éDV zœ£Sð�}[â%¥$VTSAêŠtõNe{c*Š#+ßœÞa¯I�r^HAØƒšÔK“Ë„T²¬ÀùÐ%¾ù‡¤2û5Öm	™Á]\:Äð‰˜¯Äˆ~Ä#XTJ&è'Èç-Ð_BØ,^k}+Ž/,U5™]ü¯¨†¸OÔ4È˜ëY“³(¶,Çá8±ÀO )œ@¨ˆ.,Œ-iâµÈH¾ÇXÎÇÀ&EßÁõS¤êýâ2Eð!ßs)\j •K¦]ÖçR¦»ü-Ëù¥œóZ¡]|*ùvð“G@—üR]3ÿ²ìÄ¤àÃ«M~A2‰al;ä�ÔT¨XW,6ÛHØB‰YÆÀ6õ^®çýµ�·€ˆà>ï5hQöèmºß›ö —Ÿr\ËZéH;1ÎcnsÁÍ¥ö˜ïKéë8�ûêþVdpq›ÖâÃöâÛôÉÆ™M7ŒvR3?hý_Ýv§!±$ÆP2“3&x1#˜\ƒÉ™üXÂ7Ý_ ŽM(0˜îœ xÂo„lv)ÈÂ¦Ò¾ø<‰Ä€%[cÁ¤†ÑL¢~Z¦ƒCeöª6í¢kûeÏT pþ[¡K`º‰0Y}áruÆTç‹|DÑQé¥‰ÅúcáéoR•æ€–Ÿ�"Ç4K†LÔ´	tÅ$óž®«áùÈšáõm}Ëð*ïòž¿ÏÓÒK�¸~äƒÞB­;½Võ½§šy£%ÕCoš¬‘÷·Ú^'‚ý¦Þÿ4÷Þ|Ä·’Oië®¾½Jdš²žëÓ:ûšîzåM†þ"€”Ø>$éÄjM]gN©Á &Ê“¥Ñ¿âùg“¹Ñs®ü±ËúÈOÃó$4ÆËÒôtƒÄûí î´èþIÃ{^r,¸jËjRx�ç#•}~Ò¼yÜ]2üìÖuDê-CßÄw’è#}�YxÂ²`õ)ñ3KÑI$�@w”Ôå¤Š¾Ï
+×Ù’IéY«Ð•H“>#åKÞ'¼ÅÅu+²J¶„Ñ¯¤˜j.Õj‰vn©^Ì-¨'šŽÀèæìÈÇh}©­ÖX*}/’Üw+ésK´Åzh½¹.U×Ó\6œÑka©ë#úÐ9ñ dÇÙJ4+¡Á¹žQd@áwP¤Á`0rÿÒn_¶r:Ðj0Ã¿r´\Ç`0†è¦�3flÞ¼¹Aƒ7ÜpC›>ƒÁ`ø·Â°aÃbbb J(2ëÔƒÁ`0ƒÁ`0ƒÁ`0ƒÁ`0ƒÁ`0ƒÁ`0ƒÁ`0W²_9÷¨V­ZHHHtttÇŽ8ð/eË™xàÏófÍšPâmÛ¶­qãÆ<½°°°œ;w.pd;|øp§N�¢¢¢‚ƒƒ«V­úÎ;ïüK1rU¼äääúõë‡‡‡ÓŽ{öìIûQNåÉ93/$‹G§È[íÈB¼@VCà#Gõ—s	ÏW_}uåÊ•óæÍ+[¶,=3kÙòDæ™3gÖ®]›ûú�@ ˆ÷ÝwßEDD<òÈ#)))k×®;v¬Z€@�´oß¾|ùò´ìW_}Õ«W/n½{÷î<�¶4hÐˆ#ÒÒœÊ“Krf&^ (Hf²)ò\;2/ÀÄø´„®sçÎÍ—/ß‰'²�íòËÌ]J—.½sçÎ´F ÄëÜ¹s£F�2ÙÀõ×_?xð`}}æÌZvñâÅy.ÞÆ�3rPŽäÉU93Š—y« —”-p´#£x® † G –™1cFXXØùóç3“íòËŒ0øí¯¿þ:¯ýF @Ä+Y²dŸ>}êÔ©Y³fÍuëÖŽlà™gž¹õÖ[üñG\÷‰'+Vlÿþýy.^:CšSyr[Î¬)2o$£l¥Åp18rZ\2·qôèÑ
+*ôîÝ;Ù.¿ÌcÇŽ­_¿>¦àB#â�<y’{*ThôèÑ›7oîÖ­¯wïÞ²)`ÆÖ­[sÓ«®º*""âïÿû… xtéiNåÉm9³ È<W�Œ²”v¤/ðÄà¨.�× Aƒzõê�>}:Ù.³Ì;vìˆŠŠúöÛoõmž�´8~ü8÷jÕª•¾…�âââ²)zõê…I_¶lÙ'Ÿ|òì³Ïò$÷
+Œ"³/ž�  éd4íH'^à+ˆ!À8Hr÷ÝwÓ!éÕYËv™eFå}>_þ‹@ƒòåË×°aÃ /444>>Þÿö®»îêÒ¥K€È†%'xLJJò�.‡’çâ]‰­¢ éd4íÈøèYAWaz[Ú¤I“[o½õèÑ£Ù‘írÊ|äÈ‘¦ÁÕW_=|øp]
+âaŽZ·n­¯ÏŸ?_®\9]²©ÁY¸p¡ÿHÅŠÕàØr�‰8
+’N¶@ÓŽŒ�.�ÄpE Ïë/Óo›6m½bÅŠO.B‡’2“-eÎ¸¬=oÅ[¶l‘Úøñã·mÛÖ³gÏàà`õ
+Ù@£F�®¿þzZö‹/¾èÝ»7Œ¹iÓ¦<ïðáÃô®ÄÄDiJJ
+¯�;ö;äÉ%9/)^€(Hf�.-òP;2/ÀÄpE oë/ë”z:lß¾=kÙòJæ´F @ÄKHHˆ‹‹C÷‰2Ö®]P²¥¦¦>òÈ#š: J•*i]óD<Ú.]Oƒw~Ÿ<¹!ç%ÅÉâÑù‘‡Ú‘…x�¬ ƒÁ`0ƒÁ`0ƒÁ`0ƒÁ`0ƒÁ`0ƒÁ`0ƒÁ`0ƒÁ`0ƒÁ`0ƒÁ`0ƒÁ`0ƒÁ`0ƒÁ`0r!!!ZÕ¨V­ZÃ‡¿œ·þì³ÏâââÎœ9“ý¯4mÚtêÔ©¹'’Á`0ò0ÂM7Ýä/¼V¯^}õÕWoÞ¼9OäñSäÐ¡C—-[öû.rç�wŽ92§ßjÖ¬Ùk¯½–£¯¬]»ö/ù‹á5†?+>þøã
+hñÙ“'OV¨Pá…^¸<·>}útº#~Šü#ø¹gÏƒäô^PäÒ¥Ksú-ƒÁ`0\)èÕ«WÅŠáÇçž{®R¥J§N�ºäi„œñññ±±±¼îºë’““9øË/¿têÔ)<<<88ø¾ûîÛ»w¯žœÙñªU«r‘Æ�.\xÈ�!GŽiÙ²ePPP\\Ü‚.9ÐÊWú÷ïÏEŠ)ríµ×ú))!!¡J•*\‘zôè�ülÛ¶­¿}É’%Uì>}úÄÄÄpñš5knÙ²%ãOƒRo»í6ÿ[îˆl÷ß¡B…*W®ŒÁ·ªU«Æ6þùgÿ™à:tø#ß`0�Œ'N@=-Z´ ’Z·n]f§A MRRÒ7ß|“’’¢¡�;w._¾üªU«6oÞLøV£F=9³ã°L÷î»ïž;wîØ±cíÛ·‡ƒ6lØ U¯^ýª«®º$EFDDp©óçÏOš4©X±bð/Ç'NœÈuvîÜ¹zõêo¼qàÀ�z~º(~äÊœ³cÇÎ�7Órœ¢U«VO>ù¤ÿ-w,^¼ø¸qã>ûì3>Âm€[ù½}ôQ¹råúõëç?sòäÉ<ºß÷ØƒÁpE â#ìzüñÇ3;:ƒ@	ôÒ$„Ôü“†P§Ïçƒì2;~AØ§cÇŽzüðáÃœöá‡ê[X.I‘þÙRX’ðsýúõéÄ[¸p!,©¯ÓRäñãÇ	Q·nÝê?óæ›ož={vº¯kØ˜ö-Ü­¯aI¤š7ož¾6lté?W¡@�™=4ƒÁ`0ü	Ð¬Y³ààà*Uªø—tÎ™3'ÿE|ùå—ƒ0¤–ö[°ÓeQQQ‰‰‰™¿ ìãç¾�7rš�^�©I˜ô’9jÔ(ÿ¥®¹æšE‹ñ‚Ø³nÝºE‹ÕaÕððp=!-EnÙ²ÅË€¡C‡¦ûùÄ‰iOî8bÄ}½ÿ~¾òõ×_ëÛiÓ¦]wÝuþ3×¬YÃ§'UƒÁðç Q¡Ù§Ÿ~óòË/ëÁ£G�~qPÀÿ#EŽ3FB‘p¢Ÿ”Ï�;_’"ý_¹ I0‹H‘‘‘ñññûöí;{öìòåËCBBô„´¹víZ$9tèPÖOàŽ;î0`€ÿmÚ;8p€+ìÚµKßNŸ>½bÅŠþ3—,Yâ¿¯Á`0þd8xð`‰%t¿Ô´}ûöŒ§e1Ðš’’¢ou@uÓ¦M™¿ðÙÂ…¡f}»uëÖÌZ3R$ÄÍÉ:)	^yå?UÕ©S‡·úú§Ÿ~B’3fdý:wîüðÃûßfŸ"	o«W¯žõÅƒÁp…¢]»vÄPDpú¶U«Vµk×>þ|Æ3u¹ô´sçNÿr�.]ºT¨PaÍš5é–ådv<ßAL�7>qâÄÉ“'ï½÷ÞÌZ3R$Anpp°N~þùç¥K—öSä£�>ªkh5xìÞ½;ñæÌ™3aêõë×?ûì³œŸî§Á¡Hë›}ŠlÓ¦MÏž=³ù¨ƒÁpaéÒ¥Ü¶m›ÿÈ¾}ûŠ-:aÂ„Œ'ÿúë¯½{÷ŽŽŽæ+•+W^²dÉ‰.ý›;š5kæßÜ‘Ùñt|G”×¼ysN+_¾üøñã3Ûô‘‘"y1þü¸¸¸R¥JÝ~ûíãÆ�óS$xË-·óê¦�³gÏ4ˆo(P 66RNMMM÷ÓˆFCCCý«z²I‘§N�
+óGÁƒÁ`0ü)A0Ø£G�}º¬[·n.Éc0C€àÐ¡CmÚ´ÉQŽÖ^½zmÜ¸1÷D2ÿ=
+3ï
+endstream
+endobj
+10 0 obj
+   277787
+endobj
+1 0 obj
+<< /Type /Pages
+   /Kids [ 6 0 R ]
+   /Count 1
+>>
+endobj
+11 0 obj
+<< /Creator (cairo 1.12.14 (http://cairographics.org))
+   /Producer (cairo 1.12.14 (http://cairographics.org))
+>>
+endobj
+12 0 obj
+<< /Type /Catalog
+   /Pages 1 0 R
+>>
+endobj
+xref
+0 13
+0000000000 65535 f 
+0000278899 00000 n 
+0000000141 00000 n 
+0000000015 00000 n 
+0000000120 00000 n 
+0000000455 00000 n 
+0000000241 00000 n 
+0000000772 00000 n 
+0000000751 00000 n 
+0000000872 00000 n 
+0000278873 00000 n 
+0000278964 00000 n 
+0000279094 00000 n 
+trailer
+<< /Size 13
+   /Root 12 0 R
+   /Info 11 0 R
+>>
+startxref
+279147
+%%EOF
diff -Naur ns-3.18.1/src/lte/doc/source/figures/lte-handover-campaign-rem.png ns-3.19/src/lte/doc/source/figures/lte-handover-campaign-rem.png
--- ns-3.18.1/src/lte/doc/source/figures/lte-handover-campaign-rem.png	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/lte-handover-campaign-rem.png	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,1323 @@
+‰PNG
+
+   IHDR  a  k   äÉç   	pHYs     šœ   tIMEÝ	7Œ»«ž   tEXtComment Created with GIMPW�    IDATxÚì»W°eWuõ?ç
+;ž|Î=7õíZ-µj@ BH ¢À"ç lÛ`„9laˆ,’ÉYI (µÔÝêÜ}ó½'Ÿ³ó^kÍÿÿïù£ŠÏEÅ¨õ²_öËÞ5~5ÇX‰þâ„ˆðWýUÕ_õWý¯éÿÊŽÿW>üç…”øKý~ÿÄ•Ç)b}3$0 ` ·ÀÐ±êxzBÝôa��ÓŠ¢ÚÄö¾Î<æä¤‡Ôò±€	5V˜`LØm•ov?žì˜´V~\™J7?ÑÚ,o©tJªŒ|EÂeÁ@K<2Ä%»yuÜ:ëÉÈ¸�l,æõ§)ÿßGÙÅ{šŠ¹©[l‰ašèµ%û—q~FÉùî(½|ªúì\msœß[Ù·¦þ´QøFe&mñp7zýXáý "W›¥ÜkLÕ±o‹âçIq ½©Yye½*ÎÎ.:? Ì»áÛŠö-žó}Çþ}žo Yvº‡ŽâôEÿ³iv®çÝæ`iá-c�ÏØ>Ì{çÄÄÇ‚áD–o·í;»ƒ­—ÿ–ñ4Ï§£ø¹–|È¶ïo²äÃýðšfåå½ÑõQvNÙýÚJð�¾|¬Y~M½Â’�¥ùéDv�=Ùâ‹†¬VòÔŠµ�ˆEzCÕúÍ¡è¢uÎnÎÃ]kìn+›L)õ™s@ÿl#»dHMI ÇøJ1,Ç4>³®vqêQú§íx}N 8_æà80e áàîäZ2w[P …ŽOà®ú6›8…aJý®i¥€ ¨ Aà�¦ec¨™ËXN8i?z(Þ�P÷$73díOø&ÛUÆ5 –UècÙBT †ÌæÂMÃô©“å¿]~
+A¥¦Q³oËõ¸#öR’o�õS�pM%  ™i6ü¢ôB[îQz¦^zÛáÖc6_šª¼ÐPépç¶µå7+½^›±Vt•'ÖNõúµ�]AøjC•±ú»WÚ7 ä‰Ú^ö>Ÿå;lù0Ã~+ø`ÁúÕ ynÁº1HÕI @ä¤z]ÅýNœ�#ù‚oÿôXÿó¹³éÂ'”tøâÍî�Ü4=6›÷k|"¡,§x­•TS�Éåù¬B@:^Á�-ù8¾Dw„t´Œ§¦¯ÁÙüº1,F0kA}
+.à@ ‡'àÒìeàHlK`Å‡�9ô$T=\¿–ŸÓÖ³	´2è­ef”%Ô+±‰€:	u,(×øäCê§‰w QD¡Ç| p™NHôM;§Qƒ¯w�$Krãtt8%¡§ü¶9ì`½ÎjQJ©�6C$€	ko??!!–Q>e­¤¦–·*Ž­dë9bYt àñtu›5EÀ]ôxDÄ\¾é©¶R>sTï	)*¶òÚ”}¸›mm›–…2w2Bà ãÎý†ÜñÒß†Éå–8@äVJŸ
+Â+8ŸO³ó2µYð¥¢÷q¤õà¦æ‰AôJÁ–¤ÜmL%ËO‹²§¶Âp(øbìXwçj«Ò|÷¦4;/W[?žæg*3��"F–Ø§ôúÉ‰·÷{OSz³ÒkŸÏõú¢û¥8½$UÛ%?æÚ·Jñø�•ÙõµËãôb×þbJÄ»Áû[5äÖFŒ9k;ÖJ¯Oó3mñÈrðþ²}+gí8;‡³n¬N±ØÂë‚'ÿ1>l²?ÕÉ™õgF	ßûÞ÷—Èë®»î©üº€ò"ËæÕB™5G´"Ð±ÀoÓ#6ÔÆÙ©í.=¶ž=ÍÆª†l\4r’u¡–u§GÇ,¨Xà)ÈËÜé˜Y�eJ‘äÈ�-éãsjžô.Cu�ÚaáP»E.6ˆM©*Ž&¦î²Øb^±o+‰ÃüxVßèýÆfCîºÂ”ÞXq¿ÚŠ_&Y  Mßºs”�-Y�›&P‘³‚}´÷u“Ÿ…�“GŒëþ0}–oÝ%ÅÞ$»Às”©Žuç0|‹--¿[ô¾`ûŸ_Û<Û’‰é‰kunruR’ž'ÄQcªˆ¹Öë<ÿŽ4Û)Ä�,{â
+B0
+Ÿ×¼ÙdGµVCí8�†Ñó<çgR.ÆñDŽ%ö[ÖƒƒÑ{ëÞBñî¢÷-cøbÿ³ëš§ZÖÃãÕ«|C±øãAðº(;_ðÕ\o�a~š+æfÆbíÔL[¬ ;yu>'4§j e*„è3Ö6]šõ]¬ÆÐP` ‡´«¸s¯Èq `
+°q sð|\¯!Ü€¯³ R€-5<AhÏ*ü²„'J(0pG0ÁB“¯ç(!MÈbFV…{-sÔ€öXÕÃÒÐ$a‚ÇÂPM°<,#øC]7 8c’5yÌTÓ>Bä¹,öyÈ€­æ'XÔTT“¬Ç ½.§±’óSCU a¨èˆã‚¯zòž^úl æˆ£ž|8ÌžR-|ëÞ4{¢ÀD`1’!90QÛ+ÞgÐ4ëÅi=í[÷ðvøîTm‘xP›1)ŽÙ™:M™É‚w“R•^_/_­ÔvÁVmùP/ùn‹CŽØfçÕ
+ÿbL#ÓÛ´™ôøã¨zÉ%‹DÅP×Ër?Â´�»èhrõÑ!Íû¸1Æ�'ÔÏ`˜BA"È×ñË}ÜÂA‚ƒC lhfÐe =XïãFùVþÚEºe'w‡vK¨ä0Â£)©í'4T%”—ÌE¶ñqóŸ.Ì4ØÖ"+¥¤lXã³
+G´Ð™á€%ÔQ5Ecd›ÉŽRÇÌoP•�	d6Ö;û;jl­ûÛ‘šÉ(©p½ f�Ù˜�	à¬ee\fÍ‚)	ï¯æu�¶M—¥  Yih£2CSâYW+@["vÕØ\ÞàE&8‚‡ÅµÞíEqp 6À�2J‘žÎòóÛéÅ¹:-U§ a¹Þ¼2ºÞæ³ï›’FodÔ’µ­{…˜¢«âì)Rp*Å�´F×	\ç–QôºVôvef<û×D^©ôå4={jÍGãp Qz­kÝÓ
+ß¦ÒÉnøV‹³®¡¢%_þ‡d]ßùoKì’¿Qz£Ãçmë!)öDÉóÃô9ÆŒ#f‚/—¼/®ÿl³EÏþy?¼¦Ÿ\iLÍâs®x¬RüPœ\ºvòùAôtÉV3³öæü³ÿWv\wÝu×þóŸlæ×ÃŸRø—šµ¾W�Djën@skøi@ ``F*¡ž�,‡‘e	Ey�M Ð3s	¬x0%Ñ¯²ê¼Þ3#N2„6S™1)E×ô×Hè¢0D=³PcÓ1ê2L;wòÌþxÓ:+[Î«X‰k Œ�¬É"æð9É”�Õ& š.¿neôI_ÞÛŠŸ?Uø‘+øœÒkSu’%ö;òž8»14¦L GÙëî¢óí0¹Â€=Q¿Rko¾}×dõEY~Ú z-€qÄnÎWÓ|GÅÿ@-Ä!ËŠG£g„É®õëñÉ›Ú«ç;ö��þg&ÆßB!ÏÁˆâT*ß�ÃH9£øež}³çý2®4T©×> +76«¯Šâ§ñ•<†C[ì�³]eÿ³Œu?Ú]kÈ²ëLÖžÓî1[Œ^4å}ÃP)V'æ¦ CÕ¨ÊÙ�šÑ„šHuÍ±NØè,˜û7‰sF:S�í1ØÆÞ1gþ;‡A½1¼¨OÈðX	N�PÞÊÞD@óææµì²}æÓj),ŸÊß}LÿdŠ]Ì€µè¡
+ž¨!hv=?ËãÁl:P!0‹æ¶S­‹"cwÍJ•�""€�Z3€‹ûÚò�®r2Ä§ýÌbôê1ûËÉÓÐ”ÿ¥¥èå 0î~€Ò'ûbŸ¦R¢g&
+×¹ö/;£�I6›™uíäâMÕ—$ùÙ£ä™û6CE…H>—ë®u; ô£7:âÑQvQÕýR®7�7®&‚•ö)3Îp¤Mu¢~ùr÷‡ X+\Ä‡ñk\yg®×§ê´éæ³W¿#ù1KìMÕ+Ñ+6ÕŸšfçöâW¸âaCEÍØ0UÛ ¸-öùíä2‡59&�Fzjªð¯‡‡ï,‹Ör^A@EÙ¤ÌŽå™¢°ÎÖ@Ëðp¢E÷Í°§r`ë;0éáú�Žá±)|Î�À£Üœ\Ã]ÑÕ§à‡<XsŒn4�NãZôë5ø¼£ô…<¸ß>Žçd�èX	7éà8Û¹lc§
+Œ ~P·�çÙ¸ƒÂB•“�¨»:ÑB•mÀ;fvŒ¯³Ðx¼4SkDÉbÃV^7@>ã#�e@B�&ßTæ}Mö@Û£À@Sö–óò˜H4IÆ1?ž‹¬YâÆf#ŽQf*£¾jr$E(‘:«	.0uXk.�œ²úœíl“�*4¬*‚¥œ# Ï¼Šh7ýOgêÄ(?c¢üú\�¤—ŽW^%—s¶¬ô)ö.¾P÷þÃ’*¸Î-Irqœ^˜¨3|ëçŒ‰œNôæfá½Rî%ãµƒNTŸ7½[ð×ùQwø[ì	²§
+ÖdçV¬ÛªÅët¿È{,ëÁöàÓc•×Dñ?žå§16èF¯-;?–|¿ëþ0Š¯üð(~Y®×ØâqÎZDn'¾j¢x-g«™:Ùw¿©õºnð‹?îÈßu£7[|n˜�÷¶¤ùÇd­:ü“Ç8ÿÏœµþÅ2òR·tO€c£SPãÅ¶îÈl|dâeº{Ï€˜Ú2¹µ–·Éí)Ù©!ªk­á'-ëã6–X^4p¦ÆÆ 2‰Ï™¸ÀÜ}l‹]
+t•�*1‘+ò!ÇT²^+Ûš’Zc1ä(ò5Ù†¤dan¼µ¥k”Þfç/§gù é}¡¿„³‘Ã�²]_.Xw(3f‰CÚÔÆq¾³`ßÚß8]yiš�ÇX;ÊžæZw	Ç¾ÝuïÏÒƒðïâüÌÉÚ³ò|B®Íx®¶	>«M­ÑøL6•ûÁ»ù@½þŸƒþ¥ ZŠ=Qr…û8_0Žóhšnä|1Ž¯(¿Ùê|f|ì-iZ¢EÏ°­ûDeÙ�¦„oÆ/˜n\Æ/l!×[²ü$Cå±Úòlm_¥ôL?y¶gÜÿÄ ya¦'DjÆá­HOjbºÂÑtt0.œýù#ø™åu…‹ ”RßÆZB«ÇéËM|zF9õd>nîÒ}Â|Q Gkxê¼ùÉžÃÒAúT65àI%<ÁÅ1$ ‹8Xæ×÷M±³`ÁÜWÆmE¬y–› 8’ÃÂX\H[ùX]ö3S(Éý½ì$woò3<±§�>Åã++ÙÄz÷ž¥ä|‡¥¾˜uÅ> 4ä¹òî(»�³þ(;»hÝgñÃV'~±'ö9â1Ï¹Y©MÚ49kÛÖ½Æ”:Á?7Š×öÃ·–¼ÏçêÄ‚ûõ~ðN]«\EÏN²¤Ø� ÚáÛ'+/oo�lÞ‘¿w¬;	Xžïpœ_&éEœÍõÂk<ë)ök=ÝŠ®.È$?îZ¿ÎõúLmwäïÂô"KX
+ßZ³oë§O*È½©žöÄžNz! pÌ]¾ØÊ¶p¤ÔÀ¢ùýFqæqµÛ‚š@·Â)åŠ²M¡åÀØúxždãD�îG’ŽÌÀUËðÓ2œZÆSè;L:°† ÷q“5&¡¤ hò­¡	º´»Ž;º´w‹8]è(¦^
+í&;%¦‘‡¥œ2iSx}.Ê˜r¼*’Ä¸=–Y¡È{mUvú¬¿ªŠ…!B ‰(QÌBã2€¦ý`¨¶ö•ïs5Ò|Æy(7Í@Mö´j\Rq•U,–kâ±†œ¨‰yF’8, àåyZG»ù	¶ÚÊ7J$"äh$¦L`›Ò˜}oÍÿd˜<{”]P´ï³]÷ëž}Ë0z‘ïÈû£ìBÇºˆij¹õò[£wÚÖ=†*’Ô¦i¨<Š^êÈÊ¥�õïç¬å9?	ãæz³àsœ-	>Ÿ«Íƒ$?›³^½úî(zr?|[ÙûœëüÌ�£Ô–AøÖ\opäï”^/Ø"bfÈOÕ‰¶Øó=Îúœ-iSÆW¹ò�RáÓƒàíˆ)�$�†<Á•,±;ÉÏåØ{iïí#ƒ?™‘…?3#ÿb³Öéµ€ÌÅ’…|hZ)é”1,44�×ñd* Y�uíã¬šyšÄ€ ¼”b—UÈÃ¦…®Ó´–:±eEÎ…ºTh°5ÎïGjÆBÀRãg¦æóAMÎ·²mŽ&‹@"˜‚8`Àï'Ïä(ë!”-Þ‘¼¥Ì”d-É—m¾(Ù2 ¯>5ˆ^]°~�»Öý¾óƒ(}†ÖÿÐpŒÕÞÆ—¾”©S´ªgê[ÞWt¿=ßdk3N ëü›´#= !g‘¤mÝ-DO+›±‘ë”ò~Ë:R,¯DáÉy¾¾PxˆŒ*³Hâ©49Í±ï%#*�YÊX’>Éh£õ:)özö¯Fá˜63DV±ð9­×tGÿ¦DT´Å£‰:ÓûÀQT«87•-¾äðÕPÏdäTäRjŠ5‘3T‰)·Ì~Æ
+¬<¢%Ž®¢0‚Ù"šua­�4‡ÎqøZ	NN¡½?nÁ]§±�06T�Ó7¦ñòYúº…Ê UÂSé'¶�U†r…îŸ[æôî&;­À0!3ÆÖåDËô{ÓEÚÞèr‘¶º’O3@‹M²¯&3‚i÷vÄ”ÈkeçTä¡n¾Áaäð^K5Š<–lØËÎ$*ìq6fÔý‘#&Žu¦N*;?Vf]7}:/ÎÏqÄn×¹5ˆ_^ð¾†ÄÃô2ÆBÉæµã(35V{5ç@†	>7ˆ^ÀXâ`7z¥oÝÃXo˜¼Tëõ’Ïq¾äÚ?ï?Ut¿ÃØÐ±~›æg–œ[RuJ?}+Ì.rÄž0½¨`ßÊYM=VÛ8Æœ™™ÕEÖ˜s‘¿œ­+‰hIõ9ZÊ6:‡Ì7kìMé
+ý.¡!Gw•~µ–]º›Þ½_“ÂjŸÜ‡lhvàž	¸ÔÆúüÐƒ)~~=O_Ã.I¡¯)òqÆÂ²†¸Î6¬š9Duvâ"Ý>ÍÎ›Ó�p2 îŒËÉ÷˜šîŒÛèJðû:«	¶¤–¦„³GýÈƒ	©2wï™ÐEW�™¬ÈXÃ:’˜º°Y¦ÈJ	›öá~~bbì¢[ŠêB/çS3±)‹,$„“Î]‚	l¨Æ‹¢ÝQÞ˜œ;�-:°¦£Óº0@`õ´°‘i*Ä†û,­Y�Ô›ÅUN^JÂaI®¶gfmÍû¯ÕðM%ûÎ^üŽº^yÇ>ç[>g4ÿ`‰Û%?Æ/)ú7®¾4HžïÉ‡‚äEQú´’ûMÎ[ivf˜^î;?Ñf"H^8Õ¼2NžìXw+=Ãù²6ÓÊ¬©–Þ5½ÙPµZ|otí(z%Ï©–ÞÍ1µÅÃ–Ü›ë­•Òµ‚-¹Ö½Ž¼¿]S-|t®ÿå’}ë zM¢N/:?A€$;?H/.Ø·ôâW–Ý¯—‹ìŽ®õì_¥ù’Ïfjë�Òïþ1Yë{ß@ÒyÿGþÌYë_,#/—Ÿp4é%ó`§],–XM@ÅÂ’‚¬ûrjˆd	g¬Žh>‡A7H´ð¨þQƒí°Qàæ$”Z({æø�Ž1³Õ€®rû˜:„P^ãý0UOXÒÇÊ¬Œ }5Ó1ËK�¡19+P­¨2R] !`€X–{=1é-©)ú|Ñâ‹KÉ349E¹Ïâ‡ü‚u{˜ŸËY?ÌÏê¤»lžu×rð rœ?a¢ù	•N³KŠöO Í ¸z˜]bó…¢ÿy!	q´¼�qÖ!�#ß»ÉuŒ¢‹³ìœBá§agpÃ‘cÿÚ²Òj¡´:œËÙj?á€ã³�c«íë¤80
+®_÷ˆNŒÓ‹Å{Ì ÷4†q–Ÿ],þ\X)W£«Žs˜»Î/ãä²$ßåÈ‡ëncKÁukÙâ€dsše÷Û+á["3ÙÉ72*–ä~‡�Ž¦5�ŽV3ÞorujLqC4õ�eú©ëûôHwJ¨ÌðPGxþ
+üb
+ŸÓ‡ß¹0“AgDJxÒ£ô9XžÆçç0(ã)ëØ•4ÍOŒ(œa»rÈ3×Wð´¾Yªâ	=:lA£ÈÀb9×Æ	-MÐ6G2S˜EÆûºPwÊŠ¾ÜUM�™ˆt�o.ËÅ…ôœ˜”¦±¦s¿@æ›×y·(4ü�Åùùï¿ ØBøj‹Aút¢R¤NµùbÑûª[µYÏ{ÕFÙÅY~N˜íÒú„jé=�àº±ÒÛlç×Ãè?”ë™0~^ÁýÎjÿó¹Þ6VyƒR[lùh˜<wªv%™j­ú™,=¹Vú'"{yð¥8yVÉ»1ÉÎ‹ó'J¶Tð?/Ø‚%ŽXØ|N›ñQvA ¶
+°GéÅ÷+«ñÎ�mq Ÿ�ÇQi’ƒ|SW{	EŠü)©ãJ´WÍáMâRMf\T7Ùö‡Ì»jø„Ãôùü›%úQ
+« ÐÀ'#Z
+#x�°'ð²¸Ê1´ôð>©ÁÖ% pt°ZåãÇÍ/8ØX#±˜P´F‰ˆrM$Ñ·Ñi+h›£«ieV&`cüäÀ$Å’Þ_ÂfN€{ÜÄ†"€P¦Ò5ƒ‡ªu_¢×pME›,æ6 ch%ÆkÚ†z@8| àZ,íd[ZZ¹LXÏ‰¬*kd$k\Ï«°ÀE�å²(2BÚÔU¬»½IEåŠ}»#oEoRäùr¿`½’w#/LžŸä»|÷[FO…ýÑ{‰ji¾3W§¸ò^GìÆW	¶\ñÿ­|€c€ ’Ï26Œ³@åëûÉU®|°RùvŸžæ;Î�ž’r·mÝ×|QÙâñ$?czâµ£àyI¶+ÉwIq€ô ¼†¨œdO–l…LÁëÆ/³ù\½øÁÕÑõ’·_|Uðy­×j³&ËÏ¦Ouåžrá“y¾#Q;~’}å�bä;ÿdF~ô¯}äÿNÖúA©†Æ´Ìng$xÍWÙ¦¶ÙëÂøÕñÔ”F �B |\3)
+ÉÄ˜€ú!Íp]‰Õºz1�•MbÇ¬:Öä›2Rõ,ð]æÕÅr;÷¹ZQA+s\¢_gcEÑa�Eº9¯ÖˆiE\2UÇúù¦_Î©k¿"gÇü�çz³2Q~BéµãÞ�£ôi�|ÛÖÊ[fŸ˜ðoÌõT”ŸæˆµÂGGñUJO�ïõ¢7xÖoƒì (Z·–Ÿ  0~ÃÀ±oE¯²åÃ¶uW?ßqnÍóÓ|—ïÞTkîÉƒ5ƒàšJñú,;½Öøy8,ôF^·öêåÅWW«_T
+È€íã ÔZ×Ÿô/wœ_¥éy¹Úê¹?¨ÔçÝjoø±Zùïl;/µ­ßp>ŠâgØÖÝY~j˜<wjüïÓ„€•ö½ä¹5ç›™ÞRt¾g¬D/ßP}éÑÞ×Šr_?ßá²ŽÍ—YCµ57ÂbÙ’
+8 Ô¦‡6òóbR3÷8}d
+¯(ÃÉÇék.Ì(Dp4‡ž[àû“ðL×ÎÓ·'à™dÇê¸k/½-üMwuè·E<!ƒ«#XPpqLS*±PaÅ=ïc#ƒ8 ãcl{JQ�—õã)¬®çOJLZær` T9‹�(°Èá�^>SàÌŒW’Ç—ÒkÝû†ù pù‚¦ƒÜ3=#X�³�(ºß|®¼×bsšJ­äY“Þ�¸UÑ�^©ÉóÿÃ#fÃøÆ³~™ªÓ\ëWRî†W»Ö¯ù¶üírÿ«õÂ‡û¶aðvMu×ú…Ök¸%wgùéœ- bê:?ÀÞðƒœµ´i.Gos¿@íøeûçQ~ZÉ¾E™ñaöTM®Ãc=íð%†Y+=Õb™&á°á�¬µFl¶1žSAFý2®‹¨«!‘Xˆ©=¢}Ë1ÍM²g&Ô:JŸg ëpÁ#0Ê�©
+î,ãV9�‘àõé@	7Î››mlfÔÚÂ¯\6»$ÒžžQ@ ZÓ¢ÜÕ¨)¯p/6ÑP‚[å‚ ]6˜Ë™‹E`ˆ>è
+Ð Dä1]’ÇrSF0Ó^¾ÖãQK	"ã3§,V»ª©Hç”Õ¸• ·ídÛ}Þu•ƒ·K¢mH:|a1=ÁeH e1;Pk‰€!ib à°¤,UT3d1Œ#½¦§l�<¥¬ÈdI,qŒ"5m±�'¤fZ²–'ï¦—Õ½,ù`’]¨M#Q§ì›RÛºß²~ß|TðyÆºžûƒ0zy’ï,º7EÉ%ŒïóB,ãjµ>ˆ¯”â`�\!X;Õ›=y—kß&WéS\ù�-Ñz‚È|>Q;]y�6cI¾Q…ùé5÷ËD–ïþp¾ ,ù‚–bOœ^æ»JÎGé…®u�-¶äƒiv®Òaz)gÝLo¬æ§¿5žùc²VÕý“W/jæ¬•ý¥î~tt¤(ua‚ƒ•PO€ß7ÇŠ¸Ögu&tH¢[a“rœmO¨»¢’¡Ž3Ê(0°],YH%Ö,â†®Î4¤±IZæQCª)A‘^Í›KæaEB‚‹ SbÝ”(# é	Žy™MÄ<CÃ@õòM¦hÝ Sî-¹)ü[”Ÿ“ëµ‚u,>ï‹# ÆûÇí{ñK,6Jòí½ô"É:ï?FñK{Ée®uŸ!_òeCvÍûÌxéMœu´ž
+â—
+¾èyßn?)øbD/g|Å/FLõwk½fiþ�yœÏÛâ)Ú®G|Ÿ    IDATûs�ƒecµ«G}ÉøJšzƒáßÊ�D<�a¾ÞqgÛºH”+·NNßÀù|ž‚=Ïþ™_{ý—K±€Âè9R>æF†*Íúß·ÚWÁhôtÉ·Ø2ç‹Žü}®7Zbÿ¸÷å~ôF†y7;Íçž8ªÍ™iôµ±Ybˆ•°j¡]åî	òœ„ôÀÌ#ð<a/ØG×3°Ø#Ø§!*À¶Žva_î˜£o”á”zÜÆÁ~œ>4…/ŒàÐz~E�îïÓƒ1Íwèw!M`%¦ 1_:¬³D?9n~0 ývr‘1ÙÐt¨Ž;C–¹@ ‡�Õw´U›td¼ãiÍa	‚±Y—£šMÖ”xžêéPšîWCµ>Öc©iŒò3=‘éñL¯ •ÑáÕ½ô‰­äùA~ö´ÿo¾ó]ešQv¾`½¢u_šŸhÒü¬’û•m'üM�^ž©ÍQzIkðY×º�áÀ±o[êßTr¿$ÏÏò³RuR³~u˜<7U§åzk˜¼ ×2ub²4ü—ÕÞM£ðÍÝä%íèÍ£ìiS…Ý/¥ê¤0»ÀåÇ2½©`ÝM s½Ö�œ8]õúØ”µq9=µ(Z._UÄdí1¶¹­{#ãÐz¹¡E»‡°?€#móÛ€ÈØ)¬>`ÞxŒ¾¸ßÃâ|×†	ÖTð,Îýèˆ¹Q‚{Ø|®C�”pcN·�gÈ"�hm¬áö�ü]A��—qìžìß-�-@L#\‰2&êëª�%Ù„}T‘9–§ÛLÙHq^-.¤$ë-æÕ^¾¶(zë#@C†ëÚï¿+\­±F•&rPxô»(
+Œ "_‰IHD†ëjdJCµÕe 1³ïŸM›‹JbÙf‘ÍR†4¯‹éY‚µ—³©^¾Åa- (ó‘¢ 51^¼fªðñŠóSÄˆ1È�ÞæŠGg‡EÔEï³†Š5ÿãÆÔU´žßK }ïëIö¤åî÷ ò’÷Å\�h‰½’ïŸëÜÞ\«Ôæ4;§Tø´çü˜È±åCa~
+€TzM³þ·•W–ýŒ©Kq”óÕVt5Ã ½Ö¶î­ßgñCÅweêDe¦“ôI<Îº’ïÒg¶F1d×ýi=éÛ·jÓ<Üý~’>i~ðŸ¹ÞZ/½£ä}1Óã–Øé±?vµ1ûSÏŸ]±Yëùxm
+��¥Í
+pØÔ�÷a�õ!d kÓ§(9!Æ´Ú‡E\Ï@ôLËÆB@+ú),,p|?™!(â`,–¸	ÈÔE�9|Ø×u�%.o{L‡zÆœ_v²ÍŠÐ˜õ‘ñ½Ña}›‰œÜ4†ùf‡wc½N›¦Åç"µC°�25GŽôæñÂ‡Žru²¡r½ø¾4?×·’æçÜop)÷ñKënÛ¾7Š_Â0CLÊ¥oÃWªéÜNó3tÞtì_q\ëR¿ÐsnF’ôÉˆÇ„„8:‰ó­§=ï`ŸUiü6O	 Œvkã³i^!J“²ã†d@Ú¿˜8Îãá¨Æ0Ö¦Q(
+‚‹Uó¬˜ç'mq4Š¯0f"HŸY°ÿ‡afrëÓçp*ÓTäÌ”ÿž�‰ÕvˆMaÜy01SËbb Ü[1û-,–Ùd·57Ù0VÁÓúsð­V5³ðÓÍðŠœäÀ”Ó üÜàÂ4€©À>¬«á™ÇÌ7<XWÃ'tà® ö¯Å+{ô@…mïÒ<×‚ê{‚‡ë*lÃœþŸ”d�¯	MÏÅÆZ+«Š!€jKç´n¨Ç&­ÀFSä†cŽ í|Âç!Cßa#Oì�ôºH�¦I4ìûFj£«îüj˜ï(ÈÝ¡Úá‰ýÍêK¹žqÅá²ýãÕèÍJ�RõoHóS%[™¨?¿\ün^‰ ”^ÏáŽ ºb¬ü&[îö¬ÛØ£ðuŽÜkËß
+Öqœ[“ôâ$=Ý@¡Z¸>J/Uf¢ì&JŸ©ôú²ûmÁW�O3=råÃEç{«ÁµFo¨úŸLÕéˆùtãÉò ½ŒÀÊÍ´€N7ynÓ¹Õæ"uó‡ej2–Ë mŽÆB82†ghï
+Ü*¡ìáºyº‰ƒmCs/Y¢ Ó</�%×eÐÚÈ^5¢C1µ&ðâ®7 #X©³Ó\,Ú8%Á�hû\ˆ2¯±˜¢Mâ‚Ød3VÁaÃ"ãü	û QÙBtyd!5ìûúÙö¾4y=#Ëf1d†mv�gz2ÒõW.(ã$¦ì1ò°PËDr¤Nb |q@S¹À€,1Þé×ä‚ÍFjs]>NTl8w9—¯JLêÎÏ†Ù=Î$&‘®Û, à‰±6¹�¦z:P3žz¼êqŸg[E/‹Y Ù�_T”ÚrO®6•œ"ð²<¤©6^øx’�Tp­ÛÒüÌFýz¤6QÁs¿/ÅÁ,;7H/-Ø·ÚòfÉÝDÅ$¿`¬t�¡1­'¤8@TëÿPp~€{bŸ”{Ä`ô†‚û] 0¦Šé³… ªŠ÷ŸŒ…AüÇºW›ÉJñz†¹mÝïY¿@T¹:q”^T°~ã;7ªYò¥¶&êÌ†÷¥D�]²Á04¦Þ½¿îN›ªÍF?Î¾ñGe­ïøSÍüúOü™³Ö¿Ø92†þ‹ÛèÖÙV�~ŸŽYX,Ã	1­:0€­H(g4dÀ%ú6VFtÄÆê4{bD+1ô}¬`Ìöéˆ�Ôcžc`6_QWƒÞêd©‘1õy‡³¶ÍV @‘\Ì&�gR˜¥z£Ï5"Zl„ ey�³Q¬Ç3Æ0w–ê5Uû‹/ F‘nùI$gm‡urµmuôMåuÍíiþe&’ì|e²5ú˜e=ÊY›Èm÷?Gd¼/ÙòA­Á³ÿ‡È¶­»Œï�‹¡Rë•ÚR¯}A›ñ4;§R½ƒs@„8}j’žkL‘ lëÞÎòL–®ÓšÍl»+OÀhÈRàb•	†¶Rö;­§µZ¯a8ð�xÞ] à»ßÑz�çÝ�˜yÞ�¹:Y›	CÅñêUÆÔFé³ÊÞ�ˆ#Ä$Ñ3±:I‘k±¨½n1|SjJ©)o+~>Qër#r.Ëfà`MS~@c�ù “e<5¥Õ”ÚUØ¹ÿÁ‚ú	ðÆ=ÜàÂØªÀ)eÜéÂT½ž¼H?*âI=ømƒ:ž»_~„>·‘¿Ø�vq:€#$h¶g�³'˜EýØ”˜ À‘ntóµ¹ÈÍîvvò„†årLª®ª¸,Ì	 Ÿ�]s ÀÐdf¼(�•ÅþVrÉtñƒKÉ%ÚøˆÉñÖƒœ¯ÄùŽ {zÕþ ïïª¯elÇ—‡/fØ¯Õ>ÒO®^Ù¬¼LÊåaôZ.f9_ˆÓ§¸ö/”žàv½¢è}Qqh=íÙ·–œ¯wƒž{‰!;S§ Ë_”âñ(}j˜^Vu¾IdõÂwVý�	ìö‡×¯Ž>Â0n–þn¨6÷¢«§ÿjËGûÙ™_–¬ã±„cžÐÿs¿¯“;ICîÂéáú)|îfþ²yú6/‚YÃÃtƒ„Ê>{{[Dó‹ðcÖÚ81¢ãâ2n'0GÍM>–s67*R6> #ÄÀÌÎ÷Í°­;Q¢=Ð	G±š³¥¬È1í›N;Û
+ +ºŸ?5ÎBr^Fb�tÇì{;¦m±AA·òcR6Ë°�W-6Hˆ/«°(–ùä@»4Ôî±äô‘®tÕ ¨B]ie[W“s\ÖálØ×²—îÒd¯ä2Ò“©©ÎE/NL¡fÝ¡ÉêêDà° 8,ïg;ƒ‹M+o¦$æóX“Wä«ý|]OyX7yÉ±Á¿Æú„•ð‚Oô6Žý¥ÑRµ=Î.âà ¹2Ï ÌÑë³lW’^¤M­^¸¾Qÿh®7õÃklû�mß)ùÁ4?{”<[Š#ÃèMD‚j‡ÿ(Ä±ré£JmÆ¯ðìŸ·ÿ~¼ó›4?“³†qšíbÂ¿O³³\ë—œ-’ÅÉåÆÔ“ô¼8}z˜<G›É†ÿo�êÓì¬QüB)÷ÙÖ½6ßŸëõ¶xX›Æ ya–ï�|yaô>Á—ª…Oü±s¤þSÏŸ¿¹ûKí#ßŒe6A@6òÀÄ	4¤ ÂÜ&~~J¦oæ‹l¢kù8•S Ðàh&¢%	%«-�±%5gc¥ÄJ³Ì@±f!LB@F å ôY·iï^H¶7d{%¯Ù(Ê¢·œyfuLoBëÖ½Ã|gK9ÓÖÇ@°ž!AEjKÃûj¦¶Zâ0g«ƒäyª`ÿ*ÊÎgÚb�2 èˆßGÙ…‚/Y|¿mÝ£ô¦ré+�Þ{<çGƒðm•Â³ì¬4?“óå0½¨VøX±x[œ9ŒÞ8Vy5ãÀ8��4Y‹˜–ë+y–Æü¡zt<?ÉR°l’ @Ú‹BŽ„ ËcÀ-Ã`âè!w\HÐºfôx”<§Tø¸_T£As¾µR¼ž@fÙN¢BšïÀ¢ÿ¹$½Ð�æêÄ(½8ÊÏ@†1BfÀ‹ÕFE¾ÍÚóé¸Ïlà0•±¢ç-,Í™ñ êÓƒâæX6�7á¢ìaÖƒ)S€­Søì}t]Î,àÖÝW€­ lœ]¸bn“X)ÀæZ"&}œ^4?gOq¡¢ K¨ß§GšìÜˆ–Ë¸‘1`šT‡ö–q :è# e¡å³¬¥ò"ó;fÕÃê˜HFºXà‘Ã–Gjí´ÿ¥nrÇp¤f,–¸|Þæs¶ØÛO.oø7dùÁç—Â¿sØ* Ø|Ö³îæ¬EdiªéÅŽØíZ÷*€1ÎÚŽýË~ðn×ºs_eñc’´å#–|0¢×4ïïõ®dl&ÏlAÊ}–Ø&Ïu¬{ûŽ8y&c+Ëƒ/
+Ö Ž#GþŽ³v®7¶£Wûb�¢ªÅæ”3àhSTä»âðJrŽÃ’®æŽ}M¸@† óz÷ZqJO�†t$¤£ hcÃ†±£ô¹œË€wàÎ¾¸C÷Ç0»_µ›Þy¾?€Ãcø„Yó½q|J�­ï›%�vFA�Íä l´3,`‘#"@Bº&’@ûy46ã{²wÚ›zjÒ•E¸ª¬
+ã«z´Ö¢@W4aE´‡ªQ-"±�[FÚ/ò°­¬yd”¯€œ¸Ç
+‘†ªêó€c„)+ò±@m®Z¿y8ØyŠt1y¢…† Šb¹“OýáUÓÖb Öh`3iÍr³ê¸ŒGºRà£®ò\Æ*âØ@­ÓÄJ¢�“Ç@°‘.¬õ¾ ,±o˜\6V|/‚Jò'½ckíÅýðÍšJëöjéWzßªøŸj�>0]joø¡Zåš xeªv–¼ÿ`¬³ÔûþxùuÃèõ÷[­áÇ&*/M³'°\mâ�1MÎg��ƒ3&ÅÆ†aü¢zõŸÒdÛ±Îí[&§ZÝ/	¾�ª“ÊÞ»Á5™™š,¿&ˆ¯ÌÍL£øŽ0ya�>£Q|cÝÙîÏ¦Ë/ï‡oòS=ñxÉýN®7SÈôf[ìÏô†×/ûcúÈlîO5skæ¯}äÿŽd)Å#³¢ˆ˜ƒå†œ° ¬ Zæq34‹%\?¤#REiŸäÇ´2ÁOp°¬ E@Eèa#§@õè‘íóuL«ÊE
+£)™�&R$]–´Ó)%©©
+à>‹[yi[áf†°V2z5=¿dýnLÄD’Àj§»ˆ¬ÔL¬‡=ûgšJÆˆ\‹-,¥g ¤½ìŒav¦-,¹_HÕ6CÕ±ÊkT¦·•ë7ƒÁ+3µÀX|ÿ(|“e=05ùÁfÇ+Wq¶8<·Rû}¥ðÑ?ü_ÃÁZA¡<ëz+^´•"p½á‡-zýk¤ýÎ†bâx#›1iŠ`ût ÏÑqw\ƒIÇ…ÆTWÊ}c�KK�cõÉUßý`6
+®æ¬�¼¯8ÖÝ…b[ëæö—VÓ3VÒÓGùÁ:½ìŒ’uÏP{±_ïbHÓË‰K–+ˆlôJ¸]Bñ8}¥ŽçÎà•’\P€-óðýI|N­ Fp`ž5†OZ¡[|ØRÆ<žQ?‡A	¶-Ð÷Ø>!‚¹E°t@ D`d“�€ ˜À�ÈD6ÎN•èÖx‘€Úæ 	 E‚WD'ºKÓÖbOùËíÅzÂbq;~! ÕŒÅ’²ü}Õýr®Ç“ü4 &ù‘D�€�¹ß®¸ß)Û7hmê1ålµî¼Rø$ 1Ûá[Î‰†=cÊ¦Ÿ8Ñx‰kÿ:ÍÏì�®Íóí’žÎùR’�k‰GJÅ�T«ßÉÕV¢b–ŸÂdùÉƒº÷¯Uï†‚}g]"€qì5½[)Ù? †ÁRº ”!Ÿ!¥d¯sö…š{(êÍë‡SÒŒ­¨%y}QÆ“ôH³La·‚h_¬ èÈ{vÏÂþì
+áèùd 8‘¿²ÆÖ!@�Mvéá_ç0tÐ*°ÄE?¤04iFÆcLâhd‚�Z§ÉÚ*v­äÍºœoÚGˆz:oò¢ÀQMA€ÜÆ�û"]‹MÙA/Òþ–â§8dkíÃ5¹ŸÈ*ˆ…ŽN+bIbÔ×‡-ø<LŒèjJG£‘.³],w%ybU,×¬‡'œŸ•7&RŽqÍzšö�5‘jMlê6³#SÞTü$ LÛû«ò þÿØûîwM«êìµvyúó¶ó¾§Ÿé3ÌÐ¥
+(APH4¨�c4Š1ÔDƒšÏ˜hŒÉ±Æ® Q°"¤H†*Ó˜~æÌœþö§?{ïõý@þ ¯ËË’ÏûZÂÞë¾Öºï}oòz:¯ˆŽ±€| +6[qYq,y¹!;-ÎwåÓã~òf"gÆÿò y½äÇþ?»ö�Ýá�ˆy{øÑŠóCÎØ ŠÞ`Y� ¦¥Þ”dÈY?/Ï™»žÈ];~¡Òk,ùÄjü¾zõï´³åÃqv¥m?P”§äÅù :Î®bÿ0¿,Ž/g¬7|"Šþ4ô¾x_o¼  ºûUUñ¾hñýQz-‘eñ£Iþâ(½–aZ”g�5^¾y|Ò³î/ÔŽÝNvM#¸±P›\ùÈoÚˆé·®ßë‘¿#=ò|öA	N
++ø„Ä=ëâhB+!Î$Ôõp,dÍ
+vm‚ƒíàHN±‡£]Úß`3sæÆrˆZ|<ƒ²Ž›<œ´‘G;Xé˜££Â-)t™é`[¨$Ú]�‡\(�÷ËS}Þ^TaA‚Sf‚£BÔ‘š¬[;5=äçås=kûbr�ÅbMõéà“…:©bí°Åq[ìVzc\ž'XÇµîÕzÚ¶vDÙÕ 6g‹‚KóKk»ïÝÜþ�.3Ç¾·}TëIÄ’Ô<`Éy”¦á/’äRÛ:˜¥a‘Ž�•‹…8ã3¿(RÃ¥y’r®óÌbh9`4ØÄC Æ@HˆÀ£~w£)»Ò†áà<£A òŽ1•4»Ü÷¾­ÍDš¿Ä–O&ùËÊ<|®ÿÇŒa:]½ÞgQÕ•;åy@A¬+™'�<‰Õ®ŽÙÜ†ò¼à})†Ã6´J‚Â…Éƒð…Q¸`_-¡Áþ8¸*‡e�‹Sn9D7ù°!�£u<«O¿æP!P>¬�çhbC:ÎÐ&Ð½ôqªCOH¬0Dõ=¬,ëYëT\fk€¶YYk% n¤':*�È-4Àá�Us˜–,b ˆ ‰BkPž–SÕB2Tá¬‹XJ>—–ç9òé¸|Ç˜È!ªäêÌ8{™2“–ØéÊ�’Ïð~òÖñæŸ eYvR”\ËÙ<b>Úºhµ¿Còc‚/pÖ1f@�iøqþ’Fõ†"ßjLƒ³ãËBÌ¦ù%–Øç— ¡z\\èZ�tÓ×dzƒ+y,Ñäq¯'N¹·�ôÕZM€ˆìiQS`7÷H¬ ;‡…Ú 4ßiÁE>n`hiH}Ü¸w†pâžRcJÈ+°µoRƒˆV¸@±jÕq[ÈxOgH Õ7Ý„–$zÚ3P÷˜ÅBjªÈ€Y,[,&]¦Ü–ì¥&py¯0u›¥«Ú	¸
+åî¾Z']–EåYŒ•™-MÑôÔd•“/ŽÔú€÷YO5S0ê�	,d6SžÜ—™IDLtÅå½Åü<‡¥¼ºXÊLÍæ½ÂŒYlˆ€?îËýµ‘:,‹Ê³‹=Y˜Ge¡ˆƒýrKn¼€°§*1%Ö–QùT?Ñ‹ß®Ì¸!?Q§ØüèÂðã®ØëÛ?k½?Ž/³­G?žÞÍ�ÿ_‚íëEïwä ÔŠe9ÍX»}h$ø?JÍê4 W°y¢0W§zƒB›1Ž�Àù…eíèGï+ô6 d¯÷íŸm?àÉÇ\ûî$¿LŠÃššRìOóK*Þ*á¿1H:É_Õœz“R[Òübe¦ëáÕøÝMÿsZOgêtÄâÖìÇ¿‰ù¡·˜ßª>öÙßë‘¿Ì›ŸI”!Î8t•ëãd‡žÌa¹G{©„VŽ™_Ød(šìd%G+¡¥–$T:fÖÇéE³3„>sRZ˜×ûúæHDm­#jO‹�õM´Nœp0/`U' Ð3í¡Á‚hƒ»Iw‰03�Ï—:h¹ŒM¹¿¨[ä+òšLOç¦î±•’BMá|ü–ª|Ú»r=½ý]TžŸ”g9rÇRôÑ´<g,¼A›ÆÓKG8ŸO²+Ãì³âùÆ4G›ïíÅïÌóç‡Þ—‚à¿”Ú ù>Î�5›_õüe it�óÅ"·­‡U	B+h¯œW­ße9P–°:ßL#ÈRè,ùµÑ\kŸG„ÃûÞk¹P@F$‘Wæ@ƒþf­¡È ¬¬Ž‚Ñ ÅNÆ—«õý–‚–boYžRªm‚Ïj3
+ÀJµ±ÿe+ü€-+õÔBï›qq~ÕùÞbò¶Qç§SÎ‹_'5ŽYA@=sLAÖb­9óýf	Ê1|ÉZü“–ºðh
+*“p)—€›¶à»&ðÊöú¸±‰  tb:ô\þ/7YÐØÄ^—Âñ’¬vô¼‚$‡Î¢¹ÓÅ†ãÂXN½ 6”C:�yf‚¯_1{¦ì�„ %;jb:¸)3ÆF‘™œcáñå¾šhˆìpÑQäe&l¹·´‚OhScXúb6Ñ¼4’-DÅmù( Xü€¡Š+v–f†³¶!7SÛZµ7"”�ø]­æ§,kçG0Š®_óh©N’ü€%Ÿ
+ü¯GÃ³¢äõõàï—£¿Ô¥ÚÚùçúÈ=ÚŒs>—•'k5SªÍœO‹ÚÖcˆ¹äû¹Ž|€	>››iCÕ¦ÿ)Žébzùˆÿ®Ø/pÈ�å9S•wÂ„bŽ2èig^?9Í.™¥o(#Ú?É.m²çÈ×ãŸÈÖ±KRš-hUSÆÁpjÎü¬c¸0icEC V]ô �æsÔ.º=s�\¬¬›,t²[eX•‡Úåô>u�…ØleÜZrùBËÚ�›ÊÖÆŸÄz²$¿ ÐEéðƒýâ¬1ûq‹•’J²5Ù•'æŒDS•O3LúFe¦Ê1¶ÐLÙ«©&ŸY–é‘P>¹šŸ#0%‚ªX²ø±Qk§Å—ÖÓU¶Œ\™¨5¹©æ¦nñc+ÅÙƒâìQûÉ”ÅŠ¬Ò„ àñ ¨ËÇH`14YbBÁ†ƒi+qÅþ‘àãŸÏÕÖÅÞWçó³,>+ù±P>Dä4Ý¯r³âù½Þuë6}¤Ýÿ¬Òk ¸�°°ò­þð=ÍÚ_¸öÝœµ£ôÕZOfù €³K>êº÷Ùò±Aúªaö
+Îç$?0Þ øB=üp©N”ò×yþ¼…øm®ug«ž¼Ÿ±îxåíLëñõë^¹4üDQžN¦bÈGLæWï¦¯«¼“³%ÎzYyæ0¿A9’­ºö�žó[ìä—Áÿ7ø_Ë‘nÉ() 
+—Èútp=¿DCîã‰~‹¬Y2OöÍÑEóˆ‹c  !–0°±ºJ;x†=Ó³aÄÁ‘úlvÍâ(ÛVq+z0*Æ-4\QQa�QÙî™…éÆ)á— m=,"`+KÝâyóÙ ÈåsC-%ö3ã)rW•”l%G‹²òŒžšñÅÞ\·ëž$¿8QÓ@r�¾Ž³î–úkF†|CžoÝ=Roœ¿xaåË#•÷ô’?·íDÀXß¶Òzr8ØÜéü±ÖÓ–Ý‹ÓWJk0çÚý³lð¼‡ˆ@—Å¯wœÕRmñBÐz
+t	é �ÃÌºO’U�åzIc²„Õ›û-zÝ—Y”9,{˜çÅCž“çÇé5–µCéi)0¶“79Öýž}{Qž¤M£—_æÉG+Î�Òâ¹†HÆz}¬¶Ì·Ø~fj•%$Žéðõã	|™“+tŸã	Ì×àL¾#´Çð²Žôèñmð¾!:NÿéÁúæmKá�) sÄüÂÃu=£`xŒîªÂ‰}–@›� 0.N:`a@ÂÁs±îÃ´�Òf…�SGóFO§ªMÖhfòÝƒ?¯pÍÖ:‡�Žš¨ËÙXû­jÕúUMîOÊ3W¢÷Ej+BéÉÇrÕß{ �³…´<×–Ofå©™:Ñ�%å®õ«Ðþ‰ó¡ûõŠóƒå•&éËmkûdë*¥×=øç¾÷Æ†‹Ý›ûƒ÷Úö£Ý°    IDAT�Sœ½bªþŠ°òTè6Ëì~÷¤¼x.bÚð?3LÞ lk; py~�çþ(W§z£`‹…:¥fÿLòƒ‚­ûkrÿÂðŸRµÅâG¦½[Jê}É ltŽU;tG «ã–úÕ|KƒÍTp[L‹zÒ†qM©�¢O+Kð_n©ãéø²%z`Š]Ú¥G	Œ@{Œoˆh�ƒˆià0jp×aù²Ê9âZ±%&e¡ty;`¬]Ö àCî¨µÿ4ë,Ý”‡»åVMÎJ±ñh¾YbÒMÞ6ÔÜåK_ª‹ù•ìâž¶ûåÉDŒ¡±wäÆ˜¦zÒ‡ëÖÓ‹åü¼µöA—õ»å	6K~8äË«ÅYˆƒÊÔGíûtÍÚ]˜°�ÿ�¢j»8y!;•cÑŽ>ÇåË_\É/nZOv”ß/NG0¼n=•G`V˜ºËˆ¥ü9®±]·‹M6Ÿ“üÈjô!C–gÝÛ>º)üŒ2#‚-°^örÁ�òKŽÇïˆ³—E] à®s»ï|¿Ý¹a¢õš¤¸¨,OÍŠç…Á·Gªïˆ‹K,ù„ëîjTÞ­Ô¦¥ö·ôhíÏFÂ³üEÚŒ cíaü[îÐzÂqîÜÐx…Ò3¶µ Wûÿ&Ä¡¬xÞñÁ§£^àËJO¹îm¡ó½Îðï'WDÅó•ž ß¹¥ê}>°îl>ð¾Úª¼'Ë_4×ù	ÃáhðÑß{vþÇ{v®g ¨±zBEl–C6î3¾¢ÛÜíªà&JSÖ¦íSì%ÚÃJß,f°êã¤eH(0ƒ àû8‘Q�ƒÍÑ*hÐâë2*$HŸ™È –P,ÐrÐòYv\Eì:*MB@AÚeŒƒ‰V¸Ò$<ÞöÄACN®'$k#˜ÒŒ jí‰�…^+ù zÖ}Ú4FDžçÜšæ—#F…:Ù»?âÚw¬ô?WóÿÍ˜ªàGÕˆ|"§P'J¾Ï²v¤ÙUaðÏEqv­±C+@€² & ŒC@Ä=_ç)È€åc@ *¿I€ ,Àñ  †=aÙJXðìÁ!IÜ"pŠâ)v
+¹�sJ’p¶hÙ{µŒ©ÅyÚ4Œ©+3Y¨M¥™Òò�¸<[QM“m³¥TÏ$:¬É¹n9Ó3 ÐPøXß©?cAÝÅiE±‚Á vI¨Ú0ZÃç£ï:0åÃF›sô±3\¦·ðWÏ›9­Œ²çEt4ƒE~B‡·‰×vÍòªÙâ¥!ß ž³_=@ÜÂ@¦´L ¦øIm³@6Fx9[v|l�É¬§«ÏÞ—
+Ï01ŽÏ2Eb`€«p=~øØðÃ¾8æ‰'3uÂrqòŒ÷ãTm¬û
+½>U›3Ý¬Y�p„²â~§P'jãXý�£ä…:etäÍKí/æjÛHð‘0ü¯8>€ùžw·*ƒ¢8—‹#iö²ÀÿBwð±ÐýúØÌ“Ç�¼Üq~æ8Y–V»ÃGGÞi4dùÙqvM®NöíŸj=N`{Îmyq^’¿¨U¿n¹{³oÿœaoaø�©n5í»_HÊ3¹±ZS³v,e0¤œXbbÝ}úÛu<s³µæÁüSx•Õ‡]ªì>=•Â±¼ÖÃÖAó¥5øš<ÓÄ3r6ùd×¬(Jkl:§l„Ûñ‚tÀ(ÇS=–{`2—90ä= œ-Ë	QÅ¬`««ù¹-û¡CéÙ5”kÜþu¦f"SkÈý“¹ìÔ1k~ ¦\6ì(ÚÞëu¹ñ|¾ª(¨ÊGSµ93�ŠÜãÉ‡ÚÙ+'‚?Óû7‡ˆÃx4_?.‡ž8 °`f“ËÇìý±ZCÀrc�9ÛSµ~¨[#òDu,Ûæ2æóŽ&§­ì{ÿPmÌŒU�ÂëáD� XÏ—Ot²—h�þ¿>Ó¯Ï•!6å�c§“][³âÙ?ëÄï©8ß�~¬îÜçX|NSµbßVèùl›ê>¸ß‰Òk+þgóâ‚AúÚñú5ƒøíyyZ«~]’¾BŠý¥Úúß*Ê-½è}�óíJå®¹ÅpÖæ8½/h3UªÍ ú7õ†®Ÿ˜[}0°ïTzÒûÓòœÐ¹e�¾¦|L©-½ô�¡ýã¸xQèÜœ—gòK¦ê×®þ1U›êÎ�÷»ZOæêÏþiV\¸_ßò>ÿÚÎ‡~ÏN¶÷·mæÎÖßgšÿn8òÝ,ª0?%5"²H °OÝv²|Y[ÇL‡žÁç,ÓCSì¢
+“Kz9¦ãÜ††‡Í>®³M=sØÃ1¦ c rêqp"s bÀ(H‡4;ÊN­s�{U/nsÛ»Óºƒ5�ÂGk`Ò�¹�À²$Ë@FÊBQå}D�êšÄ<2î¨µ/ÓØ°ïîåÏ¯X�—zœ³>ÃŒaÌ±«©âÈ'–ã¿lºÿQ	þ¥(Î¤23þŠãKß�ü(g+DÒ’»#!9d*¥Þ,øÑRmF(\çvd}D`âø%µúÏÓÄf,÷+�Áq¡(@„*cÀr ³4Qi,MÈ#HzÐÚ«‡€Ð
+�@ˆ@+0²lÊ’Ç³üdÎVÓ¼8GˆY “¤×xîzÑ{l±[Š]ýäÏm±3).´¦±ù:0ƒ$´úU¦ÞÖéÎyfÙ_ýo Æ&éÐ^Â@Ù¥GÐ†Ñ.ìhÀù+pW.Z†;8·…¨*œ<„)›aW"ðí,¨�Áü^þl(L��­èƒ,�ÕæFð,C…Ä OûØ|”m]2»|œÔ”ÇpÔ‚†‡c6zŠ9ýÄyâ’*[Â‰5gˆ  ‘£†‹¾¸˜oq™æ¨\¾ëI�/Yl…a¤L‹€ÅjÍˆ}�2ÏzX›Z®Nœ¨_Ó�ßeËÇ�i´“¿°ùÁVåú4¿4ð¿ÐîÝ4Ö¼®×¿¾VýL–�„˜j½FŠ½ˆ²È²�:�ëmùcmi=“e/ü°³È I.ã|n¿½âß¤ÔÇ¾»T'Fé«GGþ²×³û‹ò”^ú§¬î~q˜]íÈ'—’76�-¥W·œŸGåÙD<Ñ#‰áMh£*HìQ· ',¨÷igGlÃ‹sè¶é�·ÖðÄ„GÙIÙ¯ÕM§‹?/‰BžSý„§ùiÀa™Å¢ã…ç1ÏAÍ±äXtUPá…/æúåÆÈ4@‘7ì;ÚÙ¥ˆ†�JL¥"ŽòÑ¸<#R“ˆð¹TOŒ8w Ã^\ž‡ \±s.¹:%5&{’uv%_8–\åñÈãG•©swË�¾èÊ½ƒâìg;ÔÄ*0‰®{¼Ÿêj(Ž{bWª¶ÕZŽÊáíD�6¬í“³¶…?2È]¹ûXòÒ„ŠQ‘K6Ø],NòY)1,ÒäáP×>ôÄO>ÚË.WäŽ8?œ[¢ì“Bo$²
+3îŠ½Žx²Ð[r½žaRs¿†ßåöÛ¿q|swðnßý®mŸ]¼Ÿ³ÞhõO¥\)ŠµÝèCFð£¶|TéiÛz¤;ü[ß¹-¾Ùë¿¿—¾F“;V¹Á¶HÒW"f¥ÚèÚ¿ì%oõ¬_
+6ed‰gÒò|É�†î×8[<ÒþåÚ‘/÷?×ðÿÉ±ï>¸¼¦þªRms¬»ãìš(¿Â�cñ9Á¯ë½å7âÈ=¿5Gnû½¯õw½úž¡Y:V«úøQ½cÏéébHGc:æÀY�-ÅGÔÓõh"pGQÅõD†�(hàbPg£V×�2ä¹¡rÂJ
+j*hõÌQE’ |¼Sž8Æ'¤u5yT ”¨1E22eU,�Z»š"iÉÃ’õø|¥éülcð%òÅ—/YüÀdøQOþŠ@	CNiF½†@Æù‹*ÖCIy¾RëSWn.©x_ÉÕ)ŽýK@rÝŸq¶R–'‘©¦ù‹«Õ[‚ða×¾½Þ¸ÙõúZÏ„5p|˜Úðs£!¬æ¶Ò†‘ipB@üï×�~Ê  ‹!¬-ä	è¸.!^¯
+Â‚ú4�Û"(sÐ
+ò|¤Þ<n{ÀÙJX[2¦nYOVû]ïàäô'´n�5Þ,ÅnÁ�Ž5^î;·ûká«£ñ—~bmäö	<š-ÍŸöÙ’•lOZ¢;$T6°×&0ëãÆ N°qÔ@>Á^ÈÀâTá ²a”�à·ðùœ@ÏÑ·ªxòûCG&øF 8¬ïìÒcj.ŒqpÆñBC
+ Z$0>N8Ù7NkÊSìœ[g¡Û3G	àt·ÒÓ†š!@Ï¬®èÃ%aNiI|UÝr³Ã('±¤JEa(f-¶Œ 5U‡jƒÀþLøw¥i…ÎÏ tàü ×SYq�#6&Tf|MóÜfåÝÃôû{Ÿë×]Ç/FŒ³ìDÄ4Í^’ä/1äÓŒâ79&ñI¶õ�6cÝèƒd¤ëÞ#­Yd`´°íû‹ñÖ[É¾ÿCÄÌ÷Ò¦©5ØÖvcªDn+ü`¦gºé›ö%gùëê×‹ó9‰:Y7Ñ# Ð3‹%á¢>04Ø3]7Ð=LŸ [>lÌ`áý€@Wðdf|lTqƒ“Q1‰WÆ&_0Ou4ßæ¬6p«�ÊfeI–"gÊŠ 5l¨íåÖEâðUŽ›Å£²]™�ÜbCµ¯ÉnÙÛ#5q<¹ŠaæðA(ŽxrWEîÒ&Ô¦—Ïå-[»ù%[¯¹ÅVf©^_š±iïD¼_ž0|rµØTÇm>‡`FMkU¬H4’u4YC52í}S“Ý´ŠÔÄBv)¢²Ù0û=ñtUîÀ*—ƒüû+å†Nvñæêß68HÖØMôºç^ ÊL¥_N·Ü¯tT-àC›/	"«býjÄù1gÄ€‹VÜofz]Ãýr¦NXMßl‹§,vÜ»çˆ�çÁˆ÷ïQ|e5øÔJïÃáUgžoó}Œõób½6c�Ê Æ˜jš_<6þåaò¦ÐýŽëüL©¦¡êˆÿ)G²ˆ\Ä4Ê®½¯tãw7‚�ÅùKâü¥–xÆ’OO6_äÛ?üP¡N©;?ì?:5òÂÕè#½èƒë[gùRìNóKLÝû,g] •©m¿é®µümë÷zäï
+#¢WÃmm—�Ð�È]¬kP�ItXú5ÜlaU¢ŸÃr×,š‡#šÏ ×dÄ1õºf©oÚ!®‰hv@4í²>)«ôÐzkd”o  =gˆ–õJE,®‘"5ÖÙb…aN|hb ÜÜÒWc³ùENO­³Øõh7QT\0P{åÉD<S§.Eïm§êŠ�…ËôZ=Z}Û 8ß·ïo\YónbÓ× fI~…çýr´þª¢<5ð¾’¦—”j[^ž‹˜Î¬ÿ‡$:£Óy«�+q|:[³Á÷;¢h»š\ñ^xåûŠ‹^§JPô— î� 	ù Z!4Üš[ Ò&!‚°@+pë Û;4!éA™ƒ1 -˜ÜÜÎbö§+õ%D@LÉxÃî¨Q0è´JuÚ0úc¥6"ÆÃè]ƒä�bõŽ1ì.ØW^
+»Ÿß1¾ü?úÜãÛ^7Çl³ ú 0{¯Nàèó–q|é<ýÐÆ1=ŽWvh·„º�l‚]* T—0Dà6Özô»ÄúT	ƒes_‘"ªàhÏjà9Š§ú]ÚÓ¡G3X	qÆ‚ZLÇút°Æ&d}ØcaeÞ<–Ñ€ÈTÙL[/>“º1uT¸R`B‘”¤f¤èª8¢ˆ�Z{F¸?TCV¤N Ô©Z»¾öÆÀ¾CSÍ•OÍG-ùá¼<³á}#Ê^¹ß�1ŒÑ{†É«Á?L{ß�ÓWÏýWmÆ+áÃp7™ªëÜÁ°gÌh©¶J~HpªÔv`½ñÃFåýY~"äùiˆP”g•„á€1°í–Úß–V^äÕFxCœ¼²½//Ïå|)Î^æòÃ­àÆ5öê°xþ\ïkŠª#öÏCy?Ú,ÎIÔùDjÒ' ÂêœµìêMxý<ÝZR”]XÃ3Fñbé${®‹Í�YÔ R8hy8’C²NœVçôH:$0©á…‘=�9le¨ZSÎÃ>/F„Ë�iòtj‚H·¶\KC5™ª#ãÔxwÌû¦Åæ<ÞvXŠ jÖÝ›gGê„Lo@Ìc5ãˆ�cÖ®ŠõØc«_,��èe*Õ’l¡“¿xÔû¶Ã»ºŸæH.?˜›)†ÃÌ4åz›-|i¨ÖµŠN;»ªå~W²E—÷lÌLÝ¾“³aTž« àóÕH�:bSÎâÐ£Ý¿.IFj"7“åµ‹óGì{\ÞµX±kp=CôÅ¾TMJ¶\èµŒ[ŽòfÅ…ÃâÂÀº¿ÿÕxå= Ü•O2È´iùÎ�$?8ßþÅ0z)cØc¬#$ŒÖ_ëû·í:<ÏØê0~KwøQÁ�Fñ÷[�÷-ÎÚû?T¨-¶õ@’^#åª6#Œõm±w�¾Fë™´¸°ê}.É^:Þ¸Â˜š+4TÃ�b_ðž¼<»¿13TsåƒDîhåŽuÿÎÅ#�è=IvU'ùÁ–†Ù«-~Ø•�"høÿÿk9²§ë“b¤¯Xa3²!S�	ðk¸!…¥E³“£54óÓ\N¦5”UÜšÃj€­”RQÐÀÃžÓÐ@¾Eœ]BoÙìÞS>0Í.ë(»­�Ï©£M>Qß†ðHá)3�´^œ�F R»¬¿’¾ªŒeÆ
+x;RÛc;,%`�õ€Ãú-û.Ä²“?¯îÜJ$J3fÈš®½N›Ê¡öý6[ê¦¯ëô?9H_·:üdè~Gé5œµ—Ú_Zí}IðãYöâZýNÎç«áGmgÏ` K×¹­È·z­#zÃ$ZŒ�•îs»w„qö ¨Á³>" ‚á
+Ì>=„�Aº‡ �¡¿ ^ýÙÍ	tfAXÐœ8–ö!Ç‡ 
+Nq Áu�e1”ê$!�
+¹\ªf¥¾"ÅÎÀÿ.Äïôœÿ`fzëÍ7ˆ¥ûÎØñµ7´Ö/wòÉ…áµEl-(§Éšìˆ~$‚ƒz^7 Ýëðõ%u´3¡Cl¯PéÓÞ.mGà
+Þ^ó)Þ€fw—z8¾ž_5Âšmsì¸y8¥v“¯«àº”:.Ô\kc«‚ë-´-¬Tq£Íœ
+j#xFLŒ-›_q]sHCncU‚™ÄÂX"¸®`³%%éQ9`À‹u R|¾Ô´ö²–KÑ
+?à‹}óƒOò«Òâ¹’q~*Äá~ö
+ Öopø>†1Ãg‹¥Þ'×yö] Lòƒœ-féù\‚”»gà~§Z{¸Ö¸�ÀJÒ3{� è"Ç™¯Tî ‚aò†ÖZðýíÑÀvý¥,­ØŒ6^-$ã·"TÂ[\ë>ÎVö“òÜVxC?ys ‘¬ë°yŽÉ x>c}É†’B>,¨“¦G"Z�Ó�ppdz/×�öhWDûûôkjf{ACëKæ^«š(¡Õ&¯å `î¤•¸ÌØ,³Ðª™ŒL¿85³‰�™TOU¬Nº?j—ë–±N9=í<Øô¾ÕË/oç—ÇºõìÇ½ââTorÅáD‡?’©M#ö=£Â´ `ÒêŽ:ÿåñ9†¹D•gçÆä—Äºæ1í²aª7U¬»ˆl6îÞÚ.Od¨s#§œGœ›	x/»¼�_ë¼0­N~YªÖ[le¨ýDmNt£io€Â4 ÍZ+³ïóx¡ˆ¹‘qyš/ö¤ÆòP,Kõúªõ„¦Š2Žínvä—7Ü¯ºò!�ƒ¬8o�_•–§I¶—tâw–z£¢J’]QªK½	ÀbÊòDU¶Zþg|÷fC5†¥×
+ˆBÁ—z�Í÷:rGœ¾Òsn5rµ¥›¼]ò=¥™ˆ³«•÷ûþ�izÕ y“¡š`ËÝÁÇ•ZÏY;).p¬û”Ú Ì¨¡:‘W”g+µa&ø¬!Ÿá  5Õ¹ŽÜ!Å^†éo:Gªß¶~Ï‘¿+,é¹ �Y }Xç`³ÅGXQB³TÄp¤€d-?KA$!ô™ß¥§]˜°‘è0×ÂÐ�&0M>	€Ô“Üæ`k‚]Ð§ÃXÀF'øz—)	NŸq°4•�+ÂœŠQka¼ÔTJ² "µÍÒ\áHÖ«ŠÎ¸w“!q0zÓ@�$êD†éˆ}÷±øÏëáªûu†ål÷û�}wÓùŽdËÝr#çK¾u×Hø~!žál)Ê/l	 ÒübÞí^VÖz2KO×º¥õBÙ‹ßÛ>úZ¸çû‚‹|”�MïÙ9ø÷Ÿš?x·e­íE×«B8ŒƒãÐ=Î¤ÉùÂË‡‘u ,�6dHòˆ€KˆÛàÕAëÿ6õ�d0Œ^!mhŒü²1Yz>g«Ýö©iþ¢RM8öýõêûVÿz_Õ&4¿×jeã¯^:óƒ�šlx×Î-Ø½ú«‘q“1$@p`4¥¹’¬Q|áú•Žqðé'+t¯Í*nÅKø\ïáÄùòÆ1¶µ‚k[xVLóKæ±½Ø¥'N�gp€ƒt°–Ðê€ö�à)$GÖ`cKô‹hÑF›@o–ô» ˆ ÇBæ×¸g£3_:©Üˆ¦\œ/œ!­h²²–\µö@híè—›$ëŽËì`û'Š*’õBëöTo::ü`Vž<ßÿ|Å¾½ÔëºÃÅó[™~Lð9M>c�Jx“çü°QÿLµv‡e?Øïl3¦ #ãG†ý­ Åž°òX­~O­±ƒ¼
+ä¹cÙ0R»~î™“‰ ¨äFC^œ»°ô©"?ceåM•àŸ”Ú8¼j�½JŠ=+Ã�!œgûÎm6ß[s¿ÝpnöåÓ«ékKS5$‡:L©oˆû8]ÅÑQöGVÍC*	µ±™ÑÂ^ÑÄó;´€q´Z‚¯ãW @Ï,L‰1 ð˜‰´µmÈêã°î˜µP‘‡†5ëÑ…|SC$¾X À\mDL4@?¿°*Ú†D]¬L:÷ºrû¾ÁÛˆ¸À¬i=ê‹£±WÆQ&°Å®kO¦7Dz&×k–Ó×Y|©“Ÿßô¾R˜©~¹I²•–sO wX\snøJ =q 3u )�è/x› «bÕ·îÝ7|e]îñøJªk™ñK
+m~¤)g=R·ž.ôärv¹À¸Sœ\³ž¨-‘nZ¬Ó´vÛ¬¬Ø÷Ë.pYîó®Ã;šœTm€…|[\>ßbóˆeÓÿ?¾sÛÂðãš| ‹cÚw š\O§z]RœÓð¾ˆ˜íÜx_%²——?¢õLQž^	>S–')=]>mL•Èó¼Ÿ·Ÿ±ÄNÇzÐw¿'Å!d}2–äs6?È0mxŸ­‡ Ð«ÝÏ*3 ¾ýSßù¾!§Ô¢ì×ùI«úÖR�4È^åÛ¿@ŒVÿç/ÒfÌ»8H¹»î~¥(O%’–|ª} ñ7ÎÿŸŸ!ð¿Ö³óWl8!Ùñ²È¨m ppt@ÏŒ³sæx]	U¶�ÜÁ‘‚†Ý k9e+ôD k(c 0PJº:°Ž_Ð3íCêöhÏZ~ÁŠžåhKplä}3Xc•…	Lj\‹•Í ÃÐa‰"‹ƒJ�ëóAf‚Ô€ÏŒÍb�±`]WìŽÊsS=ˆC¥i"èñÊQöG�óýÝ¯mi¼¢Ÿ¼‰Àa˜¶h‰§,ùë¼8¯Vý¤1AçÅ™JmrÝÇÉµ®}‡íÌiŒCQL»î±"—EyFíýDŸ?\ùV¶o»5÷xñ§ŸN?óÏÎTÚ@k¤]h/�¸n»¹¢  U€´AºÀ-Ð98u YÈ@™�t!ê€í�åA2(2°è­ú–3ˆ�çÀýÞ…Yñ¼Àûj’^�Ïs­|ïë{&M÷»ýü¥¹i”g3  M,69G10‹ �ÂÂ€v�à	Ì.ÑÏ}ØdA3ÀÍŒá „ŠÍ
+›8nîßÌ/˜´€˜ƒe@Ip<æ•¤�™ûÆð\ºÂÂ’LL¼„Ô…ª‚²„8ÄV×Ì5ÙšºìÈÖäS³ÄÁÒa	•µrí’"ð’6¾¤Žò�9•šT�ÛK‡·ŠÑ�1(PÛlh±ÕDMK6¬Z÷ °¨<€<±€ LÅýF/}KRnq¿ã;ßïÅïª‡Éò‹=çGyyÎHó{ƒî€*/Î®V¾Üí½/> ÒJ… ËÒ°ºt±íÜcL�L`;Ï&Ô{ÇË…ÕÅS�iZr‡R›ÛÙ;^—ä/
+ÝoÙÖCJ¯É‹s“ü2)¦Å¹U÷ëíäÊÔzjM]ZÌ7Ty¶ªC.‘KÀŒô3úk.Î”Ômà¹
+â!í+¡kÁÈ4{qÈì@t�¶‡ž@¬‰…��Li¡e£‰¹Œ¼×UuÉú|˜èÐa)d×å¡}Ym�´êö]¹ÚlÀâ8Ìõ¤¢`¨ƒ÷§Ùå51;Pk\Þ­ÈGç6€raø÷?`BûÇóÑ{†Æ­‹ŽÅÚCµÞa}O<Ó)Î˜�˜¨Æ¼0^ÍÚ½?];c©ªuO®7 ËõxW5×¸?%pçÓVÄÊ@µ|>åÎÀ¾€£¿²ùj`ÝÕÆ®6-¡$jL²²*÷®æ§Ô_¨	—Ç†¸ž9"ïÍäZÙåßú•ä‡¢üJ"kXž:ü€ZŠßWµïìå—T­ûùhà}�LÐ‹ÿšÈ
+Ý¯÷âë-±ŸÈöì»ùÆ4‡œõzÉ[Fžu—Òx¡6»Öö¼<9ô¾Þ‰>£pŽ    IDATÚ·yîS1¦žä/³åcíø¯'ëWSYîÿ{Ýÿ×åèÃUûGµðcBtW¿g‰g,±[Ê'ãôÚ¸¸ÈPÚ·)½Æ�/øüJr¢…Ö¥×¦V˜±w¦S¿‰g'ÙñÛ6sïìß{v~7Hhe¹d$�± ÓÑqvNdV9z5Ü"ÑÂ~Gº´³„¨¤È 0FC1€=\ ’8î@µŽ'íUßS”®˜ƒÅ3«¼7Î×
+p °kŽHÔŸÎg�”óŠ¤Ë“ž†¦ˆ´J ?–ù,Aæ&°Yº%¼‰ ºå¶•ìÊÂ4jÖc�u_ÝùAÕùÙ‘Þç3uB7~§ÀÂón­ÿdñ}–Ø…'Å‹…8’–Ï�]z|¡}‘åØ�Õj7'é5…:�(°H³ËÊbÔ¶�å¹/­rfëög—¥ù�?0½:{åGôS†AæV …Æ,ìUçíÆpšP™a�_Æ¡ˆAú�`q/,ïé‚.¡:óß%"HŠžý¤È`Ý1ç`p	Z7²ä„h¸1«UþÞ¶çëµÏN´^iL}©{3ÃrÌ¿Éµ¨Ú¿ €€š07Šî<Ýÿ´þ§€�2”9¬ŽâEsô-=Š/–Póp� Wb°�ÿ�#9tR0�“”5Ö´Ðõ±:ieËú  Œá¹3 u%8#Üa£)ô":>-ª«æ‰ADƒ�ùIÈÆŽêGXI±‡SU¶&1BC@­h"©ÊX…;]�díËh�ýŒÅÒ’�Ca³y54®dý\oYÎ®ß[±îf8ìÏóíÛµi1H'ÂÙÖÃ®÷PàÜº:øÇ¾Û²g+á÷ŒV–ÛˆB"p¬_Ùvêi–œ èæß46s—àHÚÎ×Æ!N^Ïô»D=›þuX¹›‹a^ž„{ÆV›Õ·
+qÐñúËýg˜¸Ö½ž}{Íû<b®LM™Ja ×-ŽÈ°¬r94‹‰I¢§õ§×³?f`xÂ"Ý®!µ°æâô8»(‡á‚ž�/\Ÿù>W±É—ËñØè	Ù™²ørIÅ„sw žJLL ¡hw•ß²Sd�{_ù"B¶ÉŽ¸¡€R=©L-��W­§Ý»zÅóëòàxå�_ì”gÏþ±Ÿ¾ÞåGlñÌPmí¦×µÜÛ*<õ>ïËÇ#GÜoyòáDs"Šíâ„–}WËûj w…bŽA¾Án—ÆÓ¦A$¢rS¡G}±kÒÞ±š_r<}aMÎ�7Z¬tùñ~qúìàozé«-ÖµØ|;ý£H­oÚ÷Öo9·¸bA4êüÜæRÒŠøJ9Þ²Ï�×r~ZêrQ­·j©ñ¹†‚~öjÉg&£Þ——ãë—ã¿ªXT½ÿk³%Á–£üŠcí;{ñ_P©×­?Yèµ’álÅóþÓ÷¾9ÌþÈµï¬Öþ€…î·Óâ¢ÐÿgËk&¯|6t¿©Ô¦ªû¥L=‡a¯¿Wé- ¡hú_ì~«½¯âüÀ÷¾á‹'?¶Òû�¥ö7«þÿ•bï0{ÕêàŸÓVå�®xÂs~¸7Gåská�ëj²¹=)O¯8·XüèÆ±™ß¿�ü?G~\ªÈ@I…†ÂBÏA94Ã:Vt»Éš`hâ	p:¥• §
+ˆ†t(Àõ>Ö5i†<£aF«Nõé�Õ:.ŒE0ëÃÌ„˜XÕƒ”–GØ¦ˆÚŠ2�N€#2�º ¾¬çjl2¢¤´2Á·J4>ï)Ø”p»Ú’È+|X—¡V$�/¹â©Añ›Ëô:‹­’ˆÊOfêDÎú�ý³B� @œµm¹]Ê§¥8¬ôtoxƒ‡=û§i~YZ\0Z²\JXiÿm³qc]Èù¢çí{6�5Ï@@¶vq„e–D ¸„<Ëai@Œ“ =@«AÚ  ŒC‘@<€ÖZ0
+�ÁÊQÙ/£X69ŒC2Ðº.eWHèv^	Àµi³«-~¤4“‰:)ÓMS’m aId€4¨Ø´˜Oi.†ƒ1
+á¤iörC«ÎÇ
+*KÊô²Ä$<¡öFÛé«FdbÚÃpÊÞ=P›‡Z\Çš÷ÌR“�+"‰h Žë§§ù)‹úP�­­pŠ4' �Yâh�‹êlyT€ÃÑñ±f!ë™Ó n²¦:ÊÈS“hn£\;Ô6¤,ôX!0ã˜k²+ò©¥üy!_o\þíP�n¨üÍ {9 +ÌhÃùŽçÜj[Û+�reñ‚¼8¿VýÇnÿƒc£Ÿ_ü—‘ê;óâL"olúþAƒáð›£·rƒ.3º©Í¸û-+  M R‡¨ÒÛ‡Îò¦Aü—cïöÏÔQú'Õà“–œãú½«¢ìeF«ÞÚÑçÖ#ƒ×ä3±^—joÆ¿å@tõ¼ÙaÃHg8ŠYýóg­Å%õÆÙ%]úuO!Ð-6æòxUY-‘/”¬)ä@3,àŠ�,MtÝz<0çç¹Ú¼Z<§eíPÔpÅîBOu‹ÓCq4°ÈÔÉ‘ÚT³(ôÄ²Ðc[ÉÍxÍ¾]›f¢N”¬kó}¶ÜÙM_×p??7¼±"÷¤z�!i³¶omÿì½g°eWu.:fZyí¼O�ƒZÝÊ¡…¢L&0˜‹1É˜dÀ$ƒ¹€mŒLp%„…$‘„rj©ƒÔêxÎé³ÏÙg§µ÷Š3ŒûCÜW¯Þ{¾�*ÊõÊ~ŒZ¿¾Yµ~­ßc�ïJO%j+gd@«Î÷½~5»tÌ¹>SÛ(IQýâtŸ-ùâîTí©õUû·¹ZOˆÊu]£[µ=”§;t97¤Ë±ØÑnöÜ†ûíãñ›ÊüÈHÏÚ42h…âAiÆb5 œd Xun*ô<#ÉHžì²£™ž£DöälÈ»4Q›‡ª¾©üþ´8Ï çZwFÙsCûFmÆX¦NtÕ·~Æù¡nü®²ó¯¹:cT<‘¹ü@¢N>ÆÙá¬x’ÔsŽ¸‘•KŸ:±öófùO•ZÏÙÒãi¯}Á·\
+>Sä»{ñ;m¾ß ÇÙ¢cÝ–dÏ–z“#~Ãh/“»¥ž.{_Ft,±§Õÿv`ßP¨­RÏ¶@@îÕIþŒTž®±b³ƒãµäù�t8_ye!OA`„d/ë|ì÷©#ã;þÐdîŸûÇ:ò?&
+d³D€¸$šåÃúVK�h²úši¯êãŒ®GÂ¾¡…·1°*d»Æ¼cCÀGcÔ 7Ší%Ä¼&›^RÇ2ìj(FØ	I# c•c Ž«c9ê› c¬Ú`5™MÔ²jQ’»¤i‡²x¨C�µSc'5ZT™r+}I¤f#y
+"£d€å7ôó‹¨'~“«íž}ƒcÝ¦MSé�€öjï›Y~¡çÜú_’j{è	�QšwûŸ¸öOó¼
+`‚àÑ,«�F'iz¶Ö¿[úÑ_%!�V@Ô6�B¡à”À(pª`‡ %È‡Îap|8! ¿ŒƒÑÐk�€_’² ¿²€°ƒþN­ I/.Š“…èìã7’*3�è!°Ðû:%#ƒ6'©ÍzŒÏº•áêaý½Z#|LC6M.· 9IžÅÀ$tIeQßU¦”�p(±ˆ)Q¯Êø4?Q¸>M]âMp ÷¥µÔX œuo›õU}<Ç †fX"ëVôÑ]'1O_5û À"á«4d’ÆÁŽ±O	2ÿk"º± dE?Rf®O&Ö©‰~Š£2ë|™ ¦&<”ëÌ„œ®Ø$é±~òjBÔ†ÒsyŠÅŽÛì±ÙêåÃâ"­g´Ö’!äÅ“”™iw¿xÿÌøÎu”¢_È]GÞÎ9‡—YâA'„<�rÝ(=ë8{ªÍ”(rh­| Ñ§’ô™^â>(æçß¦ØÎí–¸wfê­Iz¹1ðØâžBž:V}9 ¬?"Ø	Á¼Åiß —ˆ{‡Ïb{#?[CVa¼kOÓ‹
+èÔÉ>ÙH�•Évö4¯‚‘öG¦é`R¨Ìˆ&�\jB~°@‡“¡A¨ˆ…Pì$><záJ~ú˜ý›ÂŒ[ôD¦¶ :uûÎ¡šëfÏNõ\ÀJ3X¿)ôDfª�}³ËŽ":‰ÚÁÈ°|��¬—¾<×õ^úª¦ó#ƒnÅºÅeËt�?�Ñ~fª�x w[tåÐð�'Òç5�Ÿ¦ê$‹-ô•©WÄƒ‘šëäÏLõtÀzÖ{rÝLMÅe' ŒMWFzÙðÿÁîçÏLM¹›]Ñ°ï”Xvh¿dÝN Å”¤Ú?ä‹G8ÉŽÄ/\ÊÎ‰ŠÓíçfÆ€%M©*úªÖÍÏÊt¹Ì[Ro(¹ßHõf4¾'î²øAÁj£Ã÷…Îw2uj?yãPžÜK¯Lä¾¸ÓfK¡û?É»É-qŸÔ³žuk9üŒï~¥óýÀþQ’]&ø£…Ü%ÕöBž:Q»t”?«}¨P'‡Î5•ðC…ÚžçKµ€VÃ pmªŒ®ÕKï‘jk{ô‘½kCû:cª¾s=£�²ÿ%ƒA”¼Úâô\¾Çw/w~ÚŽ>U¶î¤¯£tM›q©7üQûñŸ¿”˜“ÓV40ËãlnœìÎ!V#’*mNòYŸXëÅÔªÙŸ˜¡O¦À)P tHÍ&Nï'Àjtã÷ºJ	«d§„A@æ,(Ø´<2.1n›GfåÐí™£�³ÆQª�®êÕ1º31 NM È0% ‰ö1[«ð¶O!àG
+3ž›Fl,Ÿ­•­»sSÍõ\ªçâô2N¡ý#!ö!ºÃô•ŽõK©§sµc©wmÅÿ¢Íé’VóJÏG£·WƒOjNýó®¨;¯õXQì¶­»ó,«Smìcû.¯ `4(¶åq  ™CÚ•P[Ü& ëƒ‚*€2h?¥‰ß”`ä1”Ç€[àúPÄ€tº aå0>û�°Áun*W¶lð>{­úõ¯\Y>�«�"Î^Pèuˆ¬é}Ó¢- Ò•5Ø1‡¸!Ùžâ’ ‚9™¾GÂ@€[£Õ%óó*9I+1{MwFÆª�Ù„Pí4­ŒÈYç¾÷iâS;ÒôDv¾A:+&-b	¢&©°`†ÏQ !õBšÖè–es Ä† À—Kd¬Â<¬¥L†ý:›ä`{¤’âˆ‚XRGšÌ,ç]Y±ˆ°~GM†ü±€µ7Ú´Ä�%Ï�´£� ˜ÂTGù%™ÞÞÍ/$D%Ù³]1XnºWGÑK\çFƒ¾gÿÔ¶–“]£¡VÿU¥ü¥±±ÏiŒ-ÔÆŽ¬Û&Èbpì{½F}(��ãÁÔÔ‡ÃJ¼vb;%½ÁÝ<�¢¨GWr¡ó iøü\Zû¢åñ‡}ëæBíÐè@ÍúmÀäŒ•f¸6ÐÙ4;y¿úµMª9Dò¤VÉ¶_5·Žp)5–BbÜêhA�“´Ä”ë¦z.`«‰ž¬[�¤z¬Ð‚­…,/ó5J²žœ÷¬_æzˆf$
+øbÓ»*ÕƒV¡Çrµ%Öõ²x(“§Û|ÿJv™F‡ÑQgôÞXîæ¤?|Š’À8üQ‡Ñ¾Í–ZQ±»fÝ1”§I3€>‹C¶
+€Ýb«+î @�?HHæ±nÃ¹v¨ÃÂ45•ªm‘.—ø‚ÅZKé%kÅI!f-yc¢6S’Myß&D#Ú]ãdËSí‚yR…Èm¹ž‚��ækªäòý±ÀPÜ‡@¢›Î/»Zõø±Ñ«ãüÒÐúuªv1Ú[ŒþöÄè�Œöµ©õÓ+3µƒ“µ�µ‹ö˜Í£$µØQ­ÇvÄ }¨½¯ìIêÍ£ø¥…Üi0àìX?y•Ç¥Þ¤MÝuÿÍè1‡ïqí›WGïë§¯Ëò‹¥sÄ}ÆÔ\ûæÕþ×†Ùå+ˆ–ÖÓ™|Â|ó”’óƒ%DÐª“j³kýÁŠÒ—„ö�¹Ú$õæ\Ï¥zž’x-»ˆ³…Þ€èÿÿGûñ_¶×ú×+biMNÛÄ¬é�å@É£ö²~tœmYÐw�U²ƒ á" R°8x!÷)ëêHBÊ@ôp¯€p†�f FfÀÁæD¬˜û×ðWer‡€��‹x&cJ¸ÄQH¦ê¬êE‹”2ì6Øº€æk
+<j;Tr"IŽNjp„�!=ÛcÒÔGjÆg«‚v«Þ?|Ê"ùTðù¥Ñ;lÚg$t5°’Ês¾×â)3çOõ¬ßjS±ÅžóÃ4¿$+Î¥$+Ÿ
+¿øER®c¿+ß}9¡€²€¢ØÅohÖÞV�ˆ#°xuX;ŒAuú‹�§`Ù`¹NBÜËî€–¯�å�* hBÔÛ‡¤„€WJ¡¿^ì Ð@Ü�<ƒ,­ÅÉŸÔëŸwC0
+F} œ¿»Æ¼÷ŠÖÊ_î7ÛÑ=Ém…±8QUkÏZq'*Ò4Ãx€KdC6�ç¸Z";2S¦õ¥C'ØÕ± –K,‡
+…BRá+C=]e*1h4ež%ÚXÔS¡#«ñåD�õµ2 mâ¸ZjuÞ
+È²4 áÑ€Ì:$Ð(ˆK�5½  
+6#¶Ä¤Jg"ÓvI¥ÆYWŸÚe¾z¢(…ÔTå†ÛTVÅýÓ“Ç8Å#‚®)SóÄÝROWüÏêþ¨nÿbfüéÝÞ»9[@ýäO§êö‡J‹s¦êòt@$g´[ÈSc?èwwùþD° ¸ƒ6X60² @(5aá±çUª?`œ²!0ª 7„£‡ÞU>]Ÿ†î	@­Ç…µÒí¿7“çöóóÇü¯%Åy¹žÍM]£h>c\+¶Ù´X”B¨åî•0˜$O „ ¦t‰Vl¢)$Z  HQ =4zWåo–†é°5JRAW5VFrƒ 1§Q¢¦	 	øAW8[]ËžíÒ•ÂÔ|q  þP7»¼éþó°¸¤â|”ž-ôVƒ€rùƒL™qmj„È\¯ªùÍµg’7'j—ÍŽsÒ•f"Q[É)ÉFjŽ‚ÖÀC~ÌfÇÈv~¡E†
+½€1h¹üàZ~Á˜óÃ¨xRÅþq¡×§z#%9"GàßKÀzFa‰‘Q¦§&ƒ�-�>à±ÅLO8ì%™ÆÒHÍ	’!@bBƒ$`##	³*×9DÈÊ¬§A¸lÙ ëòGBç{ Zê-q~%	‚`¤:×æjg¡¶=îøÓÊ.Þ5¾±Õ¿Jš1JR‹-2ÒÝ¯¬ò4BFÆT•·ÅC®u³Á —çÒ—Ôü/´GïkÖzr˜?w¬üæÞè=eï«Æ„I~±Æ¢Eˆ
+œïÐ¹<½Ð[BçÛRoZ½kËääjï¥žõ¬Ûú‚Vz&•çiô|ñke¦2µƒÓ¶oß$ÕæßÓggôË?4™Oþÿ¸×ú_v7Ö%ü}
+=AŒÇzCmÇØª±	Ÿfškæh‰Ì3ðëlÌ%6‚ 3|.EÕÇƒMVïêN�M·ÍÃ”h$8èááVý þM�Y…lña#‡Ð@�ÙW	ˆ2h!—ÔCZ’hRŒ4¤iÆØ· \Ñ¢\sH56ˆXQË“‚¹$,ÐÎõF%€XMä¹.ë.IÇ2Û=~T£_`-ÓS>?Dé°—]îð#…Ú!Í4§«Ro(ûŸ“êT¥×UÃ(µ)—»é-o±.xNëu¿tì;Óx+@'Ž_\kÜldZmvÁh -A¥ ,<”RX` …,Á�R¬€å@>„,~¼4£Àh JÓ� �Á)Ai
+Ë`÷ O ¬£)…;ÃÚ\ÑÖjløÃŽ”6šR?y§me&V$Z9ƒc d¯úyHÖg8H¡•C¿Jvxd
+€ºÐäÄsˆm 2Ì0�ÚUž„|É€k�÷MìRÇ&I‰J uÞª[–‹‡‚ÇÖ8X“‘F€rŽTƒñ¨ò4ÖÂ!Aj¸F«Ì(W¢aÄ*17Å<Á•
+‹ø
+—ÔCÚÈ!FÀ
++h°£[¢âÒÑ‚¤ø”}(Õuj™š‰)ûQ›µ	€ '¤™ÌÔ¶Àú¥%ö;4âlI›”™¬”>‡†'ù³çœ®¾�OöœëlçX–ŸÁØ’%°¸ a„ƒ5HG„(��L�àòjc. HÁh�9XXø­°@ $ø%0:–rÂ¶î”r'&‘g22tøÁXmSh;ÄÂûš×÷7é ¾‚wôðöYziá‘l}�ë- :4„�L^æiO[!e|�áŠl,—f¬á†A@‰ª8ßCOôø„w MÔ6Wì¥ Jö�|DÁHfñG-2èd/¨»ßî¤¯OÎõæŠó�¨¸�Ó¢ß/.Ö¦Ñ“'ûüØ@îôÙ2�`!~i¦k.‹r½¾æ… Oˆ*Ù735ÒcãÎÏ%Ã~ñD�/…Ö]€žŸi±‹dkÅSjöÍ«Ù™ž.Y÷Ûü`¿8[ÐÑîË3$–ªaS9PMU k±˜É�kS’™ÉšóŠ!!&÷3ð+ÕU‡uúj}‰õC~„€§Ñ&ÄUœk}ç‡ËÑ'cù$
+Ä:âÞµì…œ”¨^ö|ƒ~®ç½Ñc�¼x¢+lg—(Str½>tntœŸ)µÄÅ%Ž¸O°Cqö<×¾u”½Àæ�Þ7QÏj3Æèšoßg—•½ˆÒ×öÓWYlÑ·\ò¾ÞOÞè¬¦Åy}¥7ö²Ù¬Õ�ß\r¾»’¼!•§ú©<·Q~Wš_\õ>ŸŠ()[�ó|ëW×¤¿ù}vcýå+þPíÇÇ¿ñÇÝXÿ1ÑU †š)H‰!™mX‡Ú
+¨q¶žwI5Å 8±-Rêè4Æ\‰BA›X@y³Øh‘Ð&ñ‘b8Až8Ãv¦Ø‘K–È†[>™ÌpM@À‡Ô6ÚI[/pB=RwIƒS˜´ôÑ®¬º¤¶¦—€ƒÑ�#’YŽ½�ÉÄ°²x(ÑaÝþ1-LùäðºÔÔµ>Öãeq£±åÚÍäé„ä%û:F;æž1LþÔ²nçtA©-¶u÷(v?ú›è­¯ü‘Aô*Ê:–Ro5¤Ü¦Òx½€ÑàU@IÈS˜Ú’h	£>ð+ l 
+ynIÐ@e˜g€[4 \0‚ �QT¶ÃU6(	J‚V ÕF@ðËÊèrPÉ]o¹Z»M Ì4%#Fº½bWIÜß°BIbHv´ÍžÚ>Ì�ÑÓôl¨qâQà
+R×€‰M¦Ðft(ÈhÜùÉ6ï~Ÿ‘èR’ECš2·‹3·ß´i:PÓ
+­ª}ë¸Èl’¹DM‰ž  }¦4—‰Æ ÍPº¤ê� £ûñB:mA@€Õèœ‚Ì"”ƒÛ`3C�#`@CŸLp’çÆo²Ð£Î#Y€Ø´à4hÞ+N^ÌN€Õì¹„h‰¥AþÜ¼8W™qGÜ‘ËS,¾¥ó�¼xÂÜøîQúr·VûF£þÙ8}YQTÑøZOfù…iJ†A¸FPª¢íB(nƒp@+H‡Ðk×ãØ0Æ@C1 °=(r°èw¶„8}q«÷} ˜¬=c,|÷PžZ˜YÈ‰ì©Z…A•ìÐ`b\aà„dG‚mÓ$ç4É®�v•3aí¥}Ê&ì{ÊÌIu¹Á“ºµ§Ð“ˆ|Îy°0e‡ï&oš¨>Ÿ’Qèe¤6†|Áµ~‘¨íœFýì™÷_#}F"×ºÝ˜
+!Êû“bwaj.;ì²Ç:É•¾x t®5è;li¢ôÎ€·byRI,Y¿ÈÕÖïú²XŠÕA×zÉ•ÍÊŸt=çš¡Z²GÜÉíÝüÉeqwÉºI›!š‘Äç,)=ÖNä).[sÙÚPžÞNŸð£eëg
+Ë‚¤ãî¿ø4Mu£Ä{¹™’¦4k-³,ÖuN²µô%�à£
+C×º½§Ê¾x` ªŒèN±±Â�zâ‘ÜŒ!rNrŸ" ãâÉQúJ‡õø£ÒŒEù%½ôÕuû'5ÿ³¹ÚnÑ•š÷U—.‰ûv�Eù3&½«}~$3ã‚vZÑçÑ„ÚŒ�²K]qw³þÁ(}…ïü°7z£òº±úÛÐøŒ®ö‚f/2èGÉŸrºRr®—zn�¾6ŠßX÷?Yöþ�’(t®µù 2æÿ­ +ž¸+ÎŸ=[zw îMÕ‡?|¤}�Ô”»ùEt¦þ´¨8·ì~¯“¼î�½Öÿô½Ö¿ ©Cl8Ä¶AYc3>-Ö”à—4CR÷)FÆ @lÖqˆ!-‘õ%êG&â¢¥asmdKãäL›Z#õp ó©(È(‰#* Óv'øôª^Í±7Å¶I4õw·°Çy$ô(h$9¢G¡@Š ‚`Ãº?V[Ö©Y‰VÃzÐbG H,Ï¨¹_·Åý«ÃOxâ>×úU/¹2°nal%“gPÈ\ûæ¬xB½ò–hôörøwœCšœ´2øÚTý")OüQÇ‹”Y4	‘ZO:î~Ê ¬A:nAƒ’Pª�SB ·“;!ïÃp¼*X$°Cà.Œ–�0°CÈ@È[²´ÃØ&Ð9n²>èò @8`4¸eˆ; ÄCÅ¯¼«lWZ¸³âý%ƒ$z+}©M#jMŽB(Ácê¡V#|¨FvOÑ³°cm³íx9‘±±ba¨¦5ÒÍŒ³·�ïœõ¿›Ê“ˆ‰†Z    IDAT½Ž‘Ì %Ñ™ô®:¿&`}Fb�®M×rÓÔè0’=þ™Äº’Sfº"¸/)M³m.Mtz:]g¯väº%âSvB§Àg¶[^¾�ôùò‘>Þ~Úìöëœ¥4~:‘˜$¤^Ž: Ä¢™B RNdj�%>;Vu¯âl¡¿½Sœ¶k²z¢ûc�%‹.„Î5ÝäM‚¶›•×fÙÓ3yîxýõIr^}ü·–+Ç7Š8»b|ì#^	Š,²(…4×Ëÿ�>U¿sœg !heÐ[‚^çYëNºaù±°�§’ZÖ=ÝÁç\ëBŠ~ò–¨Ø=î}a5ysÅþ!ùbüª–Z	ishVñŸMKaÉ…©€Lû4\Ñ6ŠuEGg›Ü©^©Z™·×d£Æ‡�Ø“ë¹ÂT«ö­
+[<p(ú›2kM”ÞÓ‹ßìˆ½RÏgjƒÅ(I[ $ÍäN…5 ¬8W/?P³oëæO¨Ú·@‡ßÛN_S³”ë�yúLð×©<oXœZwt²K*Ö=4‘g¹üae&,vÈâì¾ÄWÆ‚O÷’×Xl©Ð³™ž°h×á‡zÅyUë¶TmSè!²ª}óBrEU,våLMwùÁvö”	ïš\mÉõÄ@MÌx×&ê”‘š/‹ý+ùÎ
+o#pƒÜãG•)Ûì¸ÅŽ½°Ê°éü¨Ÿ?UÐA_Î;,$a$íÈÙ1kßHmÔÈÐŠ8´”¯›wîc4@›?<È.køŸ–ú¤¤8+Q›Çý/¤êŒXž^s¾ÕÏ^Pv®—z>*v{ü!‰'n0­øÏ]¶Xv®õœë´žl�>X¿ìQ©·drGÉ½š±¥4ºA×³n.ÔÎ¤Øíˆ	(Ûº#J^Y/ý¥ÖãJoê&oœkœu´½¯|øøàK?Tó?�ç‹§QÖ/;LÈhuôþšûíBo°Ù~Þñá»*â€ÃÄòŒ?K×ý>½Öè§h2/]òÇ½ÿ1ùµðgG’ HŒ}�”[æÞ2ÙÜdåuÔ!µ+§ÆX„µôA5Á¶·õ1y�nè™#e:T_Ó$Oèx×<Š`jdË2þÖ…) ¬Ò�
+s 8”ÐcúÆ-ü²Ôd-¼­Û
+”È|ƒ[‡äþIºÓ¥&2hÀØ 
+Pãb¸/_:Ý%Çò­6ãÖÞŽ<É ±©$ ò*?º\Ì;”ŒÛw�‡ÓóvU>`Ð;1z—ÃV83P3[k/îÇoqÄ½Ë6¿OéõµÊ;óì<Ëº7/Î B<”çO­7¯Y\úÜÆÍoo-\06}kgù$. 
+ÇÉ™€<…°
+k­ÍŽs°T‡nKÔ&eyT
+½ã`9`4¨²¦wAïX>PµÐÛå�¬€€. ·!é@yPZ÷ƒ€W‡öc`4” £§8Î/–×~ìY·æê”•ôù!?Ú?ë¤/_,ÜûÆ"A„G,(;¤.À) 6 K¤¹jöo›È{wZÛÀ€è+WZá«}5F 81œH‹rSñX+Ö“ Ä¥k=5ñ¸ð¦-kMÑ¨FÓÚ�@-ºš¨Í‰n”Ä!ijÕ4 ™É}j#@ßô*´ÚÒ‡Ö‰Ù%ÕÓ˜UèlåY{:wL²^íŒ¿Ý7Ø¶îwò=Sg~þþß¼õä
+#ib�·JS!€]5>i?«Ë’ÍÙN
+ËŒÄœôBçÎŽ¨8{%¥CN—2yF³ú*Ëåi³:ÖŽ@Ø.„€,À+CƒW­À(ÈF@”Æ ´„¨åq8qp�µà$ÑïÖ³X. -¡ßÙ€RîrÝëŽ­î¯y_2¦O-{_[þ5££�ÜNA¯(Ò°£[œ8>)Ìj‰63L6:ù–Èœcs‚† ;.hg¨¶»l™ÓžE�q¶ÂHÇ`0,.´-Mc²üê(¹Òâû†Ùó×òó+Öþ‘Ü0é…³#…ÚåOkøŸåì˜mÝÑ~@ðýýô5Óµg¬öÿE™†Âš «½\�#°’u;§KƒüÙ6[¤$vøž(VÉ¹�òKiÇÂ÷�²+;eÏi'1‚›ÊïfÏìX¡7ErWÝù§«Žõ›~üfÁ–<ûÆ•áGj®Ä—s]±èÐ€•é�”ÅFF‘Üî²U‡6è%zS(î6èGòTF2D^w¯Måi‰Z¿ª¼3]Mw”¾ÚI_äòC…žŒÔLUd$š¬¾(ÍŸ±¿c²üÚvôw…sùÁTm´+hk(ÏädX·GÅS}þ ¥C‹LåÙÚ”=ëvc*�ì¹>,Ó3›''	�•Î·ùÓÞoÅïØ1S^é|­ì!/ÎÎå9ßS«~±ßµû‡É+*áG¢ÑÛy~Õû\'~�Ã÷!º„Ä‚-Øâ®µÑ[
+�kŒ)S:fWT¼¦/ä»ü±Fø>J»€äxï†¡š˜r¯9_þqÍÿÈ‘ÿ¹9ò“VBˆ‘ÆN‘Û-’-+Ð’Bmf 8@Šªeî™ gÚ„kD‹ÀªnIˆ+t~ÑÜ<FÎS�Yà;ÄË0‰ð+�…¶Ø¤¼b~]&'Uè\ÛìÈL‚+”3Xc`#há2Þ°�þÉ*ÞÍÀfàÐ�¢ç—5“(t†ƒ2ŸqöŒÔæŽ²6û?"`–Óçi¤”`b°):­šóãaq®ÅV<q·gÿ¸=ü›T¯sè	J‡ï£t`L¥�=¾|¥6ãÃü9œô(jS©ó¼»Ót' SfF©Íó›>û¸Ì#�'&6´˜�ã @ Ïœr=Ç ¿Âá�SîB´ 2ýÝÞf WŒmƒ| Ù (4 $ø°CÈú�!O@8P]i²F=¨Mƒ‘°º8¥äöBmGôÙ*î7�G Ü¥ÝÌTegG””%Dãt»˜e 2oUlÚ¨I‡¤Œ(F2�ïOÔvNû¡õ‹££×7í=IIjÐUè”Ä,U›[²f>n=«9F
+N‡t¤f}¶fÐ2 
+ã¦† 'EÔ–µ¶ÙOA¬ëÈ%•z¤bÀ(,*Ì[ÕíÚ”uÚ»�-ÝO‚Isøë›ÖZÑ“?Ñ~äÃ;—“¥Í¶�êzG§3VÒ–�€š€/uå¼ ¦"lÙ˜ìŸjÓð¬[[Ã�•ì›ËþgÐ”¢ôuˆ®ï\#Õ6×þ™Ö“™Ü]+ÿ·<;ÏqËX6€à„ Œz0¾	ŠD«P™†x˜n¢ðÊ <0²! ‚íC: Ëƒµ%Ÿ±Ø/A:‚þàu¶uG^œß‰ßê‰¢â)}9å±¸¯Ü€™ž6)ö%c8À:…†$ ó		À¤µz<¯ÎÙ}ÊãûZÙÅ!_¶Ù’Ëï]N^[·•¨“\þe±Ãb�?=wI=“¨�³•Wí{Ìý×ÇË>ƒ!€æl™@NHžçÉ‡ÅÙMÿ‹JÏŒŠ§NU_§/*ÔVJû?°ÿ™/îåtÙ÷/EŸ¬»×Dù…?àˆ{´iô×²ËÊâîÜÌ&jz6üÐáèãSîRµM°V¦6yüaB£c‚Tí2hÀPÍŽ»ÿÖÍ/ž	ß{pð¹Iç–\Ï2’Øì±•ì²€-0:rø¾¥ä…6É|~Ì ã‰‡¤ijSj'Uù²Ä ÖáŒ÷ÃT�”ê)—-#ò¡š©X{¥iÚlAê±ÜÔ5ÚuûVÏþyœ_4(v¯«¾p©ÿõ²óDNˆ´ùžÅáÇÎ¿´zù…M÷Û½ìò@ÜÍè�ÑV¡7ejëP­Ÿp¿?*Î�k<±Õ»ºì^eLÕs®Wz¾�§QºF@
+q@©iñDmCWÜe°´š¼fCýâVÿCû'”FˆŽÅ÷¦Åù½Zøþc�ÛªÎw¹Ûá{”™¨øŸÏåÙ¹<mX<‘Ó®ÔÍ†ÿåvüf_ìE´Jî·
+µí½wü^yãÌ‘Ïü¯®�¼þúë/ºè¢jµJY\\ü?ðOúÓg�uVSSS¯}ík×ÖÖþÏG333®ë^rÉ%G�ýÅÿÃa«9!H Öô «Å´ m	¾;4CŸœh…rœža>2qÏœ0@2h'pçèE	®Ì‰@ƒd„ÄØ
+ÈœE*.LIZÄ¤Œ`ÖÌ*1.{dÌ€¤ $ Œ“‹RìÍÓ'®gg7éIurZŒÝ®2¡C\¨1kœOŒ‰•Xmì+�/ôÜ#ñ¥.ë[´PHrL‡ºˆ½ÊÔíK=å—ìëüˆ’Äç$V\q_¢ÎÈÕ6i¦ÆÜo·Gf—7Kok”ßT+ýyÙûjV<i8¼Âóe/
+Ã5ŸM#8qâ£² aµŒ†öp<°}Ð
+dqZƒ1€ø»Ÿ^£´á€[î€?€Àl¨­ƒÊD‹@(Ô6Cu4wAetY‚Æ¡±ªë ]ƒ•Ã@)¸0½â„ëÝœÉ³ûÙK=qo¡¶s’S¢%²Ž; ï@¾€’Oše²Î¦c‹'¹‘E†]DŸ?‚ÀVò'9ì˜2åDžÝ´4è9üHGÎk´¶’¨­e÷%ûÖygÏŒ{Kn é2•™¦M3ƒ6§	"-‹ÃU•(—&Hq¸Ëñ·Ù5 4áà0 ÃþqµoÃ:íÒ›ÞVŸ<£u22yÂ!e·dVÓU�ÔZËºãïXa‡ÌT­‡l¶D,š,çÛRµ5Õë‰Ù½ì9ýäõ�¸Ûw®]î]ÝŠ¾,ØAJ–ØãX¿Pj¾R¹n¬þß”šmLüÖv ÈËñˆ@Ð€l”�Ì9³!î‚íCÔ'„òØ%`ú+�ö �.€Hz�Å�F–ãJzí“Ñ+]ål�³ã÷»¹Úˆ;Ë|Õ ›´+d ¤Bvødb£˜· ÚÃ‡°ik)Óõ:³µqí’O87�Àº%–ç•Å>FzcþGûFNÛ«ßZ¿& }ëÖÀº¿Ÿ¼¥îÜàÚ·ÖKïÎÔNƒ¢›Ë]Â` ±ìˆûšå7*Vã·Åò	cá_õ†4¦,Í‰è–í½ÎâûºÉ[<~HéÉº÷�@äÒè�™ÚAITw\¾ßçÝôÊšØ+øÁFð·ÚT\þˆ2�\¯S¦	@Ú6;:Qz‡ºš=gÒÿìZòg!ë(SÍõeÐ¯Ywç¦a³CÝìYÔì_Øü1º�<'U–ùª[Ð�KÓvö‹.5ÝïÆj&7õ’8VèIDšëinPØ´çZ¿n�ÞKI±±þ”(¹R°5©§{ù3Pêùqï«‰<ÍæûÖ*ôú†÷[ìÕ¦¼¿�€.Û?¨Z÷ P 8Ò¾GÐÎNxî5½Ñû»ñ»mi=�«Óòâìaö|ÎZSc/Pf,Êž'Ø¡­ã3Iö,JG¹Ú¾¿E›š%î5è{Ö/ZýïÚl�ÒÑXéÏí¸Öm‹ýï Ú¾ýC�ïåd@ˆZ‹ßdÐf´ãZ¿]~p9~Ãï«�4èó__Çñ“žô¤|àÿüê«¯~ÉK^rÃ7|á_¸å–[^ö²—=Ž_uÕUï{ßû>ñ‰OÜvÛmˆxé¥—j­ÿ7ø¿
+C…¢0¢Ä†%Z±?&“®
+Ç/-ÓP�´¯U@]<¢åSß%Õ‘IgØ®qr.64«î;\´%& Áø$ôH•‚S"ëÑ‚ªGÆt[‹JƒT+ºdÜ!õ–<2¦ 9aö¬êåÈ´8ØˆJA 6© kº÷hnR0B(!#µ}“wËHW3c1‚5æ†¬“ë™vöÔTÏÅzZšÊ¦Ò{•©èÂTºÙŒŒr½Þ·K=X¿ÎôºÞðCýÑûŽ¶@´éôòlÌµneú½ç"‚kÿ �¸ã› ‹A ,¨6n/5!ëƒ_Ê@K ¦N À]Ð9ŒZÀl@Fƒ€W‡´£eÈ»°ò ÜÊ €U‚xúÇ€Yà—~çW­ÀøFÐª\›C÷[5ï+œ�ˆòmÖÎ�;Ô¹ ¸Mœ© õÉ´�¢Ì#"6zŠû©ÈÍ™©
+Úžô¾Qâ{3=ÛpÿyÂù¹`Ë„È‘ÚDÀøâNeÓÎ/kÎ�%ûÇ‚v[Ã/'ÏÜ9Õ•†óã	ûþ²s}Í¾¥£, ´é‰Ô¸½²u›Dš£]e¥Õb~¹WU2T�9{P^eÚ"a“nÏGfç{öžü–#'îåË?ÜºþYƒíïØwàN€ÛÄy´X«Ò1JH‰–m:Ø›LžÈÎKQ#²	û±ÂTíÑ‚¶rSñ¬ßH3®Ôú¹±�¥7–‚Ï†Þ×{Ã÷3ÖÊåY@`8¼ØqòÒØ¦lÀ¹„hò,³jí ¸à6ø5pÐÚÿ¿..Ó¿<¶| Ü2AdÆÀìŽ}ccW¹Î'º7’×!Z±Údó}±nP¢†j]¤s�ÆÀžá%°¦`�˜œ¦ç×ù�µmÓ!$$'$c´=¾{˜?Q02ˆåY«ñ{{ÉkçZ ,Ô6WÜ^òþ»mÝ#èŠÅÛ|O”¼2ËŸ:ÿ�"°D�*ØQmÆ'ª—gò”nô‰™Ò_p—ìëryÆ xrT\\vÿEêuÆ”	ÉêÁÇzéëzŒÄ#yzkô.WÜÕtH@gj—Å�–œïs²FI"hK°å~ú¢$¿Ø Ÿë9îHnátµ0³ã¥¿ÈõºÕáGçý$`ù„¡œwÙá‘ÚVwP˜qƒ"oºßîäkŒäKé3VÓ§»üà˜õ0‚HÕAû%q#	!Æc«�âü¤8;àGH®k
+Ý�š°h[šÒ„ÿO…)�ý¥E×éõã?É3mv8S[fJoEô;Oªy_ìg/¤$KÔÎ^ú²µä5”Œ&¼«
+=×Ï^ L�Ó6;î‹‡¬4ªÖ“®õF¢Q~é¨xZ\<�Ò¾Í)ùŸéößYó?çŠ‡ýQò
+e&=q§2ÍÙÊ+m+þg‡Ùó¥iR2Êäi'úßêg/VzCÝ½*“çÄùs•©•½" «î÷šþWRy2¢çòG,ý¾ðGOóß3î¹çž³Î:kaaaffæÿ~úýïÿÅ/~ñh4r]÷Ì3ÏÜ½{÷ßÿýßÀÒÒÒìììM7Ýtá…þ{ø¿Wãˆ£p©l«œƒÄò(fHS“Ô¹èi¬P:2Tƒ˜…	¶±kÚ¬.…d 9±3ŒJ¤žaJ€®â½óì	‰I"<ÎÀcëNè}5ºÉ :Ô˜ŽÄáŽø0ßÇëäì2�Lq´lnvÉ,2IÏˆqP¢•¥OyOK´”bR� ±‘è¸è/nƒÛ$!&Ò>hZ
+Ó 0í’uo/ß-Ñžò®6¤j; •¦\u®œo¯FŸEž¸'*ž¼®±;Ížø_.òÝ¶s{Qì°í½E±Éõ$CÎ¸*7`íÄXXY}œÛd€à×!�‚– |È`$Tæ ² �"�‰³@!:*·I'ƒŠA” ï³@g�v€; …á2 §«ÇçÚhÈ‹+ƒò­_dòô¡<�Fºš¡Š±k�Ÿ`›‚pH¥Ê¼	Xï_½”¼°aß=”'S�Uç'RÏ(
+3«Ñ	Åž}Ó(»l%»¸nß£L�‘�Ã÷eêdßºÑÎÔÎÀúÉ ¿Ü¢‹íü"›Œ~Ü¢‹é³âèB1Ë¢ ékâQ6çýë££——˜>&OX$g¥yÏ¬ !™µˆ•âˆ/ à~%2Á6&&÷¨--B:¦}²·¯WœC 
+�uºçB²\íÈôÜºæiÃø­Ç‡ïùQ—ï™›¼¢ß¿Lˆ½qú’jùÃh€[`4pi<QŸj¡†"nA8ý%(�ÿÎÛ�P@q¦Î‚è¨Â)� ­À�PÈú�D0¶ÇaiáõˆÞôìç†=Œþ¼�»ÚÙóköÏzùShªƒõªÙ[&›Bêi Ð7QHK±Ð—3‚*iDÀ»uçje¦sµ	�Úìp,O¯{ÿä»ß&¯çtQ›¦kß”O´ø�¤xj¡×SÈKîUŽ}‹TÛº£¿
+�ï©6äjçHž6_šÖs…<…ÒA’?Mš‰šÿ©^üv ÈôÆº÷••Ñ;kîu©<E£o³£ƒb÷˜÷Ïþ·(}#‘-î‹ógtlþH\œW˜q
+ªdÿÄ±n/ä)½ì%ë–LípÅ=ƒüÙC5¹¡üm&3µ“ fjSnÆêÎw{Ù‰nxl-÷/g—4­»S½^£í°V_n®[xâ®DžS˜FÉúõ°8Q8üØPž¬ÐA e±ßaû—Ó+Jâ( -LÍãGj[¤ƒõÞ÷™Þ¢Œ/1œ	ßçO/ôœF×f‹�}ãâðƒcî÷¤™¡dTè™To¨Ú7<ÞˆNÕÉU÷[Qö\›?fL«S¤)#Ð	ÿ‹iqÎZ~þ˜s“Å2Ú
+¼«¢Ñ;ûÙóÖ5w:Œ“?‘jS®v6+¯�Fo7XG$œ-†þ—Ön¯y_�ó‹,þXRœc±cž}+£Ë£ìyƒü’¦ÿ¥BmóìŸIµ%Ê.5`ûâö²ÿùÞèƒ+é3Ñ.[±hëñ9¿O¯µÝÊ•ËþèEPE†ŽãäyþÀ\pÁ�ãÓÓÓ[·n½óÎ;ÿ=üóN›ªªÆ¼¦Pž
+’g&[ç,lÑ!–:açÀR�ÌPcÑdþ8Ý>ÂE—±,ðhFDÑ{ÂÐDqC2ë�êq}g= b@3 G.iXPåàd“a;Åµ9¯B¶2p3LrôÌjdÛz5Å ä8ÔH4’“¡iµeÍ!îŠeÆí*Ç"X 9–o @¦«ÂLÏ'ÆåD¦j§+ntU£MI®Måp÷‡¡ýiJÒLU�ëòü|cÂ~ô‘8»"¾5ÍžcÌï|[VZFˆ*òuIAi5�Ñ�ÇÀ-  fƒ[c î�‘ rpÊ p'�»@X´î‚tüqPá €‘�¶ @ÖÂ€{`•:G€[ $dCËº(ªˆ õ:F†kÉkítµoúLŽý;iR"JÔX{Ê¾Þ»ž’¨ißH}~È€Ð¦FIÌh× m³EFÛRmv­ÛçÃ�ÛìpÅùNÅýcÐæPÚã´¥Ì¢0èl¡î~OšF¬N	Ø(3�I•xË¥A’õî]!ë&êTŸÂHó€ŒÇxBËQR2<‡a†	2ÂS\�¡çydŠoÐ+úÈ �ç¨#lÌ( µHžA‰ÎÑF€H�ùüpªN]N^“ëi�xtåh?}!"4üOUü/fi˜SóœØ  ¿ˆà­Öñ§<>*Ì¤}¨ÎC�L�2È"øŸì½g°mWy%:fZyç}â=çæ¨p�„BBH"JHÚÛÂˆŒyC²1[à@6QD B9g]éætòÙyï•×ýC*×«Wí.êÑ~ýª›Uó×·fÍUóÏ7æüÖãËcØÒì2`ž¦óØeh‰Á"”„_ÃÂ£H#0º:5}u<eHó3µñ<vT°#Uëv€Ø4KLØ¤ÇÄfµ¥&¬}‰‘›œÕDgÒïÕÄ#Mû‘BûžýëDî/¿}¼ôîA~ödù½œ-æù)‚íÑžó­ëJ7Óâ™;0Q¹Òæ»¤žI³´.ºTÈ…ZïÚ7¯¾Ë£·(=Þh|,Êž_>*u-ÎžÇÙJ`ÿÜ¸ö�“ÁGÃüÌº÷ÏuïK�ì¼qïZ—¢ôåÆ¸…šMò³rµ®PÓQ~#á¸ÿiÁ–3¹#Ê^ L�’4UÛ\ñ€6å5Õ?³iÔ�_ŸÉ�àQqbÕ½¦Ð~”?;÷—øÜH�{Ö-Óî�úÅIUûÆº}ãj¾uÜ¾ ©Ü)uÅåûÂüôL7sSÇR’7ìÛÚMäl"Oà¤ÐÆ‘¦ä²9mÜIÿ_8ÐÉž'Vœ$ºQ³e1Ú/9?³Øò¨8Ñ�LŸj§—ºâF[½üÄšý3BrJ"¥›%ë×Ãôâ\Oärcª6È²¸Ïe‹q~–6¾C‡ÊÔ´.[üq)·Ö«ïðÄÃíÁçãä¥žs�-îOäñË½ïK½–³ƒ…^çç]þ¶½¹^úÐRô:ÏºË±î–j:+NÕ&hz_ÊŠ�‰<>Î.f/²ø!›íg…É+ðÅ	÷;L°Åÿs´ÿë1r4ýÍßüÍßøFBH§ÓQJ���ýûÛ±±±ÕÕÕÿ(þ?X¶&"xÊÎ†ÚéI'Ôn“ãÑÄ<™²P�–åJ»X0U£U—øãlMaxfò&Ý:2mAŒMÜ¥#½T&Íµ›ÃZÐ÷vÌ£]óx‰l'Ï00ª¯{º‚8CóD‚V‚¥ƒ¡Ù[&3ÉŠ¾Õ#“9¢i¾V™`…BØ¤b•™ajdKpêlæ°º¡«ç&¹×ÑÝ
+SC•	B=b¨Ú¿`„r2˜õ~8RV,7¬Fo�å6€pÒ/ÔLIìn'WÌVÿ´P¶x@ê™réŒ.'Å)œ|—ë!/NÌÒí•òg…¿t¸Ó¹"ŽhmñniàéXþ‡ðÐØ‚°…¤‡áA	@Àm¸5”· \Du²¼)Èþ,˜‹"�UF°*ƒŒ!ST& |x;"	Q©÷Òìßÿ IsµÁÔÅ|ab
+Z!ëjtvœó1:êTAID�‡ù³û&‹´ðÝÚ®x€ “¥÷4ƒ«,þD*O
+³Ém¹öM½äÊa~n`Ýî‰G»É+¢âÄ¨8ÛfG”)i8ÊTvÐe‡lÚqÙ2'£•bl¨&	‘©Z/�=,¶;tXá‘ Ö8=æ´ïÜ�›À:~Ü[_Èeì    IDAT¡Í¾Ù?4¥),”taÂ
+�	Í°Bg\2Æ@Ë¤éÓÀ£„“°UðPKÊ‰[	ÉÖ•ÿ/A»óÉEë~O<6æü6-N[~:Œ_m‹ûU®<`ué²$Þ4êÂñ¡Ê•ßr”Á­Âhä!Ü*(pJð&ÀlD«T
+Û‡LÁlŒn£³ˆr¶‡JåGEŽ<‹ãólñ ˆnøŸ6ÆÛ_0�ÞŠÌ}RÖFÐ(Vó->eƒbã¤Hlº:áºÐu©keñäÊèc6;Ú�þ²½»æüP…ZRØÖ=Yqb”¾œÒ¾-”jFê‰QüšLmOò³H.wR:¨–®"P”Ót'§-BT7zÛòê¿øö�Ñ;ë×º­æ"“Ç)][~6)Î �íè¯ÚÑ[+âqc¬Lm3`®¸+–;)]ä¬Uè±B�Ó—'rS,·ãdr�¬ºßt¡§ÒüAC´Óç-ö¿å‹û{ÉŸü #ËÔFmì€u–£wÆÅ	ŒíôÒ•ä%UÞÑÆMÔ¬6^ª'ù©œv¶lÓn®½\—ÂâøP�eº¤Á”Ä�Ú–ª™´8�M`:rj9z³ÇZƒìlÏºE°#Q~Ž1–ËŽ®?f¹l±“¼ª—^\í(]e´“¨�£üßºÓã»4l€çº¦L%”k£aÐ’ýcßù!c‹�Ñ“ä¹Œ)é÷¢wt‡ŸRz¢b__÷?Yr¿eÏ£H,v¤=¼z�üYÅ¹a©ÿ5ŸÏ¹ÖÍZ×
+µ�³…Tåçzöoªî×3µÁfûââxmJ
+­€´#øÞšó}NW×ü®~ïñ8FfYvùå—ÏÎÎ^uÕUÿsW^ÌN(÷èpÖ½—%õi:RöÛÎ‰7%èËSFgZÆ�œhÄ¦}XÝ` ŸõBÓ]�	–S“q"(lkgè™Cs@"ËÌ¨mf°,T�¨ŸTÉ	e²a#»�ÁÑÈB³’byœží�²4ÉœÜc‘ B¶Zð†fGesæšÄ8ñÚæ1l`/¬Ò™X[uZ_–#,7*`ÃX5ŽF¯Zçý¨_ßJ_ä3II®aÃB9•ªF{Ê%qïÒðsU÷‹?ÚŽþ¢?ügsõàãžó³BnÏ3âWp!Ç›¹@sìë¶£³¥:zËàJBfH»èÂøqˆZáÕ`—¡R@¦0ÌBo‚i ²Vá’X%ÔwÀ�B1DØzºˆ]�ÊÀ,4Ö–‹$DÜÚí¿7Wë¾/‘ûùy�bf³mq0]aéP‰ooõowùÁDnIåöº÷Ïqþì’ûMFz®xx¼òæjé¹žâ!Ïû¹ï]Sñ¾P÷?ÅèJà~'Éž7Û<�‘„ÑÖSìáòG|û†’}##£~vA"·ºânJr‡í!D­wï«‰ É©¡ôÚï«
+@r“=ûÚ{ìF~á÷YÃ=
+]á-‡¨*ÙR#Ûlb—éTGï«ÒÙ–ÞÕ1®è}RNL¼ ï�t¸ª:œŽfìUžiP¢¶ÚËOî%¯´GAç÷NWJî7ëþgêõÏÞ7“ì")1¿øÇùeœ¼L©É§üoÓÄ‰zÈ„-dÂÂ6‚Id#D]È£%8ãh£‘�žf&§=ÈvéieiŽ7@cªeÛ7WJ)ÔšaúÊ£ÑkJ”(bÓÊLnSkˆÝ›­ªMô´û# %ñhÓÿD/ùóÉò_M•ÿrMýÂ±ào�o”ÞïŠéòXGÜã»×®?kóG\ë—JMk=V+]@NÔ^V¨5i~†ï\W¨µ…ÜÚO_®M`Û�–Ý¯¯Ä¯/¿M™ºcÝæ§XBìê†ï/{_¨zŸ/Ù?¡$±ØÑª{�EWµq¹ÓbûmþèÜèC]ÍåF›?!u£dÝ¢Œ/umÌûR¢qq¼+îËôxV¯L]ê¦ÅÄýÙŽ	ïi*Ž¸oXlˆ seçú²ýÛ©ÒJâ!B”MÛuûFNSeœHnuÙa‡ïà±¹\O¸lO¡ËeqP®·o�5�älnìTîhËÀ€FÐ¥€/ÊGSöc…vJâîž,Øýô²’ýÏº}²úšÀþ!R°Åªý#‡-t”]èZwß¬´ï‰âü™6ßËÈÈVW™Ò˜óËB�{ü! ™Üy¨÷]!ž¬ùW;ö­®uËjògÍÒ_ÈAòj@KµAÊõÍÒ»çºJð±’ó=J’\n.Ù¿¤$Yþ½1¾ïüxyô�TM•ìŸ„éÅZW8äjýHÎTÜoÆjœÒ¾oÿ<U3¹<f%¾Ò³oügçÿ#€¼ôÒKÓ4½þúë-ËÐh4c­Vëßç´Z­ñññÿ(þ?XÜ£¹G™zùÉŸ·öÌË¡GõZ÷Æ&mÎIO–�™‘‘hÒÕ­­­üE©d}œÕ¶ØîvqBh7ñgHSPX]s€ ëbÓÊÌ€ Cs¸À`‚>»DÖ'¦ÝUU²~=7 “~×<’›¸oµIU!ËÍð°þÞÀ<²ln™"WiCš„Ã_VGVõ®y}kG-¤F¥¦ÇÀ]Â
+ã.«vhò¹ø%¹´*ž (VŠrªËœä±.çjm®©ÚÆHØŠÞªMÙ÷»ö�ŒÍr¥{m&Oèö>Xñ¾BiWJÀÐ~wk4œŒÂMy†,! N	ƒUˆ YŒî^BPš·u`„‡"€ñ³`4¼	ÄË Á4üu50á!Œ¢±	ÁZØe£¶1j#‰À¢è¥Öxâ^N:ËE• CÝ?’³
+OJÔmI�ºs�ÔW<Ôð¾:Û<»¿E°£Z×ßoŒ3Œ^[ÈuÿÓÝÑG’äÛîJ5Ké�Ñå$½�³#®—nœÚá9×+=6æý‹E[…Z»¾?“;Êö�LÐ!)A>,Î`$Ç‹õ ©‰=ü¬
+’k·ÌœÛ^~zÖ·¾üŒ998,ŸìÉ1‹&#<6£–Þå�zƒGkØ	ì˜¤§MÛ£þ~-‘æátM¡K%–kFr‡©ŠÇµ±ùüHT<s¾ÿ•Àù^’]dŒX\ù&ÉhTÞäzQ¹ô1©Ö9d×Ký:’„B8¨¬As;Š¥Lì(Mc¸  •�à.ì*j[¡%˜�òŠý9øMä)æ]™¦ÅñéÙ6{Ò"'27‰�ÔP-up–>—í²^?;wÚûN,·¶£w�h‡à|ßJÿ›ƒøJ[<@è�@M4__ò>×ÿQ–?«â|‹±V!·×ê_¥´­Õ£«µò‡;¿n«–þ.N_Tó?IH1[¿ J/�_½Ù€Ž9ß£$Ð?0|8•Ç¢¿¨úW·FŸvìßtãW+]³øAF{…nLU¯ôÄ]ÍÊ[’üYeñ$@ªÞGÙEFê1Y¶rdôîºuOÉºu”]T±îÐÆó3m¶ïPïÙ¸µHI¨�ÕŠÞ6áÞÉu½ô�–Â·Züñ#ƒ¿o¥çJ]b$2Æ*´3é}ÑçûêÞ?Žò³I"¹¾$îîfÏŒ1– ©Ï÷Í%g7ÅJE<QåMY‹#¹Ña+‡¢W	Ú�áãŒ5Èbré„ud˜¾¤æ~{)|gûÚ·´“?¥$1ÆÖ¦šªéºûNû£ôeuëq‹µ‡ÙyŽx¬Ÿ^ËÍ \Úå¤4~± ­Av!§‘Ò5‹Ž¶4óíÛmûÖšu+¥][<Xv®YˆÞ¦36¿:üg©§�´oïFoãt „dž¸Ïå{lëÎa|EÅþuÓýv/¹ÂwÒËs=]èfEÚÝûÜ¸sƒÒÍÅá'”1NÕº»ÿ®¼Ö?pvþßsvò<¿ì²ËÚíöM7ÝT*•þ}æÿ,ÎÎß;íNQ¯òØ€Œ”;&æRÕœð¾•'‹ã­ã¼Þ�dÓ”Ð]é+(›—ÊPÑeýè1Ö†Cy¼Õ‘ÝbÖ"j¨Í@ÏM±õê€Mª…‰:æî*ÙY&ëÚæQ…ØB­F¶/›Ûä€‰ÍJ‰¬-M±Æny§@eŒ3Ò«]ó€MÆŒÍnAÊ
+‰@u-;mA=^"³¹	%‰p’îô(æä‘™ª0Ë¥ŸXÎNñX,H”éJE<ÑÉwr¢¤áÊ�Yÿ»™ÜÞÉ�/óyJ2�?Ò¨üeôAc¬\­­ŸH²óßO�5š_ÍS$éY®{c�ZUËõ¾åa°
+a¡ºEŒÊzô�Û°|Èî¢eƒê&ôö@øpÇ 2XU¸3ÈVQQ¬G²£ 8ã�‡ @åH#tÛ/¶­û@ò}+¶”ª©L—ÐSy“smH_ë&Së¡B7\þ¤`‡9]´Ä.cÜ8;Ÿ’Èw¿'ÄcIré0ùß¾Éu~œç§Yâ­kÚxZOH5ã:?÷ýG—[Ÿ©ŸE¯ìp®¶h]l¾¿©æ\—É­‚-ärãBzî˜µ·_l®ð#¡š$ˆ6,7vª‰„
+($_‘E•«r¹É¦zºS£�PÇ¹4‰DR¥kmÂûºK@-¸)†šÁQHt"5…O9'²"v[ìè0?cÌýJ˜Ÿ/è!9À;Röþ9Éž0KÜoÛwtW{ö/'gÞYZ×˜:Ò]«6[Ü¡H†°pT €?�î~øM0•Ã®¡á4Á=#8ãîƒ?‹xº€Ê‘GÐÂÅÊ¡²”syb!7Î…ï1†|áPV©ÒJn´CIW�f„¡$¯;×¥ò˜L­+Y7kSö¬_¥Å™ßå»ßcl1ÏŸ	äœñƒ¹Vë/-q¿O”«�Q¿'—»î�`„ã­ú—rcK„„IöÇº×÷Çéå”|ïšþè¿Æù™÷Û™<6p®�ÒK¢âY%ëRÏr:åçVÜoºöMyqRZœ¡�Çé’ç\·ÜÿšÅæ,¾¯ì}~±mÅùŽTk�±\ûænôViªŒ$q¬6»ì¨Í÷&Å±„¨²ýÓnòÊHM×­R5[wdjk¿8¶Ì÷$’ë\¾hÓßþMZœ˜Èc˜ �²ûÝÅÑUíÕÝ¯ÓK5[µo-Ô¤4•Àºµ›^¦� %¹6Â¦­\×Ð€ïî'�«ó(Ó~™Íu¥jß’Èclv8,N,‰í9âîBmŠó3ísºäÙ7õâ7ºâY¿iGo'DÖíZ—yl`Ý¶š¼Òe‹…®&ª&hfÓ¶Í
+=aÝ<½±Óûh/yYÉþ-%1%Ã8?‡Ñ¶Å*ÝHäñ‚®–½¯*5£t=—;,¾§än±{½Í’
+v¨¿¶bÿš’P©<¶â~{5|ŸÅ
+5V˜j¨jMëQA[ ^;ºàwáìt¿ýûbGýÿ»{š÷ûýÝ»wïÞ½û‡?üáóž÷¼Ñh�âÒK/}ðÁ?÷¹Ï%I²¼¼¼¼¼\¯×cŽã\uÕU6lPJ½å-oq]÷ãÿ8¥ô?Šÿw?zÕUW�M>¦A„K‡6‘2e‘úb¶Ó&#™4cÔÔ<@0B(X…õCíµõ‡4)È;¡é�q+Ö" õ¦oöqx
+i�îÔP6)ðdÇUé†¡90�bÁüX"yB}¥BŽ/“��ë�jãôY
+Ù²ùùvögC3¯‘ÔÈNeŒÄ+ÓzŽ"ÆQ†Zh’�&[sHÝ?kiÊ}å;Äp’
+åjJ@šk3¦�%HNˆ´Ù£ÝNø.mJ�òû-~p¿~vúŠvï=œµ9»+Ž/ó¼…€°Qd0`EžBæp”&‘`ùˆÛ°K Ü…ŒA)²!�S�Ñð§@)Œ�3QA¸¨œ§�Ñ@ƒ
+Ê�,Ãm€Y QŒí•r]’^,Õ¶Ýic�{o§Ø–ÕàÐ†Ú4šõ~æñý�ì<—-¶èÛ?c´«õ„1vµòa‹?"ÄÞ¼8‘ÒŽïüÄ¶î1Œ­¤ùsËåRzPÊMœ-)=5Š.õìŸ�â×äj@\×º»—¼ŽÓ#CJ@‚)ÿó‡ÂWhP�…¹.{l‰ ™.(³�M§E¨½€ŠP«
+­ °ˆ××­&+sâÆf ˆ—™°cöÔ%µÈ´ñ33ÄH­¥Ž±º6¤§²PMÆr{…0ðçÓ³K|µ“=‡ÛfG£ì%…ZÇÙg‹–8Z›*åo�3Y~–Q�û•8–BÀÈ^nÅÁT‚l„`’6*[ÍƒRäCd=xSP:ûàÖ®@+paEA†Ñ[œaú²\×Á|ÁSÓ¯± 1ºÊÂ¦èùâqO<*õT¦×ÕÝk›3¦ÌYkÍô»ŒZäü VSB<©u3/ž‘gÓ�ÿ-‚¼6Þj-_˜¤/b´EHÎØ²*\mê•Ò·¤œiŽÿ8OË�‰Ó‹›�ÿÇÏãt9p¯åü�LòsÃüÜ†ÿY¤Å‰„Ð©ÆEEqâ ~À;˜§ÄòÔ({QÉþ¥6åzù}Ëýo+Ôý«ÃìRJ2©×S®:ßÍäö‰Ê²üÜÀúŒ(9×gr§Ô3ŒÆeñ%#JŠD3(¶6�Û()
+=6]~O.�ctÔI.'„
+ÚNÕºD­dÏ-‹]Ú¸£âì‘œHÍ¹~T<€1�2¥Š}Kª6L—>DL…Œäº1ç'™^§á1’Wx[Ð‹ÕxWñ†µ',N°ik²üv€I=»¿ž�Xl1’'I=1H/1ÆkŸXÿ.QÚ¸ÿóÃô2e‹-Á¸Uçûuï+…<µbÝ!X«“�3î}1–';ô	m|A‡®¸F¬Æo®9ßÌjòçmO7^ÈPäò¸Åð¯‘££Nø×.¼ÐëJîµ‹£«()Rµ¥âü `…ÚD€ª÷ÕAzÙÚú¤<qÜý§«ÝìkªW~w4ÿ»xš¿ûòßA>þƒÿÅžæÿé÷È§t�ÿ÷ÈÍ7ß|úé§»®ûÿ˜¹oß¾Í›7øä'?yõÕWw:�sÎ9ç‹_üâúõëŸšðÅÿ»ç—rSá]‹¶Grc¤!DSâÑ‚B)#Ãºj~›£59P¼0Å”¯å¡^šSû‹Ç}2;Îê™!8 n'§øÔ!@_C3ß [µQ9âe}Ë=32ó6ê.iöÌ®¡Ùõ” >Ù00�ÙcÄ©àX…¬kî)0\C^ÜÇ>Ö¥X�¢Ïè…ŸÌØðC³\¡3.aËj^�ÃfD&)ÑŠE4…	øüSŽY­|Ê"¤aí¢¤`d`Àûíø¹®M¸_s¬;£ì"©§íÔ‚�ôÂ¿vÅ�RÍŒ7ß¥$²ì¤ ü�°�Æ°xVaÙpÊ((	§+€.L#ZA°Ñ"Ci-â%xÓ þFô‚ÊàÏBTP�®À_‡è0G²Š"…?�¬�þœ EŠ……¿¦d¸8ú°4vK…b� ¹vrÃ}:´XwºÖÍYñL‹?f[wj=æ{¿öSVvÇ[Öcýáû,þxü˜qd©Ÿ¦ ¨7~”Ä,Œ^]ò¿”fÏ¦´;ŒÞ0 ™Ü"ØB¡f<ë¶Bmòìúñ¹‰Ó¡6nmÃý•W®Éú�1Ó‰�c)!*8fpø�åöÒN½ {“llEuÆX“Â,ÊeNœiîGÚîªå*�èè#uºv^ßµ†ž12eRŸŒ¨žÙS#ÛÓói³DEW�Öšjß¥CF‡Íƒ(‡í¦´åg[ì¨#îóÝï*¹Á¶o³ì¼È1ÿjó1ŸŽzögwÕ)„m46"Z³PšFÁiBçHZpêÈGpÇáL`å.Ô¶"^†ð¡%yº»g‘`°„ÑàdÊVâäå­èí*ÓÍùBÕh•í±¶Ãæ
+=f³EJ¢FéýJM;ÎÏÂè5£ô¥[7�×^¹  �ñ…�¥¹¨zãçÝÎIÆ&o^šusü_GýmYqª%Rj6ðÁƒó”nXâQcœ4{v¥ü�Y¶³3üD-øD”^"õ„Åö)=¸ß5†3ÚÄodÏß1;³´ú…Zù}£èÕò‡Z·‚ÈšwukôJ¢‰ê•óÝë'Jï_}Œ’ÄfG
+=Q¶*Øþ~òm<‹ÑÆKÕÆšsí|ôÎ�ï¾¶×ôêmÇJãXt ŒS÷Rp:ßK/[[¿l¡÷- ÿs£ôÒŠûµ…á'ÉÊÖíÝì":íÿC¡6†ù}¹Žå³åPNÖ­‡]ñp7½ 6[ŠåúŠu·Ôã‹éÎuþÏââøXMP�€–:°Ùâ¨8fûäìbçBÔXù/‡ñëJî×—_¡$±ÙÁQ~ÚTé¯FŸj8×åjãJz.#zÌþõjzþ˜s‹oýj�¾”’\ér®eûVN—ŒÞ:ëÞ@ˆr­[³âDJ†Æ¸ßh©§ÛÉŸ3Ó\XýÆjšfÏñÝŸ.´o¤$Jäq™j¬¯½l~ð�qÿãQ~ATœ¨´?üý�ÁßN8w $,Ž­Ø·ä„0Ü÷>ÞÿèGû�î‘ßü½ï‘ú/ºÿ/º�ˆ"5¼ÌÂžôj<f$È¦KSeÄ’êÌðŠÍµ°hÑ•ªÉq¸X^/&‡Ê„ø,Ìµ7ÒÚ§l^îŸå›2MJ,;Zô8qË´
+@sXÿªNN,L$è¡y¢LŽY5¿'çÛh,›}²‰€h
+)‡WÂæU&"à[ø¥{ä¿UÈÎ‘ÙS#'wÍ}ëèÅ-óðF~Z[õçDT™>Xª�uB.Ô!Ž†©0)�¨‹'Vóã*¼5Ÿ{SÂ(Ñp~ªuyXœ&µ»©þâ$?·Pësµ~ýô³WþÍ÷:ö¯„xb¾~|ü_ÂÑš±é…$ÌÓR¼<E©%QšB¸Ë…ÌQšB£¼	Ãpê F‚¨¥Í€At2ÆÔÅÈ�, zÚ¿†¨¢€yP	Z�£4…•½(7±rts’¾ðÈð“r ìØŒ&¹ÓUtÆZ¬ÛšÕ7,un˜¬¿4Š_Ùl|Æö‘†xª&¥HbÏõcU MÖrqÔ��¦çPÏ»©?|G’?{¬òZa­öo³ÄÃ­ÑÇKÖ/\ûÆBm¦¤›gGÙs<ëîAúNßm‹­sN<¾•®<6ù¡fû£{¢ø™ÖzÛ;M,\3#�í°v(§•¡‰Qw¥?ÐË l:ÒÑ¢¾i‰G³¹¢#ˆû”Í¬ ¥Ä,38ºYAe&ÔPÓ¼¬5 ±F•§Ú°‘²ª|ÄHæñ=‚.{ö¯úÉ«ÆJïd´#Õ†zóç½ÎsÊåßL ‹…ÓcÓ‹ý*c.¼&Òì*ò!¸îÁ�€J cøëQô@-dd=XU¨á2Ü²A:ÄÜá÷ær+¥£~zi¯˜)óÖrQ-LZeA…/ÔìWKW¥Ù…¾MoðázåýaürÏý¾ei)¡5ÍóS9;¢¤Ü`[ÌìDk?´Dž‰Rµ0@!Ëf•Zh¥fçBÄQtŽçÞ*•—¦Ïçü€”ë[tÝû’äôråîAï|Î´‡Ÿn”ß=ßeñ'ûWiv¾ÔSZWsµQ°¹Ln·ùž�^½0÷¥'SyBÕû'c¬~ü¶°Øé°y©LÙá»-¶/ÌŸX¿-ôLZÃh¿v1‚íäÎ¹ÎíÇÖ¼ìEïàl±�¾xÌù~?{¡ÃŽ’KÝˆå‡µ¥.	ÖÍÕ˜ ƒM“kÚ¿†¡±ÜV±�Êãb¹!Öe—FJÛç�åN�åVJ¤26#iÀwQÅòØšû�vüj‹vÚù¶	û~›ïætI›j˜Ÿ£�MH.uÅ�EÅq„è­Ók:½‡ùùž¸›’¸P3©ÜËõ[Ô°]õØß¾y˜¾àÌ«)]µîµùîAö‚‰Òû²â´²÷ù¬8yyôñ’¸Ã
+þäâðŸ=¾'WÓÚX[’º¶¦~qš�§ôšBÍãP’(]‹Sí2Ú•j¢0•ÙÚË¢ä²nú
+‹®¸âA±ÿIE|K¼õwÁÈÎ7~ßdÞø³?`äF~Ò#å[DbbÍ]¢(QíEªYâó 1`ÆÐÂ”bh ÄFó…H55ißì«’ÍœXËú¾SÝZ¿Ø²$WÊtÒ"tEnÐu‘ZÄ[Ô·NÓgIStÍ.#ì!`Õ‘Ù�M9elÕÈ,–°¥@H@
+ÒŽ¹­FÎ(1ÿº“~ô©~# ÉŽÌAg’ž0Ô«	V9<›Ô=RIÍˆÃ^6w®§çk˜¦è¯åS…±\:Hu¹"ögj‚‘¤lÝ–«õ�ü>[IôØºÒÃ÷Nx_àìpàÿkQgŒoÛ·aŠÜã+ÿ‹~	Ym`»`¶�,ˆ‡h¬…Q¨nE/ü)ÈÔ‚Q(oGÞs`5a
+÷À�@²ŒÚ)�C@£÷*;`$¢9ÈE„¨‹£Gþ‰³y¥›‡ÃwtTFˆ²u_&7Tœë,þD¹ôåNï“�{ÍRÿ[kê/²¬Ã¶Œ†³ž?'øä	²•&ú-0¥( ¥ÜÆWLN¼ÿèÂµcÕ+¥ZËÙÜJÿšõk^Ün¿®�[3y,!yÕÿ”ãÜ6ý@´.1ÚïÄoXÍ·Ž—�Œ_¼TÈjzýÞŒl«¿É¬þS9Íj6ëæº+ÿ)n�2Æ¦�†Ä:�ÍS•ð[ÖÐ³cÓwH©ÁtG±ÌD³·J¶·Í6–ét¨[	–«dk�ùÉ~x%ßn-5@•·|ñx"·yü	WÜiñÝavI½ô¾¢Øá¹?ã?ñ½kÊuQª£HQš@6ÄÄi8ô+Ø&NB²w
+íÇÐØ�ÑQ”fAmpÆ€ £½Ð’.´„ð‘ôõGâä¿³—´²Ób­“;Ä·æB9]}qw½ôÁ8½„ÑUÏýa^œ,Ä£®`ª@ÐÄp¶‡?Ê—å    IDAT,FQ€1 P
+–%Á9´A‘£Ò@¿Å	‘”¡Ýûh5øH!·¥û£ðX›�d½ÕsvÈunŒÞhJR­UºéX·YâA­Ç´®'ùÙ®u`’üœBmàt J79[RºÁÙ|&�ÓÆkïï„¤$â´³šüqÍ¾Yê±Àúu\œáŸLåØZÇJzSÙ½]OÜÙMÿ˜¢àt˜©)el�ï·Ø‚6¾gÝÜŽßäó‡Érµ!U³œŒ8fjBÐ%	%Q,·è†û�vr#9§½Vv|]–& $#0E¯ØP‹±si×�¶Óó8M-:åÔ”ûCÁŽhhãÎÚá¬[žúëÑO/·ùaŠ$’'Pdœö¾7,Nãdè‰úÙóx|O';»aß’È­”¤t¥“Ÿ°¹�\?nßnÀéÙâ1c,m*Û¢“§Týhÿ�’ÈæOp6Ÿ'2Ú�ò³-vÄ¡L¥ìü0Ì^`±ƒÚ8Iqraê™ªÕìÛ)‰Œ±¥©cÖÍ‹Ñ[Þ�;¿F¶¿þû&óæðøÏÚXnÓ‚íÒ¶Os8´«Á3Ãr][ÍgWò)‡­ˆPãK©š¬Rby™9²±Ê‡ð)zê\¶yEu-Rv(ÉŒâÄ3@Ï<ÙÓ	XWïX¿G ÀÆƒï`¬JNÌL»Œm\CŽÌîEóÓ®¹' kjä ãäÂÐì! uœ™Å®¹gdær.êŸNÐS(¸�á@…lôÈ„_š|VP‡¸Säl›‚€C'éH‰.{¬3,6�y_´¿˜¼”�|Ì¾#×Õ€ÍÚçû¤žü ”[	dšŸ#”Â(zãØøóü 
+é¹>lF£HÑÜ»„R”Á¨Ìs�‡p' ƒøj§ƒÚì/¡´:‡7Q!pÖÂ› £ <0›Æ¥-33
+ói£rü>ý½+îsGŒ„‚®®Ä¯—jc·ÿw¶x¨6öð–µÇr{¹ÆPä¨Ôæl l~y~,!àƒá•Z�åÙRnôÝïDáLÙûZ¿†’Q^œXv®	G›ßWè5R7Êî—’ìü<?6/vŽÒK
+µµ_iŒØ±íócžÄwåÉ�'r‡sªÈŸ T…„(�ï
+øžÈäÚ˜Iûá¡iT¢ŒŒOšÊã½@jÂE™8DÄfE!! .¦rô3èØ$=14ó.GÊ^Í·Ó§²°Þÿ†EÛÆ8¹.§rS'~­‹‹“•šN‹g…ñccß’ÅÖa‡SŠ~ÕYÈ ˜¿•	Pöô‘…
+Ô6Cç°+p¦�÷!cx�w�,  µÀL�î<mé'ÿE¯={ü=Þú·í]é’B>e?™¨	‡«Î÷åwŽâ×øîwë�«Žg�ñ»“QžÁ¯Áàˆz`ñI¼€ãC"¨‚qÈB¤)õ«£?É*-£Ñ1Ò›iÝž—'ëa	°Zõ¶uw¿Ê�”ü©V>_ö?Û¨¼9ÍÏ²í]–u—cÿ†ÓÆ¢ìâ(?Géš#ÈÕæÀ¹ŽÑn®6&ùé£ü™Œ³â$J‹íïgÏ'Pµ—J]¦—¤rKùŒ‘5S”Ï¡“/Øí5²K]v°lÿªê~¥æ\?î}9‘-vÀæ�õ“W0Q’ós†Åm„'ÍÔxÉº‡�<Që|ë–‘jr:,ÔzA‡›ïçÇ /}(×¥�œvùneÜÈ²n=`±åNöì€Ï|oÙºµiß[èiÇºE°#Žxp”þ1§=Çºm˜½p)zSaÊ6ÛSè5‚v¥	”){Ö�±\Ãi›ÒŽM<þDXì$Ð±Ü¡Œ?’þd"·¬È u±K»“�jó]Œ >V½2)Nw¬[)qºÒß'ØÑñÊ•ÃìyG‡¶ù£q~z3ø»Tî(ô´Åæ9;8*N–ºÉé*ˆóþ‰’Â·nŠŠ“Ââ¤nvJ`ß¤ôXGþÎ‰øúÈÿß>#UËµ$�Ô˜å¤ÕD«¨–YhÓÎ¦à»ýzù3–Ós\ZÌ…4„i@#-â­ªîª:™�KøkN £÷WéøŠ~ÌÅ„F6NNëš»gÈ¹d¼oŽÌAõó
+‰Eê#ìi™›9üõô��e¯›¡/è_ÔßˆÌ!S€Í~›LN“vÍ=j–^ÞÓûS¬.ë†æq�±Yš£¡Y>�»z®ÎÙ²\ò©VÆ60¡ª<Ý’IÕ«ÖÃìE‘\¯9Ÿ’¨M�Ø/M°ð±†ÿ)m‚arEž?c¿1p¯ŒÞ[3åÒÕá`ƒ1å#G¿ž$3Ž¨�hÄ²í=ÈFðÇ1j!X£@(ò‚5�1¸‡ò±HB%%´î ¯Â[ÂÐ¹,@º€`+t�tþ,¢HVöN>¡ [µöõyÏ9üãõóŸžÞøâ}ÛëY÷Î”Þ­tÝw¯�\óíx%Q­ýB)¯‚"C¡>+@ØÅš-»m °ø~yEˆ'lën%ø¼mßÂÙ!Î�Ê¶î)W÷ÇÙEe÷õàS”]ûÖ4»�’§�nú<Nûu÷ëÖóOõ&†Í?�½£¢…W?¯¿rÛš~±Åç‡íŠã6¹÷sB³,øuf‘§ª/0”�2Y/”H�ÁcåHÇ��µ³ŸÁq0ž›aGïéèƒö\QM»ÄB‡æœœè°8ËbG�áUëA; :Ê^hÑ¥4?×³A�E£Š�cÙ2‰×jí÷ŽbÔF‘Â)AkxpE�Ã®#"^…‚ZpÆ1|º€;ƒò±ðfà4¡bpÌ‚eÃ6.}®vè³[g¶§wù“uû¶©ào�±¥Ü<9ñþr}ù)ušV �xª�PX¥0 å:’š3Å¨kyeXNAˆ´ ØÁ<Emy
+Û¾¥RþäÂÁg•+¿¤dX¾),ÈjðÑnïÍqz‰kÿœ³ƒaüçyÞHós´®R2,ŠÙ0zc^K<(Õx®§*î7Âì’±òÛûñ<ç:›í!D2Õ‚GÙë¥÷¥òD›ÍW­;Ž´­:? LÅþÉà‹Œ¾¼Ô¹¹¹|Ã1ýÕ3<ñ £½avARœågj-%Å(??—;(ÉŒá¶xHg¤ì’x¨—=§bßÜÉ.(Û?5†µã×	"«Îµƒü¼šûÍDn²é¨&Žì©nß:aßCHJ`&Ä(Výü¤°ØVâí‹cFùYƒb'Ae—*ÝÈåvÀhã>%q(§$fö/kî—9C—Fa$/9×µ¢×ùÖ­©ÜäóÇ]¶âñ½Ò¸uë~€Öš4V“¡ÜÊ%~4‘§Ó—¶o±óKJÒîèƒ”„IñÏº©PkÓü<›Í$W[ÆJïÝÛ½v²ò&eü¨xÆáþ5ÚpWÜ�Êë·Ãì’’ØÕŽßê°#¼,dÊ”ÖØ�?øìüïð  SÞ÷	ÌªT‰6c|˜¾\ßN_´œ¼@6nß›kQ&�£êÁ–,”a%Ê$äËdè0p”÷)c¯È…«CÝ©’-œø1æÓµÐ,a#…`ÄSH 2CÏhlÅ³®ê�öŽÁ3/?Öl¹ý™W�}ûíÍ—Ü¥‘­!—Ød|ˆýÇ°74É™ó`�AOX¨…8™¹–ùM€M©Y�$Ï?ªo-“µnÇÜáH�Qax@Çæå‚ �Ž”Œ˜_ŒäÆÅl!Š]e\7’ÊÖë‚Ï'ùÙõËçO•wÑÛ�’ô…iz^wt¥«%ï«žûÃÎÊI”ÁõU8:!‰ s¨níÝ  %C>€Ý€·Ù*†û@(D	þtŠb€òI˜x1*Ï†3‹¼õtÑ/kÃ*¡Xí§?ÿ¾ÎeÊÖxÞŸ·–saÂ¸oþ¨Zú ï~¿âÆq1µ)pn�Rä A(*�²¼2¢”ò´†�—Çáú/r3!ˆ“—,Œþ\ªÍÚ¸£þÚzù=¶ug˜\¾:¼Ú6H^AhD ]¶`±Ú”W?G}pbåï‹ÅOyƒxzîÃÕlä�Ù÷djªP³?2*Ž—0616q'ÜŸ2BJÌN1 �˜n†^_¯ôÍî®J±\R¯Òµ‘94Äž«€qÉ¸B<Å×&ðæ‹BÖ’’åñÇ’‹¬vv¾gÝ!hw”?Ëi °ÄÃ�›‚Ò# ðü£œGyBáUŸögÈ#„óˆ»ÈºHVa×Q?¢ŽúiÀ€ZíƒÎwÁ+!SäI�üdk‡V�ûÔ#Ø�	ÏŒ_@HÆÙ‚mßE)â øM€€Lî€WG}´B‘¢¾Â†ï(20­PË¹càúðø¥;�Å
+c $*ŠMÆøJ¢1y§”%Æ”1vÔ¶îw�ŸjÄéÅRÍz~G©	­›ÓSïâ|®Z¹º�[«•�ãØbWÙú�Òc”DÚ”ªÞ,ëQeª0÷uFçÙ¿Yé�Ñ`
+=¥�S¨é±Ò{sµ™Ò§íþ�vvoÛã…Å)…)•œk•qÄšÊ›*Îµ¹žNÔúº÷¯Æx]­‹n¡')‘Æˆšu£-›­z|W‰iÅ¯+‰û—Âw24×U™ÊM©š!0.ßÃHB ‡u|~PCô‹ã•5çû0d¼ò†²û%Çº%.žÙÏ.¨z_Ö¦æòÇ&­Ã…šæt@ )¸|/#IÅ¾ÙeK‹£¿Äcíä
+ÁV=©�=ÌOžôÿ)×ã”„¾¸SÐPÐÄ¢Ã’xÄÀêdgƒ˜$?Çbªþ'&ë—zÞw
+=f—”�k	I S�)=Q¨­ÛK5S¶oôÅcÎ÷›îÚñ_’öÓ—xâ®T­¥$neg­«]l³#£=ŠôwMÂò÷ÀÈÿÄ� R�TS?TeÞÐ´QÊX…!é’†ìI¶G&¯ðx=;©L} …¡Bï)¢ÿ²Ú�õ«R®·ª5r<¨ë“z€�`Ä#„ŽÌaeb7Ä~¬ÙV¹õ³ý‡¯^?sf:¹ÍÿÞg~øÓ¸}ÓYÀö˜OpøòIõe*P˜‡
+ÓgÄ«“�)VÊä8á�Éû«ä˜'õ?VÉ‰ÜB…Á8DødbWqohºÞYÐ7¶T/UMF²
+Ë}~Àcm ™*U­»†ùÙÆ8qqÆÞå£­0»¸•\–Ëí”ôÿËR®sÅÝ”	IÃøUžÿ�’H#8Î#OÑ © wàV°ø0d
+wÃÈö¬üø[áÌ€90åg 9Pt~köä ÃÃ0
+vÁŠÜgtÕá{eGÌ®[Þäîµ*í­ã³®×-U–kcO2ËE:`yŠÆ,üñ§[TrYU€qpS
+/Å=‚ ‰æÄOÇÔÌ×Ëå0v”’ÿÆÞ{kV–i£×V~ó~w�vºi �&ç¨€˜ Q`FQÇ€|¢ã8££ŽiÅÄ8€aÔ‰
+‚E�&7©w§Ýiçýî7¯¼žp~À|uêÌ9UNù�¯¾óïZ?V=Ïú±ªÖªûªë¹¯ûº–µÍ�.õƒË£ø�ÕÒ‡:o™[ªùÏ9æÃÛ“³ŠÄ¡„$íl£Éæ•Î×Ó�}Ö–œù¤M©JÒnvH"û$¡Ð!íäd“È^ó…!ÞcµÊtÙF…”#_×¯Ì«çÚzï‚z¡�žê½E2î‘ÁHÏ§h×dÍ&e—z&ÜÝây“X¢™œé¬•­·iSéœÖÌ¢3©X#å€Öˆ Ôo6ÞµPûJ[axjZ.ƒ™e¯�­.Ã€×�[#­ƒå‘[gN?‚½°Jà9dMÈA†‰fô¥“a�>ó±ƒÍCMÓ˜×Ú&…üwrîmù^­‡å¢5¯BÑšwQß‘ÂÎÁé…�Cqn¶‡vÌÀþm'·» Û…�‡í¶Aàæ:åÞIÛ~ Î:°ï¥zº�õY
+­= Z{œíïí½Æà;fç®³Œç’lóÌÜ·(ÅüÒ¿¥â`ËF7ü€É_)¸7üUÛØRë|�ÒÚŽÙ Ï¹Ý6žc¤kOÛÆËÐÄ3þPñ¾áðÝ~zâdóv©ÊÝøí
+–/–kmJ] $êÏý£I›Z7šl!kgÚ×Ïù‹—ï°Í':ñ›Jæ#ßí²ÉZ|>�ØÕº6g>fóm­Q’š|§Í(É<c¢d>Ái«þL•üôH¥]ŠÄW–ÔŽÔ9hÖgÿŠ“t¿%r¶y[’=ß¹Vk#o¼˜s§›µ¶‹ö/‹Î-Œ6Ñ¥Ú×gª¯â]gOlÖaSßaÒ%F:]°ù~BÔ¾î'Ù›ÈÕÜ¢3©ò8mÕc±éAçgíô0¡ª”vüè²npÅ\ý>­M@–Šÿ,åˆÉvW¼oer°]’‰•uÿo´¦®u¿k=¨T>o>Vtn4hMk‡@¦²7Ïgö4ð³Ã2±Êä”¤öøÿ¼fç;Þ©ª*meÊÚ¤D%Ê´èkŸ–˜ÔÏ”c³¥XöÚ´Ñƒ¡E†Dñ9¹k”¯z5»w„žeÃ$´©‘^4P°I©ÊÍ¦TB' "]§àñ b/Ñ‘†Šu=E»0DŽþdsa«ñäM•áÒ)Ÿ´g·f»~´ª�mF|½knZ†K5ô =«¦ž�»Øæau†f…ê©9D"êê92NaPØ
+IŽÏ«G]²|Aÿz}Ÿ‚°IÑ&&'z^L�ðáH³ª1ÝÌF<æ‡2çÐ(TÎ˜{[=9‡“h¬|A­ûU›mo&çz|Â5S:ï˜¥b£gßEY�Ò¥0¼8Ÿ»…qH�\~Ž‡8@Ï´‚™ƒ;"®£|0d€ü¤K`.T–ƒ¿v?XÎ
+°–î…–X|~Q´ÌþôÏV�vÇûÈ!»½gC¯†ÎÌÖíßú²—×Œ#?#GIaÃð{¯~åÊ7�\ú!oýÉ”Ã;èØ�;>«OËJ hÓê¦ƒï¹zñ†7ùÉºUW|*n†�³7ÛrÑ¨­ÔÚ1ŒmYvc€‚¶lg¾Þ¸ŠÒz’mÒãl¾Kª‚gý†±éfð1?[Ÿ7^PpB1ž7^è¤›-¶`³=¡X/´Êr¨�£jÐ½e&|WÅ|¹™nì(éÃ¡Ñ¼¯)�S-ê§É	I‘§äV‰ÈD)O–PwÉ! 
+d9‡iSKjíë‡ãRwØ~*ã�¬ôÛ¿ÅZƒÖ{sŸ™íÜ`ÒEJ›o5ØT1ÿOBÆÉÙßV©>mºP¹>î"mÃ*‚»°ú`#ž�5 -A h• ý"DBA¦žÇÔÒc¥7­Xvy»vÿ…Þöª&k¿¸åÀÍß7,ô­EÚEqãºþK¾œ.Õ²fsñ—ßûÈ7ãzMünñÞ› w¡z�\7ð_­ZRoNýëg¬Ñ+þÛÕ/~èM„ÂòÐ©Á-@¤”B¯Ë·»%Da>Œ.RÚ¼N
+t;[Ö+¶¿S•r8ËÖ9öµÖ÷sö]€Œ³mó÷AüÖ¼óS!(‰ºñŽñ”T}„¤Bõ;ÆãµàÓ&Û_°oO²C¤êH�¾þg“Ý+?„—øéY�XMFŠWJÕ×�ßj/:æÃÝè�f*—;|k(”Òv¦z\¾½“V0^ÐÚt+;´h¼š©žLÚöŒf¢7»4¨X÷ÙfM;b¬ß~ˆÑV=>Wi+G+¼ejÈÏwù‹o÷Ó“8i:ÆÖ¥èâ’õˆÅ_iÇo× .¹Ÿ[4^bÔD=9%Ï'….
+å¹|2g=t û	—5r_n†ïc´«µa/™l—Òn3~—Ò�¬¥#+s?j0kL6cÐÅ¼ýs?~+¥Ý}þ{–y7s:×IÎ‘:—3þ°¿u4÷µDl³C-¶OèJ(–S’•­söm{›?å4-^Þ‰.Oåp#Ý4àÜSp~(äª(=ÎÏŽ!È®ŒVý1š�ÚwþÔdÞû¡?kvþß‰v¶>ƒsY±Ç~ÐeF²k[´+³-i$‹y¾[k£-9ˆ
+µ  ‘â¾Š\Ò·O¼:HOYÒ[!]Ø$ßCWB%’@²EõlóJ,7À–{¤WCSðšz¥«÷íR×÷³U�Z’�âcW��aŸ>7Ü>í¶�î]vD^ÒpNÿÒ@®�?(0’“ðwªoÅ˜5IÕ@9Ä~Õi}³C†9ÜÝæõ}óúþŽÞ6Â×ÐAzŠ�Ü
+zy¢;ƒ¼œê(Ó²-Ã>šiF€™´�µ$,NTöÚ˜õìøŽp#Yžoß@ R5
+hÖMÞ M›ÁÇL>AˆŸeëío)]éúïHSV!È• ¯„°…Ü0T†` Šk |Pá@#Y„ÙbÀƒŒ ¨þó0JH[0l ˆÌÏÛ“k…m'5«_évŸèÚ«ƒk´�C®Y bõTN8ÝÈ»…aøO|çå�_Ü¸çêö£ß�f¦­ÒYo Ç=øtjå&P>öìùî�¼æŠ¡7](%Â.*}{âäThî8Û”ªdÙ¦(9»Õz—cÿJÊA“¿Tqo½i àü´ŸïGï(9?,Û¿öÅ!ÛÙ=Œ´s_ªà˜�gª(”kÓ Öa]¦³á;•&‹É¡Ú%FªUW9ƒié]™ŽbkI¿äë©9Q"ã
+™Úz²L �Hdu=A m“Â !•VO,U¹X!•Bå8i$ÙQ%ën“M»ÖƒŒÍ5;_¢Ä7ø«^îiÓEÁÌA	8½ÀLøsHš 6êOB†Ð
+ñ,CºgDî¼Q(�=OQHóGØýË»}ã®åããÛ®{äåO½wÅ»ÿjp=-ô!¿
+Ý˜#GÏÿäÓ?þ�3~øÐ;?:{Ëw§¿ý—ýoy?7a—a:`ØÈÑ»¾ñé}_ÿPñ�ÃscÃ•cO‡áÚ9¤1–ƒÈ‡0m$Éx¹º�qD´Û§$é‰ƒ£?¼ÎrÑíl¬w¾ž¦«ã_Ê²uŽ}«û÷åÜW<ïfB$§3 ?~«_ t.gßa™OPÚlÇçÛÆ“¦ùœÃ_6ÙžNtQ&—™|"È_ÿ³]¬læÿå_Ñ»c¹l¤peÑzÄ2ïÄo›ONˆ³arg³±Xmó—[Éræï(’œ±Å¤u¼&ˆËíd Òk?`²Œyã¥DõšlOŽ5MÚj$oå '-_ŽôÙk°ùèí‰ò†r×Žånª{,ã¥Pl˜ÏŠ¡Xe‡1âwÅ† =®ß»ÁâÛ±¡Çû¦Íw�—;ÙÆDŽ to²ù.‚¬`>£aH9P6'rÆsþg5(Ty)="Ì65¼§û™V¶²Ç¹±hÝ3d¿Èé\¦zçÒ!¥½0Ûx ýƒO
+9xpõì¼s!Ý�âûúóŸA�ùäT÷“¶ñ|Ñ¾'oÿÂ3ž(šOõ¹ßOäÊntiÉ|¶dþv®s]*‡—ÒÃûíƒl“�c;[ßš‰.èqP´õÇÒÈÿY~­÷ÜsÏ™gžY.—	!ÓÓÓÿ}ýª«®"ÿ§øà?øgŒ|=†½o�1;é	œ¶Béµd±Çù©MSƒ0JÔR¶Á uy )WXföÚ,å†~¥�n à+ØÑKr™¹61Ô‹ý¬?Ô‹m½ÈQè(Ù•ICÕ	¡½Û$öã /‘#jQÎáŸÚ³ú#Ï„/d]>òÉGO¹rhÏ³‹D<­o'#—r¸!qh„Y}\,MÛÖ[§õ�.†sd]™lŽ0í�áßg}R]¶OÝ*ÍªûlRÚŸèèÉ¶šÓPûÅÖTëYùr¬ÛŒH“©¦.[
+T’Èr�±Hˆâ´c±]©VÚPÚ$‹Ñe¾8´^9ßº…�„’(«“ì(!–ïÞöÅ½“_Yœ=MfÚà&_�_ƒJ‘4ÑÞ	 íÝˆAPYÎjdm6Ã¬ÂfìD‚8*éö3÷~3¯#:âý gíÌÜ}·øæ{ú.ø„L­Ò8Š«aAUmî–kµŒ˜…´·bVÎýøÞë¯qû,À)Á°A³Zí×2pK�Þ;þ±/ö½O<hZÈ÷ h£˜¿Îr²Nç"­Îö–K?fl¦ÑùŠeþ¡üuÏ÷þ’WHõ{ï`ð]qv#M“6±¶ÈÚ™êŸþ¦`=Z?�7^¤$3ˆ?jÆ9êèT£Äç\¶ ÇdŸ¯	³HÆó4'u’êz�Œ±ƒxSê^#
+éœþeˆi
+ÓDÐ}tã¼Üeº žÝ›v=ªúèa5¡äL²®&¼@¼^á§§$reÙ½¶~p¶óUFKíï
+1ÎZ‹XZ83l 3�î¤Ca9…èBK0YùCÀ{PØÿäG¼€hÞlg>ˆÞµwNøîgý½_˜ÿÉÇ¾âÈM×\îQÛ5s¨oEeZ¿ÿñôã³ƒ—ü]kËoy±W.í´Ë:^j*âŠÂ(Š#h=ücžÎ.ÿðßµžùm}ÛÔâ×2DiŒêrd!´F–æ)G³~4gšõU„"ôáº�Xæí¥\§5²ò
+!VÝï+UÚ9;oØð“·(í1Ú`üÀ|ý—©Ø�Ï};É6Uòkñ\óáRñûJ•›þ§¾£¿ðÉLŽ'éÑ™R:ŸªQƒM×ÂqÚž¸d…lF“—ÙžñœÍö5Ã+ºéq“KÏ§r¨Ì÷*�ÛÖ}ŸÅ_êˆ5Z[tÚ¿"S} òÖ}™ê©Ø¿pùþŸ,{×§r¤‘œn²‰ò®	³£U t¢r?0ŸÁIZ‹O¥$òØœÇkáû›ñy±lWë›±ì)1HíLDËl¾­)œ®—ª8ëÁó)    IDATTi/É6å¬_Æbƒc<S4ŸõŒgJîõJçmãé’}W"Gûò�Êå�XžÈeYÑ|¸#Æs¬fÒ©zt‘GÛ%¾¿~ ÌŽîŠ5“Ý¿	Åò
+�ºÙšýÉÀBfÚÆãÍôD?~ÇÎú}©XÆo¡¤M ,¾#Ç§Lþ²É_Z>Qð¾çOÏ(¾'Sý©ò³Í©ÅöUÍ­�ädÏxqÞÿ›&}ÖQ¶9“cÿ«%ü N:é¤Ï}îsÿyëœsÎyá?â3ŸùÌŸ1òõ˜®0ÙìšÒÇ3åùbY‘/ôûÃË)d‘µ‹Æöc{G¬Î£@ÝY+Ö¢¥ü2sVóãrT™ÝU1…‘i¨°J68´ë‘Áí+‘UƒÆR�Y™ó”uõD¦“=Ù—º‡'…zn×ÓKÏ~ã¾ëO}âÆ,}æÌgþaÍŽë7îûñ&ÞCNè#gLé[;úå9}w9Á$Õ"ÍÐ\Â£u<î’åm¼äcW‰lŠ0é©Pï·1@a2¸E²œ¾Ã%ýýäÔ†~%ÂLž,[ÐJde².Ñq™¬&`¡2bgZÍ¥E‹˜„öº’-&Goë¾Ã3ž«Ø¿JäH Özß"PR9–eµ6M¾«•¼Y©ªÖn&Æ‹¥‡M”!ê@+0R nÁð�6áTAT- 5:OÃê$²z/ÂÄðK¿ƒ·nAtá®ÖuEÊl¶è˜�Òx±:ÒÊ�JJÂêá,\€ŒQX™B+
+™Â®`ìâó£í¿—i–ù0s Ì€V`JÀt±ü¯þ~âoÞòÒÎ,m>Es7 $4^SÆÞJ�
+9ª>1P½À4ŸóÌ'êüWÙ�µÜ’·ïÌÄjÛ|,•ãëÇx±×ý%Q$‹Qv¨Éf3Uå$Ô`¡¬p¢-0BÌT•Ñ�ä¾ìËtÌÀB�š¤à‘q…Té¢oðH¿�Þ1ri2´9\=­¡0"�uô«æˆáfx”õðNªc¡]“.´F [á•¡8È¤u?9·œûG¥ËQP¤RŽµ+	ÁôÄXbæ%¨áŒ2ÊG@àyP¼€ÎÓ°@mð˜…Ö‚TlpˆÃI‹ÒËƒ;ØÓøõ·»}œ�ÔŸ	˜ov¥Ã×vÍ53·ÞY»ëkñìLþ ñ`f¹Òsp,€0h…Âº5cW\³ÿçwNÝø5n‚™Ð¯uï,KÃBÏP7K�f‡šjí)	‚bµ"ê�o8öƒíð¯çN×}fUßº¹¹¯ÙüÅnð!×þe«ûÇ|´Zù"¥¡†¥uÞ4¶RêO/ü:ÉŽ4Ø�ÊÄÊ0=.“+”v->ÑŸÿ›X«2%¡ÒîÜ{Ÿ A+Þ·æãã\¾Ía{ÙJÏxÞ³^ëÝ=Õ¹Öe‹�ôä’õ`ŽOõæ¾ÚLÎ¥$”:§´e±Ý
+ÖTûŸ9d�  ±lwçóB•…f&�ïµ	åH¬S•ižˆUªlßÍIg&õÖ¶iT$Çf
+Æóëì…Á%y&—¯ì¦g”ÌgKî¿„Ù1œÍ&rØ2^¶ùv?=v®ó/~v´T}R´³ñÝ�_�ÈDy]tù.?;6VœÓ®ÔeNFâ’}—Ië{¢6­s¢…mÓZÉ|~•³½ßÈv6~¹¼|±RÅ’¹­ä}ËOO7Íg;ÉIy÷FÏ|j¶s]7¾È -?¼”³éPå^]| �.ZpÚŒåFZ�r(é:l¿Ãã™TŽí
+Îû#ó°’êõGÆÅ_üÙÏ~öÄOüÏ[årù°ÿˆÿnþçz$¹ÞÝöÚÈÀ@dÑ!I$Æ8‰*ÎÍSþ‹47‰Ž”ÎtZ`–EâY»®Ÿî!GY$_eV]fê´U0h¨š°µVfÔdk€vf/,g›çå~“\Rt3OzÕ@G/ðH¤ëŒØm=1FOØ§q0à@W¿ÒOÞ` °M¡‚£êxÂ@	@?9GêÈ$=6z·ë²ÑëaÕî]�¿ô~_ÅÉ€Þ‰oöáÔ^rj¢÷ãÇ¬_C>ž¡;¯ï!o3IŽÂèê©•ÆŠH™Õ10›q	1ÀƒDK"gV`í†(8T»·Ôãóå¦šZÏvÅú²ùè|ü†ªùœk>Îh½_ä[Š¹k²lC˜œãZ”ËwÆ1Ê}P…á×OBÎ†è ]Då4tžEñX@ãe÷A{xZþõÛ'~‰É¹ÉXõ÷»7žs×Ê…ÎË­[Ösá÷ ;ÑÎ?Ä{Ÿ±F7Îþô»vñÊQ~û¯j?9/YÂÐwìûÆ{uÜyçñ‰¿qá®ï.ê{‘«`üê_íüÛóÌµgœ{1QqÚö§¾ÿ©Ù½ouœ_p®G³y¡mý†³¦a!óÝà
+Ç¾;ˆ.¥´ÉH½~Ø ó‘\gÐZÁ¾s)¸"o>ÚMO¡$Õš-ïÛ8[ «>9›c©-N¢Ž,YDæùT ‡,ÚÚ–,åÈ°Cò&¡]zÔ�Tb#Òþ¼z¤J�^T�çÉj�@  0-ôÎê;Jäp
+§‡–è¶Czêz«‹Ñ<¬pâñ©Ùdyžj „è~çÑMO*Û··â·¸Æ«žõKÀT*§µk[¿©ô>a9)E~ N/üT�€=
+ ¼„îKpF¡X#h>†é³ï˜}ÏÃõðªŠû�jå››oúÕ«W�7|úhåM_Ñí'n3¬Éo¬ß÷]™aô#×›}cÂo‚…›¿Ð{ÁdÔ�÷<Ý~e»;¾qê§ß- ÿ=×ÛÃcÒo+‰=W¿�ñxùç~µ÷çup~Ýà‚¾�Ûe†,…å`nîý}_÷»ƒB¬Uª’ÏßÙjÈ`;ƒä­®u—i¼"ä!iš&eg8ßÛô?0¡Ê=¹/v¢÷ºæožŠõŒ.Øæ£µÎ×«ùÏdb½çþûLý·íì !ï»Z[‰Xëš�MùŸö®ë&g+íäÍGÚéYB¹6›å2—íµø^!ûm%r¥P9—O´³ÍñcUQšôX[:Ù&�í¥$JÔ IëÛ-u.È6Yl:oýjÚÿ»†Ä°Y3H+�Ër|÷Þx}�rFT¦Y¯ùb+Û)#Ï‚D9œ—-f*o±y­¹Å¦mã…v|>%q¦zU*›[±žßd3Jç]ã³áûªÖ£©!$ë/\5Y¿‡‘ŒÓ®Ç_	ÄÆ¥lxØzº–nvh7V¹û¡D.ŸKÖô™Ó­lTc?%¢•­Ô@¿õ¨gý®ŸÐH.k‰ÞåÞÏ„êe´©µé˜�gbÍbtIÙ|<–+ 2X|ÿÎúoÚ $%PžñüTø–åÞ�jñ…2Óî�{ã_¶>ðÇÔ#çÿùOMæý/Ô#ÿóðŒ«®ºê¦›nJÓ´¯¯ï¼óÎ»úê«‹ÅâŸ1„�¼ÛÙA¾‡Óf#=Biæ°V Ëª£ä˜59•¬±öì‹GMbõðn¨
+Ê¤¡/óÍêB(“8@SÍõ±¡–êiÁ$r§xÚÃ¨C*=Q$«C½P¦+N¾õÉ‡/<ŠÚP;3´=ŒÕõÓ¬‰§Ždÿ8)ï^ÅÎY~ÛÁh?=¹£÷¼ÖiÞÄÖy}Owðj?ÞØÁK¶…Á3RÀ·1@"\ÀÃ›È·›úY×!#vˆéº~|œ\¡�èÐNyÓ
+zIŠn¦ý¦ÞÊ`-co4	“Z3B<§ÚZ’-Î¨µ¸�ŽY;ÒuƒÖV©=NBU´æß©�Lfªg¤tYŸ§Aóî�€Tªœ¤Ç÷\ÃÜÚ¨®BêÃÊCÄpª(®‡Q�Ñg’}xÅ»cèî·§MÌ<ƒ‡w¨×õs£Ý·
+Ü‚7³A$Ug´Wu'Úp R¨þ,ì
+ áÏ#jcàˆªb½ó[&†CÜ„Œ!Åë)"FÐ¡à ¦goø°Ö0-´c �’3Âä&ßáX¿U*çÇïÈ;?‰ÒSýä,×Ø"Ô@39£jß•Êå„dõäÄ¶dËì"9VËªë‹_îÄo�ÕP(‹y>+”©b[¦Œp›ðT«½òžÕüÍJë¶^\ROUé±±®MéŸæ°ºLŽ6à.èß–É‘uý‡"Ùäëí.YQ$ë´V!fºÃôD‹°†Z¢àeZjªfËÇš;4K•á°�“¸h>®´Åi=gß&gvÒ3‡ŠïËÄ¸çüÜñº~wÜõv÷ŒB¦0ó P\ Þd8+Áò .ºOcò°;¤Õ£šáœqâˆ7¶)óFaBP)ìQHI½jööF{'²6´†L Ütö"PwÑœªºƒ½Éô„Ó‹¸Ž$ 3 b˜.ºKà& ˜ê³Ve Id)˜ÎA(L~„‚rÄ>âäJ—�¯{ö�Ð–�cB–ò_hu?fGö>bð]3�<ãœíóÜ�âó2q¥õTlpŒÇÛñ¥�f´ÑŽÏwŒWóöíIvd"Öšl/g³”,YÆÝèÝŒ.Pâ·âwÚlw¦újÉñ%c7@Ù£`–Ì'Úé±‘Ê�¸?›/vX›@´™3ž²£¤vÚHä€Ã'ÛéákÙlï\||ŽuÊÖï"±!–ý&mP’Øl’ÑF"Çµ6b9"µcÑšÐ…ù¬Xå	�d€Çº©rÝŸ¨ùè]›`±ý”Ä‰3Ø< ¥ò‘\F MV£H“#ô:·¤bµ/6¤å¯lïbxyÕ¾+‘k9D 3]PÚ˜ÏØ ‘
+í$Ú4I*+ÑÙÆâ×¤*7ã·äÍ§29Äi#–«Y­Ø÷™|‡ÖN;~§‹™ÌT¡–UûÍùª{};¾8•}6›*Øwâïiÿóˆ÷C©z‰b±áCÁ¦?#ç¾õ§&óÁ�ýIyûí·K)—-[¶}ûöÏ~ö³‡rÈ½÷Þû_zþ¿ëYk'[Ç�1Ú”Ë»bp)+Y„Zs¾Xi>›ŒY”5%Ê!=¾«.’Û„çYš(N‰ŠqI¥­ü-Ø4›Á=†bSeyZ Š�|ë§G�qÛó¿»h³GF€¡ºÞZ"‡ÄXÅ¥]Ý´Hÿ¤¼»JN: ÿ-U—,ËcMžöMË]l$`ËÈ»}½«ˆÃšx*A­Ž§«8®„#¦psGQØý8}�þNŠº…þŽÞ¶š|<Ñó¹)}[‘Ú�Ï&Xt©»Gü$O¢grX¤.çó´w¯|p=9Ë )ƒåQ;UeFH3[C�WÃ~N�Œ»T:QU‹-¦²j±…ÛcÔm¶Ú¿r$w=€Vüf»ùÛrÏsûv\äÇoË÷^¼°8_œÉU!"„S0Z/ah%ÂWqä[Þ‰ÆïÑlœ3j?ã/®9­mU‘µ‘4@(ŒÈ)P,‰Æ’JàÃ[�…‡àÂ©BD(³Œp*^"X* ;�4e°òX˜DÏ0˜Óã�óó].|.‹Ž×ž˜|nùÀíÎ´v#q¥-­-©ú]ŒÒS•*zæcy÷�îm¶ŠC•¶ûrŸ7Øþ|z4§KñM:0|\hÓaµ÷çÒ¡~£f’4OmFT¦±KÞ<JÏT�§ž‹Ê =¹­w0QÍÐ& 1j�± ¡Jd­@G"ìêÝ¡ÞßKN�ì•¿0HÅDÙFuR¾´ŽßR²�w["§¡µt…vö¦Ç,7,¡m?;:S•²u_'|£G=4±okÞzÔ4/oL�[hÍ#Ž+c¤¡R´&Ð2¿G~˜‡üf,äí“GÞñÄEo=¸ðõƒß‘™=P	²¨gÒPéÒ’N–ìAp��°*HšP)úOBwÌ"â¸^BwÉ©RÀta—QŸ„IÀäz5û`,¡„@ŽöLŠ4ÄRœƒ¯Ûð†ñy•ÒÕ÷ùÂÃÓó7çíŸ‹´—ÑúÐà•­ÆY¶õ\Ÿ�3k›�§Ù&)–¥Ù!ßáÚ¿šoÞl[iÜ„É9Œv‚ìð‚óo©Xfçí_PÒH²Ííè/Lv �‰Úèg«c1Vqî,ÊÑŠóÃ}�«Æ¾Hšlÿhñævøn¡úÖÊñ—)I"1.TUiË u×x®“ý…¥8I8éâ “È®,”4�ä`¬Ü¼ñ"§õHl“!›-IíHmµeÞT¹²1é‘jÕ¾}oðN�&¾²<¾kÀº—?“«”fžñgsÝäl“MtIkÓ5žlÄï4iÃb{¥.„bMÉ˜Šd¯Ön$Çâ[mÔÂ÷ä�—;é)Z¨B¨Jªj=ÈŠæ#SÑ9&‘6mö;fj$HO²ù+u1P¶çãév|‘Ã_Í- �ðr“Í0Òq�§R¹b]7BÙ«tQi—Q°o�²–â³zÌçZÉ9é $Ëÿx„û¿)„}ãÿáá¿þ\pÁk7ÇsÌŠ+N9å”]»v­^½úÏ<’\kÏû²×eÍFVá„,È}}l92­m
+›†¡ô"('Bh+’gi ,¥µMµA2¡y¤¨AˆADª¹R�•yM>j’´!	Pbz^gßöÒ½¬IÐ0QØ«o#—0…¬H—%Úõ<‡+àsä3t:z¢Loé2tJdÓýãò¦¦~ÊBƒ›¡•`¡…Gq±�6†çpïJòÁT7|LäpP„ýLŒ‘Ëšú)…´Œ£"Ì$Xô°R!«�£—ô#ä� 2t(,¿@VÅºÞÖ¯zd…Mz¡µIr&qLÂCFºY¦C)2¥E…™ (Q.[ˆd_Ù|ª�¡4/›[éq›*Ú÷%â LõSâ;üÇ|¤½ ò&ËŠ¹*†Î‚Ná¬@°›îø¹j´>¼éÜÒ.J‡BtQ=Z¢»Þ¡ˆ÷€¹]$óPü}`ÎëýïYçun."7ŠÖnÈQ•Qø5Øøõ×T³à‡R°„]‚zó3ž}»—Û¾T¿¢·zýÌüu½i4?j›¿“71º˜d‡4ã·YlPJ[Lê¼Íö´ÒÍUûÁz|†ÐfG©AsAk£–õrB3-+<˜É`—®µv¨ê(ÅÁÝˆúèÀ„¸{-?BÜºš]¸ ¶›(Ìëû9Švi¨S}8£‰§Ç˜ðGÉ%ZJ‹azFCO”ÈêDwÒ�!zxŠ¬ÌhSª"å™¦™ÖcÎSSÑÑeÞ¦$ËÏ¥jÄ¤S¶ñl"–ªâY¿£¤™÷nÈEqÐ8ZÂ=ˆ¶·¨Û¯moZY:…õÈÚpFaT‘ÌBä�†Î°p+¬^dÈ Ñ@�G°™�üJ$K 3X9$]8È�9ˆ^	"¥`²q n"�Á�×ƒ´‚›C#Ëœêpu03ó5ÓxÉ±ï‹ã3‚ä\“ïê)}i¡þ©zªÅ�ÄÉ©I¶9mñ®õk KÝ/fª§ìü<k(mšlg*RÚñÓã-¶ŸÓ%J“íî&oQžùh’mLÕèPéµ—Ýu’³m6Ë]1bÓn¯û£…ðýB›ýö/Zéi±,åù_ŽxlÁf“ YJŽš�™Lå9	 –¨¢I»�ìqh í0b™A}‹ÍµÒõË
+_Š³#'ƒsÌ©H0’$ÊkÈÄ£î€õòb²qyî‰XŸÊ©]‹Í$rØ5¶Ù|"Êm¤ÇH‹v•æ%ë±nº9U›-…r Ç÷( R{‘ìÍóÉDõuDïºòûºÉ[gÂs‹|AƒeÊÓ "+Ñ\WÅœƒæ¬/†4ˆM;óÙD.sø+Œ6»É)‘Q]ìˆ±AçŽD®ŠÄ
+ÏØ^OŽò~’ÉQ€úÙ¡ó1¡z#±Jƒ­¨žà‡—ÎýDRü£xä×ÿdù‰?‰Gþ_t=¹\îÁ<óÌ3ÿŒ‘ä:wW=Ï±¶ÔVKš
+²Â²D;zAÖÆ­¬#†mÒó˜ïË\‰/5E5ÓÒ£„B7eF	+3Ý•†IˆAD¬¹ÖZA{TûŠÄ:´ˆéŽ¯§ŠdÜ f¨›yÒ# —Ô«A•éÆ>ý£29j„ž¶¤^Í“åm½3GV´õD™²¨~Ÿ¢á‘U5ý7C{˜\° ï3P±Ð×Âó‘@PÀ†&žéÁ±&z—ð¨‡1fà¾uøpžlˆô~%‰˜Á´Az\7õs«Ø…5×Á®<Æ5d€}½ºr 4TŒÅ*9$E@ÀÝzÍ«]CçHÑ¥Ê¢~]äÂZªî�¢Ò2ÏL�¶¦3¾ÒžKUO¢
+íäø+‘\Õç}ÈjÁ'ºÔWøX¹òhÏ*ôžÀúÞÿäS×ŒúSÍŸ[<A†Û@ÌƒJ0{úO‡ÖDS "@n¢ˆëà6² ZÂ, 9	»³€Ö^¸h j
+"C 4€ö"lAi²\Èå®û7Ðí¡TµX|@(…‰ÙöháãŒM¹"LÎ $Iå˜ÒžÔ9ƒÖ•©>­YÞzd6¸,oì·èT-9©hì	Å°%Ð™6»JízÖSäÑ’à¾Z+tE[Íqb§ºÓÇV
+­BoŽ&?ÈayC?ßÆÖ>r&mè->v
+¼„Çûp: MTl2ÌáiÈHOUÉñ-¼�!zrWÍ08q}=Ã`óåº£„ãµ_Ý¦:Tu»BË%c¿A›�XY¶és£yg{Fî®¬bknx2xöVÑ÷×Ám#fU(¨ÞÁ·ƒZ(œˆúÝ�1˜­¡bDÓpÇ�µ!#„ó ©¯Q”Ãp�H}ÈZÃpAd«€`	QY
+n€20ŽÈGžhð]^aÞïÆ\±ŠÆ|AÊAB"ÊêJV2±Á¶H“cAt”œNHä'çT¼¯ÅéqŽù¨a¾Çger<ãZ»®u?gsRözîO›�«ÛÉ›,6HN”´#±)ÈÖZl±`=ÔŽßhó]%ïºZçŸ^ë>¤$ÒÚªâÏ†â@År„‘Èf"±Š’Ôå¯˜lO�+T)SeÃeû6§´#u¾•®× &�µ¦m’Fr V–Mc�Ï¤ª\2[OÎI”cSŸ©4#P©ö
+|²#Vèß×ÉV¹ÿ–ÈµJ;Œ6lþ²PBöµ³£'‘g¼L�h˜SÑM()!Ê õX²P1'éª"_È›OµÓêYiÀÜ'µËi'UÕTå]6Ûc�R.¥¾ƒÆRÞ|ª›]±ïLå8£u‚,‘«[éá=ÖÃ”ú~zLÞ|d—iïJm˜´›ªÂpîš½ÝÏ-Ë}³½+Óy‡Íä­ûæƒv¤ýeIÿŒœýêŸšÌ‡þöF>úè£¯ñÈ×†0þÿ]×É0’´¤iS’£,ÓVŽ-q"–æ�¤âÒv[¸+ó×5…«�ù¬Øgîp)�aD˜ÄŒtGh^dqSµ„æ¡
+[z©®öµ•*²¬@s‰s¤4Èa`Tê”ÚT“.,“Y…ŽÊþ¾«·MÊ[JdM]?¿Á\¿¤ž$àûÔ¿�±sŠä�DÏsúÉ,…z?9'Á¢€bªƒ9Œ7ñ´ƒa¥øw
+sÚY�·+$ýR¯š¤*ÐaÄ!0[ú™^:ž ¶¨^YÔ¿ŸÖ7ûØ#{Xn¡gI?IaÄ¨$ï‘>¯©w0
+Æ‰›A(ˆLû„Ðl&c‘ö}rØ
+Ê£V¤t[–)¸TyFb‡ÖçÒ\Þþe=©WMw¿’¨ŠP¥ÙÖ��öøîgNÛ{‡LöÞvì?ö‹·ñœL€!Úàð*DƒçÃCºˆt	ö ì!0YfrËáŒ€àºÓ`”4QZ h¢½n‚�”DAIXö>Ï{„PÄ‘«užÑšïo”aø¶UÕr¹v£wKÕc°ý9ûQ°î.ÙwH•ËÛwƒÖÃ‹5h¦J–ÃZ‘ªK®4ŸÊš6mbHFH]˜BgE:ÐCW2P�®†4IÞW>Ù/ÿpyp€¹¤·¤PÀ!ú~…ÔÁhÇŒ‘ËÊdó.  ›*Än¤g,2� îaåZ~FCí àý ,‡ôp"2:SÐ¡ö)!RSNh•S­ÒÑ½ñúXå&ü3·OOÉaò†©}Û> çn¿­xö5dê›=çJÂà–‡³ 0 ‚æƒp×BtÀ‹ &Âi¸Ëì³Á\¸ƒHº°KèLÁí‡ÊÐÜJA@àV d!Â6ü (nÀö@	–Îö
+ÈçË—æ”«s"ì6�+vâô4ÎxùÀ�ÞãØ÷ûÁ{¹±�Ñy×þE�œé™�4ƒ�¹Öõàï�k@R@2ÚÎÙ·eb]œÕ‰/kv¿¢,6ÃHÓ5Ÿd´±]–3(š[ŠÖÝZ³¾Ü—25àG†rÌ SŒøçg�ì0›ïh%o4è¼É¦
+æ“�¬%ÇäŒç	Äb|V-º„’€�Œ’¤`¼�ªj*›éf­J”E#F’’ù€Z¶Ìãû=æ»l^iSj+‡ºì@ª©A;BÙ=öÝ]Y2IXK×q’Ù´ÞÎV��‹Ñ;rÖýŒtºéazœRyB”Ç÷T¬„vÉ	
+N¦ú«Æ@3Ì-‰Êu²U«yÌª0æÝ,´Š]d„Zl:�½žñL Ë¤%ÆÊÆŽs!Q(Rº�õ	Õ[´nÄoWÚf´.uÉâÛeÛÆÖVrFÎxF¨Á~sÞ—Å¢¹µ`="Á÷v?gS)ºLÁèwÿ5Q½Az’Ë§!ÿ«%üV«µuëÖ�;wØ¶mÛÖ­[}ßpùå—ßu×][¶lùñ�|é¥—¾ñ�oü/äÿÎéËœET({Ì©Ÿš*ÐD<>•ª|Žº¾,%:�è|¨Âý‹”ÖÓµ™&]ÝtØ©ÐžºôÛÒîc9‹ÆyêVhï [é«Úþ¬–jµûà
+i    IDATÂª3BÕUPm½h“r¤âA¶®Bû3í':‰t÷ ve™lnê�ž|:ùu/=>‡å#ä­³êñÍyÜg¡ß×“Uœ¸7ÍèÛ{É©.YVÀú~œh� Ä~—,c°S4ò�0å`Œ€'Xò°2Ñ‹ú=™¢ÖÅÄ~õ»5»@:˜~ÙB5Æ|M?Æ‰ÝKŽáãa¤k±î(”Éê–žpI®LûUË‘ò¨Ñ¨%P°-�¤Ê¤ÇüÞI´1Ûž±U¨œÃw—’³\šõ¸ß+[W÷ní9ã�5«–mÜ½áÌ‡Çÿ’¹›.ÜúË/L–áw‚Úˆö"Ø
+ï`h�úo`õÃ]j�°ÿNÉ�uìa N*ëÁ8d
+»ÃEÀr‘ïAÐB«y3¡Y¶–€ ^>$$L²#ƒè]­Î?™ÆY¶a±ñoŽùg4x&Öq¶ÈØbœmLU_˜œÎi“ÑvÞØ1ìÝÄ‰/TÙ¦sÂ#ÀˆÑ³(Ìiù"€L+—ðDw”I¨€´H¥£wµôDC¿´WÞ[$ëRÞ'ïÉ“µ9¬èj¨D×m2ØÄÓSúg‘žjâÙ “€šÖ·¤ºY$+<²¢«'RÌ‹Y…<(‘M YfŒ–Y~^tsÔÍQÏ¡¤—Û™–ë¤ZJ¹Töës?[–ûÆñƒÇŽUÎ]1vÞøÚo<ù«}G°�7_Øzð“ÉÐWgÂ¨ƒÚ=mt_ 4XîdM¤s –~h”C² j šEk¨�Ñ· ‘å ¦‹ÎüëÎ±"†Ó¿	n@	˜¤ e�ÒýCø-dK§*	¥PîŸ‚Ó²¦ñ‚£K‹—T+_£óÃ>Pk_Ïù¾µ«ß�‰•yûVÓÚÂHGk£þ•T=€–ª/ï}¯_`²=™\nO0R�ÄF¥ÝD4œûR797•#µèrKérÕûJ'=Ía3Sá…J;ÝÏx×†âP Ýìð™ð<ƒÎ¯ïÛØc¾hòí„dœ&´™-T™’Lj¯âÜVÏÖÛ´eóÝBsJÒP–….+°1ç¡N¶*Qn=[N Êæ£­lœ’Ø£Édâp.D;§ÚÓ€/ÝÝ	Y]ygªªãU­M [êŠƒB±1‘£BéÜ€÷­<ß‰µ6Ûå‹!Nb_T”vŠÆÄHî†XFÊ3h;«Kæ¡¦$±‰Ü™ã­ä¬û!†,Ódw<h³½ãùi À”PåT.Ë[;Ù©OåˆÖöêÒG'Úg�N,ÇÎ¿§ªdÑt>>N¨¾óc¹kå²ÊI7ÌŽ)Yu²Z3‡þ±^tÿÓ<î¿ÿþM›6]rÉ% Î>ûìM›6=ûì³ ¢(úÈG>ròÉ'á_¸à‚n¾ùæ?÷~¼Îñ¿Èuªõ µcGÜS ÕïF*ß‘‰E¬ªQ«e½CÖŽ@Ž	eÙ¬M‘…²šiÖVÝ^nˆ•áÒXh£)“"sà+ÙÃã¦pT…¥BÄEÚª¨‡ó¢›èæ(_öRvG‰V¡«Ýlê—Fé)±ZzÇ0=¢£BÇ&) Ú×3¦êú±QrYG¿ÂIŽ£ ÐñõN½�ÿƒ½÷þ¶--«„ç›VÜkç³Ï>ñæ\·r¦ ‚HE?>ZÑ!"`j¡QèáP[TºU>¢ˆ	Á
+�TUTQéVu+ÜP·n>÷Ä�ÃŠoú~¨ú½ƒáp4í3Ö_°Ös¾ó}æ3<´HÞxÁ~ÒE 1.´pû&¾9‡WfXÐ"/;cÿçnòë±=ÓÅ½È»ÏØ¿ŠpÐ#óf-l‹>¥ÿÆAs{MfSŸø”�KúÑˆìl²š²dlF³Ü›j'dj mn§K‚oI·Á1Ö"bRYQ§7‹½M±ŠÇ{Ù‹ç‚O$ò†™ò»<ïÞîàC¾so|ÆqÁ”ÛH‡àvÿ"X„éQ4ß€õ�ÑîQóè£'êþÞü	„K(†—á´ Æ î"F£õZ¾5/#ï€r$P	üFg‘Žµ!|L6�MµÀ]L6Á8Î�ý£vëw`Qäh, á¹”íx²Ã˜Ú$ýYÁÎ2ÚwÝû²ü@…Ág6zw.Î¾¼Óûe´�vÚ˜Z"¯)L«ìÜ·™½jªYËY£PS½8Õ¬í\Ø*¶LS¨G‹/ìfopKL¾änŒÕrn	zzÝ!¥Ž}ÔAÍAÕ!ÑÐ÷±à‘úIóßÑwŸ2U#×÷íƒ>¶q„›øúò»«ö‹%²ÏAmÃÞY#7XXâ‡ž�Ÿ\¤¯)‘êÐlìó4#ñ©¬U¡õØÄ;½‹SµÃ¥Ãçþs‡v¶¢)‰åßÈó2v©R¹oþJÈ~îœJW"y†B›Ïÿ—±\ºvoiáz†ÊÕHNƒW1}Á2(‡)Pôà¶ b¤ëÐ9ü².*�wAÄá5�lBNa-Ò!ò•Yh	-‘'ðÂç/ZƒypŽÉhH„ëYRQzYë6¥}B2G3¦dl¥(®Îåµ ÷ÝoHµ¯Zý¨ÌK”M'Ó·ÞGÓßŽå-%çqqG®gÂ?7¶¢M#•W‡Î=™¼Î�8üéqús„H‡�d¯'Ð‘{w"¯Ñ¦¬lIÐ¡ËÎæz›ÃÖL®·åºiÁB~ª0í™à/ruE¦øâ±L^‘é…DÏ”øj¦[‰ñ[îSÆzÚ†¹®b�åÖa—RµÏ‚
+Úï—Ðº81Q»Çš—™R–ût¢­Cˆå$ÎLU‘[SaylüEÿÛŒô2}À¡+ÊÌdz©0ÕªóðD^n!v^ÛPÛ°$¾7‘×<g²Å‘\ïÑ6t«›¿(3¢ÄcÙ†Ê—„NLEéÒajÛ²–¦<Ò.%dÁ{8–ûÚËÌ,'©±œ	�²sß0¿�‘Œ’"�Åòê²{×VòS%qZ™jÅýŠ±e®M}%}qË9�¨:5nKœ¥$'¤ø•øÊïç®uõ~à4˜wÿGÝ¿M5œcu><—mÛ&DÛ}¶£|]fn]ô{j&b…±�U–vdEÐþØ˜ØäÂXK\:à±žCÓ
+óK¬c€Âfc]Z7�j«ûÚ±°gÌÇcâL5›eÑ,ÛyZ=¶—¿~‘ïY5ßepÊØ»ižÔ(Êd·†%`9zkæk	»öÞ‰}fý5‰'å‰=Y&»<´]´jä*ŽÊòû{×òÞ!ž¨"ÿÍÅL	;9"
+ÇÃÂÄÛMÞžÛMþBþqNBËËôµ%ìJíZ��VÎ‘W\&^€€lš“=}©I/ïÛ£™ÁÀtXB�q¸ü?fYe¬Ë{Ã»B~~ùƒ±qÎ%çÞ]¥O6ƒ�†Î7vTßúŸ9´ÿºiú³®�VýW¶íÿL­�¨‰…PZÄÌaì}ôÉ	¸sèþ3œºÉÇ¨yý^ÿCß»çSñ:�CM!‡È.arÉõÑ½yÖ@Ž�n‚p8PXMÔ–!Ä[ð«päSpy
+îa¾ý;Ï…ø%LûàÇhx;¥ÝFû{œ®{îÝJo“rß$ýÉ4Ioø�sÏxò:eZŒndê %	c›.?-h—Ñ­š8ºì?ìÒõTÏl+bÒa—ZÎùÄpŸmâot3@™9¹M�ÂZ»©O/‹J�X ‘í#Ó·wìÝ[æ»Käg3;ô°�Úµ¹% Û:O~ÂÂ6ÈÍS{ªBö´É+÷ñ—,±Ë´%³äG)¸Ch•Î­ó„»Ýa�o´8gd²ýáöæ‹*¿4~x{û°'ž¨…˜kþT^ÚsÍ§—÷Ý·x=¬Eã:8øÛŸArjdt‚ë®?`,ÿÆqµþÆç�^„ÓÄè)È1¦ÏB§pç §È;˜œ�‘àX€´ƒsw¢`xÙ *�‘‚á ZF‘ÀQ™Ã¤�¨‰ê,ŠÂEop½ai=¬¡\i='Õ¡8{�&ÆV8_Mò—ÔáOyîw&ÙN®¬%Ùë†ã÷¦ÅíÚÌyÎ=e÷ó%ÿ9í:´S)ÿ�´¸Þ�4£ÿ2H¦üe¦®Ü˜üw‡?3-®-ŠÇÊî7KÞgjþ§´õ¥	&j»`µ-N×µ Àg«¡óÀHÍ?1üo™:«ÝÚ4¥©‡âXYœ+;ßa$wˆ®z—ëÙ€o‡]w¿Ùò¿�èí«éË‘¹-tîY§ÂW<þLÍ9`¨)'ºì<šŸ@	:J4·@…å%qjhú…žä/‰ÕNm+™Þæó³Œd”Ä[§�‘ûUmƒvô{ç’—¶Â¿œ	>’é¹‹É›žk…†Î·ËüL]¬ÖœïÐ2-oª’KÓvðñ‰n1HŸ�ª–›��^;‘ìQÖíÈ�ZË¦ºZó¾¨¬OIì²^Õ»³0UFûíè·ÏM~¹òŽ’ó-i¢Õø?çzW\\_r¿\a£Š÷ùåÊ¯)Ë�µkÅ¶¡ÜWñ>‡ÿkê‡VG¾�Û€Å$z Ê2mI…wiË2Ë#6ÙùµüÐ²_¯¸ÀP—8%š°Ü8•Òr¸$sèp æšS¢ûÊ-Q �Úaƒ¶*¼{©ðR 6©…1P¹�Té|l‡ b{)$KeZ[Ñì`7¯ë³ºoaðkäÊ¾}Ô'K
+ci‡®Gæ|Ì®ØÏùXàˆVñ…:nìá»n’Û6í¿FØ§‘%8¿‹¾UÚiŒ€1P…íµÈ‹êlaE?´ƒÝÔ3=mS…Œ‚Gtþ¨~÷‹Ä§†øÔf†,xGÏ¥+Ld–¦&™á´éýëFúã‚ä%~ÖB8ìBàÜ#õ®zôî,¿ÃØR½ö1 Ð
+~éù½Ñ6$›hÞ Ù‡šÂmÁ[Dï~T®@°É³˜œÀ³ßvÏwžÅ‘zôžÖò…ö >x9€‘°:….àÏ�
+Äç,£û(¦]”Û(b*Gý Ö�À1XGµ£0íCx 2GeƒULF7—ÊXÆ@’Ø/E)&£šÖËIöcZ›†63Ê´Kî—	ÓXÿaËÿì…øçjbeªæJ|]š¨]úÀ¹ñûK¬³.ëm1$P[r¶Â
+ Ê:ç±�üº-½ÒfK
+ÄNŒ´ÖT™£-í˜- ÚfSœ# ©]#`rhlŸñHÛE£cï­‘«=Ì*›YX�T4
+ë“rDI™¯8c5À£ñX—–¼{s½äó“eÿSž{/e›„Bà‡Ð
+aùn·'ByŒD°&‡¨#ß@Ñ/£ûŽ?üÎ“Ã?½i)7Pjƒ{ˆö@g€�3ƒ|ãùt�ƒpx³<…þyÌì…‘(¦ÐÐúy·ª*@9Æ[¨ÎaÚE2EPBžbfÖOñ ¤Ü —^èº÷ÇÉO—‚ žY@+¸>’8”Å£ä­åàZ·Kág;ƒ�n$oÚVy@“âvcJ„(F»¹Ú_öþ9W‡8íÒ7´J0Î~2Uû#ç¾X^o-W¶\÷þ9p¿qiôQ�­Žå¾ªó%™/–z»µž2�\/SRåžšó”2Õš÷…õø­«*ÙíŽ,X¬IK‰Êu¹ê<Q˜6#ñHîj8�OÔ�©=*Kzqò[ J|½$¹�¼&¤ùX;-±¡lÀé”@q2‰õŽÜø ê´É¹¶¼á|o5¿ö‚¾÷jw¿´¡µDÐ)#¹±b¬Ú³Þƒ…n;l}*–�GWÒWy°5÷k«É]š2-;ßíå/Ï�Ÿ´Ä¦ÇV š›yN&¹i%ºÂ‰jQÆˆjºw?2ÝÕf»X€ 1Œ(cYaÙœ÷]�ïe¯�ñÿf�ýäV±´èÉÔŽÈ¹ÿRòçtaê!?5•ûGººìÿë¨¸Ñck.»8*n$°‚õß–ìþ~tä¥÷ý `¾ø{ÿÎ:ò‡–#ƒ&3œHë¸4Y‘i‹51z¬�
+Këy4æ$vÙÆTíqi —"6ØR%^}F²©j§†¦6YtÒÌT¬¥kj«ÅÚ±UJ± ”å›jã¹0�=,mîÓà¤úÇ9úŸ¡­l0ï‚:’9‡xll»©ôÌñ�,ž7ë¢=G_2´Ç-db/öðÀ^ò®‰}¶@oŒ§<´\¨âƒÂ Ï°Ú"/qP·0ÙÀaðŠ«ø¯]ÐG|´›l¹«/Îñ¥Â’‰VhÕX«`:æXƒ¨1k,`A¤¥sÞ«ÙÍði‰ãÊ4ñ„`+IqCä}–QÚål-¿`„@ß„-\†é&(wP¿rˆ`tBÀ+ ùÜœyX¹…ñÓX{g.Ü9Ìouh?àÇwïxùs+	£6Ü2‚%=è¦@>¡ðP1Š	¨ó|÷+éÀ«a²­@*X;�JÖb¸%\_j…4¹Zê]ž{·çwµ„âøÕŽóˆµ~üÇSy½ ½²÷y‡?ç¯l¡wiSvÙYiÚµàÃ+£¹l“Ó>,ËËªÎC[ùmÒŸ%·»›ÒV)äjQñ¨'­LìHÛÌ'u�ø ºælÏ>¸�þ'yÁ|®@× «“8¨¥vÕ'ÅyûñY¼4"ûòˆì”66�uºCÚ"ÇdŽ5úº(S9üÔTÞL cµ<ü�±¥Èÿû$Yà~Ãs¿¢’ä�•Ê?º¬yþC8¼*ƒßFtã'îEü,¢CàuèôÉyŒÎ`ã6{Ÿd/­ûÿ«Ýü?B4káÕAòj—¡èÃHÈ:s!	£�MP]‚Ê@Œ„Ê1ÞãpC$#P†xÜö‚�áà�ÕÚ?&ñÞ¨|ªÛù¹Zýo¦ã›)Û|nK<Ç/ü¤T³âQð1€)µ³P‡Œ­ Ö˜ª±¡ÒK‰ºb¶üN£gAò$™ÃN�²×2:�oOòg´?.®+‹ïuòúl@`êÞç·Ò75½·	2ÌÌ'IÙùö¸¸Íe—¦ò²vøÁT]m­[èEG™2%¹¶ c�’x
+€µ§Ý©¼šÓÉPîbD—ù™©ÚÎˆéRbÒ¶ÀXhŠ³Cµ£Äº¹©ØÜ¸ÏMLytª­›wÎ¿+S»¤)'¦ê’,1¾CtaYÄF‰)7�'8í%j_$ŽLåµŒL{ò J¬§­“›'23®KåX3—Ð†óŒ2•ÂT	ÑÚ
+ÀÖœï‹«¶NIÚ—ûƒO'òÊÂÌtd£)†cU®—'ˆ��ª2²µ¡ÚÖtž˜ªÝó¥?>3~¿K
+J4…´ Ú
+m9#*3žK‹ª8Jˆº”ÝÒ‚ÂæÖ�q�Œ‹Ã!?oàŽäÎ÷Húù6GþUp<7Ï-ÿ³=5[aã¾*5ødKù‹ÎªOõ#�6Òø�Çº\eƒŠ{ÏéøU”lêS3tï¬³²’·8á±,‰Àgë²¥–Ð<çò7@DÓ©ñŸ;²õõ¥
+�ß4O6é!�ˆgõWw±WÄf�ç,0…¹¤¶n¾5Ko«Óæãê–É¡Ô®eXµPÛÈÿ»eïV˜>"²dŸìã�6yå<¹}hÏöíCÖwÒ·0¸^ßžà+t»Oœ®^éÌÀ<KáÌ³=kútHfâû„‡lÒS�GX…¯÷ÔÜŽàó©:«íUç!N»„äÆ–yÿœ·2ºx_n´Ë¤é’Ñ�Fû(ãp#áÃ­Á©BNA(t
+ Ü‰tnÞ6¸‹�[HžE1 .~ÂÅ‰Sß×ËÛÁ_ÏµuvTŽ|„ò2¬†(#YsÌÁjŒÏƒqÄ=P] ¨£ˆ!3xeÈ“>‹mBæðBô;7’
+qŒs­¤#ÕÞ¼x!!“rô÷Yzõ0~§�zõ�Ãñ{ÒâFÁÖ¥iûâáL^¯L=rïe¯¯xŸeo˜ª½œ¤±®7œ'S½\˜RÀ6b=_æÏ&zyªCiMÄô¦šjÈiPP[Ø|hOoã—�V÷GØÕ³�Pâl£/Ù0�Sˆ‰=™a£J®íÛïÖÈ�‘@9ÆÅ%z+&¶¿ÛM†j©0èšsº´Í;¹–]Vãã†÷EF7§ÅÆú%çþÀýº!Ð�ÿ/ÂAð+srÈõ]ˆ7´P»É
+üE˜„Â�L
+5õ`2ô‡ÕxòÁ¿PºÍhw¦þËÂ�ÀñP¤¨.ƒ0d”w ï#XÀà8Z7`ý>ˆ ~i2,¬�*Ô‘@9ŒB«áº=ÇTŽê:�å7Ö%S Ï¯Â£yÞLÒ×»â�$EÉÿ»B^ï{_ŽÓŸ²Ö­V>¶ÞùÛ…ö›.®}ÕágÊÁ‡’üåYqg…ÚEI¸ßÈäœ^Ò¦ÕIÿŸ]tÙ9Î¶”ž-Ìb¡g,øLð¡¸øJò\/—Ä¹Þ7‘‡<¶•¨y—õ=Ûö?;.n¥(jþ§/Ms{å×N?°aÕ¹kXüEQ˜ˆM`B~*ÓK.[Ó¶¼YìvˆuiJ`Þ�ÝôU™ñ	±q,7³Œ$©ž-‹ã…™�¨¹ØØ+2ãI`Î9Ö—‡8‘qü|vhOp×Éø…{‚£…nç¦)è$Õ3�¥ñ=:Ðp#ñx¦vmÉí!-*âéÂÌºt5Ñ»S]lÝy¢0mN…™t0”»8Ñ=eêœæF ˜uí×¸$«¹œŒo´0³\Pb”…>MÚñ	+¬mˆžC;”dƒâ°áDlÄh2g¦m,ùEm€üD¡Û=y0b½MY­2£,�dßG®¼÷ó¥÷ÿ;s$ûýßÿý>Ž|ßûÞ÷RöîT7<ÖwØ†2³Mï[ÖlÏmàJÀWŠ DÙPû5±Z˜úÔ°2ïÕœµ=Õ{•e.ÅÔd:+qhalÅ§VYN‰/MµÊã‘.¹Ävôš áÔ\MMæáQUX1+Rkç›j‰tÍÜU";¶ÌýMz @Ú·�ÖÉþ6»¼oN�í&$ZÃ¿4Éí‰Gæcœ(Çx6ÄÎë©¹h·ém-Yxú|žÞd`6íƒ-zmÇ<’åÜæm8„ÞŸU UVë™•2môM¶R´ýo'zwÓy2Q‡jþ?0B(MSuÈa«<×»"ï_|ïë¾÷ÕZó¢ã?çTs¶Q›‡�ôÁÜ
+¬†Up*à%À ´„@Ô�o _‡™ÀJ=ø‹?ábíÌÍ%ÿŸÒü}5_b-ÃþêRàŸLFH{Ð)’-”æ¡2¤]@¥ÏoXM†à(C2€ð0íAæ(Õ°~ö@<½)ÍîàôQJWý`SÉÀq¥”FûQùþ4½)N^ËÙJ.¯ÌÔIö
+F{™º*Ó{aE®Uƒÿ�@öl®®ÈÔ”ddSÎ•XJ@=òõ¾\6–®HRa|E]Jí� Êˆ¨ÒråžØÄ!î,k�SOj¤²³o/°5°Ç]ÒÞ°_i�NpL¢`ÇnþÒØŽKdžÂÓÐ#{épÐ�¨]Ú2F%a“ie+óþ—1¾xØÂi–ß%h¯—¾Y�a~„³óÜh´æëˆ{ˆZ€AØuPàÏ#[ €¿ÃA]d ý£¨ìEÿ$²©ÿäðw¹Ý5ŽßI“É•=íúÏ¿s&0<ŒÎÃÑ?&PÄ°
+~ãù¨9 Ãøtá!�›VZ ”Â‹°vöŠrm“à’’�r–1¶:�ÿ£[Œ­çòFÏy˜Ò‰à'º£�"�™é�ÇõGo§4‘z‰“qèA°‹”N;É/jÛ,9wiÓvù‰\]ˆ™Òû)�R’Þ×¤ËÖ(½¬ì,¬Ëk	Ñ‚s3ðó?ò[ÙOpRh[êæ/ùV'}�C3e}NT(žf$õÙ¥µb—µ~I\Ô6rÙ¥©:@ÀgÜ‡9ÉBqìbòêš8°#VÛPš(·—Ž'j»²¡´¼ÎG„˜€woÉ�‚˜ÂŠžjF”­åËõ}šDî=Œ€’¬$N]Ê÷Z8!ë¸íŒÔ!kYMœ–¶î²Këù5qÒ¡Saá*SëEFt¢[Ú2iYSŒ ñu—¦CµÇ%Ya½N±­Â'ÞPË€²ŠxŠ�U—Î	 JeçÉQqµ%4`½Šó°µ>€X/ÎE¤õ®ÂÔ\:ÈMÓXw,÷$¦e,IM°ä�u<6úšúóÿ-w¼ï}ï{ç‹~P0ÿó{ñïKR?´ž�Ä4Ëâl¢çQ¿°’ü¸CGóþç}:Pg¡Ï6æœó½b%jjy'¿žõ`	"[!S .¢éœ’–	âø4N]•Œ‚ Ø&š[æéÂNb£œ'V15œ—™KœAáîyQDêËì¥›æI®‘¸ ïwÑÐÈ)8ûÉ»Ô vÆþåù±�eò&J\Ÿ,096ä³êN^Åe9Ð5§ ÄölßœÚÃ_ã“ÒÆ¶+ˆ�aa_guq©Äº;Äò‚wd·[4D·Ì/ŒŠšÞ¿DÞ—@Ì4™ÇŸÔ¦6þ!E«ö3‹õ—ê0ç§¬)HÆ ~	^•ƒP ¨îaæ,!]€`&Çáï„¨":„ê `&'nƒWƒë>PÈ+ ’Ûâ\r{?þßûò¥³¯/r0Žþ†�Ðýó’.ŠãdH‰tŒ¤� ­àGÏëáœÃ/·ç>ü\4k·ûFãÁàõYþb'O+ÆF�÷¿Œi ¤ä~­Qþ/Ê,R’Ôü¿ËCÊTzñowÓŸ¥¿ My$�Š+'jÙ§$Ña¢g«âdaªÞDG¤n¬hÒ{�šKxDùš>K@zf+¶[Êª©±U²·BÆv+ KMrÛ}Ub/8hûèÛjäÚƒü5[ú|‰,P°]’6Ù!v>“îX‡SbÃÏ¾jA)<ñ”›/Þþm&¯k—Þ[¯þfQ\¢j­dá`òú(    IDAT�TqÑ,ü&¨ƒbúü
+å¢Ám¡|-:_Et„ XÂôÊ»°v?Ü²â–Y‘&Ú,öö’_Ñ£é»VW~uÒÇhº€@åPdŠçá´„L±yié qŒc¼…"ƒ*à•A²)â!d†ÎJ;Ÿèl¼&I®k,`8y�±%©ö*µ;É^íûÇ LÓ7¤é�wFŽüàlU™–×fV°ß¹`RïX|.WW¥Å­‚Ž;Lÿ³¶5c«åà#.»�Ëë§ù�)³¸9ù£­äÍ™>×ÌÖ~ª_1ÒÌdº™ªm–Œåþ­ìåºæ<ÆéXCP¢ãÒIÈÎ[�ÂÌza"÷Š›}Â ;(®¨6å†û•�mznªvme?Rã�¾Ü—›f¬³áŸv$Ku}jhb„zª’˜ò@.r2nŠ5F4<Â)<ê†4Íôl'ý)cƒAqE?�O8€©^€%™ÞÙpî¯ðÍ‘Ü]˜êzvƒGåP6ÖŸèjÕýRO•|:UÖ-,¯ˆUií@5´µðgªü¼W–”¨4hæ/5îV~,Y/‚­b_™Î[˜©¡™ÚÝôî¬;WÜoMåÕÚ†½bŸ±tmò^ÁÖµe¾8:P%cyn™K²¥àËˆåþ±ngºùý±ý�Ÿïú¡Õ‘wÐßœÌú±ZÌlµ&.%¦5‘‡ìºBƒ'Õ®¹G­mz´[aÌe^fJÊÒß¢DNt™[åçµ�+L}jò
+£í ¨sºª.R”-œ&kÕ™cáJ[ŒLžØ¬Ag“��¹`¾x@ÜjvÌ±6kù¤T"»]â2D9z‰=_£W(Ä]{Ÿ •&¹I�ÆÔžvPÍ°•cc‚³ävNª1V"²·k�€Ð%v�KìF…¬Òm‚0	½ªOîrf×Õˆ"¬q\”Ú'Õ¾2ê5ãÓÔÀ­8u³+ôÁ†ÿ·ž8JÉ4ò?KˆuøqX‘·ºÎãžw‰óDIyá¢º E'DÐ†J`rŒÏ¡v9â Þ,F�ƒˆO#]÷‘oBÀŽ!Þ‚�˜ãZ.ÔÅÚ°8ìP½ÃOáéaÿºjsÅ(D- Ó>¬AÔD6! “. yk@€$¾i<~	¥+Ž›û!Y£u¬ÈR­¶§ùË`]F{™¼…Ó.¡ñ4}#£ãÀ½{�¼¹áÿ“ÒKÕàï8
+iÚcµ lÆûÎPîâÄ2¢·dKîÒþT×!Úò‰�nê#a™åÌ¶8èœ#)æ¤•Æîó×‚T*¢oa$¨’+Çö¸D\#—m™.©Ï²hbc�únnÉNï’´eŸõ+Î}‰Þ[q¿CA#÷ËñÛ#çˆËŸµp
+½Ëáç(í1Ö	Â�* ÄTŸoRîÁ›AÞì ,¦Oƒð·!>«9FÐB6U_ïN~s¢# ÔZïçtR)ý™_*Š:Ç¤�,FeÜ…5�ÜE‚òâ>²äù�,†çcÜÇ¨{U¥±‘%ÏÇÊ'ÉŒ®XãX«Ö]ñX[Èë�i¸ÎQB6'ñ/×Ë¿YŠî×²Ù‹‹€O‹[g+¿ì{ßPz{.¯sø3…:Ð,ÿö8ùÅLðÅñõü‡Ð€ë§?ÛKßT>™Éë¶BˆJäeŒf;gÁÌ¬ëdz	 >[!ÄŒäÁÿëÔz™Þ³Uì§ðÆ*œõŽxü´µåLÏùlS™HšFaJÒr—›zè òÙ [ìëî1e«œ¦…‰¤ˆG§ ·¶Pa 
+ë´Â&©qZÎF™?cQí«ùM¥)JÓ«3F‰&àSÃ}š×Ü»µßÀ± …e3‚õ6éÈvªw¬O —u2]�,¸ TÃ–Ê¥
+ã4œ3Œä™iÖø–G;ŒèµüÀš,\R)¬	Y^oSOœ‰´aE¬g¦Æà``Ö'8Gà1Ì[ÛJô¶�Ÿ\A»©^’–¦Æ9ÍŒ­G|�êFbMÛ{ÔXÏ˜Ÿo†|UÐéWå_}?:ò·ü ùç÷ý‡Žü·©2_)ñ“ÄÆFâ‰¦{/'²îÞÑRaK;KÙÊnådZ˜ZÙ¹7V{¤õ�¥‰-RSg$·@n¸¶%—˜Ü`Þ™TÄ³…OáÒÑ6±P66#cÀjLTØ”N@&öBÄ{-¡9qkäÚ‘1…Mö;Û/¨³.	R;mpÛ±²Y�AHvXk8BŽ0·FÛØ'ó™™¥·[¨9òã”#ðÐÊÑñÉ¢�ÜÔ§r;æÊtŽ‚nèÓáÛø¡DÚæœ�©ü‹Òˆ9'IMTc å·ŸM^:~4àÇ(íz÷´x)Àñ¨Ç’ì5õÚ'\ç!/wàú�ÜÖ`²Xè"Àð˜ÊQÛ�dùVCŽQ²uøKà%˜yþVïGi”ƒ»(ò’±�`–üR]•zñÜàóV¿’7¥S$ñöîä)Þ‡Â8Š~&0^	”Bf 0nO’Ý„Ž3y�çw/­}œ�$ªcÐÙÆhGˆ'‡é›Ú›¾§Ÿ¾ÑsïÎŠ;ÝMß8L~ÁaëŒv ô“·*ÛôÅqb>üˆO{Æ†qÁ¥ñH‹–Phm�æ±•„XA¼keJO§!M±Ñ‘eÀ2ÂVÌçVÌ×šäEûHƒÛc!Ùé æ ‘½œ€d®J[›zì’plNæÌZ¾×X7Ñ³›Ùk*Î‘~öŠ’s·…˜>Aé 
+>ê‰GfÊïð½¯ –Ñ®A¸H(ÕÀ}d¤0£ \!(ºÈ.Áhð*†ÃJÄà60<‹ñy1²lç¶Ú«k¼+­j—@o%?w±ûp¿{G¯ÿÞaÿz)ç”ª	&›˜ö1 ·
+UÀ(h…RaÖÂØ È¡ÔB’¿¢¿Uu<hY€±Îdús [‰§{ãø§“?�jo®®%¿èz	g«ÃÉûót6Î_:ßuÅF¦ ’ôµ…¼|RÜ2Hßh!¬õ)‰›¥? ìÞòû«L‹�bª£AòßyXÛŠÔ‹œŽ	t'‰C×ãü¶qqs¿¸Q[?3ÑHíÝo:4ä·�Õ6VaC—ö
+B²Lí/L-Ö•¾ÜbÌxwUÅªÏ:ü”XeCJlj³~~�K×­¥ŒèÔ³)‚Žs=×S³K”5}RBr>ÓKëÒR Fk(‘�ÖVkAŸ›>l¸÷ø´Wã�ÝÞªC`Á$Vä² Ó~±+`Síµ!=›èm«…—‡\È]v^Y;Õ3™™;•'zžÏ „K=¤²)›ÆkyaD]œD/ðöeÎn�”•%…‰´u „ÎÝü¦ˆoHkZÎÊº¬Kiöå®Ür�ð•ôæÐùÎP»Sµl¬?Q;ÿï™ýø¡Õ‘o(]ÖÍ_æ³îD—–¼ãýâ&
+¶.K%Æ;ÒwˆˆÕ•SC<J�læ7º´ˆÄÓ.MªcM*¢± kÑ½Žl”ØDÛ Ä7´2 $¤ÎØ˜¡™,¸6e;¤ldzÛÅÎŽäŒøô½™]—È)ñÆû¨G]¬è£.©WÙLHæS;1PªLö3¨§²½°]³Œ”(xŠu…¤E¯Êìp–¦ºöá*=”b“@$¶ÇáÏ
+k-ØdÎéwUyÁ=+h77Æ:R"S]×úòåèƒ�ûÕB^yiú6FÜÈý’ü•®xr’½ÉÈ`nçãÉÖ ÜÂŒFž€(	�”!X„ÉáÔP»
+ã¨^È``²M85¤ë¨ïó¯aõÌ-Ú´aÅ4ÅzvKE¬õŠ«ëÎiæGùËöà0þmjGªˆ½0NGÈx%‚xá È…ãÊAïš^ï­Œ>À.NãWÞ×¬‰=ñ0ýÉè°Ò»q°VÏŽóWWƒOQØiö—ŸÐ¶éÐž/¿”ü´Gò¡¼†em u{ªveN'Ú†S½CÐXÛ�3Ðî†žÂ–«ÌµìÚcurÈ€—HÛÀ¦&šØ®ƒ€‚ydG@–â
+9¼j¾â‘E•Ù5Jü½,·Ó¶Èà3Ba)!”�§–Ìñ†Ø„BGâäD^>|R›F"_ä;--Àè%—(É\÷L–ÝVk>­rX‹Rãt†Ö�¸5d=P†ñyTAÔa¸-Pj#a%²Â9$[(RP2XïýÝDíi»OU«ÐKœJN'iq;#ccf9;+2‡ãCf°QªÀh^ˆl
+á>—�"9‡_špr¬IâF›­þ'£ð”NyÍÌÜƒÓñ~ÎÏ3ÓlüÉÖð}‚­åÙeŒš�÷%ÉK,|JòL^[ö?/ÕAÁOçò:Fãªÿi¥—É[Cç¾¤¸ƒÑn'ùù�Ÿä´¹ÿ*H‰@O‹[ -»¥"ž-LÛ¡ÃvåmÓì5íXx³¥®§w¸TgòFÒ¹Ò2y�†ËIšÛZMÏõ²Ã62½ ¨¬ˆg•©¸l+Õ»|v [Åá1"#~ž£	‚X/ B�„nÀBZ´Ã¿·…lø3îÑMY
+¨ÐbÆ}` ºÄ5€K´­‹A¬Ë.Íb-\B=wŠƒ!ë¦z‡ c‡özò2N4%&d	l	 àmêa�‡RÛ?ÚÏ_Xá*·N…wÊ¹;âÓˆ¯ŒÔlD«Œ0‡*
+D|0Òe—jc]�Jìª*jŒLõ%Y·«êÏQ)4‡›¨Ë7¥ÛÚ1<øÎgüËYë²Q´ñO•·,´®[­ì�/ÛîV7{é¬{”“èycù·Íû¿ùë7ÿ :òƒ÷ÿ‡Žü·©^ú:‡Ž×e£íž9‘¶¦šNÔRH½ÂÔ·{«.Í\:nðDZ >Í(É•il{)t…©X×3N´«¬Û=JrAhOî\Sq¢gµ½ïD¼»©;s¼Ô—<ÂVÕÙE>ûhñ©±½4ÔIûöòW–È’�š‡Ò}yl×,,GÉ!An‹súË4Æy
+ž£?´G{a†Üæcv‚cíg|Ì–°³°=ióˆlKì¸kÑHâ7è~zÀÓ³|67� ÙDW(IiªgÓ[¶Eÿ•À,×^Ÿ™zÝ9êñ“¹º"É_5SûùÃóµFøg¡ÿ¹L^'ÍbVÜRÿ¨ZýDoi2O éÓ>dæÀ-Á	-@”�m�
+¤«0`‘œÃÖ]¨ßŽ¢�tÌ‡U ñ
+’5T¶cçUß�Êß­×ÿ
+ .Ugó¨¯ãÕì–²û•H<Ò�ü‰¶ec¥·)²Iúâé›—î�ÞÌ(MúÝyÞcœma¯R_~qš½–�4N2Œ.†¿§Ô!Žnô??‰).îðøÉnü®BïNõžT^ŸÉ+¥iyÎ½Mçè¨x#'C@¸ÊŠT-¦j[·88Õ¬,æD�TXaÀŒè4ºö©[>	†fµÊò¾9/¡RÛ4OOlÃ|sbOD=û G$í0¶§)\3kæ�yv0³ÊÀlè+æëáóN¿É4'²D³�¢D‰T¦f-f¯ì‚6åréÝ�«&“W•¢�Âàºß�…Rp|VÑÞ‡Öatž„[A²À(x5ŒO"[ˆÏbð'!Ç–Àä}€ ‹A),œ½�Ûµ£-z›zµ§ÜN±OšZ\¼ ›üR^ÜÖéýn–U³)”BQ,i…n÷­^€Qo&žìïoî³®£ÑÛºÅBh§oNg¶ñÓŒiX–ä/]¹ð_•Þ•å?ÊèæFçƒœö'Å-�ø—	‰W6îÌŠpºâˆ£‘ÿ÷“ì'ruÐ˜gÚÔþÄ¸xAÅýâ0{m"3Ú!D—Ü¯’lÅogdÈHœèv¿¸l9ø’ËÎMu£$?Û¿S[?ÓÛI7¦¿!i¶%«œŽ/LÞï²­‘
+\¶ñSÃâ2mc—öã»üüPWGr÷T×·ŠkŸCÅH<é²Õž<$HÂI‘ôµ0à ÆF†|åäèw)T¬k€íäW1ˆŽ^Ñ–_Ê^È }šŽLŸãµ%Ë”X2=5YGVj|k¤–†ªÞ+v§zÉZÒtïù©©®l"ˆj¾ÇU93Îº:tüÌø×"¾ÖSnneG6;ºÛ1›Uº˜-,ñh–Y™Ç‚lÊŠC¬¶¼oºÉVÕJ�Ö{šöÍ`¨‹‘šÍmÚÝ
+ï–øÚŒóØZ¾g¢æö�ªÝþ3»â‘?ÛíÙ—¾ÒºÒsç+ur>6´S\½Q,¹tìÐä?ú‘ÿÇëÈ7–z»Cœ�Ÿpí®¦sÊa“L7É‡j^Y°¾Ï.õÕ|ÀÆ>[È÷Þµ|yÑ;²Yì¨‹õuI*ÌñÙ�’B™ 6)3ž[ßZ?VÛbS
+I©.V2S­ŠÓÒÔ8je6öqÃ«yÔ™˜ÑÔö÷zzC%­:Tôì©s:»ežn³¹sÿNþbŠªBÖ¤{§v­F®R˜èdUrUlÏ†d{ßQ˜ôí‘¹‚ÃõÈl‰ìTÈª4Êl!HCY6|±0.Í;rg‰I€VØ`*_ò3«Óß˜ó?=,^�é�>?mm ÔÞzý[E^Åïª•ßËÈØßÂïQcÀØD+LGËae$|0� •!hBçà>Š)ê× è�r$ÁX·†É“eð ÉD	ý“0
+&GÚ…!¢Ûýu•©ƒ‚D€`„tò›¬]ÅQ—�N‹[	äz÷ƒ;ë{wFïwÄ1c+Œ<)eÝ˜™<¿ÅG£_UEªÍ¬ÃOòšfýƒk›öœµiyî=�ñzâN»ÓâV��Ý{JÎÝÆT·ò©ºnÅïÐ¶Šg8�µ-;lÃZ'ä+Ú–7TTfÒ@pâYëIˆØØ€D«ªGá„¤]£{;ž�³ò|�îÌì4¢áº9â¡U";RlÎÑ+5„Kš‚”÷‹•6 l�ìí˜g¢‘½`�Wé¡Âæž»l33M—N(J.Mq²ì<ÜŒ~/Î_=S~¥£Áô½žó°,JÇi¼¯�Í„UdSDX�ápÜC>AójXˆVã³P)(E>‚¡¢ˆ•#O…ï<0ŠßîÐÞz~E“û"³Ò'¼ü½6³Âu-äµýÑ;óâšqòÖ<ii3ë°»�	ƒðâ`ôNFïJâ+6zöÝïôÇ(ŠË=ç!ßýfœ¼.MÔ÷¾
+ 6
+?FÈtœ¾Åw¾ÃÉÈaë‚•Y–z¡ä}©VýxžÖfÑsŽp¶Ù�+UÆjOQÜ*mÙ¥JŠÈýJ&¯óù¹Iñ’µôÅ!ëlæ×J3Wâ"q:–‡u0`[‚vŒ­WÜå$ËÃ%ñŒ ð©áDÀº™	¢?„9,hßX/à9må×d¦2µ2WŒµ!‹ËüìTÏ8D{4Kõòù¼RgKYiýµ%–g&¬Š“MAR ‰S&·QU\tHTfeeYfe•O"qŒÛmÉ±>1”Ø5•†Å¶Û`€¹4ØTZß£#mc«òY‡8›:––U36°à%6ñH…#e$s© Ö›uO0»¬,/3ª@j|+àˆ�uiÆ‰t•–¯ª�[Ï£êîŸ�ùLå–rœ)¶ÖÔHéË-R%M39SåºØý“ó5Ï_Hßmö>WÝÿ�¤÷Ìm=Jàã±žÇ.}E~ôûêGÞüƒ‚ùøwÖ‘?´ù£ì()"ç±Qq£Çºcµ³æÞ«Ì�%„7Ý#©Þ–ë¦KTjj3Ágcy�4K-ç¢ÇÏ4b5G‰¯AÊ|5ÕíØ”jÎY/7@rË#Þï(-­)1ÐÂT)1UÑéÉ�’±.êbblà°­ˆE±ISûÿ³÷¦ÁºdÕuàÚçœ¿ùûîwçwß\U¯æ¢((†b.!ÀB
+aYîp7©e©MH¶Z²�,©»q«mÀ’@#„$&a¤b.¨‰š‡WÃ›ß»ó½ßœsæ9g÷�Gttt´È„ZÑ²vœ?¹3#òGFœ•{í³×Š}êÅ¼±ìSS•,çÅ-É-{¿EYpT`7¤•g}ô}Z2Èºâ ÌÑímqƒO�1Ÿ©Ó" gÃ>pÔ9H`I¶2«©íøbJð\J²î<g¹æˆ�µ­Òtå¨üénú£‹ÍŸ�‹·(Üol¯|†¨
+ü…Ø/Êc~0R
+l¡üp*%ò~Vƒ“t�ƒ ’ ‹ø¼l	§�ÀíB' �dBÁiÂ­axõyD»09’\õ¨1u~\ÜÞRQd¥·ä˜¹Qš£íð·+}•«Î”úZÏ}ìXnª„85™ý«nç·“ôU•>øYV7js Ð7î7Ó_J«Û”î•åíž<—U·	Ê›Áá4ÿáQþ&‚ëˆÌ#kÛ5ç)Ã­Ò,öÂß‹Ë—vÁ•{mï³ln6pØr06jÑ½”švÅUWö2ÎSÞ‹y»)VvÌ…ß#Ñ#š™Á3>©)öÐ›ði…Ú&Ú Ì˜;â0A�ù´‡žKµ¦˜o‹%fia/(8¡ÚbvÂO–f­2KšfùÛBç1c¸Î“5ÿÚë÷ûAªÔŽP¨J!jm”	ˆÐX€ßÆô„€ŽP[c�Äè$ÚÇ¡ä#€Ál¾;iZë"ŸÙIô³¾{ßÙè}J ¶ð�ÌvW©3ÉËgf‰Ì­åqù)Æ ;§äŽëœ,Ê´;x5(úÚ,zoñdžË‹×ÕüÏäÕË´9Üé|"M_\¯ýÇ(y�±ËRÆñ¿¬ôµ‚ÒÊ÷œÇil/7'”‡Þ—·GP™ãJŒ²òåYõBÃ5)Ãm‚­;OWv±þvè}i7þ…\Yný4Ìµ™]iª�Üv47ç‚?Hª6½ûR}eiW”ˆù+K»*Hf!T Åp[÷d6Ê_7ÕMæ¾$“›åÌ¬XHWT%KE¢¡’®ÿŸêÞ×$/LõÁÜ†KáŸ(>·­(cÔ¼÷ ÐŒõjÉªà¦"3Ñ+™mÂD7ÛjPÚúÄæMéy"Ù*ŽÇÖTZv-Tj…$×nÎÑ¼²nÏÿË†÷5kç¶_±š¾èð¡‘áyd–¼õ©žoªýÄv"k4‡"¶�ŠÃ¼¥•¢PAí˜óm1'Hí”«±­
+v
+ë	’9[‰À’v4¤Ë ÷dËyÞðrlÃÎ9[.»èØ–MçLnç;·ß98ý¥•ÙýK�kâì‚?Ûì7_‘O¾9——IìR[—PÛ®îå_þž¸Ö}ß\ëýÃù·VCà·êßÊôñÂ¶›ÎÉDëŸôœÇ6g¿ZØFÇ}Ò“çvó7K”%ûÜP—JÛ©8È2¹"wÅh\­5Õ^eJ¤�¼˜›•­;"‰LÏ¥*³® j2Êm-¶vN¥™md–Û²ˆmÐs6<±µ‘ßê�8ñzUDÅ	Ã¶ÄJÌƒœ‡YbTÇ!�¤+ŽŒí¥{^�V/;ÚÈÇ|_.YïÛ“5Z.xz¥×›è—¥ï9!)E¦ï5©n°pÇºÓS;ÇC�ÒÂí×ÿMY]ç:'+}¬|<ÎÞµvðç/\ø�ç<ä»_¯ô5J�òÜ³®"-X�l7„Õ˜¿ùÖ€-¬FØ‡p`
+4�W�%ÀiÀ”�.H ~ÉET	”�xA“‹è]�³÷YþIãAüËƒâ6‡Š-]TœtÄ² ê;õœ¶½Tkz÷ê¡YñF)f­hìBY]gì2³òœG³òÍÚo$ÙÛ˜ÃÒ©Ìš¯ž
+½?�ów´ÂÅù;†ÙÛ$eS½¶~¢0G•Ì¸xåbíÃûé×tï‹Ê*1óäù¨ºÕ°§(aÈ­ÒWä.»[•me¶¡YÀ'YÃ€ Å<.xdQ†´Ü½¡Ùœ“+{æü>SÀkÓ&üX@jX‹pzŽn®8õ¨aaêÔ4°MiGÞ«ÔÑà©HŸðÄ€`*n5œÇÚ‘ëJlîušÿL©ÜZÅmJ^¬ô±Fó^£Ñè Oàø`‹ �d‚þ(¦pëÈ'¨/Á° §	“€)m£±Œt òick›Ã¯Z[ÏÌjlZÌllP,ªfn�¦K*.�Ï·þÉÎôw±%Å¸ÐWtkÿV©3Æ¬X;g¹í:�íÏþ—vøcVïËÚÈ«ÛK}\ŠqÝÿ¤±‹qþ–fð±Íéo†êùvø[g7zÿ\øA€v“Ÿ�/¯^Pše"M0DU;ø�KÓçŠ™ b¦Wç½{¹žéëãêxM­+1ØÊ_ÒwO•¶×t¾S˜ƒ¹Y)9ì¸�0†ƒT¯5Ý'Ö³[CÁsÞƒÌÎNqë‚÷8¡,íR¬—U%{ I2 ÷½¯­g¯“€ ˆ™+Æ™˜¥Ô:5Qzb:¬æê²ªØ	D"©˜èž"®É‘a¿²^jeK%›•	©ÑUñeÇAÕVö”“)‰J69Ç>Õ-Ì¼J‡ºé‘(ØÎ9‡¦n¤—#[õ¤Q"MMG’Í¬êª½‘ž—€j¢ ØÌ±-šÒ�˜Œ€yE{š{Ê!ð®Î»²Q2yÄÓÔî7¨ñ¸AÝ˜Ç®AÕ—mIš™†¦œñ…%yµr¶ÇMÑ\ò˜•7¬½÷’7_"-l|üàÊ»·M"Ç'ÑçZuçéóÙm=UTÖK¬è¨ø{ôX¾ð3ßïf~èÿ;��¿ŒüÍú©>–˜®GùeE¼à=`¸6«N¸"
+ä¥¨ºRPÕpNžJ¯_ó¦±^8PÿÐÅø§æÜG·fÕ!OÄÓžs¶öË¥Á}’¢õìõ.¹TTìî˜ÁQ—/ÎßàŸê¹”KÎØî ä®9îVEC~|�nmIgh‚èJÿ¼>Ù¤Ã3>H]{J«ER¾ïC    IDAT'Þ4ˆö|,3tHË.BƒªäÈ¡š‹Z�ØCƒˆ,½¨ÔÀHŸÜ@T ¶õtÕ	}1ðä:C�MoXv#GŒ7‹£7õÞ••w
+šVæ€«ž¼»‰J)×eôªT¤ÜaÀÒõ¢<_nv¶E!´�M´P_Àä"¼:T ¯ƒñtŽ|w’5öŸFcª†ñYôNÀ–.f ¡ˆ`*ä1fÓ¦ù›µ�ßKß©ÙÝ1ãœ‡-:ñö1·ïËMO®nX[wåú|û]�lï-yùêY×y’¹fl?p¿V¯&Ï¯ÓúØÖìƒÌr.ü¨S Æö�YTò¢±s•9˜Ü\¥m®ÜK%ö‡åK›êÌ´:Þt.HŠ”ØÛÍ_ã‹xªë‡j_øj¤–éN‡\�dÆ•åu�så�”Ç{¿FtX¼€ iXOùbGžÚM$|�TÀñ©«ÈÝ±÷YTWªWÍ4å@4é@‰ø ã*‘ªeÍzÑÙ·Pýð7ââVz¯>»÷¼³ºs_·õÓÓøçÚ�í8i’¼Ü÷¾™å¯—òÒüÊ3éFÃõÑ;�C:PÈA¼"ô®ÃôìåªÑA¡¶ bt
+ÖÀ	�GÛ˜îâüÖ}óÍrqô¥mjë|>oP\£NK–u65æ‚O�ó7uýÏEå�®ØŒªë¿nl/¯®Wr§4‡Û?¦õ‘J_¹ÿÒjóÝžû��Ñ—jÎ®z>«^º_µ¶³›¾w>üP=øÔ ú_¥$åË47;ÁÇ£â±í;�k³\š#®<»Ÿ½³å><*^Ê­quxÞ{Hs;Ñk%»f1ø\akÛ¹X,öÏÎÓç“·7DæË¡ t·¼bÞ9¿U®-»î=ûù[%EjûÌÔvŸNõáš:m¸É,KÛuåp·8ÒVÉD×aG&ë+7µ.™-$©ï|aú¹­ŸÓOwN„rûBÑ�W~ddCVc#æT¹WÉ¾â¦ûäNþÂË‡;¨ËIdÚ ršÛ†CEÁ¾/²KUÜýØÎ<
+�qf»™UžÙ±„sÈ›$f±´Î%óøauý†>ßk!9šYMí¸/›S£[Òé8ÏnWkXrHxBÏIˆ¾³3ÔKu™–Ö¯Ë½çŠX¡‚åbÍYž™sRrâQsÆ«ã©•öþEqë!ÿñ�ü–Ëîñše(ã±CA©å–¬Jv+& .±'’º:U'ÆÆýU£¾Œ<ÿÓßïf~øÿø;ß�¿žˆ««[î=¡˜VìP)3ÅÕ‰ýâúÂ:–�¨ºRRiY­g/jŠZeë®È
+}­KEf_ÌXÈ–÷í–ŒöÊ¥ŽšìzözÔä~Ç9U²·|nQö-Ü5yûTÏu�‹!¹9D²)z¢ë)ï/‰�hßDÃžÒ÷„Fî£_²pÑ^·ŸÊx½âéœ¸&ÄšFl�Jx š¢ãQ»AÝŒG
+þ¦ýJÉ©…fðÈ8}U5dìRbX-Ê¶CIÓ»{Z¾ ÕÇ�O*´m.{6g¿Îì0dÍÿ’¶+iþæ4ÿAkŠòEQöãDEU]›åo¨·"×‡£¶‚&†;‡¤B£LÁŒt‚lŒÎQ¸uT)l	¿	�Ãm"¾„|€Î°Eº¯�j†b‚ÙE8²¦[ˆ†¨2äÆñÏ	šÔóïîyßi‹9-Iêˆ³¤Ù=›/�M_Q˜ÕÌ¬ÄÕ�ÛãÏ¢ÔÜÊô5’F{ÉOVf¹¨nÛüþ8ú¥Yö.ÃAaÛ€òÝoD(¥Ø�Š,ÍQ·0‡ZÞgRÓß¯æ´m[‚rÃ²²�9ï[ŽØ=—�¸”¾Æ2å¶FD;ÙæèVIÊÂ†"�ÚK—Ýë.K†õŠêò	
+€"¥¹”¤š´¶i¿a�hdÆëPÍÂóaCî»çÄ>uzÊñÐÜ¨`Ù=þÉªwÆ•[–m <˜~8PgW;o®ŸÏþ�{iúö<?êyßt=xî}Ž:³»þb/„r4 3XS¢ŒaK°…©à´†-ÑXƒÛ€©0:‡|ˆÎÔzP.¬ùîmÝ›}p­ó––ûø¨<ÚW¾„£àOìÆ@c»¼†`§Å]cÝf?ìˆíIy+‘ÙKÞC¨öŠ—Öý?Ô“Eq ”¼$)Ujý¹½çú�_¨ùn¹Ù­ÿbR¼Þp·ãÝ]èÞ9)P$ÕÇù�8rËpm;~_aäúê¸x]®¯.Í
+@¥£êÆŽû`j–QË›±?4ÔRë‚le—<uÆSøêÔSÑ]«þý-÷%z­.
+Ãaß™”¶wÿìIefÚ3³è‹±�Ø)nÈm½²ýÌ,gvQ³OÐªÌÖºj’YáRÊ½}sqÞ}¦£„"YÚž+†¡7épC�;•{‡¼±eZöžO­’SY¿#�ŠÝï$J †YÛ=]+Ùl4ûšEl˜©ämÑÒ¬·ÊV [æ©eï‰eUsÈOÍ|Ëy¶&g^CíœðƒEgf€y÷bb³¦è,»Šr¦ïd³ÕeÞÖ“”§%ªÜv	ÈLPÅu�¬#}´JD[zRœñà¨§"ô©—XÙQQ‡ZO¤óKÞó«þS ¼‡ÚkÉŠ�¾3Ê­—YÛ’	h&Ãî¥ü†ÈÉïõÈ¿ëo<þÖbd]=›T7»bÈsÎ9"ë�.¹v¼õs=÷tiÍnÍy6·AC5ùr¯²¾¶�®w�¤´-—òQþêš:3ïnÄ}÷Lß{r¡þ«š]÷ä¤xåº¾é®an©Aj–Q0xYuÈC3ç|AŽí~Æc	Õ’^Ä—j8Ðb@m—†yI\ß¢›æÄ‹ZÙµ�4hÍC�àoÍfC4'vÇ£V@á5Î]MÑö©Vð´âb«2ŠÒ=]ST¹"�ÍÜ¬x­…l¹÷FúDe›óµ_Ÿ?Ü>•/]Zø§Euc#ø�Ž:%(‰²Äì;ò‚ X©Ó¾û­áþköwßQk#›¡Õ» :R�é{Ï $PF ¡Œ�l¢ÊàÔ‘î¢LÑ:ŒÆf›˜»¦D>CØƒ `<º]ëãÿÓJ^rÄú´|iaV&vQ-œž©.>W=óÆ†ýæV9¿Y©Üö†Åë¦o¸yzòÛM÷)¦ÓüÍ{ÙÛ„Gå‹Áä‰ñ(ûÑ£/í'ÿ#síÙÙÏŒËë“êúÊ,Y¶’Ÿ¬«�%ïÜ :H(¦åí’´…3,ï8—ÝªHìÅs©bQ²Ž-rY¶9g«­ž8â‘˜ØÑ˜ŸŸò¹g«ÒÁÑ%ûõ}~Ts9âg.{œÍ‰+|�E¹c¿ºc¿Zp"¬ˆÛwª®A5±›MšSTÖ„wÈK4û¥=PØù¨:Qqm'ýQ¢Ò‘—$ÍFñ/UúJÏyÌs¿U«ýQ¹5øzY@93!ËùÕûòK×#c¼‰l‚éf;ÈG°õEì? �CºÐ	Lé µ6ÈGˆö0ÚÄlò‚ý­k)·ç‘ã?”Öd¤Yõ•o¡b©§ÄŽ99Ö­­rÎ°Ýª|Ëá|øI€}¹9Î¸&GÓÿ0Îß<Nßeïœ¤ïvÅ~¥�ÕÔÆ4}·µÍ3³ŸÇÿbeþ.À*Ë¡+à;÷¿¨¹¡í|¨žTºb×WÏ'Õ	m{DÕ¥ä3„aŸ¡–jñDT“ƒYucS¨Ä,V³ê†¨|I\]_%³×Í¨º–¨<•ãHç�R"’T0È§N(Ï,‡ŸÐL†ý¦ÚR@]îÏ×%55f)©Ú*ŽKÈËÒªÿPMÐ¸ZíËƒ›ÅU‰QHM«´½Ì´»²aÙïˆ…ÌÌŸÓÏMª+¯hþŠ/
+E !Öäô@ø�‚ËŽJ	
+1üqÎš »¯…G­OXpì¢›Lõâ²¼îB~ÍÔ85r«Â,%¦yP]Y˜Nnz’âæž½òà5�ÏÔDáOÌå!ÊZ�ÜŠ+IB‘!ˆ–è:pÚîC‘�5Àv	ß2Ï+¬Ékewhò-?WL†v·N=†­Øo‹¥Â:uKÛuÄÀ°Ü/o¹¾ý~OLx¤ç„¨;Ï	âPdž˜0xNm+úž±Ë~ßëoœ•üÛÊµþ~ûw‡Ùiö»Þ·‡ÅËšêTÝûÆ¬x]¢×¹¯Ä(7+¥m(*Úî½quƒ+÷$Å…98Õ+¶ã>5­®¶,;îSƒò†¦ÜÙ«–½SÚ¶Æz)YÎ¾„š´B¾æ�ÜšTÇs‹¾»µ[.6¤m¨‘>\X50Ûór)æÒp)á´¥Œ,$€œËm¾g™^ñvŠu‹!ÍÇ¼i�ÕiÍp•bÓAkU×L>™†Z/l76Í©�1LSt";[sË‘ž«X¯ùÏN«5¹UØ¹†:ék|qÙ­¢ðäVÝýªï~KÉõ¼|¥£ž"ò¼û÷Fë4Þ/å†Ù,zO³þá²¼iáÀc¸!Ü:tŽ*C•!OÔ¡+8>‚6¢]t� Úúî3~É>œ: ¯�Éšó �Ž`Œ›;à:O”Õõ›é�•,,xÏœî‹ã�Kž	(‡êó²n!%EùT×:jÈ�ÄòÅþbë§.�ÿ°îœÌÍAIinCuaRžh9§$%‘>á‹} •šOÌÓ]?ýLôÆ‡cSkÉqbÛå‚ÁéÂ65+Í40›±�sÄàu&¼+ 9êT9®ÓRÎã€º{üh«[ü¹>½Ò§¹1?Á0 |,OøQƒ´K/ P3(<´÷ùÞâ�%G ¹To‹úÀ�{Ñ~uxÕ¿§´±>|¸ýß'Å]Jì6ÂßÎ>¸÷ûî7Òü‰t#üMËA3PeôÚüÊ}y‚$^kRÁXƒ°	°Ì¨
+„MTˆàø �t‚Ö
+FÑYE:B4ÆüL6`4zk^¾„¨0¶·Ÿ½=1õŠmÌãˆ/
+8S~jM¼yNy–Eßûæ¬º%1�¦Ú¯©çR}EÅu{b¿âVÛýšÃ¨¼SP!�·‚?g?Îìi�¼î}9«^:ßJ«ŸI_¡ øï·µÔî\ø[yukil'ÖüÇ2s°î<žê«{ÁïŒ³wMõZ f¡ºUWì»TLŒã‘l«]%f‘>$¡n»ßw $I;"õå¥T­«g}üt9RÖœö¾–m©æ¼ûâêºŠÃ‹ÕÖQ·—ÙzKmÄzi>ø‹ýüõ±ž 	N, HPÊ©OAKæD66u †yÞÝV.W¾Èå3Óî9gzmK¯-Šë	ÔuF¥m0¨²Î³úóW©7¥\õT›pÞ=½QHµ�ÍËêçšµF®àùäÕeÉ ’�Ìšg8ÒYØ¶´i»ä&©iïš@êØ¦šeÅLDÍ=«âŽ™Ý;èÖSSO¹Ê9ràw¤[ŽyXòdNÙKõj¢^±~Å?øõ·ÝÚ–43¢!�³Ôl—½3Ú6FziÞ=½[÷ÉjŠLbiÎ§¦S0½_O¾gßûýnæG?ôw\ë_OŒò7—\[ª}Ôr0ïÞ"Èª›ÇÕ1WÌZÞ%¥5õ¬+âŠýéë”ˆ]±i9U«-µÑPë©>dX`‡ª@�>à?âÉ³½ä‹*·~ny!øÒ²C9ïUÖß/¯È,VýG´­-¹ë¥u}`_çM5l‹EI¶#I‘W"}F�@® C~jŽnóY‡jú1ÎZèÛ]ºÚ²q(\7·hmßìÅ6Ž,.‚tCNæUÐ�™�4DsXõÖ‚¯¤J3ßPg’òÌl9IÏ‡¿Ù>-(+Í1Ë-!÷õt½~·ë<’¦oô�ÇËêÆñô3¦[?Ô!Äpº"D{_‚)ÎÁá‡¨
+8.:G�Ï`4ò1+ßÕó,"m˜^l�MÐZ„©`¬…Wƒ(rå¨³l›£â�¡¯wwÔÄ¥öØnuD·À(Æù„7ÏëSšiWÇ‰©7dÁ¥íybäˆáæäwjÎsûÅ‹<±ëƒšýP=:çÝécŽÜv)šêƒ¹í'f±´îvÙðEœV7ö×Ûîý5‘%¶í�.Ù›êÚV¥¶Ê`K�=Êc›4ÅbÅe�Zó²-ˆ:´ÐýÍÊ�—GÆüÜgü”FÔˆ·�øÁ�º!Îø¤€_b 1­Ñ±œ·C,Ø'�C�«Õ;÷ùaŸ:M1ß•õØ–5êdfQƒâÅž¼Ôv|øÛ“âU»éOìOÿƒ«NeÕmQö®VýõðwçR”þ¸Tç}Tn]úûEŽVwƒ.òe  |ä	t	©ÐYA2�Tßm¡È�O `pD¨5qòá'ÑÚ`ðnB©ÍÒ,ã´¸«ã}£­vkÂf<èÒU5ZmÒ	ŸÂÓÕ™%Í½ÝÊ)ØôNq‡'·SSóÄ^i»†½IyçNú2PO÷ê¿²¿/7«–½¦÷ÙÌ^�ß·�½rV¼q;{Í¼ÊR'úŠšœ¶ml?ªnÉÌê¢»ë«BuöRöI©£Î%f¹báŠÑ¬:ÑtN–LnHâØô÷Ëã6TáÇöŠ—W¬ äÖÓìmä×nW"ÒWïVá¢<Ú‘Ëá,-×SÛÊ¬»æ¬d¶^“£�rA’È2«4t _Dº%Ë@‡<€f&˜êš"î¨�ÁƒÅ¼$ž÷ËÙvv«`l‘>02q�Äu’DÆ)@©u§†JæcêMÔ…Ú7ðE~)Îxºú¦Í…÷MNü‹“/ÿÄCfÅ‘3ÞÈ8hŽ�c˜z*?US;òH®x§ë’�™²Hw÷ÍDÁkÑ\ÆñÄ^t¨¬˜Ž4›â‡DMô¶*»ov"»}Ù”tSo*’!uºâh ¸/J¨=sêü¿§_õÇ�léÑeòvÅ¿×'1­ŽÅfÑ#;«—\Å–™Ø²K¢á<¦Yüm,¬þæ0ò_øÂk^óšN§CDÿ÷[øÀVWWƒ xÝë^wáÂ…ÿêüÿkôü?ñÅt/ýqIñ¤|å¸:²•ßN@fº“â³ê:OžuÅ°ã<¾â?.(Kª›J»°è=ë¥–ÿ9GDµ™XšV'|1–b<­®¯î¹gJ}‘7¥ä¯Ýªø*w¹éœŸsÎù{Å-J¤{Õ¡™M·tjPDºgÁ#“y"r :¢sD¾Æ‚f”s>/nœñé€úP¿…«§|ªK7T¥ælÇ>9âçÜ†¨ìs-éo–Þvå¸®F!5s.½3QuÓJðE5­Ž»b«á<›¾ûÆÖ’òåžóàBû(±ë¨S£Ù Oþépúa¥Î{î7Û­O÷:ï•rä8ƒhºZk\`$q�ñãðh®Â”9¢ä3ÌƒÕŸ‡S‡ ‚$L…bŠÖ!  ˜îBŒwÜÉø•€ðœõ®4þ™/7¶³×NtgNÌ»TÏ¸ñÐü�ï=m¾´g¿m�‘š=?Ò+“êzO®ƒEMŽRsØ¡Ì“qñ†ýâ³—ßUrëPã×4{5¹ÛPû¹�\OõËî^~gÉ^iA° ²`p…|Aö·u™ñ0Â!7æIb¡Ù¦œ¦6k‰š Zt¬ŽÃ:TÇÑ¡½0´ú´2µÇüÈÔÿä¢ NWÕ°`„Çò®¸jÆ§S[tèº?
+áRÑ–ª-µYÏ}V³š•·V¶´ö%_ì,„¿£mw�ý˜{uÿOóâÓø}yq³ï<„(‹F·ÿp«õÉ<¹5(KH	ÇE‘·¦»`‹úŠEå"™Bùp4º¨µPš0y‚"ÅÁµ÷(çR·ó“ô½…9îÈ�–÷—•YëÒBS�›tôŒùÓƒˆ'ÏgáÏ9ãÈ,VLçó«v®¦žw(„fgP�¯&?çÊýÒÖ²Ô×ørƒ™VÂÏ–vÁ¹¤LR¨�Ì64«Yq— ÒÂU‡bSßÎ_ä—vîÙÑï{b²|%6Rë�Ë¯÷É6œg—
+KÀ@ó¬:<Êßê‹¨bdj2öÅ ƒÞ°²¾/<EV�H2Ö–9ª®$€€±áÄšÍ2pá–§’jÈdÑ™d¦~©Ò.œ’=_NR¾€"bðÀŒfzqRÞÔ’Ê0EÕ•¡—‹¤yÙK-9äKRHÀ!7Ò]	8¤ìÈlÆ6»¤Ÿu›ÜÁ´pªÙÞùÂÒÉ_¾úé�/mü§¥|TìÏ‹£zäåœï˜Ó‘©·ÅjÁÓÔÃòJIJ3ð¨6³‰Ou†eÀ lÒ�‘qp)(8Û¶�ÎìldÏ èÈÅUµÒ‹.ùµ÷ÌéØî
+PlíÄî3¬G�/¾õX>t¾ö¶[™�K"±b¯xq,,SdíÌBB†B0ˆ—Ì¥ìÕYyù×ø{éGêïwýíÇÈ$I^ö²—ýâ/þ?mÄ>ö±�ýÂ/üÂ¯ýÚ¯Ý{ï½Ìü¦7½Éó_‘ÿÏÅ¬x­a?·µÂ¬
+”Þ=sÎÙ9÷!Eef%¹¾:P'C÷^)Æ©>\w&Í­¶ûÌ8kn{±^êªYi%fãâNiYV¶åˆ‰�sÙ¬¸'k‰iï•Ç#½¦™26…iûd—3/Û‹ª9¶“@P@afZm·ÔŽG&åÉ¢j	’Z7'¼™ó0åí
+‘BCsñ¥1?P§A‡2†IlvX]UX´e¸ì¦‘q%uaëäî—ÇªiùËî‘ÖOÏª›2}ÌÉvöC»åá¨ºž9Ü}Ár{cüéùÎ;´9&hR>nÌA°Í^5™ýbÿ„ (^æÐñ�ùÄhøu-/Àðë
+N ¡�ì¡Ê1¦—PÌ $öÎ`¸½�°ÿª£KX?uWkE¥ë> õ1kÛÓèçÉÏÖÜoÎyOÄ6ªË‰�žÙ­Câ�nÊ;]º½G·”¶äD@&ÖT­Ø"·nª�®ç7G¦—›VÓ}Ð²SØ¦féˆDQÊK³â�[z¤9LL¯%óAy��Ú-1È¡Òœ[O³(ØkŠú¼lGVûT¯�lêómi¤¡gv/æÍ˜·ææ¾ˆ×{òÀ¶½Û£Á1È;¸ÞB¯ŠÜ6Ï–2lWLøqA¾‹nÇT—®cØ„7Ä�»f/µ¾¤JRÁ,\¹q°þ›¡:¨ç’êF¢*¯nì„í‡4›¦ÿÃ4ûG–Ã4ÿ{Qþ¶ñè®¼x¦Ó·7›ß¬J4:˜À3å‚t7€.M/@6AU@¨ï*¿+skp<(ƒ½×WÕÑÙì5íðß˜¦Åë†å�kÍ´g¿½®O
+8….uÂ�š€Ý7RÓ­˜˜YBz¢LmãR~Ki�qMd¥m\ÌnIõ!‚ÍMÿbú–Dk:çãêVO®+*\1(lx>;™r!øÒ~u(TÏHÊ=QµÕ¶éPžn«Ý±ž/Íª„öH‡äÖÕÎf~“ei¡jjG·¤Ë K¥SÚÐÐìd¶6Ó+]•äf®¦vq(§%Û‹U’òtÙ{fh”Cebó€Ü†ŠETS»iö+Åìq�ºY0cPu$Y �(‰yÙÎÙnè©�`àb5.,DC(‡Š9g`ÙôTZp¶c.ôU2²Ã@dé©Ý
+©'HÖh¹˜Ðð³ó²
+/èÓÏÅ±ÙßúÔÁ–V¹ ¢ºŽ¹+S;vI´ÅArÓœÕ\  ºÒ®8åÌn-ªúÀžñÐhIgj7]¢91o„X8¤…„7=²›z§dSpê�'á»Ô$€�: Ix}ÙÿÌ�ÌíÙ'CêíšE”Y®X7dR1ôŸ\õÎ-º›…ÅÌêPHW$(ªÚjï¿�:òÿ£~äÃ?|ë­·®¯¯¯®®^ÎÜrË-·ß~û?øA ›››¸ûî»_ýêWÿUóÿ9ü£�¿ÈõqWî*±=.^-¨*lSQ°/öºáïLó·•¦ïÊýºû�R_1._ššZÏ=íˆAT]Óv¿U˜Ã†ëÃj-EËyŠ(—/l;�—v©íÿY^Ý°W¼tÁÿFaî—GÛjOsÝcËÎTÏ(ÙJ"tÞ<xsÐWÇ*&4Õ(ÒÝ=³iPtÄA	 à"Ç¬äÙ‚<62;D‚Ùä 
+Œ”�~…ˆ ûòh]ä¹õs69'‡½qi{‚ªÒÖæýÏò7,„¿·Ÿ½KPÁ,Î“ãò¶åÚ‡jÁ§	åîô#¡{³ÈFøAI£õ\žBëÃD™å: ê�SqtT©³Z/Ê.®ü¡ë£Ê‘'°‹W Ú3Ø¢¹„áE´—�Ž¡KX¿†ñ^cñhdJ7amSÊ™±~QÜ_©ôŠçmÎfoÏ«�²¿›¾fªÉø™òÙ:ó{ü•EºK"ð·¯•?½eï¿Þ½®°õ©5çÍŸ^¥ÞÑs6"½,À“úTë©Ùf¥º²[ÓH­4°¡59Ò6eÙt¥+Èµ„ïÞ¹³y·àÙ„Ÿ<¦Þ¸ež8¢®-YNìpÍ‘±i�ìhÇ~uUÜÕõ™�4ŠˆÏvéÚœÇgøCKô÷F|ï<½.æS	ÎøXmÐ•Kô²1ŸJølHk‹â¦Sæã­.Ò‹#Þj‰UÍ•GƒÝ�Aµâ‘õEl¡$*IyÉ�ž÷c[uï‹{ÉÏ\léô…o5ý?ñ½¯å‹jáFñO9ê´ï}…ÙbÒí9“FH¢øþ£�¶/½Åqžk§Œ ?DÃ²ëf6¹BÐ`Ëu­�•ÕMqùšÐùv¡oTbãLüîk»ÿðÉáïº$4xb÷\4.Ø?Vh vy”ÞSa6O·µ¥·¥7KLZpQkËpl’U·Ô6˜¯)«Pîå¦—Ø0çª-±§ÓtÜ£êÆ¡ûÎÄ²SÚ°ïíùäEnGš©q-5Ôä&ØÁœ˜KY÷UìËí‹ù‘I�Ú¡ÀÀÄê€•¶94ª)@¨+b    IDATD(‡…mOŒ(8ÍxÐk!©Ž{6Öºè+‡!*«ºîó§ó9…@‘ã‘cØÖ3�³™Í®\ÉlÚWÂÓó¥ò©	 .ÔØ$%G‡Üzj±-Òu¨Ò¬fÖíæÑ.�hJß§¼dÏ;bÎ0K¢=sÁ§NK´R.8kÔ‘g>õú__ÿ¹ö·C·Ïd­ÜüÒR |�ÌØ%’eÕŠìî¢\ÍÙˆ„ã¦hl™gšt¨-ƒÂ"<5•…uÈ ûT�VjÔ©¸�äì3M:¬àÆ¼cQ,ŠÛ$Ä–}¨MWe<h‰.œ}{¾ÂlEÞÙ™GAÁ©Aå¢óæudf�€Xpö"³X“ãQÕà	&‡ìÌêºpJ¦÷kú^ú‘§ÿñ÷‹Ç?òßd?²(ŠÇüÎ;ï¼|¹²²rå•W>øàƒÕüI@HL¥ˆkîW	¶å>¨mÐvžêz_	äfÝ½w'þY_ži¸Îª«†Ù;}€P&ÓêhT]Ó>‘›cëÅÿÓm50¬EquÝBðGƒòæÌÌ��~ª°«}ï;quí¹|>¥€‘TêùËF¦š¹)uS¦MµÓ¥k7‹#¡˜B�íh»s6 	¨=ûäÈndœj”¹ �m™§;rQÂ™áTS¬4×¥-:*HÕi9 >€ÄúŠŒ„pÈ/mg¢kŽuÜGgåšÝÒ¯©3•­u¼/ûê©…ðiu³§Í¡níßUæ‘%Ê¥Õ'ã—…X®%Ù—åÍ~pŠ�æYÏG­~ºÕüÃt†,‚t@B¢Œá„ð›h@2€(S0`š�.Z½ÈTÐêÔÛ3­ûÆ,®e*Ë›§³¯×?Åhkr¿.g•õ�«›ÚÔŸ£ÛúôJ�`Æ'ë8vÁ|q‡¿ølyñ´~´%d›nÒlOå46YbÉ%¿)ubÚ9�3±gâ•Crj2ÃþÔur%É™åõjNQdg‘­
+.ÎæÝŒ5WÄ«<²ÙŽ`Ï~û¹ró¬¹§/Û^Æ£'ôoù‰”·êtxË~y‚“Qò ÀÁmþl‚³5ø²|ù>?2âZt��…ˆ‡‹ôÚŠ'9µ–œ±"7á±GÒØ0•…ê€…Ú‡4×®_­)±Ñ­ÿ² $5sÃý7ujÿ¾QÿAks°,oQòœ”óâÎ²z‰¢,oš�0�¼¥VÔñ�ÍÐhüYYÞ¬X n€¼¸0Ö@Éó–›®·[U7´Zi¹qí5¯
+¼»±n¹94›£ä'›²jª}•<Ky×"ïÑ­mºq?à¡?O·ù©]³ KWÎ{Ò›˜¬&ê¥“Û §¢Ø¸ûåª…jÈXB
+ØŽh1h3én¥æT²[5ÎSm÷Ùóé«úJ†B
+2’DÎå°êÖå¹žû|[Ì2é©r_×·Š+}á-ÈV=1U_Ö"Ü(›9ûKÎ(±Ts†UGwAYp¦D¼YÜÒ£9åîé²¡ÎuÜ³óƒ²]¡‚jÉ©��XSW»]5lŠÅš({Ê1¨æ{¢gXÏ«,¶º-êM±°]IÌ9&¶zl¨`Á0®¨VäM]éh¦u=ÛÐg{bnb‡õÝÓKê`�š€Ù#ªS'áqSfm„´$!ºâÀÔ4¾j2½wU’lÈ$±ð)°¬·ôŒÁ«j1g›ðÄ!ÒÈqO\¡ÈÉ-.Ùo�Ò÷‰˜·–Ü­‰ÝY‘7„ÔÖ\UÈÔ¢#3>ßUª#Öò.]Ÿs2µ{=º.ç‰¢Z@îŒÇ>uûâÚMóxH�Œ#ÏEM‘ª¬GŽ„é%›˜€Žš.úwä¤)$3Uß;úÿ½Ö¿Œ‡Æ˜~¿ÿeúýþÞÞÞ_5ÿ_x…+O—fþBôÏgå¥90|APªm/3+›é�–\6þ�ýüƒO8b2~T³×q¿-ÈxR¼ñRqøXøÕíäÝ•­Õäî¨¼#µMcû}ïÞ¶ûè²_¨ž4uÄt^y…uCçÉÒÖ/¦¯Hô|j½³®ˆ$JoÉ±§�–ìèÙš#rç�q…hQ HµÏ�(¸uêÄ6öÑ›Úý1Ÿ\wä<Ky÷òÜƒ-lÆƒPT5<§Ÿ&¢yU¤¦±è�Þ(Ö.d·–Üœ÷ï>›Þé«çÃ?ð�Gö³Ü¯[xœþT¥�1+Gž&Tãè_¶š åFž¢¬néõ>L"%�		£a4Òô–FA»·ê
+~Ó=60XÇ¥'çÊA[^ëúðk`ƒñ6‚6t�x[!OPé«¤Øg&³÷×jŸgÒô®¤z!’²�ŠKVžˆKèœ‡)ŸŸ£ëçè¥Ö7ñéôŽmþBÁ{û&©ÓjÅåˆõ)°àœã]�G6w© åYG´zç¦v\ Z¯ò=ûLÎvf7×íW*Ä3ãT;|ïŒÏ2LO¶Ç|ú‰ê)Ÿß·÷o˜gÅ+b>gQlë�.Ý¬(pÐ¬ã°B}ß~;Æ©ŠGu\i¡œmáÆ+Å{‹ªàÃ/iÑKòø¢ZPÝÆ¼xYSš¶è¥fÎ#gÕ	–ƒ¯{r/Cž”×4Ô©qö£sÁ'Ïn?—TwÄÙ�úÚ�k¹#(ªªkFñÿúŸ5f%þœ9¨×>ëû_.Ëjõ‡›=„áŸ…-0Ð]A«õGRA
+ ïQ£ùP»©À�eyóxò“J=E·uZÿâÜ©e?•¯*ôU×‡[¥YvÅ¬°­±Ý]�Ç|H¼sŠgwøK¦f—ìç7ø�]´Ÿw¨®!ë"›�1?Ù|«R 1ÎH‡)Ïš÷ÌöPëÌæ«Þ¸å~[B®g/.ÌR(hdÈ§l¨Ý‰Ý+9wˆ
+;*ï;Ä–UdÂŒ£¶Ê}2C“…äÎ;Ú‚b›¥¼ŸY»Y¶%I‡DÅbbT…|h¶Û˜˜´ââ˜kzî½.ù›ÅÑÂÌ7„?2e(ò‰ÝJL«äÌƒSÚÖùÒú$-‹Ôª’óº¬vŠ@‰¨%Ä:æÍŠÍ~%rjâ²9&vu6³#94›yÌ]ì¹§$¼­JËã[úœK4³Ó=~4e�ð@fÃKú¹õúçW)¢ºÈŸùW×lLOûä8û$-l@�	?+ ¶ÍP€šÔ�m‘ó`Ïb;ðÈÙµ'}Ì_©nïI`»\ö¨92Û &|.â‹)�+¤º3C—ì×BZ¶Ð1¯7Dß 2È\„'‘ÝmÒ‘˜Ç
+®K.À3»Û C‰•hÊ\ÂiíÿdïM£v»Ê*Ñù¬µûýöï÷~ý÷�ïôMNNrÒ'$$D ! @	�"ˆW±
+QÁBoD«DË!ÞB-En)"=‚„��Ž$'9''9}ûõÍÛwûÝíZÏýÇýuo¼†WËg¬?ûù³Æþó¬1ç˜Ïœ2tq=¼‹ �t¨Y�3¢Óìü‹¯AüªŒý1ûHÆÞHÍ¯�þ]¢¦KÞÇ‹ÖSÎ·	Ú&ÛÝTÏ
+
+‡ñ+=¹©í&…%ûAI£=Þ·ÛñK•í'|óØH›c£ŸÜdW4â›ÚÉ—ƒ{cµC³£Yæd¯›¼$a£d„#-Sm®Æ±.Ì#Ó†êA:ÏS9áœMb ª%±=ÐYŽæÆåÔ¼¸Í&»®O)$y1n!·ËxÉ€›wÆŒ1Q”Æ€/EaÆØNàXç§åUøÆÅyÿ“­d�KfQ*WlEjwÕˆ•.
+nïµåV+xŸmœë�~Ö·ÒÛ‹þÇ´.§jÁw?—eÔè}|0øñ‰É¿Lb˜òÂÜü@1úƒ7¸9Lm{F¥`×=’+"WÃØh5ž+¢XiZ.TßÿfAH4–h­"ìÃr0ìçÃðº|áQÍ¹8½Ê±N’Ý�á¯Â·ŒçßoP”êÒï˜ ±®—;ÊwÅè4Ä…·ùˆ�q"a’Óå³‚¤Gs<äfÆQ“�(¤eQîê�™íåx‡FZ šâ0G³1‡e±í
+ã.�Ù$Žëú9¹�7<š\ÌŽO‹CyÚc«B×:TÉ2%Üœ‹P—°-ªidC\hã»Uº�¡]šwiÊ€—¢Wçg¦Å�
+#›jsâGWôüËêÑ�l™ Bå»TÌË *0ˆÊ$W3(ÑÅ1ëÙ‚yQ±7T3QzU7ÝmŠ-ÅyË8WÊývší¢K’kî_øþ‘L-$Éõíá¯ÙCKÇµB§î$ÉU[«/í6 þÇ$jÛ	¨ÌD¿÷Ò ‹,Ø,•þÆw?£Ôöþèg‡ÁÛ£wK®™r5g+ÔÕf:–²Y ZNŒ´û|±€}™¢ÛâÇStvÐÏ5ù™1¨�p/ÖuìPq»qýˆ[1"9‚7ôÉ7Ë¢Ôâ“e1Y–vŠ°—M­„÷´ôÅ²ÑOµßWé¬µhÏ#éS¥$
+ b]”0%´bIÀ´án¤º©F 1k/aá
+wÁ¬�¸—!ŽuìŠhK-†Ü¯ÊbYN®fíŠt2Ä=5¹ÝÑÑ—_Lõ	8�·ë�vŠbjÄYIä‰(Ö®�‚$MÍ˜0œ®R3§ºÈ©†OÖs.æ0ErâŠQS×K¢:ä•<UZª?eL›p•[‰·xyÌ°Sæ½v¾¯Ã¢(ŽÓ5'*3ÔPÇeÚ! \2"ÎFÚéè��JÆœ²¯ å{ŸqËˆ;FWo5õbÀõ1±7âºKå¾în3®ði*f¹’#l�¸›ðpÁÊwõJMì+ÐöŒc�*M}n‚n1`yµ*öÆvøTŸOÇÜU@„C9Tò)?äe“œœTCÞŒ°ÅÐ½J@OÙy£#À±vK_ô(À–®�)‹fæ|¯0R}¿çÑ7²Z­J)�ÆÿÝi4ãããÿÔþÿG.Ìcš†tÅ:ˆÍÁï$j~#¼³æ|#/ß8•éªf/oE³íÈ‹‚T”í‹Õøzx÷tî÷ŠÖã‚AvØ©o<‚f³lžsEsÖyÖ–ËŽqžA¾qÖ­‚l0H) j$ ­…wmeÜU£i3)ÑžœÌäeCqê‘	PÈªË[½±ËÜ“£€>/®gKì<ÍXZÊ.÷µ2QÜPçW³‹Cev(?R³Ýø®œìùrèŠ– $Rã3¹ßjÅw*®0ÌLç3]T\¥‡£l§ë|Õu¾QÎýV½ÿ»›­¯zÖcR®4¶^“$×{þ™K—?Yªn$1q¯5±±xó°‡~B 41Ø@±R�ÃLÜíµP�E¿mª™šO“Z—³£¡hþ¤ãAÐ ïÿIsø¡ÍÎ_ûæ3„¸9øÍ’ýí¬p<Ø=n]è«‚oE9­>ÙÔOöø¸�±õm³0¶¤¾˜¢ßÒ§ø}ªÍÏEh°/E¸¥–c´^ÜAÔ¬#®Ü‹Ñiò³M>qp:{Ä¥bO1úe:P ÝW˜¯¶ÈÛa\ÙÔË]>Z¥[8swÄyì-ÓÁM}$àK^4àXlñãUÜšp+E/äÕþr†¡‰bÆýŸœ W”é@Ì]…2í&ü£ÿÈ’:fÀØˆw$¬Ê¢ÐVÝy÷CUŽÕ¸‚9Èö³f“ =1é~)Êv).Ž’—mt¾È rþƒR®6^¯Ê¶±¬#®y$èç¥D8„ˆrùã™ÚÆ,âØ¯¯ßBkQ47
+_o;j|ú‘nï¾4F¿¢×û‘áè'35•éZ’^9áÿ~¢v0Ë^rÛFðl1˜¶O›”.éÏ¦ç'Äáqq(Äúýh…nâ¼€{™ÿû
+ÿ•CSš“I¹Ý ð¦F¶–]HÑ·(×äg/g'Œó¦ß×C^S/¯dK%Qî©QÌÙ¬±ël²N¤%g#×$=ät¨ë)³e	ª™°!€–C^·É3Èš°NÄL)+ �Œ ø”ðúRºµÃª-XñPg]]ÏÓØz¶U“å�ŠëmÆöIÝ¦¡y1.Ø¤î&ÆÌ R
+éÅìÙP¾Pm…¶¾èQaÜZ¶Es¤ñâpÞÊR†ÎQ¡¡_XKÓi£’²vhlÈ]›¼õl¥"½ž
+Ðœ<p>=ž—ñù82Éb Ar§­×8	†]¾´¬ÜRëcF¸¬Ž”E~LN�‘IÃ˜3f&ÐRvÑ€kS¾�óãrûN+óÈBiÄ†ZÌž/ˆâ¦:g#7)n˜�%�Ê§“‹lI"æ~ŠÞ@¯›(äh¦ÎO.ë/LËƒM}Š@5:<)î¨ˆ9	ÄÜMÐ#“ÈFµ®�_LÏähj—qUÌ]IVÂl’èeejmŠ®+B“¸ŸîWLŽHÈÃ‘?Ø²mûê«¯~è¡‡^ü\[[;{öì�7ÞøOíÿO®HÔ6S®€�œq~ÌùŠÒ¹¡šUlí.½g+|5‰ž³äJÎúN�¼|[åUýô†L;š=SôJæR+|{¦ËÃôúL{Žè¦z²Ÿ•(v=ãl¬fºÉM©ši0Å¾-×MdoÂ~!ÕV ${½#r#µÒP›e99ªÚïhW÷cî„<0àH2WÓVŠ¬§72ŒRô#îxÂ�·%hõôÊvcoŽ¦ÇÄÎŠÙ‘�-µèx-ñÛÙÔZ*
+5ŒX�el§j[Þ<gGsæ1€l¹¢t©Ÿ¼Ì³™.¾ëÒÖrœÜ%·çí,y™Ùdö4¥ÜT�ÍWt:o©M~I[åÚwý<@ètß™&hlÜØ®ïWFÁ´Ê°$¤‘<ÿ@®×I’)ÇU¶ÓŸšx÷¹_KÒk£øe¶<oÈzª§5çR]¥×Ì:Ïä¬ÄÛZzs�yM�vî‘o7…X°Â*Ý^Â¡˜·lšt1ðe†êòÑ˜7‹´£s»‡ÓEÚ¹Å„ôø2Á´à1T;|l{Që¤Y�¸¡8îð™o�Î¾ÙÕ—/g§%Ùsâu¦mŒù|†¾„q+äÕ]ð"#y`†Š°îbvˆ3š¤W'hµñÄ±Ï§Û|b‘ÿÜB)A0#nnñ9*æiaÈí�ƒ•„y*u’ÛúzdÉ–#ºUçk)›�šqDÛ5ÎÔ£{]ó¤g>­tÁ[J�w‡Øì¬è|¦àý±eMÓ+¢ôš~ðÞáð`§w�3•a|âô‡ïõs�iœGsY6£UÍ¶Ibtêãqz�4`Û•«_ŠÒëFÉËmyÎ2_¨¿hÉAv�Ù èT{�tßJÚ˜·ÏÊ«p§ËÇšüD“‘p"¬MÐÝ*>2-î|8{çéìÓ–º|Þ¦R�	Ï€·œ]µ×çeeŸÆ3T¤Û×	SUìÙJ�$Y]0òbÂœ±êè­f�°ŠY…Q Y×Œð…0?ÒAO¯t×vIT “òkiëRÄýÕÌÈ¨¢ÏÍ”�	¹óB0ÐãÓ]•å¨œbä
+°¤žŒ¹W¤])«ˆ�’%Z¨ƒ“Q¼�§œöôfÂ™C~Uæ4¸@»X�,jéK9“EF† à²ôÛzQsòÚóéÙ��®o©K)SôøsK6ù->6Âj»4PùqquÈªh4ŸOž\M
+z¼œpæÒxÍp2N*tp¨G­¬Ðâç<ªN3yªx4I@EìÜàï˜$/g§Û|ÀKuÉ¦¢MU‚aQ¡ÎO˜º¡«›Zðj�—Ê¢r°¤ž-Ð¼€5âæ†ºl�g¢�£Ùˆ{ªUÛ˜yÒZ2HWÍeSD‘¦Š‘4Óm]egL-E6©P›U³õ½âÈù^t?ðl¬n·{æÌ™3gÎ|þóŸ¿ûî»ƒA.—³,Ëqœûï¿ûöíJ©w¿ûÝ®ë~øÃBüSûÿ�—Þÿý/ÿu˜4(É8Ÿ¨Y†éÉµvº­d=¿1ú™åw]«Ç‡MžùÔVø¦zð3cÎƒ–èg\,;Ÿ™®¾¦9ü5[ÔiËÍZîÃQz�€ç—,¹QòþTÀ`.&º6f�
+²½�.vÓIƒÌVÆEÍ†'Ã-5d»Ê†œw“¼k5»ìRÍ—­Õl´šXãÆ¤CeÅjŸw<SûÜ°© �x4^“Û2@±¡'á˜”ßÒçY–ùf&maN™\µÖs‚1ŠuÁ¢d?’éšo,µâWÄº¦Õßz,È4²åE[.i.gj;³e‡Ñ…žóÕAø6ßùâzû9û€1Š~DéÙ0ØIˆ¹…Ð¥òQÛ�ã®9n3�aYÛ´B»ù2`ÈÙÈ0×æbšlg]�¢Q´ŸuEé1¢DéBìšÏ6Â7¬'FÙþŒÌc½<ÂZW·#´lT‡¼£>N?¤vð„¤‚$w•?ëÐTŠv�–ézƒJ=>ÝÀÓâ•â&?îÑ¼I¥u	G�Õã“M'èõp¶DûÛ|¢H;€,*fLäªbwÌƒ-~¨…ïNˆÛGXW<
+p$blz4Ÿ¢“¢àB{7ñU�ÈmàË6ÆŽ°b}œîœ×˜˜š�»WÕCôKâ�€ŒyÀ¤¦LŒØ*aÆvN`¨ÆLJ•ž,™Ç"5£ØsŒ5O®¥zªè}|”üCJ
+µ}²ø.Ó¸Pïÿ7ßþ¦R“€Í°+åOIñÂ(ú±BñÙFëY¬ÂäËøZšíKÓƒJÏWÇ¾EÔOÓJ”ÜéX�ƒ7HÑ
+†/Ï¹ŸÅ¯Ô\ [®yÎ”KJÏ†jZÁŠµ�‚&Li“q!ûnUlyð%«D×
+Ø):ÎŒ,æ�„S¦ëbÞŒ°¦‘mòæ-5ÒíæöHÊ:T°¨ØÖË1#FG�2Ä.å Ä”E9â$DOÂ#P�Wl*ú¢ÒÓ.å�tøŒ‹±ºê&èYTŒÑ&ÀèèU—Š&ùÆ‚Ý‰u1àÄ!·§·Êbº«{)[™f±©Ÿ›’ûlÉµª!�D‘A`˜.Ur"×Óu_äBÆ:?®ô¬F¢‰-òº|ÎFEC7ôrQT=r 9g¯õUIAYä´ôÚ”ÜÙÑ�I¶†¡Ëú¡q³�rÕ(˜(	Ø¯þÜe§šÎÞ»yé³ó>Íæ¨ÖÆšßÒÏ[(”)‘7È�}\²Pa¨Mu¾,f=áÕÌ¡b(xÉÂX]Ÿ—Û{ºç7eÊ <š“³\î4)Ÿ!Q[”xÍBÙ@Î¦²æTC¥ðÚ¼ø¢B�• › �§OŒ˜4ó;}½^S�L
+8¿«Ì1³ÓÉ
+cæfÊH’DÁü–úÐ÷’�õW}¿š��ÿgÎÆú�ãÈo|ã‡¾ï¾û Üu×]‡~æ™g ¼õ­oýÐ‡>ô¾÷½ïæ›o~Ñj@Jùÿ¡ÿÿ*;†šÎý¡!º‘#J‡ÙT¢+s¥’û-“F½ÑOµ“›çýÿaŠÆùþ¯Ù¢—±³ý‰ž°åJ¢ö®5Í'2]Õ¬âübï�
+ÎÊÎ7i¦+›ƒßéÅ?äÈ‹Š­Q¶Ó3.Ið¼û¨+±6	<ÐH´;.+.™«i½ß²•E»­	I|"np¢�ŠNsÂ_
+oiªµ¢˜UœùTMy¤™+¢”!I¸/`5ùie…x¨UÅ�Õ3o#ÞÙLkš-_�-ša¶÷bì´“CcÎ7óÆ%Ç8eWWœ¯8Æ™’ÿ†íZ…éµJ—<ófÇ�[Qzƒë>]ÉÿªïŸ0å–fOŠV¹ðë©š&Fï¯p<$ñ-[[ïöÌAo,  Žì4B£þ“Ýîks¹‡\·©´F±ôpW”š5¤éáQ|O¢ö&/5åR/~¥iœ÷>ášOZ¢ÑÉjL!¯X(Ôá3eÚcsÈGXÄ�Ï.òŸ×p'Aæh÷½>Å@@º4£‘ôøâ¸¸rœnòÅ€WcnX¦M‹ü—Šct]—ÏØ¨žÒ¿×â#~xM� Rôb…ØÌ0¬ÒKbî×ùÁ6žªÒM)·¢ËÇò´'Ã€`ÚTó±#EÇ€?#^=ƒ×'hqàýôŸ¢Mýt™öœÉ>mQµ,vî–o+a�9&g¶™~¢=	ÚJ)ÕÀ¥‚R×8=Êö[b˜3.é!):JçÂø.ßzØ5Ÿ2�óŽñœ��zÿ£E÷¯ƒÑ[‚èu‰Ú=VþÕ^ïU`+ïÿY½þ~f×²ž)åKJrÉ±¿SÈ6
+Ñhýç(~Yší`ÈeÖ¾!/wƒ_±ŒsR4‚ôVÍ^¦ç#µP²ŽæäjNöÒ–è5²dN¼d]�jé§wŠû4Ò!Ÿñh›F¦ÏÑ}.f3ô#¬5ùA–F
+P�îH1L1”°ëYsðzQÌ†èy� ‡¼âÒ˜„5àËT×'8›jiE]sð ¥—ªb�BÚÐ'+b@�ÇÅ!GØ•§ù˜;EZPH5tIÌµõe,²šé\ÆA(pQL†°"îÛ”“d¸˜¶Hme[Ù‹éåM~2cqÖRËU1!IÖÕ%"AÀ�Û6ÆCnÄA&<š×gˆM²fä®–ÚˆYgÈšénÈÍ˜UMÎœXä¶Ô†FÊ`ã‘ ¹’]xA}dMë;o¸1nYŸ{}!G“ò‹úE:à	åÓlIÚ]¾èPqÀ«.Ó·-xÓòê¦¾ØÓÝ~Vf æA&ÍÊ�ª®ôRÚä´Ô:A,ªÇ»ziÄ[9f„-e�&lòb‚H$hÄt•ö3Ø£éõM;¨Y(¯ê¯ºq·¯³6È¸�pP5›)"ÓžAë²I:a@ÂT66²ÿupä¿Z¿ÖÿÃ].9Ÿ’[#µ­d½Ÿü�)u2.ÙÎ)ÿ£w•�/›òâÆðýóXª'¶’}9úÆ¢cœ�²=‚¢a¶Û“Ë–\	Ò«#]Î‹qÙû¥Ç;á[-¹ÑO¯Ä?ºÊd9óD¤¶‡ªV²Ž¶ãë,5ÓZ—.Æp    IDAT5oŸ]‰÷ÕŒ¾k,^÷å„›²îèU†.ˆiÍ:äŽCÅ¯y4ÁP™!Lx `TÄ¶}ÔDaFîN™¢”9E& 4´MfÆzÌì¤:çÈ†#—R=ªéšó·ÝøîPWÇ�¿w­Ç’lŸ%Ï%Ù)ê‰ÚmÉó™žs­‡ûá›¦*?Ì QøF!:JM9ö·“äz¢‘ïZe¦µ•&ãqr‹e>%·ê
+_ˆã1¢‘iŽˆ�&6³éúÃ~ï¥flëqPªuEˆ^0z‹Ãèß�¢ì )ÖZñË§ý�&j{#º7Ð èéaÈM—ªo	;ütŒÆ^ñËMý¤IÅ?Í€‹é–rØ-á›T¨ÑuKú‹)Zt×Ë�ªt�BÒã‚Ì2]ÕÒGv÷^È¾dÑX†¡…
+#KÐs‰®ŒÑ03†|±ƒ#;èg-*nê|Zèòseºa�?[Å­ e˜(º4òC;4Ýá'-Ôº8:G?‘¢ÏHn¿ó4Ÿù‘•¥SWÝš,·Ô "óŠ)âtþ/N~z‡÷H'¾…À“þŸ'ÙS.oŒÞ>—ÿÐVðž¹â;{áÛ+¹ÿ}³÷‰ñü/ej—m=2ý”e‹’[ªÅ÷‚w1çJÅßiv>jÏÙæ³®wl0øaÇùÖ0xg±ð‡�öÇlóD3ø¾ùìüì›Î-�,½%ß¥×�—ïï0äêrïãÛžÜp�síø¶¢ùüÅðPÍà�vmâÕì’EE¹%ý¥›¦Ê ‚âQÇj¿xÆag\Ì6øÁ1ºÝ¡JÌÝÍÈŸÉÐ£k rÉõe¶œ®¾˜TcSÑA±Ï+š$FÜ3`18á�C%‹Ü¾Þ°(—pàR)ÁÈ‚Ÿ!.‹Ê¦ºèÑDÂ…„@Bnn7ç[™Î�*Ä5Y]Ë.ÎÛ=Y_KÊ’‘O“Œ‘|á eÝÐç$†®Š…Ëú“ôÒˆ[.�yÂ¿˜}m^Þµ¤¾fQ%‡• $H@n»xý;äâ¯íìxîê7“îyÑbþ¹¿CUÎTÍõ�d<ä¾€0L²¤†¾¨>½C¾±¯×F€(Ðüeý73â5¾T¥+—ô÷oÊX­êïØ¨@EZð*ÁaÙ@ÞAÍ¡Òˆëyšfp—/hû´©7S£Ï+U ÒœúblÄ�ú¼h b£BWäD~K�Ëh� ’„‚€/é@U,Ôõ™ÝíŠ¹gS)äº‰Ü˜œïê&C%Ü¯ˆãf§›�Åœ•¥ê*ƒ@E™†Ú·Ÿ_‹þ¶’ßË~äé7¿Ã|ÿ_ý3ïGÊ^ûªûï¿ÿUæ/¶â;Ç››Ñ+9ÐìåíïÄÙnß<˜žù, 2µC’"²=¶H]cÍ–K­ø‡<ã¢m\Ìô„%7·âÛm”¬':é5±®…é-‰Ú-Å VsyóùHÍ­çFj¾‘,\‹†ÉvGh†áK6!æ‚C*ot Ê¸ P4I�tFdú¢ê#e�",ÉJÄ‘+Š)ba#§‘)D'Å>›Š®àUu¦*+mÝ�4Q4šWŒÁHÕ¼ÿ¾¼9'·4œav•!¢v–ÏË Ê®T\�³+cµ�è�µÂû¥h�’;™óC"”¢Þ½[Š¾Ò“¦q±Pø
+Ð¢?~Æ±Ÿ…¯.•þÎ0º†<îçÏ$‰PÙœãlŒmÃêâ/;ö£šAp«í­Þyö£aôêQôÚ8¹%J¯$÷ÔŠï{Ãô¶DÏ1¤Òsê¦�b%ì’!�[ümŸÚüt•nÐã
+t°ÇÇ<ÀIMÓë\ÒHÊ]â�ç±/Â– g›¸³�•!_ôhÖ¦ZÈk€ÌÓÎ6Ÿ+‹C–rØ.áú4£éÓÂ’`öqrˆ3ñ½>àKþN�6øÁvvðô6z[Gó´g_±l aÓDÑ¤œ€­0ô±3E§‡c5ºÝ¦±1qc„-ƒ|ÅhñóÄcù=ô)oLÒ5k)Êöº‚ƒlg¬mWö›ñKKöc©Úž7�GÙáœy´½Ö6.†ñËÊþGêƒ?ðío¦w¢	šKRt´®Ž¢{=çKY¶°”2áÛ¡ó†q¹;øEË8eÈ•©±_°�G“hLR&¯ˆ²ëL±Ñ~9ï~.ˆ^—3Ÿì�ÔìHí4)ê¤;Ç­Í3I½(j)£Ã-*FÜÎ(Ðˆ]šoâ;)Ú6Æ	†�I—jm>ª)¶¨’¢Óâ#.M÷pÎ¤r—�UÄ56ù~Žào¨³qMì�¸ÏPD†FÚÁ©1±Ã‚cÄPi‚¾?F'/&²˜;’ì’(õôº†£—6ù÷b4hCŸ3(—r ‘&ÌE1µ¦Î4UjRN#íðóohNC÷ôæ‹»ü.U|*œQŒ–E•?V{z£&¯Ê8ÑÐ	Z&BÔÇåTÆàBkï­¥âöôÙ¯÷æoá³—ãÇ¶Mÿärç[»ÖõÑ^æÌ”ƒ?¡ec¼ÁÇ	Ö>óÚ˜¥G%—*£Ëçcl8˜éñ±š8\-	TÄý[¶	¿fŒ'L
+a…öÄô�×%Ù£j”bÎ,*x¹­"“¡<ª&<ð¨ÚâS �ã!Ç.U\QTœIrNX´PàAš”K1²©X¡ý®(oèg«â@À›¶�³)¢ÁP·*b.ä.@S†ÛË
+D4i-jØ6	Ó‰b#åª†ñ}ÿ÷Âµ¾ûÐ÷;Ìÿèùí\ë?Wi6‹æ)IÁ0ÛY46bU!¨�à�‘šŠÕ¼Í^üšµàíƒôFCnÆj[Î<Qq¾Vt¾8Ê–¬g$õ¶Â×%º”¨i‹’©Âûc5oR$‘zòB¤¦$õ«Þ'ñK%Eíä9f6¨rAêD›Ìb3¾2Òe_$¦hµÓmbÕËÆMJc–EiNNÕHú*´ÈªÊ©uN�Ù×ëfMæRDy1áÐ#mè‹1‡+Ùê¼±?f9i4�tV�2ÅÀÍ‘.HŠ:á›R±šŠu¡`÷?\”)(c˜©šPì—ÝOZb%ˆ~¬þ”MßþZÑýÓ<Uï}¢Vü¹‚ÿ�P©™fûƒ£ðµ­¯”Š�fUßûlš 
+·I¬1~Ú4ÏdšK$É5izÐ±¿�/œpÍ€Îô4ÑÐw¾TÎýW[^Ž~rß#)ð�cëY[^ÚŒn·NV¤+`dÈVÓú@omòcÛÄ�ÅhçhOÈ+	Ú):kü¹mâ�)º.f$¼>ŸÌÑ—fLäó8@$tEÊÝº>“q¿‡ã—*	A†Ø*Ð®¯§ÜÙâ,:ÈWèê�¤HWè`W2Ô*Z!ªÑÎ6z›Ks	:-~2O{üàú%‚ìâ¨�|Ï[¨¶ñ”E5‹J9ÚíaGŒFŽf^—p%l	cZÜ /©¯û”' '�h-™*Ùß´Egoù‘.¤,25ÝŽo¢/©ÛŠî¤ûÃô°æ\køë oôWÊf“(Ñœ4ŒÓksþŸ3Ë z-@B4ãä¥Eï�ãìàJ÷“žý QÄ?Üí½“Ù[i?PÈÿ€ÙÚË#µo”íböÉK4:é~†(èëÉ¸O“—Ô#–€‹‰‘��\‘®J¹7I¯™¤×8œÚF÷µø‰5ýµYq/Az˜Ÿ¦;+tC±¯Çg
+tEÈõ–>S¦ýŠccM·ô%“ü²˜0jraZÜ²¤ïèÕo&Ü›6æ&ä. r—CÒ‚ïQ-âö†ºPÛ%Ì1±{ÈÍŽ^²©8)®ñf†ÀF%ã¨ &Sô#nGLÊýškóóY{÷7­è'BnGØ²(s¼¬Œ9ðr‹�Uèª†~âjëµLÊ…Üqc^^µG¾ªÅO•hÇ²:‘"â^ùÜçÊY‚<Í×¿ºÏ°äÎ¿°þBò`V^;&ç†¼j’;!n›/]Ñ_p1•ðàrº6äÖsê¿0¸Ï—[üøq_§¯4ßœpp·£»	‡Û�Ã»å]¶ÿrv4âŽG	Âˆƒí˜2Ê\\ÎN×ù™€·ÆÄ¾šØ›ð€`Œ¸¥µø„O3Œìrv4àÍ!‚Ëúÿ$PÊm…ÀDÁ ¿Ã'B%·ôys�®Wè`Š~„vÈm¹Iy @ó
+Ú¦’I¹žr,�„ÕF²ÐWKôlÒ#å™B…Ú´é{ÞÉø·l¬ÿßr­óŸwäùL×BµÝ¢x,÷Ÿz£_Ø_]0V,¹©…‚õH?¹m+™*£œq^³(SnÓCeûë£ôzßü®c=Ä¯Œ²+ŠÎßŽ’Û,¹4Hnêe“esÅ-ßúÎ ¾;ÑUK44Û$‘ŒyÚ‰îë§Ûc–žˆS6óÆæ ›º�=U¥+sÂOY$�@ÊðÐ%¿ Ó�²:z½,¦{\Ïxd�_ã=ÝÍSD«„Ã¢ð%qÂ"Ðá¸‘²å‰ž Ì‘K™®²9I*c³f?À”ë€f¾õÍ ¾'Õžù¤ýöè§¤äí¯Ú³¿æzÏ¥I!Œîu�¯iÎÆZ§÷!ßý¬e½�$WáóþGÓôJÍyC¬ƒ2Ëz:ŽoÂ'1Œ³+ã¨m>“ª½qzXŠ¶e<?ˆÞ«ƒÚN=>¤O$±¶4`‘reo�UjÃc#n3«6?«L›ÆSô˜3�È ¢ÏB%BÝ€ßào›¨ì“?Ý×›üÍiqï¦~À¦qÍqU\ßâg=ÌåhnÈ«%Ú9ä…¸&öœPha¬�“Ûé/*}rØ‘ ;ä‘Ks)w‰Ì!Ÿ°	RÂ‹°ž¡o¡PŽöùL™nym€Æèöuþâ!ùÞ£êþíôŽ¢˜îé5‡*E‘[QÏ°ç–,XiÆî@å‡zX•€¼±ªñ”mGZYaÂÜb×8og	Zs^Š– .ÃÈÔ”c>£ôT+|«¤p¢ð‹Žýí•æiÑý¤çþ]ýh¦&\ûÛýÑ;¦jo]«y¬øsÝÁ<û[�ásÖ£š]S¬ÆÙAÅ…Xmë§;òÆj¢Ë¾y¦_ç[#U#€ ‡Úê�EÎP×GX÷0³Á_§—§Äh¸˜Zá¿ô!ñ›ü´€µÆŸ§»):.Í°P°‚¡ªbÿP×-*$<ÐH†¸4F×yÕ€—a$aX»l¯™–	0H,«#Ú™q˜Ú!kS�­Š]yÁ›ª“§*-}É§	cÀ+%±½¡O¸×H,F&`&èOÊ½kêxŽfîÄ¬cÀÍýû�7¯¨#Óâºº>£žÇn‚ŒÑ°û|Ò¥¹Í­èÏ_i¼««›1&‰;jèSNƒîßú_V¿ù«Öþ—åêOUüÄ:ðG?õï�çùÊÆõ—²g*t`Ä—ªy‘&ûÐMæ¯?™þçIºgJ\ÝÒË‹ü³ôF	;Äf�®iòs6jÓr×‰ì¯öoèž	ÇvC-¾èYðVIÌ…<x£"vYd6Õ¢Gã[üØvñŠ�£¡FZ¢ñ†¾”£iW¸ëê9¹¢˜ïêË5±{C#È!Ÿ³irZÜb‘1ÔC…DÀìóU‹
+�òˆ @äD­©O9¨È$?äÆ¼±°–mNÈ™¢¹šé| Š©¡¦yçh+9l‰8cë?&æ÷Âµžú‰ïw˜ø›ËÆúÁ”kÏtm3ºÍ•—úé~Íþ0¼o+|µ#AÑXþEë›•Âûªî'«Æ êü½!š¦Øiö$EýäNÇ8çÚßêGo¥W™r½½Î·¿¥ÙŽ²=†è—Í%KløÖÃkÁÏ‡j:gWì­'Û\¹8Ìª1ˆ_½ï”0åÿYÉ¼Tuÿ¬lž›×Ž†/B_ @Âª§ƒ€—üŠ1h+ÑÒË•»z«&Ç5RùŽn¦dÐµQ”Ú$'àTƒŠF‹Á‚²”-›âP5ËPmßH¶ñP[%–\’bÐ�ïÒ›Jþï¯~Ç”‹6�‹ƒèG*Þ_æ­•ž0äåFðï‰â�ÆßŒÂ×+]MÒÃÝÁµ*¥Y¶3Žo4C¤é¥fµF?‘e»†ÃŸë¿,e=ÉöùÎ—Ñ›FñËlóh)÷Û«ýß7ÅZª‹¶q6ÈvŒYç<‘dl¬¨øB<èë€¡Bî5ôw
+pI!ôiaÀ§-Tº8ÚÂe"˜ã9Z˜§7MÓ½m})FWÀìóy—æ|Ê¦ñ„{Ùà‡bFVç§c´Š´m]?3AwUé–YzÃ?P¥›Ø;ÂÁ˜/W¾äÒ¬‹©ÇèV�`Õ"0�ò™qzyÊ]›Æ¦èGËt½Âè*ùKçÕßŽÓËSWõÃ/ÚF÷u0'5ÒÂ”ám¤åŒ�Œõ˜a‡l”ŽÔ”!B_6%…cè™/ 4Êö´Â×vã{¹¦×´Ã·´FoÍ9ŸWz¼½~2÷%çÓqrãFû«u¤hÇéuÍÞÇ25'Ä0JnË»Ýîüj%÷�îŸ*]âWûæãýø.@ÉR45û¦¨—¬Ó9ë1¢l+ºÑq=™4(é(^Ëú-µZ‘9Æ *t ÍÏn?�…âyþH—�îïñ°c“Ÿìò31oMÒOÓísâž1ºm¿q§ƒÉy]ÀKâŠ¯„ÜdméGÚ£Z�nŒ¸³`ìu¨2)÷×Ä‚\IŒeýmÕÕå1:äP~Ê˜bè@7¶Ô…¹·¥Ï5TÀà–^ìêÕªØá�7âÆ.k¦¥ÏÌÉÃ’ì’˜ó¨£mQ¾HÛºº¡‘ÄÜ°œqÒÒ—"nèŠãÙ2Òº>£± ï°(?ÄâKE1?/_U ¯MÒ+#Nº|²¯‡�VC^x8äîšþûŒc›Ši ÿê¥™ÿíìÒ³Ãô–1ºj¨3	@›�œÓ´¡ÎºXx4}ÿ>ñž!_¼¬ÿ!Eï:ã~Ÿf:|¬ÏÏ»Â�×KØM½5F·vu£ÅÇ"ôG:L1dèˆ;]~¡­/+¤	Új«5†2É£ëCCnœ§Z—™MvGm8¨edkÄl¡R¦=º"‡…M}dUmññ”ƒ€×b´ „\w©  ¬äD­¯×©$Àˆ·ò4ÓV±Fª�D—}óìŒ÷S„	@Í‹ÝïÙ@  ëï÷ü›ÏÎð×zé5Î££lï®ê=žqÌ2Î È™Ï+öW:ŸÉôd«ÿ{ÍÑÛ+Î—ÛÑÝçS9ç+µüFÙn‚6¨GH›Ãô’ë5l¥KkuðkŽqN±ï§ÑÐÜ­™ü5;ýl~Ö>?Ìöì«¼Ù3OyÖ“ 4K[¤«ÃŸMTµ>ú…f²wÂ62]´ŽæäÖ”}4ä¡ENAä´–Ê”#ƒÜ¡BØQ›ª÷$L_Ô¶ôs1j3à–G–#ÂÍ4ŸÞéäR¬aˆ@3IJÚiÙ"aÑhÖy’€ ½Á”—†jÂ NôsþGµGŠf’pÌçë±0½®è}t½n<÷»IzM¦k Ä±kÿSÞû‹(~³ãº_Ô†÷Yò<sŽaò2Q åz7zkª'´.ÖŠ?›ª¹8¹)ÊØÆÉ ¾»Ñûã©Ü‡ÃìjK´Géu&�LÑµU2/NÉƒˆÙQÈ§Úˆ7jâæ>.0t‘õù´O;,”bÔË¸¡Î;ò³®mòw›ü¸Cc6+t³€Ùç»Ä; bp{Ä}ýDÈ«eº²F‡ OóyšÞà/MÑ«ÊbGg2%œ.Ÿž Wz´-äõKü'9ìÝäÈÓÞ>NÄØŠ°ÎP®€ÝçSëø¢‰R—Ÿ]å¿%ˆêü.ÍÓl‡ŸéðI€GÜq:äÖbºY´˜®æejS³P4_ˆu±•�R¾q^s.g>#)"Ò®¼§Wõ’«kþGòÖ“arç ¾§â}¼¾%J¯„©ž hÛ<>L¯KÕ\¦æSµc¾eß½Ùûóœó%ßþFœí¥·0›ÌvÉûx�¼¤ŸƒEœíÉ›Ïi@@•�a¢Ý®^œ3]‡J¡Öu}aŒ®ÙÐy4·¡¿¨M.àm€ÐÈRtÊtÐÃö2]=F×x}‹Ÿðù¡Æ¤8ØÖ�<ínë‡¦5§æ6y·Eù._´É��ÛÎgOI˜žP]®§èð±ÐçÖ¤Ü>â ÅbÂ2-*„œ	Ø.å	¢"òbJ!kéË
+q's¦å•µ2â�®^±È6‘#ˆÁˆ7L4â2$ˆØâýòçK´¿D;óØ}Y}»Ã'	ÁìêË&œmw¨*!Ët¨ËçVôu~HC	ÈqºãïÿãÐ¥òòÓúÔýžúoÖsi4õ‰6ŸZÓ™Èkd³âžyºOÂ.Ñá«åo…Ü£›·‰WX/dÛÔ2²í=™ýiÄ�KU	Û£@yìéó…~¸@=½’`P ý6F¼æcš6•{zuÈk>:ÂjÊ£”“˜[ Võã©Fb¢`�m¡ÈàŠØf‘=#¯ÐH«t•€9F‡Â²Øéc�Áí	IdiOKŸÉÑD‰ö¹Tdx4n‘- bzI=ÝWþZtÃzxïPår"\Š®]�w(ãïÙCà_¾_ë¿Z®õ/‹Ÿ°ÍgšÁ/¢cˆV¬ly)Q³Uÿ#Rl¢7GÙ©ª&œŸ/þüb÷ã®¬tÞ~ˆ%jo¦+‘šö�³½ôZO.¥º\´ÊtàXíHuQPërÕþ¦g=Øý¼kœ°Íç¶‚÷40E3ÈvûÆ¥ Û9áÿqcô“ú‘T.fµÓ{àlp‡C6ˆò"”v²\QFKi§$¦êú”O³†Mž‚qË£j]+Òž€×m”-Ê{äwõVŠ~žæ|áfÌE#4(^NÈ¥¼'„Má@{sÎÃDºÝQ±Ž¢>H¯—1Ë¼õT/¹u*÷›Íà=ŽqÎ�¼û‰nð+‘Ú9[¹§;|_ªv˜ò²Òã¦\
+ÓkÇò¿>ß”ª9A‘k>ngâô&Çz´9øMÛ8£9o§[á[¦
+ïUj¼½Ñ5�·Â74ëª+Wºé¾ª}d-¼Á$2(ódãBÌåk†³žµC®˜-þ®€%`¹4×åg}Ú ãA™®©óƒy:ÀÈòØ¥‘*ÄšðZ‚–ƒÉ>Nï’w·u}Yf�xgÀu‚àÂy{Sm$èz49à¥ª8°ª¾Y×çiŒ êú´B¨F¼éÓÅ ‹/NÒ]Ëü)Ûû8QÄ¡k :ÂfŒÆî5©šr«HW)j•?]ÆÚo¡¤‘äÙÈÑŠú‡ýÆkú:3Œ¡248'tÊ†$�€"‚#º›iÑ#sÂy*QS ˜MS´\óùDÍ+]ÎÙ	êh.¸ÖÃqz³=ˆï²ä²eœ“¢§W0äšæ\;úÑ	ÿ‚øÕü[Ãšb+Êö2�(Ñ’F©.IŠ¶’A4a�l§$t É$!‰û*‰1ð©L ˜C‹ìM}´ÃGjt€!_àä<½É¢@7]ªÅÜa-EyìÜk—³Ï—r4Ÿ§jÊ	€ƒ6?W¡«Kb@ÌiO/WÄv“DOw4²ˆÛ l*ÕäxKurTŽ9’du½$¦<�ŒEÌjÄƒ{\yËF•¡÷ØöåDöø¬‹™¢˜èºC¥_ÊÓ¼BšqÄH#ÔËtE›OJ8e¢¡žÇv†ŠÐÐÈ2ô§Ämu}ÔÅTŽ&ú¼ÚäïÌˆñ©|A}¦J7JØ15äfŸÏ{˜	±e£bü_ì½i´¥YU%:×ÞûëOÎ=·�ÛDŸ‘}ß	&Ò		
+Ol�Îç³+,Ê@K©§>¥¬²}¢ØQ¨‰4‚I	$Ù“]d7nÜ¸ý½çžþœ¯ß{½9êßûÁŒ–”ëçÞÿçkÎ¹æB!E_cì áQÝ"wÇ<X¢£9ÇM¬™O{t@Â³QàyS
+^Žñ˜W—ÄK·Ìãu:±É_-âè€ŸmŠ[‡Ü¾Ùv©&!¼‘a`¡lSÉpj�Çhl¡, šêòYu‹‚Ÿ/Ò!ÃYŒ–„Ç0
+�FèPMÁe˜}~¤Œùk,I²î¸41­‚¡V‰Žé
+Xm~ªIW÷ù’A"`i¤ª.Uî×åœaÎ¡4T$(Óì&ÆMY¼ï;»ûñÌ·`~òÿ�kýŸS™™ëÇo�Ï&zÑWOUü¿�b˜æ'Gñ›Fé�`ªzïˆÎ0z#@ž:k`Ijk®k2S[¬ßéZO8¢åÈKcÝLõ�LOç¦Qr>Ã,ëÞ‡JêiI½ýñ»”è&úH?z£@Zu?ëEëLÙûˆ¢h¿Æ•¡žÎÙ™r*d×id�ÌrÖJD©ñNÆÆ?é·AMùT°ÆÜšm;ã¸BÇ”ƒŠ e“›!ó¨R¦_x»zEõs�™š²P–ÚQhü¦µ²ßNü"IyÁþJ¦gÖŽØ¬'‰f{{øŸëQÃ¥T4¦)D¯âÞ-Å®k=RñÿÀµ6ì+±^pîÉõœ Ð·¿åÛ_‰²ãìfmêDãjðÇ–\+8ŸîÇ?ÔþËÞð?ïŽ~ÍpA›j`=E”HÑ÷å%†ŠYìÆ7TT?"Vš½ºœiHÏ¢Ø£jC\æPÍ .ÐQ‡&4ÂYú¡ß¯hŒStÇ¸ÀÐ{üÅ@Ld¤FaÛ ³©XÆÉ‹úëª?Á`]33â–½âQ5Â.Aú4}Nÿe…Nç_ÔŸI9	±¾Ç_®Òå³âe#>çR� 4F1öìIø1!n³P1H:x¸I/9I¿âÒßÝÁC;|Ï*ÿ`é­E::ÆjˆM‹‚�·Zü³™/ÝÓ[.¹Ûù Ï{�à¡! 5ûé‚lÅF9rKAd¯Ÿ^é©³‰iíû¥7¢üA”]Ó�_¿½yôÞ^|Q[:tR    IDATTr?	p’ŸˆÒë,¹šš¹nôzIÝ¢õø0y…½ÝÁ4�ç¦–™zÅÿ -ö†ù¡ÄÔˆ´#à�i¥'s&"S’YÆÜ×1Ñ˜í-óÈ.?°ªÿ…¡›ôâ1¯öù©2]VÂå	ÚûühU”ÿÇ€edMºù x©Cµ�4(‰J‘gTiÈía]ñ´*’wœr¾«Ï9dÍªƒ}³•3¨6%�ÕÅa¥¾Ž&eiÀ{b	iQ `G·9Ü7ËÈxÐlCÎzT_OƒUËt|Éšè™µI9s¯)N2L‡×«bÁÁDÊÃq`*t$Ç�@/´œJ±ïãÀÈì–éˆGµ.ŸKÑ9(~Ô£ò­ÿxï¢x]ˆ—j!÷#n1´Ku�È¡Z„m€÷øK!6»üüºùRK4ÑáG†¼Q¡«fÅÍ 4Â�W	r„‹Z4ˆK8Ö6—šât‡Ï6éfY×ûTóŽäYÈ�TÂ›�K#^u¨Ð$ÃVWJ8	ÚªÐ›J!oWè²Ö?\jzÔp¨R ‰Í§<°ÈñZ…N	—*:n�*86U|*må}c€>/ÈækJz41+OÏÈËÔŽ8¾„µÏ4íe&­ž‚ìå…ÄRE¹/Òÿ}<;ß³=²¼,t£7—�Ïºöƒ{Ãÿ vôæ�è±nºê9f?ç‚{ÓÁŸ�³Seç‹ãì¶\O”Ý¿S4lõÿP›	‚&ŠgƒI€Ì8?œéƒçËqveÑýt/yÀƒìt£ðëDZPÒ‰¤ê|Î·Ø½[ŠáVrT›Rhœ‚ZËM=a!)9èî„Æn¨Q¤+á�k“ÞŠOi&ãÇ§
+ ŸÊšÁ DÓ§êËX:E˜±®ˆù±	3N{ºb‹°b=‘³åˆl¬LX'œ‡ôÆøc=«M-1³™žó+µR´“¢½ßXp>»3üÝaz+ {Ãß'?˜ëƒÚL–ýäf6Î®Ózj7ü©$;�é#¶¼@È\û¾Þø]ZO9ÖCãä’Faz{#xÍû¨æB?ù~IƒÌÔÂü †7Ê—Jrì‰XR¼¥ÏTew-3HÒ­Ü˜�ˆ9�§é•!_r0‘òþ|Š^Ñå‡:¬ÚhL‹›Žˆ_MgBœ¬‰¥?h�·(‡ÊÎYý×¹jÊ¥ó­1·š*Ig‚®µÈóºƒ	In„-Ÿ–ˆ„�Ê,½V#½`þfJÜ¹Ï�öøñ Sì;˜˜/š¡»F|i‚î˜¤—MãUoŽ±ˆIzù�ˆ·:˜ÒHbìZ(Z¨”é°„3ä³.¦z¼2i¥U
+2¨JKQ±¶=›JIŒ²#%™Öó)Û½ô¦@-�³«û[žz¾�\ß	>7UW-kvkþŸJ%ù‰\Ï1l%vKÞG…è�²Ëë©vô£ÿ�=ïY÷ÙbS‰ÝÜLg\,Ùßh�ß•š¦#z2ÌgiOv#Î1Ó@[u«c“½É_Ý7û¸˜°Pš/ù’OÓ€pRôr÷øË5ºâ¼þâù�&ÕT€ù�[Ïè¿¬‰ZUz˜³Ü¾EªùTÔlÅÆ²È4ÄDÆñ!ë€aîêÑŒš	„)‹jÄÃY÷>1ŒFZ².VÄ¤_€RFÖÄäfÆ­¥¢€$*ÐlÆÑEý�štK"ðÍYîVži6aVä�¹'áÔèªë&EoŸïï›mµŸ›Wd#\y#á^	—õù™?¼c¾¦‘�ù¢„÷¸ù•;þñ¾ ®^t÷ÃYÄí-ó¹€ž6ïKxgÈ+¦3‹Ÿ.Ò!Ó%�°}QßS¤ãkü�¸cVÑâ¯t0Å>ØŒyc’îã’K5Ù'†|)FkÄ÷ÍÙ²˜ß7ÏÚTNyhS±BK¶7õãe::â�1ï9¨oëv†¡€£ßâG5’)y²ÏË‚TÏ\CÁ-ÑDŸ/m˜ÏgÖ¤qP[´\	·©œ]s¯KU†ñ¨2æNŸÏÙ¤Vô7–Ôµ!ïÏ[��|d��Ìx[/»T}:Yòf‰N®%óõóÆbpO†ÀXWäˆÁ¿gü›çZ?Xü¢ QªR3yxr®7|o;|[Á~°ŸÜ	ÀSË©ž®¸Ÿr­Úã_ö­‡£üª(_rÄƒ'/ßi¢^úåKûßl*ÅnkôžFðJ®SéFïH,¹)EkœÞ¡9PÔS¢p¢S3ydr²7üÏ­ðm�z¶Ÿ]¨†ÝQ>_±ž´å¥ýø•žÜé¹¡–�@ÆÂ"=0fÉ}âùèÈŒrs¶¶õþ¤lJÒšåF~Ñ¥ ƒ,ç¨"æ†Üó¦‹F�&m²#ŽÚ¥À&‘°n¨ÑNæ¼°î‹œ™1
+¬ç˜�H/dÆo¸÷J‡é-¾õä^ô²iÿÆÙ®<Ëp%uÃüJ[lk¤èkS){	“Gùe¶Üõ¬G»“›¦6UÍ…ÔL6ü?ÛÿÇ‚:3È®*XÏ³Ëî?�Ò[SS‹MIQV±�óù‘žd.fç¨ã{ºå¢Ôås6ª~Ø¥›¡‚½*�ô©”p¼Çù™&ÝY¡%IjhZUF¼«È-S“·Ìs.5jbrl¢š´÷u4à‹>MkŽ%91±¥W ®ŠE�òxÄÙ¬¸*EðÈìÍYSMëæ«n‹ï=@o,ÒœF¶Çßr0‘ óv‘Žù“c,ç«t@ÒoâãèM»ü9&éå5F¼>+¯Þ×«sjÞýÐT"Ã’3�yh“W²j=?È�”­ç=£h Ù”ÖcI~XP2„ŒÙaXíôtÕ:ëªóI~�(¨›žž+ü¿½øÕ¾z.Ö‡#=3üÑÎøgg‹¿fL5ÕÇR½°—ÜX�mÍC¸bÇUúéMŽh�õœ'[™)IJy@Æ¬as'ÂVŽ‘ƒ&#¯Òe—ÌÝ‡å›;f%E7Cï„º3f¹¯/MË…óú«ºÖ!Ma^þÀ)¯Ñ¸¨¿:E7»ädÐ/<NÈºSNÞ¶šÄ}µüá%‡ôŽÞoÊfdØ&a“&2 µólÖ%¦;cž÷¾ÕO¯o`†	ìé±@ ·‹T¿d¾XÁi†q©’ð0GèRMÁ1Ð-~¸ˆÃ/x¤]ª
+¨”G;ü“‚ì2�%ü1Ÿ�°¡P¨Ñ-VŠÎ�~ÜùÂ®X7Ÿ¨Ð•%:˜òÈ"¿ËO°T3ßÐ?v»ü»1÷Züà$Ý–!ìóó
+AÌÛ a£Ö +ÖÌ§æÅEÜÝã¯ÚT—ðÊAcÄËe:	€ 2rŒ$|ƒ¬JÇF¼IP©�
+‘H¹?ÆÚ¼x‘ åÐs¡!Ž„Ü7ÐªËg&éú1ïq¡AW{ä�¹ònELxÔãç
+X,‰)E"c-@’DK¯JX]~bRÜžp? 	uø¬A.áºTOyÐTMúûº¯‘5DsKŸcp…gì.@;YÝ#e‹¬ 7[ÙâwÈµžyÝwæ§>ñï\ëÿœeW�²yÁ°½Öz4ÓK™©–¼¿-Û_«ºÿ¬M!5Õ½ð'Óü4ÃÎÍt”/ùê|³ô‹e÷Ÿ[�¿Mõ|gð;÷_ˆâ\¨xw·ÃŸ[ëýu?úñ¢s�­LÏí…o)Ø_œ*ýL`ß;Ì®eW9òRÎîúþ£I~"1åŠÿÁ¢zÚ­ÔÔbãì&×§z‘A9Ccç¡šµž±¬JÓI¯žTDÜ“Ûùf;Ïöu¿*"ÞO¸+ ¬œ³ŒGU:îQ]#SD¹
+öˆÛŽÈj*êr \GvÖ&Á¸b Äh”�´åz¤+Ek9Ê/ï&/É9èÄß_².vâWÙrMÉÝ²÷7¶zÎ‘¤hk.”Ý¿Ó\ˆÒ;FÙµ¾õƒr3AÈ£ìjG= ìÞÝðÿb”¼JÒÐUç^Ã^ Vv£7úÖ�:Ÿ²°Ä¨Ÿ^ÙËgBƒ½<œÇvò­MT¤ˆ’˜.Ñå>fâT‰¿ày{Ë<\¾�Ê¼ø	gÙ|¸mÎeyK@:(j˜!·[æ¬OÓ51Ù3í¢ðZz¤‘Z(hNêrÎ§ªF¸@�³£ ‹T©‹ã§œU«×2g,XC\ÜÉj0A7Ø—‰_Òˆ.˜¿íð“6j†9�|š�xcZ¼bŸÍVéú}þš€ñù
+�:E¿ñæ½jŒ‹ g
+Aß´7ù{º×Í+[ùš$Q’ã@æKNwÚjïêýnv¼á|­•œvåú^vP³ëFnš ÓI¯g—Åúà8?ªÙwÅXsq”]›q%°¿æ‡ÊÖÙVøãÝlQsQÒP ëF?ÒË;£÷&ùÉnò[ž¯ÛglÑš
+þ¨ê|m7=ØN^Ts¾ÔË—¹¾›Nt11E ì™ó-ólÌý!¯ÆØHsñ†€³Í_¯ÑM]³Z‡©ë‹8òíìob“4å‚®vNåˆ	´(_®9·IŽø“tSI:¶ ƒSŽ«¢‘2M¼rW¸ÚtrÉD<0FsâŠ0Ì@Æ25V_£$Ýa>aQTRmAôØxJC•dïDðPÌaÈ™æÔ�\’cÞð„¨àtELk$}^±)aEÜJxh�{˜q¨¢Pp¨œqØá3.Ul4blç<²Pîðƒ)·-Tktó½¶Ã÷0œüí]­Kæ£9F)z;æk#¬y­FWìñ7vÍÓ‡ègûfwÈ«) \‚Ì0âùŸ©Ò‰¯Õé¦/ÛTpB^×ˆs‘5Æš�6Èûü”„/`3LYúâ¼KFÎ¬3mT7Í-s¾mÎFØ60š@·|Ì˜š˜ya”ï™mS…ÙäÙ(»T{z9ãdÀ­œMŒmŸ’<yÈ.ä#Þ­Ñ±†¸ÜB@ŸŸóvK÷r$	wÀ0 <á ”.¸O&lrV�lÑ¡ï˜ýw®õÙ²DÏ›£ì†fð'³kjîgZÃßIÍc
+®:¯h¨å­Ñ/¦ºÉl7¼�Tý?Ûü��ÔÌ§fZs™�$»†ÙïForäJÝû¤k=¦·Åíô¦…ÊO†Ù-ãøuãôû�ëÌ8¿b:ø}†³Ó“Þ?m A}Gìù"*ªîF|mÊC6íÎ};ñM„<cävÆ2g7g¹§·l*ºä¨ñ°.–&äRÄû‚¬¯4å’·mîP+ú›TSbNÆZ1‹ŒE¦“ÍDºYT+ Öìt'yq w	:ÖS±.­Çêî™'×õ
+î?ìß—æÇµ,hà«§7ÿµ`}+ÌN–œ¯Ùê\/½*ÎO´¢7�Ïv¢wÔ3ûáÿäJìX¢×KogW(êe¦îŠv/ù~ÍAAŽ3´Ó3ƒª
+›ÊÓ0Õ ^ÍÏ¥è¤yÔdðÀl¸Tãâñº6?ò%ÌÈ«\”<š8"¼&Ž”h®ÇO¸T³È˜FV5
+T3@Y”-xM¹´`U÷õ%ÁÀQù’µP3	ÇOê?Ø3OhöžIV�[ÇX�·¥ÜO9P°È<òâÄ!ñ“³âæ óC~v‚n°èÒtÌ­Sâ·›ô	§ˆ“+tuEÌÅh[¨D¼ÁÐ	@m¾ßAá
+ùš²Ü5›5‘vrÀ0?`ËV]4‹Vüý]Ó;tÈ¤ì{rw��óÅ	÷kŽÜvÄÖ\ù#=+)83¥¢õ€g34¥q~01ÅÐ\"Ê4lG­.ø_.Ù÷íD¯uÄ~˜]«MÉUç[áO[b£$Í²“ÜÙÓÑ…¤nÀôµÜÔçÛf¿!—é GÕEu*æ�]ÀðôÔBó¥¿Ò|éÌNÞeFÜP éò­]>»§/p6z(�x?ä~‡Ÿ?—ÿóQëTÎÆ"Û0õu¤ Ë"ÈÙ8dxzkûëÍgßlö—r¥fí�†œïå^Ê²cö
+²ÈaM¦Á0ÒåÜø5µÒµúš:yi5|qMúY=Óïê°ežYÑß<n]f˜$ÙFÂ™—Wèh†Q�fsŒ‡¼š¢[ rŽÈAÑ¦ÂˆÏ†¼7)î(Ñ	Iþ€Ÿ¾\¼»A7Ü ë¶øÓŽ�ŠM	×§CNÒ�ºb’®ñ¹ó™+>Ílñ'‹b"â-ÇÜñº‹‰*�:(~Š CÞ«‰CY‡ò¥	q[‰NVpŠ rŠnµP
+q©.gÅ+<j„Aº¯÷kâP�®ŽxOQ°`—<4«t´LGš'|Ìí™3
+î€/(‹Š1÷r˜%«Y¤ém��j�Wl*.ªzÀ­Í3³©Èl^ÞÜá³StK†°“*2H1èñÅ9{×¥ª�B�n`h†ö©æÑDK¯ÕÅ+æl�Oó™Ì4N”;gŠ8/[+øß¦¾g³è^aýLÉýô0»EÀ&Ê$…½äE‰iÖ3ÚÔ5W\uÁ‘C}¢áýCÉÿð8yE+|‡o=3ÎîÈôdÅý¤1ånò2[t\ëÑZá÷%ÅãôE™žd×VÜOÕý¿Å¯f×)J-¹™›fÉýÌ(½\Tb (ê§7e¦hÉ^Éýd”]§(±D/4SÎ£%ç+ãìÊÝä²¢òÉªÕ2°côÌ@ÁqE>iÅj=3¹§‘úTj™‹e1?äõ;1ZU1Ï”e- ¹1w
+š-"ÊÙ¨g¢¦5ÈÙqD·•ÎeìØ®è—íû”Øä§êÎÃRFÙ5uÿ/¥µãW§ùõžzŽÙï%w2†Sv¿Ø‰_—r9Î�–�/Ú"±åª'W™ÍuÃe@äf^PØNnizŸNÌ‚ ¬›ÉÙD¨›UûaÀéâ¤•i¶;9Ï:;66ô…
+-�´Í'h…¸”"qP+ˆ©	y#f“ƒœ?jC^WTÈ‘d2„/ê�pÊb²¥7*²ÈhlÔ¾Y+ËFGï¤ìÙTð„50‚•²¶HV¤™ Û€ g2†ÄddÒ’ÄŽ9O<9æ–¢@’Ü2p›ŸÎ1N±oÈø©]û‚SÃAM@UÅY†^×œ±6Â³Wéúòú>oN‹Ûž5¿ïàPÄ¹�®ËÚÀ˜¡Ù‰YX¹™\×OT4dŒÁœåDÆ±È­3¶èEzðÊ»›£Ÿ](½g˜¼¨—OVí§S³¥·…¦éË¶-‡žöƒa~º ÎoÇ·	Tb½``ùr½—�u-ÊåìfæðZ3Ü±Q1ú²ž°fÀ"gòŽ…"€@ÏçŸ½L½zÏœqh2 ¥ú��GË­�_¶øŽóç?§2–)ÇÜq¨c¯ ¦DEú¯¡TELWÄñØˆ=óü¬U”Ä.)	À,\Ñ¬T‹íõâ÷qçÞ‰V\t%l5)#SØÖÃŠ’(Ñ3’˜ÈŒu)å²Ùç®M^ÝÚP$€RÓ–Ä\™–†Fl˜o/ZK6‰˜�C~Œ¡G!ïMÉC#nÏˆkúÜ2H·ùK)z“¢a+åN�®ÍiXËü'c¬´ù¡CâŽ‹É[-œã÷ÏÑëSŒWù¯‡|IcÌÈgéµ+ü�Izé�7blÏ‰—¥îñ×bì•éxŸÏYTT(¶ù‰›j>Ã ˜7ˆTÎCM! T}šY3Ÿe°E¥{ ,”CÞSä—ÅÜ.?0ÔR#ÎäC,J-þú”¸5äÝyÊ¦Ò˜÷šr>áÔbOïhf�,‰…–yÄ§¹�é’|—\�ˆx¿kz}^°B´$‹‚È¤Æj¤kQZ7÷iÁ¢B�Ÿõ0Õâ‡=Lwù¹òT
+�ƒ«ª7Ö“5÷óÃôÅ‘öòÉï0‹î§�|·zäÎý+gÑ}/ë‘’ºŽõ4³Sôÿj³û)K´rSU¢“è’F†½œ+–hí$Wœn¼<×záÛFùeÞÇÆÙ�ãü`ÃýQ¦MY‰ýv|WA�©øìEoUbß³îËÍ\šÍôŒ’{çž(½… -µ¾÷O;½	
+™©¹r55s©©hö$E—Rº¶ò—Y¾ÔŠ_Ý×VÃêm¤V] ”1YÄ›ùZILW$µòDÂ2È#n—ÄtÛ,„BbÃFÙF%FÛFÙ£ZŽÄ¥¢MVMíïgµŠŠrv4ËYÿcÏïr…Ó°¶ c‹}%Z¶¼˜›&@©žOôL`�ÉM}œöäfb&cØ™ðþ~œ]K³gØvÕj¢ç45çŸ7Ã7û²`2øoÃ_+ÛO¦z*Ò““þß­ŽÞQ�ý‘.;"ÐáÉV¤²¯)â�KÅó �ùÛ!¯èh™·ùñî>&èhŒgÅ-ºcÎ4³c¾rÊzíÀè¶9ÛãÇÄë:ü¬‹f†á¼<i‹,66þÇ&•E<6¦"ó¡¶]�®}ø"ÛË£±‡²/Gd‘±BùÂëè�¦šŒ¨eÎJ8=~ê°zMhF»ü@Äk>-iŽ8£ÎÓ�¤):‘á,CÇ¥¹«J7NÓ­»üÐ¢¼£¥/ÚT’p nH-¿4!&&‰1,SÝ—yb¬ˆÓºÔjÆÿ«NüúHW2V®ˆËÖ)†„tœŸNM95î¤û…nzÇ~nGÜ[´TdÊ]�Ô•5ãÿM+zSÍù\?}‘-Z9—rãWœûv¢W8bd‰a'›µÈ¸b”h¨¦â¡ƒ\ÿpÎ&äA�ÊDd˜	è™Ý>žKx§)^´k¾|B½yeò�^÷ÿçÖTç©ÒÃŠ^ˆ³)Ò¼KnÏì”Å€˜Çy m™ûˆ[K2ŽŒg‹\Q2ÒAÃZ!2£|Þ=9!q=ÛãgÝ­OÌíäQUTðETuîó“ëIÕ!ç€÷È(;9ÐÍœ!›±:J»Ùa{b¸—û‰ÔXõƒsâ†¢LCã °ÈØ"^M÷XÓ-$D­YGÜde<dp—si²Ë�oëò3
+Å?V£ë[ü5…â!ùÆ˜‡çÌúXòh>ãî>qšÞÿ(¿}	ooˆ;ü˜æà>žX ¿Äÿ½„“	öxº„Uº~ÄË1¶Š¸Ì¡ÆˆÏWé:FÞã'4Â€ç<ôi�‘9h”C¥‘„½m¾T¤ãÓòTÂÙÐlWÄ\ßläkæm*Úä�Í¾Cå!¯Xš¶ÈÞ5OVé˜„š°²vîÖÄxT6¬¼V¤9‚ �"kÄû/”Kˆ]ó\�f›*ˆ�ÚÒÏÌÉ“kú	›Ê
+VÄ½š˜yl“;4»Q)—Àjº_ï$·Œ�ÌŒõëß™ùä«¾[0¿â3ÿëé‘iš~´Énrk¢�ÅÙu–¼°Óû¨6…DˆõB/½Q‰^fÍâ{kîGl¹¾àb«ÿçÚL85÷_âüäDá}Žè J›*³ç§|µ\ò>j¸`ËÕ¢û•ò3ÛQ~¹%wÇÙÕQz[/yIªç“ì
+¥Vwz"Ê£|QÑPŠN¨§gŠï­:_uÄîQwwsôšk¢aõSô©PT›’LÎ`lLU¨KÍL>Ei/¾ºuÝ¯]:ýÞ³?ô÷ûs“ó9Æ:V¤yE¾‚7%„¼_µ%÷I´³úŒsn3ËzšCÃ»Ñ]žp�4²Dw˜Ó¦¼>~û0½‰Ù6ìíGÙÃì¸+·"=˜‚zÚ¢¡%—{é	W=Ï�]°¿ÍlIŠsãŒ³ëM¿O0»ã_jxŸi'×ï¦‹íuã×ä`AIYí(JÆÆ3’ ­Ef¬œ³ª¨Ì¦�áaJÀPm~¼„cEv¨J&.êÞ5�ºÔÐH€MÖ¤8q�ý&áaê2—,ŠLO‹˜óˆÓ˜Sº:Ì8'æ¸j�­IW ±±r$“²¡H•Tg Å–~º(¼¢Dc7ßrí›óeZ”äÂ".‰B—�To­ÓUGÕ+æéÿ0H nóý	·F¼œ¢£‘X\¤·Ø¨îó™cêÖ¶Þc}ÀË!·r$—ò•þ\d¢ª^Ž9iåIÏtgìýÆ¬�ð-ƒ¼‘Cº"©Úí§×2h'~i¤†eAmïÅ?ê $ä¢-5ìªýÌ‚³íŠÞæø-SÁ'úÈH×ÛÙñP7mÑ[_ÕÕ‰'·÷³Ù�¤,v2ÕÒãï‘Ôx
+¼2zCßtŽ§• ¥W l™o�°B�%:a8w¨Ù3�[ìØƒ¿¶ôÕ_š(žÞV.J´Ôæî¨ &†¼×7ÛQôH‚.·¯.È|#dÏ¦Ñ£É=ŒòùHO»¢«(LöüÇß}Õ·ó²î§Ý	÷‹‹vš1W­W¶½àÉeOxV+Ó“†…Eì
+Ø°SÕì)Ò‹¡.×¤¶(ªY«'íË«ª¿ší8¤=‘nå#í[Tji‘t ôùâ ç=*OÉ%‡*)Ú&‹tYÈ{æ3ô$ü?— bmhö.š÷ð4Ã¸höñÄî<Ï8‹×uð`‡ñrƒn(ÓåGÅÏk$“ U¡«Ë85	× ±©j£š¡×áÇ¼bSÍÅtK’|å
+ëñSU13âuf# ÊtJÂcFÏ\\°¦f{ÁjÖäÌeÖU‚ì�w»æB†¡KÀ!6l²ÄIû�GþˆwŒÌ^†D’� Ä¼:ò¾EvA¸EÁ/8q44€Ívù9Ã¢oz'œÉ¡	—ÔGœRŸŸP’ìŽÙìð›ÃŒpÑ‚�²ðä`l8Õ3{yš×¢DÑwzë{ C@ ÐZîsŸ{Ë[ÞrôèQÛ¶Ç)
+7ÜpÃ»ßýî3gÎüí‘¾Z·Ä&CŒ’×JêÇ¦YóÿÜ“+îÇÇÙñÔÔãô¦(»~¢üNG�Óäú€¯žTb§âýõ úQO��ó#JìÚêlfšûóÝð§7ï·Õ3ÌêÂör”][q?âªo‡ºÙŽ_å«¶\¢&? D{”�¨úXÏ†zÞVç3ãDéíQvrªüÚr3c;Ñs¾Ü•7œ¯d¦D/6C
+T¯    IDATÊqAŽSŽ‚÷sq1?kIð3ŸÎŸÿ­Ï|ÄYû—IÕ¶'å1	«Ëg3
+X!ç‡íJÂé“aC=Þ�ôlITšjÜ5ë©q*ªˆ$7•nz‚!ºÙU¾ì0ä »~œ/1[S¶Tj¼‚õ”ƒ^>=L^±òìûëAG­ö’Û{±žš-þV¢§	ùùþï4ÈýäÅŽÎºOðHO¸Ä™)¬'º˜3ïåQ@%ÍYÏSŒræaŠî&2F«@‡ì]Ýâû²1¯‡¼¦‘4Åíº²H�}óÀ´xih €”³¡9jî¥fÔ¢¤¬ DI â~UB Ó–ö…W’ã)K?Á“=ÍˆÈ†/É6R«(¸@³)›•´m‘,‰©�Ž›òhA¸1·¦Äíc“‡œÚTì™ý˜;-½¹Ï÷¢ŸõiªLWVéªk:b¡4Æê.E#’pÎæß’ä.ÊÛ‹t( æ˜×‹4wJýŒ$ÕÎ³Cê†CiÁ_IÜ±±˜…¤” 	¶D¸ß1ëL‰½@v"c¸—ÍUí3žˆr¹ñã�óƒ–h;rGQ¶1ú%€øª¨EY'[ª¨ýY{ÜÉŽ:df-„&ô…O�Ï†GbC’Ø, 	¸�­î˜3í)›ÈAÃBÅ 5Ð):EòjëËÇ�½axùÏ_X~K&Õ‚(¯âÂºù–„,R³*f$00Qd(ÔAb¬¦¬ŸMw%Å—[¯OÙä�ŠB%F#=kÑÀ—£¢0©©nE¯Tbà	–köÆùB?»¶i­äìÇ¦¹—Ãã¦ó@ óÐ8íl®¨V<‘z"”t©•-Æ&HLqZ.<—SQ\—ókŸÊ’„EÜÕ# %Z¨Ñ©�»Ëú«éb&Ç°ˆ#~x›ïaä 'Ø­Ò%œlóÃ€™ÆË7pwˆ5eFæbªLW.Ò[,H8<®>jÞa³F7125ÕiúA�ñçšô€ºüX‰N’o
+è Á2Èzüd'&äâEóÑ¦¸µg¶Ú¦‚GÁAëP‚}.Ò\hì­åled†;yêS% éÍ	8¾àIyÌA}ß,·ÍÊzfžÕ™ ÝÖ—ª�'­nYÔ´Ç�õtRóu­é'Óò°�¶a9vÂÈ4¨@åPW»|ndônVP(ÚäT+ˆf‘ù"mÊNÛ¬oêÇžÉ?dQ?ãt�®Ê enxo‹è;m‘ÿö³èäÁƒïºë®Ïþó—_~ùÿð¿ó�ï|ç;ßùªW½jvvöÙgŸ}Ï{Þó¥/}éäÉ“333ÿ¶ôÈ7P¢íÙ÷�ÓÛ<¹º9~kA]Pr§^øC£u.ÉOŽ¢7.Tý
+/ÿƒ…Š£–S}”�ö7S}D‰½ÌÌdà|½æýMœÝÜ	ß6UzW¦�¹Ö£Œ¢„¿P‰{†k–¼äÚFéí¶hï„?Y´žšþ(Ên³ÅØ’¹™&¯‘U�”è=r¨æÊÝÌL†ùTAuSS`ÈØ@’]”¦!+}ƒMý´ƒšo§ÞÚ~öƒsûù¶Oå£Íd5b‡Ê~d’IU�Šœœ}‹81à¬›û‰3ÞWzÙ	GÄ‚Ã”2«†÷i%ZÚ433ÑÏçÙÚKO¹”•­g5W\Ã“ûñK[éÁ9ÿ‡ 	*1óÖ¤÷YæBlÛQ¨gGF¯š¯OLÙ¢+r6–P™³&PŠÑ¤l��“aìÒŒ„Óâ{9zÍ‡Ø
+h¡DóÍ‡B39TWäÔ2g¢éš=—Š®ˆj`xÎNÚ¹�"‘á‰TPZÍHÇ•UÂ\
+D¿­UIøžTÁUm2-½¡q?¬@T3Î:|6 ©€Š².žœ·EØv¨J°öù¾yzc—‹°áÐd‰Ž�ùÂ+Õâ{‰#,[T‰°“bäR£ež”ä3,gÈ›‹¶G@%Œ¢®gý”E]uººè‘—êù‘ž®Ú+‘nä Ä4mkXJd©qJÖê ?Î°×³\¡ÐÎ'Òüô@W‘2T_û’¬ÈÈ’êuE’jë�ÃnÜÓN†¬Ï½Št.êoFØ‹yÇ¢*ñdÈa�—é˜Fìb¢Å÷
+rêty²]X½_ûÁ/æ�}ˆÍ†œ­)Cæ@C,É¸cÂã²p\!¦lä g§©¼ž®IBÓ>åÇžï}‘žÝÍó‚�ûE¹ Ü°—›bÝy@Ò¨“žhº÷jS–"NLu'Ï'•
+�_�»ïîTŸ.«)¢v6]T}I‘+’¢Üev]ÙaØ3ª9Ð%Á²$Ã®F‹w1Q•®$OÂÍ8Î0š‘7.›¿ði¡HG4bØâr0™`³B×uñðzWÌ[Sô²ãƒ|6Áþ>i£b¥…{8”¢m£æÒl‰idªÇO”è„F¸ÅŸp0	ð*lQ¾.ã¸DG3äˆ÷«t•M~MÖ}j‚DÌáÀ„“òXŸ[QõE’qq€e¯©š³$e“S"¸"Ÿw.Ž„&¤lLØ¨z¢’#)ˆÚÙüÑE«ÚÖñudÏ¬DÜKM©(¦ë*MØ*		óF¾¿¨N­çç›ªâÊó\Ä½	åiÚ Â"U@¶H—œ��¥„•ƒÉ²˜ WÆ±±™­F—O»g>›þÕw¨G~—õ�óÿÚzä+_ùÊ_ýÕ_½ùæ›ÿ¿“$¹ûî»Ÿzê©ßû½ßû·¥GþyáþAvºl=làgz‚¡yi?¹eÂ¹OˆÁ(½vªø›íñ/�/1KÍ�Aò}“…÷eú˜6�nòÒº{·’›qv-@ÚTê…÷Eéí¶:»7úÍÙêÃ·�Ó[øÖãš‹avM`=:J¯÷­'‘è%få¨•½èeMïó¶\Ù¬üé~øö‚ý³Ÿ™‰NzrÆÿx”�LÌÁÔÜOõ’Œô„a¡!«ÖùnvÄ¡x+Of-k9Ýœ»cäÎ…{|�HÂ¤„E’�Ê³}Ø	úy-gq¯&ª€E†Aeuq+]˜wŸåÇ˜ÅÈx%9ˆL@O�K¢P·Ïö²#�ì ÈÙ-¨sš™©œq (2l(›F�¼9ç~C‰Ý(?ê¹‘.(b_ô†ºj“ØÑF–Ï(WPÞÊÝœ³�÷šlóÓ9FšÇC/É»Öô=(Ðü¾yH�­9ž7ŽyKÁkÊ£m½æQC’˜õýIqEÎY‚aC6˜ÉÉrváˆµ46ž Ö� ŒEAB]Ê˜=arˆÔ Ge˜6%™[µò@@hèºÌÚ�°v"Sïk)!¸kÖ	¨‰ù®Ùâü”¸YAèý+ÇÅ/‡¼“¢óv�‡¼nS5ã®¤BGRt"Þti*â­òebÌí54tÄ]	Û¦@@Ì¦OM†)Š a=c_JMm%´‹1ÔE‡r)À¥¶èµ²ÉºÕídÕ¦½ë:@¡ñöùXOõò‚E¤�ªj1Ä ¯WÔîvV;è=º]k“E@[o:TŠ¸SÓcîLÊÉŒ)2qŒ��€Á~Z!ˆ±›q¿JWïòlg^¼Ú"'äÞ”¬må­5ÑÖq†¨.¾oeº,JöóÝìèóùWNY·…ÆM¼ä�dÇ¯ýû‡UM§ûá¹± ÷l¹k‹õ^zÇlñ×·†ÿÉW+íô
+›â�|<§
+3…ÿº2|OÓy˜�%ú@`=1Ho©8_hÇ¯ÎÙñåÖXÏùr‡`ëÑ�è5kùÅEk!5ÖÀŒØãN>ùÂ%™±IRÄ¶ÈöòdJ‰Õ¬íPi×|³F×,óŸ¸˜9&ßñ¨þ¥izMÂ;9iñWtûsüÛóxãÏÅØsÑÜÂW}4OÑï”éXÎq†Qˆ5FÞáé§bìuùá
+]s�ÿxw¤…z�®MÐcä1¶¬ÐbŸ×B¬×éjÞ”®$ñæå­kú›SâF	Y”¦§yËÜ7+n³ImêÇ}š1œi$žGUIjÊê¯¦‚ +¢¼«/ÕÄ�º&ÍN¨dtqgÉö{ºœ±¶HYÄ“ÎƒgÂ%•º—²­¦\”Ä�èõuu[?3%O:dÖóe†¾ÜõÎÆÖH"!›Vk-õ”EqW¯ÅTS…ŽÜÛO�8"sE?3þ^NÿÅøß‰ùøË¾[0¿êóÿÊzä÷¬gçÁ#µà¿ã»ÚñËä´ÿW¹™	œÏ=ßýÀ‘òoê¦ùe‚Æ™™µÄ†%/FÙM¹iºêÌ8½ÝQËŽzªþlÑþV¦çõœ[ûáÛ$…�õmK­Sp­Çñmyž(#$™™¯ß=ßÞ
+ßÁ�“Á¦ùá‚ûÉ4?±;~×Tð»Qv“-—ãü*K®	FÙ5‰^pÕ¹^rS V-ÑºÝVQáHiK$«iO�ô©æ‘ÅÀ‘_äüï_±?hd©Èó©20›rÁ0÷y@]L$l$‰±M(w%;;#Oîë­ºœ! ‘'·¥Gù\Æ�/wù\I­iFºá‹¡¢ñv6±à>™è9%†¶\ï&7+Š‹Öã¹iì¦—×­uA‰f¿ê~b/ü	ÃÊãaÞH™«j¸’'äì®¾X‹Ñ¦~~É:$`†Úy¬Èîšå€fRöø	Ee‚Tð-ü|‚ýž7^Ðcè9ñš1oEØœ/ê™µ¾ç*õs’ÌÈ‹”C¬(0‚ò¾.0£ 3Wt{ùäØÄ’”‚t$tÆ*c.ÊÄ½œƒœ�NÎ®pB
+È»»‘–Jîæ±KAÂQCz;º³g¾uÒz�„éèÄ"GBdÈ	Äà¾Y‹°ícÖ¦ò®ù:Àq†Þ}Ÿ…Âì xkÎÑ:ÿC‰.w1ÅÈ'ÅUÉ‘IjŠ6ó®‹r Ü½R é1ïÎª…‚Üè¦„Q”…Æ�9›²ú±‘ZY‘ª�Ô‰Qp)ÏX•ÕNÎ�¢Ñ^6YSc ›ûT ºÕäµžé-9£åÄñ©"!×Í×Ì‡Ø˜·Z$¦k G¼j�ùù9ñª„»MÝy÷_~ÃU9’Uó‘«ÕÏÌ8âN†a@Ó‘òÐ£ZM:’òŒ-ÞÕ—
+u™È½<�¶„¤˜ ]¹!h|ð¿Ó“o:-)&ëÿ#ï½£=¹ªsÁ½Ï9•ë—ÃÍ·ï½�»Õ­¦Õ
+HHBBcÆ`0ÁÛà·°Ç<ƒÇ�d¿aÛàÁŒaÀƒ&�rl©ÕÝRK�»ïí›ïýåXá„=ÈÏfMXãµæ¿½ê�ªSµjÕZUgõíý�½Yk fÐf]i2ŠÄDð™Az�g[¾¾bÉº_m-5%Æ1áwÕxÀ›ÿÃôZk=~"aÉ>?T=ã…,fh4Ç¨§ª}J-™!c!k™¦¢¡…™ˆ6»tzŽ¿4¥$†îyó‘Q|Y/[2ßèÁI&{p&�õìÒ�a¡§vÀÛ/ÁgÆàå)Ô-Èù8§¨k@†¸uƒîra\€oc¥G§l(ðŠÖ8¸Œ÷à|¶5é€ñpªI�ú0ããŒ�£	µút¾€ól¬C[¬ì“Éws¸ÏÆ|Ÿ.eqkóæ®"˜…†" *\”õW #êXàsÆb.êEuÑÆ\•W–ÔÙ'X+t_	YàYh'4àè,ó»f8å4�Ägò¸Ï�°G«™ß1�1ËZ“ÊAŸÀ”¸^RÝV5˜!umð2,fÂ9³˜lã Fí•åtÄGû}?žfç? Fþ‡]ëÉ•î‡åtîwÆvíGòy�èõ;óoÏøÝ‰_À¥žJÔ.mÊB›‚!/ð¾”÷?éXG{yçÛ6¿P
+ÿK/¹™È«Uð>¯ÌÇ–-ÎÅò�#NÙâtÆû¯åâï&jÛjë	¬©ü/&:ëX�Dê@/~M>óþ©Ü/ö“—8â´2c‰žB„Dšª"?°,¹w9âBW¬Ú+.ÛsŽ4u*�=eUFyE“D€®é{ßžV¯°J™ÏLY£fÉ\¬ë&¥�9£¾½aNÔõ|ÈÂ%¹’Ã9I¦gSRÞ­s=5©©eÉóöñÕtÌKM‰cðV_g	Ø”sAš
+ ÕDª'†ÆéëÜÓƒ]œuËÖ|CN²“_¼¥¥Âe5è©rD*àzMZ6Þ3Ã:=ê3“á­2ÛÑÑØÓö9}gŽ…õ€@¨ ç(spŸë,(¡3Å^ÂlÇ¬Hèmço\1ßQ0œd7_Ô_u0¹øM›É¬X	s�ZzhHt´CÀ& ®TK�Ø¨ÜÊ0–á©…ªoXF4²<÷ôHbt™# &ìAÕ’]‰¨USÊÅ@ƒÖ%5ïa~¯u“µæsÜ³‘ošsS÷PDÔõ°L 6éž:p–�­¡ï@µA�6éhv¯šï.Ó—GðÅä]¨–p_Ïllšu†|YÖsXÍ07àƒmvÅBÛÇª@ÕQ#‹Ötm]%’tŽáRê4d~»w.‹…œ&Fh¢˜R‹%‹Öe¹¡üuY6`:³!­<Ë2Ä�k‡AKmÔE–¿�8EVqÐ
+™Ùc½ÀÁ‚ê™N€ùˆ6—èóYÜ–Å=gÌ‡=¬ÞzçÓ^IßzçS)u¶³_m›î=Œ€e¶3Ä<+òÉ˜ºÓ†‚�¡eµ–g-I¶&Q®!FÄÙ©©öå¾'~þê¬u´&Kke�oÆÆ>Zp¾�’=�ùß6†¿àˆs®õÄ„÷•‚ÿ×‰º,6U_œÏXÏ„Ö16âÞ“šÐPn ö.F×•ìsë„¼­É7ÀÝÿÖã—€!˜”È�.ŠÞ¦>g#Ë‰Z›NŽ‹±á7éñ�âeóú;>shßZÂ}}ZnÀÃ!ì €Vkð€eZ‡»òpÅ|C'{=œ¨àMcø’˜Ö$´²¸{‘>ÂÎ E=	­	v;O©> …‹ô‰çô¨.Ž�°›<sab—¸c„í3$ó8»K¼´ÄÇmÄË+2-ãµe¶ÍÃü>gÎÇ\Ñj]é\ Ccwh>�~]Q‘�¯›§	¨ÀJ	ô*"f`$©µæa¥Âª„ÀKÜ÷™SÁ«¶X¢À=M*Çry.BæÛ,õ™¿–Ž–ñP‘Ut÷¸®‡^ÁZ�©5Ô¾�^ÝœŠ©W×<ÏFÖÌq“g…:e!%¨5V“Ý.Úykréœ¨ý�“�ü—�n·û¡}è¾ûî«ÕjÆüË£�>}ú§‘G~2s�6Ù¡ÚVö>¯ÌDÖûL”Þ,õt1óžµöß–‚)=ë9ßéÞîÙ÷­tÿ,kñíû¥Þ¢MÉPÆ�mÈÏ8?ÈÆw4¿Y>Ú‰Þ”÷?i‰³JÍ%ê2‹Ÿ'
+•žâlCê·—ÜTÍ¼7U{Cï³QüRCa$¯õ¬G]û©vØÖÑÞðW_Z¼=#Î9ül¢·kò=êðZKnÍŠµÐz¢Ÿ^µ&+UÑ[—~I�À¸©²YJJ“Š¨ÅPx˜kšóã|Ïš>e@	ðXºÀ¶XÈVõÉN¹è÷¨^åUE˜’$Ä–$Æ±˜ÌŠ=-�‹@uGóOºÚ¸ÖÄlL�£Ò$ê
+öd¾¶½"c�½m­
+‘‡!-ª3sÖV‡Ë³,°è’lŽ‹ÑMÝ.°’ÇâK²bµK+–]zf3†††¡„Î,»eÁÜ›ƒ]+ô�,îeà0°9¸œÛ²fŽŒ³C®Êpus:ƒÓ–e Š(Ëã†æ’Ò€$ó\I—ªš„ÃzM•-ˆ>C™šLÀ—S™È¼g­÷@êª"¸,‰�ã²Ä #B‡õ–$ns7é XÓuÑ.ŒiÌëÃÜ“P/�f«’ºC˜Ïáó´ÓÁ�ÎÂÎº{†½¦K—¤Ü€Ü&ö¯êú„(¯«N�Žàò«øŒmêzË1dqbÜP4k2—Ð0ÏCM“™°1E0mí8ÈBÞ6`1PC“íè(Ç= héÁ´ÝKL!%'2$INØ-Ds1q¸=Z² Ì°Q|ÃœôqLR?Ç&zf³F8K`†´àáD“Ëã¯ý²ùÜ«º£ìFý–¹à`�Èø¬”c"2˜ÃÄx}c2Œµt’a^ÈÛ]�×Dî1iJ‘	Å|¬Çb“)ÙÇRSU”‰u‘Šöã[†@B0—†7Oy�Fj‘²ö} ªŸ^ ‚uÆ‚­ `«±:�è©Ð~¨Ÿ^Ç0
+¬Ç7¢×0ÐUïK‘º¬+÷ú|-Ò#=ãgXì‰•zºµgú °Œ4 å¢™ô”ùðûÕ6�òa‚@+tèÄ .ppH¦$ÌÃÉ„êx —÷á Mà«7é‡ð¥«ð“uz�@neo©™ÇŠ<ì¯Ó£E¼ÀäØÔ†yrN\õ´ü¼ƒ#9ØUæ“1Éˆº:¹S\³¤–B³Ñ€Uó„€l·tii¿Çjéö‹úžíüæ¶éK21Õ·Û£ÒiÒÉ=ölOç@–w*3„¡h´Ti`z!ËD&	˜“k‰)&dwôpÊîŸJºU¾ÝF:¯gW÷©b¹gj‡ö_
+_ÖZëÎâÎõSÞžßºØ]»>ó‰]dÝœÜkoië dy¯®<ŸqC¨ˆ&Üã]¹û9×*0Ä¹ÔŒþV4ýãðÈ£·þ[�ùÁü»á‘o|ã¿ð…/<—ž|×�ØO)�Lõ¤Í—òÎ½ÊŒXüb½ÿn×z4ç¼7ü%CA”ÜÉ+×;“õ?Ù¾m$ø+‹-µ£×ºÖc6¿«9 ^ð?ÙMn_o}q³ÿÕì;_ÎûŸ â�ÞÓy¶u¼Ÿ¼”³bd(çZ‡KÁÇŒ)»Öã­Þ;öÃùìòÓ8½VêÙõÎÿz_ìÄ¯õÿ«Å–[É-¾õ„Å¬�šª8�wäøÒðŽuYÝâ>Ã0©Z	C½&´ÑÄÔoÑ9ó¼fN8X\ÑO§Ða`åÙÁ $¤,;t¡ âË†P‘áÀl‡|ˆŸ÷ °-wŒªîê¹<f¯v´[´š}Í»ZÚ¬�’#É ÉÊð5--:rwŽ6ë1¤ŽNs8+6]ÓKD™OD†q°%™M¥‹l2dŽ‹…­µÍ²@o„íU0ˆi½eÖ5°\Á›t	÷é’„ È¦øU6²†¢¢àu
+¸ÍÃ06‰$âˆ1¹ÚÛ½3‹ú8Ð r\OÚÃž¶WÕfÆzzÊ{<1aj2Ûj¶£3Íá¯ipö3¼íóAÉ¹�4	Ž²`?m±^ˆ¹ŽÜêó�(²Ù$H0d2û�9|�¾kC ªì…sìW†tio(²m.–SªG´Ô‡ù ·Ðd‡´äBI@pL~ñœù‹Ž^ 3æŠZzÀA ÀŠ>ÚÑ6"µTQ“ª
+Wš*¿Å€×•r�€�Î‡ât]…OÉ¿³Ñ�Â�…‘)@S÷8 ƒöÙDöÔh›NÙè¸Xò±<¤VÍœ`ì&=±aŽ»˜çà&°éÃÏ†Rf`ë×nÒÅñ%óuEi«ì)«Ð3këºžPŠ`Î«'0ã1ÏçMŽ�&IÀ#=b³®Ã|±P´ODzAOdßî°��ýT�0tå¡•è&›ŸsN‡Î÷2öã†C9†‰Åêåð}=¹·Ÿ>_™ªÅ6“«9ö,¶šuîêÊ¹Xíæ(r•)GzÎã5Oœñøæ˜ý )“™ò¾²�� "ŽQûYõY‡Ùøê+&´±H/À�`EA×†Ò¾®žƒ�¶à°€L�î]ƒo ðM¸·×°½C'<˜Ú¿á@¹€Wä8¤µˆhIC<Ç_iaðÜJ÷:=¸¬Î1pm(ÙDÏôm´<Ìú0å°�ƒŽÜFS<ÊeqºÈN=Ýž�Ò9,.ð€ƒ•gÅ	±Aï
+ïeR
+<k"EÞ´û´@ù\gòM}–ÀCV°V#S±YÏFé¢'X§Èf€�é~±œç
+‘ÉÙ©“™{ìÃ¼|m­º=é/Û®ÉôŸ6ÌÉíÁFÙå±ÉzL*2‰	¦œ³ˆ ÖÌS‹ñ¾eÕÀÈ¸yç~iJ6Ûø§ÎÎ¿ðÈ î½÷Þ«®ºê?F>ò+c7mv?Ä0îÉ½¡8ãŠ“Žu,’Ww’[,Öam�Ü×nÿ’Ö£‘¼Ú�?�û3öa×:,ÕNC fåÂ¢ŸwíG‡É‹´aØ÷œ¾hÛ�o6ït¬c @…ü_lÔ?Î°ßKo¬‡,qÁ±žLåÞAòÏ><L¯��¼­Ó~a”Ü”¨çi“íÈ+3Ö	›-%zN™¼WšLÑùaO>ßÂvWm?ø…'íó=Öe¨ÖeÎF‹ôÌ@Â�ƒ[áÞYõ8 /ã¾�õ`4‚�±]­º˜ ]ÒâëöÈ€�ç(‰Û(	% Œú:?0IÈœŒ¨uaU­WùDÈ;u��Âa‰Ëk5–OÉ8È|>Td§FÄ¤Ëb°*y–}“èÝm]ÕÔ€€ QÇÇ|ßÔ|,*�
+¢>-nÒ]%¼ÁƒQKçÍÇ·à›êôH•½°KçFðÐ=1Â®Jh h8e•çåR‰Í`–+›õ›²pËg‰&ÁQ`ÀWZr<ÖWäjâ=c `‹{b ¶µUè1€ëäfzÙ˜ûX-¹*äµØ²Ö©FºÔ½{-ºeÄ}È�·šô™2Ä=Þ¶°Û’3UBÂF34¨@P†Y+ê¢‚¡‡#1Õ#XiÓ‘2ÞÀ”Ãš€ hÞÃ‰ÍO³—jPCÚäà @Ž�! 0Ã‹ê)Æ,ô9ˆ€ù†(¦TB”aùØ$9n·ô d¡Ë$½©ÈAÇa¨	@ÀdM¥YH" H)M!*nú{A    IDATólJL‘‰¨O`|Ì0.ŠŽéú˜™7ßUÔãà8ÇÀêÐÓÜ5„eIí2^Û¤Ç+x}†UÏë/8X�ã/˜¡ƒîº9æB5ËÆÆáÀ3Ìx�€9¬%°]—{âRbŠ†„!ÉÊ‹…ÔKî×S×~¨=|K+=”·�†ö‡òº�¼¬à~£¿"oßº_­õßÍ0Î{Ëk´É¶Ò2Ð¡uÂæ5{éUë˜¦Pš‘Œ}�`k«ƒwìû‡j_jò‰ñ50Ÿõ<¾ÜU;|¾á‹SñÍ«j©È¦3<éj§n.ÙìEýÕ�âÕçÕ·	´�¸Œ×ÕèÁ.œhÂÑøÅœL .¡c ‡W¤Ðt \ƒû|Ø’ƒË:’šäãÔ�–2¸sH"… gùÏ^Òß.â¡5úÖ{e‰�žU_a/Ðj™íÜ0OÍðƒ¡huÞByQ^ã;2¼s&]á»Š¢¶!ynŠ2Ü^S‹³Vu`<�Ô7ªfžžæWh MF‘ä(RŠÇ-µ*EB=!sBÑ¼˜$>“v‘¯èÓÛ¬-¾XªñK²²J†‰€×Ï&ý*Ÿ›¾8òÛÝáS™‹÷UìžÃúz×‡Oÿãogôz&©ÑÑi~�!’ $%í”† P`ù5}~\lõØÐç‹«É®¼¾3	yäEÿVg~èî7<r×®]­Vë?ø_h~«èL›ŒÃ¹¿™¼´>øMŽm_œsÅ)ßzr³öçƒäjFoŽÕvGœí'ˆxªvä•ˆÃ¬÷i[œîÞšñ?Õì¿ÃPF°U©§\û!Ç~|8|]à|g�Ü’ÿÔµiG¿tiýÁbîí–Ã/Òë{ñ+Úƒÿl‰ó®u”³ß¾³ö;ýèç»ñ«bµÍ³žÈYO hMÅXO¼Ï#¨@Ì÷å¡Ð:Ò�{~ñˆ]J¯üâa_ÌâÙãM½²¤�U„•ÃrDµgÕ'Ù5¸ƒ®Õ"Eèa¡IÏÚè•Øîâ¥	1�a×¬ÆFBÓÖÉ†Jð¶ÎÕôzÕ’.¦&ÔÄw{QÓ4c“ñ�•EÄÑÔÔ( L,� Ÿ/ÕT¤ ZfQfYÐ4Í·ltwˆkkJrà’âç¦ 4áØ%óM	ƒ&G`³ìÍd‡°¢(–Ð#0níÓ¥qvu�ž™æ×ÅÔ‘ÔË³ñ“ò°�•”’× �šPƒIŒÕ5Ý®¶=Þª)“·ž 	è²a Î#è²sØCá3Þ–û<¾”å±Ã†\JvL¬L6ä5Mî˜ÿé¾Ü^¶�åÞ’}j>º:5cyÞ€�oØ¬‘˜""ià-SëÓ6kÆG­~b �…8•gUb¯` ,ÓW;ô”„7ÄÉ*{w°:¤† «KÏ:˜EÀ†¹°bsÄÕÕù"îYÙÅ`HIfH�9–W¤=ælèZY8½Þ×¢o\ŽÌgýžé;H]Í}0¤‚è0D°À�<WlÚ€€MóÌ†9“êÒÅš9ë@¹Œ×æñ@�î­Ñý! ñÊ,jH4¤kæHŽØP\Ô�å˜^ßÉÀ.°ICzE]` „ ±	5Y}5Ú”{  ç~�†ÆÏZ§Jö3¡ýèDö¶8ÕMnnôßØ�‡Œ	mñÃA5ø Ø¬î;÷6ï´Ø¦!o£ÿûï3�ô:ÿï&�øßà¬f±U‹­§z¶6|«Í:¡û� › ì<Q±�çìÃžxVÑSckÑ‹|Þá[�ÃÚ 0!¶"`/[Ð÷_‚¿eèàÂ9ú?ÆØ­mxZ€?„ùV (;p	¾˜Çðý1xY.K¡Y§{s¸ ç9ø†>ŽÌðÀ{MŽgq0°ÌÎ²7Xê™þvqG‘åó¸5Ã �;À†Ìx¬Ï1­òiUŠö„ è¨ÊˆÕêjQÀ�Fù–K²°ÈB9i/�°QÀ¨léš9å¡¯É&0£bÄcŽÃ’�.lwMVÔB†>ïÙ¶˜Ü�t«ÍºU>žÐ�VÒp›]½q³¶9³ð»“ÁÁîØÖ¡Ñ85hÈÊ|¿ÅÔ„Ýª²+–h0>Zeînš#.†R†TåÛ\Œ]V#°¶xìþ½9üo~ó›·Þzk¡P@Äååå=õÁ~prrÒó¼Ûn»maaá'ÇÈOúÓïÿû¿üå/Ÿ;wnáGì§#9Èõþ#&žõlÞ~2g?4–{k/½9V3DV¢çzÉ­ë�uÄækCy…À¦c=ãXOü¿)f?JnmEoâ¬¾Ôü~1|¿Ô³ÅÜ;Ç+·÷‡o"²ûñ+ûÉ‚5]_Jµ£èT°f½ý	†ýÀùNÆù^Öýòhéå½èv”ž•zn�Üj‹s¡ó›¯åµ®õ”o?ìˆ“yç{½äe¢‘î¬»8¼cÔýá#¯¹V5iõW.vä^C^['.æ‹¸;g=Sâ(‚X1O0°7Ì3­ Ç-È%¤Zt&ƒ[ ëz-6±",²é¦ÙŒI2T8eÇŠxžw|,d¬Mew´ÅQŸ�Ë.fˆ#i²6u»Eg9ê®ÚFã2y>·h`úŽ´Ué¹³’˜¤tU­MªO+t‹6
+ŠÛøÏÆTÁkôH+5º{�¾Ñ�Se|A��,âÞ§õøD°iDƒqvíˆð¤‹r%6vS?×GBçYÖAê"ëÈË–Ò	 �{bXÑdµÒ+4@†7ˆ %w�›°è|Äê�ÙQbF†º”µŸ¸Øÿ $à]=êYO�Ù›†ì@œÀº‹õX_g5áÀè«X(4$m·TqÝ<“@SQ´ ïÕ�Ôéé2^£!r âãI­j-zVSšÇí:�Æ€ê€œO¡ã`¡N÷×õr«\#€0E6i#Œ 2ò¶iÄÔèhœ¶³õ@R:0ƒ¡	#jD\†)ÉÄÀ#ÉWl¤¢`dŸ:CƒL�æ´L@:¶¨¿à¤„Ž€P Ÿ@­„/˜`wŒ³ÛX†’&ö`¬ˆWnÐ÷¸{Ø»*ìrÑ‚>2Î^œÁ-1#è”ÙÖž‰.Ë|=&­3â|Á~ÊeýªsØPhÀÚUø�ŽÜ“±¿/õÄ|çãkýßwÄ¢àµÅÞ;~¶§¶1VçØé'· 	‡¯¬öþWG\(ñ­ã“Fÿ½¡õ¬+úéõ‰žÄÅDí˜._«}¾óƒvzeÆ½Óg*þ_9bwù–Nz¹Ícµm%ú9†ä°Èfr>Õï6Ìy†) µõ@‘D`LìÇ?™f·ðêVÏ™¿�[,(tá|žŸÇC¢IxÕ}z^–Çý}8×†'på–Çñ•ì,îéÐ
+	ñ4¾~H‹Df»x‰9*DÝœ´Ñõ˜ZÔ' è¼:–aa†ð%©Sã×õBG'3N-1AJÆcI]–ë¬ŒHMˆ‘Øxl>)ÛÈ;Ê Seœ¶§f.°	KUœÇ4QM†c¼’p!m‡Œexƒ,§™š^«ðL[Ëw91aÔç{ïdé×ÛÝ£¶YÛþÛçozowãÁJEsMl>µl°šš�…Z’¨²C5sbRä4aÕ>¯È®Ëi
+š²óÃW®úÿ›fg0ÜpÃïyÏ{þoãŸýìgßõ®w}àxøá‡‰èå/¹Öú'Œµ9rä�o|ãÿS¡óÓ¸8ÿÂ[.º_è§7ûÖ�ûåT^™¨Ý¶8¯ô¤c$?`¹¾ý@ª.‹Õ®À~ˆa×¶ŽsÖìG¯qí‡†ÉÏ HCáŠcÊT‚j•5�˜Øâ©ÍÎ'ö'ª/]­}Õâ+¹àÏûÑ÷\ïl]žÊËlq’óÕF÷Ïm~–€ÊyöÝQzK,øö}ˆÊâ (JoÔ¦ÐM_(X[š¢4�ÃÚ±)x¼fÈJMŽ¡ZHûcbdI-lµ«gÓ«È¶ÖÌ‰îh¨Ù¦g}˜À¥­üÖ˜RC7è‰iv"*2	E¦ÈÃKêäVk‡ÃÚ™e£Ä�€Èõc{í} TWÎˆÕ[J…Ž�¶ã!o™î„Åº:ì›ž‹~×lŒŠÑÈ€£I­ÓÃcìz jÑùÖˆ"^~ÚüÙ,¾%Ä‘Kæëâ·7èáq¼CB×‡Ii�e·r°VÌ·w‹7€–éj�>f´8’Ë¢ºøˆ½ÞWcŠXD*`Üg�¢û­Kƒ7äDM‘Ï@'Æ·Y\ñ¾0ßÿµ’}A› 5y‡7|ñ€Å°©Ý›éöÙàïúòš®œ©¸÷äþÄdJÎýíô:�¯qì#Æµäù†°âœèË­ã+2ãÎÙzº«ê<u:šò1×6KæZô,gœš×ß!P½,ìÚ¤û8x	l�y<�ÇË†´6Ê.‹(Z0_¬âM6Ñ4gÆù¾¦^]¥o—ðZÇ–‹nLqÀ¼¦ÙÈaµarljHí-–½*¹@K“hõÌFõ'‹¬Ô1½-JèfpNSâHŽ‹¾ú¢þ’€L•]¿nîc·n˜Bœ[¥¯{0�À2¸KÃ°A{0àÌ�ÜêÃ„@·AG&ØMms)‚ÕqvËr3Ð"ÃSŽ‰"§§-—¡Ë""LÉuØ@àÐá.?³½²ä<jóKÊŒ²	,OS¦ÚM¯¯øŸè'·Ù|�À•¦Â öíû7‡oÿw $·÷åþŠÿ	¥'=û¡Ar›ï|ÀJäåRoñ�»y@›Rª§,¾.MA[|¥ßòeE_œé¤p#ÉYS«ãb¬¥c–@/¡–‹å!mÌÓÇgñ-¢º«Ïáù¸À!hÁÑ<Ï‡iƒiü…Eú|	_PÂ}ô(·€—	°Oš?Ý‚¿lc¦EÏd`«�´ÌgkúbÎï·ÖuË† †vŸÇØÏM«d€¶$²4tk\ë*)°LBÔ§ö„ðÆuŽn$3¼íòõ¦ÜÉÀx¼³�ÒÁÌ·–‡orY¿®¼�1E¬`­ÖÓ±>uçœæP�‡âÂZ²»GÍ
+/"GÝÕ<`�sP×tŸŸqm5�êS{\øãŽ:Oo$û3¼ï°ZKÎz| 0:—DÃËÑí.KkJfX ‰Š¢·©¼ªè7TÎc8á}e=zeKËQ+€ßIò?N¬õ‰ÿ­ÎüÊûþtäÈ‘+¯¼riiirròŸBµ‡]sÍ5ùÈG `eeejjê®»îºå–[~ù¦7½iÿþýO?ýôææfíGì§5%	¦ŸÞb±õDí¼ØüF+zC.ø¸1‘³Þ{‚|®s""F#ÄÈPVªÝˆýHôÜïzöýCy(p¿éÛ÷ð ,¥'”žôœ»8[OÒkwÌÝ˜>Úí½©œ};Ãþ0~…%N%òêÅõ{Ñ«
+ù¿GLÝúöÝŒ5_“z:Uû9Ûà¬ÁY�È“j;âÀ³ï‹õŽŒýPOÎÖ‰@\$À~A¡uNïÊÜ·‡&ÄlO‡ü2^Ç,ÙPlÑÙ5Sjsp8!ÌI2³d@Ûhg`[L	èQMCª!E0%¶³­±­*SV	 ä# `€ÒNëP_ói;dâDrŽƒ°ÑîÐ¦ÏXB[*XÔ‡%G— 7Ì3š”@Ë†ÒÐ4Öè‘!,z0n@2øê6ß¤'x Rj†°}•¾Q£{:pº§l,!àš¹{ŒÝ¶ h™ÎÞà‘˜j¬®W:zØ×>e¹ê¨ñ†fEý9Å]JÁzôóy±a±N¤I®$‘W™Q5¦&Ÿ·ç�ïvÒk»éÁ�<À±›ãíTo¨IŸ·ëñÛGÆ	¸4£kvåì@ÍÕvEX°.ÕLM±œh@CîŒIÏG»r¬è �a£Kó’Ú)¥]�ªm:áâ8/ã“ø³}:+©¿@Ÿj˜K
+¢2^C]QbCnCŸ�¡1Š·)è#°,Ë*H  $, åe±À¶(’Y,!*Ž–�¶@K '0Óüò<+mèE=Šãìù–Rè(H7tk@­¶Ypk÷iÍÅ±MópžiÑ“ü¹2l.T-ÈUðEV(�˜D€Eó¥q|á¦9¾Ý®º0S¿i.�Ð`êÈdl6´‘iÂÈx)9o„â,ÇÔ'¥™ÌYç”)åA†½XÏI]ÑT òÇ2ï=ÙùÏzRðåT�ü�e½/	¾±­º£\üP/~ÕHþõ�xV›‘ZüêDà¬ J�Yâ�HäóR½5Ñ36¿äY�r„ö�0+.HÊ	ì×’k:Ú�Œ�hÀ‡=&?è¢ÇQ¤Ô«²í.fé3×ð¿ã{ÏÒŸÍ±_Õ0ìÀSU¼MC_Á°Oàâ6ökKôÌ�¤÷.˜;t®€{môû´±ƒýößÂÁÊáÎ;?)¶lês¶%€Ù¶p,´ÊldN2`zf³j/9vL/äj`Ô”e ‡AJPýóçäÅQçøzr�!]L«ÉŽÈPF¬2H¦,§“ÞZ´O(rBÆ«ÎƒUçÄf:òD€ÛQ[4ñ¶Ü•åñVgh ºF…b¾(m�ú,œ²ÀF§§¦bCy1ô0{Fž¬ÚgWã} p.]]N'BÑ €ž*OŠ±vz}ÑZJÉ
+XP±OW­õué„Ltt�€4áÂðç<ÞÜîVäÄ&óã:âÿ®õZ“$9~üøM7ÝôÜáÄÄÄÎ�;>üÆZÞýîwïÛ·¯R©”Ä~J12ï~%°²ø’`µÐ:[þ|©u§m�"@a‹ÓŸ/q¬§lq*°ïñ�o±\æ¿¬´>/X½Ó§%Î…Î3ágRµ'–Wp¶‘ª½ Úñ6 ¸m__{s.ÿ=¥§kæ2øŸu�{9[œrïYÝü”°N@/y¥ç~Ç¶Ž–³owíG]û±Œ{§ï}�a§�ÿ£¥Îßôâ×%zÌµž*ØÇóÞ'å"S²Ø06%†I`=ìðÎ¥Á›KV'/.F&¶ÐTùt‰ÍäØ„ù„Z,(øXŽa£mVšôø�ê5sN CgI?ÅÀ"0;ÜMÓ˜úŠKúÑº‚”â¶i§Ä\}ê\TO5ï˜öŒUSÀ½lÃœÖ/«sm³€]Ú,à®VBÆ´²¬Î§Ð‰¡Û6K!nI Â¬Î.ñ"¶AßwqÌ�RÍZ!n—Ð™e¿Ü€Ã%|‘ra´Kç$´êŒ±k,ôÎoÎáLŸ6â¡ï¢Ö Æ‰Œ™qZY"B øzÀWS“m¤Û¶æÞeˆeÅ¦Ë;ýôÐˆ÷Ï:i³v;½jcøú’ûµºÊ¸üb¢',ÖU¦ ÉbU½ï-ÖŽ†|™AÚWãoY¬ï°š�:1å¶
+§�Õ¦, ØPž+—9	¥ëúÂ>{‡�ãUv�Å&�ÊÁžˆ–	"ÐyQ€ã’*Þ"¡w�ø‹ÖÎ™�Ø¬‚.k‘>?Êwp»�Ù ¦Øóú>Ö�Í#JO«û×ôŠÀt¨¶)³1ub“¸( Ä'7õrÇ´=,µÌÂ›É,‡sì&M¨}ž>\Áƒ5z ÄÉˆVÆØ�“øs>Îú0ƒ <˜4 X·–ñJ
+=:;„Uénþë¹ëÒª²ÏU?˜þ€š©q` ó.K&5! øâ�e±©'l>¿šìlÉ�›éne*.¿˜÷¾äŠ§\ëè yñÞü»
+™?ÊøŸì{Ñ¤šUz,M¯X\û¶#ÎãWäüO2ï	øB,÷õÓë�)i3*ÕNÏz\›‚!Ûb›®u1á¬a(cñ¥ÍtW_59!ßÌò¤d-¹¬æ±aMŽ^)~·hµJ"ÉàxÍÌ·ÌÅ=ìféqõ®¶7èÈ8ülnÞ o¯Â=Sðs9Ø-¡Ó¤g‹xµÀìKÅ÷¨Ì±7m˜Rrp2,“‰¨9Â+må-«¥ G—ÍýŽ,ÐZItû&YUjNXå�×Ä¦ìX`Râj CŸ¯û}¦=¾f!a{b=‘åæùù;â˜½X—S’²qRšL¬'ûÚª8�ÔîõdŸÇhS©·,LËîƒ&!w1)%&íÕ¡žL�?a·¦1ìë\ÀÄ¡/ö¸¬n¡¨²ý‘Ïò˜]�=Ê€mÊœ2C“µæ%y‘®öuZµÏÔÌš¬xÌYW+R�jû à‹Ñš¬²óÈ�‘ôoÝþ-Öh4´Ö•JåŸG*•Êæææ¿ê&âŸ÷^ò’—<üðÃ—]vÙÍNà~­½Îâó›ÑKÎwúÉ¡ux©ó—“Ù·yƒô¦jö?Åéu‰¼1Nõ¶To3&¿T;:‘SªöiSòÜ{Sù¼8ºvë¶_?sö«ÿÓ–½Ç‡–×¿–õ>'Í.Û::Œ¶J`…ao8H87›­·—²ÿ‹’3�ûµõÆw
+áŸ"ÆQü3åÒG£áX"0Fé5RÏ&jÿüúÉ™âÏt‡¿ž±Žxö¹/UvNL�\®Ý¯qÖ¤7\èÿ†ƒÆcÃ¶*x,ã ' ¬htT‰�(±é¦YÀ,N÷hI@¶IGdêô`_`¶GÍ±I�qüÑhiçÌ9¨GØxLI—.¢Ù&À€
+^žá	3ù¶Ö…mSoÒ£ãì%Ms4ÄmÛmq8~t†¿LƒŽ�ðqtÃÜk@¥T+â!üktoˆÛÊ¸ÿ	ù—î(â5!ÎÔÌ#2�ÍÝ“@í)ó;#p«¤þs==bZ÷p¢„ñÈGÊä±D --êLˆÄf-‹­Lp„ŒXé©	“·Nûà¬öÿ h³øJ¢·ÕÌ@^A �Í:ž¸¸½ºbu8kkòëD+yAF¬¦&«�£¼sg'y¥Ãº‡¢§æñû�œåY|¹.çŠ¼Û7ùº"ŽÊC;à[—d·ÀF-$®­�ÂªÅ˜Ö2¸}‹,öi)¢•\(âÕúTw+¤	È4ét_ÔÐkl p)	Èj�}ZR0ÊÀšb7ºÈ4€+6í¢Móp€³]hÒ“#ì†›X5ONð+šºÃšKyrÑ|yš½j¯¯Ñ“e¸±CójÅ|/†Õ5º?¦•šš!ì�/Ó�U¼¥IÇVéGàgÆÙ‹RèÛJJÙ«°6vj×›�ÛóÆ»þ¹û[û^ßSÝV²à®}„ 0ËÛ)…¹Ë—q^›‚6Å½ù?LÔ~eJ®u´¿¤½¦~@©*gØëôÿs7yiÎýJ%ÿf¥¶rVWz¦’«àKËõkùî·ªÙw´¿“q¾‡;ÖÚTå²Þç¢ôÆXíMõ†ÃÀþ!‘—ª�;s0Ho”fLš‚$»—N­¦!A@M]æ×Ì“%Ü[ås3$0
+¢I|­‡ÕÍËøÛàm¼}ð¾3ðArE¸"‹ÛRjÐº^òp\ƒc7˜«L?`Á¬UµXý”z²‚×HˆFðcˆÊlkOc�«ÌhBŸ­!ªŽšØß�ÌAHMÁc�MdÈê˜n–e=¾0TÛÍúà­’¤lŽw&]¹Ïãkš‚Ùà›‚­ŸîÏs’Är,$ M¢•\›�(Z«.Ë)RÌc3Ãq¸&K à"\û�ZEyè‹��~ý\K¯eÙˆÇWj W‡¯±�yL2ÐU[nõXW“3ë�¬}2ròl2%•cãŠ°ÄFëéhD²ÊWò$8JMÙÓ_õÿ&îyü†ÅÅÿÝí_0òàÁƒï~÷»{ì±ýû÷[–õÏão{ÛÛ~1²ÖûŽýAz]Àçyˆi;yÑîñl­ù·ˆQÞÿø ~¥ï~À–zZËl9óW©¼‚aÛPF›QÎjËõ»3Î×¢äÅÏžþ³é‘ëZíw:ú°%N;âdàEég¥¦ûÑvï½RÞÉ°?T»ç.¢€p0ˆ^µsçíõÕBÌ»îcƒÁ¶ 8ðy¥§†é�ÿoDrkÎÿ+"Ï'ñìjç³�ux(ŸÿÔb<“ûO›ý?´ùºÀVÀ’PÌð…4˜be—ñ]M	@wÍCË€TV¬SÃ@Á¢³|á}±g®X¡/í…?Îà¤YÂCÚm³1$ÏA¿gjz³âyMÝó™úh_”\,wéüóìb#©¶é™½âWVô±<p$1,…Ö†9¾L_ØÅ~¯G¨åp³-:Þ $ƒÛ·°×5èÈQóŽ*ÜÂÖ6ëÒ	�•q|ELknI¨–ÅËšô$G7‡Û|ïÓ‚ãj„oi˜Í–.–Ù†˜�Ød5�6%É®ŠiŸ‘Åâ¾ç¨KÎƒµø†Š{?ƒÄ€ÓLn­x_²ØúPí­'¶µ«/÷r”YëQ©',ÖµùBÑQšB‹ùšr©ÊëKþÇÉ-‰Þšsÿ±ßáQn#~qJ¼ Ö}–L²Ü	y½.Ë£ËÀªšåshv×èÉ,î‰a3…N¯Ò¥ÝÀö<ôa²ÏÔÌ}6”ëp4¦Õ1öâ6�èf`FQ”aÕ†9»…¬éÕ '%´[æR‡ž�`·.˜;‹xµsMzLAŽýrŸ.)Š,XeÏë˜¥æs¼¾Š7Yè�ÕŸšf¯nÑã>LÇ°<�¯"*m&]ÐÅ>Â¥møëóæsäm,7èÄ}÷
+þ>�QL¬¥õþ}ÕúgrõKáòL¥á?óÑÝt¯ø“g7¿^	ÄBGn'dYqÖ�×“;‰DjJkµû¿Wpî3*=:?´ø…D^‘èÊ”G‚OÕÛŸÖäsÖèô·½n®rÀæ�5;òœ{Æ‹·Xqr#g5Á6‰[ëÎÖ´©p[œñì{yE¬ D½ôE.¿ØÀR    IDATÜ‘±Ž	l 3!çyk0T“)Ù1E£b­›nQÐçh5õz†UäÊ—Ì—-*îÇ @‡Ž[�¹ ½þgA<§®@ (âî:6ä	È€±Ðö™NÈ]Mã,ìá@óš9Ÿg3Y�×0ÓVÆM‰uõhlhÔ^XN'
+Ü hlhB£ŠH:jfTH�/ðØd Ê[b=Â1 ‡µ{jºì>Ø—ûjÜE*Û'j®&­,·²ÖüZ²u‹w_¢g(E~OMF«öÒ¥d¬Èˆô“¯½òÀž8þºC‘±G…ñX—HÄÆeH0Ï[’| LŒocÒÑùª}®'÷ô�çb¯jÕúº²®6gl¨³mÓ›s7-¶æêÈÝ†Ä�é‡¿þÿ# ûc_|Õƒ?9
+”J%Îù�fkµZµZý	c­_ùÊW¦§§Oœ8ñ÷ÿ÷Ÿùû)å‘†¼¾<�q¾ËXß³óì‡²öáv÷"µ—a¬õh?¹=I¯|�a4ÿk œao�Ü>ˆïhG¯Mä�‚ÿ±D]^,¼o4ÿÚ(z~,¯ÎdÐ¦â»_í~¾7xã@à(=�>jLa¿"~Að‹¾ÿ˜ë^ÌøŸ´Ÿû¤é¡$a¶³Ž�•_ _Æ/Ä¯HÔþDí+ù™ê™Jö·&3ï�å¡Ä”‹Á(o?Ñ‘Û9vçl Â2‘”ÖÍÙ�h-Ï¦=,µÌrær°+‹û²¸çýé4þß�ï9eÞŸPû¬ù˜‹á†9¹Aw`ßÔ}VÜ0õtÊÁÒDOéw/ë§=¬¸q÷ÃÑ±.]ÚÊoì›~·sp:taYu
+xewá:v	÷WðÆ>¯ÏVØµVRhöh>¦Õ,ì·0ÏÀJ ÆÁ³ 0„ÅÎF°äÃô¾•�åá¤£5z|Ù|¥€{,Û˜IH—Y;Ô4 mUêiÆÑ4Íò¨àÍN«ûãY˜N©MˆHD| g#5½%ÿË±Ü×J^�µïé§‡ëéŒûM‹µóÎ ÀY+ëü_Ü½g°&Wu.¼ÖÞ»s¿ùä09ç MR–@Y $„$ƒ �Á�¯6ÆñƒÁ€E’�%ŒQ $¡Jhf$¤É9�™sæäsÞóæÎ½÷º?ÆuoÝ*»æú³ùVõŸ®ÝÕûGw­§Ö^Ïó¬g¼dC->Wc:?m‹=�îç9+�5?ÓH6°zøfÃ	X�¹-VÙ“É�Ž±ÎâNóI& 0P!¥U5³Ä°šÊ› ­í¸ÞÁ®j6ôŽÑOp /„±1ú™C:KxN Ã¸¡§ÔÖQzp†v›è´`h\ý:�ÖŽôo8Z.æ0—åRðÛØ¦Â.93ÿˆ Íàâ,.7ÀI éÁé.¶êPúÐ„zÝƒÓt °ô�ªèÆ«|÷à¤‹shŒ~ÀHÓ6ôÐ }7†rVtÁ5SôJWµãEMÈµü3ÇäƒeÙš’Ç2Œv<Á¬ú‰Þ¼=fóÑÙLW¿²ß?è Á‡$pEÂÖv*Ð,>¡‹¡¢õ@ ûóúË?Yt¾Ä°•ÈyD¶.ö§ª˜ÑŸ‚ë,}[WæÏ9[ãÇ÷tÌ4¾Úô>˜±ïsíû½à¹b5JÎ²�íYûûšÐø)]ÛÍù 7Í§¥ê°¬GÒù€à]ÙÛÉ†¢ù�ŸH©¤³‘P•�cä)™çV#�££èg4Õ„@ó�üfYŽ�©'4;§é…<.ïÇ·•ðÜ¸²	Gl—GT/àR¦…Å&�…4ÍQ(�-5é )1‘Ž-²†èy�¡š-æ¶ÔT ,eïÐ°•' ~çÞ’VctßáÃ&/gÄ`Ÿý`B†¯Ü3ºgEBR6#N+b¯xé¬3cb•eZ¼¥siïœì_ÎµŸb‰2{�rM†‘ìÈñ(’scš$ì±ÿ¹ i§FŽ˜2°éŠ‘Hi¯Ý¸¹%5“%H�–PÞåuIh2¿%,TF €¡´YÈžº4çØ?™gN(ÐbbýZ>R. ä¹ë§½õxSªò	‰¾ìŸý^œµ†±fÍš^xáÌíèèèÑ£G7nÜøäµþÿÊño�zÁx>L)²ûŠ×Ô[f/éº8§K•j—ªh›?oøïKU·¥½"ø°REÎ¦=×y M»Òt²Zµy§m<k™O¤é¢Vp£m<¥T!ˆ/È¹_|˜óZ/ütÃûp.ó?Ãðb©z»{ïmÕ@3þÏ/’& eÉvfµ-Qr–i<Ïù¨Lgè	§­Û-ýED¢ñmK4µa²¶]ió“±ê@P TKçdø”/Ûà¤,XGUM·èä|qö”¬ €¢äLÏ/‡‹X™väae“
+’ˆ¦¤:æMèFà9ì?ª¾@Ëù‡bŠªhèfX¶*'l,ºkÆg½¡®1£vØ=ô(�%6«NÓXu:Y§½&v	Èøt:‡Ëh³±�_¦×Ø-:ÂXSla@G×+ˆ4È#`�ö+Hlœ�À¦éyz,èåh!è:äÚØŠ¦·±�óh:Çz<ªæY©¤�Ì$}Ðiìj&KB²2˜on¥‹{Ü/7?eói“Ô’³‹úK¶þ"� Dº¿Á{ÑåYã©FtÃ@&ªh‰��ÛÆs�àF[¹½9oÝÄç5âÍŽ8hé¯Uƒ·1³ÆÓ­øâXvš|Ð5žn}´ÝøåaïÜsu”céd‘÷¨bb
+`LîaÊ„®¦$ùÓð|¾¥7œRÿ¤ Š¡:oÚFo+ÂòvxAlbŸ¹lÇlloÑC€ÃQŸT/Iðmœ]Àí<ûzòy\?›o9�þ`.»qP=ÀÀÒ±àÂü,ö5h�ÏÐ«íxn–u—?jÁ±&–â§ŽÓ×	$P.,
+aÜ‚Ù
+V]xµ�Lph¢j!MÍçoò©¥�aô7z®;PûÙFÄîºpúÐ¶J.^pÎ7vü+@aDf†O¤äŒçÕY�Ïê¶ïOdo¢º\ýE/>_ç§ã	"'LÖ6•qîüTŸ‡ØR*'å,Æ*A|¡c>Ê°.U›T��à‹î—”rkN7¿˜1Ïg?W&é"ÁOq²Üµ„×Ô‚wì»‚ø‚(]hi{½x  F±êôÒ®¸ËkŠ„/3 PSÍ¼õë6¶©¬^c¨7éPaÓlŸ�ïÊÀ¼ÊÜ<ëÓPk¨™,+ÕÔT‘u;¨û”pà9{ÊLIåyÔT–ÍÒ@ýK9•ãõ¬þZ%:¯d<?^Ñc=¤+ÉWŒGª˜’+ÍbA¨Ì¢>«B›õ£V|¡À
+g�Ztž£­Åk³âX¢J¦¬Ç«³Ú¦ŸÎQ 2âp=YióqOö*B ÈŠA–$³hþtÔ{w§ù´—®j¤½¯†2+�G
+LF6¯ÚâD-^[2^ô’Õ}ÎZÕxYFŒU’þ¯	Öª%}:K,6£@óeAËˆéZÚî°°©L"Ê‰  ¿PŽÞ¨ˆ�×›ÉÊ¾Ì­èš÷6/ÿMx­¯žó»&óMÛ~#^k­V<tèÐÍ7ßüÌ3Ïttt,X°ÀuÝûî»ï}ï{ßÝwß½lÙ²;î¸c|||Ïž=œóß¢ŽLÓ¢ôoòÌ·Èj;mýEÁêíîßLÕ¿ÍXýtý^t…^Gdq>–ª~?¼6JéüD+~cÕÿ#&ëëÁ»Ëµoáåa²1bØJÒ•Æ—ãd¥©o5ôíùüŠÙOL×¿!e�"à¬Üòß—u¿jZRˆÁRéÞòäzDŸüz¸@À9h:(ÙÆçëÚÎ ¼ªÚø< IÙßn�¢ó\ûþ0>�ÀäØ’”©øï‰åG6µ}mö·ÆãY
+ôÅ…[†ª"½Þn³X€>›oJPƒŽUaOµ˜Ê!Uò§é—9ÖåâlN»8‚ñ"®Ž¡ja©Lûxö\öÎ²:6M;=Ê` %D)$ýWŽ{(ÿØÿÜÓwÕD»Ö‡Àäc’ÂÓêg5Úµ€ß´€_Ò€§'Ê´=Ï§ñIzºˆ«Úð¼¼Ì†¹ä
+°Á�ù�¥‡«ôë&á`-äï° ·A–±;¸1”-èw`v[�PäÃ�Êr=„2Ì`qZO'}ÝÆÓF²ÌW¶�ñç…DuxÒõãs $å\1`hûZÑõð­A¼YªCá¬Ò•½ÝO6ônÖØ4¢,˜�›â€©íLew¢:uq(Q%"�€e´×Zéª0YÓ›§Î&üdS$»lq(¡R=|s¬D$çä˜ 1ñï±Yì)¨ªé–ªÛØÛÏ.&�%\¯ �‹ï;H=A/Õ`§‚Ä„N;—ÂGs°¦€ë¦áWYX’ÁymxNŽOÑöQú‰�…1ú¹¤¨€ë=¨Ñž�ªéÞì=%\½#ý¼‹‹¦iW»¼€ëfh›C:êÁ)�fµôÍiu(�JVwÂ¥Â�9yXÛça‹ÝÝø¦&pÀƒ“Ì³±g†^à†0ia{�ö4è`W"`L­)ÚµôúZGgû¬[N­þä-M/ýá�5ve5ð%ˆÙî7Rr]q´oð’e�ÖÃÍè¢¼ý�TˆKÛÉ°Äç–½;æ£ÍøÎ&ë­�kÚ>)ût}OŸïEW™Ú+ŒMæ®fp‹ëÜß‘»Mª’e=&øàìÎM©ì‰¢³4q¨£ãkˆ¡”}Žù¨\%«Û3â‹Ù;$eÎðÒ	´f²l"î2ycFV‰p&µMîû”fY¦¢v0ÔÈ" Ý
+â3ª�¸¤ˆ+é^‘Ž™€šcrw—ÈÖÔdëHH8F$s3\V$).‰&¢B “U%©¢^ž·dÛÂ;OT¢óRÒÆÂ+—~ì?k™É�Z¼žÑ_J”©£WÔ ÀUKàžn}0QÅHÎ®îÉÜÙLVäµ½
+Gßá%K²úþVº„Èˆ•“Õö!¦¨³©H‰¢¾¯ËzŒa,É0Ød9¸Ñdõz¼Åäƒ&ó3Úî˜„†II›A ‹ë9&Cþc•UÇh¸¢×þa=íË‹)Z+íÉŠ)ƒ5›²S‘*ÌŠI " �µ"Š‹ZAŽ…WJ:ó§ÂM�ò>Å±ùßMùôÓO¯]»öæ›o€Ë.»líÚµ;vì8£×øìg?ûñ�|óæÍg¬~+€ œ?þG>ò‘·¿ýíÿ*…õàÁƒwß}÷ÄÄÄ�~ô£ß¯:ò¾Â×£t±"‡³ºÁÅráxð¦¬AP9óñDÎÖÅaÎ¦¦Zëp¾æÇç9ÆS†¶+L¶ÄÉŠbîÏ8Ÿ‰¢³€ÆÊ^ðöf|ÙÒ›«åyº~2
+×)ÊéQ²@ð0Y7«ûÚ(bJå9«h:D‘Y®}ß1žÈdþÙó.7Œ_	á#B¹ò…|öÏƒà:Ë|LÓ“0˜D—–ŠßŸ©Ü¦‹C€¤”Ûþ°]µbVizæ“œUýè^²¾‘ÎrÅøLÒ›’œQ'êÝéú*`È9ðiu¨J¯»¸8¤±ì7 +‹Ë[t¼„çTèÕ®¬Ñ®&^É>;M¯ù4Ô�0VÀå:��y½¢}Wò 3�Ælv=Î>>ÿ*Ÿ£Ùw6=þ~»#^þzzg;^ìÓP'^CMBÔ ƒ..˜ §Š¸¡As¸¦F;²°ªû Ð†9[ÐÇÁ��­4 ² ßÁù3´µ¯² »ƒ÷OË1ŽÚ´z…£½€¿aBtñùSr¸ƒ÷§D1Å3 (Æ%Y‚µ"Yêq¿¥Ë¼ä¬¬þ\+97g<ÖŠ/ÌOÉY:Ðø _¤lqˆaS'¤Ê›ú¯•Êf3ßl4?¤‰åÖgdgþïƒë>/ü„8ãüÃDí�ÓŒy–þ|š.`¬^ßÚæ~.JÖé^|I${-q¬o²Å@�ÎIÉ5dnJž:3ïzB½”Å%ªEÇ:ØùÃê§Z=ø–Ótµ>¼I‡\N °*½>ßC£Nûb˜ée×z4dCoŽ3uÚçà| ÌÁ2N�NÐ³\"!ÌÃ²!úampCä)5	d—¥à×iO»vB=/À±q–„°F;x;^T£Ý,‚¸€g•i›�íyX5AÏö³7§�¨Ÿº¸ˆ éÂóu4›j
+‘wñCJ‰gøÔHœÍsS8¬i‹“±ì4Å)Ef=Y)0ì°ïÑøñÿ#Žöj"ûûÚ/
+£M£ÕÍëšWo|Ì�/jÏ¿×0Fëõwe2?�Ò©5ÿRã'’löß?×u·6›—»ÎÓB¿Õi»““Si›�Yš8¤M ð¼³LsÇLí‹Rv•ò€µÆç4q4ˆÏkËßvp¼Þa>bh¦½–“Ž~ëU">žm2H	§ä` ãÝlÃŒ:Þ Ã\,Á7¡³J;%..² ÓÆ6“™€àH’pJžÎ²…§Z‹ì=cá¹	©‚ð˜/í‚64÷È»;öðóJ¥M3ÃŸÊV…+K=ËÇš[iìWk,>éè¯�û×wYObo%xg¤Ú\q@Zâ ¤‚Æ9—cÍOÖW“eŸ&ÀPçdÿt¤ùE=ƒ�0Œjñú’ñÂéàr‹%íæ3ÕèB©#NrÖDR˜cLU¶‘Î6YÓÕŒ…çv»Mq¤^#0dÁæƒKr>Ë~Îª^²¤’æ&Åç¹?ñoR„¦&o0ˆ+iW»6x*j³Ñé2jÉ|‹Õ)�Ù±tb•3 �dÍoèE÷Êæß5™o~å¿X£Ï_|ñÅ{î¹çøÀSO=µ{÷î½{÷îÜ¹ó™gž¹çž{î¸ãŽ¯ýëgŸ}ö¿øEË²~�0ò¯ÿú¯/ÂïI•7Å€—¬0ýdÍüÒµqrVÑ¹+ˆ7 Aå¬Gât)g5]NäbŽ•)ÿO(]¢±�JóNËxÉ²÷"LâØÄôç,}¢§§›Þ;ë§¶õ¬&Úî$]CÒSª]×‚à
+ ©8ÞÔ7ë+I\%E�ý‡üf†¦÷¹8šËXUh“qÜÃùÄtãïói:¯Übj;ó%†‰ÅO�Vî6ÅQSðq©º\íèh¸ªM›bh9)HõºI!iÂ1 °°¯ûûñí&v¹8AÑ÷³°ÂÁ¹Y\êâ	I™^rq~“Žæp™„„ƒÎ@”¿êdJHZ¶³þã£;)úÕ¦ö+þ˜Ð��Ëà<%!nÑ@#¬,.9s¦ZÄY\È!£a.€‘n®Ãn T�$PëÃ$D
+Â~üƒ!úÁ,¼…ƒQ`sŽÈr´tÌ•Ø
+ŠÌ,+�”/°mV$ ¼’­¥\Oesbb8¸šT‚"p=9'LWrŒ«V£+êÉ“×ÎW‘2Œ5óÎß�Ô¿Urÿž(ï:÷�–_lš³i[ß®ñQ�Ÿ|dºùÕŒù bš¦‹šÑ•–¶KQ^ªN?ÙìÅç¬»GêßÊ9~ºÜ—�¡ì×˜Ï0™LºfT]@± ÆSê¤Ãê+½ìZ	´
+lÅ�úQ£ l^>?´¡Ó‚ž&ž‚gØô–Ø*3§èÞYxSUzè[xÑ)úö"vû8=éàœ2mM¡Õ€ýy\kCOç•áuû5(ÚØ×ÆÖ�ÑãZíìüõ«Ã®øô¬¼ðGgm#C‡=8Uƒ�Ì”ð\‹M8èÁ©ŒRöõ²7ú4åÃ�ƒs²°8…P€)QYûŒª–å˜¥Œ˜U›�Ê`‚ª§³S²‹æS’Ú4ôrÆ‹­øb?>×Õ-Ø¤ml›¬}³]ëê[›þ»-}»¢Bš.b0Uõ>^Ìß?6ýS�SU×ö(¥qVKÓ‚ëîª7ÞÞô.×õ�v&�ñc5Mœ@$Ï{““9¢Ò&@Ì!p¬‡ƒðM~øf];À0ÐÄP¹ñ�µB¹°]Â™/)ÛHûZ#éx‡0§/r0MhK!MÁ‹`Bb`A¯@«I‡mœ«CŽƒ‘åE¥ÉƒcékôrdºŠªšœ¥ÓÞ Ñ°Ð£�pEZA?ì¥³k*œk½ÚòÊcqá|/ÞzÊ^g€��ÆL‹vÖ—é¬Â0Ì¿B�ŠÚñzƒ×>¨±‰H.°´�‚��j~XC�aÈ€q*i_¯ýðÞúÏ²Ÿ¯Äk]q2H´™�úéšJêÎuï÷“õ:«pb0UmHyEnNßÖJ—èÌg˜äõƒ LªR=™ëŠ1† ³J¨zmqX°òq³íÇ´¨ÝëPì2N•ÓB†7}ÙÖnìóå¬Y]`xé<ÁGœ@ ”2­œñD�®|&ý›¿ú«¿úwóðm½¿«>òîQøw7úÏÅÈ»îºëÆo|×»Þ…ˆ‡Þ¾}û+¯¼266ÖÓÓsë­·~ÿûß¿êª«~¿ òÌ·¹Æ¸µš,NU_ÞxVç§B¹4ˆ.²µ§›žÑdí»ëÁÍŸÎ:ßRª=L6>2Úü¼ –5~)Ø¤¦íïlÿzµþ^R©mïL’^†±¡¿æùï@œ*äõƒ-^pCœ¬iøï›7ïÝi\nùï‘²-›{Ô0£0ì�CiY£¤â8 7´[„²³ TK’n]Ÿš¬ü“`“Yû>]¯Æ¡ööŸÕW2lšæ+I²Œc$øˆ_Š¤…ra3]‘áµFÚ9-+ìƒ±œWVƒÕÛØíª:œÁ%Û›t´'$„:C¹ˆçxtj/â†j¶G4ea¯M8Á”O# CEAØ‰››tÊ„ŽU·UKçŽxÄ‹Nw×èˆ	�!LèP¬Ó~çw°-UÚeaOÅ8S§ý-:Qƒ]%ÜH@8 AÖ„înž†çShPÒ àÁ ó#˜ž€ÇûÙeeÚ_�mt�ª'èJA…XØab^LË0ƒ  @e²°&¥¯ò]úé”2/§”OT&¯owô­þm&/¼Ë9œ¸T…‰àF£œñTÅû0g-×~4/Œå"¥JõðfCÛG”Iä"Ž-ŽMÆªŒÍ˜â Ã&ge]œÐÅÉFôÆ8]ÙfßËDF¬ºi®8i‰§Ãuº>%\IlH>3‹ÝQm„J žÅ…GèouÈqs× xœv¼ Ç}QUáõlš ç›p$…p´lœ3D÷–`K…^‹`*‡«ó¸²	‡ç°'é9LÇTîco¡QÂ•S´-�k9šK¯—¹.³6È“á9+¯7s]Öø©Q^C5k<àr4GéÁ,ËãšQø‰yN.gŸ:®îÉáò.¶E(ˆ TöÆPAÈ¶ñ‚ƒmªûªÔTSñ„¬P™1©,oÖ’�©*µÙwÏ·H0u>£±q/ÙbkÛS9×Ö^×Å±bî´‚[:Ûn�“þºÿÁÙ½WW+ï*å?žË>‹8HÀ„^#øHš:¹ü6CßÇó½Öb?|s’®Ò“ty*gEa7cÍ$YS(½\o¼%Œ·èâˆ&NÔƒ¸Æ£a²ÉÒö!¨œñ‹f¼¹×ùž—¬KãEf:»%¶(Ç:4t'éU	-ç;0GBÂ¢ÈãÒëÑÀ@œ!JtWÈ7P×ÀIÉî9“1�y±ÊÚb¤•Îo3Ÿ± +Qm‘Ê;âdþ¢`äŠ×%ÙüQg5Ófå¬c÷MÕÞœ3^ÖØH,Y –`5Ë~_ÎX~²*«ˆe�'»Ö pÕ×¡ŸF  G‘kð±frVÎxÆez,g‡²×£ë•è¼œþZV;ÐH—ÛÌG'¢Íyí(g�DöJr, ”d¦”mÉ¼@�ÈiÉžœ˜‰T¡¥¸ÁTKvu
+[GÁA!8Lƒy�tV^;ä`w¬Ú}eÛ¼ZOçÕÓB^Ë‰™É¸ŸS‡ûÕŸøÛŒ|OßïšÌÿË1ò_x­}}}·ß~ûC=´cÇŽÃ‡oÛ¶í»ßýîM7ÝdÛöÒÆµZí¶Ûnëîîvç¬³ÎzòÉ'ÿ÷Ò¿eAû[YÓÚÚÎYÎ÷	DÆº1ÎèÛ9kp6Ýcÿˆ S9W°²ÆO €îš[Æ/¶m@R,üÕÐÌóÍúCÛ™¤+Óü4ç“ùì×J�'‰ I—$ébCÛÓÝþÖÀËöº»>@™"0™ÌV]Õ`T
+º¶G3@ÀdsûíbŸalglfxòY¡�×SÿUœ®RÒÕÅ^Î¦tq ä|¾£øÎTië¬b²p¾ÑðÒe&æi=˜¾†¬“�obÉ‡±)ú¥?†é`HƒÜaº3€ÓôJðˆ	z¢‹]âÑ@N´è¸€l—j˜/àjr¬ÓÞ‰©;>?wßV•·Íó`ˆ€hF0%ÀÊá
+Jên	^��ÑÏ§è¹®	`Ä„ž!úGRhh�wqá8ý<�:½{#˜` {0`a_\t\þD€íÀü€Fæ°›fè•�(±6"¤ê$½J §Ó£¾hI�cØ§7‹"$@"–¨\ªÜ‚þZ+YS�®™“_J[0ù m>î§ëfe>+ØDªºö¤*LÍÜ+Ø”)2l´¹ŸIÒQº2ë~ÝÔ^­ïf¬Vn~¡Ü¥ëc?¾Hð¡îÌ']ýEÀX°qÑ�ù‹‚±-Qm�xý"÷¡˜¸ÉBDN;RQ#óø•,Çf·ã…
+âu·¹œÚOŸI ž�e9X]¥“ð\6p°ºàŠ!ºW€3ÿ$‚é,.©ÒNfça};žŸ‚·Q|©EG¸�]Ó´ÓÂ~f‹N(H�ªos0O«ŸÎÐöX´aHc|7! qöLºC»* T£Œ—a«óRiKZF    IDATh–é¥œ¥a¾IÇr°Ê„ž^¼aD=aÃìQúY>G£B¯¿ùá±<®tanŽZ*50mã9´Ñ1ÏÉ+Š p3b°Í|8HÎÉè»:ìïq�	¬L{O©`h¯	>$e�¥ÿr|ê^¥JÝm×·š«mûÇž÷Ö±Éï0ž³¦OØÖCšvÜÉG8îÃØÚÑþ™þYw&é‚Læ§ŒU]÷Ó>U(¾(SpìûÛHål ÍÑ_(7¿ À6e¥j3ØôéÖSà³t¨§ý&3ëjrú½Š:™…Å)5	T
+^•vö²³;ñ\KE9®q`@Ã Ïzm>m±h®9®£ˆ  0²ØLª\š)Ž%¤%²Ûà£Yã%ELçƒ’¬@¹Þ÷v�}»›^}¦ñ‹ðÈé¿Îkû€D$—4’�YëŸ²Æ3–Ø[tþÎÇ»Ý¿MTB`ó)Sì6Å©~÷kˆ	Ã4UVª²‰jCP)9¦¶7R…8],Ø¤£½–�©óA/]Úa=¤K¼tu¯ó-„äPó­yQ–ä†éÂj²(kü"£)YŒç6Ýk=©" ºŒL>h°z¿¹‹€%„‰25b•Q€‰Ò,>(eŸÀ–ÅGcR-Ù^•~—1àË./íë7_×ÙäžÊç~/|vþ_bäÿ÷qûí·¿ôÒK?þñ�wïÞ}ñÅ_wÝuCCCðo[Ðþ¶Ö´^¼Ñ2~éK»ÜüR%¸™a#–Ý~|®¤lÞù»iï£®ñt�l–²WûãtyÓ¿­ÝþN”.|¸Ùºaig"6ƒ[L’•œ�p6†·¼k¦Ç7H	–ñtÖùšë>G³¢°`ç NÖÖ¦ VYÅ5ˆãþ(€\;¤	T+ç»¹F)ÐMHbð›ÐVü¥òšVYºäR)AÊ¶Vð]ì—ªSˆãœMDÉz/ºzºú-WÛÕ¦¬–Ó„²#�ùˆÌ¬v0�æT"åVzƒNHðúð­xµˆ› °o°aN7\! ËÁôát•¼n@}/ƒ‹ÛpM?{‹‚��ŽÀ<–à0–ÃÕ%\AeJ½ìÓP	pX	ÕloÐÑ
+íp`¡ór¸Ü€Ž%ìŽ˜¦˜_Àõ%¼@B€À[pl†¶906¾«	‡s°ºˆ[Ñ Ø¢cLÎå×v²OÃ�%6fœïÀ¬5íÑGSAZ–§—	Å:¦:ƒPæ�EA-µ…©-FåÆdgÍÛâÃ¨â} 6êÉºVx½ÀZ*{8+7£Ëˆt†AwÇ­…ì'ÊÁ;×y”³Çšïß˜¤K4>V÷ßß™wçEœMs>né¯Äé’ÉÖgZñÅC�;3æO†cÍÏ�/8Ú>ƒ—«Ñ¥ À1®ªñr¼ÜÂ¢š¡=žšR�¦Ð˜ÇÞ³?¶
+¿¼Þ_§=l‚$€QéÁ‰,`8OAÁ´mu:äÃ©Ô±”cÝEÜ4 Ÿîg×6àpV	p$ù&–
+¸®·ôá+Hr°ª/ÈŸ³ßíóg]¬¹ªÓ5g}.ÑW^ÕÑU\£ ñaÈ„î¦˜ß„#Óô\—s°(¥4à †9N@Ó5:pëOºÍRzåCÇ,,ÕT%¤æ¤ô¦e%¢8 ÑJçäY6%³G?�(cUd¬¡ÈÖù	Dß“sˆlÎjEënW¦æ 10­1Î§ò™;û>Æ I5[·#m…?j¶Þj™OµZ×ØN�1<‡HÔ+‹¼Öj){£ ùàX+	¥Ò}RBàÏãÈL¸€8]‚ØPE÷‹¶ñb óS¶ñCeÄxNŒšlÔS²¦&Ù™vì=-!R¥à;8ïˆ¼?Ç-¼.ù™ÎY¨¢‰DÏñÄ—íž2™ŽïÐÏu¿S0~‘PVc5E,HV0 -V]#þô}ƒþ§>Ó�Ã­xK{æ£Õ§Þ«�eÀ´_¢TV ªö} ©(Sñþ4Umqº$HgÏ„7fôWÃt]-Þ(mg§õÃyÅëæO,qÐ'éA²ž è‘œ;êÿaN;4Ðz«ÆjµèOö­„É: –å«'+èÔ@ëý TnJdOB…PÎõ¥;­ÉˆÓ~º°’¶#&®šïþCQß+ÛäÓ6kH _Î– i¡*�Dó
+"˜æ¸SMæ7¥V4¶r.�h¿)—æ¿VûñÛFÇÿ�´+V¬¸ñÆÏÌpNÓÔ0ŒG}ôê«¯þ·,h+kZDü®ûâXxÁ\÷® ]¤óJÖqº€@wô_¤ªCQFã§²îWÇfžëÈýQ¹ñ5CìÏ:ÿ0V}¸`ÝíE—æ�oq6kâ8 2yþu®óÓ0ZAä €ëþºÕZß
+ÞÙVøpÏ¶œ¡éò_ôö~.ô NŠ™|%�€4ª3[ÜÌvÆ!×“§x±KVÆuÃŠí,ŒŸ¾2›{ o–ížNbà”D¨Õßk›�øáµQ²ÖÐö×üwUâu¾bmÚ¤';ª¡dp–˜[–ADu�
+íÑ ß ƒä8Zz•ƒÁ´	=63�ª…} ,ó³¬7 Æ”ÚÊÑL¨ÞÃ.­Ñ‘¶qP>eaO‹NXØ+ ÛÁ–�”�ÎæW�¨çè,àâ<æ°z´€ë9˜-à`Ð@5Úm`gHc2
+’
+lÓ ÈÁ�)âF�NÙØCÍ€¶&¦éù^¼ABÀÁîdk-§åî€F—jW!K_\®�ãImR]bt6ÓCJ	5$#›Opl1ômýÕTv1ÖP”±´­a²9–s2ÆÏum�'ˆœZëÇüI#¸µè|!N—!Êlæ^M‡jåš(ÙÐVütuµ‚[üè’ÎÂ[Ãè�3ÞÇ{
+oª·>ÁXÙ�/ælFã§€´TõHUlÂO×!H?�«³j9™ÓR¾Ëìˆ’šÑÐ9©¾«Cižé�7ù04�uÂyÌ*F'^6Bæa]WMÓ¬nhÑ±f²¸*¦r;ž“e½	E'Õ}&ô
+tt(Ð^¥Ý	T3¸˜ƒÓÇWìOïe 10K¸±ïªáÑÚK£[³6ÎYt%”ë‡F·:$ø\jÂÁ<œ=Ïåa- $Ð¨Â¯³°Ò€gHæô‹gýø•Ÿß0›£é`Áb,/FšiOHœè(%0‡W$‚ÕÏp@
+Öw&[eò“¶þrªzuq°^ß]¸Î¯ü¸¡¿Fèû£è</º²”û0b  BT�Ðª‚’  $6˜Yð«�„ 0Q†¤@& ™�&�)ÂØà†¾Y3MçÙïC9ço›þm^|�¥íJd?�V‹7WSû„|h!ÿƒU%%>Œ
+pmì
+¨\ds€C€1µw¶Xm³fJFSê9æô=þºÙæ@¤º$®8–¨6ƒ5’u:«Yü„`S‰êPŠ\Ž5IG¹¼ÍàcÏYßMåœFx£`3†ØÓŠ®ÈY÷!Æ~t	�®(ci¯¤ª'Nç·Ò•¶8æêÏœlüåœÌß7£KHçÃC©²õä,›�rVÕÙH$ç"M°š"«•.¶ùp¤Ú6óæc‰ì«ÇçôM>ÐHÖŒ_"¤­dÃpÔÙ­{6H)«¶FZtx+£8î¯œo4’%«Ç*kòiIV--Ù,é¬©p†Òâã“Ñ<‡'±Ò¦½Î÷eßU¿ù7áìl;ûwEŠs^ÿOäìH)Ÿ}öÙ|pÛ¶mƒƒƒI’8Ž³|ùò/¼ð–[nY¹råeyÙe—=þøã“““J©{ï½7ŸÏoÜ¸ñß² ýXÓfÌGÛôÓÁ-Š¬¼ñ´RË®DÎ"24~Ú2ž?2Q–ä¤é"�ŸˆÓ…atQÁº7ˆÏ+e?ÆçÕ¼?Âk&«¦éœJýsŒU¥4Lã€à'•*pŒUûz?Ç-{ÈÉB1ÿ¹ÚÌb`�ÉU€ ”"È—¶ëØy<t5ªt#Ž#ˆ<(Ÿƒ¶(4ãdM½vY’ôUª!•êÇQ”1�m�&1²Ú‰ùî�"•Ïˆ‘‚¾³GÌŸ’�ëfÀø™„ÃL�öÈÐéÀÂ.¼Ò€»DóØÍXÌÁŒ¡áSU€É@da±‰Ý	ùo{8S¯gqIÕ3êF;"
+¨UÔñ¬Ñ!ÐL“&ÕK6ÎîdK'èI
+ez)ƒýtv–@vÖaÏ2öé"n>Ór›¤§8šƒtO–œ¤hÐ>�¤»bª8Ð7©v‡$«´³�mR„GÒçfd=óMVÍ
+¿›/ñd>!*h'\îÛ¼Ò”Æ`Ô>¯H)ïÇ[¼dÃæ@ëât9‘ž³~ÀÙ$cåzë£åÆW2Ö?%é"ENÍûS ¡‹½ÍæÍ2/z“m>>>ýÏq²ÞÐv6iZMÛþiÑùroA2ö÷röw~xÂû�¡¿:^ËÞP.n&‹R•?ŸdgBªCpPSÃílÎõíø†f˜8ÇÁê‡«c˜iÀ¡,,í€7aSJ^–dpIL3sð�óØ»³¸ÀÅEøÆ^vá\~ƒƒ�'åOjy<«ƒ�ËÁÑ § Éàò�J¡¹+ýª‹ó{ÙUi…^;ñ„áo»ÈÅ…>�ÜÿÄ¸¶ý}
+�[Ø� E0©C‰ �…ïèÄ7pp4ÈtÁUíxaÏ" ­	'Ž¤Ïÿãõ•NÞ—�ç0œH‡«I¿ÎBIJÇTc‘§d¢l_¶„ÝŠ4YÞ/X­‘¬óâ‹SÕÄçæ¬ª6?+UÁ�®¯<†@�ÆQ¼QÓöeíoûÁÛ”*	^M’Þê^`:`g¡1~„R‚f€nBšv“™‚"ˆ`ü:XÖS^pS¯–²KÉvÇüqÝûˆ_È0÷ß«þz¼É—®�¬—]^V'¸‚(¤IVÄå:æ50L,Î¨>Õ
+`¡¶Kæ£9í ŽèŠ� �·<{¤º\qÐd}ƒJÊu9ß0ù©y÷©Xõé<GÁûSÕ†@D¶%Lq(Uí3­OñyRe±OÇq|¬ygÕÿ#C;ÉyqÙwÆº×Ö_T$Lq HÎ]\¼Õ�7YÚ^Ä1IUQ�ÕŸý˜Æ&Î„rQ(ggŒg,q8”³6öe¿Á¦R•�òoõ“5©²L~Jãã+�øo)GW²kžuANÇgg�_X|PX|ÜO.u^ôÓ¹
+�L>#•£HŸe=)0è…²=�NV;dñ)IB’åðÄSºÎâ„ÄLø¶Döÿ¦^.êw½þóâ¾ûî[¸pá‡>ô¡L&ó©O}êñÇùå—xà�›nºixxø¼óÎ»ä’KvìØ!þ«0òË_þòÛßþö®®.!D.—{üñÇÛÛÛÇÆÆþUÚÿ€5mÙûGÝOß¤óÓ­xKB…Ó1®Ëý0–s£t¾!üø±Àj+¼>Uí¦¶‹ÈLeoÞýªRùÌ_á5®ó3¨’ñ)×¾Ï4�5›×K�(5màÖjå*Ë|¢:s¡i¾Øj�­ÔëvÒdÂ0!!‰�‰êÃ‹æ_ãÕ!ß^"ót#=P
+l!‰¡ØQFIøX€›˜xDh�Íü�a@½~e6û¤”ÝÕÖÇq,#m~ÑäåzÚ¯É®œkÈ¢ŽZMMÕéˆYŽ‚XBàÃp;\"Á7ÀõàTdh9 4i´L¿Z%n=._�äYÐ+!ò`¸€+.è U¢·=œ<vƒp`¶Æ2Ê§ÑÜÙì†€fjp¨7ÇÐRkX(ášqµo{¯ÉÁUOkXˆaÆƒa –ƒuP§£#ôÀzö÷{Õ'¤A]�pÙ)ºÇ�ù3¸Ä†ÙäYWS�˜T{–‹÷ @EÍ¬Ñ7�$2ËzÊ	GDÈŠÑFÚÉö”tE¬]­%}%ýXGæÏëþ{;r\÷>ÜmœŒÒ%‘¥@¯7þ¶=÷Á º<JÖ
+6Rr?Ëù°¼-WÜ=3=ËóÖÏê{¯’Pê|ûÔØµº¾'ë|Ó÷û’d5gSŽû2Õ�3ƒYÐGâd]Áx.ï|£ÚúèœÜ*þ‡gñµ¾$I„¤
+lö¨ÚÕ	—OÐ
+¢¸ $„¬œÅ@0žE½Nû\XØ‡7´f`g™¶E4­C›9XUV©=ˆÌÅ…cj[	×žRÿ˜Å>Ð® Ò±ÐË®Q[ûñ­ãô´ùnö œPÏÍåoW¯q3‚ˆ¨®CÑÂY>�
+`¸/4 4M/�Ðö Æã'‡è®�Jhõ±·DT+ÓË«µwœH·ö°Í3²éÁé6½9--
+¯œZ%Fã ’cZâN¨ÌNã±ÑÖ§qR’áO™‰œ¯ÈÊX÷Öý?Ñø‰’{§aFÈžòý· ¤™Ì/¥ü¥”v¦q0xz÷ü‰°a¤„TöçŽL…l;Ô§ÀÉB6?.8#fãr�0~²—óq ´ì=J‚ç¿™³éBöÓQõ!¥œŒ0ø‰Te2CDY–cJ¤ÙØN° HršD0Ç(Åœ�*iu‹&ª=UÝA:·ÏþY#>×âƒ#Þ»g¹_kÅh�duÑx”V¯]òÃqQÄE÷W'n{,H6p6ãÏ5¢+«Úúv�cI4\Ÿ1ŸÐÅÄH©R˜.™[¼ªæ(JV”œ/3ôÍd•”½^|q·óÕft¥!Ž�6¾Òa;H6J•©¦:â¤«ÿjÚû¨ÁF5>b/*Uðâ«d´W«ÑÅ9}{ {Mq ¦â%mŸÆÊ,U�¾ì™›ùZ-|‹£íA~Ò’sRÕî¥º�]Ít‰Áª#ÁU�Æž™xU#iïÐ&"ÊdÅñ©ðRƒù‚5lqD‘ÛJ¥Û\š¬ê«N“Õ ò¡ÌZ<¿ÿñÐCýð‡?Ü²eË¿ºEÑC=ôàƒþ_ud£Ñxà�¾ô¥/ýoqäok‘þ›Ç'>ñ‰={ö<õÔS¯¿þú­·ÞzÝu×���ý?|¿/{¤j#`aº4�½%óÇk³ñV¼ÁÖö8ú/-íÕ¢ùhÎ¾'çü½¥ýÚ1NäÂV|	‘†HÙCÀk�Û¹~pc™B6ûÈLùFÈ·· d­ùç­à&R¢­ëõ8n#˜ÄEÅBW´dÑ5€`X02ð;vŠm/ä» ×Nœ"A"  .@hT 0�#¡  ¹ü“ÕÚ-ŒÕzµèÊ8]Þ�Y"Þe>*]*›‹)ñi´×ÅPíÂ+œ+ Û‡oCä&ö 0JóØm\3›½¥ƒÏK Þ¢¸‡�#!ÔÐéc—3ÐÌ¿üÖ-qEü†y>œnÁ@He&À1°èÑ„ƒ�tOÑ¯tl6;¿€+h‹´%:êM.±ÅíìzWëP(àº<®˜wanÖLÓŽ~¼¹.µ°/…»Ï+á¦Ì× ¯ ˆ²6ôŒÊ]ƒòœ“qÕDW‘lR¥©ªÊv_©šÌ3�‘2Ùže9Ý¼3–³j­;Ùgòãyû{®þl”¬síì*ÞÐð>Ô
+¯Öø  sÝ›ál’0�—8÷›ÚLùÝÕé…¶ý�¡‰#q²FÊNÆê¤€Àjú¤ñ“DVÆx2‘½‚�O7?«žfxC$;]^Ï‹	›§ñ‚&ÔN
+ð¤³%ømxaŽÐf@[Ž0Ö…WÎfo�édåX�ÌÃ
+.æï“ÐZÊþôLk°Stià”py'n¬ÓñEìýŒvŽƒ=ô<®¨ù¶‡êc×Pôi€l¯©ÓY\¤A¶F»ÆéqK=ììfúð†Î­ÑnzÖ.ÆOž¢»LèÎÂ*�Ndpq—O¨fh»‰=£éÉ"®œRtúÙ9¯5YCfJ"J”I óL>c°ÀæÓ3þ{;¬ûY%óˆq+¾4–ýqº,L¶´nÊg?C`x­¥åêw\çgŽ»çÌ�™ãúõ²ú`Úqk‚&ÄXhïÚ%4bò]ÿÒ‹23`eÀ´!
+Ñ›�¶îQÆT©x—nB^�¤Kãte¾1oßÈ¹Šôf¼y<îëÐ�g…'�8ìiÚCA´h´$´ˆ"ì`4á`Îb�-EFÎ|²ð¡®¶sG´y¹¹Ÿnÿ ¾ð†—	?�ïj¯ô­�x‹k<%X}â¶—ÓŠ:ùN™ª]Eˆ'ý÷Xâ¨ŸÛ¯¬ïàlrAÇR†Õ8]bêÛ›áµ;1óK?Y§ñ!¢Œàš8^õ?¬ñQ$à^²1¯?Ç°å%+mmoAÉ{ká›”.ŽûÉÙ5ÿÖ Ù(ØtªJ#þõ–n$›³ÚÎjtCoqî‘ì3ÄÑz|¶ÆZ‡j¦}’2JeŸÐøX9¸F €ŠD+íÎ‰)„Øù_Ü½i´fUy-<W·Û·ONõ}M�`©�(QÁ5ìˆ¨`4b6W¯A	6b”½†@4"ŠŠ( 4X´U@EõuúsÞþÝý^ÍýQ|&÷Žá÷y¯Ã1>]¿öxÖØc¯=ÆÞk®¹žùÌÅZ5ÞmÊQ�-4óõÄ¢Í@.kf[C¹†“(7¾GÓžœèÈá2ë´ä…°·U½¯ÿ	hvn¿ýöß�G}ì.¼ðÂ«¯¾ú?1rÇŽk×®½êª«>þñ��|ó›ß¼âŠ+þ@©Ñk®¹æª«®:çœs6oÞüÅ/~±T*]ýõ¿Í‚öÿÂš¶jýº`ßÞR” /ŠÝ‹ñÛ �«e.ß—«Ñ8;u&¼,ÈO�ë_EIÏ§Ñ¿Úºtð„4Û’Éc½k	I¢ìÔ0;�Ñ¦e7r¹6Ë¼jõ?´®øþÏ<çGã£ïöŠ²×B©Úðëè‡—PŠb©Õ™ÿ¾‚BáiˆæÜê8@s
+Ü!èÌÀø£rtÀ,y¾$MOåBÚdŽ<E­z£1žgßUÛ,¾keá_KÖCÍôôk_ÉzxRßI@JdåAý]ãÌ˜[cLvÍNc”B¸”�Û0÷ÖßIÐHÐ™U»ÇÉë¤I§õ}E¬Ìa›I3§Ÿüîë™ î
+vj•l&`Ò„Ì!Å%|u‚®OÆ†É‹ªä›
+vXÿ(Ôö”~(Cû�úqß¢5²aÁÜÓ4ÛB¬��GÌw ’šùóó Ï6×+Ä‹ø•FþŒùt{3S$žS?%@»Êd�…zl:„	"<‹ø‚hR ¤H‡5¸¬ªZÉù‘Í÷»|§2eJÃŠm®–+S–z0ËŽo÷>ç;·ŽÕÏ©T¿›©uiZ“r-À›'FÉeÂÊmëa!örŽRuž‹À¶b§mïÔßá9?²­œ\­.¸ß+ù_-Ú?ñøRpÚ¯»ßWÆ�è4ÑÞ ÝÜ2Û�¥7N_ÍàN››	ø$¾_#/ÂY%lJÌÜ³ê_)¸€;£ê›ý”X‘™lé}ù_öÍôºÕ@÷uNAÇ¬î°Ð²L"í™g2»¤¸œ¯ç°_qóS~�¿ú–C6ŠºšÁ.a�BrXßà‘!‡Œ”Éñj¯ún‚g^ßb¿K–6p_Ûl'o §RÊÐ¶Që›ÝäÅUr’‹‰ ÑHgôƒ‘	Æè–ØH ÆÐHSŸö•q”vmÚRÆ)X¿VºVqnt®Ÿ¼–’¨ê]ÃŒ±A¯¹TË=÷Pí=RyýþÖ~ÿÕ…
+â–�{E0•–ƒ~i€bM& ™Á+Ãhhc@ˆ±‹P…
+G@ð]¥Âµ.’õã·T�ÛS=T´¶OØÏõåŠ¦tfå¤E¬–y–Ã£à6))Ä™Uj­XSá¡‚«!A[î¹ÇP¡é®É‚o=¹ðuSØB¢üu÷VÎfñhÉz@ðÝEûÇŒ6§/ÚÃé¢`‡»Éëyü�{#%¡'.¿Ï;âü…R­dªVuÃ÷•Üï¹ÖÃ£…(Ù?Wz°Ÿœ¥çEé+µ±�± ^rnt!×caö²Šs‡Å÷vÄÛ‹Ö¶²s+%=Açms:ÓLÎÎôð¨{7�®;ß“¦æ°ÙP®ÍÕJ+Tƒíä¼’xÂc–ØÏ–ÅÁ^v%A˜�ÒÏ^¤À5„/‹gIs]ä‹.Ú-±ÀeûKl®j=CIfÑ�“”Ó`!Ì´c@<Ú°öäÆs©ì)7Ó#i~ÒŸ¤fÀììì�þkô?1òøÀ¥—^úÄOü&rÁüêW¿úCŒÃcŒ¡”þ×ì®Öú·YÐþ_XÓJ=ÐŠÞ³Æ»ÛbÓ¾õ€Ï÷¶’´)TêÎŽ¹ßÕÆ*Û?“×—œ›•©Ñ;û^×þYÁþQ;øhÑ¹y¨|)¥ÝNçÒ<?¦|PkÈ|c�¡5ÊÕ§(J"lbÙŠÏ[¼¼"Â.Œ�V\ÛÇÐÄ>ÊP¬!ÁTF@² nÅ*˜@¿-ŠåÉ‘ñÿàaZ#ŒÎgÆx„Ä•ÂÕav£sÊø%þ\¦k�ìÔã­sÌ +�­�Ù[ÀŠNq±¤H6Ð5ìiòµô=Ãäì"YÖÐÛ({d@!"/Z&†«dCdZ5²¥¡÷,e/¦'¦¦—U&ƒcl]�./Ó%bµTX$ƒ>)	b�rG™…aúR›è
+ÙX!ë*ä8:NOV�«è[ÉémóèýC–õ±ËÆð
+úŽÍôË
+A«Bs`çwÌc%²ÑÇ
+�bßì-bÝ¼¾_ �£™Ff¤„t‰ãË¥}‹öSCcí¤ªºÄ¿A�VMì:Ü¿†5’WìŸTý/õã�±ñ(£Ý~|ÑÊUï t½Û9ßæ;ó|c¡ðëZõ:Î÷ˆrõ¡,-ÙÎ.£-Æ@�nè±F¡ð¨W€ãÁ€Z9¹Á    IDAT›ò’‰ÔJ•rÕ|çzJ‚nvVÉùAÝûZ/=‹‘X�˜ÞUIjB
+‘˜ÅƒúÛ
+±Fº„üÅ8ÎÍ�yÜ`ŸD0JÎ]Ç.ž7ÕÉf�rË<Z''Wé* ted‚µÖ2
+â·%‡Oï.�z�–Nàïi›gõ®Y¹Ð4;îãK²¦uó>%TÀ "³�¡;H×/%o‰Ì|l&käØØL—ÉqëèGö›¯×ÉõÔÌUñ�,3�‘9Ô6Û×ÐKÚæIW!ÑÈR30óúþ*Ù0DN,1alzÚ˜@»eMåˆ”—è"§©ÝL-U¦JI7•«-¶Ÿ“f'zO­ü¡nòæ(zu”�á9· ÍÖ¤éVß€Òv{a©°à@),ŒÃ+cxJu¬ã�Œ�ÌP@g2{#9‡Q€¡Ïç¨_Œ“WÖ*Ww£‹‚üdæ°icX W&š(ÍÑ›ÓO?ö8™pIaˆ[¢!†ìÏ'ëÎO\6;ìÝX:y1ÏËÑJˆ
+¾ yeùçûØ÷ /Šò“âü¤¢%A”¼2É7s¾�ÑE‹ïblÆbS®x,Ê·KìŒ’W	¶·â}5ˆßHˆ±Ø!Ïþ™mÝÏèÜ|xi¥øß	I+ÞWÃôÌ²ÿ%m¼L-¥¤“ÊMÊjþm¾»—¾¬›¼Ö³ÞKÞ\òþ¹—œ€�˜Ñ.%¡ÍÚ]èe/0`AöR‚œ“^Åº¯—½ÌáÐ¾ÇŸ³ù.J’©tCÕ½¡bß§L¥—o,Û?—†'ªB‘&jin¬ºs—EÛí|ƒËŸ%Píì…eûžVvŒ…!’@Ú„Z45 Ÿìå«…¬‰N7_eÀñ'Ñ‚ øà?xúé§_~ùåiš¾ýío[µjÕ1Çó›òÂÿÔµ
+…;v¬ZµŠ�çƒû÷ïß¸qcš¦ˆÁ�{î¹“““_ýêWGFF®¿þú/|áÛ·o?ñÄ›íÿ‘5-!ägQ§À÷gz •�/qFHš«1 ©/ÛwÎGo)Šçl¶ŸÓ¹zù¯{á_5Ã÷×½ë8;g§çj©Å0:ÇhÛ¶¶i]'$ðýG¢èø�‘iB�%èöß[­^',ä)Œ�ãCIô:ÇŽî Y™ÃöÀ-tæáø6„ƒÂÂ9´gQèÌÂö‘Å 0àòJÁvô¼b%êwì |×dïœÆ›tv>y¹4”h9­9H^4¯ïqÈÁ…S +,r¸«øçÕåp5r
+^¢E›æŒäÊX�b=½ÊöòRb‚1nkÐ™+d"1íž]É^1¥Ýh­kË‚„T&W�Gô­ëØÛÓJM‡BâõÍ…x?}ZÈÐíšY–šÅ2ÙDÀlRkšÇ`LŒ#Ãäìyó‹29žÁ&àU²Æ"Ö´~˜£P KÍ¯�gîËŸc°èê2OsºÎÿÕ|ò
+ÀÔ¬§r]%0}9Q{µq-6§�S´ÚŠß:à_«uÝ±~™æ[
+Þ·zÁ‡
+Þ·¥\%Õr@ÕëÿÛaè6=!"Æ…”6�ñµ®zþÞBÍYhiØš ¯€8„VH³ãzáûlñD®–GÙVOl;|¤noOäJA[­|ƒZPA`ŽtÍÓ-<¼Š\2gî¨�“lÔ#LÙ˜1ß_K/+ÓÁ§ä×ÊäXÃlE‘ubSZõá½³Û*rW¹zÑ#N6Bºäà�«Tjx[7–
+{>efZZD$:Í‘0X‰i{t€‚öõüi«Ì!Ž†	Mg¿þ—ar¶�g'Þ-__Ç�Ú(ù³:këùÜ}ìÍ>�ÌÃŠ"Y#SˆÐìsÉD�{Dßº”¾.Cà‘jfâÄ´«tI�÷Žäj€Õl’6$Y Š>=6Y°~æ[
+ŸkŸ)¿[ª¥œM*5ggzö–µ=N^Y«^¯5¤„Ï1,Â‚S¥ÈhÆ‘§ÈSØüA,îG¡ Ýƒã#	Á-X.Â¼2¦O)W¶¥	d¾d¡û?òD­ÉT}AxÒ‘…Ìd=3•`±F6›x<šÏmAÄ hqÒwù³©Z‘ê¡Õ|ŒªE{yfRÖ¬ ï¿¥×¹`âj>÷‰i¥j®ØVô¯kv¯ñì»…ØÙì}Y�’ÈVñ¯el¶\Îé¬Ôc®µ�Ò†”Ë8£m[<Ü
+>“Èµƒ…+¥l_”žæ/*~8ËO(øßJÓ­qöR×úe7¾˜Óy©FØ|W©ðå89×ŸÑ…fxEªF)Éòªû‚í[?iÑ)†qÚÈô8e´có=Íø‚@•ÇÝ;35Îic!=}È¾Ÿ³ÙT®)Ú?KåÆ(?Î»ºéVJ2i|—ÍVœ›æÂ÷—­íÚ¸Œ´ÓW¤Z€S·ž¶èd;;­¯
+à4Ju	À˜÷­·w.ù]t­÷ÿû"Åé;þ€ºÖ‹/¾øöÛo¿à‚î¹çž±±±v»}ÕUWc®¸âŠ5kÖÜtÓMø¯çG–J¥™™™U«Vý&òðÃ���ý�wýõ×ô£}ó›ßÜëõÖ­[wóÍ7Ÿxâ‰G-hççç/¿üòf³yÚi§ýÆ‚ö·Å[›ÎüÎÁXMhcYÏJ]7°I¤®Åƒ”ÔfûŒ±ñ›ãü¤²ûÝ¡Âç2µF�ÝÕÒsœÖBãomýoxLN_[.\¥5JåÝ&úÁ_•
+_%¶Ø.sPŠn÷/†Çþ=O¡jƒ;´˜€WAÒ·a Û€î²…A,ƒÊÀŒŸ€ÆX6ƒ[�]Âä“ðË •Á¨ßBžof´±¤ô±Fx™ÒmV†Ú”Y(›î=³£�dh1¸E²€D°Œž®a c¡™EF¬^è+æ³P;ÓnnˆM°Ò*&Ê/3S0¥@SAÌjwÏc‘gÇ{¦PÃ’Ü¨!ºù©lûJö’D§%ZH�ž ç¥&IM»JW$¦™¹9†‘jhd9ÚËè"3ï��‡fºkvÃhBÄRòÆý€…zÓÜ7‡Ÿ/Å›d	±PsÉàŒ¾Ó@ÍËx‚“˜<6a˜K—”Çç8Dùt(WöTiÔ~²ÈM#Û ˆ\î]—ÉAúr›
+’ó
+Î�›òØÜ\û¦²ûïÝà#Ãõw K×Ï/^U+¬×;whìÏ�EØwŒökcSyÚÈS´çÁyØšc°=ä)ÒtÌógZÝ×Ùâ‘$É`å"|¤¿©Àçb¹ZÐ#A‰ÍíHgó\�¼¸BŽ×&}Î|ÑÇŠ–ypŒ¼¦„µñ&úI—x]Ýx�¸¤Ì'¦ÉÍÆ×ÏHEF¿*,ºµ\$³OTfå”GêUFFX…¢_ EARŸZÊ 4‹œxñQŸ—™GüA6¾_>Ú7Ï–È±5²žÃ^Oß¯¡%âIõÐì¦5Oå?ôym•œÜ4Û8Šž�¡=º-¼Š¼ßgËüåÝßµãÈÇiÓ<Éà¦HSÓñ©9˜%Cl$7h+É!|¾_Ðe<Wìè¦¯ŒÔˆŸžî‹_Ïu¿¡MaIí¬(yu­ü~)Wù…Fœh­!lhÇGÐEy*GA·¡õóëB-ay nÝ)TF�…H#0†BAÂ†_CØB/çâP±´­Ó~yœž[-}¬èÜ¤¯¶è�Šs�›'$4‰MjÃtÕ¢š,Ò›p€¬ö¶ÛìÀ|üçþõ¹Z^r~(ÕhãkŽk=šŸ¹ÑôÛî²Þwv¡µ?ßYL³M;0|Š³iJÂ8=3—k|ûG‚H²—äj%çû fÀµñ	rÆŽdùñŒ6ûÝàÃ”6êÅ�±k®uë@ù¯ÒôTß¹Å0pZ½¿·ø³÷ß¢äõž¸W™z/=ËåÏ	.[å[Œá”Äß]´å/–ºFHªMÕ’é1›öí»:ñ…„džõX;9�’¬îÞ2ÂÎroHäqö¯µÌ£=mÜÅè=�/XÙK\>©´ß‘CÓùÀJóVmD3=õ(Ewh·Ä¡Z*µm“¦žj_M‰*ð]íüDí³™ ;õOƒGþøÇ?þú×¿þÚ×¾öàÁƒ+W®üùÏ~ÖYgízÛÛÞö¿óÈO|âwÝu×·¿ýícŽ9¦Ùlþô§?½ì²Ë>ð�|êSŸú£{sBÈ×ýÇ#¹rØÿZ+~+�ô­_·“³=¾¯›7äþ èÜ$ÕX”½,‘k¤)OTþb±÷…zájÆ¦›ýÏ„’À{î­J�
+±SÊ5…âöVë]R­üdlL³­®ý³�ñ#Gö_V«^ã—‘Å(�¡;ÊàUÐ[€W‚ðA Q â6Ò  Ö¢{…P�î!õBàVYá"éÃ)¢qI|b¹öøäÔ×-þ\7yÓPéƒO.<Tå›ngÇ–ÄÁƒÉhËì.�åMóÈ*ög“êáaúS¡,1Ì¥y_±k²'—p"-teMu>OI’èÁßßÍ×ÇZblKme†×ÄÔ¡´R¡…Èäe†X‹@.ñ@ ›’Ü�ÜÈ*“‡óù:]šC•ZR˜¦Ùéc)@‹§õ�5ÒArƒc¦FŽ�Ñ¿°§J^èaiÛ<š`v˜œí�zfz5º<7y`æjt©†‘&÷©£0 ¡›¿l§gåÆk+Rgr¼øw™Ü˜ÊU¾u_˜�Q°ï¨–?E¯6Æ7 ‘rE¥ü7”BXHbJ‰Î²õŒÍU‡;*‡°ÍyD¸%ÈZ�rtš«&ÖíïÌ 
+Œ.j].Užì÷V÷Ãw¾1¸Âå»-¾o6|·2<Öì ¾ÛÁpŠFn:AŒCÇ°�)“+¨Ìô”MJ¬¨@JlþHæWYÁ{A³:ž0•ÄíâÀ©‹3Ín«¾äžzæ£›º	¯²Ìf­N>ž-eÄø¬ÕÊk©I)¡.±lš7¥tˆ#¡šzÏÛ™,6½ÐLY¨(Äe²R!+Òâsò6‡Œ*ÄÕY™¹¦yh�œ>gî,“ãxÛ<<\=qÕË1ñâô¡�l"`�9âb8Äd‰¬öH¥HISÅËíV#_êp™ÝtÕù~/=×·´Øþ8?YêN)‰lñX½ú¥vçbÎ&9;ìz»¹õ|dÃiŒbý&êK %‚Öóq§Ê`—ÐŸEm-Úû÷P�ÊPFëlL ·€°7¤ôˆ”ËŒ)uã‹ ËuÍ|‰CóŽMÇ'UeF� ‹ÒŸ°x|g+=»bÝWp~¢Ô�ÔÃ.É_ ØA×þ…ãÜ¯äp¿•‘çû³|3!gS…ÂY:§/w¬mi¶…³É^üÎ¡Ú»Z�ÏTËŸéô>é»ßc3Z†É´.Eù©õÂß0:?×ý×¢ýã’ÿÕ4{I.×Åù‹\ñ`šŸèÚ¿p—v.¸0m�›¨Ü_¿„äq>Ä?}¦Ÿ¾šÓYÏz Ê¶Zì`7=¨øÉFðß
+Ÿ�ïý½/Íõ˜+7FÙéÒ#5<hÿœÑÞLô¦²Ø_¶ÔKÏ±Ù¡NvºÇ&rÂãûm¾[éz7{±ÅZJ	‘ªhÝå'öä*AbŸï�äj‹5:ùÊQçÎùäÊÐ²˜RÆËµç±9@÷å2�-~0ý]xä¯Žû}'ó3vþy$¥ôé§ŸÞ¸q# Ë²vìØ±aÃ »wïÞ¸qãÑçþgFðÊ+¯<Zª ^¯¿ó�ï|Ë[Þò‰O|â�t�ÐÉ�©9?ÌÔJAç–Núr›53=2QøBœßß?Óÿ¬1VÑ¾{¤ðéfÿ3¾ý«(}…Rƒ‰\]r¿]ò¾i‰§š½/fùñ½àÃ0¼Ûy­TË|÷»“³?pœ]•ò7'ŽP†ñ%×¸‡ ,ÅA„Íç‰HB¦ˆ›h!(¡¶½)8ä`�Å(Ž@KØ%ôça4ú‹ AF£Pz|fæÊJáª�ú5eç& _SüRAì\HO(‹}Êx|ˆnî˜§+8fŸüQ•l¤ 6±"Mm¢;ÊBÛù²ºõ…à³¨ÌzM9,M‘BEryE<Ubýºõ´M[Œ¨ª˜ŽÔð¸�ƒöã.‰Êè	+u)¡wT˜™Ü"|NfUºÔ z:_ÔÐ]s°DÖ±QÀôðlj:ƒäôaröŒ¹=G °–yjˆn­�“‹X;g~*HÅÁDŠfÇì" ôY}í([~HÿbAïìšCêˆ4*5²£û5:°+xUOU\¶¸Ú»§îÜ5Õÿd"×÷åFBrW<î9wÌ·¾»Ð¿Ê¶Ôºnñ§JÅ«“øeq|R£ñ.Jušë¸Ïº~§×@¿-„�…Éõ3‡ÏŠ{  %‚öó;�Qž¿fï@ž¡Pj”k…Ø53û¥,Ûç'Ææ=ë¾éð’9™:¬›dŒž™#6(x�¬y!ÿ‰Ló°þ^���°%¬8§¥!92Äí¦êžÒ,,éÖÎèŸ» ÁŠHõI¦\Ñ30ÒXSß UÙ4§0±ª8ÔØÄžT¿tiQfN©¡×YËÐ×óûõuCôX %²üˆ¾½mvO«§‡èis`öÉR
+cÎ&CÓæÖ&¶ùX"PZFß’u¬]·p“9|Qo(*¤Ì%eŸ2Nd…ù­|©Et�Ù©®'jˆ�P™b;yM®–ÅòØŠûÍjáo]ëW¦Óy§cßÓ�.qÜÝyŽ$¥HBÆPGeÜFeIZÁ¯ 8 Ê`ù°
+`üÄ‹pJð«0Â�Ñ a2A¢XY¨ìtœ»HÉ½>’ö§^]LŠ'¦×7‹±™ï™‡ˆiÙ™ÍíTû<NÔ¨6~I<îÛwô“×ØƒµK8@-±Ó÷îïô>Æ^pÿÍ¶âìH­úŒ6s¹:Ž6)5n;;ñ»“üE£ƒïêöÞWò¿–$[+¥¿�’×ÅÉy‹íë»á‡�ñÉKÎ-Qr^.7¬»}çæfïKÆ¸ÕÊ50Ô±åX÷¼Óñ�7¯Gòío8«HáÅ„>óï�ëB÷Åc”6Œa™Zf[µÓWÙËÆ«tÂ÷•�ïEÉ«*îM±<Ž’`>º¨•¼^�@•Å³¡Üœª•>[ðÅ#óÑÅ5ïŸ•©à¨kOÑ¹µ‘¼6”›‹b#!#�Ô^¬Ãü…œ¶µ¡©ömvhQú½|ÅRÿ›Íô¥Uë©šµ¯›OÄªB‰œÍ–6ò•Ò°ÿ½éÿ¿½èþ«,†RJùºÿVŸ�(ŠöîÝÁÆ�«Õê)@B¾`%ñD,×æÆ'ÐíXlf.ÙR“uï[û»Ÿ´ïËõ±=�Ç�—>¥gã3ÚLåš¡òûf:ßÑÆ­ºßl·�ë»ßi÷>ÏÙ!Á÷ÙÖƒaüçõú7¢pL©¥œíÏåúJí~·€4‚V ôùÄI{c›0»Œ¡4Œ¸¿†¸‹�uÈº �ÑÈBä1ü:Z“(Ô@”·Ñš¡GyòÝÞû3yl/}Y¬GÚÒ®ó(ÓnW›@/„˜,’•n•<Ú³h«™¯Ð€O í…jÀ¡Ñ\ÎÖù÷ErS7Ÿ Äp"}6©‡v”±5„ËfŒ¡œö2=©!e'Òg“„˜¹tÕˆ½7�ËeùLIÃ-«Ì¸´ëú´lQX®BFÁ5äýñÓù×£2Oé;b‡Œ±¦‹]B™È!cnŠEËúxN™h#Ýaõ„B¬;�px)}±íêÀ"€
+3¹áãî-Éy‚Äû^Ïºo²÷¹•µûWºüé ßZ÷¾÷èÑž}'%½BñÁ~ÿT!žvÝv[®>¥†Ö¡;	•CæÐ
+J¡:­@úM­à•�(�bñü2Ò Îl«ù_l‡HÕò…|ùÑ?©­çC3%Ñ—&(“M)-4PÕÀd±,"3Ãû:¦'=—ª®6>bí/åî =�k/{*JùžNøã©ýÁ_BêÖ>Åéât²uÂ¹¯—Ÿ¸�‹A‘¶äpf¤2Ò§N¨ÓåÎÁ@®˜–½©+(›ˆ½ò¶	zÎ‚yÌF½oöØdÈÁPŠv�lX0�Œ’G¦àÐ ÙìRwN=Ó0÷‘3Ïø|ç¾�Ú¤Ú0Û•‰×ðóÛz^™Ì%5‡¸ežÊûg³¡éLË¢½¢Øæ'ø×ô“7¸Öƒž}ûBïÚÁâ§›
+ã×WËŸÎóµŒÎk]­
+»Èò5#Ëö†íç³’¥1$hG�GÈcîÀ­#ZDa‡ÂèD‹ ÂCwv­YpÊphæc¬^¾9Ó. ² ˜�aƒºlít>‘«¤)�?=ÝûÛ’õèÊÃüÅwö“×–Ý‡¾Þ\|#ˆ*—¾ßj_Vð¾™ËMýè­Õâçâô,Ï½… K³-¶ý°Ñ~/|­ü·qrr’žéØ¿œî|g¤xc3J�p6U(îÐ
+iZë‡ïÍåÚ±‘wìŸz´`ÝËèç[Áå%çf»^ù\£ýÙJñÊ¹Ö�Š•:go‰ÓÍäñŸU?±Å4{ùî©ÞÍµ® ¦—ž_÷¯ŽÓ³µ^Ðé™øµcîmÆX �ä¦¡Âg�ñ“ü¤~vZ¦«KËï}¶}c‘58ésÚQ¦<Rºtºû­áÂß-¯¹7L*‰Ý¹häKÅÆi/–K6c`C»rÅ ý@(7¦º$Hr$O—
+;7Ž I¨Š#ÎƒÆˆX-³Ùü¥áq¿�<ö÷æ‘Oýy$!ä5¯yM¹\pÃ7œwÞyG¯»Ýîm·Ývô¹ÿ‰‘###sssÿõþV«µqãÆÿ-øÇ‚‘W
+�kŒØ»c5A`í*ã¦ºL¡\6Çh¯�;hßOHbŒÉÕ.?�©qA 
+â×º?LÏ6àŒôm±Ãµîj‡(½�ñ)C(Ju¨y
+ËE{qTˆY%ËµÑ®L 5,ZAfp
+°
+Ð9ú”†A9ŒBÒƒS†L %´BqI2…–PÂ·ÐšA± YÆú–åÇw“×7²9Q3²9ÂgåB„éÝìÌD§jUÅ¡élÉ°èØl¦�mª[OpÚˆäF‹ÎÅj¹Ç÷yâ¡Vò¦N>QR=ÄI Œ£Œ5èþ°‘¼:Õ~¤M�‡6m4ò«‹_š	ÿª©ÈO¤S¡4ÔÌ£†@÷4,Âk|þÙ4¬Ñå%³rºÆ&bSÐÈ´´Kª±ôî¶ùõ 9µa¶’Óšæ¡rÊ¼¹Ð6Fl2äa¼‹]Ú$urrŒ�"‡7!êÓ²S¥C±N<ê¤F(k©`…½¨�›èjÕ~h&~é°ý%1#]m<‹ïsÄã®}{/º” ¬ÿw­A)Ažƒ ŽBàUÐo>ÿ©X.„áÂ® ¹^iÜF€qôZ¬2¤ú-p “sÿáŠ‡âü%R§zÂ+Q”Èg²Ý…2YqHß\&ÇÕÈz›ØE–9l±+Çû*­0`ÀÞžëeüDÕˆM;�ôhOGî²¦ ÝD�
+Úa$JÔhn\AbJ²LSmE&¯1íóÃséš!kº'ÇÛ*²ˆãRª¡ÄYc!¯e&µˆÝ×‹Ã|8ÔŠ€´ôAé��¦y¬„õ!•Éú=úkÉ‡4rôËd]Ç<íbô”ÏOýìc±B<BÏ$ Ž†âì`>½L,Iµ   ›˜ºõx(×8·†ùJb‡?d§Öý¯7ÃKGJ—qþ\š�BHR.ÝP¨búð…¥â�G]WÊè5aÙ¨Œ!é‚; ÜwŽþºp‡Ñz…	Èy Æ0ó¼
+#è�–`íEÏ/F‡'o°ùÎ8Q¦VM%ÇùTÅ¡¹ten²Ñ0/X$*ˆ]‚ÎjãRØ|—mýºvÝ%´RÒíèàÛs‡?.Ä3åÒ-”!
+–�dR®álÒõæ)JuÌycóœŠÓ³¿29s§³¾{‹e=¢u­^R«|.ÏFÂøÏþ7rÊòÅÖ¿”ý/jSdtAXG”òÛÿZ)|©Õÿ”km/¯lu¾Z)~.ˆÞê,é‰sÎ	oŸ­ÛÜw_Äîùää“ÿ4ö9ÿÈ•õ"¾ç»ß;Øxˆ“ dß%Ø>€v’7—�ï%ùIœ.
+þ\.WRÌFï«Ûwã2Úì€ÔcÑ›kö=‘<Ž’¸lÿh!úËºûƒ ;UÐùPn`$öøÓ‰\«ai¬"ŸìÈåU±¿hÝó\ÿbNH…7,Ú$$ke›lEªP36�Éô0%éTº|Ht?”ü.yÏ¦ßw2?ó™? F¾æ5¯ùé½í¶ÛþŒü�œõ7mfffåÊ•I’ü1bäç„.óƒ�|e�…¹¶ÖU•åÑEßz†3Ún'çùÿÜKÏuØJ"eê¹µø~€Ó9m¼(ßRó¿$Ø�ùÞ?-9±Ó}?¥�Zí†4�çC)p�,ü*z¸>”‚å ‹A9ªà.T&Ì£4�¸»@#ëƒ»Ð”Á yˆ¨ ÐhÆÐj4>ÏrŒA£ý5m*Ú8óñy„y(ŸÔÈ”GFÆ¹h×cQC16IêÎ�íôeÒØ%±‡ÓEc¬záªvxYÉ½~_ûÛCÎ=±\W´dta6|w�šËÖ�X»#µL�>!Š“vªÇ6ÕÏ× Öv�¡*84W††šd&ÄŽL—‚ç&áC“ò@™.à}Ó& ¬ÚVA�ùå7NÞ ‘—ÈrÀ,˜í%¬™3wzdYdQXuò’>ö•°®cvj$.YZ#Ç2/Ò¬­gVXÅùÜ*×ŽÇ¹)ø|Ÿ ‹A~<%yªª5û—®µ�Óù8q®–”>lY;:½O”ükf;Ý<‡ë¡Ó>©6ð¨Öð*ÈcXÂ,N:‡U„Ê6PGó ŠCH0™¢Û¤–¥[íwi]ë§çsÚ4†—À‰:    IDATd:þ³–ny¤ÜÓó±Ê!ŸºMmX»c5ë"ƒ²hdÑÞ ÿÅVôÞ\W9ídzÀ¢ÍHN8lÑ¢ó�Ü  îü¸™¼Ê¦�X�Ø¬�¨Z¬N4#:ÕÜ¡Y¨-iT…É®6¡‘É‹” ¯u‘ÒÔÐ¾î‡fÚ'£Î ×IcôDlmRi™Æ#L±ªmv,g¯šÓÛ9Š`â¥tkyXÝN‰SÃ	9ú ÜUV±-ËÃÖá®\ê³¶ ­TÖÝïÇù	6ÛOˆÌÔ2AçˆÍw[|'¥=ß»ƒ2Pö¼W·Ñk±á*j£4
+£‘G¨¬‚ŒÑ›¡p«Ð9d
+ÊQÝ€Þ~T6"<æ ë"í£0ŽhZ#Ðo@·÷ö4?1ÎOòc¥qíÄFf&& %Z¨‰Ò´qíŽ–>Ð?T°o÷œs¾ßýÊ/¾Ýón
+£·ÙÖýŒÍJ¹Šó¶=iÙH€qÄÑcY¶™ó}‹�ÿ12ðFa¡Ûy¥ãü„ ÚøZ× ­Ô¸OGÑ›(m’Š¿ìvßh‰Ç…Øg‹¢×gòØ‚÷í^ø×‚íóÜ[{ÁeŒ.ÔÞ3È‡�÷«„$ÙƒÏÒ_Š<”Qõ¹o¼l¼ðw„Ä¶]dñ=G·µñsµLêA‡?#õ@ªÖH‚¼äÞÔ‰ß.è¬ÅŽ�8?)Q£Ê8œD”¤EëþNz6'¡Ã÷Ú|w˜me¤ UKR=HI>“9Ë�Y‚ÜbSÝl‹E[ ”�ÕˆMûŒÄ¹.¥Ú# !º"v^žô'€‘¿šc¾ò•¯ ¸ì²Ë®¹æšßt(¥xà�©©©Gyä�#¯óiç›	t DY¤,7Ô"
+ ¨‰ÝßÓÉN¯X¿4à™Zš¨¥m
+:Ãh7Ê7{âI€”½ëúW¯9NIKë*eóå:f§ÞP«ÝGn¾whè%‚Ò ¢AAkøE(Î» Ëƒ]E´ o T‚´*`Á¨ÌFÒ‚?�Ö.�„t2�ÊàÔ1û8’³�[j¥+Úý+c¹)×ue¼ž¬µtcˆÕQ‘ÖñÅ³Œ„Ýl‹Ãf�á„d�ãlNé
+!¹ÅöÙË\þ£m¥k”ôƒìL‹Mö²“«Î�Z—2=‘©A—èf'Ví{ƒüÄªs{3~}ªE~¨™¯D×íG:Ù	‡ó™åbÔaÍL—Òâ`
+Z%ˆ` ±I86áM=g£HÁRl^ß_#/˜27�“×µÍ“}�“¢4½Ù$PHÐX4÷¸˜XÉ^×Ñ“9úÂ&UŸÔ«ŸÓSòåÂÒ°	"UtîÍÔ¨6ŽÃ÷År`,6;Xüˆ1E­kÅâ¿w{—ÚÖ½~á%!,(‰BZ!KPG"îbpÂyp*…V  (:³( î£<
+£ß GÐ-Ñ_ð…à£©®(Ã<ÖœÌ
+š�»ÔÕÆ”XìñéHN8¬@Ð¦Íö7Òs�*]£´-èL"�i¦g¸lÁåÏEù¦²}—Ô#Ýìä¢ØÊ�5ûöHžàò‹ñ,ÚÉM‰“0Ó¥©Öy�ˆ_2aˆÕ¸6,ÑN‰/P¨®åDiehK·Üu#“yÄbÄDZT·×ÉAÜÐÌÕèê#ê§#ô¥€Y4�VÉ±¹	Šd¼gŽdèDæp‰l¬�•]sP"¤ÇÇ¦ã“)2ÕUÈMæ¯g«í(R£uû~‡?ÞÏÎ®yÿØŽ.¥$át¡^üD£ÿ÷Uÿï�q
+…»,ýî¸Ñ…ÊÀËE!K0¼ÝiÔ× í ´á4d‚âRä}pÆ@ÏA&ˆ[pk°Jˆæ!<ƒÖa0�ùÙ·)5¢ôÐáàC.íªÜ×qŽx�UÉ�«ö�SÑ›jb÷péÃŒM%éË=çûŒÍ*=,Ä´°@)Â` 6Ô{ðŠè4|Ë
+Š8bÖ+"�`»°<ä1fg.ý— J‘$[<÷×JÁ+"è9Yöârõ—‹(—®%JÑ8~¥ëÞnŒG�kS&$°�¤Ý¾ÐOrvˆ² Ûÿ#mBcì4ß"ØÏýAšnµ¬Ç 'ç·£‹–néö?I�'òXÏz Í7ûÎûÉ<ëÞ©ÞÕœ„5÷f‚D™�(?ÉÛ�q)	•®RÚ�²-uÿËýäœÎ36ßM^C!)	µñR=bÓ9Fû6{ÎO&ù–(?®™m\Yú|+¾�@%zÀç5f�u¥n=~$ÙÌ	“JçwÔìÜµñ÷�Ì_¾ë…‘ÿŸÕÿgœqÆó¹uëV Û¶m;å”S~ÓmYÖòåË/¿üòõë×ÿ1bä—íÖdÎ™gÓÀQÏ'ch¢]FtÍÚÊUeëc(!)@]ñh/}å’úi{æ�xlr ð9€6Â�Uœ‰=÷0"N_AHL�erS­òi™�+s\<Ÿ™nÎS©>-Ü£Î  $ ¸epY oZ‚
+î"ibè¹' ¿Þ8:{áÕa Ê!cÄ-ä1Ò*G·ûú\®ÑÆ‹ó-±Ü�êêsÙ$ƒc‘¢KÊ|¹w—ÅÙÖL—í_dr%ˆ©zÿ§gjSª•>Æol?y3 ê¥Ëãäœ…ð
+—íkg[†Ý›@r®á„ÙBrNÚœ6SµÌåÏ¦jy ×­Œ�+ÑdÈš$�¹¢«’*³úÚhèC D�wš²œ™Ü&VKOè¥b¢¯è3êÚ*Ù2oîXE.L{+dã¤¾ÕBÝ#K(¬}…83‹>YÝ4÷odÝÕÓclÅœštIÍ!^j’”h—-Ã]qYc![éß^pnÍä×úe’�ÖŒßQÛ&FÞ˜gHÒ­…ÂYærGÑiCc÷E= (‚r¨L à€;H:(.Aç ,ÜA¸ áÃ(¤TŽ°oiSœk}¿êYéÑ^òÆLM4²µ{Õ�¬ekÛºY¡u
+Œ»w¤j%	%A®‡æÒ5kŠÿ"õˆÍŸýÖ¿½ËMeçûsá&JiGïµÙÁ\�fj47e £…Ow“ém‡Ê÷Yèóý|­Ï·ò5IRãZ�Î§'Õ4ZÏ…rifl
+iR`:P”Ê¤&‹L»F‡÷ÊÛ7‰?›’S:1§/�eMýÈ…ß/<ü¦Ó›jê�¹~	yó¤ùÎ2ò¶  º‚�êØ@E¦)¬«gd0Äª‰&„ÛO*ãK]"DQdžxÂÇ³îåìp”½b r!˜iÜ9Z?×õôÑâÈ,Ež;Ž›ª(Ž#Z wá¡wÇ#ï‚p¤-�òztwÃGÚ†JQZƒ¼‹pYi-aZ‹/TjŒóç7ï9œ¹c‚¨Ž,YšÛ¥Ý÷?;hŒ+øa‹Ç‚øÂ¢ÿ�®7{Tˆžg qäXVB(¢pM¹²7‰‘Ä'P6?86£´B¢ß?u`øþNci–Ÿ42qk§á&ÉË+ÕÛ�êu»íc	r×{VJpŽn÷�–ØaÙ{Z�Ï½opq°TCØ…RÈ²� Uj”�$LÞPô®K³­ýäuŒô†ëo4†j5%¯ví_5{_Iåê±úÙ�þ•q~rÕÿrš¿Àæ;ÛÑ_ùÖ¯´ñŒ±]lÇáðß¹]T¶~-Ø�Jñ³ýð’(;#Uc.ß“ëaF{a~lÉz(‘«{r5…óÿQ›r”¿°�;æÿAº¿%Õ…%…k[ñ›"54`?˜¨¥�× e~Ø€pF¢f¶ÆeÑå©ÿ»`äÝ~ßÉüe»ÿPY(~s�¦©”’B)UJB<Ï‚àÙk½ðÂo¼ñÆ?�ªBÈ§¹	uèSŸ‚hÀhPN¤GÒ8MYnéC[«7Î…—eÚ³hXÏP
+6e'ûÖƒJWl±Ë±~Õ?bŒPºêŠ%ÿ+ÝàòjñÓŒÍY|lbàJ[ Âè-•Ê¿'ñÏ›$Â::Â}ç¢>6œ�În¤}¸UXeæ"ïÀ®#˜„7QBo´DÖå°
+h‚°±gÏw+Þ?ºÞƒ³‹7w³Ó»r06¹ž˜Ä£î�õ,€N¾fyé3I~‚gÝ›ÉõõÊûÂð¢L­­W®èõ/æì ÖƒÆ¸R�Í+[Û«Þ—¼ ~ˆ³“[*}PëJ;üH?ßìó=íì$AbBä‘Œ.³¤MR=”ë‚E{�ê¨x¹3ÕËW:¬×È+#ÖTªåÕÄL7‹�rËŒLgJßV&ÇÓÍº©÷xdxAß¿’�ßÕó>˜×Û#sˆ@tñ„�U9ºE¬¯ÓFffœmŽtÌ·ˆ ëØ¥nGÏ¯°¬D‘úè™>5ç¶0;%7åÑâÏ¶oÜX?G©qJÛŽs§VC„†–Õ8ºj©Œ 3÷¼ReYˆê
+¤„M-¡sÈ”"í�r(#î ê@+H‰^ï–xr±÷•…ôTNÔ�|_‘,0&rŸï5à.ß9½­Ì§-6å‰íÆÎ¦Òü„\�¯ú·œ×ŒîôžüóSÊÖUÿê…þ—&^Ôê^[tÿu±÷eNÚxß?½Óc“„¤²Ÿo0`Œ¤Uû®^v#!%™ËŸÉÕx®'ë-",b|ÖîËÚÿäî½£-«Ê´ßgÎ¹òZ;‡“Ï©ªS‰¢Š‚¢ ’M  Imˆ‚6¶ fÅÐbè–&(´	fÁ	%‚�E‰E*Bå|ªNÚgŸ�÷^q†ûGÕíÏþî¸ßç¸Ž¾£íw¬ÖØsí5ÆÞcÌw>ó}ŸßŒ”ìª…ÞT[mŒhÃ›ùÃƒäôÓöñÝ‹õ‘
+W�ª×Õ³—ÞÝgxXÓ|áœEÊ…ÞPÏ™¤?‡ÕÔ�FSdE‘.�—Ûd(Ñ;jwš,.ÒRSv÷®…gYln0ó�Ùö-KG–4ïŠ“#-ãñNð.CÛæÙ·Ú’2g›3eÄ>‚AiÁ¡¢¯H`g!’CûÞ„ÁÊÃFo?¨%Ì
+J‚ê(¬Agv	³/¡´Ï!ŒŽ£×îiÿ³A¢†0ŠZÇ—™´6ã‹RÙzÀÔ6»öPe³”ôl·}Ðv@×‘Äèu×˜Ö‹„À°tÍò‚­YØj³LkŸiƒ2$x‚ƒi5
+A	Ðë½nxüá¹ýeË™K"
+¥`9{Høb]Û¥éÐtÛý\ŒZÖ³¾ÿz?:ËÔ7–¾{Qóƒ×vüËû? 8š­Ë,ãÉjû¶þœmþŽ±©$YeÏvzï7´m1?‚Ò€Vð®‘Ò‘Óó�9Æc±”@Yú½èuRyÛGé¼©½Ú.*ëèOvâ×Ke%2ïhÛ		ÛñÚ‘Ì‡8_ÐßikÛfƒ³VÏ�'r€Ëœ£¿Ø‰OÔé|,ûñ	D=Y¾(ý…ý�ÏÄ'D „@Zì@—/QŠš¬qu0ôéÈ¿:G¾vëú^ëúõë¯»îºn¸aÝºuš¦mÝºõšk®9÷Üs/¿üòÿàýøo“ é`"9B�¾Œ6e?”¹P¦ûôÊÑÞn©ò‰²(m´“Õ)ë®ùà¢Zrx'>��˜’ùŽÿÏ¼_ª4ˆt­{9_ZÈ\%Ç´ºŸ\8°Ê²jAp^—Ný‚1(¥›.’V
+”‚P†$„•E~€G0\h.Â:¼ÅèN ¨î Œ"¢œA  œ2Cv"ÁøÂ·;îSSst’Ú¼ Tíš<�czF«·’%µxùˆ÷Ífðw”t±ÄOÖEáéÙÜm…ì§š­Op1fY¿çrPÈ€…¹·xæ½ð"!Šžõ+�ÎzÆSëöJëÛq²º½&‘n(xÚ^J"‡í3dJ¡‘–5±Xµš”
+Æ‹C†?-J”Öây_µQNé¯dX£Ø¬'!5"¤‚XÆ.-�•-9-•(Ð¥\9rô´|V ˆT§¡6Tñû“i¬Ê“u–¸daSm
+1[»’y¹i¿O*Éˆf±Øä:©÷$¤+k:RJø „r…,.ônjô>.dYÁÃ7jú„®Íw:ç¦
+`Ú!êÁ‚±™ªÛ ˜)D-p½Ytg@ 0sè_#É‘B¡ÖøŠ�a|²P„K†(4�D(c*\«³ÉZx^Nß¥Ñºg<FI§½™Ñª©oä2;{ùc¢Á'ÞÝî÷¾*TÊ²ž4ØÞN÷ƒ‰it?ch{2î- éD§`¤‹¾œs›Më›béüFz±ÌÅ²ÐŽOœŠŽ1ØL%Z¥A³ˆ4HÉTUÌØ”qÐc3t¸*üQú:_Í;lÞ!}maÅè˜$�%«Ÿ~Û‰A�Ý~QbÊ@Þ[Ryí—pîÇ×­¹ ß§ûŽ¯¾àºÅ&²=ÕôÈHžùjz„¿ÄìI`¡YkD¯ÍÏÌÅ#�à�d|¾ö±Ùöõ
+Lª¬müÑ�O	¢3¤Ì›æf!2s“GÄ!©‚&rãÚàü:Jë 0³È.3×aÀ„ácð�8é…èì€3Œ¨¿‚^�½ˆã¥q²Æ±ÖS(-ÃD$=›v³æýCî·Yõß_ë\—Éoìú—q¾¨×YÐ˜_œéƒn Ž Ò¹-<I‚L!	‚& H�Á%û”B}þdÊ`X0L4ª¹é™›œæ_m¶®*–î5a;sºÆÀ“r¥~‡›CÂÇå]ÝÞe½ÞÚJåª|ß¬i>'36åYw–¾wÍ¥2ßúçBöIŒÀ?JªŒ‚6:ð:@TÛ7âSZ¯µnN{ÿ:Ñú¾mþvªsí|ïC¹·vºrŒÇ56C &ýwÌø§ÜoK•*¤>ÓŒÎìF¯Ÿn­˜¹ÚÔ6õâSt:mÐ)®,F_^²ó~ò©,¥Ø¢ÌG(8H(�Ö«ÁYë¾ÝÁ
+[Û1ŽÌDË‡�Ÿ·‚·ylJ�ÆÒÛ…ûc=cÝ¡+ÙëëÉ_Ê–ù›àµ~ô£ýÖ·¾uÒI'†A)=üðÃï¼óÎn¸áõ~Apýõ×ß}÷ÝH’äÏ‰v‹:ò“4ÑÕõX:
+´#eYït~*Z´À~º�J·Âgúµ~“2”®ËêB™ž¶5’ƒžþl$Æ3Ö¯:ÑÙ®þ¸Æ¦ëþßç�ïDÉQ¶ñD¾p[uþcJB–SÎSéWÃ <YQÚ¢Ô!GAªÝ�•Çü6x}S(.e :D#Ã,Â*£»Ì„Õ�`D3QÛ§„î, 0³oU×¿T×¶mo|�E€¦]j§Y«ÆSËÓÿZÞ5’½Ô¶h¶?ãX¿I’µÞ§Æ‡×ÌTn-å®P
+I²‚i»	‰Zí/tâ3×îœe†ññ®uOµs]Þ½9ŒOô“ã-íåDŒ	åÙúË_áóe’‘n †ræøç$J�»¿
+øJÓçC4’Æ¬Ø»ØÈO$q?ËGŠéD%Š0 &ëUõÌ*ýus<àcÕJ“‘	¹>OŽm¨R0Qô1	¥,ÒÇá2Rs
+Ò#‹Ktõ”üÃ 9eZ=–'Gy$¯ 4h&EETFµL¤,8´©ÑVÞþ‰�C„DÛÛ	ÏËÚ?*~èûYÃh6[—å²·I?8)“}\3 › Q¹1D-8EÄ]d– ¹Þz³Ðè¸‚éàÅìtzè…:ÆÃuÿªÉpuSÎ¤hÉ$zA?@IDÀGŠ'ÔZ·Y´ôç56¡k{üè�’ÒšçÜFI§Ó»J)“Ò&!]FçÃødBB�íëoõ¬_wÂ¿¤TŽ³µ—{ñ‰†¶·�&+Z·âe8l FBéÚ÷VÂs;‚„iDê$nVÔÂ:w2,!�Ma	
+Ê@!]ÙeÄhÊ½%ºTAÍÊ�Ê!* YqŽ¹ûé¦_—¯½¾ûäWò‹^›ÏŸùøJ›d;rF#W¾@T¤‹MB"¥<ÆMÚ1è|#YÒg>–È�ÎöøáYóaCÛÁE¿gß¡TÊq`º‰ 'uˆ¹j¥ YH| 0Ó0®QBô¿Ô@Ò‚�tÀLhd=‡pJ�j¨n‚f¢6Ê°wæÕPÔ“|OuÆŒ m<ÞMÖYlŸ©mrÌ‡•²<ïÛC£z|yèé ‹¡#áW¶A )Ñ¬¦¤,z™½¦ƒ$„“EìCp4æ�(¼¢¢  š�vé’¦‹‰=[¸ä&Ôg@ÉA[m
+$ñRaµúVËxÌvç¢�‡D§†$†à©Üzû¶ð'úü?"àŽó`�ÆÉ‘óÝ/ôg/bXÊtÌWšús�ðŽñÓx*áËmÓîù§ÇKk‰«ÍïRHå*h:Ûgé/Îu¯±Øn×|,â+J™÷·º²�ˆqRÏÈ¯ÚÚË_IIâèOÅbA$–ÌE«†ìß%²?C6Û«³ÙZøZGÛo±]\ölb[ïœÃ¼_RÍú— �`Ò¤m“MU¢Õ6�=mâJé_¢#þ«+u¯ÛöŸ®#mÛ~üñÇ²þ=DÓýyÍ5×Ü}÷Ý_þò—›Íæúõë¯½öÚ\.÷ï¹ôo.b„Z&–Ž/%R(aÐÚþp´¨u¹,M%INß¹ÄBJ›	¤Ã•é²šN[«øbq›ùÉQ)ã‘ºÿÞ¾Ìå¦¾±\bi[ºÑ›ówBe¦f`OêlÊù‘a¼ê÷ŠI²2[ØÂ#„]h&”„á¡q ’#=€ö4Ü~¬‚]„ˆÍ�æÁêGÒAX�‘‡³�=È«Œî8Eøóðú!Øö«„øJy&�5Âë¢[Ðt	ø2½Ø½·�ãé	iµÚŸNÄ"Ï{5JŽÊŸ%,ã)P†âÀÆ"Ã@ÊýÎ`þ¬vûB�íO¥îN{7'|YÞ½1JÖ¤Ý[2öOóA©l×øS-ø;[F#-G{E§sŒÄµðµÖ“E=zc,Kµx¼)Œ´¾µ%;ÃÚ¨qHŽÞglb„K¥lÖK‘ÜbvV�óM÷³‚KúC´‡è™Y:š'ÇfÉÊ—*ðÈâ®Úéb,T›Œ*p�,˜ÈÑ:Cô4¥¤„²‰^“ûu’i…–°zRPH®¬H–b±|ÖW�¥”›s¾]÷?T©þ£a4ã¸è:w¡9ÎãPšÍ„n¢[�nÃ*Â.ÀŸBf”@v	Œ4@`æ "Y$>z5pá8Öz.D|¼¾uK0©�€R0ƒˆf2Rp¾ei;ýàÛxÚÔ¶ØæcÅâm	_ê˜÷¹ö¥â�=ÿ�¦Í¥JµÃ]ûŽ„¯pœ…Ì„óÝOÚSÞ`Û•2|¾ØbÛýäØ”u?Í›¿/ÛwuâuÛÉ”N:sñ
+WÛÍˆì%GÙ´aSê±nŸõX -�2®Ì~c²&¨Éê‰Š§åŸJ›rÖ¡!@…J,R˜—;Èá>¦Zêeúü};KæŠ3¿&[›ª�­[îÒEL’›”�Ähj°8‚öIÈX)tSŠª`¼Z�_ã�…bqÆü}Îû
+!½rá­ÞÕº¾1•¡zð²h59yd† Y ±Ãƒ;pÈø˜�–Bw7 `õƒêˆšÐ2Ð<ˆ "ƒ�C·ŽlÚ�‹]ãI‹ÎôÌbûA¤£möÌø‡0>±ÜOÊI„ÒàÓ”!Û�™WÐš�!8LÙRgxù^;)�@·‘ 
+�Î¼B5 0L¤û¡$z-¸iØ„ê³)Çº/ìA	d
+°<G�ð¥©lÈ”ûîÌ•æ”„›ûw¾­Ý:%ŠŽàbÄ²¦ó©Ï÷ý]ã7¦S÷§3vº—ÆÉÚ >#cýF«1¥írñóB¤¬_˜Æ3¶ýªžUï|ÑÕvøáR”sÞ¿8æCåì»3ö¤Ì%bAêã…Ô•bžu×î¹ííð‚€-”çèO/HÎ5�Ä’ŒuwÊº«�‰%>_�Ó'mQDƒéOp•­…gdŒlm‡c<ÞåËjÑ™)ªw“¹,Ì?ô;?N¤–7žÊJdaÈúSÉzð/÷ö+ù×^ÿ?Ä™gžùž÷¼ç±ÇÃ�sþòË/_pÁgœqÆÿª#‡‡‡ï¸ãŽ“N:‰"„8é¹âŠ+žxâ‰¿Ey5­Ù$MA}ÕˆúY)Q´"öõ±c÷l´(§u›Ü³©´YËÙœ¾C(;åX™«F2k±y�´6ÝMVÛl¯Î0ÒŽåh)}µmošœûMÞûRÂ³Í“*«”m¯0)!…ž-'J ÛÂÈøD½Cþh33‹¤wJ€ûà=ihi =hiôöÁ,@r$Mô*`&¶>÷9JZ³Ý”JŸç.Í°¸ßùa'~CÊx4ãý‹’YÛy1IJ}ÛEnÝ9´jŒiÂ0‘Dˆã>¥L©Ò¦¹©Ýy¿çþ Þº©”ÿˆïŸÎØÞ©úýžñ”©¿¨±�sí¯gí_H•ÑÙÎÉöMž¾I¨´TVÊxdÖ¯Åjép™a´Ûåc:ñuÚÊY¿j„oi$cŒ(›¶š<£€¶šO‘#´%ë.ÉÖäžA¶¸%»&±·ˆo��·†¨zd8Tu�x±j›$ÿŠüDÇ+H­LNUPìýêöÃØÕ;Å�V°÷ÍÈ\i�–„.µsZ…�¤™;÷VÃ³KÖ!_jë¯˜Ú!úRÎLó¥$Me÷3J"¿“/ÃIA)èì,˜‰î,ÜRc Eg/
+k0ó'�Ds+¨ª#h@	ôZ�Qhí®ìãÊžMôƒ-”Y}7€Œ¹ÞÐ¶	Y4�†ñL§û‘Lêº(^;¼äù �ÈGà�PZÕµPáhB)^nv¯a´nh[�‰’u1?LÈ‚m<Ée_Ì—7¢Sm6™6‹!_n²‰PŒe3ÒSÊðÅ %Â¤óóÉXQ?ÐáC£©«þå‘L…R7½½º˜    IDATˆÔI$Á„b
+=”ršOš$ãÑŒG£¦ÐZrŠ#È’!ºÙS_ÚñÔæ/øfqýÕM[ŽžöÕöŸ®)6ÔF›÷Ñc”R±#¯‘‰dZ‚'h-`G°ø²Xæ
+Ö½R¥-ý%ËxT×·p>nYÏÁé­ÞY÷ëÅ�§yŒVce¡oSn$‡]3Ñ=€ÌR´wÃCÒsà.FRoCK£³¹5¨>�¸f [ehÍcªú×|4â+wv/Zæý,‘CŽñD/:­˜þt*½A½£ŠMTƒH bÄ>ÜAÔEz�Ä¼"©!ÌïÓ`e¡¢Ù~€€Mh&ìyW&ýs'ª�iˆ|´ëeMŸ£<ÑÃèŒbßƒ„‚Rð½ÂóR©»	Ae¼L«×ÖÂèµ¶ý ®Ãt17}¾®¿bè»ãxy”¬ããÊ…qa‘îú—VºŸ.Ø¿ðœŸq>®±‰0>±¼[§UF«íø´Œñ¨c>Hi��@ˆ¡Nøö^rTÖº‹€ÇbyÊúÅ|÷s)ë·JºŒÍØæ#3Í›lŸ©m‰øa‘ÄXÉþ!q;:Ó3ïÆ'MG‹Ëz5m>‹­†|i#YâÐV¬\_êYÖòôWmQÄ\ßß=å/Ñ‘-ýk'ó×ïøO×‘�Fãê«¯¾ýöÛvë0ÆÞùÎwÞrË-yôÏÇÈf³Oj\¹råÄÄÄß¨ŽÕ|CîÓuHÚDzšÏÌ‰ý}lÁñÒž°ÔQµýI©(VL*]�xÆ³ñˆñØW#I$ò‘ì§¤£Ó¦í&Ç‚H q²¦Õ¾”‹²ž­”9Û¸ËÎ‹âã»½K(c 4iÌY½ÒÔvZ´¶gQ {üIo´4ôdæÂ€3ÍEÜ„‘…fƒR0Zg´ZçÅ9îŒX[DÎx yçÛiçÖ¡Å{R™�4ñï3l(@p¤BÓÐëô»Y˜v%ŠOÔµí¶‡Lê{”ÊŒwC«}£“I²Ú5žÉ¦¾DI+JN´õM½ø´©î‡		Rÿ”¶î©Å«(	zÉk6Ch‹~Fz±Ò<CI"T6’�µälbi„4å¬‰4@Ò¬S y 9º *fLb÷T£DNS²±êô0Q“ÏnTW&ª³˜|¸DN™ÇŸÔ¦Õú¶Új�T‘œ\•/-¦—î“eÈÒ‰$V¡Mm�u'ãt Êeó…n|œNüX,ˆd?%A'<WÂî†o¯6¾ã¥÷'1Â’sÛ¡�™A¤ 9”¡0sàÚ{à#®aä$Md–@saáÁc˜6š�·NÎ?íh[e{Ôf0–åÏ£$({_ðìÛS©�]oÏ;näÚwXò¥çk“:PAxN¶
+‰Fë£�Þ?LÎýQ×AÙ|.ýyF«½è,¡ò½øtBºŽùÛ˜/‰øa /žàOVüËmG"s‘3èt JJé„$e{=#!pPó(O›Ùßùx(Ò.›²žÕ·GÊšâÍ9ÑÜœüÆ ±P´ÌF ”ªðdV¾@¡eÈ‚ºÚÙUû’ž~ág�=ùªâÎçwwÄ¶<]*àÇh®½-P“±òçÕ+sê‹šUžäèh[LaŒm)m¾½¦™Œ´%dQ£�íèïŠãã›jµ?%GyÖ½Žût@$ß¤éˆ;èV5Pß
+ÝAo?4¼‹ò›A¨	Þ�ˆà­Dvx©EÐLŽBª"AijÛ;á93þ[ÊzÓ6“Êr­_-?-�ÙàfPEyx£R`t”ÂÎÃÍƒPÌ8TûOìÉj#jªDtYiØDÁo ×�Ñ?øsÓ†R0\Ôf  00§i°‡“tæAÉ¡(ƒß�¦‹TênÆÀ1hºH’•éôƒ­ö'Â0ç· �89ZH;æ+-ó÷–ñT-N’#º½KÂè]Û1”ù ¡obÄ4ž¬´¾+Uºè}Ec3–þbÖ¼/‹¸XÀÅBB’nt>%�¬u£ó‘8ŒË¢eþ)cßÕ‰Î¬…o“£»Á;	D –$r(MmŸÅfc±´�Õåcar„NçG¬�:­qÑoi[¦ƒ7	å”Œ,V°‘×ª±rÙŸˆat’¿Ãú_›Ew0r¹ÜOúÓùùùçž{îÙgŸ­V«?þñ�&Èÿ�#—.]ºsçN Gyä7¾ñ�^¯w×]w†ñ7š#tFµEäP¾leé€NÜY±g„™¢i�äûY>ÅÌŒV¯r+�ªŸšb’@uE <}%"’Þ|øÆDfYÊY÷´£×'b€?ŒO0Ø�DŒ§íÛÑŸËýô í3áÃ¶J‰Vº++…ìœ¬zÓà>ÂI˜yhÂXÃ0û¡yàø»dW"n
+Ì!�zï#­BA§ÂU£æÏ|Àµ~=0ðµ\ic«ÁA– 4Rñ[hMÃt¡$ÒeY$Œ!•º#•K‚.,�c³¥ò­„D€PÊŽã#c¾LÈAh°½}ÎÏ»áùP¬ÒýdŸù'ƒÎäìÛúÓÍ;?‰eqqæ*.3#Î/­WëÉxÅ—«íU Eó¹=JTšöQBóZ«'R�Õ‘�}Z¿„T�	Zê!æ"44¤R8œ|¹ª7QœV¿.à„9j�œ¯gJþ¶L�b°ºj µ5OŽêbwOM5å—–¯æ«<‰Ä €™(»“,3h�’nÖùAÂÅpÚý®ß³¥€f€$1Ü~�ih6dÃ!0²pû‘:Ô€A(	«ˆî$âÎ¡ƒ¥Êwùb£Ê£ºœ_™º¿¼Ç3KÄ¸›zIJ&9L³'8LkB7ÀváeÑl]šÏ»Q-„á)†¶Õ2ÉºßˆÂT¯÷nÎÇ¤Ìºæ½­ÞòÞ?'b‘¡o¶Œ§	D/9¢\ÒŠ^_²q óñþÔuZIdŸA{:��D9c"‘žÍzR*ËfÍYÑp©9¨9•ø°®LLx)’ §ÅÒ¨ÉùD)�pRnÈPoˆÓÅ>ƒi²€@Û¾aÇã_(ÿþ{výdÅzÅ¼|õß>í÷Ô®ø×óäZ¦GR›øêj‹„´ˆðÈp+Y,kÃ¢!Wv,F»ñIíà�õðÂ^xnžkOgR7YÖï|­n"
+õ$aˆ{€$Ü2z0V	ÌÂÌ�pÆ ¥‘>
+TCã	(–‚Ù«ˆî^‚n�Þ§{É	�dMSÄÃ™÷ëÚ¶Å£'[öÖ ¦!ì"	`gádéN)6Á�3‹àõ¡±Ì€™ƒ�tPÈ�ƒj‡ÎvnT‹LÇA»äØq°RPš	Ã†™Âà26’š�n›væa˜hÔO>HKà|0
+Çš­÷� •ƒ—ÞZ›±5}+e²@3�ðñBáN@AiRç:×Æ.!ÊÜ¶£i»¸c´ª”iÙs£}ÇØæ#Re4:Ûß¢³}:Û_.#¤§kÛb1òåµà�J9YçÛ)ë®JóÇ‘Á&é £³‘,•Ü	¸‘Ò�Šr™#Hë[ì4ZMd‰‘žPY[|<ý�®ö2 šÉ’ft¦N[ñkñJz:ÛÉÔƒžÎùŸßf³Ùµk×®]»6›Íþùvíµ×¼±,«Ùl®Y³æ°ÃûØÇ>ö¹Ï}î�¸õÖ[rÐÿ¶â‹_üâJò¶Hê]5/A2´H@jj«MÊBÑ¦œ*kÞß£#'”[‘›Ë¬Ü(*Á"EmTâEå¾´¤Òt¡ÜX,uôm›�î~ÜÑvVÂ]mw#xW1}M¥ý¯é$q!ŠW+;În A°‚±jÂ0az¨O@7 $:¤†VÁ,@FàMPÌƒè‚êÐÒ�â:Œ<pàyìŸ¿Ååý+>T<ê"röMíäÉã\íßüÞ1éì&{lùøÇn}óì¡ñúsì<z5ä†¡�Ÿ6ö¾ÏN;?»€ðÉ @‚RzhúÞ(:Õ0öEÑX½Nc•têû]ÓxÊ–*‹Å �øªáüYºÆ¦&;_2hÒ�_[r¿¶­ùM‹õ|¾ÂÖ¶Wã…ýÖ³•èJƒÊ0MA§D3UÐÕ8±ˆÝSu‡º]Ù	Ôœ‚ðÈ˜@˜!‹$dŒV &$’ö,e—›bpw¨ëm°¦Õú"=^AH3bh:K”¢1¢gbå	eJÅAÁºËONâãt:ghÛ4¶¾õM“½ãÀ¤eC·Á#˜¢ƒ¤Ü"@ » TC8)àŒƒ°G¡B$‡®£[ÇTí‡®±+^tÒù? xàö¡åß\ûµ�/yól¶ÿ~à%/«‚.rÃÐ-j­\ñ•Ûöß}‡áPctå‘×_5ÿàÝÎkû‡ÒØ.Êj„tó+û×~ýÊ‰»_ÒF/>îk¯:Åì?Á<ð¨¥TF)WÁ*¥¯á|±¥ílÅoËþ½®í”r@)/ƒ&›±´}íäèœùFã_@ ù2cÒ^"ó}æîXæê¢·Àš�*éŒX‘if6e·¥v¦È¢y¹+Mû}Õ� DAŽ°S9éšzr�?+ŸJ“Ãb4²d��ý1Ú�šçèX¤ßÃ‚Hu'ÄŸFµ#ÖeöàßÑVÉzj6<Y¨¡X¹}ÞõR…¢Ó•ÊŠ�ø]™IÂPÄ  ¡pŠèÍBÄH/„Œ`–)[¾p²ðIöÌ£qßQ­%'©tÞ¨ï˜
+¹#A$‚*s‹ÂäÖÒ5¯¿Õj®ß4¸¶rä?}¨pü±¹e­àYÝDiê{àPg|åâÏÝÖ~æ·""+oü¡?ODm[Ü$xˆØ§öÂ•Kÿñ¶Êýwä×·ð³ëÝ•§�?s�Èžo¥!"x}èN£9ÃBØƒˆÑ©Br0v<Bi‘šÚû/½…’	¦¡^)¦2ž$å�•Ù÷úIÁ‡âd­]FBŒòÄ5õ—ivº—æ?uS³”°Ìm\Óé'ç~gé/ùÑ›b±´Ùy¯äeJÚŽ}o=ÔwY�%b±Áhlz¾scÆúe"d>0Û¹Î •(YÃU™Ë©R:	YrÄd“Œ4›ÑE÷Ûžõ+M®Ñi=ëü¤ÞùüLp‘Íª„ˆ_’È|=|³ã”Ä®ùxŸwó®î»ÆŽH–Mê´Y	Þœ5¶<�Üúï¹ã3_œÿk'óŸ×ñ|Ñÿ·Xºt)!d||Üqœÿç§›7o¾îºë~ö³ŸýOyé¥—^vÙe Ö­[755µuëÖÙÙÙóÏ?ÿoTGŽÒS›ê•†z©_K)`Vn¢0xb±‘Ÿâ5�Û” Ÿ®b„›D¢lÚÖ‰Š•«jÒšM“Œ>]4wØ”«m«†§$² #9ýeŠb½ýOJÑ\ú³½èì >9�Ù"Z­7)å&Jû¨í‡é*n¥ÁL˜9PzFÔ„¿æ0ì1ØcH­�Q„·í�€ÓàéÏn¸Õ½ãbóM›·ý¨bÄ“µùFîà	Š'¿!ÙñÀÖü`æ5oqË�1ëGÞ~yí×_ßúùËJç¼?
+èÁM¤( �áenW¢éÌ+žý‹þ¾/ÇÑÒtæy)ó€"Hý)¡2„„Ó�_{Îm5ÿŠ¬±¡žëh´¯/êûÚ|ÈÓ6qYVP‘ËéÓ­uÅp‹—upEtw¥]Ò…F¨Pq$‘£Ù4]¢­)±¼—àQ‹3ä…D"Þ*nIÑ�}êûi¡‘”N²6);c^ š—lƒ¤[Ø¼GÞn’ìöd{$õ”6Q¶~oÒö¾î?ÔãÕ)ë·;º—t£sæÛ7dœr±À0žá|8Ž°}Ë/ž‡eºðŠ à” zÓÐRÈ{ „B	$5„s0
+à=PÕê5Jé5ûÔg(ÛÑëá…£ïøÀÔ×îüâ».zŸfÀoÁ°ÀtÀ,ô�r5�L,Uè;õÃs8G*õ›z¥ï 0=7¤�¹”Z@žôðö?ºë+'K>Xî»RÈ²P)3œ/HÄÂ^r¢«mìoç|‘TN—.AV�N¦$!$î$«te¤µ™HfòZØåc¡4R4} ÑM³NC„‰ÔtbÑuý¬°H[µ‹ßW¦‡+H®�(QICmòq OŽU@Àt¤LÒ7« `]µCƒK éÈµ°-ÀL=)�²–ä&ù,´v+>¥hlë	7«ožiß.†ÂäØ©Ö·æ*ïq<„áYŒAÓGà1z³�VÁ,:�vº%ÖÀ4õ<šÅ7ê¿êßw}«x(Í�x Ú3 éòæ¾SSšCýÙòÚöÆÏÞ>ñµ(žvnâC	T7#;=UÈŸ|5�°{}^Et+5Þƒ•GìÃLƒZ…Ìš3¨éPîÒÕÁþDÅµ'Ÿhïƒ“ÇÌÄ>’.’ù!¤àfàdá÷–‹R¢SEÐÅž�§d3¿
+{à	µc)­§ËÐ4_$(ä¿úžf ŠOtœßEñº„/±­‡(�'´‡ÚÖVóífÎqîÝ=³9ŒN‹c”³ïmô>žN¯·ôg=ëžnr,cRåší/É	›÷W»Ñy–¾!Ë*Ýk	’tê�Ns¾8oßî'¯ÑØLÈ„|1#�Hö9úFFZ€ìÆ¯×i­\ÜöÿÞ3ë%‡GÉ¡XØoßW‹OÈØwØlÚÓ¶µ„–¨ŒTnÝ¿ø…ù_4¿�¬¶Ù¤/Ó“áZB�µnÿça©þÚë?/î¹çžG}thhè„N¸òÊ+¿úÕ¯Þ|óÍ_üâ/¹ä’¥K—üñŒ±o~ó›ôÏŸév»Ï<óÌ}÷Ý÷ÛßþvÛ¶m�>úèA¨ëßbLÉ1æ%ü�ñÝ³ò¥ŽÚž%ã;åwËš1“èÒ—¢ŽPD'"RÑdRo‰8–eZ(I]Íd´Âƒ@Yà*ÝNV{ÚÌtxœA»_2U	.X�½œ’nÆúÍ|ë;‘Xä'k÷x°ÖøR7¼@ÓvOÏÞZ›  ÛÓ�„ µÑÜ…¸�¤% $ƒH*@Ë‚å`�BqäV£=¥°«w~ÎxnÝàÙG8hþ�•A™ÌÝù%(,„Ö{ ÿâ/¯úöïºŠZˆzHá×Q»÷Ÿú/zß¢�Ý¬¹®á:a©­æ1L‡n@cSº¿gKå5'K•ö»ý¶õ€(ÏùI1õ™”õ?²ömÕæ�b™õ¬ûÖ�¦þ¼Åæ3Ö½zü°Z¼º¨ùm>¤Óš§¿ÌsY·)²)Ö™å¾MIUV 	À%EJHOF1ºUá7…Ÿ'Ë<š&`!æ3dÑ}[‘œT&¯Û#îlcû y“‰>m³ü’MF·ÊëfÕo3d‘E|ì¯ÈG	h™œž&Å2]å0?–ùNrt$Ó&��Ûçý÷8RéB¹Mÿý	_61·5Ž×ôz§yÖ]B ö¡$ü:’ü9 °ò+¨?�p½íˆªðŽ@z%”€™EÒƒç~/mþ6œ'Oß#ž.»·äé–ÿ;ÆMšg»yô¯!`¢*wÜ¸eÄµêöoÞ¸i
+Ç«H	%×ªsw~I�+üaï/Ÿ“�Wûßýp{Ã·{Í7ÚfJBÙ‹ÞÀÒ¶ºæo( .Êiãƒ¶…LY´Ñï}5C›ò¾æi{]íåHŒD"ÅZ0‰‘(�+K;Ãl›õJZ«xŠO·¥XÀÞtò�Œ=� ¡vèÈ0^‚À!£5µ!Vóz¬ê<‹¹êÀÁp[m‘H%4GÇ|• ÄÑö"ÛåR¬%•¥Óù¹Þ§¸0µ-cùs¹¨VÎclŠ>” �afà1\ø%ÿŒ�’·¼/iav•ÈŒöFÏ´Ÿúy«ïìÆš+%µXÉ„‚Q€Œ‘DÇÿûýûÿá‰›�0.å®èýá[‹×ýÛª[M&Ÿ°²H/Bj Î ²««Í‡o&$È,‚>ôFÊxsÃï™¥ cèR�ªÎÞy3c�’hm||ÿ7>²çºËFßÿ�ŠZ’cp9BDƒ�3‘ø LGyt[èC3�„ðrp½?jŠàxÈåŸ-Ènš†^†€HMÛã¤Pì»¯Xü¾RšRN’¬€Ò¥rLóq!†x²p´t´ŸªdZ×§¶Ï÷§´ÎØþÁôC¾R×¶E|eÚþqÊØÐ—›TiÏx¤è|¿”¹ªÝ¹’ÑC‰ R¹mõ¥>ŠÅýÞ—•r¤21H)Å,mk""¾¼+JR¥,¶Ç`{tt£3)éélfÌz!–)ƒíe>Ë¤AëƒÞRYimºlìï³ïiÿ7ðÐqÄë×¯ß½{÷[ßúÖJ¥r÷Ýw÷»ß}è¡‡,ËºöÚkgggo¸á†|>¯ýû÷ßÿÅ_Ì9/
+þEÿ{2ú]ï‡ª˜ÊàˆM�Œ%è¼"¯%ïšHf8º6ÊRr�Ø.ÉXÔŠ$›”ÚdD“^šŒ�ZŒÈ,MWx«%VfçJëŠôÁß+QžKIVß4Ó¹!’9ƒ´tÚŽdÑ õ�/u�?
+™ÛYÙÓïÝÔl]4=÷†Bæj@¥2AâÃL!ìÁß+…Þ4ì2«ÀL™ãìoAKC/ ˜ z�#ûŒÙ€�/:/n¾ÕvBÑ,”@Ì�9ý³û¾z^t`ë¢¯<¼pSc³_X	À]TØû½åµý¹c^4Üžé h#]¥ÏE>L”µæçÎ1�¦ñ‚ía®r¹¦í6LXñ#9{ÓÔÜÝ9÷F!‡"¾¢—9”ú|ÌD'¼€’¨½!clÐÈ|ž[´ï„2­íî|Ä¢I$ø"Ub2«oÕÈ_è6�M¢ïä<²ÀF6¯‘9e™)’&£6µvñûûèI
+ª­¶LàçG“ït±{V=0BÞ9F.�P?q±ÐÆhM½ÜS»„†…YSOe1ªmO\ÉÐa_54„£FÜŒÞ@ òÆfG¡�Ë>�Vi+•Š“.Æfg–{î­šÖð2hÏ:ZÙ. »FÝí Ì„ì�7!B9†ÉÛ./i­Õ‹²†þÀÈèWüsßI‹gî? eò^_·ÑÚ‹¾uhlÂ�§Qz/Â&Òýšq€lx!�DköÿînW0G_¿äÊ·ïüÞÍÝ=t]Í·¿®Ó)ûçž{§{‘eü±Ý»R¨l¿¦Ÿâ°	ƒÎ¤Íû{ñ©ûÛ_Y�ùÐlç‹›[ŸìÓk�*›+ñá‘¾´ú.=³hìh&‡3¥ºÂõX·©v•éaä¤;Ÿ1ÉëõÒ=åJteŽ¡ÂƒY)ßW3)²`¿ú¹‡Å9².GVÎÉ'{jj€ž>+ÿ(ô°»£&„J,’VPælOž‘ë%ôH	O,ïÈîr÷ÙŒó�]µ‡³ñq¡Ï˜÷g½÷Mÿ1mÿ4‹ú®Ùýüºt.g¯ÿ~4s ¹ê† s¡þÌ¯q¢YÏœ=¼zJîºÛö*ÝEßO¦B³Ñ,@Ñš��EFÂAëEÇlZ.úÏ~k²çþ©ëO]øOOŠè+,FF�g‘=TÑ`,z³qvüp½-OG³+�¸	3¢�hhÌ`éëW´žÿC·šH¿Euj˜èVáå € S�0]ôæàf¡DŒ(rxÍg¤ÀÜ¸i„>T½N„;n—'°œNÁqž	}X˜Ž(>¾Ú¾q´oçùVûCŽýp,–³©Õ¾<eß.Ä@«ûIJ­ÞGlýÉf÷³içV!ó	_òÃ’îg61S»¿?w^§wE”„gµ£ó¸kü!Ël}CÌ—»ús  £Õ€/«ÄË{ß‹Åâ6_êÏ
+åÙú‹mQ"û)íVƒw3µâc¶¿¾.g>+=c=iz4ˆen²óéA÷;­è¬HÉÍdÉ_^�ü/ÃÃÃþð‡?üáÿ¿øŸ:ò#ùÈM7ÝÔn·÷ýÇø]#´ñJ¯æÉÑ¦êêå9¼�¼¡¦ž0-Ê"Þ.q÷¬Ø’¥¥qöf‡²eqŠZ±R¡$‘’"T]	F $ ¡L“Ö:R„bˆ"²é¬F»m>ÞyWßˆ�Vø×|8kþ±¾™óqKQð1Jž 2uRí ^	Ì€Û‚w@4Äóˆ&A4D³`ˆ.´ƒ-æl&kÞ?œ}ïàyoŸ}ðžòQ½èD{õÔ€ˆíúEßE[ôùoúÛŸ³F×ßtEkxûÚ·èê¯,¿î§û¿û…°¡’zõC–ƒ^ 
+¥ßPÚÈ–‘Dèëû�’©vûÆfã8çY¿é†o›ê|:ë~­àü°�$Ýø”¬ó½¾Ô'	áÝøH.‹‘2jÁE>_½©}eZ«§õm\QJT¨d¤h3Y–H�5®"Å²uÉ÷ë~[h,�´#Û”P_rxM½ô„ºp�¾q-ùþœzŒ@'W1ØrAÛBÌhpsd-…é’6Géù ªb7G�‚*%24Êl-)";É’Yÿ.=¡ì€¯RÐ:á…ar—ƒ›ˆ¢Ó”‚à €f"	 Ù˜x þ^€@)XÃ ƒw¬YÔwÂ3~¯��f/ éªxöþð;©ãÞ7þ¹ïVîý�·ò„òyW¤ÇÌÀ* ´š	ÝEØ‚H [z(Ÿ~bñœ+ 4¦Ñi­ÐMHIƒ®¶òƒy{pxå'Þ¾î;ŸÔ�¹œ{£‚Áù¢zãZYï|5HNpõ?µ¢³ÒúKm¾,‘%¡ÒVÉz¨¾ÍÓ_±¶¸ú+­·øÒ²±%R´#{Yó¾®ÈIÅf¢#gy›‘$TqGxýt…M¡òâÛ�‰jÆïß²®¥^á*Þ•l'`órSE>6¯žœ”éT´À    IDAT¿)ã£]µ�«Ð$¥ÕºzU"’³8:AÓ£¥žšÈ$ŸL‘q
+„ª—×|‡º]âÖ£“v×4Y]ÁÊŽøªF÷sC¥S:á[ó�zí¹Â†ä‰õd^;ûró,ŸµâI™ ~§÷B}~ô²Éâg†Œiž�½¼‡ÈÇ�ÞåJÑ”ù�a†šÃnø§#¹%ØþPß¹Ç•Î½ÂBÜ ÑÐÛîƒjPshüúêö3¿ì=›5¼8}ÊšÍAX…á�PdûÑ›˜XøÉï®úÚ/k\Ö|Á÷µðMP
+¦Á+�P(‰l‚²?•ƒi#
+Á¹Õi
+B`äˆ¦åôè%Ÿbk^C(ÅÀÑÆ‡¾jð; š¶§”þtœjuJÚq²ˆóE ± 
+:¥×ºGg{3™"á+óÞ�½ðü¼ó�¼û5S%æcµÖ7Zá»t.ûÆ‡Ž³õç­èl—R6—}”øÝð|‹í¦´e²ýýÆæ^|‚©½ÂH’ˆQ.s„
+:”ÖŒNf$òôÚÌ9·ø’’ñJ'9¬lì²Ø|,Ý@ZÕàÝ�d©MdvYáìÿN}­ÿË¿[O2™L³Ùüóó—ÿvƒò6üJ"âè˜èÛ�ï,%�TÕ%2dùFyõ±ôûûä�9²¶£¶eÈÊ"]v@þÁÁ˜MŠÌ	y�ŽÌ;SÝ(®[F¯Òˆ©”ÌiÔaŠ¸É†R„R¢ÒlVBeV((‹v["]Ð*-ÞW67vùRF¢……“ë�¯ºæƒ~tzÖ».•~¾Ó:Ñ´žô20](…Ò‘0²0Jh¼ˆÂk`/ƒè@v0÷ 6?|z:ýû¡5 �ÝÞƒž-r^ÒØÖÌ±èlD8«Þ1Šíé’ãlk  áÏ"•„5D½C=xí:2EH)`vþNCÛ™voiu?QÈ}¢ÙúT&ý/ÕÆ÷u6Áh%JÖö’u)ã‘LêºVç“„„J¹‰&à»þ/îÞ3ê²²Ì�ïû®¼öÚyùûª¾Ê¹ È±Eñ(Úf�Ð¶¶ÚØÝænAÁpl0¶MA%‰€’(„*ª¨œãwk¯ø†û£çô¹£ïÜáñÞc?cÿØc�=ÖŸ½Æ3ßù¬ùÌé_=a?‰IF|‚´Ïk4”J�¥cÑ^Gät¢ª¢:ÌÊ¾$‚€¦*9*ï§oH6Õ–qúÊªÜ:D7•�d°H ˆªê«]2YU�’7†˜MT3Fu”¾a�¼±ƒ]«ÈçæÕ#äÊ†Ú˜#ëLRÊ“Áé î7ÓBKÎk#me™E¡L
+¥X÷3Z�ø:©�ÎqUÈÛÿL‰_¸½Û^R(ÐMoJÀ[‚ÒkQû%¬øû°ÿ1l:®ÖlßRZj€ê`Â9¤]d—#¨–©S1íÝõ-È. Õ S´"3Œ ¤!ŒbÙ,UfŸÝíd‘&Hc¤1@ ip²è5Ñé]'U�’v'ºz8ÿ¶(¾0JO5´½B\×Mw¿Z´~i°ýsýOe�f¾p¨{Ã õ#m^/ËÛúéJ�¶C1¤‘È Íz:éÐH(�ƒ¦ zât¬æD-QÝ‰Ê“ôµ9×Ã�&`“bC½8£î^F>N=(¿­ —Ñ¿¨Ég"M"fp3dI‘.9*îË‘µZU=î’Å£ôœ¾ji0‡4-”ö	_õŠ(Y÷ùÉÙ€ÒiÍ`ÇÆ†ÞÜj¿=3ù^ñiýßþ&�>Nßðdï]ÃlK÷mßÊßýáÂIJÆ`Üµ ý�á‰ÿ´Ÿœ¹jr²²ö’&2“pW"<j�eËÔ©ø/îÖógP8¼…hJ€YHÚPÞÚrÒª„‡vGH3ÍEû ˜	B@5HŽÞ<×bn;”„�Õ�ô‘„È¢[…WF¯JaºH#D~…atkˆCÏ+ôÈ…oâ#«ä¦Ç¼ÎŽ`ÙÅdíÙ�/|OÈRyðéFõ4€0:¯”EiCªl·ÝøØGgf>“ŠñŒu—�!âô”œ{KË¿¾�¹¡íÿ£M×º+NÏŒÒ“…,–¼Ï26Ýê}&â«
+Î­v‚wk´^Ì}´×ÿ%a#ø€g<éZ?«ön&PmHe0Ò—Êî¤§M®:Ôü¹§ïf¤ŸÊWùHÆsõøœ²õd3>W#QÎx¾Ÿ•Ñ´’ÕÖã�nDoˆ¤W4v¼ÌŒå_Oþ¡Íüu‡ÿÎÆúºÖ�7Ž��-X°à?F~þóŸÇÒ–pt#LO’÷N©;R´”B5—''¤ÜV[Ëô,Ž°DÖÌ©gKääµ–Ú:ÂÖF*µÉhO�T8B_•¡n¤¢ýƒü7m‘©q2ÌÓ|†µ…28ì®ðj¢f�#*�VI›oð	bQn³£®þb’žð“ãß¤ÊYÆ3µÖ®s;¥‘ß[íåkQèOC†È®‚^† Ekªí½}Sí®³Ïÿba=(ƒæ�Ù°F"êPHæ`Ž mBqÄMtöÒ¯kƒ?f"j¿éÞ8
+B‡Èíú¨iô¤!°30ÙÏ%e^ªœžalÒõš\­³Ã	?É6&J·Ì§[þõ†v Ÿ\,T©Ÿž2�cPX¬£“V#]«Ó´#Š¤!t@k	©`Ð¨S52'f24'’aºKV%ðX%�q¨š²”Ú”/š¤à˜‹IFœ
+=££v¦è´ñG¿†ÇVWãLeöî‹0¥ÀcTÄ=•‚÷j}Aê¢ÈÄ$™c:‘¹£é\I³{|%UFºB’�/…ÊóŸš«Þ*å �{ÝÖ©:ÛO˜k �Gá­†Œ¨X½°mzqá�“kŸ)­‡9 ˆIfFz2d¯Nu0Â 9ÂòËÑŸ�U QP2
+’fÝòÐ­#‰ ëp²HB6‚.R>®ë{¼Ì}R8–¾•±yB@i—Ñª‚•òeõàýeç6Fz‰Xj°:�	X&�…ÌRt“ó†Ü[ºñ+MVë‹6«	Ë¢AƒgRêiA_2ƒ /%#0+¬¤`fÉ¢2û×‰#	?"oÏ�%%r.MÐˆŽ\Oí¨C&Èóóê‰ž3HY 1É  låh6TaC´F�¸/�"UfÙúm=zýtêxLtù’¬ùÜLóB.°Þt¹Q‘jÁ¬}òŒ×¾%:MlÙ¨ÍíëîGádÈá!C€ ûîP»k?_=R^‰â©°FP8¼½„ÞN0Î¢ ¿£î.C<gþ.pÔ@4{qI¼$õº=ÀÈ‚Ùà}HÅu0xzG`¸ˆÛ°`'t@¦‹âb„ 0=tk`¬,¢.2D>4ýtv&	Æ/°
+f2=-B•ìÛÍ÷ïÒÏ¸ˆ?ûs];šDbDˆaBã0ºtdá#�æ©–ùtŒØÖ¦¾Ý¯6´ý:;V*Ý†g0Ûz Ýÿ°ÎfmãÉ0¹È³oW*×�.’W›ÚžŒùp;|·kþ.LÏª'ç9¨±ÃRÚž~ü¡
+©,S|ÕxéUíðý›“³íp'=Y*W£¾NÚƒ™oé™€™ÑŸo$Ûì�É¡X¨ÑÄçK¾ÊbO;ÐJÖýN~áåèZß–ÿC›ùíí?–®õÿ5�üìg?{ë­·^}õÕK–,a'BQ ×^{íŸ"�|~ `’^}Xþt”^ÖQ{Zj3G·B^ÑQÛòädÞRÏëÈÇ˜/‘sÛjë½Š€ÍË'JäôvÅj¾DÎìã˜‰R‰®®É­e²®®¶Åª–!‹ótKU\U›
+dM†"ŽÝù´2jê¤‹"ÅBZÄ�×zŒDÇsT§¡ÌäõC>_0`Ý/U¶“œZ4›ÊA×x"ë~Ã0k¹
+Æ/eƒïß(jwÖú_‰oÓ5Oðò§A€LîCÒ ³Í!w*Òây´÷"¿Á4¬Aô§@O´é&”‚n#»SaXà	¬,’>º- „R¯ö²7šåZw&|½©?ïïîÅ—œ¯3Úª�¤'wãË<ó�˜¯ÉZw4ûá*[K–O8÷t’s=}K/=™"áÊ¤Ç F�í÷¯É²4Uz¬HžuSeµIT¤ÃÑÎ’�¾ê4ÕÖ,–eèÀ¼Ü<¯ZDÞ«G‚wÔî#ê‹È‡L”"Ô«ï»X0‹GFqÙqürWÎã1 LBl ßšRwö°·ˆÓRt+äÂ¶Ú
+�rQ€ãö"vV¤džÅ‘²ª|Ö žK3JÁ¢*Ãj‘Ìë$T`”¤mdÍ‡m§¿Þ5~óu#ï)Ž±5·ml=~gæ”«Žßx–3"ì�!ì%Àœ@°ZÝm0+`ê¿¼…hl¡à1ì<Ì"’6ÚÇazPI Ý‚f¡5(8Y4æVåË»Õó”²cs§w½çü Ñ»É5#•�ðy÷kÝàƒëgAüšvôV�t-}%ýjðçRÑ²õëéðM2V¬ U5Ú±´½ÓÁ¥9m^(+QŽI»›ž�×D™$šçJ MT×!%�˜my<KGçä³E²ž#ŽTuˆ­Jí?-“s›ê¹³£äŠ ÓÔ7œA¼ZAª‡½†Oä€RY²ÆWûbÌèãðÙì»œ€Dª—¥…Dq_ÖótÐ¦R�¶DPb¦«Í3Òïó²l=8]^06‡|ÑHö³Ý¯8Ún©Ü¡ü5ã«wç—#6sÏÞøì·ÖŸöî£Íg*ÂC0Ç@-ï|Ì}îJæ’Yô^  æBqdÖ¡þ²kÑÝ(ðð¥9sÐÞ‡ÌD Ì5À}0Õ�ð  5…ÊbD]Dè6D
+§ ³€ÚdJà	2ƒˆ»hMA)h:rÃ˜Ú3‘yïŸ™fçßûŽÕ®½1ùæõ�î2îwuòÄ.–‰$†f`vö†Œó=Æjµö?•ÞZmüÐÐ·p!ç'–µ¿ÚøzÆ¾])ÇóžÃázç–Œù@"–å½Ï©mw´åÜ‡æZw™Úž˜/³õ-1_ÞMNÏÏ1Ú#mC1ákuv`ªûÕœñ\-º`ÔýAÈ×·“6m€©OßäOÎõ?‘Ñ_$à­Õ£+¤bY}W"‡
+ÖÝz×ehøÉÄy9<ò�…h3ý‘ÿ2–O|û÷Ž®ÿ¾6mÚô§ˆ‘§ã5ðŽcø×Eø A
+õô0¹¼§vG˜Í’õFkê‰66—pî8½<V�cê§,ÓI>Um�ä•¢W!gÔä³6Õ‘•ˆ%¸KFÕé¨�&Ì‘¥=u„Á ËšrÊ&¥¾šËÓ	‹hmÙÎÑ¼/ƒ²ftõV=-ùª�¥Åó{"“*‘¨xÜluùˆNÒ¾4¢”"eóE‹(xŸ?åo/ÿà—;¿ûkÕ»)�‡VDZÑ@-DGà�ŽÞ&0ÑNhÚ»aÁ¤h.dúƒiEn"FÒGÜ‡�CÐ¥èµa»I)!øB's$
+rÿ¯tmŸe>FWp1$	_�±îîÇ¯H"&¥r¤2{|±Ë¦tÚLeÑdSBešÉzO›ª§<ÖWŠÒ¡Då´Ù&�}ItBOäý&*òhF'ª#â9µ1ƒE®É-
+ ]µc”^>'éagçÔñ„DTÅ3%lÈá¤-á+Ak„¼¡­¶¸dqM=ê`¡÷±ßÅ�~…\¨#[U��Ó7¤Ü=’§•¶¬—hÙ¦áƒšÖ†€Ì1´…Ðú5ža`Ãæ>¡<©tF¢óÿzóºÏ¼¡ûÈ_‹ÚMÔDí!äÖCDïx'AFàmðxi„Â(£ù²Kqüq¸EP¹%èìGÔ…•Cë8œê3–¦EŒ!‰5Ëå^íY´ÚïWÊÖØÁ ¾ÜÐ^Ì8?¡´3Û¼×ÑŸ±­ûæÚ?.º_âWè§gšìHÄ—YÚ¾ŒyÿTï†û';»ï*kR§¾F|ƒÍµ““6[M–´êT’Õ‰¡È~Ž9ecÇ® <ª—�§óÉ5Ô‹²Æ!žNØañ„�‘<](•Ð‰^“{ä”úY™\ØUÛmŒÑWn–\A>]S¿maÓ8ù/‘šOPu0bÊÂP;Š8‹ª£à‘E-õb+-Rh¨­²:Tµa¶¬#»š‚ÈR/Qò‚;ÿÌ[Î²hê²™g„ŠUÌ§÷§W4e±zÉùöÐà'ßø‰Â¥_–½¿®ÿä¦ðÜ•  èmƒæÂ]ƒd„B¡ô*ÄÓˆ¦ ÀT‡·�ˆjÐ=t é£°"„YF0�¸§%A„5P†Þ<Ù	Ôv#Q�H!9‚L†‹^†)Ðn,[¶?ê!�aºèÖG3Ù#äœ×óV‡ìxªÑxoáSãÛo•BBŠ¡$Ý�ÍýZpX‚E«óYCÛQ,ß]�ÿˆ¡¿Ð�®²ô§„,Çé©¦¾ÙÐwuúÿÕ2ž‘²Ôß9”ù4—cJ™ŽuoËÿ›˜/ñÌ‡ñ¾B×ŽTûï'DÌ‡3ÖÝ½ðj®Š‰Ë[?•*o¿ëGo$$hDoÏ½o¦û�ítdÐz¶—®qØ”PN,‹›7è\+9ÕÕ¦æâÉ%™Ÿ†éz®²
+ZFÿ}#º$’ög8y9yÿÄêBsé±äÿ{Œ|úé§¿ùÍoþìg?ûŸ0ò?SBÎÁ›pÑ‰}s»ƒ-²)šVw°ÅÁB�0ƒe>öÉ¹±ƒñžÚS R¡ÐºêxŠ.…‘¢ÃÑÓ‘ÓàöÔ�|u�ÁÌ‘µ&Ép;ê(G¯HVÄ0	“@ #‡Z±â *Z¯'
+-ÙÒ<_0‹Â¦¾£IÄ€Áª%çG»ÿ8ä|Ï6þ­¿nxà½¹
+Ê'³ŸÛè?gTþò¡k�%ïþN˜Ð+P)˜™@Ë£÷"’ì1hY´·@Ï
+2…At³0²ðg ™hMƒs¸Y¤	ìü6¤@šÚ$¡­îßfÝ[öÍžÈÿy’žÜK^£‘vÎùvÂ×kìhœnÈ®|V»ôƒa»dÌ>5½çÏ†.>®³F°Wë<ÈRY"�¡³µãídeCÄ)ÂICù¢,±hÜP‘
+tXŒ0«ˆ‚ýZžq>¹¯‹ÝUõ°†ìy»@˜!ãMµÍ@q“zß:ò
+}»ú›,–•pVŒ†¯‹Ý1ª!fO"ß˜U÷)ˆuìúcò·-õûarYWí*’3rd|^=çb!-±Ñ–œ×á `0†õ Ê½TÅEfEŠe™o³ B¹”Dyën�£¤ÏXuxâ×Vž­¹mcãá;½Ó¯jþëYz^Äóà>rëWaA	DÇ@mtwÂ‚J_
+ØbtQfQJ¡ß€aÁpÑ8Ê 8Â`C¡ü‚�aP¡´KHœòEAôF×þ©RNÊ—·û×(Çx,LÏõì÷Â·SÒ�Å’nrRÁ|à©øB¡Oß×K—gõÝ©,Heµù IS›6jé �9»À(
+eEE) €H%¡êº¤@AR•Î«ç$DKmRUÃÇ€$ª~?ÂërdmK=ßÃîA¼6A‹Bkàé<N•H2d	ƒ¦Á&Ð‹tñañËqziKíË�±DùlHõeJÁ.úùs/¼õ�$'ýt‹V”¼I7¿õ4€:ÿjé›ÃäLJBSßLiÓ±î]�VÎ€wsNÝ¸ékÃ>8Ûyð¬öóÂ�âÈžŽÎïÁ,hyÄ³`îKvzÑ1ƒ�Â�½þG SXƒÐsHšà}({��� ¬2ú³H|„è&¤@v<Dó8,Þ Œ<ê{ú0m>,”
+º…8€R0mhÜ4!ô!fq€4¡H"YˆÆ^�Âðò ~­¡í´Bþë‚£Ùý²Åì'm·6Wýr?~…­oí%ç»úóŒ6	RM£sB–}‹¡oÏæ¶ÍÍ6J7HådÌ{më¡(>/K‹Ùëçš¿’*£”¡³#ùÌ�mÿSýô¬>3i»â|'•ÓýwÚ¬“J§bßãM÷nêñ¢Ãü.w=éÔ7ÙL,Fé+h&�6´Ãyç¿]9»ñå`ä}™?°™_vÌÿ£‚Ô]wÝõüóÏ¯_¿þmo{›”òŽ;îøêW¿úÂ/\xá…�=öØfŒ¼7•È9¾Úàˆ…á9cŒ­ÿ=ÿ»1ò³®žš oš–¿)‘3¦Ô]kØG³L*E·¥÷äÈ:
+¦ ¢ºÊW­)ÌÊ-YØS‡,hƒld¿xl½°«ê9ZÎ±^Wd]ˆ¥¥‘Ñf2_<Øþö¨{['¾D)­â|g¶ÿW£ÞßµÃw-Üàæ ›8vð}®ó¯^.X…ÔG~5ˆw%ÂÃ°&¨¿Sîº‹>q4|ç[LgÖ(¢P"€a�@„Œ"¢´ö�iÐlˆùUð�"¬Cw�ö 	 Àp‘HÄÒdØÍÎT,Ô®|_òÍOuý?KÞPxGÉ¿ùV%=×¹c¾ùs�ÍSÒëÆ¯½ì™æ³âFeâ‹ºµ�?|�œ¢koÙþâµF�owãK|>aÑf,ó‰2	T¢hIŸE¥/�X%}Y­°1œX–æÄÞÚ’-éí&)pG˜£c³r£@d¢2«~Y"ç·Õæ	ò¶)uw–¬IU·Š‡cÔW�¿MPOT£…çË¸(GVˆ{jo†,	p\ƒ3É.äJ5ä!‹ó´à2?•vªXÉ8 •QK'†Œ]Ž¾ åÜ‡R¾”ó¥„Ä¶ý+ÃP¶+‡â*È„ ršÓ¨*·=òA¨p|Ñ‡Î aPZÌ‚µµß òjø;`�¢ù{DMdÆá…_¡ˆ|”¡_OÀ}gle0³–�4†aAôýe£ûšsf¿"›{°ï¯éï.ç?Ö®Ð´Ãýð* Bæ	Ib¾j0ÿ®Zç»”ø9÷«s�Û¾ h=Øˆ.õ…«€@†Efd´™v:ž(ÕQµµÎîCá9.e¡T“B±ªh¸¤ çHŠ,ãKÞ–ÇFØây1�£Ã-y\ `p†Ø‚ÝüËµ+çÄ¾í2Y7­�S÷/"äºj[‘œYS�fÉúD5ŠäÔŽÚ9L/l©½UõÛari–,Tm\ïJ5¤7ºb@)*níœ;×ŠD¶;›ßòJƒvÖÞ¾eþ}×ûÍÛ?ËXwÆééYï;”"“‡à;ö8ÌQxç¡õ =þùó'âóÇÌÅç Ñ0t¢C &âG‘]hy¤uÄ³0Êˆf`”×À}ÈT‡âŒ"Â*Œ{á”�™ÀÔFdaW Žo†�¡ vÌBÜ…]€_˜�~<�aC3 Ûˆ}$!x
+Ó†HPŠå‚ƒóŠ“©ý’¡7Âh-¥-/7uôøO
+™/e»”Äôì7­Úv©
+Žýó$Ù0Ûù§…•Õýð­Ræ,óñnÿ#\–Lm»®0ôí~p�ilì…×Øú3
+,æktv4(ñ¹*çè…¬Ô£7f´½”„žõóC�o”ÌMç[J¹Ç:_Õh¤‘žg<Ãè|˜žz<<{qæ'AzŠPž«onÆeØ¬æê[#¾œËŒ­n%§d´c€ŠÄðÇcïåadöÆÈî¤¾ò•¯\ýõK—.=|øð¿øÅûï¿Ó¦M×\sÍu×]·fÍš¿Ñn¾ùæ5kÖ\rÉ%7ß|óx—�üãŠ0™%kŽ«ÛuxY¬ïãànõ…¢ü×<NñÈÄ1ùË
+¹èˆ¼C °I)£–?'>²Z}nZÞcVG¡LNÉÒlKÖ�ÊßŽ�óe¡,T¼HÛ@!5’ìI7o0Ww8cîÁtGÇ´pŽs	1ªóTZ­t¼¢LO›iG¯Ÿ(^Åwã+í°kß!U®Öü.!èõÞjÏ:n0¸"…;†p…Ó@MXcP‰t—"W‘Kk¿=ô&Ï@g/¼EPqî$Â)P Hšˆj°r0r8¡Ó4™U( PXŒé­'Ò'PDÁËÍJnféò)YÐé¼ÍþuzòYš%m2}k£ó5ÛxZ*/H.(Ø?œ¹ïÖpoá~sëhðTqáe5Ú¦–nÚ~Ì—k¤]0fýt-%|ÐÜx08·Äâ¹dÈWõ	Ý�OY…�1¢)	H]î+ÒÅ4KV{d�P‰C*Sòw6Æ4:jëBòîÃêV…˜mã…¶zACFG.F££^ôÈŠž±0ä’I�¨©ž3PrÈ„E*Y,äˆzÒ/1'Qc3 Å•¥€‚~<k>¦'åe6oßnh;)mDñ«}“álaLêt Ü(£f�×Qz�¬ÞÎö´?'¥'Å-C§
+‚ šGo/´æî3×·1pæŸ€ä03pÑ:ŒÄ‡á@·và�À¯£8É‘ÄHS _Ü×©#ˆ.Ï¸?ïu/¢K=ç­îg”ÒâôTCßJ …,
+9BIÿXãIG!æK½/…|b"ÿž£íÛ(’#mw#Ù`±fÉù	ÞÝJ'Kd �xzW*=”n"55®Û‡“Y“x.É¶EÔR{èÚiq P-y<KGbÕç*ÚÊ¿›#ëvò»dQ_ˆÔÌ<ZKÿa«üørò×	1¡¯öÈiSê®¥ô:1-5pû/2ÞBE,‹ˆN›BÙ€š}ÏóC?8ûè;�‚ñTÆúyõý!dÑà$a`DƒU ! Ô‚–GïI$ó2éa�ù{gÞÎR~¹h<æÀïÁ]sµ`VÀ}(Â×Álh.ìQ47ƒY`&Ô‰¡«ÍCi9zSÿ:mÒ    IDAT¨nAe’Âü†W!j‚0„Ì ãë¤’hƒß�íB3@(t¹Ì€�Bpý¦_ÒÏ¿Q˜6t�™!ÃœÓM0½Ö÷GmgZÓÑr–¹}fæó£ƒoç)üÎ`?¼ºRü‹ 8ŸÒf/xoÝÿÄ`ö¥šÝ¯öâWÙúv!‡4:Ãh½˜ÿÜlý^[r9dÈ\Ì'3Ö/’t•¥m±Ì›ïÜj²¦¶G)ÓO.ÌÛ?Ñv·ÂwXúö©Þ¼/	9ÔßÞO×¹ßë'çõù’ƒþ[Væ?-”·(sg#º¢#<‡r®Î3hG)­dÿ ¾�‘�«!¡2±4r¤‹a‹Í½ìýHçÃß­¾ÿýïùË_þÄ'>qÿý÷_vÙeçœsÎÁƒGFþ§irÁ\rÉ%×_ý…^øÞåñÇÿSä‘×Ñy3Tó©¤ªßV[Šä”†ÚL‰ž¨æ½´«ºd¼§Æª.�d\v,�ÏÐÁ¦Ü»Ê;’ˆ
++Y48q<W€CÓXê‰’¡ym>U¡t¡4ƒ6›µØACÛñu®ñXÂ—'b±kü.“Œ¶(éä³ŸåéRÝØ#ø Tž’Ùeç¾Ð�‚s"”gÌDîèeˆ> !BPñj±óÙOî~nUùÜ‘E�
+tz â&‡Y‚ˆÎÃÈ¾´ÒÜÃ…_ƒ7(Pýâ ‚Ãt@ÒÞ ªáfø ú_Ü(n¹¾Óy¥ëþÿõ×ÓŸ—óF\Œ9Hi�’¾<å�½çM–ÎÞ0Òþ‰Ìë­m£_/oúÀy	k©6b´ ¥Óîl¼LA¹T"5"3`¾p0\QdFWB£„td+P3Ãlõ>þ«µ29_Ajpú8ìbG8«î!Ð%"E‰(ACGQCÆ%‹M”ÇØIóâ�A²µy­þŠ}évS‚»dÄ#åy¹}½•ÊUÐ(‰l¶¯›žšÕ7k´‘u¾GH:ßýúPî½qræÀÀ-IŒü ìÌ"d
+g Ðœ—&o™µ�üÝ8ö;9rëþÞ‡†ÍÝKFWg
+È/B÷(ìì!DU0FZíÝHdA4(�¸ƒì"T·BrxÃðç�Dè÷¬|)ÁÜÔå•¡{Ó‚CÓô�Î7sîSÊå|qÂW™úæ0¹H*×6=Øþî�}_Ä—R’0µ½:�n„oï‰JÙØÊHDéÊXæ)áB%óßZñÙ‰2;"Ð%�ØŸÌ.5†Sek$žJc�fåÖY¡ $x¬::q{êƒ½_}­Œó2™¨Zˆi‹Rt0vDýs§Rb
+8d‚Á6I�Bg0UÓœ‚„%J0Ð!ó`=Y²ÈûF;ú³’ýO?©ä]ßé¬Ÿž5œ‡®í¢+GÆï4\ðÅeëÈ¯„âèF~5Ì!˜# 6D€öÓfPÛƒg÷¤”ˆ¹/\ö3‹âz4·¡|:˜�ÞnäNFÿ ô<dŒ¤Þƒ3†pfý) Ðlè9 HZ°U!Bˆ<„™CÔz‰R'�~Þ êGá¡Û0³H|ôª00~–‹4�aƒúndKè6ðwo
+|Ø.‚„²Ý9Ý„’H"¸y´æ³šÖ‚	1j;ÇÂ`A¿>áK(‰ëW~xMÁû›0z­¦VÊ¶¬'xº°Óÿ�ÒØ?z³¡íåbTc³)_‰•9ëÇRƒä×ø]�\”Ê�Œñ¤©o’*kè›Âø’ ¹Hg‡…¬pYÌ˜Éy_“ÈE*a”­_MWõ=­º£?“ÊÑvü*�´uVõÓÕ2£ïˆÅD*³¡ôŠú.®r�¼>1_�¼w|èlæ—ŸûãñHÓ4Ÿ{î¹õë×sÎÃxüñÇÏ?ÿüÿ»‡Àã�?~ýõ×ŸÀÂÿ°þDÇ­¾:ªjž.ŒT�€¢‡¨i$“ÅŠQú:ƒØ é«i£ezf…žç=Ä¼-O"7ÀŠs| :‘QJ)—ÍX4¡ ym¾Ã3Úþ¼þ¢§r¾“5ïç*ÏÅhÞù6ÃŽñ˜­o¦$°�§Š¹�èÚ~'#LkcÈç+#†'_P
+„ÂÈÂ.ÁY ¥ÐzÄ€’�)Ò& ¤ˆùì})7WŸš;²bv‚*æ7A	h²+ÕÕAði<@faš	"î!ñÁMƒf@pèföÜ,:ÍAÁõ ²®ÐµC”ŠT²nã¹ÌQr¦Æ¦lñëE×?QyŸl1X}ûà5�ÊG½Æí²¤o…›cZ"s¡,GbˆB@<í…L¤cÓp_¸¸¤ém)S•tTµ';€´É  �d—²wVß5‘÷qh„žÛR[)Œre–¬ñ°:Ä±9ƒ@3QIÐ�*.‘•;ø?çè¸PñzqW°Q¶ÁDqŒ­×‹b…1)”›ªŒA«ý÷‰Ï]ÛKOÊ9ß–²Üþ|ÅäI^vS©t
+CÈÁ,@Dðƒ÷!$m¤mð&ˆªÃÎBÁµ¶´ÒÏVÇ]·ÿ©EºÔw‚êèÏ#˜E÷ tLÑPÛ�GèO¿”#Ñ8§ˆVã"Û‰’a¥ò½LC!ÎÒMPÒKÅ8có)_•Ëÿ³PyJë³Á;S9\ïjyé5~r†£oc¤Šñ0]ë'8úŽ«[ÚÞ¹ø!³BYŒ¤:éj&|eÑ|l^ÔrÌH¤ÕÞ¤>iÐfG@#�DJ	‰0çR;Rí
+sbîAukK=ûŽGV6ÕÓf†,oàé¾:ÔVÛr8¹‹�&Êƒô‡Œ0W¡@ê’�ãü`Q2T/i¡ES‹°%™æ­;*Æ.SßZr¾›ŠIƒÒõ½åü†óïÐµÝ£«øØä�†ªÁ)�0]Œ´j"¿Ö’À 8Òyå—¬çG3·¶…Võ?sxïuóûá†LÑ?ˆ¹GÑ;ŽêcP)ÂièYDU€¢¹„!i#é�P¤}¤èyˆÍíÐ=<„3 FLGnø¥˜OÊ�Èt!:Ó :¤Dä£9‡4A»‘a¢>ì›Þ¤:�Æn}è:”‚T6¥-¿·Ž'°³ˆÂ‰êôišÞAœœe9Çš­ÚîQC¡˜û˜�y‚”‘ZœœÞ‹®6Íç Òê|��ˆËá0=·æ)‹:Ñ[tvÔ±îë$¯¶µmµþ'ÃäSÛFIÔ‰/åbÔu~4×¹ÍÐvì Eñ¥Žþl­�k<f±ceë—BY	±¨ è¤Km}+AR¯H*�PÏFgFÒ5h+àË\}k“gÖšOÖ„¢bÓÆËæ‘Öøù£ÂD’$¦iÐ4�RZ,þìäÄkÉÿEý?ñËÿÃyäµdf¯úÊò
+#AG pÉ¸Ë%^GU�ÈM�·™$§3C5®H_†£†0æ‹M]*-”9O›ÕiP­duMøæi$uØl��ë4ò´Ýó7õà½
+4£oµ´mµðÝC™"JÓµ½–õc} ¾U±t§íA³àT@(xùUèÀÀ+ RhyPÎÈ>ü-èï�QB4�´ƒÃÏ`×L§Ê­U™Ÿ–ò˜O¼\ô†`ä�t R¸Ãˆ[�)Òºƒ~™Aôk'žQH·ªanŠÃ˜?: ÕLSG?æX¿Ðõ#ìº»Z7<ì¹ßSÊ°?öÅúßïÕØQ?z³Î»öÏ:þÇC¾Î`SŒÖ¢t­ÁŽÙæ£�þÇ	;É:›ÍµùdQß×N—h„KÐ¼¾�’ðxx¶„6Ž�‡	¡%Æ÷¤»òdy†f‹GÇè©J4¢S�y¹Ã#óòI‹—ÈÚºz1Qõ]™y<8B®´0<¥î%oöÈDSm+’u
+*G‹�À¼8¡ºÞ\VO‹}Õ±‰7jöùDÉ|<ä«†³×ñk ª”iê[4v8›½€ã!‰a¹¨¬CÒ�ˆà-B\˜¡xôú{ÀlÈS¢ßÂöƒSõttÂ~ˆ�t´r!(Ž"hÃÉ
+v	�©—¦p ˜§‚¨…~<Eš 
+NiÊ @ptÛËÒtE6{/cètÎ#$5Íg;½�+e3Úð2ß::¿=gßIIKÈá„/Oå0%QÄ'…²sæcÕð�”pƒv…²4ÒÏš�Déºz²!«M×Òqð´F*]FRÉ•UçHò,Ó‰CÍP%61š²*Uª“L…e¶§÷Ò $ª—¢“¢#(stuä#Ìè©�KèûT¨jcÚ¢–U-Ó…¾êh.T"Ë¤TL‚”Œ�YóÞ~r%)%~Þ½YÈ!J:„¤¶õ˜�6 2^dçõ0r»�[€üI 6z;à­ï"i üZtž�–…V@ýQÔ÷`~úU{¿éJ±6wÓàÀßf ”V"é"j¢|2Eÿ8Ü0Ðø=¢&Jë¡ÂšƒÞQØÄ0q„�iÐ]¤}$}Xt¦`ç‘ˆzpòHC¤1J‹Ñ�~Ireç´Ñi”†&<F·Ž\½&º�×2v¼XÙAü…¦¡Û=3›{6A)¢xµmíº!�$c–5Õj¿ß2Çùò ~]Ö¹¥ÓÿKÏ¹Íó~ßh~HØæ#aüúFÿºñòÙiz¥5�oõþ¾¾U§�’s‹¡ok÷¯c¤Íh­¿±ä|+JO�ø2€8úf©<ƒíª”ðIÛx®¼ÇÖö¶“³
+ÆÓ~º.UÙœþ|Þù~Õÿ@)b[ß¤ëjÉªQûáZôÊaçNJÚ­èÊù´lV6ö],9<òW£KÿÀf~Åôþ?�$„\qÅ'¢"ô£]~ùåÿ>ë_þå_ ×uÿû¥8Ž9ç„Jé‰DfÇq|ßÿSÄÈ÷‘eºâˆx LÏ(ÒÁóC‘9 /�u
+2Rµ<&OK\IƒP“Æ&íYlÚçK2Úžj|J†µRå$UšÇæ�DyØ¹CªL"&<ó>.ÇÂtÃ€÷q?ºªà}ºÙ»1cýÌóró�µ¹s=ï)ÃBÁtÀtd*`6é¿ú“™úÓ¤RŠ*ëUŠÐ[=yðZ+[ö�9!4¼î£¹TÃ¦§Ÿìó•Õ´0ní¨d¾à:¿°]D!¼Œ” �Ño#7Ê�°‹�	b¦‡™ý…l¾E(º-Û0CžÂñô�$ëF&·5gG+u}w^ÉÅÀ¸ÖØ´”y.G(é Èº·¶üOûÉikl.H×1�Ž™5‹‚§ïIe)G›ÚåX¥.Z+ìcSÑzJˆCÓ¶@¢Â%Öìt¼4PÝÉÕäAN‚fŠ®G–4Õá`L"-“5Sò‘Õ<9¥§v	Ä1fGÉ›4(¬YqHÞ1IßÚT»'µu¡$ÆŒTz—”�½�tIÁØÖLÖÙ÷µãLV³ØþRö“’‹E^öÃD¯=0¾ºÚ›Ó¡;	ŠËàOaà\ð.dÉa¡ô˜‹Ö&Du¤!Ú³èv/™ï~­‘¬4iìjGFòï0�ç³%è ­Aûì’>F<‚f¡3MGš@I0‚ƒ„Á
+ÇÝcXˆ(‰~ð:!qzº¥ÿ¾¾m ÿž¹Ö�ÅÌÿÓ¦¶`¡RŽm>æGWJå´“³äÞ?×û’«oŽøªT6‹á/kDi$M¤! P€Ù•¼À ‘$’NM´ÆtûxDª–§‹gä“‹ÙÅ‡Äc#ôœÃâ™ˆ\,ˆ³dÂWÓ!æšêéô/gÔc
+:<€„˜.“ÓMâ–´´'‹›v‹Ö=SÁ56íé´ëèÛi›ÚŽ\öÆVç‹yïs„Š$YS(ïHBØ¢>*‹« šÞGÒE~5Ò. á.GÚ³ 9‚£`&z‡A5~a¤Ûÿ‹~üÊ_™Ñö�_çfç(…�O`ç  Åa—àÏÃ�’`&’
+kÑÜ‚¸oq­£\ƒ°f ê
+„¾´ØzÂŽµ´Ýã`x„¨) 8ì‡<‘¥ì#[@¯B¡`BRf,Çà•QŸ"i²Þq·¦)ªÍ»Gß¤€ùÚw2öO¥,hÚ!€p>�”¯üJ·}:£Õ~x•T^"–¦bÌ5UÊår@£s~rqÉ½±|Ø`‡ºÉ+JÎwüøuJ™®ñ!QÖýæ|ûÇ©võ§„¬èìh?=×5ž˜öÿ2«ï‘ÊÑé<À¸ô ’Ê¢£íe´#d>BÙ¡,r¥eX \9:ñ;|@'‚ÎHÒ^Å8ØM*PO›ùH8ör0ò—£ËÿÀfþÆé½<Œü_»‘ŸˆôÐþ;þêW¿ºñÆoºé¦3Î8CÓ´Ý»wêSŸºüòËÿT¥­Ðjrg…žÝT/8ê¢n*"ut˜žÝ“s:ÖWS.Éë„ÕÄq›5âš´§ÿ`¸Ì ¦T«mš¬N¤Êh;¾"QY©t‡Íæõ=ÍèÒ¬ñl*Kýä"SÛ[tþ±_¡±?x·gÿs¿Úuëà¢œÍ=e:°<¤ópò`&Â6ÈIW*jÙ©{ð»{äàbëÔ³ÅtMY°ÆA-¤„G "Pv	í#Êéò²DÚçKD÷æ"_Óõkžûí4~‰¯Ä¼(3`„$
+Ð:
+×k
+Á‘-„RÀrÐkMS®»íÐžkËå[‚`ÈÒvÄéÉÝä¢‚u¥M�MÙì�nÿÃc·-8üÎï÷Ó5”pÅe…K/ïÜ;,¯Òi�’>#A7])”>hß3¾a€Q°Ü±h­CaQ¿ÎM“èÑ_gGÐÇaK§Ô�œ`6‹©TÕÆ@	Ô±9<0NþKŒù5
+ÝÃJÞV[B‡�‹"´)ô¦è§Ã87nD‘­té¼¨—IoÈ¾‡�8o>ÊhËµ~I R¾TÊRš€äËÕÎ XYØEð ÌB~dˆ¸=³î#ªƒÎÁ]ø’¾ÃÌ!8¸¸Õÿø‘ha–©ŽÐmæ´ýO–²Õ˜sKÃ»™'‡öøMÄ}h˜J!R´« ¦�fýbÛþ-çˆ¢‹ãËÞ…•^oueèñ=û+g¯gì8£M×}°\+U6cþÚ4žÉ˜6ƒ÷˜ìˆÏ×g�§	¸�9ƒ-š¿mïïññX–5Ò§„3Ò—J—€FRƒúó\s‰§Ò‘}‹8Õ|A"%˜G¹à8¯žñÉöÜ3:¯|—²ºû‡;¥ÙÛŒaúêÃò6�h€žYW›u²´-·:drŒ¼å¸|`ˆ¾"Víö�³Géj„*ÒÐ è´=^]Ôw1Ú¡$b¤ó•¦¶óXuëxùô$Ý i	8OÐï¯Éí81ç0<ð qVqÅõPÞZô÷‚`¨�ð 
+§!žET…?]Ÿ!�„D¡p¹ZSNÎÉ²»ÓaNî¥¿L/@Ä`:4ÁxHô ù%H{ˆ;È#l€êèÎ!;f¢_ƒLa¸è7 u™
+â h:¨%¡[ÐlÄ=tj(€'ps`â>LýžÕßNè÷ ¨ÖáªXÙšÄˆý
+Þã¨Òñ?±xÉ»˜6z�B–çþnï£„$ÍúÕ™ÌO£èBÂ¬óÃ”¯b@cÇ™v(NÎiøSÎ|&Ë2Ö=\Œ3â[ÆÆ~üê_ÇhG�èÑ!BÒræïS¾¬—¼ÊP%ƒNÍú×­XÚì}É1éï’J÷Ìß¶Â« eé[ÃôB’3µÅ„PƒÎ2Z�ùŠj|ê�µ1•ƒÒUžÅú|¢-„&*/·ÿoÐìüëå[ýOó�}ìc·Þzëyç�g¥tõêÕwÞyçM7Ýô‘÷¦á–UÕÙè;ç\ýZ»ß§?§ú¾(š¢è)Ú¤WDIˆ%&Ÿ Mb$øÅhô3Á ¨‰MÐH4ˆ€AAD,ú¶ (Ú¢ÚS§Ûçì~õkÍæûQucòÝ$×ç1úÜÜ;žõcï±æÚs­ýc½sÌñŽwü7ÅÈ�"YÖTOWÉFZ•+tB*5¦�Ç*\¢¡¦€m¼@ÝTq@%r`@£™Ju*�ˆ�si‡|mÙ¼×¢ÜÓŸñÌ‡4ê[Ú‹
+šÉö0Ú&$.yŸábÐ¶îM²3Šî—…*
+¥&Ó $²ÕE  ˜ÇK è®m„!ïÃÔƒµ—”öþ“½É$“ˆv‚¹ :xÂ@²„ðëá1c6—ÖL¶h&ø#Û¼7NÎæÂ¦v_:ðÐØ�ÎtLG‚£2¥ôkaýîh–Àù›»;Ýk{½íDá!q§ûÁœ¯£´_sn²(?~G£÷µEßÔªté?uçëÛkj;éƒ¨nr�TfÈWÌ&'µ³%c»AÃnz¦­ê¯öeIâRÈ<‘n¬úb__öMRŽUNÁÚr†Â(�‘qr™NÊ:¼^Þ)¿T'›:xFA,%WEj¦Z£ä¢
+9&Æ4G´ˆ^2J.²IÙ#CìQ¶~±Ù«ÐÁEF @‡ôµÖšogÇk´©”ëš÷šÚËI¶9Í�-¤iûMR‚ n<CÜ‚YA<�hYæ ”B¸ (®†æ„ÁFañ†ÝÃÕ‹V»Xƒ }>6Ÿ\Ø¯îG¿¿0sL{Ö~º%ÁtŽ4@ž‚2TÇ±oßW‹ÅŸáYvìØÒŸd (kkÚÎÙéËÖ4íFÒ|S£ù-Ï¸ÿ@ë¾ }³�9_>^y%‘ÅHå†éùR9a~¬cüÔÏ�¬/Y´áê/3ä²ª@–8·+�—ÓýÌ•Ÿ*¹Æ}ŠÄ0B,bíO‡MB—½µm˜*W	_=õÊ7Æï¹a¯»ª¡²§^;œ][!ÇôÔnÑ•û5R¤MjUrtS=ã‘‘2W� ¤R]¹W:C1š+½�¯'�¦ö£í¢u‡i<Y´î0¬,NÏ‚b„Ä¥x…—Œ‚.â6x¥P=ötÁ>€ÂßsáNh%ð.TŽd
+ñ¢¤!t†ö¢F›‘â™Ôçý?Ÿ›ýýfóƒós¿í7‘‡hO"÷·`WÑzJ‚jà)ü) h¾‚<„f!ê@·`xJ"nC3ûHz°‹ÐM p†5¯Èb¤ ðqQJiJ@ O!%ú-Xv2¶øï,[2�·Î¤�s¤„mmÍò#tc�¾{×W¤¢ÝÎI”ÍgùQaøÛü±®½’{e06ÉÅ¢8='JÎ¡´ÉÅâ(¾8H.!È@Ñ0=K*o°p]?ºÒ6žZRy›k< ÓF#¸ž‘~£ÿ¿¤¬¸úÓÛméÏRÂ_›ß©”Ù
+ÿ�Ñ~&GýôMŽ¾ÃbSE÷&�6¸¬qUó£#¾†‘ —ƒa~\?_Oˆ„Ï'|¹„1l=êgÇ¸ln¥ó`Qÿ¿±_ÔGÚ¶ýÈ#�ükµ�8ŽGGG;�ÎS^«RÂ¡µq£‹A“vöeÖˆfÂÔÉ”’�ŠŠñ‚Rf&ëm>\d¾«í.Ùß™ö?ái»lm{&étŽËz3=mÔù¦©?›óÕ”özñ¥uïÓi~Œ-¹c˜“ax¥-Ëzº>�<�U@s?ªã9y˜Eˆ·_KHžÙKe”Ö_þœ\v¸>áZ;~¬rƒà}€‚÷Ñ~Þbô_C0‹¹ýË;þŸÏÅ—¶¹0‰™¨dSíÃQv†Á^rXgû4í�Ré‘CˆBuØï- P’ÝÎåÊ�(E»õÃx®xÓH¹*:yü¡sãä<Ãx6N.¤¤Y*Ý¶kú¥áÒÕRV„¬EÙŠX×öãÄWÞµr¢vötûnFúV*†L:¯ |I$Íë©FrÜ€¹CÈB(Fçy6¬±9Î2�T¡8 ^¦ëc¹ÔíÊy@Þ^'§ÖèêžœTP!ö(H‹m2x@Þ¾‚þNWíÎÐ+“5‰jÅ˜•È*dÃ Ú+ž¢Gr�Z¥CCæŽùtÃˆõDÄWh´O C>1Qüxœ�ä]íÅ¡ê%iz¼en5-Ç•Á‰N€1”¡;	ÉQAq)˜�¬£‚¼%@(@à,Bw;4þ4¢6ü.3M±oæ§¹ìåkÚ\Äª;¨-rn!$ÐØ´©¿`Û?ÎóeŽ»GÓ°°ðîJù[
+BX†‘è&:­“r¾^c{ â:€ MÖæ|%%aš#•MïÄ—�”ÞGH’ó5„Ä�Ù×ùá€ó�Vô;Ã…Ov¢÷êt¾•žN KÆs~~„£íc¤¿/>¾® bY0H*Á,Újäƒ±òRÌUVÓ¨PZ$! ›¦ŒÑ–žWâžÚþÈ‹+½ó¿e&ùÜ÷W¤*M|ÅÂ¨�WWÑkºêU%—ŒvÔK&ê5ºrJ>ìbñ [Æ•,2®‘4–žM¡W;Ps¾ÒŽ~·æÞÔ®+½›‹•ÅÂW˜ÃDÂ´A)4i¯Šn#k!s8ÃÈ|‚Â
+ä}0TC{FÞŒÞó°Ga¢¿šƒ´
+a�oõü?ÒsvÇ‡­ñ~2_¸¬x�i<ÊXƒ’žcã«·…-˜.ü*c�’C³ @ä°+à”ÂÀZôöÂoÃ« öQBwÕqd4iª!hÃ)B·Ð›G¡Šî<ÊC‡Øpi„4AeQÍÖUõú×’H—ª (Óì‚8ZbZû’xm’mVÊ2ôç•²¢ô\Ïú~œm)?ÙêÞT+_�eGúö$=•�PÊz¡ð“,-výë=çZýÏU¼¿âbŒÑvœž™ðu¶¾�‹‘fò¶Qï3Qv²TE�ÜÒ^¡¤¤çZúŽŒ¯ˆøê‰ÊÛý/4äË<íµD,®X?lÆ—:ŸòÃ6%õ³£\mgÉþnÆk%o+�,$çT�'„*2Úm§'Xw‡ù¦L–¸½ÈxÃ_J    IDAT|#K¸Ò?–¿Ì^ë�£'ýŠ/ó·Í<öëÛk½ì²Ëþ“³·Þzë¿‰#Ï9çœ÷¼ç=?ÿùÏ“$áœoß¾ýmo{Û™gžùßü¤.�Õ˜Ú—VBiÎåµ%F’)3RqI›”N#¼•Õç+ù@‰u¥ÒfÓ#gü?sØ¤ÏW…ù±sñéýô4KÛ±´t�Îö9æ'	Y©8ß`lÚsn¦$™ëþS·÷AÛºW)¯PÁÂ$Ò�i.GÃ®Bä�TƒfƒÞöyý‡7á¹½ý÷ˆ¹NÇ:SÜÿp| <D´­§¾ª£v4E2‹¤)`Û»M}›A"‹šrÔˆ^ïü��õ^r©kÝi�s¾Ê²‘ó1Bý°BõÑkÛCµö£^÷œ<C¹òÏiº9¸æwdÇçô¦,Û¤ioÄÉ„„Ž}gšÖŸH²Í?,HÞbiÛ,ãé0;íåw­)š÷ïm>¡@¸*ét.õT»ú“
+Ä¡i˜¯Öˆèç«;ù’‚¶gX§\š5#ª¾T*�é"¶>R�FŒ–˜&`:4FÞ:¯îïÈÝf„IõAr¢¯^Û%¿R&GÍª‡)ÌT5òa‘«®BF¡we0J�q)›Ð«: ‘nð˜ßÏ7�Ç-¶G£íën¥œ’óåA÷sëûq|^Î78•z§Û€nÁ, µ¦‹Â0˜É
+Ž#ž�ˆ‘¶‘¶!Rø¯Ã(C/�PFE¿¿¹`}� ÓIêPKAÌñ©W‚Ëf¢« ’dÇš&”ròTƒmÝG‹Ó¤Òé]G }ÿ¬ _ñ¼ÇLãQ¥<MÛ7Û¼ý@ãç\,2ô¦¹U¨ŠT5�N>îGW¦Ùñaz^�\Ò
+®vÿÊOÎ°§ûÅˆ/ŸKÎò´}�ýiJ8 u:]Ó¢XRéQÈÉ¼IÃÃU-)Ó²„,1s>ó:S¹M´Ñ“ƒ¡‰ÒØ™�åçEGyÊÄûžÛûˆöì­½iñ|Wî[L//‘CäÍ™ê÷Ô‹Ê¹µLÖjp÷ŠŽÑÍ) (±lÔýº4kä�ÌdÍOÞbi»çüOôÇ›cl²ï¿/ÏÐi'„}0;`z¨/ƒfbx5”„= £{…åˆ¦aÔp°×‡]Gë1Ö€èÈ[Ð(l€0\$,;ÀhoHÏ'£·Œ;·é›“ì4CßÙö?UØ4At„€'`˜ŽÔG!!9†ÓAã%ˆC« ¥�ú(�@)0DƒSAÔE¯ÿö8€ß„åÂoct=DÁA(Úí·«ˆ}(×¾U)ÔÇsËn3Ö‰ãy†œ¯a,ûUÏù¦çÞ¬”Õ	ÿxtøÃ
+: ’dsµx­’š¡oà8[£ä¢0¹ ïŸïGï5ôýðÆ‡Ï²&e	�óÑ•eçËR¹E÷+E}›RÖpõ­–þ,#~œ�ñu¹¬élŸ¥?W0ž8Ð¹])½•6Q<ØQ¥|mÝþž�S{ÅÑ‹òus¹ðµ½ä²^ºÅ¤s�ôŒÅÅ�Je+e@‘ªñD˜o”Ê¨š?)3(£Þg¶ðKóZÙ¯xüZaÂû÷ŒRz×]w¢û7qd§Óùà?øÝï~÷ [‡1vùå—á_8ÈùùoGþM(aÑ ð¨gé²ÆLV5ˆ ªw¹;¬÷"QS eý€–Ì»úéy±e$¨«½’ËAJ".+¦¶O#-Bb×ü‰¦í&$bL×^Õ�•!4gM‹ti
+Ja{0XEDmè6”€]EÔDi)²dŽÒ*ÈÎ$Óà1¬!D“Ð<ä>AÚ…f!ó �Y´:oEWqåú¼fÒÜšÇxEß®Ñ€¸æJ1.ÝMswœ_¼{nöØæƒ ¼2°ëÀþ?wí;)]€Ò¥¬õ£÷Ý¿µíI²¬^cêÏ.×�–ÞÓôÿÒ3ï‹²“-ýÅ\,²BH®@ã|�FûmFùz�vS9$”ÙäÆ "BQ©/ì‰×˜ÉéÈF�X„r@*Å!æåöAzD‘"’lAî²É ƒÎ‘ì—ÿ´„¾ë€ü�GVJðLµ Å`›d¨«ž"ovÉà¼zª€•¬LGº²1®×æy¢«@™EC©Ø€}W?;Õ óŒv2±¨l}Ç2žäbi'zŸ©½^+~4NÎÿjkþ°úðKý6ŠÕCuŠNJ^ð& f#œ‚YOa œAa1º;!9x‚<…ß�¦aÿìC1_ÝÃ¾ÌcÕ)’�²WÍ{Ùæû› 9 Šî—›½¯xÖ÷uíÛ~’ç…Nÿ3š¶Gc
+Þ÷{ý÷R ÊÐ·GÉEºöz?¾’Ë�ŠóE.Ç(ñýä’…äÔ!ûî\Œél†�DÊ¥½”¯D+Ûè±ùªjÍ@Ôl´;•zÌ P&�áùÒ7ˆÍ@+ZÐâ. å­'C�óòù2Y³ò¼ îÑ�£{d°Ñ&=¬Þú×1Ëªj éày€*ˆV…Ø·Šm™{ËtÂ!,�Y�.ëÌfŽK­²Ö`4`$²Ø«\™ÚËž};£sB:ÎVÃÏ!(e`^"ƒR „B³0p‚= & `TáïÁàiwÃ€^F2�¸g­çÅ‚Ö$’d¼ã2ãËzùÑMn®õ¾ÛË¶˜ì@ÍýœmÿPÊ’ã´uÉAxJ!OaØ‡nþ(;(~4±ò”áü(ÃFiýiä	\6šsë«õ—)C#
+kŒµ¤4Ç×¦½Y ‡$ëü6t<?ÈXÖ½RÈÒµšöFÿV©ø­^ÿ
+�íæ|Í¢?7y¸ç½Øj_•ñõçï‹¥ýÞš$;M*Ç6ïot¿9Xú9_¥”¦çèl¿�µ‘�Ëûýw�d:Û%U1LÞbj;¢ìBÒ\,.»_âw¥b©FÚßP¶~ÐI.ÐÍÇŽ'3­Ÿ•¬ï4‚ëQ¯˜�—ìoõ“Ëâ|½­¿4]0hn×él.‡•Ò|¾Â¤}®ìñâ÷â+ ®ÑV3y³I;–¶?ÌWSÂSY¬›¼×?ÿ—‰#o9ãW|™¿}ög¿11¸4M¿úÕ¯~æ3ŸqçŸøÄW\ñŒÌ²ì†n¸úê«9ç»ví°bÅŠÍ‚ýï‡‘,-S&@’ö…‘ƒë>@5âoK¦'èñm9³ÊR\zB™&ëè´ÅHHI •í�„Ùf€2Ò¥´giÛ„Éå£ëŽ��/NÏþ­mþÌ¶îÎóŒM1lÏyE
+Í@ìCJ”‡Afw&ó£6¢F�€’4zJ@s@@!“CEë  :²òqL‡]Çþg�eË{ÁGç¢wÅú™Š”A¬2#Ö}®q¿¡¿¤i;“ôÌ‚÷í8>M)‹ —Ê‘ª\¯ßÒiŸS©Ý;ß¸šËq(­Rú¨\m™%ééŽõJûÓ­ûJö·3~XÌ�ÊÄ°Å&c«Rv3þíDV\6—Ëb¦�díM*‡€Ïeëô½}¾8UÔ 2‘D@R�Acn!é«6Ô«ÎòF��´åB�p +¸JR4}õZŽ~‘V!ëvy]Ý°š|´¥ž©Ñc”âójk�œ\ #´šæ¢dÑ„+cß¾\Û ÓD#I(ªCÖOËÎ—‚Oˆ¢u‡©?ëÇ¿Sö>£k;Óì8×{˜Xt±è®-�QaHš0K &DŠhÎ 4 ° Õ±{+ÆÇì+QtN3¸^§³€¶=8¡Hj9r�ê:É‡ìï+e:æ}I~¢”®Îö;ÖÝ†ñôBç;žýO¥âísk›šÆcŒ¶[½Ïk¬¡³]Qv¦ÁvÆù	¶ñˆŸ\H�Î(h™XJIñU<W“6M6(¡¼‚qÿTø¡¢¶‹«E‰±HšpX¨@báø2^bMíKÆj;4#�3<tH™ ¡êY¤@A¹ÊçÔã*6†3t»j»EF|õš…¡›L”±>C/GOC±B–)ÀWÓ©Iê)jqÙ|(K„*ä²�Ë‚FcWÛÙÎ6ÕŒGk…?ëG¿Wt¾!Äˆcÿ Í6iÚžÚð,€4„W‡áBI
+ªƒHûP¥eÀ[½ Y’öô
+¨‰`'dŠÞôæúK£äÂFð§úlf+¨Q#áÒ*Ï:Æ#J™†¾�’°V¿Óï�9Îti"‡’è·P¬¡Ó@uVÝi˜xz(¡èá`a7Â`ùÀØn¿Ã¥ÐLè&¢’Œ�skð[°H"di¥PêD²l½ë¾|�a›�ÝÎùžww³ýWÕÒG-ÝöI”vÂøº¶€cÝe»ý……ùÉ[‡*—uýëLý%B‚‚wK�%äPšËH+Ë‹Î7ûÑïºÖ�ara&–1Úu�‡:Ñ{
+æýŒ6\û¶(¹PÁhGï+š÷5¢÷Xw$bµNç¥rýl£ÁZ <ãÇxpÎÿL���9·…Ù±ŒDm:ÆÖ8?‰ËZ,i$Le¥l<ÙËŽ-ê/4Ó«Æ¶~~¸«ímåkJÚŒN:žùó+:WÿR9tî¯Š‘�ÿ0’s~óÍ7êSŸpÝu×½ç=ïÑuýßpvÃøË¿üKÇqÊåò¦M›6mÚô ÈW_}õ¼óÎó<¯\.ŸuÖYò`Ã_à¯ÿú¯ÇÇÇmÛ>ûì³÷íÛ÷/ãÿ#ÿ¿k.1ðI„Òr(b„¢Z2iç‹NòÂº1;¡æ²h²F¦LJb‚,cRy¦¶³Ÿž+•[0`éOëtZ)Gc{s1Vqodt¾ÛÙâ˜hl’Ò¸P|Z×§-ë9ÓBsþž!êÃ°aXH8CX±ÙïýÁî JÃH» AÜ‚äà!Òx$sÈèEP*GÞƒ’Èz°+à):»Á]0õç‡œT eš/R�‘¼™œÕ�ß=Ùù^£óÝntU³óÅœ¯‹³Óô(=¯X¸¥Ó>Ïqîå(íÚÆC¶y_·ÿ‰$?6J.ˆóã£äÂ4;Z*WÈ!F;žñ@"R1¤gõÓsêö?š4P ±,–õ&m¥r¬�ÑÉWÍfëu¢º|	�’JQÈXE5-ªëm©Œ¾jIÕ%‡”["ŠÑèË U½@¦B)VŒ{ˆž9HNÈ¬|ÀÆ(G<B.LÑvÈÄœüI¯Ñ3-RqˆáQÊbªd(-	²ˆåjó;ˆšÃº¶þÌd÷�´ë…ë	r@äJ¹a|©e>§T†A)ú-T£²”½½HZ R ¿Á¬ò!%àïF0^í½°\ “·˜l§©íØž_¢uFH®²®ˆz‚Eù‘A~\�¼�"òó“[ño7ú_êöÿBgûs¾Ú÷ÏMù�ÎÄÉù�Î÷¹ÓèdšU°¾å'Q9¨ÑY“íâr0ã½| \íJr‹Îðóéñ¹¬'üðDj
+,ƒ™¬3’1 �é|Î„Ò	àR;àK2„&‘¹Ò<È)¨€¬ÐjONf*õ¨UÄGÌ÷ñ€!²¥FŽ+‘Ã¤è˜¤’¡K@JL·©Y§K—éË‡Y-U!¼™œñ¥±Êe�‘dÀþ¦¥½dŸ’D)§ìÞ@HX,ÞJHê8�Q'ì4yŒ¤ª!lÂ(�ÇÐ,¸#‡
+|{»¡A4èex+¨¶vÙÜŸYxó¯.š?ê“ÍÃ®�NzŸn 2°·à}ÁÓ·1�½µ[y©l>òµAº%ÊOäbñLÿóó¿Oi7ŽúhÏb~j;(A®CIôf`ÚÈ“CEkr¢WÁvvkœ"(Cä#‘† n	‚Ã+#ìaüH$!ƒCi‚$9Ãq_Î2*zM$:íË]÷nM‡g×°¶m?FgtžÒŽ#
+F–Æ&n,Xß×´Y×ºKc»3¾>K×p±œÑFÁùšT^¥ðIvÂÒÅ—‡É[¶W*7KÂìô‚yoÂSÐ:ÁŸe|]3ü@É¼Gcû‹ú–ñ´£?­³= g4ÔHW*K)3HÏ_\?±¬íÑéƒÍf²¦À2±:#”øeãg
+¬fÝ�ðe+ëç%X,–gÊŒÄ¢²v 
+´_úÿJŽâÛßþöêÕ«?ñ‰O|ä#yã�7®ºêªÈ“�Ü¼yóƒ>ø»³lÞ¼¹^¯ßyç�÷ÜsÏE]tÐÿíoûºë®ûìg?ûØc�)¥.¼ðB!Äâÿ�,Ry™.ê‰È ª#“æ±T³ñùŒ¨fzšPf"õ\Ù�+hsŒ„©sõçŠWGùF�¶ý™(;]Á
+³S@dÁý»‚ù#Æ¦êƒ·–J?õ¼;-ë)Ó‚ààù@uilZÖ½¡?Â4øíCeRÍ×0ÙÊ«uïŽƒ‰ †B‘v á­D8	jBqø{�ûð÷#`”A(”By)ÜA
+B’$?V)[#ùˆõS	‘)Ÿ+	G'Q*Fköwf“S21d§6Ã‡Ùi~ü.F›q¼©^»wîÕvçÃqzf–H€jt6ÊN�ò�~rI;üøPéýAzÎLøÁ =ÛÓ÷xÆ“eçïC¾$Ê�#\z…*Ê*j“uó©–˜Š¤dÞ<P½P2—ºBé/¥Ó^÷Hµ§æ98Õ‰©£è«É »æÕósò…¦z>Rû¨[	X„&jÃtËõU»lY"ËGéy
+j‘VŒÔ|Cìo‰¤¢í­hÍ'
+¬C�Ke�X?ÖH@HTµ~¤Ñ!†¥*ú–ñ¨¡?ë¹·áï
+·g %FÖaa7Z{Á44wÃð 0iV	
+p'�ùð§Ñß£³„<†éýËb³\-]º¶³®7<¤ª©f¢ÂF¶¾‘�Í&guÓóuÚRÐñ…˜�®´ÍÒ|#%Qœ¾)LÏ³�‡S¾"ÊÎªÖðÿF)G*/H·ô²ÓIR9ÎU%“FÈ×Î%§t¶Ë—å´]Ñ_ÊœKÞdÑ¼—/„Öä. `SsP ÊúþX¦
+°H‘+È¼@¹
+6ßö8WÙ”ØA¡÷ÔîWø÷;j[�.O±�£WÂ‘#ôÄ–z"Â´‰º‹Å1¦”’ƒä„ÅÚ*_Ê=â§U½­@öðíëÜm±¨4¹*OH¥;7+h	?2ãc!1cMÛk™Ïìýd9ZÒ•û_9þ éWwP\Ó$Â&Ìò!ŒÊjŒœ‰x­m`²¸8ÓÜ˜s“'è³uS_'·}^_½*JŒ B ³=:m»ú‹±ÊÍÆg´òÚTrL7ÛØŽ®,�p1Ú÷?%KB@ ú½3ú-:Äæ§—C!K é¨/B@)´vƒRÌì9\I´æ7—‡`:zÈSt²l©¦Ã´ÑÚ¦!‡Š•×ÂàJÚyF‘~ÿtÛƒRÌ±¿×íýQLXÖó­Ö{³ìØ^ÿy¾ªVý2£³õÏI1HH<?{.¥þ\ëB’fðÉ’{£½—Ò¦RvÇ¿žË!ÃØéXÿ<?÷NSßæ›ë…ë)Fº\Nht®Ÿ\âYwU)[›ñåQz†­?;üq/=OÊJ.‡‡½ÿÉhÈû„R:%ñ\ç6Fƒ™ðêùô„’ù€Îfúé©Œú i&çséØú“®ñôlûv›í¶îíñ�¤ÈsY4¨ßÍ×�§~é|¤û+¿Vºí¶Û;ì°k¯½öª«®Ú½{÷5×\sPvçßçµ~üãÿò—¿|ñÅ¯]»Ö²~¡ ôkê±ü¾÷½ojjêÞ{ïý?ü›6m:á„nºé& ÓÓÓ÷ßÿ–-[þ#ÿãÞjµò²N(WªÀ²®Ð<J
+Út7Ÿ´ž²¨À:ùª¥…Ï¾Ñÿ˜CÓšõ@ÂWe²¦“%)—å’u¯�ÏüQ&V1Ú’Ò3õýä’’ówiv¢¡?_*ýš%¡è·-N�""–§
+³ˆÎ{ï(Üt1Õ·1t4fž„n£¸i’CsÀ##÷Ác˜$- ÈP†î,(E·s´i<DW$Ùq	?*—õN¾bšïe0Ç´a	RÒ÷Je�Ÿ·“óL67Q}s³ÿ7\Ö¹¬ðþ<ãk-ãé(9D(eæbÂÖŸé§rYvô—¾ÌÖ^NÄ:Ïøy’.T!c
+Œ"3ØŒŸ¯+ê/§r$eãù„/’°ri´ßÌ$äû©ñ	±Š´žÚ?ÄVéDù"!PJBÎ«g†ÉqmõFW=;HÎŒ1«)‹»X`G�Á61 �$j¶‹çÉ›Úê1+Gèé%ZP º²WaEÄR�™¯›l!y;ÝÂ�Œgu6ÉÅ¨Îör9:>üÖ^÷rJ[–ù �uJ»¥jœF0�C<F» Ý�’Èh&úó9­](�ƒ™ :d†°q¨Z OPÅÔKE¯Ôo7OÍùj¥¬œ¯j&ïŒE9STBÍ‰Wéº²
+e$¤$ãÊéroEáæ\,R`i7;©bþ¬h{÷l6­³Ù0ßP³oÝí À|ƒvGŠW·Â�é´‘‰	ƒíÍÄâˆ/÷EyÀx%ã6›±´W	x˜ojçK+ú�¶"¾”+S#iO”Zbf™áD²Äñ¥ßW{éae–íÈ+bí·ïµj<mŸ¿ø®ŽX¯½3Q¢+§LRÔ”G&|µO YPŽ’‹ºê…9adµ·ì]û³kï“¬~xàÑZq]ÿ…nÔÛ‘¥XHwXèj{*öW•*t“wtªä|�‹E†þb¥º5‰¡à9ÁA™oB`ÚÈb¸Uô(ÔAÌ"x‚ÂbˆJ!í‚P(‰òÈ"Fç¬Ï~ø'á,¨gçÇ¼UÓ¥þÄ­s¯A Õ½“ÁµT(@eÖ)ÏÄ|�É&‹Öm½øŠáÊåy¾¶P¸+OÒØ´‚¦ë»ÂèR×¹Í´à÷Ž¬¿Ðk¹¥jH(ÓoûIž¢µpQ©tWšººòÜÐ�,K=Ë�gH’Ókõ;”-8ºíã-ëÉ¾ÿ{_MáÅžsGŸ-Ä˜a<#eÍ�ÞíÚßâwÚë¥Â§:½ÿU)~Lªr£óOC•KÓts;üXÕýL”žHK†Ëa.–ÚÆƒ„di¾1É�*»_ìFW3ÒMù*JbKßÑM.*\—dÇûÙ–‚ñp”ÍeÅÒÞ�ÊÊ5Ød+ÙbÒNÕ¾­ÿVÍºUÈÁFò–Qçæ˜I‘úùGÛ›ˆE›ä²š«¢«½JIóÕ‰¨WÍ‡úùq}ûBr
+%Âaóí|bÔúy,Vþ’·þªç¥ó·ýZuv,ËºôÒK…Âÿýì—¾ô¥GÞwß}+V¬Ø¾}û­·Þú­e¿¦›ûÑ�~tÔQG�qÆƒƒƒ§žzêã�?~0eúÂ/œ~úéÇŒ��­^½ú©§žú�üÿùãY^7vºŒs¥Y½ªjìhdãØÃH4Tø“¢6£”^Ó'+Æ“Ýï�öy­bo´ü[:[(9_NÅ2B2.–HY-¸_+ï®½Sˆ±‚{“i>äûGGáXž@J(ËF¡
+ÓÏ±äD8tfÐxÚ_\‚ÒJèr†»
+B` lÁ(AIðÖ Âyðiifº‹ò(8‡i<Fïlšð£h&«�lR·Ie?ßÓi+[žŠòLô*•s ýÀBrn??*—•šûÅ™þ	³½/s5`êÛ”²)í7ã÷Åbq*ë	_ÁH4Ÿ¼…€7¢+s9ÔÎŽˆD�‘0•¥^~¸ÉZ‘XF‘�ºÛÍ6�Ç,:“+³™“°©äÄTe¡j¤kË"gùÎUZÑhŽ¸ˆUj{W=ËuÕ‹*
+ª«¶µÔ™Zð°Ò@-E³£ž¶É¸‹å�Úi ¾Œ]ÐRÛ#•G*d² žöX'‘(³$“R¹½ì¤ºu—F€öÓ³]ó¾^zAÙý|n tN×^%$‡2M3V
+š)$a9Â˜†°¦¡?�â(Ú“HûˆðgÑ™ƒîRˆ;¨�÷ƒ¾ã8[	r.Æ±¶¨?ÑqU›É/�ÅSòñ�Ù�]ùk
+l:+I¥	ÈNrá|rF?;¶`Ïf3sñ…\,Q :�3èdÑxcöÏªÖ=€œé%ÍälSÛÙJÎ‰øJJr�‘XÔá…\–Hå¤²nÑ´›O,dGÌæ†Ãf;¼hA	ë‹rGCæ‹%Z¨�U3ò)®tC.©=xÉ¦´e<|éqèõKÙÛwŠûbÕÐQ¯8ddNþ\"“HJ82GP'›2X^?}“þÌ�…å'½µõ/´½ß]²ûîj0oäÊñóUë&ÒIÄhÆ7 pôgí�0½ˆÒŽënÝµÿ¡4ÝGB`{ÐuDAý (X8€â D«ÉáB¦ˆ[È¸£°�öÏ óâÈ2ŸˆN~?Ûñ{øV‘‚i ýàýù©ðÃæ£@¦¤CÓ=YÒHÞäh/lJÊZÕ½1ˆÞ¥ç…áIIv&cSQüv?ø}Ûúq¾€Tžß†e…itp!e$!¥~/Ä�å‚i! 4ðû'u:W>ÄùÒvóèúØBÏÿ³nû¸‘%O‚jå«~ou�CI,¤#Ä¨çÝÆ—ñ;
+Î?p¾Ü6.>„¿ëZÿœf'RÒ‘Ê=PRôãßUÊ6´×)]0´×uíõ ¹dÞÿ´�µT,ï„ª\ÒMÏž<®âÞÈAïS~üÎ0ß¬‘¾TŽTvÅ¾ÕÏ6õóJé–¶ÝÓöUí;‚ôÌ‚¾=+t¶?WšT.AÞÉŽSÐ,íƒ6(	Mm¯EgüüðÙx‹K¤ÝNOïðZ;=iié¬ûÈ¨µµŸíó‘_ZC@ÿU�_Î>ô¡‘eïÿû™«.ººG{ß    IDATè¢³Ï>»×ëMý{vpŒö/£Ÿ}öÙß\�’4�o¼ñ³Ÿýì7ÜðÍo~sË–-¯¾úª®ëBˆ��_ˆ8ÌÏÏ·Z­×ÿŸLð
+Êt!W+	g§Æb¢¢ù	cYùJ~ÄÖ^÷³³Kæ=a~rÌ�$�Ö‘ªØ?:Zy«RÎxmK³ûUÛx$ÎNÊó#9_ª”eš[»þõE÷+¶õœå!òQðõ!%<ý±-i"‹à– 9J‹Î¡·º�¨oiQ¦Á,@f¨¬Gç0µõè¼ÍDÔ„ O¡éH¢AÓÜZÈ0µm�à´ÕÎW„EêtEÚSû”\âKU LIW�(‹v$t‹M…é¹©,QâŒ­~vª”ž¥oÒ3-¶›Ñ^ÂWåqUu¿.d™Ër.‹ŠáêÛ#q–:ØÿNZÜ^puOdfvZ+¯¥*µ©% %t¢»ò¨Ë•2h^¡ã“ò!#‚y¤ÒS£eº¦¯vçè%hŒÒ-³òA
+�7Å<ƒ« Ów)ˆs¡Ú½„^^dYMÉÀlJú"&'µrk@_ðÅ QHÄâ>¯Õ¬^"êŽöRÝùŠRÆPácIvŠR†�ƒ:Ûg›÷§I!Žª¶³ŸRôzgXÞÏ ‘E8Hâ�ÅA„mTVÀ‹ÿ/)²–ƒîxuD hÏ™æÇÕë_MòãtmWÅ¸©]³ÜÚÛç«¹Ê#5O¡ÈD† 'Š9:Ž6_2ZéñRQƒv^jkÜz´¬«4?b¢ø‡û{_¨š"Ì“8¹¨?�ðõ Ée�ÀµÙl#~[ÝÜêçSYŠ4MU’Èj_dÑÐf3±Öz™¬%r0Tý!­U1Â½q‰Aßa„¡ÈLCÏ�µæè«é®:]sûÛf\:«ž…¡Lù-õD�œÐRÏÒÍ}µ‹«0Æd®z�’ww~´|éøºÕŸ¾³}<G¾Â:aÉÛ_{ýókjúB,+oä/.ÓŽÒ÷´WÂìä\�ïj;¤r±ŠQ?8=ËãùZÃx¼Ó\eÛ;Æš­),FÁq)-T‰ëO‚0”W ¿z‘ ´Tƒ]3Ð	`tžy1JƒùWD1Ä-ÅX¤‡çb±Rö uïŽ`ó SÙ`ÈšM*R¡Jñ‡6%´ñò•Jb�
+1V­|vßÜ–ù€ÆäÊ•G³„!KÐé¼£Xüž]@ž Pø™sç›Æ39ÉkË�Yîc�©3KÅ›¥BÐ†©?ëzOE=øþ;2~˜e<\(Ü›$ã„D®ó!êõêõ“s?sd™ÒžçüCš� ±º±-Ž/šiý´^ø˜e¿ž¦ýª÷É,ß äX.–„éÙ†¶S£��Êï’Ìµîª¹7p±È?`Ð…8~s?¾"ákÒø·-:]qnŽ²S	‰<ãá\,ö>··ÿ)WãB”¬;“üh�¶öZœ3|xÔºÏÒŸ&$ñd•«âLôN�Í|¹I{:m�¸7HØsá­§r1�¨¥Eýµ(;µ›žKo>³)êÆ³õþŸ!ÆoVÎ=÷ÜOúÓ?×ëõÿ*�íÿøþÜsÏ½þúë Ö¬Y³qãÆ_ÓÃ¤çœwÞy×\s€#Ž8âž{î¹å–[®¼òÊÿª)4Â	˜PE�v»¢ÒLÞb±yŠ´ÇWÕÍG¦â3$Ž(O›l_7½`ÐýœTå0Ýb±¹NòV“NÇÉ¹†öj£{óHåÒùÞßU½ÏéÚ+Ž;·Ð¼Æuø#¦!KqPe£³0aÛ¤€È¡›ˆ|ôf`8 `ÐÞ�,AžÀ­@w*Ë¡’&$Gw/
+	4ií½¨­@s'Ü
+`¹XØÝ€ãÍ÷{ÇTŠ	£+¥Ò}>n’Lƒžì½)yïQÆ¹ó<¬2;^ c‡Uµ¹TŒEbiÅ|l!¼Ö �¶±šËAÏ| ¿C‰E™¬j$võ½ä<W¦dýP*/ßm�4Ì�Š¥YÒÚÝ|‘aDY4 d:sJ&ŒÆd:P NOúmµÃÆØ[œ+é«ˆJfmœž–«4G)¿L‡gäó±jj§C–8ÏUT!G—éx¦’–Ú~Ð?)o+“�–ÉšTu:Âs‰‘C˜$s¨ci³®Åö’k¤×ÌÖ¹,hÆ—Yl¡—�ØL·´]›Õé¤¡¿ä˜?!Ô×µ�R9–íç™_¨aÿ®«<ç›J"	¡éhì†W†[FÜƒWC”BÒƒ]�é�§Ð,P¦£5»ˆiS”¯o·ßNIà'v²ãLÚOe!šA¨D-U-�P|µ¯›á²š/y•É€�¯M%'W´v_Zäë 4’ÓÇÝ›ƒìÔˆ¯KeM#‰P†§íKÄH$4??J(3“†Ëz¹²«ŒÍó¸Ìtƒv¤2BQ¨±�e-p´½*ŸÈU9Î‡3„uV­`]¢°�¿0@7´D_ªª�¨!_Xªm\ÍL…©jêJÖ�Í)Ú]µMC�ö•ÉF�x^m]J/-žöòü³š8ë¦n-ŸÐœÙnµ²¾¤ƒÍ±£Ö2hÇÏ7è´_·¿ÞŠß[2ïîçGjl`�Þ§óÇ ižÛ¥ÊN ý& D
+)tPAÐ€à¨.ÃÂë`: �‡�ÌBo
+’C·`þãŸÃ�?¹‘gÈˆnó“Çy±|Ü5îËøŠµÎ+óé	.©ÄÊïK?Sd…¤'(E}^§Sû;ßñ´×
+æ�5mšmùnÙþ†aìêö.&$ÉÒNœža$;ãéjí{~ïÈ0,Ôéõ.2ÍGòü0J»iv2¥ÎÃ™æ']óþ‚ó÷qr8%M;@é‚ßßÂØ|±ø=!¾EoiµÿXª’kÝNYC)'ËàY÷¸ÎÚ½OFñ…RVƒôB3;Qg{‡«—ô‚�ñ¥•âŸõÂ«56ÍÅ(W¶þLÎ—
+YŸš]ðô�EóÞ8;�’¾®í2Øl7ü`*Wœ›…ö³³šárU*êOR’‚ðL¬*hS™¨+u²Î\Öü|µ-–ë´1á}©_ä+Öí¹¬åª`Ð$’uO›ÌÄ€£Û{Z¤ZIÛæ«5Y$éåk_KgÐxŽ«r/_ÖÌ6ý¿�}S©TŽ<òÈÿòŸýFÎÌÌ\vÙe�>úèÐÐ€F£qÊ)§Üzë­ÃÃÃÿå³:ŽS(V¯>$wK)]¹råääd­VcŒ-,ü¢@uaaappð?òÿ'S´E¾Òy²“«‘Ì¥©Í¦lý¥8ß ÀÏ�³~®Ñ!y.‡¸,´£÷?¤±ý­à£®öüPõ=ÿcíð"×x8ÉN+9_�ÓSçga°TÊ* B‘Äp‹ŒÁñ´›'�,~,ê�è4fIqJ¢2ªƒˆ‚£»õõ ²Ý‡TxE0§„¤§ŒÄ‡SEÔÏ`Zð»‹c[?ø ”n±i�“éâA=mrF¡sø©½‘¿a¢–(W*ÌhŠÏëz·Ï«ösíôdJ‹á²±ÛOÏ2ÙT,VH0ƒ.ˆÏ0vwÒ³mm_+ÛPÕ_ÕYCÈŠI†Q±YO#¢ÇJˆA„AÔþ´–¨ŽÇ"Î89¡!_iˆý5ºh^=Y!”*dìD5-R‹TX KÕbp=,Þ©n$oZPNÈËûêå"YW#'$˜ç,tÔö29Ü&5�h¡†5Öv‘Å%ãùÂ±
+=ºª…=1F‰š(~tïÆ{±æ< d-É72Ò):ßèÇWjì@’ïÙß•²"ånJ;�É�Zõkœ#ì!M†«qp•ËSP†<Ó÷PFÒƒfÂÂîç6™æ³¶ƒ,?RªÒðè-&ÿ\×^¯[?ÖÃßKÄšD®2öíM<Zì
+�?e°[Â$Iæ…ªS#U*–Ò–ÕbQ*jûb±Øa³]¾x6|wÕ|*È×eDÂK•4i™@Óy,ÊžÖjçU‹ª¢6�©‰ƒ{‰SÙ˜MI‹J+R<ÍWiÉçèÊ~�TS	ƒ°\‰º!�ó%:ÊÄ£C©lïáÏÕÉa‘jåð{Ø®”(�ÕÉ 9Ó@¥©%,¨‡—±K[òu“Y(OøÓÞüü¾¹çVºÊ¬�>³÷óëýL¦rÌÞšŠ%¹üßÜ½w¸eU�æÿ®µv>ûäë†Ê9@QT±D	R€b@hÌ©ElíQ™VQÛHÓ&ºQPi@²H´HUU¨|ëæ{O>;ï~m÷ÌÓÝÃügÆÙÏùkí½ÿØÏÞÏúœõ]ß÷}ó ñE¯™œU´îPÐºœŸÄBsîwƒðÓxV×B)!t„@·¶a:¨Mv9þOÞ¥É”@“È¸3Ð�nÃ*#¬ 0í0ˆ!"<…iÕ¥@Þ¾1LÖÙÆÓþG<É…J5˜1%D‚ "‚@�«ø(à¨k“Á¹Î­BöøÑ¹&>ˆßZ.ß”Íü(NÖzá¥Yç'šþznH“ý”Myþ;Ýð™Œs_m›ÜBÚ¬ÎR0t}OùLGÏv¿	�4µë�Ë²î­ax’^è…ï’2Ÿ±îsì{cïmh»}žm?¥kyù­jã‡ý3ÞÇê£ ‚øáwQâüDž.ÎÚ¿ŒÒ5Žù”Ý¶Æ&m{7iu?ê˜úï¹˜Ù/ÏONùŸLe&ñþF(3g¼h±½¦¾ÍÔ7'éJ/>×Ò_ŠDWOæ¦˜/i%«f•.Ð½¿h�.ñ9ŒÄmÞïŠ™”ÄY6\pn¬ø­”¦Ñ¶IÇûH_wöÚv´ÁÂÞTöê´âóy-î¤£Ñ*YÒ‚¢±ñM®#åŸ¸éæ¿Û¿³m»««ëÜsÏýú×¿þf”ý—_~ùrö�Ü�?l‡^pÁ•JåÖ[o�3g€\vÙe]]]÷ÜsÏŸâyÎ:ë¬B¡pÄË@)5þüË/¿ü‹_üâÿªž�o›íP¸ec—£o9âÇÑŽOs�gö¶?8ÓyŠ *ñ9¶¶'•�Be,m"ËÎõ“Þ5sº–Õ[_*å¾Pm}7ƒ%÷k–¹Ñ´xÝš>©$ÕÊ[òùGÓ‚góí4BÁ-ÀÎƒ2€ ¬Ã.¾Á?(€ jÃÌ@p¤!ì<’ ¹¨ì‡™Anˆ†Ú>¤	2EP†ƒö$yh4/7´W¹˜Yõ?ðùå27–Ìp)�ª‰°¦vd0@å*,ÒÁ¶ªôi…º ‰
+b;Dw˜ÇHˆÒL÷ºf|¾Piò^�“z”¤ãIvÐ’ÊÞgút+«½®”Š>G;ôR@ÙÑ©RU‘$Œ�†¬IpV¬Z9ÚS—;é¼1¹µ®^tÉÂ2Y©ÁU-ÄÔ ;¦*§¤âIE=c²@ŽõÕþ<Y~d;¼¦6[è-“Õ)¹YhK�jZ$Û¡5žé1FtŠh:�SÒ&=Ñµ¸c]Ãÿl!ó­áú]YãÇxÐ¤ÊRÒ`´NH;—»_Ó1<zKo×ûAûHª‘‘¤G+eJÏ(Ý‚n¡9· ¯Ý€[Bs
+ÅH@azì©ò†±©ØMŒœíØ˜ÜcÐ1JüH,Le¶šv*(	9)_¥Ð³d°¢¶æ±hZ=ÓKÏ’HtØ%fsÅÐmì‰˜„éDR"mZõE§E[mQ0iJ Ž¤JqEóÚ”/:\6ˆ®P1›pJ¤AÛm^öd¤£)Ç;Y|•ØÄ8$ž)“£=5ÖAç7ä¨A\ eVØËŸˆ‹Ù)Z2ÃW£&J1€¦Ú!‘JÄZ‰¬ª©-Œ1½H{[Sqêr¤‹84¬pZÖ€ª .Õm8lD§©ì‰e—FÚ%ûÖV|>#^Gö‹”N·ƒ+\ë.B}BBÛÞÓl¾#ãü*[¡à	ŽDDit]ËNƒÐ3yýË¡gÐ†S†HZ�šB $ÒQI'�ÊøiÙ»ÛíªÞç]ó·õèÒ©xŽN0.†(Œ)‡hæHgŸ¹C('‘%“My|VÑx1oßÒßËHKgÃ~rRwþ“Œ�L7oè.¼[ˆŒ�q1K×v$é1qº&cý³TY]m¬²q°ç”0\aÛ¯NU¿'d©”ý¼TnŸ©”Ii3N�êíúXÛ�ÖW};!‘”EFÇlû�Vû³az|Æ|¸¾§»x)”5V¿«+w35v8JN2´WS¾¬ŸïO*Ðqï“¹ÏéÚÞ8=Ö6oÜ’È®’u7£Óaº6â³Y*[÷ÙæSqzL5|§ÅHJIäÏ5£ÞÇ•Q6oi/lÄÿ@·ý.;4R‰Ä<“'¢O(—€ëlò@°r¶ýšN'c1+£¿8¼7”¤CŸÒi½š,ÒiÚ¬Û˜°ÙžXÌœNgØ� ½þÍôìü²ã$).­|ÿÍôìÜu×]Bˆ™3gîÞ½ûšk®Y±bÅC=ô?¼ëÍä~ü+#3™Ì³Ï>»råÊ?\ñòË/Ÿ|òÉ¢l¬Gyä¼óÎ;â¢þÓŸþôG?úÑ®]»o½õÖ~ðƒ7ÝtÓ’%K>÷¹Ï���oÛ¶�1ö�ÿGïæ[F�7^H#YmÒZFßÑHÖÖ¸9Çy¢Ÿ¶¬§¼c¢Òeß›Š~ 9ëÎzø—QOñ=I²Z×v'éÑ†¾5ŒÏr3?nû²ËÔ^Õ´ƒ½3ŸŠ<Ä!<ïí–ù”�iD!¥Tj2Šæ4¶¿�v{U&³E3Ð¿‡žC¾2O�ëCkP(ÏGT� 8tQºƒv<e @i Þ4FF®%$HøR©r!_‹žTY „bc|œ3Rµ,ék©!…Ö×’-ƒØ\%i™å›"*0“™*Öa¼VO–ø’tèõ‰4;h·ùL¡˜/e†®(8È`®ýºF+û‚SM¢3 Ãx½–.h‰¤¤ÑCé¡>m^ E¢¢Ë¤ŠTÄA`¬“� �H³¤³*÷•é¼ªÜßÆÞ<–ìU¿˜~¾¡vúj¿…Þ™=¡\Æ®“›,ÒA¡7Õ9›t6Õî^zB¨Z†‚4‰SÖb©´
+G§.z3?˜ð?J gd¿Ü
+ßAI ±I!Žñl+zû`×*ß¿Dc#B–mû¡Vû3¶õ›4]Ji­oö£A êµõ ÉçÕMT§O*u>K€ ‘±,_3 …ññÏå²ßÂ‹û®FëÚRášzó¿&|¾TùF|²ÅÆ†ã=ze2íU{R>c’®¦Úæ�Yz³dæ¤Ü(‘–È±}Ú`[
+®R‹X“rçR³çp¢÷é4”®IâºÐÂºŒ]�tAª˜ËÚû’©�eªT(^QÛê«¹bR‹Æ®êjß"cæpš Ä!ùT%:1r$ÀÈ,vâNþ‹NrJ‚º…®×Õ7�eßÙ#n�MßÑTC~¨÷Ó·m•W/!×4ðš‹9ãêárQ»5d4d4ÊdÅ¸|j;wJîžÁ–(`Rì™­Ï&�¡4) d>ÃeY¨\§ûÕ >#s5:YÊ~Ù/²Œ§Ãx}_ßg½fgŸá8wŠ}0]xUäº6A…SBâ£]Ei í	àkw;ßÙÐšB~ á× ox$>¤@¶•ƒð¼¥”ÖMs¬Ñüð”÷yƒ�j¤ÞLN¨ó¼„�eb4­hÄêbÙƒ|w]2`¿ò9‘,tY…|iÎ|8æË2Æ£1_¦³Q‚ÈÍüÔÞGI”6	¸T¹8]YÈ~…ÑéÉú¯²Ö�BÎp�ŸÆÉq¦±©í8s�dtJ×&éÒœ{ýTý¶œóS/º¸«t¥ï¿Ý‹.èÈ²Öúf!ûµFûšŒuoŸÅhE*×µ~å…ïQ ŒÖ­¤|.—=
+ZÆ|¨âý—ÞÂåíà²˜/ÉÙw&|‰Î^oG'²—@:úK~º†@äÌ&ƒç�Ííô˜^÷+^|~+9¦;óÃJð�’ý«„ÏOÄ@ªòŒ„RY®ñœ—¬##­Döpéºú«Œ6ÇÃóúœÛ½dm fŒ­±è3Ùh#9&QF–MH¾(¨‚¾o,žWÒ<Jø§£ò›aä¿;þËŽ«ÿ~÷?�üÏõµnÜ¸ñÔSOÝ³gÏüùóÿxTý+#‹Åâý÷ßòÉ'ÿáÜ3Ï<sþùç×jµ?ÑÒøæ›o¾öÚk'&&–/_þÝï~÷Äßp¿ýö·¿}ýõ×W«ÕuëÖÝxã�³fÍúÏÇÿÝwóöh*³�ÈöÚ�7’,:Ë�6äŒ'S9�³îh†ï#à†¶?J—ëlÔÒ·Vƒt¹_£´fhÛƒøm¦þ‚”e)ËÅâÏ†'~=Ðóv)Ç}õÖWú¯hÖNÐõ×Ü|
+RA¤ˆ£|±«é5`˜š;Á¡œ2‚*@`Øˆ}h&4ÍIzA4$Dò/bƒNã‡ŽïèÙœF¼c­ñê=E÷k“Ímm»—ž�ÈÎjZhÈñ^­÷ YG6Äh³mR" -54À–¢<É…â.µ%Ð”Õ)f™ð…–cÑá´±ÀâEëW©hÅ§'n�ŽXÚ“¢ÒI»  ÄJ˜„EŠwhÁDjÔÕž¥fÏDZÔ À¢H¯ÎÖ–yREÊóÔ¨�BE=§“<C&OLÉ§;ÈÚÝêïVÐ¯h6VrJîòÕABX¬¦
+dU‚Z¬&$x™œP ý
+  ‡åãƒôÌ<“£¼V¢ÝGâ”	`Ó £E_Ñ|Â`{ÑÅ­3Ú$à
+Œ‘¶FGS93gÝ$§Å|Qwá/m{¯Rhµ.±íû�L”DB²+W¥”¢^é°ì
+!ÈäQ�°,;¢Q BÁ‡n¢RùT©xýdåï•2#¾L¨b3]¤‘Èn¨ƒ;øOÊäÄM
+ƒBÓ�IÑ>¬~1�|œ€™$ßÅœ1Q³I�‚ØDgD¶¥°ˆ.”2(Z"à,Ã‹•4	µh¨).úÿpbÍ³FÇóRÉ;ç³Ëjr‚zž,0à™Þ’J(qXÞßMO•Jø`Ç�Šm\ßB§FL_�i°}3XUõŒ‰žY#6Õk2épÐaJ‡k¢ÜÀŽ²JAêt,5ÊÌ`D¤J7HH»ÇÚÜN—»Úë:SÊ2¯³	�Žjl„’¥-)Ë^|Î‚¹ëý&ë�F¶8Œ““Ë�·	ÓF³V,tÔMqI·Œ$ ¾z·tÊÄ«:ßÙÀ“‰ur3Ö@x‚#ŽÄR€s‚$Yz°º‘Kg ÷…¡Ö7-Z™J»LË]2O åˆ…
+;X[z]š1Î½uÝÆ7™ìp$æ¸úK€ÌXúKJe5m’§i»ýð’„/s­V0RÆ§|©¿ÍÒ¶ú«ŽýÛfûã¹ì|ÿ�š¶¯åL×öÙæcQ|zÌ—gÌûS1·¾§Ó½v¨ùãc¸ã%U†€Ô±î3­]I2�¦Ëã…0ú�íó£Qz´k=”òù”4…*úÉI
+ÔÒöêt$cÝÛ>”µ~&§1:áÅo5Øˆ
+Ó‘èÍê¯$²·‘Îë2Ÿ>®=¡wÞXý×GÖˆ€Ê›,ý…„/KÅlSÛæ'ght*H�E�A›õL6ðÅ-ÞK ,êéÔËêÏ5“Ó\}kÈ¢W*f³:€@CIóZ`ÒÊ'ÃYo†‘·—ÿæ�ÄÄ»ªßøŸe¤ïû®ë>úè£ë×¯ÿÏ¯l6›AôööþÁÖæúë¯÷<ï¼óÎûƒÝù¿2òýïÿÆ�¿ÿýï¯]»ÀæÍ›?ñ‰OœrÊ)7ÞxãŸ£Ý™—Ù“Ê|‡uw%º°lÝ_�ß–Õ·$¢/k>IIÓONã²T°om¡&´9ös ‚"ÌZ÷Øö½<]%k;;¾Ýlžc[	Y–¢³éÜÐvQêúNB]µØ�°ÝÒ<E®Í)ä:Ðš†“‡á@IP†¨�4B¶Õ4[Ÿêí»
+RÂÉ­iè
+}hŒÂ°‘ÆH#Ô	Ñ'd'£ ÓØþšw!Q*úš|�'#tJ°IyBþ.Â˜��6¯}uJ¶HqL>b¨ŸlÐ»êb0"ŽÌÂ‘
+òÔÕˆ¬ˆ¶I2&Ñ|:ÔžåÜ½Ý[©Z‰F*ÊQG mÙ$`±r”„ŠÕÅ%Z]mï£'÷k¾u$MØAysŒÉcØW'åö<™«#&WÁ¤z"Æd‰œ !3©ÑQHP±1¨Àè†–Ú?¥ë'—(p UõüLz‰E2 LBp¥Jz5•nªŒ›LdQ€À¢U“�&²×¤£†v€"f´ó%ÝÅ‹S¾<M—€ˆŒ}çsýðùìß	Ñ«C”¢Õ¾¸�ÿgÎA)”‚¦!
+óŽÛ�HEåL¶ª"_×´4IK~piGÇG'~¢³^ü6])C*[A«&óz¬M“Ñ	âp„Š�|Sí8ˆŸtc½�ýY,î&gÚ¤£¥DY2ÇD6�oÀ=(¹€½¯¤Å;“ÝôhƒèGÂ� ”Ú#îÎ‘%%:_Aå¨îKá«:ƒqXÞ=‹¾ƒ#vHþÈ¾cCŽømª­er’�b†t5ÕÁIõˆ�—,0Q0Ê`P?ê'ïì%'�ªß™(§hIÄ:
+AªšsØùÏ‰÷Ï&È`ðÜ»>xÑÜiµq>{G‡^=”h€4�)0C(z¤2/”W; aØÚk¦¶]c‡›á„$ã	J|Ç¾Ë²F*Õ/ê9Ö¯-k?ÓGÌ0„è™�‘�Y7ß6l(…ØG Ü·•½ _½[}qƒaCIÍBÔ†é"	 „€å"	Q¯¬à|ž¦íæ|že>ypúµXv¦ÒLK•r¨¬/PÓ1ª3èj—ªQ>n’|‘¹9mŒ�Ëœ'z2lºÓùq3º¨ä|?‹Âô˜Îì_�7•òCù    IDATo’ÊR@ÞüMÖ¹µÒúzÞùiÊ—ùÇ\(üt|êgëÞ„/�ùr×¼/›½ctêACÛŸw¿Ýö?”Ë|Ÿ‹9­àƒ©è·õÍ¦þ²T™”/Ò©—Ü¯	ÙÙßkê/GÉ	Åì—'7å¦²˜7ŸÊ˜¿©úWíŸ)e)\tw?6:½ÑÔv¥bf"û\ãi×úåpãÎ²}K#ºˆ@äÌ¹œÑŒÏHUÖfÃ&RÊJdŸÏû»�Û«áÛóæ3íä‹|vÉzx<¸D‚&ŠµJ(Š%cK(f[l�©ììr¿6ÜºÎ¢Ó‰,&ÊqÙh-�E‰ê0^­%Ë ô½\e)ÒO„³ÿ¯eä‘uäÞ½{çÍ›÷Ÿ_ùîw¿ÛuÝú§:Ò‚³xñâîîî¾¾¾'Ÿ|ò¦›nºâŠ+þFzžwÕUWÝ|óÍœs š¦]yå•×]w�ã8ŽŒüyñ:?9q:Y=àÜ¢ O†»Ú��nÎÜhéÏUü«g®iÜÖ›ûTÊ—¤b�’¶©¿Äg†ü(�Nçí+eÇü(Ç|°â}Õdûlc£RVÂe¬{um�¦QŠL± ùD-Ô+]ÃP¨ŒY¶	�ò ¨†ÊA”PByðY:Œ‚"ÙbLGèÁ´1=ùÆÆýeÎçñ¹†¶CÊœT£.½ø­\–m}›—¬ÝgzY9Vl À€æÉÑ¡ŽB9*A0­6õ‘Ó[êp7[àÉ¶FÌDù\…ŒØ‡ä­KØÇrØ 9NŽ™‘%„ ûÒ;µÅ¡T‡ä#³é[Çå¶™/�†j2A�@+�…‰ò[x=‡ùeÖß–Í)õ|79™€újBA„k«×-ô¶ð*�V «†Õ/”èHÑ,’U	Bù†CfIDF7]N	©ˆ¡yFa"µa&…b   F„A½Hä$¨ÃêBYŒDÝ™ë¥”‘s¯ç|‘RÆpýŽÎÌ4:n™Oúá%†þJÆùmœÌ%à„„ŒM	ÑKh#›k•c3™—Ü"¦F—jÚAÓ’‚ÚNÓ¥Jeãä8Æ†«þÕŒxG*Tó)ê¥k,vØK×ynBî TSmKÑÃöò™ªzº›¼U .‘¥Z[�tÒy=æÞáx¶�r@<1—�Ñ”­X5\Ú3"�«�ÈÐ&v |�˜±
+Ê,G ¶§÷äÈÙ9Fa4Uq7+×ED@+j»D<@O‘›Jd¹c»üêú7Sê…zjIó÷'Uƒc·üÆ|rUU½@aÈŠã�Ràz™— yÁ]ãnÙ«äÙKN6@8wËª÷èªeMàéÆ9s?°[Å,¬gFo`$aH6Õ�ýüdûï:3ß8ÜúïÎÜ ±ƒ	_î˜26jY;¢hEWÿ«i„4B³¹>›},S �áµ¨“‘†Ý 4&a:04§�ï„‘Aâ¿‘œ4 8”B¾“Cý¶=24þ�p­ûÚÑ…õøÄ¬¾+3	D�wXcš»¡j�ËÇ\2WCv¶>W'�'r$¯¥*/•ÆH’Ñ·ébƒMÇ¢7glJEoÞ¾M)=LOÈ;?n‡ï)¸§”MH<Õü�k>&kmg˜—³îàrF”®É;7ÚŽ$]éÇgÙÆóŒNjÚ^]ÛWo}�±1.úmwÊç…éq”ø©ìÖé #1/g>ê''�¤ìð“Óröm^´!ïÜÀÅìáÖwMZÍO·““-m¿Ÿ.ËÏå¶ÓÕ�öM1_ÞN��Ñv2ÚÒÙ�ÆÕ‚1âsYÐÙ—�‘è*˜OW¢·h$$P¾ÌµCžè/›„Êx|!/Y�pÙ)•y8\kš×G[|†Eý¶p‹ZE*ÝfÃ­xéQMQ�e-F’NçGï©ýí›aä/J×þ‘“ù{j×¼Fþå_þåyç�×ÛÛûúë¯ñ‹_\¾|ùÃ?ü?¼kæÌ™7ÜpÃÙgŸ}Äëôg?ûÙ+¯¼¢iÚ—¾ô¥x`Ë–-ÿ#ÿ°öüƒ§ùŸcâÇ¿ed5|W,YmoÁ¾µ^ÆUÎÖv3Ú8°P÷?ŠùÎ�*ÁGcQìuÿ�Ñé¼{]Êç¥éŠšÿ™RæÛRæ4SßÂÅ,ÇùµaÀ÷+PÃØ‘+¡]ƒa!
+L?¼d`îÏ[Sà‚:®t;ÐšÄ‘‚’Ò…4'‘Ä(Ï@mI¼¸Ü½‹0¸]H<LÊÌ\é×¾±eÒøS’vk^š®pœ{êÍ¯RÒNÅœzt~•wÚ�‡ë=é¹ÔÕ‰â;$"_ô±_CV ˜IÞ3¢î©ãÅ¥ä+mìOUc&;7Pµ¹‹ìþK‡½¦ª¤C¿žaSwñgv76õŒ>›�•§ÁJäiy\ìàrd@=uØ%ý)8”Žó
+=A³¡¶eÉ¢™1!Ÿ(’c³dÆAyg// WO¨GzÈÛâNÈßõÐSCUIÐ˜VO”È	¡±H¯×Wû[ØÑG6dÉl	n À¦v$C—Ú-é3¢kÐb¥ð»Y™IÝ¦‰ÃÆ#ÑÅHb²éV:»Ç¾7äË,íõˆÏïp¿^õ?Srnl†—2Òîë:»Õº"LO´ôß[æíàƒ÷k–Ý:bø@q„8î3ÍÑvûËúm’“ò%9÷ÇBä‚è|ÓxÎ4´½‹¥ÌQÔüOg­û[Ñ�N7“ãŠæïç•õá‘¸+Pu‰Ä$Åò&)RXU<ŸÁ`Û;±nýH†”Æå‹5õ|/9/F­ƒ¬àˆ¦ÕæDU;ÈI9ÚÇUjû€x°Ÿ®Ï3#Q4U<QqŠÈ!y_U(tO‡j¸L�sI©)ÇBL
+„}ôÄXuµ[ HTu]ªj›5!v«_t’3#5f�»®~ßÆë8¥ŸþÅ¨|°DÖ¤hj8O–6Õ�¸j½ïîÎ{/ê¡Ðzµ�ºð—üE«²¹4QñOýÖ¨·=cÏˆ�•çzÒÍÍb{óñzpe$z3Ú¾‚s“R†���åkÍ÷šÆóQ|%^ÿœ;ê“¨5®øtšÀ÷æiÚË’œÃ°Þøà³ðªÈ‘„Úpó <Õ@€4 ¦A·PµâøT)‹®ûË0\'eG¿%s”2jÉ	R±¢ñJ3]¶;Ý2›�0%F§ÔÆìÒ¦œ0IN eÐ{tâ§¤q•Íh{¸ÌlŒ’V#>=£íe´ÚJŽg$(ZÔ£ómm¿¥í ´®”UßÙéÜ¤'ºæý­èbKÛòU¥ÌwvWïì¶69úæV|ö@ù”‰ú��²�gšÑ»)âœý«(]eh»„ì´ôM ÂäL�5£wÙÚ6 ÍäLŠ´`Ý[�.²´½iPZh5ÜP²îùÑ¶öŠ—œd²C_R¶oÝÞúä,s£­J|ü¬ÜßŽ{Ÿe$Êh»kÉq²`nŠø<ƒNl(àËýe?Y­³©FrŒÃ&X#í£D•ô×CÑ§‘@£-©,@N%ƒ]Æ°/zmZñD�E=Od‡Å+³´:II§R6×Ù6ß¡2ü¿Š‘—^zéÓO?]©TúúúÎ?ÿü/}éKo†_–emÙ²eéÒ¥Gä•kÖ¬ùÒ—¾`ëÖ­§�vZ³Ùüwô‘ûöí;¢�$„üéô‘ÿŽVü–H,Zo¤‹Bñ…¢ù8@„Êit,á³jþg…ÌõÞÙð?ãó®.ûSÛVó?Ãè´cß¥”Õß±6ŠO$c“Žûòtåí$ª�s²Î�¡´(ZgGO™jAâÎÎŸû5$I§®O·ê‹oo®(”OÀSd
+hM"MPîƒ_ƒï¿½Xü53P› J*ÓE× ?ü
+ìÌs·í¢Õ<3MG½ðRËØ$d1Ž�OÅ@�®Éš¿%$í1^o%ÇJ¥bUÄa#ä¨CòNù¶u`�D<ªîŸC/›Rókê¥u›ô‹ß–é}~û¡xMÔ»Îþ–½ýžhÆ1ìI¹MÃé>â,)LÉËää™gc\nQýlÍ¸x5P“Žê1ž#óLÒKLªöð§5’›R�%8f¹vù!±¸ª^Ð�R?gÊ*‘µ�šV·QXŒB/�£§ÕF�>äq”@\W¯Åjº›ž©J,óBE‰ÌÐT…´@KBÙB¡H¢D™M)0GNDgÀû\m4‘ý9ó�ˆek¯µ£wäÌ‡'Û_ìÍJˆž4é,~F[MBü–ÿ	Ç|„PÏó–Fñ¥â÷¢h M‡yºX�þLCßÆÓ…†±M)+Ï$$!!Oó;ä'—XÆ&SÛó¥Yó�ft±A•h}^«ˆs]Œ1ÙYÒ¢ýÉD�¬¦Ðw©k8ªOà¡,æUð¼.d]CmYÌ>>&Ÿ¤§î?Hž,wÉ¼�Ñ�C)UåD]`/ßäb–‡´÷ðW|åÌÕ–…’p2«æ+ò†2Y—ÁÌªÚ4%_S¿–ˆ{È9)µÔPŒI%Ä´zj9ýÛ1õ»9ì¯‹}ì+`•‹E2«¢~¯ GÕÝ%²Ö$�ÉëÈåÉbC�\¼À ÂB6Ã£¼öÂ}Ñâ�Üé×�¯ê™¾ÆÈÆÁx³¹ôï_Úši‹iTý�¬»~TÁù~Ýÿ4!R)šÄyáï7´W>p¹�…ìWÒR Ø±/ò¡™oÉU§Ö”:¯Y}3
+â|',š	f U�•ìÐ4´kp2‘;�ÌáJõc\Ì’ªóyít¥a$0­U«‹À îzqKMåhW[ÕÕœ©Í
+…fˆV	×X„²¨ß¹ÝÖk´bhûIzlÞÜè%'j´Ée)ä+\ã	¡\Bøtð¡ù½½i²Ä‹Ï±ŒÍ”zR–ge˜Š1_bk;R¾PgcŽùP’Eg­{¤Ì¹Ö­àý
+z3º€¯`ß¢±CŽþ¼Î16ðU9óÁv|%a*z8é´É+AºJ�V£v†ñ1_�µîcIPœÇRÙËe)«�	Ù©ÓfVß‰ùI
+Æ³BårÆ“�ø¬j²’éóÁ’ù<£W+é´ÊH=]y}W+]¨ãÄÊ³q©�÷˜J–?&§%ÑÙyã–®(h½©
+Å•™gTªLYép~ˆðMúìüoòøå/ùÿã®R©4::ºtéR!Ä¦M›>õ©#)›8RL}Cšøoõ‘ëÖ­[½zõÕW_}õÕW{ì±§žzêÄÄÄŸ)#Û|ANÛÊ²ÅZ:m†|‘P¹¬u'� Pr¿^Êü |¨�5à^¯Ñ)?>·¯|šm=œ&+ÛÁ‡&kwºîsŒ�YÖæ0˜§kûlû·¶ñ„Æ†¢ä”\þi¯]æbÆôôGÓÑn¯²ìé(^¦i¡‘ÂÊBJTÇ3%d‹ð*¨×Îîèþ5¡ðëèž­t‰�©¡BG?Ì`Úð`lÒ´vYÆŒ�†É©íà2!;Šö-#ÞÇ)R�N5EÑ¤ˆ”g’‚…Î@UzÉ[3dnÖShš�ý�šÎaq‘¬Ì‘%y,î¤'ŒËG~{ß?Ï°N9ç:-ÞÑ;s�aLnµô�Ë­R%#ò%ù1~0Bc�¸ÝA¿…î¶luÑe6éªª	Ø°¼;RÓmÕçQ‹»ÈiKz.Kdu�=›\a¢{TÝ9­6v�3Ø yOCm9¨~,àsøƒä]:)´ÔkÑ"íí{å³d@AM©�òÉIù»D5{XNöóŒÈ)1áPÚä}B)DÙl²`Ý#dÞOÖ)edíŸ[ÚË†¾uN×)‹	_\om²ò}¥ì†ÿW¥Üg4vÈ.KùâÞ¾ïMLÿ£aSŠVð‘ ÚÆëMë�“ÙÆùœŽ®'tmÝû¼R–|@ˆ¥\]ÛÛ//d¾-•¦k)	]}sF6éØ²Ì&šªdw²7…G@w¨¿]D¾�Áœ‡],Èã¨A¼{÷	Dñ¸Ü\W›)!Z9=A½¦^< îÌ�îšÚÆ`µÔ¡òv
+�f¡{”�ÈÂ"YØ’Ø.~8"uI!OûûÈÅ²´¦^Ê�¹ÓêñrÎQìË¡u1'ÆdªZL ¬ªí¡:lÝÃžr®‚œÆã{Ô7ÒIN¶ÐÛV;
+dñ^ù½Y®ÃÑQ`04X65[¼8×èYvzy²‚þŠ¹ÇøI+£iNÛ’„¹}É,®t�/žÛ3g:¼ÂOW9ÀU¹·ô¶DÎ¢$µŒ'�“ãË¥›{û¾-DoÃÊ`r|Ã‘¶aÆ@r¹ßë&ÂºfÆv^µÊ*ž j!“‡“ÇèèQ4ß÷gtÏÃôôGãä$Î!U¹§û¯#¾Ô6^°ØDÞØ¬_�š»XÓ&5Û2È�Üañ€ŒÉ¥Jòd`”Or QZ]Ð*O
+B`Ñ �SK–Ö““c¾ %/YÃUÑÑ·eÍÇ2ÆFF+Re\}‹£ï<4¹c¨öX3Y›ð%ÓÁ¢ä/>-äËuv�o¤q»c>Ò>h9ûÖZða@DÉI
+†Ÿc±ƒ:óâó¼è/9­¾/JNø¬(=†ËBÞ¼¯hß’3ï¥$2Ù¡¼ñûŒ¶çÀôŽáÆOZ|Y”®šŽÎMÄ¢vºZ£•Œñ<%Ñ�÷‰¬ñl->@Ézh*: !_(›5 è4h%ÇøÉšV:§–‰ù�Ô#Ñ/”V27ôm:§$¶X³¤×\–îk~ÿP°¡)¬�ÏŸN;š¼+’¶F‚¬vˆy œW´îõ®y³VtÐÿÈßŸë×¯ÿüç?ÿÄO|á_ °nÝº#ãÛ·oÿCOìÿ1}äŸ¾Öú?=)½}K"æ™lo*rö�ÿS9óÑ(]&atØÔvšÆ³Iº2óÎ�¦[×e­û4v€$áb¦”yËØd[Ñ�¤+%à3æí
+¨N�âØÝ"Â6x
+ÓAƒRh:Giv†+…$¡`GÐ…ÈäQ�\žq·	å‘iÚŸ¦‹u}‡®�qÞÅg„É©©èŸÑyÎTí&JÂÃÞGlÚ6ÙÔT2Ÿ+IAZªÊUÐÂsGÕÝ9²|\Ýç`ÐÇ�"Ö8ØAN©©É»’Ÿ}Z:¼I	ž¸øƒÕC�ŠíÜì€Æ¥g¿M“ºI@¦ÕÓ=ä­éàˆ[j‘,j¨}92»‹¹;øã9,"ÐR49<_àð—jWŽ‰m�:œ¢aÔ@ÉÃþŽ÷ðz�›Ç’ #õ;åC³È•†kêùY«©zº@ÌU  tâ¦ÊÐÉf�‹íÝtYKUr¤C@*(‡èE}(‘¥¦ÈDeX-£íÊÏéq©2Z¡Äó“S(õ¡XÖº+NW1ZÉ¹×yÁûS1Ëµ~%e9›½=M:“ô(¥\MÛŸ¤+	DÂäÜ H�M‰Ÿò¹azBÖºÛ2MÒ5�àÃPZÞùÇ(9Ñ2ŸnøŸ�*ËH3ä‹<Ñ¯	$5)|)(hCŽVÕ¦^ËaE[8v÷E˜îÄ©vwâŒi<Å`wàä^›A.l©×4äKd•EòûäO5¸y²¼ªž —Âêj›‹¹¦ÊdEKJPm«×‹duŒ)Ý92;QžE
+ãêwMõêlzEM½¬!3¦~=ƒ\8©r±0Ä(-�c5T$Ç´ÔŽÝ%²Æ%Ýä/é…[ä'ú°�«‹œPW;;ÉÑ1Úµk['ƒÈ®5ã…·6ýijÚÐoú—~z7	ýêö�ñ_Ïè´	Ó%
+ZÉ¾Yªb�®1Ø#�F|¶£íªPÎ|Ý‹.*å>_î©OgŠ�þÈÐG3ÎÏ<ÿCÝÝ×á¥×03¹˜RH	Í Ó4†v¶†VÕ‰‚›kÀ÷ ø@ÆæÍÖ{56Êùì)ï‹\9”¤6Û?ŸdR¯hn¬DoÉëÛ_º’­¨-d5WÁ°úçAúN©’~½[*¶�¿ØMW•´„B(PŠ´%
+6MòúNF“ñ)9mÌ •PtØ¿˜
+®H•Õe=ñù”„©ì �\¹�Î©˜�Š¤‹‰2ú–¬}@†7—ÌG(ñÙ¿‹âuÃ­ëKæ¶þ|Ì—E|©Éöû|%Eâè¯l÷˜ÿ™œ¾M£µ€/-;7Œ´®ívná²'äK)âXv1Ç²Ôeß–Ê	ŸËn�¶|>àjÃYãqí€we§~�’¸`ÿ<L�
+Î°6JX‰è‰D—Éª>ï¡D:lÂdÃ#Ñ‰ÖŒd¶ÓúÝDtZ"1ÃÜ™ÈŽP–(D(-�ÈXÑc·Çg3’"«ÓÔšËøœÂ•arêå�+ßL­õÖâßÿ‘“ùeõ«þtžæããã6lØ´i“ëº7ß|ó†ŽŒ¯]»öôÓO?'ùLù§ïk}Y)�Ñv,úÖÝ©˜òEŽ¶-³]óÑDÌË;ßb J×$¦þR¿EccJé“Á‡ÏÈ[6õuAt®Æ[æS–µ£Õ¾L×vúá;»;?S«ðˆçE&sŸR€:_ÆGn¶à	�À³œLtÄÁ™'°s û�š�8 ”Bµ~íÂ×T‡Ï;›±MÛ£ëQ£ù~J‚Fxegî“•Öõ±˜5P^7V{8‘�‰,
+¥%J—ŠÔd%CŠ‘òjj{[íÊ�9õ²‹…vG˜ðqhÎÛØ1H.g0úÖ çœWõÊŠFklç-ÝlÖ9Ó¼™{Ö�0‘'K”‘N²±jhp<ìOÑ.a¥�‘–Úî�Ùú#LÈ’šÚ–'K¦å39²¤¦6È±µ%CæÆjŠ@ãð,Ò­ =µÇF_[Ür¶…ÎS¬¥vÉÊãz&ÕotdÈ<�1j² R�>mÀa_C©8¸R2DcUöñ©ðb‡�§*›Ó_ŒÄÜŽÌõBá{	I3ú³ºv�‹Fª\vsÿUŠ.B[BtÑùŽõ R¥µZûZFëŒÔmóI)³\Ì.ä¾!¥aX‰×ZÆëS1;•ý~ºd^ÏŒzë›	_(TÎÖ¶´âs3Æ³RåÆƒ‹ˆE½Xf„¢‰R&W¤!k‰j¶°»©¶T„ÉyäªPµ°]G¹�\èa[íðòXÉˆ“Á`€±TÕËdu
+/ÂtKmŸCß[W»‹dÑ¤Ú$UD‰¥!©q�¸�:T"k#Œ%ª*‘fÉÂ@6HÙA‚fMmî!oó1D@êåò¶ã©j8”'GÅjÒ"}žÚc“>_°0C';AMªˆ€1’i©W-ô–É	:Ét³�’`G„7�ÆK\›é®h‡±Ód¹ìf´ÕLV›lÊÑvzéª²ýÓ¼û­Jó.»³Ö=)ŸíÚwd²[‡Çïí,\ÉXU)(Y²+M—˜Æ\ÚÖœme’ð<¡pKHC´°lÔkëK�%¤D«ýA)ó¦±¥î}:ïÜ¨ë;V6çŒç…,Ô’ãÚÎÏmm¯*³>„2ôÔ¨�a
+CG^"a0‹dÞ°üíBí/\ÖšL�~³º'RóM½-ºT[Š.-`$lðžóE[ß‹Ÿg±
+V*‹ý¥ ]9™,)ëc”„PäˆI(f—­;¥ÊùéjW.‹isÙaj¯O†ÎÊ]e™Gëwû|p ûeZÞ¯ÑZ-YY4¶ë´R�Oî¶ï±�g‚ø4©ÜF²6§¿ü/z'L$s:ô*#! mmo5^çK£ÏzAÈœÇçdµ½¡`$JUÖ¢“ãÉÌ¹™û¦£sºí_ðÞ3è<¨©è4ƒÓ©^Ö”F¢
+ÏÎË<è¥Ç¦2ÏHXç�VOT&ÃFÛ|`ŒWºX#Òa•P”=IÚjz–nqe´™Ñv}Ð;õÍ0ò–Â?þ‘“ùûþSg,×ëõl6«iÿºóX­V]×=’“õ¯µVÃ0þ;zžgþ<�XôÔÓ%;�5ž®ïø’‚ugÖ¾½”¹^ÈrÆø-sjþU”4 ÈTY–*3«øÎfës­æRÆÆ#~£UËÚ1Y¹ÙÐ·r>/ï~{tòçûWIzŒilNâÅ™,‚pçÍÖ‡…“õjÓ'úí7Y.¤D‚éà1j“E)q$I:Š¥I.Mzº:¯iL@H ð£s¡˜iF•Ÿ’„ÉI9ëŽCÕ'C¾�‘VÓû¬ÏçfõMmá$Ò¨Š€V—/ŽË§ŠdÙLzIªš†ZØî`–†L	Ç8à’ù]8«HpøÛ^ØøüßÎøÍ÷¶¾r‹•#³Ô·>¸o÷3‡,	n#ÏE˜j¨�õŠI²¾�’�‘P�èðÕ¾l~¤Æ&äSõÒay»DLaèl©²ÒWûZxu€¾-Cf0‹B�Qq±0‡å)šµ9TÃE² ›ž`tZ=cjû…ÕKWÛ¤s&[�§ù<�‘*ZM‹S¢bÚ«·ÌéEV3HW·„Î•ã°„„®ñ¬”îHûB’®ì_a%u?9Ã6Çë¾$ŒÎwÝ­®}{¥õ�JûëiztOéÂT²×Â²et‚‹R^\«}¤|B�e�[Š™oô®Â‹áE–þrÄç
+UÎÏ3Ò	.f„w[4â3Â9à©F[¦ÓbXAyšEÏÊbYk,8é�_9sù§·/¿Ð^4óüÓÿKnÅU{]Pèy¬Œ01¢îà5T +†ÔmFx7YHÞa¢<&Ÿ´Ð­‘,ƒ�¢ÉÑ2ÑÙÄkéUy²"Ä@$’$hyj/S÷Dj¸LŽÑ‘c°&ÕoGë�ºI‚ûjÿë&'Í¦ï­áymµËF¯A:ªxÖDy}o™ßËfhç(+›/™ÔÏ±	�¤•dÕX<Ç¦M‹Æû£AB8 ÇxrNùt‹$$¤ˆLý÷û¦˜ú6ÇxÖ�ß"ëÞçóæ\Ðö?Èª•!    IDAT¢èLÊº¾'N×(À4^à<ç–-«SkœtvP¨O`zü ‡Gnè¯ ¦…ý7šúÖ4]DH¢k¯®>áêÛbŸ/âJkñ2 Vç÷eàÐPq;É±¡§ö:èi©�Ãò7ô8_FÛ’ß»ÔÚksM'’EÂ¦í-võí•´;¯Uã¹V²¾Ÿœ5žöùR�i´Q‰.Èè/jDåŒ'jÉÜ¼õ@39>3uÒtÌGc>?kl¬FBQKß‹n?9®ËúM=üÀXýŽ²ó½ÁÜ_×Ã÷úñ™¦vH§S%ã•‚u{3YÝa>UÊ~>LNlÄg„|¡£²ô—Mí`%z{Î|Ò¦ª`>ZIJö/ZÉ*›MÒw�ÇSYÌé»*éRBDF-•¦/úzŒáZü–.ë�‰ð�³2Ô“ã½ô(‡UÒîÔÓ²ùTKºõ©�/i¦}ãÙH³Ìw´ý6›žNgô×R,ê§E³Å»bÅ\ª|5šÕ_áJ·ØX-9ÿÅbñß@¹\þC�$;ÒÆs¤[ç{ßûÞ‚ºººâ8Þ¸qãG>ò‘³Ï>û¼óÎû³{æ/ùË;'Õmk{¼äÄ‚ù¨É†B~l˜®Mø’frº¥TÊ¶´�1?Z×ÛÖc~t~gþ“ºv˜ IÅ!úÃø­yç† >ÏÏÑµC~t!%a˜œÞÝñ1Ç�Ÿt³JU èlc�à�†±Ïk/Ëd¶føNàe½öz'óºHA4-ŠB‡±T7áµW–:w1ê)…0è¢»í]žÏ~£é_Õò/f¤ê'g)8~rZWöZ!fe­‡¡t.fKd¡²„�@J“˜Sb$GfeÈ` ¦Úÿyï¬ÙU]‹Î¹ÖÎûËéä>}útRåØÊ ¡–@H²Œ$LØ€Á6˜çkà^Á€Á .Ø #@F’Q@	%”sèV«óé>§OþrÚy­5ßUÙ¯üã=ª¨[6õf�ûÇþ±«ÆØsÌ5æ‚Ã�ZLÙ0–ÁÍ&”#¨gqónúL·”ñL�f†Ø…!ÔztX‚ŸÇí!,ùp<�k«ô\‚í.íc`Ž²‹}ªùtÜƒci\Wd[ø ;sF>¢¡;ÄvêPfhõà@ÞÈà³	trx¢€þý"„yWðü.ì× •@'†f­nÍà@@`\Žn·õi1‚ª‰ÃY–³Y¼$ªMÚ—ccmªYÅå} 8ã€Þ””²YªbWŒÕãõH+B±ÕÕ‡r…]Ú‹ÞnòE©J‘œŒ’“S{½ÜhhO p�-Y†v¸¼'[5ÖfØkõÿ<LNN’“Lýµzÿó®ñ”©ï�óí[òîw¢øŽA#¸®/‡Zñ¶X¬ï%§,
+•Ý]e+0  ¯j1õ3l8¢þ"ÝÃ H¨–àÞUgdÞ¸Óßûøñ>°U‘8zè�ÎíïÞü‘ùà¡]‡é£x †°XÀ“º´€èT	eõ,nŠ°îÂŠ>nÂÓiÜdb%¢¥*<6Œ—{t<€ùn ®îÃQ	^R)\ãÃ±„|	¾�ÅÚÜÁ’	åžÓ‡.LÔé¹4¬ç˜6¡Cs��éÁ\ãìJ3%žn©  Þ VÉ»—£M®Îâ´6£¡)×'}¥õf ×t“Õ‰ØÜ¯2t¾djG„\SpþÑ�.q­ûlãi!Çr©¿m·¯6õWfÜK’Õ™ÜTà¯Š“mÅâÝ–QÈ“ˆ%‰î¦f¬4 ‰�k`Ú@ò˜+ó¹$É HÂv÷"æ�ÎBNÆSßíG—SCªè˜�•óú›ËÑù:r¢†ª¯¢/6ÕœCV$!,X@ÐzpÔ… vBAG¡$§¯¢ºôbådxÔ—%N=:]ª\ÉzªŸæhGêÑ…HF rµx›Å‚ÈRJ[$H;Ú¡^²žCVãÕEÿ=CîÍ«FbC	 *Q®ñ’ŸœÕ‹ÞfëB¹:“íd£P…ŒùT/>W¨bÝû¸R¥²ó]�·{É©¾ØŠÀ"YnÅ'1Ô9�Òˆ2¾±Qw´Y k>Ü6f?¨óF$Ç9 jÅ*#U9Vé@®røR J¾Ì´¤�(3«ÏvÅ„ ”¤LÅz¬Ÿlwø\Wyb„!•Þ”y‹�P.Ó¼Ö‘i]m1>hßsOô³×Žÿ¾Ò¼
+@ûMpWt÷ÿç‹þ�Öô‘_ÿú×wîÜyùå—g³Ùl6{Ùe—�wÞy_ÿú×K:ñY"©J9ëŽPlLÔ°ÁgrÎ÷C±Öæ3R•b±AãÇRöO‚øÔåö†‹7{FgÅâ†=?>?eÿÄ4ŸAË7IUÒØâšþ®Rül»óƒi.ô:÷­¦p{àŸÁù")Èæ÷ŠâtÝÏæ›†ñ×@Jˆà¸)?‡ª‹»*Ã7ª;‚ÀŠ#Ó~—ÈM»ßÖ4�a§RøýD®BˆWOî*¥¾Øô>aé{ÛÁuËþGýU"#TŽ'¹�6k£BŸ–¬˜P".¬NÁ	~
+×X0Ð…½ƒx¡Ócx}·&àñ$3 ÒÅ•¦	(�ë]œ¬ÓÓevF
+Vgq«†®Gµj1´\œŒ Þ¤=14Žª•ÙiM©Já˜Ã)XÇÀ4¡ !´`¨M»	dÏÐ¡XÆ‹§é‡ÌÅÕÂ† èÓÑ%z¸GÓÔß° AJBl`ÆÁ•Í&¤zRÓÑµ ¬!IŠ–äT[¸6Ÿ×Áé‹µ‹ñ
+ƒ×$1EÅ˜Ï�éíx{Åý–Á–ræý�8!›²Ö=)óQE¶_€axq½óM¡†9«iºv�c«\Àt¶À0B‰lIv3¸¡ü®Æ�K0ýðÊº÷C;@À+æÓEã`Þ|– [Â.‡]9	‰¶ªÙ Äôá-†Ö1ú®	Ó÷VãÈõ_;½·wäågxÛû/Üñ7/¼þÒ3óê�¬aYƒTm}’Ù©ƒìb¦	¥ezÄ†¡êE<ußqŒ¾Û£7Ø9cð;UõÄ(»¸‚;=:‚ÀûtÄ£#15S¸¦
+�æps-¦4Èôéˆ3KtŸ /†ú4}Ï�ñ:.L¢¿ÔŸ§;,ìSŸÃ�£xÍ”úÑœzzÇm/håXñ€xô¨wiDQ °&´H–Cå P–÷B9šÒ_ÒYdñ¹¼u» ”¡“-‰VTt­»úÁ5Œ5•*&bµ®®Õ?KÀkÍ¯q¾47ÿ5]?šv¿µ¸ô—"†|Ù×ôÈvÂZí�ŽŒDñIIR¨×?�$ëb±)
+cÃ4¾`¯¦ÝïI*Æa|†P£±8±_Ø¯ÒX5V©DL£-4—,ë`M‹×òlå"Ý×ƒ#*‹›z+¼´A“ Ò¬’gåWYæŽé9›YGÃj(’:ÆÍèÌFRY
+Ïpxµ/R¼Š ‰Š,Š¾1øÁ¼ùìŒy;º¸b=äÅç-ûï�å˜k<©�¾Ø¤±–—œ‚ ,í P…¬yJcØþ¹Ã�÷¾T0iòeI†ÁZáõ�à]®ö¦Í�zb"¥ ¾²‰tˆÄÚ@Ž•­‡RÚâ´wC'Ù2l½ÑOv,…;cYJé¯&Êê‰aƒy“´6ëðeA©¼ñjF«�šÓiOû;ËÆ›y&ë6£³Û¢ÜHÖ§xÓå]Oºi1`=Õ%â è+ÓÖ3)¦¦Â‘¶Ì˜ÏFrò×fbþã¿¸þC#S©Ô÷¾÷½z½þòË/¿üòËõzýæ›oþm\ ðV•íÉY÷'ªÒ
+¯U`ÇrLã³º¶�a�¶î	’íRšþ§zÁõ)ó~ luÿ—kÞ‰c±Á4žª$äŠ£Ë3‰œèvßÉ±34ø™co^»P½Å6­7>›_|k3‹i¾šÎ>ëº»“8Ó¨¿CÊroe˜¶½èõì8Z—ˆ¡VãÜNûD]_”ªÒªŽÛö+Axy^‹�DzŸy`¾êÇçvº ÈÈ_{dêÎÅî·>Û�v"
+Ž‚ŠUÁæýœÖÏq¤fÄ>ˆ �ÀÒ¸RAÁROZ‡ÊÁ‘­cŸ`¨_‡SÕÆL�ös4%‰¬ÊãjÆûtÄÅa�ŽP¨ÆÁB`:äC¨!ð¼€,(s°x#xE‡�ÀK,·L¿$HFð]
+’˜z¦ÂÎàwhwös°8ÎÁ%�	t"¨20S¸JAL &ñ£Kto‹^šUwxt¼€Fø	!yi.{43¦M0PE¾"ÏV¶Ô|G¬mÒÞ¼ñÔ¤{÷R´…£ÌêGòÖÝ‡½w¦�§‡ÝoûñY:ŸÅæXEr$ë"±ˆ9F`¹Â1~Õòßß	¯nzŸñÂ]iëßÊ¹�Ñ…ýøÜ|êËD&¢ï/YÚÑ^rz?¸¾+
+û#¹÷×¼›2Æs{9ëß¦üssúî1ë5_Œr”žÔBê%ÔóÈS È˜šÐlNR­</Nš™{?ávT/ý½w=ýç…§>³êÄ­ç™–=€—†´ c.‹'ôèÀ Û9Æ®
+h©I¯†´„ ÅÐŒ æÑ±6ìåàžÈþN‡B‡¦hI”cjôáH7KðØ0¾KP@ xZ	O7±lÃ�„0ëFðjNiÃ«%vÆ^mâ@OHÁD/˜Sw{03Â®¸înã�?{‘ø4m"s˜5«žÖ›5‘
+Í—z2­Èh„—8ü¸ÆªŒ5sÖÏú*(¯ñšTù >¯˜û°\¨âä¤Læ	Çº»Úþ�kÝÃ°åZ÷6Ú_‹â³ÒÎÍ^?¿4w©H4)À�ÏÓ´yÆÚõöÍ…Âÿnµnê7æó÷	9ÞîýY»óS–³2HÙ?š¯?‹�›'2KîßÖÂËzÑN“uCU)Z¦X¸(ólDG½„›¦äÏ
+x:°Ø ç	(�Û{tdš~0£~Ö§FGµBuU°,Oy
+dU@¬t‡1ÐÑs¹´žöÄ É|WÓ@ÒQCCæOŒ3LjÁ�Xƒ ‰r|±Q‘ž7Ÿr�çÚáå±JåÍB9ÚMVÕ£³„*uâí�àZEn+º@PŠšÑ%D<­bè[üpÅ½Ùë"9b±jÖú¹É|Ic�!ûáXêØ‹Ä„"ã­³�PEý`ZßÝŽÏŒI+¯Ä*UKÆ9 ÉîˆR#:	€µ“U’8¬Ç«€adóªÃ¢!ëá@æ#åÚ,,˜O™ÈMtÖ5kÊZtv¤Š ˆÀÒ,LT™£ÿëžk%þâ¿‘FÞ{ï½>ø`6›Ý±cÇŽ;²Ùìƒ>øë¬NÿïYUÿý~rr9ýù@VÒÆƒ�é†»Û?(ºÿ°ØÿgSÛ�@KÁå½h‘®kSšvXQÚ6¹ÔùáHñ\?¼t¼t&g-C=’ë—«Aäh|QÊ!©†zþ‡³µ´øGa´Ôëàû“¹r7ëm§æG»úÝ3k‹§Vë_bPšæ¢RÅZç›žw%€¦ë3Œ�”C¦ùäPù–ùJ/¸~UygmCß+Ti±y¯¢4 )J·’›7X}Úw¨ò 0›$}ÉŠZ7�nóŒ9õ‹�ZZ
+×YPÜClÃˆC tÙí‡í"½ïÎu`��wP}e¿ú† ?‚>€|Zªà9)œpqHBèÀˆ€ê�ñà8½ÄV›PÒ!Û‡iòÓô	Þkâ;YÜjá ‰¹&=oã
+r	yÌ‡é
+^R§Çàmz]ÚkBEAäàD®„0‚†ù	vc	Ï`ÛDGäƒÍ:”ìNã¸ .ˆk iFë­¸.â­æÄ+ýuõðÒ4÷lÖåÀ‚÷Á‚i|®^3\Ô‹ÏTd¸úëû�-)r,ã…HLi\¨A†a%ýY�Ï;æÃˆÉlãáBî3Yë¶(>Ý6IÄj�ÍºÆ##Ù÷¶‚÷L¤¾}¤óÕ–÷©”¾;H6…rílÿ39® h)Ú1•Ì·$�‹ÙQm•�nž�'äp<†&‡”€^N
+½ðúÏÿîE°y÷ËO=ñÐ“W/­þÃ'ºJÓÑm‹t#ëcjrp§Ô÷êê…íPYÜœÁ�cx�ƒev†Ã|s@5Ó‹t7 …°0­~2K?ÍâQÁô3¸©M¯Œ²÷ÒÿUÂ�uzr‰€<žV‚³Äst[Nwa’@Í©ÛuÈº0Ö§ƒ4Ó89ÂvâÙ=:zËU5¯‘Üõîa XÅÞ#€*Æ¾õú)=9‘Ÿ×ú¡\a³˜aÂ0é‰U’2DN"'RÚaIv"Ç,ã	×¼¯Öº•±f"WÚÖ/jõ?ÑôýåìGÃø"×²+f?•NÝD×Ú·p>ãù7@Æùç8>1_:R)\Óëž“ÈÉ\úKQ  dh{•*ÑEQ|ŠR�ˆŽñ|,WDb‹¦ixŸIë¾,¸ÚÑvt~Z?4¤äqd)n¬æ×&ÐmÑËi˜D ‡ôB×§Cxú¸úE‡ŽÆä1àô‚ŒV50ò”Õ•yA¼�Ž¨$éGüsŒÒ,ðÄØrtâ±d)T)ŽQ¤Ê’Å�¬Å›b9®ócªl=Ô�ÏÌ™!CÊÙ?Lëû=Yî&‰ab2/RVÆ¼_g‹�X×KNjøïu´CCIÎT÷Ï,VMñº/ÖÖÂó§"=VÙP)Ðl–¤ø|¨ÒÕ¤«¢Á§9Fæî¾Ø�Ó_ã ’ô¼uwV«õëˆ"!’É "™5^d©'FÊZx¾Ã›¥~Ø?×faš¡'Ëµx$&Ž "å ƒNZ?ÊÁnrÂ¯�ý0~Cü—KÉÌ#¯¼òÊK/½trò?šèÃ‡ÿÉŸüÉM7ÝôÛ8�¼Üø�†]?>¿äüÈÐõã‹ÊÎ·ãåD®Qªœs~ ä¨¢ÌªÒY?¦¨”rn‘r,'”iàÞVïK ÌÔ_b�mß—uÅÛúÑå];*UE©lOXæ£BŠ2ÃPÓfüÞX6{¯nB¿wj>›®Ï'ÉX:ýˆa4ãØRª86ú? ’¢íLI	QtZ¾ðøÂÒw•ÊEÉÉ«Eb»¡rÍ‚øœnr
+c(B9à‹IƒõI<V€n oI(°•²EõB·÷à OG¨‡Và{êôT^ïÓôüíÛ'.¯÷ªÝÔ²¸A‡ò$w�Ut‰Ü0Û´Ï†!Â€Üý|€�—Æ1³MGÚ´;ƒëM(IuÌFT­àÎ%º¿	Ï#™yÜ±L÷KðÚð�@`:äÈIhð43 Õ‡ý1T»°w�]¢Aî}?…«1]cåäØDŠ9 °(;¬™Èmf.$|£3ª‡/OÇÙcVR:£ïV”×Y¨Ð•Å‚ùR,WÙ¯"()‡Óæ/:Ñ5&?Š –½OÛÚaIe"+–ëüp—c<)äX/¼¦]aðy/9‡c(U¯œÈþq3¼ÚäK=Ev Ë)mÞ—KˆŠµ/�ƒ…	€ÕSKzVB8ŒW.Á/ði.œóäc·zñØâëIvéÚég£çŸÿ×æ+•"žq¾•@c„íjÑ«+ÙÕ F sCìm:äÚô*!ÅÐöhº€[ð«ôºOÇò¸5„ÅQ¼ŠÙù<eŽ~fãxÍ2žÀJìÔƒê[&”JxV]F^`ZA’Ãí>L™0�ÁÍyÜÁÁ	`Q³q¬€ðEõ�€�Û8ºpûF††¦ÍJ/	O�VÔtŽ¢'J h2ÏÑs:k*ÊØúsŸµµ7¹Bçº6Õ®Ë¥þ>Jvhl±Öÿö ,]Ûo¯)r;ý?£“8k»Ö�©Ôî$)1v”óHâ^³ó Ûu~"åhß¿^ÓŽ1ô}‚Ôø‚REÃx™A`hÓar’Î�ð]“”ñ\(ÖpGcä´2TèrÃb"&Þ¥¦‚(††Â¸ÂÎ™§+â™MzIƒt·Õéñeu¸ˆ§òu:Új>´pÅ¾B	jlÃâøÇg3ÛºI¥�x©ÿh*·µaoŒÔÞV_Êš«±ØÕŽH•A`s	6�Dªbóz#¼<PÅH­¨%EÓÈåÇçýe-ÖÉ›�k P 4L4„P®“d¬;9î¯Ì‡ç™,²˜§±® LÆx¾'Ö•4aò&Ã$¡´†Ñ|œ0�Eªäðv=:3TN¤*5!m–µY·&Œv¼ƒÀ±™,op$†ÊSŽ‰LCª\Ù|ZP€§ôýsQÅFÍB¦±X’žÓ�te>Íã´>-)�€¦!U(˜Ot“�©/ý:óÈ+Ìk~C2¿;ºý¿vùÙÓ48011ñïÏ¦¦¦6oÞÁo�F"â²·5’¨²Áæ5lk»5ŠI†­ÌXÿ*ä(Ã^�œí�@"W2ômw˜œ¦±ªÆ�ñŽy¿T%ÓxAˆq/º"Ÿþ’”•®÷qÇ|�@w¬{Âh'çKI²ÉunMÄZ)Ç4~Lª!Ó|"ŠÎrÃN.ÿs¥ ‰=/²í»…XÇ'#zœÏEñéˆAŸI`ÙÆ£A|¾¥?›ÈµíðÊŒñh¢F›ÑÙ:ë.Çc&è+a£îSì«&"‹¨i@v™µp$ë;°¿Gûðâ,®8®îÓ0E †q§O�9*ZÅ.^T{5Huaÿ$¿ôuñ·.¬^Å¯¨_§W²°AAC‡�Vaë»Ô”eØ@KÍH2¸r™žfç6Ô~	a×Æä-Ó#xaš�ß1¡RÀ“[ô ±Ž©[+xa�öá@ ³%8/�kÈÎÐ�CX<…]‚ôU=„F²¸–ÀÁ”Ož‰Öaùã-Úïy*ªè‘ÁÚ¾d LÞäôÄÊ·>÷ŠôÿbóÞŸ(Òm^ËO„b}$‡^Í˜?o@P‚Ü¹¥*Ñù�ØªHGb�U£9ÿ]ƒÖs’RsáÆUÎC½ä¤”þšÁ§Ûá.†‘Á„ÊVãM	 3Irg¢r�f0Ði©#>Ì¦`Ÿ£Õ¡  JáÚí)á¹14Þ
+t<†æ»¢C,”àùtÜƒ£‚MìÓ-:ºD÷÷á�£Ùgjr4%…!4:´›@%ÐXÃ>šeÎ’œa™€4°$:d:´·€;êôlOïÀ>h·éµìÂ+ôtNDà}8„ }˜€KKxêÝºž}¢F/'Ôço›‘Ž²‹êôF×è`ÚÌl©z–#ˆ‡tHG æ´fZ­�]±îaØ'0»ñ¹ŸÖùq¥Òû§-ÿ&�Õ2ö�êýÏsì¸æ#[p�[«­ŸÞÝîýÎªÙÌÍÍöŸ¥ÝoGÑQr¢¡ï1´7ýð¶u_îj4›ú²ç_¯(c›ÆÉVD™IÝ Q´½¼�c�±f”ìÈ¸ÿXí|Û1ž�ë bâY­«´«ÍN‡£ÃFp<f¦\Æ{2žR?vpBP·{†ðòãtËJü�	yñ1úþFöÙˆ:*Ç†	È£¶N�8åÊöÜ³+£¦qâ_¿Ñx´\3Gúš¿Üwìk¢ÈÌhó1j³¾"Þ‘–Ëˆ£ˆÉHóZCTV:÷ö“mYãÑÿ=eëWÑbxiÙxPÄrAè¬®ÈŽUYcO¬d¬Ì|©îÐ&ë¬�P–AØƒmY‘™Òßè$Û>+T®#æ1Œ{¢�âíºH¯´Ÿ÷Ä†¬ñôœ¿«b¾š¨R=YQÒgT¤J„ÆzŠÌHetÚ2»Ê½­¾C’î)ËD©c$Èd(;’g8)b
+Ðb	2Û’êõ´ñâRpÙçí×É~üSúžß�Ì?ÐÛõ:ûñëz­åry÷îÝÿÏg{öì)
+¿¥^+9Æ¯8z«!F¾Ø‘uþ·£¿îhû#1%'šúKarŠk>àÅç3VOÙ?"2åˆÌHlAô]ënÄ¨éÿ! “j8ç~!£‹™Ïr>§T¡Óÿt6w�Æ§	tÀÄ¶ßd¬Îù¢T¥¾÷þLæIËøUŸÕi_…M�ãx»mßãyïCˆ]÷Ç†”CR•ú¦¾Ç1ïSªÔß¦(&'dÍ_ F^²¹`>Sª•¬Xa?[Ôh()Ž”aºŽŽ©ZuzÞÅÕ™Å·ò ÇÔí–\XÅÁêÒ,G£.gÖðKb6VxYØ©h5ûð({{—ªuxB†Ul,p­ƒÃ>õpŽFOÕF´‰®ŽÁ³`¨¡öë�.à¦˜ú	ôî“ß°a‚BÍÄJ^›RßÁ+$x Ê�ñx»S-ze†nÂ]iX·O~{A=i`†@„´¸H÷êèæyªEûûÔvÑÕQ;Q¿±§‚’¦•NTF’ÖWN-™	Ç4Œ3Ú” ­æÝ4Óûs—ÓÑóÄ BÌÐË˜¿"ÒšÁûóÖíãqÑLëÖ¶ÿC;È±#(ÛŒ·0ÖïÄgÆrÜå="„ãösÝä´Œñ´/¶Dr­­+Æú[êñ&Èq•P4­Ý*mœíãÀ8-„e ºéÎÓ0�ë¸mßuœ~ˆ€¨ vpbßQ£F�ÚX*²Mk´+ð’4¬w˜i@º€§Â¥ëÙ§:tŒ£aBZC{”Ÿ¸Š];Ê.g7 PDJGW‡+³�œ”Ù©)60Î¯œ£;d›^€
+^¸?¨(ÈÃÉeqËzöI `}Øß¤WÒ°aJý°NOdpÃ”¼½ÌN ­ jÑ>—™’hY=a£Êk,� )ÌžŠT‘Jï÷NYA-|Çrð;�ØLÄUòâÓúÉÉ^ôö¬ý#Þö?"ÉELó~?>/º†^Æ    IDATwYúõöÍ�ð*ÆõÖ_YÆ³"ÙÄçêÚ”ëÜ¡T¾|È4ö¥œ$rE³ûÕD®Ôµ#B®ê†×uÃ««Í.5~–ˆõŠ\IÅ^te?9£ë8e>Ð‹.6X ˆk¨,>—�ÊÁ’ÆI®KÇpIÌ'æp[‡^SUðÂ&½0‚×4é92lH�  ƒôf»Tõ©kcF‚0À1 ýÆ]+•.·~eOýwßé°ad¯>ºøŠÞŽª�¿ï›=™ÁüˆŒoø²h¡jGçè¬Ù¯Èè3‰$0BE‘F�óñ`O¬å¸''Æ�1X×f�¥þ§„r3ú1AV[Œ¨¶ê«Ø“e�õ›ñi&kN‡	¥8(�µ™MkM_emÆÚñƒ5áÅYm€;Ú›¾òc•g-$¢+³¡,y²È1	TÆF¹à_“�%IÏòŽ Þ– 5%tÕ¢/¹Ž‘‰á�øð±¸›�®Ï[w.—åôƒ¿¶×Ê~Cü7šGÞpÃûØÇîºë®v»Ýn·ïºë®�üã7Þxão©Fúbk'¸–€Wƒ«M~H‘Å§hl©Ÿ’·ºä¿_È‰P®%Ò>ãGorU(6ëÚþv´‹³†�~tQ7xïPîz/¸Z×GÉ)Q|š¦îzÕµCi÷Û™Ô7Ú­ëüð�RÁ»º½k¤itþÁÐÞT”ƒ æ³Ÿ±í‡š÷‹ÄðÃ]J–9_öÃ]q´­¾‹ój#øýD®r¤\×·â|¿Ü¨óy?9ÕONâè7£³rúîœ¾0œZ‹7ô$�ÁïÈ &›	ù-:àÀ¨ŽYÝšuõB�mÚM!TÇØ-˜)à6ÅÁœÐ+MU[V¯©[[á3+šc¢eCNCkPËXÈZtpJýX�/!žV?É`QGGf¸á`>ƒ+	¤v‹öÍÓ¿ÈÍÚï÷àÈ^Ûƒ½i\ïÓ1ÑJüÀzö‡KôK}Çôt,dqk79°RA¤A:…«-œS÷åqý »pûTËUYMá8)Ò‘B-	º"$à1•Ž8¨‡6Ÿë$k,æ…ªP0^é$ëòæ#Ãî¿pVªÔ‰.ôå˜/Ë‰\!)gñyA–Æ‹ý?5ø´£¶ïÔ°É1`J2$¥±BPR…r#¹"Tyƒ…C:@Š÷:’[èDä�j+æÕ+ƒ|tŒ�Î�	èÇÔJÃªËï˜qŠøûw®haA=°LŽá>oÑ‹]z€zpd–þu¾Ç§¥€ÚM¹èâÐ» !r°´’Ÿ½F»ÂB'‹+çÕ}:êb~Aî 3¢9 Ä€§¹@`Ìj-uœƒ^fð¸|pI=?ŠWõh½E/*ˆ;ôzŽ$ÐŠ©Þ¤ÔÃŒ®Ä÷;°ÊÁ�Iö^Ffé'cìò„|A^'Ó8Q•ó	ˆ®Ú“Ü³,¼1-“á0lôcb�Òj®µ�´¥n°^ V¤�—„Ê ¨‚u;‚è…ï&Ò]ãá¼}‹Påj÷Û=ÆZB�”>’6jyŸtÍ{±F¨CÛÇ°UoÝ,UÁäGgª¯Ö»ß(g?`�åÓ_Š’­AtáPáÊ”ñ�Ÿì0õ×úá;MmO,Ö @Îú©�ƒÝð�&?š�Y2÷ Àb´Aé¬ë+cÈœ*àúªÚS`#
+$‚^Â�fçév x�>m@‘ƒyP~ß†á¼-ì‹.ŒTµ1-(™U÷Ì©uÔGÎk÷øÜ§6w´G&påñùüÏÖ €$V1æ h�¾u•Á|6„££ `¥ ¦³öb¸ jñdBy©ri.¶L¤�[MÖ#`yóq„¤#œzRÖ˜Ç1Ð˜ß,¯O…2»*ýµ¢F•$§bÝË±·Î},k¼�ïŠ›·”Ž‰"´x}>Z…(jIE‘>í¿-Ç-‹/ð•fÏf1•ŒW9Æ™è,Ô1JHÓYØ•Y(j½˜´µÎÃ|”#JÐtæo0Vo²ÛyýˆÁ ^›7ÞdÿºDLü7Åy»õïml’$ŸûÜç¾ùÍoÆqüÖJ�O~ò“_þò—ÿS¸ò·Åk½µð?›Á¡¬d�WóÎwêÞŸ:Ú«÷;JeçÚ·D*?`ß–v~Øö>‘s¿ºÔù~Îþ1Ã~,Ö:æ/§Û?MÎÐwÙÝà}iëvÆZ]ÿÅÌ§€ÈXhÝ%T¦è|_QÚ2‹ÅÖ\ú«­îŸÇbCÊº3“¹³Ý~Ÿa¼ä¦ö.,?eÝVëý])õÅTê®N÷¦LúÛµûÓöO‰ìD¬±Ì'Âè¼^|aÆ¼Wª|'ºÌÑöðftnÉ¾GÈAEî^´À9@O.³ÛªYæ¹y1C@ªÄVWO”p{@5KÌÅt@þQõ/ƒxiö�²9ð˜¢íÙl¬ïÊ¬ˆ)N1ÝW*¢ ËR6f’¦…ùc2¨˜´¢>}4*¤Y¦¯ú1ô‡x¹.=AIž›sbÆÁŠ…Ž€D‘: ¾•ÇS|:6Ì.óhÞ£©>^Ç>Þ£9^‡^Oãz2¡Ô¤ÇØ‹ê‘2;sI=’Ç“%-©‡—à¾­ìë5 `�oT�f–†jNÌÛXÒeK¤mFž¢¼å�çb9Â0TdõÄDÎx�|1Ù“¥Šñ²©ª$)Ã±ojot£]Yó®Eï¦’õIÕMN]NÒÍUºh¼&É	äŠœñŒ¤ôlp:G±žhÄgh	2uŒ4ìªÈAô•]—³%>¦ˆ–Õ¾½<Ì.íÑL'ëôòïÞ¡ÿèªŽŽ9�¦*x~ö§Y�Ÿ×À]¦‡Ê¸s…¶®«DOÍ›˜ŸRÿ4€—ŒñÍÕ”xI‡\Ç„’b©£“P�f•Žš� ™ÂuõBwð²l|ŸüÆ&þÉ˜Âˆº¦šôF·7h�Ã"¦ôd	wŽ±�}jTÕ“ ¬�º°jwuhOÞôàX
+VG°´‰}aVÝQÄ3%„  C6ƒ£
+$S 2,-‰²Zß“i“ÅktÄPV[ÎY÷úÉÉDV'™¬X�pV[®Ééo„rd8ó)/z‚åzaj‡¹Âë\í�P®Î]×ì}Ù5Jä‚ˆÄF×|@Q�ˆK5ì˜9nhoDâD�Ï0l+Jwƒ÷ä¯n÷>�(ÚÁµYëçœÕz_ÈšOw£3M^í$“ó=™y‹b¢–šÍ°á%õÒ*~úQùœ…>6±¼@w™PV…°ìÃñœèÀD~•…²¸½F¯ax\ýŒ�>„—ÙXX¦ò'=ãòS¨a]#È)–E_€ý_]—UáÑ¸QæãD4£ž<ÁØ†@K‰å0SCZK¦Ö:û–ÂSÓ¼Ý‹¡"0_j''š¬SKŠÃæ‘Z¼Vå´¾ÁÚµd¬«š›ÝW|±)Q™š03Œ! G¡€çõW§‚õh*îkcEãu}9ÚÌ Ò²XÒÐYoZˆNNó¾'Sy}¡‘ZÉZ“Õ„��jR”ä5Þ‘ÐRÓkŒG›öÄd¤¬ºìdXž0 PÐçúb0&í˜|fŒ�1™ú	CoÁŸ�Þ§£ü¯ãµ~/õèoHæì_ð_ëµþç»±úýþáÃ‡`Íš5©Tê·ÕhE¼g¬r¼ñ4Çž­ïÅFŽŽ=D?'XÚ¾^|†Ågë¦Ì{m¯]$'R_nôþÂÔö¹Ö]ˆ¾RùRå3³ÿlðÃœ/6½�§Í‡*Ÿ¯ÖþÜÔ_ŒâÓ,óIÓx¦ÙýkSupèÖÅ…�qË|2ŠÎf¬� Ä ˆ.‘ª¢k‡"Û|X7v{þ~tI.õWÕÎwLí°©½R÷>�1©?tha–£Ç1lÄ[Ö©¸ÿ8Ûÿl¢4�%:Úb¢t4GŒ¥©È	©ac¹KS2Y62«Áó:4+!$H289­~2ÁÞc R€2,OD ŽË—ÖhÛ©%U@­à =åhÈ;ªSä™PG¶$jàhè¸˜€¶š+óq˜“¯WØ–º:C'¡f™�~DÝ<†¿#À· T£§r¸ úp„�SÝÆQF•Åk#¨ÅÐ®ÒCø¡º{w¹8Ò¦ƒ6ŒjÃxWF$ *ñL �€F­7fÂ%-dÒòúáDåFŠÌD¥LÞTdôDiÄ¹—H‹äJƒ/xÉ&-c<ÉUŠ,OŒÍÇÑù)íˆÉçZñ™%ë^EŽ©í_ö>"È€Œ¾¿�lf rÆK‹áY:Ê˜xD"Ã "�$ûÔÐÁŽ¨Û WòËŠ}ª¶èU±�# Òb^±`8†[A4Š×”Øú�¼.³ ¨£€
+„Gsƒì„¶Z°±˜åÖŒxSÛÆrB~–U–Õ^Ÿf'µËˆÈdðfrw7k``–úÔÕÀ4Ð¬«C}8*É'�zE<#†fwÄà5èe#¨#ðˆ–t3xB
+WÎª}k•kÏ&.Téå
+ž¬@
+{t,…ã˜ž„oÝÿìQ2¤7b•å¹Ú†~('L~¼—lqøq_Žg�>Õ‰Þ>œýpËû„Á�+J'rh¨pe½ó:Ÿ�Å*Ûx–³c­ :Ï6‹õ^tB ±šÇ1Q*O  ï,¥ÿ8›-ã©fï‹Y÷;ýàz†u/¾ÄäúÉ™Ž¶‡±n=¸Zg]ŽýDå•ò•=æÜ½ìB ¾R&j ˆB
+çÔƒ6/Ð¿™0Àœ€Þ0¾k‰ iXëÂê";ùUõE8€Øø‡ûÔ` -©GW°Ë9ò®Z$�E¶2†$ÍôP�É !ÛY–_’†ùz	P“ÇR8�ã–†BWÀfÅÁ1m]B8b=3œžãñ ûOíð
+[;xÐ;£¤ñ–Dõë‰¾8€I~À8.ÉéŠ2G•ÑfCY±ùb¤Êz=9à²6 5“|†GUA³sZC(G�®€Æ´õ	aBB‚*p°oëD™|é@0Vá¹†,tF­½ýdM]ò"W:‚¬Ž´4Ä4ï…*e³N¤Ò¾$üAÍi¹ÊÞ7nËi^J;üQoûÿO4ò?»½©TÊqœM›6ýö
+ä[µÜ¾•c?gÿs/ÚéêÏ4¢�ˆa;z»$@¤¾¤ñE�ÍzÑesíŸ
+U	ÄZ"½˜þ¢kÝc¯$bS:ý‹™ÙÖùQE™0>urô$�O×ëÀ°ÛõPä�(Ûx"—½µ^=Kªr&ý�=ÿý–õPµÿ ¢åŠÈÍe¾�Ï|Ž¡ÇX·þÎ\íy!Gýd;©t!õ7–þ|,6fÌ_¦ìŸZ˜·ù”"Ûãkrb/zŸb  bý"T)"æ [ÖÂåxÄ£…"[Ý£™Ž�k[2lÄ§¶	å&V�˜�áÛÔ$û½ÍY¨EÔŽ¨]—³]j¶TCMh'/y’sà ¢a]r`!%¦# ˆ !,¥Ù€Ë=8¬ø*rqT’ppÈ�¡�ú¥	y#x•…… æ}X `Mz¡F¿êÑ~\\uˆ¾Ð|¶ø0§CÆ€üJü`�—ðÜ,®jÒn†LÌùŠ÷T2ltt© ±Y Šëñ		Å±²(›õbYdAöei$ý—?Ê1L ëáÅGü‹[É†åð|�u9BrìyãùV|ŽÁzŽ¾§^ c?–ã^²íXïOS_)Yp†ô¥ÑŽOò)F€ï·Ô´ -"!ÚjvÂÐmt9ši\{\>Cï8ýØÄ�æ3¸®C»˜Ç÷À~(‡ÛS°6�þ¢zñ˜ú—Û  YPEÔv1Wf››j¶ÀF$$UY3!çà ¹¬Ø£f…mÞ¨¿½%ûÔíÈp�vå¸¶2Ë†„†,¤fQÓ�«G5Há¹)\3Î®Èàf
+
+’yõð!õ÷x¦O3}:S#�Ûñm¤<š«àEúi\_§§—è—"ú¬º¯M{4µJ;)…ÅË„Šæäk©­úyNÓ±•�«T¤›ñé:kHÊØ|®/&ÓúRekÁï|¾^€~²Ý1Òù¼\$Û¤Êë|¶íjx$U9–ëêýÿÑ�.‹äŠbæs®uoÊº€·‚ßcèwÃ«ý©ùömÝà½~øN¡†kÝ¯r¬9:ŸéÄÙÚþXŽ·Ã·sô¨¯Ud¤ôÃ.÷üäÄP�"4Pk«Æœ|C‚šQwZ8Ô¥ý¢¼jÞ8‚×ôéÈ<¬�›Á-T«oŽÃ�Ry<��þŠü¬ ?¦îýª6U¤tLeØhSÍÀ¬8’/#j/È=ô®êe¸Wf+tR„¾2 #ƒ5ÆXB˜å�N¼Ý@fó¥£½�ù²2\PÑ0&½¤ÅŠèhp¦"M({2u»"s1ÎLdµ™V2NÀªÉª„lD(ZH¬¾Ì@J?RÔ´c¿"#P6GÑ•ñzsPfyËB-Ç¸Í«ÓÞ�*.„'j™„ø ¦Ð±`­$}µót¤L|Q$ƒ,oµD
+ j"%ˆs¢Í€yRC@G1¯õÓÚ~Eö¯ÉÃJ™¿!þe?þ½¯»îºR©ôÛ+�_üâwâ7‡2Ÿn.ºß8ÔùëQ÷B{b²äÜ€ˆ±T%DáZwÜ¯%b},'AåÃø/º¤ã°¾Û„ãDŽm>ÎX—a„0Ç§8‰œLÛ·ZÆóql,·î$Ê„Á)ýèªÁòMÝîòÙ¿:Z}c8ûÑDlòâsmã!Öp©†‰\Çz(Ÿþ_Irb˜l—jeŸÓ�/ª†o7X’ˆ�ŽÆ«CÊ±PŽ%dEÊp¸ÊU	sb)†¨%�ê+´uu¹X`“m:ÒU­4´éè0;±ª^¶qÐÂ¼:ëÑ³0—ay›åut³,ÅÁæˆ-Õ.³Õ1ÅÓt€ÆÀfí„Ò}êI= 09B‘�×äG«J¯Ø´IƒŠ‰ 1‚q”ƒmc@ÓÐ‘$"hepu ËŽ*WjèÐÝ[‚sÄ,±@Ÿ ÐK åà
+ó-Ú«cž£¥£)I*Ê6e’e9†,!^Ôã¾Ô_’ÉPu¥£#1T–¶�Õ÷Ö‚ëB5Œ@i^�)›æžŽ‘Ãóñ˜�&€®(�ÇjH’M€f(+:m¯/×›Ì�Ä¦f|JZŸ–*#ÈÍé³¾*æx?&»)ÈeE	À užZN C³Œ€Ì8¸"¢êþþ.Í¹8¡aV�pq¼FOê˜eoKÀKãx•sa£…ùúkôÇå^Edbn‰^JãŠ,Ë–43&=†¾�Ž�¶Žü¨|Æ„|†•L¦§¸7/:ZöêPš0õ¾t38ÁÁDàfjôÒ
+~KÀÏ±�]:ÄÀMá¤Ó[´©["¨è&š)‚„Pé�7éYØi3t›' `U½éâ@
+	Ø°Q}3>¢�+H4§Ûb¢%ãÕ¹?«7ªR¶òÅú@Žfô7jÑi6ïÔÃ�ë´Âw8:«êl©íÊXw+U�ª ÕH/>Í`Ë½d[Jß#ÄZDÙò?Î@j¬å'§ä><Ûù®KQZªÇx®¼{Õà…ÕÎß†bMÞº+úbƒ£©%kc•qX“³g%Ù:ê‚Ì¦jæ˜A`·é �©P–pÛ}·çúp\aÒ¢—b¨k`p0(#`Oa1�€Ð'Ô%†‘Ò#¨ètO
+×ø°RÓÂ’ƒÙeµßÆ’…DN �úëñ¯JlKO%!-õ˜›%KBéè0„Håt&Ðe]�õ<•fÀbB¹§4#Q1¥MÔþoòÞ,h×«8í^k½ó7ÿ<ìyomik–�´AHB–˜‡` ‚Á†$vá±—Á©38q0Ávb�ÁVŒáx;b0 2’6ÚšµçéŸÿÿû¿yx§µV÷¹•œsGUÇ†³ª¯Þ›·ú¦Ÿzžî~zÇöCQNÙÕ¬\dW$»º
+á c\5÷áçgJyc;-;.ªŒ_d-#¡  §¢ƒ ‘œ¸b2±! Ê™\tHCš%�ë¡¿eW¢‘1h¥'tËp„e…Ž3í$%ÿ«g'·×TÛå¯Û�}?»opßˆ?H|QúŸŠÝ�ØÕÅÞä_�õQm÷»h]uA—œ•ØtÕ)Cóžz‘¸0Iß$åš”­È91ÈïóÝ�ó]W^)»k»_É+¹¾Ö‘ãü.kçS}Sµü+¾ûH’½ÆR=IßXò?Wþ”¸8�vzÿz�¼+Ï!X¥ÎÑ�“Ž:®Í1)×‰Kãä]ˆ€|õb/»ßwžöä…²s!6S{ Rs GfÁrihËMÿ«¡œ0‹±-tí°(fªbÊBæ`aÍ\¨Uñ°%…èB¹Ï».ÖJbÁÃ`Ä�Px¶€³ 	Ù§Q$lÆzÁq"i*RY€1¥eµ=°ñÐL§lK¢r087²•„P3ŽÈìu²°,�whAä»¦QÅÃ1]a�ÖCt-¤|Ë)‚à×ð†!?_Åëc^Ù‡?SÆk=œÎ¡íaÃ‡éCêî¨ãíz“¿UÃ›#œõ±HÀ;|âŠ}<QYö:†Ä5�Ö]Ñ,/é_0ƒ˜P06zÙqWô±=0MD2ìx²íÉvNåyoµâ>nÙS¢ßŒ>áÉ5‰�õ�@væ‰9:45MÑf¾Ê–ÄÑÀìñD'ß;!î™rFà¡7á. LxÐµým3´ ‹¸Øâ‡ÄˆO03áKö¬ýÓ¿0�I�ZÈŽÈ÷»Pó¦�Í+Sx? {2˜¶¡¦8¦0 àJ O »ÆÎ§d³®²Œã¢œ,Šã1Õ¦‹J†6"ÖÒÞ¨ÐÝÎ£˜â	<ô| öË»víÅ?^ÆÑŒ`¯‚‚‡UsÅ~w_� 
+xÐ�r—Ó0a^€C�»P çpß*@
+”4,X6ã|+Ÿ)áþ¦œÙ\ØÍG²7ëdkƒOùr{.ü£�äµ›ù4±“Ú¥†ûŒÄQÓÿû”æJòäE ÛKÿYÍÿsâ€Afv¡“ÞÏ =uªâ}‹AZj0;{©¹ÚRÕru§ÿuÉyb©v_è|ÇRe.úÔúÎW±5Wþ™^úÏ.&ÇˆUj÷L¹çêî_¶R‡Âe5‘�i2«Ê ¨P @‡Oá �Ý‡D�†Ì:…M1 Hˆ6áo¨ôùdWð,ƒýÀ_Þ€/Çpù2ÿÁÎø0 <bÙBàT„µ„GE\"Ðä&})ãÞÙ´áþ¶ûÂ+ˆâŽ=7¡‰‹ŠöŒ’ëæ¼ f€„T$7&=CÌÂ8¢~Îé˜’Ô†ÌXTUQ/¨³ Š!±ªH#Áºh	¸gG—&o‹p®£÷ù"qEÒ¦vÌÆYA]™qŒB“ @Æ²ä\ñD·«ˆ €CTCîŒh�’Ó±[ PR­¦\.ªK
+(ˆ”XÖ¤ç!vè3�låÂàß‡X›ýêûöÙùÍZþñ§a~d1RâÀHÌ¤h×¼'s}¬›ÝS�~ÇÐŒ¡…Vüâr¢¯ëg¯Ùíÿ±«NûÎçq ÌÌ5 P‰~{�¾À¦ï`öKÁgr}}­ô‹ˆ0É^ßIÞ	 ª•ßë%@œÞ×\„\`‚˜TƒÏ%éëÛ“_¬þ�1wûº;þ¢ú8»·—¾y·÷'J®»ê|Ñy1Íìþªÿ9fÕÏ�"˜ž>  çLj—g¼“À¢k|ÙpÏøb›N)€²XÈy¤Àg&rÂ;.–®ØGGpÞ�`N¼rÎæT9gªŠ½z>J|Iú`$°óîvN�'†˜±®+Ñ33SJZÀHˆ1�Úù�¾ÈbLiE‚aG ål�P¢jÈ¹ ‚	ÖKÎL—ÚÎ”Å|$¦Þ`°–5AÞ¥'ÈwdÐQ"  ¯ËO$°~Å<ãaÙB
+€!,tø‰5úÛ:‰€u¼þ�ºÅ2í˜B |�\Â:¢ðÌ_?âU‚ŽAÍdÙYÁ"Ú@d V ­eËÇ®è*]‰ïéêf/¿¦XâÀ»)%fÓÜÉü¢¤,ùÏ3¨n~­B�SI!2°/x1x|Â£kôè€/(ðú|Z€€ò±F ëâHïôpÊBºW¾AºPÝà¿Ò0X¡¯.È—HŠXQKA¤0Ðœ»PG@.`Ms\Æ©"6Ô-‰P‚J	2
+ê2ÜÒTQc¤ �À©wm´îaaÞÁ Ý†S
+	ì�»¸"ÁÙ±+.–oð®+ŠÂ¶=íbÃ…JÎªÔsè—ðhÌ« XÂ«}˜ÂÃ£�àÕñ• p‰þÂÇ†ƒþˆv¦äB‡NiÎîI�GÃ3®ÐíüšÅ©-»¢»küN¾3~Æj_ð¸Ä<£š¦&€Ñv¡ä~ç…îŸIìKÑ+¸�#fãìu–*µà³Kå]ö¾‘šcžz±ý¦Àñ0{Kè>ÆàhšEÐŽÜÜS¿×Uç¶2ÉïÌþ ¿}�ßÞ}\SñªÂmBµÄÎçTgpªªsr2�@uE††å˜0£|YÞuD½%�­‹ô‡ÔÄkC\Áé)¸WCo+xB‚·_™À¥œ–¼÷¯¢ºó«ýñ«Ä/.Ã{šâÀ½�7¬ÐW§Å�	·^´ÿyÀç‹¢ÀlÇ¼yL½·ˆ‹¬×ÅÑ6ŸL(Ý²§ÔÁ Ã¶tÌì˜‚uP³Phä¶^îšÙ	� c'
+¨!ËûüÕ¢\‘‰Ï¤P”ýÍìÆº³©É¹¢Ó‘õ"µN bEiæ¬¨ÉŒ
+zÔÍÉßÒfAE‘�‹]}(¡‚a¥Á(4šN~ £÷ÄCÇÆ
+M=Ìû"    IDATCÖ+¢ìs]áÅ‘ÍÏdý¢œldûkj¨Y\ÖÛcâHîNXreéÌúßn¸gæ¼3}ë¿ö7êŒZ«ÖZÊÿ9b{äÈ‘o¼ñ\ù!ÕZßì¿Q‰¡'×ÚÉ{BõB½ô6G-ÍW†Ù«+ÞCƒì�õèSž¼ú_�³×Œ²7ÈÈÿï£ì-õÂÐææs¡þ> ÐæP!üoY~§55²s‘û¸µ{âôxÁû»QòSãìM�{BŠ¶”íöè?úÎSÍÆ¯ëì s4Lß)E7pžïÆïmþƒ'·ïk“ô-ÝôíÉWÏôÒ×9r`h5UêÞw,3š‰Ô‹©= ¹©©œ’ÙzˆSœîÒf—Où0¥0°�†¢f8«È±*â^™‡¡ƒª*é²^±:¢]ÃYïÜ®)%;˜ö=”-ãDRni+Ñ� Œd;§‚#lAH¡0P®P�Åx˜e|97eÉGD4´™‹ª(Ü‚Ðkº_•S1�f^5çëâËÙÈØø8µBYÄÃfÌ8ºŠ7ˆ{üT50ž/w &Ð-À’ ‡�zÔžp»*š†iB™@‰€DßìCð<a5;)ÇüiïBÏìðv…`PE™hª†êbl–kîJÎµ’Z¿’. ïëê¦QuÏ
+4û¡è§Tg3›RTTý”¢	)@ ÑÕsº	�Ä9ô„uqd—Ÿ&à-~0€=ÝŸr Øâ‡nT?·Bß2<,‹«æñµÎ¬ð³xï}³€ç\/!Çp¦ÐŸUCöø´„bY6¼ŠbIø� |”žÈ|ÙO¨D…+@�Ì’á<a¯OÛ×ŸlåW'4œRÍ ö¸è¬Ò5KxMÊ´èøÕcØp ¸ oïñù>Ÿ$È‹xØ@¼,îò�öqzÄ§-æü.?¶,Þ� "x5ÄfˆS)ŒRÞ±±£k‚‚œhJjPpŸò±TuŸ7Tå06{]Ù«ûƒ€£ü6Dòäš‡bb®�õ-C}=Ó¬¯Î¸òJ7}Ç({•¦ùØî‰œÓ;ã�ý¯�ò{1D ÄÛ=dšß©i¡àþ½«ÎÔ'¾ZÕ¹ÌîwEgb®vE¿|9Ê©n8hXè[ˆ©Ôµ;Ì®+œPÈUût‡/ôøÄ¾ žã�,à�oÂªx‹…±‚ €ý|×…‚‚H‚wþ/šW½Áù¿~ÏðÇ÷Š÷ ˆzbNÜ·Mkè¥0ˆ`y—šâŽ�qzFÍ>kþ¤)®Oy¼I5Ä­¾  `-´Mç%”Vì—xÛ¶S–nF]ô|ÁEÛ&©«ìr^œu»®d\“þÈÖ†4 n†"NHU”ìéº'¨ážµ\L)²ìlÙNU4”¸è»Bz"Þ5Áª=QÁÅœõˆ²²„”pÐU”Þ2YÓIBÙsÅ°•ÝÐtÚuUÛÒˆû ÕPä1sU†}Î¹ç²¤&
+mN�Í|¶¡’„Šß¤_þ~´Ö×»ÿò,æ_Òð�¯µÞ|óÍ'OžüŸÞþö·‹ÅvÉì»ŽºlØÏì�8}£«Î²Ü(y_ç/wDÛR}œß«äšå
+B¦©¹=ø¤À8ê'?Uðÿ€ñ»ã�zÎw{£—æ¯pœS*Õ· €PòJ£ü!âÈRÕRÓ‘ç-G™¾q4<®äj/þéÀ9™™Ã“ü¸#[©~Ù0{=€04ãˆ~NSãÿ‘ZÉ[JÞ×ŠÎÓ ¸“Þ½�ÝàŠînvçÄÖä/�·5`´æ¢œSs
+
+FóA¥<–èoØgËb¦ÃÏÔDÓE‘P“¿¨ö	Àªœ‰„ÜÎ�(PšTËØ†ŠÇ7•R˜îõúUÕhš„µÀ¬îžD'”­²ºÂ 2SY"�)È9šS3 ,ÐöìdÉÛöE$,»ÅœMSÖ¶µ
+`ª*ª9O¶íÙ)¼!…Ö²ø	JeÜÓÀÛœ_oÃy‚ÌÅFoàå0Ã%áŒš®HßÇ0ÂfCìëQW ÐG€6�©¨�!u3R5*t™96ó-³Õ7Ñœcwu3¡ ‘$¦Ûé%÷ÙÌ6«Î¥®^Þë¯:‚ qÐ·eËìÈ]…ÙlðE9yWW ¬ÙìÐ³g}—^ôPöøEš 4„³	üÔ?8‡oéò‰.?¦ 4�àìûxÌW<œö sû}ê6õ=ZŸÂ»
+"ØÖTÀ¦‹Å„»)¡‘Å9GMh\S.²'â”ó UÍ½¸ª»†£¢�®09“ƒ2‘‹^ÂÃ²"¡ònúªŒóºœQhC”;têVï-{Ä�I°
+e×DÑ`JÃ8æ±u{ä›RØ‘àîÐÙ f	²˜Wkxë‚x¥ ·‰÷\¦?Õ<YµO$°©=Vëâ°ƒbZ©	Åó¶BÁ,¶’×i*¶³Ûb*¦TuÅ §úéë{�@úê¼¦ùÈ}Ä²çŠ�ÙèShhz'~Éýf#x ìý]Ýÿb¢¯�œS­É‡ERl[.ùrµ¨.œ¸ê|?¿iuôQc÷t“wöÓ·eæh?{�¡RJ³
+'m½g�¾vb÷zbÇ» XQ-‰ÒG¹èÔJ¸dž^”7Î‹;ˆ¬ðg2Ø]ÂwŸã_@¥*¾,‚½5¸�Áî‡wåÐs¡:�ï@p>ÿãÕ‹ü_–ð'7èoÎò'.Áï­ÐŸ÷á¤‚²á	�Žð`Îãÿý:}éœù‡ƒòÝ-z¶Ï§Hó ÕrË^N‰kì!õ¦­$WDsh…B€–=_V+Ûš÷yÃ-íÍ)o gÿ!ùÖN>;0��$4!,Ë!w;F¯e‡†6Ø4&p  …Î‚w¥o9¥¨!gð°sKÆd ¯Éâ˜Y ´íjÅ9½£ÝþÎ¶.Íì·“‡ûÔoé©�©i,ÁE ‰º€5b1¤Ýµlæ€[A ¾Þo8 $f%µñ}×aïŒZë�wÞyûí·ô£Í²ìGFkÍìžXß ír$×Ñ¯ÆùÝ©¾A‰±6·â÷FÎ“‘û¨±‹�z~³ÿ€§žsåŠ#Úõð|y¦Ýû�¹Úë‰š®:5Ö7•‚Ï“÷)±UŽ~½;ø�Røûšš¡÷`?y'ƒpÜAÑûR¦¯Ÿd¯Õæ¨/Ï7Ê?;ÉÞ�ê[¥ènO~¶�Ý¹�EÎ·‰j¾<»3úuO�rDÁÖ¼‡|¹±Xø˜¥&q1T—{6­©­®>¬0¯:§[zoEu2›Ðî!¯h˜%š ¦FÃFÊ=’ÁhÖâåžÐ 0âõ˜RÍ‚€û´³k;)eU•8ÂøfTD“›QˆhÈÃ1ƒ(K›ù�üðÀLŽ¶ó½�'@ UÔŠ‹zLã”Ü„p×Ž‰Å‚›YöSrÇÜ×Ì†=xÉ<9áí†œÝ²—Jb*ƒ6"ºPð9“Ã$À¦ —™ð¥˜W&|± ûçÄý9�êxCSÝ2›–q@[Eé!à>/±L€¨Áp±g¦	,œÏ7"aËBd.ÐN«Ùœ³‚ó‚ƒ"”“ŒJëyI!evqdË}½O"ô�®);"›òžêýMgmÖ;ëŠ�‰-î¦¯Eß²Z¾3!Ë Ä¶„û[ù\
+­çÍûåq…a®®À5T„û]hF8ca2�÷gÜnà±¼|Äg|œ_wìðãþÎíÎ¿Ý±gúül$êöEƒ½`¡ ¦3Î À�¢/¶ôd pEß²)©öù´´Ï�&6"šTÓÙu‘¦Ü3îvC–™±á>ï`qD�5í¾Ø·Ü¡Þµ¾¿£…DìY; ]±c7¬WÄ^ |Iå®I�àHá–öM^þ«[Äùüòþ—4ÝûáÇ�½ÕI`s¿x/¿´(Ù£N�ú:oX7œËCë6”
+°‰t`+ç’#F„�II�7äl'¶Á,R*æva-yYª¯3ìª¦úGts»XquÕéIþJKõD_ïÉ‹Ä�#úš£DßF\™«¦Õð÷GÙ=uï¾ö²Wk*Ýo:bÝp 9
+åeË~BÙÈÎ pFS‰�¹˜Å±mäœ$l;ª!u¦Åu
+9åÉ€/,á;K¸ß�rnIa§ÇßóÙø{ªð_eÐÞèÃs—øSxš@[È»üX	¯.Ãµ
+"‚¼7Öñg¨}òÞœ9*?<#^Õç§{ti¯º)„…ˆaËB:&0Ø„‡UYÈØ(ŒªÒ#f Ñh@í)yp+_*‰Hâ˜À¬›qÌöõnV KPóŽQÈ–½yÿ©˜ø�ß­J7åñœ÷TA.Š£û¼á<6ó¤e‘±­Ê<#UU©…ì¥A„é!�§åÒfvuIº
+Ì”_£Þå@`Á*d	jÎá—œÐýg¶‡ü,…ÁÀVç
+ŸThœ_Éel§áÿ7ï{û‘�>úèûÞ÷>Düô§?}ûí·ÿÐg…ø™Ú¯j»<Ì_1[ü…îäçdj—(r^”8°†¦r;_ÿPÉM)ÖÛ£�¼¯3û©¹Z‰Nn'æšéè“®z*7ÇR}Sf-6îØè<Tò?Ïàäæ°¡iß9iì²Àaè1Ïošäw7Ëêÿ# ¥ö0 EÎ“™ÝëÊÕÜìIíâTô[–J®ìŒÿmä<o©”Ú¥œJõ¶öæÝž+:cs &LñþàüÙd¹&Ë#›�x£„ó)ŒSÞÀÎç0îñSu|YEÔ;v³(¦ZôÌ¢¼ÙCÛ·F¡
+\7——�¥¾¥ª“ uD*À–ÝGGúfMEÍ�(«Õ¶^.ÊI(×VÒ½snQ+'v!¡è%oŽKéµÓ*™ØrImOìÔŽíðbËaß4S  cGsŽ3²¡ƒl·ìùŠØcÙ0pEcÒCÚÁ9Ã£Væñ­t›xkÌ»c¸`9]÷îòó5<:æÍªØS– À^ÐfåÕï�(\pªj˜P	€�$pßæ3Nº¥½yw<±õ1Ù”'%QéÑ®ÏÃ ª¬6ûz¾¬vœØVÇdgÝí�™7ŒZ hx'bs`5w+¢\�ƒMí(t, ¸B¾,Þ6á ¶�# ¬óçöà{»ü”†þ>ñÏ{|~^^7¢!�€?5‹¯èð‹9t+p¬(š,±-KÇl—Åt›.ÕÅ>€}ZÝçÌ¥ìe±(’”|‰”±t‘ªÎYCå=
+“uQÍzOô55÷ñ^þ24ìŒÉ¨R¶9§ÀÀ& Páº=U;t:ÄYË¹†QµZ¯¿êÌâíü…Ÿß<þ¶ë�áîÃËwüæóè@§wùé^� jÒõÄ8£Â“ú�ëx»Õ)9·fŸ[’×º"gÀ”œŠjwMÃGŠdKs‘XZV	Ë¢H»Ö©H*9g4Õy‰ÀÍí|5ø³Öä§ËÞ#½ìnOt\¹e©Àà*ì•ƒÏ(¹‘ä¯87ü°ƒÉaÕûÖjüÆ…àkž<?È^3¶‹¹64{ÚHn¦vJ³gXhæ@ðª¹TÂ…¢ðS¶.JèÑî”¬¯š³\ÜæX÷hmÈg2hIxÜÁ Ï§†|*Â}ëü¹%|¯áá|Å�Š3>ÌYH·àÁ&¼r—(3hã@y¿øÀ�/
+pcXÍ¸5-îJ¹“Cß�¢ O�?‚‹ <'^žq\% ` mÛNš2Ô¬.ÛÇËxhJVÒe}¡Œ{6ù[U¸>ÀjŸ/5Ä¡1w\%8³î`d¦Y‚�IjÐ>º Ù" ‚�ˆ	e \–^JIƒÀ®wuÕ5Ô8çèŒ~b
+oª)©0»œ÷Jb6á¡�EÃzÌu±oÌ}	Ž‹þ¬Ó~ïwÔ'[Â—C ˜Ø* 8¨‰å/}~­¿žù‹ùã#ÿ¸û‘ßëˆ?~ü™gžùå_þå;ï¼óøñãÿOo�‡zè‡&ãü¶rðßRs¸=ù³§D;R/L%¶5ÍŠÞCIþŠrø»£ä!<ç	âÒ8¿Ûwž1Ô(9�OòWÒ·.Ôïq³WZªv‡$¥.zÎ‰IòÏM>W>§o´ÔL²û#ÿ/Ssíîà“ B`\ò¾Âì
+ ³c¸Zöfoªôâ¡9
+�G4-õ1 žP©"ihf5Ï,…ßTú†ËÍìZ„¡ƒ&ÞÈ¢¨c½e³ú#^	q¦‡‰óu§å\Ën%¼9¡„EÀ �	ñ”Ü×3Ù´“HLWóhÑuM3Ä¢ëŠÎ‰A~‡#Æ–ý‰�ŸvÏ´ò#.�÷ÌžHN2ŠRÎªÖ$'Tš<3¾·*A€šØÙP¶²‹lY–Dyd!f]·"Ñ˜—6íå¦Ø«Áöì¸*#’SxÇ®à°…´�W÷ùò}#Â=â®MúN
+£ZeyÓÐd9§�y</¯€Œy@›Œ�”Š²€«*Ñä3ð¶öçÜÉ¶®Ì8â¦‡Í4¯Êr«²7¡Š+¶=ÑléfYæUç”ÐG2[Å¸g¢¤aÙ­"2@Ï”’.�C²kÔ{.ÙàTðª	olóWŒgñÍ1¬û8#XyŒèÌª�ÔñúSô±i|µæA¾» ^þœý5g®øÂÏ8ÓŒˆ²,Ó¢\Þ2ýYUHÉ™’ûŽJbÐãi_hÃŽ+´aå"1àv~•¨«A ×=»''¡Dob“½¼¤ÖN¥¦€s.z}.8´­ýËæäŒ¸ÑÇ - ‚h¨¼D×œ5�ÌˆÛv²¾:óWÑòÍè`õÜcÛ÷ýªH_·zé»=’€z|ÂÀØƒFl¦Îó'o‘Ÿp±ŒûtcÖW¹Ë ƒž)åœ7T€UÙC´žÜÜJ�U%Wœ3I~µgÆÙM¨©©æŠÝÔîóÕ9_^NòÛCuEaG“_qÏl$÷í/}¼¿_CÕÆ\Ï,û'#i=1’�jšZ¾:Ô·(ÑJìL$·j3D*ºßY¿µ*©$Û=3@Sò@BqÌ&@•°	PUE3&ŠpÎÃ Ê×Y¶üùâ_^¡?Ë`w�7ÚüHŽoÁ—|ž¶oò_ˆûðBöuá¤/€™kñœ~(Ä=Âv‹p@sá¢ 5áu“ÞÑågûüäñ!¶�°âr©Ç/Ž¨b­G­26Ünˆ¦/cE {åmiLlØLË#;öÌqŸ6bÞ=àìëZÚã¸)®HºÔ[pÔ†&uIÛf4­\…‰eO³Ê¶o«}k£BZQ¬)ôd,rŽË#Î­ô˜|ËrZvìªƒÅ!mîsë ó=ƒ{]ŽmÁÍ…]j-9á¦¶Ó*Y™qmÖ;J rÛÕ9Ðß§Ö*Ø×ÿœkí÷ûçÎ�ó}ÿÀÿûý�&–Ó‚=�q;¿6tžôÕó9Í2¨Ì.Åú&mçõì0»/ò¾¾ÒÿÓÜ.ùêì(yw1úLÑû¢Änä}5±‡çDÉû›õÎ7†ÉOzÎÉRø‡®\%ïnËÐ\%ü/ÃÉ{É»²T_§Ô�“vörßy&p¿ë[-ÕRs­ï<‘ÚÃ�:ÝËîÔó—ú¿�Øå@nõÒwü¿,9/DêŠeÌXT·êôÎMŽOlÅ£¦³êbØ6yÆù´Ü—ð e7]ŒD5q(Âê.VÄŒæÉûdA4oòîÚáÇ:vC¡“32€ ˜qÇ‘º�Qµ(Š†ƒ’ŒSª€å �Ý‡Hï+=j–­üÈ´÷\ 5÷blç|LÐ•-¾ºøùµìPÎn$Ûñöø«µu}é«z£§ç™Q Çl<´UÕ6,},ÎÚºØ;á± D›f%ÀZABœ&È(tùü�O9X©ŠCPB0á�ÃòµÌ·÷9‡"Œvé ´i;g{É|wÚÝžUs�ðÂºJ}=Zà‚Ú,KƒJm¹¡²]][³§-³ƒ¢ VBaxE¹½™Ý¤Ù	Fj 4Ë„‚‘-Îx—4EÉfcDvÌ}Ã|Áþí´CSâhˆ³³âº.íVñØ6Ù¿&–ðØ1ù‘Z/i’5¼eÂ#ã3ôŸ�‰ÿc
+_ÖÀÛ,d»t¾ ‡`Ì[»so@=Â	…)9
+|bˆ´ ’Ž	s*•ä€X ò®É-Ëb`S	°~AbšØWôKj%³‹
+Q oæó‡½â^¥,µ‹þººËòæŒ“˜'»šPZÄ…Žñ†d\pB¬vù9ÍÀE8xÓ»‚‡þ7ûø/>tÃ¡±÷Œ‹þùÁ––åMNUá&¶GC¸(5gZì˜`…¾q¤ð "wtm];c[OÌÞeÿ´ 32Š"5,wô *(Ñ6t²;5M�ôõ±ÙkhzOé—ÚÙÝ‹áç·Æ˜6‚±ŠïU$_®)1èå7w³;7r75G—Ê¿ 0éêCëiòÛé›æÝ]Ëbd¦4›’ZmÙs±u…ÖœíØµ„²!íŒyÓ‚ÃJÂÝe|×iú¸‚ÒAñÓ%<ÃV^ƒ¿R‚£{à}
+
+ì„Ÿ`aÞæB™ÀœçOžæ_ñpŠ@oñß§—øwÏóo^¦OOx}Â+	¯tùÉŒw¦ðÇ|åý×‹ôé] °<¯¦'¼Ûá'DÞeû¸D9 þªýöûDB0æv]a�¶	Œ]óe1·n1wÛ¦hXîjÕ6ÊÅèl¾Š 	ì½[Åž•çòö†IÏ›'ÎfC�¶$Ý¦{*a½MOyb²aF«æœY±a.¯ê�„Â	MêÎ`D	‚¨ˆjS.¯ë|S›˜‡]·,ÚÆï/Äêù|]€ZÓ»e™å°�ß|!¹¦•[ÉƒsñÍßo?ðŒt(ù_|à�~îç~îæ›o~á…–——Dd§oKí3)ºÚ.•½/!fš¦"÷ñÜÈì�éÂ/çæê†ÿ@»ÿdÃ{x0ú_XÛeG®5Ãÿç÷t³û\Ñ­ø�ÄÙë¤hçf?q0Uú7“ôMýøg<u.Pg}+ƒŽ~¢owDŠ�§úÆ¢÷ß™=æp˜þ¸Ânj5‚rsUÍ}
+ ÖÒ›ëN·?ù0�€‘H|¹;±s[¦�0qc; 	2î—`¡C[.IsB cîOxå ¼O v*pc[ªáõÙ¹agdê]]«¨QYÆšƒŒ|O¤Ä®ÀÜåeW^šóNg4;05¹'Û9UkÞÃ ˜šý'óÞ¹‰¾%DµýQn—ÏìŒ'w&ù­j‰€}‘0ÃÞàéA~cÏ4$@]ú»vœ°s7À’RèºPrÐóÐ:yP›ÀšÏÁŠ…¸M/$¼žCwQ¼¹G½„WRºs“ž.àRET®ØÇ4�ìV>UØµÛ&Æ,ižò¢¶Žº˜P¯‘u¹ €åU¡�mq-[.	¡�-ûÄd@H€si­,ç3jòb¾˜£âŒ“ ë¡6ÍSš:XÙÑÒChÑ#Üâ\›OÜ ÿÏûw6]h\´ŸÁ™2\`¸Å_œ…×Má]«üÙ&ÞÛâ¼QÃØ�2.É×jNC,‚_d¸mzS²XaÕ}v5½ÆEYäŠAÏÌ4Ý‹³ÐTîÀÚšJ}!]±ÛÏîyIåŽí”/öBoè,ÄòØ6Ë˜¤äg†>¢/cO8
+óŒ|1Ê¨pÞ<µ(o©á‘HšKú|oñe 3�•Ý‡Ž^ÿ¶µ,?yùt?ÍR!pƒ�`Ù ÇÜž¯Ñœ†ØÈXW%Ô�Nß,eÄ‹âîn6™Ø0á‰ é‹Ø°·–^]“˜õ.‚�C ¬/·ÚÙ]5÷IÇÎ¸r­¯Í_l§÷o§÷I´c}«#&†Š±¾=µËÙ‰í�‚ZÉì\Áyn9ü£^üþ9œqåFgòÁ‘Ù@ »r;Ÿ)IêÙ¤&ƒØÎ‘¨$Ý–VEY�,JwÛœ_ÇwèqUÌ­Óc%8f`Ôã'|i/¼ÇÂd“¿íÃœ�ÓWDà÷\(%°±?8áË>ÎÆ|y‡ÿNBX�›©7�3 €îéñ“]x|ßóå l¼A‚—A/á¶†qÏÖbØ(ÃÕ-»‘Ã †Wwé¢�uV¢ìv,gâ>­ØTà!`Æ}_Lä¢t‰Q")¸ªOë<…þKíÃš3S0…/»bÎää€‘90¦– §m
+e!D´mÆ>Ö	r‰¤Ð1ŒrYB™B¥Àc œÇ¾,Æ¢�( Ð¶DÏ°S�m*©�À¼ÆÞ¥¬ô}×açG�G¾æ5¯ùð‡?ü‰O|âk_ûÚ�@€€Ì‘˜UA]Rb]Ól¢oì%ïPØ÷ÔÉÄ*x_¦ï@Ì5Í:òBÝûövzO¢��²70-$úe½ìU¶ä~ÓQçFé›2}llŽ )×-ÕvÒ{}½ÛJn#X×yÆrPP¥Ü14çwv“ŸRrÍ•—bs¤|.Ñ·	1´JÑ›r·ÖswbŽôÃ¥ºÿÕÄNoš® Ù�ÕPîtŒÑ¬ˆ�Q
+‰.�õ h ÖÐ±RÀ=9SÎèBÔ�AUæ1›Ëšsñ‚y¤ehÇv»Ô…M©¨+j©ðÇhÙ¨g
+¿¡©ÞIÞ;1{%¦.Ràœ0TôÄ6qIŠnÅÿÂP_›Q3rw„å¯³Ño¸¢9ßMìRÙ¹(Á"˜M“¯§Ç·ŒîÚ-pDÒ”QÆù‘`E‚ðÑ‘ ×pÞ²ƒ˜[	lWñª2Ì¹íÃ¬§jø²„[1·]ÚIx£Ï§†4ªâÑ1\š7oÑ†Q¡çbÉ2-¸qG7rÎpÛä‘ @Ë^1`3æž)Œ)Î9U¨»C[U(†4ðD¶ì(¹O—Z¦XÇ#;&ñÐÑ�yÃ2NãíC8[Á£—é³	�ËŽ¢Y
+    IDATx��8åÎ,¾b›NÆ°b!‰ùJ¯]ÄŸXoYçÏŽàŒ@e ½VþR	(( =#nt±d8w1˜r×ÆÄmÚiîb Í*æ|¤6�A(ROŒÏeyEµGfyh�PnG3
+B¹mÙ¯ú_©¹võÔÀ"jª(
+V§Ý-	Äì:hgœ¤,À¹'zÓÁ_�m¡kÓ¾)MH8PÔl-è‰U³ò(L‰k¾ü‘Q¯ºp²ýÅ_{ê…ß:°þG÷¤¼½Jß(ÃƒžÝ©ÉùGHpêJÛ]£[ù’fs/åIN¡fn(W€h7�ÛŠ!‘D´¥6t0W˜oeG<1JÌ§ŸßÑ·z+yCA]žöZ!15(1²ùr¥æÁ—ëïox˜ßÔ™ülNõ¾)ìe4£I5�>L3”$ˆ-Ó÷0X}Eo"ƒsÚÅ`L¢Ø1;Â5úV;P¾B_w €!îC�U¼e
+ïv±±f§/ó8P¾C>pþû
+\·ˆ?!!dÐØ_ÃÛ”fñMðgÌ_%°QÀý!Î	ð„áÑ¾AB À¹BŸ=Ë¿Öâo3P‡OŒùÂ}Ù�b
+­œjŠÃçèwªbß„×—Ô‘¶3ÎK¢š1úX k1ïôù¼  6=;Ù6ÛöÊºYrë{6¿¬WÍéUûÜªîµíf×¦8¤dÕ>~I_
+±^Áƒî^²SX…˜ûæ<Úµƒ’Pšü‹*�a‡.O))ÁAP	aÂyËöZ¶µa6FÜQ Gdëùôå<måK›Ùþž^ÂôîÿSŒTJ½øâ‹ïÿû”S¢çw8*ÑwH‰CDºßé'ÿB‰ž±{¹–Û}ŽØ¦oÆ¥è%v}u:·K 0Ñw„êJÉ= 2}“À‘ï~·è<[p¿1IÞ6Ñ·TœËõÂÇ;é[%ö¤è�Ó·»†Jqv7bB ˆ^üþÌ˜�³û$ös³‘:Ù]Ìj¯×fV�è{ñ›{V°^U<4B�°ZS#¾h8óšƒ® ¥ °NŸóH @ ƒ!�� J½@N«ÛÈkMYix�¤}53Z*{bèËm_®äæˆærNÕFð //•�‹©¹Q`6ÐG˜E¢¯‹õm.‹ÎÉÕÉOäº//Ø~úN‚€8ðÄ®¦ŠyÅ}lŸ7p�K¢´àÔ'œ'UÜ=p45|� à£0ì¥<0œÌÈ=”ú|vÄk!.#`]î�Ÿòé]þæ¬x Ì‹{«x,ã‘�Yg<©âÑ”MÌ-"…ê™ìì„GÅA¬™QÌƒZE�¬S“^ÊÝ„<')ëœMU–ò*åŒ¼œö1
+D^35±L±D•sÇ…¨„×Æ¼Óå'¤…!¯ù…Y|­‚h ÏVð°�q—OÕá´vé;;üåm„X•ôù|_:WŽ´‹j#ŸMx4¯ª)Cá×E] +pZû¦¶kØÝ«|ÛÖµ@tŠ@�/©�ŠsÁ­”"Î©6ã^A@OìjŽ¶uu¤�Ç|1Ú™HmEêú²½™Oµ’·&¬ÜqÌ±)9(p�NŒhPE˜Çwè
+
+M¼S¢×ågxW‹1l4Å±-þòYó¹±-ITš•‹nQ„mºì"±Æ@ 0 -Íª Ým]Îš�ŒKBå�Z�zdC¦««±�êë…”Âeµâœc�šf›j›y_ì†êôNvÝZrû0{•¡Zf®Ê©Tp^è›å—F]ÎŽßéŠv—ò@ˆ–];•ì­9ýšhtÔ’ƒN�VŒ†´1áÝ6=7�ÕYqã4ÞA`Ì�O•ñX	_æßŸð¥ŸE�Ò:ßƒ˜Æû7è[Ø·„ïºÌ¿_ÅCÏÃÇ2ØM`#‚}Ûü`îÃ9	Þ�O¯Óç#ÜÿÍ&|¡§¨ˆxxbZÜ�Â6ƒèJÄL7ð–M:±2ã1 ^6ÏÕñFÃzL£„’6Ÿ¬âQ‹ÜYy-�nˆL ClzXÑ0àØ˜·\,ÍÉ£Ô«r6ƒÁ”uqH€˜·d°ë ë¢_Í æ¶ìÍ,ÀY× J¢’¦,ºtY€TàÍ«ý›&fà†œ bŠ°@ÅBæ@€ ²:²ÑœÓ�VÓU54`U~~¯×ÿ¾y¤üãŸF>øàƒóóó?bà¿•ÞáÈ­ÙÂÇ•Øtä*A pÐM~Â•c³?Ñ×³‰9&p"p¸gö°#/ÌÂk–# dÀ8¿SÉ]�½¢ÿùXßªäZ³ðë
+»De…câòzüF)zÍðw¥+¹éÉ‹†jŽhùê´ÂÁØÌev¡—ßÉ Æú +ÆóÐyÖpäˆ‚u„ñQ½Tr)A <WÄEéjÎÄí’ §,Xk!NQ÷3h@Ì	&ÜívP¬Ûu•1‹QQ¸DÅ¹ÐÍ�+Ä	9†ÅXß:±CEK¥vúf_®5ü¿î¤¯ëkÇf¹þ¶//GjKŠ‘ÀIböEÎŽÜXŠ>KàÔK¿(q¨©„ ûÙ=“Í¼8üYbwõ²ƒÆA*ª‹º)q+»Î �Ì\ßÆ  Öu«,¦çÔìª}fÌB˜›—Wù0C ÄFüiq§‚‚ð™ŸÊy¤Ð…¿(ïð¹½^²j¿ZÆå‡-›£ÎÍœ‘õ$š¢(”°)@îW7¯šË.ªºÊG³rOÆv×*Ï9¿hQH†…er±ÔT~U:Ú<­OìÚ+ÚŒ¹ã£ÛÄ;/ÒGœk7øu¼ÍÀdç+b¯�	¬"8¸éý! øYë×‹ßd0U¼5‡ž Á`Š¸'åAUæ3²^—e X§‡²dØiˆ)ä8ƒ’Ì"(ˆxÖÉÆva3_ª©¡å y'{ÅÀ,DÎS†«u÷¹­øíãŒšûÂo*Ñ&–³NÏÁÄr%ç¨îœJì”ƒÙðÏ™Åœ»Ó2¦©�ù”Rš¹(Í+þâ;5Ylâõ!'œk0ëôÍñz‚¼€ó#¾¨yPÁƒ)lG¸DlgñÕâõ—ìÃ[ôDB´N��)©‹=c2çUYÚ0;r`dÆYµXÅŒÂŽ�õõ|Â’X•ä8ãØàˆ´âl*4c³¨ÓëÙÞn~µæÀ—­ŽÞC…"«ÿßì½i”%Wu&º÷9'æwÎÌ›sfÍ“J¥ÒŒ$„$$l›Ñ¸±ÁðºiÜ66˜nƒ�ÛmË6¶1íÆ�~Í`ll„AB€@h $•¤’T¥¬¹2+çÌ;ßsœsöû¡Õnÿxðx‹åå×MïµÿÄ·b�X+V|ëìøö·�f_Îµó©^vCWñ~vEI¬(rªFg§ûÍµt§ 3Õe“1>]a#¡*ôP Œ)\“k Ta3­˜XôØè;ìÂdW¯xÌÙ¤‡2èx0ïãžmú&Gs^Œ€ËðiFü!-<B¯oÒ}[t_ŸN^�ÿ¹KgÃoµè!¶‚°G+xµ†ÔÆIwPëÓÓ]:6·äÔ#PR)a8 óU<’C·—t¦GÇXŠ©9É®èzX’0´ ÊÁtÐ`vè”	å”˜�Å5õx‰�pd’²”m´L ,ÚPJ`½EOlªs	´B˜PZÌ7J\)P}½nBµ£—†z;'5ÁH—i	‰……>ï æˆÝá`;X3ÐÞ”+6ÊÜâH”CRoHÌA×F¯¯’c±•�e„�*YhžïÿqÁxô‡î�ä?bþÿH³ó¿XŒ˜a~u+ü7šl¥G†;™sÅÉD2Y l~‘À¨z¦t9×SšJ¾õEÄ¤h¾èþ7ÛxÖdë–8eO3Œúé2y8—û¶ÎX/J_à™\ê´Q|W¦fG­ãÃô–NüfMf®f 2†i¦Ç‚üš0?,0ÓdÚ¬©Èq¾ I²¡ÉsøŠ¤JÁx²%‡¥¹‰Úç"nª³¡*ÆZ)È†Ôq°®(³Ñ`ÀùÍ1¾G €® ÇB+'Ú!®N´kñŽƒ&¦”¶³=-)kÆ’8bÈIÊ7Kt£hçl'?+¯jßS³Jó+S5S4brþoÅr‘µ½¦î~4Io`®8[²î-‚õv:'éK<ãÉ˜Z'j¢f¬{*Æú„¹<Ôd£ã±8£¼!&²u¹áâø${±…å¡‡pÎ„*Ó�ú¸'¥ž‚¸Î’‚Î¸X_ÓÿÐT+›új�'gv‹—õii3‡âžÚ9È¥|3¥<¢a‰•$±:Û¡‰¶rT$¢]`È€­æ©�N5U7'�PÂÀ•à(5d%Ü[c³6¶A÷l«¥múV¯ùnö_÷²wlÐÝµëxtC sêÆ´báˆ‚¨GÇKxù�õ'+xÕ,�†ü”ú?+¸' å"kô••Ï	é½â¥9±ŒÐ@e£jK›c"0)‰Öˆs×P•-Ö¯‰È7�W¬opÌÈ²qq%|-ÇÐ`‹‰„&ÑÏ®ÙHn´YwÄû�`A+½¹fÝßÎ”Œg35d×	´ó©i3 ™®p”1¸â3OÕüº¿ý^]Ð”ý´FBƒìôÐoðÝºD m?­ÿÔ„jLÛ	{°�C¤ žbÏsëÑ…%)«
+k=Â'&Äl_‡ÐV½”rM8&Œ�¼Vë>‹;Š]Ê# d@Š‹­Ì%‰ÜÃ�UŒs�²9YÍDÍhà±ªT^M‡¯Ç4d¨B5!ÉLu±›>ßc8n¤=e%d·u3ÔqN8*ìuÙ.±BNµõ…ý€�{8˜	\4M,(ˆÊbZíÑ“›t÷€NÕñ¦€–RØ’0<Œ8¤S 0Énupæ0ÞiÁ¸#
+bGút‚��À6LX­â~ 
+è€e7905‚7çÐóqw@gsê%´®(P«úKtL, ˆ*^SÁƒø1)õÔ" ñ€–Bté Uq¿…>¶©ï+âÎŽZ]U�è*›nðYF«¸ßB# õôaW«vYq‘��ñùŽù³\Àé1¾£ÎÇä’4cKõˆ˜z‘Žâ=  ††�vKŸ(²‰‘ôT²)×»z¹ÌÊQtq¤ÂæLõ<æôå\JY‘G.gÝ¯L8_ÎÔü�O­•ÿËÚüü3Å>ð�—ðßiøïÍÔA†é »ÁÈÃ5û.Á·<ó‰¼²hy#z½Ã›Dåa~¥Áúav#é‘8¿
+ÈÝ~«ìügƒLí1ùÏþŠÍWÖƒ÷
++*eòp®§M~1•ûm±Ä0ä7Œÿ½Ö“š¼@(öóƒëÛžùH$�"è²õàZú<Àiç³i(w*òCUYÍ&vØ«Á”$L–xÇ€ÙMµ¨@è”:Ö9Z!õä’Â	~EK-­ë'êl§@ÃFSôõ†~ÝXŒU£§r�£ioÊº`‰eŽ`¡ÇWÊÖý›ñO[¼gòµ@&¡d}KëJ*÷3Ì‰ìH�TËå�HÎ:b­d>e7µ’×Uì»Û&°4yA~Ää[%çQ~}¤&r²¦�orwÅz ×Ó¹ö …Ë2_t6r×a–‰ª£‡2‚Uëº-ZP¦ÐäàÚ0ÆÀL¡™ÀZGo…p6§@�Ì¡×à×PÙ¤¯›XePæèdÔ× X…í³jKŸõYƒ#uì03  ‡ÄEŸ¡ÙTØè1Àr @m›Ùm½�ìÒ“›ôU	˜Ò ‡Á¿¡|ŽþX€W€½
+Ó!,HH#ºäá¼„! VÙªˆfŸžža¯ña¯‰¥¡Þ² Zf‡‡´èâ$A…Š´Ï3�w°ŒLÎ”ÇòP—”©öMÌ9
+ƒy³PòÄ9†º'wTŒ¥D�­o:|�c\´˜[,óÍ‡Âìf�“E�<èñ-Áú™'0q¦�ÏUŒUWœã¨2]ÍÉnÿ}µvGûØk¯4gPD0øyŸZŽ)È{t|_Ð9wµégútª‚‡Xëú8 0ðð pY=®‰qôlÄ³ê®;4"r©	ÖDº%‹.Ó5chrTDÛ€¬žWdJÀP�LÚO¯§CJšüœüH3ŽÌã„@9™“bà#PNF iÄ:Ê†Á²%yºˆããÆPQE’I�	G·ajLÔGùüŠþ oÒBÃZZÚÁ_eÁLëãìÖúª‚d'û¹5ú2C›ƒÝ‡gLs`LƒÂB	wá13ƒíiöS	u4d66ˆ'èßîÂwdÐQF´&!hÁe¼Ò…Éš,™0ââtJÍ^ŸÀ†3€"¡Í:;”SØ‡„†Ô€‚�5+m¬uiA�`)£‘+È8ØN À6=�(H¢š˜X0Á›±4§=)ÅMýÝi±Kkë‹ÔS©ÏjÛú‚´ÀÞÔÏx81 ³>ÎD´YáãËmtúºmaqQ±ˆû4ÐºZ²°â²²ƒ¥–^’d+È†J´%À™õîîç{Ë"C�Cå×­û¹o#½ê�Î‹î6þ^ þ£ä×Ôþï¹ÿ,Qw>y©ÿÑ\5ã±šó…XÍçÚiÅ?ÓŽßp±ÿá\WqÞÛ¡<�«©XU¶iñ•fú"‹_ˆå!�áúðˆ¬\�“WÉk¾&°É}?gòE¥G9[á¯lÇ?W³?»Üÿ/A~Ä5ûKA¾[o%·_þ;ƒµ#]2Äy)PÕHÎ:°yŸƒÚ�‰ÅR¢•í[Ì¸À4ÔiGº]Ù°˜D@6‚0 ˜A,ÐdÀX‰Mf”ÛX¹Ü¼>¦¼¯»>p™Þe1›AªëcÎgd#ÖÓxUlÀFüBG\0ù%“_’z¢dœ÷Ä3­ôEcÞŸ™¬_2šÑ/ &®ùˆ&Sƒ… ”v l>Æ0,zÕdïÝ-õ¨à«q~ANß“ëšÒÕÉê³)ïãšü’ñìFürOœ3YP6ï³x3×Å*7m”[j8kf­:^ 1E%ÜE M¨r°ð,D´2Ž?YÂe¼*€³NÕðzERƒD0çùÍ[ú�6=† rvé4C°ÐØT¾Aý¨„¤‹¼3ê¯×eÇÅ¢…¶¤<¢  |V¶Ñ’ 8€‚ä¬þSç'ðC:åÀØû©ˆIŽæï^¢¿lÓwL¨Ä´jBMAÈÀtq¦O§RhåÔkàKcÚ6±Ø£BA–PË€ò€Î´Q�mÐ6š¬¿šyh0™h£d>S«(`’Ê™.ò9‹µV’žX@Ì\ãdÅ8/X§î|A…ù½ìºDrŒÇr]é§/¬—ëE®Ë/rr�–ä"*ƒ­û<ã±Vzc¢&ë!‚+O½a¾dœÈ8¦¡¦çþÅ®éïyX5Ñ®²�U¼š�g/ährôL¨šXEYƒ]9Î^\es9$=ºp¹u`Þ¬1`)±£æ«\Êã˜ÛÒrÐh+ÞÌçoÉBŸ.0ÄºÑ«ˆMê¨“]æ2]dE�Œ¨©ºu£k20À‚h7txÄ��L[ç5¥BU<l�:ZÍJmµÉ k²»­–Wõ×¶U/ KËêØ^ÇÁš`Ïk°£”Rj¶õ¹œ*áá„Zãø²}âuMzzQQ¤ ²a¼Mß=Fo± êÃ�.=ÎÀra‚ƒ·ªï–0Ø†oŒ±+J¸ûrü †¬ˆ‡ú&VFðÆ
+^WÃ£mz¤Ç$²€ÎpO‹&T	¤��üçÕ§U<¨ 
+a€YPhµOÛ9¥,–;$U<<+™èÛX`y0�ChcmE®i›ïÑâ3éÙ”¢!-Íó;âê´‰¥2›P�¨Yasøš~ÒÁF™•K¸Ç@1-vwÔF¬E(ÐéÓ¹üÕ6=e˜EÜÒ¦ƒÂ@^Àq	™‰ÞZN�âÅðv—G£¦tÖÓ‰<¼•^é±ôÇg‰ÿ²ÿ|>;ÿ—ÿµ~v½À°êüm/y%‚ôÍ‡£ühÁúvœ_eòÅTîîå—qT%ãqßþ|®vÅù•ˆY˜_Vwþ²—¼
+€	Ö³ÄéTî©º¾| V£uû«ýìùq :Ùu.ßŒÕèŽÊzÑ¿n§7	Lªö=½ôVíŠ3‰ÜAÀs“m¥jb#¯›(Ê|à§9ë*‹4#€”™…žƒ¢«»cÂ_—í�Å+´Š ã|×ù•Y~»�¼¯»x�`SnN£D˜—DÏÖnËqØQø‹NòêD—-64Y3Ó#šLŽ©$ËfÛ%ûî~ò“9'
+ïKòk,ãx/þW‡–8­ÉuÌû—ž,ü'¢B"lË2ž@LzÑ[}ë+†qb½@0óþvøË l¬øk­à}™štÄéav•+Îw²£ˆ:TÂ@,‰­­¼ÓpÆT‰*¯ÈYƒÎ¦Ôµ°’SÂ¥œºEÜ/!.áÙ¦þf	/O`s¯Ž¨�BÛ€"�ŒaÓƒiÇ4ä|(ˆ¨ÀÍm¹9„‹³ü h«µ:ŸŒtÚ¥³Óü²MµÈÀÌ WÁ]³†ºë`±À0!Ö×Í–~ÌÇÝ	4}Ü9 Ó�PÈ ÍÀ±q\SšÀZK¸AdÐÀÉ2­âµt4(&L,´2É�@Wm
+´m,(b[hç�;h®ªã³âHI¬i²	˜�½D7,Ö”ägº0j9È¯¬ïˆQ~…"¿`<¦¨¤Én§×OxŸ
+²b5U2Žiò ¥Ô•Šó7DÎ0½5×#¹"'Óe‡¯KòôZVž4{ßŒäC©IôU™¤u¹:Æ§�0ä è­6<˜îÃÂþÂ®nnèoÔðzÆ Î�â5LƒBÀ6=SÅË<æ-ªoŽã�ZBÖ§ó&”Æùî¡ŽrˆFy5Öà0 ÀœÐ@¨Å	( ¶ŽÏ
+]Ýi_`ê‹…@îkI×g,%&Iû\1Ð‰¶*I<!å1ÖW™ÍÌTgD’’¶Ë¸;ƒÀÇz_o ÀsêÐ„ºÈÑ
+h9�mê%ÜÒú€L¬™P)ãî=K ;ôh	/—4àèP² žB³GO�ãí,î7|-Ýü\ØXO_Ì cÁ 
+°hF´Áb¯–0Å4È=[Ç+»tÚ„ÒÝçàtBë&T=œ· Ö¦Ç\œa`)Gðh}I1‘A€�°}ëú±Qvt WRh×ñò-h�lVÖôwçùóÛjC #)Ñ�!˜4F—ò¥›I¨ïaeIÝíâŒ~‘ÍHÊ2*H¦ÄÌ¦j° C½mc)‡¸ÊjCEÔa kéG|Ü«!�â‡ÖÕù1ÏP@¤�K  §Œ½þ'ÎÿÕï+ã‡ñÙùc«û#~Ìß•VþeIê_~ùÚ×¾?ûÙÏþ#òÁ~pjjÊqœÛn»miiéÿÿŒ\��ºŸrÅ©¦-¾*X�±n/ßŸä‡5Ãp¨|qÑÏ"æQö’åàß®'7fjš€Ù‹°l¾hß… r]Mòë§*¯öÅ9 íŠs©šFLËæq[\('¶‡ÿ)‘scÎgâL*÷;|ÙdÛ[oÉF¬kšlC’WfX`Cä3c1?j–P’Cn£ÝV•g€€Åg¿ s2k]�­à!uº[Ä²�Þ¢\j5iŒë)9b�È 7Y�èªÇ’²hÒÛ9HM†É×+ÖWËÖ·m~ÉåË_kÇ¯Iôˆ�ƒ ½C‘/Õb*Ø€l³þzÍúf&Eû3‚¯t£·(Õ-ýavKkøÛ5ÿ?¤r§à+qv³g>Z0Æ¯µÅ‚ÅW”o³�gÊæ‚Ã:ÓÞëÊ±œ2Ý¡¬ÅÄˆ"Îp m¬oéûŸ“íqtcØÜ¤»Sê/ëÏô	di��ðq^CÎÀp ááØ%ýù
++q�Iˆ‹L(PÊº&Tž{
+l$Ò‰�ÂÃ©mµÞ‡S9-¬!b¤#ÜgÔ�rk[�?¥ïÔ�*È$ l_€ ”*xTS2€gøÒþDË1¬ñÐö>%	‘	•6=äâQÀitßÆâN«'€×�u‡ÙCj»hj YqDJ]pÄ©ÝHM ¨X5Rí�Ó©Úª	"3Ì¯ÈÝãLÍ*]TTœ/½3“ókÄ¹TÍøÖWlqÒ§£$¿\“;Y~£c,8b‘aÞ“;(Æ¨¡$y™®Íc±*'ºh¢èÀÀt\LI ˆÚuCÝŠ`MCÁoªåUýEç$Ô¤o=£ßZ¨Oç†´Ú§§]ôB80n )Ð…2îa`ø¼·¢ÿÁÇZO%®ú*�5�™�çÞ�½Oz«ÎFLt,–KJZ2ëKo=½æL¶b¡È‰Hm}þdþ­³ùé˜ò¡&•ËXJH ˆÀ@£ÎK€h@aL0EIO¯P…MtiaH+SÆ(E´YÅý.L10Öô=u¶ÇÀ’„PAzF¤ÁŽnÐ?ä}:n`Ù‡]ÂÂ pWË9õ/É“GÙnÁ1l*Ê‡tº„û]%�&ºXÀ�|Ù³ô[fLÛ›ú¾Ì?«?¦5ke¼"¥ç2hWqÇXÔ9XÌué\N¡‰Å–$zM¯ 3=}‘€4¤m:aA­‚ûmI©R· ó+êq�Ž…Þ¸%P98Ú«ù¶‡cÛúI ˆ)˜b·pvÞ˜¶Ð`4é»56·$OàÈ
+-,  tˆÀ%„ ‰Ÿ?D    IDATZRØ§3%<XÂ*e_•Ë¾¸˜icgá9™ÅÇÍõíèõENÿ_(æGÌoÍÎg>ó™­­­:‡ëSŸúÔoþæoÞyç�ßùÎwˆèå/¹Rêàß/ÖZß’éñnzb"X·›¼:ÖŒ± ÓEÎZd‹3¶qBêšm<>ïÿÎ‘±ËkîG&ü÷í/Úb1WóíèÍ¦X(YßfÏï‡ïhf‡r5“È9Áz«ñK,~Néâ ?d°mƒ·Ö¢7Æjv�ï%àˆº›Þè ÑÂ`ƒ55®ØvÅj¢‹6oî±·®/>9jnÌX-Íd¬í)-”%VP³+íO©Áj™M
+ðFø¤‹•ÚzE�š\4´…¬ÀM ð˜!ph²A -�ÃžœïË9“õMÖi§7­F¯ÏÔt¦ÇL¾Q-üGWœuþÚgsÝ(Ø_$°+ÎGÙó	MnÉº»äþ™gÝ3Rûõnô"^/ü®çtÉù¤&Oª¾õuÁ–}ç“©Ü/øb”_åW¶ÊË‚ü¨&�aDÀ|±Þ(ü‘Ã²)sXf,%]æƒ>å2»CÏè�V}Üïá¤¥q|~¯ðaß:}Å†qV�Ž×y½ÌæRè¤ÔaÑÆš„Ðan¯=«¾±­ÚtRRº©Z+ú+²Ár�íi©K’tNé6=�€-zD ]�ËË¨×Ò§´˜B0�¿Ð‡…&}{_çâl�Ÿà‡8™S@§8gcCƒŒ`	€°Ø§gjxS«ú”þý–mÑ�—ñŠ”úvJyŸÎ§.$¨@-¥^O7g‘�d€ŠÐDe°A;½ÊæÛÛR•Í‡%‰Yÿ}¹®–ìÏŽÙwlËd“îµø’g>�êI×x|3øm[<ë�XâŒ-Î)*qì™ü,BäW|}¹ûwJWºÙÕ%óñ¹ÂŸJr9d dó-›¯²k
+bc eÝ:¶×}F`k3/4Ä„EKãìj¦‹¸“�=„sÊz´Ißàâþ\ï0¡v†îèü<{CD¡‡…"Î•yQo%ßt±`a¹)“ìŽ�ú²sù3…¹œîöq¿‹åóù%�NFÑ ¯�£)Ð¨êÀÅÆ¦:¿®ÎTZg»x£	¥ŒÒ„Â”x¨¥…š¡¨Í„¢UyÉÃ*sC¦L	Që.L¨ùéµ QÛÆ‘ú>î >Ž7WñÀ^ö¯
+°÷Lá«kxS/w°>Á/�hÃ‚ZBÛ<XÀ]	l�ÔïÛ�oóq. õ9þ“}:«Ay8žS´“¿Rƒàí€·L±›‹lf”½`•¾ÐÀ;2hzXìÑñiöª
+^¶“ýÜ�Ö´îãny	çhÖÙ~iJÝ1vUwPà`åjÈ%ÇØµÜ§AJˆ5d èa5…¶¬„†«rYAnB)§ ‡À@{‚]£Iåc[ªeõp
+aç x}ºéx„{ºÐ:“€24 P�”ÙŒ„¬'S
+3ˆfŒ©�tOFtfø¦ŒØ„¹«QéÖàŸ�IŽ\[[{Ï{Þóñ�üŸ‚þð‡ßúÖ·¾ñ�o<zôè'>ñ‰“'OÞÿý? ÿ¾7†‘É‚~¾Ë,~:UÓu÷#ëT˜_á'C ÙM_(Õ„cßß™ÊË6zŸŠ³›†ÉkˆŒ0? @_m†ïTºæŠ“šŠ³Þ_*rR]2ùJÕXlC°vÁ8ÇY�Ab³ /GbÑd+¹ª–­oN²"¶R5ªÉb(·³q"£ÀW7Ò�œ_
+ß©Ñ¾œê¡"‰ ¬U¹¡HûX�)  g×ôõ†…Å�JÊÏgCÇrŠ»*E€@1Éž
+†ùžDÓv6S0žªˆn¨&ëæ“C-C5âˆÓ%qºbœ#²ÖâØ‹Ò;r=Æ0´ÅÓ&_ÍånS<½üÇ‰â;MqF“Ë#ÝðÝˆáêÖÝe÷£D^/z»”;³üH;üÕQÿÝZãüŠnôv×½¯Vø@”½¨â|2�;35ç�˜lAeªÁ1b˜’ŸÎÈ`˜Ú¼ï2@Ð+êé¡N³8P"P ¸®¿ÆÁ\Ó÷­ê»C¸0†·öà8�šb?¹�ßÕ×—x	´ø¦~ ŠûÏË»|œ@N÷oÑ}–wðWùXsazEß×¤ï,ëo­è/�±«cŠ °ÌªzBQRg{,¨öèxŸNoÐ½%88Å^Ñ¦‡:WÃ/¨¯¶è)†fç`õè‰.‹aµ {8¸‚6=ìÂ¼¥yü%F+ø�2+”˜ï¢1ÆŽ4xµÎgM§�‚a£¨Š�¦ZF€@NÆš…j¢Æía~µ�é0}yÁ8¶¾�5—¨9Æ†šÜnòj‹¯:Æw&üw+ªh¥«¹nh*›ÆÓ®ýeÁW‹ÖƒµÂªöçmqb¶ø+a~�@¸b±dß=PEî0?Ø‘~¢jfô²#A~P’UâÙR2 ²­(Pâ>�P%Ø/a@ 98e<hcm“î€9üÅÚŒEýéu»túb¾n€—ÀVRRœPà³"î²ÛÜç2¦I ªx”€&ø>F@}o&¸ì·žyþ»6vüâY“9Æüêõ¿·bb±ˆÓ£†ÈztÞÃ1L©;ÔCEª§’�^]Ê Ì C ²˜Ú.«î1§Š¸sHË6–%.N,ª¿aUA2¤‹Ì•pWFI	÷wèY	IDÍ�6út1†Í˜V%¤]:Ý×-NÍýâg›ôh•íÃëöà»]S”Ç°Q”]áaiCß×¤»z¥M‡°lbýYõ¡óêSC:?ËÞXÇ#W?ÿ”ºsïØÔ À=2„³9¸‚h“ž‡c ˆÚ ˜QßÃ1wHGÙêí˜:U>{í»[µw½ê/¾{ÛûÍƒ¿´Ñ¢§4H+9ô	G{‚ïI)Ð¶‰…9žCÈÁ 6  …ö(»,¦îªÜaûxJC™ »Æv§ÐñqRBP;¤ÍCÆ‹RÌ6Ù0/Î¹÷×E€ ›Yc L ¬ˆÎÝûÁ~ÄüñåH"ú…_ø…÷¾÷½óóÿCFœ¦éSO=uË-·<w899¹wïÞG}ôûá?`}©ë£î_4œ¯„rW˜ß«É^ü¦PÎ§ª¢Ék†ï$Uªf£ì“m÷³›ÛÙaS,0ì#æ9ùš
+Eû3eûž\�¤j®�Üæ×Ž½j=˜©™H�­‡ïLä.ƒmÚÆc™ž¨Ù_1ŸäŽ ¿b¨ýìæ@U$¹9¹É�Ï=ëN>Ó—³6ƒ®MµbbÀ€ê1`9Ñ¨!Çøt2¢�‚<¡`ZLöõ†‹5xN™‰\AS×g¥
+Àb`¢ha°pÊZ0·“úÆ  ¨´ßÿ«ßŽä!ƒojr,~!Sƒ_Œ²Êö§ûéËÛñ›4yRO+=6Yz«&?É®1Å[œ¨xÄXŸ³V7|‡e>Ê1|™a4VzGš_+øòdý[œÞnÂ4lM“·»~�%Î
+¾&©dð¥‚ù½\—q*’»Æíorb;/)b�.ï6ök�ò]´ –AkoáàØ8^ÃëLÙ¤¯Vñú	vó²þ;'ÎÑ‡–éÓø”Š¸/ƒp†ßÁÑÅk5äæ98½®Ô 7ôqGºt,ƒföŒ³—6õÓ›ú~ö<)ÿp†ßÎPÄ4\£¿@æËxt�¾âa¥ˆ—ïä?³E_#ÊÖéïúôT.Sy°ÓÇýŒÐ€NTðêìI`Ó ¿GÇgÙë|˜`qH§ð‚zh ƒžtõR[E‘cÊbŠHECêÊñËÜ–À¼n=\3ÚqICP’¬fz]¦æ=ã„Áq¡d}#W³%çÓûs‘Ü€aúŽy"�rìK]vÍûúÑ[ƒøuÃøõ©ÜÓþ¶Ò5 À*ö] ÚäËýäeûKïµùÅIÿ7çÜû
+Æy�’c¾-ÝŒ¬Œ,Ÿ¹Æ.FØžœ’ß[ÃÃ[tokîð`·�{s
+}¬`÷{�	ÕYöÓä.öó’â&–Zôd	woéÇFE#§pS�Y×_,^íÓbª�£ˆ)J¨m¡a¢lÓ3	µKû»Ëß÷ðÏø»{ÞˆÚq¥gX`‚g 5Pn�GTjB¤4ásæ'0àh(HØ	õªx ­Ÿã;XO/måÃ‚ª„Ô‚ú€Îíæ?cC½€#x…@ÛD+¦ž¤¨Ž‡t�»ØàÅ´Vg×…´Ú`GJ¬N }œÛR‹sìÅ‹êïsˆ#XhnÒ½<˜R7£0'¹“¿r–½ÂÂ’†¬†‡à ÿåVÚô…€�äÞÉÞšÀv¯ØÖy0_Çk$9Ë¸gšÝr^>\fUÇ=˜‘”×ùÌª¾7¤5iB±¾‚”¡YÅIm&>ÌãÎÕpÅÍ%ôNÖ2è*Ê”cô‰TOwäD*¦æ(Û+!Ž©+)ua"¡Nvé*îïè•Q¢!7ÑS�	4·ô“
+b�¢OçbÚÒ�w•v°&Éê*³™ïlÝ`½”¤‰œ!zbe+ÿŸ~Àðÿù‘�|Dkýö·¿ýŸ‚ív[)522ò?ÚGF¶··¿þÖwÍZÑ[¥®Z|«Ÿï�µ;QyuA\ð�S£þ¯�~W`Çá— €Ö”äLºŸ�ó«U”®
+Œ-qzmøû[Ñë=ó[¡Ü]±¬Ó~SêQÁ:%c¡ 	x?»~ið×8ÞŒ_­Éµy«-Çû*›ðÃaqÃûS"6a?È1u˜2Pk@”Q2cŒEº”³±b1Ëaúl¶´¢NúÌ``KHWå>÷;=£ÄAsZìåc‰NklŒ *�´.›ÇLÖYI÷µuÇfÃNú|Žy®Ë�äžù¤Áº¹årÖ¬å×í¿ëÄo¶ùY“o°’÷Çš
+aòJÎºûKŽõUÛx„¨à8÷×J¿<RüÎš®u/cý(}‰ã<f·8îw×Z÷kò\ûî8y¹c>Jä£·Tý÷åjº`<®ôˆÁ6\q1–ûFœ¿ÚJnAÔ6
+�ªnž*£Ì*Pe»Êlªû¤>s`¬E98UÅë=˜]P²°QÆý#ð¢Y|Óýƒcì�ÞÐ�,«¯lÑÃ’-µè@c›¾ÞÓ‹
+¢ˆ6²_¿Œ¿�i€ÆÙ9XøŠuýð€Î7é��Á†‹�q¼ýŒú˜µKê«>îópç¾Ø…9�^	¯äà.Ó§<ØÝ‚ØèÒ£Öø²Q>[ÄƒMz¤Çp_äcm¯Ö °±Ñåh$4(1O‘•“È	T�ìrÜHnVdÅrÒãÝf>Z49êVvy"wéK"¹7‘û•.%ù•‚_š*½­Rù˜c~;É¯³ø)M^Åþ‚à‹eïÏqÑ6¿ëˆ§‹Îß¾‘©yÄØ6¿£ô‘p�… »€oÿAêQ¥&†[93@ä„MÕŽ((§§×êjP‰N%¤Ù{ KÇDd½m}�ŸÖâàôi ;tš@M°7ô×lô$„9a,¬N²—jÈ'ù!�(@D´=Á÷võv Ù»�mmuÌÝ¯Ûh?Y½´yêäœç†×*’’TO:­MXm¨ûCÝ7À‘”7ø�‚çzûŠ¸SÙXá`ôi) ++ÔÔ²±Ö£s]:C ;úb ‹e6ã1Ûƒ)	CCVÁ#	µ$t[­˜è+Êˆeý�‰õ�Öø<�:Þèa Lp7é»]½6¤õŒú»ÙÛ:t²ŠG–Õ=—±?ÇÞ„À[t"‚¥ˆ6GØá2›*à®çX��iA5ƒÀ@6Ão
+t”Ñ�@¦Ô?/ï®áÕ¼î-²B[¬©«•©JÍ'	t;'üãÿ¥üØÕö¾imÔºÒÅjJÝ*›6 haÉF_RÄÑ²°ÒÒK!­(HØÂy	‘…Åâ-Ç°ñ\ÿqñßÝ¤c6”"êø8/!jës6ŒŒ±Cº¯—t1ÔŽ™gÎ¯ßÌ¦gì…ŒT]lØüœƒ?|­UüˆùcÊ‘.\øÝßýÝ�}ìcˆÿ\åæ ½•c´ß É¶YÏÆd¹s/gÃFé—Z_[þ¾¤šoýC¬fºùþDÍUÌ‡r5YtþÚÏÒÛ3í'ò Ç$#s�¾b¢pg?»A“;ÌYüB"g=ã{¼•Ï
+ŒæK¿d×sÌ.¤EŽƒÒeöbÿ#ïï½«h\¸ß˜êbÅ<hj«N¬qDX±6}ÞtXSK“Î‰30\l´U¯Àœ˜Z’bG+¥€€Z¯—`K­™hf¤ëÆJ�Ù¡< ÈßÎvà!ï	ªÙßðÄÅž¬[lKë‚ÉV•öæR×ÆKoà�ø-6¿è˜Wœ�9Æ£ƒðß˜â´)cMÅ(y%b$ÕÀY/JoEÈLÛ¾×³ïâå7t{¿Q-üÑäè–ùH±ð—–ùP*Xâé8yÇ�oÿMµô« 4ZüUMÎfôæ’X*Š5cÑaƒa¾Ûa ’"ÝÓkˆ@ ÿ»	$Ðt7é´ÌÑY¤ÿÆÁmÒƒëôå>�iešÝ1Ï^ZÄ¬nÓýü‰ÇØµø+úžŽ^!PTSÚjÑ“1lå0¨ájŠâÞæàDD—ˆt4d}:Ù…Ç9¸)´;ô]Ù�Bº°ŸÞ‹ïéÃñ)|MÒ‚ C-µfC½ »&ðL&°€mZH©R«Oç°¯—&D±(¶5ðŒ°ÀÒ²qÆáƒ†ûI†Tµï.šOWí/Í8ßÑd+âcÖƒk�W^ë›K]¬¥u‘a¨uu8|¾e>Z-¾Ëg«…ßQTâB?z›TSi~u®§”Iåþ‘ÒÛ“×dj‡%*Þ�ëž±òÏ`½ð~×8Ñ(üÑœ½’Q&IOˆ¢ƒæŒ{…M"pÝbÝ†%ÜÕÀÛëxý�N!°º
+¢ì×ÖéK”/é¿÷qvƒîYT_ààTp/Pèë&�i™�ˆiuK]ÈH/ª»=ëéž { ·¶õ	Ë0u~ìŸÝzxdãs{GØå9&º­Ôô© V‘”30\ôcêdt;¡Ž%ÊhPOBRa³–(ÚÌ–�iÉÆZ�N„´aãh�í«²1îNñ¼Kúk«êd!,÷è¼ƒ£E6Áò8»N“ªñi<«1lŒ³ë'ÙóGÙ!yF2�­˜¶@1ŠW#ð6ê|¶K§$>Ö4È�š ècÍ„ÊAöþQvð’úr[ŸË¡? …šÜ>—Së´­VM´<Vw°Öƒ;ø>kø8@1å”B·~Ã¦5Õ�~QçAãˆtt£•OCòy5ƒHB˜Aî`­M'ÚúŒ…å�íÓYÝ	ve
+ÎÀr`4 âàx0C 
+8ÉÁh«5&cêà S¶ÓÅÑ¶¾PÄYK.Ž›‘H*8]†­ô°‰¼#Ç×“—&$hŽüQóÇ”#�;¶µµµcÇ!„"MÓ7¼á·Ýv[­Vãœ7›Í<³ÙlŽŽŽ~?ü\¢ì|Üäk.9å‰…Šõ=ƒµ#¹óLë{óþŸŒ¹×d‡ÙKÊæƒ³þ�Df,÷ù¡³ÝOü¼o>0æ|V°m›/ÏþÄ7ï$¯tøŠc7Y?È¯à¹šØ# †I.÷–¬»9ÆEVîä•²q¦j¬9¬«‘=îñn¾{ÔÜÌÉèçË\î¶;)eCÅûºw)³Þœ³)%àãt™Õë¼ÔÖÛ½2›b(RêHJrˆ ˜`} °°S\æ) ÕÌsë™ÓÉ.G€º.F/2XOªFÁüvÍ¸¤¨°žÜìYw{ÆãŽõ­0?¼=ø `ÛUçãŽùHš_ÁpÐK~Ú2Nö¢·éOH5ëX÷J5‰˜)=i» L(8˜Õª1Míû_oDoÌ9ÛìôÞ‹ ‘A©r¢âý	 öã×{ö]~ás �Ê½íáo{Æ±†÷qÏ|,×Gœ¨ŠÉ‚žJ–'JÜH ÉÁŽ`ÕFî`E@!§�Ç°RÆÃ
+²!-á2ª&T´€�’�në3ú[
+B6Œ:0¹¥a 2èmÓ·ÐÄ:ÏÇÙ>== 2G6éÞ„¶rääÔUà×ðFRÚÃ—Æ°Ò‡“8‡oY¢�ðûôTD‹‚6=Ø¥GÖé+Çè-’˜zÛt_	woé&”m¬Y£††£|wªÍHÕ
+|µÌû9«é^Ža3~��Y�]ßÏ.¦·H]GÈÆ�»By0USÝáûFçc®ýeÁ7ÉkÓüòNðþµîß*5¤/ã|Ówþªüšk>àÙ_(8Ÿöí¿u¬¯ûö]RÎ[Æc™š)þª&¿9¼“c§ÙÿsWœ�Ò—²ç…émãY{1§<ÔFFz;y�á~‰qÖºþÎ€ÎYXP�D°îÀd“î_£Ïy°sƒÈ Ãfwvéä$¾ÂÇ}%¼ Î©Ï•qŸN›P.âŽ>]Pú-}v”ÝðœÊÔ@›¡pq¢€åý¯Röh4ûÆ“Þ» ŒhŸmd88 ]%eÏ•%¤EBQÇ|¬WXÍÅ1 hëE�Ž +¦f_o¤Ô3Ð#" šäWÄ´=†×ÏŠ]m},¤Î¶ºTb[r}ŽÝVÂ	­7ðy%Üác vðÛrJSs’›ô°…Ö¿&ÐÛÇÔ¯øÌÛÐß+áþŒ†6ÑÖ‹%æ%°¥ WDEœŸf7mè'fÙOÌõmý@La§Z^Ò÷6Ø}œŽiMAlAÍÃIIªÆæ	¨Ï*PÛú)í=üÖ-}:¢¾Ãì2«tõEÆGÙÁÚñàŸ÷Úßš<�Õ<Í/{×…—¾´õðD/î€	•Œ¢”úLpÚÅ¢åÎõéÌ†~F€kBÙ…	Ÿ� hÈ`ààCƒá“ŽÙX‡Nr0Mô›ú]aóºŠ²VMÌºÒÞÌÞòx+#’¤S’EÞœ³�ÿoŽüç�Ûo¿ý™gžyê¿‡išððÑ�~Ô²¬#GŽü£gmmíÌ™3×^{í÷Ã f'å~‡u
+b=×�fr3³øVÕü®&/Î¯æû"¹1ÏÔ.×8éOX|»(Ö—DÛÉOµ“Ÿ’º¼½-Ìžo‹g5YÍøg2]êä3®ñd�_iòeÉ3žöì/2ÖOtÍayIDC¹«™M(²9¦RW·U;QÕžŠe èLÕk‚•Eâa‘ƒ8•èŽèÒ†:�CœPÖVAk9KêMy�íâhHŠªl.–ÓÛªÉÁˆ©•’­Éêd»w:.ïx¨2G&X?V³‚õÖHkÃßëg7wÃW±¿d‰s©Ú�I5.©^ð>Y÷>�U½;sÕp�ÏÛîbÁù€`2ƒpxC½9Ï…áN­!n°­‡\ëë¾ûQM>€	˜ÅÑ @Ö³¬‡9ë&Ù�íÞïEñO»Ö·ãX*÷ñ(?šSÁµ¾9fçFÔJµáó¼À›UÜ�À4È„Ô}/‡~Ý-º—�Y†«6éÞÝÏÀ(âþ2^QÄ}¼=�5Ö†¾�ƒ­!ó`G	+H$ eÔ-à*9ô‡p€&ÙCZòp'h
+³ìg	2ç#XS�Hp 7énì=ìcp[éÿfï½¢>Í®òÎgŸsÞüþsøbåêê®®NÕRw«P°Z„Æ€ÌxÙaÌƒdcÂ˜$‚D0ˆ!H!ê
+­V·:©sªª®øåðÏá�çœ=å‹¹ñŒÖh±fëYçê½|/ö^kïg??ºMó¤Ä°J7·éŸè$Sœ½F„XÆ7)TüøQñ]uÑªÒQƒ4ãÁæ&†	Œ’yCo]Ê[S�òdªW\1ª¨KJŒ<16Jšå¶;)^íÉ-GµíÛƒ¿f[aö®£.kÛôÕ¥iò}‹Í·åÍ¾ÿùÀ»¥¾aoò‹Ì¾”;„T›Ãýé/¬6ß0Mþ¹’k…Yždß{Ÿ�•ÜÕ9ÏSç¦úh$¼Xä	y$BÙ/Yæ˜
+8>:—Í_zè¤¼îP-¦5ÜÆ0	_náU~aÊg¯ð‡úüX‰Y†Ó ÛT‡^`yŸŽh¹Cw<*1™òÕI@�ž}ÖÂ¸ˆwì³OýêÂùŸ:óèÏ-?ôŸši>ÛÌÛþÄ¡’çUcá;Iòª¢¡9Ø³’3�±–pºŽ&(AMâ”CaKOxwÛ>% ¦vâQ}Èç7õVD‡Þ©5².Å»ï‘P~ýºýÛ	¯åœMíÎYý'kazö…:néÛ«#;u(|•úõŒ¥f¾Ù½]@Žðœ'àSãyýÑeqÛ”7ö
+AN¹ß·ùÒ…òR�n-‘ŒùÊ	çd‹^>å+…‡Å;$ü!?Ur2åÞeó©!_¸ÅyíÄ®7è†]ûâ®ÙrQ«QS³™Ùä€:Q‡ÁmY÷Ñùô'ÿfþ¥[®¼xõ?>õþë_ø+á£–ó0Ãþ”¯–˜[míÛ	2¦VƒN1tL« 9)O;â:�¼®Jøªoó~j`{šÍ¥‡6 ÍÙª|YÉ³]ûäœ.ÅÉÄz� †,,»Ý	„R—íäw|Å¾“¯åµþ?R­V»éÿ$"Z]]=|ø0€ýÑýà?ø'ò'O>ùä{ÞóžS§N]³êü÷¾ÿ÷4/ÞÜ	þk ^ÊmË°¿|¢ä:`µm�òoª¿È]‚æ¯KÊÓ…9@”¥f9vÕFRž1ìU�'\¹-)Sr7Ó§ÆúHf£ªó¤'ô´™&ÂÓ    IDATx¥#†™¹®á\œ—§·Ç¿>ËßØñÿ6½ÔD‚tÇÝÌmLàýâÆ–è4¼/ÕeÈ@ÏÈ‘i”¬vÎÓº*´Xðì€º¡!ŽÆÔ˜Øu—‚9ªbù˜ü&ƒbß¾4åK-‚ötSkÑÉ]ª®és[«ªÝ~qš` .™ø_HÍ�ÌÖ÷“ôÕŽØîxYv˜”·HÑ#”`‘•w„î}¥Yè�~ÛØ¦±+Ž:whá¦Ñô§F£ïÌŠWºîcÝöOÌ¦+J]<rìß
+±?�ÿ��¨ÖôB8ê9¢"/ÎtÚ?ËìÙ�NÅñãŽóR§ö/…Œ²w
+šùÎƒRô‚9lÿ;€ÞüÇ´­ç¶}*˜ ØÒã«E0á5—‚UñÚž=ç¢yLþÓ1ž±(2ìñÈ6þNÀ«Óküaƒ4Åî:ÿ)@sEµ	^¬ÓmKò„Æ¼I7TèH›noÓ™€º-y À�‡,÷ìšÆ4Ä�Ý¢¥ØÎyBp,ùXá‰½FÀU-r•KÏÚŸZwKø[øD„cS~nÈ�…t°‚®£KPº+¦[ü	†¾bÿ\×D,ôùáÛÔÿì Ù¡$RD%&1ÅH,Žy£P-; yò"Á2Di[Ýð÷
+�/7Â	Ê¤èõÆÿE©ó†ëÆÖœ§<õŒÃáä?'ù7ùjõÏ:êÅ¬xõÑÅ“Bµ>Q©üaàÝ8_TÎ>sœ¯=Ò¹5p–¢ïª}÷‹‚RË~®¯—TÖTÏ“¶sI31°YÄËZÂW]j=Ï?ÐªE±ÅchƒÄÃB‰±„H¼ë}¯KM	OÂß±÷µÄñ)_ÝãGKL|,OøbM¬ÖÄa€`xæg·^û¯£›¿¿?ã­Š8tÇ�ïûg.Ix%¦3\Þâ/äèWÄ"�vÍZHÕ9oÌN,ZKò–†èvdKAì…9ï^,vÚò F60Ó„§sÞ…pQ©ÐaK •yÛ¢<Ð'trÂWêbÀWÖìçö%Ÿ–|jÍyO‘¿,ÞÒ’‘ædUÞÒ‘‹;|OMTÚ²¦ˆfs×¾°^¦sÞ:,Þ84³!¿°,ÞìJZ:VÕÏí”7âU¿ýì~š_ûC^DKš“†8šY_sÒãûŸ7¿³ÃèyÔµ(KâµÞ†/«£îˆŸhÊåU§ëžØÝŸÝÔ—î�íæžÙŸc­Ko>œŒG>5rÚâ˜‹º‡CûÔ H#	¨3²ë{öK-:5ã‹bÆW+¢žq¶fï_ ;=jôíZ“n[¯Ž¨1ÆÙ„vò«bif§‚<-‚ð(J¹ˆDR21„�S°ÍYÎ­'”ëúcòÌÿo²è¾ë»¾ëýïÿ{ßûÞ3gÎ øä'?)¥ü¿øþßS¡�–æ ³ÊËUï3¹9êË«‰>fá-ÄïÛ�ý†ôäN7üƒP=GÐÓâ5¡Ü¨øÎì
+JšÞ&åíRŒua”¿ÆÂëx.ù÷2ÜŽwoä<kÙõäEI3Gô QÚN®¯³P¡œÄêlaë¡ìu| ü„'ŠÝìî’ÉXq÷c‘¦¾ö=
+êÎ½ –gVOì¦�¨3·=Ëºä|ÊE�‹j�n˜ñÎÀL,ÛœÓ+eæSÜÇ5»™mh†½¶ÿ‰ºš]M_ãŠQj�P�5¶¹—½)ÕÇ|¹9Oªý)z¥]Ñ\Ü/�˜v*?+hxŸ©„Íß+Bï^ßûl½ò³óä;§Ó×	1°¶¶µþ.×}<?¬èÖÀØ…z·¨D�Þá:[Óù�Äñó$0™þˆÖ×…þß\ðzË‘rÎnJšFþÇÁXŽ‘Pê…–w�'¯TU¿!:-¯Èë{öù]û„„ßãû_4¿á¡áx�^„£‹øzË#~âýA$‹ô�!ß¤¾7ÄÊ5°ÑØŽ‚5û7}~\’3ÇZÂ›/é�wÄ™- f|žÁ&;|O„C9úU:ÙÇ ÛÄ+¾Ü¥7�ùÙez[Ÿ¿”`û0}_Ê»s¾²Jßv\üð"}c‰Q7§ØH±5Â>Ú7¦c>-…ttC_tH§ØjÑÍÖ!Ï£xÝ<]‘Ã:¯©yf3‡ÄTÌLMs\Øæ´8bI‰…×O¿Ý“›IyÇ$ý¶Ð½o”}ƒ#¯FÑƒ’ú�z¬Úõï‹ý�îg|çÑjôëãÑË]ÖÖ+áï•ºîªˆ¦½á¯Ñz½ö;½�HÑ‹ÜÏÍ’ïÈrdlkž½Ã[ŽØ3r»â|¹°•‘>Òt6÷ÍF$‚ºsÁ¡@"È1°TÁÉ]¾g›?ÙÅ›GxBÀð4sìnØ¿sPsPSˆrì7ée—ÌÇbXƒ|Î—r	eÙxh3ìò�Þ‹ZyäWâÚuó–ðÈÛw¥¾$¿#®;$_åc©-nP�Q‰ÅâÐ®)DŠ50;’0" .Ã4Äáó˜€3çÍ)_eh|jÄT7œe<tÉ·ÌÍƒg‘		ï†X¾N¾aUÝ 7EwYª‰Îœ7vÍÀ¡H€¶L|÷¾Ù@à9¢Õ†è0tÆéˆÏ»¨�øœªÝÓIà|çØÕùºoµxñ™m	�ærd'%fºû„üÞ%ñÊ‡;âÖyX’;ç]�uÑqÈLxmU|ËØöz:cÐÏ¿û£YGË1ð¨6æÜ	^T�bE±CÑ¶ýÌŒÖ£ºCA<½¢Ï2ôœ7	¢N7øÅ�ÛâXL7Ì£»üP�N^Ãê¥Øò³60tÆ¡ÐCw`Ï×$»øˆ=j(Nß8YÍÊ²b@³½æ•'ñ•öH&ñU¾¯eÑýCeÑýnüùiy@ÉA7ø8˜}+@Ì*1KMïþL”J1KôqWôw¯lƒ—¼G}çùÂÊõ‘Vø[iùŠyùòšwï¼¼³´­õ¼¹àXÍ^ÛûÜ¸xeÝ»¯—½)³nÓY3$¦eX”À¢û‘—'Á4³²äbÑI[¿6^ŸšÂ'÷Dõ—??º{IœöHLm6áõƒêèÄÚ¹í×ÅÂ˜÷%Üª¨o˜ÇÈ—i¶{µÄ<¦Q3lcÁ‰mg×•ûW³¼èL'ºŠ´æ>ÙÏï2±ì;b\qÿ>)_±�ßv¢ú~!F“ôŸvq¥þ�Yñ*Ïùò<{§#/X®Ö*?VRM“äÂðSYöò,½’W|ïóRí¹.fÓÛ*µ§\û;¯ŒãL§o$JªÕ§Ó—åÅ+ï3€‰*ç6·ÿ Yû7J˜±?ú½yñÊ¥ú?Ë‹Wè'?âˆýYy£#&›ÅB[•	`h{Ûö@(TÆ¥ú.ß£ÕéÎ”7\ÔKŒ}ZñÐðÃºñ�¸[�ÓY¯sK9Û÷¨2°gët|ÌWDi…ŒùbH‹S¾" vøïŽŠóÙ‡lä¼W`¿E¯tPÉ1òcºQcr�5HÀÿeˆ£GÄ?Ä“öÇºx}“^°‹Ú€—ÍùB…NNøùò=§	ïÂ sG´P—ÞÐ¤ŽD\“³¦÷©Lß¸‘Ÿ¬ÉÒ—û‘z¾°K©>äË-Íµ@žoUÞ¿;ù•ŠwïÖìÇ–£ßÐ¶3/ïòäUAI-üÝ$“ï~©(o®D£õ"G’¼C©‹Y~·ç<j¹ŸJ’·
+1Õú˜ç}¡Ñº0›`wðg�ó€ ¹ç><ÏÞ•wJ1Íôu¾:/h¼•|Ÿ/†góÑ‚<1³Ó]~ÀA£à^†‚H±‘bÓ ­âT€Ÿ– 0xÈ�téM	_^oñ¹CòeÛæ"@Zîóu:Qñeó¥ +!u2
+r¬?zÛG·Ÿþc9¼„ærÍ–O»ë´%	&v$áÌy7¦%U¥ÇL=ÛoˆVßl�DW.ìé�EµÐ7³UÇ\-uL-�Ä†y~AÜ8°ëEŽOÑÄn˜Ô1\jÌ-Ê�²&êWÌ�ÊWâú!�i‹^PEBV¤eË¹ÍR€Ä‚\™$QbÓUw|¥ð"ª…‚s–U9Ý(�€¼ó?¿ôåŸ8žLF“|Š7ýFÿS?êûåª„û’ý­Sò__1uD¾ÀUó·Y—þ‰AÞ]�±I<òÄ†}ÈC»)ŽYØ»ÿâ1¿U–õ‰o=Ñ�«æÉyº"çÛ%—˜gÜ÷¨Él®Áæ¦9ú-:m¸Øà¿:,¾#å½š8œòHÁÛµ_¬Ó-Õ”Ës;›ð…À£ºOÕ�½ áD�ÑqçÔf¹oašb5åT’jHÚ,{5±P•ÅÐ(ÙPã™©  e#@�@jé?ñ•dÑý'Ç|•Åü'Kùÿn“úGËýxGð:_®ÑÌtWK»()305mI^ÅýB¿¸{!üMEù¤|Ù`öÞPŽ3»”›cŠÒÝâ”KUkë©9@·ó[[ÞãËÁç‘vÑ{¡¶%Ç†%àùrß—56¤Ð(lK�)Ù�ÙtÑ)S[«ªõÍ’W½M•=;ØÉï¨ÐJŠ©f˜Ô*@bÂ—D[ts.$À%¸={Þ£&AtU7g;²MŒm!ÑP0©­EBr«ÝÂÖs³` R‹åðÓò´±KÍð-ïÁiþÖIþõžÚìVþ—qò?h’}»}!’nûg†ã?ÏÞxŸ*Š;Šò)·­í´ÚTµÙü{›�GfÓ\÷
+[±ž¥7¸^/ª\Ò%˜'ey“1‡ê�¿2lÓfã¯çóW¦7þ-W�mUršü�åú(ûfi¸Ú‰>°™¼­ënç¶60Ó”§†‹)Î-‹·Œù™Û5ºu‚ç"/Ñ+1\ 7Lp–€#êÍ‚[C~<ÅT3Et8Coˆç¦¼žò´*V5\L°™òº¤8¦Õ”ûµ\„E†½Û�ïìÙu‹¬À¨N'áPC!ªÐJ�ãi�€–3ÞI±qH¾•Pà!�`Îk
+ì÷ñ@@«#~š@ö"º®K/cˆ’óŠXÜ´÷�¯Ñläµm.vÔ‚Gž$™½âV�0IÆ‘/†±÷m nnVªÿJ›ã‚¦Žè� Àžó‚ƒªÿ±Víß9b½Ð·úîÃqü	0ŠòV)ž"L§¯«Õ?IXÃüàÂtú­�ÆÇ]ñ½'g0è¿[ëc�{Z¼>ôÿ&ŒžËóë­mN‹×VÜÏÏË;×p,™—	'ÂÁŽ<L¨<,1öÐíÒÝM:“a«@/Ç®K€*qg†ASœ¨³mŸªÐÁªXèó…
+ò(,ajtÐ§j[Ù@4Ôêü>|Õ	Ð>âÄ¢ëÆ´|»öŽLÅ³voF†!¡ò4ËŽ
+‘²Ü6çŠ<‡ÂŽ
+r+rduéúléy•Ú¾ -s¹)ŽI’Q“ð=òZj‹ºåZÉ©O•U§‹E†[“AÓ¹bìIkYÄ´Ò¤ãÒ·t‰ë_4_Šh•ˆÞ?ìtgVŽy½-k¾�[ÚÖDCí™ÝŠ¨Ì¬ŠÀ!oùõ=þ¢×¼“­ Y´úº	î¿¹,ÝŠˆ*¸mÁ)™�¤H´Ú7—<?ät<a®èD’ALTrvÌ94³œbÔÿØ+ß¸ý‰w­QgË>Ó7yD}£9E.ª+Žë eá©¶8êc‰ÁÑ–h-«…±" Z�YL‡Sì´Ä±œ³+ö#-Iz	ï,ˆ›ì²Z×§6ää92€=
+vÌZS$q×}É!obê qÊ,!AšE]�?m~á+á~¼^þ‡¯²˜Î¾ïkÜ�•æHiWå‰–ó¢á@sm¬o˜›¥Ä,?fÙßMÿiË}`’¿c+ýÖåøç½kŽV’’ÝüŽ#ÑŸJvÁ¡ézvsUÎzÙ«…v{ù«*ÎCšCIÅÐ—¢ßÑ¶RÚÆ¾ŽºN®Ù-ÙijËîÔ°;·örÞXVáT¾ZŽ¹¨ê	Ïpnaº²u�ê>µ»~]tGvòßÞà”'5«ÔpÓ’»E‰õ2¨ª�‰YªÈÒ£ÌÛJô4³áÁøWŽÇ2-^mØ©¸_¥ßcl»~(vžråÅÞô?{ê\è¼þZ-úÕfý}Yº‡
+¼ÏéòDwéOª•�Dñóžó¨5hv¶¢ð¿¦3Ô›÷ù!Œ†ã ªœõ|(®»>�ýàò‘¿_^ýy£Q·! t>MbyåÈK³ä{<ç±Jð‡Íàƒ­ðCíèËÊÛc91äÖ9äšŽl×Åò5CÍñv�é€õ±t¿Ó‰×§ØvÑÔ˜Nl†Ëu:}P¼– vøïÜ
+®;,î®Ññ=û�–èL„#m:Ó'42‡â˜SÞjŠcËâÕ”a¯J×uéŽ„·+tdÎ*tð¼ý�9.ž åQ7ÅöçæS»=ág"+¸Ð²ƒš‹Ö"}ã5š®CuÝ¥—Ÿ·¿å F�3îKDëö‹«Nglgî3lË9+ÉÈÙ/X—ìkx÷ñÅÊOö“ïvÕåvø›KÑ/åéTŸTr»0×;òJ-üýZü‹®z6þ2ÍÞ@bR‰ÿK¡O�'?à:�»ÎãÌ”§”Î§§»«[eáê„2¬�H Ï—�] *ˆÒNã‡ë­§†£¼¿o7Þ³RÿÎIñ&ÃU%z�‰lÇ™ÔU@Mzs›
+È[oÏ±³Éì/4éL›^ë ¾ÆÓq¯Kg6íƒš‹˜†U:È0{Ñ°îÛ‹šË+e/±öÄ;FÃ§&Wž˜^þ­£OüF3½_ï|jåÊ^#€Éš4m¹Ô7Š�©­ª|€ÆvCÀhØÙÞ(ûSD_°GY]4¬‡fgÇ\rH˜—ŠþÌ8.yu±‰ø‘â�ì¾}¶éœÛ(VKN=r,¬€¨Ê¬!Zƒ²Á�;>*_Åà‰Ýjˆ#9{PÇ¶M?cáR(‡LM,^5OÐÔN™™ÁçòÉxÇ»ýßì¾â§¶÷è~vúÞŸDV—Ñné&¼ca¬"¯&D@Í¡Q‚ô²<9çuEnb{U:4·~$¼ºèîšË÷}Û�Ž Õé„„Ü6kRP§9&çŠ‹C;(‘äž=‹pÆë‚Ð•Ç®A"[6
+þ‚¬zhH¢?µ,¾Á Í±?çË­Ží¶‚×3Ó9ïNùŠ€ô¨n8Sð=’*–Ú²�¹‘_?75pÃ9_‘FðEÙ×Õ¯°[¦¯ò}mÖú5kýõàrÉUmCAeÕy<3ÇrÛthæÉM@ô‹[]‘J”‚òÜÖ ª»OJš3«Ô³ìYV†=_öÆzµë=Èp´mäf¡îÝ_˜s}Ü—;“òˆ¢¢î>RÚ…qy‚ˆs« 4œ­¹î&V
+¢P¡Ü»œW]
+„…My$àÔE€fNxVð¬"º»Í`íQ�ar9ˆy	ï9¨´ärfóHxWÌc«òŽ–ÚÞ/ZÎ�`º#€ÕàÓ¥]šë£-ºgs³ Ä¬ê}Ö•/Ž³wv!võÔsýô=uï“®º‡¿7žý»ÈÿCÐRngùÝ­æ‡‹®�<ƒçc4|C£ù™°†Áª-°Ål„ZÊC>G>ÇlvS¥ö\ž‚AÇÃþÖí~ð„µ °?øÃJøRì»Þ»ýûÎcÆ¶sbVœ™ë¥¡1mehæž½Ì°—ù·è-.šküaµUz—…öÐp)¶0UÑLmbaRdØkÑM&¤È%ºF'XÓ/5ÄÑûh„U�£w-Q3¢ÕŒ{Õu=3ñ¹�PÎUû—mze‚�6Ý>àçb:2çµ
+Væ¼ãP¬yžao—ï%ˆ%zÛ˜ŸjÐËsôÔ²5þÃzw€å]þ4Aß=å­Uu¤gF‹*Z+wb5˜Y6¬—ÜévQé:¥/·Fåñ†óÒTiy÷æ`aÛçË¾ó$`¤ØUòª’ë;ãß[j|ûxö¯#ÿcyy¦Ýzß`ðcµê¯N¦?Ðl~p4|wgáÏ“)jmÌF«èíÜQ©<¦\LÇÇzv¶<ÿÀq÷Æ“ï¯Äê�~µÿb’¾}žCà>°6ý™®OaVÛ”]É–Þ(�AÑ³)Šg|¡Ä Co0˜Ïùr@+–ËëÕ7íHÂ™òfS­
+Ò,vÍÀŠ¢®¬%»ö¹–89±!u+""`fsA¢&¨`U°�rŒlŸaWTÕÉD7†¶ï hJwÏÌš¢6µùñð‰ÝüÌÐLøUéDrXØh[gŠaÛ2ÊXöÍU†¨pET˜ÛL�¬©Y”lA™Å˜÷"j¥<]uEéXwÆvbP,©Ú®ž7D}Á¸—ßÉ ‰)ˆ($7iÁÞÀÌ52qSºkúj@í‚§E%ÏjbÙÂæœx2Ø#G³½vÜ™òÞ‚85æÝEÙÄllª#Û#ˆ%O�“ðäDp±_Ü–Y²`Í¥…­K?·È¸èósGÕíÓ¶y^Â'(ÀæèWé¸EiYG¢M ’‹IÊ{s€È;÷ÌåUuX‘žµgÏ7ÄÑmû`„#%&'œã{	÷DTÅBÊƒ"ãþ‚8™rêS0´›5±D ºÊ€ ‡X3å¬DM–†UbÅüÊf­ïWö«,æ?¥ÅÿèÜ� ÍÍrÅy`ÂµsWã‰~Ýÿ»Àyz®�×�ó.MFºª(ñÄ´å}qRÜ’›ÕÂ.VÝÏÎLË—Û{š5ÇÌ4.^–êã“òX Ö
+sp7¿Ícm«3K®)1Ø/NÎ,¢o‡¬eW�õÜsS£¶‹¥†¨úälÛÇ\rª×E}`÷K¶9çu{T%� Ç ó¨6äg5g.U²9ïRÇëbÑ#S‘nÊÚE­ã¬+1m¨³3Ô�Ø#})yý°8%P¶�Íkaâuÿ£IñòqöUÿ/cç±Ò¬$Å«�/°\Ÿço,Ê—I±)Õå${»’uV©Í…¥[FX�T¨6¯ýH/nAùè,Ò)ÂBb°…2‡�¨7ŸóC(…ZºÄ|‚ |‚-<F/?ñ=ÖÖ“ì›òüVÏyJÉ‹ãì�„ÌÛrÕÛµ��ÈQMp|¬(Ä%ÆKôÖ£ôýö$¼žMy`Pì™—rLÜ•‡Zt*�F¶eŸLXK2 Ž8Gùg�«¯ó©U‡Ž«;ˆ3Mº>¤Ú!u@ÅmºuÏÞ‹êœ÷Š·µÅ¡
+ŽYè&�šñ%Ûö3}~*Åæ¾ýâ˜_(0ªâ–câ‡	d�íóÆü4A2ôaú�%qf†‹ ":2ãí€Z[†T»ZnÔNx¶möZ*„—˜FŽ¹ ¼_œ�d%�ëî‰¾)vï‹�'M'Ù7[Žâð�˜£${[§òï'ói¹¢ÔAC£al3ÏN‡þÇ=¾ÿik \èAŒd‚Jõ±"Çxpƒçƒe A¸7Ÿ½ë<ãùhÖþ•Ö×EÁ_Ô£_ždßÚpžÎÍáØ»WÑ43‹-éo•Øµ_ôPq¨a¡},Zc~ªN7UéÆzå’¸{dÇ>Åfú.©õ})ÛEµ¼¬–Û²î‰¹/èñFKêê€€,ØÎl°æ"R;g‹a&[òžrÈÞ¾¨9#ØÒ†’¸*Z.ù‘Ú�¨ËQC:ûù+\*žµ—;1nGVÚ2¨‹ª'æp{üÂª:D g\^»ªÌxÉaEŽKè=Óïºë§Â+ 2îç6Êm€„PÍ£ˆªž(ö²WH²SSÌy¯£Ê‚íKååÌRUTe³&}"{Ê1U9­’ç‚Ü9�gvÀœûMi|2;ö‰UUõP¹Ñ[™ðþˆŸ�Z“ØJÁzÂ5'(ÞÈN+ÒvÎ£¶²sÞ½ D‚ÄuÎ­†É°=æ\Pç¨ÛJ±kQÎy3áí…HÈó)_:ªN8¨–w®›G|jŽM13ª„fè�œE:PSÂßÐ3‡\In�QS.×ÅâœG9�›b¡#nÈ¹°(	hŠ•Ž3Š…5ì*²—%›HŽšÎ&ƒë2‹ÔU!¿âìú*ß×|­ÿPòEßpìŠÑBô�Ày<rž’4í§ïÐf±æ>¤m}»l6�^è<éÉ­íìu%»Ûùñfðûƒì[ýÏì±à|iƒƒñïEêòD·"µm9x)=ªÈ&¦;7í¦š§¶½›½@,¬a/y×ÿL ¯ÄjM‘ÙÈ�ÕUâ’,�æžq{(Ê�œuótÂ»Þï(»­×,Ìž}ÎA”£_¡FÇ—ÔJÉ3}Ü9b Rž²#“œzÔè—v‹†½¡®ä\L}“Ÿ¬þ%Ph[oú£í’#wµ­0»�øç—šo‹½O�ßÙ«†¿ûÓú°£.–å-­ÆOÔÛû r<ùqf�Ù^„ùE¥^šö0Ú†É‘§P.’) 8kàøp<èqÖÀ� FcÍe°…n¯]zo£ù×qô»€vÕÓBŒ–ßÖ¬þûayz)øÛÜ6ÌžÖ’xh/&ØÈ±?àG"ñ>ÕÚtZÀY¢R»!Cê.ÊvMT/™Ï3˜�#.E´:²W-ËœilhZ^÷’¾¿«Ü9÷·ô–�Í0Ù¶mé­†sÖ²‘¤nr¾¹dÍÐS^D%f#>çSÐ¤›2ìßãh�NºÔYo¨à¸ÁlÊ
+Šw
+¸5º-Áz•Žïò½;öácòÍzyŒãuqP#÷Èm¨Ä§æ”¯¨#×Ë|jgŽÈ�zÙ°l6œuEù°¼]Û–+öÖæ?H(‰
+O]”b˜dßø÷(uA›C±ÿ�Æ?‚—<÷¡¨ŠJøKGŸt½}]"†^! *]AP.ÚËg‹"šOàùXZþ…Ùì–Zý)·GÃ7[[4ÜÐr#PÏšùêÅ¬<íÊ5‡f9«¶Nª·
+’ª)¯Íp¡K_OPÏØw@Þ¥‘UD(à¬™{Ü�À!ñºš4vlÊ@ÌF:3XZÇ    IDAT¶L³òåãÜñç·ù$:Ê–H—3ÓËÃrÙ#PÐ/nI-Î&·ÄbÁBö1Ã'à¥\.{çŽB¹Ï m=«‹e_ö]¡ë¢S‘†ACS"íé°ÆÅ+"¹· DKÆ9]Y-xº¤*#ÝêªG®‡xT|!9ÖRyM´@Ok*"°lÎçóŽ³oX	âÍ²¢ŠX””û$:âO@�¬¹ëÏÊl{Î3GLŽ¸µ–èVE£+—s·ÄBOcb­€;·~�ùKùxA¶èë$ä®ÞepWœ&ˆsåc®I
+¾Pž/¹¨‹¦ ²#wè´<rúºœÙ,ãÔ°´ÐŠ’Ý[–Å]mqÃª¼9ÅNS\×7£� O,<j\6/‹;,
+½o/Öª/ê�h—ü–8æ¡ZpZò¬NÇqÆ©á,¤NÏlLìnÂ½ŒG Jh_nÄj+µ*gQ‚ÁCÝè—+uI’ÊíüøÜÂÿ@úGÛ#+î—³TríÜä'÷Ó÷Œ‹×hnÌMmR¼b7{} .ð®Ltg'ý–IyCC]Yðï½¾ú�sãŸ÷äÞ¼¼Å‘Û‚RÍîÆü=D¥/2 ½âø‚rÔpžŽd¯â<[QW}1¬«Ýªs%µÕÔzÏÌoë·÷‹ã%Ë„'[¥uÈ¤¯“_?°6Ê½¾íwÄ©CêÔŠjž+ÏEÔ(®Óqãp‰’avô¦„Óbjý¾hä›e¯)ý]~0áf³ê¼IsØ^³í(g^¼:”£H�Ÿ›U@ÌË—GÞ§”Ø�œ'µ]éM~~8ù9ËÕÅø}óì®óœR¥\«T¿�$¯š\)ófãæAJ$cD5¤Éë¥ÜòBèÑü•*$c${*ðbèn«QY‚rÕ1ë¡ÌÖ ºÝÿ5ÏWFž÷¼R—‚à�YúÏÆ³oy_tÄ6@{%Ò™-cZõÐbè˜NÌp©I_7ç]�BE¡O~GùXRnbI _V�ú ºU]�êSj³¶J4;Ëâ•¦+»-¹ZXV�qWG®>�¼´ìÎ�qÎ‚Á«ê(AŽíˆa}´žI(‹¢DZ^gF|™aO©ïðÃéºý«˜ND8À0»ö¾&Ý•ñîž¹$¸TyÁü&À9›¥Þ°Ÿ¨Ò! »f½)Z]åb/52ÓöÅ¾„î×yêlË}¶°K³blÍÚÚ4ýöõÞÆv•Ü 1Ý|2¬`šü@:C]É§ðCúßìØÝx��
+ÃML&ïpH‰d‚öòÜqáE°J^±Q¼î:OÌ“ïöƒ§ZÕ+Å d‰rËa¦¯ÛÉÞ85]Ì¬8«ÿ¶&Ôÿq•n°*  jáÌØö«ÔœÙ´)½˜Ž/«àˆ¡*‡Šhd„CEM:‚ôŠÿ”$[rôÆ�Üï4Íé?}¢á\qÄ|ÙñjîC‰Å¦yA/zkj­ãì�Ÿ4¬øä!�c	b6ÃòzËb «jÛp~ÀÿòD/»4#`h ÉT„Ï %w—€ÌÖz1µÁÔšŠœ	2‹j%Vk‰Í®ÚÏ¶KnÊÙÁ¦f/ã	˜$9ðDÉ°è
+ÅH#©¹ênŽuÓ9C3à7üÅãn«xýGÍltÌ_Û/Û‰‰g6•€Zb5’3¿d>|Ì9é7Eûz/Ð,f¼i`
+kNŽ‘€g!
+v#¹Ï(Ò‹D:5ÕšC³å“ñÈ�„O9Ë#n¹UTç&,8�qÙ7UíØûzö…Cò.	é"¾É½ÉÀÌy3åaHÝ©G5Ÿ–
+Ì
+ÎÜTR#oˆC¡ð'&­Ë@@¡C"éQ� ¢ÞÕíüÖÜ¶`Ød,–ÝmŸl$2 D¦¡æ²álþ�“³ó�vù�èéT8R¹^˜Ã¹Yš™n &šƒ@î•¶æËí™>ä‰aÉE™+ú¥­jŽÖ°çˆinkšÝÜ"–9CTÔ…AyR‘ØÓÂÆÿoÆÅkSw¨(Ø³L‘œ:bš›FÎþ¾é…ÔHi ³™G^Ê‰"§àŒ |
+ž<  JÌ²_XoJy‹ÎÐ^šðs‡å·ø¤,P²Ù�yˆ Jæºš¦6¶,éƒ•ŸÛK~¤°•Šºèˆ}%·•Ø™äoi”•w*±cl½ÿJQÞ‡ÿ5IßATH¹™æo¬Wÿ#~„<�b{ç§Ÿ)aJèAeé@ˆš(S‰t‚åÓ]B6CP…�5T€Ñ:jË˜îÁ¸H #¨`¼�²l2ûýÉ¯ÄþÇŠò–Lßvyþ–®³{6ÏWÔAÍbl'9�KLêæ<ŠiiÄ�©SC£ëÒM-ERŸ-ymum?}»/÷NÍâÌ¸M§—šæÈè–B w¯ñíJ×K^uTb#Í4µW‘sÉ|üï�›%OøÒ)ïpiƒ±qØ±�Äùò}³ÓÂµ8žgíû_ïþtÏÈŒ'O ôù¡EñÆ’§û|¿‹VLÇf|I’/,Š».˜/‹·.\ª<îÈC.Ù�I=
+øÏ<—tcÑÉxzÀqÂßeïbPÍ»'××gæXä|9pœfï¬ä»Ÿ/ôÍhF°|à/F=¸¬�ëƒ-„DXÃÞZ¥Öšê$`JTZ` £yƒË�ŽzÞ¥éì[›Í�V»n�×C6ÇdöƒžóÈ`ö³…9àÊµÒ.$úDbêzetü{/¹“h<úC•ûs¾tH¼S#oŠ&k¦šuM9ÄÌðD>·~]õÍæfÅ25ÝgFåÍ‰U¯ù‹{÷™Šºº[D¸d` ”3Ie /of§#©ëÎ3“òÔÜúu5HL½å>•è£n(¯öŠ“éžIcQñÈ,B‘LjÃ‚¹ën�ÊåXŽ5û3ëUd²Y¦U[—Ü¥„
+Ëý~ÙIxQÔrö‡º›Ø¬©dn�ºÚÉl3�½�bABx›úbUÉ-Ùz‚ìËþìÑÞý
+Ë¬a’së&\V„¼¢Ÿ«Ñ1ƒBÀ1È=Ä á0°½Œû>µd³g¦	ï-Èë2›w�bj*-çêå¼PÅ'Ñ³ûB�ë“rÈæ,êj°Yø¹5‰‰AÆóº¨�ÓÛ [#Ñ�Ù]E�‡xÎ{!µøÅ_¨ÒÉUyË–9o0÷Ð^UËÔ3ã%\*×\ªù¨My³Ä,¦.B�¼Œ3‚hH™XIMÀÌ( 55ïk¿*0±pIå\úä ™Ñû4}%ûÈŸQ_mùM_ÛGþƒ(7ËJÌ•¹]^OÞ¾—ŸÎl«é¼`á¸bêË‹3S�ëƒ±º¨‹MSS7ìûr]³?2õ@î¶Æ±Ü÷
+öTØv$¥&�—ÇFîeßœÛ
+€ÌúŠ46¼šW÷µ˜ÚrA¶\R9›P”9¦	Ï"ÅÂq)ÈxX²Ž©P@M�$Å–„Ñá]~dŒç–­Š·LíÞŽ¹4±#—dGêÛ=Aì‹´„)ÙO-Ù‚Õ(ûŽP^òÄDÒ,Ñ'zÙ[}À ù>Ë^«þC�{¿ï?…¼7ú#ß¿‡h"Ä 
+þ,Mß”å¯Íäùé<C§ý¾d„ÙÊƒc:€"¨�- )ÊÝ�ö¶5áF(Ìû09„Ât�µPfðkˆêØß\u=(54­Gÿ%Éß\šÃóòô²w~båá¹å-sŽaŒ#Z)9)0ò)<$oä(~${¾àµrë¤s×^úÎåø—gz¥°�œÝ¦³oØ�ÕfCÉH]uÅnný®ÿ×JÌŽyC †IUºŽ­J{½zçÜTÿ©ŒörÎ	Ô¢›ÛâEìR¥¡DŽÙyû;Gé‡ÖõtA%%O+´<àÇštgÎC‰ÀC×¥fD+	.ÖpJÀ]7÷Öé¶
+uÖùOT†¾"¾¤ŸvÉ/8•7…ÔlJÓÍÔÆÓâM*ls;ùžQqgÅ}`¡ù.G^§õbQžÌÞËì9ê%ßûôÆÕamK9˜Ï_wÍëÂhõö4jc>õÝ `¨ óiÆ .UÛ¨×>Z°BÂjû¯IÒoŒ£ßUÎ9m»Ãâ@[Ý,¼ÔRãäüÊïßð‘_z¼vb{Ý&ÝzRþó–ôDB @-§W—C_Ì}‘ùr ˆ-»c}PÀ²£ò¦Šº|0øì#ï~eÝ}>·�Cág+rÞt6\‘ÕÔ gŽåØ°[sïKÍášJrëX ZñˆÔ<(nóäža™™åªÚwDRì»"-ØìŒË À»ÅB(g»:èiTD’šð¨—»ä4•TD5¡Rž†Bh¦¹i»U'œ¶"€ewÊ}Í<Ð‹f¦jÒDR¨ÐªÇ…[¦¾Éïÿ¶»³K¢«æ»:ŸÚÔ'gnùˆºI£hÊº€lË¦"E$"‘ÍmS³JRÞM,ª¬ªã™™fjg} &j]g€ƒÈ!¯"ÍµŽÞ7ó‚õÕ‚rc!võ,çÌ¥pl§«ò�	¶Brä�?gP¨ˆ0á~‹N5ètŠÍ©MbZ: O{TÛ5ã¹e‚7¤ÅƒN,I¤‡f…‚äž=g¡sL§–4ÌÜ¨™Q%J;Ö‘O*V;>©–Ú®
+Q²•Ä�`õÿÉšÿK¿ôK«««A¼ùÍo¾råÊ×zäÿÝá'¥ÌC2«šê-ŸY
+ÿpPž’”g¶–èë]Q|ÍÕéËÙ+MÊ› öÈf¶ëˆ„Y¸bÏ¥Ì£ ™é(š)šÙiyã’»åPˆA,{ \²¬ŠxÙ�®¸ûC“%6­É2±Ž€ fòÉ)1Ûæ/íÀ¾�‹æ—b: p‡î0áçKd)všâÐ>?2¶#Í¶!º‰µ}£Ržô5·�—G4×¢_ÜžÙFU=—›#©Y–bœ›£ÛýOD£�ÄÞ_³­+¹aÌbš½UÐ¬Z»OJ¤ÅÝÖB9p}hÝÎç�
+Íe(ó¬A2Dó0œ e‚tá @>…)wa4L	/Æà<ØÀñàÄ Pkl8>Ö¶‹ò&ßy¨ÿâ¨\‘45L„ÿƒ½7Þ=«ê{¿k¿ñ™Ÿç?gîÓçô Ýt74ˆ*ƒ¢ÔQÈ�Ñ$bÄÄë%ábnœ¢E�S2)‚»¡i éétŸî3Oÿyxæçù�{ïu_ôÍEoWqS7•bÕ~µêWµë©§j­ý]{¯Ïƒ-²
+Õ´<Š$ùsâ¶½ÛñNï•­†êkÑ%`E-×ÔYIåæô'c¹kÙoë3‘:—¹¸tµÅè·ÖòƒRŒ#9/.]-µó¹‹BQJrž€e%`%à‘™Wñ�á…–t‘†¶Õ8á‚\5OV¨Q8�s‰^ß+w¦Ø(0(�4éö*-ù‰!žžwŸç_1œxèL¼�Ô¨ž³¿·BßcQè=YþÉMþ�œÓŒ]SZ˜º~*c£É×°.T~É£ª>/¨¿ÓûPwòö¹èKscVÞ{÷+uq’Þç\»ÙøOQÜôîò½®­} ¨@û¨6!4ö¯ 9“é Rc°�åçCi˜�CPµeXƒ¸«˜;Š(z Š>®�&?©ÅzU]eSsÈ§À#:÷	ÑÝ›¼è{Oî<çyRð0nÝl˜Î{ÏDríhí?\é*†ƒPnÖuï“3ÞMÿofýÏ8PýÙš:_º&³jêg˜U(7J7Ç Â5Ûþ'&¶
+®êSŽå^ö­Š&Uuº¥¯NÌ‘’õ¤¼åZzOâÄ|øaOnÌG¿Ç�¹k XÎ"¹ÞRYMmÌ¨©a>ý÷ªä‰­´%ÏëÌBû¢Èm‹�Ô©Ž¾4°…Oq]­fMeUîUäxAóÄ…9»©�¹œG)'sÞÓ�Ü³,sç-1Ó¬¶SK*bA‘Lf”špÿ@øP×í�l£%+m¥	Ð$Â©3KÞtÓ\›ó¶-›cCÔ¤©ˆèï@ÉeÎiÁtÉ<UðÈãCþîÄ9l•ÔE4v»Že,l ŠŽŒ‡*x;î±ÔQK4Z2öIKx'uº¡ïº—í*8|$Ø�äwÝ^…fëÒëˆ£7ëoØÁ8À¡\PÕHˆYuÝEÿJÑ·\FÔ‘¤.=¨Ž¸¡&ªÇü±GÒ#¥‰f¼�UT$‘v‹¥¶¾Ô5©Ç*<q&qôìe�å¯u=Kûà?ø³?û³ïz×»|ðAf~ík_k­ýzŽü¥žÜNl#Ö�yb7·«kÓ¬«ËÓòÅ¸g4å’ŠÔ.®§wçnIÂUeRQ—$•}9»ÆùŠŠÌ-4ýQÛ{0ƒ¡YÍ]S¢Õ&€ÝÒ[+ª[eC�õhÒ³IUõB‘'¶u-¯WEä‘¯(ß²OiE7¹h?—³Ñˆ¸% &ÃThÅ`¢FXÖˆ<´|€Å«‡|fN<gÓ=Ü¢Û&|µ¡2ŸlG�( êñý#ÓÙ¶ûq]_ê—Ç<ÑÍXv‚OÙ~yc,/7ÃßöÄš ‰±§ÓWŒ’s\“rc’~·ï}aiõÿRúlžÁÑiýJ£,0èŠ+ûE‚^Dˆê˜»i‚àJÔW0¸Š°gQ[�ô‘ôQé žƒ_*(†(0Ci¤IÓ.Ï/þ¶’eyb!øìV~§"î»ñØm;ä×Üý¶ëž¶œ
+¿0²sº£CÓl„¿Ëý¶ÿ…’[%�An6ü�áº//fŽB¹¾—Þw0xz?±cId«úÉ@î7½§®¦6b1
+D¿ªÏ5ôÆ¦í9—Ò[7ÌdßTWÂ‡¶¾à?œ¹V“nØp_néKmq¤#L¸?æ
+qƒnÈ¹ÏpJp5ÂrÊ{Çè'zxœ Ç|Ž ¢«â;†8°‡¦G­­"2HçÕÜŒ"�‚Aùœ)$å–+…«»<ÿâFvëúôGRs"ò>ûÓêœ§ž–r»,o‰Ã?š$ßÏŒJ­™/Uf®ó�ó)Æ=HÓÚ+(˜^"L7Pd¨¯‚ÚGÖ:€30Àh/c8úç»Ý÷zêL#þ•ÙêÏ—n^‰,bè&‹'ßrmû³íµ?¾1 FM,x"ŸW+«Ú×b/·sãü›TÓÿÜÄ…ƒòHÛÿÒ¤|QæÉg$�+êÊöô§Guï3¥›ËÝœáZÕÿ¤uÕ†÷Å¦ÿ™ËÓo?\ýwLÌMÿ³’JA¹Ãª÷P¬®UÕV¬Î6Õ¸£w”Ø·%ÅÝ™‹by­k¼«Ùój<2‡L ×ˆlEšké+ËºêN�ï 
+§kúlÉ^CZjë|^;ž½ruÖÛ$¸@®IÊ¹‰"¨Èí¶¬·e@pýrµd®ªþØíô\£,;²R¸ˆ€@t¢B­+éfeË�§Î:S—5dß1wÚÒœÎ·{�õ¼=¯�€TÄš�Œ€Õ¤T]NÅ­M±<2­‘9�ª©�Œ'c7ºIK.z"ÍY\Îr#{IEÄ‡Õ7r©ašº¤!uDµ9ÏÈæAù‚
+Í�NãeÕ�ðIM¥OBQa�Y”m½Yí±UC›-šâPS‰;C¾:æu�¸&5ˆR¯ÙÇÖòÅŠœF"7ÀF>Ã%Ëë]YŽÌÁŠLJ˜K“7.èîõCùÿlöž÷¼ç‡~è‡î»ï¾Ûo¿ýøÀSO=õw30¾~ùÕëàÿJdGÂSƒò9…óæ‚Ï×*]s¯œYð/dvÑÝ©]šþRÐ`=¹¯¥ŸHËíAþAf&üãær{t'¿e9ü«qy³””Ž-ëÔùuµÇ©ml1§�aïryõ¸×éšzÎù¼¶…'¶ÝSq¢&�:9âþ¼ª
+Ø‹åÕŽ8F€"±k¯:³òè5û`ƒn²œÅ¢³ãfX@†˜ó©Uð ÁæªxaC œ§Uª»vÔ’	'ˆTÕ•Ü¶šà"uÉrÅrD0�¼"Eß¸6@Íè×&ùë”Ø¬E¿á\;Š??¿>ð?I"œ”£Ñk£è#­8‹" ?†�ÈÆˆ�H@ÇpÒC>„
+àÕ� l	¶ Ã–ðbØã¡Pf ÐïÞRšóòöqþ-¹]è–�u÷‚¬Ò!Ç¦%<b‚K-§ûÅÉ…ðÏ´\OËÛ@ÈÌÑºÿqë:/Ð_šäß¬ÄÞfúº†¾&-w÷òçß4sç¹ýÏ¢_rEQ*(cVZô2»$)Ub<(�8sÁƒÃâv"gØë×VÈœßwƒe-ë‰™yÈû³²=uìàJÎJ¤qÖýÒ2½Á"÷Pßä�Ü®Þö´ùŸæ¾âc^�oxÒAµéVƒ<ã�¦¸º ^“W° ÿTn¢ªÎÌ3•_¸<|ßRüëZž·n.)î]�¿×€ 5 	SB*x„„³Ð>òRCHD-°E1$ |èÉ>HÀ09Â:ò	²)Â
+º»G»£_q
+‡`XÜu¹èñêÍ[f§f¢xò—�¶l«Ý‰™oès¡:åyòB5úÀ¥ýûtÛÿ‹qñ¢Vô»ãìÕ¡~Âq•ÙÓòQÁ,,·&Å=†ã†÷éÂ›�Ø‘””ÜRÔ—4-Ý¬ Ì——ss /Ë;+ê�ÇæDU�öäšå*ÁÖ¢ÿüt÷O›zÓ²?2í¶¾44‡bÙ50„¦DPÆìõÌl(Ê±•5Ì\uêD(HÀV¾ÈÙÜ…¡0²ÍªöM­&3Afd«59Q4aÈ¦ÿñg&ßkÙÔDHÄW¶$�­KS8MÄ>–ûvÚ’Õ]»·¬j«3žÔDÝ2Ø�Ô”‹†�‚™º®Ûí=·Û³ŠxßöªÔªÉT‹¤ü×³ã·88k¨„§MgŽ*™ÚŠ"ÉAß´˜¹ë®-«åKæÉô�fB15J.5i—p¿)f³6Ý—ÅSU¨¦‰.B@„‚:Þ£çÓãÅ”7}4-²*-7¥êÛR�lJ®¨k{ÅQË`ÆÛœ˜ùŠÚÚ*æ}R—)bÀ0×Uš»ðgËgÕùvùµöG>è]žçqÿÉŸüÉë_ÿúëž'NÜwß}oûÛ¿®#ÿ^»±òWù�óÑâ�üîÒ5W•&1+™‹:ý�ôÕW§ßŠ±ã°p3½üžPîä.>?þá½ìÕûù-µ›š“}Ó&²‰m[Vï‘X&©m¥¶iX4¤×7ñ–™Üø—ËbÁ¿L õÒ,%QƒŽ¦<|²ü˜ ªRóZ¹~®<[¥e2°ëöñªX°ÈÖí—c¬îó,ò¡»aÙÇŒ„Wb’ònLóÇÕ¶Ýé¡[KyQmÙ?×µùÏ$ÎZ–5u®pJ‰îØ6}±Wóê7OÌŠc]Ñ�Ë[‡Å‹Gåm�êÛ‡éXzƒ¯N�“·äåó&“WúÞç”žŒ&?q½ß)ˆ†[<Žá.²ñõîH4�À4 “Ãä0Â¯AWàÕ�îÁ¤(S¤TW0ÙCÒÅâ]P>’!’1Fý!zZ�¤ß•ÛÅÒU<‰è�¼«-fªb¶d[2�7_šÑ;ŽÃ¦>C”�òoô©qq{+ü`aGþ'GÖµsCfŽ¨¼›ÙŸ­þÛH?ÜöN�“7‡rW‹~Ã{p6~�/7”˜xr«æ}	 IÓ@$½°¤<µ‘ãë7H©$×�’ÃžÕ±È{n³-f6¯Êx<ä†“œ·ˆ[ ¿,ž_¡å½xìF-Tƒž§©aéˆüG€|Ž@+êˆOè®X`ÖÛ�±0)�)[ö÷²—Kš&ùËW+ÿ^ŠÝ^ò#€›kÜ7�¾xš~‡s‘1pBÀZäU”t ¡1wL!Q¦í“ÐŠ$`Äsl!5l	åƒ†=e�Ú?ÔcŽãõôeÌbV®n—þãïžàg:¾³zî]·5m,Éf¶=ql¸š˜Ûsp”küs†ÃPn×Y¬¿¬´ÜRbÓSO�b¿´«›É`9òÄ^foHíêLøÇ‚2O]õÅzf—cï�ª÷@¤)Ý\¤N%æx(×º_>gbãÔ—/—wŒË;7‡ïM¹,]%wµ¥ðS¥© ˜@ì1KIif;×ŠÐ°«¨k>‰©kd¬f½-€9ôE–8?V«jËp˜¹ZEŽ'¶	gØ˜ÊØ�ROíÌÔ¶7“ûúî¢€°€ašQ9�5�C‘‚É²\7›‚œ„ŽÄ ¤ÆÄv^ùh¨qEˆŠV…öÄÀ„‹¦hÜ¸N3‰Ë'Î¤¼WÂöSÛÜI¾Ë=œð@@h¢ª¨„b¬I¤¶â‹2g10­®]«Ê"¢Ž¦¢J‡ºVÄÔœ•I¢"|W„¨P«"§D4åÁ!yç„{uQs?g�€P$2Ç»ùó6Ý'{ü¸BXóÕ«ÂïÙÂ'êö'VïG3.›jTpQ¸ÆÄad–<R�(t¿"
+Aì‘ÕDuNQù?U´ïv»ÖÚ™™™¿óÌÌÌìîî~]GþCç—_�ž›Ã�èç®á‰aé*5T/”WÝâdÛ;MàÂÍørK‰î x¾¢tb;å-ÿþÜ,]{j[ï‘+Ùm3j²]†³ÚŒmÜPÝÂUJöSÁÜPIbãHN†&VD9[M²d;r[¹¬ˆ»v”qwVP°Ñ¤è¹m… ÏO˜«Ó�1o<Â3stoÆý	..Š{¦Ü�¨¹ïžš·ìº'fÄ-y×(çáŒ<X“Iæ¢HŒTßÑRC"ë‹"[ºÁV¼Ï{ò\aNxê‚ ann-ìáHNÉ5€ Ûl¼¯(ZõVÏY¼ JcÔG½/F:[8‡¨�ê"²¼*Lþýí”kUA9„3ˆ�íAÅpÊ	²Æ{�
+¦Ädt2Í¿¡ýÎîà÷rsŒ¡Öó.ùr    IDAT£×I-1—rQjÆÿ|éæ	e¤¿yŸNŠ—+±›”ÏgÖ‘÷pRÞ{÷ky®07[7ÊŠ»	63·Ê Ž¼O·<Í¿Ár¥êÓâÞÌ.ùr{T�ä6C€eÁµÜ…¡i1ê—«±—b8¶m7r<v;±˜I\¯!æ<�}»ß3Û)÷<Ä¾ àûÔÐˆä¦û´¦zR�j–³Î×q¢Ë_lÐs´¢0@uVç¹‹'± PŒYBY¸z(wêþÇ¥ØËÌ­IùÜ™Ê;}ï‹„ Ï?“ew×›Yƒ<­‡ñ°ÒF:„T`F¥ƒÒ>t„l ¿
+åƒ"h#ïcx^Â–(Lû ÖÖßúŸZ|PÑ(wíÒ…]›§¼ß+;îÌ!uƒY'øÐ~öí‹•w»ÏŠ{J{0ö?¦Ô…¢¼#-^¤äZè=0JÞ%×ssÒ¸v#ü@^Þ¥ÕëÚŽãAöÚFðñZø[ÛÃßRr7P§<õÌ4eéCu
+(-·Býp/ùÁªÿ‰ýôM3áï&åóCýhZ>·°+‘~‚`w³W¢Ç�Ü•'¤)Í\µ`ÑÑ—27'PHÊ-=Skë~Ãÿëµé|‘Gr×—Wscîj¡èî”³3ºÊË½âöXmÊ¥¶w1³³žèŽ%åŠ†¹›˜v@Ö�|‘Mlä dl„ÿ·D'.XÝhV…MýÄ™ôX]Ôa $N]g×íØþŒlÇ²·_6})—±P%SMŽF²ª‹©9´_Îù+Ur§  Te6q¡, �„‹‘Û\R«U¹ód¾¿(oi¨®qQ×JÃE[†ëf«#—[jk·œS$[Ç@Hº`Är·p�“TaÀ±M¹'É¨V*–û#3ë	S8Št`½’ËYmsXò¿TºÙ�â€·Õø_ä�g£#¿ªÿgäW/Ö¾Ó~õQNÿ¯mnn.--=ðÀ/~ñ‹¯{î½÷ÞÛn»íÝï~÷×uäßkÆÕgƒ�8èX­YšÑ—|±;(oÙ/N†2q^ÌYJ×*ìüÐÄ’’¦>oØëå/ÝÊ�Åêé–wzjnhH·]Uá\(LE=]U—,“j2ß)Å”‹ÜEóþE„B0³„XT‹ŠxÃ\(Žh–€sæC†KÃ¶`ÓçÇ=ŠfèŽýKî÷øošbµEw”˜:äÖÜ§ûüøEûGQÏ]ŒhièÖs6Ù­Ž8¸mO[Ö5¹í †&jª´©ÆUý¸c�ÝâæÂ5ûãâEÎµ=u&-Ÿ§äš[UÿCDEVÞU«¾{nî}$�ç÷Œû^:�`4XÆ÷`˜qµ9	œEõ Ê)Ø¢v Aº¶�>¦k0@Hw «0	„]�Qiƒe�ùOÏÏ¿//îž–·®³]Üà‘¬‹fSÌ10£LMmê©ÒÕ|yMË­Î*±5)^ªÇëá‰ü�œ�§NiuY‰íÂ®“dK·ìË£ân_�¾:ú%c#ï¡@=óÌès®!h*`†å	†(\+Tç‰
+fòEªD¢Ä°ªú2¬"uVÂíÛÄ'Õ’K-É7†cA¦”wr6×Ü§4â”ûZÙáOäÜ»èÞ?â«âefSì–¥¼·Å±,^ÒçÇ:ô‚ã?1+[f`ª†¥áÒ² hlÚ»ål¬®ŽÍ
+Qzeüo
+{0öƒ¿0NþI½ufcïSÎÕÒ)¤ÄÒÉ¡)±¿&M‰ê´œÅtÍc(&ˆg!õWÊã^ylàÅ  <Øým„5Œ³ÊC 4‰Õ™H=SQg÷mâS0'WÑ¬8®Eˆ½¤¼c&üc@xêéqú=Öµ=y¶ŸühVÜËìú!f]©|\ˆqà}±½¿üùlíÇ[Í_u\ñô£JlEÞgf+¿HÈ¦Ùwì79;×¸2|Oé›áoöPR¾PPÂ¬ˆLZÞUÓ_´\÷äÅaö­¹=HTn¥¯ÍÌ¡ÜuìŽëá0D úUï‘ªZ_
+>ÛŽ~Û²Öbë§CumÑ?`”¿dË^´¬Ç’ç¥¶ÑòLÜLMZA…ãˆ�Ì¶c9Ø—»#³26íõ¼51‡sW‹DQ²4,êÞ „dëj§"ÐP‰$ÙŠÜ×"m¨­E-™i¯xÞ¦ûË’]éÔÔÊŽ^÷…qUjI¸ÜÕl åQ‹l`*¾˜^)¼�ìî±�‹„+™SC]¾Þ¦ÒÒû�àvð) ‚xÖ»`˜çõpU/¸k¢Œ‹3ùîž¡Ž2³J\ó˜Ø¹’"$=uû]·œ7¯µ�õcª'< PSú1;#Û5¡‘ÌÆïQä˜i9úÐÄ…Gâ¿˜×YáÂŽ÷HÎÖ±»’Ý¶Y¬tôvGùYãoþµ°ÿÏÅŒ¯º¾êÇÏf—v»-¥ÜÛÛû;ÏÞÞÞììì×uä?t~ùEbÙ³,- ¡L26Ô•�9ØñN<*olùNË›y-1Çr®H˜Ä…9ÜÐÖr‹¦Ú	äZfW3×ån¿\®©®¢¤[®Tä”à,ë3©‹ŽakaNÊ˜Zg+âŠÜï›™±udeèŒ†šðÀpª(ìò—ë¸Ù£Ê”·Fü4AÖèD@í„7‡|:¤¥Kcœ›£{&¼ÞG†îÚ¬<" öDY²Vd×‹*ÆãÔµG£Ï$æ&ã*�Ül†¿ë8ÞMÞê‰ž'6=uqaæÍÖb2yƒû…¹Ù×_2ö°Ö§|ÿIü-ˆ.OÖPfh¬À é I¨É*«
+&Eº‡™»PtaRH•ØùH!^Âð<d€Ê
+²=ìŸE2Æ$ùVgç6Æÿaj[>eWÊýª˜?<i¹ª'ÇÅÝ‘:ã8š©ý´suÇ�½É¿n8-/·âë‡<ýT­¹uîÒßÌ6Þ\”·gÅKM¢à#Óô;«Ñooôÿ¬ý†V†É…Þg‡é÷Uý�Œòo“”LÊ	é³�ðƒýä-�zr3ùÞšº¢Ä¨°s‰›!¸+åZKrp!©Œm@R‘mè³½ò„„ËYnÛó1ÍO¹SóœýýÝS¡Å.?•ó®Å´A·9˜?*àEtÐ"­á˜ƒeØ¦XYð/OÍ
+CX}1�—ˆ2ã:Ýüù³á'¦ås#u&òîï§ß_õ>e]{¾ó†,½GëSãé[ggß%%˜¡˜ìP��Ð_Q�Î hÀäˆç`È`ÔoFrååÁ,lŠrŒ´�­+7õÆÿGiW‰Ì¡òÇ¾ó¨�Z$|Ìú�mdÏ=Ùø†.ÍáÈÿ¤uó |ïsDÑÔÓÒìe�ægºûoô¼G¬]q®–—·­ü¹ÝÍoŠÂOÇ?ÎìÞç²â^ÇU­ÎU+¿;ÿX%úíõîýõà×ÇïÌ]¸ýIä}V«Ó¥99Î¾£âl’¿Ê—2sséæ”è)±(Ož¯(íLÅûréfK×aö
+×8Ü~Ùæà¿T½û{Ù·3„€”Y=Ñ­fß^ó?qmòÖ¦>w5;”c²¬ý¦÷Ù‹É7wVõÙÔ¬j1Î];wA &ŠR-º‰=Ðô?³“~K,÷
+W³P×gf¬üçÍé÷7½'»Å­ŠC8&K2u}jjŽ‡êêFvKMæçËKòæ†Ú”ŸËøD˜mçGª²°,„a‘¸|Þ›X<\�ÕÅýâfŸrA®tž 7²ò`ô€¤ñfúšëDo®·DqUî®È½ny k·’yy¤¡¶œÉ§Ï‰†[ùí
+ˆäxj«C7iÊ@É¤‰“/Š�R1ÐsÛ·U¾ØÍ¾i©ú®õñÏVŠJÃ^UmLí‚cˆQ(7&æ°ao`M üXdïÑÜ.ÿ³ôÀ³Ñ‘Ï2Éýöºg5ëŽ;î¸ûî»ßûÞ÷ØØØXYYùä'?ù�ßø�_Ï‘ïó/ErÀßê›C,E¼6}cS¯Ì’&ã‹Qéâ‚ý†º2µKšÒVð±õä{X‹ŒY ´Tùå�é�Yö2ErTrp]�½œkJU×¦f5RW³åe¿71ó—Ì©#êæ}›8èwÏçaGÌöÝ ¢ÚÐm‡ÔH¹×–Ë=»åS­%Ãæa…ªBh‘RG¯™uƒi�AÊë5ºÉCc„3uœìò	2¤E‰�á|´
+÷ùþÛÔ�¦lC!2ÇûîüAutè\@Zž(|1t¬WŸ>Ý/î®ë'bï3½ôûBu¶Sû‰�Á´ÜhV~Á˜ƒŽ+Óü[V¾=Ïtš½ªRù¨�P
+~„" åcÜÇâ	€!L¿’ÈºÐHA×áJ¸ñ!L. :€Ñ3
+åõØ~&…ÐØ_¯fùË{Óé/<2üÁœõ\É-ï1-¶•Ü4­Ç¿¸ÙÿðrûÞ4eµò_Ù¡,Ws‹ a}n2yÑTÊ�Þøß3ëãÇ¿¹·³4žþp­ònc‚}!wö†¿ÑŒYëSãé�”öP|¸;ùéÄ�‹ß3È¾'µ5ýØ¤¼‰¡ÊÍ2Xõ÷Buf;{E$F Om£`vpuiº–Û}~\ÀÏ±÷ÂðÀnqãÀõÚ¢•±c0�ÖÜ3tÇ„7Æ|Î§N„•.¡J7 bÈOTé„C6'îÜsO,ˆÛ«Òjšî›jU@’I�ßÖW”øêlnŽv*ï$šj}:Š×�Å`ø‚öÃà¯Òì[êõgéÌòM{i¦€Òˆ:ÈGð* é!Ù‡_…ß€Œ <L¯!Z„ `|ÒG1Âdï+8ˆ�µÿ�!çûÕEÏû«ï¼% ¸.³@v›á(±«Ô9°¬RWÒì›[Í_0`ßºŽR~€áàEZ?mÌ1Àåsˆ
+€£ðC`Ê‹¦ù7†þß$ù+<õ”#°go�4ðõcIñÒVåç�=R˜“…¹Ñ“ç{„`K·¬åeëf†Å‹fÂß-íjéæÇJôs£/6²tmç®Ep‚L¬ž(· Nì"Áù²«h
+`XÑ"�äµ±9<üeaŒÊ“-ÿÁÔÜ�Ù¶ ’!=14®Ò3Õ9o�!3Ûd#yµ[žˆÅÈ²W²¯¨œ:_‚8ƒ‚+‰U™O]  b9&¸VÈe¢iT¸zÁÁØ™9=Il}âœOJK¸’å¾Ý:ä¹k1dîÂšÚè—+9L\€„;Ò$}ršòë™©¥ÄÄ*A4q“Yå)*.;G½™KÅð îäTåî•Â_ÒºtAÏæ¡ˆB²bÇîµÅlEN&¶â€‚M]¢kÊšF6)†s²cX„"‹äöÈ¬L-ø—ÇåAQ2µõZ¯\±Ìu5É]ä‹db«MµÕ3?ÿì?-Í×ÌßeÕ³IRüàßò–·¼ÿýï?yòäÛÞö¶­­­Ç\JùõZëßkUfnÖ£’À£üe¡HW«ÉÝªº*)«¨«ŠìÐ¬é³UýÄvú]M}Þ�fÃ?jx_.Ù»<þ×©EÉq;øXË{˜À½òdMz—Í¹Ò5ëíüÈ’7JmÇ°¨Ñáœ•G>�zå�õŒm]4$‰›£íXD’ü]{©)*"Þ4ÛâÎ{ËjuV?m>s‰Ã¡±P£q£GÃ£ëœ[ßÐå\»ž òÃâû%9§à*ÂÍËã¡ì1;hQ–¬KWdªrgZžìøÙ/ž×O¿»á„Yo~?ò»¨0·æÖP?Ôï¿¡47Ôj½\ô_2@yðBØíEH&‡WE<�hB�T ¿¯0TUAÑEëE(º¨Þ€| ¿‰Þc°$àùãiþš@�^›üxSÔ—ÔÊÀªººÒñ¿¨Å6 CýÙFåDÙrçn�UbCL’ï"JW�}\Š½4ya%þ°}!úí×V‚_ºð› K±[kt�9.åºµõè?9×Úì}<ÿ´¿»,o–bT÷å¯äMã©9Aä´U½ÇŽF§r×îç/–pD¶oê‚øpü§É±õêB	ˆÃòîÛÃJ·~9Zæ‚‡Uµ;t›–MÊ“º@SRwè¹Œr†îÉ°í�µèù	_žw­»ÿþ•ÇÆ_çŠ1¨©7,‰9˜–·$æˆ±‹¥9’å/¿¼~‘×ëµß1ö�Ò¥’×¼Qeoó’t ˆàWÍ!šƒ®¢ºˆpì�í#\„ ”C¸®	x5Tf!$Êƒì�DÅÅ7é¢§ÿê;Ÿ³¨m(PÓOJî'ÿ`O�*Ì‰fó#IöºNç¦Ó—E„qN°~€<C³ý¹áäm•Êû“S�ß_”·”æ„çO‹òv@ b’¾AË�÷ Vg<ïK…=`¹>-^y÷[7W˜›+ÑûssÌ!”b/ð2®á«'zùËçã_ègßzÅÞ§-W<y¶þ�C°›ßëG¶ŠÕŠ:3uõÔ6=u!³‡b`Î…¤Å4”µØöäzÆÊ²™c‘Ü-íRf—sö®%/³h1‰ÕùÌE�¼Ò5••à‘^¹âËµ‚ý@nOíÁ¶>ç ¶�©¨Í-“„¢L¸ÌûrŸÀèZ±à?âºÚ!XOôs[`b#ÃqÆAC_ °QhË" U“ý¡Mb¹×wý#¾ÙH]Ml\‘ûŽ½ªê1Ä¾Ä²¿kÇIÃ®¢¶@LäˆÄ®ÉæýKŽù†ð	*Š©­ÍÊO3Ç +øëe®D®È›Ñ×ví¨¡/ö0qIî¢@‘�¶"BÇÔãÓ±ðo
+¯°"§Eâ |1�6óƒmÿ‹–i%üËÂ5PD‰«”,cuÑRŒ2~¶ovøk¶g¹Ñ›Þô¦w¼ã?õS?u÷ÝwøèG?úÿI‚ü_YG¾;\Û-›jâXåVä¾áPÓ¤îº›½àÄÖêz�`¯æ�–+rçb¡Vtˆý+ùÌœçË+Kò„$Þ³ÝÙ®Ê"§¨ß+Oæu•HÊ6
+?¢¸ëÖ–Ôò†Ù˜‘+%»”ÇUQ7ì¨„‘�¦ï.ÌˆãüŒ}ß½ªJËgÜ<Do©5æõ£„/+ª†X~†~¯jÒ�£†8Íp†Ç+âÕ]>¥P™'Ÿ±¿£¼oÊ£ˆªš E.u†¶È[
+¾¼•ß‹@(wµÜÉí2X”WõS�zRÉÍÀûlàf³û×�è×¬›o6~Í8†³³~¸Û\Àp^€Æ
+vÏ£µ¢¯<IvP9 ›@HwA3÷bøt®@°€tÁÆç‘îCjd”²	&ãc§wÎ\P©/û¾ØlF¿E8M¾ná×Ó	¬©2¼¸ÚMÆS!˜‚Ð˜ÇhBÀ�0@kt{ÿ¬ÙxOž­
+Ùí�ÞáëÇ’ü}ýd5~_wø«¾z,ðÿÆ˜cYqÏ ûv_®•Ö5”ØWr}Z¼°êr”¿zlVÕef=0“/ÊÌiEÜÔçúå1�r_ô§vÎ�öì )ZMjÍ>bÑ¡° �^±ŸŸwM¹«MxcÀ�Wé¸A2æ§jÄë¬„ÚãS«òN1˜|‘¥.ˆdRS§CýDfNŒË[:Á‡ï¡iþÊPÁ÷”rÛ˜ã¾÷€L®çÅæ²!ò­äø5Î�-²¤FíÆç.`º†ê!ÈeÅÎ`¼Ž|’X¿ö“…¹éòäÍ%»œÓoj8ðÅ~ .ùêÉÐ{ Vûóë÷�Yzûâ‘Gó)²	Â*¦C„lmüèò�_w¦DžB	?‚É‘L<c{þ™$ù&!Æ`ÁC½á;ˆŠqöšØ»ßSÏ€Ü${­u†pÎTßÆ\M‹{ssSnWWÚ/›$?˜÷ÄþÇ‡Ù÷Öü	Ñ5ö f�™›	PrÓW�9×š¯4®a9Tà"ýX7{ÁõM½©Fžèbl–¤ <üuéæŒk%v.sÞ¡ÊoNŠ—NÍª…ªë³×²�DX®0kÇAj—™@nJÀrTžôÄ0s‚óÄ0µíPö'¶�9Nx\õPäcëåœP¤’-ïâ¸<¨¨XÊƒcA/³sŠ’Äv|1Ù7•ÕàIAIéf%ƒâ&_ŒCµ^ºVj;ŠòërSÀÆjg·Xhªib+³&Q“}@l­`“ó´&
+hyç{åÑXú¦±èŸî—'
+–\'ÉuíÖ’î„¢›ºöu^XÕ{àIùœÔ¶cµÅ,×`P]?u5»mV÷wËF$dêxVï	*†f™™,ð,uäÛDñ5ó_pÞ×YtÿCld–VÃ+A¦­OÊ3—\ëç¯"˜@n÷ÝhP.gnfN‘¢òb¡êbÆ±*¹VÑÔ…·QÎVSyÔO}Ê¼ÒU{åÉšÚhëƒ¶Ëê„·AtÔ«�9êÇ–™@3²B@ÂÃ@Uº€¼>?¼ïÎ§<>(¾/ öÓît‡AR"òé˜–fÅ½C~"G÷9ô+1¶˜*Ô¬{h;.æÅ7ôùl�Ž6Å±žÛ¨ÒñöCO,ÜÐ%±e‘qJÀ¢7®ÊlTÞË¤äÀÂ™ÕIy2µ3†£š~Ìq�–·OòWŽ’|içb ¿\˜›ˆFB 7|‡ÒÐÞ® ÀP[@Úƒö1ÙC™�HÁ`‹¬’˜}·`zÁ\› ßä» PY	8‹<Áxx{oüŽP-P²dCy>1G‡ž—4ê¿^¤pNÌ·f»•ªÍITájqIúR“ƒŠã>â*ŒÁ‘›ÞcJOÈÝþèß5«?/Ånì@–½JÐ˜lôÿ</o‹‚�‡êŒ§Îgæh¯x®cß“çkÁG§ÅK%�›úñXq«Xm¨K±UÔ¥ªôíÔp•€žU=³hXZ7Ç�ŒÜ$$µk/,ˆ»"jûT·Hr¶õ³öý)ïvùñ¶8zÅÜç/oxÄ×öùÑyƒŽ[æ]»Y•]ä.@(v&æÄúôÍ‰¹a&üÃ¤¼c”~� t”}gµö`üsBì0üþà>ÏÇdtûdE†Ú,@¨.b¼`²�rŠÆ�``rÕ#ÐUÔŽAV�ï!XI°…T¨ÎaØ­dÅý%IàP°©E/”›J:µŸðÔ™fëÏ¤É‘0FsæÑÝkQmE!’1¢¤ÂìÜ¯o®ý£Þîñ<ý
+‰)™¬€1­L’ 8I¾5>åûyþ—†ãŸ 8-îiÅ¿¬äµÀÿ4 ãfcÿ¯jÁŸ-4¿;Í_Y˜›Çù+<y±üÑÅ½§ÕwLÊ[GÙwGêË ]üæ0{Íöô­ãâ­Ê;•Øç/s\ï¥oê·"�—ÁŸêl Îu³×xb³Þº¤4PtÁª&w$Ùùð#ÓòVãƒrEQÖÖW.L~¸ýfâÂ@ô™õ¬ž�Þ=(ž»•ß62GÛÁG¹Þ-n.í\·¸�ÈMì|(ö«ê¼c¯é=96Î8mËª 6¬SNR×¥Ïà¦¾š˜%AnÛXšWµkÙJæâ¡™»Þ2«»—Ò·³v‹£ýâæ…èêÞC»ùÍ#³0²Ê²—Ú¨ª6"ÙÍl{Ñ?Ÿ»8éÀ­1 ˆÌU%¨&ä¬¬f.oy
+Û	(¿P-ÜZ~¢å=Y²›º©†rÀ’î\+7®•‘;¥?¿{P¼ 17®6rl9™…º÷¨ 35Ç�&¶	YWkrPS;O`-Êª?Ë8ìà¾Æõÿ¿âú_UGþÇ`K‰áN~ƒ/8“ÄÖJf"ÒÄ‘VôÓ™]åÅíüÞŽ÷¤uÕ©]X¹ì_¼–´(k¢Â€eN9(È9¯Jß£Â²Þ·“^:0s—F"$ "§™‹$ìºÙŒh&áÈõrî3¸! ¨
+™:
+ÖÌ¹yy<çbè6öùsÇä÷ì¸Ç¦|%¦Cc>“a[@Vè†&nïñ—55FüT‹^p…ßýƒ„a,Ò>?¼Dß&)PÞíñÃKâUMQWdìÛ$¢Š RÄŽ)ábÉÛ8ROWƒæxZÞµ™ÝÝÒ¾\‹õg}ïá8üÓ¼¸Ë÷¾Ä¬W¦É÷Í/¼ 30%*-èè+ÈVBÇðð; #YC¸tÙ&lŽúsÀùâ�­ax[§�LfŠòŽ¼¼cš¿|jnÊ]mµú³ãüu3µ�¢G¦ÓW*ŸõÃ¯ b¢Š)z[¨Ï �ž¬��÷k^0_×l}Ø�ÐÝ>FgG£××jÿm2y‰;ýÉÛëñûÒì›�›c-×µ\4Ú™þÓvðáÂ®LÌsCyÉr…¡*ú¡Ü—b¼ž~CCí§¶á |‘¸p¡y×xOû“ÔÎh‘lAMD]·ß�žëKx]>Õ¡çl¸O1,À€ðiF"¬Ñ‘?žòÆªø¶m¾ž^b�h=å½Y¹Š|ê|M\‘{Žýª~œÈ(±5)^éÇ§åÍàOï~¥®fù½‚¦�™”ˆÄhýJ5{x�›�ì¢}v¿ˆÊ"tá `§ 	›!Û„Œ }ôžÂde�í�wì%?²UTçt–»x¹ò›µè½Ìa?ÎŒú,ÒØ!¬Á‹1Þ…)à˜Ž1{é é^ˆ¸"l_’RZ!�&'HŒˆR­zRa2yžVç¤Óž&ßÛMÞºØø¥Î¬wï_¨ÿ€±‡
+sRŠ-%7³ânã˜=%ö¢àcƒé?/ìªÛãòöåú[¦Ùër?{Ý¡æë…®õÿ›=IÃ©9))(<¹•ÙU�R‹=O])íÒ¤¼e»ô‡§µØ¹˜|ÓjpªtAYáÚ¡¼œÙUË�cå‰a¬Oõò{Kö|‘6½Æå�©m†rÐ3íCÑŸHÑ¿6}‹O™ 3µU*rä‹ý¡9Dp�k12®:´Í5ûèMÞaIEáª9Ž©ªzÓŠähbk ®O–Žåþ^Ù©JñNPy    IDAT“:oÞdbN0ƒ!'Ö[?/Å`+ý–@¤;0AÔP=€Æ¦©Èi‘Er=³#[½bï®ë…||Ì�&¶-àšÞÓƒâ„ žZ%ˆ
+¶>É’]	£¡2Nç5Mlä‘Ë˜†nU‡žè…ê‚q�nqÀ–ÅBð@j�Z,†½HnOÍ<€º¾�Ø•í‹º,¸ÂŒùèÏÞ<|ã³Ñ‘ÿJd_c0ÿE|]Gþ±’+ƒòØsg_ZS¡ÜÄMÝ›óžŽe¿ªŸ”'�«2tî`9öåz(÷Ü <6ïM4÷Ý@“+a—½Ñ®;ãà$ÜÐ* ³*Ì]½ã��U¸ý�ëM”9ôlqwók"ÉHxqx^mJÞwOOœ+¸``‚‹%[Ÿ¼-¼á07+îÍxK£! çé[ë¸ùQ~k†­1?#àõøKËôÆ	.ýßì½g³eWy-<fXy­�O�ƒ:¨ÕêVŽ€$‚$àb’mL0`cÃÅ`‚lL´±¹\a›l,F �0 �…VêVèÜ§ÏéÓ'î³óÞ+Ít?ˆï/U”‹z±Ÿ¿0«Æ¨1æ3žAÆdËyv�ŽH0OK®Mó9yº¥Ä¸…Øô{º›h²~H­žÍTùØà²VüÆvúÂjøÁIï.‡.9ìgË?2·úD/þƒf÷ãÍî'§]Œ>#rÆA9lvîbùTÄPŽxÞš‡ :(îFÖ@º5€;�p3ˆ…îãð7A%€Aù|Ç`L˜É+íÍ¿óìožë°Å-Õkï›÷Ö¡ÑGF/Ø~Å—ß±çŸ�~ËG¼"Ü"ò^“WíÛöÑoíûÌç6¾ámJÁ/ÃöÀ8ÊÃÝ°ŒJõ6¥�öázÇ’x{©tk·û¢\œïGGª¿W,=X.}¨}Àsîz,ô¾&Õ§=ßùÏ‚÷5Ÿ�°h½+6;t~ .pùáTn¬X‹B‡ãÁ—l’)cû|ÖcM C|0Ì"ÚSN¬Ê>ñb“³Ê¢šÉMß#þ½xˆ³QzuŠeŸ¬ã$
+±!GsFÁÃDDÎIÌš6¢o–H‡ØT_'-Es#m’%ªÒQÅÙäòÕôÝü™œvC÷{c…?Îäm*ýä•ÚD¾÷í~orµñé^ï¹„ ®C$°‹¨íBÖ‚¢?ƒÒV„[`$ˆæÃª‚: 6Ê�ZÈ°(‘ãhç}Â{í—ò­Ï7ë‹hÏ?æk\|ÙwÞüÁ¯ïúË�Û.”øe˜¤´±¶ûo?î‡?3úÊ÷g1j‘'8{|'sP¬©Ñ­È³Ðq�D…×k
+Y“”v‡×÷âøº$½Ñu~:Zx;¥�Nÿ=#…·ÅÙõ®óÃLî"0ƒô�÷�Jô¾Lméå×vã75î[*Ñû}~R›ò@\ÔÍ¯þîdóvFWJÎ÷&«WÅr›Ïf
+öÝ?"t ]¹n¬ò¢Nvõ@ìpØÊ´³èzvÍ¸=ßÛë Ð%eœ®ØY*Î�rãôÔH3»23ŽO;5÷ÛB�TeÈýqGVGícG/hÙ:1Uøó¾Š|Ö¯ÙÇ…ñR=Ê‰èi3ÜÜÓ]UvˆÚfíÔà«¢ÖVNÄ–&ïÈJjtS†Uk¦Ä—0ÐXÕ�é»·9DåzÄð¹Ž²¦¼{O'i–øìXð·=�9Ç|*UÌtèÑD�Œú_\Î¶hÃšžçìîÉò8ŸjˆjÈê%—Ò]-¥ÚŠÛ³%Þà„Icº¦î{Ì9eWh‡º¥–7Ød6ï»l¶èßÜ»|~Üû¶Çâž8·)Æµ±Ô¸ÿÏõ|Âc-‹f±šÊ´WenC(TbøJò¢ÿ>:ò·–#	ñåŸ­ÜšªZ®«_¨‹Òj¾c)÷O%—Y´cìO„.·ó}¹.oöî#02×Þz;ïk3ÄŒ$Û�a‹X‹reEL4ñèZKñålkÅ¹{„U†YÉ"Ä"¤È¼ï7wŒH�hxFß»¢fž?É´M¸†Ô†Œ�Ës“ut£g–vòWs	ˆ@»‹ÇÇÈ)¥X­áò*¹tŠþN•\R!	Ó*b§Âà¬þöqýi‰þaõKú�‚b•qúÜ�iœ³.©äHú*20å„TØ×b �Ï-âôå–ŽœžiÞf³£Œ¶sµ¹>xG?~�o?z_.ç—µÚoNÒ+º�kò�ÆP}ùz-±|ƒ:*£=§£QÚŒ•{ ]ƒè€9(_^Tg¼iÙÁà4Z�À+ÃõNÛ• pÙá”25¶Øþ!ÉÔ†O ÚuQã?Þ{ê£o®ž>µÜ´‹òftÏbøÊ}Ío½ý‰w½¥tÙóÃ*(GÚG#O@(ú½©$Þêø0R­‹ãqF—‹Ñß¥ÉDžoŽAžoL²gçbwÁùÖJç³?Uq¿ÞŠÿ(Í¯�ÄžŠýHOì-{_­§/‰œ»†ƒOŽøŸ_¼.3nÈçòžêJ¿¯J•Ãc3ðY‹›V[e.©”è¸„ê™vGY±YÝL_@›lÑÜn¡b[Ó<¨‘IÄY?L7¹¤80+>‰ŽËïfèæ&í›µ®rrÃ-b'¹1l5;¯5xëjïÃ™ÚPï¿0ŒÖó|©½#*ü§å"i£µŒµ'!h£¡RÄK0î8÷Ã™/€ºð6 u „Âô—ÁâørNÈos]Õ³ŽVËÃèZu
+Õi_ºGÖ�k™§'ï­nƒW‚ªyÑ›	¼‘b:÷TyqYºÎS2A¿…¬Êú òY:Î¥ž8±:ºî�<çû…âãJ3ºD�µÞ²ûµâ[…Ïk¹îJO]RþVérèÜ)õPœ¾¨|LëB-üH¢†9;ã±µ,¿¤›=g¿–‘T™(‘çÆr—MÇ‹o*ÛO-4¿ïóS.?[r¿a@-Ú 0”¤¹ñ8=Sqo-Ù÷›ŸÔÆ�¾X±ŽKcE¬¡`uóg ¦æ<ÔÉ/ÉŒ²è¢Kì\­ëˆÍqþ,T«I‹¤zÔû·3‹ý·G¬íRQ¶j0‡6›®ÍêÃ<²�Õ¬'”ÍHR³!5©IJ´ÔÖœŸY´ðÓ}¹Ñ"”’5 ]9�ÉsS#r]‹µå³f‘›.¾� +ñëFìY‹
+ÖS¹Ž2£)tlúœFíÁ¸{°ÊRªLà²³!M=jJt„±œ¶ÚM\šô5õi•“`\ë‰\ìI´Õ•“±ÜM ìiÿ¶ñð£Ò8‹ñï�:ÇmÚd$¥m1ÆgK5ëì¸ÿ/¿2ÿÿ¾Aò·Ök½98«M«¢Pd†B	cs"…±jöc‰Z/t A3mYD)Ã<Ö¯8?¦$>Ö)ó¨†Icb3 à‘ ®�Oñ­œÈ¾â>5.íuUQ€šQa:ÖÎ¼z´JvE@„KÂE}_•œ§�%fÍB˜¢^ ª¬D¡Ÿãˆ
+dg�ì<¦?çbtßŠ°½ŽŸOã¬�_”±ßÁPŠåar�@;3«)–"rN™œ[ Å¾î×˜wXþ„!±.¤ÃÒˆó‹-ìºêÎõô¤&ñˆ×ÖKe6®�9§øW‹ýw;¬Yt~PO^f �=}œ³3©¸(p¾'Õ†RñSR•‹}axOq–™"n#¬A	¦`!cÄ+}&¢v)Œ�UF¾- D»pò+èµÐj¿çDç£¯»}íî—ß::ô‡Œ£4ŽÂzÈ"×½ñ�òŽšÿ—O2û—k>v^Ý´ñ½ŸoÝ÷Ú·njÎ‚ÛÐ^	q d7D¿…Nç•aø5dùß?!rtûï0`œÍ§ù•½ìZ�?>�çW¼/Úü°TÓƒì9£•»ý?k&¯¬‡»ù•Æ0—ÍS’½/­ÞÍHo9»À¥¹6¬`�êÉ©¶Pâ+K¢ÒÑó5ºÀÀô*,Šµ^ÒŠd[bê}s²‰û‹8O ��lÓPÌVÈž“úæiòJ�~Œ3Þ’¹myK‚•1z!€«µ�6q'Ý§b¹A{:úÐBÿ}ÓÅ·vâ×zÖCqÅôÐ%BN’8NÃhT¦~y¬Õ�JÁ\9@åØCè=�âE0ñQ€¢yNõ# 'OüKtÅË×Ÿóm‹Þ£{ké¡ïØœ´„ ;¢¡†ì5×ßtßñw^ay) cü-_nüô»­Ÿ}gÇÍ??ðŠgTÆ³¤¯„AÜ�Ê‘0è­÷üY¤ÉxXXt|,Ï?'*ü KKZ�3>ÇÙ€rˆÌqý@·}éZï¯k…÷p6g@ñï¹Î=Æ8RnJÅ~†’·Ò�¢ç¶AvƒÍf„ZŸÉs:b_ÄŸhª&Ç¢÷ÆùuÍô9÷ŽTžcŒÃh‡’˜ÓºÐ£¾u Ou?X³�R[t	`}±×ã3”ôs5ž¨)ÆHº&Êëý{ºù>‹ö=v<–;8mK]�&è¨(¤©0NÉ:eÑåXnkÉ¡ªµ(t€‘TŸ“Ä¦J«Ù¾Ô¨3ÒeÍ\—å»4qX#SU–hÛ§Ù²L·ûO4ó‹Šü%i,7ùüd¢ÖKã;´I b5Z²ÒÆ§$]I/«ÚGs]#�„È\—B~LèšMë‹Ù~(  ‰Ëê]9Åˆ¢P RíÄFtõB•®[Ð�çL-‹á*�]¶ÈHßf‹¹š^Éö”­E—Í¦j�Ç�çjÊãG–“ç…|™“Ž2AONy¬]°îïä—FÖ¡•ì*�öÿ,+ü*^ë;Iÿ×óO™ð¼Öÿ’©çûs•™R†GÖ	
+kÛ""‘bUbDX$²øüˆûeìåäùõä…£ÖZ‘ÇMBÖó¨©1wÒÎ—ôc#l+'’AVxWZ—AÄz>'4bmôŠÌS#†é¹ºÂlÒ7KÜ�iVÈ¹Ž�`„nÈð;?5­YyhQ.¯§¿;L®rPIÑ-�ÝÖ9ä.Æ«¸ØFÅ!#“äå%r¾�I±¼`¾¹d¾ËI�€{˜è™Ùº:=«o™—glÔ:æPHGúz51�!r±¶²kŸ.Ãæ´bµ‡ù˜Kt@Õ|ÿ½€éÊ1­£–ô>òSçázüŒ.1Ò¬÷oÊå–zóSýøÕ ’�XktVÑ]FcÜ†!ëÿr©Õh6 o zœ	ÀÀÛ
+;
+Áßw�Ç 5ší¿è¤/÷Y,u1poËÞŠhíS¶n�~Ó'Vo¿µyÇ'K[Aœ
+œ"J—¿”ˆ¥Ç_µ¿û:™27³ 5d†ê&D#(Œ@	Ø.|ïZCiêû'²´À88›s¬G$%=‡Ÿd´=Vxs|n©ûi€0ººÚúz.·…ÉÙ¼ÇN:lQ™ˆÑÖBïoêùviŠ!ëÛ´—6�ÓEë0€š}R˜0¢Ü#U	•˜¤@•Ú„Èc^#/ã�|Œ\_#ûŸ4ïÏP×gô7‡É³9ñ{æˆ4½›wÒ÷K,„‰éd&:40#ÖÊ|º#×®KÛ‹ý?Øé\ìb´“Êó]v|¥ùÕ$½¾¿&Ï"/Â ‘`Ð@ó8â	ÑEÞ…h¢÷$ìLÙ õáŒ¢v!˜¯€æò(§‹op[Êã7¾|êeoP|„0¨vcÏÚ‘w¥QB'§D	E÷¨d«Œ´µTDÅnÈ²(÷À,È"ƒÖÛ<«$à‹^JÀ÷Ðn¿†Ñ�ßìºÄý½íÞûÖÖÞÒn]cÛM?Ã'NoÈó8Ÿ1ÆjößÇÙ™Èÿ2#í\mr¬G\6Ð^v•Å�¨Lîz\šÒ†òós=b@ë©\mïæ—üäjòb ±Ã³h/¿´‘]¾2xk+yÍTðu©v,w¥j“ÃÈJú,Fû¡uÄ"=—-˜ìæû(‘m1îðãTêB®‹B{ëýoçÆqiße'•.÷U­Àºy-Óá²à[!ÐUm‹­­ü¼�µF­U�X	íD¼Nˆ9›Õ#9<¶<nñf~QÈÏÌgç8ü¨0^ª¦…Žò�¨qJ$%™EWÙÅ,fÛ:²¶(*Œ8‰›ùÞžœìËm¾\±O–x�=Pã€)ðSœÄ 1±"2æSµ‘_°(j5ÞŸÉ[�õPOìheÏè‰­[Kï:êŠ=ÚØÚxEç;}±×¡ƒž[ÎwpÚŒM×:ùåÂ]±?d�€Ÿú•Uä¯ÛŽõ§ö¡}è·� oºé¦óñgEWÙ”âóÅ?“ë!{Ä»Ý¢;V“„ÀJT••i×¦y[Ê| ´·¢:fKãx˜°qi¬`	ãµu\ål ½Ä(›Ð–ÒYË.’©–>M³HèQ«B‹±cÜ««¥!>D`õM› ±iRð‹6).›;ñ9Â'Ìÿ!×*Ä=<éa<$[S³c¶ƒG=L-à;Säå‘sšæ~‰�GÆñ»æ¨M*œD§õW|²A"ÑÐnfäYu(5ý®N›*-ÑbWËXËº:«Qæ`J¯ÓÆÉu¹`?Þ{KÎÏ;éËVÒÆÃ�4“WGÎvÒWµŽ’Ö ~tLÈ²’ŒÀ¤È­9¸!dBA-èý£Ð)ò%„{¡cä‹ÈVÑ:‚¥¹ËÏv>Ó“SEëÈžß{\üÐÆ×\Vºôz±ú0%¨Þø—ÎØt´ëâhÿ‹tÖ©\õìÕ?œ¶aM�½æ¯
+{/ë>õ$mß�u~¹OûtßSÖEÖ Ja´f„Û…R™‚š£”Í­vþ9p~X+½'
+¾GÈÊ ~-L1“»<ë1‹Ÿj£Òc«ñëj£4¥Tq‹¶:rdÔ»} w	 „¸ÆØ™®hÃÑ>%Ô�x’hV`š"<¤nòÉú29o”í«ÒÝ.	;æŒ@c€™aru†fŽ5D3ât¦øÖD+�ÔrÓ‰±ä�©€Z‰Žz¦+ÁC–„Æâ|©‡)reŠ‹ÉM]û¾nüGžõÝ<ÃÙ3Ÿp­;û-n”Ö)…[†Âßˆî°+ î4T¥gB®"]ÅÌ‰/ÌößLxMvð=v`“ö/‚a·xÑõjía8£Áø>æ�ó¢ôØ�˜‡èüëÅÙ‡ûËP�ã¯ÿhùòç÷þ¤yàçA–- %´¥°]Äm„U´ê{ƒh9é£×Ùäù­<Uj]àu0x. Ãè©4ÙéØ,ç{ÞáNïŸà9w"‰›ñ[tÅµïKò«í$rOÉÿ"#†’�RS „ wØéNòšªÿÙzòŠÈ>ÐH_ðc6ŸMÕfe¢‚uª�]mŒWt~˜È�]àñÃEïßêñ+9M	Q?Ãam±Ýe-—ŸJå†¾*E|Áã³#Bèa „h—­5ó«ö!
+“ªõ-±Þgƒ€ŸÌÔ¤)0tä˜0NÉ:#t�mÀ-Ú‹ìÇó�#š)�Ëàô5¶ŸÌÍ�CÛ9RàË.›³HÑ˜ˆ€9lI#¬Ã6íÍç…a{1SS-±'`õÈz
+f85V‘©®õ¾—È­  Dsšhã{üôB>Á	÷iW˜‚2^GY‹]š
+ãû,Y•iD}›&ÎJ*Ï)Ø&jýˆÿµ™î{&‚ÏŸM/už¨m‰ÜI!|>«MI'V#9è¸K7¿ 6í2’&jâNõÑÿOî¸é¦›.!þk‚ùøØo–¤~k½ÖÏ�œM÷N¸�wÄNNòDù!oÔEÉ#tÜûA+¿Ò¥+±šøü™lºÊ´Ec©=–k›¥@)ôªêø¤è–]æ‰2¶)[�Í¦{” &5¼£›Ü!NÏˆÆmªÜ"vlÚEZ�Woµö,Ê¦ƒÈ£^G7R>©þ}ˆ\n“‚4q†vßç¤›Ó>Ù4oþÕÃ˜‡)†  rÓ”è‘+çÍ-¦Zx8Âv…4Çš…’@{yMÇmT—Ìw·Ów&¦NÀÚæPDÎY0ßØJß–š¶Ojºe�ÓkÖZ]TO¨[.vn<#dnº|‚�­SG�”G[NuuÄûJ,.¶ÙœPãÒ
+Î÷¥š®ß§ÿKéa‹ùw%áEˆ;ð"ä)Æö€Pøë {¨^‡øŠÏBï>¾É O-ôvND£[à¬C¸»–®öYù¼IÄgÀÈVµF¬!38ÒŸC\‡?„¬Ê¡% ˆ–ûË€fÒ…Èàø°}ô› …´`9h¬^­u%oMÓÝ”´³üJÛ~°ÿÞøØçÎÞ8··ãß·ùŒT£œ-3Òh¦¯(Ø÷¬$/ù\ªF(@ª+.mùüðrúŒ�7Z²êðÕå|Ä!¬jÍ¬‰�>ÍN‰…ÔÃX†V‘¬ÏÐ¥àúö�ü5�È���çtÌ!
+G!¡à^™ì;c¾6E^ÞÃñØÌ“gæhÉ6ÀtÌ‰"Ù2Ì¢eÕ¢à%ZæDû¬«²C“�Ÿätµàý%½nòßþá »Á³®uutøO{ÝKG×ÝÇ,pÌFqÜ	†ð$ÇaUÐ¼'¾�{gô†ð›û¯~Yé\Xe$sp§kFÙ•#ƒ£°Jè<‰`=Ü	´Ö¬òPý¾##¢?BÑ[|ºx‹ä/|·xènr&½ø•Íh}®ùõoqËeh¬\ê‡÷…%…^ýÁïVª·xâ.zÝ}AðH’lvì“B0Y~Q¥vÛÜÙ¯öZñ['‡.nwÿ’ÑÕNò*BRÏ:‹ýÆØ÷?¤ÚàÚ?£´5ßúŠÃV=þ$¥Ýåø•ë
+ïj#ínöüŽØ5ÜìZ÷÷Óßéæ—�ŸÄb¯oJåV¡‡|~8U›jÁ'Nwþ1âgÖòMë‚íd×R’Ô¨C{.;ÛÌwQ˜ˆÏ
+SrÙ‚MNÇÏq(BÚ®ËB�é¢uXê'½¶8§­Õ:ç”Íæ{b_OVš—¬C=yŽ1,5n�-gºRuîž‹Ÿ²|UŠi§#tA›‘Œ@;¬ž¨q [NÔ¨Eº¡õØ™äy#öÀ¬ä;l¢ü¬6§ý¶ØÐUbƒ÷”ÍÎ¬¦7„ìL¦keç'íì™€é¨RÍ:C |ë±åä…œä[éË‰Üp¸D	Ã\šÙ´ËÉ Q#ÂØ5çÁ•ìcHÙš÷ø±åôYÊ�ˆµ-ÚsÙL3¿”BUÜ÷óýÊ¸.[èËÍ#Þ¿¯¥/,XßØ¿êWñZßNÖ~M0ÿ?¦ö?^ëÉÌ$;¦¼�qVd_h»À—	ÔˆµfQ%u�“äL6îÐÖJ¾¹ÊtO9}Y©º?öØªEEÑ:žiP˜aV³ÏÚTR›t]Ú(6“î¡ -% "�öI‘€OL[UBô¼¾#3I‰Vµ1“l®­9ý5€•·ø¤´¤ŒÑë:8Ü6Çªl¼L7dÓÀœ®‘+9¼q¼py£ƒ‘>ŽY(dcž6Ÿoá‘Ž­àž%ÜÑÂ�®DO sÊ|¦FöÏšapÒà’
+È†2]¿…¾u^@Ïœm›6*™Ifs60­"9÷¬0=3[¦ÓYV«�|Ë8£àm¨³"^‰_³˜îigW¥jÚg-~mª¶Î­ÝÇè¢T“kƒ÷�š½C
+ô[H’*e°=¬<‰¼‹ÖA±‚`7²S€¡Œã¾yµ±rcu•s¬Gx.dgM,Y»Î(ÒÎ…;‰‘C¶×TûˆÎ‚ò6¸5ø#`˜ƒ| ;Dc°£Á,”Æ¡dÇGÒÇÒIçéš�¡±ŸÚÖÃJQÇ~Âæ9?EiCêéÅ¥�XìäJïÃ•ðÃ®u`¼v½T£Ú„¦Ÿ_:ì}Çç‡B~Ô¡u€¤º°ÅDW{b¯Ç+¢P³Q‰ª•˜èéþLV A7X›+d‡OÊUºÅ§ž4	ƒ-18¥~\!—¬™{ŠdO@6¦8k`"²½n~6À©yóu#äº“æÿ¸VÈ„ÉV~b8@ìØä¹¡+"J4êÒj‹�«é³7¿gÏ,úŸ^îˆÑ5©&BÿËYjá}"…Ì1sè2E¢gýG Ûè>LÃí ”®óh³cnÔ†¿þt]³KG’xë ûpG ÚMˆÖZ¾t¤¶YNYÁ‚aäû^D\Ûö 6\èœ~ÀýÑßÇ®®MƒPpNˆ ¼/ª Û€”ht>6:yK§}…Ì”P®>Òî¼ÚóN
+1ì¸uÆ–’ô¹¶ýˆÌÁH[¨MµèIò|ß½=É/+x·T‚Odr³o=`À´‰,~„�t¾ýåÑè#”ÄŒ6<ûžˆÏ´“WäR¯d{§¢¿ªÇ¯rkä}µæÿÓZúÂÀ:�Ês,ºBI:�»vF¨Í :uJåŽÀz"VÃeë±L\v2`¢á8tÅ¦‹§âë&œÃ†éSZsîîˆ�„H€ÔUÚ™kˆíB�í_ÙO…|¶%öZdÀHN€X9´#ôhj2:açR‡€qÙšÏOKãqÚxúëQ7âG*Þ7–ÒçŽØ‡s]sØœ4zcá/r]á´m³3m•NØÍXnLåÖ¢ud>›pY}5½�‘Œa3Pã QºÖVyÄO°�/8T2€“œÃI
+Br�-ø™•ôÒQç§‹¥	µqz*ßRü @8éÚüT_ñÿ‹‰ÇglÚ\Êv8´¹œ¼œ‘´/wá¿ÍüÖêÈO¹�'²“Û­=¹±}Ú3 Úp—Õ×Ä4‡‘ .Q}M8¡#öBd_löØÊr¾®À2Jä©|eˆm"@@Ó¾v•Ñ
+ªÌ ué §
+èén�(ÐÖ�€RïÝÃn&õI¨a4´C¬UušÁè0ø=œà'èE¦­ÏFtô„úJ�\þ�ùýýäæs«�J‘œ·j~,ÐÎ°:†HôlT×pO‚…ÎkáQ5a‡‡I…¤…	Ø8yqÛ<j *ä’Ü4Ûxh„<kFÔR    IDAT·Dv,ë»:%r¾…0ÅŠƒa�6CP![úf5Cs˜î&÷¨+Œ¢ 6a}ÌªE‚	^è)›¢ŒÖÐUžR¨DG©&fÔžkŠ“þw;Ù6«+­Ú×íÿ‰m=>±î_¹ƒÊ6xÓläî?ü¹S_²©ùÕK¢=*_†�}”®dñ1Èì
+ä ²ƒx…mè…7øë°|7Â)´O »ŠÂ0D‚<�å í#¬"O0è`|–Ž‚sØ.dŽ^gªPž’x]/~g³•òçòÌ2°ê­/)S.¸_Ëä¾Lnmç—;t-´ÌÕz›ÍüÏÍµþ#²mç—4¯ñ$Ñá@+m”O��uªÐÕƒ­þÁ³É¥ŒJŒ6dY�Ü`M-Ê‡Ó2G5ÄF~QOeù¬þZ‚…õäõs_ŠÅ	òb�nÝüÔFÙBÙ"E�,1gÒõQr#ƒ+Ð‰ÈF
+«cŽUÈ®€FgÕC5²»Ì¬§-Š3«2ÖP#¬à²ÎrŒÙ=Ÿz,²ïò�ÿì¥/KÅÎé¡ýÜÊ†7‚9¨^ÄFÿèþþÃß?Ù¿™ûSŠùÈV@mðz‡QØæ#™CÞFt’y¸£èŸ µ cXE0ýÓ¦ÑT¦lZ¸¼cÎœ¼äc¦±ê¬2w|EdðKH{`2G¿?B·Uæ¼%e9Ï÷…á�“d·çúþ-Bì„±„ÜhBrßÿv¿€óÙ8}^à}Ã¶Nuzo-þ¡Û{s7yi)ø-ÕºTì�ÅùCáG3q~"Ï+ù7'Ù5œ-4ã×ºü´gh%/å´­L1W•‚}_,wKÖa©ËÒ”
+öÝÝüj]pîìåW¹ln vÖA‡ë¤7"Úb‹KûEû€6®ÐÃB—S]®9÷dj:–“Eû Ôee¼¦X²žÇÎvåf›„ñscEl-Qe‹fZƒ	í†|¹'GR±oæ»CV¨!�vlÖðùã™ZËM?:wÆù•‰Ül³ÕDM•�ï÷ò« ­�mÓ††Ý9Ÿ‰Õ:F2c¨0 b‘Ô¡iÂ\GUç'�ìYÊða÷Îµì™>[zZ}öå´K¹.w”3î©Ÿî¥¿Ó{Cë±ÐùÁ\÷£[Êu9´žb¤�ÈíÚx}5ì³&%¹ÐÀ„üxWìä4:ðX=Óeúî,øUtäÛèÊ¯	æŸÑ#¿Y’ú­åÈ�Xb i[/nqì¦¶ˆqiÜ–^‘§†“¤-kk1QC$×Ü =ûÔÏL›#)²Îªô)¨EXn¤C¸OÓU);fvŒíêé¶KÂ–>-Ð¢{:úÌªùÉ.þÆºšc°C:´¢«‘Ý‹æî)zíª>8JÏïè%�¾Bš£Y7w•qa
+ØA`eX­‘+�›Oú˜¤°8íaªŒ}=s0ÔÇqÿ,¾7Šgø˜~
+·Ÿlâ¾;béaJ¡ŸbÙÃd
+ØÕÃ‘)ò*�NlfJä|ŸLtÍqÕº}E‰Ètbê ÕÈ‡èæ¶^æÄsI›ö�V¥hÐÒu^HÃ†ZçC=�*ôT!5¢Êd¢=FŒ4Ä¥9�Q†u´ž°—•ñ-Ú*:·oÜòÎóþá]Þ¾Oî{7>Ù yVÁy .Ò£è?	^‚=Õu�¯!]‚QÐ9¬ò&²6J;Ñ;	•�¹}ø£hŸ€V0ÜFÚGÜ¥J ­e£Q¨beár!·W*ÿ’Äãž·8èŸ?H_ÐÐÿ‚Rã€I²çærkª¶¸ì„Ð£ÚøB—‡Ã¿nÅozØå'¹­äÜ¶¿VƒŸÕ[b<3ŠVd=½*} DéŒ<*Ñ£¦fà‘ ­b,&f~ˆ\‘¡ÁàÕÍ=rw–°G¢g£B`EdGÏ¶Pêà±)òÊÔ,+¤>™RÈrÓ,‘Ý2=0«Œ8Âô2Vfþ²Z™àUM B ›ŠÕxÖ’¾Eh¬S‡8Ãö|¬F'Ã�òk~¤þÕÿðâò�_þ×ÿm“OÆ§àŒ ØƒÞƒ ¬!$§Ð?o0`!DYZÀŸ„QÈÈ AÚ ^ùN‘Z 2C¨sç?ªù9ùÆOásï5iê1h�PÄ]Œ�ƒúIôºÁ¥P¬¢¾´Ñ²f\ÝÎîÎàOÊÑ)i¥Ù3Ù�žu!×½‹ ËÅÞ\ì%$Ž³kËÑ‡-~¤Õýˆ'$·Øœ�ûÁAz£6¥‚÷ù^ò*J»µâ_^-Øtó‹Cëqm‚²ÿÙÕþ_pÚ
+íŸv²ë›ù¶Q÷§”ö±«/'¾DIæóÇ ’ë©LMR’úü�ÅÎ¶Ò+ãrÒÓÆát tÁeg25¥�Ù�ôÅžT—7ßþDóÿ–y¿§
+ëkÐ¢õh3¿ œdOgí
+èLG]mžþ—)X3Ê™ª8¬I!ŠîwþD7}yOìóØœÔE€0N;€vØìZú—Õs]YW|Ý‰Ö-!_j‰‰1÷þžØUu¿·’¼¸l?*u´œí¨Xk Ú7`±vB6PÆ*Y�7òó•¡ŒhehÕ>æ°Bd_ìsØ¼ÒÅLY¤ãòY¡«º#vz¬n+üùjïý¡ýÀÜàãîÏ(éwòËIBë `VÓkÚc$ÿãtôWáÈ?"K¿&˜ÿ_3ö?^ëÉÔœ{,b“u1Ä€Lƒ‘,dÊ"ƒDûBûœ˜¾]�-N2Ÿõs£Ç,å-Lb U`½¶*ŽX=iD¢S—p‡¨U©lâM±]U¾\¡%—ð]?Áö;Ä*Ñu“ô-«£NŠ5R$[úfy’>+5}å¶>;cþÙ'#OÍâ6ú'‰4R‡Œ´p`Œ\¿l¾·�¼+ÁB…\VÄëÎàk=ÉÝÂ#lh0s	ù|OúØ’­!Ùj¡h‘‚C†=Löq¬€ÝÓô%>ƒÓ0÷n ¯ˆÈ†Ä,GØ 5I…n9«ï°H(Ð)Ñu£Îq›D.	»zÀ²L±Zz…‚E4tˆÜêf$5�-D¬ïË¦=—¦![`‘dSå…í_8üÜÐ¾oçôPÉýúþç½së2kú%�ßô:ô’Á£,¯ƒ—àLapƒÇ�œ(xz€tF‚G€A¸ñ¨ÀÂÒÏÁ\„ÓhŸ†7ŒÎ”„[€µ³°=‡Õ�t±:?æú°läùŽn–u8ô¿2èïj÷Þßï_œË]‰¸¸ü]š=#N_@HìÚ÷jä&›õ¬Glv&´™ißlÑÕ’óÝzzUÑþQ#}Yf\NÒD[3™²n™gEÖïÈpVdef\b“¶”¬Ñíãô"iä‚¾cI?Â‰·fîž ÏàŒsÎ‘ç|níº”®ùÃ½›ÉÛ-”ClëàI%L‹ÁkàÉ[êæ®*¹  ë)…Ù�¡Ù7+z£MŠt��iª~‘ŒPè5©{Ê^”�E�ZíD 40léªU¯úÿñ“ÅðÛ7]²eëëÏÿý3þy/éÝón{÷›d‡¹-¤³èƒQÐ1ƒ¡wÆ`í~èNÑV$èŸ!`ìV€èÞOyw~Æ�ù‰óäÁSßÈ/~)ùÝw�ù£a9ã6zkh­íHz˜<KG`Ùˆ
+„ ZÙƒòübÆ rxÞ¥à“Íî_KµÉ±Ýÿà|¦PøÆ ~u«w“1> Ûz‚³%¥†¥š²ø©RtSèþ»1¼}DÈ­ÿ6?ÜŽßº–>/ûÏ¬=Rqo³Ø™È~8SÓÒ{éKR=ÌHW¨õ>¼jzd.¾Áb+‘5ËH¯è|§›_¾–^oŒesè‚6%©Æ8iûüdÙýVh=JÉ êÝ¢�ZY´ÓÌ®ˆUucéõ3íÏÔ¬†M[%¾–j?Ó^Wœk‹AX¤[ãö‚`Â¸g„&Ä(¡D•ì£]±i%³i·`ÿD?•{2¹+WSEûÞ²ÿ�.?í°3ãÅ?ä¤aÓ…åäÆ¾vr]ÞX¹q¾óOÉºP³�-§— XN^âÐ6#me"—šº¨(ã´”#ŒÍ U¶È-«3¢}¶&�D�ÛlFébh=9ß³è²Ë\~šÓÅÈùÁ@nj+«áÉÒ«»×°-vzÈ~ª'öÌ'ÏèBÍÿœÍ�%r»4<ÑEB$þÛÌoïMsw‘Ó¶Ðå†±OåºÔ“U›
+—¶„Ž2ã°ˆ HÉ~d5½83fØ^l‹	‹(JT¦m—¦™vb£"J–d½@‡Ïê{)ì!rž†¢`:¢>&—FrÂs“.èïïä/ÏŒîè%F‡§­Oiä>WF”éØ¢~´oNLÒVÌ/<ŒÅf¾‹Ç‡È5™Y©ã®"öžÄgk¸°‡ã ²"ÎÉÐ Œ�)…¤‚‹{8BÀ-‹ä¼³æëŠU\¶ŠŸX(��g{a�Êo¨
+¹pÕÜ5D®òÉHÃœ¦WL�‚Ô?£0½Þ.öUëŒ œð"Œa\
+•iw`Äz÷‰D­sè²2¡Ëf…-ºß4ÆzŠ@Vïb|¹6�ö*lÅI”¶#Ú	£‘¯ ôzü¯ô÷è=#µÍ—5Ýpr æ"ÜÙu![ÈP	DÔB¸Ý'@ôfQÜ‚ÕG0´yé
+Ñ:™@æ`¸-‘ö r8œK3›<ï”å O‘eSJMfù…•ò§­?u¬r±ßµ®ôH’=Kê±�ØoÑ§+ c¤ÙÌž_uo™¼i]ô	!75²ç�¿¿A˜‚ÐŽ0¬d-fª,ŒkRâ±C›ÇS«@‡}Jº*OÐfpÖÌC“ô«ú�‹¡Ë!Y›…õ7®ïI„J÷œóÔ/Žôpdˆ<sÑÜ:Œk²¹eH*äÂõ¹È#Ÿ²Dë†>1Î¶§FX„ô`Ü2Úãs¹Êt€EU÷VÇz�³Å\žS.þí`ð\×ýQ*ÊÖPÝ‹xÑ6”®FrŒŠº~âKt~ùG{ö]3qÀ ¨<Ù,Z÷Â†ŠáMÃG÷!° ÝÃðFÑ:Œ`ýPŽp¢‡µ£ˆ†Am@£·ŒÂ$úKˆ»Ð~qÜF¯½.*ÍÈPÛECäQm¢§ÎÎ¾–Ñ%J×ç‘Áàå”¶Âà‡�ö{}÷¶îà¾s{?}±ÅÎ–ïMÒç¬t?5ÞDi‹Òn£÷¡¡Â;:ƒwôó+9wõó+6K�dj‹Ç%r�E—~$
+=<V|“1ÎéÖX¤Ù•‚O�m•BÝÛ×’ßøñv~~Ázª/·1ä�ut9½¤fa¤Ïh�’ÁZzí°÷­NvmW=½Ø"tÔU¥2_MuÉ¥íLmÚe$NÕ°0Îtø©£Ýwº”Ø$³i·ìÞ±0xµ­Z‡×ÄŸöÛ2¬Yu«æ}E›h%~eÍý¾2%‹.0ÚX�ßPqïh¥×T¹jYËÏ©ÚÇù¶š}¤#¶¬SÊ€qÙl;ß?]x·ÔOuþ´ÄtÈç¤ŽŠÎO–“—Y$öØBWn!Ð«çºØ’Þ„s¢ì}a¡ÿÁ²óScJbJºíì¹Ò¸é	üt=Û5êÞ»˜^>îÞßÌ÷­ÃB×Œa‰®q’îœˆ:Ý·=ÕútÈDÕùy;¿ø]Yø«èÈ·�¹_ÌÿÑ¬ûÍ’Ôomöã
+ò	À.»?’jÓDá+ñ«4HÀZÊ¸ ¤ÀgºjHV´f{b;–.æ^‰)	¾(ë	9!‰!% 1pè]ß0Ç'ùÆ¦^	i9bÖ¢:íÓrCŸnâb‚!>¤MqÂNêJJÄ!°fM±óÚf1G§B7õMS!ÉÆ£æc£ä9)Öú8jc0-(à\ŽP£ €�6ŠC¸ÊBÄáX'Ñh§X"×vp¨€Ý–9‚Î› ×uÌá.GØÚÃ1Ó†%Iº5rÑ_Ïád&e’u¶�Ú/Ò©"ek »ñ8ÔŠXÃfM¥#NR‡*µq#ûÀ@ìªyÿBŠÞ-ŽõXmèŸ´ÌmøþÏ,á¼AÁ8†n„5= 4TÏ´¢ n:¼Ôò&*b0ƒp3’90ÔCó~XePé*@àT…x…Mh>�`y*ÃÓØtŽÂ4’(GgŽ‡,F<˜ôünÜ�–Ê²æÚ5Jy0`ÒüÊ<__$/³­'9?]ï~Ææ3Œ6q£ßúE/†6…¢óƒzòê’}0ç°�Ø/LXs¿ËhËBÀú±ö{¦ë¯#KVÈøŠZÉL—§J+³ú{aHÖ­˜;#²�ç¸ù/Û¶xoåÑ»ºî½cG~Ô)é{æÈ4y•E
+kæ§5r…EÊ²™!˜5_Øa_8+fk¬FMÁ¡ÌZæN"ND®ƒª{›ÒÃ‰ùüPp3`BÿkÆ¸åò¿+‰ÚØÉ46~cÀŸ€Îá”Q¸ ñ“(\n²YÌÞ»ã©Ö'X!»'[�;±
+Ù‚Á™@¶5€lB bðyÌå *‡ÀH» 1@Ò�üòid
+/‚WŠãH:Û�í!�Á8’ò|+c«F¤pìƒQñ”VKYvckž÷³$¹Ä÷¾#ÄnJzŒ¶9[Òº¢uU›7&X¼[«i×zH©õ”¶…Ü:?Ý[Œ.—£dù¥•ð“ MÅ>Îê±Ü/ô(£†LÈm[*¸ÿÙËŸeô˜ÒÕÐùY,öÖá\Mp:ÐÆç´§LÀhLàœ{S¹u5Û«õˆËV•®1ÚÕº²µÈ~ °ÄyœfCî­Q¬F‘™®äÆ¡ÐÍlx!Ÿï«1ÀÒzDš°h�–&òi3Ó%—ŠX¶,Ô4…Ð¦9wI5ÝÎ¯ÎÕf‡.3’q’pBCû^—¥6]zJo2ú°Të;b+'‚ ™®z¬N@l3jÓÞJ¾Ñ¡Jêe‚È:jà¸l¥¯ÆZÒ×Æå„
+]­£©ØÚ@ÔZz½o�dD¹ìl¢¦ÖA€û·fj‹Ô5Ÿ/y_Ü³é>Ÿ%ÚØ”H¦#©¦8F}~æLrq�× ÿîWÉ~\@þä×ó‡ð÷¿Y’â¿­¹bÈM”t-w’ß÷X{ØÿÜÙþŸjCC¾°”m“�%ËÙ›PhíV¹J´å³ÿÇÞ›F[V•g£ÏìV¿û½O_§NõTÑ=¢ ¢‚‚ A%öMˆ&1$6Ÿšï‹&1h46Ñ(F#6±‰bƒŠ4
+‚ PEõ§êTÕi÷Þg·«ŸÍ÷FÆýqu8†÷ÞïŽaæx=s­ùg­1ßñ¼ÍóF6N N3j<k’šHÁ˜p»˜@Ù¤œ˜„¯N×õu_�Â$ž70†€­Ê±ÔÌMðµä/§éÄ°ÃêþÔ4KäÄãún£¡B2CÞá˜�µ	 ¸djhö°sSäU*3ímrß¨â”
+Îv±6 ›f¯4ýÎ[ÁÏN¡ÿ¸ 2N/‘HÇÉK«¸€ %œ”šþ8[kë"‡Pg¨RŸÚì8ÆYÈ²€Ø4Ú"z¾Ø(©Çr=ª�›ªN£‚Øá[wr~DÊõ„dçæ4?}räUŽ�4·Ðù±åÂø‚Ñó¡bXUä+pÖ�dKpªÈl¤$ßs|e]rþÊ?Y• íbúÕ÷À[‹tÔ†3#‘,Á�BxFÂ
+`UÀ\DpêX}
+Z!n¡ºq¬‹~FÃóŽ§âhLéÌnÏ»@]âûwR¶Òþåjïc™Zß¨}¸ÓySÁþA”]dóÝEû' \çÖnòJN[–ØéfÏsùã”öÂìÂ¢uW3y¥Âü,—­„rŒÒ–E…¼LK¡ÖÓÖ&/b¬@ �F¶u{=}Ã¢¾«oöD8¶…®?®œ$¯´×\yÌ¥2ÈBUgçòE—¬`[$BU#§T˜c×—×kÃ§ù¦UN£ªöˆÝ;œ«iF[e÷eõê‡ó¶ƒ~ïâJõn§€,‚L±v;˜gZÁH˜P ¿„€�ä„âgö>è?úÍÑévdÌC¶Š¢Â hèy*�]!¶àÐi7W¿tUÔ„]w aÅ	„+Èhá¡·„$˜@ž@æ£y.üà8°Ÿq<­<¼¨jÝF)<ï>™²ô©ÖeÑi–ØaÑn¹òÐpP7±&/+¸_qÅ}”v*ÈÙ¥õòûÃwer«†pÄ­Á‡SµÖâ{?Ü�ÞDÉ 7e™ŸQ°î5Æµø¾\Íãõ²Gø“¾x˜�ÈbGSy‚ÔµDMû|¯¯xŸ$×Rlà¤ç°åLn°ØRV(GGü/ô“—Är�4v‰j§—Ä“œd]ì¦/|:Þé’ÏºÂ�‰åÆŽœ˜pØ2%)'�1¥ýÌcí•ù1i‚1÷‹™Z×OŸeóYJÒ8;×æ»]ÝÊõÓÅ†éË†r«6<ÌÏ�äDÝý!#y vwâ×sÒui0‘Z#Hœ«é\×»rí˜sOÕmº(‹öS5•™B¦�Š88mý¼›¾ˆÀXt)WëÖ£@^p¾fç4ãË×U^»Øÿ„ ýÀº+Ì.lÇ4â}6”IZñ›-ºTå}AûEë‹Í†ÙE;œèšE—Ê<Ä£ˆ§{Xÿÿ@à¿c­ÿ÷ÿ3Þ~m¬†ÿÏqv!!i˜Ÿ¥Œ·’�˜°÷HÆ6»Ç““–EÚ>¬~1BÎvˆ30�ÌôÇÙÌaõp™l®²âPË€òT#1I@ÝH§£"y<Û¹™?{¨õ’þµ@ÑFÍ&¥Ñá•¯�é›Ž�9¬ÿ}½®of—Ìm§³÷Ìê;JØÖÅ“ÇÌ×Ø`s÷„8aq®má¾µxÝ
+î¬âìÇB�RO®#o“føôÌ^ÆQôÉº%óã¹ mî¯âœ9™Âà �ª“3,âe”Gíyõä	ÖL¤‚È( .áUq¸+g"­9a5¾(MÁa‰wØ²2.EÆi·ä~#—�qA¤ G}÷[ƒèMÿ‹RNûþ�~	yBÀmT×Á*ƒÚEˆ2†1zâC ì5ˆvÃÝŒÖíØ÷S\:Þ“ëÑ-ëÎôJ°‹(Ì<36‹r$M	Â¡3¸ãà>º{ f!LCgèˆ:p
+Ïˆ8ªý6‚2ÒILJuÓ^Z/åú ¸“Rôz—3¶hŒ—å§årS½òŽÞà�¹ZçÙ·ö£7+S#ˆ¥©U¼Ï¶Ãw»üÉav%i®«ç±_ÁHÒ•ã%¾¬!”±�¡KRŽq>Ðn¬ã:g‡ó#f„n&@SÏ®áëŽÉÃ*AsŠžwHý�€•È6³åÞó^½.–­ö“Á�Ö§hSXuºÙ£„@ÏÉ¬F×Ç&¬±€íÒUZ²îé¤/hx7iS0Æv­{ ¢u�±¥ré¦4�Y
+;Ð
+qX\»½Ÿ‡>Š[`2$+h<¢Ù…É‘.@çÈš˜ûîÝkžµ‘ä)êkàÖ@Üqè2„7�þ>X%èÎ(¨…¤‰å«nÖ~�Ûþ'®âòÂCÒ…?†´fÁhd!†«0åqô– lxe„È2GmÚÇ 5 ¤é6ÇyJæÅ\nñ¼‡£èK<¦ôˆëW
+JÚaüG¹Ü¬MA°Ã@.Õz^ô?EHÅW~ÀWéÉnôBòzá}�á»êÅ¿žï|¿`ß.Õd®ÇFË¯oönÔÆ!ÈµÁ�J=*ØÑ(ßNI$h›�Ø÷I=©t5ÌÏLÕ˜sØ¢ÔEAWS=Ru~H�³‹\ñ¸Ö¥\7úùIÌ"CAû%û¶ãá[¶¬Á´±Fü/,…o7†R’s*ã¢8†jÂ¡]el�ÍÙ|¿Ô£RWb5å²EJ"€H]tø‘0?±á}ž±¥åájî—sµQêF$O°hKK¯â|÷Øð/Êb/£ÃL�Õ¼ç‡`ÈªR‡CI–ëòP�¸t�ê ,ö
+¶ è^vþªô
+ÔÔ�{¤nÄjmÅ¾­—^\uo¶ù#Íðý`±Ü–ë*#CFbZt~txð®ºõ$�T¦�¨1€0‡ªVäó¾ØËm”džò»ÄZßFüž—ù�fÓ×ìü¿²”ñS]o…ÑÍ.Ú7¼Zjß¦ó>ô¨‘¦8ÎF†.Õ‘¶[j¾H¶<ýÖ÷ÖY#Í6ð3 T&M¶(�e&ë™ÙÔ(‡Ú‰.LÐg…Ú$&(/™ÛžŠ”™ÁrNWõòcê 6üIòòØ´{æÉ:¹(4a›¬´Í½5\@À(œMäúSÈGOÆ»x4À†!ÔpA…œãx�\ØÇž)\34ñ(x@6UÉy%r’‡É:ynb·Ð¿¡TètÇ<FÀÖÐ—ôÝ-½[åP[S!›2íùr@©Ex‰/rÚué°ÆÃ_²ÙBÅ¾»â|C+°~ÎH”ê@\ûgß¸ß¬—ßT>ëö•‚¦´5>}gyF£¶n	#'"é"i�PP*�3‚øD„"_+"_�Q¨Œb¢øö
+Ÿ;’œò³=r~öÙÜÁñû1<
+B¡ëPØŒ<DÔFÚB¶
+nƒÙP¢²Òì xågFtQá¡:Ž4B–ÀqcðýYÛþU–ŽÉ®{‹e=<Œ_eNŒ¿cµ÷�Æ8•â{•«nß‘ë±LMh]´æg8|VÐVªËR7žŽÅ’UÄñD—‰¸|aƒs,5Ž1Æ§®EÃ1¶¹HÖLg`úEºf¯üùªÙ±h~<MÏ?¢Êˆ;N/NÐ–ûNð­ýåßpr‰œ Hà`Ä%#Œ�¦Z=&�l±Æ8üÈ·ùÀg‚¶3]è¤/(ZÓKm)]3Æýb£~ƒ%~Í‚Ò’1(Žbd3Æ7÷™á¡´r J§€ .˜�ø‡=Šö.¬¶^xÎ{~ÐT    IDATZ²wn¶ÕýÌÜ¾—-ïAç0D¼ˆ¸‰t:‡‘P9ºûÐÙ«„Ú×®bI{ôÛW»Œ,„Û@:ÄÁOî."1lAIh™a°‚Úd†æGš@ØhàJç©0|¡1vš�Glë!¥Æ“ôy­ö»ÂðE^�Zü‰Ñ‘T
+ïWºø_Éõd”�+åúÝKsýäZ­«qv‰Tc„d¹®ãkF«¯8ÞùaÑ¾…ÓåT­·ù�¥Î·-6k±#Ê”=ñÄ0?ËÎÈjª6›UÆ�ò“–Â÷ÒK|ûV›Ÿ,¾»á~³hß–› æÿK¤*¹š~´ÿÊN¾9“"¹MGžk>üS®KGÃ·•Ä¬Ã�Äª&hoqøg.[´hO+R#€éÉ*§cÀÉÐ€å†…øÊnv¦'·hÏ;Œ±ŠÎ\¾¯ì}*Tu �¶?)µŸÊS¹�‰ªkcÕƒ�(ãÿ¼(9|Ï0?Áb‹Ëáõë>Z‡S]SÆïå-¶bÓ˜Ó!%*V“‹ñó[éÅ]Ýè¯ ŽpÚ*:ß+ZÎFjD°ý;ÚŸÓFäzR°ÙXM †Óîdõ¥ÚØÇ‡×Oº·ºÒÍO±Ù±1ÿ“”d”ä>kÅªægfºN�ÿÎ7±þ½í•G~ìcûö·¿½gÏžb±xÙe—}ä#©×ëÿµõÉO~²Ýn?ç9Ï¹ñÆgff~;þ›ú#)òP5Fœ{¤®qºÒËÎµéª4…¡ªæ†4î*{Úyd ·µ¤°ˆ¥Œ„*c´‚X.�4¡6hJ[@Ìë‡4 Ø¤R¤åÇå§ÖÒk9¬ŽÙ»†�ë”¾ª»¤Þ6�LÒ÷«/{dmËÜ·�\7ÄlÏ<f¡‘£ç`<Áb‚…2ÎèãI^#çÍÁ1òüÃæKuòÜUó«¶”É©10Gõ÷ËäÔ� ë9qsP—T"Ób°±<RVP±ž Wà«œ„Ê8.;’¨5�xTÃQº$h3Ó“œ¬–ýÏ.÷?2U}I/üKFz¶õ £M×ý…eƒqz5Ïo'1‚„%áœ’¬ N ° DÀ?:�ArÔõîF|I8¿®—^6”.ël™hø€<ÃG	Eeš»Qš‚Œ`W�õÁ]tŽ@8 Åiô�"êÀ)¢³c¨ãh¿‚<…ÌÀ†=hÏ‡ÌÑé¾nlâ+Ñ –ƒ8$Qt¥]B"©¦£ôEÆX‚öœ[÷µî˜ðo‚„ä„´®®Ä¯4 œ$ãÁ?.…ïIuA�d)ç>um"}¾ò´8µE³P‹ÌH‡ˆÜè–>0Å¶X4[‘é™C–MÊCs¬gv–ÉZ6FŠ ÑÈR4ëdûŠùÕÉâ<‡µrª¯•EF­½6›æÛ«îÍaö,Oü*p¿™¤'òÔ²ÿÎfs¹qbæÎ4D£<
+îÀ."¡r”6Bg°p'A=è„#kBÇpÖ¢ó ŠÛ "Ìþ«+§>¶¼Ó!Êe�º÷ï%ÿŸª£-·ŒÞŠcxzüÒ>ìÂNY‹ûQªCå°}D]4N€‘è³ ƒn£ë¡2ôWÀ-P£°Ú:³\ÙÑn¿¤\úq§ójÏûFžo«�<•%h·¯ü¯Ë|†Ð~–�™ËÍ–Ø�fg°¢ÿ/Y~ê¡öcþSy¢Ô%Bäšú¹JW:ý´ø. ­ð¯¦ëäù©ÝðÏ±caøWãÁ§[Ñ›jî4£××Ü›[ñ+
+âq©«#…¿‰³¤Z#MFP2LÕº\W\~8”›(TÑºOêú ?-7®Ïæ»r†ÂLQíèõ6[ ÐÍìŒiÿó+ñSH‹µ—Óõöî•ì¤†µg%ÛZ‡»r&`í²}{"OYJOmXs]@I«e¸ÏVzrŒ=éeßàµcÖ" ‡îeg�	ÿ³‚ïïÇ¯R¦ì‰‡íH]�ó3s]Ó†÷ÕØ˜ýóa~šËg;ÙiUëÑ¡<Á¢_ìÈÔÌRº}Ô~<Sc¹ñ)t¤F�43Î–ê•�ðú}Ñ›Ü=¹®8|v˜ŸF FƒÌÕ¦0{VÉýúòðT�(]R¦¨MÐË¶S’W�Ÿ³s "ÛÙ†ª˜Ä¯SµÑ;�‡¯«Y�_nÿ]xä[°ë÷ôÿ†“þ@yä·¾õ­W½êU·Þzë§?ýé»ï¾û5¯yÍÓøW¿úÕ|à7ÜpÃý÷ßoŒ¹üòË•R¿ÿMË¡=9ê±V7;‡’x˜Ÿ>PÅ½‰PÆ�ðÙ�þwW³ÓSíŽ‰n�F.%™Q‘ÆfP¦0”�Ùˆ4²¥öd‡õ¯–õÞ=M�¢K
+Y¬“iz�ƒ`Å<äcÍŠ:$ˆèéù®Ùùý’Ô´ÚzˆC%œtû_óÈÐ¬“çÚ¤Q"§„8ØÅc£ä2�”Â%/X0?ä(4Í}äå©YÞD¯#²e›Õ7MÒSX…1>å à“‡”)x‘N¤@ª
+ŸX‚¨�iG&Èª2n_6vE“Ê8Ã|»Ôõv¶½“=ÛåOTüOµ‡ÿ#×å0¾¶ä}Ž³9¥Æ¢äÅ Âáx»ùü Ø`;¨­·àWA(ì
+ èv¼ €P$KPú¿†bñkPC€aðd�ýhîCuä�zåm�|Mn˜Ë®v?  8	áÂ«ÁHTÖ�
+X¤Pf£8Bà�À(¨AÂ†ãÂ²5eP9òƒÞ¤’hwþ‰R
+BQo|¥·ZKÓM2ƒm1Œ_iY¿æl¶VüK×ú¥kß¡u0Sü€`s �ÊmŒ-Vìû¶Zs~€@ü¨EW‹Ô¥€Eã\‘òZº•ikVý”€¸4°–o\Õ�D[©é©/Pl›¥)z…@ÁÇŒ‹1‡TÊt…U$›rD6P¢c52Ðš€d&±:ü@¦§|ñd’Ÿ\tn.ùŸt1øx5ø;Ç¹;—Ûlë!™‚[°D=È*ƒ;áA0
+¢b!š…5
+{Ìƒ¨#ž Ñ@¼ £¡ÔD�…±¦CUÓ:p½–Öè-!	A¬"@@œ
+Tc@(Œ‚QXs*,ñð¹»Ö~¬ˆºˆú0Zß·~Ð¡°}´–ž›g(wD!J¥çºîmcÓOi…4�1�ë��$N.³ÄNÏù�kS¶Å¥Y~êÆú…6,‘ë-6Wþ¦Õý·vï3ßÓO®	Ó�Ùæc½è-„$‹á;Çü/är]ÉúE”�_±ïè¥/ôù!W<:Yy…ÒÕTžâÙwÖï¦$ŠäI6;ì‹ÇÀP‡ÍX¹³Y3Ò–`+.GœŸ/GÒŒÞj±•^~R/?É^G`ŠÖ¯Óu#ÖñXMù,Êõuq¤'×Z$³Ù€HÎ¢}ñàˆ÷‹6c5ê±•?nÀ	ŒÏš©Ü¼­ôqAW{ù”ÃŸ
+Ä�qÿ‹KÑŸôâ?l1VÓ�äò¹Á»ãüÌHÎ4ü�uåxÝÚ•¨õ”ä¹µlíêæ§Z´Su¿jó}¡ÜèÒÌaûÇï³È 7NUì-‰ÃŸ/ðEÎ¹bÇYµ¿Îu­“o(¹_vùìˆÿÏûºŸÒ:åÆNôÀß¨LY›BÕÿD_9uç{av�éÊéT�r¢	‹Þ¿�•ÞœÈ­‚äEçû8½ÿÇ|äŽ;®¿þú/¼ðê«¯þèG?zç�wÆqàÓŸþô[Þò–k¯½vûöí_þò—wíÚuÏ=÷üü7­XMiÀaóK9�åúL|�óq›¶(Ì¸hä†¥øå_è¨X #ö#¢ÃaQðÌ°2ÔQ™Öm×¸6PE²¾€ME2½¢•&<¬¿�'ÜF!FW™Ø!¥cæÛ}½œ Y 'œ€wqRX6·O‘WuñÄ1ý³*9Ë �Ìœ4ƒ"ÙT'†8œ˜y‡Œ�¦¹ÛÃ”Mê6¥°úØ•›Pb0É6UÈÉ3ôZ)®˜ŸÂF8%¬i	¨“šÐ£Õ¡ébÖ—†­·àáÒØ¢+SÞ-[ÝŽÇ+ãØìH�/–­_:L^–éÑÿ_s5Ãù¡Lž,øþbð‰Ú‚ÂbcìgÜ€4¡*ƒðÀD]$0NõO^„ŠàÍ@öÁ|˜å³Am´ïF² æÁ)£4­ @é±ðh|6!Ñrû«sG>ÓžEóš‡°¼FAçÈ†(¬EÒEoƒ%0íCˆVP^�<FÔ…’¨­�_}¦<ÄóçUŽ©ÉwQ‚ÖÊÝÎK‡½%×ÆÉ¥ z½Fé¥åÂ?ÄñË–{7&Ù³�±ñµqv±àOä•ÂÿŒóÓ-v¤Ÿ¼t�Ÿé°Ã­äª0»¸ê|G7ÓUBLÝÚÃHšj_Õ`5œ$.a`Gó•¶>¸¬V33Ô %|^íM°2A_’šî•ßmÍÑ€ŒwÌÎ–y m-3 BG‹¤@v(?R¤DC�ðÈ€ô³s¥.(‹Hò³µ©S�jÝrÿs”Âón«Ž„·¿‚BvIù*…¨B êì†ÝÀêÏÁkˆç`2ˆT‚h?æ~	aCðÝ±+1Y‰Ï¯;²pÇÂ±·vÚÏ6QÃ´a¸– ‚ÞÒ.ì
+úó¨žˆò(V�‚ y;@< ¡HV¬æ–5ë@â
+…{´B8Üè@)|ÿAÏÛí·´Ç—¸Î-YŠaôZÇ¾Wª×›‹’+;°:|¿Rk*åÏ†ÉÕ£ã_)|Ðâ‡ñkr5åÙ·ÇÙ³8]‰ä¶†ÿ	‡-Î÷	IÊÖý®u��æÛÎ�;ˆ‡
+ö�V¢74ûŸÓ—¤j:“ÛÂäƒüt�ïV¦Ppnä'Úl¹��‘ªé²û•‰òkÇíÇ[éÙ‚öûÙve¬‚x$”8É2c×¬=6ÑŒ¤±<¡ÆEë.‹vrm—­G])òã5çgËé)ƒìB^à‹©ÜfäFŸ7@Åùv_Ö=6ìÈÑzá}ƒô²‰òMy7/E¯ÏÔH’ŸÂHêŠÇ»é%;.Mà±¶ËŸðÅ¾ArU‰·*î8Ðqÿ_vÀcK}¹¦—¼|�^ÊHð£R�uã·hˆ²xBšbÅ½i%ÛhÑ•ÎàVJïêDo›®_0åûhïÆX®W¦V`=eÊ±KÇå³E~ŒÓ¦ÅæÂôÒQë°cýÊáû)‰·V/¯»ßšòojfÛZƒ·ÍÔ¸Ç‡é~×œòßÓþp}äÿueYV(ÇIÓtçÎ�Ï}îsŸÆ'''·lÙòÐCý&ü·Ò|]‡s]¨Gˆd$ËŒã³V¦k_ZÎG‘”è\—êkÃsc‰Ïmçµ:×ÝÃ.MR3˜cX•vGñ*�ÊM(ˆ74óerB�Mo ¯ëë¥%õ ŒÑç(ä61b1¸Cs BN¯âtf¯@ÙB5Ä\‘œ$1èú½sæ¦Íä¯sôÛæ¾Gª®ƒqê’ú¹æ1óçÙÜÕƒ¦yÐ&^n†+æÎ
+9/3@lºëØE”˜-¨(ÐJª¹4ö˜ó@®‹‘‘_(Øwô³óëþ~¾u¼ð÷a~zÙþ¡6¾Ò5J;ç?þç‹Þg]¿W.ü­ëÜáº‹Yˆ4�p rä<_Ã€
+¤CT×Ã©€¹p'à6 Cèþ	�=«wDƒ]àŠ§b8@¥È (æÊÖ/B“ülÃùl¯{F§ÿ�4‚WÆâ.tç@ú‡!<0�`ÜAy
+½%ô�"K�§°\¨G÷_‘'ˆ‡€AžA8
+…4Æ~$Õ!v’ZŒ±	2×=¦/­úŸÊåænòšTmòí¯†ïí%¯Æ¯sÅãq¾�Ó~Q<(èRÃýÚJòü(?/ÓE*HöDÌ]J4MS†äFylÙ§ªJ'gÄzj“¢Etl–mR‰Í|ƒŽ¼ø»‡œZþŠï†.ñäYãôy.&VÄ§€Ï¤G]emÓ€™²–“ëJÃû¢Ô…jáœ.Ûü±$}ŽçýÄóžôÅq|&cÈS�#‹À$]ØLcx<€‘(lƒŠ@8ú‚Ú À@(º{°æ
+?8:Ì·QB#51á~/ÌOÊäÖnøÎnÿoŽ¾zþÀv& ‚|'@Ò·!Sæay�!„‡â,^QÑ°aW¥1,2…p@ðŒ|«ïÌŽ�~ïä±‰³lŠ4?o¾­×�ï}Íh��Ä”‚Š²‹<ëž,?½ß•-ÑÜæ;•)ûömqúüa~.%QÑ¾;Ê.røî\npÄFÇ{_l¶`ß“äg¾?pné%¯˜,¼ß�R2ˆÕD;¾¦½9O*S $•jMÕþI(§}¶¢t±¿F©ºÅæÆÝ[måÆ+ðÃüôHù¹Ï:©óXËaG	´ ƒ#áë)‰‹âH¢f,v¤`ý²•¼`Òù9A*¿›O.¥g/%Ï±i/7eFÂAö‚ºµ;R›È¥Þ¿:|Oœ>ßµ~9ê~Óás�ì›.ÒçQ’&r�E»>*×œ´¨ �ÙÞ§]Ð�¯¦´_v¾?êüŒ’XêRWÖ;ù†cÉ³—“s-º«é@<2H^6f?)uÑ³6·²Ëá»	I,6;æ¦dý|)|‡E;Æ8«éY JÐÅ¢}£íL­¨/;ÔýW©‰o‡°ù®…ðµ3Á—)í§jM_N÷ät3=ÿ'ùÞGƒ}èC×]w!¤Ýn+¥�Æí6�•••ß„ÿ–cWóÊj¾.R£EÖ‹U#Ó^EìíË‘¾*Út! ZÐ¾Ç›Ò/²®óØjCt=ª3cI¶•MÁ(ØŠšèå¡n˜f%’+EZêá¬þÆŸH›W�/êŸ4ÍC=s°JÎŠÌR‚Å1úÜ–¹ß!e—Lpã³æsÔ%S©O’«Ë8½gvXC®%—�’ç¥X´I…#ÈMØ [¶‘ÖÈÖÐ,o`/tˆe‘Â¹bŒœ°|hZ>©º4O5r£J|Þ§9êÎO{ùieë¡QÑíç3Ç‡ï>åg|n5zkÅù.!Ùhù��óƒ¢÷m
+œ§´—§(Wü"˜@<@©Ë‡À+ Ð ÷µ`ù°JÈú`.¬*x:‡·ƒ'à®ƒ7�þcX¾ñ HW±r7¸£´ÕIpë.‹âDî/íe—¬ÿ:I/ö�›Ý íã6Ü–B¦H{ ÁÊAcàøH ŒÃhD=H5C9Ã ¾ã!�á�¹�%�jý|ûgŽ}w§}®ãÜU-]ßï¿<p¾“æ§	~ ì~eíèyÃäåïÓõàï]Jåæ\×;¶˜\&øABTIÈÍêiÉ·]m˜MÁ`ºº[b²/'<ÖÌ!SÍ‡æXßnª®G&”*ä´uèW�ÅmöŸW{+zo•Mi)Gß'–2ñÓÊDeæ5D§­„3`.?Vs¾—ÉÍeû.×}d˜]L -±Óô/™^{½mï¼2ü:´„åAeàì2êÛ�`WÅpTˆð².Œ„‘6!à>ü	töC¦°<Œxÿ¾Æ>¢ß3|ñªÏäV£L¹\ù`fg¿÷±|É¶�a„!¡%Z»áÖ÷À,ä)´ÂèÚ¦_°\ÈZáéŽ (œL#¤)¸ ¡XY|)o.]N´‚kÿÌsnŸ˜þJgðÃø5€^ißÀØRµðmÊ®ócAÉêòÒÛ‹åÇlû¾©Ñ+¤Z£�³®qJÑû‚Åöûö­ÚxÚT]û§‘<¹ ~�Ê“3¹É;(m/þž@5Ã¿"$4°|~p¦z)CÖJŸ3ÌOÌrøvFÛu÷æ‰�„è•Áÿ#±Üæð=3¥w*Hãl(þCÑ¾ß¦+;¤ŒX÷P&ªVæ‹‰šˆÕ¸ÇŸ¤´¿_ÅˆìfgS’ùjÀz›Š´hÖÌ«YÑÆme§ ¬f=‡ïg¤?L/÷½¯I=ÊHomé/8íº8YzsÃ»ÉfG´q¥®[ü0@B¹¦n?Ë�Úˆ‚u£­ÕøšTÍ02°ØR•/¬µÞÿz‘/­æ[s]ˆå	«ÙißMˆ$�EçG÷ë�þåâûÃì9±<qméÍ?àˆG§‚OP¤®xPêz”ŸÍi[ëB/»pÄ¹g(7´è|w%|·Ï—ãütF¾x¸Àªâ©	ï;¿{õäïmØ>2MÓ«®ºjÍš5üàÿŸ=¹.–Q>;ÞS¥¡MºùŸr£�'g5ÍuÐ•Ó#|ÐUec0��X•‹â°2”�5õ¡€–<2ºVTËt|­UÐÐ“ô¼ÌôJ?—×*dUrö¬üõ‚Úí“‰5ô
+µÙÐ6­š_Ø°¨ïòÈÌn}CŠö Oeè.›;×’7®˜;3¯¤JÎ'—w±ƒŸ‚1ëb��BÓÜ#¯ê#6%¬@&º§aræèŽ[Ñª4:*MÞWtÔžõ)"5â³ù²8šªõ[ð¬ûv´nÿRÐt�\U´o©x_œ,_#õh˜=ûøêm‚ÌåFß¾Õv§/TiBA)œ y-‘!3”7#n#‡J1<w âyˆ2ì¢`¨Á��Š g2Dí,d]ôç±ø(ŒF–"p¿]ðn"Äh£ÚùÄªï%×ô£?éwNèöÞ‡hE·{më†«ˆ»ðŠXÜƒÎQh�p ™Ã-AIh…Bði0�Rõ�$†WB·‰aôF™Ãµo+:ß'$‘r}’\<þ!ýLž"õD.7èáðÊXn¦W¶‡ï^¾_�ÓN*7�Ú÷Î¯ï$Wfº)�’<à{5è(ÝžÊInÓt‚[‰¶ËüpWŽ·ôSœ˜:ÝÆàäf(M,‘VéZ�L#ûÎÕ®�*À–ÔîªXXËÎÉŒžäk1L¢Ÿ¶ù¼ÏwJ]dq6OÉPJ¯äü‡cßcL�ÄÏìÀ K	`¹P9úK „�Y¶l€ÑP	Âc°«P	¼­à>‚ì�(BE�=¤«H;pÊ.Œ§KÆ°?Î‰ˆtÔÉž½¿L› Ý~»Të´.	\ ßý6âä9Fƒä	@°ÿ¾Y‚¤á ÀñCÏÊbä` ,d)’!¢Ð-Wç)ƒã¢³zi•2Ö"$²¬G�†Ö�R£®û`·éãZâ‰j}—kýb¾¡½=ÎÏ´ÄAÁxÎmæNÒ‹V;ïôœ[;v¤ùˆ”›”©0Ú±ØÁ\M$é%ÿŸ
+ÎwéúÖ]íèÍƒøuœô):ì¨6�1–6ngø>— ˆÃ–¥?õù�avQ7}~¤ª;$è’o=´»õËLÕ•®·Ãwxâ	›¶õßÃ˜Í|o"OIÔTÍ¹½dÿœÓ°bÝ»š^ÔK_ôt×‡E„H©Ý‚x¬“¼ÚeMã³áXñ]¶©5«ùÖÄ0J"JºžuïÞ¥c™žä´5L^æ[wq¶²§}»Ô�D­g´OH¢t5Sãþçm¾Ÿ Uç‡Íäƒô2N» •ºñ´"|ÍýFª6	Ú èp¢ôÆ²ØÇi“‘A*Oa¤cŒëˆw-ÄÊ·Êä‰E÷kRM*SÉuÍ€SÄÊ¿ÖÆ¯¹ÿáð�%ñXÍýÎÊð¯\¾Ïa‡9m
+vL›À¦óeï&ñ;³Èü÷´?h™¦é•W^™$É-·ÜbY€Z­Æk6›ÿõL³ÙùMøo9ÜÀJKu#`QÃZì© $fÛÒËMæP“™´díÈÑà‘QëÇš®f£JFÙÆ‹,âj°#úÎŽôá±db”ž´Ž¼­eN°�™ó™é+ä‰YŒM»JÎœ¤—·Ì¯êäÜ¡9`“�ª�3GÈiÚl„¼ G—€úXÛ7O3_Ÿ&¯?¦ÿ32sô‚)zåªÙ³†\#PðÉ¨B6ÐK5."³ì=Êf&éÙÚð
+guû‰sh3ÛÀˆ*‰§,v,×%—?áòÝûï£$‹ÕÆqÿã6ßÓK¯ìP{ð�ó�Ñâ;ÊÎwr¹¹VÿQ¥òýNç%åÂÇ9¥ÈŠÂ(’§CjcêÐ¼øk`ÁlèÙ*ì0YÎZ0K? ’ã(Ÿ‰è( Ì ó¸‡ÆÉ.dŠ‘iKww†ï+‹'<šyâ×‹á[ýÂÞ(»„1äù¸ï~+MÏ#YŒxˆ<kpñ œƒ´Ž	ÊàPrM–
+û“”¢³ ã“Ÿkw>Æy3“[òüdJW	‰\ç6×¹“³C®x \øû$?Ý÷¿oÑùzéO-v �õFÂHÎôóÓS-I2]DIã¬fÛÂÁ8ÌP‰ÌØ]e3bÚùúÜ˜¬�‡äÃ±,KD)Ú22ƒYOaid>åp+tÓ¾DIc4ŒCû.èMÅ¿-Z;´±\6ëÛwÙl!°îsÄCœ-†Ñk<÷æ ¸·RýžíÜÃù!ÆtiQ½0ÆŒCepKXºá"˜ƒ<DÒ‚Š±ð-¤-¤MpDÀªCe¹Ü…Êay°}ØÖ[‰Õh�Â&NSòÔðfüGÍð]Qz©kýüøÜŸY?çÅâ½K‡Oà´†’(¹‡å#Kàº÷§1lFƒ2%á¸q–BJ0ßÿ	!ºTþUcrcÆ¸–Ø™çõ$¹,pÿ#—[çæ>S,Þ.Än×º£^øŸÍÎ�®÷ ¥-©Öì[›MåI¶õ`"OñÄ®8?Ï¿ÒÆãì(Àµ	rµn˜^i ?X´î!H«ÞçÇÊ¯1€`‡Œq,6Ÿ¨Í JbO¦ë›�”½/Yl® ¯Û.Goì[¥/ñ£�x’Ó…L7þXª%¾Ê“=¾SêgMm\Ÿï—z|˜�C9])Š§(’²õàXðA‘©§qªfRU‡¡5†*Ø¿ú­²}»C›À# /    IDATe>Wbý¢w#cK )[»üI×º›�˜³¹Dn-ñãR�”ísÚ4Æ”Åyêj|%§}ÁæËÖýÒ¢ËŒôm¾?Q3©®Gù¹™g´°öPÕç{_©²ø^›Lò3JÅ”Wzd*øx*·”ƒ´©pv4Q'ÀðÑàÃqv@ŠÎw	Iµ)hãß«õŽx°áZéâHñÏm¾'ÉOÔÆå–\nLÕÚÿ®Ùùÿ"yÕUW­®®Þzë­žç=Ú¶}Úi§ýW1Îüüü¾}ûÎ9çœß„ÿ–ó±Àªô	�a6Ñ�|Ãg·KA²q‘ó“â¸�´Ò–Ärn,çD2P‹F=Ý]ÎPF¡¤øÔbriaVýØÇº)zqƒœU&#lÒ�.)I„Kæ6OšÈ!#-óÀ}©Eêlv0¾jL�+sô4²mÕ¶¹ß&#ÓäuMsw�œ4E¯Ø£>74ÇfØvŸ4Í�ëÜ^Ç7�²éU©dŠÙÑ«…4Ž6Dê’4„âÓT¶�žÖÏÏ¨9ßó3¥®l`+Z÷hSJåæª÷¹öð}µâ{”ëE×yÎÍÅÂ�ËË™¥ŸúqPÆ`peyA„ l"¨€PD«°d=@CÅÈ *aè>�Þ.xë0|
+*†(!ë@T�5Á}¬î (¼)¤´Ÿ‚åÃò1ð4%1^¿r¢zÅ–àŽªXÐ†>5x�ÞwtŸ‹ã�­Þç³|;ˆn·ÞÐé¼:nu¼æ Ja»Èbø…<ØËGO/7æ
+•<‰`YóZCÊz–nàØ÷ÇúU¡p»R½èíQrùjï£RM|h®ù¤Òõ…æí‚‰âWFò�ïê$WòSb]4 e±`sÙJY4 _�†ÕÅ’©‰V¦�›¡6¬@ÖgF°‘ÂòÉ/7Q†Ð'ãf<âMò‰€Xµ)R¯Êb_¤qÂü9a~r`=´˜<§½� ×Æ$¯4 €È²³z½kÒŽ£s¹Õv€[(TÁº‹ˆ[ðÇQÙÁDÌ‚?�ÂfX%PÌA´ˆþ^4DÒÂ`’œ
+–!îÐÆÐÌX¡¦ ÉMâÓ¸'}e<Çº·¿ G�~¢Ý|ãÂÒ¿†Ã­–½wÐ„Ê¡rä)Òa76¦1¼>
+Oj-Ÿ™§P„@Iƒ8å�æ³ddÙIZ!Â/ÌEÃ`½Ñqç¢øJÛºßhÏ»Îí­ö{ÓìÜÕáß$Ù³Þ—òlÜ;)é0v<ÍÏNå–•ÎW'ë/dç¤rkkø7™<Q›
+§ËJW£ì|ß¾•Ñ•Vø^i™š6°’ôye÷¦(}á ?Ã÷9loÁù —Íú|søÞDnj&ÆrCÅþE&O¤d h‡�Lê1i¼•èº5Å¿èËF®‹ÍäòLMkí+S DÆr½/vØl¾™\•ëz¦«Y*O¯:?ˆTÝçO%ºa³fÁ¾@�w:lÆWGjl%[;TÅ4{–R“JW)	•®’k:é%‹ƒ×¼O¥ºš©©¥èu”•	¢ümìT®>îŠ�«ñ«�qS5æˆÇ}ë^©GRU«Úw'rš’Ìå�i#|¶Zsÿ­¿6L/Mä6Ïº·7¸žÑ×¹]é†Í÷u‡ïî§/8ØþÉxåêXž¶ý‰`‡-¾'“[{ñ)SfÏÝPyUÕýújôŽ8»ÀåOfòd ÒÔRµ®êü¨Ÿ>?Óc¿3�Ì~Oûí�|ºyã‘GùÆ7¾Q.—Ÿ·mÛfYÖW¿úÕ·¾õ­_úÒ—¶mÛöž÷¼gqqqçÎ�Œ±ß„ÿ¦¾œO»Gb5f@üP(×züX®+œ„”$¹®ôä¨4¦Ä-éÕxjmI*ˆeÂ‰.ŠÃÇÓéÄæP@ÖÚ(ØÄv©$é+wÔ:¼”ÍÑw¬§/lêC6©x¤œ˜phŽ§hÖÈi«æ‰
+9%6+©e¦áxhŽ±w”\›
+›¿JN[Òw2‰CÆ3Óš¢—>“ 5Ç5´€G‰(’‘9}ç	üy«*r‰çQHCS£¡UÞ¤$ëå“%1Ÿé2`"x›@icÛ¬åò')2Ú±ønÇºo½™³¹LnõìŸRÚ+ïÖŒ!M €s0™£<
+B‘…àì Æ<Ã¼q†¤	»
+»Š¤‰¤§
+*ž\e7 BÁKˆƒ0$-ÈÆ@¥`ƒD}WårÃ¡þÒ�PÇ
+y…,’W­
+ÎÍ”DÝøÍ‚ÍyÖ/FF?Ÿ§è÷¯pÝQªŠµg
+&eÊ�gZ#I6Àð,ß^.3Ëh’<7J_çÛûv×¾c©÷Å±Ò[�ñŒaaòŠTnñÖ6¯ÞÀ†sWûwçUg¡Ÿˆä©î×ÚQ~îbr^‰·]jØw’ö³ó2]ŒµÝ×ƒ:ó2Ã"�*ÈØt¦øX¤ÙÀtºf·�µ6)ç&Š0o£ê�Zlš )Ñ)‡XëÀád¢Îmm¨C¹q#my4ç$®»ß¤WÜoµã?–:XSº.ÉÏ/²Ýf8<Ëqf~	iŒAoS¹vÀràV™"À«Ã.B-�Ûàì:Òˆâ3‹{H;�1�ÊÀ=t�‚[8vøO[áŸ{|W+y1#	�éª
+€€Femò¿GHîˆ‡ÛÑukjãj]flÁq£èÔ x\©g~Œ<_kÙsJ�1xE»ðÈNÐ& ´/åÚæà#3cÛ�A]fŒ&W4*oPjÌ€p¶F× ŒÒöBïÆ5Õ—(5�æ§ÚâOEé}ç™<Y°Ù8»Pª1Î–´	Ïþé ¾6p¾Ÿ«uÃôERW‰I•./fÛ6þY/Ìžm@‡rý˜w“ÒÕvúâQïËaölÀ0Ò?–<g½ÿÍ\M$j†iŒí‹R×(Iéþoö¾3ZÓ²<÷zÚ[¿þ}ûÛuöÌžB™adè]%Š*ö€�cÍÁn¬9š�!1šØ‰„Ø‰ ¢X@AéHÊ00}fÏîåëo}ÚùççYËµ\Yg�Ä{Ý¿ÞïŸûZ÷s_%VÛŒu8í*Sá¤8õ²{l¿Èã,%Š@I.H}”ÿŒ±Á@M%&hº�Zë d)ßÒtžŠõ$�´8«o
+žÌô¸Ïö2Ú—¦ŠíÆz”ö”ÏÔ1ÒÔBñHªŽœ[ékFð\méd/ÓÖå$6ÖÐUÃ#Þö�<–ëê�{?#}e+Kéé!ëP¢F
+GˆÚÓ¹b}ñóQþÂÐ¹Cê‰\o,y×I=ÅH—ÒÕLË“)²Zøee&æû=U?ßZ?N/XŠÿ¢âÞÉm]èÉ­%ñ”!Ð~¤¦Êâ!FûÛû–öGÿ}ä[pû	WãEÿõ‘Y–ÝtÓMóóóçž{î	ÿ§¦§§\zé¥ŸûÜç>þñ�ŸqÆ n¼ñÆg�ðÿöýÿV«rm�èjz8[?«’Ùl#é3)ï©�™)»4Ø¾ ƒØv#FÆopC€ž‰/çX•V'ØÉ
+uN3›µuZ{B¦K»ŒÐõì|	í‘F…Öa]»¯DÖöíÓÏ˜9b¯Ùo®(¬ÚG84ÉÎñÈp�œSÀ`kä¤U{Ï‚¹]#£DÈQ
+}ÛU9°‹	–8üoÛÇ»fa3ÿ³ž–.ñ{v…5¯„ÔR` Ê5j,¯8ÛCÖò¿G‰l†ÿVpîŽä	Æ†ÿênò–(}�±žïþ¶RüœµžÖM)ŸHk)£ðBDý©ÚòiT �AºsT†t&C>@²„dNÜGa¨ƒâQp*Hf‘· jˆ m!^ ÷á”`ÒâösòcR¯Ó–hkËÌóH(ˆ’VDê¸åè£QþÒ@ÜŸÊ­‚?Ýï¦ñ¥ú{Öû¿]¯cÿüog¯ú9ëYºnuõƒqüê,§îâ|¿çï|7Èó;ñ‡(é�TÞäŠ‡»Ñû
+Î�„²üT©¶RÚñ�íÁ1½ÎÕ+G¾6E§¦È±Û|k}ïª'øÔxK¿Iš¡qÿV�&°ÓÉKc¹•’<2nb¥GBeÙnu##¼Î\�”XjÓeû€�ª³Éž=˜£S$S‚ž�‚(Xb²™ljLäÒpNdÈ÷&Æ	h.H�ùøRBòTn«¸7ü »Ö®}?ãËItl–Ÿ–¦'9V6p�by¯La-V!�á„jðkÈÐ	ž%Â‚dÁ$@�.ƒrðù ÖÀ(h…Ö0�A¹ÚX6½¾ö:1#EÏtbÛÚ­05—¼n�Ÿ%õº@<Þ|8J.™í\'ÄüìÒuÆÎþNIQ¬!N.¨ÔgÙ×Å³KBž31ïõNâ©Ž‚=åÊ­kgP
+™ORÚ®Ö~1>ú¶(ùsk=£G{ƒôÓ7DÙK8;Xó¯éEï�³·âwÃ«–GHv¨ýãjéŸéëRy|½üQk]ß¹‹ë:¿gt%•§¾Ïå»-ij%ïÇµðëÃRÚÖ¶ÎéÊPñ³S•wDòL¿Àw÷³s{ò˜H­çlaHLw²ór3ÑQ“uÿ[€9]DIR	¾1�§¥ºÙþÕZŠÇQœÎ9lŽÓÕHmöØ¼²NnÂ’soÓûñ&?§+ FÐhªpEª×:ì°¶A‰µS32ÐÅÈ”)IÇ„le'e¦V¾ÛÊþ–ïéˆÀ”Ã/K½67Í‘ÒÇ´­âá\m*ˆÇ­Ìè ?;à»8‰�ïÆºÿƒ5áu�s7@FŸ]W¼<7#œÍ*S¯;OüÀpøÅ…Á§¥šZ_¼\™‘T¯¼_v²óî-»_b´=2ò™L��©£‡KôÅ£½äÍ ÊÎ½{Wî !²æýÚØ'½JpÕ¦¡Ó+Áw8]U¶Võÿm$ø&£ýzécËÉÛþÐuú�ìÿ¾>;ÿ¹EÈ§˜)P�Z^åó==â‘¤oA¬Kòß?PrëØž–!u6HMXæ3û³ ÁjÊ’ýú·rª�è/$Ærö-d$Ô¬¹“ÂU¶W&Ç•èx×LûdhÉÞWÂ±1f«dË‚ù]@Ö);Ý ggh¥vÎ#£|ÅÞY$Ç›»¤	 IOX2;êdkl—2D	×VM›6°KR;(�òœy´N¶T˜pitX&ÒPVV™ù¢2¡´þ@‹Éàk…2e*¤æ_o¬ïòÇ(‰zéçJÚœÍtã¿¨þÞõî'€±(€~ïô¡±¬¡Èb”š°^­ƒpÐ9
+MˆŒ„J¡T�/ [‚5 nÔ/@'ˆ� .zûP9æ¹`Þ¼ƒ¼™bÐ‚ÑètÞî{¿^í}ùéÁk´•ŠAXØ*óÚíèê�8ÄHT¿á½ð»oGY~_½ënö-/Àü®¡/œ}øCE‡>ø7”+OtÚ§Jˆ]YvN?ys¥ðkJiþ|Ï½³Px`iåòXžîóGzÙËŠîmÚ4]¾c5¾LQõå)±ê±žÚ,µÇ^¹—Údßµgù�zøÕéî¿TÝûÅ/²@�š}ê±5ìdeí�Xž—UÎ	˜hÅ>^#[(„FÎàôít“�Û¼ÄÄŠîuì3ò<N
+
+XÚ«]·@‘­+†Ã+æ6`Mï¹^Wô~^
+¿^ª÷[KÇ ¤“ÉSË¥ëµ‚„€_€Ê:´€9 @eŒDa
+­Ç %ÂÑçÄþF�r0ñ<Œ„S†ŠŽcé1á#íƒq¬.ncln¦u[OÝÕ,²-»Þ!œôsSsÙ2@j2d³�Ø99zQ§ójÎ&Ùyåâ¥ÚÔêÿýHíbc‰öÙˆ(:[ð}Ú)µ©R¹aeõƒ‚ï”ê8×y ¿³è_](Ü-s$çY6AHR(­®.¿\›	ÎÆÙ™:F™!‡š{m»ýZ›Éã]ñðBïk.?Pñ¿-õ:ÁSÚÊåqQ~>#mCiÆ”©âq¥›¹ñù¾N~ZY<Rò¯MóÓ]¥t5W[KÁ™<­Ÿ¾J›ª`ó¹MY_×¡ñúúy�èÃ©ÚŠí‘<}5ßÐ^Íûu®×
+:OI?Ó"yœ ÝÔy×/$oti×‚&ºRâÓ-9Uáóe÷7‘<Ýa‡s=I`JÞÏ3õ¼A~²²� �¾šHUÐáë‚Ÿ¢”©zü	eFgâ7Uø¡ŠwCªŽwØ^N—ZÉÿ §]kEÉûy+yKÀŸ‘¦™éQŸZÊN«‰§�õ
+Îvm 2Së+þäj+£ ,%Q?»��¬QøL/~§+ž”1uG<¶§ýýšØ:÷HÏ¹¾÷O®K\v�’”Ñ%m†BïWJO¬Æï,9w¤jKàü�J�;|o¦¶fjª~õ’åoý!{äñ«?r˜_ƒ—ýÉ¯õ?¥J,÷XÇ%*ÒÃ5±QY
+¢8I–óÍÊòžÎº:©Ë‰^VŽKÒ¾¯ÒzlŒ6°—Ti¥e¯Òº´N™·¥ã”�Ž98F_0LN-’£«tMf£2�\µ;jä„"õ0Û¥Iú²-Ceò¼{s†E“Ø#í*9uˆœÞ §gvYa�ÙÈBõíAŠËöŸ8«ö±:9ã€¾¡J+=»r¬sL‘zœÈ¾.mög¼ï§$ö'º±¢
+[¬ð�65e›ÕÖóØŒ±~+}u*OËÔ¶‚{S¥ø9Ï½c�^\ô¯5¶`-”n0†8Ú,Dƒõ¾ÿÀÂ‘×
+i„ Œ¤Ê�¬bxÂs ûèÏApË�=À‚ºÈÚÐÔ ­Ç1Ø‹è œ2Âõèî†[…Š�w/@FPÒ>ŠuDƒ3…xüðÊ}ýüÌ£Ã_×˜W¤eJ8�:ººÆ¿ÝãûR3çç¶~3ÑŸ?­ú÷z�6¿;\½p±òŽ1Í×ú…\ç¡ |beù�ÆT=ï‘~ôÆfùÙivž6Ízíóó�ïMÏÿÊZ·ì?’ÏwØ,£¤µ¿¯8yxì�súá�­pÜ1W�½}©}ß°úõõ:3Í#½/ö´?“œ7æî©òdFÍÕÉq%Ö¶0sy™ƒ˜Z5œ8¹]‰í¢K¼+[è	vŒ‚îÚé¶NR(
+â(%€K#dQ–‘g'�n«r/}eAìÙlµøÙJpÕJüÞ4{awµ.Õ&k9@kÕëóÜàùp<X‹¤�•=(4‘Ç>*F¼ˆö“pÊPt
+B!0*Ag¸¿	“c°ˆÎÆ ‚ OËò³]¬8�ZØq^,’Æá\$ztÞ�Ôd=ø*'ˆñÄƒ¿? ÃðgJO)½¶7ø ¬¨†ÿ$å¤ÖI²©ß;^)¥{þ‚à{,˜pÁÙá4A*O"�‚Êå¶^ïÕƒøÒ^ÿ¯„ƒ,?-Wgg¿4H_Ïè\7¾¬^þ#Ý¢{S9øÎÞ#�Õª?5¶˜©mRÛ¿ÊI[éI€%ùóûÉ´mäÖ‚­ÇŸ H:ïò§2½&75‚Ì¥-i†»É¥±ÚÖÉ^é9÷äzÍtû§¾{[ª×»üÀ@>o´ø×œ$UggÃûÙž•{jÅ¿–¦–éMÛ=âÝ&hOšacƒXmíËs¬õbS){7XW<ÊIðÝ±®PîP¥­×É^š™¡À¹_Û°äýò`ÿ“¾¸·§G8‰=2êßàP4x<$UÞáð]™žÒ¶æ‰GÖ¾ÂiW™mÊ™:¶—½¼àl¯Wúü	N[¾û;iJl9ß–™*`ÚÍMSÐÕTm	Ý[¬á?/>á‰ºé«3uŒ6ÍÐûièÜíóGg:ßz½+ê§¯bt™ÑÕ£*ïätÙwî±ÖëÄ—�?%H·~…Ñ¶¶…zùƒÝü…I~ÎüàãÊ”–f(ÊÏ4¦JH*Ø¾À¹}¢ñü^réÎÎÙüÈøGISå$6î²ôêÌS tVõ=�Äf4±i�gÞªV,²ý:ç¶kR4é¦½£DFU.ˆÛ63Ãlƒ†©rYM zö`dTŸoÂ	ˆB€Á‘èVÉ‰!™$!™”è§v.Á¢F’µUr´�Ê°Ò [âÈÄÀ¶+t=@Ö°SR«†¸—o`ÒÓœF´ÇX?Õc™õ7¾ÕÉÏ	¿ã°‡ÍezSÅû¥Ã¶Ó×4ü«=ç~c™>ÎèQck®ó`üDëQÇ™vÜ˜1¸ÞržÁqÛ” ÒxZe(Ô·À+=çØ)
+>tŽ<Bc+¢T6�yP	dÞ˜@4‹Âˆ• ž‡I@x€dFA *e´!œ#VÛ‚{» m©×&zClL�cÝÔ&™M#u´Ôë±+Ù	Å5¨_b;·VÒ‡[l¼ÙyèXõà#Á‹ÖÎßpE®eèº<I_H‘k=xÅàê\žÀù]pØ¾~ö
+F …ÊŽH3)èrùMeÚØÆÑàtGljðºuŽ2þ©ëz×»’™š…0@OÕb=R�m¤lIYUa\t´fpvžg”—Ú”‘Úd`{»ÛB7Ø$|Òˆm§Â˜Kµ ’B 8Ñ›7Œ-º¬§mÑçû�Ëõ±E÷·�äB7
+ÁÕaá�ëu:í—fù¹åêÃ2C¡£÷!tÃ/@­ @8«Á]$«ð*`LèVCøHV‘' : «1haqéïa¢ÅÞ×BçþÐ½ÝGm:V�!)Îé9A¥€új«Ïæ–’×y¬òÉÅ‘:�Mi?—'eò4JR)·Tª·Ì-ýØwïÊ³�Á_SK“áAúZÀÖ+ˆ±%€–
+?ÌåV©�2*sÅC2	,�&DY†Á-ƒøÎæ»É[‰=ñ£(¹Xš5Œô¤™Ò¶¤ÍÀ´­ÔKŸé~»(Ëåqíì"‘èI‡2=1~‹’-HÅ¿:×Ç*S‡©¹â)A¢…Ág¾—’ÈÚBÁûU?{§Ýn~%*à‡zÙy‚¶	l®'<k}Jr€Õƒ¯OGï,ñ…L•šJ"ÏèéªGóÜTF¼[	‘\Û æÿ<Sµ™`$RfŒ2—¼¶Ìç	ÑÒ
+bç@neDwÕpÝ½§Ÿ¾AšQ—’f*‘'’ZøÒÂ)û?:2øKbGzùiÚ–Ù«ºéÑ®6õ¦ÿ€RbsÓ`$�õZ‡vµ©X8Q­äÏÇÊ„-[ôœíJ¯Mäéœ$Eïûƒä­©ÚÂèÀÚb/ýóÀ¹w�¾œ³e—?9?øÛP<™©ã•OõÆ(yCKnp	¬uG‹Ÿ$DöåY�ðA'}9'ÊÂe´•ävcþ½?$?r3^c¡þ˜~
+?þRÿe÷ÈÜ†<ìª€%ôª|Ù!Ù¤(hkšâNù{ª,œ‘˜SóUæjhAü®¦Ï¨û†¸ðˆè™ƒoe£ÄvÆùdÛ¬¬˜�Ízv¯CÜ-MŽ``f¶Û²�F8aÆEÝ'CEÛY©‘‘“Kds['Ùi¦÷˜MíJƒlë›y
+’ÛtÎÜÁáeV(= ÷	bF�ˆ“¸­Ù|¾&UkS=º¢‚ºØÅè*'i”?)¾Ô‚ù|‡Ôk TÜ[¥^“æg¤ê$NçñT­ö­GVo‚{ed©÷,ù°Õþ„ã�2ÈN€åi”F@¬A­CHV 3tf6!J09¢#P	’0²Âà”�µ‘.AEà¬BÞÃò°Ü‡SAÖ k°¼ü	-a­k­s¤ÿi€TÄ,3nf³Ø®ä¶ß6GM]ðh>üêÝ¼!ª{�¿ló/4/x—½=ûÙ�›¥÷¹Î‚ï[ìü —ÛÿGêÉrpåR÷
+×y`µó¯iþ!vM�Ÿ3}¨•^àð½)§‹”D+Wæí||úcû¿°qç?Ÿ¸ïÓëW¿”¶¾2-ÔR¢Ç,('zÂ»K² RŸ&ÃÜ/0M	›Q³±!%&,Œ a�nYÖ‡ôªžKíê0kŒÓ“ÆÙ¶Äd
+† !©„³¢Ynø„‹Ï–)É#5
+�€?Š¾¸¿¿·Ÿ]¨ôx-ü|àÿTéuq4ÑïÅù~Ïým– (BfHhLäaF#éc°„AáóP1¬�žÛ e¯�Ò$¸‡¼™Àxˆ ^½ed)­”þ†ÒåÑò»‰[ñ»culHCŸª@FRY5«»¯Ù‘�ÚH`§sÚ�/[I_7R~g,Ouø“¹:¦à_“d/âüÐ‘¹ÿi¼^é1JÛ‚®•>®ÍPÑ¿.po‰â7µúÿàˆ'ñD»÷ÑLžT+}<N/H³—¬t¿™ægEùy”ôŒ)Í-ß\/}Dª�€�O_ÐíÿM'{Ípå-Q~®µ§Kåð›©Ú&èÌ‘Õ;ÖV_e­pùÓ]iÿZqîÎôºPìd/YM/vØ!Ÿïj'ïÐ¦Òð¯JÕÖ\“¨c+î­y%=cÝÙî#…Ï*S±`G¤^�Þ;^üDOnÝß*[á$*{7ÄjŠ‘Á‘Þ6”þÁÂñØ�¦w‹±î�³'Õ#>ßÉÏèä'pÒñÙáVúji‰^£Lu5;#3õ
+?Ò’cœt	ìLü†1ÿ'Ê:ÚÚNüîN~ÚXù­Ýü%åàß¤©SÈjp…²5FÚóƒ¿Y[úL ~ï±Ù‘âßÈñàºT¯	ù¡DnÈmÚU÷NF¢¢x"UÇezíjòÚFé##…ÏwâË*…Ë­u{ñ{
+þu©žŠÕ†AüÖLm^Ó8[šqß½9Õk²áÊ[	ÉV“wŒ—>*ÍˆËö0Ú-}ˆÓ¥õ¥ÏKS÷ù>c+½ô•eçcÊR¯-¹w¥jó ñB÷ß‹ÿ�üZÿËÞ#?Ë­ Ê€Y`I/ù¨pÂËLyle F«½uIÐ2{‡é±p(Zºï“°Äô@—¢§ÓƒžÝiëò    IDATÏ4éq3;ÎÇª]U²q`<B(ƒèØÝ¾…y6ØaŠ¾¤o[‘�sPaÄMìB™lÈ1¨Òá%} $Ã¦ÉÝ®f+æ™sôÜÈ¶FYÝ¥Fâ®X4-£!ÚÌ¬q	Y—À(¸måŽ9G8]uØ\??…ÅH4Zzï }M,Ï¨øß_Ž>ŠG‹þ­|ïWýè²Àû9%Q¹~¨½rÜÐèÎ¹é‹+•ë²,¨6cá�rd8ÚspCBÞøqì¼Ïïí‘¼×$™Ü¹£räf@”�,Âh4NDºB‘, G{7¸¿P�hN	…õè>• ´³ÛáÑYD©k‘Gˆtnõ6©‡µ-f¦ÖQ¾�)YÑÝ­`E/HŽqK=Õ¬9ûâ÷ËÉ«Jâ©‚{«ÒcÆœ-tÒWŒ•ß=H.ö�{Úñe%ï§Q~^;;³â<(M³àÜe­ßÉ.tÕas‘Üêñƒ‘ÜÌé€‘ÈcûÒ—ùEÖUS™%Æš*�f¥™–»�‚85Þëërbó¾YI³Èœ–î¤Ø1s©tìî&Ý¶d£ð8ü2�¤ †‚�†XMt5·, 	!Ú£‹ ]Ê×Mø÷Jâ�<±æ_'õ:NçæŠ‡•kÔþ¶ß�ïÝ”¤/wÝ;]¯õ¬«¸ãA¸(4�´‘Æ¨OBe :waÊ‘,"ëCø!T
+Ê°´µÉçÂ>»«ÈcŠ¨‹4=>N^Ý¨f~éûÎRòjËVu–Ø–Oª	¢ÅIo)Ÿ*óAÈ÷%zr$ü"!ÙÂà“!ßå°CŒ.¥êy•àÊùÞW|¾'tnüŸeùé¹:®ÙøÄêê'ºéëká×r¹¥\øR”¼q��oÁCçwJ¯Ü_åj«Ãw
+þôR÷›ÍÊ;�iºî‡wþžÒ¥~ò¶Zé£°Î|çÇç7œÍ&ùós½®èýtº÷!›óøÁÐùm¦ž—©M F™Ê@M5½›R½±â]ÓÏ.ŠÕFkE(ž’¦Š‡“ª-eïÇóƒOŒ—þ—Òã®xä`ûš†£ Ó½ìÂªõBô±¢xÈÚ€Ó¥D››fÉ¹÷Hü*�f[øÓ=yÊpøµ•øJSìébÓÙë±ªs_??96e �<¶ mÀH”ë¡’óà‘äüõ…W¦Îhw&zkEì÷ùÎJøu¥Ö.>Õ¿ÚO_ÍéJ¦7R2pù¾åäÏ]ÚòØAJ’�Ü6ZúÄRÿ3Œv{rsI<“ê‰fpÅJü.m=N#F¢€?¸·ßsoÞ»üä†ú¹ŒÍ*ugû:?,û?¬”¯Lâ[ƒ¿œ;2µÅ˜ª`¤™ÌÔ&B¤Çvçz2pîOä)c�—,®^—ë©Ü4=vÐãOI3Ë­\ÐÅ@<"øî\>OšñwõÏûCî‘¯Çµä0¿oøRÿ…9;ÚÂ;]5¦-É¬ò	w¨ÌŒ @l%k›éN½§‹¹Ums°H&ŠÔo›öÀÎ„d\Û4Cg„mŽL_#å…#r…§B‡Úf±@äˆ¹·J¶ì‘€Œ/›{×ÐVìãR#.á‰ƒP�Ôv0€uÑðHµÆÜyµD£à%Z•V[˜a1è«Zb¥GÄ’žb“Mg×ál£²Yƒù�ÚIô°²b<ün+}@}6©õ>›3Ö­x?Q åt&S'ZK9]røÓŽóp<Ñé¼�±#œ,÷Ë„ :†<F:€ã!ê!(ÀžóZºqsvÿþæ£éþîÂŽøÒoÐ¯½·¶ýY„Áj£ˆfáÁZ iFB à5ÐÞ&�Ç Nˆh2EiIÝÕacËí«‡JÙ»z»²|^Í—èHÏÌk¤uº� !S‚$.]öøþL¯Kô¸C;F™ ¤i4‚+âü\F[õò‡¦Wît±èý,ÍOÜ;*—[e¯ ´4c¡¸�ÒÖÈ·^päm‡•×¦ Ø"%�A~¶ +;É“ºjmÀ:‚ôb=20|ª"Í[A¼ÄvŒÕ“¢ü”|T \!ë#»X¡“œ°Ä$©í–hÓ§¤££��óI3 ¥Ì&!9`€Ød“Þa€)8l™“vèþ&•gXË÷¶^ò†¢w#g‡]ÉåVÁwUk¿¤íÕ–ÊwÂB)P
+)Á9Â2 †ÀµV@(¬sAúKhn†@¥°Z~ñ
+d ‹s¯ð¼[M;½�uÓK,„ËökS›NÎ	™š–sM¶¶oút˜ÓØø(°!¦âÞfL	0ïƒô"iF´-�Û^)~F©©•þ?WÞÅoîççâaN§]çk�(}}¹ðÏ�Á_…î¯¥Ú@H¬Ì�ê¦¯Þ8¾eÏÌþ²w³ÒÃï'I~®2Í‚÷Kk…àû’ìÅ€‘zmÉÿþbï+¹iüF{•ðË¹<aqð±føå(?O™º±®Ã<¾ÃÂíg/®úßo%ïÅveFŸõÙéÉ­ãÅÏûÎ­{Vï,‹]ÒÔŠÎ=‰Üfà†b»µž2#,pîé¥¯(¹·ÌGïVVø¬ÍI¿ê_›©­ÉËJ|º-§|KÚóùAcƒHMU�»Úù¹;”è	Mª:êßæñ'ö÷?\d�ÜÊÎ3‘š²–Œ†W¢Œõ)‰8›Nå)¡{Ël÷
+JrFbŸ?^)|qºucÑÙžª£b½6`³Úz sÙ%½H_õ~®Ìp®×ôÕ±>]¯¼yeð÷E÷CÍ¯î>´«~5Ê.ª¼c¥{…Çáü 5Eê{7çù)Æ\ñðáÖí¦è]_*^™¦gÌw¾=R~ÏrïŸ\A—•©Œ‘~àÜÁéâ »Ð�Gùó�-pºäñ�­ôÏ?˜¬ùC0òuøÁ9Ì‚KÿÄÙùÏ‘`Âd!IŒñi.m¶j–šIk»&ê™E�Ð>öÌI›ÄÂ*D!õ5@@}Ò´°©º¤æSg!ok:ÀÁ"i´ô¼µºcfZæð09µcw×È1³æëØ+¡Ãur²FÚµ�S8%2¾jwÐY3ÊŽ_#†8á ¡„ø^™õL@ +fYY9îßÚd“5>¿'©22ÂynùŠ
+´ÉK|z)~ãDù²‘Â?0ºZ»JÞÏ(‰•µ6pÅC�äí”¾»\øB£ùJ:Zƒ±YBrÎ8>ò|ŒP¨«•Du‚ÜSNŽö-T ‚f²Æjk“¾?ì¶öaè$&·‚d	F!m#ï�:è ,(‡(¢°Yë9…å³0Ê‘Å°€L°0÷æ\žP©í)ù×ï]½½ê<2âÝ¼Þ)¤6Š1ï‘úÙ?¾gÞ<>-çŽH™šÑ#ÉKŒ¬¥™®1ÒvØ¡ÜŒj¤êäž<})y]oðþfñ“‚ÍXëyâÑåÁG¤:J™	ßýÝ@oÁ)I|÷7#ß:›×ìÄw§–Óç÷Õ–Xn™‰ß\önlËÆ¯]–SŒNâU¹Î¡}—m-….óØ'Af»}3_¥C-ûPdüüÌYŸ42§&�ìb…S�ŽŽ)„O†øœÐ"Ë¬›ZíRu\ùJmŠ>ßYóZ¾iàµ’w šÑ•8{q£øiWÜg/öÜ[	8ÎŽNûüx@}ïÎ$®i/€ã¡6/„LQ†JÑ›!à¬å Œ#naìdt ëÁ(8uÈ+û�`â>†FnŒâ·vzýë9]qèì@žÚ—Ç7�™Ô
+‘[�Û~ßÎ¬j™ô�þ½Ïfµu^©­G’÷t®Ìõ:e+ Ñ¶.Íèbû©¶º¨ÔzÆŽ4Kï”±k�™Î¸b‡ÑÍ\O¥òBÒLmËÔævr‰/ž\Zùg¡ôˆ±Å\=O™f$Oô½_Jµi®óm©×-D0¶ÐMÞeà	Úuùneª‹Ý¯&O1¶àñÇ8]Ä@1º<3x·ÏwZxÚúR¯£$R¶ªl-àG�_ê}ÅXªmÁX!õe5º¿–fMª'Ó3õ?�~þ"B#Úg•-,Eï!$XÛaókW:´òiÃHw6ÝâÒUmkÚrižMÀ¥-YqiÆèÊbüÎÌjm]HSQÖé_êu­ä-¹:v)¾ìHïËJO´ã÷èÜ”é‚Ø¹Îµ€56ôù®µ•·¶ f¤ˆ{ÛÙÙ[HÕq™Þ`lPà{CñÐrÿ�Ø^¯}uaárçæò'Œ)¥rs­ú¥6¬D%0ó­Ÿ¯FŸHó³Wzÿ"èj®Ç²™¥»£ô•�x¤½?p~?Z~+%Iè<ÀH§V¸|9¾¬�¼½›ŸÕN.á´Åh+ÓëæãËmÿÉgçÿÿU4µqnÓÜfÊrS¦€(ÈÔvŠt8µf{‰O‚�ú”Â˜¨.f*´\§ÃZ_²z(wu~H=Ý·Ó-³W Òµ‹©p”èƒß±û)ÄÀÎ�Ó‹vëo+›3xÝÜö-l�œá“:™ çTÉi£CúŽÔ8qRK=”tÇîŽt©@D™/¬ÊJ…6ô|rÞ¨·}&¯5XÀXáÍCÊºäÒeA—ÞM‡;ß•j#%§+R¯+8÷†ÞÏ9] ÐÍÒû
+þ5f¥ûÍ<¥m%›”vÓüÏ³y×�Šè,Ãu÷ÅñÙs;QBìBUY£6¿ˆ¾àeŒj66NHX¢&/Œ`ænd-X ë�Pp^”CÅ(¯…S ,V÷ o#ïÃ(ø¤Ü"dÇCPB{Ññœ{zñ»O_5Óÿ¬GÛ™ž $®y¿*ÑR‘¬;ÿú§ýº}ýOb‡µÍç¤jˆéž‹ŒO‰êæç.$¯¤%mØÍÎ�t¥È÷¶Ó7­>™«QöÒåøý[¤¯Ñ¦¹Ô½RÐ®±�4õNüÁ=oR-ºã’=ÖÙÁÔ4Úë¤¯,ógê|ÑX›¾”�Oø¿Žt}Yw]B¤³R†Lqº¤’Z9F_¼ªççÕa…4µ]�„yd—œ¾muír�†uŽ€”Cê–Y‡“ÛÀ#Ì£í^va_/§ô³'ù9ŒŠÎ]Ëé…”ÄÃFé+syB½ôQ©6Ã«ª�#Æ*C¥JKÊ @P�Î¡%–—ßœGHºp|¸ExEpN2ƒL@¢YpQÝDË,Â(xEtÛ£F£±ƒ.+®TfM”\\ô~Þ(}ÈX1Zü\n*pIÉ#,G_¢·`w:#ôÄƒé†%ÉGÜ½±–ÖTø´4µ�ï¨ùß‰å6Aç9]¢$êçgyÞ­‚ïß¿zgœŸá»¿îÆï/¿Ëfòä’w½Òk¤ÞHÉ€‘~Ñ½kbäiÆ«Þ�‹þµ¹ïg/­„_ªù×Îµ~Ë3'ë/²–”ü««þw‡K–z²àþ6�’öå‰ap�+‹Õq¾Ø^¾ÕIß´¶ô¹À½SéñŠ{³¶%mKœ¬rÒY7t\?}�¶Å†{_Ñù�¶a__¾[sîŸé]«M”HAÕ°{÷³ö„çþaÿÚTO†b§Ã–ò¾j¸lïþÁe}5âóÝUïgýü”uÁï
+âkEI<£­ëÐ.`k¢½¾öºTn5VŒ:s!?dA[rbÈ½­Î—bõ¼©¡ã,8C^soLÙÿNÍÿQÝ»ÉÂátÉeû3S®¾�³ù=­ë¤)SÚ©ú?èç/	¯òùã.Û«LIÛ |£èÿÈå»›CŸê÷Ï¶Ö)ýeÉÿn,ÏœoßP	¾·´ú5±q|s/½D°9‡N;ü©Jø�Šÿƒ¢{¡}Á¦ÛßJ_>5ùÚÀ½ñ©åG(ikS+ù×´£�Œ—þ²àü®êýÆe3™ÚÀH¯èÜåÑåáÒûþÀ9¬ÿ‘ý'ŒüÏ*�‚�—h(ˆ“Ò"¡„‹%¢@y‰ÉëÎ™‡ôÞe³«N75¸3“Íè]ú@×DëØT™9E²¶JŽ’è0¸>*1ëšéÓ2ác$Ább—FÉ«öñ®Ý)PvH�Ã§à‚8¼mGv•€m`çRX
+T‚�­œèû!ëSb{j$¤6·rLÀ£±2å)ƒþc)ú@ÕyhØ½;;<¾Ï‚)Û(‹‘<+‘Ç(Fz”ôö´®ãlz¡ÿÅ8{E.�ç|_½ôQm`á…%!ž˜Út¹µp0†,†ëAk�Ü!c”îøLõá¯ã‘Ûåm¿òïûÁËå«>â>ñ+�[#Ö�¬<�Ïn�Ó�Pt§‘¬"ïƒ(AŽ‚{°ã'@&à>ŒFžÀõsc‹ÍÚkþÖÿ—CWFJéçg/%¯q‰òHù¾‹ÏLWùÍ¯?Z#�ÙÎ¾,(ñ#h©0ÑåŠØÓ–›«Îý%ç�Æ>'ý®Ü¬m¸œ�e-³–uó3+á¥JõHOnã´ÕÍOuØÌþK™²nÀ÷%z‚“$àû&ØÜþœYN€ò™èÜŠØ_ •=½¬Û‚MË™qîs8>ŒpJABe“!6Ûnj[ã|¼ÉG3Û['\AÌ²’!ÅÀd±) ­mn­ÇŽXË2C [¿’ª£)éR2˜ª¼3U[;ÝwŽ�\V.}±Ýÿ»Îà“IzáÜÌ{ŠáO–g·1kâ°†l€<Ã ·®Vûæ 2	tç@’Ò.(Cõ9ÛqÂ�§°€_}ŽÔj5†'çóÝ¯×ýè-�êû£üE©<åÀÊöŠ{ÛJô‡vJ|¥ÉN`×±ST�äÅ¶9TbîˆÈZùQ‰áuÞç¤Ïio Oég-d›”iºâ©Tž<~=Ž/‰Ó—�.'DKµ%QÇ[‰ÒW¹ÎƒƒôeÚT|çVJâA~ºÒ#‹ß¨?˜4?ƒ"µp:ÑÇ3uÌHåMÍò{»ßÖ¶^ñ~å‹G£ô¢(;/W›—³óŒ-:âI©ŽZS¹4M_’äg9ti¶ÿ�¹<^ššµ,ÉÏñœ{úù´q/%Ù@3·zk7?½~ ¹^ÏH _š›±ñÒ_Ž?m-/ñ½‚Í3Ò‹òsbµEš‰eÙˆÃæ”__º<Ó›Öø·†lu6~y®�JM	°‘<ÁODjƒ¶@º¢­3×½²%7WÝ{´õ´	¬CL+{AnÊ#¥÷Í·~ O”ü7¶¥¯LäIŒ.÷åÑœvØ¡©Ê;²ìJ��×{l¶“¾<U'tå±ÊŒJ3ÁÙ€¬©¾Ê÷n^êÎáOÍ-|¯ý•çÜÕ‰>@I �Âç¤ÚT.üc1¸ªÝ¹Ìa]þX³v±…ÓO.%Ï¹Ëwîø†ÆYÝöÖ4?{mñRO¶³—Jut+;G™‘Ð¿^ÐéT¯+z7úÎ=³ÑÛCñèLçš?i?þ¿×~œÏÿ×°³o_ÞuPsç)ÜžV†Ã¯2¾b:Ê–•UºÖAÙ¥nll@�Ô&.)—iiIE°`·Sx)–8
+ƒ}Ãàd‘FêcX#iÐ�€×¤Û(¼Ì¶5R‰¾´™´YÇ>ÉˆW£ë<jæõŒGJ ;lnÈÚÜ4SëZ ”€X¿ìü>7c‘šöoìçgU¼_+=*í°Ãæ "Ø¢ÒÃ©YWvni”>ÝKÞ�ê£¬-|‘Ó'ýXž	üëg»{¹ëÜGi:¿r7×Eº  ò<„ëI¿™ ‹`%Ò§÷–è´lEl×Ýî¡íúÀ^XäÒ>(Cqƒ9	ÃõÁ]¨q*ƒ‚{h€`þˆgÕe¡5òI|Œ”'PÚrœ§ºÑûKþuÝøí¹¹êîh©I]¤vÇuEm‡„eÖpI±Î�ii\ä�CÎôj~”±¶Þ–ÇÐß­lUÙ‚±AIìöø�HmÑÖc(K=®l±(v
+º”éµ±ZÏˆâDLÛ°êýÖØÂ|¶vdÄYñÙlnš5Þ-³dV° –`½£g¥Cˆ (Æ¶·dž¨�5 ‹íb@š©M]8(§VÇ6ÑH<2œäˆCêI��êÜr�R—˜ù¼îR¿ÀºkJ™ï_ná
+ÚµàRU	¾?’yuvåîFécJ]«~�â�…I²—Ym›w<Zt×ÅŽ5B·!¤]hî"�Á]ÈÜ¥Ï±”MŽáÍXÙk@)ŒAöú¤è]R­Ïò³‹þ`‡òÔžZ£­o¬K‰Ž´à(.˜'|�ÔbÌ§Æ8¤A‰M¬Ö6˜‘´Êì@MÅ.b‡"ut®Ž[Î^¬õ¦nöÊ\oÌõQ#•·Ïuÿ­èlg´e­—ÉÓ æòÝÆÞ/­•z­ç<”dç§êxBŒ…ˆ‡}ç¾Av¾5ÃÖ›Sz<ÓG{bcËQ~ŽÇwS¤šÊÔÖ~~N.Oî¦K³v¬z‰ÕëºéEeï7„ä„d™:à�xD™±‚ûKkFv$à»“üœT¯#° ÷øá@<1�'j3em1×ã™i.d'W�'ôåŸÏ0”S=!ÍPW›ë­™ÍõÈpá+Ì·ò“Kb!–Ó~®§HA<]pî¦¶‘™ZÈ÷{´›èõ™©Xpâ³VÀ:ðø3žó¨Òk2}Ô\ôžzð#JâvvAÙ½™»’¼Ù¢¤ôúnúzcÚ4†Ëï‘êøvvnÈ�¸ì @µ*þ­RG»î=¡s�1ÍÀûEàüÎÂÓfØ"$`ŽØ9H/òøÓ”öß/ÕÆL?Ûùf³ôiÝO_ç;Ûg:×¦ò©§2yfœŸ—Ès}ôÚ‘3ˆjÆòNR_ìH²QÚsØB*�œßUý›”^Sp~wCrç¢ý8/ý#ó#ŸÁÍÒ~ü§TjÜ¾ÚT¥SuµõTV¤€ÄPFä>}ƒ‹b…©*][ 4CQ?#mÖ5½&›,Òê>ý[“ÛîŠÙbm‘swQÉ°’£3D·¸¨8(P‰nÛÌX«—Í.�,$#²LÖ3ˆµNy»`„nVVv´ª³5!Õ}“ŒÑ)i™v™õÊ|eÄÛîS�X×W³2ûlq6yMA<ËS+ÁwÎ=ýü¬Tmâô£m—ÎÚïÅ!èb³ø7•à*_<¼ÿÅPí­õðó•Â?äqüÒjéS®×îv/)WÅñk­…ëÃñPçQ©g1úË Â…à†È(Œ@HÚP)¸ÜE¼¿¸E8¬Fu=
+”ÇA(Òªk±z a	ÂEÔ,„á :
+Y*ýPÊmýÁ»m/ô?GHVâ‡cyT�¯4˜šVÓ©]H#·ýýT×Ìw48¼ÈDÚæG²5UU=]Î-$ÉõøR¾I['5EÉ­CÁ·\¶:ýcý‚Ø9“œAITr)Šg,X(vôäTA<c­Ó“ÏÛTü…Þ—6#µ‰ ]ïëá2­+¤äH^PÈë´›¤DkÃô$3°s2±ËJYY¤ÎÀ.6¹Ïà…¬Ud: ¥–N|ÂW”vˆrI"-s‰ËIRt¶î~�‘ÄX§äÿ@›!NWruŒRë³üÌZø%ÏßMHB:ý¿%$|·<ª5’¬E©zhyáüÊ „<÷ÊÚ_è¯À	@Œ!˜ÛÝë˜{JB)„¨„BKä	Ò~AEÉ›8;ÂØâ|rQÕû© ’E`3ãç�‰mdÜ'C};S$SïV¿�ŒÍmÂ`¤6›�ùlu5;73Å²óXl†F¼ßP’;t17UkÙlûúT7¤µA7}}'½h&¾ÄZ^¿¾gå>ßÙ>TúD*O÷œí©^Wô¿ÏH$õD&O,û?ÊÕ¦ÅÁ§”^©ç¹ü³÷žÑ–�ÅµhÕV^;�½OêsºOGI­Ð’hI	?r2Ø`0árm®16Æ°Á~¾×Æ6c¸"ÛØØ�„� ,¡V«s>qç½òêþãýf†‡ßãñ�úµþ¯šcÎYUóñ~öF ˆÝo�ò—{âqMõ–ÿo ÖãG‰ÄÊðŸ	diD’a6)¯–Ï:S<•Èm„wpxCàü°Ð»}®#Ž¦»· c¥ÞUw~¨Lg9{ÙDo‘l²²[>±ŒåãÃê2mƒ€ŸÔ6˜rïá˜’ˆ´–¾Ã‚c€I¶Î «óÕîåjÚPmÿä�ž8<ãÿGi3ëòµÊÊºs¢1äf¾éöôø¯�m�ª§`,NfÕ•Ö6§¼'ås½{:ø‚Ö¶)Ø€€àúè#ºî~½0gçzwª. ÖÔ+½or~Æuî6fq˜þw×½=S—GÁ§]y_V^S÷??ÌÞ~¼wg^^—«Ë-EM÷¶ÞøCyu…/ï#òçko®¹·„Î]?ô„Cå‹‡V6¾Äù²²íNô�Qþje–VÓÿN §¯_ÿ½µMÎFDþÏÙ‡•�õÿÞ×·ƒum»á¢ëv›G`Z”»ÖÕá{ú€¬èlhOUÄfygžŸÝ’ƒÔD«fÎ¯±MvžŸàtA)IŒ”ý¶‡�Ìi<†ƒ1›c(–øS|‘¡C sÚHh¹‰;Ø>Q�Àeä2'b.$\ô2Ûgh$x‘|Ô�3¨öjb=ÕˆÄ²&aÈëÅYïÛ™Þ£m½P{su! ëDŽXvjï˜i¼€	GUzWR¼Øwn_h¼úäúCŽó ç=ÊXÏ÷oDðý‰|ÆÖþŸ£t Z‡ö}_j è
+’T)dc¨2H×¡ƒ*¡¾Ö@mD³`�]€×€´*‡¸§îD UÈ@g6Áh . Ù &ÀHz õ®Iò¼ ¸ÙR�TWN‡�`JÛ))*l½°Aˆ3[ÄN†¼Îæk¸ÄÑÝ°?Yä Wcî³‰…ƒfÙütlj¥�2D>ë;,ß(/é¹¼º¼4S‘X5äçz{KvWó—(Û¶ä®×M,ŽÕ¥Ùž™èðä¥�–œ"5±Ë‡‘Î½    IDAT�e¹¥Ž<Öæ�YQCÀE)ÀE¯kŽ€@>Ã·ÖqÉ@a�Ml9Í·œR«vµŠr+cn:›5¹ÃÑÄòÀ¼ÿÝ€Y—¯VfsEîX/¸|ùØðS†B"§—ýÎ0ùƒQúf¹Ú½AŠU	Ó�·Å3ÆÙëëPÕ¬ªjA¬Æzk'æ´Ç‡Ñ*dCàˆ ƒãA6á@Ô hoZOºPÍ,»�Nî¿Tk0†ƒ«†Ýæ$¹~cýGˆ*+ž·£ñæQù‚�á[›¿n€[Â‡ŽkÊNÛ-è”V#Xª¨kÁ Gb€ÎéÄtbqH`Õ¯.™rîž¨‹ïßKBçGDNÛ»e\=C™Í©Þ
+ Ûâ÷3–n?»¿Ÿ³ÕýÝï2L p¡ùŠAú3Í—h; 'åó[eX	~Úaëû�èCãâÅ•ÙÞ
+ÿÑá«¹>·é:­®�¬Û?Æ1å˜–z[Û»y\=]›¹‰^B°Û£�!è�ñ_/Ÿe˜#¨Log8\¬½{X¼t¶öM MÔ^ÁÆ�Ï_ñùÚ\ðÙqu…¶�¶÷5�¯v®å}/Ug#�E,`Pfz¡%U— @b"†´Í¿—A¹Ù{ŒaþÈäzK²´5Ž£…àË£ê’Ùð¹–Ü´z:Ç¡Œäƒ‘s‡'…Î÷‡åu…ÙÕ?ìòã£ò…�¼�³IÝû�ýºû5†i¡·×�»“êi.?¢lÃakˆù ÿ²VôA){7îË«gxZŸ=×|iš½.ŽþÉ�)³13Jñˆdgy—+÷ÅÞTf›¶3Ž¼w˜½UòcÚÌ;òáNý-±{Kè}MðÕqþ²@ü4¯®ŒÜ[çŽ)ïFŽ½aòîºûmG>¼oü¦~ñŠŸvò¬_i­ÿYZëÿ%ß/ÀGôqÄ�[€®)cÖÈ†ö¤�¢Í·
+úöD€­Gõg6‹�cŒÌ[ŒS$šœ­š“r¥m¡l°ÅœÆ
+²ÎÌ³'4IieB«	mÄ8Ï1èÓ}+ÆÃÖy‹!ºL­é5‰ìÙ3.Æõ›<l‰á‘b –Zr×ìá§«lÛåƒX«½Šâºsw¦.iúŸm7”êÒRŸWTWäÕ3B÷f;.Ÿom+toglL$§jï²ÔpœþhòFÁ�YÓž$/r�œ™…ÛòÆÃK€–µ†ðïþStùóõ­_üÊšsÀ[PÛåTUYüÐh—ÿl� â”	0Ép	ùÒ!B@Ð„IÆ½YU²²Øjlg”¿)ôþ5É^¹·õóß)íbÛÿ‚±[2ÛðX>ãœ¬¨Ù·}ŽnN}y·p� P�îÙƒ¶Uäø<÷aab“˜ÃÄbÀ(·qM¬ûlÒ­ÎCÀž]&,8CÓXnlTÚŽ/N¹©•-±:PgI¦‡6_µ‡J;Û‘ã�nz¬ pÛ(- ð	õ�Z‰\E,LlR‘²`'§á”¨¯šÎ”0i‹–&�HD¢ÆÙÐh�®DÕ«.lÊ‚[á‡%ú5ùSÎ&›Œ«=Kšþç#ïK¥¾„ãÄ•X;U©=žûÀhò;ÍÚ[U”ÕV.N!€VÐœ^¶*©Ê-qsd*°€ÀpHF!¢B„ñ¸ ‚_F…ã¬J¬93¿•Á� <èzEš\!ø2‚©ôùÊìdXôŠëfÝ‡“êúÊNYâm“-æT12:ÙfÐçè	¨­Ó�bÜ‘Ðxlâ	�+³Å€hÇjid¼¶³oT>'�?–×U¶î°Q+ø'Ä‚hSÝ½±0{ÒêªÐùž#²w´ÜÛ-ÆÌò7òþÓÃ8¦¢Bï�Ÿ  rP^;÷o¤ÿÍågzåÓµ9‹(lXê=ƒjO;øü$¹+Œª§:¼ÇYÒ>�¨ÁÎ7¼+snªöFÎRæ¯dX¹|ÕR{P¼Ð�/'$XNä•v*vîªMÌlM˜¨ÝµÇç«]µÝÚÍ BbRš-#ÓžönGê‚ÒÖ<>aX6Ýo!+¬ÝÜrïªì|j¶…â±QuÅ´³j ÄŠ±µ¡ºÄçëkÅs%+¸dãPü“êŠÐýAR=-W{BùÈX=Éè³KXª/®¹ßTzgaÎRv1Óg{üçýš÷%¢XÛ-[¦ÏOòW‡Á¿Y;[–{qBðÓ’ã¬oì¼Òì5Êl#ðÑ_J°®|8«žzßå¯³ÔpÄ±¬zŠµó‚mt³7 r_ÞSTW;«Ì¶Qù‚PÞã:Äþˆê‚#ª•ú‚ÐûF¡.Õf{È�“›Õ'~­u'\I ~‘:·ÿ×‚Ô/-F^Ãÿ$k–jc;ÑPnö?©Xƒµ<fK"!C¿gj*§ØÖœŠ6»hUw™„À@™R?³eÈZ$€#1Žp>d�í³Ä8z.ÖBœKhÛliLËÎPº�g5ÙC‘#°3ö‡Ì83’19Ùë¸Ã?YØé±©O‹¢°nKdœÛOdÝ½-­.‘l;÷ŽÊ«;áÇŒ�[MþÄãÇêÁ?&åó�³¡±³�üÑ¨|AäÞªÍ6†Iwò×®8h­i6nEÌ´i;ÎƒR�ÞôØp]JÇ†ÑrUzaMë[¾Ä®z¾÷W/â‚&X~ÜLÖ jƒ©`x¸€h&ë€Ü•A™c =°ˆ ²MƒQ` @cª&=@ÒI²l¯ï?h­d€aðc2B™Ý@ÇÌá'7Šg×Å©’ËUM“ˆY¼jÑ�éa7eÔÏi”Ðò?wh»A#ÔÄ .ÉäÖçH=ãIô .q¨gÖ/¬œóëIÀ3W—‡5Åx,NÌs`³‹ÎÐ�ñ‰qÄÂÒÈ®U`:|ªk–Û<ØQˆ�¾=�Ã:¢”àù¬æ1i€ „�!o°–¬@q�’QMœˆE	ä bÀ»üÒÎ“�cXÛ”l�Àoz_€B_ú_A@cg|ï ÐuîŒþ°ÿ%Q ªù(zÌñ€s°æg›Ž®?"�'‚ÈJ	~¼P=qÌÈq¡Ìa2„'ò´k Âð^ r’<ßóÅ„82LßÅqÌÙF/ÿ�HJõ®Ê¶|¾áñqiëkx
+§Jg	ì,?‡C«¢²G.ˆó	ÔÅéÄ6¦�•^µ'§•�–¬ïóÓ†ZD�\]šê�)U{ZþçÓê™óšÿ/Iu­2›cÿËžxŒ@ZÛnŸl­[^ï°¬4[ëþ—$V†Ú‘s—µ�H>ªì ä=uEÇÿj/U öi;È‚­;e©•UOÉÌ6�èZþSu5Ç¼æ}u\>@†îw]~,M5Ü¯;|e£Úë «ìT,Žjj$z¦ãÞe¨‹3ÆÖ,8�88Ñ;;î½ýòj�…Ãû_“¬KàZª�«Ks[ãà$fsÓù±¡fÝýN¢.2ˆH>"Y@–âX>æòÕ~¹W Ô‚/*}¶¶›½{&üpe¶‡ò§ÚNs‡Î©ºÜÚiŽ	gc»wH ÔfÇD]Å!wùÑ©Ö§‡ã·26©Õn´ÆÍ«§yò>"_ÊýJ�+åAŽÃ~þz_<œ–Ï­GM‹—qcç[ÑJuY ï­ÌY�û�L]5[{{^]ÃY�³>QÔ>Qª‹”Ùnmg\¼ÔÚÙB_4Ó|MwòœMZÑÈv
+}Î7ÕGŒÜÏø›ù9FþÒj­ƒ¹éMÒä±‡Ñ¡|‡��us"µÈ‘42T,ò‹k¸@@
+&Czl�î™Àá:[LátNãUó¨‡¡†lB§ÇvÙ‡M1Î§´<¢£)­1à¼{h†íÓAK•„Ð€2¤#Öæà(È—ø3¦c€«Š�­%°S²«ÁTfš¦Ö´O 3ó˜�´­Y’•ÞÊ‡¾â‰q¼P�ŠçEòÎzƒô÷áÇ,…•ÞíÈ‡œÙø�¬í æÚ,Î4^ÇßD°ÃáµYök[µfß˜…"!•*åh°±B ÆÁ¾ûEºU‚Q <�>ŽƒpÀT�� l�ða²�0Ê1x¨u jƒÊ1ÑY‚ú< @²ÅÈ"”	Âk MvHq8_q�kÍ”Ùá9ß‘üxìÞ´‘ÿ¦ÇÆ†‚ÒÊó=ä]³:Ï.Ìa¹ƒWiG�@Í²s»æ„ÿ´*qCû5> «¦ñÄjR]M‰#ÅâŠÎ–»ŒÆjWi¡§U_›º8s²8‡€i¥…ÌÌ0M¶ UR:2ÙÐžšÂgÐás¯êå Û#£ClxÈ¬ÕqG¢;±�Òª¢Êg^ƒaE†4žón÷Ù¤°³«Õ\Ëû.‘l¨lœ™ºd§*³9ö¾63õÚÐùn-üˆàË–¢þäC£üÕ¾û½¼¸1â  äÅõ“ôMŽ{`mãe PäKÖ€Y°ˆ@é³;Û@8�a¸A¬.!Ï| ‡K0
+‚:t¶�BÔ|‚÷‹Ñðê¬¼¾ª.c˜¹òAGD´ÊN)
+~²«6çf:ä„@g/�a'Ç…Î&vefó!=.ÁïÒ÷F¦:¥�@Ä''u>Ö6ª‰•Ìl9UnbX
+Ö•üL¯¼ÆPÄ°òÄƒ‰™™”ÏuùÁåä÷ºÉ{”™/íl?}{R>7«®D AöÆ^öFŸuK³Ô
+>³žüA®Ïc˜TzG¯|Z¿|6‚	ä’Ÿh¸·XªMùÿ€ëåU®x8U—H~jP\‡XrLçîÜ4³ê
+_<²šýÆ {Se›žxl˜¿4Wçê<Žé¸|N¯øµ�'•�šò¿¬ì”ÃVûv¨m§_íT»u Ž:ütÓyÀÚ¨åÞ½®–\~Ê‡}ÇI¿ºÐå]ËPÞ›ž›ëå“†Åó,¹Êº?3¬žZšùÒÎJ–¤zW¿ÜÛt™®ýawò'–ÉOg&Ìª+ÇÕe™º 9ër6l¸ß
+�»  _\ÃqÄpœës[Íô›ê¿Ñ>ÑhÞ:_‡ÿ�¿>þv¥ws °¢º*/žƒX”Õ“J}a ~ªÍ¶™æ+×ÿÂpÂÙx\íUz·±meqÐ÷n�‰þ´ÒçH~ÀÚæ(•±mmæ'ê)5ÿ3ÚnªûŸ›m¿FÛfš½ºîÿ‹²ó½Éÿ­ÌâÏ¿i øëW~äÖ›IneÈ¢U}J“rÐË¨ŸÂ‰€�&-1ôqê”¹/`®³é‚ªn«ãÙm¼8€…‘=É@x8¿bïAàó|‡‹�ÍâÚBUÃ­R*¡3.N%Ô�e—e°ºèäMÊ88.Z�¥Çô¼,%EÕ†šòQô¬–±äíßìÿ€aaÀiº·�ôlË»ùD~…`k�Úÿ°T�œo[ªÏÄŒXúÂRïRúìFðqmæZÍ/(³ÝØN~ÒÚ1ãbCHðüã�æ­ÒyXé³F½-Ò9–%qQl«µT{îáFÇ€µPë@ou>ž†î)Ö@™ƒß k`úÐ¨Œk ±	T~¬&!h� àx5ˆ: (2.ÉIô6 Ù>7ÖÈ�¬7¼Òûv|²R{›ñ8_Ó6ÄqÚ}Œ£5 ˆÌuð²ˆuFôÈšýž‚ÉŠ}¸ÅOÙ›Öì÷S;ÑTõtÌ�šlº²~Ká(
+ ˜bÉ)9–M¹Cë€Y½ˆy•m&vcb¤"î ¨Ž0Jã�…Ó|sBË}“Ð7L5/fÇtª„$¥QBÕ„Žk(3ZÓ¤CÖB€9¾³Á¢Ügô:ñÉîàÈ±ü*†Ê÷�'Õ%’ˆ\ŽUS>.ø²`k–ÂÁè]Ê,.¾"ØÉ…Îå�s{äÞÖOÞø_ã|9/žÇØ�³•vë½UµQ@­yÜaÐÝŽ“áfÇ…Í»]Þï ‚µÀ9¤=àT	žŸOo©¸øÙÏ=:U	k§÷ Bgæ«‚Ÿð�ï:Î½ÍèÏ l^=™cfÁk:÷åf�0T¼.rCj@‡ò.ýÈ…)MÕ{›õ	�™Æg0žåÛ4YŸŸZ­ÎUäùüÔ™rÊ�lKÓ«.,Ì.c[†¤¡Ð’ÌÔe!ß¨Ì|®ÏŸòn™®ý^ ªl,øº¡¨²³K‘/GòÁNôç¥>×PèŠ#©º¤0;[îîËÐûjR]`C÷¦õì7K³£íÜWêóçêo!ò	PÛ&TzW,NUv¶Ðçv¼[gjo­lPès\~ÊPXÙÇÔPˆÃ‘8<|¬Ôg»üt¢ÏkóZeÛmçÑ–ó‚©{_ÉÔ…@¹ßY+žÞ–ËÝò*eæâw3,¡4m†FÛNSL*Ûì¸�t¢¿ñÅ±œXª·ûü´&?7u†ª¢ +ÍàŸòò™ˆU ïÉÔ“Zò˜¡zË»1’?l#ò¾’–ÏýüE¢åÞžª‹µ�›Žß­ÌRÝûŠ¥F¡.™Œ÷dÅ¯eù‹<yïìü'ï+¥ÞmÉ÷Ýï8yu��¶ÜŒþ¢^ûp¥öh;í;wjOÍù‰2Kµà†Ð½‘HöÇYé³}÷¶qñ*×ùQäÜ®Ì&G>¼Ðxõ$¥2›Ký¤Ñøõ±{ë¨xiZ^'ØÆìÔç»™Þñsû‘ÿŸÏ�ü¥ÕZwØ·Í9*1.‡£ìÛC¶\lpp‰Î€ŽÖp{N©‹þAó¹ —dDÄ�;kÈ8x |BÇ˜—íŠ‚„È#°NY0
+’Y¾ÃÁ¦+À›ÐiAa›€lQÊeÝg*¨ºö”¶-Rƒç1“Ys‡! ÃÔBp³¶�TŸ¥l-·®‹ÌP¨Þ”G”�ãXÛA´ÆNgÕÓÚñK~z\>Ïå'*}. ­Šm 8Õø@ž_Wé8ëO²×©2DèY“¡ÊêÎ—Œ�Ú´ãÔÆ™×WhEÞ¬ 3a Žou	\@•ƒ€Q�u¡¾„IÀ‚5€ÅÂN”0IÊ˜
+L	ŒCž Ð
+„„Î6X9ºÝuYZOgÅ‹¬³�³‰6Û¥x¼(¯Éõ‡o[ëWWÕäauOkÊ…x�î	qkˆK.4+í·3‡Ïm°ók¬î £ÁZbeMQŒô|]”©E†¼o²‘‘šj ¾dú¤ÙàLieÌâ	Mæ�Õ*™n�ÍíÐ¿ke4f´x'¡ñ±gh×O˜ï×ØNMyÀš�¬•4˜å;sÊˆ€Id Æ!d5­"§´sD$V23åó¬°õ�ŸY«v/„Ÿî×
+ä…Ù.qxß°vÚ‡óêj‰kÉŸvê¿«õÙ4‘,Ê§{Î�ž÷�,{v£y/ÚÒé¯­0Ž¿g¸Þ€s(Š)ƒ*#]Ð BU��0ìŸg4KGÌ¨RU€n ª )×Š|+gÃîðÏ›�J³k…8XU—fÕÕ‚õùh¢.œò¿Œ4Ï@/W5—‰ˆ‡Y�^	#E
+§\¬`áB‰ _`H ÝpP àØÌÔ¸uXŠ`5¹]]÷ÐE€NðI�zX=™@p‡o 9£ücõ$D(Í¦ºûýAùTYÙ6¥ú\�/+³Í—�Ž«+îM•Y
+äC•Þ)ÙÚ 5ƒŠ(šTÏ‰�{<ùQ°^<×š4M9¬×ŽþJ`>.ŸeÁà_G(ÇÅ+Õ]¾6T5œ;GêB†LQ�ezs WfK¢Ïn8wi;�hñxi¶¸|¥_<Ÿ£B¤AùÌ†|ÁX
+ûj«5{*ÛqÙ`:ü{°­±ºXƒƒ ïMª§gz3‚ðØ¸¯¶Ôå‘ÄÌ HK¢îÜ_ª=®8àÊÇzùk¦‚J}ÇLòÎ† ¬PO–ü4 ‰ÝÛ_­ôÙˆ Ìfm¶vêo“üHÞé9·–åURœà|Íû²tg–¿(p¿ Òâ…‘ÿÕIñâJŸ§Í¦R]‡_ÕzÞ��ó×9â€± Ép¬ÍN†™ùH’¿¶| ‚(ÕÞ¢º"t¿éˆCQð¹¤xy®ö†Î�8K±¿¬.Ë«gDÎ]_-¾õóh­Ûár úEêÜý+­õ?åØ)LÝ‚­³P g gDbkŠSF“u{ ÄMÔŒˆ7ìþyö àY¨88óRD8çc» žÓ1›U”	ôT4¢#}z4ÂF·ž1� À€ÓP–0ð°YÒÐÇåb æ¥Œp¾ÎÝ‰-9ØU=êwJ>æ±dÁÿ& ¬æÏ/íŒd‰Ç7V–vÚçÝ¾ZJõ†ÉjòŽ~ñëžóCW<8wmLþ qœy©º\²3ÚÎ»ò.€±¾çÜÝjý�#sÝ;³â× a8þ�(üB½uÄõafËÊÆIÈ‹ë­î€€”ƒª ?†ÁÆŒ*@80\ �0Â…Þ!°
+¬k!é   2êÀx1Ôæ€sà’!X£up}ðbèl­`ý0(u®Ñ %¸Þ:Ãa¥.ˆƒúÉ»“îè£Ùµ<~ Q,WÊ]¥mT0r ìÒ#&L;Xß »r:Y‡†ôpI 8bnI©ŸS–ÒÚÝåWÓÿÞ×2³½�Yõ0$° ”Yúš8xu‘!¢Ã´�Qnfåtnƒ53@@&Äy²„tÕ‹qªgú›žgÏT”¹Xã $Ä.¶`Zøz#{ZH¤ÌŠÜÂÈCÌóxV˜é’˜!I ˆeÈÊã·x|»ßôÅáD=emü^é³jþçºÉû¦ã?]~®Ýx»Œ�Ÿjü�ïÝ–×;ò!c Ö\ÓÚ÷Ý[«€ È`4ÜêyGµ†2é@‘@‘MÆ„È@ˆCœ¯úáØA�Î_?³‡ ²ô"?8¶Ñûýfí¬u?,ù‘Þè#Ún®û_ðåý¥Þáñ3:vîê�y �·¤¢o°èÂTF'}ì°)¡ÓlxØ8mïÈh¨ èÛî)}ÄpÔ=Uïë.¸'ÔÄD£âE«Åµˆ‰ƒ$°_šM XÚH`Ë}Ãâ:‰EiÛh)Ä‘3éÛ•mK_Öp¿�©K=qèXò¦�ºh¬žlÉÉÍ¶AuÇ	 õòWOÔ%‹ÑßŽÔ9’­ŽÔyYõÌnþrVwîä,ñÄ>eç—m´£÷5�û'êr³Ê6 €@øbùLúK~Ó¹#×ç` žÈ¯ªÍcµ›€•¶3¨ÎuØÁNô�Ébð•±ž“l0P›ÓòÚ~u16åC’�+3Í1×$}6šþ¡íÌÍ¢D­È!@ Ã0WvñøøýMï«ÆvuÍÿb¯xI¿x¹%OÛV®öŽÊë´YLÊg%ú<‡mÿ$ù)!�õ“÷hÅ7†7XŠ,…Að}"_Šý…Þ£ÍWÞÓ®¿5+^àËŸ[·Äþ¿vû£ÍÂÆäýõàãÉÏ„îM£üµÃü•œ¯Wz÷8=¢Fçå³6Òw¸ò�vã�†jB^KÞSV—Y[k…ÍpùŸ³¶éÊ§êBe¶üÿGký¥å‘ÏäðlÚÙ?Ð³	§øBßLb${ô‘Ã*�Ùñ4Ûå` Ñ¯ c(C¬�Ô‡SX¶`j¸0�ãŽ�J ¿äLqÇÔmà®!ÆlNQ9Ç·!8Š*5ÞØS©õ|Œ2Õ9†LŒ-›fdù”p‰I”Ý¤É]Œþ~¬ž\ÙXQ<ãÿ»²›BñP$V"ç¾éÆbçÇIùÜQþë._ÕfSavJÖkFÃÙP¸š½nSã�Ãì÷ÊâcjñGAŠûòüÅµø'é«kñ§ `ÐÿMÁR9´æÁ÷¹¯JÝ˜£ÀñÁóS¿�%HÖ lBÿ0F�1 ¢HÈÀ`mº³=ž(ˆ; @EQ’5@º„|eÍyì@–´Óôš<j}ˆ€Ã�77p8™U×4ÜÛW²WÈÊú L‘˜â-‡ÉÒÚyvñ){SA«¼Ü9ƒ×%pÐÇ�Ò‰6; %†!n›eOŠ0ˆ-XŸùzà28j~âagFÌQ�¸‰Ít¨Æ6�Ö«)�klzF’‡˜XSÁØÁ(ƒÛ)­.Hb	‘q�4 öèÛ©Xr#rž‹ 4è �)çPfÚ>UÍûßrÙ@¢iúŸ/õž9ÿÛ._é/qør·ºdSôWžüIäÿQ�c¦ÍâŽ¿™'5 ž—Ïâñ${�1sIñ2FÇ­YSÕyÈrÆÖ¤U9Îºªf�$›DÒ­ÈB}:*7S!ÁhÈ“:²r0~w{ê³Ž®·
+ ö•ÕÕ[v|4×u…¥ˆ¡ÊÕ¥©Ù=ÔÛ€f*³ÙP$ÑJV¥–kP.ÖrØh³:©¡(aCB,¡1†#sì)ÖÅ° á&±elS� “ˆ �›V,Žu[S;µÆEœè…X[+Ÿ‚èH6B>?¹\î�óoÊôYï? CQnÎ}Ýê’yïŽ‰ºœ³¼4›ÛÞ÷Bq˜cé°µÒÌOù7'Õ“ÁF.?Sš³-…‘¼ï‰,‹Ì6–OÔù5çžµüÅRàH²�QñòÕêü9ÿ«™>§åÞÆŒ3Ýp~ÚUçk»I²a$Ëõ®–óÓ€w%K\¾š›ù–ó@ª·¸�8A +»hÉÄ1 Faç
+ë	4³X—û;ÏP8>?=©®>SÍÍy?Îô–º<*YåòãÊ.Œª+¶ÔÞ•©+lìÞ’WW24±s' “ütivMGªÌ. Þðÿ#UWÕC÷&ÏÛ§Ô®²ºÊ˜9Çsîî�>¨íb¥öx¡÷UKµîøÃÓS¿U”WNÕßÉ *ª§8âp?}{'~ŸR06rå�•ÞÍÙ¤]{—53“ò­è¯
+õd FÅî·ÓòºJ=I²UWÞvºÒççúüRí•âÄ/ãlÙ    IDATÚäƒ«IñCaìÞòsÞØ—ý‚ÍüÜó_R¿´¹ÈÕ´Ÿ®dAÃmNóŒ²:1ÇÏ·d5˜¡=æbÓ�
+Y;³ýˆµö¨�Eé®œ��„NÅ¸y@û9xnNè¤mèGØ2 ð”ú%æø.�ö´>1Ç·®˜# ÌÃF›×G¦ÒP9èGLhB(l¹ä?¾VîqÐrÔ‘8¡m-û»å-G¥¬Ëã–<�CMõÌÌ„üLËÿÃÔuîgo¨ÌâTôçŽ|¨;þ»Fð‘îäƒ’Ÿælàˆ}®¼'-^(ø²çÞfm›È×zÛÌü§F½%Æº\$®  =÷‘ã8EYt¢úÆÏœÈ jƒU€déTÔgÀ­Ãðx5èŸÇ/†2éC: @�Xºk¡9ãîÏŒ!¡*A8Ðï½Dëm®sï(}s|ÆÚVQ]±‘¿<Çy_V]J€’¯w‹«&"5qòd9wØ~&À­mâ¥
+Æ.´ÚìÜ‡Ì{˜ÚŒ¯Dd	�Ø.ö.ëÓgèÆ‹Ä; ¿1Ã®$0u6Õ‘G/œ›ëÛ#âzM¶kh�V0œfÒ=zdž]Úµ8Ö‚‹"ÖÙ°û\hà‚˜Zë£°òŒž0õÚlÄÄ¦KîÚþBÌòED™ÜE/£¤ÅãYï¶Qu9ÇBÙÈå}ek-ï[ÆNYrc÷æIù<O<
+ •YšnüfQ^+øÉqö†RïpÄQc›¹>k±uý(ýÝÐýVÅZ8µ~çlóeS³ËË'^U«ý3 Te'/¯›ÛôùÉ˜ô�s(Kt=Ê’¥zë¸1àx0XŸA6vÝ\k¨ªµÆa]2ô_Yé³ä°xQ'ú�±�^ö&—Ÿ�Û+½óPòêYçŒÇ�Ï¯”È*2Øµ‡Å®®x¯Ø»CØœÃš„Z€³	�äà�ißþ‚‚&„‹�DÑ3'}œŠY˜“šâ&³^Ì…­å–µä 3�º81ÒK›p¬byoejî�GÇï1 uÑ3äŽt¸9¸]™ù†ÿù¤¼¡*Í"¢µ$3SwÈôÙK%Ãr¬·×åc…Y¬lT—�fz{ Ž–f63Óuy07‹5çžQu™ÏW¦ã?JŠ—(³»_?:þMX}Kr £-Á÷}yOR^{¢8o«ÿ“Â,/ìTMLÍVša•›GíñniZ%yMyx¢·l£¤zn‚šØl<QK�Ã&3á‡“ò9ÊNGÎŽ%¯WdÏm¼g\¼$�÷Uf[=øø$M¿|fÇÿb¡.pÅ! HªË[Á§zÙosLùp¿xn(LÇ¿—¯Ü[\÷»YöÊ0øçÁøCRAL¬mæÕ¡w#QmzúcZÁhôkApãJ÷fÄ 2}ÁLü‡yùŒ8ø\^>c�¿n:þc¥Ï@†#)ÏËk´�'¡wÓ }›/ïC¬’êé¡¼«~¢?ù³Ê,ºü°¡š/ïIÊëJ;ÉˆÄ&×ÿ<¹O‡ßþ›ùíðÉÿZ�ú¥å‘—â;sFÌOi\ÙX cHOhÅ€­(EtHkAOèd·¬ÓÝR�pJbÄAp©†´…g!ŠÖŒ-°ã”FŠÒ¾-³…ƒÒÅÆ�º³bSEVS^c‘Ç„@¯-{Ü�}–Iô'z¾!ÖJŠC�ÃÆ‰>;µrÞÿ¶²s±<h(b "÷G’õ‘BÁ&�óƒ~þf‡­i;ß>^ª§pÖ|9-^0¿·R{-ÕkÁ']o?Y^«}	hâù§<ÿ8g¦ÉyAtÐh�¬Çy9]�t"ËžÓžÝo4øAf5X~È@WÐ]9¯Þ^O{ =0DSP¦ œC>€Ú,ÉÏ2¥Ö@PpCðb@€lÖ‚Ö?ÛÞ�_t4Ë_Ö¨Àšº#*už¶K „àªŸÉŸÙö¾?V—1@D0¥É+mƒ£lâEëöGÌ)j˜„}º3¾ê8}j�¾×Æ+5?†}m¼*£±‡Ó²_˜ØDÑŒÀÀC‘ÑDbØá[ä„�Ó$1ÖüUº»Ã.Bòp�>WA’Ã™—RMì†Ä)M l…œ-›ýu6s<®GWbh¸‡L¢{Ê<,íå¥õ$ªu-%Æk; ‰>)zâ‚¶‡Òêš´xqì!+Ÿ¯ìci-ø”ä«H.P„¨ÿk®7ÙèþÕüô+=o²±öëˆJˆÇ‰€óŒ³“Y²¥;üGaÿ]©MŒM†ãßx��}­ Š„L'“××÷izyžmóü#Éä<¥ÏC ×ù±5ó®| -Ÿ«í´'öK~b%}û¬ÿCÉzåÕ˜Ï‚Ð`]¬Ÿ1)HRZ!°ô(§•>Ì¦p¼„õž7/A@­oWš<ìqðXî"ïæ161žƒ¶&Æe©¦ˆ£�å>e§3,¯Qà.E7lWÌ_šr¬ÌÖ¾Ú°Qe–5r³)G½³°~$Î4¼õÄÑIõäÐy¸áÜ)X�£öùê@]ì°Ij6»¬ËÇ–._1Ô’Ë´z–±M†ù¨|NEá–èãÝòÊ¹àŸ§œG*³+»óDS#3³¡81Ñ[s’!ï5½o¸|5Õ»ÛÞw"±O²"xo¤vx|<ÑŸ�jòˆ`‰¶ÑpîÓv*QOQ¶Í1VO-­Øâÿ ×—Ì5^‹¨‡Å‹b÷DÉ{”Ù’›Ý‘s{ª®ÎÍf¼ücZ=Ýá'[Á'¦[oL­mÖjÿ¶Ñÿß–šJ�ë»ßa˜	ÄÈm‹|[š?�³î8}¢šŠßŸžm¸,v�Ë—4ã÷“mGîw�YPf‹#-ÕÅ ,òÿ•l=©®aÀgš¯a˜26ÖfûTý�ýÉŸ±{S#þKk6i³ÈXBZ
+‰Â›Ô'¹þ‚~äqxðW<ò?…G¾‹—C{"ÄYeˆ�{�€Ø…–@¿¢I“-Z°%eœ1�4P	$F)�æà!p#f8ú�x Ì@±$Vô¤Æ¦ºæ8G 7¢nµTµØbB#nÄüŒ*KfZ@AžD=0ä¡“Ûr»ÿÓÓÅ“šbÂ1OÌ4D¼Ë1Óûü8‚-í¬d½ÒÌ¶Õ��N×Þ1H~?ò¾±‘ü�/÷I¶:*Ÿˆ}ˆ&ò¾’×~:ô¾QV—h»û7TúBß»1É~Ës¾_VWÎÌþm¿{}ÞŒE± £øPžFœ'n Œ�5  FCQ4ÃhPŸÒ0Þ ]�tÀ	`´^ˆàE�@8à×`Òƒx
+ªügÓ=“ø!d	´f¡¿
+AYFÏHg²ì¢HŠ}ŽÑ[Jµ×R=-ŸÑŽß½6þhÃÿ|/{K¿Úá²RbvZÉ:‹
+2 Ð·GœY±ßõp�ÈVé.Ì°2WD¸cƒ¾ïÁl„;-¨:î:`ÿf	‹@'p4†]ZCÎÁñq€&t¬ÍÎ]·YPgËK�«ã.¶<ˆVè®6îÕP(J%†m6³aVŒZFàÎ!`B«¾M‘¯‰ååjZ ÷hb©)�æzžcÉP�¨ÄŒˆ]6F°�xÜ’Ïq2QÍÅ>Ê_É07(ÛvÅQeæ·Í?i<þµ^òžFð) ã¹·'Ùk  Õx¯ÖSž×êÐ_�,…XŒ� E6çz+½Ô£ÿ)�‰1à‡ðSÌÒEÎÖ+c:JŸƒX)uç«¥ºdË¶Öâîè£‘÷Î—³âiõ4"§î¡TKqÌw¿¹2üŒ¡Ø’›ÛVÄOõ’&Ü0§b6ó¨ù_óøBÞ£»gñÚÎ¬Ñ·Zx¹³²9¶×�fÈ-X$ íº5�y3Î¡õjçRðe§W\c� �[ˆËsë·äñÂ¶,ÇŠa1Ñó!ï¦¦í³±ÇWsç�o”—J¬–X’5ç¾Ò,"M5�ãÒN·ýÏ-§oñØpÊÿ|7í¦ÚÛŒ�égo€ÊvPÙ¨°n]¬f¦Ýt)Í�|"²1Ñ[\66$q|½¼``{çøG6ªKj‰9‹ÅþÊÎ1Ì‰¤!_QØön\Î^á±IÓ»µ›?±öGÊ,ò—•¶a�+’”[l‰qbêMy¢´íš|€a!Øº¥8U9lÅ—÷�ËkWª¥³kÿPèss½Ëe«?h~´PMÅï®ÔEŒm¸îÝ£ÉzîapSoð?—¶¾sõÌ‹ ¬±mkˆ™¥š2;9Û°¶^>ž/ælEð•Ríqå}“üµ¡÷um¶[/��Þ›WWWfsì}�±m¶zÎÚlE(²êÁV_å¯ŠÝ›„8ÒnÿG2iõFEÌ¬­k;%Ø�ÿúñ~y5üÆ/ØÌï€Ïý*?ò?(k¸ØäcÀÎwÎÝ*ÎÃAŸø‚}{Ä@9¤£!ÎçpjA,9X®!µP¹Øô `‡€8:óbëšÎ9¸gÌýÖ"Öq1r ¡(ióÍŒ‹¡�^Mô-™œúÇUO€UVÖ˜\7GÜÞ¾|s[®ir
+Û¬{fŒ@dIŠºÕÅ…é¸ü¨d“–sO;zï y' ­%Üô¿èòiu¹d]KaèÞdÌ´#öîmžû=KaV=™È'âJ�ç9?è'ï›šúÛã§þ-Žo&E~ ŒÓ·QhlHFƒ�EN ŒCš‹0^�õÀ9DM�$¬Ç«Azà×@¸P•0Þ ²ÀÅÏÆFÖ×^ÝèÀÉÃ¯b08ƒqú6Æ  Œ™«ÔnÄlœün¥÷„þ;ãŠ}ýä½ˆÕJò' ÐvvÙpbš1‹‘‡<`¬†›}ŒB\êÒ÷ûôã‚V°·Ž €‹Ó�ô`ö|.£“Çèã‡ìß‡°-ÆY! ö±% T0j²mCÚÚ~CÁÄ’­ '¡¶¬ �Ñ™!wa:¥UE‰�m ¶jŽKhkÊ9Y(GvC ¨ùmQ€&¦‰<,6ªíŠ\ŽÅrŸí®Ë}.[«9wö«Ë~Ñhr­­qòG‘üg#Oæ8iGì~QÕü/*½�³nš¿DÛ¹Jïž$¯%ò­U@­³`-X;%(œƒ1³½þ;7mzoM ÀaØ¿ä‰mÔ¢x²ÊÚØq7‚à‚uäCŒ­·¬Õˆ¼zø¥w¥ùË›õ?1T/íÂ(�¶mfÊêJ_ì'‚%­T[  æc‰ÑIsë^ñînq±9óØ{Ï`M�ê\t­o~¿¼óž=yFš$�Â(£HŒA 0ÆFÆ`À„ƒíëˆpŒÁ&Ë&	,DI �2¡¬‘&Ïhöì¼¿ýå7w÷:?ä[uÏ-8¥*îñ�[¬Z?ºúG÷�®zž^«×Ó/;Nß €VX¯`` k™#ûÌ§;æxdš3æ×3úÁŒVæ,è§j�Ç²~~î�èŠ,‰	Å<fjr:%'#£ÉIt 0Žt­¯&<Ö%à¡˜kª@S°Ñ™ŸOÏÎ‰ÕíÝS–¨�Kù¦T�)¬'%ºå…âpK�ÄÅ9ž8œ©�Gºÿ¬É¬É1ÎM©áÜ&Ðä¦\� à©©KÖÊtm V;¬Å1n«€È*‰öfwf1Û¥ö]’õÉÜŒ.ç‰_)ÖôÔH¬ƒDíÅ‰–*ÅÅ©¾˜ÎÔ)Gûï @ÉŠ„ËCöblJ9 *²}k7Ã8*v1Œëþf~ ¬ûO*}z%¹¶ŸŸVw¿n‰#½üC~\œ:ß$¯Ñ¦Q¨-F•‚Ovã?#‚Ñ‘÷Ä}pìÛ‚àmF’â\Îš¡÷•\­+ôjmªR>…ð(}±ï|?-Î“âðl÷S–xÌ–OLÕ^´ýuaÆ«þ§;Éë•Ú°½5Í.IószÉ3Œ3u
+gs¡óýVò&Î–½‘fçKÿ�Ê›5•r3‰˜ÎÍÏ…¤¿£ÿ¾fçÿ\ÍÎõ]3Ç ¨r/6ùÀˆu˜‹hAÆÔ. Ã@røÏÒö¾égÐ­ãÉ
+2Ê…aK	µsèè"C6ÓÒßÚ1ÇcZÎ¨Weë	 iöUÙ¤ËX×ôíå—Ùðj»“š²/Ú¾˜3f� YáÃ"Òe tYZýžuy›À¨±	ï&�:VÛ%[1`)µÙGRuòPð÷íø�…™°ø¼'4Tég/(¹ß“âð ½F©¹ÚZvÿPs¾â:w9Þœ.| …Ðû:çEWKîƒsŒEˆEžVê#s@�F  BÖ¯Aâ¤1è¸ Û•C�[Î!ê€Ñ`»AƒÑ`;`û`²'´Ç~THè÷Æxîî(:Ï¶O uŸÍŠó«åOiU�ÒW §ä}5Ê^Øð¾ÜÏ/ˆõ*E.°˜Šˆ4°Ðá(¬Ðža¼´ÁÎnÓÃÃxqJ6Ô#8|n*ÃŽa¼¬„'Y8´–½ºÁN=h¾Ü„;«xÆqúfˆ'÷i_…�dA€y0Ñ�}C¸KCÑ‡C1�p­‚Ä�¡›H©Ý…ý64°Z
+â*nX¹eŽ¤&0k8(†º[&" �–È`Uyb&oøÌéë‰©ÒõÓÑ8Uªöíì2CaÅ¾§Ðë–³ëî�Q~™äÓDva&úÙžuÿbÿCDÕ¸8½Ð›8öùå£Õk‰\Û~4Ë¶úgõû dsÖÌ‹Ó æW-/¿3o1FgÖGŸ^˜{;‡=A8×mŸe´å»—[ŸCP~p0ŽNâ¨Rëóâ¬~üÛzp±}c¡¶&ÅY€Øêÿm¤6{ŸÓ4l‹}IqV/a§8�€sÌ3 \–,žæ«bKôØ0ß¼O–¡=Æž?KßsaU->¬Ê¡»Š½(†ÅN2tCœœ¡Ôñô!Þ8¦ö‡l,1aD}ŸÙ±q°!k.3abÊŠ0¢¾DLy|Q“'YÁHÖñ¸²Ør«Ø6lÿ \˜1E®Ã— °j=�›a‡/ ¸-�U±”™ñª<p"=Óãy”Ÿ™°$fbµIQP·ooç0C"&²Ð@ÉŸ7ä[¼ �hKÖ¨u‘q~T)Ì°!Çs X‘‡3=,QY,ikS�œê5yl:[ï13(N�ŒU–‹‘«[Çz"Ñ“L&”ºÌÖ$]¾b‹§�©Ùââ¸#ì¤×DÅÃþg”^]èÕ@¶oíaWüOÙÖýJm”r_+~§gíÖzM­|ýrûR)@7Ë.Ž“
+†«×YýøÍž}ÇÎbò§ ÃÀ0–úþMÆT]û.—O3ÖŠó*µ¹~At“?
+�q¢ìÜ’©žý­WI~´•¾Ê‡ëÕ‚�.v¿b±…^ú‡@å(y¥6�¡ðofÝä·æ7<—\ëlýÁü<õ{íÇÿ‹LÔàS­ä„Ú}š×”ø°&€õã|‹%¦,,Kt·ÙP“4i¯�å:ƒez,‡n™M!ð–ÜhwiïœÞàäzyR�­Ÿ3÷	p¸ã˜¾½£ã
++b€•šlr\Öoån±6£Œcæò™D×Jb‰ =qB°A Z¶8æ‰ƒ©aíôŠÂ4ÊöÏÓ~±¹ä}U™¡�:y®÷‰‘Ò{Cûç’OÏDoçl¥â~ëD÷‹qöÏþ©1%Ïþ©ïÝäº¿°í»úÑ¢Á)Y±SÊ9/Ði2å:?AL¥¥8Î!œ#-HÒ+ÛKA‘ƒãÐënóªµañ˜/,(� ",Î]Ë8”j0sôåé ¤*Ë2`ûàU K ×„(¾Æv¡2
+IBÌ3œçKJÁ y-²$Jÿp¥ý?rµÍ±n—üH7{ÉJÿýÝbÛtÿƒ’u+ÖÃë Ð‰bÙE9*œ§Ô7éœ¢qöBk–ªx: ¤0Û‡§;ðhvXXÍhi™îîÓ¾£ækûô¿¸0µÿ¢K{§ð5mz¤ŠgÌâ¢¹;¥yG ¥°8Œg•ps³ f‘îˆL“@�³
+è0``�ñmô’>ä@£M{GÅTlVRÒu‘�Mˆ²�AU´B®]TóùÄ”=/Q—xg®ÿ‰¦ €+²
+¦j³Å��¹·´ã7fXéeF	XÙùQ¡6xò‰Ñê5CÁG´© ÀÔÐiJ­/ÔÖ4½À÷ŸÌŠ³«å�K±ßq,kO–]ÔlþÉÐÐ?_¸Ÿ±¶cßÑœ«"FJ­€¼Ø–åçäye¨öÆú++¯Ïò]E±]éµˆyà~#ËÏq­‡k¯­x_`ØOõäªÒ»•×&L‹ÓCç‡±®Y{¶l±eMÜB5§òÍÖê=ê>Ž�à9³<ŠW 0*.LJ¨J,µhÏ~úØÝÔ¡£<…nN�¢UìêŽ™MŒñm+º#ÐøX²X¬‰$ÒR>n³xÄ¾ÏgY‰•"ƒÀ1])ÖâD[��ÈÃn±©ê|O™JILGjSWùmU‹ti)ß°˜¯Û•"Ÿˆ‰ j
+‡d³W¬•¬[Ë–8NÀlÖjç�KŒ,Éc%nb]˜pìw‹-�Ü×-ÖÏçS5÷šC¬&¤zMW]U�Li9ß¸T¬î©­’Å¸ÀdH d¦dÀnˆ¢¯G>W—mÁšïµòÓÊrï¤ÿ™ÔPMÎ•¹Ó×¡ÍbÏ¾-ÎÏ+{7,ÄoÎõšJð–|œa:ì¦Ðk4©žJÔÆNzÕBüZÎãôReØ­ºÿ*å¾~òê,Ûºß,ÔÆ<ßåy·0ÖòÝïFÉUŒ­ŒŽ¼w�þ�‡ªÖî¬ØnLÅ¶,‡×·»\ü·$»¬Rú”ëÞg„þ•Ú”«�çÏö>ÑO®ñì_¶¢ÿ†˜`Õþ‰–ïÍÕ)�µ[›á²ûmGÞ§©:ßMòKlùðxíÏYûñ_×cùïxþ?ìºë®ûÿ„JÄÿ_9rLš}ù£6ÔÑ²9àDF]caøŒ¾7§•
+žÓ¼‚Á;»gf98¢1¶S�.ÃfD`6fÉÂÑXSÇf«¼*64oj0ÎÎta4¢¹*[çÒD‰ù.KrmÛÈgQ€#ãV!,Ë#³Ž OõØ³5ñq<VS 4ìÞ¤©dLX•íHW-òL~©'žrùR?yb6U¾.+vÍtn?ÐI¯	Ät?^•-{ü¨-q¬{µa8˜mÞ=5ú<DS¨ÕÊWû±2Ý!­'ßÿužNÙi
+q˜|ÿßãøe=€ƒ9ËÇÙ›tAØÊ¨³²±×‰G¦fÛKk<ïÛITFìþÍ\‚@Ò……ãë¤8Ú˜Æ!‰‚ÆÄ ×y
+Q’ô|ß¿7Ë&�„çB'r}ç{ÝøÍ’7&�®ØçY»ùdZìXÌÎ€çÎù®2ë›¨ w‚]i!èhÈŽ˜/¦°p2þ- ÎÓO×ã[–éï9ØšÒŽkHpd®6�·àþììÀC#xQ�€=8\gguéé9Ú=„g¥Ô I
+Ë.Œ–ÙcŠOiŽ§ÎÖ/˜G9¸‘é÷iÚÁF•�ã„=zEY ™!Q€>žCˆ‚Àd$T_­B Á¹©„bÖOÏÄ/±˜ªÚwÍ%WÙü˜äÓŽxZ™!D†‚Àýj«ÿ¡\OEÉÕY±‹³~)ø”Ö‚OçÅ©…:¹×óÓBÕµy~éO=û6m†‰¬AoËPé/�©q>kL5ðo°,š_¸ž³¥rõ†Åå®¿³Ÿ¼¦^oLMë"'W›kÕ/,7¯,Ôú8~iVœ87z•1!Ç Ëô¤J®µY€ç¦:—O1@ÆA¶•w*ÿ»­0àLB¹„kŸ42�¹0™Ó²€òf|O­ÿLL�]@ßƒÑ+Å&}JaŸ?Æ7 ´XX
+z}­†xuoþ¨Ê£­‚×Ä¼"¯ —ˆ3 él*dTånlp%¹Ö�4 9&!Ïp�™Ã–R&,Šh¬aíÉô¤ÍWŽ¤#%Vµ~öƒÓ•ôÒœì�krú�öÛj
+S®Y{”i¦Ld!ÐLzNÀÒªÐíäµšÜ‚XfFä!Oˆ¡²X€ÙÌ³ù¼+fzÊçó‡Ó†�Þ„ý”;ùi™±B±²/YMÉkK…	Öã¹iò× ²0£s½ÅÓ…�Ó«’â\CN®6
+->/Ù 0ŒVy_,ÔFÏ½±;xoµô>Îgµž¨—Þ5Ûú1ÇÁhõ•E±½Ûÿ«\mé%¯­ùÿ0Óº-^ž¨X÷)=Y? øt”\+ÄÁ™å_;â)W<™;úÑ+’ìW<¡ÔzC�äÇù ëü"H_”«Æ„Cá{[Ñ_î·8k*=µª~ùôÊîÜTFý6¦Vè5¹žÊ’?¬ÝÓíÿˆôÐsäó_	ûW^yåG>ò‘gÇ�Fã÷¹Öÿ]Œ*½_A1Ä×Ì™Ç\E Ä,—Ù”€’uæãxƒmX4�û8^b�6‘PE@	NQƒmÐ‚ƒ•ÍVØº&=Qekm„£úÎ1vN	'SŠ-y‰•<ŸñÝ·Ð3 TE77†¢£j P+¾88›UDÚQ£)	µd9�,Lƒc>äü äðg2½>´îéåºb¿-_èÿÝ�ÿÅ¤8¿ê~™¨Æ1q­_!H)w¢w!  ¯ŸÈ²­ó+_/y7ô£«	,Ïù¥ÆÍö{ûŽ(ú¥6‘)	yLÈX`Y”ö!ö‡4/€~·!xÜi�^Úëxý¨Aµc d¶ûŸ]	û­g»O´Ý -Xœ¹,÷÷Û’Àµ¬/„Nûlù`š^žç
+þ«"æ|6/v9ÖÝ®|€L…±(SÛ<ë¾(»ÜOD¯so—íü”ŠÈRcF;F»    IDAT2Ÿ1 G-ÑƒJ#ìÂa¼x™~õ½w._„Ÿ—a«�Â�	×vá‰
+œ–ÁAáÁê<V‚í+tîbà–éÎ
+ž¦!Àt€«[ô à#`A™•Ž�³K1µS˜TÙDÈ†„d¤|&�Ðâ˜òù
+A`¡7lyo +™ËrD²y“£
+­;[Ùó}±dÀ"*U­•#plq0V»r=5|x�?ÉÏÍz›óìŸ¹öÆÙÖ†y?~3gM¢ —¼¡^z—eµ‰RÁ–Ë•{Þ#I²“ó–õ¸1CŽs˜ŒöÃ¬Ó¾Â’OS×EÕ÷¾­TÍ‘ñL¿>-Î«W¯�â«Át2µKðy[>âXwkÉÔN)ŽöÒW0ð:ÅÆºsÃÁB¨Ž9÷ôZCä2Á�åTÔyUVycÉ<ÉÁUÐP¶ F àÇ²Â¶@ö"ˆf–Ì#t6ñ—ûÔªâ`ÙLp°kB04Œ&6ÛuŽÆ€ì¨RB(ÐžWË!«Tå\W•lD�˜�£Vä:¬e±ÁRQ*#p‡Oò•))²WŠ5]2T^ëîà&zUÅþ¥`±`^µž$«œG#µ¹$ ª�Úœ˜*C¶¤œ�QÅz²S¬vX”èŸ·�XN�/NLVŠ€{ò°6åœ‚TµŠ5]ª¬qèÇz¬jÿB°H Å1M¾€áuîÃ‰^[’Óó�Z'1UzÍR¾Ëç‹†|�]KLçz­Å[äç•�ïÈ¸8³æ
+1|Z›q£Gµ½—üI?¹¦P§O�¾Œ$¯kÔ?ÃÙã¾{s9ø¦”ÇŠìŒñÊŸ1È|ï[f�¼�À5fÄ‡8ë(3,Ø¢G”^-ùq)Åé‹CïëÚLêdÄ”³Î[yqJ®7äÅiQ~É ¿$/Î™¬½ôêFõ/û.ŽIè~»âž³å8Á¨ÿÅï%»ŸK®uÖ˜ßÅçàÈs$©ŸýìgDô–·¼ettttt´T*ý>Žüß™ÃlÖ.ê£eÜ�R»Æ&SêTq‹�bÁìwaÜ€bÀ°‚›ZôdBCB‰¶!S+�"£ ªñu=U$Ô]ÅÎÒ@±Á)vÉ³�ÍZZ	y@CÑÑl\øª?,ÜYµRÂá	ûàB¾¹&ÛJ“;“ž+QkBŸÇ{ˆF°…ÑUÃ"›,½w%z»&¿ä~s¡ÿÑ\¯ò?M$ùe#Á?kSgÁ¿P®¶HCAšŸ[¯oõ¯÷Ýï6»Ÿº"ïN¦ÙÅ•òŒñµ[Z|©`³ dÉ'¤Ü‡ó‹Ÿi¼µÈ§ª£Óí0†•ÆM4½*OOÔFšd á<lhˆÔTd@+ €°
+�¦¿2?ÌøR¥-/ŸGO–ë‹Eö+­ ¹xºà3Dàº·HµAJ8Þ¼©~@ë	×_l6¯)ôúzùmíå?A(|ûö^úÒÕÁ—=©ŒÏQÕ�[!}InœŒXN1.¡ba0m¾Àjx'«{paÓ4ÃgCZ7€ã>¬íÃ�<>—†°5‚Ãž”Ðì{þaó…2œ’A³‚[»t ¢¹ŽÔàŒgï¶9´x!lÊ!Ê “ÁJN �¸b–l´mºò%ÕØV€¯ˆÏæ¥
+7Ùl¶Úg¼"ºùˆ:3žCžÀ^®×E:åS¡ÜÓÍ/`8ˆÕ®šóÄRü&Eöˆ÷ï¹ÚáÉGZÉ«f–}„³V/~‹ïÜÒ�Þb¨,ùaÍø´äÏê¤^t©kí&KË²­=¶u?ÃþüÊm�ýcÄDŠýIqve5ük×ÝÓï¿ÚÆˆ€Êfç‹ÊŒÖƒ÷géÉ¶Ü³Òÿ0 ºrçó�Á_+ÓÈõ”N¯æ¬Ë0µù1K�jSí;8ff){^™wTà¨Þ]‚�Ë:±Ñ3ÝyúÑzüóq|Á"Ý7KÿQ…Ókp~ˆ�š/À^-!DdL³�Kæ°‚¨Á¶È
+ðptÏï©ÈOAž™rOàˆb ¦'aª j!Ï›Jû<«ÈæB>é3ÒäôT¥ÊÓy•¬í…ìt�TÏÖ3jÕZ÷…YÉÏ3Ä<Þ<½ž$¤ê"[ÉÎdhæ6¦�b;1Ð¡˜äŽg¤ºÞ-¶—Å"Ã´$÷Ï§Û8¢ÇbM~O�×Dg®°×8ËéYª²<Z˜Ac�÷ÝBO´ò³Àf½cÑk  ã2ä` Õk–õ‹µ€H�µ»~Lö>fL©0±ÚäÓ=%ç–™þ‡œå‹Ã¹Þ˜ë5ÃÁûûÉë«áß)½Æ¶dØ0 T¯1�Ë­öÛ•žÝ¯Í-~I™×ºAz•àÓ¶ýxœ^Õ¼§ÐSˆYÉýJX¾¿Ù|»2¶ØßË^x_÷ì[çº7XÙUž|(W[’üœTmì_Sb˜Hq$d-)Eé+†joëõ_Óéÿ_‚-Î7œéõ6?ÌX„Êyò1×ÞýÜÿÙù¯„ýýèG®ë_uÕUýèGËåòïãÈßz9þ‚ˆ—Xƒ«¬vÂ<èà�†lÁ<¼–_  |ÖÐP,ÐžºÜ�F™­2¤æ¨@ŽyØh™ÙµrÃ’>æãpJÑ<ÝëÂDmŽö¨tµ -sbLÔ‡¬ùƒy»ÂÆz&á%ÞSõ�á—f“ó«Ö1›Ï¼E4T�%1íèzfÂPÌLx·DÅ™Q~¾+µòSÀ¬>ÒÍ^bó™Tmo¥/vù3 ¢^_¨MƒôÎVúéÖÂ”‚/Ì¬ÜÚ·ÆÙ%ï«ƒøU‚uÖ¬ý«å¥÷•ÂÝÂ8ÎCF9y~¶”ûûñŸ)µjrêãy
+ÚøQ·aÙ�hðRÒû+C½AÏ•B¥0i\@Pƒ"�A„ƒîhexà•`aúb?8(­cE@¾jëÁåéá°		Ž;Ÿ&#qúâ8}™’m=R-}-Ï×ªvû¯eòç“«Ÿì&oˆ‹]Ýb‡ÃÚQq
+Ã¼d=ÖËÏML™ {&¼ÄÓÜÔÌÝŽy8Ù¥'
+hŸÇ¿tŒþ½g×p—?…ùmøc õ`¬Ûšpç<Ü.Á©Ài´
+h7ðüa¶� X² Ãq×–qÍ
+=œÁbˆ;ôD�öÙØ°¡¦!ækšz6†9×wDØ=“t9pÞ6ó^Ï%Âˆu°©ªyÌãM�ÊÏ´òSfjT
+†$Ù|¢62Ä!ÿ“�ô•š\@†ä%j‘ïÉ½’7ÛéŒ*ýüRŽJ°æ|ôW¡uQ  0H_é9?Uú$)×ªßl÷ÞÊ±'­Ç=ëÆV|ÿ±N÷Ý3í›jÞ§ësÑMÒK³(~½¡j¡N6h3žä—ù–8ÊY«—]Ez´Ÿ_fóéŠû•Ãýw†bÎP`( Ýb³ÇçSÓ°Y§©íÔ8™DSÆurD‹úÄQúÊþ�2 ÚôÈvÝ
+í)áÉËtÇ*|Õ (4Æ LCÒ¡}ôèÖž:Ì×"¸G;£®†B ­ÈâÀ†+bÃU4ðœX‰÷ZÚêÓ¼�£+Ê³ãûb¦­JŠ¬5ÎÑ¶ÚT·ŽÄº^PIS €ËÅÖ�šÊ¶MÛÃÒ°ýkm†%ÈHbaÅÞS˜1�ÏKÖ¨	€²&W‘[’ZÅ:eÊ56l=ÊU]~¼£Æ58«œÇ;Å–ºýT¬G…Œ±”Ÿ©ÕñÝõÐoXOU ,À �W±KÍ¨Ï›’ÅYÜ†BMµT¯/(àÀsuòpð�¡uWªNìŸ+=©ÍäØÐ5ýèui~a¡6[bß y= ¨¢Ü‹ÞªM#*Î—lÑ–�z½-÷¦ùÙ¶Ü›ç[*åÏk5ú_‘ü™Ar-èŽ¡ªkíî&Ì0l)/No¼¤ä~-Í/ýÏ5û×�W¯‰³+]ëþ^zm¡×Zâ@+z/C•e§÷Ó«…ýü"G°Ä±Tmsäã¹Þ$ù<B–§|?ûþs‰#Ç`õïæópü9’Ô`0¸êª«Þþö·oß¾ý_øÂ½÷Þûš×¼æ÷úÈßªËù+ÖsÐGÀŽ™­°‰>­È6Ö{´ßƒ)C«‡ô×Çð
+k]:šC— p`ÔÆjLsT\¬˜„VÆÅê¦î°3ê
+tK¬’˜lÂj-Ã]3¿Ávçr·Â] ZP‹>–“nÈn¢+ ¾,YÇæÓ3ÉeuyÜáÏÄjsf*µ/ŽÉÂÔ[jxÒ¹‹a’›ñºÿ‰nü&FäxÖ=ÚŒft¬ve³ó¥¸8s¢öâVÿ#%÷«†‚ÖàÝï«¾÷oZ­-ôz ¦Í¤ïýç‰�°¸ô±jù}–MyjçÅ©B’²EE1Ù�þ¼Qû[.@+(Õ¡Û£Á�ã¸©Ñ�çþðTÔœ�8¹jtüÖn‹%­(q´­>¼7O¡È�²lGXz‚8‡³_¨—ßšç»ºñ›-qÈ˜²%Ÿ ²’üÂnvyÅ¹•c�@Fùyµ™Aa@
+Lr¦Æ®[‡–ó�úà*±qI¯X; ¿:Î^ôŒùÚöæ>ïÐã1%Ð¬‹áX
+spg¶ÁÅª F@i¾_‚­U<«E¿Åe°œS�Wñ”Z)ÍK,»0žCATq“Ó¥Cã|gl"�®™kðU00]CTâfQE)­8Ø PV¨!â¾.UÄÊ@×¨*.æ'ù,3À8@PµïëçgX¼™›zI>¨)(9ß‹ó‹ZÙe%ùHÍÿX®¶¶e/,{_0TŠ³ç;Ö®ý³CKûkÎOr½ÆâG5Umþ4�U	þ>I_äØw¤ùù¾÷­Aôæ¬8Å–�p"$°Cï+ƒø�?š«Žu_'zÇhý¥ƒèu�øM¾uw)ødžŸƒØíÅ×•ýÏfùiJoPfØ³~ õõP,Çºf±,3Ž@]�¨ÊC©íé{–ªM6 K9õˆ
+h{0Áô"ý¼;8mØS†SæáÖ	¸:…™V,h”ñTj"F#8ÁÁ5�¯Ðý›ù›�HAn@ÛèwÌqËŠÒ
+›H)Úä8žîÔ jOŠJOK‰lFïÝîTb=º¢
+�²iö�d­^Q~…«œ¬Èè†H$ÈÔ”9¨Ô¸ˆ Kziµô	EÇÂbý•¢Á™�«ØXÂOMþR‹©(1ÎQÕ¬=OÆ›¶ºÓuRKùY[/lrŠf±*äQOy#—·%ö5Ù©©L#]B †fI¯LJ¿06 
+Ì¦]F@Ÿ¥eùd¬×¯©¾x¾{C_­[S~G/y%Ã´äýëþÖMËe[÷/÷þÉû¢üÜ‘ÒÛ +ÎÊŠ‚ÏøÎÍ†ñf/z‹#*ôZCAœŸ[óÿ1W;$?ç—KvÜ±ïéDosåžNòšÐùq/}I#øûB�´’¼nuýy½èm¶|Ô÷¾~`¾½iduœ¼|9zŸdÍ’óÝäÕžu¦¶Y 8?bÉ^úª’sc7}µÀv¦×VÝ¯%Å¹¶x4Ê/¬ýõ‘¿q~œöçŸ€G~ó£æoÚè;ßùÎ«_ýêgÇO=õÔæÍ›ÿUå]w]tÑEÜ¸qãï9ò7ŸÍG¥jë‚!K¨[PäãHD‹]C…@—é�¼`‰hàÅ¥¦XbÓBm&W‰UKºŸR³ÌVû(4à¢>Zckd3ú  ÛÇ‘’*«ÀœÞ?)6kBŸ%¨Hº¼ÛQ5°Ê¿)*Îhåë5€�ºf=^˜FOM|Y²VªÇ%ë
+Ö©yŸmÇ×)S¬ûùˆÒc�ôåçûŒµºÉµž|8*Î¬]rþ ÛñuõàSs¬{,"'Í/`ØE,†G¾X¯ÿ^Àœ³VµòÕ<³âôÅž{sQlÍòó|÷&iuƒ*t—Á�ëù‰´AÐël,•-,¼'ð¾îx‹q´ˆ•ªˆ ×>µ\}Lëÿüv=1&òê£Ñ ½îˆ‰1¥jí‡‹ñœ[ŒÊŠÓ“ü<G>dËÇ¤|²3xŸÒã®ub:ßÿ»ÐzÄ�{49­Ì¸Ï›-5™¨!l ZTQ‰URÊ5©˜–9ØKt�îÃÞ	|e‹ö<ß˜‚Wôá€‚ÁqøE C›àÏK¸½CYÐ @1oÁž“ðo˜WÐ÷aum	~
+Ë«Ø…Ð§Ö€Žðm¬vi_OoÓ>F9ÚeîS;ÀjÇÌó‰€w
+ò4‰žQ3f÷$»ÄAÙ�Gc=n±~¢kñœL]¶[EmÊ½;Õk=Z–Oäf¤YLm¯¿œÈY‰Þe‹CÆ”[èç•�[£ü<ÁZ‚-ùö£ìÅ®u�àÓi~v¥ô¥Ö)µ1É/ZŒÞÒpnv¬=åðóIr®2Y¾Ëw¿³ÒÿpÕÿd7¾n´ö‡Ize’_87êäfô¾õ;ýó’ì–xÚP	1êÆo
+œ[£ì
+ älÙ³nÏŠ]Q~Nhÿ<ÊŸWv¿^èMƒü‚D­9”¯Œñu�ˆ�€çd5u«ÆêôO&ñÒyºŠ]´lFp4„M‡éÓÛØs,ÒmM¸7„ÍeÜÑ¤»'ðêíE,®a¯#Ð†Š–	t	7hÈÛôø~yN†#‹M„€¥…²©��‰©ÈZ ozu"˜”Xj²š”&žRÒÒf½¾ª{|0ÐÁ’>Vb“Ö\fD<1¸<&ÂŽ¶'ìƒ©m©²Ï¢ ‰iS¹Ã²›èªÍbMR`@-Uö¤„Þc˜krb¦dª"±YSQ)ÕaAbÙ,øXŸ²'zÂ�L�ËÑØl°¢üIû`¢'9¦KE-`@uëaÄ,R[ëÎw´ih*ez�Åºù¹6_®¹ÿfÉÇ8[Hò‹sµ¥ÐkÆ—µ»ôÝ›Óì¢B¯k§WrÏhíåQr5B!Å�¬8+/¶'Å�ðo„<0ˆßÐO_Võ>£Ì¤`óÊŒÒ{ÖÝœµ½Z›[<nÉÇ:ÑÛ%?Æ0±ÄS ÐO_fÈ—|¶^z÷Rç†’÷µ¼ØççÔ6‹­LV_%×
+q$É.á¬»µqØÿ„ûãìE¯ï\÷\8rûo¡ÃçnOÂ#¿q£~¿?;;ûìxÝºu–eý/º†(
+‚à¶Ûn»üòË¯ýøÍ–×Pxh¹X–èôÅ ÌÅRL‹!lnÒ#!lŒh–@�ò:�h>Ä©6ñ5ÇÕ‘”Z“b¶LG MŠµƒ³²N®«<æØD��ãš°m–•áXÄ†å&D€QçþVze¯XSËÀã+ËùÎH�5u�c’™‘œ¼’µ[“¢÷ÉÜŒTÝo!¨nò*Á�7üÏ
+~âXïúª÷eÁ§GË×Ùü Òë ¸ä3J¯é¦¯^é€âô% ÀÙrµòÅöÊ…qòòÀûš1%Çºs¥õÎ4»¼Ÿ¼€=ê:?r¼®Ñ°8sQ^ìðüzmàÊÕCsó�Zûq¿´ˆ�±C¶sàÙ`‘±NžA»}ukùÜAw,��ÈaH¥jÔ^„,)ûþOµÅq~¹Ò|c”_Œ˜ÇÙDŽkÝc‰§³â”ÅÎ™ÚèÛ·"&½ä•5çÇf:Ùurpc(fy£ÖSeîeF$FPFÅ¢yPA:€£	,2 °ÿ|@‡Ô0œß…'L	N>>åÁX³Ë´�'pBCââªqve.ÀÑaÜ)ÀOa‰GàìˆþÞa}sD³
+	a��Œ±ódLºØX-ÝYó`D³ƒ2ËÉtt¥§E[§	õNµÎ×¤@¤'9©©h`%Ñ’‹„žu?ÇÄÇ5…žØg£™é~i¦÷éTO9âa ò�[ªî7”¶ø´-öW_½4ø`ª¶
+~¤P›‹þà/ñûÉµI¾k]ý2[›Ú z9`ž;=ç‡¾ÿë¡òÛž}–[tä}ÚŒXòQ�íó?îÆoËÕÛÚcLÅµo¯7¦a‹}Ž|h¸zíâàRtÄ>eÆ“AöÒNú‰Z3ÐåínÊÑäÆe¨2²cª¬ðîñBJhF"†8Â&
+ ÷›˜¦o-Ã]cð"ÖÍÓ*pz“îñ¤.<Àj¬¡(M¡¹šïìÑ¾·!œ`.ëYhë�HËúS„Ž)iõ¸ä¡".KÜæ�ÏªAF¢GËV¢HôT½$–sãf¤ÖÊÑ�q_>nˆkî�cR‰ö$‹†d«UlŽMY 
+ÌÐÂ¨¥|œˆW­½Ù6kk²X2‰Y‰'‚õŠJANß¤cÖ3†DO­*Œˆ¹ŒÌé×¸ñäãœ ÇÝŸDRŒÈåv±AGº!‘K–2$W>©-.Ÿà®u¯äÓuïsÜµ`XLÕŸÇÙ¢O-v¿¤ô”1å±Ú‹zý¿p¬{-ù„cßn‰}«*¯ô¬;\”6~¸ =çGÃ•?ÍÕ)F7²âW<J µÙ’�&ù¹žuŸkïælÞOŽÔ¯ÕTá|1Üï
+…8ÔŠÿ‚À­‡�üx»ÿßù°cÝÍÙœäÇ‡¼/…ÖŽ{@SÍw¿ÝÏ/DŒ<ëÞñÒ;s}’6“QqösÄaÙïè¿må0Oú¿íÿE� ðÐCÀÚµkÿù[óàÛèM-vß41¥.[ ›À¢!0�Ðq­�ey…­˜�(ŽŽÇ*‹fo�mt°Ü5ÂEßgÙ¬j¸9Ä5ÎY1)¥²f¢ÂÛcF„/0C°-– » ÀæƒÜ„>o¹â(·l=T9€¨ÉŠ<Ð-Î�¼bÝç!Ÿv¬_¯Dïf m¹Ö¯²âÅYÇP½^}‘oñÝÿˆÒ—Ö‚�q¶`	~"Î®²Ä}Jm¶­ò|—%÷ûáã¤3Ï»Ûsn Ág,«Ûë^eL•³f>G5Î.À²¡ÓšüïK K€40ZC}äQÇñ ‰N®Öo3  Î“ÁàU¶µ·(|Ûí§ÉzÄ¤T9’gAÉÿ’R›²b§m=Ìùb?}e¦Nµø‘Ðù^7}ƒÀ.¢êdÏ—¬ë1Í0GÀL�d¦Æ2ÃÆ�'2½ÚAîá¤@ÈÊ`Ñ@¾·UñÌ¦]\57¯Å?)á6E‡Ë°MBµ‚;3XDT5D-z(À�-p(‡¸z�~™ÀL
+ý1v±Ó¥G×ó«–éQµ”º	,"'ª¤êlÃ¬~"£Á=´Ñv‘‚†µRá¬ o`ŠšP¡<œ™: kéÌg"£’!K ÙÙâH+¿ 7åÂŒ¸|¹æÞ¬ÍÈ�ÿñ^öªV~®Ã¢L�ÒL_h³6 *µAé5¡ý‹•è­ô¥ãFõ]d°üKàþ@©Mq~qÉýªïß–eg·“?så£½Á)µA›	Ž-KÞ!Äl«÷áLí(ÔfG>ÆÙR”_8Z{y§ÿÁnvµÍ�ÅÙ›Éë œ,?¯Ðk»Ùå¹ž\ÈÎáà…$Sí{1Ÿé©HW+r&Ö‰jZ?]f£m�)©˜š66|6d¡uÔ|·�y°f/ŽàX4ð‚Z¼°�.Ã�	Lû°VByÁìah[PkÑ3SürCÐ‚'4M CS ¤–Ê"‘0ÂÐÕ`–õ¼r'3NF*¢AÀDO£7‘q,t5ùO\Þ?‘[1‡YUyx ‡—óu‹“†¬Ynj‚�öP É8
+�/r¯Ä€£É^.†ñ@´"ÓH�e3eaÜ×%—÷ªb!ÒÃ¥†ÐåM—/7‹z¤K.ÃŠÜé±å|‡@ €žÚ<d!ð:ºÂ ±X˜RB$Ax¼YóÿÅ‡µ)Ìx7»Â—¿Vf*Q'§êÔ!ÿÓBËòómû>ßùIVœÉY'É^X«\'Wöâ7+µ€{î÷âô¥ƒÁ%†jÆTÑå Ù‰þ’¨àI>­Ì˜6#%ÿ‹®»Wàq"'/NÓf8¾�¦ÓÈòs¥8j[Å6ÎÚ®ÜCTê$oðí_TÂ¿O²vãë| fË§”^§—
+úÉëÇj¯LóK8ë,Gï°
+½Þ“�>Çþ‘5¨Ð¿‹¯@ë9’ÔßøFcL·Û½ýöÛßúÖ·žwÞyo{ÛÛ~Ï‘¿õlvá»J¬Ñ4Çº ÆÆztØ†!üÏj+L`^CžÂBA™D?dþÝ¯H×Ø¦¶9RP:ÄÇ�è[ÆÅÖi5]fã}³¼Ö²[*dÀ2Ê]Æ90‡ ¼…£ÂëkžW†¢™›P² 3ã–å$j2#ŸL�cêÉGcurj5ûžŠ{s¦¶+3T¶|"~ý°wÃâàzO>‘èí£•?Nó‹3u²¡º%ž@ÎŽ"¨öàoªþgé«²âl­Ç�m=ÂXWˆgÒì!žQzc’œ“«�dg-×ÍZÝw Ežw�ÎæY]v.ÍÌshè{+‹§Úö¡Ê$(2HÓ-ZkËNˆ 4 B·½3,ßÑïœ£ôhXž‹mû"°ì"l—ò@QìžW¨m–ØëyåùIýô Ò‡çûY±3×[|ûgÇúïñþ5-NËÌxÕù~®7Djcd‚Ìp‡åˆÈ'°—ÍR›h6‡•a<³Kx~L3%Ü2O?ƒ«rh·à¾øY›c8®!F`2^
+sìI|iýš®Z _ÖñÜ 7š5ìùRX*áÉ³æö
+n/ "05¶nTT<ôû&©ña‰¬ÄFø«ÄF�ENÞ¾|§�'ôSu> ;jD"!W .‰CŠ*S‹µÆ/³ŸrÅ€5ä*SÛR½®›½ âüH /ÌÃ¼êÜZ?d‰iqaàü„óŸ®{Ÿ×fÌ±îÌ‹3Ž­ìæ.Eï¬;UúÑ8[f 9ëÖ*Cêª2L›9¼t¨|ÜûˆüJÂ(.‰    IDATøÑAü×úU'zwÉ»L©ÐëuÉþi5ü°`‹iq¾oÝË€	»ßWfÒ•OfjçÓý—X0¾X{Œ  æÆ²°Á��È•Ü”mí_©·¯Âk,¬³ØKðË\àâªŽ·aOžœ‚×Fp¨ghèá…£lg‡K(+Ê¬¤Ðäà¦4ŸƒîÂ^ Ù¥£™	R8CÀÖZÅ�ü™ÀFßcnI,	ê9…eAjÂÞŸ™z¢CVMMÌO�[“�ºsG_mL1$Ž¹&€E&‹¨’Y¤í–Ú¬/Èe µ@¾ÊûÁÑd§ÇÀa™Ïç=qH€#Yg>;Y")Àqçg…‰ôxY´	üÈ(ŸéÄTÖÑšýËH�ÌÑL¨0~F¤©ÒÖÉ°ÌÚæhIdI±‹a,ø2äÄj›ÅšÃáßØò1)2y½è–8@`��¾§Û{€[	?œg²J6ÇÙ²àÏÔj_ÄÏ½/1ÖËŠÓl¹7S§H~,É/u­{Œ©DÙU¤yVì2¦B`yöÏ;_+Ô†Iè‰a‚˜…œ-´£w	ÖœyI–íÌòó4�ÔÂÿžågöòË$[|šc»~”a¬Š“öãüRG2ä:ò@'}ñOÕ§žGÖ¡ö;‚ùsçÈo¼ñóŸÿüç>÷¹Gyäe/{Ùg?ûYÇq~_³ó[óàËÍ’Ù_Áum:XÅMtq‹ÁóRê8XiÓ~N
+‹Ã¸«EOMò³º¦bmÎ<D`<ØhN±�å˜ú$�Fà.s@F*£¸Î³œœ‚° ã0ìé´ÄÜŒèÙº Y V$ö[Å‡eóÌxey8R«‡œFÅ™�õÀRò‡ŸíÛs½>ÓS¾|(U[8ö8kòm~„ ÒbGÉýÎ ½ªþ÷¼8U›Qmêœ-Fù%ž|À�ÏXHrCï›Œ-ÅÉË8_ü™,?×woÌò³+•›âxC’¾  |ïÛ®×Ê30Æ—2J“ÍŒ7m{¥ÈmÀ,ÏO@?x(KëåÚJ�Ö`´E ÑŸ9ö»Y~bÀ\çGV–]À„8'/sìÝ¶ýP¿¼\¾yfñÆL�T²oâ™8»ŒÈ|¶—]Á06ä‰Ì4ú:äH%¾ëZY\)NŽ�æÀÚf®€.‡@·è¡Ž °:ž×£§B8©{Äÿlï¾ã¤ªî¿�Ï9·O/ÛYúJWªˆT#(L°$1Ñ`¢˜ÄF$1>Æ¨1Åc£Æ.üÔ(ŠJ± €‘ªtXÊ.»;;;½ÜvÊóÇþÂãK!É£¬xß¯ùcîÝ{w>sæ~ç;÷Î�0(�Œ.ÂvÂ14.+6´À}Ñ� ¢ØFC;Äª0Z�Fø°j
+€ß_‚}•è	Ém|M?éKHûØ[•èd©y‘¡J"DlÈäÂÀ|']3@î“ì²â5’ß/í³Ye††âr‚	-ÇÂUÊ–"íc�Ö�ö²*­7Ý±nÇ8•·ÎWÉ¾¤ùõß}KW÷‰|Ç¥}ÚK?	«K%Ò\r¾b(+A]]¡k¯ä
+×Q^¯ÊköeÿÚ+r±®½Ô”|?b< kK’¹?„ô‡…ÐÈÙò¬xàÿÌïiò»ßƒ’l—Ë#i-–¿o»'ùÔe‰âÏ«ƒ?kÎÞß#:ƒÒ¾íÅê
+7åí¯©d�®¬vY/™ìÎYÚ¬›Jn)÷lP-CÚ²³<¹Né(Òª$+q¸ó¤‰F¾¼MÈŠÝ2øc¸§%LÊLXi±¾^¬�³K°Ç€žeØG@7¡"`ØÐÞ]Ç½ü£6ñR¾:/ö$Åëa4ª�w„-@8P²Dª–ôKóTÇ’¬�B¹ŠôŽËûvÛÁ*¬Ô^§XÑƒ�+[%œK;£RÔ�IR’Zy±¯;œã%ù:?´ÓSVÃêÊŒ=©ƒêÝÔ=Y·!ÃLö…¥t�FUìpALA*äýY·GXnN¹Ý\ÁcR>CCUÊ~‹WtÌý }G�ÌbÚ‹YiëÜ,�D¤ö7–¬3lÁDÄÓÌ¬WŠ!õÕœ=9M«ë´Õ�æhÉqeãþ"«�‘UWÜa•ÆŸÊÎMÞèÐ~i‹šÎÝòßã¸'VÕ<¾qG¢:ðóXô¯ŒA¹<ÚvNÎ[0ŒØt¨Lö¹¬‡*m¢¬G<úSEÇÇ©³ìÓóæ…>eEÀ÷GÊz˜Ö×diãÎcšú¦íœì²ÊÎèŠÀõþÀëÍ‰çCÆPYq×G{Q}a4ôãBq¶ª®½²?õªBÚÊr‹Ž�ÉÞ¢3Ñ'¯Å(ý�›È<öÝY²fì³4iW4pƒëþfûSGó~dO¨ù/ŸÌ÷A«÷ÛXŸÉ~ät�„tStDpŸ’HFHÌV5äÅ~šiU8�¡e‘(ˆ]Tr e‘6PMi@ ÙP HŠïÀ"$†A6° E[(Â(%î2¡x‰€,#Ì ù1neÍ2 PT*…”yÚ#(oGà—QÑ~ŸÔâŠh™1r³Îh¿Ô˜£}ò6Ó=Ñ¯¬)8ã¹0üÊÛl™ði‹l÷d…4–œÓù=‡žXvN#8Mpš‹¨®¼—1/Fœ�†æTvÜaÿR€Æy—ÑÔ78¯(;Ó@´K¤YQÖÅ*ßÉd¾okK¥Iš¶«\>Å¥tm-`À˜QÕõFIj)§ëÚ&Ç†ry<éünnV¯)«ó¥+ò&U[nÇ°ÝqGBû1ìæBuÜ“Ue#ç!Ç%K»rùúµE±ðu…_ùÔ¥ëºònÞžn³' �_y»èž‘÷`�Ó4jÛâñç2H À€eÄFŠŠ2„d¬ÃgÈE±³M'ÈoCk¶Äaâ^xæ`S(eàƒ¬­@§eaC%úÊ>ñP�—ÁoAk¶"00ÛÄ;Ô;É·Ð2âƒ
+<ÜVipb „$P$$ù±ßN�`K(&'!s�¤L'lvYÇsÌ¢Ò í.û¥fJ7ßkpx4I#Š¨"Tp&ø”÷ÓåË$œ—ÉA¿¼Áå=£Ú³Œ×ð�Ð0¶¢†ò–åžlhËÊödYÚíÐÁnV•wmg2A<‘û}@}­`Uð*àÓ_(šH¤¥:þ#ËæÒ)ó{r�[eëººÂ¡CŠÎé>åMCyÇ¥ýCúóœG9¯à"&áÊkeÆeÊº•Ý±Š´Ïe}2U©Ñ¢§H°ÂD*±�†íG"2Ì"Hê+Ç‹\v °SÜ©C?Žàƒâ%	Ú`i†.dH!�”‚0¨þ¶-Ò%hì"Q4ºûàì-ÀV¸Y<O�Và�øA+%#Ël1E ÂHBê»`@-FˆxÊ­§€u$À1É
+ãª‡˜D¢Êž€´‰>e®åÝ~ ’S‹Å�-Àå4s¢„¤
+‘2A˜	#ªl*Ð^
+¢qn „	 	•·§kHG 0Þ-cŸB…ª“ƒ‘›³´ÊOÊ~RŒÊ[BÊzàý,(¸C(>’/ÓT(–°^ÙBËa¢d®Ñ_VpÆe=‚Æ£–;–‹ ãaŸö¢K+ÒC_ÞØ¼Ú¯¼GpJÓÖ
+çaœGÈ©ŒÎSðÛ©Ê	ÊVÄn–å52Ù–+Î.•Gb” ´?¥}¹ˆ�IŒö+Úç}Î•®ÐÕ•„´˜öäpðv%]Þ`º0Úk9ýúBMY½»ek@y—àœÏX&¸�kÚÓëâgÉ¸£dŸ¥Éë1ØÁku¹"mË•æ0Ö“‹°aË)áTÎ'X¯œõÍWÜ?Í~dÿå“yŠÞ÷µ­;ï¼³[·nº®Ÿyæ™ûöí;òÂ„)Ì
+Éàª$k1E‡yU*È‡A’@w¡�»ªÉ	~Ô‚Pµ…šØ¦˜$$Ðò"¥ P×îe«MQD Iª¦YkˆdBU²Ý7ð7ùÂRÑ\F qp{j; ›ûlV�ÚZ¬1B ‚L*ä«�¨¯¤XfULè!e“BZz‡®EˆÊ8iÒÁ•ƒÊ›‰òw-:ˆàd¦4·àŒÀqÿÍV[=[&ûue¥Ëzc”AŠ¬[]ÅÊªmëôtñzEÞÔ–|˜³jŒò”õ0­³ü�wtå5J(ë‰�™h½¸¢â>!@‘×9N@„B3¹ë¬r?I†Rù"UF•hì%Ó¯‚“²Ž;#@”ÝQ¦=Ù²&™%:w;!­m­79nÁIJ{›ödŸñ*ãqÊú¨Ê.ë“H=]šEY½BöÚô$<¦?›wË¸#i~+Ï4•4:ÂW©È3½Z_B¨\ájÈŸƒÍ'H“Óâ]4+vîé¨Çq{^l&`”¡‰B!½ã0nü%ÃGã‡û «ÛÄ	Œ�âŽŒ¥PÚ!n¯AÓ‚0DÊDIÃH�0³�ÖÆßwD‘
+–æÍT¸EÑ&ŠŒ�)4Ï…%(F…p€Žû±)H™AÁAÒ–v{p€V»ZKéŠývŸ°²!*Y$Ê+™0i‹ŒS«MšßÊÛg:¬;Á}…ëmz‚IûéÊ2ÙUv&sa­ó\Ö;S¸Áe}¯�4i‡*¯¥Â§+oõ©i¨Ë(¯lË>TrOa¼²5ùÔÁÜŸúå]!¶;Âe=0ÉÙîÐ€²¼£8?o^dº£ Ð�Üï-w¤EûªòzU^_´Ï(Ù§•œq«K—¿o±îLø`q�´;`ê$ ™Ó8ÐnGA4qû]±‹?Á}êÑ…Š•EFFŠõ¦"WÓá�6Xš„·$Ð+#šáÙMüº6xÅ�t+,Ž£“³b3'ŒN£}Ðå=ðÄjôÕ ô)Š4€ØÆï4¹”;Š"… ÚÄ[?Ö@õŽ“j¨À!Éw«H€2ç)€9ðeí>­öð+r!r<”ö¹Æ€øHÒ�ÕZWàÊ"×BXâ änq×[¬[–‘2×°vV�¤ ÜäØ’,¹&‹¤˜¥‘¼ÈâFÆí- TœJ»Ñv{dÂüj–a&pžÓ°òA‰E ójÙªU×V’
+“+1B¸in1¿êÒAY{B®ÅzQÚ'ä¿�ñÚTöNCYÐŸ ¬[:sM¦|%çŒ
+í©{	9 Êëuu)åõmÉ?¥s¿mÉ,ÒÕ¥yó[šÖHYwC6 ?Ö-vZ$ðKC~;Wü‰¡.W•·	I´—¯rÝÓžÊE m^äÒþ±àµŽ;8_úqDRSÞçBMeîrÜÁçN´gžb¬J“¶øõ'1.d‹óÒ…_îM/W¤­¡à_,w0ÔŸ0”Uõ¡ËƒúÃ*i<Ê'm¬ÿòrÌûÎf?ò±Ç›3gÎ½÷Þ;oÞ¼×^{í�øÁ~€1>Üë—sä[¸»PÊ2ÇEŠ»Pâ@#¤Æ&…2F2&ÀÍ‰ƒAÔ›
+“�#���êC•9nÚ"ÆUbK©S¡FEz’ã¨¡Kˆ [Ê‘î
+MÒPž'«$jrƒ‰J; vx@¢`«Äª
+œkòî‰I`D9¨i§Á'%òö™Àâ=üòº´36¤®$.äìiåUMÚ&‘¤á°ÿ¶]­Uš+_YtÇD|¶Ü1Àü>måÝ*¢?³¬1‰ì·ÝÑ%{ª,(›§)ò&„óÆIÚ_(œ¢ÍqOÖ´óÅËý„Ú(ÅâYÿ_©˜0êB(Ò²÷u‘èÅÂ˜Bù‡ÁÀÓ:	­"þ+!
+œUG£§@Â¨@YŸœù=‰´—­) @Y]Îü®Bö’Ê–fS^gÒ“T²§H‡kdÚUÖ"ˆº¼JB¶É+ãÊ–m¥1•2ä´Šw¢¨O^4»B­Á(¸6tôÂ—ÅÒ:Ô—`WOtivfac-úzô]ÅÛÅÊ2@ÿ¾ø‡1_MNÞÊƒ Ð@E
+b[Ÿ˜	Ô8* LHÄÐ‰
+2"HñäG5Eî¤ùAŠÚPê¦óL­QÒ:±eäRa”8
+Ë©J¹Ì„ž¶Oa Äëôçâ¦Ý*r8h:.cÄóËóî,*dÒŠ�éòN¿ú¦ -h<¤#f¨¯©¤¹ìœ–·ÏÖ¤.ë^ºJWVv”æVçbœe¼ÊtÇô1ß½”ž�+^ÂxMeô{
+>Xýq2÷+™4qS¥�1—õÑ••ë<,0×¤£ýê«º²
+óëOIÂòýYÁ‰‚u^ÎþªBÚÂÆEûÌ˜ñP»uv•ñ8€ÌE H{…”Mr»Íê, uSÑ«§j5¹i¸ÔJ(P�ATŸÛ5¨$
+°-C0D…x�j…E:Ô¹Ð‡ñ89ˆ
+°]Q*Á?ê·SÜA#Š¢Ñ�{Ù¢ £€-ÒÍâ®*úô”{¦Y‡GÔ£,2´6¾™‚Àq‹</©(l
+GEŠ„0 �·¸Ð°f`À‚)˜ð[<ÒùåéIªø02¹¦b×À% \æz;+1°ü¨g�¶ºD{ê¤ £  I¸R�bå˜äÃ®FRV‘bs]Á.€0CF “< ŽH)	1	4‹×qÀb¶Ë,¨’2>IGµ¥6˜²§ ]JÄ�ûJÎiþ_›ÎdÎ«óæ…ÕñïåK3}úÓºúšKT ¬Ž�”"m“¥�ùò1¸Š¼ã¢,íèÏªêûœö`4(‘Eóû•KÖÿ3–}JÀøBvÑün®ü#g}ÊkŽ;\UÖjd¯åŒg¼¦dÏˆ‡¯([çù´ç4å!ü.;A€†q£¢®¾n»'2i”HÁ™ŠÀMŠ¼9W˜ƒ€¨ò†’=�àtÞº0ä¿·d�³Øyühö#u�8ðÿæRÇÛ�<*÷Þ{ïe—]vÑE>üá‡þè£�V¬XqÄ;FCDC€»Ëu,
+v ÕbP:Ø^ˆƒSû0H (Œú¹¢,#_ƒµDÊeBAFr^tÔâQeÎ|=è.×2 GpÐÆÚU\¨À½“n<D˜Š9‘�ø»-$Œ¨N’ `q%,7Ù<@.HÍY·;Av·à•>RpyL%M•PÞW­/(;£³ÎHUÚ^é»ƒ‰°ËúfÌyc2w_@~¯#‡®¼­à¶²}Á‰Þµ§8´?  d‹çØî(C[ê¸# ä€öwÎÃš²ªX¾TÕ¾Èy%Æ)U])@e¼"_¸8½¡Xœ’+þÔçß�<æº”FŠÅóTRícyc29[–>’¥]¶ÕO’{ôº–1 ¤ãl¹TgÙ_Qäõ=‘²¾AíïŒW*d‡¾ªÊ_¨Ò2Á­º¼##3ižÕ¥¬³“N¿*}I™ö@l*²˜�´´Ú'�›Ý²²ueQ©œÇÁfàê(N@ÍˆÍEØY�N3á  É¬…¯!�óâÃv±Ü� !¡ ¬¢à~¶8 _´ˆçËâ€��ä €
+3Ïº¢8Dí«#Ã�õ$uðw‹\!BaÜ­ƒïö£°Å#‘<­VqŠŒK’Ðv÷‹tþJº„\.|N«ˆ…•÷+•�Î	”2³Î¤VZ`"Pv‡™¬�BöPÖM—ßï(üªÝü¶åŒ¥¬ ùä2ö4…ìµì‰EëÛ!íeYÚÍy£œ„Û…L¿h:90e´
+ãDSb…„Ó>íÙ°ñH{q>eµBHùò%möÉ”ÕYô¤ºŠÉª¼‘²zU^ŸÌý9kÍ²'ØtB¦!}”qNµœ1 ¼äLJ0Ê
+�Ê+Èa<´Ïoñ€+ÈáQÛ;-ICñ(	T£1{øcŽ( �[Å*:ÚÄ2GdO"7ÄÑ<ˆî÷F`Å�œ‚b	XºGü±Þ¬Â*Ñ	üõèÛY±AFá,ßO¡TÍÛÄ/#hä(i^”ÔäF@ZØ†Ù­
+©ˆÄðÀžRÃ:z‡A:j$¹(
+àYžaB@%&YP !\�UdvPÚN�ÏFå}~âÈÈ­�x‰#q&HÂUL®`kƒ82\Ç!yW™ ín¤ÑÝ#¡rL’34Z§4}èlôÉë«”­%n$
+T€l–Ýín®0tÒžt«S4Xà""oÐqQÆå"ó«Ø2Y- jwc”°Æ¤]*Gøµ§	i1ä5ó÷èÊ·„Œ“éßUÇgîißL¤\,ö!$Ê»ÛÎX T2¿©J›R¥¹¶3Šà¤àA×Ôž~Êe½ƒÁ0*ù´8�éÊŠbiº"mÉ–®+ÛÓ2æwüÚâ¾ÝOUÔÙkÚ“[
+?7Ô	NúÕ:²ŽG®Ú›~•�¦Xô~.–s* `”wÜaÚ‹s:ˆóã1×’Ì>	ÞBpš�„¡.·é@¿úR¡ôÃ�þÐQöƒÿ—o?ò¨Ø¶={öì¹sç0  ‚ÁàÂ…c±Ø„	÷úeºrE‰	òS!u~-­ŒTR˜T•yVB†‚"
+cPz*r™pŽó¤X- «eà*`tWl>.p×gEÊ@~)å�IeEšh±^ÍØ<Ìée¬¦¼Î’EªØ.rŸ†K X#¥­JiUœF€k7r6¸Ìjl÷Ô,­°yTFÈå•
+n¯^ÅxOrP~?oŸA°©ÉkÊÎÄ ¶¸£4ß§¬
+ûïä¼Òe'ÔÆÏ¢n?ÛaÛªòAÉü–"í0ŒçWóåËuõUI: È›H¬âæ)ëY.ÖçË—É¤ÑvÆ	”¥Ýñª¥ŽÊ>ãÙ|a&ç%JûéúfŒ÷f²—kÚŠPøCŒÞ·íÉ•�º.[ç¸V±TþÁ­œU¾]œÓ|éJ]Y‰qRQ6î�FÿR6ÇŠÓSÖw:PB%“GˆÉ8Q¹¨d�‡ ¥ýEw¨BÒ%Vé—Z˜ðçXDˆËiâ%nv“Ã\hYn)(œ«	ømè¨Bc ”Fñçj4] s Ccšà)ô´!G“"hx(‹&
+&$Ú`q�T ¢£n2
+POÕDÐ RqÜ;FB)JJ�Õ‘A¯"½(ˆ‚èà �y”„R<¯€?Å›tÞçØ*Š1¡RÀ
+âÙ~©) oux%å¯Â8ø0b0 òËÛœ¨Q·–ÝÁQý©�ö÷œy€"“ýœÇCêkLD‹ÎXCÞ Éø••{ª„K\È-¹û0` �²îw`äœ5Ô×}ÆÂ’y¥çtMÞÂy%€�q€hÊ:EÚUé{¬h-œ—/þ¸ìœÉyT‘7áóÉk(¯)º“ty³&ä“¶»¬wÊ¥‘€Ô\ž!DLˆ€+!	T„ "o·Xš-äŒh2Pœ‚ @>Ô !Õ@U~Ô£ vö%ßRPU_‘‡meØïG}Ãhx	ö˜p�AQ?¹ú¡Í�âaö!À&ð¡†0�ïWáSLèD./‰¤�ªv³ÅQÜ?!Þ� Á4\A ná«…ˆÐ;ÃÀrœÔú°’æM!·­×6æi-Á 42Ò*ä<å‘f·ÌÁ'@ÝEß«À=}RV'Pé«ÓH¡Éî”
+IJBD
+ JÑ6Ê 0ã1ªÏºý^—3.§	ÓâDG•D#%¡˜²ƒòšƒNP@€UÅ®N:ò4S>*Òšˆ¼­.x“ËúJ(]´.ùîÉ›ß�Q•µšúŽíŒ±ÜS1d"¦9Å±»+ÒÎ ÿ¦5M"jëŸji¿U•vjÊÛM}¡r4üGÇ˜Î_ƒ@äÌËÊiê%ë‚HøÞbùkº²ª2üCÇ­Èïµv¼ÀEØ§=çWÞ#¤]–?tÜÑ¦{ª`A$ÂŒõ,”¾	ÞX²¾®Ê›¸×ÖÝ×œ¼[!}ÊrLUÖ"äF‚¿lîXeÓþ E{šD’n-9“£¡¹OeÅÑìGÚàZÿÝE xû‘Gqúo*Å«¨¨84§¢¢¢½½ýHïôºu@EJ�P?
+Qaæø�ñey{öDp•+Š®0Mhßá$](E‰‘»È7{IÃ¢Dëü»õöÖg­|C™[aßG7g©/D4›û,ÛM
+§ÜúˆÔVâÖAó+²"R»OJä˜ê'¥«*ïi¬FýÐ/¯wEÀ¡‹lÏü•Š`�ïyZ×ÝXÜÓÿG�ìN»õèöÔ²‚ý•´uzÑãWÞi)}×tÆiò¦ŒùíˆþXÉ—+ÍÑÕ7L:¸#óWBZ"þ_kÊª’u®¡½b/—Ï-ÛgG7êúK®;ÐvO.ZçïozÒ¥b±óæÌÚÊ‹c­®¾š7/{ö¾�/\ž-Î+–fÚs‰ìÃ’´�s(ì7·¬3
+ùn’$,ç”lêT"%£Ñ{e‹OÂ¶Çùü…ñeëëAß_õ—.[_+Úgïo]þ2c}£GdFmøRC}U—×æœq´íÉwD�6äÜ!Í® $äàC~l›‚Y…†Ëe‘JQ$!¬#Q¬F
+°=ŽF¶‰U)ñN=\  \Èå`cQìê‹æXpÐýrb³Ùv±‚ƒËÀÄ ôFWT¡S0*›"‘Û`J;ßÙÆR	±NÕ# aBc¸ÒÔR“ÛÞKq¼|‚êsàj„„„ÜˆÔ^äaÂŠ %íœÂ„â
+?þ ¼+$%á‚Åê‹î‰™ñ´yQGi®LšÛí±6=#“àLP$¨.wy­åŽn/Î«	ý äŒ·é@²Jš1X Pe¼�   5IDAT@²d (¯ãÂÈnpi‡õëOôÇ ’pÁ)Û=1o~Å¨œÊß–³Î—Ic‡5ÍvG"p%r `<âWÞ¢¬¦ìŒk/¯D‡ö
+Ü\¦=Ø*¦9 8$o.ÐZŒ˜+äŒ;Ð`Â *pÿ(‘	Œˆ†~[ä:ÄFUà¯¶òe)XÅ ¤C}QìÌ‹M>h¨EçP(`‡�¤xƒ‡±„’ð&3+Ö7óE*ªØÅŒ£AyÞF¡  ä@r;{¤MbàrÁ-‘çÀ[Å\6[EF+ÛÝÁ2Ct”RH³5 ©X�'Ë¤&ºc¿#exs•T‹ `ï×à1eAÓn¸Ù®€�ÔV¤=ÊØ¢ü‘•­’0 $8�´Ø*á€p\B,áFS´bP`‘_ÞFG aÓ�ÔZ¤ÕM.m¶†dX±Z"à m²¹’§µvZí¡uÚúˆÿ.ÎÃ <ùãÁƒ©×£þ[…P-{2eumÅ[N¸ô!TŒsŠ´)]ú©m�¯«½Š�¶ÖæohÒf—u§¬>àºPþa¾tuSâ5ËÔÉ˜—†Œ?ÐåKýú£­ÉÇueE0ð´ë'¸! <òÝíÒ~B¨.íGiÿdi6ÁY„\!åÕš¼ÖuÖUž=)á¶–ƒ×èÒfÊ*)ë®*k,g|¶|õÞöÝ>e•„SiëëaãA„,Ó=%¨ÿO{æIøò_�ß9´råÊCsÆ�?{öìÃ-�Çã9¦½ãøhR_ŒßÆŠÅb„�d2yhN2™¬¬¬<Â˜z[°ÇãñÛ&zÜ‹/Æ±VUU‡zè$�ƒîØ±côèÑÞVèñx<žÏÎæ{v{ì±üà=ôÐÀ�¯»îºÖÖÖ�7B¼‡Ðãñx<Ÿé‹tæÌ™‰DbîÜ¹©TjÂ„	‹/ö¤Çãñx¼ýH�ÇãñxŽì�Çãñx<^�ôx<�Çë‘�Çãñx=Òãñx<¯Gz<�ÇãõH�Çãñx¼ùÙù·~�ù3
+0jÔ(¿ß_[[{é¥—vttüËlÇ$ó\€Z¸pa—Š·mÛ¶iÓ¦ùýþp8|ÆgpÎ»N¶l6;kÖ¬ššŸÏ7räÈW^yåØÝâÅ‹§L™‰DBÍÍÍGSŸgÎÃÅë
+r„¡ë
+Õq„x]¹@Ž7âxôè£�ªªúøã�¯[·nÊ”)C†¡”~ÎFŒq×]w½ùæ›Ï<óLÏž=Ï8ãŒ#g;&™Ÿzê©I“&©ªº`Á‚®ïÀ�±XlæÌ™Ë–-[½zõÿøGÆX×º‹/¾¸oß¾o¾ùæŽ;~ö³Ÿ©ªºoß¾coÁ‚·ÜrËÝwß MMMÿ²
+>çœ‡‹×
+äpÙºHu.^/�ãÌñÙ#GŒqÕUWu^onnF½úê«Ç0ÏÓO?�1.—ËGÈöùgnnn®¯¯ollüø³@Wˆ7kÖ¬©S§ýÃú9Ý Aƒ~ùË_v^w]c¼xñâcoíÚµŸnBÿVžÏ4ç§ãu�ù§ÙºNu|:^/�ãÌqx¬Õ¶í�7žvÚi�“uuuýúõ[³fÍ1Œä8N Ð4ípÙ>ÿÌBˆK.¹dþüù½zõú—C÷9Ç[¼xñ°aÃ¾ò•¯TVVNœ8ñ�wÞé:Ù àÌ3Ï|é¥—‰çü‘G	‡Ã£G�î:ñþ³‡òØVMW+�®\]¿@¼÷#»ºÿà™?S…Bá–[n¹üòËB‡Ëöùg¾ï¾û8ç?úÑ�Žfè>Ïx–e%‰{î¹gÆŒË–-;é¤“&Ož¼ÿþ®3twÜqG�=ª««UU�7oÞK/½TQQÑuâýgå1¬š.X ]¶:¾rœ‘¼!ø¬_ÎŸwÞyõõõ7ß|s×IµgÏž[o½uÍš5¡®6b�gL›6möìÙ pÒI'½üòË�?þø%—\ÒEÎ›7oãÆ�K–,©®®~â‰'Î=÷ÜuëÖy›úqS ]¹:¾âíGvuÿî2¦õÎ9çX–õâ‹/*Šr„lŸsæµk×&‰Þ½{K’$I’mÛ^xá™gžÙâ†úõë÷¿(Æ�')t…¡sçw¿ûÝoûÛ©S§:ôÎ;ïƒ�>úh‰÷/« KåìšÒ•«£ëˆ×#¿ ºÈ2;ŽsÞyç¥Óé—_~Ù0Œ#gûœ3ŸuÖY›7oÞøŠ¢ÜvÛm÷ß‰7fÌ˜]»vu^BìÞ½»{÷î]$Ûÿ¾��ÿ_á „8ç]$Þ¿¬‚®“³ËH¯Ž.^ Ç¡ãø³O<ñÄúõë§L™2xðàÏù\gÎùôéÓkjjV¬X±álÛ>B¶c˜ùÓg·ÛxK–,‘$éþûïßºuëµ×^kÆþýû»ÎÐM�:uÐ A+V¬Ø¶mÛ¼yó!ëÖ­;†ñ2™Ì†ž|òI X¶lÙ†
+…Â�ç3ÊùOãu‘9ÜÐu‘ê8\¼.^ Þg?¾n¿ýöÚÚZUU§L™²wïÞÏùÖMÓüôË‘]»v9Û±Êüñg�.ïá‡îÝ»·a£G�^½zu—Ê–H$fÎœY]]mÆ°aÃž{î¹coÁ‚ŸØÒV¬XñŸåù,rþÓx]¤@Ž0t]¡:Ž¯+ÈqÆû�e�Çãñx¾4ïGz<�ÇãõH�Çãñx¼éñx<�×#=�Çãñz¤Çãñx<^�ôx<�Çë‘�Çãñx=Òãñx<¯Gz<�ÇãõH�Çãñx<^�ôx<�Çë‘�Çãñx=Òãñx<¯Gz<_`~¿ÿÍ7ß€I“&Ýyç�ŸçMøá‡}úô¡”ý*gŸ}öc�=æ=j¯Gz<Ç'JéÐ¡C¯¾úêCsV­Z¥ªê†Žm°©S§<ø?[wÜ¸q÷ÜsÏ¿»ÖÏþók®¹F’¤£_eÞ¼y7ÝtcÌÛ�<^�ôxŽC’$=ôÐC÷ßÿÛo¿ –eÍš5ëÚk¯6lØçpëŽã¡ýL�:õs‡æææ%K–|ûÛßþ·Ö;v, ,_¾ÜÛ�<^�ôxŽO#FŒ¸æšk.½ôRË²~ñ‹_`Œo¼ñÆÃítÞpÃõõõš¦8pñâÅ P*•fÍš‰D|>ß9çœÓÒÒÒ¹ðáæ�9ò†n˜6mZ ¸ë®»r¹ÜùçŸ¯ëzŸ>}-Ztè¶>~¬uäÈ‘7ÝtÓ9çœ
+…N8á„%K–tÎä‘G†îóùêëëò“ŸX– ]tÑÛo¿=gÎ„Puuugìë¯¿¾®®Îï÷Oœ8qÓ¦MŸ¾kÏ>ûìðáÃãñø¡[üÍo~óÍo~Ó0ŒAƒ­[·nÓ¦M£F�òûý3fÌÈçó‡Vœ6mÚÓO?ímEž/#áñ|9”Ëå†††sÏ=WQ”·ß~ûp‹Í�;·¶¶ö¹çžÛ³gÏ²eË–,Y"„˜5kVß¾}ßzë­õë×�;vüøñ�nþˆ#‚ÁàÒ¥Kc…Báâ‹/8pàûï¿ÿÁŒ5J’¤+V!&NœxÇwZ%‹½õÖ[œó‡z(�‹E!Ä<°téÒÆÆÆ•+W2äæ›oî\~ìØ±¿ûÝïÅž?þ¨Q£V®\¹{÷î›o¾¹ªª*—Ë}â®�þùW^yå¡É#FÄãñ?ýéO›7o>ÿüóû÷ï?aÂ„%K–¼÷Þ{}úô¹ñÆ-ù·¿ý­¡¡ÁÛ„<_B^�ô|‰<÷Üs ð£ýèp
+EQžþù�ÏÌf³’$u6K!Äž={B|ðÁáæw¶ŸK.¹¤s~&“‘$é�7Þèœ\¹r% üÓyÕUWu^çœûýþwß}÷ñ-Z4dÈ�O÷ÈR©¤iÚG}thÉ¡C‡.\¸ð«�1â×¿þõÇ'/¾øâÎë›7o€gžy¦sòöÛoŸ0aÂ¡%—-[&Ë²·ýx¾„¼c­ž/‘G}Ô0Œ5kÖ:±óé§Ÿ–þaÇŽ»vírgÒ¤I_k÷îÝ”ÒSO=µs²wïÞUUU;vì8ÜüÎÉ||õ1cÆtNŽ=!ôOãõíÛ·ó
+B(‹µ··ÀÚµkO?ýôh4Šš1cFSSÓ§WÜµk—eYƒFÿ°qãÆ½{÷~b±R©¤ëúÇçœtÒI�W:Ø~|2™LZÌ0×u�ðÆªÇã½éñ|±ýÏÿüÏë¯¿þî»ï&‰»îº«sæYg�õÑ?ôêÕëÿãÍišvè:BèÐ©¤’$aüÏëŽòñIÎ¹ã8Ó¦M3fÌÖ­[)¥¯¾úªëºŸ^±X,@*•úøëßyóæ}b±h4šËå>>G–åC	?1É9?´X.—óù|Š¢x[‘Çë‘Ïq(•JÍž=û×¿þõ‰'žø§?ýé¦›nÚ½{7 �þÿ (JCCƒ¢(�^üøî�$Iï½÷^çdccc"‘èß¿ÿáæzïc¼uëÖÎÉmÛ¶ýç(“Éäüùó«««	!?GQ”CÿgàÀ��G}�üß¸gÏžÿ`ôvïÞ=pà@o+òx=Òã9>]sÍ5}ûö½òÊ+`ÆŒÓ§O¿ì²Ë„ŸXÌï÷_sÍ5W^yå¢E‹öîÝ»|ùò¥K—†B¡ïÿûW_}õêÕ«7lØ0sæÌqãÆ>üpó?ñ?Ãáðw¾ó�ùóç›¦iYÖõ×_¸c­ŸVWWgFgóÛºuëïÿûCêÙ³çêÕ«[ZZÒét$¹âŠ+æÌ™³`Á‚ÆÆÆ÷Þ{ïÚk¯=Ô•™4iÒš5kþƒÑ[³fÍÄ‰½­ÈãõH�ç8´dÉ’gžyæÁ<t�óøÃ¦M›|ðÁO/|ë­·Îœ9óŠ+®0`Àœ9s:÷Õî¾ûîñãÇŸ}öÙãÆ�‹Çã.ì\øpó?á÷¿ÿ½ªªµµµC†™6mšaG™<<þøã×]w]·nÝfÍšõñÃ§×^{í�zõêÕ¹‡w÷Ýw_}õÕóçÏïß¿ÿ7¾ñ�öööCŸñ8dÆŒ­­­[¶lù·FÏ¶íW^yå»ßý®·!y¾„Ð§_J{<žãÕÏ~ö3ÆØÝwß}ô«<ñÄ?üðë¯¿î�žÇÛ�ôx<Ç³ùóç·µµý[ß×ºyóæÛn»Í:Ï—ÓÿÊq¬ìôÏ    IEND®B`‚
\ No newline at end of file
diff -Naur ns-3.18.1/src/lte/doc/source/figures/lte-handover-target-scenario.dia ns-3.19/src/lte/doc/source/figures/lte-handover-target-scenario.dia
--- ns-3.18.1/src/lte/doc/source/figures/lte-handover-target-scenario.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/lte-handover-target-scenario.dia	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,9 @@
+‹     í]Ýs£8Ï_Ay×Cô	h½ÉÖÎÔ]ÝÃÕÞÃí>»d[±ÙÁà8™ÜÃþí'q6þ Ë	9•8Æ¢‰V÷¯[êæ—_¿/#çQÈ4Lâ»tÁÀñ4™…ñünðçÿü~½¿ùeòŸÕï\ò¥£ÎˆSýén°È²ÕÏ··OOOnôœò,‘n®ÝTÜþÍ£ˆßªF·ƒûÇyK`Æ3®�•Gy–Ép²Î„ó¥¸LøôÛ\&ëx6(Z•í¦I”Hç‘GwƒOùkp[’¹­ÐÙC{Åçb"ÿÖL¨cmH¯„¬“]®’4TM²çÕV“:úï›6e«T5Šç÷Ÿ~#ŸŠK*¼ÒÚu¡�L²%—ó0Þæ£Æ&*¹BHe>ñáË˜œÎnrYvÑeÙÉË²Óñ*‘™äa¶Ír’$‘àqÁ5“kÑžO:å‘±}ÝêÐ‹‡0Ë’×ÿÀ£ô˜‡7³íÔ™;—álÿÄ­´h òÎ²Åø»¡á*¨?¢þ¦á$»®>Œ³³‘>ùúÝÉµ÷ëé¥¡ Öhf� ‚žnæëp&ÒbVmÓ@iQ6»=4êõvÇLq¨f¬s²$ÿåÕL;å.5ŽÃ§YøøòéÍ˜$“¿Ä4+;ûßŒÇ3.gÎgçßa¬ÎÚ€AÂÙÝà? :Zõþ)jJn×*ÙÈBZïþ¶òh¢=™ÔIKuõ<žG¢ O\†ÔÏÐ+ÞG»À¾bš¿·ã<Mâx,âYÞ�ã;·ý=ÄÃ–—¯—ÓU�ó®‰z
+QeJÄ¸:·vÌ®`â1H:pH³çHÔ9Õ£ã.¾8XÈi“à~Ói¢¤ö«ˆ¢uÄ¥³Z$ù…¥üÂ®òÁ"ƒÌ\ß‡P	,t1…J€¡ëS_}&. >kÇy)2>8 ±gá4kG]Db©ÄHÆÛ@ú<—3È­íöàm,­)b„è1F0öH^ÎY33Ôa6èp!¨¾ºNîõÞÙ]ðhÇâ!Œ¢#XTÃÓX¤‹äi¼Ãû<­Ï­¦À–bß	óN¿(\�‰ÿ—Ä�öv®†»Of£4aNÍ1I×íœˆAëA:FÏ(èãìùTësõO0‚¾<Œ†�åïïP”¡a¡@(¿‹ì)‘ß”à~á©p” gJnw0>ƒ c£L þŽ¨KÔ¿ž‰OûLˆëéþxæ°	pƒšM7	Nˆë³Ê+ø‘D&¾g‡$¬Ö¦ÉÂåÑÝJ»Z ¸!¼'vÒ4.
+ìb¤�;|FÏjî$q’®øTYÁ\å*¤8ÿ«ÐPÈ·šþô‹Ø’³S%»Óªjk2a.c´ŸºM9J´Û0âQ8�—b÷ýÜiböÛvÅ‹NDjJŸ'2m4Õø¼8í79ÝaåÈ¬\k�}4PcA0dn ¤iG *'V5j¨Uº·ËŸv™çç—pKƒÏåô0ºzxh¯à§kù(Æ³0U#;Ýã|†.òAà#@ó�à‹¸ØPÇ ‘9ìx¤¥×‚¡äOÍ‘tëV¼|ã,Ô¤*õ|–äPÑyý¶®o8–çÂê¹`;$]» ³†áh×éO‡áp‡C›0¹–0±a8†³a8†3
+ï¼Îú‘Yxœ˜âB	 Þˆ`PF
+x‡Ãð®Þ½]zúŠà�2ž¾6§ !ß¢»ƒèÑðŽš€wo¦ý:d²�ëüÎË«C“¨NyoJ:è»¦j"Ô6pyÉ°ÒOJU¥—�-¥<N·ÃJÿÑ£ÐæË|`IùƒJSxžÆ°ºgžé¸REò®!¤.RzÌ/©YMž9¤Ô |‚®Ê+óM:•ÀØ!ZåXÃ§¨(U®ÅTÜˆß“™ør“.ÖÙ,yŠ0•ô±îš@^ƒVB?šVb�]!d6ÔEò(—VI„*ŸçNë…^úóÎJÈ‡D.Ó�€5úV+™ÖJ5�´X©‡Z	vÞÈMÈÐè6¢ü³\)y.…CÜ�”q9Y‰”¬*2®Š*Bh5Q5Qç-ù†½6…�˜vÚpàáq<¦ë�ë&ä£úÇj¤Ki$ë±õ^#uÞCŽÍ†±ñ&ŽÝ»@6µ�lãA#Éî�jHb��“ Úgš‡‰Pž½¢Ólu6ËÑ2‹^"‹¥Ú¹íïm�mKWÑí¼³·CÒq²›ç†céõ{.»yŠ8»DŠx­wVx?`
+¤gP¿Ô¬ú¥öQª:zžƒ¥:äµßðes°l–ÍÁº`�C0›ƒõÁs°Ž7w�wë*Ìb±¡<çØÓæ9Ç¨çöé¤cÏÚ;kï¬½ë�½Ë}2kð®ÆàùçˆQøfc4¯£=<_›<úîâyºÎ±6ÏÚ<kóúàãåQkózSh£) ß=-ÂpI4LŠ€üKÍVrÑš­øPM4b‹¶¾Ûbëƒìê…Ð—r~ä¢åüË®­ç÷nÂ‹À’à}£‰ÕE|zÑE|r`ŸÚuÐ÷Ýî{r/â“Ú">½è">9´ˆo…÷Ýñ:‡ûfexä!×ä!6Ècƒ<6ÈÓŸlä¹¦…„Ïá/c³þò¦|8¾ŽúáØÿè6¯°µ6ïÚŠªØ
+âWeóº—7»{�¾î^£×±{�ÚÝkÖÉ³¯7OÌ°»×®ÊàÑ3¬+Q³ëJ/ÙIä*²“ˆÍN²öÎÚ»Þ5mvÒ5l\C�Ó’°Ùõ;ôò(OÏ†#XîŸ@º8‹ÇLïý©tnÇþMe‚?Òtšq™�¹”ÉSûâÃ´Ç‘ˆçûM-íÎä 9oÉCÝxCC´¡ln€^YtžórB�ó<˜Ù],ÊLùžN.
+\yhõCIp¾&‡}ì|<1p–¶¨œiD£ÅÐEèÚªîÂ�S×	utOzöä­v¤ñ?T¦	vÎ`@`ˆ€Ét=VîF„eI¡ Ø�ˆÀ%v#Öz·£AÐº‚¼…‚
+^ìœI‚ˆrôLz“HƒA¬×¦,Ê’åXÐÓX0°XÐbÁW9Ô`[0hÁàû�Á +,>GüYÈû›âƒú�K¾¼¿ù?°F<h™  
\ No newline at end of file
diff -Naur ns-3.18.1/src/lte/doc/source/figures/lte-legacy-handover-algorithm.dot ns-3.19/src/lte/doc/source/figures/lte-legacy-handover-algorithm.dot
--- ns-3.18.1/src/lte/doc/source/figures/lte-legacy-handover-algorithm.dot	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/lte-legacy-handover-algorithm.dot	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,23 @@
+digraph LteHandoverAlgorithm {
+
+START [shape = circle]
+GET_MEASUREMENTS [shape = box,
+                  label = "eNodeB receives measurement reports from UE\n(Event A2 and A4)"]
+CHECK_SERVING_RSRQ [shape = diamond,
+                    label = "serving cell RSRQ\n<= ServingCellThreshold?"]
+LOOK_BEST_NEIGHBOUR [shape = box,
+                     label = "Look for neighbour cell with the best RSRQ"]
+CHECK_BEST_NEIGHBOUR [shape = diamond,
+                      label = "(best neighbour RSRQ - serving cell RSRQ)\n>= NeighbourCellOffset?"]
+TRIGGER_HANDOVER [shape = box,
+                  label = "Trigger handover procedure for this UE\nto the best neighbour"]
+
+START -> GET_MEASUREMENTS
+GET_MEASUREMENTS -> CHECK_SERVING_RSRQ
+CHECK_SERVING_RSRQ -> LOOK_BEST_NEIGHBOUR [label="true"]
+CHECK_SERVING_RSRQ -> START [label="false"]
+LOOK_BEST_NEIGHBOUR -> CHECK_BEST_NEIGHBOUR
+CHECK_BEST_NEIGHBOUR -> TRIGGER_HANDOVER [label="true"]
+CHECK_BEST_NEIGHBOUR -> START [label="false"]
+
+}
diff -Naur ns-3.18.1/src/lte/doc/source/figures/lte-legacy-handover-algorithm.pdf ns-3.19/src/lte/doc/source/figures/lte-legacy-handover-algorithm.pdf
--- ns-3.18.1/src/lte/doc/source/figures/lte-legacy-handover-algorithm.pdf	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/lte-legacy-handover-algorithm.pdf	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,244 @@
+%PDF-1.5
+%µí®û
+3 0 obj
+<< /Length 4 0 R
+   /Filter /FlateDecode
+>>
+stream
+xœ¥W[o7}÷¯ðãîÃ�ï–hª¦B•PKEøª> �+mB!4ð÷{f¼·|É¢DJ²�Çã™3g†ÏŠ4ÿ»>×OÞY}þEù¤St:[§‡DY_Ÿê3õR¾oãOýq<ôËtžô7eõsüü¥^¿ÕÖX}¢Èêßô=^A�ÿáxHdÈ{�lÔWó*ü-:2ÅéiIYˆ¦ïcík0‹@iŸƒìŒg§%>^V®°Åñl
+E®«ou<];ïN.¶³k��õ…šƒXîc­u!ˆlYùMÄ2¾–à‹Þ]©'gƒ ¤wgêu÷ªJ·ëCê~êòÝQŸ	ë·»çêÙn0«£ƒ½€pÂî*šßw dÜmÞ¼ÿ´w©{ñOï¨;éClëC¸b;Ý¡»îGÙqŸrûúÐcókïÛêKï«jºW}…ïzd§»é‡
+#¡É¡1~}dù¿ýàóú…�Oìò�”G%1&šg½'Q‡ŽkEþ´K÷LB—Ùl©ê�Œ+1U§w'xí›®§��hyÁmWü˜×©–Ç|”�œp¢t¯ e-×…~ÈÝ›þN¾|®Æ¦XF“ƒÜ‡d
+1¬«‰HµÖ$=ä	Uâ°�åbr©ÀØ*Á³Y—’±‡\4!U˜uc³ØE_BÇ™
+ƒÑ“É>@r¡•€èáj,E‘Y�7šì¡À¦‚
+±~V’.‰îµ¤…ƒ-¸‘`ŸsŠ%Öª.yW~ÉÆÑ+¸êŽ^Jl‡×9Ôá^BŸB«v?ÈoI–ÔÓ÷/þÛeußùô®»hH�3¬K	EQ
+äÇ;¹vÌYÈwœgç¬)5Bb%ß‰ñ4ë¸Î¦DìƒgJÞL4’Gl%À®Kl×ÃGÝWãÁ®—b9E^lí‰=©: "4#ÏFH|6H°éå�¢Øö•t(ž›Œ³€°	ø(P$T±Åi˜ (¬#°…«ïw>�‡bDÖ¢`ŽÀ@x,Óv&bÈÁÍÌ™itþA”†þjÙ„žðÃ»9i#÷“FÎq	jOIçƒ•¼Õ.o_ÿ+`7ò—üú[ÈF0ÏìšÙ°‚Ë…W¡@díÞ3ÙÉ�$:ŸAÕ”{ª&tß 8â�	-�–doL×‰Pî˜y|Í‚­ §ú»…÷˜L®Ü�¿936‘ÖHj–ÙXµw
+ˆ á®&!ÕˆG¯Î	I!ðb)l5såxaJÛ+c…;‹Iä²dw¶²Ö‚Ó(ã¦…èNv\¼\Š¸èRdäÙµ*o²‡R(?/âÌvonÝêVŠÊèétÆü¾Ÿ[è�ä¿½k/­£(t>CÛý.m«‡óödìŒA8;ì“÷Á>y¿8åV»®ƒ­2X8\µË—‹$~4Æïé4Ÿ"Út0ïÍ±å¾½¼¶áþ.µ{ÁWðñ ub2uà+p›·Õ†ø
+l;_€q •¼PsŠiêÖÀ{Ò
+0u²UÌ‹h%F@äÑ-˜Û�cÂœ¸= âµÁÒX‹4s3Ú>ß_xÕá’5�F¾aíX¾¢uÓ_5Æ-x[áGÀt‘1.¢Ÿx‡ž=úÏÚÑ`ŽØàúhelÁ“øWÒ�0Cëˆ.ÃýE¯ù™¾r¬Aõ\ëÚÿÕ;ô6¸èðó¨ÙÙáíi»:w=¡:Èž�Õ¾öŒcìOsdmƒ„Ôç×Ó7Š‘¼"÷Ol�'fQX¨^ÝÜR–y˜ëC­­¬ØþÃ›;s2fÆ\B½3'·ÓRtò€Vî#1©½¦¶ÇLò’ûX–xP©Ì´²mGtùÆÿdx¦åoÆ…ÝšŸxú‰¬B”G;¥-xô(ËÞ#À8ÞÿøòRýŸ’-‡
+endstream
+endobj
+4 0 obj
+   1416
+endobj
+2 0 obj
+<<
+   /ExtGState <<
+      /a0 << /CA 1 /ca 1 >>
+   >>
+   /Font <<
+      /f-0-0 5 0 R
+      /f-0-1 6 0 R
+   >>
+>>
+endobj
+7 0 obj
+<< /Type /Page
+   /Parent 1 0 R
+   /MediaBox [ 0 0 773 688 ]
+   /Contents 3 0 R
+   /Group <<
+      /Type /Group
+      /S /Transparency
+      /I true
+      /CS /DeviceRGB
+   >>
+   /Resources 2 0 R
+>>
+endobj
+8 0 obj
+<< /Length 9 0 R
+   /Filter /FlateDecode
+   /Length1 10644
+>>
+stream
+xœåz{\UÕöïœsÌ¹ÖÚOöØ¼a³AD… TÔtGj¾2òuÔÒP‘ÌSùÊ'¨GÐ´Ô43%ÃGj†æ104+ÒL­ÓI:Ç“]+1ëFÆ9?{„Éo¬½ÁÇù�ßïþy?÷s×bîµ×\�9Ç˜cŒïwŒ¡„#)&@â¦<9iæÅ-Û'ÝŸ6~Ê¼§ãÈãÑÙ„ÄVBeÁÌÇžœu÷¼é„Äã9Ù÷Øüoø~ßOHÔæiS'åËÂN’0ûºOÃsµ²Ïÿ€ç‰Óž|zA}¯ðh<ßƒçUOÌ˜2‰°gûâ‹ç‡Ÿœ´`&Q™…·šñ<næì©3{«×íBˆ˜F)�å¼@TâlUá7óD¹A5QÄ8I«;ßx±�o<ß˜î´ÇÛ}ñöøNZæ@dËY®ZûÇl%…PRÚv™ïM$™<ãïc13«‰ÅÄÆh¦YllLŽÑËÝ”¸_qm/³ó2²Ñ·Þ¾¦SŒÑ©’„H�µ«êq%t²]¬klil°;²qÃ¡®74Ú®ýrÍvÒ–�>täXÕfý¿¶Æ%
+I¡tÂ‘Ø”´”S`uw£ÞÅí
+�¥1Ôíâñ	IÉY143£{ÖÝIi´Íº;13#”šsöÑ�oÎßµè›¿È/åÕé?6Î~½¶tKá7Ñ°Ÿÿ›¨ü G÷âyS¦ÆzR/¹ðUzÚŸ\ùÌS‹cÃ»žØw²!	—¯­™þ½¨GÍñ[VF–rê‡(âší|CKÃ]$ízcF:Ze5öÑˆ•¥­íDO{�žãüNbˆ%6jc±ªÍà7Ì4l7&@¼;ÞîµÇ+ü§ÖkgZ¯‰ú½Íõ"Í‡Øô5ÃñÚ×{þ{‰�.8³Á©ÝFbgÀ¨ÚWôNƒŒš~!‡€ZFa©A4UáÀ(1£Év¾.ÕœÖ§á|££]¿âGÿ:Zð«-øõgF}ûsBhQC´2–Ì#3ÉbP©Æ0ðPêacèX–k~ŒNcè<¶fóùê­”®dÅæÍìE(çaÈ�§™ÔñàeµòóÉÂ+,ûÏ+[]Y/¬­8ÐœJ‹äR¢Ë~e…²;I9èÏB9À¨Ø�ƒ°s9
+'nàî2ƒ«Ì²ÔÄ…v‰
+µ
+£ÇÃíý\Æ(3�¶µ4f´Ô5¢åØö•Öçz£.¹¾ß”[Ð´ü1Q9© ‚
+Nånâ¦.
+aÜG|ÔÇ’ YIR“´$C\LwÚ�¤Ù41—Ïó�+••êfe³‹¢¢5†9½Ð�¦R}mãBÝ.…Úƒfé…çî-ì{îÂ;CV/¸øý�’–å­«äee/°ÚÐuÏÈi´¨|rë*Qÿù_Ÿ;Êl½Vº|ù
+]'³ÐïŠx!q‘H2ÓŸˆs3”h+…û5*jÌôíðGµyMT¤›in�eŽ�Q¨‚ë�uè`ïjl°]Ãýú5ìH÷§ô‹ž]ý§è¦hÑ�ô£ýX?w¿HÑEMÓÒ]Œ3È:ƒÍpÏˆ4L˜EÑ×âŽÕÃm¥Þ8b·‘Ì¢üOåE-‡ÌçÞš~jò”?ý^^—§hJË7T­f;Wn©±²‰ã�Ÿºûî�»ÐžÔH�ô>ùeÝ¦Ã¶¡OÖ9×Ù@úcT;e”ÙUÉQ�74¡P•EñîjáF”¥¥Ñ\ÈÆŒìö%ä?ê×/Ö¤¯_zwÖSÄîWgj1SjPÜ4BH+¿£c•©ôqe¡²‚>«”Ñ-Êv“WË�kcÇïitÎò:ÙÔ:½NÔßˆå_7§ò¯oÄ¶ë~.êÞDÂÐû�J�ƒÔ˜«kÂŽ�‡ÀáPuPÍ¶ké~o?O!)TŠÔ"­ÈPd,2š‹,EÖ¢�"[‘½ÐQáiòØQ«�è4Œä]«Þý“ÍÙ¸_Ù†ýû74Q‡¼ÖôwùµÃ¥«§O_ýîÃSßo•ÊFù#*:õé¢=I‡}ŒW\7¢HO¿'¢†X]5B[c­¦›Ð„‰Æî·;L¢3ÍÈ@=66\¯k´Õ]K?’SS8#T…7×8�Ö8”vÌWvTW÷:¸øLi;³ø`ë©Ý/¼°gÏ/ì†#lâ?÷äO¢ý©†{ÿIÒ}æêÕ3Øip�y#®±Fì$ŽÜç÷zH™ÑPæXJËŒ¯ÇÚMszb±F…
+OT7ôc�ø.z+úf`Åuµf§
+I ú$ãƒSºùÅŸ¡;™€o<Ý@û¿úòË¯ÊZšºqýú�ÒÄøÕæâÅe;eÓ�ÖïØéÖ/KW¯YÁ
+dß³gÍÜuâàª®¸3›?üÚäQB`®µ�¤û]ŠI%v”Z«µªQÁp>ÐaÃ¨¢«—ºîüYÝ™ç:·;N,Hèô™î¾è.¡a0$vp—­»kjz]áì‡ö3Ç[ñ¼S„ ºàºÁUÏCúù#I	]É­%–•Æ;¯	«¶¯‰P2È5 ÂÖÒ�Ñaaòú5ÛÏhf¦�H[dqäºÈŠHAoÄOXê®9÷Í“'ßÌ}yø;'´ÊÏiWªŒÞÁ³ö§¦^>wîrjêÞÄDÚ—Z©ƒöòìé]œÜB´'�+¤"âçI-Tãd fkéÔAK#ÎBÇ³\CbÎÂ™�ßûn5n<ïF…âú^—ó´ƒ"žGrÃŸö –Q&ô0…`„$DÉAÇG(AKp¢ÚÎÐ´'äï9nh•kÔÐ*÷¨‡õ„ÕqA@Ãhp+žk7ql\õ??ˆMg…¬ˆ•°b¶žU2MÈ€À¥ÇöˆàI$‰¦@
+�Ó²Hí½xº6�`¼€Á| ¤øµ1dãx®V@
+èãð8LLSò´¹äiZ…ý)+È
+º
+VñU¢D)'åtÛ›ùf±IÙ#v+UÚ	í’Ö¦õÕ£M¦A‡Á{Þ§éÄ÷å#Í<¯eì¿Q°…h§Ð’ÉÕvn5²�Z�¼E­ÐFVqW‰{U¸n#¾ê[ÜjD¤fU5WÂ€Nº�ž¿ƒ[¡Ñü¬�ãNnÕA­H²?ŸŒ2F™¢ÌÝ º˜º˜{z{›z›Mq$Ž&²NÆN¦ÎÎ4Wš»sh§˜N±)q)ñ‰É%ÆS‰¹ÄâÐ%`L1*&0ƒ¬6ð@DB�6$§¥ôKy4¥(¥8e]JEJSJ8ªcÖ¿’8Åû_I\wô$X=|ÏøU«&oìW·ó×¿Žÿ‰‚““–­™ºÏ¿oóWæýtê4j”p¼µó‹«¶ñz�ge�{hh®/$±lÙ¶ý1$ _ôm5õ›@Æû“‡!<„(ÑªÛ\Õ‘µz{ˆ¦)¹v-$7*\‹è„¢„G zú4\ïƒîo×Õèw¦'æ&ÎL\—X�û;‰—Ûè†××£@ jÞñ¥=.ð”'–½q¼föÜµ»jfÏnWMM¿ª…‹öÁªÅó~þ¦õ¶í•­Ç+[KÙ¶/½ójk)Æ‹Ç&/&¿,Ä8ße0©õ'{bMa+y-L©±ÚãJb�FÕxÑ$ÂÌ$Â-Íšk@Šqö<†ý ‚Ö5\oA‹8‰|ÀŽôHçO¥G§Ç¤Ç¦Ç¥Ç§'ôKöGûcü±þ8¼?!7:7&767.7>7!7yfòŠèÒ˜ÒØÒ¸Òø	ë’+’›’c:íx¨ã�¼˜¼Ø¼¸¼ø™13cgÆÍŒ/Ž)Ž-Ž+ŽŸpúÝC{´ƒN’¾ØñA´Q³ªbÇ/í_:ãÅšêê~µ+÷Ÿi½AÙîMyGFM=>þ?šXfAáä9§k]º·`Ò»;Ž�p­îÖmorr‹®«¨«±¨+'²¦Þþ(0°R¥Ôj_c¤µ®j3êÇeÎ42Ð­Ãbv0¦5d .Vøð÷	7v'Âboâc=P½xqÙëÕÕ÷œûî‡ôz”íj�´}ûñJVx£bÁ”&ØÓns<?0‡î~Ï­T›k�G®¯Ñ@—nf:�@z~sð<÷'úàôßP¾>øþššœ7ç¾{’Uê&³}›n2h*SóÂq{ þ!¶á¸È¬B�×0‡¨ÕJ�&Œ(Èl«>nŸ:üËÂlÐ¶‘\zÃZLO\¡½©[_”<ÓNçÓB¹bèœcÇêw”–Šmò½µ­«†oÙþg–·–öÚèQ9†W¢Ì:éë�ìà"ÕÖ5ôÔF#¹?ÀHXzF�95tÐ¿!ÈG¾Šát‚ï¦ÐˆeL×{P�å sYž%mmg²žÈHvëmOëÅ¸7’¬•¿á^;‰þÐAHq 'ùb›“ŒóG	5k¯)´”l²*µFæT‰jš%Ä4ÕÓ@¦  Yßuì	¨­ÎÐ[’Ûµ<I§Güî\w…[OOqšÑ4˜à¡ætÓf¿UMy€¦ÉOkªªS\/æN›²¶%>];üí}8¯Cm—E
+r%;ñûC5f7Qf]c KZ”±'�"÷:ôÙFu  rb]u¨A=ÉÑ‡�u®E2:ß´Xä ÈÙ�9ðþ{ÎÈKò[yE^õ-s›>û¬	V·<"/"#èLÛ99_�s0‘n~·RÆõLW+ã¯5¨˜ïr³¾fçëênò²ôC±´§.j{;U­ìTk6û­¥/&µràÞÖË{º¯’ÿ`…ŠƒXHˆ²•nQ	8â4Zm‡V9uáŒºpC«BßuÕ#÷	„.;�*Ìír„y“XÖÝŽ¬°dÙòåe7)Žoeß«Weï+?Ð“_]¢u�8^9Ê3D4¡%nÁh	áQ˜2=eÎ±½bßh©p­ç¤n#£Æ¨0(Ñº’ÝÈ5BG=¬“�p@€pœo<q"ˆº»^o¼-�à(õgŒæcÄu_$æE–zTN¸‡GðHõ4™§Ì�˜ùtÔ2RâY±,rYÔ²'ÒŽ8èC�eu'=úÒÛƒ×9­Bè*önË°9ô¹ÌIì.yô³‹Î�ýŽº<ì‘×÷îÝ;Ÿ®ïõä¦ÁóËsî;{WÆwï=²sf´ü!à‡ù({e †`!KýÑÔ`É!`R+„^# f#‰R4nèÞ„2[âšuqÏÃ�náç‘ïuäÍü4Š|Z¶³‰t&ƒÈ8ò8™Ož%j(ME>•
+Ýépú ùAËZ@çÒE°‚Z‚% ÈÔ©¡žg�"•Y²¾þtëDák¹çZ2÷È
+š÷~ÀN*ÑNfì$Ö¢êv¢Rbrp§Fp®}®ß²gf¨Ãíbª·»#ënV‰¦PV^±bùrÅÑ(û\úJöúá
+ýàêUú^0OÂØ4>�ËuÂ\Îë1G%ÎÐš¨IòV'×jBŽED'yˆf¾_q8â¤èdª=eªk&M²^Ï¢³1sê\Ü¹¢³ž9Ý–ÂlìV-êÚžN9ô„ +vì,Û¸sçÆ²�ÕR6OÚÿÐCÛFüñpö¡Å·´|¼øPv5»çÃ‹?<uñâòù}tÌ›]:{çá)“i/
+”Ó^“§ìÕõs‹Ÿ'¼E61Š Æmz8HCJn±	¿Èyb¦hÂ4:@Ê‘�+®6ê:˜#Ð'L$šŒðwÆÀBÍ³•Z,æœ�³Ræ eáëk,1–È3<‘™àqÛb:²pÝ(lu�d÷_Ê)/Hh¯à§“z“;jz²1H¾([)\¼H©lëG�×¿Œ÷Úä²”.¤½QÈŸŠa²CÔ·²š¢4’jþD~ùct'�D'Ó�òa¹M¶Èçu=\ Å|æø;³­À�n%”ëL"A¶*"³JìQv«”‘DîUõ ¦q½±�óÛ²½¤``nšEÅ7~ãZ³šäz¹áýtýT×áš'¾€�ü(Êo![™²•k‚râÕÓ£ºŒ›ÕTôm}¿ ˜þžf	;ö4cáŒ÷É¸ä–W¬Œevú
+9ÀËÂÖë©ŸÇBÒ]¶}®í©ßõ@‰4ýpHdl$kOù‚º½½8ƒ)ŸH.¸º¬�È&j£dÙÕ‚é?þA¾.Ñ:²äG1¹þÑ‰ò”ü«¼ OM|ô³Aƒèvú�F·ßOnr– >Þ}'gÙôï9Kcg9”ä·3ûÿ�±(®Öm:eA�nÀÜ»
+õ$‘Lõ§&ÆnŒvrâ*q®´¡RÈra1nŒ¡–¨…AŒ$E8}zô2ëháÄi½x sÛlôÒ`¼¾ö‹ž4ŸÃ®0&ÅÁ†#§±¹½3öêõ„t]ÕJÝ´ôÌ™Þé9~|væò'|sÒÄw«¾4hüØ´dMQ¤¤ë·L]6f\ÖÄ»Æ=5ð¾Úìžïm¶jÌ˜´,�»ÏÝ¤S§cÄç7KÇQÐ‹pU¨+°]Ö�®æªÅPÌyÀ]uýˆý¥åQQß\¿·}M¶âš‘õ§hv´lÕ®`¦lï¨
+çhh¤PK6´BEÓ#‚)ˆÕö`Ù¬!ì¶²YG¥7P>³*½�rfÔBY2K©ÚVÀÓæ°ùb[%ž×6°r±I{•9Â 0ÕN�Ì;‰T%Uõ›§Ažy¬Àø9e­º6©{a·8¢~ ~®þ
+Mð+oâfé	°�bìE9ZÃ|?´`¿oj=U£¸Z§—[¯·îgÞÖ/u‰Ü½å5ëYPc1Ô„»×„TGnò‡ãþp³‚	Ú-Ù^Ï:yG=ëv²x‰LFÊ„+|±õù[,²WMKkg‹lÄm2Î†’1„(Y<�˜éþÁb´"Fm4Àh£ÉÈFSf2»ª©WFÓT½¼aÆ»í„˜sŒ¸D
+�wLšÙd4hŠÐËó&•X‚•Ž¡Uv�q8ô§þa
+;tDuÀ³N oÖ@Î†µ—D3Âþmäæ±£ªOým‚…²P‘`Ì2fƒÅ@£ßø0{XŒ6æŸbO‰ãBVÄŠ"QÊ^d›ÅFc-«³Sð‰ˆÌ 
+7	£f2àÁìfå"R‹4¸Ln³^)÷²dˆç>‘ $¨>-Ù�hŒ7yÍÙÐ�w×²ÍéÖ�lä~ž#üŠ_õkýý�ýM~«ßª×ZÆ°\þ�¡ŒPsµ‘†QÆÑ¦)$ŸNeÓa*úÐteºú”a’é1óë\2—.dK`_")EÊ"µH] -4
+�óLKÌ¥l¥XkÝD6Ñ�llå/	½Bÿ¢æO+7o·î"»h%«„}|ŸxMyMÝ§Ušß°þ‘„cümQmxÇZÇÞ‡³ü#±0P·‰¤úõš¨wLõ·W.|{¥Z~qáïÿ¸ÀóZÊaºÞnT@yËt´‘|z	U¸ã˜ý§„Û.ž B òYdë¶¼òNüzÐŸªl%Šþ3ÇVÄ/²•2ªl
+â^Ž^#‚ï¡»U…%"Æ¨z	î kG®`ÓWÚ™EuàW éˆLÛ%ÓŽÐ'<HÇž #^¿3 ùæõzMÛ ûð Øß¬ißêÉ·àœÜçuü–+åÉ žÿW ¯@÷vù0­D G('ÁŒˆþKª™p6�1˜9±’"ÒFG"ä/ ÏÐØIv1.).=®WÜþø„¶6ý7NRAGÐ<¼¾¤ýº¯gß¼þßoÇ¸H·Ð­tîíûIÜ?¤~Ó½só`
+n)7û"°EþË}q$)1&R8IÀcø×}Ø’ŠŸ±„ã,jÿßov’ŒúÐ3B‘¥y‘’ÐŒ‡ÏL$„¸ˆõÔé”õÿã�f‘jr÷wÉ^ô§]xV€Ý³°§‚"+È\ìyŸžÁ«+öí"Mä3¼³”œ�½¸<CH&ö‚.D®ÓQä0¾#›ºh¶ª`^7œæ#x5¿ÊÏ‘|?ÇóøŠ_Œ»°eÃÌ�ØKªé%2‡…ï!jyn%—àì%WpŽï?CÖ’JRˆsqÑ¤ˆ²ØsJœ#[pŸ�×Ï¡•~†³;J—“z²8D¶Ñz”ëù…,‡Q¬M.“àüOá»Îáó[ÈND=5ÉR±g�cM|FCWQØ›ÐË
+É(R©`z zq]c»èû´QÙ@*ÈgðÌ‚/è
+îå{ø ²6¨È#kñÝ[ôg”ºe×÷Býíl>Ï£{É÷<O�Œïþ@—Ç<ÌF D¤Û|Å†2õ¦+`ÎT¿MÎ©Cx>�oP— Ô„Ì€,2¿’äé
+åd-¾) ¯ÒCü‚Onå_£Ìkésìrú£wðk¨kt=óKB,ég«b¾ÁùUþ‡ÆÆ}8.¾k—9�³©qU$·Ê²0®º­-w,fìãªDTø´*îó~ýß]üºk—¡¹cãªZôoë€¼þØ7r,~ÕÏ°ûô\Ó­>üœW7eZÜ³¶g½½žµMíÕ•" µ¨×Ê‡=Òçg«lø\Ï>IÇ_?o9`™m�§úE4rÔ×“2šË7¿~Þü�ev{ÿ­­Zh�p‘R~¹­Y,$6±–œæ�d–hÁã<º°-!§Ùjý×/r”�Y,›¼ËkÉ=<•ÌPÏ`ßUR(ä ¶£à%=ð™£ìS’&¾ ‡„•œ†XR%ÂH9¶|ü^©¿S‡2ŒÌQ“zådŽþ<ïG6ð¹8örT�²šŒa—I~à¾aúú¶þ(\lûQ1{pfµÈ�×"zb»ˆ�ôi”<±½mD•tÁ¶˜C…±Õ!¤4¡^ð>&¾Öi„„ ÞBðºŸ±ýÛuµx�ÇÀDƒ8Ï¢íà=®ó„¸‡aÃñB1¾†â3a°áÂñ^Î-ß‰ãF™õÿß	h½ŒÂè>#·þ/ê«ÄÝ,�¼šûÛnHhvÁ?}ð[üZ¿Xág	×%ü‡þa…¿—C“~zö^ñ“„kåðc946ÃÍð¿%|ß¾Ë�«¾Í€+#Å•rhÀFÂåoÒÄåfø&¾–ð•„Kð¿\ðe9\”ð…þ¶.¼•ð9Þþù¨?¿¨_çï‡Ïþ)>“ðçHøTÂŸ$|"ác	çÊáì™qVÂ™ø(NK8¹Â.NFÁ¡P'á}	ïIxWÂ		ïH8.á˜„Z	oK8j‡šŸ¨‘Pýr(	o™ ÞzÞ*æGþèG&øÛàˆŸÿÑ‡%¼Y‡$”P%á	òáu+ìßçûóaß^‡Øçƒ½x'ýZ3ì‘°[Â.	;P)áÕVñjì°Â+ùP�·T”Ãv	Û^6‹m^6ÃÖ—<bk>¼´Å&^òÀ¼h„Í6•[Ä&	å(Ã‡ÊÊaã«ØØ	6Xá…fX¿îm±^ÂºµÄº·a]1_û¼O¬� kýüy<'aÍênb�„ÕÝàYóÙ{aÕJ“Xå‚•&(ÅŽÒ|(AM•ø`…þ aù2»X.a™–J(–P$ÁßöÌ’%â	K–Àâ|(å…>X$a¡„V˜o†yF˜+áéf˜Ó³›aV3Ì”0CÂSžˆ‡ßK˜nÏÓGÂã¦-�Çð¤@ÂT	ù¦H˜,aR/Èk†‰f˜ áa	ã%Œkãša¬~ê¿Ë€1FãÈ£s`”FR›#\ðÐ§xHB®	”0ü›.á“0¯•0d°MqÂàh‹lƒA¸_ÂÀrPý%ÜÇºŠûš!çm¸w(ø%ô“Ð÷‡èë‚{ú„ˆ{Ð§·Eôñ·…@oô’�-¡g—èÙ=ºÛDtÏ2‰î6È2ÁÝ1�i�Œ»L"CÂ]&HO3‰t¤™ [Wƒèfƒ®è’©�}"5:§8Dg¤8 S²Otº’}�ä3‰¤ð™ Q‚WBBÄ£œñˆÃàÔ1(BL>D[ 
+5%!²"rÀƒ'	áù†š
+“Š…zÀ-Á%Á)Á�78$ØQV{Ø–@H>X%XÌ¡Â"ÁŒw›CÁ$ÁhƒoÓ$¨.Pò�ãEŽàì‰¨d¬+P	´šæ¯xŽ¦þ¿°‘ÿÛø·èÿPÄ
+endstream
+endobj
+9 0 obj
+   7620
+endobj
+10 0 obj
+<< /Length 11 0 R
+   /Filter /FlateDecode
+>>
+stream
+xœ]“ÁnÛ0Dïü
+“C ™¤ÈÉÅ‡¤EÝ~€D®1%ÐòÁß]N�=Ø-gG�Äªy9¼ò¼éægYâ‘6=Í9º,×I�tš³Ú�æ¸}=ÕÿxVÕpóñvÙè|ÈÓ¢ú^7¿xó²•›¾{NËH÷JkÝü(‰ÊœOúîÏË¥ãu]?éLyÓ­Úïu¢‰ãÞ†õ}8“njóÃ!ñþ¼Ý¸íŸã÷m%mêóHqItY‡HeÈ'R}Ûîu?M{E9ý·ç,ZÆ)~Eõ�ekÛòÂÚA;ÖnW5/\7¨Ö¾«šö<$õ	õI4r|ÍA¯“^ÓVÍ‹êê¡f‚Áƒ‚~�‡Ç‹†'TO‚'‰§Î ¶ ll^Øx‚ð0aðÈ÷’ß¡·«ç‚v¢Í#˜Y[0[a¶È´’iÀl„ÙdÑ:J>8;á´¨[©[œÅÊYÎèêñ^_ß‹»µr·½NzýÏ(l^Ø‚0äÉ·¸+wâ�é0$_Ó ã"sý=‡ñZ
+�`þ:{2us¦ïïc]Véª¿¿Õ
+endstream
+endobj
+11 0 obj
+   424
+endobj
+12 0 obj
+<< /Type /FontDescriptor
+   /FontName /QHYSGU+DejaVuSans
+   /FontFamily (DejaVu Sans)
+   /Flags 32
+   /FontBBox [ -1020 -415 1680 1166 ]
+   /ItalicAngle 0
+   /Ascent 928
+   /Descent -235
+   /CapHeight 1166
+   /StemV 80
+   /StemH 80
+   /FontFile2 8 0 R
+>>
+endobj
+5 0 obj
+<< /Type /Font
+   /Subtype /TrueType
+   /BaseFont /QHYSGU+DejaVuSans
+   /FirstChar 32
+   /LastChar 119
+   /FontDescriptor 12 0 R
+   /Encoding /WinAnsiEncoding
+   /Widths [ 317 0 0 0 0 0 0 0 390 390 0 0 0 360 0 0 0 0 636 0 636 0 0 0 0 0 0 0 837 837 837 530 0 684 686 698 0 631 0 0 0 0 0 0 557 0 748 787 0 787 694 634 610 731 0 0 0 0 0 0 0 0 0 0 0 612 634 549 634 615 352 634 633 277 0 579 277 974 633 611 634 0 411 520 392 633 591 817 ]
+    /ToUnicode 10 0 R
+>>
+endobj
+13 0 obj
+<< /Length 14 0 R
+   /Filter /FlateDecode
+   /Length1 2612
+>>
+stream
+xœÕTktTWÞ÷~÷Ì$™™äÎ0	H˜4\�˜ž¡†4È«` ¡dR„òhLÁÒ@IKC¥Ï"b	G¤¨•P¬!*…°¬U
+­X¤´RhÜéžP—k¹–þuyÎ=çžïÛï½Î½¤Q,­"�Y¶t‰�ON¤m�ÅÁ…s,¼tÓ�¹óW÷L·ÆÉy‡¬ÛåsføýÎgˆŒ\ÁCÊ…p6ÚŠ/Ü³|Á’åq…´IðÁ1ó+Êf‰ßa‚w	v.˜µ|¡Qa[$ø `ßÂÅsŽ´(Gã,‘*'�‚2‚j¯dg§®yNãÙîi1j¥nPVó…ƒÈ¼pãÂ���Üin+Í�4è~%ºÝ¿Æ!{ü'-¶õ!�²ÄW½ÍK=i\^§^d�U1Î´.®Ô·3Íô>j™÷s›ýÍ²™¹²57¢<w¬Ë½ß£w]K]6ÛzxN8²rßõû9÷¦ß¼é÷ÔÓ²¥hi‰iîtwt¥çdç22ÊÛ£Ùª>\6IËâsÇØ~,n8Ù.ëÝKû´á¤Í»µ°¼¬î~ÎEWÝä¦[32ÊËä­åP#µÈ|�êi‡¶OPP²H˜]ú!ª¡'„9¥µhëôLáöÑ-:/šk©õi([X¢·”N·µb:,>†k^m¸Ýf�1Ù8lL5�÷ŒVjT­F©Q©ec·zLí“5§u½A=¨Q»D•t×‘�F�O—ÐŠzº&QñßBu´—ª$¯VA+õ*}ª0gT+m“Y!òVm§v^²;®­¦6ÚCG;µ6©«…îÐjë+å^eëAÉÿŒøjûmTi�jÓâˆõ~Âî¸g³;ödª¶Žy‹VJäbÚkk´yíé%Ú±}Ú)í†m#í¢óø*ám­ÆH7^1ÆQÝƒ ”êÄ÷¶¨�-¨­�Ú£³*ê]_f”jõtÝ(µÏß§£IÌÃúT©(H'd-³™RÓH­ë$Ó¨4…ZíŒ,±öj©š¨94ONUÔ@‡(!ªOõÚ†ª;b¹Ã¸,5×iëõ;ÔŠêCAã¦ôš¼D!¢£v›2 kÔßg†uk| œ7¥Ä÷Ëi™ýÿúL»/L…a×
+_c{{a‰ÑMÍ«îaX1aÃJ¿üŸ„—3ûO,,ñ…ÿ1¦às¯cJ„+*‘c	-ü˜‚Y4hXYòŒ/ûÊÊ}µfmúˆZsÎˆLù”¥b½øÉ¯ç™¯'ä~L=b(:Z‡åöúçûîÅû®Å±Ó¢ß?=°èØí8…ÈuåîÅÈ×âÏù]nhP­Ž~»£ ú¿yÅÔ�ÊÉ)“¶F½‰z’¼�F}U^û=FÄ‹O-|âÇÝîÄãcÆmÆß-|�C¸eáƒÚÑêÆÍþÂ�Þ�à¯Œë#ð—|¼Çx×�kW‹Ôµ®ŠâÕ"¼s%K½Á•,\fü™qÉ�?yñÇþÀxÛƒßWã­&üŽqQÔ/V£íÂXÕV�cqþÍnê<ãÍn8Çø-ã7Œ_3ZC8Û’ªÎ2ZRñ+?Þ`¼^ãV¯wÇé$43N1~Áx�ñsÆÏ?eœdœ`41Ž»ql�¥Ž1�6©FÆÑ#3ÕÑ&]eyÕRGfæµãHžñª…ÃŒŸ„pˆñcF˜ñ#FC ?ŒÇÁ–:À�z�:`¡Þƒý’ôþ^aü€±�ñ}ö2öìŽW{üØ�ï°KTv…ð]ÆÎ—�j'ãe'vlOV;Ø¾ÍTÛ“±ÍÄÖ8lal¹ÔfFÈ…Mb´)„—6Æ«—2°1ß‰àÅMêEÆ†º™jC6¬2ê^°TÝLÔå/XXÏxþ¹êyÆsP+eÖŽÆºgj�Ï:°Vˆµ¬‘N­±PãÆ3ŒÕO»ÕjÆÓn|›±Š±’‘×þTuµzŠQ]�oPUœ¨ª,<ÉXÁX�eN,�ÃŒ%TF°8‚E,dT0¾É˜Ÿ†o0æ¹óÕ¼"<Î(¯Æ\AÆF€QÆ˜Í˜5¥|Í‰™Œ¯0¾Ì˜Q§fDP‡éIÉjº�1¦Iäiù(ND‘fª¢.˜êÅ”	�ÔF¡_bLždªÉŒI&eLÉDÆ„ñ¦šÐ	ãS\j¼‰q.Œe|1„1!0Ñ3Õ#ä7aôDä1¾Àxx”G=ìÅ¨Ü5ÊƒÜ‘.•›×ž€‘.Œ`gêUÃ":ÄTC½’ãPCLä808Ù.ø9”Ÿ1È��Y5Ð…,dÆª&2cÑß�~}-Õ/€¾}<ª¯…>dô¶TÆhô¶ÐËr¨^	°èÉHg<”€4©3Í_ ="H•RHq¡»t°;£[]ó‘, ™Ñ%€ÎÒ©ÎŒ$1JJF"ÃËèÄðˆ‚‡á–ZÝù0«‘@<ÃåLR.†S´�Ip0âLÄ2bD-†a÷Â€!BCn@"„Ë_ÔTz&4ÄÐµ@Íz­ßÿÃ ÿuÿu¤|ÊóÆ¯
+endstream
+endobj
+14 0 obj
+   1862
+endobj
+15 0 obj
+<< /Length 16 0 R
+   /Filter /FlateDecode
+>>
+stream
+xœ]�ÏjÃ0Æï~
+ÛCqÓsŒî’ÃþÐlàØrfhd£8‡¼ýd7t0�Ò÷ýÌgékÿÚSÈ ?9Ú3ø@Žq‰+[„§@ª¹€6ï]½íl’ÒÛ’qîÉGÕ¶ o".™78¼¸8âQ€þ`‡h‚Ã÷uxŒ†5¥;ÎHÎªëÀ¡—çÞLz73‚®ð©w¢‡¼�ûs|m	áRûæÉF‡K2ÙÐ„ª=KuÐz©N!¹úN�Þþ®î¦¸G�Š{Ÿ®|òÊ®Ì’§n¢)ásY)¦BÕóSFpÇ
+endstream
+endobj
+16 0 obj
+   223
+endobj
+17 0 obj
+<< /Type /FontDescriptor
+   /FontName /QLJKQB+DejaVuSans
+   /FontFamily (DejaVu Sans)
+   /Flags 4
+   /FontBBox [ -1020 -415 1680 1166 ]
+   /ItalicAngle 0
+   /Ascent 928
+   /Descent -235
+   /CapHeight 1166
+   /StemV 80
+   /StemH 80
+   /FontFile2 13 0 R
+>>
+endobj
+18 0 obj
+<< /Type /Font
+   /Subtype /CIDFontType2
+   /BaseFont /QLJKQB+DejaVuSans
+   /CIDSystemInfo
+   << /Registry (Adobe)
+      /Ordering (Identity)
+      /Supplement 0
+   >>
+   /FontDescriptor 17 0 R
+   /W [0 [ 600 688 ]]
+>>
+endobj
+6 0 obj
+<< /Type /Font
+   /Subtype /Type0
+   /BaseFont /QLJKQB+DejaVuSans
+   /Encoding /Identity-H
+   /DescendantFonts [ 18 0 R]
+   /ToUnicode 15 0 R
+>>
+endobj
+1 0 obj
+<< /Type /Pages
+   /Kids [ 7 0 R ]
+   /Count 1
+>>
+endobj
+19 0 obj
+<< /Creator (cairo 1.12.14 (http://cairographics.org))
+   /Producer (cairo 1.12.14 (http://cairographics.org))
+>>
+endobj
+20 0 obj
+<< /Type /Catalog
+   /Pages 1 0 R
+>>
+endobj
+xref
+0 21
+0000000000 65535 f 
+0000013857 00000 n 
+0000001531 00000 n 
+0000000015 00000 n 
+0000001508 00000 n 
+0000010408 00000 n 
+0000013697 00000 n 
+0000001659 00000 n 
+0000001873 00000 n 
+0000009588 00000 n 
+0000009611 00000 n 
+0000010114 00000 n 
+0000010137 00000 n 
+0000010884 00000 n 
+0000012842 00000 n 
+0000012866 00000 n 
+0000013168 00000 n 
+0000013191 00000 n 
+0000013462 00000 n 
+0000013922 00000 n 
+0000014052 00000 n 
+trailer
+<< /Size 21
+   /Root 20 0 R
+   /Info 19 0 R
+>>
+startxref
+14105
+%%EOF
diff -Naur ns-3.18.1/src/lte/doc/source/figures/lte-legacy-handover-algorithm.png ns-3.19/src/lte/doc/source/figures/lte-legacy-handover-algorithm.png
--- ns-3.18.1/src/lte/doc/source/figures/lte-legacy-handover-algorithm.png	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/lte-legacy-handover-algorithm.png	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,194 @@
+‰PNG
+
+   IHDR  ¨  5   òÛKâ   bKGD ÿ ÿ ÿ ½§“    IDATxœìÝg\SgÃð;	aƒ,ÑŠ*Š"Ö*`'®¢"�8pk©Ö¶‚ÚÖYE´"ÎVq jÅ½GeX'ˆU@E‘-ÈäýpúäÍÃˆwÆõÿÐ_99¹ÏuH.OîœÃâóù    @Þ±i     h	(¾     P|   @!(Ñ   Í%+++))©¬¬¬°°ðÓ§O¥¥¥?~$„p8mmmMMM555---===KKKuuuÚy šŠ/ €œøôéSllì“'OŸ={öüùó¼¼<Á­êêêjjj­Zµ"„ðx¼¢¢¢¢¢"�ÇÜÊb±LMM---»uëfiiÙ§Okkk6Ÿ
+€\aá¬  ²ëÓ§O111÷ïß¯ªª211±°°°´´´°°°°°077×ÐÐÐÑÑ©óî•••ÅÅÅ>|HLLLú¯ÄÄÄÜÜ\==½!C†8888::vïÞ% ä Š/ €ì)))9{öì±cÇnÜ¸QYYiee5tèPGGG{{{==½¦�Ÿ””þ×_EDDdggL™2eúôélúà  ´ ø ÈŒêêêðððàààÓ§O—––Ž1bÚ´iÃ†kÓ¦M3m‘Ïç'$$\¾|988øÙ³gfffÓ§OÿÏþcffÖL[ h>(¾  2 ¢¢"00ÐÇÇ'%%ÅÚÚzæÌ™nnnmÛ¶mÉ÷ïß
+
+úóÏ?sssG�ýÓO?á 0 È_  ©VZZ°uëÖÌÌLWW×åË—÷êÕ‹bžŠŠŠsçÎùøø<zôhèÐ¡?ÿü³ƒƒÅ<  âÃ—  ¤�ÇÛ¹sg§N�~øá‡‘#G&%%Óm½„eeåÉ“'?|øðÒ¥KeeeŽŽŽƒŠŽŽ¦›
+ @(¾  Ò(&&¦OŸ>?þøã”)S^½zµÿþN�:Ñõ?F�ý×_q8œÁƒÏ™3'''‡v(  QP| ¤Kzzº³³³���µµõ«W¯üýýÛ·oO;T½###Ï�;nffæïï_UUE; @ÝP| ¤HHHH¯^½âããOž<$Í•W˜³³ó“'OæÏŸÿã�?<øåË—´ ÔÅ @*”––ÎŸ?ßÍÍmæÌ™ÏŸ?wqq¡�¨a455}}}Ÿ<yBéÝ»wHHíD  5á¬  ôÅÅÅM�:µ¸¸øøñãööö´ã4IUUÕ†6nÜèææ¶wï^MMMÚ‰  þ…#¾  ”4¨mÛ¶÷îÝ“õÖKáp8k×®=þü•+Wììì’““i' øŠ/  MëÖ­›9sæÒ¥KoÝºeddD;ŽÄŒ=úñãÇššš¶¶¶wïÞ¥ €Lu   ¥²²rÎœ9!!!GŽqss£§YTTTÌ˜1ãìÙ³AAAS¦L¡ Žø PPRR2iÒ¤°°°3gÎÈkë%„(++;vlÖ¬Ynnnûöí£ �í   
+§¤¤dÌ˜1<8þüW_}E;Nóâp8ûöíSWW_²dIiiéòåËi' Å…â Ð¢x<ÞÔ©S=ztëÖ­~ýúÑŽÓX,ÖöíÛ[µjõÃ?èééÍš5‹v" PP(¾  -§ººÚÝÝ=""âæÍ›
+ÒzÖ¬YSVV6gÎ�É“'ÓŽ ŠÅ  åxzzž9sæâÅ‹ýû÷§�…‚M›6åääLŸ>]GGgøðá´ã €ÂÁY  Zˆ¿¿ÿwß}àááA;5•••&L¸{÷ntt´¥¥%í8  XP| ZBTT”££ãš5k~úé'ÚY(+))±··/++ûûï¿ÕÕÕiÇ ‚â Ðì233{õê5pàÀÓ§O³X,ÚqèKOOïÕ«×W_}B; (œÇ  yUUUýç?ÿQSS;tèZ/£}ûö���¡¡¡ � Š/ @óúõ×_£££Oœ8¡««K;‹=zô²eË¾ýöÛÇ�ÓÎ ŠS  šQBBBïÞ½þùçŸþ™v©SVVfkkËf³ÿþûo‡C; È?_ €æR]]=`À 6›Ãfã¶:üóÏ?½zõòõõ]¶lí,  ÿðB Ð\:ôèÑ£={ö õÖÇÊÊjÙ²e¿üòË»wïhg ù‡#¾  Í";;ÛÒÒÒÕÕuÏž=´³Hµ’’++«�?~œv �s8 Ð,Ö¬YÃf³×¯_O;ˆ´SWWß¼ysHHÈ�;whg 9‡#¾  ’—’’baa±wïÞyóæÑÎ"†ZYY‰î Í
+Å @òæÍ›ùüùsœ¬@LwïÞ8pà­[·†J; È-_  	KKK333Ûµk×‚hg‘%ŽŽŽçæÍ›´ƒ €ÜÂ_  	óóó344œ5kí 2fÕªU·nÝŠ‰‰¡ äŽø HRvv¶©©é†–/_N;‹ì±µµmÝºõ¹sçh ù„#¾  ’Ìårñ�¶ÆY¶lÙÅ‹ÓÓÓi ù„â  ItuuÕÒÒ¢D&Mœ8Q__?00�v �O(¾  óèÑ£gÏžÍ˜1ƒvYÅår]]]1 šŠ/ €Ä[XXØÚÚÒ"ÃÜÝÝ_¼xqïÞ=ÚA @¡ø HFeeåñãÇÝÜÜh‘m}ûöíÞ½{pp0í   ‡P| $ãöíÛ>|@ñmº)S¦„……a¶ HŠ/ €dÜ¸qÃÒÒÒÌÌŒv™7vìØ÷ïß?yò„v �7(¾  ’ŽËíJDÏž=þúë/ÚA @Þ ø H@AAÁÃ‡i‘l6ÛÞÞ><<œv �7(¾  ÅçóQ|%ÅÑÑñöíÛUUU´ƒ €\Añ �€ÈÈÈnÝºéëëÓ"'ìíí?~L; È_  	xðàNß+AVVV­Zµzøð!í   WP| $àùóç]»v¥�B~°X,KKËçÏŸÓ rÅ  ©òóó³²²,--%>òë×¯,XÐ¹sguuõ=z,]ºôþýûÌ­,1�fkkËb±ú÷ï_ç¶„ï¥¤¤Ô¶mÛñãÇß¾}»qÛj:KKË¤¤$ÉŽ	 
+Ž…3„ 4ÑÝ»w˜’’Ò±cG	çààPXXXû&æ¥[œ®)x‘þüy·nÝ˜ÿúô©••U�5ë�Íf_¸paôèÑÚ–DlÞ¼ùÀ�))) Žø 4URR’ššš‰‰‰d‡ýþûï­­­¯]»–››[^^ž””´gÏž¾}û2+ðÿ—ˆ…„�ƒBTTTÿ_'æ^ååå			#FŒ¨®®^»vmC·%oÞ¼)--•ì°  ÈpÄ  ©~úé§sçÎ%$$HvXuuõÒÒÒäää.]ºˆ³>sP¶ÎWõÊÊÊöíÛøðaß¾}‹-200x÷î�²²²è»gdd©ªªÖnŸ"¶%)			ÖÖÖ			Ý»wo¾­ €BÁ_ €¦ÊÍÍ544”ø°ººº„‰ò¼páÂ‡zöì¹páBkkëœœœóçÏ‹y_MMÍ¦h###BÈû÷ï©l äŠ/ @SiiiI|ØñãÇBììì<<<}AfnÃœ9sÿ1Û�RQQñôéSBÈ¨Q£·Ñ&ÒÑÑáp8999T¶ r	S  šjÂ„	šššG�•ì°ÅÅÅÓ§O?wîœ`‰¶¶ö¤I“Ö¬YcjjZ{ýú¦¼{÷ÎÄÄDII)##COO///¯]»v•••¯_¿666®q÷N�:UûÂ-0Õ�ÒºuëuëÖ-^¼¸Y· ŠG| šª™Žøjjjž={öéÓ§>>>“&M255ýøñã‘#GzõêÕ ùÄ‡®ªªš8q¢žž!DOOoÂ„	ÕÕÕGŽ}GƒÍ›7S¼3Ë™ÖÖ@þ ø 4UQQQóM„µ²²òòò
+KMMMJJ6lXAAÁŠ+Ä¼;ŸÏ?|ø0!„™·À`f;9r¤ö![æüß~ûmNNÎ˜1c233%´+¦¢¢R^^Nkë  P| šêÓ§O-°!ssóàà`BÈ�;wÄ¼Kxx8s*\'''Á•&œœœ!)))áááuÞë‹/¾ð÷÷3fL^^ÞêÕ«%¿Á¸\nEE­­€üAñ hª–<0™ŸŸO2¹Vô—ØDßº}ûv%%¥àààäädñJPUU•’’•M€\Bñ h*--­ââb‰kccãããs÷îÝüü|�—��}öìÙI“&Bê»ìp§OŸf±X©©©5.6‘––Æf³OŸ>]PPPßÝÍÍÍ=<<x<­ƒ¾åååÌ7  $Å  ©455‹ŠŠ$>l||üÊ•+¨§§Çår'Nœ˜˜˜¨££óÛo¿‰3Â±cÇÊÊÊ¾úê«Úg�066þê«¯ÊÊÊŽ;&b„5kÖ¨©©………=xð Ñ;Òhåååªªª-¿] �W(¾  M¥¥¥ÕÅ7..nõêÕvvvzzzGCC£G�ß}÷Ý“'Ozõê%ÎÌLá¯µ	›={6ùÜl‡víÚ}ûí·|>åÊ•ßƒ¦ÊÍÍe®â  8�/ @SÍ›7ïÍ›7×¯_§D®kii]¾|™Ö4 @þàˆ/ @SikkÒN!o>|ø@¡xa �?(¾  MÕ¹sgZç=�cÌCjnnN; È_ €¦²´´,((`ŽP‚¤$%%êèèÐ òÅ  ©,--	!‰‰‰´ƒÈ•¤¤$æ� �_ €¦j×®�¶¶vRRí r%))ÉÂÂ‚v
+ �+(¾  `nnŽâ+Y‰‰‰(¾  Y(¾  Ð½{÷Ç�ÓN!?²²²233­¬¬h ¹‚â  ŽŽŽÑÑÑ¥¥¥´ƒÈ‰[·nq¹Ü!C†Ð rÅ @ËËËcbbh‘áááýúõSWW§ ä
+Š/ €›™™…‡‡Ó"'þúë/GGGÚ) @Þ ø HÆÐ¡CQ|%âõë×)))(¾  q(¾  ’1dÈ�|üø‘v™®ªª:`À ÚA @Þ ø H†³³3‡Ã	¥Dæ=ztôèÑjjj´ƒ €¼Añ �mmíqãÆÑ"ÛÒÒÒ"""ÜÝÝi 9„â  1îîîQQQ¯^½¢D†=zTOOoÌ˜1´ƒ €Bñ �˜#F´iÓæèÑ£´ƒÈ°ÀÀ@WWW.—K; È!_  ‰QRRš2eÊñãÇù|>í,2éáÃ‡ÉÉÉnnn´ƒ €|Bñ �¤¹sç¾xñââÅ‹´ƒÈ¤íÛ·wïÞçs €fÂÂa	  Éúúë¯SSS>|Èb±hg‘%IIIÝºuûóÏ?§L™B; È'_  	‹‹‹ûòË/¯^½êääD;‹,™={öýû÷Ÿ<yÂfãÓH h(¾  SUUuìØ1___>ŸßºuëˆˆÚ‰dÆë×¯ÍÍÍfÌ˜A; È-ü« @ø|þÅ‹0sæÌŽ;.[¶,22òîÝ»´sÉ??¿víÚM›6�v �g8â Ð$ÌQÞ-[¶$%%¹¹¹yyyYYYB¾úê«’’’èèh|pÿYÏŸ?·±±Ù»wïœ9shg y†â ÐH5*¯··w·nÝ·¾|ù²G�Û¶m[²d	Å�Ò�Ïç<˜Ëåþõ×_ø:  4+‡  h°ªªª   kkk�Þ½{?yò$((H¸õBÌÌÌ~üñÇU«VeddÐÊ)Ž9rïÞ½Ý»w£õ@sÃ_ €`Žòúøø0×YX¹re×®]ë[¹´´´{÷î¶¶¶ÁÁÁ-R†äääXZZÎ˜1cûöí´³ €üÃ_  ±ðx¼ýû÷›››Ï™3gðàÁÉÉÉAAA"Z/!DMMmÛ¶mÇŽo±œ²eõêÕJJJ¿üòí   pÄ à3x<Þ¡C‡|||Þ¾}ëáááååÕ©S'ñï>uêÔ¨¨¨Ç�6_HYtòäÉ©S§†……Mœ8‘v P(¾  õªQy½½½;vìØÐAŠ‹‹ûöíÛ¦M›[·nq8œæÈ)‹ûôé3þ|Lr €ƒâ P‰T^�„„„þýû{yy­Y³F‚!eWiiiÿþý544nß¾ÍåriÇ E�9¾  ÿƒ™ËÛ¥K—%K–><99ù�?þhJë%„ôèÑcýúõ7nŒŠŠ’TN™æíí�ššˆÖ -	G| þÅåÝ¼yszzº‡‡ÇÊ•+MMM%58ŸÏ7nÜÝ»wïÜ¹cii)©aeÑîÝ»===ƒƒƒ§OŸN; (_  R^^þûï¿ïØ±£9*¯@ii©““SJJJTTT!Ë®ƒÎ›7ÏÇÇgÅŠ´³ €ÂAñ …ÆT^??¿÷ïß/X°`ùòå&&&Í·¹ÂÂB{{ûâââ¨¨¨¶mÛ6ß†¤ÓéÓ§§L™²lÙ²mÛ¶ÑÎ ŠÅ TW^�×¯_ÛÙÙß¼ySSS³¶H]~~¾¶¶öýû÷‡6zôè��6ß0 
+P|@á”••ýñÇÛ·oÏÊÊjÉÊ+���`ooß¥K—K—.´ä¦©ÈÍÍ0`@FFÆ€._¾¬¢¢B; ((ü› HYY™¿¿¿………··÷„	’““ýýý[¸õBzôè“••Õ¯_¿äääÞzË;sæÌ«W¯ÊÊÊFŒ¡¤¤D; (._ P5*oRR’¿¿‡hå±´´Œ��mÕªÕ�!C=zD+FX»víüùóííí«««½¼¼øâÅÚ¡ @A¡ø€œc*¯¹¹¹ðQ^Š•Wà‹/¾¸qã†©©é°aÃþúë/Úq$¯ªªÊÛÛ{Ýºu«W¯>|ø0‹Å"„<zô¨k×®ÞÞÞ•••´€ÂÁ_ �[Ì\Þß~û-;;{þüù?üðƒ±±1íP5}úôÉÍÍíÒ¥Kk×®]µj•Ü|ë+##ÃÍÍ-66ÖßßáÂ…„kkë§OŸ2o:l6ÛÚÚúøñã]»v¥� ˆœ¼Â +--Ý²e‹©©éÊ•+'NœÈå•ÂÖKÑÐÐ8wîsáŒ¡C‡fffÒN$'OžìÖ­[NNÎãÇ�™ÖK™2eŠ`‚ouuuBBBÏž=·lÙRUUE/) (ñ ¹RZZºsçÎíÛ·}ûí·ß}÷]›6mh‡Ë½{÷¦N�ZUUbkkK;N#UVV®Y³fË–-'NÐÑÑÜôôéÓ=zÔXŸÍfÛØØ;vLÁ¯f -G|@NŽò®[·nöìÙ¯_¿öññ‘•ÖKé×¯ßãÇ�ûöí;xðà…æææÒNÔ`={öôóóÛ¹sç©S§„[/!¤{÷îµ¯WW]]�C¿ Ð2P|@æÕYyiçj0�°°°sçÎ]¿~½sçÎ[¶l©¨¨ J,oÞ¼qvvvttìÞ½ûË—/—,YRçj'NTVV®±°ªªª¢¢båÊ•_}õUZZZó‡ Å…â 2¬¤¤dË–-&&&ë×¯—éÊ+lìØ±ñññ?ýô“��Ý�;wh'¥¼¼|çÎ�666�=
+			522ªoå‰'ÖWå9N|||bbb³% À_ �M%%%»víúí·ß>}úäééùý÷ß·nÝšv(	‹��_²dItt´½½ýêÕ«‡N;Ñÿ())Ù¿ÿ¶mÛ>|ø°dÉ’uëÖikk‹¾Kuuu›6mrrrj,g³ÙC‡=~ü¸ü=‰  UpÄ ds”×ÔÔtýúõÌQ^¹,L={öŒŠŠºsçŽ––Öˆ#zôè$aóòò¼½½Û¶m»fÍš¹sç¦§§ûùù}¶õBØl¶‹‹‹ðl‡Ãf³7mÚtýúu¹|@ªàˆ/ ÈŒ�?nß¾}Ïž=%%%òz”·>·oßÞ¸qã�7ºté2cÆww÷–¿Ò2ŸÏ¿sçN``à©S§x<Þ‚~øá‡víÚ5h�k×®�9’ù.—«££3tèÐM›6uêÔ©" ü_ �‚Ê[QQñÝwß}óÍ7´CQpÿþýƒ†††ÚÛÛÏœ9óë¯¿ÖÔÔlîí¾zõ*888(((55ÕÊÊjúôésæÌiÜ¿:ÊËËõôôJJJ8Nÿþý�;æââÂår£¢¢8ŽÄ“ Cñ ©†Ê[[UUUxxxPPÐ™3gJKKmllìììäääÔªU+ImåÍ›7×®]»yófTTTfffçÎ�§OŸîêêÚôîN™2åÔ©S^^^6lPRRŠ��ï×¯ß†V¬X!‘ä  õAñ )UXXèçç·gÏžÊÊÊeË–¡òÖ–——wõêÕˆˆˆˆˆˆ/^¨««4ÈÆÆÆÂÂÂÒÒÒÂÂB__¿Æ]îß¿ß·oßÚCUWW¿yó&))))))111&&&!!AII©_¿~ŽŽŽŽŽŽööö’:"{åÊBÈ¨Q£K6nÜ¸qãÆû÷ï×¾Â €¡ø€Ôa*ïîÝ»y<Þ²eË<==k8¨áÝ»w·oß~òäIbbbAA!ÄÀÀÀÜÜ\___OOOWW÷Ó§O—.]rwwgîRTT”ŸŸŸ———™™™œœ\VVFéÐ¡ƒ¥¥eŸ>}ìììÔÕÕ[ <�Ç³³³«¬¬üûï¿¹\nl Š/ HT^IÉÈÈxþüùóçÏ“’’òÿëÅ‹¹¹¹666l6›¢¡¡Áâ6mÚtíÚµ[·n–––-0c¸N‰‰‰_~ù¥··÷/¿üB%  (_ �
+;vìØ½{wUUÕÒ¥KQy%îÍ›7�;wfæ;88ÐŽS‡mÛ¶­\¹266¶OŸ>´³ €|Ây|€²‚‚‚µk×vîÜÙßßÿ›o¾yõêÕÚµkÑz%ÎÏÏ�Ífs¹Ü»wïÒÎR·åË—ÛÚÚÎœ9“™t  q8â ÔøøøìÛ·�Íf{{{/Z´Hœ‹ @#ddd˜ššVVV²X,''§«W¯ÒNT·ÔÔTkkkOOÏM›6ÑÎ rG|€‚üü|ooï:üñÇ«V­JKKóòòBëm>;vì`þ‡ÏçÇÄÄTWWÓÍSŸŽ;®_¿~Û¶mqqq´³ €Â_ hQùùù[¶lÙ»w¯’’’——×âÅ‹µ´´h‡’s999ÆÆÆÂóþùçŸnÝºQŒ$BuuõàÁƒy<^ll,ó%<  IÁk
+ ´æ(¯‰‰ÉþýûW¯^ýæÍ///´Þ°k×®ªª*Á�JJJÑÑÑóˆÆf³>¿k×.ÚY @Þàˆ/ 4»¼¼<___å¥¢°°ÐÈÈèÓ§O‚%JJJÿùÏŽ9B/ÔçýòË/;vìxöìYûöíig ù�â Íˆ©¼{öìQVV^±bÅ’%Kh�&VaùøøüüóÏ<Ox¡‰‰Éë×¯)%Kyy¹���••Õ©S§hg ù�â Í•W”””´oß>??¿Ær‹õþý{CCC*©ÄtõêÕQ£FÝ¸qcØ°a´³ €œÀ_ �°¬¬¬¥K—š˜˜9rdãÆ�Ì\^´^*ŠŠŠê¼)66¶…Ã4ÔÈ‘#]]].\X^^N; È	_ �˜÷ïß/]ºÔÌÌìÄ‰7n|ùòåÒ¥KQyi)//ß´iS�I.—Óò‘jëÖ­YYY~~~´ƒ €œ@ñ 	TÞÐÐPT^)qüøñ¬¬¬:oª¨¨¸}ûvçi„öíÛ{{{oØ°áÍ›7´³ €<À_ h’÷ïßoÞ¼ùàÁƒZZZÞÞÞsçÎÕÐÐ 
+!dïÞ½wîÜyõêUZZZNNŽàŒf\.·ººšÃá)++ÓùY=zôøòË/ÿüóOÚY @æ¡ø@#effúøø òÊ„‚‚]]Ý­[·vèÐ!===--ííÛ·¾¾¾�;w¦íóÂÂÂ&Ož3`À ÚY @¶¡ø@ƒ	*¯¶¶¶——*¯ô{ôèQïÞ½_¼xaffF;Kc899Þ½{—ÅbÑÎ 2s| 233™¹¼'Ožüõ×__¼x±téR´^é—””¤¬¬Ü±cGÚAiëÖ­<8yò$í   ÛP|@,Lå=uêÔ¦M›˜¯¯¡òÊŠ¤¤¤N�:q8ÚA©gÏžîîîÞÞÞ8µ 4Š/ |FFFÆ‚:uêtêÔ)??¿”””¥K—ª««ÓÎ�œœlaaA;E“üúë¯YYYûöí£ dŠ/ ÔëÝ»wLå½xñâÎ�;SRRæÏŸ¯¢¢B;4Xrr²¹¹9íMbdd´dÉ’Í›7ÓÎ ²
+Å ê ¨¼—.]Ú¹sgjj**¯ìâóùrP|	!«W¯æñxÛ¶m£ dŠ/ üáÊ»k×.æ(¯ôŸíDÈÌÌ,**’õ©„�V­Z}ÿý÷~~~¹¹¹´³ €LBñ€¥§§3•÷òåËÊ8‰6    IDAT¨¼ò$))‰"Å—²téRUUUô€ÆAñ€+oçÎ�™ÊûêÕ+T^y’œœ¬££chhH;ˆhhh¬X±b×®]ïß¿§� dŠ/€BKII™1c*¯|“�	¾.ÔÔÔÜ¾};í   {P|Ô«W¯fÌ˜Ñµk×èèè òÊ±¤¤$y*¾ßÿýï¿ÿž——G; È_ …#¨¼111xþüùŒ3PyåØãÇ�{öìI;…$-^¼XUUÕßßŸv �1(¾ 
+äåË—‚Ê€Ê«²²²222zõêE;ˆ$ihh|óÍ7»wï.**¢� d	Š/€B`*o·nÝbcc•—ËåÒÎÍ...ŽbccC;ˆ„yzzVVVîß¿Ÿv �%(¾ rîÅ‹Â•÷Ù³g¨¼
+åñãÇÆÆÆúúú´ƒH˜®®îÜ¹sýýý+++ig ™�â ·˜Êkeeu÷î]T^…õøñc9›ç ðÝwßeffž:uŠv �(¾ r(99Y¸òþóÏ?¨¼
+ëñãÇò7Ï�all<eÊ\Ì Ä‡â W’““§L™Òµk×¿ÿþ•>~üøòåKy-¾„OOÏG�EGGÓ ²Å@N*o|||HH¾¾„�'Ožðù|y�ê@0`@¿~ýp^3 Š/€ÌKJJb*ï“'O˜Ê;yòd6Ý@?~¬««kbbB;H3òôô<sæLZZí   ðÖ Ã˜ÊÛ­[7¦ò>{ö•„ÅÅÅõìÙ“ÅbÑÒŒ\\\tuu:D; È ¼AÈ¤ÄÄD¦ò&$$ òB}äø”ªªª³gÏ¨ªª¢� ¤Þ&dSy­¬¬˜ÊûÏ?ÿ òB�*++Ÿ={&g+®Óœ9s222®^½J; H;¼YÈŒçÏŸ3•÷éÓ§¨¼ðYqqqååå½{÷¦¤Ù™››2äàÁƒ´ƒ €´Ã[&€TØ½{·ˆjãââœ��»wïþâÅ‹³gÏ>}ú•>+::ZOOÏÊÊŠv�–0wîÜ.dffÒ Roœ ôýôÓOžžž¡¡¡µozüø±³³sïÞ½ß½{wöìÙ‡:;;£ò‚8bccû÷ï/ßßl˜4i’††FHHí   Õðö	@ÙÚµk7mÚÄb±~þùçêêjÁr¦òöéÓ‡©¼<@å…‰��8p í-D]]}òäÉÇŽ£ ¤ÞDhZ»víúõëù|>ŸÏOMMeÞ¶=zÄåÍÈÈÀQ^hœôôô·oßÚÚÚÒÒr¦N�úðáÃ/^Ð Òo¥ ÔlÜ¸‘i½Ì�|>ÿ§Ÿ~rwwï×¯_rrr``à½{÷œ��ä£j�¬˜˜‡Ó¯_?ÚAZŽ££c›6mêœ2 À@ñ cóæÍ?ÿü³ õBø|~zzzJJÊ‘#Gž={æîîÎáp(&™Û½{w---ÚAZ‡Ãqqq9qâí   ½P|(ðõõ]µjU�7½{÷ÎÕÕ•šè¯¿þ:t(í-mòäÉ			‰‰‰´ƒ €”Bñhi{öìñöö®ó¦êêê·oßâ›éÐD999			ööö´ƒ´´Áƒ·mÛöÌ™3´ƒ €”BñhQ¿ÿþ»§§§ð‡Ú~þùg�×b‘@þÜ¹s‡Åb2„v�–Æf³���Ï�;G; H)_€–sâÄ‰%K–ˆX�Ífs8œ×¯_‡……µX*�?‘‘‘={öÔÕÕ¥„‚±cÇÞ¿ÿýû÷´ƒ €4R¢ @Qœ>}ÚÍÍ�9S¯’’’²²2�Ç«¨¨ „°X¬Ö­[wìØ±K—.¦¦¦;v´°° �dXDD„Nðe>\UUõÊ•+³gÏ¦� ¤Kø#×ÐÐÐ©S§RL  —DOn‘¬¼¼¼Ö­[Ÿ:ujâÄ‰-¶Q©2vìXeeåÓ§OÓ R§Ž#¾8€dñùüþùGWW·uëÖÊÊÊ´ã@‹Š��Ý±cGKnñÚµkgØ°a-¹Q©2jÔ¨U«VUVVr¹\ÚY @ºÔQ|§L™Òò9  äUËß(Ô|kprrúæ›oîÝ»gggG; H|¹ @~ðùük×®�1‚všºtébddI; H_  ùñäÉ“÷ïß+xñ%„2Å jCñ �×®]344üòË/i¡ÌÞÞ>**Š9k
+ € Š/ €ü¸~ýº££#›­è¯íööö%%%<  ¤‹¢¿8 È�üüüÈÈÈqãÆÑBŸ………��ÁÝ»wi é‚â  '._¾Ìf³ÇŒC;},«OŸ>8â 54Kñe±X,ËÌÌŒÇãÕ^.‘Áº>ƒÃá�3&::º‰1š‰D" ©U^^îååÕ±cG.—+¿êõýÅÕ^Îª_K…ý¼óçÏ<¸U«V´ƒH…/¿üòÑ£G´S €tiÆ#¾¯^½
+l¾ñ¡ºº:==ýòåËƒ£‘´U%ñI$ù†|}}_¿~]ã_ÅÐtW¯^?~<í ÒâË/¿|ñâEQQí   EšwªÃÆ�+++›ubâóù|>ŸÇã½|ùrÒ¤I|>Ýºu´CÕ�ÉI;@sùóÏ?	!aaaååå²ø«Î¯íPÿŠˆˆ(**BñèÝ»wuuu\\í   Eš±øZYY½~ýúÐ¡CÍ·‰†âp8�;wÞ»w/!$))‰v …óæÍBÈÄ‰qéf‰»xñ¢µµu‡h‘&&&ººº(¾  ¬‘Å÷èÑ£:::***fff+V¬(,,¬±ÎÏ?ÿLùõ×_ËËËë§¢¢bË–-666êêêêêê666[·n>Hœšš:aÂMMMƒE‹•””4.Œ0æãZÑûÈ|°[ZZêééÙ¦M%¥ÿ¿¼³è-òx<ÿ>}úhjjª««;88\¸pAÌû
+šlccÃb±BCC…S…††²X,qäñx{÷î8p ¡¡¡²²r»ví\\\nÞ¼)z—‹‹‹gÏžÝªU«/¾øÂßßŸ’——7}út]]]ƒÕ«W×8Ä%z�¢¢¢ÜÝÝÛ·oÏårõõõ�œœ®_¿.üX‰HXçgë56úijŽ�eÆ¬ªªÚ¸q£©©©ŠŠJ×®]>,¼‚ðš¢'Ô·kâd())Y°`����––ÖÄ‰_¿~-Xá³tun·¾äâÿŽ	B›ÍŒPßnŠ™³¡Ï ¼ª®®>}úôÄ‰i‘",«{÷îÏŸ?§ ¤‰ðv'Nœ õ|–'P]]íææV{++«ÂÂBáþªªªºvíJÙµk—ðrÁPeeeC†©=”££cEEŸÏÏÉÉiß¾½ðM“&MDü0‚©)))“'O&„,]ºTôž2wüúë¯…«Ïn±¢¢ÂÉÉ©ÎÇ¹¡i·oßNqvvN5vìXBˆŸŸŸ8zxxÔ¾•Ôÿ3·Öxï<wî\¿~ý„—5ôñÆb±Îž=ËÜ*:a�ik,d~lèÓÔ¬;[{§BCCë{4jï ˆ]?ƒà/…Ñ¾}ûÜÜ\¾tõ=¤õ%ÿw¬¾ÕêÜœø9ÅE<Èâ,¯oÍÏçuµéÂÃÃ	!/_¾lîÉ–9sæ:”v
+ �".¾ „…††fgg—””ÄÄÄôíÛ—âååõï ÿ}‡8~ü8!¤]»v¥¥¥üZï>>>„�C‡}øðáÃ‡ÔÖÖ&„øúúòùü+VBLLL˜¹kááá‚OñF˜–––——3ÅPÔCC3ø¥K—ŠŠŠÄÜâ¶mÛ!šššþþþoß¾-++‹‰‰™0aBC:>ŸŸ••¥¤¤Äårsrr˜%ÙÙÙ\.—Ëå~øðAœÕÕÕ	!k×®MOO¯¨¨ÈÍÍ½pá‚“““è]¶±±‰��/,,\¼x1!¤U«V5–ØÙÙ‰ÿø�5êÊ•+ééé~~~„�¾}û2·ŠNXgÕ¨±°qOS3í,3¦±±ñ…
+ÓÒÒ˜3ª4¨¾ü"ÔÞ5ñ3Ôþ«Y±b_Œ?ºúÒú’7îwLôn6(§øÏ ˜yDç¬“ˆñù-U|-ZÔ«W¯æÞŠÌñññ166¦� ¤Hƒ‹oÿþý	!·oß^øêÕ+BH—.]þô¿oUUU–––ä¿G(k¼IX[[B>,<T@@ ófÆçó™ûž?^pë™3g„?LÇŽûÌCC!äôéÓÚýž={BöïßßÄ‡ŽáììLÙ³góãîÝ»	!ãÆ�s@ætrrZ¶lY@@À‹/ÄÙåØØXæÇŒŒŒ:—Š¿G7oÞtvvnÛ¶­ð$UUUæVÑ	ël56îij¦�eF¸~ýº`…””Bˆ–––è�ªSí]?Cí¿š®]»òÅø£«s»"’7îwLôn6(§øÏ ˜yDç¬“è]n�â[YYÙºukŸfÝŠ,
+cfþÐ Ò¢ÁÅ—9ÀÃáp8›Ífæê1¯þ\.÷ßA…ÞŽ=JiÓ¦Í§OŸj¼I¨ªªB²³³…Çÿðá!DMM�Ïç«¨¨Bòóó·æåå	ÒÐ0Ì‘‘‘vvv„�€€ Q!„�¼¼¼í¾šš!„9"ÛÄ‡ŽÏç3ç\8p óã€„+ÂgŒŽŽ655~‡9rdVV–è].++c~¬®®®s	‹Å3@HHH}sX™D'¬³UÔXØ¸§©9vV0&óùF�aëË/Bí]?Cí¿æŸý£«ï!­/yã~ÇDïfƒrŠÿÖ‰ù÷Xee¥ðÂŠŠ
+Bˆ’’Ògw_-P|oÜ¸Áb±RRRšu+²(!!�’��@; H‹_¦ØÕçßA…þŸÇã™››B|}}k¼s4½ø64Œ óÕrÁA²ºšºîøÙ-Š(¾�H[^^®¯¯OyõêÕË—/	!úúú‚IâXYYíëëëââ¢©©Iquu—E/ùl€nÝºB.\˜””ÄÔÁâââcŠHÈ´ºêêjÁÊ‚o76ñijŽ�­/Œ8�ëT{Mñ34½øŠ“‡!ñß±Fçspa†††„�×¯_/LMM%„´iÓ¦ACÕ§ŠïÂ…{÷îÝ¬›�QŸ>}þR @ƒÏê`eeE¹wï^�ÃÕ^ŸÃáüôÓOD¨ø
+0…øòåËÂ/^¼H±°° „tìØ‘rçÎÁ­‘‘‘M	SÃÛ·oÅÙåm‘I~îÜ¹FÜ·6eeåiÓ¦BŽ=Ê;wssœJœ•””lmmüñÇ“'OÆÇÇB„OªÐDŸÀ|
+ïããcnnÎT™[·nÕDDÂ6mÚB„ÏH üËÐ”`Í±³bœ¡Y3Ôþ«aþš>ûG×ˆäÍñ;Ö”œÂÌMºråJí17I¿òòò“'OºººÒ"�ÔÕÕutt233i ©!üÆ)Î‘	æ¼¼mÛ¶=pà@jjjIIIYYYRRÒþýûŸÈ×™Çã™™™ÕÞ"óý]]ÝÀÀÀììììììÃ‡ëèè±¿ÜÖˆ0ùùù·oßf¦:ôë×OÄžÖ~|ÄÙâo¿ýFÑÒÒÚ½{wzzzYYYll,óå¶F¤åóùÌµæÍÍÍ»téByøð¡øaüöíÛÊÊÊ>lÙ²…¢®®.þ.‹^òÙ Ìó¾jÕªÜÜÜüüüÐÐP¦Ë
+F�pèÐ¡„�qãÆ¥¥¥}üøñâÅ‹ÆÆÆ5"5îijŽ�­/L�…Ì!ÆãÇ�Ïˆ¨SíÑÄÏ úËm"þèêÛ‹ú’7ÇïX£sŠ9¸°#GŽB´µµ™oÑ9rDKK‹Ø ¡êÓÜG|CBB¸\®ˆé%
+ÎÂÂbÝºu´S €´hpñåóùžžž¤ÿZë‚yw©±¼¬¬lðàÁµqpp`>ÍÿìéÌÄS›ššÚ�;wD=4õ¼Ï‰ÞbEEÅW_}U_˜F<t|>¿{÷îÌò=z4(L�ËçÏŸ/þ.v‰è µóÏ˜1£öþÖ—°Æ?"t¦°&>MÍ±³õ…©±pÖ¬YuÞ·¶:o3C�“|	ŸÎLô�ˆ‡´Îäu&iâïX£sŠ9¸°ªªª‘#GÖÞÐ¨Q£„çØÔ·§ŸŸßüÅwäÈ‘ãÇ�¯ó¦²²²+V˜šš2S™ÅMœ=’-C†Y²d	í  -S|ù|þÍ›7]\\ŒŒŒ¸\®ššš••ÕòåËãââþ´ÖKgeeeçÎ�k//++óññ±¶¶VUUUSS³¶¶Þ²e‹ð‰ÆRRRÆ�§¡¡¡§§7oÞ¼Úß�3Œ€ªªª™™Ù¼yó?óÐÔÿ z‹[·nevJCCÃÁÁAø+ö}èø|þÖ­[™åÛ¶mkP˜ØØØ9sætìØ‘ËåØÚÚþñÇ<Oü]g‰ˆ <oëÖ­]ºtQQQéÔ©Óºuë `îûÙ„‡²´´är¹ÆÆÆëÖ­|Î."O£ê&îl}aj,,((X´h‘‰‰	—Ë]2ê»UœÅÅÅsæÌÑÕÕÕÐÐ?~¼ð×ž>ûGWßvëLÞ¿c�Î)þàÂÊËË}}}{öì©¦¦¦¦¦Ö³gO___ÁÙ‚kU'Ñã7kñMKKc³ÙµOÁÁX½zµø9â¯)+&OžìââB; H_è=44têÔ©|‘/ñ  Í˜™¸ø+–Íúººyóf??¿wïÞ	þ5"¬sçÎ)))aaacÇŽóÑò÷ûãééùäÉ“ß …¥ôùU  @úðùü#GŽ¸¹¹ÕÙz	!Ìék&Nœ(âÊØrOOOOp:  €ŸÕ  ¤ALLLrr²»»{í›X,‹Åªªª"„0ç{fºoTT”»»{ûöí¹\®¾¾¾“““ˆSpðx¼½{÷8ÐÐÐPYY¹]»v...7oÞ¬pôèQ33³+V6ÃŽ6‰ªªjYYí  -0Õ@®ÈßGÕ²®ù^W§M›öæÍ›˜˜˜Ú7Õyˆ—ÿßsc×XóÌ™3ãÇ�¾#“vÎœ9Ì‰Dj�Ãçó§OŸÎ\”^˜••ULLsqi)áçç·}ûöFœ¼ äŽøÈ¦”ÐNÍ.###,,lÑ¢EuÞ*ük øJ!dÔ¨QW®\)((¨¨¨HOOg.&ÿë¯¿Ö9HHH!díÚµééé¹¹¹.\prr"„<xðøñãFFF¡¡¡ÙÙÙ%%%111}ûöýçŸ6mÚÔ,;ÜX***8â ˜ã  {:¤««;eÊ”Ýëûï¿÷÷÷Ÿ={vNNŽà)Ìu}këÐ¡CbbbLLLAAA÷îÝíííÇŽ;vìXBH@@ !äÏ?ÿœunàÀ�!!!�;w>}ú4sf)�©  Å @Æðx¼ýû÷Ïš5‹¹®»˜Nœ81mÚ´ÚÔ×<øŸÿüçúõë‚yÀ#GŽ444dº²££#ùï¼ÁAeáK-J_ †©  2æâÅ‹ïÞ½[°`Aƒîµ~ýz>Ÿ¿páÂ¤¤$æò{ÅÅÅ"Ö·µµ}ñâEtt´¯¯¯‹‹‹¦¦æÕ«W—.]Jþ[v«ªªªªªª««™‹}0÷œ«[J())5î
+á  —pÄ @ÆìÙ³gøðá�:ujÐ½^½zEñññiÕª³äÖ­[¢ï¢¤¤dkkkkkKIIIéÜ¹3sô×ÊÊêÁƒ÷îÝëÛ·ocv  €ñ �%wïÞ½yó¦——WCïhllLñõõÍËË+((8yòäüùóE¬?dÈ�£G�¦§§óx¼ìììS§N‘ÿÎ‹X¼x1!dÜ¸q¯_¿.---//ONN>pà Ó’ ¤Š¯<X»vm¿~ý„—°êG+¤ølmmY,Vÿþýkß·bÅŠÞ½{kjj2§]²d	Å‰ÿ�ŠØ©¦OŸ^ç°}ûö]·n]cR‚|Ù¾}{¿~ý˜ùµÂÔÜM›6éëë3_Œ1b„ˆõïÜ¹ãîînllÌår™ª=}útBÈìÙ³===ß¿?oÞ¼Ž;ª«««ªªZXXÌŸ??66¶±{ Ðü„¯_Ü¬×”‡f’žž®®®~øðaá…b>ã- ¡}öì™ êÓ§Oë­]]Ýøøx‰¦—˜{'z§„Ý¼ySPykÜtðàA�ŒŒŒ&%†'Ù×Õ/^p8œ?ÿüSœ•kü"ñx¼­[·véÒEEE¥S§NëÖ­ÌÇ­ó.±±±sæÌéØ±#—Ë500°µµýã�?x<ž`å›7oº¸¸q¹\555++«åË—ÇÅÅIh_%ïk  ÅWæ}óÍ7ªªªŸ>}^H¥ãÖ©¡I¾ÿþ{Bó]õï¾û®Æ­½zõÚ¶mÛãÇ�?}úTXXxñâÅŽ;B%šZ\bî�è�(++ëÒ¥‹àB\5n-**RQQY¶lYSCCË’ìëêâÅ‹;uê$Ü>A4¼¯€0Lu�mŸ>}
+:t¨ºº:í,PYYLÙ±c!$88¸¢¢Bx…G�}ÿý÷666êêêÚÚÚcÆŒaÎ±÷î]*�ÅñÙ�Ø´iSVV–¯¯o�·jjjÚÛÛâÜL
++///00pñâÅ‡v  ™„â+ÛÎ�;WXX8lØ°†ÞÑÆÆ†Åb…††
+/e±X666‚%G�uppÐÑÑa&Ô®X±¢°°Pp+3µªªjãÆ�¦¦¦***]»v=|ø°ð
+Âk~vFì…>|øÐ³gÏ…Z[[çääœ?^ôŽtëÖ�"ø–z}¢¢¢ÜÝÝÛ·oÏårõõõ�œœ§&s_!©©©&LÐÔÔ400X´hQII‰è�6h§’’’|||Ö­[×¶mÛú†6lX~~þ…ÄÙ.È???eeåyóæÑ  ³„ÿâ#!™3wî\BÈ�7j,¯ýäÖ°}ûvBˆ³³³ðBæšLÌUL«««ÝÜÜjÿÂXYY
+oÅÃÃ£Æ:¡¡¡Â+ˆø•«aôèÑ„��;wòù|BÈÈ‘#E?Ì¤F�%zµÚ1X,ÖÙ³gk¬ b_rrrÚ·o/|Ó¤I“>»Gâï”££c÷îÝ+++ùõ?}W¯^%„,X°@ôAªHêu5++KCCcóæÍMJ¡à} „¡øÊ¶=zBÞ¼yScy��S¸Neee)))q¹ÜœœfIvv6—Ëår¹>|àóù „…††fgg—””ÄÄÄ0çìôòòÞŠ±±ñ…
+ÓÒÒÆ�G4hP�$âìKzz:‡ÃQQQÉÍÍåóù¹¹¹***l6;--­¾»<}ú´U«V,ëÎ�;¢5jÔ•+W
+
+
+***ÒÓÓýüü!}ûö­‘SÄ¾¬X±‚bbbQTTÞ¡C‡Ïî�˜;H‰ˆˆS{´ÔÔTBˆµµµè�©"©×Õ~øÁÐÐ°¸¸¸éC)¼¯€0_Ùf``@‚ølñåóùÎÎÎ„�={ö0?îÞ½›2nÜ8æGæÄ[·oß–9~—.]„·rýúuÁ
+)))„--­IÄÙ—6B\]]K¦N�Jþ{¹©Úž>}úÅ_BV®\ùÙÁoÞ¼éììÜ¶m[%¥ÿ¿h‹ªªj�œ"öÅÒÒ’rþüyÁ
+gÎœùìÞ‰³S¹¹¹­[·vss«¦öh„�Ö­[vAzHäuõÝ»wªªª¾¾¾‰¤Pð¾ ÂP|eSãjÅ[œºF8p óã€!§OŸf~d¾-Çáp8›Íf³Ù‚é¹\.Wx+ÌµOÕÕÕ56-fñ­®®f.C%\=™i¸�:ub.ˆ*,&&FOO�2þüÚ·ÖRßÜâ9EìsN†üü|Á
+yyy¢÷NÌ�òððÐÒÒ>OY}Ã2'Ÿ<þ $òººlÙ²6mÚÔ8yˆïk  ÅW¶‰>â+ú¾åååúúú„�W¯^½|ù’¢¯¯_^^ÎÜª¦¦VgS¹Î­4®øŠ¾tê­[·„W¾xñ"ÓË,XðÙÖËçó™/À-\¸0))‰©¶ÅÅÅâälbñs§DáOx@æˆ¯¡¡ágw¤GÓ_W322ÔÕÕ·lÙ"©H
+ïk  gu�mÌgýùùù�¸¯²²ò´iÓ!G�=zô(!ÄÍÍMYY™¹ÕÊÊŠrïÞ½:oÄß
+Óêx<žèÕ<(æ­GŽ™0aBIIÉâÅ‹÷íÛ'Î…Ó˜>>>æææªªª„Ñ•´NÌ	ƒïÜ¹#X)ú.bî”ø�'óD3O:(Ž_~ùEGGgÉ’%´ƒ  È<_ÙÆÌÄMLLlÜÝgÍšE9vìØ±cÇ?2/^L7n\@@Àë×¯KKKËËË“““8`kk+þ&Z·nM9yò¤ˆ³Ïœ>}šÅb¥¦¦ÖhØiiil6ûôéÓÌÁÎ­[·Îž=›Çã}ûí·{öìórÁÆÆÆ„__ß¼¼¼‚‚‚“'O2×nmæ»nžžž‘‘‘ÅÅÅK—.±¾ø;Uß¿+jÿƒy¢™I)  >|xèÐ¡-[¶hhhÐÎ  û„ßnñ‘�Ìa
+kí¯¼ˆùŒóùüîÝ»3Ë{ôèQã&OOOÑƒÔ9`�…ÂeºÎõùÿý^Ý°aÃêÜÇáÃ‡BvïÞ-z¿²³³…D<|    IDATë{”j_bÆŒ5Â|v_z:3ñwª¶ú†Ý²e!äÄ‰õí)H¡&¾®:88ôë×Oœ)=P'¼¯€0ñ•mãÇ�×ÖÖnÄ÷3gÎ¬ñ?;wî¼yó¦‹‹‹‘‘—ËUSS³²²Z¾|y\\œøãïØ±cÑ¢E&&&\.·¾u˜ýkŸC—1{ölò¹i¢-_¾|ëÖ­]ºtQQQéÔ©Óºuë1š¾¾þíÛ·Ç�§¡¡¡§§7oÞ<æzlõiŽ�ºuë–ŽŽs:P/^ŒŒŒÜ±c‡˜n  €h,¾ÐQ´ÐÐÐ©S§ò2ƒ¨ûöÛo÷ïßŸ››‹OBåÛ§OŸôõõ.\È\údE£_W+++{ôèÑ£G�“'O6G0�÷5 †#¾2ÏÛÛ›ÃáÔ¸ø0ÈŸ'N())yyyÑ-$   55õ×_¥ @~ øÊ¼víÚýøã�{÷î¥š×¾}û~üñGœÒAA¼{÷ÎËËkÅŠæææ´³  È¥Ï¯RoíÚµk×®¥�š×ýû÷iG€–³|ùrCCÃU«VÑ  WP| ¤Ë¥K—BCC¯]»&ú:2  ÐP˜ê   EÊÊÊ–.]êâââääD; €¼Añ �"[·n}ÿþý¶mÛh �C˜ê   -ž<y²qãÆM›6™˜˜ÐÎ  ‡pÄ @*”––ººº:::._¾œv  ù„#¾  Rá—_~yÿþý�7p�6 €f‚â @_ddäöíÛ�9bddD; €Üª£øâ`  ’ûÙuJJJæÏŸ?fÌww÷ˆ  °ê(¾S§Nmù  
+ËÓÓ³  àÀ�´ƒ  È¹ÿ)¾S¦L™2e
+­( ’5sæÌÄÄÄ¿ÿþ›v Q~ÿý÷   ›7o¶iÓ†v  9‡³:€Üòðð¸wï^||<í  õzðàÁ²eËÖ¯_oooO; €üCñ¹5dÈ33³ÀÀ@ÚA ê–››ûõ×_�9ÒÛÛ›v  …€âr‹ÅbÍž=;((¨¼¼œv€šø|þ¬Y³8ÎáÃ‡qþ2 €–�âòlæÌ™.\  &ÿk×®ëêêÒÎ  (P|Až�1âÐ¡C´ƒ ü�7nüøã�>>>vvv´³  (_�s×®]{ûö-í  ÿzúôé×_=gÎ\š  …¡ø‚œsvv600
+
+¢€B²³³���ûôé³k×.ÚY  Š/È9eeåéÓ§<x�ÏçÓÎŠ®¢¢âë¯¿æp8'Ožär¹´ã  (_�©©©‘‘‘´ƒ€¢[´hQ||üùóçõõõig PD(¾ ÿ¬¬¬ú÷ï�¯¸]¿ÿþûáÃ‡8Ð­[7ÚY  Š/(�S§NÐ
+êôéÓß|óÍ†pYx  ŠP|A!¸ºº²X¬��ÚA@]»vÍÕÕuéÒ¥«W¯¦� @¡¡ø‚BÐÖÖvqqÁlhy>œ<yò´iÓ¶mÛF; €¢CñEáááqÿþýøøxÚA@�$''�5ÊÖÖ6   ×%  ÅÅ�!CºtéräÈÚA@Qdgg�7®M›6!!!8y €4@ñEÁb±fÍš\^^N;È¿üü|''§²²²+W®èèèÐŽ  „ ø‚B™9sfAAÁ…h9———çààPXXxçÎ�öíÛÓŽ  ÿBñbdd4räH|ÅšU~~þ°aÃ>~üallL;  ü?_P,×®]KKK£äSqqñ˜1c²²²nÜ¸Ñ¡CÚq  à ø‚bqvv600
+
+¢äPyyùäÉ““““¯\¹bffF;  Ô„âŠ…ËåNŸ>ýÐ¡CÕÕÕ´³€\)))™0aÂßÿ}ýúukkkÚq   (¾ p<<<RSS###iùÁ|›íÉ“'ÑÑÑ_~ù%í8  P7_P8VVVýû÷ÇWÜ@R²³³‡–™™ÞµkWÚq   ^(¾ ˆ<<<ÂÂÂ
+
+
+h™÷îÝ»!C†|üø1**ÊÜÜœv  Å‘««+›Í		¡d[JJÊàÁƒÙlö�;wLLLhÇ €Ï@ñE¤­­íââ‚ÙÐÉÉÉÃ†SVV¾víÚ_|A;  |Š/((�û÷ïÇÇÇÓ2éÞ½{ƒÒ××¿}û6®Í  +P|AA2ÄÒÒòÈ‘#´ƒ€ì9yòä�!C¢¢¢iÇ  q¡ø‚âš1cFpppyy9í  KöíÛ7mÚ4�?ÿüSEE…v  h _P\3gÎ,((8þ<í  3|||–,Y²bÅŠ={öp8Úq   aP|Aqµk×näÈ‘øŠˆ£²²rþüù«W¯Þµk×¦M›X,íD  Ð`J´ Ðäáá1yòä´´´:ÐÎÒ+++kÂ„	IIIW¯^>|8í8  ÐH8â
+ÍÙÙÙÀÀ ((ˆv�^�=êÓ§OAAÁ½{÷Ðz dŠ/(4.—ëîî~èÐ¡êêjÚY@�;wÎÞÞÞÂÂ"&&ÆÌÌŒv  h_PtsçÎMMM�ŒŒ¤¤Îž={\\\&Ož|ùòe]]]Úq   ©P|AÑYZZ0 _qaeeesæÌYºtéæÍ›:¤¬¬L;  H Š/ ñððËÏÏ§¤BJJJÿþý/]ºñÃ?ÐŽ  ƒâ@¦M›ÆápBBBhú®]»Ö·o_UUÕ4ˆv  �$_ ¢©©ùõ×_×˜íðèÑ£ââbZ‘ åUWW¯]»vÌ˜1ãÇ��ŒŒlß¾=íD   a(¾ „âááñàÁƒøøøüüü={öX[[÷îÝ;++‹v.h!EEEîîî6lØ°aÃÁƒUUUi'  ÉÃ, !dÐ A_|ñÅ´iÓ^¾|Y]]ÍœÝ¬¼¼œv.h	qqqS§NÍÏÏ¿téÒÈ‘#iÇ €æ‚#¾ è^½zåííÝ¶mÛÌÌÌ/^TVVVUUñù|BHYYítÐ¼˜é}ûö533ûçŸÐz äŽø‚âÊÈÈ˜;wîµk×”””***!<Ox_ù–››;kÖ¬ë×¯oÛ¶íÛo¿e±X´ @óBñÅÕ®]»6mÚB˜Ö[¦:È±{÷î¹ºº–——_»vÍÁÁ�v  h	˜ê 
+-  `øðá\.·Î[KKK[8´€ªªª_ýuÐ A–––qqqh½  ŠÅ‡Ã	íÜ¹s�ÝG|åOrròÀ�}||._¾ÜºukÚ‰   å ø‚¢ÓÖÖ¾råŠ––‡Ã^Îb±0ÇWÎøûûÛØØ(++?yòdÆŒ´ã  @KCñ ¦¦¦W¯^URRþz›ÍFñ•………nnnË—/ÿæ›onÝºÕ±cGÚ‰  €|¹€Búöí<uêTÁ’Æ_�ýðáCSSS[[Û�jkkK4,4LXXØ’%K´´´bbbú÷ïO;  Pƒâð¯É“'?{ölýúõÌÕ+ÄŸêðñãÇØØØ˜˜˜¨¨¨{÷îëééõîÝ;&&fýúõÇÊÊjÐ A¶¶¶ƒ211iæý€ÿWXX¸|ùòC‡Í˜1Ãßß_GG‡v"   	ÅàÿýòË/ÉÉÉ¡¡¡<�ÅbÕ÷å¶êêêÇ�GEEEGGGEEeff²Ùì^½zÙÙÙ-\¸ÐÎÎ®]»vÌšEEEÿýwTTÔÃ‡�;VXX¨­­Ý¯_?;;»AƒÙÙÙ©©©µàþ)–°°°Å‹«ªª^¿~}øðÿcïÎš8óÿ�?!	7ˆZ¼ª ‚4õ®ZíáÙn±v‹¶õ ¿µ»b�«µÕÖîz´j­XmÕzP•# rPQ±€€ÜBòûãÙïì,�˜$¼_™É“g>3`òÎð™™©\—  ÜCðø/�wàÀ�[·nåääÈårvðmhh 1W"‘¤¤¤TWW÷ë×Ïßß?88X$y{{›™™)Ohff&‹Åb1!¤¥¥åöíÛt’Ã‡oÝºU ¸ººÒ`ccÓ{›ªÓž<yòöÛoÿøã�o¾ùæŽ;Ðj  �Þš åååãÇ�/**Z»v­H$¢a7++K&“988øûûÓƒµ£G�nu!ˆN)..f’tFF†\.·³³£3‹D"www==œ{Ú?ÿüó;ï¼ÓÜÜüÍ7ß,\¸�ër€cQQQK–,Á' P¾ ÿÅô0œ={öâÅ‹
+…‚éa ‘”éaè^µµµ™™™4'&&>}ú]P\\rúôé¥K—îÚµ×è‚à ÿÁú:å‘H4hÐ ŠŠŠÈÈHSSÓÞ¬‡Ý‘˜˜XPPÀtDxxx:´7ëÑ
+---;wîüè£�ìíí÷ïß/‰¸®4‚/ °!øB_TTTtåÊ•ôôt¦‡ÁÑÑQ$µêa(((àü‚¯LGDzzzJJJss3:"Z¹}ûvppprrò»ï¾»uëVccc®+‚à l¾Ð'(_‡A(N˜0ÁÃÃ£G{º—rG„™™™··wŸíˆ¨®®þûßÿþÍ7ßøûûïÛ·oäÈ‘\WÁ Ø|Ag±{®]»VSSciiÉdD77·^îaè^èˆ8sæLHHHyyùG}ô×¿þU À5j ¾ À†à:E¹‡aØ°aLØ}Æë0h²ââbºÕô&ºÝqûöí·ß~;..î�wÞÙ²e‹••×�æBð 6_ÐnÊ=úúú^^^4óyxxhEC÷bwDH$’ÊÊJ�éˆ�J¥_|ñÅÇ<dÈ�½{÷Nž<™ëŠ@Ó!ø ‚/hŸúúzzà6{ÜÝÝMLL¸®QS°;"ÒÓÓoÞ¼)F�E÷•vuDÄÄÄ¬_¿þÑ£G~øáúõëõõõ¹®´ ‚/ °!ø‚v¸ÿ~\\pyyy2™ÌÉÉ‰95M‡{º×ãÇ�ÓÒÒènLMM•J¥ZÑqíÚµuëÖ¥¦¦þå/Ùºu«­­-×�Ö@ð 6_ÐPª{<==íìì¸®Q»ÕÕÕedd´×áëë«	×+))Ù¸qã±cÇ|||öìÙãááÁuE e|€Á4ˆrƒ•••¯¯/zzíˆ`N�kÕ`ooßË%I¥Òÿûß}ô!äã�?ÆA}è_ `CðŽµÙÃÀœš†NpÛ¡P(¢¢¢6oÞ\TTüÑGáºÐe¾ À†à½=Ú…Ý‘””TQQÑ£'OžÜ²eK^^Þo¼ñ÷¿ÿý¹çžëÆÉ¡Bð 6_èUUUñññô/éèaÐ^r¹üÖ­[=Ô!‘H6mÚ”””ôÒK/………999ucåÐg!ø ‚/ô="‘hØ°a\ÏêÏ?ÿLMM¥?â´´´¦¦¦®uDÜ½{÷oûÛ�?þèëëûÙgŸùúúötåÐw ø ‚/tåOOOš„¼¼¼p*V__ýúuú£ONN.//g:"<<<&MšÔ¯_?åW•””üãÿˆŒŒ´··ÿç?ÿ¹hÑ"�×ûÅƒCð 6_x&Ê=ýû÷Ÿ<y2�;ãÇ�×„KbAïËÏÏg¾ÝºuKOOïùçŸgwDÔÔÔ|úé§{÷î555ÝºuëªU«„B!×UƒBð 6_è´ÂÂÂøøxširssårù˜1cÐÃ íi³#ÂÖÖ6''çå—_Þµk—µµ5×5‚ÎBð 6_è˜ê†	&8�ëA;ÐŽˆôôôøøøË—/WVVšššúøø¨îˆ è2_ `Cð…¶=}ú4!!�&Ý¬¬¬ÚÚZ¦‡A$¹¸¸àÓðìTtDLš4ÉÁÁ�ëAë!ø ‚/üz€C%%%)))Ï~� 6_ `CðíÓ”{=<<ÐÃ ÜjnnÎÎÎ¦¿™—/_~òä‰©©©««+ýÍô÷÷·°°àºFÐ¾ À†àÛç(÷0X[[¡‡4:" Ë|€Á·O(((`Â.z@«ÑŽæîq���èˆ |€ÁW7577_»v�	´‡�†ooo®kxVèˆ€!ø ‚¯îPîa0`@`` z �PÑáïïïèèÈu�À_ `CðÕnèa hSUUUjj*“ƒÙô�øØG ø ‚¯–QÑÃ ‰&L˜`nnÎu� šE&“eeeÑ|åÊ•²²2tDô¾ À†à«T÷0¸ºº
+®kÐ´#‚~{¼~ý::"t‚/ °!øj(å†ñãÇÓ¿Ò¢‡ »TWW§¤¤ÐƒÁ‰¤¡¡:Á Ø|5ía I7==ýñãÇFFF~~~èa èìŽˆ¸¸¸ÒÒRvG„H$²´´äºFè4_ `CðåRee%sòía°±±	@ çŠ‹‹éÿM‰D’‘‘ÁãñÐ¡�|€Á··±¯¸”››«P(ÜÝÝiÒõóó4h×@kmvD°oî­¯¯Ïu�Ð6_ `CðíqR©4%%=\áñx„Mþ=oUa‡ÓŸÏ·¶¶ööö^¿~ý¤I“ØÃ
+·mÛûðáC>Ÿ?|øðÉ“'/]ºÔËË«³SÑz~üñÇC‡¥¥¥UVVZXXŒ?~ùòå¯¼ò
+{’¾@¹#ÂÄÄÄÍÍš	Á Ø|{»‡!33³®®nèÐ¡ôzz“n_†žž^LLÌÌ™3éÃÌÌÌÀÀÀªª*å‘ì™Õ™ŠR[[»dÉ’³gÏ*‹Å§N�êË_ÞTtDà<TM€à l¾ÝæÆ�ÌåuÑÃ êëZð¥¤Ri^^Þ†ÎŸ?ïåå•’’BÇL™2åÒ¥K...;vìðôô455-,,Œ��=tè3FÍ©!‹-:uê”……EXXØ‚lmmKJJNŸ>VYY9{öì˜˜˜îÞ+Z©¦¦æÚµkèˆÐ(¾ À†àÛuª{¼½½ÍÌÌ¸®´À³_ª¸¸xðàÁ†††t‰±±qCCC^^ÞÈ‘#Õ_u›SÅÆÆN�:ÕÄÄäêÕ«cÇŽe¿<''ÇÇÇ§®®îìÙ³/¼ðB'¶¹`:"ÒÓÓãââŠŠŠÐÁ	_ `Óãº -SYYóÁˆD"+++ÿýë_–––aaa999ÕÕÕ/^‹ÅH½­Èd²o¾ùfâÄ‰666úúúƒZ´hQll,3àèÑ£���#FŒØ´iû/õ<�Çã544„„„8�öŠ¸¹¹ñx¼¨¨(öŠ¢¢¢x<ž››û…­æiiiùä“OÆŒÉžáÞ½{sçÎ555µ¶¶~ë­·êëë[MÒæÖíÞ½›[566dU½iÝÅÔÔ”ù7ULx}–©èÎÙ¸qc«ÔK;vìÆ�	!‡êÚŠt˜@ ðððX·nÝwß}wÿþýG�EFFzxxÄÆÆÎŸ?À€ÎÎÎ«W¯þî»ïnÜ¸Áu±  }†:’““søðáàà`'''>Ÿ¯§§çáá±víÚ¨¨¨G�q]�Öxýõ×Ûû”Ëå¯¾úªòSÎÎÎUUUôåtÉÂ…Ù/Üµk!dÎœ9ìÍž=›òÅ_°_È<K*E”••ÙÙÙ±ŸZ°`�êÿ,R©tÚ´iÏ¸i­*T±'Ùšššþøã�éÓ§B–-[ÆŒY³f!ÄÔÔtÕªU‡ÊÎÎ–Éd]›ÊÁÁ�’““Óf1üñ!ÄÞÞ^EÁÐ
+ý†¼eË±XlllL±³³›={vxxxBBBSS×ê”'N¨þ }
+ÞÚÐÔÔ”��>{ölš�úõë7{öì-[¶\¼x±ººšëµý€{øð¡T*-//�‰‰™6mšB¡8pà !dðàÁQQQeeeõõõIIIôâ¡¡¡ôå4¢<øÌ™3555taII‰@ 
+…Ož<¡KÊÊÊ„B¡P(,--e¿�)ƒ>2dHLLLUUUQQÑÜ¹s	!"‘ˆØ°a!ÄÁÁáÊ•+555W®\±··WFwîÜISæîÝ»<xÐØØ˜””4þüNmZ«
+UìIåM	dv‚B¡¨©©™7o{€¹¹ùÊ•+
+
+:;•¡¡!!¤¡¡¡Íbêëë	!†††*
+š››srröíÛ·lÙ2ú›fbbâçç]QQÁu�ZÁ ØðvðåååÑÑÑ¡¡¡~~~&&&ô Ö²eËöíÛ—““ÓÜÜÌu�ZoôèÑ„�iÓ¦½ûî»¼sçó”··7!$>>ž=þÞ½{„�‘#GÒ‡4“�>}ºÕ´sæÌ!„ìÝ»—>üúë¯	!sçÎe´+/\¸À,ÉÏÏ'„˜™™Ñ‡Ï?ÿ<!$&&†­:ŒºººBöïß¯ü”ú›Ö^ÁÊ”£ªµµurr²òÈœœœðððÐ£¶„‹ìììNM¥Nðµ´´TQ0¨ïÑ£GQQQk×®õððÐÓÓãóùNNNÁÁÁ‡nï ;¨†à l}úí€9Ð‚†^ ‘H˜øEÍ˜1£¤¤Dñƒù|>ý)èéé1µB¡�¾œ>T> vêÔ)BÈÄ‰éCŸVù¸ÍXÉŽqr¹œ=ÆÀÀ€RYYÉ¨¨¨PF�ŒŒ!Ì1f6õ7­½‚•±¯]»–beeU\\¬âU¹¹¹b±˜îöNM¥N«ƒ‹‹‹ŠUC×0³gÏî×¯AGD— ø [ßz;h¯‡�~�0@‡ÒÜÜ,‘H>ûì³E‹ÑÓ§^~ùeÅÿÇöÐ×¶›ššú÷ïO¹wïÞÝ»w	!ýû÷ggubeÏß.lZ§‚/5kÖ,BÈªU«T¼J¡P<~ü˜bbbÒ©©h�òÖ­[Ûœ3,,ŒòÎ;ï¨^5<#™LÆ|Q§_EØååå\¨¹|€M÷ß”{˜†6Ïø�^@ÿÜoee¥P(<==	!)))*Æ«ˆƒï¼óMf4„…„„¨xa‡ÁW¹Õ�¹>C{µÑ+H8p@ù©.lZ‚onn®@ ôÒí¹yó&!ÄØØ¸SS]¸p�bjjúÇ´šð�?þ ÿ§”Ÿ‚ÕfGó¶ÆuušÁ Øtóí =ÈßßÿÈ‘#<hnn.--Ý¾};Â"""!¶¶¶(((¨¯¯ollÌÍÍÝ¿?ÓÃ "¦¥¥BF�E¯Y›žžÎ~¶³Áwýúõ„GGÇøøøÚÚÚøøxGGGÕaôóÏ?'„˜™™}ýõ×>lllLNN¦'·uaÓº|
+Epp0!dÑ¢Eô¡««ë¶mÛ’““+**èÿé§Ÿh›uPPP§¦R(ôº–––ôì=©TúðáÃ={öÐ‹¦mÙ²EEµÐÓjjj˜?dYXXtDü/_ `Ó‘·åô0hÒ–àà`úlHHH›HG­s‰ÙqãÆµ¹Þö*/,))±µµe@/� Ú[»T*�2eJ{•wvÓToi{=zdddÄãñRSSíìmBˆ……Åõë×;5•B¡¨©©™1c†òlíµ@ 'Øô:"˜àÛØØ¸iÓ&zpu^ÛáF Ð:Zü_Z¹‡ÁÑÑ=+99ù�7Þptt
+…ÖÖÖ¾¾¾ûöícÿ˜bcc-Z4xð`¡PhddäììüþûïgffÒgUíØ±ƒØ¹sg«§Ô‰•­æååÍš5ËØØØÊÊ*88˜v0@ÅÖI¥Ò;v¸¸¸š˜˜FGGwmÓº|
+Ehh(!D,+ŠÌÌÌÍ›7ûùùYYYñù|“qãÆ½÷Þ{EEE��Š’Ëå?üðÃŒ3 §÷ŸßlÛ¶ME�À9¦#ÂÏÏO(êééõÁŽ&ønÞ¼Yùk§j¾ ºGËnY|ãÆz‹`‰D’ŸŸ/
+'L˜àááAï:hÐ ®ôõ×_‡„„^¾|™ëZ4ÅÎ�;7nÜ(
+þùç™3gr]t¬¶¶633“¾&&&>}úÔÖÖÖÓÓ“¾yN˜0A__Ÿë{sËâáÃ‡çççŸ:ujöìÙjnl‡÷ ­£éÁ·©©)55•¾Y§¥¥ýùçŸ–––ôN÷~~~nnnì{«t‹ùóç¯_¿ÞÕÕµ®®î×_Ý°aCuuõW_}EÏ¢êÃ?üôÓO�ŒŒÎŸ?ïïïÏu9Ð	---·oßfBpAA�‰‰‰››}_¥(àºÆnÃ_�@ÐÒÒ"—ËUß~œÁ@÷hbð-//OJJ¢oÊõõõÃ†cÂîèÑ£ù|>×5‚.Sþ\ôððHJJÒÕCbÐÇ§§§Ó·Ü”””ææfö[®³³3×>|•—+ŠÄÄÄ}ûö]¾|¹¤¤ÄÜÜÜÃÃcÃ†ìÛ�³ƒ¯L&Û¿ÿ‘#GîÝ»÷ôéSÚ¯õÖ[oÑËcBŽ=zðàÁÌÌÌ†††!C†,X°`óæÍôÌ  94"ø*Š›7o²{ôõõ½¼¼èÛ®‡‡z 7�={vïKïZ    IDATÏž=ÙÙÙåååôìÃ?477çº.€Çîˆ�H$•••ìŽ///z¡k-¢"ø*Ååñx?ýôs»ovð}ã�7èEZ”çQ(K—.ýþûï[=åììœ””„· �ÂYðUÝÃàîîNÏW  N°;"è!	cccwwwú.íëëKï£á˜Vå¾…™3g®]»vâÄ‰ÆÆÆ¥¥¥'Ož|ï½÷¼¼¼RRRè öKLLLêëëÃÂÂþò—¿ØØØÔÔÔ$%%}õÕWçÏŸ?xðà›o¾9xðà/¾ø"((ÈÄÄ$33sÝºu©©©¡¡¡ááá\l7 ´­Wƒoyyù¥K—ÓÓÓiƒ““sjz  4»#"55U*•²;"œœœÔï�íM*‚ïï¿ÿ¾{÷îÔÔÔ'OžÈd2ºÐÐÐ°¡¡�þ›ý’1cÆÜ¾}{Ú´iNNNcÇŽ1bæããsíÚµøøxv³{~~þðáÃGŽ™——×+
+ jéÙà«º‡ÁÓÓ“^s  ´H]]]FF†VtD´|Oœ8ñÊ+¯´ù	È,d¿$))éµ×^+,,d†Í˜1ãðáÃ666ô`0=pCÓþBˆP(”J¥=¹} Ð9=|¯^½ºoß¾¸¸¸‚‚ºdúôékÖ¬ñ÷÷×¥ó… ú8©Tšžž~âÄ‰Ô××B,,,|}}—,YòÊ+¯…BnËk/ø:;;ß¼yó­·Þzï½÷†jhhXWWG/Ôfð%„Èd²””‰D’’’rîÜ¹ÚÚÚ—_~ùøñãÆÆÆÌAbešp" 0zðˆoMMÍµk×$‰D"¹zõjMM�©©©��m›8q¢™™Y­  z”L&ËÎÎ–H$III‰‰‰>äóù®®®ô^$=÷Üs\×HHûÁ×ÐÐ°©©ééÓ§Ì…¢££éimí_6ÚÉ`eeU^^îåå•–––’’âååÕ[ Ï¢÷z|óóóiw¯D"¡7M¥ýa´ÇwüøñšÙ  TYYÙ•+Wh{CVV–L&0`@`` íôuuu¥wÖ(íß‘#GÞ½{÷oûÛúõëõôô.^¼RRRBÚ	¾“&M
+´µµ­¬¬ŒŒŒ566®««‹ŒŒ|ýõ×mmm?þøc±X<pà@==½û÷ïÇÅÅEFF&%%q³å Ðn®êP]]�’’Bß=%ICCƒ¹¹ù„	˜ó$ŒŒŒz¿*è5………Û¶m‹��¥G‰†>yòä¥K—öÎñ’º(½B¡8}úôwß}—’’R^^®¯¯ïèè(‰V¬XáããÓµÚ˜‡ê|-¤¯âê’ûÝ²Þ'Áz™\.ÏÈÈ`ŽYäççëéé¹»»3Ç,†Æu�h/øîØ±cÓ¦Mì‘Ë—/ÿî»ïH;Á·ÍÿƒÁÁÁûöí#„¬]»ö«¯¾j³ üºhî¯ã+“É²²²hŽ‹‹+--ôïe"‘(  ÀÆÆ†Û
+¡{effVUU)?Õ;¿�=žjjj/^|îÜ¹6ŸU]¾ª'AðíÌYk)))ÕÕÕFFFôŽn"‘hÂ„	ÚuaÚö‚oKKË_|±ÿþ¢¢¢Áƒ¯X±âoûíHn3ø^½zõàÁƒ—.]zøða¿~ýF�µbÅŠ7Þxƒ¹Ñï¿ÿþïÿ;99™~Š6lúôéË—/wuuíý­€öp|[)..fÞs322är¹��=,‰ÜÝÝõôô¸®žÉ”)S.]ºäââ²cÇOOOSSÓÂÂÂØØØC‡1—ÏÔ:óæÍ‹ŽŽ¶´´Ü¼yó¼yó†*“Éîß¿Ÿ˜˜xèÐ!‰D¢æ<í_ÕÃÔ|ªG!øjµÒÒÒ¸¸8vƒ��M@@€&÷0¨‰	¾\ Aã‚/:"8WTTtüøñcÇŽeggw×œôè¼¼¼‘#Gv×œÜ:wîÜ/¼Ð¯_¿«W¯Ž=úY¦BðU=	‚owazè�†Ç�3=ôÝUgî—‰à ÿC¡%š››ÓÒÒ¾üòËeË–:”"<<<Ö®]{øðáû÷ïs] N)//ÿ÷¿ÿíïïÏü…½'§¨YYYŽ<räH@@@¿~ýôõõ‡¾qãÆ§OŸ2ÏÒÂêëëßyç>Ÿ¯P(è_Oœ8ÁžçÄ‰„WWWö[Í#“É>þøc{{{}}ýÑ£GGDD°g¸{÷îœ9sLLLú÷ï¿zõêºº:ö$/¿ü2!äŸÿü§:›¯ÎFµ÷°ÃåjnN›»®Ãòš››÷îÝëãã3`À ¡Phgg·páÂ‹/ª¿Þ¦¦¦ððpWWW######WW×Ï>ûL*•¶·]ùùùóæÍ£»ý­·ÞjµÛ¡³êëë/^¼¸eË±XLÛŒŒŒÄbñ–-[.^¼XUUÅu�=‚þ÷çº
+ ÐÚúvðèÑ£¨¨¨µk×zxxÐæ;;»—^zéË/¿LKKkiiáº@­T__ÿÃ?Ì™3‡¹ô¦±±ñ’%K¢££ÙÃžñÕš5k!¦¦¦«V­:tèPvv¶L&k5F.—¿úê«ÊÓ:;;3ÏtÉÂ…Ù+Ýµk!dÎœ9ìÙfÏžMùâ‹/Ø/lµ9¯¿þz«uEEEÑeee­î´²`Áö$ööö„�[·n©Þ½êoT«Ú”§R±“;Üœöv]‡å)ÏÉ.£Ãõ666Nš4IùåAAALöeOøäÉ“V×ÃjµÛA÷ïß?|ø0}«¤í
+C‡]¶l}«lnnæºÀ‡à lºðvP]]ÍÆ ÍfffÌaŒúúz®Ôt2™ìÜ¹sË–-£o'„‚éÓ§÷Ýw555ÊãÛL?m†¡6ÕÔÔÐ‹e2ÌÍÍW®\YPPÀŒ9pà !dðàÁQQQeeeõõõIIIôš¡¡¡ì2|æÌ¦Î’’�@ 
+Ÿ<yB—”••	…B¡PXZZÊ~a«Í2dHLLLUUUQQÑÜ¹s	!"‘ˆØ°a!ÄÁÁáÊ•+555W®\¡I—™ÄÐÐ�ÒÐÐ z?«¿Q­jkïGÐæZ:Üœöv]‡åBÂÂÂ>|(•JËËËcbb¦M›¦æzÃÃÃ	!¥¥¥¥¥¥ß~û-=îøÙgŸ)o=ãÞÞÞžîöË—/Ó?õ Ä¨ÖÒÒBÿ8öÒK/Ñ/lzzzô�cQQQ�=âºÀÞ†à lºövÐÜÜœ““³oß¾eË–Ñt"œœœ‚ƒƒ>\XXÈu�šˆ}Ýooï={ö”””ôôJsrrÂÃÃ,Xààà@Wmaa‘��MŸõöö&„ÄÇÇ³_rïÞ=BÈÈ‘#éCúªÓ§O·šyÎœ9„�½{÷Ò‡_ý5!dîÜ¹Ì€6Ãå…˜%ùùù„333úðùçŸ'„ÄÄÄ0¢££»|Õß¨öJíp¹:›£hg×uXm_ž6mÚ»ï¾{ðàÁ;wîtj½...„�ÈÈHö«<HqssSÞ.º:ö_~úé'ß6ÕÕÕ1_þé��Œ��™/ÿÕÕÕ\È%_ `Óñ·tD¨ƒ|}||¾úê«^¾l¹¹¹b±˜2cÆº„\äóù|>_OOOOO�é6
+…t}XQQÑj¶S§NB&NœHÒkè²C^›á’[år9{Œ��!¤²²’PQQÁ f«ƒúÕ^©.WgsíìºË“H$Ì·jÆŒÌ¯J‡ë¥_ÊÊÊØ+---%„)oW‡»½�+,,<|øppp°““ía°··_¶lÙ¾}ûrrrúBƒš|€M£¯êÐ½è-”é•ØªªªÌÌÌ¼½½éYÌ¾¾¾ôƒ¿’Éd±±±ÇŽûùçŸkkk	!�@,¿öÚkóçÏgúê_SV}þù§���‰‰	-€^ùAõäí�à/•JT^^~ïÞ=…B1bÄˆþýûëëë³ëg^Øæ<ì…ôÖ¦•••ôÙÊÊJ+++fÀ+¯¼òÃ?lÛ¶íƒ>P±�]Ø¨îºªƒ:ÓªSžL&KII¡—w=wî\mmíË/¿|üøquÖkddÔØØXVVfmmÍ(++³±±122ª¯¯'�Üí}Mß¹C÷ÂU àôfÊÖìŽz
+…¢®®îøñã³gÏfŸÜöòË/wïÉmmºyó&]}èééIIIIQñ+zç�w![·n#„„„„¨xa›ó°*·:ÄÄÄ°üöÛo„‹ÜÜ\wa£ÚÛFÛÞáæ´7F�òØh„•••šë¥­‡fˆˆˆ huhßÓ§O£££Ù=ýúõ›={6zÔ‡#¾ À†·…Jž<yò¯ýK$õÄåÌ\]]·mÛ–œœ\QQÑÜÜ\ZZúÓO?Ñ”DÇÐ<dkk{àÀ�‚‚‚úúúÆÆÆÜÜÜýû÷3=*
+KKK#„Œ5Š^*8==�ýlgƒïúõë	!ŽŽŽñññµµµñññŽŽŽ­^EOä²²²Úµk×½{÷¤Ri}}ý­[·öïßïëëÛå�êÍàÛayþþþGŽyðàý©mß¾�°¾«t¸^zr›¥¥åáÃ‡ËÊÊÊÊÊ"##éÑ\œÜÆVPPÀô0Ð»‚9880=Ê—@Õ|€o­ÕÔÔ$$$„‡‡Ïž=›~*3×ˆˆŽŽf_rµ/¸ÿþ¶mÛÆŽÛ�s’vXXX\¿~�ÒÞHö<í­eìØ±tÀ¸qãÚ, ½‡ÊKJJlmmÙÐ«Rf|uuõŒ3TÜ…�joUl{‡›£âåªËksypp°šëmllô÷÷Wž!00°©©Iy|ß¹œ®ÃÐ£|€oªÈd²V|>Ÿéˆ`_~Ô—™™¹yóf???+++>Ÿobb2nÜ¸÷Þ{¯¨¨¨ÕÈØØØE‹<X(9;;¿ÿþû™™™ôYÕhÇŽtÀÎ�;[=¥N
+lµ0//oÖ¬YÆÆÆVVVÁÁÁ´1cÀ€ì—Èåò“'OÎ™3ÇÖÖV ˜˜˜Œ;vÍš5ÉÉÉ]Þ¨ö¶QÅ¶«³9*^®¢¼äää7ÞxÃÑÑQ(Z[[ûúúîÛ·�9 ©ÎzÃÃÃ]\\�ŒŒ\\\¶oßÎ¤^åñùùùsçÎ511±²²zóÍ7ué•••ÑÑÑ¡¡¡~~~´�ÞÂÂböìÙááá			m^FºÁ ØúÐÉmÏ®¸¸˜žV’žžž’’ÒÜÜlggGO+‰Dîîî´MtÞ×_xùòe®k­QXXOßCrss[ZZE"}=z4ml€î…“Û €Á·‹jkk333égXbbâÓ§OMMM]]]ég˜¿¿?s*:è€ùóç¯_¿ÞÕÕµ®®î×_Ý°aCuuõW_}EÏ¢hSssóµk×ÒÓÓ™ë0…Â	&xxxà:½Á Ø|»AKKËíÛ·™\PPÀçóŸþy&3çB�–R¾‚›‡‡GRRs‰4 êéÓ§			ôÝ ++«¶¶ÖÒÒ’¹â˜›››òõ¡G!ø ‚o÷+..fŽñ¤¦¦J¥R¦#ÂÃÃÃÛÛ›¹Xh‹³gÏîÙ³';;»¼¼|È�!,øðÃéív
+
+
+˜°K{†Æ„]ô0pÁ Ø|{V]]]FFýD”H$•••ìŽ‘HdiiÉu� Ð9´‡�éøüø±¾¾¾——óý=šÁ Ø|{»#"==ýæÍ›ìŽ‘H4lØ0®k€¶UVV2wMSîapww711áºFh‚/ °!øræñãÇiii­:"˜³^&L˜€þQ nåçç3a—ö08991ÿIÑÃ |€ÁW#°;"’’’***LLLÜÜÜÐÐ›¤RiJJJ{=žžžô E|€ÁWãÐŽæô¸VÎÎÎ\× ;Ø=™™™uuuVVV¾¾¾èaÐ¾ À†à«éÐÐínÜ¸Á|·dz˜ï–èaÐ%¾ À†à«MTwDÐ› s]#€&Rîa000ðôô¤ÿw¼¼¼lmm¹®z‚/ °!øj1ö™7LGs0ÐÇUTTH$vCÿþý'NœHÿƒŒ?ÞØØ˜ë¡Ç!ø ‚¯ŽøóÏ?SSSég|ZZZSS:" ºqãsX777W.—�3WìË|€ÁWÕ××_¿~�¶0^ºt©¼¼ «šššØ_ùþüóOô0 ‚/ °!øê>vGÄ­[·
+û~ªèˆ ­S^^ž””D¥322êëëû÷ï?yòdzjz€Á Ø|û–’’æÚakkË><f``Àu� ­)Š›7o2·þÎÏÏçñxèa u ø ‚oßÕÜÜœ��M“ÄåË—Ÿ<ybllìîîN;ƒ'OžÜ¿®k„¾K¹‡ÁÐÐ�Ý¶>pà@®k-€à l¾ðª;"œœœx<×5‚Ž+//¿té=5�ö0X[[ÑßC¡PÈu� e|€ÁÚ@;"˜+ü766¢#zz §!ø ‚/t@¹#B(º¸¸Ð\‚Žè,vCjjjII‰¡¡!s×4ooo®kÝ�à l¾Ð9èˆ€.xòäÉåË—éoNvvvssó€ÑÃ =Á Ø|¡ëªªªRSS™ÜØØ8pà@///‚===¹®¸�Ð¾ À†àÝC&“eeeÑ”såÊ•²²2vGDPP�µµ5×5BÏjllLLL¤§¦µêa‰D&L077çºFès|€Ázíˆ §Ç]¿~ºJuƒ«««@ àºFèÓ|€Áz\uuuJJ
+ÍF‰¤¡¡ÁÆÆfÂ„	ôš¬"‘Z¤Í†ñãÇÓSÓÐÃ šÁ Ø|¡W±;"âââJKKÙ���àºFh�éa�H$©©©UUUFFF~~~èa Í‡à l¾À¥ââbæØaFF†\.GG„†(++»rå
+ýÑdeeÉd2›€€ ô0€vAð 6_ÐÊæææ&L I=M¹‡AOOÏÝÝ�ù2hÐ ®kè4_ `CðMÄtD¤§§ÇÅÅ	WWWtDt¯††&é¦¤¤TWW£‡t‚/ °!ø‚h¯#‚žM5~üxtD¨O¹‡aèÐ¡tg¢‡t‚/ °!ø‚–©©©¹víZ{~~~FFF\×¨YäryFFsu9ô0@Ÿ‚à l¾ Åd2Ynn.=ÿþ}vGD@@€��×5rC¹‡ÁØØØ××—îooo333®kè¾ À†àºC¹#ÂÎÎŽ¹s˜»»»žž×5ö ÒÒÒ¸¸8vƒ½½ý¤I“èxþùçÑÃ }‚/ °!ø‚nb:"ÒÓÓªªªt¯#‚éa qÿñãÇèa hÁ Ø|A÷±;"
+™Ž�ÀÀÀ¡C‡r]£º”{úõëçïïOOMC@+¾ À†à}ŽÖuD]¹r…žšF{üýýiÍ£G�æóù\× ¡|€Áú´ÚÚÚÌÌLšƒŸ>}jffæííÍmGz º‚/ °!øüGKKËíÛ·™\PP F�E³f@@€½½}Ï­½¾¾>))‰†Ýk×®ÕÔÔXXXÐ[Öùùù¹¹¹™ššöÜÚt‚/ °!ø´�éˆHOOOIIinnîöŽˆû÷ïÇÅÅÑµäååÉd2GGG&ì¢‡àÙ!ø ‚/@ÇTwDøúú«3�rƒP(?~|VVÖúõëß~ûmô0 t/_ `CðèœÎvDTUUÅÇÇÓSÓhƒ¥¥%Ó­K{Æ�7mÚ´Ï?ÿœ«�ÐU¾ À†àðLrssionRRRnn.!dÌ˜1~~~^^^‰$55µ¡¡aÀ€ôÆi¾¾¾žžžìIÞÿýßÿ=++‹£� ÐY¾ À†àÐmž<y’œœ,‘H$IzzºƒƒvŸþy/<sæÌœ9sŠ‹‹mmm{­Z€¾ Á Ø|¸WWW×¿ÿˆˆˆW_}•ëZ t
+‚/ °iÖ…úú&ooïØØX®  Ðe¾ aÊ”).\àº
+   ]†à ¦N�úèÑ£Û·os]  €ÎBðÐ^^^ýúõC·  @ÏAðÐ� 00Á   ç øh
+±X|éÒ¥ææf®  ÐM¾ šB,×ÔÔ¤¥¥q]  €nBðÐ£G�2dÈÅ‹¹.  @7!øh±XŒ6_  €‚à A¦L™’œœ\]]Íu!   :Á@ƒˆÅâ–––„„®  ÐA¾ dàÀ�ãÆ�C·  @O@ðÐ,b±ç·  ô_ Í"‹oÜ¸ñèÑ#®  Ð5¾ š%  ÀÀÀàÒ¥K\   k|4‹±±±��Ú|  º‚/€Æ¡WóU(\   S|4ŽX,...¾uë×…   è_ �ãååeii‰k;   t/_ �ÃçóÑæ  Ð½|4Ñ”)Sâââš››¹.  @w øh¢©S§ÖÔÔ\»v�ëB   t‚/€&5j”ƒƒº   º‚/€†š<y2‚/  @7BðÐPb±øÚµkUUU\   #|4Ô”)SZZZâââ¸.  @G øh(—6»x<�Çëý’   ´‚/€æš:u*Ú|  º‚/€æš2eÊ­[·<xÀu!   º Á@sMš4ÉÀÀà÷ßg/dšx,ì%!!!ìå­&W^xôèÑÀÀ@ƒ#FlÚ´	§Ö €.á)
+®k €vMž<yÐ AG�e–´ÙÝKÿ#Ó§.\xêÔ)åå­þ³³*Š¥K—~ÿý÷­¦uvvNJJ277ï¾èUQQQK–,Á' P8â Ñ¦L™ËþØfþ­`a¿äêÕ«gÎœ©©©QÿÃþÛo¿ýþûïUVVV__Ÿ””äååuãÆ�þóŸÝµ-   ÜBðÐhS§N-))ÉÉÉQÿ%_}õÕÌ™3MMMÕÉÁƒ	!Ç�é¥—¬­­�ŒŒ&NœøÃ?BNŸ>ÝÙš  4‚/€Fóðð°²²êÔµ;»–?þøƒ$ø|>ŸÏ×ÓÓ>|8!¤°°°³³  h&_ �Æçó;|---[-Qîñmhh` Oµ´´´´´Èår¹\ÎnnnîZå   šÁ@Ó‰Åâ¸¸¸¦¦&f	²2™LÍHþ÷ØmBB{€³³3!$%%EÑ–gÞ   �€à éÄbq]]ÝÕ«W™% „œ<y²±±Q�œœœ!ï¾ûîƒjjjÎœ9ó—¿ü…=àí·ß&„Ì�;÷àÁƒ………MMMyyyðõõíÎ�  à.g †öÚk¯}üñÇôáªU«:Ä â²e„�ß~ûmæÌ™ì%¯¿þzDD{ðÚµk¿úê«6×Žw	Ð^¸œ °áˆ/€ 5c~ùå—kÖ¬±··
+…ê¼ü…^ˆˆˆ=z´P(2dÈÖ­[÷ïßßjÌž={bcc-Z4xð`¡Phddäììüþûïgffvç–   pG|´À?ü°téÒ²²2å× @ñ 6ñÐb±X¡PÄÅÅq]  €CðÐÖÖÖ®®®�º¨   ´‚à ÄbñÅ‹¹®  @‹!øh±Xœ——‡û¨  t‚/€v˜4i’¡¡á¥K—¸.  @[!øhCCC___´ù  t‚/€Ö m¾r¹œëB   ´‚/€Ö‹ÅOž<ÉÎÎæº   ­„à 5Æ�oee…n  €®AðÐ|>òäÉ¾   ]ƒà M¦L™’��ÐÔÔÄu!   ÚÁ@›L�:µ¾¾>))‰ëB   ´‚/€6>|¸££#º   º Á@ËàÞÅ   ]ƒà eÄbñõë×+**¸.  @Ë øh™)S¦(ŠË—/×ÔÔüúë¯ï½÷ž³³sbb"×u  h:× @'477ß¼ysÌ˜1¡¡¡‹/–Ëåzzzr¹ÜÊÊŠëÒ   4‚/€¸ÿþéÓ§ûí·„„„ÆÆF�@ “ÉèSôÆÖÖÖœ   |´@ssóæÍ›
+!„I½�ÇÃ_  €¡Ç@Œ1b÷îÝ<¯ÍgMLL|‰  è ‚/€vxóÍ7§N�ª¯¯¯ü”¥¥eï×   u|´FDD„¡¡¡òq_4ø  ¨Á@k4hïÞ½ÊËØûÅ   h_ m²téÒ_|Q(2Kø|¾��‡%  h_ -³oß>333=½ÿüçåóùýû÷ç¶$   ­€à e¬­­#""èå{	!<Á  @¾ ÚgÞ¼y¯¼ò
+mx�Ëå8¹  @¾ ZiÏž=æææzzz2™G|  Ô�à •¬­­�?®P(
+Žø  ¨w{êA>LJJâº
+Ðe"‘(!!!-nº3—    IDAT-­´´”ëZ ˆ¯¯ïsÏ=Çu  íBðíAIIIK–,áº
+Ð}7näº B9qâÄâÅ‹¹®  ]¾=N¡Pp]è².p]ôuÊ÷ Ð4¾ ÚmÚ´i\—    pr    ô	¾    Ð' ø   @Ÿ€à    }‚/    ô	¾    Ð' ø   @Ÿ€à    }‚/    ô	¾    Ð' ø   @Ÿ€à    }‚¯Fàñx<OÓVÑÔÔêèè(
+{º¼®éìF©3¾~½¦Õ¶ôÄ¦©9g÷®º‡~Fò£ç±[[ÛyóæÅÇÇ·VXX¸zõêáÃ‡�7nÝºu©©©]˜Š¢P(Nž<9kÖ¬�êëëÛØØÌ˜1ãûï¿W(=¸©  ½Ž‡÷µžµdÉuö0ý¸íÑŸEVñá‡~úé§ÌCüUéìF©3¾~½¦Õ¶ôÄ¦©¹Š®­º{gëòêzyò6Ã·žž^LLÌÌ™3éÃÌÌÌÀÀÀªª*å‘ìU¨3!¤¶¶vÉ’%gÏžU,‹O�:ennÞaÙtu'NœX¼x±:ƒ{�úïÃ Ðàˆ/´ëøñã„�S§N555iæÇ†B¡ÐÌÂúüzÝ±MMMüñÇôéÓåryXXóìúõë«ªª\\\ÎŸ?_^^ÞÔÔ”››»wï^//¯ÎNEY¹råÙ³g-,,¾üòË¢¢"©TúàÁƒÝ»w[ZZÆÆÆ¾öÚk=¼­  ½G|{�¶ñ---r¹\þþÛ-pÄ—pôk†#¾�=âËY\\<xð`CCÃ††ºÄØØ¸¡¡!//oäÈ‘Ï8UllìÔ©SMLL®^½:vìXöËsrr|||êêêÎž=ûÂ/¨S9Žø€†Ã_í •J·oßîææflllllìææ¶cÇŽææfõ´"‘H,,,ø|þž={”Ÿ¥M�---„===¦÷±ÃµÐ‘!!!íÀ¬â“O>qpp0003fLddd«aG�´°°0001bÄ¦M›ØÞmÕ”yïÞ½¹sçšššZ[[¿õÖ[õõõmvmv¸RBH}}ýêÕ«­­­ÍÌÌ^|ñÅÂÂBæ)5wB›ÛÛ…%“ÉvïÞíééijjjll£æþé”ÂÂB�gaa!—Ëé’¬¬,ZgVV]"—Ë-,,x<³CØÛÅþƒ½
+uö<ãÙgëÚÎQñ£W=§L&ûæ›o&Nœhcc£¯¯?hÐ E‹ÅÆÆª³-ê055eþmiiIaÂë³LE÷ÛÆ�[¥^BÈØ±c7nÜH9tèP×V  qÐcNœ8¡æVý³hllœ4i’òÏ.((H*•ª3 Õ*.\¸`lllbb­¢žVÔ_ËÂ…;ü£Ï¾þúë­f‹ŠŠ¢ärù«¯¾ª¼:ggçªª*å�*++³³³c�\°`A«:\)3†y-õÜsÏ•——waW·÷#VsGI¥ÒiÓ¦)¯®û§½ÂØìíí	!ôáöíÛiDûì³Ïè’ŒŒBˆ½½}›s*Óê)Õ{¾Í=ÖµÙÔÙ9í­±½}‡s*×ÃÔ¬b[Ú+ƒþ›éO „,[¶Œ³fÍBˆ©©éªU«:”��-“Éº6•ƒƒ!$''§Íbþøãò¿?q!'NœPgdoRÿ} ú¼ô î
+¾ááá„‹ˆˆˆÒÒÒÒÒÒo¿ý–žnBI‡Ø«øé§ŸìììÒÓÓ;U•úk<xð™3gjjj:œ|È�!111UUUEEEsçÎ%„ˆD":àÀ�tª¨¨¨²²²úúú¤¤$ÚÂª\á†!W®\©©©¹rå
+�qD)ù©X)3ÆÞÞžÎsùòå¡C‡B6mÚÔÙ]­bgª¹£vîÜIóÍîÝ»<xÐØØ˜””4þü.ìŸö
+c[¾|9!dÏž=ôá”)SÜÝÝÝÜÜÄb1]Bÿ>°bÅ
+ÕÛ¥<³:{¾½Wua6uvN{Ó¶÷£ïpNcccBHXXØÃ‡¥RiyyyLLÌ´iÓToK{e´øäÉfLMMÍ¼yóØÌÍÍW®\YPPÐÙ©	!mS__O144T³r_ Ðpx;èAÝ|]\\!‘‘‘ì…$„¸¹¹©3€YÅÑ£GÁ¸qãŠŠŠ:[•úk9}ú´š“_¸p�Y’ŸŸO133£½½½	!ñññìWÝ»w�2räHå
+ŸþyBHLL38::ºÍX¦b¥Ìö±ðŸ~ú‰2fÌ˜Ní„6··ÕÃw”««+!dÿþýÊOuvÿ´WÛ·ß~KY´h‘B¡¨««300Ý´i“¡¡a}}½B¡X´h!$""Bõv)Ï¬ÎžoïU]˜M��ÓÞ´íýè;œsôèÑ„�iÓ¦½ûî»¼sçŽ:ÛÒ^lÖÖÖÉÉÉÊ#srrÂÃÃ,X@�ÚB,,,²³³;5•:Á×ÒÒRÍÊ|@Ãáí uWð¥ŸLeeeì…¥¥¥„###u0«ÐÓÓ3fŒŠ¿öª¨JýµTTT¨99ûã–i-¥éñ3>ŸÏçóõôôh«1 
+•+400 „TVV2VTT´ËT¬”£<=è¥þNhs{[=ìpGBJKK•Ÿêìþi¯06ã¨P(èÅ­~ÿýwÚ¥zîÜ9…B1pà@BH~~¾êíRžY�=ßÞ«º0›:;§½iÛûÑw8§D"a(5cÆŒ’’ÕÛ¢z«‹‹‹×®]K±²²*..VñªÜÜ\±XLWÚ©©ÔiupqqQ³r_ Ðp8¹­oáóù·oß>räH�®…žy£š#©V§û(
+BHKK½²„\.Wüß¹Š“öžq¥ÝBùTúöNBRG)ë‰ý3lØ°!C†”””äåå�?ÞÄÄD$‰D"ccãóçÏß¹s§¤¤dèÐ¡ŽŽŽ]›¿{÷|/ÿòt8§¯¯ï�;w$ÉgŸ}¶hÑ"SSÓsçÎ­[·®k«£ìììvïÞ=kÖ¬ŠŠŠÍ›7«9jÔ(úÿ:!!¡SSùúúBN�:Õæ«èò6ûÚµ…\.×ÓÃ' üÞ´À¨Q£!­./ÿë¯¿Bèß÷;Àøá‡ø|þ;ï¼óå—_v{ÝËÙÙ™’’’Òæ76åñôÀUbb"³D"‘tyíìôG¡iO��@‹²¯Ð^é�ó—_~Q~ª³ûGM´à.èëë\¸p�nÐ@e2Y—è–Ùžeç´÷£WgN�@àëë»qãÆ“'OÒKa\¸pá·…²k×.�@päÈ‘¼¼<Ã*++IGWLSžjåÊ•„�;väää´œ““³cÇBÈêÕ«»P¶†hjj¢   êIÝ{r›¥¥åáÃ‡ËÊÊÊÊÊ"##-,,ÈÿžÜ¦b {'Ož¤ÏÚ±cG§ªêÔZº¶Éì…„[[ÛÔ××766æææîß¿âÄ‰Êã×¯_OqttŒ��¯­­���gLª¿Ræ¡ê“ÛTï„É“'BæÎ�[TTT]]ýë¯¿2D�J”}þùç„33³¯¿þúáÃ‡���ÉÉÉôä¶Îî5WJû•ƒ‚‚!_~ù%]øÅ_B¦N�JùöÛoUì=BÈ÷ßßªgT�=¯¬Ë³©³s”©þÑw8§¿¿ÿ‘#G<xÐÜÜ\ZZº}ûvBˆ±±±êmi¯ŒVƒƒƒÉÿµ_+
+WW×mÛ¶%''WTTÐÕýôÓO´É8((¨SS)
+z!KKKz¥T*}øðáž={è_$¶lÙ¢º`öê4°Õaß¾}jö(@_€àÛƒ:|Û¤P(ýýý•Ÿ
+¤÷Tëp€â?Oœ8Áçó	!Û¶më°*æag×¢Î&«^¢b·´_RRbkkËCO{�Z)}øâ‹/²§b_Î¬Ã� |ëWæBWª+Q&•J§L™ÒÞæwjÿ¨¹Ò;wî0“Ü¼y“.¼qã³ðîÝ»*ö=|Øa%jÖó,³u¸s”ÑgÛûÑw8g›ËƒƒƒUoK{e´ZøèÑ####�—ššÚÞº!×¯_ïÔT
+…¢¦¦fÆŒÊ³lÝºµ½:Û¬\ƒïž={lmm¹® 4‚oê®à«P(ÃÃÃ]\\�ŒŒ\\\¶oßÎ$-u´ú¤=„��>úHuUì%�]K‡›ÜáÂØØØE‹<X(9;;¿ÿþû™™™mŽÏËË›5k–±±±••UppðÍ›7	!èÔJéÃÚÚÚ7ÞxÃÒÒÒÄÄdÞ¼yìÓ¹:Ü	
+…"""bôèÑB¡pÈ�![·neþÀÝ…%•JwìØAWgbbÈ¾ì@§ö�š+}î¹ç!C†Q^øÜsÏµÜjÎ§OŸ®Y³ÆÞÞ^(²ŸRóÇÝÊ3Î¦zç(ëðG¯zÎäää7ÞxÃÑÑQ(Z[[ûúúîÛ·�¹¼n{ÛÒ^ÊËCCC	!ôÒr™™™›7oöóó³²²âóù&&&ãÆ�{ï½÷Z]­E�©(¹\þÃ?Ì˜1cÀ€LG¬ê/ÆmV®�Á÷³Ï>sppàº
+ Ð¸eqÂ­2¹õõ×_‡„„^¾|™ëZ ´ÉÎ�;7nÜ(
+þùç™3gªù*Í¼eñ'Ÿ|rìØ±[·nq] hœÜºcþüù			ÕÕÕ�?>pà =u�}w4 PÇ†6oÞÜÜÜ¼hÑ¢.Ÿš©!ÊËËŸåò)  c\ Ðm~ùå—V@ððð §ò @§|òÉ'Ÿ|ò	×Utƒ²²2zf!  Á_Ð%gÎœ™>}º���¾¾þðáÃ7nÜxéÒ%}}}®ë Î”––0€ë* @Sàˆ/èŽ™3gªß� }AYY™§§'×U €¦À_  ÐY8â l¾   ›èÝ=Äu!  )| @7Ý¿_&“�1‚ëB @S ø €nºwï!døðá\ šÁ  tÓ½{÷¬¬¬,,,¸. 4‚/  è¦üü|î 6_  ÐMwïÞEð 6_  ÐM™™™®®®\W Á  tPEEÅýû÷|€Á  tPvv6!ÄÍÍ�ëB @ƒ ø €ÊÌÌ´±±±³³ãº Ð ¾   ƒ²³³Ç�Çu  Y| @I$’‰'r] h×è¾¨¨(®K  è[JKKïÜ¹ãççÇu!  Y|{Ü’%K¸.  o‘H$zzz¾¾¾\ š…§P(¸® ´OuuuHHÈ‘#GBBB¶oßnhhÈuE ÿµaÃ†ØØØÌÌL® Í‚_ è
+ssóÃ‡ÿöÛoQQQNNNIII\Wð_III8Ü Ê| ë¦OŸž••åääÖÒÒÂuE ¤ºº:--mÒ¤I\ Á ž‰��MLLÌÞ½{wìØ!‰îÝ»ÇuEÐ×]¼xQ.—OŸ>�ëB @ã øÀ³âñxÁÁÁ©©©���ãÇ�?rä×AŸvþüy///KKK® �ƒà ÝÃÉÉéêÕ«kÖ¬Y¹råâÅ‹+++¹®ú¨ß~û‡{ M¾ ÐmÂÃÃÏŸ?Ÿ””äææÏuEÐçÜ¼yóáÃ‡3fÌàº ÐD¾ ÐÍÄbqff¦»»{PPÐºuë¤R)×AòÛo¿YYYyzzr] h"_ è~ÖÖÖ?ÿüsdddDD„H$ÊËËãº"è+~üñÇùóç¸= ´Á zÊòåË³³³…B¡››ÛîÝ»¹.tßƒ®]»¶`Á® …à =ÈÑÑ1..nÓ¦Më×¯_°`Á“'O¸®tÙ/¿übnn.‹¹. 4nY ½!99yéÒ¥uuu3gÎäºÐM“'O¶³³;vì×… €†Â_ è'N¼~ýúÔ©SgÏž½zõêúúz®+]SVV–��ðâ‹/r] h._ è%ýúõ;räÈ‰'Nž<9aÂ„¬¬,®+�òý÷ß›ššÎž=›ëB @s!ø@¯zé¥—222¬¬¬|||¶oß.—Ë¹®tÄ‘#G^zé%CCC® Í…à ½ÍÞÞþòåËaaaÿûß§OŸ^\\ÌuE õrrrÒÓÓ_{í5® �†à àóù¡¡¡‰‰‰÷ïßwssûå—_¸®´ÛñãÇ&MšÄu!  Ñ|€3&LHOOñÅçÏŸ¿|ùòÚÚZ®+­$—Ë�?¾xñb�Çu-  Ñp93 àÞ©S§V¯^mmm}ìØ1®Ë-óë¯¿Î›7///oøðá\× G|€{.ÌÉÉqttôññ	kiiáº"Ð&ÿú×¿Äb1R/ tÁ 4‚­­íÙ³gwîÜîïïŸŸŸÏuE 
+
+
+Î�;·zõj® -€à š‚Çã­[·.--­¶¶ÖÝÝýèÑ£\WZ`ÿþývvvsçÎåº Ð¾  YÆŽ›’’²råÊåË—/^¼¸²²’ëŠ@sI¥ÒC‡­X±B p] h_ Ð8†††»wïþí·ßÝÝÝããã¹®4Ô±cÇ***þú×¿r] h_ ÐPÓ§OÏÌÌ7nÜäÉ“?øà©TÊuE Y
+Å®]»–,Y2hÐ ®k í€Ë™€FS(xï½÷œ���;6räH®+Mñûï¿O�:533ÓÅÅ…ëZ @;àˆ/ h4�œ––&“É\]]wïÞÍuE )¾üòË€€ ¤^ P‚/ h�1cÆ$''¯]»öý÷ß_¸payy9×ÇîÜ¹söìÙµk×r] h´: €6ùý÷ßW¬X!“É"##_xá®ËÎ¬X±âúõëÙÙÙ¸M1 ¨G|@›L™2%'''((hÖ¬YëÖ­kjjâº"àÀÝ»w�;ŠÔ �‚#¾  •¾ûî»¿þõ¯öööÇŽsuuåºèUo½õÖ¥K—nÝºÅçó¹® ´	Žø€VZ¾|yvvv¿~ý|||¶oß.—Ë¹®zIQQQDDÄ†�z ³|@[9::ÆÅÅ…††nÞ¼yÆŒÅÅÅ\W½a÷îÝýû÷_¾|9×… €öAð -&ÂÂÂïÝ»çææÍuEÐ³>|¸wïÞ?üÐÐÐ�ëZ @û ø€ÖóññÉÈÈ˜>}ú¼yó–/_^WWÇuEÐS¶mÛ6hÐ 7ß|“ëB @+!ø€.077?räHTTÔ¯¿þêééyýúu®+‚îWPPpàÀ�ÿ÷ÿþŸ¾¾>×µ €VBð ÝñÒK/eddØØØx{{‡……µ´´p]t§ððð¡C‡®\¹’ëB @[!ø€N±··¿téÒ'Ÿ|²mÛ¶I“&åççs]t�{÷î:tèƒ>
+…\× Ú
+×ñ Ý”ššúÚk¯•––îÝ»÷µ×^ãºxVóæÍ{ôèQJJŠžÙ @áí t“——WVVÖŠ+–.]ºxñâ§OŸr]tÝÅ‹£££wîÜ‰Ô ÏG|@Ç�>}:88ØÔÔôÈ‘#þþþ\—�ÖÒÒâááaooÿË/¿p] h7|u ·`Á‚œœ''§   >ø ¹¹™ëŠ s"##oß¾½k×.® ­‡#¾ Ð'(Š={ö„††ººº=ztäÈ‘\Wj©®®9rä«¯¾úÅ_p] h=ñ€>�Çã­[·.--­±±ÑÃÃcÿþý\WjÙ¾}{KKË?þñ® ]€à }ÈØ±c¯]»¶jÕª·ÞzkáÂ…ååå\WªÜ¿×®]ÿøÇ?,--¹® tZ  /ºpáÂÊ•+
+EDDÄ/¼Àu9Ð¶W_}5;;;33S p] èñ€¾hÚ´i™™™^^^³fÍZ·n]SSS›Ãäry/Œ”””'N|ôÑGH½ Ð]pÄ ú.…BqàÀ�÷ßßÑÑñØ±c...ìgÄbññãÇ‡ÊU…}–L&óòò²¶¶¾xñ"×µ €îÀ_ è»x<^pppjjªP(ôööÞ½{7ûXÀ–-[’’’V­Z…½oûöíwïÞýöÛo¹. t
+Žø �æææO?ýôã�?‹Å‘‘‘ƒºté’X,V(zzz»víZ·n×5v³§OŸÞe!„Œ`±°°à°¶Û·o»¹¹}òÉ'6là° Ð=¾  ÿqéÒ¥åË—K¥ÒÏ?ÿ|ÝºuOŸ>¥ï�|>?99ÙËË‹ë»¨¢¢‚	¸wîÜ¡ÿxòä	!D(ÚÛÛ�1‚r÷îÝÂÂB™LF±¶¶¦	xäÈ‘L¶²²ê…j
+EPPPMMÍµk×ÐÝûÿÛ»óð¦ê|àŸ4I›t/K¥tI›î)PîEÁ©ŠˆÈ¢#Ê¨8EædTàÞqžŸ8Î8®8#‹\)‚JÙf`@–‹x•BiKÒ½-Ð%möäüþøê™ÃIš¥´MÛ¼_ø˜““s>ßoN“7'ßó= Ð½| þíêÕ«O?ýôßÿþw»ÝÎ" I¥Òäääü144Ô¿å¹g·Û«««u:Ý….^¼¨Óét:]]]�Åb!¢ÈÈÈôôtµZ­ÑhrrrÔjµZ­vž&¬¹¹™½�ßHEEE[['$$°òQ©TR©´[±mÛ¶E‹�9sæöÛoïÆÍ ‚/ €È|ð›ßüFôÙ(“Éžyæ™¿þõ¯þªJ„e\aÀfÜ¨¨¨´´4aÀu™q½Ç§a>_¾|¹µµ•nNÃ| îrnllÔh4,xç�wº\- @g| þ��.u9»™D"ùê«¯¦OŸÞË%Ùl¶²²2aÀÕétµµµV«•ˆ¢££srr„÷3®÷„i˜â.´´´‘\.OLL–¤Ñh233=]X¸pá±cÇ.\¸ÑM €@ƒà ð‹Årûí·—––òƒ„‚‚‚"##KKK‡ÖC˜L¦.ènÆg\µ+}í–f¢4Ì#WiX­Vçää(
+öÚÃ‡Ož<yß¾}S§Nõk# `ÀBð øÉÿûÿïµ×^
+
+êì¾r¹|Ê”){öì¹õ}�FÑI\�NWSSc³Ù$IJJJßÏ¸Þs™†+++9Ž“ÉdIII¬�õõõW¯^ýàƒ4�R©ôwÕ 0 !ø ü¤¢¢bÿþýûöí;vì˜Ífíèè­#‘H6lØðë_ÿÚûÍ†ÒÒRÑ¨€+W®°­‰2®F£IMMåO‚`&“I«ÕŠÒ?KÃD'¿‘��ÝÇ/.€¾Á @Ìf³�9sfïÞ½»wï®¨¨`×iÙívö¬\.ÿî»ïFŽéüÂŽŽŽK—.‰®knn&¢   äädÑE`ñññ!!!½Ù´>Îl6×××‹.Ú«ªªbçàcbbDWìeee………ù»j è7| ÜùñÇ8°wïÞÓ§OÛíö��³Ùœ››{ôèQQÀÕétÎ—jÈ¸]ÆÒ°îæiÚ„iX}óm™™™áááþ® ú"_  ôz}yyùùóç÷íÛwîÜ¹ºº:á¿*•J¼‚ƒƒý[ó€g±XêêêDÿð¨®®f'æY¾/˜) | þ­­­­¢¢BôS;;�+“É222rrrRRR¤RiCCÃ’%Kþã?þ·ï¦a>³KI�†ù@œžžéïª ÷ ø@€jii)))]\Å2®B¡]Y¥V«år¹¿«ŸY­ÖÚÚZÑœ.\0™Ltsf�xäÈ‘QQQþ® z‚/ |W®\qž—e\¥R©ÑhD7))Éã­ _³Ùl555¢CââÅ‹F£‘œÒ°Z­ÎÉÉ‰‹‹ówÕ p«|`@Ñ¹Â2nXXXVV–èôÞðáÃý]2ô!¢JKK¹JÃŒ¿K  ø@¿Äq\ee¥(àjµZvËÜðððÌÌLÑ€Îþ{ð¯ææfÑ°ï²²²ööv"ŠŽŽNMMEá””‰DâïªÀ_ èëœ3.·ÀÆhFDDdddˆ.áGÆ…žÆnG'Äåååz½žˆ
+�4Ð× ø@âp8ªªªDWå×××›Íf"ŠŒŒLOOWß<w2.ôüÍ™ù@\QQÑÖÖFD!!!ñññ¢p$''ù»j€ ‚à þ!Ì¸|Jà3nTTÔˆ#DçÌ�q¡?âÓ0´—””´¶¶ÒÏiXôo9¤a€žƒà =În·WWW‹~®««³X,Dç<w2.l¢4Ìþ:®\¹BDÁÁÁ			¢Ñ;*•ŠÝ: n‚/ t'–qEWñ×åEñÈ¸ Œsfèæ4Ìb¤a _!ø@Ùl¶²²2ÑÜOµµµV«U"‘¤¤¤ˆnjjjtt´¿«èg\¦áÊÊJŽãärybb¢ð¯L£Ñdffbj€Î ø€gF£QpÝd\�F“ššªP(ü]5À€e2™´Z­è¯²³4Ìþ*•J¥¿«ð?_ ¸‰Á`(--eÜšš›Í”œœ,ú±5>>>$$ÄßUÖ5æQ    IDAT ™ÍæúúzÑ@£ªª*‡Ã!“É’’’Di8;;;44ÔßUô*_€ÀÕÑÑqéÒ%——×H¥R•J%ºØ ßai˜ÿg™¸ººÚn·“«KK³²²ÂÂÂü]5@OAðíííeee¢/?v#_–qEÓ‹&$$û»j è‹¥®®Nø/Þ‹/òi8&&Fô��™™îïªº‚/À@£×ëËËËu7ÏÆ2®L&ËÈÈ�àILL”Ëåþ® üÌjµÖÖÖŠ~*//·ÙlD#ú	(###""ÂßUøÁ kkk«¨¨écW©Tj4Ñ�>d\ ð‰sÖét/^4�ôsúOOO�ŒŒôwÕ �BðèZ[[ÏŸ?/ºˆ›eÜÐÐÐììlQÆMJJÂ”F Ðl6[MM�(—––º9³@<räÈ¨¨(W@„àÐýë_ÿ*))}©°Œ–••%úR>|¸¿K  ††Ñ?Î/]ºÔÑÑANiX­V�1bØ°aþ.‚/€?é\a7<<<33Sø¢79€þ¦¹¹Y4«¬¬¬½½�\¥aÆß%Ã@†àÐ8Ž«¬¬ì,ãFDDdddˆ.AÆ€�Š¿Ÿ‰ËËËõz=u’†SRR$‰¿«†� Á ›9gÜ.èt:“ÉDD‘‘‘ééé¢©‚�q „7gf�¸¢¢¢­­�ˆ
+…Z­ÍHƒ4]€àÐu‡£ªªJôI]__o6›‰(:::''GôI�Œ à=af³.\hii!¢���øøxÑy„äää   W}‚/€W„—ÿmŽÏ¸Îw?BÆ è!¢4¬Üu’¥aÑÈ1¤aà!øˆÙíöêêjÝÍ7€¨««³X,DäòRd\  ÿrNÃ'$$ˆ®V©TR©ÔßUCoCð…€Æ2®èŠc–q%IJJŠ(à¦¦¦FGGû»j  ðJKK‹V«EáÊÊJŽã„i˜ÄHÃ‚/
+›ÍVVV&šc²¶¶Öjµ%''‹>þâããCBBü]5  t3“ÉÔÐÐ :åQUUåp8ärybb¢ð|‡F£ÉÌÌÄý€_€ŒF£(àºÌ¸ü^ý=ã®^½zÿþýgÏžå—°+�Æ_·¯mñfý¾Ö?Â+Ó¥Ré�!Cî¸ãŽ_|ñî»ï®VUUõúë¯9r¤®®N*•¦¦¦Þ{ï½�?þøØ±c}Ýq÷ùçŸoÝºõÜ¹sÍÍÍÑÑÑÿùŸÿ¹páÂ_þò—ýúJù¾öæ:Uè±à>~xŒ;vÚ´i¯¼òŠ¯ýÐ×˜ÍæúúzÑ ·ÎÒ0ûQ*•þ®|†àý›Á`(--eÜšš›Í&•JU*•è‡„„„àà`WÝ�êëë322Þÿý'Ÿ|’_Ø£ßý½,-øò‚‚‚Š‹‹§N�Ê~ÿý÷yyy­­­Îk
+âÍ¦ˆ¨½½ý‘GÙ¿¿óÊ“&MÚµkWdd¤¯­è#úÚ›ëìV‚/¯ï………Ë–-«¨¨ˆ‹‹ë¬	ý—Åb©««]Ö\]]m·Ûe2YRRÒpÿÃôíííçÎ�+***((ÈÏÏŸ4iÿ9+•JÕjõ´iÓV­ZµaÃ†Ã‡kµZ³Ùìï’{ÃsÏ=§P(:::„{ô¯»�txS^_k‚°³Ù|þüùx€ˆÆŽË¯sï½÷Ñ¨Q£¾þúëë×¯›Íæ²²²÷ß_¸Ž—›â8nîÜ¹DýöÛo×ÔÔX,–ÚÚÚwÞy‡]¦9mÚ´nq@~�Æ>~xèõú���åË—w©3ú%³Ù¬Õj>¼aÃ†U«VM›6M­Vó#ƒãââ&Mš”ŸŸ_PPPTTtîÜ¹ööv—ÿ†3¾Ðµ··—••	ç©¹xñ"»É™L&ËÈÈÍ–˜˜(—Ëý]µtttÄÇÇßu×]ûöí.Hg|}ÕÏø
+ëihhˆ��W(F£‘-	5�åååééé·¸©#GŽÜÿýaaagÎœ1b„ðå%%%ãÆ�ëèèØ¿ÿƒ>ØMíƒ›tíŒo_><xà�o¿ý¶¡¡A¡PxÓ’Õj­­­Í°V^^n³Ùˆ(&&F4ßpfffxx¸¿«H~
+Ü ?ikkãÏã>ñÄcÆŒá§S*•cÆŒyøá‡…çq-‹¿KîC>ýôS"zóÍ7EËYvttäçç<8<<|Ö¬YìBfÞÇü‹_ü"***88855uÅŠ---ì)«Õúþûï�7nèÐ¡r¹<..nîÜ¹‡æ:ùnî¬<ö¬Íf{íµ×T*UpppVVVaa¡h57•pNçÃ._¾<}úô°°°Áƒ/^¼¸££C´‚7;õØ?f³¹   77W©T*•ÊÜÜÜµk×
+�=—wY‰Á`xî¹çbcc¥R©ûŽ.©¯¯'¢!C†ðK†ND?üðCgñ~S�=ö­^½ÚåV¯^MDóçÏw¿#�ÜEŒ7ï»¨÷rss‰hÇŽÂíØ±ƒˆrss]ö€7ÇƒÇƒÊeëÞ~ûí1cÆ„……)•Ê_üâ{öìñ©i�=tÖ÷�µk×QQQ‘û½ ‹Å"<7üðÃ�3†3fÌ˜'žx‚?7ÜÖÖæï’>_è=­­­,ã¾òÊ+ìïŸÏ¸¡¡¡¢Œ[__ïïzû�gžy†ˆ„a‚a½:gÎa<MHH¸~ý:Çq‡ƒ}·‰äää´¶¶r÷ôÓO;?K�Ÿ”ê¬<ö¬óÖø/H�•p7U755‰Æòmô~§ûÇd29_ëCD÷ÜsŸ}]6Üe%ìWco:Šý¿ðè'žx‚_gÉ’%DþÔSOmÝºõÇ´Ùl]ÛTrr2•””¸,æüùóD¤R©:«ÖKnŽ"ïßwQï½ùæ›D4}útáŽ¦M›FDo½õ–sp^ÞT"‹eòäÉ·Ø4Q…nzR¸Bß<<<HD‹/vÓ
+àY­Vç4ÊÞ–†~øáW^y…¥aþÈ�n�à=¢¥¥åÜ¹sÛ¶mãÿªùŒ&Ì¸'Nœ¸qã†¿ëí¯FŽIDÕÕÕ¢å¬«U*Õ±cÇôzýÑ£G“’’ˆhåÊ•ÇmÚ´‰ˆâãã‹ŠŠšššÃ©S§Ø¥ß«V­â8Ž}¯^½šMi|ýúõâââÉ“'7îMylÍÄÄÄâââÖÖÖššš3fÑ„	Ø
++íî¥—^"¢äädÖ®cÇŽ©T*—1ÂÍN=öOAAEGG666666~øá‡ìjžµk×ºé—•ÄÇÇïÛ·O¯×{ì(‘¼¼¼k×®ñëèõú™3g
+WˆŒŒ|òÉ'E'ò½Ùû=Úh4º,Æ`0‘B¡pS°7ÜEÞ¿ï¢Þ»zõªL&“Ëå|sšššär¹\.oll¾PÔ!nŽo*‘7ÞxƒˆÂÃÃßyç�ÚÚZ“ÉtêÔ©Y³fùÔ4Q…nz²ï•••D4jÔ(7­ �nÜ¸qâÄ	acïŸ†W­ZµmÛ¶sçÎ	C Ÿ øÂ­jnný­ò7""Bô·ŠŒÛ½†BDÎçXÿ{ýâ‹/ˆ(;;›ã¸;î¸ƒˆŽ?.|‰V«%¢ôôtŽã²²²ˆhòäÉË—/ß¼ysEE…óÆ½)�­yèÐ!~	»‹RDD{è±Ñî233‰¨¸¸˜_yÏž=.c„›�zìŸQ£FÑ–-[„UmÞ¼™ˆF�í¦\V²{÷n÷½Ä¹Š#C†9}ú´óš%%%sæÌa§åˆ(::úÇôiSÞ$›˜˜�e»çæ(òþ}wî½éÓ§Ñûï¿Ï®_¿žˆfÌ˜Á¯àëñàÍA%ÂF\lÜ¸Ñù)_iç‡ÎúþáÑÒÒBDC‡uÓ
+èš7nˆÎ"ñ#ƒ…i˜�Ejnnöw½ý ‚/ø ¡¡AôëŸq###E¿Î ãö6§ºóošìM~Þ¸qƒ~>OÃNÅI¥R©TÄOr$—Ë9Ž;yò$ÿÅÉL™2åêÕ«Â�{S[Søêp8„/÷X‰hwlºeçv9Ç7;õØ?ì‹¿©©IØ–ÆÆF"R*•n:Áå^¼ùC¾°¡¡aÙ²eD4hÐ ††7¯*++›4i{w|Ú”7¿e»9{'JN�­ææ(òþ}wî½]»vÑ�wÞÉŽ7ŽnÎÇ¾ÞT"lŒ&ŽYÈ×CÚù¡³¾xX­Va¡§±4,7ÈO0'JÃ‡vœ _pÍyŸq£¢¢Dãñ‘qýÅýßÎ‚�ûi&ÙúV«õäÉ“k×®�7o;Áðè£�
+7îMy.×.ô¦_3ŠÇ�zìo‚/K3‡ƒ_��	ó)Ð¸Yó¡‡"¢§žzÊý¯\¹BDaaa>mŠB}õÕW]n“]½ôÜsÏ¹¯Vô6¹ÔÙQäëû.d6›LDZ­öòåËD4xð`áÜ…¾Ý|»Ð4�ÝØ÷vÆ766Ö}=Ð£ø4Ì_)ÅÞqç4¬Õjý]¯ß ø:‡Ãáœq£££Ù_Kttô]wÝ%œ�·Oac|«ªªDËÙÛ×ÙOù·ß~;�={ÖË½°jÄ²ÌgµZ=¾Ðcæð¦áúÎ¿Jût8OýÃ†:lÛ¶M¸…ÂÂBu6lét:~…¯¿þÚ×@ãfÍ²²2™L&“ÉÊÊÊÜ¼ðâÅ‹DêÓ¦:DDáááçÏŸmðüùólX¡óS·Hxùú¾‹<÷Üs,™±¶téR7/ôx<xsP‰Œ=šˆ6mÚäüTšÖ…àÛ×6Æ—ŸXúaÎÏÏ¿ë®»„ßïÎiXø�ù�
+Á7€8g\�FÃO»¨V«Esn#ãö}lV‡ƒŠ–³÷´³‹·X†6lØ¦M›*++ƒÉd*++Û¸q#ûyâÄ‰ü1»Ésccãš5k„_Ÿ±±±D´}ûöÎFŠÊp³Ðc%¢õ_|ñE"JII9~üx{{ûñãÇSRRº|Ý_Ü³mÛ¶¦¦¦¦¦¦-[¶°oþâ6v¿€3fÔÔÔ´µµíÝ»711±ƒ/ÇqùùùD4oÞ<ö077÷õ×_?}úô�7ØûòÅ_°q´÷Üs�O›â8ŽM\Ã.Ïb·§z÷ÝwÙ;¯¼òŠ7e»çæ(òõ}9wîedd°9k¿ûî;á³¾ÞT"þóŸ‰(""býúõuuu&“éôéÓìâ¶.4­Á—ëc‡Ç�³:ô¢4<iÒ$µZÍŽ…B¡ÑhvFð˜ìv»ó}eØ/z‰wÀ`óøòiŒÇ>ÂfÏžMüt]Ç-]º”:Á¿\$??Ÿ½Vxod÷ßÙ3‡ÇJDë_½z•�jå±+Ùe2™O;uß?&“iâÄ‰Îõäååñ?©;ßÍ•Ÿ0Ë}%ÞwT}}½R©”H$ß~û-×É›BDÑÑÑÿ÷ÿçÓ¦8ŽÓëõS¦LqÞZHHHg¿qûÊeµüQäÓûîŒ¿±ÂÈ‘#]î·³‡Î½9¨D,Ë}÷Ý×Yå¾6Í}K;[¡Oì_5¢ù•¡q™†Ùï{!!!Î÷FµÛíþ.¹‹|û=›ÍÆ2îÛo¿Í¬�eÜ’’�gé ioo�ŒŒ|à�DËÙ·T{{û¢E‹bbbÂÂÂfÎœ)ü]žã¸#GŽÌ›7/>>^.—+•Êœœœ^xáûï¿ç8îôéÓ‹-JII‘ËåC†?~ü†øKèZZZ–,Y¢R©ø»åuVžÇÌá±çõËËËzè¡ÐÐÐAƒåçç³s…—“{³S�ýc2™
+
+
+F�¥P(”Jå¨Q£Ö¬Y#º	vaaaVV–\.OLL|õÕWÙý™|
+4×\µjMš4‰ã¸ï¿ÿþå—_¾ë®»$•JÃÂÂFŽùÛßþ¶¦¦Æ×M1‡ã³Ï>›2eÊÐ¡Cƒ‚‚Ø_ýuo
+ö†û£ˆóñ}Y·n[á�7Þ=åÍ»àëAåÌb±¬[·Ž!aaayyyÂ‘3>5ÍãqÒ÷�É“'GGG7­€þÈh4–””¸IÃ“&MZ¶lYÿJÃ¸eqb·Û«««Ùý{ù›"²92ƒ‚‚’““ù{!²[#ÆÇÇ³Ø²eË6nÜxýúu~ÆÇ€²~ýú¥K—æåå=zÔßµôoo¼ñÆŠ+ärù—_~9uêT—ãO8¨œ¹9<:::üì³Ï¾ýöÛþ*z“Ùl®¯¯E‘ªª*‡Ãœ�� Š"*•J*•ú»êCðí£l6[YY™ð¨Òétl´œ0ãò÷þFÆXéééë×¯ê©§ü]Ko˜5kÖ‹/¾˜››ÛÑÑ±wïÞ—^z©­­í½÷Þc<Á­øýïÿ?ÿó?J¥òë¯¿v9Øc ÂAå�Î�ÂÂÂeË–UTTˆn€…¥a�N'Ä,³ŸÅÔ�&33“MÇÙû|ýÏd2]¸pAw3–q¥R©J¥\µZ���ìïª¡Y½zõ¾}û¾ýö[ÒøYQycÆŒ9uêþ( ËpPÝŠ±cÇN›6í•W^ñw!Ðç°Ë"YªáquuµÝnwNÃjµ:''‡¿à¾ç øö*£Ñ(:‰«Óéjjjl6›L&ËÈÈàÓ-2.€Kû÷ï÷ÝwüñÇë×¯'&&Î™3ç÷¿ÿ=?y;@à è5Â4Ìgâòòr„’’’DiX£Ñ¸ŸÛW¾=Å`0”––ŠÞZ6�¸B¡\µZ�˜˜È_*    ¬Vkmm­è´à…L&ÅÅÅ‰RSvv6»Kb øvƒŽŽŽK—.	ßª‹/677‘R©Ôh4¢Œ›””ä¯¡-    }ŸÍf«©©¥á‹/�F"Š‰‰ŽU«ÕYYYÞ\ä�àë›ööö²²2Ñ€–qÃÂÂ²²²Dçç‡îï’   ˆ††Ñ¨ÑK—.uttQLLŒè²¨ÌÌLv¿t‚¯f³ù›o¾9xð`IIÉåË—«««­V+ÿlNNÎ”)SòòòÒÒÒÔj5Æã   ô&‹Å¢Óé***Ž;vðàA67#—Ë“““ÓÒÒX`›0a‚¯W8Ž«­­Õjµ—of0ˆH©T¦9IHHà'ý   €náp8êêê.;a£ BCC]¦26‚ï-innÖ9©¬¬d½ê<ÛË(     ºŒJ8U€D"IIIQ;‰‰‰q³Aßîg2™´Z­h 
+Ÿ†�‡c;@€>‹�3HMM½té’ð*U¶Ü§OT__âÍú](£{q·{÷î�>úèìÙ³×¯_NII™0aÂ¯~õ«qãÆy¹Q+œÅqÜçŸ¾uëÖsçÎ577ÇÄÄŒ3æW¿úÕüùóE“ò¶´´¬ZµêÀ�õõõ‡ƒã8ç%ÝÓr ¸5ÂË¨DS8g\�F“ššÚ…y|{‰›[ü‘«áØþ® Äø\µyóæE‹‰–xðÕëõóçÏ?xð Ëg»ÜRÑÃöööGydÿþýÎ/|ðÁ‹ŠŠ„§žyæ™?üPXƒó/«ò²Z ðH¯×———»œ*@x{Z>uãíi|ýÉÍ-þèç4,|ãÓÓÓ1§:€ñÁ799¹¼¼œŸ~»ÒOß¾3gÎÜ³gOLLÌË/¿<sæÌ¤¤$›ÍV]]ýÍ7ßlÝºõäÉ“^nÇ}ð�7oÞ®]»¢££W¯^=gÎœaÃ†]½zu÷îÝ«W¯nnnž;wîçŸÎo*>>¾¡¡aÿþý“'O–J¥.—Ü"_ 7ÚÚÚ***D'þœ3.î¯3®K¾}Ž›[üÑÍi˜(#GŽŒŠŠòwÕ þ1jÔ¨üò—¿LJJê�=²”“““sáÂ…>ø`ñâÅÂå�|<øàƒFEE�9s&++ëV6å&ø9räþûï;sæÌˆ#„¯*))7n\GGÇ‘#Gî»ï>¶0((ˆã8‡ÃÁÿ‹ÅyÉ-Bð`Z[[ÏŸ?/êÉ2®T*U©T¢·ýs{Zú³Ù¬Õj>¼aÃ†U«VM›6M­Vóç*Øø¶‡~xÕªU6l8|øpCCƒ¿KèìO@"‘Lœ8ñƒ>¸~ýzïìñ³Ï>#¢ÄÄD“É$\.Zùã�?þÅ/~œššºbÅŠ––Ñ¦ø‡—/_ž>}zXXØàÁƒ/^Ì¦¥®ÀÚl¶×^{M¥Rgee:—×ÑÑ‘ŸŸ?xðàðððY³f±k³Ù\PP�››«T*•JennîÚµk-KgU¹\È†çž{.66V*•r÷è£�ÑŸþô'oºÑ§ž>|ì±ÇˆhõêÕ.7»zõj"Z°`çuå8Îjµ¾ÿþûãÆ�:t¨\.�‹‹›;wîáÃ‡½©_¬˜øLòðÃ�3†¿¤L*•ªÕêiÓ¦ñ™D«ÕšÍf—üü}öc‹E˜†Ù‘ÇôvNÃZ­Öß%t³={ö<òÈ#ü�ÜårùôéÓ?ûì3ƒÁàr}/“�l»Ýž��MDï½÷žp9¿šÃá`M$''§µµÕù%MMMqqqÂ5çÌ™#Ú&{øôÓO‹¶YTT$Z‡-“��ÀþI`2™î¾ûnçªî¹ç>ûºì—•Ì�;WØi*•ŠˆJKKÝw ¯=#z˜œœLD%%%.7~þüy"R«Õœ/Á×¹Kù§<VÛÙç¤Ág\…Báœ4„ÿ�îƒð÷9ÐX­Vçc”�ÑÑÑÎÇ(»® ÿÒëõ}ôÑ<ÀÿñÄO<xÐf³	×ô2	¹Á¯³}ûv">|¸Ñhäœ²Ú¦M›ˆ(>>¾¨¨¨©©É`0œ:ujìØ±D´jÕ*Ñ¦8Ž{é¥—ˆ(99ùØ±cz½þØ±c,G’SþKLL,..nmm­©©™1cM˜0A´ŽJ¥bÛ9zô(²råJŽã
+
+
+Øç@aaacccccã‡~È®X»v­sUÎ­>Œ��ß·oŸ^¯gÙ¿ºYo¸ákÏˆºß?·zg•»\JD«W¯®««³X,×¯_/..ž<yr×ªè§‡s~ˆŽŽfG¸R©tÎV«ÕßUû«�¢¾¾^t4³Ïzö/6�Fƒ4ÀÕ«Wß}÷Ý;î¸ƒO±±±±Ý»>åØív6’õ­·ÞâœÒ«áøñãÂ×jµZ"JOOmŠã¸ÌÌL"*..æWÞ³g�ËüwèÐ!~‰N§#¢ˆˆÑ:{öìá—|ñÅD”��ÍqÜ¨Q£ˆhË–-Âª6oÞLD£G�v®Ê¹ÕÂ‡»wï®ãeðõµg¸ž¾ì}œ<yòòåË7oÞ\QQq+Õô}v»]”q5ÿ‹qhh¨(ãÖ××û»änƒ‹ÛZss³èBË²²²ööv"
+		‰���CONNÆíè /kll,**úôÓOÏœ9Ã–ÄÆÆ^½zµw!¼’éÓO?}üñÇo»í6�NÇîMÃ¢†……vš-dŸ¹D$—Ë-‹hS
+…Âl6777óçWš››$Ü&[ßh4òßOÇ±?IÑ:ÎÛQ(F£Q©TšL¦¦¦¦!C†ð-jjjŠ��U*•,5º¼TËåÕf7nÜNŸœœ\]]]ZZêþÊ6_{Fô0%%¥ªªª¤¤$''Çyã%%%#GŽT«Õ,›ºlŽó’S§N-X° ªªŠ_2eÊ”mÛ¶ÅÆÆv¡Z€>ÅápTUU‰®˜¯¯¯7›ÍDž™™)šBÊý ú;™çU`àŠ‰‰™0aÂ„	„Ùíèø?�“'OnÙ²E¯×QpppBB‚hæ•JÕ-StY{{û—_~ùé§Ÿ9rÄf³»¨kÁ‚÷ß¿pMo.ä÷>Á<úè£øÃÊËËßÿ}—a“±ˆX­V/·ï’pÂöîš—@H"‘üt^äç�³»€:};Þyç�ÕÕÕ_~ùåý×¹Ùþ-öÌ�wÞYUUµk×.—Áw×®]l�Û?~|EEÅÙ³gOž<yöìÙƒ<xðùçŸÿÛßþÖsï#@·³ÛíÕÕÕ¢9RÙ "ŠˆˆÈÈÈP«Õìü.ûØ×µ=ŸÆ�7Î�;WTTôÊ+¯°‘üŒÂÁÁÁjµzÒ¤Iùùù{öìÑjµ¢�• =dÏž=�>ú(?nG.—O›6íoû[GG‡ËõoýSQ´ÎG}DDü	T~ùí·ßNDgÏžõrSÎCŠ‹‹EÛtYžËuÜuØ¶m›p………$ê0lØ0"Òétü
+_ýµ7•8p€ˆ¢££ËÊÊÜ´Ú×ž=dÅ„‡‡Ÿ?^ôªóçÏ³óîGŽqSªÇw™�-4h�—Õ²!ôÇÁŽÐÙl6­V»gÏž‚‚‚üüüI“&©Õj~j°ÈÈH6Vá•W^)**:wîÜ�7ü]r_�à]Ç§aö‡w×]wñ3
+Ëåra.***))Át;v¼I$’	&üõ¯½víZïì‘h³ÙÒÒÒœC3K“Ã†Û´iSee¥Á`0™Leee7n¼óÎ;�7õâ‹/QJJÊñãÇÛÛÛ�?ž’’Òåàëþâ¶˜˜˜mÛ¶555555mÙ²…Šà/n»÷Þ{‰hÆŒ555mmm{÷îMLLô¦ŽãØÅvƒzóÍ7ÙÅÝƒ¡´´tãÆ�ãÇ�ïZÏ8?œ9s&kÅ;ï¼S[[Ëæ>÷ÝwÙ¹«¹sçºé—K&NœøñÇ×ÖÖZ­ÖÆÆÆ5kÖQhh¨—ÕÆÆÆÑöíÛ=Žoè«ÕZRRÂÕ²ŒËß:'**ê®óÞÄ·    IDAT»îâ¿j‘q=Â_èfl¤„Ð…®\¹BDr¹<11Q}3�FÃO:à«‘#G.X°à±ÇëåX?9·mÛöä“O²ÿ._¶lÙ{ï½çr#l5á¦sssÿõ¯ñëÌœ9ó«¯¾’ÉdüOêÞ�¾�={6;ÑË$$$üðÃƒ2›Í÷ßÿ‰'Dõäåå}ýõ×ìtÑ�¦N�*|öé§ŸfùO´ç¯/oYìSÏ8?Ôëõ?ü0ZhÊ”);wîÞ²Ø›1¾.GŒäççoØ°Á›jŸzê©­[·ºl)€OŒF£èî:�Žý“ŒˆâââøKnx�8VáÖ øBopNÃÉd²¤¤$Ñ_rvv6ÿã5@Ÿâ›l6[VVû}\ô‰ú÷¿ÿýƒ>8}útcc£L&S«Õ<ðÀÂ…sss�7UQQñÛßþöèÑ£
+…bÞ¼yË—/×h4C‡mllìl×ÎÙÃöööçŸ~÷îÝ‹eÒ¤Io½õþØl6¿ýöÛÛ·o///—H$ééé,X¾|¹ðþI[¶lY»v­V«6lØ3Ï<óòË/Ëd2ç½¸üúà8n×®]}ôÑ·ß~{íÚµ���”””‰'.\¸pÜ¸q]ëçÝqWTT´uëÖï¾û®¹¹™M[þä“OÎŸ?_”b½	¾gÎœÙ¼yó?þñ�ººº¨¨¨ŒŒŒ_ýêW‹-â¯^p_mkkëÿ÷ïß¿¿¡¡�|±‚GìÇÑwbMM»JAí
+2n·@ð¿iiiÑjµ¢?{v‹)rõOÛ¬¬,6€ ¬_¿~éÒ¥yyyG�õw- Ðu—.]rùC¨D"IIIÜÔÔT~Vèv¾Ð·˜L&­V+ú­‡OÃ111¢Ö233…?kô_³fÍzñÅsss;::öîÝûÒK/µµµ½÷Þ{Ï=÷œ¿K ¯´··—••‰æknn&WW£Ñ¤¦¦
+çi�^€àý€Ùl®¯¯M9\UUåp8èç4,Äþ®À7Î#MÇŒsêÔ)á  è#ôz}yy¹hî0–qƒ‚‚’““E“ãÆÇÇ‡„„ø»j@ð…~‹]Ê-ú‡uuu5›q“OÃü‡NZZ?é@´ÿþwß}÷Ç¼~ýzbbâœ9s~ÿûßóó€¿´¶¶^¾|Ytò…e\©TªR©D?E&$$àß«}‚/(Â4Ìb—i˜}N�1C©  €iii)))·f\aÀEÆí�|aà³Z­µµµ¢ÊËËÙÅ³¢4¬V«srrâââü]5  ô +W®\¸pAt�5Ë¸2™,##Ct�ubb"?{.ô_¾ œÓ°N§»xñ"»;«sV«Õ)))=q‡X  è9ÇUVVêœ°Œ«T*5�èÓw Cðø7›ÍVSS#úp,--5D¤P(Øù`¤a €>È9ã²sº&“‰ˆBCC³³³E7))‰MSÁÀ³††Ñ�¯K—.uttQHHH||¼hÔWrrrPP�¿« °GUU•èŠŽúúz³ÙLDaaaYYY¢‹:†îïªÁÿ|ºˆÝŽNx�oYYY{{;ýœ†E×ù" t�0ãò¹|ÆÏÌÌÎá£ÆMÎ s¾ Ý‰¿93ÿé\^^®×ë‰(888!!Aôé¬R©øÛ¢ 8»Ý^]]-:§PWWg±Xˆ("""##CtN|‚àÐãø4Ìš_¾|¹µµ•nNÃü§9Ò0 x,ãŠ&Çå3nTTTZZšh2.Ü:_ ÿ¦aˆ/\¸ÐÒÒBDr¹<11Q4:-33W` @d2™œ'«­­µZ­D�““#ºnz‚/@"JÃ,_¹r…\¥aˆ•J¥¿« ø‰Ñh]
+¬ÓéjjjØ¼éqqq¢€‹Œ½Á ¯sNÃ:�®²²’ýñ:‘dgg‡††ú»j àCii©Ë¨K$’””µd\ð;_€~Éd2iµZÑ™>ÇÄÄˆÆÆeee………ù»j è—ÚÛÛËÊÊD×*°@8g\�F“ššªP(ü]5€¾ ‡Ùl®¯¯],RUUåp8èçÛÑ	qFFFDD„¿«€>D¯×———‹f§a7(((99Yt1n|||HHˆ¿«ð‚/À ÇÒ°hz QâôôôÈÈHW =®­­­¢¢Bôáàœqùd\ |‘Åb©««�Ô©®®¶Ûí$HÃüw^ZZZTT”¿«€.jmm½|ù²èç –q¥R©J¥ý”��ìïªº‚/ üD˜†ù@ì23#FŒ6l˜¿«€›üë_ÿ*))]Ë2®L&KJJ] €ŒÁ Ü±Z­µµµÎ“¬™L&r•†Wœç{á3®B¡pž8,11Q.—û»j Bð ŸÙl¶ššÑ×íÅ‹�F#u’†SRR$‰¿è—8Ž«¬¬ì,ã*•J�F#ú‹KJJÂ-o œ!ø@·ihhÍ°VZZj0ˆH¡P¨ÕjÑ)(¤a çŒËîyÆ~c	ËÊÊþi4šáÃ‡û»j€~Á zVss³è’š²²²ööv"
+		‰���8LNN
+
+òwÕ =ÎápTUU‰FÕ×××›Íf"
+ÏÌÌ]fŠ@ Ü"_ ðv;:a .//×ëõôs]cŽ4ýš0ãò‡=Ÿq#""222„W�›œô_ è+ø›3óÉ ¢¢¢­­�ˆ‚ƒƒDÉ@¥RI¥RWp»Ý^]]-ú•£®®Îb±QdddzzºèßuÈ¸ ½Á ú4>ó™¸¤¤¤µµ•ˆärybb¢h¼cff&®é�Þa³ÙÊÊÊDãÚkkk­V+EEE�1B4®À¿| ÿ¥aˆ¯\¹B®Ò0»¨N¡Pø»jèÇL&»ÈÌeÆ�‹‹sž; Bð€Â93ôó¼ý¢\’��êïª¡Ï1¥¥¥¢£¨¦¦Æf³‘Úd\€þÁ ²––­V+
+1•••ì£ÏùD]VVVXX˜¿«†^ÒÑÑqéÒ%—?H$’””QÀMMM�ŽŽöwÕ Ðu¾ pL&“V«ÍäÓpLLŒh†µÌÌÌððpW·¤½½½¬¬Lp/^¼Èn áœq5Mjj*†Ç <¾  DDf³¹¾¾^t1~UU•Ãá ŸoG'Äþ®\Ðëõåååº›çËc7(((99YpsrrâããCBBü]5 ô_ €NY,–ºº:á9B�NW]]m·Ûéæ›3³•žžéïªH[[[EE…èŸ+,ãJ¥R•J%úçJBBBpp°¿« ¿Að ð�0ó�Øef©käÈ‘QQQþ®ºßkmm=þ¼h€Š0ãŠ¨ ã€3_ €n`µZkkkE—I•——³© DiX­VçääÄÅÅù»ê>êÊ•+Îs‡±Œ+“É222D—$&&&ÊårW ý ‚/ @OqNÃ:�îâÅ‹F£‘\¥aÆßU÷*�+,ã*•J�F#êd\ ¸¾  ½Êf³ÕÔÔˆ¢^ii©Á` ¢èèèÔÔTQÚKII‘H$þ.ü–pWYY)jµV«mii!¢ÐÐÐììlQ«“’’p> è^¾  }BCCƒh ë¥K—:::ˆH¡P°Ñý";Žªª*Ñ¨�Ng2™ˆ(,,,++K4zøðáþ® ‚/ @ßÅnG'œµ ¬¬¬½½�ˆBBBâããE³$''õZyÂŒËY__o6›‰(<<<33“O·¬HÜä üÁ  ŸáoÎÌgÍòòr½^ODÁÁÁ			¢¬©R©¤Ré-îÔn·WWW‹Rx]]�Åb!¢ˆˆˆŒŒQ
+GÆ€¾Á ` àÓ0ŸM/_¾ÜÚÚJ7§a>›ºIÃ,ãŠ&Çå3nTTTZZšhî0d\ è| &‡ÃQSSsùfZ­–�µ�ˆˆH "ájìü±B¡HMMMOOOKKKMMek&%%õæh
+ €n„à @8Ž«««¥áK—.QVVVÚÍúæõs  ]ƒà èæÏŸODEEEþ.  gáç*    ¾    |      ø   @@@ð   €€€à    Á    ‚/    _    ¾    |      ø   @@@ð   €€€à    Á    ‚/    _    ¾    |      ø   @@@ð   €€€à    Á    ‚/    _    ¾    | à'‰D"‘ø»
+ €ž‚à    Á    ‚/  ñƒ$Â%F£qéÒ¥·Ýv›L&.wÞŽhá'Ÿ|’——’––¶råÊÖÖÖn €Žãü]  øÓüùó‰hçÎ�ÎO±ïdçÎ�»k×.çå¢ïáBŽãüñíÛ·‹6›““sêÔ©ÈÈÈîn
+ €;8ã  D‚üÊ	W8sæÌ¾}ûôz½÷gL>üðÃíÛ·ÇÇÇ555†S§N�;öÂ…úÓŸº¹  žàŒ/ @ cg|‹ŠŠ\žÁ¥ŸOâîÞ½{öìÙÎËÝœñ7nÜÿþïÿ?~|âÄ‰ü
+:�.555==½¼¼¼'š Ð™¿  €þ!//Ï×—œ?žˆî¹ç~`ÿSUUÕ½å x„à  ^‰‰‰-‘H$,ÈòW³�Fá
+,ãÚívç­Y­Öž)  Sã  ?aùÕf³y¹þm·ÝF7Ÿ»=qâ„p…œœ":{ö,çJw• à%_  øÉÐ¡C‰hçÎ�&“É›õ5-_¾¼¶¶V¯×ïÛ·ï™gž®ð›ßü†ˆfÌ˜±yóæªª*£Ñh6›ËËË7mÚ4~üøh €;¸¸  Ðñ·=õÔS[·n>åfÚ2":pàÀÔ©S…Kž~úéÂÂBáÊË–-{ï½÷\î_@ ÐËpÆ  ~òöÛo/Y²D¥RÉåroÖðÁ³²²ärybbâ«¯¾ºqãFÑ:ï¾ûî‘#GæÍ›/—Ë•JeNNÎ/¼ðý÷ß÷@  ÜÁ_ €@ÇŸñõw!  =g|      ø   @@@ð   €€€à    Á    ‚/    _    ¾    |      ø   @@@ð   €€€à    Á    ‚/    _    ¾    $Çù»  èU|ðÁë¯¿n·ÛÙCƒÁ@D¡¡¡ì¡T*ýÝï~·xñb¿Õ Ð3| ÎåË—ÓÓÓ;{V"‘TTT¤¦¦öfI  ½ C  NZZÚí·ßäâ+@"‘Ü~ûíH½ 0 !ø ¢…º¾R©táÂ…½_ @/ÀP €@ÔØØçp8DË¥Ré•+W†ê—ª  zÎø ¢ØØØ¼¼<©T*\(•Jóòò�z` Bð PO<ñ„— u  PmmmC‡µX,ü’ààà¦¦¦ÈÈH?V ÐspÆ  @EFFN�:U&“±‡2™lÚ´iH½ 0€!ø ®Çœ¿�…Ýn_°`�ë èQê  ¸L&Ó�!C:::ˆ(<<¼©©I¡Pø»( €ž‚3¾  �K¡PÌ›7O.—Ëåòyóæ!õÀÀ†à Ðyä«ÕjµZyä× Ð³dþ.  ºSQQ‘¿K€~Æn·‡……Qss3ŽðÕüùóý]€0Æ`@‘H$þ. Rô/8ã0ÐìØ±ç`À'§OŸ–H$ãÆ�ów!ÐŸaxô;¾  �‘ ‚/ @ Ã ˜Õ    ‚/    _    ¾    |‹Äî_Û›ÕzÏ�µõånéüÛ�f³yÕªU)))r¹¼×Êð¦É·Ò-�½Öyy> ú5Ìê   �ëµ×^[»vmmœÅGÜâ ïÀ_€ÀÂÝÌÍÂÎ^Û[•ô†¿ýíoD´k×.³ÙÜ§ïÞüsã\é�]ô2œñ €ÀU]]MD³gÏÆ�û � g|@Œ�ð3�K—.½í¶Ûd2™p9¿šV«�1cFxxø�!Cž}öYƒÁàë
+DôÉ'ŸäååEGG‡„„¤¥¥­\¹²µµÕc%�±Ûíüã“““CBB²³³·lÙ"|ö›o¾yâ‰'ärùàÁƒ'Ož|èÐ!ç†»ßHeeå¬Y³X£–,Yb0D5X,–5kÖŒ=:44444tôèÑëÖ­³Z­ìÙÑ£GK$’¢¢"áKŠŠŠ$ÉèÑ£»½[ØšƒañâÅC†‰ˆˆ˜={vUU•ûM¹oÙl¶wÞyçöÛoÍËË+..ö²x�èr€©h¡›p¿wçmÚív"
+
+
+âwá±ù^ö?_pggÝiÂõm6Û_þò—;ï¼366688xøðáóæÍ;räˆËý€;.à €~ŠˆvìØáÓúÎŸláÜ¹sEÂÿojjŠ‹‹~˜Ì™3Ç§Çc�=æü¡”““ÓÚÚê¾’ÎòôÓO‹¶VTT$ZGH"‘|ùå—ÞoäÚµk			ne2™î¾ûnçÝsÏ=‹…ã¸7ß|“ˆ¦OŸ.,~Ú´iDôÖ[oõP·ðE2			×¯_ïlS›`±X&Ožì¼‚7Å{ì@Îí1)z(êoºÎy›"›ï}ÿ»Ü¾—Gš¨ÉÎkºÙog}èr¹ûí¸·cÇŽ.¿À_pÈ(Ô}Á7>>~ß¾}z½ÞåÊ/½ô%'';vL¯×;vL¥Rù´Â¦M›Ø^ŠŠŠšššÃ©S§ÆŽKD«V­r_IgILL,..nmm­©©™1cM˜0�_çÁ<pà@KK‹Åb©««{ë­·ˆhìØ±ÞodåÊ•D¤R©X£Ž=š””$lTAAEGG666666~øá‡‘‘‘D´víZŽã®^½*“Éärùµk×ØKšššär¹\.ollì¡nq.xåÊ•�mÊcÞxã"
+ç�wjkkM&Ó©S§fÍšåMñ;�ó%øŠzÀ›®ë¬‹ø‡›ß…þïl¹ûÃUøÚÐÐP"Z½zu]]�Åb¹~ýzqqñäÉ“»¶_ç%.¹iƒàýY€…º/øîÞ½ÛÍÊ™™™DT\\Ì?»gÏŸV¸ãŽ;ˆèøñãÂ]hµZ"JOOw_Ig9tè¿D§ÓQDD¿äÈ‘#Ó§O6l˜ð·i…BáýF²²²ˆhÏž=ü
+_|ñ…°Q£F�"¢-[¶kÛ¼y3�=š=œ>}:½ÿþûìáúõë‰hÆŒ=×-Îgggw¶)�MÈÍÍ%¢�7:ïÎcñ;�ó%øŠzÀ›®s&Ú²7ï ¯ýßÙr÷‡«ðµ¬ß&Ož¼|ùòÍ›7WTTÜÊ~�—¸ä±u¾Ðá�P¨û‚ï�7Ü¬BDÍÍÍü³7nÜðivK*•J¥Ò   6È’­ —ËÝWÒYCŒF#¿Äápw÷ÙgŸuvõ’÷ñØ(…BADMMMÂÚ‰H©T²‡»ví"¢;ï¼“=7nœ0EõD·8ÌÇ}çMyl‚R©$"v~ZÄcñ;�ó%øŠzÀ›®ë¬‹¼o~g{÷fã¢ånŽ4ÑkOž<™œœ,<h§L™rõêÕÎöËþigµZ…-Éd2o*ô‚/ôG¸¸ \‹‰‰éÑísGDv»Ýn·;‡ÃÁýü5,¼�È§JXjaD1÷øÇqÏ>ûlYYííí¾n¤[L›6mðàÁ§OŸÖétZ­öÌ™3ƒ~è¡‡Ø³=Ñ-u×¦¼/Þç¹o�F£Ë5EewËÞ½wë�æý‘6~üøŠŠŠ“'O®]»vÞ¼yááá|þùç;[Ð ADT__/\È<øËè×| +Øù§o¾ù†_ròäIŸVÈÉÉ!¢³gÏºüGy·Ì~ò.((ÈÈÈ`�ãïÿ»¯III!¢'NðKþùÏ
+WÈÈÈ ¢ýû÷îÝ»—ˆØØ"
+þå/IDŸ|òÉ'Ÿ|BD�=öXpp0{¶'ºÅ¹`Ö—<6�ý÷«¯¾r~­Çâ=v ÝvÛmD$œzB¸¾ÝÒuÞ¼ƒÞcqÖf³ùúBg2™lüøñ+V¬Ø¹sç?ü@D¢9I„Øp”²V°§ —g‡ Ï£îêà~å_|‘ˆRRRŽ?ÞÞÞ~üøq>Ky¹Baa!6lÓ¦M•••ƒÁd2•••mÜ¸‘àýÇ”Ç†¤¥¥Ñï~÷»ë×¯777±€E¾üÈîåÅm111Û¶mkjjjjjÚ²eKtt4	.�â8îÜ¹sD”‘‘‘žžNDß}÷ÿTOt‹Ç‹Û„/ñØ„?ÿùÏD±~ýúºº:“Étúôivq›Çâ½¹¸íÞ{ï%¢3fÔÔÔ´µµíÝ»711Ñ›wÊ›®ë¬‹¼o¾OýKDÛ·oŽjèlnÚ8qâÄ�?þ¸¶¶Öjµ666®Y³†ˆBCC;ÛïÖ­[‰(22rÛ¶mì½­[·FDDÑ¶mÛ<Vâ%u€þ‡,À€ÒkÁ÷êÕ«Ã†#�™3g’`¡Ç8Ž[ºt)uÂ}%]hˆómi.\èMœ.ôf:³‰':7'//�ÝŒ7bÄöÔÈ‘#E{ìön™={¶p#ÎÓ™	_â±	‹å¾ûîë¬6÷Å{3�™èl+	¦ýrÿNyÓu�u‘÷Í÷©ÿŸ|òI—e¸Ü‚›6ºlQ~~~gûµÛíS¦Lq~Éƒ>ÈF€ˆöâS�ñ|¡?Â!0 Po_ŽãÊËËzè¡ÐÐÐAƒåçç_¼x‘ˆ†êý
+Ç9rdÞ¼yñññr¹\©Tæää¼ðÂßÿ½ûJºÐ›Í¶nÝºôôô��µZýê«¯òã>}ê�N7cÆŒ°°°Aƒýú×¿îèè­`2™
+
+
+F�¥P(”Jå¨Q£Ö¬Y#J½Ç­[·Ž½ð�7ÞpnN÷vK{{û¢E‹bbbÂÂÂfÎœ©ÓéÜ7Ùc,ËºuëØ
+aaayyyÂ‰Üï±9Ž+,,ÌÊÊ’Ëå‰‰‰¯¾ú*?TÀ}ÙÞì½³.ò©ùÞ÷KKË’%KT*•\.¾Ê›#MøðôéÓ‹-JII‘ËåC†?~ü†l6››]›Íæµk×æææ*•J¥R™››»víZ~*bÑ^|!pH¸K þ"‘HvìØ1þüÞßõúõë—.]š——wôèÑ®­ ÝÎùB1€îRTTôÈ#�àè‚þ·@Íš5ëÄ‰mmmW®\Ù´iÓË/¿L7ßÎÊã
+   ½	g|”Þ<ãë<Ó˜1cN�:ÅOPàqèi8ã=g|¡?Â_ è¢}ûö=ðÀqqqÁÁÁ©©©+V¬øÇ?þ!µW   èM2Ï«  ¸2uêÔ©S§ÞÊ
+ÐÓp6 @g|      ø   @@@ð   €€€à    Á    ‚/ À-‘H$Î3÷ÙÍú…¯mñfý�Ô? Ðk|` ëÆx4�’Ö@j €÷0�/  ô,L' }Îø   @@@ð€‹ÿ5_"À–X,–5kÖŒ=:44444tôèÑëÖ­³Z­]Øc·ÛÿøÇ?&''‡„„dggoÙ²E´…O>ù$///:::$$$--måÊ•­­­›`0/^<dÈ�ˆˆˆÙ³gWUUy¹M›Íö—¿üåÎ;ïŒ��>|ø¼yóŽ9âM[D—H$·Ø:Ñ.´ZíŒ3ÂÃÃ‡òì³Ï—5xÜ©ûþñø»Ü©h!{h4—.]zÛm·Édø™ Ÿã ` !¢;vø»Š¾¢³=“Ét÷Ýw;?uÏ=÷X,Ÿ6Å?õôÓO‹ž-**b+8ŽÇ{Ìùå999­­­î‹Ÿ3gŽð%			×¯_÷f›Îõð5»iKgeÜbë„»hjjŠ‹‹®É·Ñû�zìoÞb—wYÉÜ¹s=vT Ú±c:ú² 
+!øÞÌeX)(( ¢èèèÂÂÂÆÆÆÆÆÆ?ü022’ˆÖ®]ëÓ¦øå‰‰‰ÅÅÅ­­­5553fÌ ¢	&°6mÚDDñññEEEMMMƒáÔ©ScÇŽ%¢U«V¹ß�J¥:vì˜^¯?zôhRR­\¹Ò›m†††ÑêÕ«ëêê,Ëõë×‹‹‹'Ožì¾-=Ô:áî^zé%"JNNfí:vì˜J¥r7ÝìÔcÿxó{|ããã÷íÛ§×ë½é±À�àýY€ÁWÄe¸5jmÙ²E¸póæÍD4zôhŸ6Å/?tè¿D§ÓQDD{xÇwÑñãÇ…¯ÒjµD”žžî~w{öìá—|ñÅD”��íÍ6³²²ˆhòäÉË—/ß¼ysEE…7mé¡Ö	w—™™IDÅÅÅüÊ{öìq7ÝìÔcÿxó{|wïÞí¾—‚/ôGÛ‰)}  °IDAT ‰dÇŽóçÏ÷w!}¯)ú S*•&“©©©iÈ�!üÂ¦¦¦ØØX¥Ri0¼ß¿Üh4*
+¶„ã¸   ~å°°0ƒÁ •Jù%ìó—ˆär¹Åbq³»æææèèh¶¤¹¹yÐ A
+…Âh4zÜæ©S§,X ó:eÊ”mÛ¶ÅÆÆºiKgeÜbë„»S(f³Ù¹]Âz<îÔcÿxó»ìÑBöðÆ�111û*Ð=òÈ#HÐ¿àâ6 €nÀG4\=Æ°d`·Ûív»Ãáp8|Vps9�{·9~üøŠŠŠ“'O®]»vÞ¼yááá|þùç»¶»^n�Ç�vçàk4]®‰Ô0` øÀ@ÆÂ�Íf.ÌÈÈ ¢ýû÷îÝ»—ˆØñÞoÊ999DtöìY—¿»¹í‰'øÿÿç?ÿID)))^nS&“�?~ÅŠ;wîüá‡ˆèÐ¡C·Ø–[o]rr2}óÍ7ü’“'Ovyï�õ�7oñm·ÝFDÂ“âÂ­À€„à ÙÐ¡C‰hçÎ�&“‰_Èf!X¾|ùG}tíÚµk×®mÝºõ…^àŸò~SÞøÍo~CD3fÌØ¼ysUU•Ñh4›Íååå›6m?~¼û×.]ºôŸÿüg{{û±cÇØùÚéÓ§{³Í»ï¾û“O>©««³ÙlMMMŸþ9ñ•w¹-·ÞºiÓ¦Ñ²eËNœ8ÑÑÑqâÄ‰eË–uyï�õ�7o±F£aëÔÖÖêõú}ûö=óÌ3]® úo@A¸¸ífO>ù¤ó‡žÉdš8q¢óça^^žÙlöiSœw×H-]ºÔ×aöììÙ³…+óÓuyÜ¦ËåùùùîÛÒY·Ø:áÿ_½zuØ°aÂufÎœID2™Ì§�ºïoÞbÑù`L æ¾`pqôG8dBð½YKKË’%KT*•\.†“ÉTPP0jÔ(…B¡T*G�µfÍ7©×Í¦¼IiÇ9rdÞ¼yñññr¹\©Tæää¼ðÂßÿ}g»c[hoo_´hQLLLXXØÌ™3u:�—Û<}úô¢E‹RRRärù�!CÆ�¿aÃ›Íæ¾-�•q‹­­_^^þÐC…††4(??ÿâÅ‹D4tèPŸvê±¼y‹³²²ärybbâ«¯¾Ê�ýp_	0¾ÐaV€³:@¿³~ýú¥K—æåå=zÔßµ€0«ôGã  ½jÖ¬Y'Nœhkk»råÊ¦M›^~ùeºùîh  =· €^õÕW_}õÕWÂ%cÆŒÉÏÏ÷W= 8pÆ  zÕ¾}ûxà�¸¸¸àààÔÔÔ+Vüãÿöw] 0ðáŒ/  ôª©S§N�:ÕßU @ Â_    ¾    |      ø   @@@ð   €€€à    Á    ‚wÙH$É¸qãü] puuugÎœAŠ€þÁ`@yøá‡ý] ��;wú»  ø   @@À_    ¾    |     üµïªåi„ó    IEND®B`‚
\ No newline at end of file
diff -Naur ns-3.18.1/src/lte/doc/source/figures/lte-strongest-cell-handover-algorithm.eps ns-3.19/src/lte/doc/source/figures/lte-strongest-cell-handover-algorithm.eps
--- ns-3.18.1/src/lte/doc/source/figures/lte-strongest-cell-handover-algorithm.eps	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/lte-strongest-cell-handover-algorithm.eps	2013-12-20 09:44:51.000000000 -0800
@@ -0,0 +1,5124 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: cairo 1.12.14 (http://cairographics.org)
+%%CreationDate: Fri Sep  6 16:41:15 2013
+%%Pages: 1
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 3
+%%BoundingBox: 0 -1 480 361
+%%EndComments
+%%BeginProlog
+save
+50 dict begin
+/q { gsave } bind def
+/Q { grestore } bind def
+/cm { 6 array astore concat } bind def
+/w { setlinewidth } bind def
+/J { setlinecap } bind def
+/j { setlinejoin } bind def
+/M { setmiterlimit } bind def
+/d { setdash } bind def
+/m { moveto } bind def
+/l { lineto } bind def
+/c { curveto } bind def
+/h { closepath } bind def
+/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
+      0 exch rlineto 0 rlineto closepath } bind def
+/S { stroke } bind def
+/f { fill } bind def
+/f* { eofill } bind def
+/n { newpath } bind def
+/W { clip } bind def
+/W* { eoclip } bind def
+/BT { } bind def
+/ET { } bind def
+/pdfmark where { pop globaldict /?pdfmark /exec load put }
+    { globaldict begin /?pdfmark /pop load def /pdfmark
+    /cleartomark load def end } ifelse
+/BDC { mark 3 1 roll /BDC pdfmark } bind def
+/EMC { mark /EMC pdfmark } bind def
+/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
+/Tj { show currentpoint cairo_store_point } bind def
+/TJ {
+  {
+    dup
+    type /stringtype eq
+    { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
+  } forall
+  currentpoint cairo_store_point
+} bind def
+/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
+    cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
+/Tf { pop /cairo_font exch def /cairo_font_matrix where
+      { pop cairo_selectfont } if } bind def
+/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
+      /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
+      /cairo_font where { pop cairo_selectfont } if } bind def
+/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
+      cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
+/g { setgray } bind def
+/rg { setrgbcolor } bind def
+/d1 { setcachedevice } bind def
+%%EndProlog
+11 dict begin
+/FontType 42 def
+/FontName /DejaVuSans def
+/PaintType 0 def
+/FontMatrix [ 1 0 0 1 0 0 ] def
+/FontBBox [ 0 0 0 0 ] def
+/Encoding 256 array def
+0 1 255 { Encoding exch /.notdef put } for
+Encoding 32 /space put
+Encoding 45 /hyphen put
+Encoding 51 /three put
+Encoding 65 /A put
+Encoding 97 /a put
+Encoding 98 /b put
+Encoding 99 /c put
+Encoding 100 /d put
+Encoding 101 /e put
+Encoding 103 /g put
+Encoding 104 /h put
+Encoding 105 /i put
+Encoding 108 /l put
+Encoding 109 /m put
+Encoding 110 /n put
+Encoding 111 /o put
+Encoding 114 /r put
+Encoding 115 /s put
+Encoding 116 /t put
+Encoding 117 /u put
+Encoding 118 /v put
+Encoding 121 /y put
+/CharStrings 23 dict dup begin
+/.notdef 0 def
+/e 1 def
+/v 2 def
+/n 3 def
+/t 4 def
+/space 5 def
+/A 6 def
+/three 7 def
+/a 8 def
+/d 9 def
+/h 10 def
+/o 11 def
+/r 12 def
+/s 13 def
+/i 14 def
+/m 15 def
+/hyphen 16 def
+/g 17 def
+/b 18 def
+/u 19 def
+/c 20 def
+/l 21 def
+/y 22 def
+end readonly def
+/sfnts [
+<0001000000090080000300106376742000691d3900001024000001fe6670676d7134766a0000
+1224000000ab676c7966cefcdf900000009c00000f8868656164feeb17c7000012d000000036
+686865610cb806680000130800000024686d747866a80b180000132c0000005c6c6f63610000
+b43c00001388000000606d61787004840671000013e800000020707265703b07f10000001408
+0000056800020066fe96046605a400030007001a400c04fb0006fb0108057f0204002fc4d4ec
+310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f272062900020071
+ffe3047f047b0014001b00704024001501098608880515a90105b90c01bb18b912b80c8c1c1b
+1502081508004b02120f451c10fcecf4ecc4111239310010e4f4ece410ee10ee10f4ee111239
+3040293f1d701da01dd01df01d053f003f013f023f153f1b052c072f082f092c0a6f006f016f
+026f156f1b095d71015d0115211e0133323637150e01232000111000333200072e0123220607
+047ffcb20ccdb76ac76263d06bfef4fec70129fce20107b802a5889ab90e025e5abec73434ae
+2a2c0138010a01130143feddc497b4ae9e000001003d0000047f0460000600fb402703110405
+040211010205050402110302060006011100000642020300bf0506050302010504000710d44b
+b00a5458b90000004038594bb014544bb015545b58b90000ffc03859c4173931002fec323930
+4b5358071005ed071008ed071008ed071005ed592201408e48026a027b027f02860280029102
+a402080600060109030904150015011a031a0426002601290329042008350035013a033a0430
+0846004601490349044605480640085600560159035904500866006601690369046705680660
+08750074017b037b0475057a068500850189038904890586069600960197029a039804980597
+06a805a706b008c008df08ff083e5d005d133309013301233dc3015e015ec3fe5cfa0460fc54
+03acfba00000000100ba00000464047b001300364019030900030e0106870e11b80cbc0a0102
+08004e0d09080b461410fcec32f4ec31002f3ce4f4c4ec1112173930b46015cf1502015d0111
+231134262322061511231133153e013332160464b87c7c95acb9b942b375c1c602a4fd5c029e
+9f9ebea4fd870460ae6564ef00010037000002f2059e0013003840190e05080f03a9001101bc
+08870a0b08090204000810120e461410fc3cc4fc3cc432393931002fecf43cc4ec3211393930
+b2af1501015d01112115211114163b01152322263511233533110177017bfe854b73bdbdd5a2
+8787059efec28ffda0894e9a9fd202608f013e000000000200100000056805d50002000a00c2
+404100110100040504021105050401110a030a0011020003030a071105040611050504091103
+0a08110a030a4200030795010381090509080706040302010009050a0b10d4c4173931002f3c
+e4d4ec1239304b5358071005ed0705ed071005ed0705ed071008ed071005ed071005ed071008
+ed5922b2200c01015d40420f010f020f070f080f005800760070008c00090701080206030904
+1601190256015802500c67016802780176027c0372047707780887018802800c980299039604
+175d005d090121013301230321032302bcfeee0225fe7be50239d288fd5f88d5050efd1903ae
+fa2b017ffe8100000001009cffe3047305f000280070402e0015130a86091f862013a0150da0
+0993061ca020932391068c15a329161c13000314191c2620101c03141f09062910fc4bb01654
+4bb014545b58b90009ffc03859c4c4d4ecf4ec11173939310010ece4f4e4ec10e6ee10ee10ee
+10ee11123930014009641e611f6120642104005d011e0115140421222627351e013332363534
+262b013533323635342623220607353e01333204151406033f91a3fed0fee85ec76a54c86dbe
+c7b9a5aeb6959ea39853be7273c959e6010c8e03251fc490ddf22525c33132968f8495a67770
+737b2426b42020d1b27cab000002007bffe3042d047b000a002500bc4027191f0b17090e00a9
+1706b90e1120861fba1cb923b8118c170c001703180d09080b1f030814452610fcecccd4ec32
+3211393931002fc4e4f4fcf4ec10c6ee10ee11391139123930406e301d301e301f3020302130
+223f27401d401e401f402040214022501d501e501f50205021502250277027851d871e871f87
+20872185229027a027f0271e301e301f30203021401e401f40204021501e501f50205021601e
+601f60206021701e701f70207021801e801f80208021185d015d0122061514163332363d0137
+1123350e01232226353436332135342623220607353e0133321602bedfac816f99b9b8b83fbc
+88accbfdfb0102a79760b65465be5af3f00233667b6273d9b4294cfd81aa6661c1a2bdc0127f
+8b2e2eaa2727fc0000020071ffe3045a06140010001c003840191ab9000e14b905088c0eb801
+970317040008024711120b451d10fcecf4ec323231002fece4f4c4ec10c4ee30b6601e801ea0
+1e03015d0111331123350e0123220211100033321601141633323635342623220603a2b8b83a
+b17ccbff00ffcb7cb1fdc7a79292a8a89292a703b6025ef9eca86461014401080108014461fe
+15cbe7e7cbcbe7e7000100ba000004640614001300344019030900030e0106870e11b80c970a
+010208004e0d09080b461410fcec32f4ec31002f3cecf4c4ec1112173930b2601501015d0111
+231134262322061511231133113e013332160464b87c7c95acb9b942b375c1c602a4fd5c029e
+9f9ebea4fd870614fd9e6564ef0000020071ffe30475047b000b0017004a401306b91200b90c
+b8128c1809120f51031215451810fcecf4ec310010e4f4ec10ee3040233f197b007b067f077f
+087f097f0a7f0b7b0c7f0d7f0e7f0f7f107f117b12a019f01911015d01220615141633323635
+3426273200111000232200111000027394acab9593acac93f00112feeef0f1feef011103dfe7
+c9c9e7e8c8c7e99cfec8feecfeedfec701390113011401380000000100ba0000034a047b0011
+00304014060b0700110b03870eb809bc070a06080008461210fcc4ec3231002fe4f4ecc4d4cc
+11123930b450139f1302015d012e012322061511231133153e0133321617034a1f492c9ca7b9
+b93aba85132e1c03b41211cbbefdb20460ae6663050500000001006fffe303c7047b002700e7
+403c0d0c020e0b531f1e080902070a531f1f1e420a0b1e1f041500860189041486158918b911
+04b925b8118c281e0a0b1f1b0700521b080e07081422452810fcc4ecd4ece411123939393931
+0010e4f4ec10fef5ee10f5ee121739304b535807100eed111739070eed1117395922b2002701
+015d406d1c0a1c0b1c0c2e092c0a2c0b2c0c3b093b0a3b0b3b0c0b200020012402280a280b2a
+132f142f152a16281e281f292029212427860a860b860c860d12000000010202060a060b030c
+030d030e030f03100319031a031b031c041d09272f293f295f297f2980299029a029f029185d
+005d7101152e012322061514161f011e0115140623222627351e013332363534262f012e0135
+3436333216038b4ea85a898962943fc4a5f7d85ac36c66c661828c65ab40ab98e0ce66b4043f
+ae282854544049210e2a99899cb62323be353559514b50250f2495829eac1e000000000200c1
+00000179061400030007002b400e06be04b100bc020501080400460810fc3cec3231002fe4fc
+ec30400b1009400950096009700905015d1333112311331523c1b8b8b8b80460fba00614e900
+000100ba0000071d047b0022005a4026061209180f00061d07150c871d2003b81bbc19100700
+110f0808065011080f501c18081a462310fcec32fcfcfcec11123931002f3c3ce4f43cc4ec32
+111217393040133024502470249024a024a024bf24df24ff2409015d013e0133321615112311
+34262322061511231134262322061511231133153e01333216042945c082afbeb972758fa6b9
+72778da6b9b93fb0797aab03897c76f5e2fd5c029ea19cbea4fd87029ea29bbfa3fd870460ae
+67627c0000000001006401df027f028300030011b6009c020401000410dccc310010d4ec3013
+21152164021bfde50283a40000020071fe56045a047b000b0028004a4023190c1d0912861316
+b90f03b92623b827bc09b90fbd1a1d261900080c4706121220452910fcc4ecf4ec323231002f
+c4e4ece4f4c4ec10fed5ee1112393930b6602a802aa02a03015d013426232206151416333236
+17100221222627351e013332363d010e0123220211101233321617353303a2a59594a5a59495
+a5b8fefefa61ac51519e52b5b439b27ccefcfcce7cb239b8023dc8dcdcc8c7dcdcebfee2fee9
+1d1eb32c2abdbf5b6362013a01030104013a6263aa00000200baffe304a40614000b001c0038
+401903b90c0f09b918158c0fb81b971900121247180c06081a461d10fcec3232f4ec31002fec
+e4f4c4ec10c6ee30b6601e801ea01e03015d013426232206151416333236013e013332001110
+02232226271523113303e5a79292a7a79292a7fd8e3ab17bcc00ffffcc7bb13ab9b9022fcbe7
+e7cbcbe7e702526461febcfef8fef8febc6164a80614000200aeffe30458047b00130014003b
+401c030900030e0106870e118c0a01bc14b80c0d0908140b4e020800461510fcecf439ec3231
+002fe4e432f4c4ec1112173930b46f15c01502015d1311331114163332363511331123350e01
+23222601aeb87c7c95adb8b843b175c1c801cf01ba02a6fd619f9fbea4027bfba0ac6663f003
+a80000010071ffe303e7047b0019003f401b00860188040e860d880ab91104b917b8118c1a07
+120d004814451a10fce432ec310010e4f4ec10fef4ee10f5ee30400b0f1b101b801b901ba01b
+05015d01152e0123220615141633323637150e0123220011100021321603e74e9d50b3c6c6b3
+509d4e4da55dfdfed6012d010655a20435ac2b2be3cdcde32b2baa2424013e010e0112013a23
+0000000100c100000179061400030022b7009702010800460410fcec31002fec30400d100540
+05500560057005f00506015d13331123c1b8b80614f9ec000001003dfe56047f0460000f018b
+40430708020911000f0a110b0a00000f0e110f000f0d110c0d00000f0d110e0d0a0b0a0c110b
+0b0a420d0b0910000b058703bd0e0bbc100e0d0c0a09060300080f040f0b1010d44bb00a544b
+b008545b58b9000b004038594bb0145458b9000bffc03859c4c4111739310010e432f4ec1139
+11391239304b5358071005ed071008ed071008ed071005ed071008ed0705ed173259220140f0
+060005080609030d160a170d100d230d350d490a4f0a4e0d5a095a0a6a0a870d800d930d120a
+000a09060b050c0b0e0b0f1701150210041005170a140b140c1a0e1a0f270024012402200420
+0529082809250a240b240c270d2a0e2a0f201137003501350230043005380a360b360c380d39
+0e390f30114100400140024003400440054006400740084209450a470d490e490f4011540051
+0151025503500450055606550756085709570a550b550c590e590f501166016602680a690e69
+0f60117b08780e780f89008a09850b850c890d890e890f9909950b950c9a0e9a0fa40ba40cab
+0eab0fb011cf11df11ff11655d005d050e012b01353332363f01013309013302934e947c936c
+4c543321fe3bc3015e015ec368c87a9a488654044efc94036c000000013500b800cb00cb00c1
+00aa009c01a600b800660000007100cb00a002b20085007500b800c301cb0189022d00cb00a6
+00f000d300aa008700cb03aa0400014a003300cb000000d9050200f4015400b4009c01390114
+013907060400044e04b4045204b804e704cd0037047304cd04600473013303a2055605a60556
+053903c5021200c9001f00b801df007300ba03e9033303bc0444040e00df03cd03aa00e503aa
+0404000000cb008f00a4007b00b80014016f007f027b0252008f00c705cd009a009a006f00cb
+00cd019e01d300f000ba018300d5009803040248009e01d500c100cb00f600830354027f0000
+0333026600d300c700a400cd008f009a0073040005d5010a00fe022b00a400b4009c00000062
+009c0000001d032d05d505d505d505f0007f007b005400a406b80614072301d300b800cb00a6
+01c301ec069300a000d3035c037103db0185042304a80448008f0139011401390360008f05d5
+019a0614072306660179046004600460047b009c00000277046001aa00e904600762007b00c5
+007f027b000000b4025205cd006600bc00660077061000cd013b01850389008f007b0000001d
+00cd074a042f009c009c0000077d006f0000006f0335006a006f007b00ae00b2002d0396008f
+027b00f600830354063705f6008f009c04e10266008f018d02f600cd03440029006604ee0073
+0000140000960000b707060504030201002c2010b002254964b040515820c859212d2cb00225
+4964b040515820c859212d2c20100720b00050b00d7920b8ffff5058041b0559b0051cb00325
+08b0042523e120b00050b00d7920b8ffff5058041b0559b0051cb0032508e12d2c4b505820b0
+fd454459212d2cb002254560442d2c4b5358b00225b0022545445921212d2c45442d2cb00225
+b0022549b00525b005254960b0206368208a108a233a8a10653a2d00000100000002547a17ec
+9d3c5f0f3cf5001f080000000000cd383c2600000000cd383c26f7d6fcae0d72095500000008
+000000010000000000010000076dfe1d00000de2f7d6fa510d72000100000000000000000000
+00000000001704cd006604ec007104bc003d051200ba03230037028b0000057900100517009c
+04e7007b05140071051200ba04e50071034a00ba042b006f023900c107cb00ba02e300640514
+0071051400ba051200ae04660071023900c104bc003d0000000000000044000001180000023c
+000002b400000330000003300000042c0000051400000640000006d800000750000007f40000
+0864000009c400000a1400000ad800000b0400000bcc00000c6400000ce800000d8000000dbc
+00000f880001000000170354002b0068000c000200100099000800000415021600080004b802
+8040fffbfe03fa1403f92503f83203f79603f60e03f5fe03f4fe03f32503f20e03f19603f025
+03ef8a4105effe03ee9603ed9603ecfa03ebfa03eafe03e93a03e84203e7fe03e63203e5e453
+05e59603e48a4105e45303e3e22f05e3fa03e22f03e1fe03e0fe03df3203de1403dd9603dcfe
+03db1203da7d03d9bb03d8fe03d68a4105d67d03d5d44705d57d03d44703d3d21b05d3fe03d2
+1b03d1fe03d0fe03cffe03cefe03cd9603cccb1e05ccfe03cb1e03ca3203c9fe03c6851105c6
+1c03c51603c4fe03c3fe03c2fe03c1fe03c0fe03bffe03befe03bdfe03bcfe03bbfe03ba1103
+b9862505b9fe03b8b7bb05b8fe03b7b65d05b7bb03b78004b6b52505b65d40ff03b64004b525
+03b4fe03b39603b2fe03b1fe03b0fe03affe03ae6403ad0e03acab2505ac6403abaa1205ab25
+03aa1203a98a4105a9fa03a8fe03a7fe03a6fe03a51203a4fe03a3a20e05a33203a20e03a164
+03a08a4105a096039ffe039e9d0c059efe039d0c039c9b19059c64039b9a10059b19039a1003
+990a0398fe0397960d0597fe03960d03958a410595960394930e05942803930e0392fa039190
+bb0591fe03908f5d0590bb039080048f8e25058f5d038f40048e25038dfe038c8b2e058cfe03
+8b2e038a8625058a410389880b05891403880b03878625058764038685110586250385110384
+fe038382110583fe0382110381fe0380fe037ffe0340ff7e7d7d057efe037d7d037c64037b54
+15057b25037afe0379fe03780e03770c03760a0375fe0374fa0373fa0372fa0371fa0370fe03
+6ffe036efe036c21036bfe036a1142056a530369fe03687d036711420566fe0365fe0364fe03
+63fe0362fe03613a0360fa035e0c035dfe035bfe035afe0359580a0559fa03580a0357161905
+57320356fe035554150555420354150353011005531803521403514a130551fe03500b034ffe
+034e4d10054efe034d10034cfe034b4a13054bfe034a4910054a1303491d0d05491003480d03
+47fe0346960345960344fe0343022d0543fa0342bb03414b0340fe033ffe033e3d12053e1403
+3d3c0f053d12033c3b0d053c40ff0f033b0d033afe0339fe033837140538fa03373610053714
+0336350b05361003350b03341e03330d0332310b0532fe03310b03302f0b05300d032f0b032e
+2d09052e10032d09032c32032b2a25052b64032a2912052a2503291203282725052841032725
+0326250b05260f03250b0324fe0323fe03220f03210110052112032064031ffa031e1d0d051e
+64031d0d031c1142051cfe031bfa031a42031911420519fe031864031716190517fe03160110
+0516190315fe0314fe0313fe031211420512fe0311022d05114203107d030f64030efe030d0c
+16050dfe030c0110050c16030bfe030a100309fe0308022d0508fe0307140306640304011005
+04fe03401503022d0503fe0302011005022d0301100300fe0301b80164858d012b2b2b2b2b2b
+2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
+2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
+2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
+2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
+2b2b2b2b2b2b2b002b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
+2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
+2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
+2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
+2b2b2b2b2b2b2b2b2b2b2b2b2b1d00>
+] def
+/f-0-0 currentdict end definefont pop
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 0 -1 480 361
+%%EndPageSetup
+q 0 -1 480 362 rectclip q
+1 g
+0.25 359.752 479.5 -359.504 re f
+Q q
+0 360.002 480 -360.004 re W n
+q
+0 360.002 480 -361 re W n
+[ 1 0 0 1 0 -0.998047 ] concat
+  q
+0 g
+0.5 w
+1 J
+1 j
+[] 0.0 d
+10 M q 1 0 0 -1 0 361 cm
+0.25 0.25 479.5 359.504 re S Q
+  Q
+Q
+0.509804 0.498039 0.509804 rg
+1 w
+1 J
+1 j
+[] 0.0 d
+10 M q 1 0 0 -1 0 360.001953 cm
+36.336 8.949 434.281 293.688 re S Q
+0 g
+0.5 w
+q 1 0 0 -1 0 360.001953 cm
+36.336 302.637 m 470.617 302.637 l 36.336 306.887 m 36.336 302.637 l 108.715
+ 306.887 m 108.715 302.637 l 181.098 306.887 m 181.098 302.637 l 253.477
+ 306.887 m 253.477 302.637 l 325.855 306.887 m 325.855 302.637 l 398.238
+ 306.887 m 398.238 302.637 l 470.617 306.887 m 470.617 302.637 l S Q
+34.246 47.357 m 34.621 47.283 34.91 47.115 35.121 46.857 c 35.34 46.607
+ 35.449 46.295 35.449 45.92 c 35.449 45.334 35.25 44.889 34.855 44.576 c
+ 34.457 44.264 33.895 44.107 33.168 44.107 c 32.918 44.107 32.66 44.135 
+32.402 44.186 c 32.152 44.225 31.887 44.295 31.605 44.389 c 31.605 45.154
+ l 31.824 45.029 32.062 44.928 32.324 44.857 c 32.582 44.795 32.855 44.764
+ 33.137 44.764 c 33.637 44.764 34.016 44.861 34.277 45.061 c 34.535 45.256
+ 34.668 45.545 34.668 45.92 c 34.668 46.264 34.543 46.529 34.293 46.717 
+c 34.051 46.912 33.719 47.014 33.293 47.014 c 32.621 47.014 l 32.621 47.654
+ l 33.324 47.654 l 33.707 47.654 34.004 47.732 34.215 47.889 c 34.422 48.045
+ 34.527 48.268 34.527 48.561 c 34.527 48.861 34.418 49.092 34.199 49.248
+ c 33.988 49.412 33.688 49.498 33.293 49.498 c 33.074 49.498 32.84 49.471
+ 32.59 49.42 c 32.348 49.377 32.078 49.303 31.777 49.201 c 31.777 49.904
+ l 32.078 49.986 32.359 50.049 32.621 50.092 c 32.879 50.131 33.129 50.154
+ 33.371 50.154 c 33.965 50.154 34.434 50.018 34.777 49.748 c 35.129 49.475
+ 35.309 49.107 35.309 48.639 c 35.309 48.314 35.215 48.045 35.027 47.826
+ c 34.848 47.607 34.59 47.451 34.246 47.357 c h
+f
+38.727 47.451 m 38.371 47.451 38.09 47.326 37.883 47.076 c 37.672 46.834
+ 37.57 46.506 37.57 46.092 c 37.57 45.674 37.672 45.342 37.883 45.092 c 
+38.09 44.85 38.371 44.732 38.727 44.732 c 39.078 44.732 39.359 44.85 39.57
+ 45.092 c 39.777 45.342 39.883 45.674 39.883 46.092 c 39.883 46.506 39.777
+ 46.834 39.57 47.076 c 39.359 47.326 39.078 47.451 38.727 47.451 c h
+40.289 49.92 m 40.289 49.201 l 40.09 49.295 39.891 49.365 39.695 49.42 
+c 39.496 49.471 39.297 49.498 39.102 49.498 c 38.578 49.498 38.18 49.318
+ 37.898 48.967 c 37.625 48.611 37.469 48.08 37.43 47.373 c 37.586 47.6 37.777
+ 47.771 38.008 47.889 c 38.234 48.014 38.492 48.076 38.773 48.076 c 39.355
+ 48.076 39.82 47.896 40.164 47.545 c 40.508 47.189 40.68 46.705 40.68 46.092
+ c 40.68 45.486 40.5 45.002 40.148 44.639 c 39.793 44.283 39.32 44.107 38.727
+ 44.107 c 38.047 44.107 37.531 44.361 37.18 44.873 c 36.824 45.393 36.648
+ 46.143 36.648 47.123 c 36.648 48.049 36.867 48.783 37.305 49.326 c 37.742
+ 49.877 38.328 50.154 39.07 50.154 c 39.266 50.154 39.465 50.131 39.664 
+50.092 c 39.859 50.061 40.07 50.002 40.289 49.92 c h
+f
+106.625 47.357 m 107 47.283 107.289 47.115 107.5 46.857 c 107.719 46.607
+ 107.828 46.295 107.828 45.92 c 107.828 45.334 107.629 44.889 107.234 44.576
+ c 106.836 44.264 106.273 44.107 105.547 44.107 c 105.297 44.107 105.039
+ 44.135 104.781 44.186 c 104.531 44.225 104.266 44.295 103.984 44.389 c 
+103.984 45.154 l 104.203 45.029 104.441 44.928 104.703 44.857 c 104.961 
+44.795 105.234 44.764 105.516 44.764 c 106.016 44.764 106.395 44.861 106.656
+ 45.061 c 106.914 45.256 107.047 45.545 107.047 45.92 c 107.047 46.264 106.922
+ 46.529 106.672 46.717 c 106.43 46.912 106.098 47.014 105.672 47.014 c 105
+ 47.014 l 105 47.654 l 105.703 47.654 l 106.086 47.654 106.383 47.732 106.594
+ 47.889 c 106.801 48.045 106.906 48.268 106.906 48.561 c 106.906 48.861 
+106.797 49.092 106.578 49.248 c 106.367 49.412 106.066 49.498 105.672 49.498
+ c 105.453 49.498 105.219 49.471 104.969 49.42 c 104.727 49.377 104.457 
+49.303 104.156 49.201 c 104.156 49.904 l 104.457 49.986 104.738 50.049 105
+ 50.092 c 105.258 50.131 105.508 50.154 105.75 50.154 c 106.344 50.154 106.812
+ 50.018 107.156 49.748 c 107.508 49.475 107.688 49.107 107.688 48.639 c 
+107.688 48.314 107.594 48.045 107.406 47.826 c 107.227 47.607 106.969 47.451
+ 106.625 47.357 c h
+f
+109.121 50.045 m 112.871 50.045 l 112.871 49.717 l 110.762 44.217 l 109.934
+ 44.217 l 111.918 49.389 l 109.121 49.389 l h
+f
+179.008 47.357 m 179.383 47.283 179.672 47.115 179.883 46.857 c 180.102
+ 46.607 180.211 46.295 180.211 45.92 c 180.211 45.334 180.012 44.889 179.617
+ 44.576 c 179.219 44.264 178.656 44.107 177.93 44.107 c 177.68 44.107 177.422
+ 44.135 177.164 44.186 c 176.914 44.225 176.648 44.295 176.367 44.389 c 
+176.367 45.154 l 176.586 45.029 176.824 44.928 177.086 44.857 c 177.344 
+44.795 177.617 44.764 177.898 44.764 c 178.398 44.764 178.777 44.861 179.039
+ 45.061 c 179.297 45.256 179.43 45.545 179.43 45.92 c 179.43 46.264 179.305
+ 46.529 179.055 46.717 c 178.812 46.912 178.48 47.014 178.055 47.014 c 177.383
+ 47.014 l 177.383 47.654 l 178.086 47.654 l 178.469 47.654 178.766 47.732
+ 178.977 47.889 c 179.184 48.045 179.289 48.268 179.289 48.561 c 179.289
+ 48.861 179.18 49.092 178.961 49.248 c 178.75 49.412 178.449 49.498 178.055
+ 49.498 c 177.836 49.498 177.602 49.471 177.352 49.42 c 177.109 49.377 176.84
+ 49.303 176.539 49.201 c 176.539 49.904 l 176.84 49.986 177.121 50.049 177.383
+ 50.092 c 177.641 50.131 177.891 50.154 178.133 50.154 c 178.727 50.154 
+179.195 50.018 179.539 49.748 c 179.891 49.475 180.07 49.107 180.07 48.639
+ c 180.07 48.314 179.977 48.045 179.789 47.826 c 179.609 47.607 179.352 
+47.451 179.008 47.357 c h
+f
+183.395 46.982 m 183.02 46.982 182.723 46.881 182.504 46.686 c 182.293 
+46.486 182.191 46.209 182.191 45.857 c 182.191 45.502 182.293 45.225 182.504
+ 45.029 c 182.723 44.83 183.02 44.732 183.395 44.732 c 183.77 44.732 184.059
+ 44.83 184.27 45.029 c 184.488 45.236 184.598 45.514 184.598 45.857 c 184.598
+ 46.209 184.488 46.486 184.27 46.686 c 184.059 46.881 183.77 46.982 183.395
+ 46.982 c h
+182.598 47.326 m 182.262 47.408 182.004 47.564 181.816 47.795 c 181.629
+ 48.021 181.535 48.303 181.535 48.639 c 181.535 49.107 181.695 49.475 182.02
+ 49.748 c 182.352 50.018 182.809 50.154 183.395 50.154 c 183.977 50.154 
+184.43 50.018 184.754 49.748 c 185.086 49.475 185.254 49.107 185.254 48.639
+ c 185.254 48.303 185.16 48.021 184.973 47.795 c 184.785 47.564 184.523 
+47.408 184.191 47.326 c 184.566 47.232 184.855 47.053 185.066 46.795 c 185.285
+ 46.545 185.395 46.232 185.395 45.857 c 185.395 45.295 185.223 44.861 184.879
+ 44.561 c 184.535 44.256 184.039 44.107 183.395 44.107 c 182.746 44.107 
+182.254 44.256 181.91 44.561 c 181.566 44.861 181.395 45.295 181.395 45.857
+ c 181.395 46.232 181.496 46.545 181.707 46.795 c 181.926 47.053 182.223
+ 47.232 182.598 47.326 c h
+182.316 48.576 m 182.316 48.271 182.41 48.033 182.598 47.857 c 182.785 
+47.689 183.051 47.607 183.395 47.607 c 183.727 47.607 183.988 47.689 184.176
+ 47.857 c 184.371 48.033 184.473 48.271 184.473 48.576 c 184.473 48.877 
+184.371 49.111 184.176 49.279 c 183.988 49.443 183.727 49.529 183.395 49.529
+ c 183.051 49.529 182.785 49.443 182.598 49.279 c 182.41 49.111 182.316 
+48.877 182.316 48.576 c h
+f
+251.387 47.357 m 251.762 47.283 252.051 47.115 252.262 46.857 c 252.48 
+46.607 252.59 46.295 252.59 45.92 c 252.59 45.334 252.391 44.889 251.996
+ 44.576 c 251.598 44.264 251.035 44.107 250.309 44.107 c 250.059 44.107 
+249.801 44.135 249.543 44.186 c 249.293 44.225 249.027 44.295 248.746 44.389
+ c 248.746 45.154 l 248.965 45.029 249.203 44.928 249.465 44.857 c 249.723
+ 44.795 249.996 44.764 250.277 44.764 c 250.777 44.764 251.156 44.861 251.418
+ 45.061 c 251.676 45.256 251.809 45.545 251.809 45.92 c 251.809 46.264 251.684
+ 46.529 251.434 46.717 c 251.191 46.912 250.859 47.014 250.434 47.014 c 
+249.762 47.014 l 249.762 47.654 l 250.465 47.654 l 250.848 47.654 251.145
+ 47.732 251.355 47.889 c 251.562 48.045 251.668 48.268 251.668 48.561 c 
+251.668 48.861 251.559 49.092 251.34 49.248 c 251.129 49.412 250.828 49.498
+ 250.434 49.498 c 250.215 49.498 249.98 49.471 249.73 49.42 c 249.488 49.377
+ 249.219 49.303 248.918 49.201 c 248.918 49.904 l 249.219 49.986 249.5 50.049
+ 249.762 50.092 c 250.02 50.131 250.27 50.154 250.512 50.154 c 251.105 50.154
+ 251.574 50.018 251.918 49.748 c 252.27 49.475 252.449 49.107 252.449 48.639
+ c 252.449 48.314 252.355 48.045 252.168 47.826 c 251.988 47.607 251.73 
+47.451 251.387 47.357 c h
+f
+254.102 44.342 m 254.102 45.061 l 254.297 44.967 254.496 44.893 254.695
+ 44.842 c 254.902 44.787 255.105 44.764 255.305 44.764 c 255.824 44.764 
+256.219 44.939 256.492 45.295 c 256.773 45.646 256.934 46.178 256.977 46.889
+ c 256.82 46.67 256.625 46.498 256.398 46.373 c 256.168 46.256 255.914 46.201
+ 255.633 46.201 c 255.047 46.201 254.586 46.373 254.242 46.717 c 253.898
+ 47.068 253.727 47.553 253.727 48.17 c 253.727 48.771 253.902 49.252 254.258
+ 49.607 c 254.609 49.971 255.086 50.154 255.68 50.154 c 256.355 50.154 256.871
+ 49.893 257.227 49.373 c 257.578 48.861 257.758 48.111 257.758 47.123 c 
+257.758 46.205 257.539 45.471 257.102 44.92 c 256.664 44.377 256.074 44.107
+ 255.336 44.107 c 255.137 44.107 254.934 44.131 254.727 44.17 c 254.527 
+44.201 254.32 44.256 254.102 44.342 c h
+255.68 46.811 m 256.031 46.811 256.312 46.928 256.523 47.17 c 256.73 47.42
+ 256.836 47.752 256.836 48.17 c 256.836 48.584 256.73 48.912 256.523 49.154
+ c 256.312 49.404 256.031 49.529 255.68 49.529 c 255.324 49.529 255.043 
+49.404 254.836 49.154 c 254.625 48.912 254.523 48.584 254.523 48.17 c 254.523
+ 47.752 254.625 47.42 254.836 47.17 c 255.043 46.928 255.324 46.811 255.68
+ 46.811 c h
+f
+323.547 49.357 m 321.547 46.248 l 323.547 46.248 l h
+323.328 50.045 m 324.328 50.045 l 324.328 46.248 l 325.156 46.248 l 325.156
+ 45.592 l 324.328 45.592 l 324.328 44.217 l 323.547 44.217 l 323.547 45.592
+ l 320.906 45.592 l 320.906 46.357 l h
+f
+328.152 49.529 m 327.746 49.529 327.438 49.326 327.23 48.92 c 327.031 48.521
+ 326.934 47.924 326.934 47.123 c 326.934 46.33 327.031 45.732 327.23 45.326
+ c 327.438 44.928 327.746 44.732 328.152 44.732 c 328.559 44.732 328.859
+ 44.928 329.059 45.326 c 329.266 45.732 329.371 46.33 329.371 47.123 c 329.371
+ 47.924 329.266 48.521 329.059 48.92 c 328.859 49.326 328.559 49.529 328.152
+ 49.529 c h
+328.152 50.154 m 328.809 50.154 329.309 49.893 329.652 49.373 c 329.996
+ 48.861 330.168 48.111 330.168 47.123 c 330.168 46.143 329.996 45.393 329.652
+ 44.873 c 329.309 44.361 328.809 44.107 328.152 44.107 c 327.496 44.107 
+326.996 44.361 326.652 44.873 c 326.309 45.393 326.137 46.143 326.137 47.123
+ c 326.137 48.111 326.309 48.861 326.652 49.373 c 326.996 49.893 327.496
+ 50.154 328.152 50.154 c h
+f
+395.93 49.357 m 393.93 46.248 l 395.93 46.248 l h
+395.711 50.045 m 396.711 50.045 l 396.711 46.248 l 397.539 46.248 l 397.539
+ 45.592 l 396.711 45.592 l 396.711 44.217 l 395.93 44.217 l 395.93 45.592
+ l 393.289 45.592 l 393.289 46.357 l h
+f
+398.988 44.889 m 400.27 44.889 l 400.27 49.326 l 398.863 49.045 l 398.863
+ 49.764 l 400.27 50.045 l 401.051 50.045 l 401.051 44.889 l 402.348 44.889
+ l 402.348 44.217 l 398.988 44.217 l h
+f
+468.309 49.357 m 466.309 46.248 l 468.309 46.248 l h
+468.09 50.045 m 469.09 50.045 l 469.09 46.248 l 469.918 46.248 l 469.918
+ 45.592 l 469.09 45.592 l 469.09 44.217 l 468.309 44.217 l 468.309 45.592
+ l 465.668 45.592 l 465.668 46.357 l h
+f
+471.898 44.889 m 474.664 44.889 l 474.664 44.217 l 470.961 44.217 l 470.961
+ 44.889 l 471.25 45.189 471.656 45.6 472.18 46.123 c 472.699 46.654 473.023
+ 46.99 473.148 47.139 c 473.406 47.42 473.586 47.658 473.68 47.857 c 473.781
+ 48.053 473.836 48.248 473.836 48.436 c 473.836 48.748 473.727 49.002 473.508
+ 49.201 c 473.289 49.396 473.008 49.498 472.664 49.498 c 472.414 49.498 
+472.148 49.451 471.867 49.357 c 471.594 49.271 471.305 49.143 470.992 48.967
+ c 470.992 49.764 l 471.312 49.896 471.609 49.998 471.883 50.061 c 472.164
+ 50.123 472.418 50.154 472.648 50.154 c 473.25 50.154 473.73 50.002 474.086
+ 49.701 c 474.449 49.396 474.633 48.998 474.633 48.498 c 474.633 48.256 
+474.586 48.029 474.492 47.811 c 474.398 47.592 474.234 47.334 474.008 47.045
+ c 473.934 46.971 473.719 46.752 473.367 46.389 c 473.023 46.033 472.531
+ 45.533 471.898 44.889 c h
+f
+208.883 36.096 m 215.055 36.096 l 215.055 35.252 l 212.461 35.252 l 212.461
+ 28.799 l 211.477 28.799 l 211.477 35.252 l 208.883 35.252 l h
+f
+215.652 34.268 m 216.559 34.268 l 216.559 28.799 l 215.652 28.799 l h
+215.652 36.393 m 216.559 36.393 l 216.559 35.252 l 215.652 35.252 l h
+f
+222.695 33.221 m 222.914 33.627 223.18 33.924 223.492 34.111 c 223.805 
+34.299 224.172 34.393 224.602 34.393 c 225.172 34.393 225.609 34.193 225.914
+ 33.799 c 226.227 33.4 226.383 32.834 226.383 32.096 c 226.383 28.799 l 
+225.477 28.799 l 225.477 32.064 l 225.477 32.596 225.383 32.986 225.195 
+33.236 c 225.016 33.486 224.734 33.611 224.352 33.611 c 223.883 33.611 223.512
+ 33.455 223.242 33.143 c 222.98 32.838 222.852 32.424 222.852 31.893 c 222.852
+ 28.799 l 221.945 28.799 l 221.945 32.064 l 221.945 32.596 221.852 32.986
+ 221.664 33.236 c 221.477 33.486 221.188 33.611 220.805 33.611 c 220.344
+ 33.611 219.98 33.455 219.711 33.143 c 219.438 32.838 219.305 32.424 219.305
+ 31.893 c 219.305 28.799 l 218.398 28.799 l 218.398 34.268 l 219.305 34.268
+ l 219.305 33.424 l 219.512 33.756 219.758 34.002 220.039 34.158 c 220.328
+ 34.314 220.668 34.393 221.055 34.393 c 221.461 34.393 221.797 34.291 222.07
+ 34.096 c 222.352 33.896 222.559 33.604 222.695 33.221 c h
+f
+232.859 31.752 m 232.859 31.314 l 228.719 31.314 l 228.758 30.697 228.945
+ 30.229 229.281 29.908 c 229.613 29.584 230.078 29.424 230.672 29.424 c 
+231.016 29.424 231.348 29.463 231.672 29.549 c 232.004 29.631 232.328 29.756
+ 232.641 29.924 c 232.641 29.08 l 232.316 28.943 231.984 28.838 231.641 
+28.768 c 231.305 28.697 230.969 28.658 230.625 28.658 c 229.75 28.658 229.055
+ 28.908 228.547 29.408 c 228.035 29.916 227.781 30.611 227.781 31.486 c 
+227.781 32.381 228.02 33.088 228.5 33.611 c 228.988 34.131 229.645 34.393
+ 230.469 34.393 c 231.207 34.393 231.789 34.158 232.219 33.689 c 232.645
+ 33.221 232.859 32.572 232.859 31.752 c h
+231.953 32.018 m 231.953 32.506 231.816 32.896 231.547 33.189 c 231.273
+ 33.49 230.922 33.643 230.484 33.643 c 229.973 33.643 229.566 33.494 229.266
+ 33.205 c 228.973 32.924 228.801 32.525 228.75 32.018 c h
+f
+239.66 36.393 m 239.23 35.643 238.91 34.896 238.691 34.158 c 238.48 33.428
+ 238.379 32.689 238.379 31.939 c 238.379 31.189 238.48 30.443 238.691 29.705
+ c 238.91 28.963 239.23 28.229 239.66 27.486 c 238.879 27.486 l 238.398 
+28.248 238.035 28.994 237.785 29.736 c 237.543 30.475 237.426 31.209 237.426
+ 31.939 c 237.426 32.666 237.543 33.396 237.785 34.127 c 238.023 34.865 
+238.387 35.619 238.879 36.393 c h
+f
+241.402 34.268 m 242.309 34.268 l 242.309 28.799 l 241.402 28.799 l h
+241.402 36.393 m 242.309 36.393 l 242.309 35.252 l 241.402 35.252 l h
+f
+248.73 32.096 m 248.73 28.799 l 247.84 28.799 l 247.84 32.064 l 247.84 
+32.584 247.734 32.971 247.527 33.221 c 247.328 33.479 247.027 33.611 246.621
+ 33.611 c 246.141 33.611 245.762 33.455 245.48 33.143 c 245.199 32.838 245.059
+ 32.424 245.059 31.893 c 245.059 28.799 l 244.152 28.799 l 244.152 34.268
+ l 245.059 34.268 l 245.059 33.424 l 245.277 33.744 245.531 33.986 245.824
+ 34.143 c 246.113 34.307 246.449 34.393 246.824 34.393 c 247.449 34.393 
+247.922 34.197 248.246 33.814 c 248.566 33.428 248.73 32.854 248.73 32.096
+ c h
+f
+257.184 34.111 m 257.184 33.252 l 256.934 33.385 256.672 33.486 256.402
+ 33.549 c 256.129 33.611 255.844 33.643 255.543 33.643 c 255.105 33.643 
+254.77 33.572 254.543 33.439 c 254.324 33.303 254.215 33.1 254.215 32.83
+ c 254.215 32.619 254.293 32.455 254.449 32.33 c 254.605 32.213 254.926 
+32.104 255.418 32.002 c 255.715 31.924 l 256.359 31.787 256.812 31.596 257.074
+ 31.346 c 257.344 31.096 257.48 30.752 257.48 30.314 c 257.48 29.803 257.277
+ 29.396 256.871 29.096 c 256.473 28.803 255.926 28.658 255.23 28.658 c 254.926
+ 28.658 254.613 28.689 254.293 28.752 c 253.98 28.803 253.652 28.885 253.309
+ 29.002 c 253.309 29.924 l 253.641 29.756 253.965 29.627 254.277 29.533 
+c 254.598 29.447 254.922 29.408 255.246 29.408 c 255.66 29.408 255.984 29.479
+ 256.215 29.627 c 256.441 29.771 256.559 29.975 256.559 30.236 c 256.559
+ 30.486 256.473 30.674 256.309 30.799 c 256.152 30.932 255.793 31.057 255.23
+ 31.174 c 254.918 31.252 l 254.363 31.365 253.965 31.541 253.715 31.783 
+c 253.465 32.033 253.34 32.365 253.34 32.783 c 253.34 33.303 253.52 33.697
+ 253.887 33.971 c 254.25 34.252 254.77 34.393 255.449 34.393 c 255.77 34.393
+ 256.078 34.365 256.371 34.314 c 256.672 34.271 256.941 34.205 257.184 34.111
+ c h
+f
+263.598 31.752 m 263.598 31.314 l 259.457 31.314 l 259.496 30.697 259.684
+ 30.229 260.02 29.908 c 260.352 29.584 260.816 29.424 261.41 29.424 c 261.754
+ 29.424 262.086 29.463 262.41 29.549 c 262.742 29.631 263.066 29.756 263.379
+ 29.924 c 263.379 29.08 l 263.055 28.943 262.723 28.838 262.379 28.768 c
+ 262.043 28.697 261.707 28.658 261.363 28.658 c 260.488 28.658 259.793 28.908
+ 259.285 29.408 c 258.773 29.916 258.52 30.611 258.52 31.486 c 258.52 32.381
+ 258.758 33.088 259.238 33.611 c 259.727 34.131 260.383 34.393 261.207 34.393
+ c 261.945 34.393 262.527 34.158 262.957 33.689 c 263.383 33.221 263.598
+ 32.572 263.598 31.752 c h
+262.691 32.018 m 262.691 32.506 262.555 32.896 262.285 33.189 c 262.012
+ 33.49 261.66 33.643 261.223 33.643 c 260.711 33.643 260.305 33.494 260.004
+ 33.205 c 259.711 32.924 259.539 32.525 259.488 32.018 c h
+f
+269 34.064 m 269 33.221 l 268.75 33.354 268.492 33.459 268.234 33.533 c
+ 267.984 33.604 267.727 33.643 267.469 33.643 c 266.883 33.643 266.43 33.455
+ 266.109 33.08 c 265.785 32.713 265.625 32.197 265.625 31.533 c 265.625 
+30.865 265.785 30.346 266.109 29.971 c 266.43 29.604 266.883 29.424 267.469
+ 29.424 c 267.727 29.424 267.984 29.455 268.234 29.518 c 268.492 29.588 
+268.75 29.697 269 29.846 c 269 29.002 l 268.75 28.885 268.488 28.803 268.219
+ 28.752 c 267.957 28.689 267.676 28.658 267.375 28.658 c 266.539 28.658 
+265.879 28.912 265.391 29.424 c 264.91 29.943 264.672 30.646 264.672 31.533
+ c 264.672 32.416 264.914 33.115 265.406 33.627 c 265.895 34.135 266.566
+ 34.393 267.422 34.393 c 267.703 34.393 267.973 34.365 268.234 34.314 c 
+268.492 34.26 268.75 34.178 269 34.064 c h
+f
+272.684 33.643 m 272.203 33.643 271.824 33.455 271.543 33.08 c 271.262 
+32.705 271.121 32.189 271.121 31.533 c 271.121 30.877 271.254 30.361 271.527
+ 29.986 c 271.809 29.611 272.191 29.424 272.684 29.424 c 273.16 29.424 273.543
+ 29.611 273.824 29.986 c 274.105 30.361 274.246 30.877 274.246 31.533 c 
+274.246 32.178 274.105 32.689 273.824 33.064 c 273.543 33.447 273.16 33.643
+ 272.684 33.643 c h
+272.684 34.393 m 273.465 34.393 274.078 34.135 274.527 33.627 c 274.973
+ 33.127 275.199 32.428 275.199 31.533 c 275.199 30.635 274.973 29.932 274.527
+ 29.424 c 274.078 28.912 273.465 28.658 272.684 28.658 c 271.902 28.658 
+271.285 28.912 270.84 29.424 c 270.391 29.932 270.168 30.635 270.168 31.533
+ c 270.168 32.428 270.391 33.127 270.84 33.627 c 271.285 34.135 271.902 
+34.393 272.684 34.393 c h
+f
+281.223 32.096 m 281.223 28.799 l 280.332 28.799 l 280.332 32.064 l 280.332
+ 32.584 280.227 32.971 280.02 33.221 c 279.82 33.479 279.52 33.611 279.113
+ 33.611 c 278.633 33.611 278.254 33.455 277.973 33.143 c 277.691 32.838 
+277.551 32.424 277.551 31.893 c 277.551 28.799 l 276.645 28.799 l 276.645
+ 34.268 l 277.551 34.268 l 277.551 33.424 l 277.77 33.744 278.023 33.986
+ 278.316 34.143 c 278.605 34.307 278.941 34.393 279.316 34.393 c 279.941
+ 34.393 280.414 34.197 280.738 33.814 c 281.059 33.428 281.223 32.854 281.223
+ 32.096 c h
+f
+286.625 33.439 m 286.625 36.393 l 287.516 36.393 l 287.516 28.799 l 286.625
+ 28.799 l 286.625 29.627 l 286.438 29.291 286.195 29.049 285.906 28.893 
+c 285.613 28.736 285.266 28.658 284.859 28.658 c 284.203 28.658 283.664 
+28.916 283.25 29.439 c 282.832 29.971 282.625 30.666 282.625 31.533 c 282.625
+ 32.385 282.832 33.072 283.25 33.596 c 283.664 34.127 284.203 34.393 284.859
+ 34.393 c 285.266 34.393 285.613 34.314 285.906 34.158 c 286.195 34.002 
+286.438 33.76 286.625 33.439 c h
+283.562 31.533 m 283.562 30.865 283.695 30.346 283.969 29.971 c 284.238
+ 29.596 284.613 29.408 285.094 29.408 c 285.562 29.408 285.93 29.596 286.203
+ 29.971 c 286.484 30.346 286.625 30.865 286.625 31.533 c 286.625 32.189 
+286.484 32.705 286.203 33.08 c 285.93 33.455 285.562 33.643 285.094 33.643
+ c 284.613 33.643 284.238 33.455 283.969 33.08 c 283.695 32.705 283.562 
+32.189 283.562 31.533 c h
+f
+292.848 34.111 m 292.848 33.252 l 292.598 33.385 292.336 33.486 292.066
+ 33.549 c 291.793 33.611 291.508 33.643 291.207 33.643 c 290.77 33.643 290.434
+ 33.572 290.207 33.439 c 289.988 33.303 289.879 33.1 289.879 32.83 c 289.879
+ 32.619 289.957 32.455 290.113 32.33 c 290.27 32.213 290.59 32.104 291.082
+ 32.002 c 291.379 31.924 l 292.023 31.787 292.477 31.596 292.738 31.346 
+c 293.008 31.096 293.145 30.752 293.145 30.314 c 293.145 29.803 292.941 
+29.396 292.535 29.096 c 292.137 28.803 291.59 28.658 290.895 28.658 c 290.59
+ 28.658 290.277 28.689 289.957 28.752 c 289.645 28.803 289.316 28.885 288.973
+ 29.002 c 288.973 29.924 l 289.305 29.756 289.629 29.627 289.941 29.533 
+c 290.262 29.447 290.586 29.408 290.91 29.408 c 291.324 29.408 291.648 29.479
+ 291.879 29.627 c 292.105 29.771 292.223 29.975 292.223 30.236 c 292.223
+ 30.486 292.137 30.674 291.973 30.799 c 291.816 30.932 291.457 31.057 290.895
+ 31.174 c 290.582 31.252 l 290.027 31.365 289.629 31.541 289.379 31.783 
+c 289.129 32.033 289.004 32.365 289.004 32.783 c 289.004 33.303 289.184 
+33.697 289.551 33.971 c 289.914 34.252 290.434 34.393 291.113 34.393 c 291.434
+ 34.393 291.742 34.365 292.035 34.314 c 292.336 34.271 292.605 34.205 292.848
+ 34.111 c h
+f
+294.434 36.393 m 295.215 36.393 l 295.703 35.619 296.066 34.865 296.309
+ 34.127 c 296.559 33.396 296.684 32.666 296.684 31.939 c 296.684 31.209 
+296.559 30.475 296.309 29.736 c 296.066 28.994 295.703 28.248 295.215 27.486
+ c 294.434 27.486 l 294.871 28.229 295.191 28.963 295.402 29.705 c 295.621
+ 30.443 295.73 31.189 295.73 31.939 c 295.73 32.689 295.621 33.428 295.402
+ 34.158 c 295.191 34.896 294.871 35.643 294.434 36.393 c h
+f
+q 1 0 0 -1 0 360.001953 cm
+36.336 302.637 m 36.336 8.949 l 32.086 302.637 m 36.336 302.637 l 32.086
+ 265.926 m 36.336 265.926 l 32.086 229.215 m 36.336 229.215 l 32.086 192.504
+ m 36.336 192.504 l 32.086 155.793 m 36.336 155.793 l 32.086 119.082 m 36.336
+ 119.082 l 32.086 82.371 m 36.336 82.371 l 32.086 45.66 m 36.336 45.66 l
+ 32.086 8.949 m 36.336 8.949 l S Q
+20.59 60.674 m 24.34 60.674 l 24.34 60.346 l 22.23 54.846 l 21.402 54.846
+ l 23.387 60.018 l 20.59 60.018 l h
+f
+26.555 55.518 m 29.32 55.518 l 29.32 54.846 l 25.617 54.846 l 25.617 55.518
+ l 25.906 55.818 26.312 56.229 26.836 56.752 c 27.355 57.283 27.68 57.619
+ 27.805 57.768 c 28.062 58.049 28.242 58.287 28.336 58.486 c 28.438 58.682
+ 28.492 58.877 28.492 59.064 c 28.492 59.377 28.383 59.631 28.164 59.83 
+c 27.945 60.025 27.664 60.127 27.32 60.127 c 27.07 60.127 26.805 60.08 26.523
+ 59.986 c 26.25 59.9 25.961 59.771 25.648 59.596 c 25.648 60.393 l 25.969
+ 60.525 26.266 60.627 26.539 60.689 c 26.82 60.752 27.074 60.783 27.305 
+60.783 c 27.906 60.783 28.387 60.631 28.742 60.33 c 29.105 60.025 29.289
+ 59.627 29.289 59.127 c 29.289 58.885 29.242 58.658 29.148 58.439 c 29.055
+ 58.221 28.891 57.963 28.664 57.674 c 28.59 57.6 28.375 57.381 28.023 57.018
+ c 27.68 56.662 27.188 56.162 26.555 55.518 c h
+f
+20.59 97.385 m 24.34 97.385 l 24.34 97.057 l 22.23 91.557 l 21.402 91.557
+ l 23.387 96.729 l 20.59 96.729 l h
+f
+28.273 94.697 m 28.648 94.623 28.938 94.455 29.148 94.197 c 29.367 93.947
+ 29.477 93.635 29.477 93.26 c 29.477 92.674 29.277 92.229 28.883 91.916 
+c 28.484 91.604 27.922 91.447 27.195 91.447 c 26.945 91.447 26.688 91.475
+ 26.43 91.525 c 26.18 91.564 25.914 91.635 25.633 91.729 c 25.633 92.494
+ l 25.852 92.369 26.09 92.268 26.352 92.197 c 26.609 92.135 26.883 92.104
+ 27.164 92.104 c 27.664 92.104 28.043 92.201 28.305 92.4 c 28.562 92.596
+ 28.695 92.885 28.695 93.26 c 28.695 93.604 28.57 93.869 28.32 94.057 c 
+28.078 94.252 27.746 94.354 27.32 94.354 c 26.648 94.354 l 26.648 94.994
+ l 27.352 94.994 l 27.734 94.994 28.031 95.072 28.242 95.229 c 28.449 95.385
+ 28.555 95.607 28.555 95.9 c 28.555 96.201 28.445 96.432 28.227 96.588 c
+ 28.016 96.752 27.715 96.838 27.32 96.838 c 27.102 96.838 26.867 96.811 
+26.617 96.76 c 26.375 96.717 26.105 96.643 25.805 96.541 c 25.805 97.244
+ l 26.105 97.326 26.387 97.389 26.648 97.432 c 26.906 97.471 27.156 97.494
+ 27.398 97.494 c 27.992 97.494 28.461 97.357 28.805 97.088 c 29.156 96.814
+ 29.336 96.447 29.336 95.979 c 29.336 95.654 29.242 95.385 29.055 95.166
+ c 28.875 94.947 28.617 94.791 28.273 94.697 c h
+f
+20.59 134.096 m 24.34 134.096 l 24.34 133.768 l 22.23 128.268 l 21.402 
+128.268 l 23.387 133.439 l 20.59 133.439 l h
+f
+28.055 133.408 m 26.055 130.299 l 28.055 130.299 l h
+27.836 134.096 m 28.836 134.096 l 28.836 130.299 l 29.664 130.299 l 29.664
+ 129.643 l 28.836 129.643 l 28.836 128.268 l 28.055 128.268 l 28.055 129.643
+ l 25.414 129.643 l 25.414 130.408 l h
+f
+20.59 170.807 m 24.34 170.807 l 24.34 170.479 l 22.23 164.979 l 21.402 
+164.979 l 23.387 170.15 l 20.59 170.15 l h
+f
+25.883 170.807 m 28.992 170.807 l 28.992 170.15 l 26.617 170.15 l 26.617
+ 168.713 l 26.73 168.752 26.844 168.783 26.961 168.807 c 27.074 168.826 
+27.188 168.838 27.305 168.838 c 27.949 168.838 28.461 168.654 28.836 168.291
+ c 29.219 167.936 29.414 167.455 29.414 166.854 c 29.414 166.229 29.215 
+165.736 28.82 165.385 c 28.434 165.041 27.887 164.869 27.18 164.869 c 26.93
+ 164.869 26.68 164.893 26.43 164.932 c 26.18 164.975 25.918 165.033 25.648
+ 165.119 c 25.648 165.916 l 25.875 165.779 26.117 165.682 26.367 165.619
+ c 26.617 165.557 26.883 165.525 27.164 165.525 c 27.609 165.525 27.965 
+165.643 28.227 165.885 c 28.496 166.123 28.633 166.447 28.633 166.854 c 
+28.633 167.26 28.496 167.576 28.227 167.807 c 27.965 168.045 27.609 168.166
+ 27.164 168.166 c 26.953 168.166 26.742 168.139 26.523 168.088 c 26.312 
+168.045 26.102 167.979 25.883 167.885 c h
+f
+20.59 207.518 m 24.34 207.518 l 24.34 207.189 l 22.23 201.689 l 21.402 
+201.689 l 23.387 206.861 l 20.59 206.861 l h
+f
+27.664 204.924 m 27.309 204.924 27.027 204.799 26.82 204.549 c 26.609 204.307
+ 26.508 203.979 26.508 203.564 c 26.508 203.146 26.609 202.814 26.82 202.564
+ c 27.027 202.322 27.309 202.205 27.664 202.205 c 28.016 202.205 28.297 
+202.322 28.508 202.564 c 28.715 202.814 28.82 203.146 28.82 203.564 c 28.82
+ 203.979 28.715 204.307 28.508 204.549 c 28.297 204.799 28.016 204.924 27.664
+ 204.924 c h
+29.227 207.393 m 29.227 206.674 l 29.027 206.768 28.828 206.838 28.633 
+206.893 c 28.434 206.943 28.234 206.971 28.039 206.971 c 27.516 206.971 
+27.117 206.791 26.836 206.439 c 26.562 206.084 26.406 205.553 26.367 204.846
+ c 26.523 205.072 26.715 205.244 26.945 205.361 c 27.172 205.486 27.43 205.549
+ 27.711 205.549 c 28.293 205.549 28.758 205.369 29.102 205.018 c 29.445 
+204.662 29.617 204.178 29.617 203.564 c 29.617 202.959 29.438 202.475 29.086
+ 202.111 c 28.73 201.756 28.258 201.58 27.664 201.58 c 26.984 201.58 26.469
+ 201.834 26.117 202.346 c 25.762 202.865 25.586 203.615 25.586 204.596 c
+ 25.586 205.521 25.805 206.256 26.242 206.799 c 26.68 207.35 27.266 207.627
+ 28.008 207.627 c 28.203 207.627 28.402 207.604 28.602 207.564 c 28.797 
+207.533 29.008 207.475 29.227 207.393 c h
+f
+20.59 244.229 m 24.34 244.229 l 24.34 243.9 l 22.23 238.4 l 21.402 238.4
+ l 23.387 243.572 l 20.59 243.572 l h
+f
+25.68 244.229 m 29.43 244.229 l 29.43 243.9 l 27.32 238.4 l 26.492 238.4
+ l 28.477 243.572 l 25.68 243.572 l h
+f
+20.59 280.939 m 24.34 280.939 l 24.34 280.611 l 22.23 275.111 l 21.402 
+275.111 l 23.387 280.283 l 20.59 280.283 l h
+f
+27.57 277.877 m 27.195 277.877 26.898 277.775 26.68 277.58 c 26.469 277.381
+ 26.367 277.104 26.367 276.752 c 26.367 276.396 26.469 276.119 26.68 275.924
+ c 26.898 275.725 27.195 275.627 27.57 275.627 c 27.945 275.627 28.234 275.725
+ 28.445 275.924 c 28.664 276.131 28.773 276.408 28.773 276.752 c 28.773 
+277.104 28.664 277.381 28.445 277.58 c 28.234 277.775 27.945 277.877 27.57
+ 277.877 c h
+26.773 278.221 m 26.438 278.303 26.18 278.459 25.992 278.689 c 25.805 278.916
+ 25.711 279.197 25.711 279.533 c 25.711 280.002 25.871 280.369 26.195 280.643
+ c 26.527 280.912 26.984 281.049 27.57 281.049 c 28.152 281.049 28.605 280.912
+ 28.93 280.643 c 29.262 280.369 29.43 280.002 29.43 279.533 c 29.43 279.197
+ 29.336 278.916 29.148 278.689 c 28.961 278.459 28.699 278.303 28.367 278.221
+ c 28.742 278.127 29.031 277.947 29.242 277.689 c 29.461 277.439 29.57 277.127
+ 29.57 276.752 c 29.57 276.189 29.398 275.756 29.055 275.455 c 28.711 275.15
+ 28.215 275.002 27.57 275.002 c 26.922 275.002 26.43 275.15 26.086 275.455
+ c 25.742 275.756 25.57 276.189 25.57 276.752 c 25.57 277.127 25.672 277.439
+ 25.883 277.689 c 26.102 277.947 26.398 278.127 26.773 278.221 c h
+26.492 279.471 m 26.492 279.166 26.586 278.928 26.773 278.752 c 26.961 
+278.584 27.227 278.502 27.57 278.502 c 27.902 278.502 28.164 278.584 28.352
+ 278.752 c 28.547 278.928 28.648 279.166 28.648 279.471 c 28.648 279.771
+ 28.547 280.006 28.352 280.174 c 28.164 280.338 27.902 280.424 27.57 280.424
+ c 27.227 280.424 26.961 280.338 26.773 280.174 c 26.586 280.006 26.492 
+279.771 26.492 279.471 c h
+f
+20.59 317.65 m 24.34 317.65 l 24.34 317.322 l 22.23 311.822 l 21.402 311.822
+ l 23.387 316.994 l 20.59 316.994 l h
+f
+25.898 311.947 m 25.898 312.666 l 26.094 312.572 26.293 312.498 26.492 
+312.447 c 26.699 312.393 26.902 312.369 27.102 312.369 c 27.621 312.369 
+28.016 312.545 28.289 312.9 c 28.57 313.252 28.73 313.783 28.773 314.494
+ c 28.617 314.275 28.422 314.104 28.195 313.979 c 27.965 313.861 27.711 
+313.807 27.43 313.807 c 26.844 313.807 26.383 313.979 26.039 314.322 c 25.695
+ 314.674 25.523 315.158 25.523 315.775 c 25.523 316.377 25.699 316.857 26.055
+ 317.213 c 26.406 317.576 26.883 317.76 27.477 317.76 c 28.152 317.76 28.668
+ 317.498 29.023 316.979 c 29.375 316.467 29.555 315.717 29.555 314.729 c
+ 29.555 313.811 29.336 313.076 28.898 312.525 c 28.461 311.982 27.871 311.713
+ 27.133 311.713 c 26.934 311.713 26.73 311.736 26.523 311.775 c 26.324 311.807
+ 26.117 311.861 25.898 311.947 c h
+27.477 314.416 m 27.828 314.416 28.109 314.533 28.32 314.775 c 28.527 315.025
+ 28.633 315.357 28.633 315.775 c 28.633 316.189 28.527 316.518 28.32 316.76
+ c 28.109 317.01 27.828 317.135 27.477 317.135 c 27.121 317.135 26.84 317.01
+ 26.633 316.76 c 26.422 316.518 26.32 316.189 26.32 315.775 c 26.32 315.357
+ 26.422 315.025 26.633 314.775 c 26.84 314.533 27.121 314.416 27.477 314.416
+ c h
+f
+22.48 351.299 m 22.105 351.299 21.809 351.197 21.59 351.002 c 21.379 350.803
+ 21.277 350.525 21.277 350.174 c 21.277 349.818 21.379 349.541 21.59 349.346
+ c 21.809 349.146 22.105 349.049 22.48 349.049 c 22.855 349.049 23.145 349.146
+ 23.355 349.346 c 23.574 349.553 23.684 349.83 23.684 350.174 c 23.684 350.525
+ 23.574 350.803 23.355 351.002 c 23.145 351.197 22.855 351.299 22.48 351.299
+ c h
+21.684 351.643 m 21.348 351.725 21.09 351.881 20.902 352.111 c 20.715 352.338
+ 20.621 352.619 20.621 352.955 c 20.621 353.424 20.781 353.791 21.105 354.064
+ c 21.438 354.334 21.895 354.471 22.48 354.471 c 23.062 354.471 23.516 354.334
+ 23.84 354.064 c 24.172 353.791 24.34 353.424 24.34 352.955 c 24.34 352.619
+ 24.246 352.338 24.059 352.111 c 23.871 351.881 23.609 351.725 23.277 351.643
+ c 23.652 351.549 23.941 351.369 24.152 351.111 c 24.371 350.861 24.48 350.549
+ 24.48 350.174 c 24.48 349.611 24.309 349.178 23.965 348.877 c 23.621 348.572
+ 23.125 348.424 22.48 348.424 c 21.832 348.424 21.34 348.572 20.996 348.877
+ c 20.652 349.178 20.48 349.611 20.48 350.174 c 20.48 350.549 20.582 350.861
+ 20.793 351.111 c 21.012 351.369 21.309 351.549 21.684 351.643 c h
+21.402 352.893 m 21.402 352.588 21.496 352.35 21.684 352.174 c 21.871 352.006
+ 22.137 351.924 22.48 351.924 c 22.812 351.924 23.074 352.006 23.262 352.174
+ c 23.457 352.35 23.559 352.588 23.559 352.893 c 23.559 353.193 23.457 353.428
+ 23.262 353.596 c 23.074 353.76 22.812 353.846 22.48 353.846 c 22.137 353.846
+ 21.871 353.76 21.684 353.596 c 21.496 353.428 21.402 353.193 21.402 352.893
+ c h
+f
+27.57 353.846 m 27.164 353.846 26.855 353.643 26.648 353.236 c 26.449 352.838
+ 26.352 352.24 26.352 351.439 c 26.352 350.646 26.449 350.049 26.648 349.643
+ c 26.855 349.244 27.164 349.049 27.57 349.049 c 27.977 349.049 28.277 349.244
+ 28.477 349.643 c 28.684 350.049 28.789 350.646 28.789 351.439 c 28.789 
+352.24 28.684 352.838 28.477 353.236 c 28.277 353.643 27.977 353.846 27.57
+ 353.846 c h
+27.57 354.471 m 28.227 354.471 28.727 354.209 29.07 353.689 c 29.414 353.178
+ 29.586 352.428 29.586 351.439 c 29.586 350.459 29.414 349.709 29.07 349.189
+ c 28.727 348.678 28.227 348.424 27.57 348.424 c 26.914 348.424 26.414 348.678
+ 26.07 349.189 c 25.727 349.709 25.555 350.459 25.555 351.439 c 25.555 352.428
+ 25.727 353.178 26.07 353.689 c 26.414 354.209 26.914 354.471 27.57 354.471
+ c h
+f
+9.902 160.92 m 9.977 161.127 10.133 161.33 10.371 161.529 c 10.602 161.736
+ 10.918 161.939 11.324 162.139 c 13.324 163.139 l 13.324 162.076 l 11.449
+ 161.154 l 10.961 160.912 10.637 160.678 10.48 160.451 c 10.324 160.221 
+10.246 159.912 10.246 159.529 c 10.246 158.451 l 13.324 158.451 l 13.324
+ 157.467 l 6.027 157.467 l 6.027 159.686 l 6.027 160.518 6.207 161.139 6.559
+ 161.545 c 6.902 161.959 7.43 162.17 8.137 162.17 c 8.598 162.17 8.977 162.061
+ 9.277 161.842 c 9.582 161.631 9.789 161.326 9.902 160.92 c h
+6.84 158.451 m 9.434 158.451 l 9.434 159.686 l 9.434 160.162 9.324 160.521
+ 9.105 160.764 c 8.887 161.014 8.566 161.139 8.137 161.139 c 7.711 161.139
+ 7.387 161.014 7.168 160.764 c 6.949 160.521 6.84 160.162 6.84 159.686 c
+ h
+f
+6.277 168.791 m 7.23 168.791 l 7.055 168.416 6.926 168.061 6.84 167.729
+ c 6.746 167.393 6.699 167.072 6.699 166.76 c 6.699 166.229 6.805 165.814
+ 7.012 165.525 c 7.223 165.232 7.52 165.088 7.902 165.088 c 8.227 165.088
+ 8.473 165.182 8.637 165.369 c 8.805 165.564 8.934 165.936 9.027 166.479
+ c 9.152 167.072 l 9.301 167.799 9.551 168.342 9.902 168.697 c 10.246 169.049
+ 10.715 169.229 11.309 169.229 c 12.02 169.229 12.555 168.986 12.918 168.51
+ c 13.285 168.041 13.465 167.346 13.465 166.432 c 13.465 166.088 13.422 
+165.717 13.34 165.322 c 13.27 164.936 13.152 164.533 12.996 164.119 c 11.98
+ 164.119 l 12.211 164.525 12.383 164.916 12.496 165.291 c 12.613 165.674
+ 12.668 166.057 12.668 166.432 c 12.668 166.994 12.559 167.424 12.34 167.729
+ c 12.113 168.041 11.793 168.197 11.387 168.197 c 11.035 168.197 10.758 
+168.088 10.559 167.869 c 10.352 167.65 10.195 167.283 10.09 166.775 c 9.98
+ 166.182 l 9.836 165.439 9.605 164.904 9.293 164.572 c 8.98 164.248 8.543
+ 164.088 7.98 164.088 c 7.336 164.088 6.832 164.311 6.465 164.76 c 6.09 
+165.217 5.902 165.846 5.902 166.65 c 5.902 166.994 5.934 167.342 5.996 167.697
+ c 6.059 168.049 6.152 168.416 6.277 168.791 c h
+f
+9.902 174.217 m 9.977 174.424 10.133 174.627 10.371 174.826 c 10.602 175.033
+ 10.918 175.236 11.324 175.436 c 13.324 176.436 l 13.324 175.373 l 11.449
+ 174.451 l 10.961 174.209 10.637 173.975 10.48 173.748 c 10.324 173.518 
+10.246 173.209 10.246 172.826 c 10.246 171.748 l 13.324 171.748 l 13.324
+ 170.764 l 6.027 170.764 l 6.027 172.982 l 6.027 173.814 6.207 174.436 6.559
+ 174.842 c 6.902 175.256 7.43 175.467 8.137 175.467 c 8.598 175.467 8.977
+ 175.357 9.277 175.139 c 9.582 174.928 9.789 174.623 9.902 174.217 c h
+6.84 171.748 m 9.434 171.748 l 9.434 172.982 l 9.434 173.459 9.324 173.818
+ 9.105 174.061 c 8.887 174.311 8.566 174.436 8.137 174.436 c 7.711 174.436
+ 7.387 174.311 7.168 174.061 c 6.949 173.818 6.84 173.459 6.84 172.982 c
+ h
+f
+6.84 178.697 m 9.59 178.697 l 9.59 179.932 l 9.59 180.389 9.473 180.744
+ 9.23 180.994 c 8.992 181.252 8.652 181.385 8.215 181.385 c 7.777 181.385
+ 7.441 181.252 7.199 180.994 c 6.961 180.744 6.84 180.389 6.84 179.932 c
+ h
+6.027 177.713 m 6.027 179.932 l 6.027 180.752 6.215 181.373 6.59 181.791
+ c 6.957 182.205 7.496 182.416 8.215 182.416 c 8.934 182.416 9.477 182.205
+ 9.84 181.791 c 10.207 181.373 10.387 180.752 10.387 179.932 c 10.387 178.697
+ l 13.324 178.697 l 13.324 177.713 l h
+f
+8.699 190.045 m 8.637 189.939 8.598 189.83 8.574 189.717 c 8.543 189.6 
+8.527 189.471 8.527 189.326 c 8.527 188.814 8.695 188.424 9.027 188.154 
+c 9.352 187.881 9.824 187.748 10.449 187.748 c 13.324 187.748 l 13.324 186.842
+ l 7.855 186.842 l 7.855 187.748 l 8.699 187.748 l 8.367 187.936 8.121 188.178
+ 7.965 188.482 c 7.809 188.783 7.73 189.154 7.73 189.592 c 7.73 189.654 
+7.738 189.721 7.746 189.795 c 7.746 189.865 7.758 189.951 7.777 190.045 
+c h
+f
+10.574 193.471 m 10.574 192.752 10.66 192.252 10.824 191.971 c 10.992 191.689
+ 11.273 191.549 11.668 191.549 c 11.992 191.549 12.246 191.65 12.434 191.861
+ c 12.621 192.068 12.715 192.354 12.715 192.721 c 12.715 193.221 12.539 
+193.619 12.184 193.924 c 11.832 194.225 11.363 194.377 10.777 194.377 c 
+10.574 194.377 l h
+10.199 195.268 m 13.324 195.268 l 13.324 194.377 l 12.496 194.377 l 12.832
+ 194.166 13.074 193.908 13.23 193.596 c 13.387 193.291 13.465 192.924 13.465
+ 192.486 c 13.465 191.924 13.309 191.475 12.996 191.143 c 12.684 190.807
+ 12.262 190.643 11.73 190.643 c 11.117 190.643 10.652 190.85 10.34 191.268
+ c 10.027 191.682 9.871 192.299 9.871 193.111 c 9.871 194.377 l 9.777 194.377
+ l 9.371 194.377 9.055 194.236 8.824 193.955 c 8.598 193.682 8.48 193.303
+ 8.48 192.814 c 8.48 192.502 8.523 192.193 8.605 191.893 c 8.68 191.6 8.789
+ 191.318 8.934 191.049 c 8.105 191.049 l 7.98 191.381 7.887 191.697 7.824
+ 192.002 c 7.762 192.314 7.73 192.615 7.73 192.908 c 7.73 193.697 7.934 
+194.287 8.34 194.674 c 8.746 195.068 9.367 195.268 10.199 195.268 c h
+f
+10.027 201.658 m 13.324 201.658 l 13.324 200.768 l 10.059 200.768 l 9.539
+ 200.768 9.152 200.662 8.902 200.455 c 8.645 200.256 8.512 199.955 8.512
+ 199.549 c 8.512 199.068 8.668 198.689 8.98 198.408 c 9.285 198.127 9.699
+ 197.986 10.23 197.986 c 13.324 197.986 l 13.324 197.08 l 7.855 197.08 l
+ 7.855 197.986 l 8.699 197.986 l 8.379 198.205 8.137 198.459 7.98 198.752
+ c 7.816 199.041 7.73 199.377 7.73 199.752 c 7.73 200.377 7.926 200.85 8.309
+ 201.174 c 8.695 201.494 9.27 201.658 10.027 201.658 c h
+f
+10.527 207.061 m 9.871 207.061 9.367 206.924 9.012 206.654 c 8.66 206.381
+ 8.48 206.006 8.48 205.529 c 8.48 205.037 8.66 204.658 9.012 204.389 c 9.367
+ 204.127 9.871 203.998 10.527 203.998 c 11.176 203.998 11.68 204.127 12.043
+ 204.389 c 12.398 204.658 12.574 205.037 12.574 205.529 c 12.574 206.006
+ 12.398 206.381 12.043 206.654 c 11.68 206.924 11.176 207.061 10.527 207.061
+ c h
+12.652 207.951 m 13.578 207.951 14.266 207.74 14.715 207.326 c 15.172 206.92
+ 15.402 206.287 15.402 205.436 c 15.402 205.123 15.375 204.826 15.324 204.545
+ c 15.281 204.264 15.215 203.99 15.121 203.732 c 14.246 203.732 l 14.391
+ 203.99 14.496 204.248 14.559 204.498 c 14.629 204.756 14.668 205.021 14.668
+ 205.295 c 14.668 205.877 14.512 206.314 14.199 206.607 c 13.895 206.908
+ 13.434 207.061 12.809 207.061 c 12.355 207.061 l 12.68 206.873 12.926 206.631
+ 13.09 206.342 c 13.246 206.049 13.324 205.701 13.324 205.295 c 13.324 204.627
+ 13.07 204.084 12.559 203.67 c 12.051 203.264 11.371 203.061 10.527 203.061
+ c 9.684 203.061 9.008 203.264 8.496 203.67 c 7.988 204.084 7.73 204.627
+ 7.73 205.295 c 7.73 205.701 7.809 206.049 7.965 206.342 c 8.121 206.631
+ 8.363 206.873 8.684 207.061 c 7.855 207.061 l 7.855 207.951 l h
+f
+10.371 214.486 m 10.809 214.486 l 10.809 210.346 l 11.426 210.385 11.895
+ 210.572 12.215 210.908 c 12.539 211.24 12.699 211.705 12.699 212.299 c 
+12.699 212.643 12.66 212.975 12.574 213.299 c 12.492 213.631 12.367 213.955
+ 12.199 214.268 c 13.043 214.268 l 13.18 213.943 13.285 213.611 13.355 213.268
+ c 13.426 212.932 13.465 212.596 13.465 212.252 c 13.465 211.377 13.215 
+210.682 12.715 210.174 c 12.207 209.662 11.512 209.408 10.637 209.408 c 
+9.742 209.408 9.035 209.646 8.512 210.127 c 7.992 210.615 7.73 211.271 7.73
+ 212.096 c 7.73 212.834 7.965 213.416 8.434 213.846 c 8.902 214.271 9.551
+ 214.486 10.371 214.486 c h
+10.105 213.58 m 9.617 213.58 9.227 213.443 8.934 213.174 c 8.633 212.9 
+8.48 212.549 8.48 212.111 c 8.48 211.6 8.629 211.193 8.918 210.893 c 9.199
+ 210.6 9.598 210.428 10.105 210.377 c h
+f
+5.73 219.053 m 5.73 221.131 l 6.418 221.131 l 6.418 219.959 l 13.949 219.959
+ l 13.949 221.131 l 14.637 221.131 l 14.637 219.053 l h
+f
+6.684 225.264 m 6.684 224.764 6.934 224.381 7.434 224.123 c 7.934 223.873
+ 8.684 223.748 9.684 223.748 c 10.684 223.748 11.434 223.873 11.934 224.123
+ c 12.434 224.381 12.684 224.764 12.684 225.264 c 12.684 225.783 12.434 
+226.17 11.934 226.42 c 11.434 226.678 10.684 226.811 9.684 226.811 c 8.684
+ 226.811 7.934 226.678 7.434 226.42 c 6.934 226.17 6.684 225.783 6.684 225.264
+ c h
+5.902 225.264 m 5.902 226.084 6.227 226.709 6.871 227.139 c 7.52 227.576
+ 8.457 227.795 9.684 227.795 c 10.914 227.795 11.852 227.576 12.496 227.139
+ c 13.145 226.709 13.465 226.084 13.465 225.264 c 13.465 224.451 13.145 
+223.826 12.496 223.389 c 11.852 222.959 10.914 222.748 9.684 222.748 c 8.457
+ 222.748 7.52 222.959 6.871 223.389 c 6.227 223.826 5.902 224.451 5.902 
+225.264 c h
+f
+12.09 230.549 1.234 -1.031 re f
+12.09 233.729 1.234 -1.031 re f
+13.168 235.908 m 12.277 235.908 l 12.395 236.158 12.48 236.408 12.543 236.658
+ c 12.605 236.916 12.637 237.166 12.637 237.408 c 12.637 238.064 12.418 
+238.564 11.98 238.908 c 11.543 239.252 10.879 239.443 9.98 239.486 c 10.262
+ 239.299 10.48 239.057 10.637 238.768 c 10.785 238.486 10.855 238.166 10.855
+ 237.814 c 10.855 237.084 10.637 236.506 10.199 236.08 c 9.754 235.65 9.148
+ 235.439 8.387 235.439 c 7.637 235.439 7.039 235.658 6.59 236.096 c 6.133
+ 236.541 5.902 237.135 5.902 237.877 c 5.902 238.721 6.227 239.361 6.871
+ 239.799 c 7.52 240.244 8.457 240.471 9.684 240.471 c 10.832 240.471 11.746
+ 240.197 12.434 239.658 c 13.121 239.115 13.465 238.381 13.465 237.455 c
+ 13.465 237.205 13.438 236.955 13.387 236.705 c 13.344 236.455 13.273 236.189
+ 13.168 235.908 c h
+10.074 237.877 m 10.074 238.314 9.926 238.662 9.621 238.924 c 9.32 239.182
+ 8.91 239.314 8.387 239.314 c 7.855 239.314 7.441 239.182 7.137 238.924 
+c 6.836 238.662 6.684 238.314 6.684 237.877 c 6.684 237.428 6.836 237.072
+ 7.137 236.814 c 7.441 236.564 7.855 236.439 8.387 236.439 c 8.91 236.439
+ 9.32 236.564 9.621 236.814 c 9.926 237.072 10.074 237.428 10.074 237.877
+ c h
+f
+6.027 242.002 m 6.027 246.689 l 6.449 246.689 l 13.324 244.033 l 13.324
+ 243.002 l 6.871 245.502 l 6.871 242.002 l h
+f
+5.73 250.584 m 14.637 250.584 l 14.637 248.506 l 13.949 248.506 l 13.949
+ 249.678 l 6.418 249.678 l 6.418 248.506 l 5.73 248.506 l h
+f
+Q q
+36.336 351.053 434.281 -293.688 re W n
+q
+36 352.002 435 -295 re W n
+[ 1 0 0 1 0 -0.998047 ] concat
+  q
+0.498039 0 0 rg
+1 w
+1 J
+1 j
+[] 0.0 d
+10 M q 1 0 0 -1 0 361 cm
+-2554.875 412.77 m -2398.535 412.77 l -2389.852 376.059 l -2216.137 376.059
+ l -2207.453 339.348 l -2051.109 339.348 l -2042.426 302.637 l -1912.141
+ 302.637 l -1903.453 265.926 l -1790.543 265.926 l -1781.855 229.215 l -1677.629
+ 229.215 l -1668.941 192.504 l -1573.402 192.504 l -1564.715 155.793 l -1477.859
+ 155.793 l -1469.172 119.082 l -1399.688 119.082 l -1391.004 82.371 l -1330.203
+ 82.371 l -1321.516 45.66 l -1260.719 45.66 l -1252.031 8.949 l -1199.918
+ 8.949 l -1191.234 -27.762 l -1156.492 -27.762 l -1147.805 -64.473 l -1113.063
+ -64.473 l -1104.375 -101.184 l -1069.633 -101.184 l -1060.949 -137.895 
+l -1026.207 -137.895 l -1017.52 -174.605 l -1000.148 -174.605 l -991.465
+ -211.316 l -965.406 -211.316 l -956.723 -248.027 l -948.035 -284.738 l 
+-921.98 -284.738 l -913.293 -321.449 l -904.609 -358.16 l -878.551 -358.16
+ l -869.863 -394.871 l -861.18 -431.582 l -852.492 -431.582 l -843.809 -468.293
+ l -835.121 -468.293 l -826.438 -541.715 l -817.75 -578.426 l -809.066 -578.426
+ l -800.379 -615.137 l -661.41 -615.137 l -652.723 -578.426 l -644.039 -541.715
+ l -635.352 -541.715 l -626.668 -468.293 l -617.98 -468.293 l -609.297 -431.582
+ l -600.609 -394.871 l -591.926 -394.871 l -583.238 -358.16 l -565.867 -358.16
+ l -557.184 -321.449 l -548.496 -321.449 l -539.813 -284.738 l -522.441 
+-284.738 l -513.754 -248.027 l -505.07 -248.027 l -496.383 -211.316 l -479.012
+ -211.316 l -470.324 -174.605 l -435.582 -174.605 l -426.898 -137.895 l 
+-400.84 -137.895 l -392.156 -101.184 l -357.414 -101.184 l -348.727 -64.473
+ l -313.984 -64.473 l -305.301 -27.762 l -270.559 -27.762 l -261.871 8.949
+ l -218.441 8.949 l -209.758 45.66 l -140.273 45.66 l -131.586 82.371 l 
+-70.789 82.371 l -62.102 119.082 l -1.301 119.082 l 7.383 155.793 l 102.926
+ 155.793 l 111.609 192.504 l 207.152 192.504 l 215.84 229.215 l 320.066 
+229.215 l 328.75 265.926 l 432.98 265.926 l 441.664 302.637 l 580.637 302.637
+ l 589.32 339.348 l 754.348 339.348 l 763.031 376.059 l 928.059 376.059 
+l 936.746 412.77 l 1127.828 412.77 l 1136.516 449.48 l 1362.34 449.48 l 
+1371.027 486.191 l 1605.539 486.191 l 1614.223 522.902 l 1900.852 522.902
+ l 1909.535 559.613 l 2213.531 559.613 l 2222.219 596.324 l 2578.328 596.324
+ l 2587.016 633.035 l 2856.27 633.035 l S Q
+0 0 1 rg
+q 1 0 0 -1 0 361 cm
+-2554.875 633.035 m -2242.195 633.035 l -2233.508 596.324 l -1877.398 596.324
+ l -1868.711 559.613 l -1564.715 559.613 l -1556.031 522.902 l -1269.402
+ 522.902 l -1260.719 486.191 l -1026.207 486.191 l -1017.52 449.48 l -791.695
+ 449.48 l -783.008 412.77 l -591.926 412.77 l -583.238 376.059 l -400.84
+ 376.059 l -392.156 339.348 l -244.5 339.348 l -235.813 302.637 l -96.844
+ 302.637 l -88.16 265.926 l 16.07 265.926 l 24.754 229.215 l 128.98 229.215
+ l 137.668 192.504 l 233.211 192.504 l 241.895 155.793 l 337.438 155.793
+ l 354.809 119.082 l 406.922 119.082 l 415.609 82.371 l 476.406 82.371 l
+ 485.094 45.66 l 554.578 45.66 l 563.262 8.949 l 606.691 8.949 l 615.379
+ -27.762 l 650.121 -27.762 l 658.805 -64.473 l 693.547 -64.473 l 702.234
+ -101.184 l 736.977 -101.184 l 745.66 -137.895 l 780.402 -137.895 l 789.09
+ -174.605 l 815.148 -174.605 l 823.832 -211.316 l 841.203 -211.316 l 849.891
+ -248.027 l 858.574 -248.027 l 867.262 -284.738 l 884.633 -284.738 l 893.316
+ -321.449 l 902.004 -321.449 l 910.688 -358.16 l 928.059 -358.16 l 936.746
+ -394.871 l 945.43 -394.871 l 954.117 -431.582 l 962.801 -468.293 l 971.488
+ -468.293 l 980.172 -541.715 l 988.859 -541.715 l 997.543 -578.426 l 1006.23
+ -615.137 l 1145.199 -615.137 l 1153.887 -578.426 l 1162.57 -578.426 l 1171.258
+ -541.715 l 1179.941 -468.293 l 1188.629 -468.293 l 1197.313 -431.582 l 
+1206 -431.582 l 1214.688 -394.871 l 1223.371 -358.16 l 1249.43 -358.16 l
+ 1258.113 -321.449 l 1266.801 -284.738 l 1292.855 -284.738 l 1301.543 -248.027
+ l 1310.227 -211.316 l 1336.285 -211.316 l 1344.969 -174.605 l 1379.711 
+-174.605 l 1388.398 -137.895 l 1405.77 -137.895 l 1414.453 -101.184 l 1449.199
+ -101.184 l 1457.883 -64.473 l 1492.625 -64.473 l 1501.313 -27.762 l 1536.055
+ -27.762 l 1544.738 8.949 l 1596.852 8.949 l 1605.539 45.66 l 1666.34 45.66
+ l 1675.023 82.371 l 1735.824 82.371 l 1744.508 119.082 l 1813.992 119.082
+ l 1822.68 155.793 l 1909.535 155.793 l 1918.223 192.504 l 2013.762 192.504
+ l 2022.449 229.215 l 2126.676 229.215 l 2135.363 265.926 l 2248.273 265.926
+ l 2256.961 302.637 l 2387.246 302.637 l 2395.93 339.348 l 2560.957 339.348
+ l 2569.645 376.059 l 2734.672 376.059 l 2743.355 412.77 l 2856.27 412.77
+ l S Q
+  Q
+Q
+Q q
+1 g
+127.172 21.689 225.656 -17.398 re f
+0 g
+0.5 w
+1 J
+1 j
+[] 0.0 d
+10 M q 1 0 0 -1 0 360.001953 cm
+127.172 338.312 225.656 17.398 re S Q
+Q q
+130.965 14.002 32.035 -2 re W n
+q
+130 14.002 33 -2 re W n
+[ 1 0 0 1 0 -0.998047 ] concat
+  q
+0.498039 0 0 rg
+1 w
+1 J
+1 j
+[] 0.0 d
+10 M q 1 0 0 -1 0 361 cm
+131.465 347.012 m 162.465 347.012 l S Q
+  Q
+Q
+Q q
+0 g
+171.246 16.111 m 171.246 15.346 l 170.941 15.49 170.656 15.596 170.387 
+15.658 c 170.125 15.729 169.875 15.768 169.637 15.768 c 169.199 15.768 168.863
+ 15.682 168.637 15.518 c 168.406 15.35 168.293 15.115 168.293 14.814 c 168.293
+ 14.553 168.363 14.354 168.512 14.221 c 168.668 14.096 168.965 13.99 169.402
+ 13.908 c 169.871 13.814 l 170.465 13.697 170.902 13.502 171.184 13.221 
+c 171.465 12.939 171.605 12.557 171.605 12.08 c 171.605 11.518 171.41 11.088
+ 171.027 10.799 c 170.652 10.506 170.098 10.361 169.371 10.361 c 169.09 
+10.361 168.793 10.393 168.48 10.455 c 168.168 10.518 167.844 10.611 167.512
+ 10.736 c 167.512 11.549 l 167.832 11.361 168.145 11.221 168.449 11.127 
+c 168.762 11.041 169.066 11.002 169.371 11.002 c 169.816 11.002 170.16 11.088
+ 170.402 11.268 c 170.652 11.443 170.777 11.693 170.777 12.018 c 170.777
+ 12.307 170.688 12.533 170.512 12.689 c 170.332 12.854 170.047 12.979 169.652
+ 13.064 c 169.168 13.158 l 168.574 13.271 168.145 13.455 167.887 13.705 
+c 167.625 13.955 167.496 14.303 167.496 14.752 c 167.496 15.26 167.676 15.662
+ 168.043 15.955 c 168.406 16.256 168.906 16.408 169.543 16.408 c 169.812
+ 16.408 170.09 16.381 170.371 16.33 c 170.66 16.287 170.953 16.213 171.246
+ 16.111 c h
+f
+174.496 14.346 m 174.109 14.346 173.801 14.193 173.574 13.893 c 173.355
+ 13.588 173.246 13.178 173.246 12.658 c 173.246 12.135 173.355 11.725 173.574
+ 11.424 c 173.801 11.119 174.109 10.971 174.496 10.971 c 174.879 10.971 
+175.184 11.119 175.402 11.424 c 175.629 11.725 175.746 12.135 175.746 12.658
+ c 175.746 13.178 175.629 13.588 175.402 13.893 c 175.184 14.193 174.879
+ 14.346 174.496 14.346 c h
+174.496 14.955 m 175.121 14.955 175.609 14.752 175.965 14.346 c 176.316
+ 13.939 176.496 13.377 176.496 12.658 c 176.496 11.939 176.316 11.377 175.965
+ 10.971 c 175.609 10.564 175.121 10.361 174.496 10.361 c 173.871 10.361 
+173.375 10.564 173.012 10.971 c 172.656 11.377 172.48 11.939 172.48 12.658
+ c 172.48 13.377 172.656 13.939 173.012 14.346 c 173.375 14.752 173.871 
+14.955 174.496 14.955 c h
+f
+177.625 12.205 m 177.625 14.846 l 178.344 14.846 l 178.344 12.221 l 178.344
+ 11.814 178.422 11.506 178.578 11.299 c 178.742 11.088 178.988 10.986 179.312
+ 10.986 c 179.695 10.986 180 11.104 180.219 11.346 c 180.445 11.596 180.562
+ 11.932 180.562 12.361 c 180.562 14.846 l 181.281 14.846 l 181.281 10.471
+ l 180.562 10.471 l 180.562 11.143 l 180.383 10.881 180.18 10.682 179.953
+ 10.549 c 179.723 10.424 179.457 10.361 179.156 10.361 c 178.656 10.361 
+178.273 10.518 178.016 10.83 c 177.754 11.143 177.625 11.6 177.625 12.205
+ c h
+f
+185.305 14.174 m 185.219 14.225 185.133 14.26 185.039 14.283 c 184.945 
+14.303 184.84 14.314 184.727 14.314 c 184.32 14.314 184.008 14.178 183.789
+ 13.908 c 183.57 13.646 183.461 13.271 183.461 12.783 c 183.461 10.471 l
+ 182.742 10.471 l 182.742 14.846 l 183.461 14.846 l 183.461 14.174 l 183.605
+ 14.432 183.797 14.627 184.039 14.752 c 184.289 14.885 184.586 14.955 184.93
+ 14.955 c 184.98 14.955 185.031 14.947 185.086 14.939 c 185.148 14.939 185.215
+ 14.928 185.289 14.908 c h
+f
+189.027 14.674 m 189.027 14.002 l 188.816 14.115 188.609 14.197 188.402
+ 14.252 c 188.203 14.314 188 14.346 187.793 14.346 c 187.324 14.346 186.957
+ 14.193 186.699 13.893 c 186.449 13.6 186.324 13.189 186.324 12.658 c 186.324
+ 12.127 186.449 11.709 186.699 11.408 c 186.957 11.115 187.324 10.971 187.793
+ 10.971 c 188 10.971 188.203 10.994 188.402 11.049 c 188.609 11.111 188.816
+ 11.193 189.027 11.299 c 189.027 10.643 l 188.828 10.549 188.621 10.479 
+188.402 10.439 c 188.184 10.389 187.953 10.361 187.715 10.361 c 187.059 
+10.361 186.531 10.564 186.137 10.971 c 185.75 11.385 185.559 11.947 185.559
+ 12.658 c 185.559 13.365 185.754 13.924 186.152 14.33 c 186.547 14.744 187.082
+ 14.955 187.762 14.955 c 187.98 14.955 188.191 14.928 188.402 14.877 c 188.621
+ 14.834 188.828 14.768 189.027 14.674 c h
+f
+194.02 12.846 m 194.02 12.486 l 190.707 12.486 l 190.738 11.994 190.887
+ 11.619 191.16 11.361 c 191.43 11.1 191.801 10.971 192.27 10.971 c 192.551
+ 10.971 192.82 11.002 193.082 11.064 c 193.34 11.135 193.598 11.24 193.848
+ 11.377 c 193.848 10.689 l 193.586 10.584 193.32 10.506 193.051 10.455 c
+ 192.777 10.393 192.508 10.361 192.238 10.361 c 191.539 10.361 190.98 10.564
+ 190.566 10.971 c 190.16 11.377 189.957 11.924 189.957 12.611 c 189.957 
+13.33 190.148 13.896 190.535 14.314 c 190.93 14.74 191.457 14.955 192.113
+ 14.955 c 192.695 14.955 193.16 14.76 193.504 14.377 c 193.848 14.002 194.02
+ 13.49 194.02 12.846 c h
+193.301 13.049 m 193.289 13.443 193.176 13.756 192.957 13.986 c 192.746
+ 14.225 192.465 14.346 192.113 14.346 c 191.715 14.346 191.395 14.229 191.145
+ 14.002 c 190.902 13.771 190.77 13.455 190.738 13.049 c h
+f
+202.141 15.861 m 202.141 15.018 l 201.867 15.268 201.582 15.455 201.281
+ 15.58 c 200.988 15.705 200.672 15.768 200.328 15.768 c 199.66 15.768 199.148
+ 15.557 198.797 15.143 c 198.441 14.736 198.266 14.146 198.266 13.377 c 
+198.266 12.615 198.441 12.025 198.797 11.611 c 199.148 11.205 199.66 11.002
+ 200.328 11.002 c 200.672 11.002 200.988 11.064 201.281 11.189 c 201.582
+ 11.314 201.867 11.502 202.141 11.752 c 202.141 10.924 l 201.859 10.736 
+201.562 10.596 201.25 10.502 c 200.945 10.408 200.625 10.361 200.281 10.361
+ c 199.395 10.361 198.695 10.631 198.188 11.174 c 197.688 11.713 197.438
+ 12.447 197.438 13.377 c 197.438 14.314 197.688 15.053 198.188 15.596 c 
+198.695 16.135 199.395 16.408 200.281 16.408 c 200.633 16.408 200.961 16.361
+ 201.266 16.268 c 201.578 16.174 201.867 16.037 202.141 15.861 c h
+f
+207.07 12.846 m 207.07 12.486 l 203.758 12.486 l 203.789 11.994 203.938
+ 11.619 204.211 11.361 c 204.48 11.1 204.852 10.971 205.32 10.971 c 205.602
+ 10.971 205.871 11.002 206.133 11.064 c 206.391 11.135 206.648 11.24 206.898
+ 11.377 c 206.898 10.689 l 206.637 10.584 206.371 10.506 206.102 10.455 
+c 205.828 10.393 205.559 10.361 205.289 10.361 c 204.59 10.361 204.031 10.564
+ 203.617 10.971 c 203.211 11.377 203.008 11.924 203.008 12.611 c 203.008
+ 13.33 203.199 13.896 203.586 14.314 c 203.98 14.74 204.508 14.955 205.164
+ 14.955 c 205.746 14.955 206.211 14.76 206.555 14.377 c 206.898 14.002 207.07
+ 13.49 207.07 12.846 c h
+206.352 13.049 m 206.34 13.443 206.227 13.756 206.008 13.986 c 205.797 
+14.225 205.516 14.346 205.164 14.346 c 204.766 14.346 204.445 14.229 204.195
+ 14.002 c 203.953 13.771 203.82 13.455 203.789 13.049 c h
+f
+208.242 16.549 0.719 -6.078 re f
+210.465 16.549 0.719 -6.078 re f
+218.027 13.205 m 218.203 13.15 218.371 13.033 218.527 12.846 c 218.684 
+12.658 218.844 12.396 219.012 12.064 c 219.809 10.471 l 218.965 10.471 l
+ 218.215 11.971 l 218.027 12.354 217.84 12.611 217.652 12.736 c 217.473 
+12.869 217.23 12.939 216.918 12.939 c 216.059 12.939 l 216.059 10.471 l 
+215.262 10.471 l 215.262 16.299 l 217.043 16.299 l 217.707 16.299 218.203
+ 16.158 218.527 15.877 c 218.859 15.604 219.027 15.189 219.027 14.627 c 
+219.027 14.26 218.941 13.955 218.777 13.705 c 218.609 13.463 218.359 13.299
+ 218.027 13.205 c h
+216.059 15.658 m 216.059 13.58 l 217.043 13.58 l 217.426 13.58 217.715 
+13.666 217.902 13.846 c 218.098 14.021 218.199 14.283 218.199 14.627 c 218.199
+ 14.971 218.098 15.225 217.902 15.393 c 217.715 15.568 217.426 15.658 217.043
+ 15.658 c h
+f
+224.32 16.111 m 224.32 15.346 l 224.016 15.49 223.73 15.596 223.461 15.658
+ c 223.199 15.729 222.949 15.768 222.711 15.768 c 222.273 15.768 221.938
+ 15.682 221.711 15.518 c 221.48 15.35 221.367 15.115 221.367 14.814 c 221.367
+ 14.553 221.438 14.354 221.586 14.221 c 221.742 14.096 222.039 13.99 222.477
+ 13.908 c 222.945 13.814 l 223.539 13.697 223.977 13.502 224.258 13.221 
+c 224.539 12.939 224.68 12.557 224.68 12.08 c 224.68 11.518 224.484 11.088
+ 224.102 10.799 c 223.727 10.506 223.172 10.361 222.445 10.361 c 222.164
+ 10.361 221.867 10.393 221.555 10.455 c 221.242 10.518 220.918 10.611 220.586
+ 10.736 c 220.586 11.549 l 220.906 11.361 221.219 11.221 221.523 11.127 
+c 221.836 11.041 222.141 11.002 222.445 11.002 c 222.891 11.002 223.234 
+11.088 223.477 11.268 c 223.727 11.443 223.852 11.693 223.852 12.018 c 223.852
+ 12.307 223.762 12.533 223.586 12.689 c 223.406 12.854 223.121 12.979 222.727
+ 13.064 c 222.242 13.158 l 221.648 13.271 221.219 13.455 220.961 13.705 
+c 220.699 13.955 220.57 14.303 220.57 14.752 c 220.57 15.26 220.75 15.662
+ 221.117 15.955 c 221.48 16.256 221.98 16.408 222.617 16.408 c 222.887 16.408
+ 223.164 16.381 223.445 16.33 c 223.734 16.287 224.027 16.213 224.32 16.111
+ c h
+f
+228.664 13.205 m 228.84 13.15 229.008 13.033 229.164 12.846 c 229.32 12.658
+ 229.48 12.396 229.648 12.064 c 230.445 10.471 l 229.602 10.471 l 228.852
+ 11.971 l 228.664 12.354 228.477 12.611 228.289 12.736 c 228.109 12.869 
+227.867 12.939 227.555 12.939 c 226.695 12.939 l 226.695 10.471 l 225.898
+ 10.471 l 225.898 16.299 l 227.68 16.299 l 228.344 16.299 228.84 16.158 
+229.164 15.877 c 229.496 15.604 229.664 15.189 229.664 14.627 c 229.664 
+14.26 229.578 13.955 229.414 13.705 c 229.246 13.463 228.996 13.299 228.664
+ 13.205 c h
+226.695 15.658 m 226.695 13.58 l 227.68 13.58 l 228.062 13.58 228.352 13.666
+ 228.539 13.846 c 228.734 14.021 228.836 14.283 228.836 14.627 c 228.836
+ 14.971 228.734 15.225 228.539 15.393 c 228.352 15.568 228.062 15.658 227.68
+ 15.658 c h
+f
+232.254 15.658 m 232.254 13.471 l 233.238 13.471 l 233.613 13.471 233.898
+ 13.564 234.098 13.752 c 234.293 13.939 234.395 14.209 234.395 14.564 c 
+234.395 14.908 234.293 15.174 234.098 15.361 c 233.898 15.557 233.613 15.658
+ 233.238 15.658 c h
+231.457 16.299 m 233.238 16.299 l 233.895 16.299 234.387 16.15 234.723 
+15.861 c 235.055 15.568 235.223 15.135 235.223 14.564 c 235.223 13.99 235.055
+ 13.553 234.723 13.252 c 234.387 12.959 233.895 12.814 233.238 12.814 c 
+232.254 12.814 l 232.254 10.471 l 231.457 10.471 l h
+f
+0 0 1 rg
+1 w
+1 J
+1 j
+[] 0.0 d
+10 M q 1 0 0 -1 0 360.001953 cm
+244.5 347.012 m 275.5 347.012 l S Q
+Q q
+279 17.002 67 -8.918 re W n
+q
+279 17.002 67 -9 re W n
+[ 1 0 0 1 0 -0.998047 ] concat
+  q
+0 g
+279.969 17.297 m 284.906 17.297 l 284.906 16.641 l 282.844 16.641 l 282.844
+ 11.469 l 282.047 11.469 l 282.047 16.641 l 279.969 16.641 l h
+f
+286.312 13.672 m 285.727 13.672 285.32 13.602 285.094 13.469 c 284.875 
+13.332 284.766 13.109 284.766 12.797 c 284.766 12.535 284.848 12.328 285.016
+ 12.172 c 285.18 12.023 285.41 11.953 285.703 11.953 c 286.098 11.953 286.414
+ 12.094 286.656 12.375 c 286.895 12.664 287.016 13.047 287.016 13.516 c 
+287.016 13.672 l h
+287.734 13.969 m 287.734 11.469 l 287.016 11.469 l 287.016 12.141 l 286.859
+ 11.867 286.656 11.672 286.406 11.547 c 286.164 11.422 285.867 11.359 285.516
+ 11.359 c 285.066 11.359 284.707 11.484 284.438 11.734 c 284.176 11.984 
+284.047 12.32 284.047 12.75 c 284.047 13.238 284.207 13.609 284.531 13.859
+ c 284.863 14.109 285.359 14.234 286.016 14.234 c 287.016 14.234 l 287.016
+ 14.297 l 287.016 14.629 286.906 14.883 286.688 15.062 c 286.477 15.25 286.176
+ 15.344 285.781 15.344 c 285.531 15.344 285.285 15.312 285.047 15.25 c 284.805
+ 15.188 284.578 15.098 284.359 14.984 c 284.359 15.641 l 284.629 15.742 
+284.883 15.82 285.125 15.875 c 285.375 15.926 285.617 15.953 285.859 15.953
+ c 286.484 15.953 286.953 15.785 287.266 15.453 c 287.578 15.129 287.734
+ 14.633 287.734 13.969 c h
+f
+291.762 15.172 m 291.676 15.223 291.59 15.258 291.496 15.281 c 291.402 
+15.301 291.297 15.312 291.184 15.312 c 290.777 15.312 290.465 15.176 290.246
+ 14.906 c 290.027 14.645 289.918 14.27 289.918 13.781 c 289.918 11.469 l
+ 289.199 11.469 l 289.199 15.844 l 289.918 15.844 l 289.918 15.172 l 290.062
+ 15.43 290.254 15.625 290.496 15.75 c 290.746 15.883 291.043 15.953 291.387
+ 15.953 c 291.438 15.953 291.488 15.945 291.543 15.938 c 291.605 15.938 
+291.672 15.926 291.746 15.906 c h
+f
+295.254 13.703 m 295.254 14.223 295.145 14.625 294.926 14.906 c 294.707
+ 15.195 294.402 15.344 294.02 15.344 c 293.633 15.344 293.332 15.195 293.113
+ 14.906 c 292.902 14.625 292.801 14.223 292.801 13.703 c 292.801 13.191 
+292.902 12.789 293.113 12.5 c 293.332 12.219 293.633 12.078 294.02 12.078
+ c 294.402 12.078 294.707 12.219 294.926 12.5 c 295.145 12.789 295.254 13.191
+ 295.254 13.703 c h
+295.973 12.016 m 295.973 11.266 295.805 10.711 295.473 10.344 c 295.137
+ 9.98 294.633 9.797 293.957 9.797 c 293.695 9.797 293.449 9.82 293.223 9.859
+ c 293.004 9.902 292.789 9.961 292.582 10.031 c 292.582 10.734 l 292.789
+ 10.621 292.996 10.539 293.207 10.484 c 293.414 10.422 293.621 10.391 293.832
+ 10.391 c 294.309 10.391 294.664 10.516 294.895 10.766 c 295.133 11.016 
+295.254 11.391 295.254 11.891 c 295.254 12.234 l 295.098 11.984 294.902 
+11.789 294.676 11.656 c 294.445 11.531 294.168 11.469 293.848 11.469 c 293.305
+ 11.469 292.867 11.672 292.535 12.078 c 292.211 12.492 292.051 13.035 292.051
+ 13.703 c 292.051 14.379 292.211 14.922 292.535 15.328 c 292.867 15.742 
+293.305 15.953 293.848 15.953 c 294.168 15.953 294.445 15.883 294.676 15.75
+ c 294.902 15.625 295.098 15.438 295.254 15.188 c 295.254 15.844 l 295.973
+ 15.844 l h
+f
+301.191 13.844 m 301.191 13.484 l 297.879 13.484 l 297.91 12.992 298.059
+ 12.617 298.332 12.359 c 298.602 12.098 298.973 11.969 299.441 11.969 c 
+299.723 11.969 299.992 12 300.254 12.062 c 300.512 12.133 300.77 12.238 
+301.02 12.375 c 301.02 11.688 l 300.758 11.582 300.492 11.504 300.223 11.453
+ c 299.949 11.391 299.68 11.359 299.41 11.359 c 298.711 11.359 298.152 11.562
+ 297.738 11.969 c 297.332 12.375 297.129 12.922 297.129 13.609 c 297.129
+ 14.328 297.32 14.895 297.707 15.312 c 298.102 15.738 298.629 15.953 299.285
+ 15.953 c 299.867 15.953 300.332 15.758 300.676 15.375 c 301.02 15 301.191
+ 14.488 301.191 13.844 c h
+300.473 14.047 m 300.461 14.441 300.348 14.754 300.129 14.984 c 299.918
+ 15.223 299.637 15.344 299.285 15.344 c 298.887 15.344 298.566 15.227 298.316
+ 15 c 298.074 14.77 297.941 14.453 297.91 14.047 c h
+f
+303.082 17.094 m 303.082 15.844 l 304.566 15.844 l 304.566 15.281 l 303.082
+ 15.281 l 303.082 12.906 l 303.082 12.551 303.129 12.32 303.223 12.219 c
+ 303.324 12.125 303.523 12.078 303.816 12.078 c 304.566 12.078 l 304.566
+ 11.469 l 303.816 11.469 l 303.262 11.469 302.883 11.57 302.676 11.781 c
+ 302.465 11.988 302.363 12.363 302.363 12.906 c 302.363 15.281 l 301.832
+ 15.281 l 301.832 15.844 l 302.363 15.844 l 302.363 17.094 l h
+f
+312.449 16.859 m 312.449 16.016 l 312.176 16.266 311.891 16.453 311.59 
+16.578 c 311.297 16.703 310.98 16.766 310.637 16.766 c 309.969 16.766 309.457
+ 16.555 309.105 16.141 c 308.75 15.734 308.574 15.145 308.574 14.375 c 308.574
+ 13.613 308.75 13.023 309.105 12.609 c 309.457 12.203 309.969 12 310.637
+ 12 c 310.98 12 311.297 12.062 311.59 12.188 c 311.891 12.312 312.176 12.5
+ 312.449 12.75 c 312.449 11.922 l 312.168 11.734 311.871 11.594 311.559 
+11.5 c 311.254 11.406 310.934 11.359 310.59 11.359 c 309.703 11.359 309.004
+ 11.629 308.496 12.172 c 307.996 12.711 307.746 13.445 307.746 14.375 c 
+307.746 15.312 307.996 16.051 308.496 16.594 c 309.004 17.133 309.703 17.406
+ 310.59 17.406 c 310.941 17.406 311.27 17.359 311.574 17.266 c 311.887 17.172
+ 312.176 17.035 312.449 16.859 c h
+f
+317.379 13.844 m 317.379 13.484 l 314.066 13.484 l 314.098 12.992 314.246
+ 12.617 314.52 12.359 c 314.789 12.098 315.16 11.969 315.629 11.969 c 315.91
+ 11.969 316.18 12 316.441 12.062 c 316.699 12.133 316.957 12.238 317.207
+ 12.375 c 317.207 11.688 l 316.945 11.582 316.68 11.504 316.41 11.453 c 
+316.137 11.391 315.867 11.359 315.598 11.359 c 314.898 11.359 314.34 11.562
+ 313.926 11.969 c 313.52 12.375 313.316 12.922 313.316 13.609 c 313.316 
+14.328 313.508 14.895 313.895 15.312 c 314.289 15.738 314.816 15.953 315.473
+ 15.953 c 316.055 15.953 316.52 15.758 316.863 15.375 c 317.207 15 317.379
+ 14.488 317.379 13.844 c h
+316.66 14.047 m 316.648 14.441 316.535 14.754 316.316 14.984 c 316.105 
+15.223 315.824 15.344 315.473 15.344 c 315.074 15.344 314.754 15.227 314.504
+ 15 c 314.262 14.77 314.129 14.453 314.098 14.047 c h
+f
+318.551 17.547 0.719 -6.078 re f
+320.773 17.547 0.719 -6.078 re f
+328.336 14.203 m 328.512 14.148 328.68 14.031 328.836 13.844 c 328.992 
+13.656 329.152 13.395 329.32 13.062 c 330.117 11.469 l 329.273 11.469 l 
+328.523 12.969 l 328.336 13.352 328.148 13.609 327.961 13.734 c 327.781 
+13.867 327.539 13.938 327.227 13.938 c 326.367 13.938 l 326.367 11.469 l
+ 325.57 11.469 l 325.57 17.297 l 327.352 17.297 l 328.016 17.297 328.512
+ 17.156 328.836 16.875 c 329.168 16.602 329.336 16.188 329.336 15.625 c 
+329.336 15.258 329.25 14.953 329.086 14.703 c 328.918 14.461 328.668 14.297
+ 328.336 14.203 c h
+326.367 16.656 m 326.367 14.578 l 327.352 14.578 l 327.734 14.578 328.023
+ 14.664 328.211 14.844 c 328.406 15.02 328.508 15.281 328.508 15.625 c 328.508
+ 15.969 328.406 16.223 328.211 16.391 c 328.023 16.566 327.734 16.656 327.352
+ 16.656 c h
+f
+334.629 17.109 m 334.629 16.344 l 334.324 16.488 334.039 16.594 333.77 
+16.656 c 333.508 16.727 333.258 16.766 333.02 16.766 c 332.582 16.766 332.246
+ 16.68 332.02 16.516 c 331.789 16.348 331.676 16.113 331.676 15.812 c 331.676
+ 15.551 331.746 15.352 331.895 15.219 c 332.051 15.094 332.348 14.988 332.785
+ 14.906 c 333.254 14.812 l 333.848 14.695 334.285 14.5 334.566 14.219 c 
+334.848 13.938 334.988 13.555 334.988 13.078 c 334.988 12.516 334.793 12.086
+ 334.41 11.797 c 334.035 11.504 333.48 11.359 332.754 11.359 c 332.473 11.359
+ 332.176 11.391 331.863 11.453 c 331.551 11.516 331.227 11.609 330.895 11.734
+ c 330.895 12.547 l 331.215 12.359 331.527 12.219 331.832 12.125 c 332.145
+ 12.039 332.449 12 332.754 12 c 333.199 12 333.543 12.086 333.785 12.266
+ c 334.035 12.441 334.16 12.691 334.16 13.016 c 334.16 13.305 334.07 13.531
+ 333.895 13.688 c 333.715 13.852 333.43 13.977 333.035 14.062 c 332.551 
+14.156 l 331.957 14.27 331.527 14.453 331.27 14.703 c 331.008 14.953 330.879
+ 15.301 330.879 15.75 c 330.879 16.258 331.059 16.66 331.426 16.953 c 331.789
+ 17.254 332.289 17.406 332.926 17.406 c 333.195 17.406 333.473 17.379 333.754
+ 17.328 c 334.043 17.285 334.336 17.211 334.629 17.109 c h
+f
+338.973 14.203 m 339.148 14.148 339.316 14.031 339.473 13.844 c 339.629
+ 13.656 339.789 13.395 339.957 13.062 c 340.754 11.469 l 339.91 11.469 l
+ 339.16 12.969 l 338.973 13.352 338.785 13.609 338.598 13.734 c 338.418 
+13.867 338.176 13.938 337.863 13.938 c 337.004 13.938 l 337.004 11.469 l
+ 336.207 11.469 l 336.207 17.297 l 337.988 17.297 l 338.652 17.297 339.148
+ 17.156 339.473 16.875 c 339.805 16.602 339.973 16.188 339.973 15.625 c 
+339.973 15.258 339.887 14.953 339.723 14.703 c 339.555 14.461 339.305 14.297
+ 338.973 14.203 c h
+337.004 16.656 m 337.004 14.578 l 337.988 14.578 l 338.371 14.578 338.66
+ 14.664 338.848 14.844 c 339.043 15.02 339.145 15.281 339.145 15.625 c 339.145
+ 15.969 339.043 16.223 338.848 16.391 c 338.66 16.566 338.371 16.656 337.988
+ 16.656 c h
+f
+342.562 16.656 m 342.562 14.469 l 343.547 14.469 l 343.922 14.469 344.207
+ 14.562 344.406 14.75 c 344.602 14.938 344.703 15.207 344.703 15.562 c 344.703
+ 15.906 344.602 16.172 344.406 16.359 c 344.207 16.555 343.922 16.656 343.547
+ 16.656 c h
+341.766 17.297 m 343.547 17.297 l 344.203 17.297 344.695 17.148 345.031
+ 16.859 c 345.363 16.566 345.531 16.133 345.531 15.562 c 345.531 14.988 
+345.363 14.551 345.031 14.25 c 344.695 13.957 344.203 13.812 343.547 13.812
+ c 342.562 13.812 l 342.562 11.469 l 341.766 11.469 l h
+f
+  Q
+Q
+Q q
+0.501961 g
+1.6 w
+0 J
+0 j
+[ 3.2 1.6] 0 d
+4 M q 1 0 0 -1 0 360.001953 cm
+328.664 302.305 m 328.664 82.254 l S Q
+[ 3.2 1.6] 0 d
+q 1 0 0 -1 0 360.001953 cm
+347.898 302.305 m 347.898 26.25 l S Q
+0 g
+BT
+8 0 0 8 306.585565 328.614361 Tm
+/f-0-0 1 Tf
+[(event A3)]TJ
+-5.111328 -1.25 Td
+[(and h)-3(andover s)-3(tart)]TJ
+11.11322 -3.050597 Td
+[(time-to)-20(-trigger)]TJ
+-30.005711 -7.313533 Td
+[(neighbour)-3( cell becomes)]TJ
+0.269531 -1.25 Td
+[(better t)-3(han )-3(serving c)-3(ell)]TJ
+20.977718 -9.785889 Td
+[(hyster)19(esis)]TJ
+ET
+[] 0.0 d
+q 1 0 0 -1 0 360.001953 cm
+328.664 63.586 m 347.898 63.586 l S Q
+0.8 w
+q 1 0 0 -1 0 360.001953 cm
+328.664 67.203 m 328.664 59.969 l S Q
+339.527 300.287 m 350.016 296.432 l 339.527 292.576 l 341.203 294.854 341.191
+ 297.967 339.527 300.287 c h
+f*
+0.501961 g
+1.6 w
+[ 3.2 1.6] 0 d
+q 1 0 0 -1 0 360.001953 cm
+215.527 302.305 m 215.527 119.023 l S Q
+0 g
+BT
+8 0 0 8 224.653041 272.470881 Tm
+/f-0-0 1 Tf
+[(hyster)19(esis condition )-3(met)]TJ
+ET
+[] 0.0 d
+q 1 0 0 -1 0 360.001953 cm
+328.664 155.227 m 328.664 265.535 l S Q
+324.789 196.404 m 328.648 206.896 l 332.504 196.404 l 330.227 198.08 327.113
+ 198.072 324.789 196.404 c h
+f*
+332.535 102.838 m 328.68 92.35 l 324.82 102.838 l 327.098 101.162 330.215
+ 101.17 332.535 102.838 c h
+f*
+Q q
+412 281.002 7 -7 re W n
+q
+412 281.002 7 -7 re W n
+% Fallback Image: x=412 y=79 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 412 273.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gau`R=\)Oi'K(ZqdPRFe_9)tfqQRh5.ap6GUH[*10o$+1dKW.6E2X216IaM*kX2F*og?]MU)
+ =B)k"p^dXhYoIZGF]:e_2G?4tiYE8'k]E]R0BUDkFGh?KVCi@1<^@Y7H-^TW8GbION%)I+[
+ 1($2Ud]^X:nuGOP&!3NB*DGkMPahkI4^^OGF(r:;:"IDX0o\9AHBD^oc$/mc3+LCa1Z>u0O
+ b?Vt0kqtG*t)R?]3P;<gT"Ti"3LQ2j-O\*O@V^O"1q=BE!;'J"<2f>;")D*Oe,(KTNLC^68
+ j2V`OX@.:m1,FV.Ei%[ipeb-f9Z6ATnFT[h`t"V"K<d6h2!BHJ0HbD1.bMHoDfGY9U8+u)$
+ _3cQ+F$9Wo(/]=9OfieE9$_oV[)+nM5&Z!#7loYJV+3dk(]^*Q#L`Zrr#A\P<La]akY>#4T
+ R=9TX@e\9$nCjj6TpB@aus\fdYn@"Fkp>a%IM0[EVaXq!f1#]r=RKEVhXH?cIp9nFabp7Bj
+ '9$#=<935EQ>a,]-,-/?$Ui/N`[m$n(Ob88[ZatY>K(*!s=p$6%%$SsRU)e7#)(`5q)</XB
+ /r:63hm?&XG^0Oo#CR2b2*ck"cG(`3D0r\TE\T+COCrQn>WZ;b@m3jPT63;>t_M/NJ4*u<J
+ S#/!C2DR-]jh,mc$ra;M*a#[6RUot2'9c9tN/Zg3oB&VWaVDc.(Pf%mA_q3;V#/Y%6aLGZc
+ -8RDH9)NU&CGMCHUeW6Bd8g_91qQW\.G]B9:&RT6mUP_!RSW;L=?XHIOuK#jR1eP"V[1*:S
+ /+a6ZpZ7BBDlZ=LLnXSM_3!b4bSuAT1ViI*R>C@J5_%,nEs.@80JH"S.WKOKY%e/pM[#kYY
+ l%M;RlaTXIkAQ'EOOqTlm(U1#+/Hd0eiFfH@GC_3#<QnWlqbWZ=nG7I&1if+o_eLa7bEcVg
+ 3.qtJ2NK?8HY4/NDV=qt@jZR7:]OJa0"`SZU:ltH1[oZPM8?.b#[L3l_)2Z%RiU&4CUQUrp
+ O`AqpZVLLpUE^O-Q<-a^\ItAj,;;sT`!_05oB[saULCId_hSg8+C=$lMD]/pG[q9Sr:qN@`
+ pg%:CU%at[Vj'U4ZINhVbSBg:R\+H^2cY9L*SR76d;q$_`XploF7:rG-HDL[Y^eI6P1(\ep
+ ?YJ)O]3t`J\1A<8GZ[E]T)rcYleOkTkPS*Ag,1T0A71,c%<[V+KE=+k&P6J=IaBdZZ&'r"t
+ J9M8O+jQS4[QWaHa%,oS`5qgfh:oP0ZV``s4d#!"/JiquBNrdIsO.*1N3rsY<uU9.s3^K^[
+ =$"hr)~>
+Q
+Q q
+421 281.002 7 -7 re W n
+q
+421 281.002 7 -7 re W n
+% Fallback Image: x=421 y=79 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 421 273.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$D(Lu])"j$;2'K?\=:/R9#d)\/ArT6eWQ>Z/bf@l-ej>=-@q@i=1M3D0e`KX`+_3JEZ"
+ 0jL9oNU7_L+eH7&P+N]0.h#S),69Fm]*PhrfI6I6Z>+cFJMnY*B`Ls,M$T0L(W/3<]cu=B`
+ T414K2MP*mSf5,#G%c_'7N1Bjsh@qZ.3PPFZ89BPJQ$k/f8'9=61[T8*n3jc8eV["Fk=Bs@
+ =q=A73HA23A'G[=7!/6+V4EuCb2VI`g="ThqLZNdTmNFG&f<6^Gbsb>9hRp[k03U.*pZ'XG
+ gq&3<."m=)84o'4f^Pjh/Xa5_;-o:$7/6T:`!HV+iQ0,,;\LK)rdjJ":Ji$Q7:EEgq>%OF&
+ P%oAcliSUc:NL8.ks"3Xl^V&^suFZ[+$JR91a*jI&jgs2fBlg#]=O!FB%2cNN6,X>V'Xfpe
+ ad]_38+kESoGP=o@tF3]^)8K"*e15)oO<Z#?69IR6F*ZEluNeFre66;Hu_.%603hRu:']4u
+ MOOZ7e0f%/K]9*KBX\@Nk,!6N?mIilq[6I*KQJU`uGc@9X8?G=@9(Et#KR1U#Q%tB)=\A6B
+ bB")h/o^p_:2_ou=Ko![`60:h2A7ji[6]i&BX/el!f<AkKYqZP&/kAXQq=AQKr]B_fKCJHK
+ V+\=>8'F.X.Xp7dJFm,ST1[#+YrI"A[^NEF&Xf&SCh,FXOR75[(@o@u,tYDJ7,)h"LC`AMp
+ #8H:V1tt!Ibh8=YdB(O),*b5BF%o"Fj)pj^t;c1H#eAffs?i=e95W."Q9(M3bI*\T`J_9UA
+ r"o#m\18=u)2-<;QFuG\/je:Uu5Ro^P4@N+>mfPus!J;(q'-7>1jtm7cXe8$I1jp?[or=BW
+ cAe\OGRs*VsH*42n&/mOKkiNX=@`U)m/k*21k`XNdja2a#u3D'!bqAdt8"0f79^n:Og:V"K
+ _"/emcY-K3rH#d`H9>-^2r;YJ.$$e9^bre/N/]-=l'<F@V)P5p3)2*\$nmsg>o:2e_?G)(M
+ 1(YIcYV>;Go1_C521R19"G;=Q]6Hj$]dm0^HLXJbG.2B74WPt#84^O].pE)<_P,E['HV1$W
+ f))V#!Fb)ksUtrRXb/J:S)A/<#YEps3c5["33>VZUp\d0@k&.I_C+~>
+Q
+Q q
+429 281.002 7 -7 re W n
+q
+429 281.002 7 -7 re W n
+% Fallback Image: x=429 y=79 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 429 273.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$CFGc_(foB2ef5nC.s(P1j]lQ"-#$ROX!s0q-pg[Y#`5rY7QF.7[#HVcQq>[pb[E;bU&
+ @f/(_bYm3Qud#Y.LgMp\if>hiFnjm]KpCo=XgEh=l=\f)trY3&n_A0"/7Zq6LE4>I)Q1Y?u
+ EDHZXp:T<PPMW@85bWA$>h\N,'8.*6Uf_aCN-iUptXe^:),j2VuR_"9Ha<j9'294ma?q\Ch
+ kTY2@'27S!7K=3]6h4$@Ug!M,;r]Xq,dF3`Z3ooA#:fW4p:<^pQ_fZ5capsVAEA:p3<638#
+ K*QYs&fVe$AENO[D1+RqdW##f$4.#*S)*4_:Dd%CgWT#ibgf]UH%N=W`5][C;hZ/LE:]rcP
+ 02`TSnIAL=!3dJPOIDPlo=s!&#JcO#e7CCE9.G4ZZ5FT`lG?o-kb7hr/Ccg99iDUY?mp+:L
+ oQMJtO6V5Hhr#9@AoZ$?UK%@R<IL1<1o,]C4S_g\uZ/[S"Z3QbPaY9n0t&9YcBN7\ZOUc-8
+ S*1mXHsjbkIHT&+tp$&jjX0KP*M@CaRHPt4Ua?+IN)_?F%Fip9h8%h/tV@0(_%;'7Me@Nt6
+ q&[Pr$kKbH>Q7D*(]ZqL@DD"7CiT^aTLZ:/Efh(>a?t<f@Yu*,)F[a^Kng]:c:5>NrWiM8P
+ /5/UVapKIB0JLl!XKN.EA,.R;#6Z/5*p)LXD9@!M?>b`Xf%9HYR:s+/#gq&hobCO*grKb6c
+ =giSI9P44CMjUm&%V'&q.OLU-XkQ$Xc*c4`!:$mOdV'qE4EO?gc=U$$R`hjVc;Th\B\BO@7
+ .2(("_Gq*^,ZeZ`D6As00D;V/i,pg"RH(2R'WUL9PF`=+Vr-kH:qhE5$K)8P-F7$hs,Mku7
+ *lALoKm_m:a$R[Mhl:69jnS`/W47n4:H?BfU#nr035N16s3gc6T/KWS8Z/W5@OSrU<?0fMk
+ Sa%)L1?=#k4pFVsC$q+3b3%_O1g+=oI&h/J4<`ga[`pm?L/pc)hqd1Kl7$pA2$#Mk:%1VkV
+ .t_^%@S)DiK6:a:$&=^p'5'Y;\p[fZg!qCpJMLp6<$Tr=9>l%B0&#',,4O[O+@\i]>M:O>>
+ .;QB+-(8(lb,%~>
+Q
+Q q
+438 281.002 7 -7 re W n
+q
+438 281.002 7 -7 re W n
+% Fallback Image: x=438 y=79 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 438 273.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%>qFNG(eu4rq3Kt@'sbB,[VTETAQi\Z12Fek@r,>GW0itjRokCQMT4e9=_V:s1.b>,+r
+ <Ei'P\$O<_;lS]OUo$dj@-mFlV;!F3a5uT&9ElhrfE:#P\h7[YC%^I/AYp--X[c=BNA*03D
+ Q#lDfT_hnNZ9$H'dFmRBj-JsS.<gPbTA3CU8^[N@]+V[$"iipgL^F`hs%$A4!+r)lC!(?+X
+ b4F;g?$5=8MW+Z:P`Mfn-B.#lle<$)bIIdZ(*[*`iaiOlf;c-SM`^YoG81ufUR2NB?$;",.
+ _S[*n\:E>Cji%.I%@Pn`L'H`$$J!7^$;R3_@Nrt<j[S!;rqTKWp@TpO(GRb"#7on`B@#SY&
+ I$48iUUOo'M&Voju*qKj2YMo8^$["9]5kr;--<qio8nV"",H"Y-&$>7=%"pX/3f%j7K_JDk
+ 0+X7U#50r>ION;U<ETG^.$T<e5l*r;:O$)XcLL7SqiLA!igPqed!Fg?9rr]("d;o^:9^.0Y
+ nl1"h)V.JE4c[l5pG6r&c`S$U"5:/7gMjK;cMp_Vl`YG8d:)ZB.KZEe!t]Y*1d-qZ0L_qr(
+ rI^4;Z$k9%oG'7hE5sTtajR-<AG7(a[%36HUpcI]NF>f<>]8%n<E8h!1*>2tA@;G"HkE(uV
+ 1I_'8oL\,A-5+IgL.Mh1kD0B`4Y!fS(>-),3]`at[BuU)-OR5d&onJ/I/J`-#6lG:)S9asH
+ RIF=L2Yp:?m#q$Q>B,c&oDK.AmJ[Z(r4d+NqW*5<"uXE7GFmJaZ47=dFX/R.bqReQl$]RH[
+ E</^:oh`3UbXrJ-V4)-ZXj%&_u.Q&gHbdXQo+_GWG#g6/sFH'fWXE$,4,O5\k/G0C-`ubfr
+ )_dScC@_8\rVT;B8N?#6%A]m(]<VAef8?CmC57WIQ!gtfqs-kH%Ai'A>BTR\-[-'u-Xfi]Y
+ mbd"F9'm$-%:^jAOgal)t79CE)rGhbF1m.\=n,"K`Qal5..0Km6N?fc?g8m37<AeI\2f?]k
+ oB-]",R%%fq^k(jA'TI;U8*j=M98G9N)YG`jtfWO;4N$*./p8K[fsK!.4N?Z&F8@D6\24:@
+ pREN6n7BqF#5brT'_%]$]UDN'0(:P(qj*IcTAu<"mt]jF8~>
+Q
+Q q
+447 281.002 7 -7 re W n
+q
+447 281.002 7 -7 re W n
+% Fallback Image: x=447 y=79 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 447 273.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%>qD:M(iK/KfMY8g<rQ8i2Ir6#9_*De^mMDS17M:Bk.jceg121:=B`&QcfB"S0q7a_JV
+ 9cNC*U#TbEu:oYgM!Dmk\n>CW4!i8+'Y1n+YV`p"]"a?dJCo^fJLu$C7"IlPG$J_!J-(54V
+ 2r0gW;Dq%JsU(`L8l=6SpId+='Imq%@R\cp:Spec:-5"/tVK%<uppLA"JF)sAtcck>7><I7
+ edS^boiPC.H<)a/!]6F&H<Cc1)?dRVgW[cf;MmP;E3B=%@7SaPlVK?>i+.([g$P=JAa@HJ9
+ YN#P0['elaB-!C)HpC%$DVmos-r-C8&0?inGOX[M9O[Ot]I\)lT9ne]9TL7RqK;T0_Snrp^
+ H[mE:f`=%!D2%A!Z)XAm@/3BFAsNJQ\UqFS2u@6`tWcE+uU54q.O]5Z73QWhm']$!AeM!pB
+ ClMgPa+5EV$'7_U/rr<XP@fV'3<cTsb`??]2?q$,urETTDW4AF@^e1:r2BH1rOR?t-F!IJ[
+ DfMkD1t]-[l$Bb>C"+Q%9hm+AS&XT1M>i'i+j''84G:WM.pE-6ko%1XGthS%:ff?-$+O<6&
+ +AX%(MLkn;c"tD-74%UhM%3_F%l"PPA,dYe@79#LfZ*rM>R7Fm$j5NLi4ag^I6:g=%Wo.03
+ o1"bSE<@@-3.>-+mb\O",O"B+1%QMtA!i_EclkA.+=mqhRAd*I.nL@[SDV)hQo.'4:k6`UE
+ TRZ>*u=O4_9``TGA8l(TO#0?M;"iV!s4RO.,(Ogd1E6n'lum#'MSP#S+6KHRnL0$G7-3b,h
+ j748EN'^KUhH#nreaSBka[pTl7!!S!q:P;c@]84M8@IoVh,^Y`L*RbiIU3^rHN^A4b6b+!4
+ at+EN&-:e:BL.V:Rg4'V,(B2*GgEY@uK[tgNFBRgM,i$3a4&ee$1J=iGJ6hfX)q3cKt6LB+
+ G,tLTn>b">;0G#9H+qK:r>7]!,achlW%lnhDQS-DCVRTa>X^^F*ilW!(7uNE3#Km\YG5Hc?
+ BhW+ngrN8%Xd)qa@]lmN=_;6%m$!X0/Y)Tj?lG6.3_o2$4k/$(APk224K04T+TA/"m)8MY1
+ ?]1`1a_hfE?hq'%uXMi-Fb(bp]J<Y]qP~>
+Q
+Q q
+456 281.002 7 -7 re W n
+q
+456 281.002 7 -7 re W n
+% Fallback Image: x=456 y=79 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 456 273.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%CFkc[(bS7A;A-n"*1N?jC!8,4QAF5<iJ/N;Znr_"bn.<UQD&Hj,>"bKAl_Ib:IiW;AJ
+ U/GTThfAOsguL?2(_>he-NsIeZk9XrlQq^<_#:p\S4II6A[VU@nIHAnE_[NR+6I0K"Q&h_7
+ -M+$VTUjf^!XnE(1O4@)UJR[Y$SIZ48TI/"iFRPBk_iRp#\]la^j[D0N'%j%CU)ad!`7N0e
+ S49c&\kRh^h`2-,:GYpb<-(::lntg/e"uS>p^-:>cMrJ2VB&_Gt"W&d^o3GXhSCEY2V[$4%
+ 3.2]B;$[\65k8^Bd+3qIT/9uR0fh?l>)FOpi9cLeHPFE:i;@lU]-eg%'d7^nYP>0qpMoU@U
+ 8+u/(S%$2":*uJ8Q8cL6b[qNQ34*)73UjK\*34up$4Sd*$HJEE.FLMJpmN8oI*=(nF.S*#4
+ VW*CcGX&U:@\mj*:N+e7i_59-beiO/4/HbS7S!bD,*@UV:'I9qb.mZig-ZGOP%nWR0M3+kf
+ @S$I@;*0JF&ShCNVd6>.dqdns-m]A;-h"8+#HY$1K?.fnc7PNU43M1rj&iU;ipgVjf[[UK,
+ \BPFFtf%#JJTpUKCo^p(Q"3A_U9oUiG0PSN"Fp3!,aG>d2dtT:`)#0$Ba9W_C@.ig(bZhL]
+ Z`Pgl]Q!'G/mfC>iF.-3Lp(19]YQTPm=L*,'<ua7/1b1F/5@G9,%_i9CtpEL2)g;[S"rY_S
+ p6_rrp#cE\nZ5T)<hMMNei4dX1[nu:!h@A[e=1m[;4lD,\Q;#N\]tF.!iM!5t5[4</m;Y:g
+ G*!MNF!QTHKX+I=9dW19a,DX]_ELcW[eQmW+;H%=ER9+"nMN,[l$n#1[0(<`J#$)&['B1P/
+ :p@:CDfnu^T[.X6[!H'`=!oD\\JGS&Q]'!8W]92)<#GFg9<J)]I@fu!pcp*)XW@TV.3Yd.0
+ BYIqrg>f.Ur,j&N=)@?hi+jZd]0f)_QSs:_d)DY62(DlGn.G1oc2d!T/27n&W+@(s>KEQ#$
+ ]NfPX/I'V%;i$Eu2,qN?:G(juJ<,an1b;>K0/XJGY"8Dg(;ob/<AAl%(,@Y,S1NN$%euJL`
+ ebAMa['@/f\j`,`I;EDEY<)2l:_.2*g[!.6f9u]g+&l<32M"k*KL.jr<1D3]k.~>
+Q
+Q q
+464 281.002 7 -7 re W n
+q
+464 281.002 7 -7 re W n
+% Fallback Image: x=464 y=79 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 464 273.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$=\+cc'GX<K0UF=ocj+X62f4+lLa")Ve1@@GQa/:sQVtlO;KIK3NSI-#n0(.uW5q;ie0
+ n%T$>i^o^a(E=,nLMe4IsXurr5B=$pO=1E1ZJ\kKNnnGJF"UbP<Y>.*TuXf"h?'@0(FjR%D
+ =Y,f[l)@"`N3aYCYXINC_&?t]gahkIGU"\'>AQ5h->=jk@sqYS[fJHl]$naN5?qYDI1NY0R
+ CZVjnL2t#Kh=W,B*(NK1%]"0.K1LlA"48Ih;R[[/OJWpi`pd\%Q(`:'<PVLH_p%G,o*nf3P
+ %94Pr"1>Q#l+t]<`]-oir&H5W&JKeFqc#P!:3sdPjH(q?=Z:&rQBH1DU_S0##RQ';LC2(_,
+ :>u"o(B%;ak'7[!G>0T_urP"nbFut]Ko8OFS3EM\@AKql\gZ;,tlPQYjeWdepoR>@;H@)K-
+ G#H7;43FU?(o)D,Og2?>0\OD/I/foLW#P'*HOM#C[dK_NQ@GX$]o'JqL=<#HY%W_o>0MD&\
+ (YjCEPM:S6Y&4&N718nSeN/3BTOhYciDkPXT[FEm=B<WP^t\6.n0b6tJUE,^>u*EK;jf</A
+ 82/?T<0-!b`i>36&Yn7d]CEp]sdSd4tB7j.!X7?$DDVmo]&q#'p74k(pA&-dP)d4hnX6$X"
+ V,ptqb"kgFU3,Or^OIp.=]0jm8F5"S_KG0PAHd-rI:l"dB9o(D]7j$\9+-oj[kr*DH8Tc'\
+ $sNhB4g/U0l5YQ>?e18/`iCgkrZ(N+`V*s3A3JiS:#']U[)Eab#=JpPg81$US.]IDBM,L0!
+ C``/1j<9o&sn)WWFC\(=I\Q[VUMe*tf2s[>(;k@%WXj"\NDcR<p&8(X^XIA0i0Q@/YEIjL&
+ d"2C02KSCrl@iU/=GmR(_VK:>W,XO_-h.@n#$\D])J`gJWgJp-OEdrBPcP7oimL81LNN%i6
+ $7*a)K_N0L<=rND@D@6cNe\i7QS[hbko+;doYV>kLbKeeT?1nB:T)T+&MB"CnVi"YBT8p]3
+ GN(9?.%NSOPa?t*Es2^Ma=QRmqnI^+6\e&E*Y,CPh#RcLa2M@d3e-sWW[d6J2csfE&ef9ar
+ 0!`##bNS]"-5W,&Q4gkmY5VN?bVa@lIduHNK5/7$"T2p't$VieHqc/90%aa5pLhOHt!%Xk?
+ m?d2.$~>
+Q
+Q q
+351 244.002 7 -7 re W n
+q
+351 244.002 7 -7 re W n
+% Fallback Image: x=351 y=116 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 351 236.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gatm9HVBK/(fe+';N&DLZrIsDAr80<bt?[Cg03SnRhX&s`aTcZl`s^!/f)TOg";CK<6NE6A7
+ gYZP$;-LA_g3uP2e[*omM6okVphZ^ZtQbn%@gDcZt)@lK:t8oqA8gmHnS&;nA_+hnGf!+2<
+ 8!H%,>Dn`FGrIZ6jYE<#o.5Bq]+:[mcm>$LOWLQ9G]?241,O!!E-*Se:fd^O,QmThr%LAH4
+ Ds/mU;QS5;?7U[Gq1Qe!#FA<<<9C_/(Hs4!oCm=8Kk2Ol>*''a8Hp"Q<'htX;DY<6-MMlK:
+ $pm8l'Vohq36n'^Gr\'<ee.`F>?ndpj2^-G%2ThWrV[<I/)iKE9ET-N:aSq=FEXCY$5j^@D
+ u^h9_SJNP0/(`6nn#IYJaREDj1rIf*Cp:]Y#Le&.O[PK!d<s_UEaSkPU>erqf2<\mbJPqW!
+ Vu#5':iu#lEnP&C/S@dA-4('so8[PU:7I*?C.*f4BuM[:j8?Dsq%p\Sh?,_hZ=Z7oBunmDJ
+ )2Ji8+m[#ks_c,6huE-"Bc0OeMPlZ@A_-!n;R?(KE4qYaWamcdZtiPGaA*"[XCl`aatk0/C
+ J*bNXkf,g!scd>Kj=br$TSiuT8`9Pl,2MSsF1gh\!VUKG?7UdS8m_uVOE-?uD2%0ql#<NuP
+ BLq3qE^b*>nIaCg/$N^7ZjEdqad+jaqGj8KqaFG#fH@DaQ81GE.;Ea8MPWu-#Hk4=GTNi_O
+ ;TbQ\ao#JU!IFGRZgXf`F8XeXB>WU/!uf9k"IAtXBD:qil*+kqXq/k.4HYqPOr@@EQckNOC
+ r_k0KD5_(DZ']_N$"fk-sKu("rfRI-I9%.*7&'cgh"J2Q!uMN-@b-l-fnIPrfJnN[N%/0G$
+ N`CbfA3**]o3i'Ekt0@<D42DpI[VT:&0'"g'UcCK!rKaVHF1k;oF9@GBObl8<DC:h(c)+H,
+ je$49OeA\r-E<E2>+pCElZq8?;OgufNB&]$5k#PYfaF%'l`0N"7Hr=F$nX6&Ml=+'SiOQ)7
+ ?=neE#?IrF@l=u6f\2@mSXm9BR/G4_[A(\/h2$lK1a$W>TXm,0oQ2':/GJ-lR$51[R]sIgS
+ =ISUh9KWJEnia"+=mpK:>jPHaX@TR+1O[n`5s:_k9nh!7HVR7I)9J."pTr'6p>cf?;)82UG
+ F-Q[$-\"PPL$5B?*a0b;*Lu4=M1(%;>!a(K"/-eX;oD%H:K(aI4#%l6n2^P^f+&RH0$1n:(
+ -TBuZh.,#;7h8kiE/4.V;jq1>OOs0'Sg)ag"Yo3[B3a2`99QEQ.jo`l)ue1L~>
+Q
+Q q
+360 244.002 7 -7 re W n
+q
+360 244.002 7 -7 re W n
+% Fallback Image: x=360 y=116 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 360 236.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%=\)Oi'_N\+a4)fN!YJ?U6\5``O;.U(EC@Yf6un1+,"0@I'1t\b_#_Lc&Zi>`8h!_9ck
+ 6d$b-;4naAau2a.s\VC\+@rm^)9MTYB3_YB0D?GFuS#hWFsT[uChJ0B:eGbg,56=%lAh0f+
+ I$7Juq3p%:NhhUZq/$q!DGm)5r+C,@m0h)c#R@!W`lX84NRX^PZ?]tJ[d&l5."na%,3)q!K
+ $Yq`eR*l`FgJ&^g+Gk)"5q$K61,a%iqj84%KQrd>XnKVda;,i4%"9h?qr&K(LYdC2:1N1DE
+ 5CA9o1k^Q3E:YFEh*ZNN()HONB'J((:f;ngQf6ns5\),I$7,XmF1SZVPf>fU#RaU5L[8h^\
+ ,\HH"jW^YSNEdQ`o*M7d\!GG=!70$Ti/QRYs!>^)`J<>!(TN_I!m<qAS%#9H;[*$o7'U[GH
+ "JTQ&9ElO=N+%B?n<D<e8_t&JKfP>cBA>.2''"Z_qBqq#uY,197CjrVO[Z_mO:LpP5e"N/_
+ 7TU;i<?nFOP_/',gEcPJ7]g5>Xn'i]j;_%-GL37*J\.1n87nG"_9;\:".A&mNc!,H@!RFVr
+ p,?_Lba3gY[il"6LQfII;@2L(&Ff@?#7^\;9TVFkh9i%)Sn6m;!#V.Fad:1t=#F:Z8E'Uet
+ j+H[L;-Ji9DhMQ"r&EQF\jXH+2O?&4do-bEgBTMj(`I-Fn(nLP;q\Rb_l6SEGS,/gMRLVlZ
+ 15*G2"k3Re)pQgG7MZS_nna#1V@#*[$eJAFmd\58IGtrEjAr9%.%6$@59m$W[\mRnaQknPj
+ U4aQa?#jOt]F$E/!VjcJH7(?,N7C_ig^i7ImNoCk$mj.gp?:#R\G*'9ZlQK_MmZ_>aB?E/!
+ W54`j54a!,O0A7S4Olg&,@B\K@[-n[t]$=[L6(`\eL`l/,,c>[feC2/>N>j!_fQtMG\W$n'
+ >KnV8^W=Vf$n3I7*0,5'Bbhh29GuESgrd1Se#qmsR??eH4?Bq`F/+M_Z2KNK-lpaLg5Rn*_
+ m-+S+EW3V`"WU@JDbE]XLDA$\9IhTg$63FNoW;=g9%"#^X7UL2*TbEkN4Pk01l\'CD_]udU
+ l:p1"+9ic!Bo\n;gj',*m;$8;"*%$[@_]']o2~>
+Q
+Q q
+369 244.002 7 -7 re W n
+q
+369 244.002 7 -7 re W n
+% Fallback Image: x=369 y=116 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 369 236.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%>qD:M(oBd!PZG`NRf>?$;.aZKUWkW-k,7?#9l6sXBkA2b1.8FlMIp^rA4EtHTXBTq.+
+ [r2>+-/e5:+_-FcUf4ZI3sDOaG^%pV"n"4nj$Tf6oe8YX6RZinHCc9ON)^6UM2EIDXVRVPZ
+ %'ZdNWiM!8U^%c[.s4F`Bh:DH!=L6`UfH\_-224;4.Q.MLpn`UQW9,0R:.--qiq#"8hk/g2
+ ?rQ,`.]o1ZN"o7t=n,SH-GlM)Ek0[$_2+`s4YN"P1"nD+2.)=l`Gk4C!AfeCh(:S3,-3hMO
+ .gQHtPq+756Uup#bTB'DZ4`Rn#RnYF6OI('E;hufgqh1#s1gNO-^+8q77ttaNdLM^O8r'Pf
+ \.f7GS$cJ8\qI-7$*WZHi7"LIfD$j!s@cO5u!=qlg.ao3<Cum"ZA:.o0Z--[%OHmoL"=2hE
+ QMhM4(u*p`P`5BTPi`VBRu:%Lt0L<3UR"gtWG]/UaGm?G451[uq9Jqg7u//qD-FX$ouV7FJ
+ (&E4EKre.ar)fXuJ1gUC\mIe`a`2AS5i9#]EmMNBX%aKl-]NA^VEN/Yh_o_5,`:--Zd3-l;
+ 9p0l8gm+?ju)jW$][gp!\fX4?d89pge+VMA9?TL`gP(t5/iB.tT8b(.QoC<G)!G?&4R#&cS
+ oN#@s6?_d]I4[&0m>[nePa'7"dA+dh9R[]R]`26NN.:o\fa0567M7;TjieZ&@d@(YlXT[,3
+ F,SuDV^JtC2HCH++F,i_G#<M&$lrd0#5@,()HHnBpnJeoh1Z02.`scS"qCdg;sXK:Ehr--B
+ !Moba2$b'.tmQs#G-idU4NF]Od#F#W'u]<kuC>b>$*kD&_j/iU8GN8lr*m^l'#g4K?6S'c%
+ uR=knbL969#_NJsY[CmKXg'(?u,iW<V"adG'(P?tjJo17p'mAV#:40l33fL&$bmZ%AS6lT0
+ -dN_f4gfsl0nkVI/!c)Qk4tMm=)2V"Q,]/j3k+`hW#SZ>%\hWMED9sj@DQtDJT/o#*l$Rm>
+ V"CUU*4[B[H`BqLNl4=o%LWr,H?nK%YuQ@^5s[JY)X#Bh.nbOiHWQ4'HL\K1f9)1=_W*7gE
+ N9.:R[,:c]Q$:qn9^^Olg`!U*7:;2g>n0DNk--*_c.PXJF;iZ>C`>2C[n%W(Hq`1mJ~>
+Q
+Q q
+377 244.002 7 -7 re W n
+q
+377 244.002 7 -7 re W n
+% Fallback Image: x=377 y=116 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 377 236.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%=\)Oi'FiNc1/6+"*)Oi[#n^-q6pLTG.J1e4<"p]P&4Ar=+f-.c.Oe9;^_&/;5TI(+Z3
+ Z@b;Db:,!c9\[/PS[_e_1^Dhkd\$e5qFuF3h)I5'sKHc3#sC?b^&Y!M;R7j%"LlTO;dQ1Ge
+ gs"j>(.T)\JNT?"Qf(`p\\-[>,G_4sL;(r5o+5(D.HH$0t,?D4D-GOD-,:-hel*^@[9kEq^
+ dP'M?lc^s+`?'LZ7aqY*3YG8WG:S6YFHS(YR:ZgWu:#tF\,t5Y<1FOckrVIENdup+j^3:(k
+ "\;0LE3OrXBO&1u3>ijfP*mIN2WELP"9dZ(&I#n_85D`u2$O<cJF0ts=?BQ][hfboEd]#O3
+ '&O.G=R$CMMfd6.GLd4*naMDMi4n:okV3bJbF8d=)=s7=^*CqE^Elq,bI#i67>&*SeBk(bg
+ #+k)n@;<FmBeu1D(<HEUM_fi8?orq]dsul:>bj5Kk&cCAiDQ;@R62UB@p3\8_UR=bqlaV^K
+ ^5Z#_:9mJ;CIHf=+AO:[pG/IJSY6!G;>]/=iAD#'-A!=EWPlo=9c4aZQ7:7d,o#Ae6cAd0J
+ )Cu;C88llg`L,a-;'^4m7<PEDQ[r70khS'^\;*!1FKK'pOI/,OlU>Y;D92"X+#6P(ll"Mhi
+ h$SRYR$b\+!f%8B8@#SLcleJo1MKol24/(Z1e_YOL;S1XE"L_dHUMc\E]pah%X.3#YUMde.
+ i^VtI9KMmp,+ZP(LL=m@.*8FC[2N2nb/8n(bKI2D3H)Bbad`,2isP]B:iMAKU*D<YE9DSo>
+ ??^W^9I@Uk5(19sK&SoEE-BSk6<oIWCTEA2Z?ciPPp1Q(-34B]b88k-KMUZEOlX),_&"0.A
+ !b=XLR5"&jc7>iGt=K!ddk>akWV<I&T:mj`Nj$-o/5;NeO!ZU*?N[tgNFr.L&hGf:Tra[n+
+ )""VGHB\LZRrO0@D/7$4g^SMI23$A;B4Y$G#Gn;S\5KELuVLfj.(l4Or,UZ6QR-g^r%Hbf*
+ Unrp2,9t1br;;4t;c";F;Kt1\ifKNUY04:D`Cr3C/k1<(aStO/8N7fP9l]H_=CPU.F9,UI^
+ 0]loWZXBW;Q#^WPPdMihiGLchZ>b.#fXg(JklSX!EH&q++J3V"%=0Bli~>
+Q
+Q q
+386 244.002 7 -7 re W n
+q
+386 244.002 7 -7 re W n
+% Fallback Image: x=386 y=116 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 386 236.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$CFn(G(p.%@DQ?SgVHdkQ[4rTN:g;,Kq1Qu7>ZP'=@kG5e@n`aG9W#%*ZSJUcCglDu`T
+ 9`i,"@_^DCJ$?FIq%\rdT!gs+`f2m!SV7hX`r"o:5!V^m_O<LsM\J1P:MjN/oLap^qRg=BN
+ B5mqXR_2eH^mjpdnH7r'WDRXV$B)''`Boa:0F$b9lcgrRjnL5-::=ns":<N*#g<u6UHj[>Q
+ V]6EK*`1oi4FUL-H._'gAp%<S"64Thp$k8o(!C]FJ9Z6&9$EdZ%H+DFXLXI_U$J'bj_8/*P
+ 7R9uf$4?:p.6`.+OI<d4/Oab<:7d-.Rt?.jUo0ub#,@rC_7$_(04.+H4=QPWRu7Xji8T>57
+ hhIWNL1QIQ(bf/e'j\Va4IL6/!0.qH7?;Z?BINgWapAL0PkP>\@^e\7HEQ%6!h<l7[*l,\+
+ OEar/cE\\7a.7dXp5_ETrWs\8NJ_lqu^)Lql:/PTjp^QQ4#b<`.ejJ-%(55G('S]mIiHa-A
+ 1EonASCG4($t^&i(c*']If0VkP=U]_2L8FfGDQ&=5$ks,.NVPXJq0?#_,-n`=b3-uDN%O*S
+ V_8lmc>&$^=DO$es>2m<uG^(>T6:R,eq"ChGKJr^cF*U#1:`O*Tl0;:Dq;L6t=_hIJ"+ul_
+ ]"0RRQ;+>J='(nVO.71H2N%BOhDmQq6(N(i\8PfLfYXUd6>L<c$1$hab8)sID/I\WNZCI3+
+ ek0rUnFGKXL55BPETb*oPi5VR2HkJ#n_72[0q_DfX;5M3nV)JNL<:E5tK;Fp[=GGi]o5p\i
+ Oh:emu`r='(;g`lH!S?`&H)OdXBa:**GD)*Gn3m8>7%aN=i;:5HAiB&`f<W<o&j)P948q\q
+ J)G;:se<l<]4HhV"DDO?ikJT"WqI^QDAG0gO_6]mliBg7'*QS6mVGrl]V9CKa8V1"r,3-7\
+ pDf7;5Z\,B^!^?0$^QOm(ioPle+Lr)iZK+L5R&^EEB_Ic!dgbLU9]P>63'.LMR8reCl`jsh
+ p(i:Tq^!O[H7ZI=d,J/ba@N;_\T:*_s4NhMiSu0:i2&g'\2`9S,G)?<cBJbip\K$#'UFHf`
+ PueSKERDWDm\kIEF$_;VQ(Q)P`ZRMpWKeF"k5HRodA[Wf$bj:W+;o[K?X5VJ,ILb$0c-;"9
+ ~>
+Q
+Q q
+395 244.002 7 -7 re W n
+q
+395 244.002 7 -7 re W n
+% Fallback Image: x=395 y=116 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 395 236.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%8M$E@'X\KLF#7J:8R%(*BNQB&<Y@d)BSZg">)=@7daloJ%1+28FU^br+VI0pN%ljtN?
+ SY1U7m<r,)2!(F8HU=r@]hkb=gQSS$P0Mh"uNgIeV_!!BTT4$KpS33l:X[q">.Y4)0j;4r,
+ e/#2&#`p@n+A'4ti14KQQDLbRoSV8`MI\A6Z25(:H.+PPT#kifh/ORVm?@t=*iIf>;R;7*a
+ )\lsZoDhY*U)?]?u'FP<4m`);/aN[_XV?T1HihaWp4#t.L1n'n2=GZ`s"iue'QPosb>qn6l
+ \iMs&N1_9saH3<d)EggFBtVR(!PWrD;O!Cg+TXbj$BQFWJl$N5./L]%i6S%jnH7P#dT#\mU
+ TkD,T->H\GO?jj)2W"Pd+!`J.BKXC[km<q*QY""GHnFt+hbRfWksrI#RQ'WUB7-_85#-nl0
+ FOJYHCK^c9@pp"[4lGf@;1VXf+KSL0W'R'4ti12cmo?$W0dBb*&OW]TKLYO%\h^Snf/\h;E
+ d5>EP!Dod`4R5YDLUndlfNDf<.r_9PfI:J4K<4MB6,I#.]JGt5k0"4u&ZSg789^Lqh?*Ku\
+ cY=D=t_S`3g?!LcQMd*Zt1QrtXn(kUMj<f0N>5E_Y6V%#.57_<9=&pM&<CYW_$+FijdLmlR
+ g6p'EVq9T>_8.nnN-b4.Za6q;[?_-^DI>`LWi-2a*m"[l>Jn;ZVPZ%*f$6sD4M<X2nF`%e`
+ @1.&mVO<6]PAEY_3N<"R@Pp._!/)/P$"$78U*g$OQ!kAg,tp)_br:j[MGF)R$`tRNM^\m1c
+ 1l8)!U;UI"$NB7fHN8Z@`8Gm1gb]>1)[$M?aY''-gANV=KiIqrL2EBhM*>.(b("jrFL*EW8
+ 3b4Q,XfHhZTt1dQjY^!om#bUdm&JZMmi#.B;ac-OS,R@-T@7VjWm_@R8$nFtNDQ'\/,qP5B
+ >,@tHWC"qEBA=f:.bEoMd;GrUDLq#EIT)*t0l5@QCAnZ%HhU=<)$bMr_=C*V3(GG:U\R(ql
+ H:BWT);&>#Flkn%mdT=L/2#(/jA01`kQ<<6B,"iU?\,O>*K0d6ri,htj`8&]~>
+Q
+Q q
+403 244.002 7 -7 re W n
+q
+403 244.002 7 -7 re W n
+% Fallback Image: x=403 y=116 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 403 236.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%=\+fd&2eMXF3,+H%3O@t_$k%/&98pq=qEts,8-8\5s\'K'PTiBdn5cs>b526TaXmsab
+ >Zb_b<^--pb']F"]?:F9^j`hb2)Yg1/#_rV,o2B?m$8:LLS4>f>D;VPitG$U0$XVb`K;jj;
+ I\:,=[W/?B3KLR=\MW&JYAdt@AfjU;Mq,Q%>sk>,BF8U+bK]tJ)n_4<[2l/84(cHOcMH$0t
+ ,?D4J1e^_0U<AH3<qYFsf\iN\^LR=OIZY-dl%u#^.:R>$Q@:4WKcZR`_@KMT4UTtLM)$gb>
+ FE:A*]=@'b4>qrF<YQ;-j@L=R-u!+`7Lf\hG;k!Kck^K?BeqP3q"8E:=\]Gn6a:tsgtc%fI
+ -ME7S&LANPPFuSN3mmiH%;9WUNlYO?!Sj/6Y\(\+,6O8m-N6+ldd42%CNV-n&Oq%R$2&]n)
+ h)tq!\;O6W.WH]pOB+%NN9mD))nWj@u,*S;`UDE=Qj]m[ZnHe==H6P"k3)_#=/Y35W\U_qu
+ P2:,"C71T6CPCiJA:/mQ2o>6<*b@[X<!'rmIIRlbfOkYVrWg,7["/\7)<p[A+^g"md*%O!;
+ o$qX/3)Y!<o.(MfX[a3M?HhN7ldEuEpRMn;:.Pn\+A9r1;(0McOT!FRn'63%:*^,[gW!][t
+ <RR;j5I:Q?7n3^e_UVYd[^O2qNLHC%'=rmg-1f2KjQE;;8X`3(*!Zp_e*qH+Y:_Cq;A+A)K
+ [oe`fXr*A`gXuUMNsJ!dFfC-No98,fiiJ'\UFIY3LI0.[A)Q!F2_"'pBiEOD/'DF6VV+JAS
+ s-^E.#=37?HienaN6&^OIoDQ,,-/_\EnGEsB[F@Fm-b&tB5ZXC&/fbe#8826jM&%dYFR:&B
+ 'V@UMHU>oC!YD1D@:&e^M.K<.V2Kl>TD,9q@%0#I0W,4fsg%p:IEF7U_"4M[...pC'Q.cq[
+ omMt6G&/6DeLR$:ne7@lG)*2@"$X:CKP^;4N5u(!;6%PuZO^uY"6!%=%,0oAG#RS?Hr?B>.
+ S[+%(-C1;uIcO9e5lZ(S$1d?0aNg+>2`>,mHj)92EW3WCJtfO+*&3Ub;T@VVd]XqSk9n@3_
+ dOq[]6@gJ.>-W$RYVpsK89dQ5E=Z0Xcfn.o@R0uIP`sPV1IFRLT2hL7PA$[nl],d1i&9hiS
+ m:7>?i^hcMnmZJ1?0ZTDOM,p#$s!]F\`H/o?cpTBEc5q$&Fa!nokIs'q&Y$iNK<'E~>
+Q
+Q q
+39 208.002 7 -7 re W n
+q
+39 208.002 7 -7 re W n
+% Fallback Image: x=39 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 39 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%=\Ma['U8qlUBi&91u^tu"Os@nY&T"'UC]YS%n%QqLgksm@RU/E<%+lN:^OKQ.Nm/iJt
+ ]7\<,+k',-0&jALVKLb0jHDALXQJ)]t+b65i(ZS<(sdHVa+c3HOA3s8ILA%YJ)kOi^Q3%D?
+ n,4Z,+Q<E5S)'lucEAS$(.2$-eNp$28EOY:(_bb(0Cg..3W<9fA\2kFBe;L%_@hYHcR5s_j
+ ;gpr#u&4'uCan=tr'M<Lgnj%7PR<c$E[>_rC3HHOra!]]t44VgO_;;js]6;GVqg8%P3Shjd
+ J^=8m78Zq7ns#[+nrJWa`F33Q^qe/--fCN)@g?Z<jodV%Ngj7)X/cP7`%#ECQFkn\Vg*Gs*
+ ']HKCpnr5;+W$DAmKWTVi6SD9IBIujlZm2GS_1iqXs2tle$")`]?-!XBnU$;])c]B>]K!9q
+ ,#j*QgEg;K2FeG5[9<_tM3r?i0\'"G3),'OaB4C4\9-b?V=3Q@f:WhO\Ut8%5msKUj-BbiR
+ $9NfN$&1I;Y/,"miOZq;X4H!$h=MT*gD"n1+1]\q^I%hI76Pu3GT74q[RBl-S85<m$%JcMZ
+ ,Xf\?6/r[6D!I=7PKDE@"@Q%Fo=9t(n.M\@s<2]&G878Vm9eEo!NHaaA*G9$)Z=VEVQ@KrS
+ iUc1D^_B6h@7SrgceH&W/.DDE3(W[V248_`YQ(\#oJ\Wbo(d3;[-U_h\6HG:Ukkj!?;.c6S
+ AK)V#pYboJ0TO.lRRjOCs:!e3(T,VR<a0r$jAr)4%,eR#mpDD/jOQ!)`QV[[0fp1>$6uUDd
+ $:4gY-*C%S8a+6Ik)*313U!E0-$>Ngf0W5UlqV"Rff/T`9fEpZ(%=S=CEhQ_MtVbkO7F%#=
+ _lG=-:e=fgc`Hm=9T[8l&67XuHa:k$;m8f4K+Qm4"XInYooaZaqJko_XI:&@Enb+J\*00Bf
+ >&K6@t\%Z0T?7lru5&e'BZ]Df4igcS(p@aTW&Wh=mOX!;]/lcl$E.]r51ibTB63^TF6iHtP
+ NXk^HVS'Q#FS`=o!-G-k2/?[K5^q\[[VZSgLdl1(c,J40b@JuSf[.tR]mir4OS[>>J@;MZU
+ T=l,'o%Ae+#ncT75VR\qt?]c5kZsq#]=TNLl%(gO)G[F'*a(tA-C"!m5c:!Do(J/8+4"#'1
+ b34\G5@>g9`]L,B/8k64ip9B(A2]T`:Vf3IMf^"OJr3j#Zf-\-R.g,7eX(B7"?,APs-r`'q
+ j4He&JpE)`h(j\'\%o9do9nUO6;ZZ4lViSap^=fd?*:R(>*l[!m$@tnUboX);XKk_iR!d3b
+ l8/S7t*um+u)=KXZN>E[!GSCEkMU)KS7>tofjtYoOFhPJ@/M17.<=5uJ5Qq/7U8MF6<XmA3
+ ^5\0mL52I&PQdd=!YrKb7P)Bl4Q_,KIK9?Y&-W~>
+Q
+Q q
+47 208.002 7 -7 re W n
+q
+47 208.002 7 -7 re W n
+% Fallback Image: x=47 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 47 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%=\Mb.(faOe)AGW!7M.@);(s>3`%;lPpn5X:5H$:dC5a&GA(8"b.RdMX-l*YRU*sFS(^
+ 9<28APHrV*N]`dpf!P?"dBqb1b9eS28X9osTD$cKkBg&%=LlSpUJ:45]l1jid[>Pbmj9eU7
+ 5Cro&L@Y"htqdoKJFXK;=@Zj?l8l=tHYD7`Ws.2$?!>)\)dAEGM$UcLO3c(-qMf<;pr%aI4
+ eSoa`bkL:rmq#/F)]F,M_Y$<EeEMGKEX=cC'ZU-ri<n5d8UJd^+5+Jlr?eUM\.9j9ef<8!@
+ pU?(AN>nL+gQo9hBBFaI02J/jAM>r=WKh)#\=CNaFntTdj2]XCm!66TbKh\?-M[DUqt_Z7q
+ Sk0qD@>7oo1N2jio01Q:BLY`$iQ/=85.OTA7XgDW>$:##nP@sGk&71LE:BjbZ_TBl0Z`#\1
+ hO2Jf%;0kkXfVi$[!s/(WH:G0qN'KDG>*,M]>$bG(d3aNX!fCEkY$jRS?l3Rqs>S(kEYNZN
+ VUBiDC:BB8F4N*3LN1M>.lg`iUkrsC\DL:]Ob_]rpASGPsFU]q#iE!_L.D,N!q^U'-Jgu$L
+ &j7,<R35!='**;]c%H%Ye3]5.#jmJp9<%"Tjn`'pP-VV&9lqEm(-/@#c!hKT#U50QSnP'/j
+ b)2'"Xd70nW6rD$ZI2Xl/dMq^h7anb!4DQ+?"koDTh\@IET7=TR5T=G`(,,uY^CiHp[3HXo
+ ;42n%CD[8Z(\@^b`&1JelEVco^(6m$703^rjZO_I[W2+]7t?&OdWH^HkE7W_%0VLb!(!MPY
+ RS+k&sBCYhZIjT1oLlAG<(Rd\<JAQl%e.EQssLM\en.SU5;/2!W#9<m8k7&Mn$lPc-?P%J*
+ XbGT_M9I\<`W8>e6Q%tbFApFi>jm`%`g9*:3C:597d^HZlKfr3LnAfML)JpkJ-3G6\/@q/@
+ t0_@1Z=U<-qgE>Q!&/R5IStV*dD&4@*4<J&2h&g+4X-R5>r'Q&bA$Cs*3@`ql)o-f8Tb,50
+ jQ5o7XP@m[Scf23gC`X;GBXGSI!gD!]c6?D`F_&K\M?@`6R:)/'P*et6#GiS7mCaWS(m8p7
+ 9Nb!5f<rFiU?F.o!0BPmFi@(:@P!P)Y<RJ)HrPFTY&r<1c.\qIl0-]!1`jfWGI%\(3Y!A'Z
+ ==e%L+/0%N12_W_,mHoD-'LeR2/`oN5r-NV04&N+\)q]jY:K_ke\+"jr217cP'TA_4*:[r0
+ `/A99[cT]707Cc%U*k&3&>(S!.uJV8bi*^#6(+b2aCE8`3]`lIg,<)Zt&=<89FJ*@RIO:r=
+ =6/f4e(i?B$,tJ-YR$$@uZEj?!F<6'cQm0=Y1<%r"R)18,A'B00d0a5(dSVY!pf:%-0b,)s
+ itsRYK`.,:!QYk9"Q10qH,(8K,ogF7M_GlD(E8.G!(D/nJ:AB&S$9S3&!+-V-+jV4USlHH(
+ ;RVN8!ju;^#!Q\3QCu(emE"I&+0~>
+Q
+Q q
+56 208.002 7 -7 re W n
+q
+56 208.002 7 -7 re W n
+% Fallback Image: x=56 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 56 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$BhX^n'\*=DJ4^LY9oSBk73k_D[hod.\:d8F`')L9N7!`#>iQIOTie,u\C(F^6tI03&H
+ QOe-;;U)Kd)c`Z?9Y-V%sE&[`k_1jRFrY(&dC?8^k?@^%:[(pR^u2L40Zu0X\?4f%.:Pjgp
+ <VX]2;4Mq(.f/'s)?)Mpj4PNaPI4)/Mh.[Ah%,FKKq]^c:<Gh9*H\9Kb&baE[Q:;&f>g_II
+ `Gr#-dkmnR_n?-*r4#4*&1NTe(O(A6SOn%V29.peq8D1E:q6k,HRlABk?0_j-Rl3Fe\i"'^
+ cA_`!EJ0Fu[e09VbdG!lV%F;"TqRm0%jqSc4k[>"-6OFC`JR1brf<?urt"o%j"&\C?FT@Ap
+ ?aLD*lKpo)2u_6,YH:?`Ppj3pd,lNqnrdDJ7.ds=`S`Viol((UDGJ;RQmDIB'q9TKWk-9/r
+ a/M3[lK@9h5OFq+j[X9m65<Im;&6Os*7bFoJpmBm]P]rG=b`esn`ODsrKbZYk&6OhaYD\+a
+ `HhoL*7fIL#I''+Tc*W7EM]r@gG3\WfSGC9DF=B$PA:+j&*4ald*:1,2c`f(iX*oYSFKt4b
+ m0mPM\L79.ER@^!/B?kn7Cg#K[h7P7>.\8e=-n*HaA@B<?P.A38)9l3KQcG/E_UY5ofRT%p
+ gC6qS`mh![8Wu\!VG%"B^>ADOMd*M7lc9[f#^Och,l5)5]@BM/pU%DRIJKTe0:-^iq.J$Jg
+ rSQI\T8ePmd:d$"FS\A$X^.C?1^<;<5d`PIJg%IYQ(WQ;Yk[3VoPmj6S+*rY6sOd[,>=k*u
+ beP_PT*#]<cm4:g>g`b4jNLbOUm^euGb,cH^m6EQE$AE["H_[fA#0KXO1mV[!I5!s;DHe<)
+ b>3gJC9KB;EWhI$QkTLC";$(%^Po>(DJ-Qtb.7JhheIn7pVr_<H'D5Wp!PFT"bD_ZfnBd4.
+ _O.mPbf%ee5$r^@L8tZrX)[ZrraV#pVlfca:ldt$_4WAq>*:WKT?*u0Rd%R2<0R7C_e=dY7
+ 3gIjk3ZUcqOM,;5>1#5tNQ/df'M=u]KrMf=YldJS!'K<]'";\.S4.F;c"1H,8u5Ce2B*'*M
+ e-`%+$u/qbiZY-mN)L<?a"_Q\i;f7A)BI@(`5.l(^9gB0%$gui5t1=(pM1A;L5)C(>s9o@B
+ WuJ-P>.K&$\L=,`mm=(99>H%uS7s=:fZ/^C0+P#L!_cPU.[=T0EjkPCT0W*"Gm*:u%*B6it
+ 1SZEiCHDiPh?hM-\CiN+'tB>A&H#d_L%3hl8pKESpn7<JA[7'X"973n;l0Y'0)3]t>O#j`/
+ L%1-9-,nLn3)_'*gMZ\A/CW/Zu_WNFjE_&$RQF9jrRrl734)GsLZsS#M$V4G(!W_ZU6sEZV
+ TrA?%TKF=!1>D1SMZoM:"2K/:!?9(9R!62e/pH$Q*WH1W6Oq-~>
+Q
+Q q
+65 208.002 7 -7 re W n
+q
+65 208.002 7 -7 re W n
+% Fallback Image: x=65 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 65 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$GtaB0*%j<qV+j[bA[[W$dT13jlWCQ;X];EE[oHXfQ*"Q(C3C1u6?o;[;0J%gk*:Xh#&
+ -\?MOLK3Qmc8`QD-p%2te*C(LV!_rp8J4#NP]qkP`*?n+f+bGPD.1CNXcCW[]O6'c#9]k:8
+ rpRZAQPg"E[4X?V7u-`8:M=-8hN>>UuW8=I;B2.UUVC-P-T#\^S(*ZhN2SU5MMADGS-SAU-
+ ^":=Ma8S??</mLrXE[@3sPbt;r1:K,"B*JR[+$UgW@n51K9d-Q=5?bKHGgW5dnR1lrf#j8O
+ ldnXCh&<t>:\*VjiYO6VR6.cZd?>q,=0KWS\OGo@a^2UQrdk;>Y-%cB`J$$^Q3i.J>kCgEB
+ $Yq5I!PMLc*@0?-_<AamcPtVEfHGj>)Hd!1BIVsW7V1Wf^%,ESMMX$b*6+o-f8rfp2b9FRl
+ HO\^QXl]Ue,fa(BUI/ICOB5`3sO0,gFe:`*u`CV].C8[^A\*;@::XhGL9Ba,],#G@o'l4$(
+ g1NkK.>7iaC?C1C`ZR]YsOH[?i)8"]>3+\;7nh7SX^Z^AsG%L9*m@W$+>)+qHpm!JJ5T0<'
+ n_ZnV3A(2n[92!Ui_oY9#>TZ(q!856+F4`1haH:_`gVtRbiBg)Op[\/#'2p=ke<cC:\ZV^&
+ Y.,;a.ZB6W,EnmHm=Kke$KZP9=cnIL,n1b\!9B@V,J6O-7ccho`j&RH8iUfWaC%Qr^4g:O1
+ 7<ukRq+9j=3BPhD0QA"KU?id#B+BnP\n?T@=df2lT8MVFG?-F4Zr:%6SSk+jlMs-HD=?bku
+ q%99jJcUT?C\0&/YpUUNb'&#<-'\_5J-,iFjrmpS'`Vio;b/g4k?*NQ.'iTr\[_K::!4dNE
+ \ll-nuVCLA_2K4]$tZ*Z?![^JZo!iJb&cC9U_V38rSOcc"s0RsCE":RN-f'E(<?6C-`pa__
+ ZgRFn?rs.U1))IJ8X6o4dB%0$f@6`!"W?*P"r0pen/JLg%4AeX?ntf!H>_]:0e^g$uB;\7\
+ LKCS8\@JI5qMO=mb5$G/S[,=*INs(Cr!JP:<fL"VWi?+bS=b*(2W>Fm!,qVIfbk'c55j0#/
+ ]c.fn8LgF4q-qo[^K2<eoc-62Z/D?KH[VPGD-+DcXX;lkKin@aNU'&53SATk<@e4mld4JP*
+ jm$?&^:HD/)C/3h<DqAip5W!Xa-;@mu*=_a/lCDVonmrd4bXQRkFc_tJmD"?SRT48ft3Z;?
+ Kd&C-C_88J?9)`QdAJJ:Y3rp/od6'LTX9F(\k?QM<8E"3li&@3JVrP'U'+N2K6L3a\="9NT
+ pPsch3VbjU'"eUkR0om1j.SEDb"9Lu,:2hn<grGK'47lT[;e$#KpWk?`/XN5K`"^Kl5a%?W
+ '+0ja>,BY0AiKqUDidRG#ZV`[!+Z=R6.Cb1fG#AbNu:E=US(1O@jAG/"*FZ^C,Kf6Z^Jl3:
+ Y$%^F:Vd~>
+Q
+Q q
+73 208.002 7 -7 re W n
+q
+73 208.002 7 -7 re W n
+% Fallback Image: x=73 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 73 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%=\Mau'QleQ.Yo!P'J[U`A,O\eN5cGe->K(1LDhPi%l#PKU+sea.23=s2+Rlg'SM!eJ[
+ Q8\$O*4hO]!V38thK8;MJ4U7c,t\pKboin+WBSO7iutmrQe.leGj^rbl;R_7i*MA#!3QC(g
+ r>'c!hPJYKNYjkI8D5Z(S5>$eA5XDFr;dam%EC:.U7hMr(S9MD%eGNRAPS;.X(n)""`qf_8
+ LS!2m`X`S2g[YkOfacl'-0*FtG66IC,le:';rr/9&J,]Ad'.4t7++C\3:Y;gUPCg>lp\TRJ
+ @u_Z2FS9P1`JZbEm]sL<&NOV`ART"<fL-eBkSUmZqs,h<IUi!3=.;+9!M('RZZYT'D;-9.m
+ uKPY3r.Jep4EVJOH>ck&i-eeZa2\V^*k[soB9'2V+Y49_Vhh;?`mQ'db[1/c7X(d.K]C':(
+ 1P4h8(7DhnFaO(KgG"jn\[N7Rnt_68GmP]3C_d;%XP.lfFDkj94V,FmE_L[XQDc;/L,sXf[
+ #RX9_Y)XjQCJI(@"oD4mG*pti\UQS2u7IpU-*eu#9X,SDkRT3gD[>V'<g8f3LDBBSJ'8$Kq
+ ddaEKY!`'13O4gkqB?pDkZY"Jc=CB3_iBi4;NMJTq("-dTe5U^%@@(4oAf`WCe29*+(Ol/K
+ p"?[]1M<pdXJ.7P$jJDtc'UfT2tQtC(nrWg)ROg5bctXt(Dj$EM8rPCs/oG&bk-irRbCq:H
+ 90Bun+2ep\3ZpM/Q3E:nshe.b`"eNQBn2_R56a;piPq/Ngj6q63><'X/X4feO='k)B?[AlI
+ BWp;,M%@..iIFTs%ga[D#;"i'9acc^BE=Be*6B/s*m3X&j<6opM4/V%P'+4pY"@"?Pi5E;9
+ *2/sMQCkK`r,#G<]j!12e-Dk:+W'J$57Pq*G-D!+Q00V:ZDVkg91@PDJl;Qu;HPMu?CAq,Y
+ 4f9)9;iu+&+bRbF5n5oN$PIQYLnQ0Fc?8]<D9NjEI)*47V<?dQqc^/T1W2Y`rO$B3ua`)4g
+ [BY;,9F.r5O*#J361O43=r'b3:]UO^Pf_!/UQ$1\q5Mb,Q7/7a2Od43-""Cs!MCW%BEB^g7
+ Zl`i;3R6?Wijo22!@mg<:Ms)s/0E(qi*WWm(0+&'d\^Z@bnd@H0>fLj$poL@%Qj'IW06n<`
+ Y8JTl4j.p@P$/->";?*Zc4:(bcm*H[FLsr'4i0C19u0HFmYl!<ba!nq[Q64d^uGaCfa2BOY
+ RolY^F!Yh=^2!N<<fUIPWXb#ssrLsT(5,<%_AZM])9GW9$(PT)O]GT$Q4/uI+`3#nIXoU'W
+ `fWR7p)+TQ0#o$48<O&e_9PeHib]#0#[kThN.P;3L)$)i>GUB(?38!kj+XC/?T)49/CciI9
+ Ug,Od)/p:%L,no2D*t6B;CT=F:ceZ!#iGde:(CE%Wo<Id9RG-"m*k4W\i=aE+E`<;$NVJ)o
+ Jo(ss3glIH=[WI~>
+Q
+Q q
+82 208.002 7 -7 re W n
+q
+82 208.002 7 -7 re W n
+% Fallback Image: x=82 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 82 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/eBhVH.(ku=Kd3&Y?(aC6@(!r>HEK(1_R[C$Nrtm\"@U)`d;56u"V,bIB<47?,<)c*kX!
+ "6-LO_]1Q;SQ6J[U0,/_![k[&$S+c:^3>kI(d/l27*9pW$!LmrQ5)4l>Lb+9+"725&ReA?s
+ L8L(9>:/JP4"C6V^u'9T<+>$Y@e;-2@P?a"0[ltL7Ao_4Qkho4TDUnj(GmdY2N.Llb6]Q>V
+ &gpr9?i512Bi*bu4)^"M'.AK]XdaJ!AC,-Z2Q\L3**BTR,kg6AYqq-IN^M_hoZsgkeMR@"g
+ lHYr7qtF_E3KemkHj,M\e(RD@UCR4ckb;kEE_i5u5B%`VgU?n-X5a6_@f?8cr;C.(r#CFJ!
+ s7I_X\)j-/p5dKbbI[ZrG_M60KE:nhG,DA2)gFk;p-@/hI!gFh35<cAM.-&nF9p<?;+_5M!
+ j@n>Ia0@H$RfN]q^"'R(g9?i8sC_3@@UCDr0P2(l_[$L<`OL)3o,dpT>ht&`l>R=IV66>Hm
+ &M]QoX2Skn.t+1o):C!N5>&!+fBF/.mDJ%g=+b<:2Km;a\arq1&08VsFIMbH$NFF<uX8Xtu
+ s(NN<D7Zm4$A_*qQ1M/b>5!=;9PR!C"'+1?mooY/*`6=V`='$[?C@>KSp$5WJnM2^5rIW;8
+ jF3X0V/@e6X%l26\p>)c6-P.NlKS]^aC18Z&IP-g%9TX")o>(h;8(jR6\!G'J-iVX9bsMOc
+ HgoekUGF!l07\D`kd;OV+YZE5T\RAOTfn$Ct&eD86inn2^kVf7[%jP>qIXSV/jXn-BkP6"9
+ %'3I4>t<W/->R5&hcTc'i<Q?W7XLUe`<^$g`\XU<"th"-I(FMq'EkR'^%<Dt!2BOH%pFQ]F
+ `c_i@p*(sOY1:pQ-(s(1TOkKB/7Ch2ouId#dC%O,;Fil-ouKpOGo`Q$%n8jL`pV1/R.Eq1S
+ gL&NCh1\hiBQcJ-F`J3&US`BVni3?]Pbo@\oGU<4,FNB%[#aoeGm]U!J,#MQiGuI!p-%f'6
+ nKPQ*5!F.6J)]EA.SnA-5<fQ/hX0(7PS>R-V[s-J9-h2C,oHlK]f.]%12&B"i9THEGl,\=[
+ hsX6%Ng^6Z!qg$G^J2`g9_1X'DkD4gejq8JV.R>\+/*.1b`=gletN^*_*0*e+80Ci4t_F.u
+ ?QI'?UUf6,5I%(^gUfctF\@4Pgto*k#6'i*/l%$iq?!pVFZpgUCZr'#L$TE>E2"_n`cJXFl
+ /@,2]#Va\+.HTHG?FhoB0GW$I%YKaBEmnan<]`+e:dF4A(cn<lt?ZFhu+o$<o8$'VfXbuRe
+ C(c3/oaLE8)IK#2+%AOZ?,U?bQ-$adG<REeha@;-n2mTg#=NG+7r[%1_1DB?q7<TNe'49mn
+ *rK#g!<@$j/0r_K>)F>_&\@<K);`@JO'rO.K$T3+.O"^;5muUE=NEKX]ED0l;F!Bb]@hjMj
+ FW9lfO:i23V%Z)IfT*3&-)~>
+Q
+Q q
+91 208.002 7 -7 re W n
+q
+91 208.002 7 -7 re W n
+% Fallback Image: x=91 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 91 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/d=\Mb>'ZN!bBP^pMg_-B6:PtU&\A\\[1_LI])BMT%7-!j2&#)Og&Z%;4!Wk]XN.a(K+@
+ 0O8klaG:G",q,.90a_V(=ZD;V!$b.Aa0<A&pKn>D?k54O-/uReH[*q0L>sh`:Gc\,Xd=1Xt
+ +2CGM;nC-&Dq^3o_&Y1'd[<-SS;Y!]B?MV+NsqLQ(5Qd[BoDCd=i;^g.(@Dt0C'S_>X>eI!
+ rJ)2.&q==+<U?gE(DVm()O0<p(bV;"&A?O%uI!+g[cLKqUNuWFei4r-8pSR<2jUL^tT."/U
+ ?+m728oiR#6KYlWr6gCWJkMI$:7TBbGVF!\SqO4M'=M_&&/b1MoB'`u(s"9mGiDL5Z#A^oh
+ m9UV3Iar-.hWLQGOPNOiBl\#6chE5-j'O8rr2HRf>k(!(UnRi&6KVc2CSM%PoD[Aq=sGfU5
+ 7>G-CP8KS9DN+\aA376V^Ce;H\8+9%MCb8O5WsX&_Zm=:r5oq)r*BW$P)i^_6%t(UJ-nm$]
+ eg5sb8Z7;QgYmN8:%cLGltF*DIQBieqXn.;on6Du_]d3AD'KsLOG^RmIR]=E!:^`m!e+@79
+ />eHGY4:)<C#n&!OP=C0q>RlONg%+t1(VQDDhT!Jr5BA/opMNld>.Tr;R?*DNc5\!VnF;W6
+ ,Z2:ie:f:Lg=Y&4(GCkc?W3.ZFi.Kj(gG2+.T95A;>U:jF>A%4C</tB`/Fj]\$Z"pIJ`Nc,
+ q$0:[Je@pb_:l+2Dd8=gY63pdV\ZJ41#Iu5Ye@O>Js4%Y]G^hcl9)@A7p,<e\PW4*-A_rDH
+ d%?YHb@ATn/W38l'qbldh80`tGgtj3^f/glkkb_6+%L^^'#]Rl<PqI+\Gt4Ughqk(Y8qK`D
+ !"r":Wd8>gnCpL'@(6:0pY;)@,//%O.S_eFVGNnLa@ci2/4A*r`W`1YdGnJl\_B!iP>r$IU
+ j4aAeokK^#;bJ6:'&bu01H$\`i\+hWt*L2mX%@PIY*]Mju@5(1V"pR.Mn8'[0f;GIM^)dF_
+ ZR@09%f$JM_82'd\+h'Mr.u$q[HJ`R]@ArWYqS.#-<"bfSjk2@G^nMU$+Lcl(/9%`+ZG`fO
+ /LN;+\FR6T#^)7YQi-<7u+^gRnHA\EH)D*o(MH;4?n6tHiJOnEA=hFNfT/3,oi#7O*tOAnP
+ _2sZeL1Y)&gX1BIb_X)]n^99mB4K>[>T`/<,V45C40EcCLHCRtq?A*G^W]b_Fe_j./ibUeO
+ p?PtKlZVku?e("$RkI2:$:]A:o`6:6\]'t"EHY>Xnf(hdUq]pQGpW+\L@7O.5]]e'@&2B0+
+ ]/+"FH*=h.#g0Fmb\cq.T#qR@GX`Ndn_qX3l;(N'ZIJq=JSV4DS%q*4;d0d(Bp7IsA!C9Nm
+ !!~>
+Q
+Q q
+99 208.002 7 -7 re W n
+q
+99 208.002 7 -7 re W n
+% Fallback Image: x=99 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 99 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%BhVH>'W&(/+;$mOG=3)X7?"ju82MZ2BT0s@7/Wh-\8,PAK-l:Mg=fRC=c.B!(s=f=!`
+ L@36-:AqKaIudMA-UQ`Bl)r;Kb1"bff#M3p?%C\NegB^3@<_SU9dQDfkXOQoI-qRWR*1>,A
+ O$ZrEesBSq__aQ6>l9h@q"LC`+EZI\U;p=e6h)@[R-A7VJk+lTOgOELSP`go3U2fD;@?V\:
+ R@4E_:E[C\8XUJ"OX9T9mLP4/J,bsCnj^DT$DqoS_nmq*L,Cf.;qom;ZZu+QIjr`?e5Mrm7
+ `W#gU7uo!e4tXHlY;A"t_HA<'bC"\&'aq5Y:C1<4_q(t"F`@^nZ\FWO\EMq(]4%kFcZ\`83
+ IEgNm+L"BYJ92j.h`RFa>Krr3(oR(=7WnCie%KR2f&b'Yp.9B3P``c@+d=8,tj%&=Lo2J!g
+ bS?\R=Mkd#L>6%$X"N&J7m,O[29NONB!3iim.N[;40F%Y58Md?3nU^mdF[Tq*4Ues;ggH[F
+ V^GlgK+_8:n%[qtm+`!KD@-oA<reZ5QkmjQ7/$ACMs':VV_hM'IqX&cKBCfj_=^6Y)!FLi!
+ B7S_k*doeJ>qTYJJZ*f"cEF\!r1HA-@7=9JmDXQ,6$B"0'<@Ts;S*%!/8KJpLKBM1.SMS=4
+ g);s-()B=;7(0J@^(9Vu"Uc*=eph&<<#?<K-^DPqLAH3'146&#oEguE:_<$)Rp2PL'@)NBZ
+ Y%FS+T#;EEUE*6/Qr:V;&$"--S,:-JF.)gV',MTG4r;N@8g`Z1^(YkOO^C/.Hh'X$8Mls;o
+ $6k&36)rW_Q=?f@BQZp&/0%5Vo@h7"R*RW%gLY;ZCh8[b0CV:B`d@6PGcn2&Y):7cV^a%?k
+ 18dFPGhdeh(Gla*pE%>Ni8Ton;B+HKb,D_ajJ(o/6`Iq^_dS^*il+0]]>C5i=]7R__S.Pe7
+ d`Iu<Ep)6k^:<-K]G3k#LIN70@i9t$DP(KA^d*jccAB*]p1Mn&c*prBeG4fT6O/IqnJ_;1:
+ JC-?!cJs!hnUIiY;kf&&N6*W3NE*`=K*_j"%1N^WaO$H?hmM/rQ)[t>=(c*0M8e-V`lh;YK
+ ^77-@q8<\*>id`#'H?%(nl8`\u35iG]7VDnegZ\2h(YTdG3MX;q$hl,8U^7m#eo(_g^ecJj
+ 7D5Z%fC.\^7$CX#5'D_AHmHE>O</Go.Sk_-o.5]J.J."knVPrehTUEB#G)"Kg(Re"IQ^NCJ
+ j41W['6E%o>TcK=9Co^k6u(N]96k0<)t64J$J@;p0q?60T4_EhW%KIHraTC_Xt#UFi'D]^;
+ g\[XY92A@K>D<c[.iZ/7i0R-OAT1<p<C^=QF+^J*5q5R.)kUBeK,m5Y,&!qQg,DGI7&]dgr
+ p0]6F*qDR70+.?^TV+%hWC/!uifunSUVYpJ?]pb3_7i+cl0HBNW0Ab`%9XqjP,61mK5(>_C
+ 7mVTMM?iifWV9Yd$/d3&BG3@aLotK$h/`GqRaA!*?AfJ;i2)*(n4/6(9&*'rZ:W`JQFPA);
+ bX^/c,QPM]$^~>
+Q
+Q q
+238 208.002 7 -7 re W n
+q
+238 208.002 7 -7 re W n
+% Fallback Image: x=238 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 238 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%CFkc[(m_&_TM/cs72B?EKInK+UX5HuEZ.Sf)?"NC[[OQudb:WoMG@VMdUXqf&^_-0c&
+ .`$*LDq`PJbi!FYDLM=)4G3^HK4.I*_Q"f5oj$IGOYp!rnUaCO@*H,P^m;!s<fB:-j@o"pa
+ \k/&oT9A1$]u[s7ffc-<2f'AU8OBP>26#C,c*ppF>`^>\m/['cU5&uDE3DVW%@H[,0RK%Fm
+ ;LTW7/=!K@/R@+DfZ;=RKM7e/2-1f0<'(E;E3,o!k8IG1Y_tio&WBj=@QH\gTMkmno84^Pi
+ m0Y$]OHq5%1F)9f?QX1C7X@*^6Ek']!\Z4;lcKsL[nhYDqf`GZj7?o2pjgXb'GX4-!<I.Y:
+ uLVr?+Y(P2"'.]]S;.tEo?/[aSYfkSidU;AS35G(@0R^`<q0]Q,([?1c]qcHpWV85;^KK0D
+ P(tDp5lmbo78!Yn>Tkj60?nLVqd_VPXDN1VrYDfXOc]@0p%lqtKXIRH2H7qTGV^=E-Ceeh,
+ tD+>FIt2IY]>baUPB\T>#pU"g@sK]H[64cA</0g$QBm`*_R':?A`a;l;"Wl!l@P&F;64?]r
+ c)>*TqWs]pg9egdqSXZ&nN8qrIiQ[jsHF;rjF65;ms2`Em@`=aF>TC1i`O^2rZ%8#LB$C$O
+ k2'G"]SU.=&0)+&GHl_0\S+&V=qrjV%rKNW(D^KK?>S6oH[E#KYq]k8qX#^=5(C;6KFXfk6
+ UN.4[Npi)]@'mTM+V3FVm]V1:38>DY(`^K4MG3S>%BBEMa`Q.F=F;n7C7[P;,STE,r7]W>4
+ bL(X3@1\7jJL57k#Dm-Afk[r(3q+)Ii5GdE9L"MK8-TGalEVj/?/Df,WoRHJ%+^1?Gi`k$[
+ n![>(c[SfS:K6k`nO8[;i]G_q#kDEiNIAnE^FCn*`%GJi/S()Fd2emN`dBrO,]+t`iS!Hno
+ ha`;I8>eGlM$FI1=RCUG:923CNSac<CE5dtdU@Vn99M>T=T7?A2V.Rpk,Kqth"';\#^0](.
+ .<4pS%/.b5q"_bF"fk\?f(M%7`lUtgeS'"&`<-O!9tG22Zk_nOiIXV#)B]1e&o^O'N$-CQ%
+ hH1\ahXFJ1Y\EY'&4jZJ7&O@6^T<8e>Z@p039smk9D8VHhPMuH6Y+?`\I^i/2FEhV@!a!Bs
+ KeinKJ8)W++m'\o^O+3Aodb4E(;tpLDA^KpKQ]9\`V+clk+J3R=3-e']9eSb[0_r8cH5%F;
+ Ki^F7`q@:9L!H\X[]5nDFYHj-_Z?bY%^;o-RI@:g^PYFhshoEk~>
+Q
+Q q
+247 208.002 7 -7 re W n
+q
+247 208.002 7 -7 re W n
+% Fallback Image: x=247 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 247 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%>:e?F(iG$Oac05e294E]@l_eUd?pnA2A7m'XW5?XdTWT.CtbCkR^<qb0H2fg87@n86>
+ `H!%NEQ\8m,o64[&8JDna+Xl+?/ZGL+P6cgU\En,%IgkP]r2Z)cO2_WE2ZI)5(tQBtV0j4C
+ L0rZ0bJ3\kVi?ss)ritrb(D_Lt`P^)^"n)!$`7st32,P1*EGlJi2TB"<D1c-W.fSK6E]R5R
+ ()9H-m@,\:qTsYWsjX;TVU:;$T($OkskU>$5FC\u6qYO,qNB;?'m@"B+n"Q[KC0=`gOdYmN
+ [@sf9QS'FD>_St!Pa(+j;u*e<0fb*eHDIJ!lreR[Wt61!<AZRAG4mTAe<NKp4EuD;AGH#\j
+ @L*ar/dA)b"@VOi7"U[.Zh$uS=@F7KLd:?&(/dDF+^Ts^s5^5jb:3(l-bbC+s-H2r$;;j0O
+ )u>H%UYK<)qns%>9DMd1I-0!_Z1;ZSTJ8E9e;)l9sBFhr;NY&\h@?:MYIa1)%*_ICOP9&J=
+ O)'M]kt_81a*CMW1\KaYuE&d;1l4["&g>+99QT)\R%TO8$TNV?(G4FW7eHsF;iGB_]o_o`=
+ A%ms]2j+r6e9MKO!-la5bj+GOAAL+n"0g@;qaH9PCmL0AhH(cfAaN[.a,[=S^@fnMC*'+3c
+ 4Ul"PaM^ILF6j`=SO-#/,h(Eq,It=_/\`Al`.od::=f+(3-S-[K!\5(ck-*JBe]-G<$9X:q
+ 2#b?m$X9?Xi8YKbh(!p"uAF?feXMWJcbJ7e#2:AZR%2=hn)sBR?)_eEb<V.3:(a;dSf<TI@
+ IXF#>:`OdP,Us7T>VrYIV1tF"YOQhuNK>=+QE[Bl#?Elo*=KNKkP?mB/']8G-(lQ[Q].?n9
+ l?NYoCE;nPDV1\9dbG+]]D,=c8]3V[74a?4'FTWARHc-d0ri*rERjQ%F0"m=4T5L\)A*u?m
+ sa`5I2#CPT*reX?mFbRTFP^2AJfG?IJGE$ofn(b[=Zo"W$#6]hn;g8XG!*W43p[AaE"U9jt
+ `5de^4FDtD@1?i6R9+A#.M<@^73iBN&r$5q_80"ooq.U"`^h2H6F=t#4+`IO%_[&sg"Fe4D
+ Nd;:H=IJ2KU\;7;dERTrqTJ$Htl83'Rrc7NCga*#n@#tn/qsqP106)_X?G#.i,gu~>
+Q
+Q q
+256 208.002 7 -7 re W n
+q
+256 208.002 7 -7 re W n
+% Fallback Image: x=256 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 256 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%Bh4LT'K&]B;iDDp'EiWr"[Z-BL^Z!e&eROMa9<=+;DBpA/-uW(/OVl.'br$[U(E2-%$
+ q+)dPB6+20UR;1c1OokG%aCO$J%VqUO]spm?!^I!>"KHfbA/A*6rs_;ZYNB/)Q_%5TeB=MX
+ J_f%8HGrUifC#7'eq24d$&;j7,sTW8GB5N9j&q6V'VI&<dfgFH6GFUHXMUTmZ[2``F&WtB,
+ _q"u"HD5aR*?64-.2o4[W.bV[o&,>Z^*TkmPo_7D9@h]X8aqZ0I.$0XF#7o21KC@^J@:fu+
+ ]YV:.84u<8!;ud1\9\mdV.aefgmgFL5C]E&"3&68NeY/-gtWURGYuWSll!NcgFXB;5XHr[a
+ c)5<aV/2sikbjY3l9`[!FK2=^Fi$uE`#&k^S:l+Q9qDn.(8P]<*(:j"[5,SY^i,Zbfr**l&
+ #1[Pa(+F$[hf(M$_DPn";q;g=NMF(r4=],-Ccj.><N^%Ni]a6NTF_Y-&$:OmP8WK[*=)$'S
+ Lqq?%n?2UL&'12CPgAYl=U/e7'jbP(]!LQ7CF%tpc*]Y"djL"j(6?7u.-/U7.n_6X:SNW8b
+ iTI\G0kqM`O2BB3jk6F(1;4<W0*8-oHgZE9e_pAslVQdJIR5<:gAS':jA=s"'/eW&P6+)c4
+ LkA],i7^&Y4!tq)0nFn,84&#Ump6tnJ0RSFe#,t"nmrLMTs[l?N#AqQP_4D,ep.$*GOC9W:
+ 7fDOUQV"9T(&[4CM?(9(C(HX\[/V!HU\2\5/aL'inGpe3'Jt7aJQRh"+c"_Fq"6DZCDlce5
+ U#A#X??ZE=NAnAku$^K$[([Y$uoK6Xl!29U[5>3]P21-HtTKp'Hd835T[LjW#d$G^JK!-1N
+ BE8TXK8H+/AGb.co5@Ub"YHXr7A&FPnPb]?_fgRR<D`\N<0S3;eO8DLj,ek-V9/Z'NVhP%/
+ Mr$N[TQqs66D;*XXg01dk4"Gq.*9UPOEH.-$%Lkj9U):cGqj<o/`m!J<_o0P=3*;PDT>pE]
+ P5,<PS@2jAS9&r+oG0J>]o-Ur,,>)d#PH)7:d<pt#RV2-F-!p6e)6(<Kh3/-qbXXLbk.a#)
+ R7QRCtuTJ$;""L'iItmSrTm'gq>5P8):ILP_4]T4=o[jrk6gOQH0GU2rIu`cK-P40>&r?AG
+ ,pOr,)?9m^Tqm~>
+Q
+Q q
+264 208.002 7 -7 re W n
+q
+264 208.002 7 -7 re W n
+% Fallback Image: x=264 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 264 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%8P#.E'Q#!'%@W#Pl9`]t"@Eic5h_$.%O<G8-tjA>$=YD5l6<,pik-!`%0Zi&'+0LM'J
+ p%o*'g#l*&Gj51l'Pjn>$$`[HQd\[.86<pUfn.qsHQ?]FQt\D=-Be#7&o;`V8h'>LUCMVYK
+ tP0fmt7&\`\2oJ?aWnaWC4djGlbL+kE9N=C`l_1)F(dLo#=d*[E!L,6JjMp>(VNad8OLPNH
+ OhVXZO]=Lg?LVgna'G[=U*hPYifkcHSp?NO7`mEM"OqK#dBqVgI/M.e]Qeceg]fl#^j7R2`
+ V^!`d!uVuTWPQ@MIf@hCo?N@9RH;E-ipL(]4FN+XEccNKmTS?7Z&38Vea+iURdfko_Sb?pV
+ LaO/jQ&k,^4+&PQ<"FT?2s[CQd4@]ncb;DGjtk7riidFgq'?!_hUcX7Wl*MOp.qi@XIto%-
+ 5tZKW-EbE,-s2$Lm*_mbPeRl[g'7<:KFoZY)Uf%j*&W.C?fA/3Pk:']=,?HTYn?'jeR?>T=
+ eIJ?q$a?<#n3-%Us^!WioT0-oUY^3bX,*_]7tjgf?h*<-,*a&B(@?u]%3N'iqpK"sX^-6!n
+ kS'/c"(=GQ7^Uh!#3#JWoW3+&.Y[ekdWIa>()UHa)Y7D?_85+]?YOL,k&uMN[1/__]a34rm
+ <j8o_T:[M<REo;K=:k<X"H[u8?uhWFMiO)8^3NYC?bQqsI:[!m"'iBgCY**4ZCU#OqRqA3A
+ cF?4*2W@P)(XuJBW-loM2>&q8bDY>RHZF_PYJ>fKtFs1<+[K6]TLfsHEN>Yc3P`0\/5MY1'
+ O0X@q-sHaa&'l<sLn\o.,#tX+Q#"J^gX<7N!)dLq9i+lkO[*q/_[PgUCU./Vdn537eo])W6
+ .pcTX/)_a?&=e!cm^7rE)U%8jUk?;Yt(E_MGA^co)@-RUl7_SH9Hp)9TZIXYje\$om[X4,K
+ n<[PsSoi!eAEGhpM6"HcZhS0RS0AO+5Ju>LN:Ap,[A4R!#U83coH1I&Z_s589/j!8m;qrEY
+ `hQ&PD/I)SAis.7/XsjP;j!K$Tka*$+mW6X<gK7N)_dHF>fF+@(I%JK5-m7jF/$mBPJRtsq
+ W*\q?mOdCMJJW2YCLN*$<l.*597EG~>
+Q
+Q q
+273 208.002 7 -7 re W n
+q
+273 208.002 7 -7 re W n
+% Fallback Image: x=273 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 273 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$=\)P$(bDejbXA4[b#0HA9G4<u&jhB[%"(q\6P;gV6_kpE,tL]]+0rlI60gs-0dF/j:b
+ :"gP\=(OCt"Ou;)+7AV\sAo]r)+s69Xur0B\l*bk[S#joGEk7e,LD^4+&b-pE.#a,ag@%Us
+ Z"j5]q6h+D;-%Lf#.#C#Uo`XUnh9qeZuO!!E<4+5Vi(`UBYfBDS>[;39okngA#;,`,@G!(2
+ Q>-&*tr8\0e?cU-D3.9M>_EsCVM]Y,bao(B:3]^)?M4>P*5&<\l)G3ZMdXjDrXCPq,g"W5F
+ ,UFTbb_uW/E:P8hC[q>5Q-=Z)BP>2<'*o%95_'_6GN-[UPa,sC1QSM-Hgj;(+$GM;]A_d[`
+ jT`?NQ(_bBPgbi7Rj2hDr7F#Ss[=?&Gl9(Blc)USO6X%!X%EL0!&8)OF5qLA7a`B'l!7+>O
+ d4=1(?%)7bY!tgqKoD*C#RtHa.8uQ7j%TX:X1B&0.d+>dtnn5C0,&;Fm"8(/uqo>2]C.%@s
+ 4F.1pDr'R&hnM[L:Q'^Y4@,tkIR$c9fDP(M\&,sZ$>KJ-Y6:sGI%+9)DlQjN6=bJ%Y$"U.F
+ jeDNGOY^/0sSRH/DnVXG#(,(tEW'F]s6pt_elfujO.p[.99n^96p@@J`R[W:t0eli:='$iq
+ d1Q!4)4;9m_U>8_ZN_@,BL=R3EVVA]4VRFZ#"Vgks&;tUfJ/f3`f6^8Eg#);bctQaZ,-A6q
+ P&h:)g^_0<(^r&2f`mHEVD(()s*1R+!,%2/=Ek=Qq:%aSin$6k@27/3&jI`gUACg)L6W!W*
+ ?a<Q%n3LQ^8pY>K;>IPRNs_29D70><N_6a[\J/.;[h?A^AGZNUn63n",Z0,N(nbVop@MAmS
+ eG[0eEcC/SlkZ=RX8esqeG@-q.Z9F'L]kNAV?8j+o13BKpdA]ON5=#^'T1`c.6H:fIKf:0T
+ LhW,n&nFfn6SBJa$EW\?/2.0hS9dUi%YL7)DoJ`(-IipXf2SsR.#Q4P*CR=*J3AIS@B2N#S
+ AEIi0;j!.a(LhM1+l]+0HhN7R1/__RS?.ILWs7^e=%.T#$r3@VpMqJUcqM5%jQ:1b\7.9dg
+ 96'qS&-JGWk5kh9=jQ/LGK#3=nHdLaI`XFR"'\%*BsT&lFf.~>
+Q
+Q q
+282 208.002 7 -7 re W n
+q
+282 208.002 7 -7 re W n
+% Fallback Image: x=282 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 282 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%>=auU(_ej==p.m'-)$\u73H;GO?cJFksa&dnHss_KiY"GA9fV21e],k++2EJdk$b:,Y
+ @eS"c;=e9hNA5bqua>'rDjR>'C:[IH\ej]^3C[k'UgUq;u$lEQu7qVt'@+`l9\pN1hC>7Rf
+ 'qNaKOT1LhRa\+fXWbo8JsiRp"D2B'rtN6Y0,%dI<Bf%7+hl4WL_ql$SQi9jl5I#(k-nDOJ
+ `J%(O8o4Kf-eDTI`jQ%/>Ru<FB4FW6uD_X:f+`h"_6m,8t$5+#3aNVTigX:cO>IND'a+FW<
+ c:2n4NZL(;j@L%"i9=0fqICajHTTBmE:+\U*Q$[H7K`l<4^I(=;@?i1;sO.eDtrl,c^uFH+
+ 30FPh`gDZ@0@*%HPWHSBPC>1fuJe+nAc'=f@qf_h7JH$$lh?`SNGfi,.P2kqtKEdldmEg'c
+ Ru$s5`6'ba]'h[^N3oiaSE<K>WJ`[UFgHi#qN^cqmuYKSg-0Z(j[<:JC\?Xf'2>(@^l@*^*
+ Eel*U'FeLtiZf\9oT$=W$g@In++qB@[-QS6NBe^^r:Q2/>h#?Fl`p`H/Ak['^5+]DHtCY'+
+ =%PKJ<@cKqZ?4C+CPM\$!MR@6)BbRpm<@d+hE8u\AaC(f8(pbKX`U&,:RE<H<ZfAF2[V]u,
+ `k$:p[0efM-Ho,KkW##Mb80I$NS%>ZeWVBUpe`2HAj6b;Z\sB;<.oo-"9`BSC"KH&Z=U8K2
+ IY__kWkG.EYcGG;H%SuNe6fW41uHm/fsZEKnbW`',.,i,H[LWQ7l<nB$@mh"X,lVB)sRDe1
+ (3cdE6G_M^\j!ID'HHnY4%Va%+TEB$LS%aYOaG"_jqKDa_PS*g@dM=dlOK#&,i:;/M=Cjl/
+ 7TKW&Juj5d!GEh%F@p$7Uq7m;-=<"hDWi9."`A;9!QV#]lM2IWIA=>6Km5$kh*N:#B-bM?H
+ s#Me*ni(#ul\"91s&Ch$o;g50NGraU49UKOZ]KCVcHNaYlh]I4=-o#>=CR7%nT2W*!#8C;T
+ nAGW<\0(l-5g5U`MPj89#8%Ol%h-sRH#_o$E\An7Y"hSU@3Jsl2IYa[ZDpMW:T:O(79Z,e8
+ 5>`uPkW<8l+k/<E,D_fcC>SD&0K>^HqD`?N9GtGs$eCf,FTPhS$\^)Ihhrsr<@R_]t+~>
+Q
+Q q
+291 208.002 7 -7 re W n
+q
+291 208.002 7 -7 re W n
+% Fallback Image: x=291 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 291 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$8Oulj'QkR&WE=nS'e#qjK-6ta)'n2cEs`?m)?sqQPc6(lO:"PhTIH_a7WQ:2.!*6:d8
+ [?(V,jJTPT#]g3D^ob_s(G&Z2ZsZj<n,V3NN&FGIZQ/c92]jN:gY&(#Qc9@0(Fjq"R^;fic
+ Gg.r06_PnhNei8$KeoUrTld+5'[G;hu\nG+l+Q?6PA?H2%O?GFLD-[>.=2]b.N9+,(>_M8Z
+ snO"+)Sf/V<7gCLoOe;Xm"U2D[:HE.ChnJ?lbV?hWK8'RE(*YqK!Ku'cb&nI9F^\lHSFHLS
+ 84u<@L]U.>-nE3ABC_'D"T*K@'R0!'_?IH].hE;D>IVu9N\=`tb,2;Jp[:sdO6g\9L;M>8J
+ MUqXrApsZjWRb%97bU@3^Gp5NN"?=)l:M(-RQ^f+1AV0IJYi\GuCMfpT=pXQ)s/JobC"\I/
+ 8NT@<?XcYu+hbUH!5p()@fj=pdAS&/Bng2t?[J<3i+]_m]R^PRp,8E4-`QH+=p-Hl7B^3-5
+ G\[V9,[,]I_<WDg<K$$geo=][!1m-iPfW1^&tM>r.kBhV3Vcd3>';K2Ih%NgFb%F!)Ya]-5
+ `[n>N2=ru;I(K[et5,hF8d)>.![+R<ar@4j6$'gf#+TXbjYd;6=4YSZ**Yn:4/_I<1]6B1A
+ ]tG!oLZ2cbFp\?5V_UN[pr*Wg0\u*nGoT$Y.kBuA#nmsh)QK27$t*m&?WlFO-Hi!M/)E]!b
+ "QAF]EiqqU&q<ni]0b/0K#+UYW[D_2)@&4PC37N*'#4dIdNR0Rg^rWb4Sc(o&u2QAo+QM1P
+ \Y92GA-dK5GCV)<Ua[2;B*f;bRU;haUV2XN^UTJskB6=3/OIbmF`ldA,@+=!l&dEh.FA;Li
+ Q.4C<Xs]H')EGS-@3-n.G\PPjIJK;p=L6?9@?3A;#bNoAn^l0#h_m,&>#HNfdFSmPX<3O=p
+ j824sbCJBdNR<DCA3B=Ti"m=0fjLi.`l3\=D%@it(=Ne%jdo/:6%nC^uDVU=<"g(Q^Sj/Q=
+ OI88(4cA6+&aDgs'SN\EYs'pUA;CFhbQ@sQ,CB[K(FPN?/sFro=NOUC3hE01R[[kM["Hpm5
+ )u<[]R;;ZaM0)M^Cg,3U9@?f%1Zi`9H*o";?-7_$,4j$2u~>
+Q
+Q q
+299 208.002 7 -7 re W n
+q
+299 208.002 7 -7 re W n
+% Fallback Image: x=299 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 299 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$>qD:M(iEgrP,oh\9L>lCT_[D;bLXlm7[jKE,7>C+Wj-0$/;kbe1U@KAKUS<N@[>`,2+
+ jhc8VTS-YE?T#lQ3,$HOni>n":p"Y+t0.hWq_EqnDLa!Ob@rf\"!C?W^RObRCAG1b_"L+$\
+ heDR$d1Dr:'S,J(MWr4/K6I1'uM@!GdK>[Q*:R44,V$V>+a)B/V7nRE_lruMge=Bj7.H"dS
+ ;K9GN;LU_^*0+&%_?]U3WI/Y\kdNO)=`7qb7Cd`_9/md$mEA=%J6[q=$<chbV=?oq(.OpOG
+ L6)rU>e>aE=t,\R9q7]:;Xj*O;=O5-5^Y[d9@;FLj^i;^fP>B]<#Sd,j9_tr7rU/B*Rd8U(
+ ij]FdNU8T!j!?)Vb6t$XP<Y8^4+&JOJI!u5#P=!l4a^L'\M/Y+YXI/Y"32PH_ld&30X0I:7
+ 1P3,R+JBl4obWEVhZ>SqVq)/1h$+<a.P/&d\lSG>AA;qDCHb_Y<M6SM2uKqYK^P-(:9uEP1
+ c9oC2F,K*.'k"NJGc?pU0'8dYn5;-bbbTa3(^-.S"rg\;k`DDsk.)&j5\<*&#LAbc)[a:[(
+ Y@c'B9g84e,9sh-TSK3_3't%D^.O3(';r1L?oX#2/$!Qc<LpX[n$l:P3a%$9FIm<YpKqY3/
+ R:hqW_o;n9%cR%oUo37h!u^g[;))CBr4[PE:QO]k-O5crE-2oOnok`\(`93>GOEE;h/XNOC
+ Nt3LYZ$##2B@ajXYLR81-_%j9*.CF;MmVajOPU(do/'glcV_AW0nN`+%Kum1,JIa&RN,c]6
+ @`!b2<V4Q\Loq-q/<$KW1sKb5iamq3>>FGUV#fZa6uKEp43/9'".e"PSYep`qTQ)`J<E-`,
+ l&!sdnm/2cUZrDJ6$i]?DL4ffTjPEKHgkp1+_njFs[]q]#aMPHs*mgjVd.ELJcE,q->3T*M
+ KL$SZZ4^MI3*#jfp$q^?\;_`H,n>r]BnX51="9dZ$$+RN;5(niP)Op$qpJ=:hVM?NH9A1pG
+ I9"81;R"7*c:LO9R5N@rB?hV^*&01BeQ]LZ=/TZ-)-0aoGk1EEo;7>9%]g-71h:7Zc5dT6T
+ r(;N+]Y'n.J.R?1X2"75,CScC'0LQLC`ql+*u3Nm9R1+?2OC+"6mJj~>
+Q
+Q q
+308 208.002 7 -7 re W n
+q
+308 208.002 7 -7 re W n
+% Fallback Image: x=308 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 308 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%=\)Oi'FcpT*;`R]67au%oL$\tEWAD%6A!,e%7LhL"=)>!#B6>49JLNT'L;gu1l?<?o0
+ Ws1KlTGr^aTN<cp0f.=)7CKn*t:WnilnjZ[V>QkH;;?hJ9=dJE&UOp@ki$LRfH%Cg_Zs$U/
+ HH@s8a(J*Y5#Dh%]#oJAa[_T.^h_*Pp,0IA0P["Mf$oOMRBhnNZC'^sqSX\FfKG.`6]OV*!
+ <L7^^'ADZ%Wf<=E'6@D!h9@YF@6ZoeuO,[Rb9i#AeP]_6L)MNlipeZm=*&KKC=V_hHA6rS3
+ ?QUaIOHP4-GI<6f7r^9?]u/WqT$6ftGk2,bH+7o#^:me+\:Mjt3=D='o[#"'F&ORAfI4cN%
+ YgmZ(4L^'8jZMmL5'6n&J[i?2NEZ`SOH>8[#AX1Sej!b>[.D<?AOW]oB4QBR2Mt^'i+=L#:
+ 2uGb*A]<BgHo#+sPt(!IK10R54n'2hZlV6$OTN4Y_MA"j-]2?m@KF+%LgqkdIW(\[dNQ5sP
+ FqS\qF*!crD`J)]0>6q62#;q0<i[2$Bgq#"9M7thU(Nq#>!R1Ze`lA+bRoh+<1muNACEV:q
+ YT8'VUc@-u_=BWJV!NrT8E^dQE<.kc(A?nb3\uI)&<3`_QcIUg2OqP^P_:opSc6<@RS33dg
+ ChO(^$eX1Ma[l\l,,)8\=t'Y2CC!p[E$1oJ_k`$nZ4J(;bElXM#9+To)j=5TS!h+H=uL>ID
+ V`1)8)dCQYGitI9p(k0oO4%02-%Yaq,gf-/PBM[TYnuD/s;_DGUNn_+TX6'MFZ('3L'q`Wk
+ Gq\"U.e]^d+kQlbHG_gsd#b-<fo$MgWJQ9\[Smp[6.*2)Rr[3GSuac;%>>b#knn5saf03BG
+ ;B1GLXuTGhmcieI'fV:SRAaN-Vl\I:.?<\Q=<RS8%=\4oMMfFCQ&kn;e-j]CX\)XrlII)QQ
+ ]+Oa^3e'c0Qkp-?59'4i24F)PUpLW+(S%*nf=0IKJ#YI_jeN,Xn'VV5cl[XH-CP)+U0[j5I
+ 5=T\!e=#C,DbJOi"\k&bZ*?hn`.J:m&B[8Sbg+YoG_&cdq>$aJf)/?,HR;1+nNrb9D<g<rN
+ @BIg*i2WV:tYDQhV)>N*!u7MI_lWk5Cq\:>NS/g+$_!_H2~>
+Q
+Q q
+317 208.002 7 -7 re W n
+q
+317 208.002 7 -7 re W n
+% Fallback Image: x=317 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 317 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$=\+fd'PoM3<>05Ua9?Vk$WD\0$<ndB#Ji8"'pTt3-q'.B[+2D*2Q4\("OUK>_$CVuZ^
+ 9)]['VBLXDHcQ9<2c]0&6]R\dprLR$[^MpHRR2k004q%*&o63/EV;n`C:P5KC*C7_F,*GOP
+ %s1VS:D1@s80\:5SZDP3s8QS+u:d=?#ad+O8R:XS'<AS0M:q_kT^_>3]$W\U6Y)Kg24IN?,
+ 8\rh.*kRj8QEUFg,*5R1."r%m6bSep^USC2CZ7bS$6ULrNT#Bd9aNc\QpMQKaMj>,ab.8^`
+ jIrdh8P+_r1LfB6*'5La8[W]WhNaD,a;$50BTWnsnN-*t7J-9O6ahOHUXH)r6\gbpNeIl"m
+ r(U=3-'(;<i2X!]u'[@;W-01InKV:4$J$g:A4Y;/_&9XgGW>emTb!]#bIX)d\Y%+^sSo<\u
+ SJ`If10l^'p-l26_)&XeP@($#J=KeZ1EO2Ps4aVG.^*!jHi"G3k:rWGO-Vn`/LVYe+,LHP]
+ be9!5fU9?P@B9FM[fJ>4@/N>'<m(YmfMI(<A5\J(l:X33'.Xj)sG![C/Cj+$"+$d"tQ@QSc
+ #;X<MlQb]PQM%_Ui[+V)=m,6rX=gR&RNK=]^A`<E(q;Hr2&d_!"Jc,Z#q!at6>Zlo8!^oQE
+ .t6gN/2<)%AX;$#((Lg8eD2.'(Lu8^*'Pp/Tj43PZ'=.D:E$1TQXpH0L!WZ?S-]uJ9UZ*2H
+ csVk2EGaHA1;o_4<u1[qf\5mCV=dZFd`MY"L#_:,8DXV1'`7f@04H/`L&@s3RTH7aWVg$cH
+ =727"i4,K[<njS7S/oa0W3TL.Obj3!TY&3lj!>B6*,h"`M5ViEKpVe>uo3p$5ISKSg+r%+g
+ STY_2'!fXFZ:bfm/V,eLWsqK26fAVq?r!h[f++iaHX6sWt7o(1rI(G9Ch9S7\U"nV,9%>^"
+ _Z=WmNa%(QJ1Ips*14hadS8Wh(Fh=k3,U\M3]mI.!BHsB?[;ZS[i7(_O`MupYcJW(4Jq>QD
+ o/ZiWA-jG)OdN)1[VV(c:^Io*\`9Uq1<'d?ZMB!YAk5<Y@Ef_@PF79?4IeGYCGH?:1g2+%D
+ ?#'e\ZK)Dqu-f$PBONM%h9XK8Vn3W:QJXj:'rA)/kVG>P],F.d=28T]tI\r`hgeIg]H7Os!
+ N6q0`8VY~>
+Q
+Q q
+325 208.002 7 -7 re W n
+q
+325 208.002 7 -7 re W n
+% Fallback Image: x=325 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 325 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!TT>=auU'SVTt2Btd";%4,%OFi)2K1-;K8q@H!8/=K[Pa8,n'tSuO@n,Hg(F^Rs.]oM81;
+ sesYQVQSh*W_N;R).FRX**(e_4RmUZIH`>Dr+B_jp>C55S]6rIA\FkN=3'P21#"j61t]rq6
+ e.^Z+V55EMA(m@Bg3l1"o2gP_pU]RGk#a8<qiZal]5=_VejPeZpNr;Jic]YLd^IH9neE/V^
+ +oD.?4H[S%Z[KkedCMRqU(:(76mbMY7Rr`^5I9^#4TD.f`?,,7nng3#D4<a;2na)MkX;Td$
+ _._%i8qhr"hQd:i&#,]sO!!E*(D"X6T###+8d^k9K>B7.jH1\-/7.,?I612o_!TliDYAb=h
+ 2V=+Oe%L)lS2m=X\tVaTtnIV<NC)s!(ooSl'&_9^9t*rE>ja\q\E8:,!?qs=(:1-<:rnZ7i
+ S4u@5d0*7;3S:e(P.q%cjhK7SD*E:S6(W84iqD3aJud/T(4JqG!I?3c%?0[FEROikg95mDk
+ 9nq9^FtCh>$FX^`mL.;)ACOrb9hIJ\!Z1*/Q>b#qD.LD,OVa&Q7kAJ>q*0+WgKA+O;#7:FW
+ ?3<R@:^1/B4]+Ye[SstY4,*\GSq/[pJ;D)%KVKo4.d^2)RS/lnj%)u1O?5rp4]]bDeV8b%9
+ r=@OMV0%21;oM+orVX3E0t<T)'c"5t!>Z'//3uf4`f3(VGH;]?C2%W@k04"krT$Nf.h_&2U
+ 'U*eHTUNXnDoG9@cpLR9F(osNFr_ep@@eEpMYqFO<Mlk_TeQpo1&(*+94ED`6uOnNZ^%ggc
+ o46`=U[oo(1%r5$`n"/PWmu.B'80=`Y:\:f`>BkHT@mQ7kaA..m?]QXk%'=[>>U\59>rP9Y
+ bnmaqlHT`Kk$&sun4auE1detZrC?'<kRJ,_!n;&XK=O<b-&k/.EO1.2&b)4@H5)h]1FFNk8
+ raC%Q159KFcfX")BQ$LY!*E?#_"n1.kHUp%3@b`6pohuYXk`(S@NZD$kV+]eN7kn!\QqT2'
+ NQK[2@YCqSA1B.s`ekLo?2R1]iljta0oN,6+g510YcuUEA#Y!/pbci_eJs6@Vr[]7iYBb0P
+ M"s:+tt]k=C`Kq^XUbVAg;B#UdTsV;4J?sr7*<DY>3QR@?IOJ$lf)c5.l5$0W=k[[9A?DV+
+ _k4B71"ZVC$c~>
+Q
+Q q
+334 208.002 7 -7 re W n
+q
+334 208.002 7 -7 re W n
+% Fallback Image: x=334 y=152 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 334 200.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gatm:=\)Oi'K&Ud*"X'[,0cg[W5oB3e0IUR;KDVQTH]8lBW_l@EhJYe+N..t&0YjJqM:$kM.
+ S?!as8?4S;/)h<bq<&Hf$^?4`dsDmQ5XKFnSsbSHhim*^>C9M1WU]M%YfKO:[+hrd9Z`9Fg
+ HZ2gU(^Z]05(k>)KqTs"utSS2lj6WY(uU(l>7ZdIZK"S;,eOOVe<okQ[7+F*ZXnE:I%gjkf
+ \_OR-4gjTJ5dFa8!mr7G"/mhXuodW9q'j>Bgfp#A,is3;G_7b1D/X86n!>V&m/'NbY)+Vm8
+ ks7al.*TcJ_1N*-]bT78e'Qld1c+n$r&KXlE;2,]UW3o]L8e)dk3^o_VId0CiU0u^Ag0D[5
+ !EIqG#i:%LhrE/V0:Rj:UkKQa,Z#%A]k3LQKVHq+93uFkjB50ED1i[qA1q(E96i_q"b_$Sf
+ g6>HhLk'3k2a.B$JbnNq@Em<M@-5bXjNgooGir.-'o3]R5S,EhoO?dj@)\\T9K<Nh5/4$ZP
+ ejmba@0rq6dA*>fgIZIRMUq!^QRiVI[2(ZX!o3M=/Q\@H%f$s6Wq#n@<Zacj5Z;'q+Al&bG
+ GTjDX[/1m^oqtK-p)4@%.cU9[(pA^QJmBLgd@UjE=#]b!+o-QYMPYV3*o9:\CFMs%O=MJ1`
+ PEJaCL:;+$&k^/!S!q4>%PBA9\Pe[\g4d1%4FJ^QckNTTck=Qp(GB=_%NH$CM\\mUdqKe1N
+ Fo'7]QnP'bEn.Re#0#coI=En*&PZIjOVl'"a'/PG411#^DN@:['eGqK$:UEbaEEjK"JYUhU
+ /)XIie(9UT"Rem99DW+g6`<f8uFNj1K,lW8aso"*Lp6R/&<Q)qg7(K1mI.P*7,i8CLJ.`dU
+ S]k&<V;*&hGRHHNjq-&Hq5FNj[6o]ad;mV)9.;3I(d;8=bb=%bp1<EUcZB41/_.9!HiTeK\
+ Rai<"HnuG&[IZt5]9Tqk6MB54fmhu\>`dU$3$;O:5[VZ9[`mU\m/T-lVer@*VC_WL_!MaSX
+ )FQu$mp:h_G+7*O`dSomX=T4fc(!h+B3$Qi/G<IU4?V]#eDM!(kHA.NlRU1@G"=+2IP_?a,
+ B_hV/Y6T*io71N"8r(MS38.1]X6$Kk5p6,(`n\h>Hi%<KK8LohHiA->ISS2K_TEM<lDpaj$
+ lm`#hW[Z+L=_mO=OD>bcb?HUdPiM^G<`f+%JYL6/^/;W)QFM?+;"_*>m-u,4g]Kj&JG/d$]
+ !i+^fsYNqaCiR5?bA/MKAe-bXs2iI%nN~>
+Q
+Q q
+108 171.002 7 -7 re W n
+q
+108 171.002 7 -7 re W n
+% Fallback Image: x=108 y=189 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 108 163.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!$EGt_.>'ZN]P.RZ_@"fr*]6r[Ec#uMArQ5JYJ(q7G;7)^"i(eos9UbDrZ(+@'1%0BI!=_
+ +b`Z79A-Lb+7RQ3#-)ACq6#LR+c5SZd;pSOZ2;R:cGcS+!Q4F+<Z8F1u^%^O2Gjaj\]V()D
+ RTm-Hq%olJ1Q]/A<mAL'XVEk*&!SQ;ekX8DPWS[,&eV5Qp.&h3DB)?k^/NfH:=(5-_A]^Wj
+ -9t@gZ,1/&tL"P$]>2!7d44_kJ->V.H.@9qol-k62p[Yu1?[I*2H[*37I$m@")p)O6c?Nfm
+ lml.D?b\5cp<LF"\+nq"lI]4SB3i0^q`UE#\8`bb_M,@\-^,&_k3h%En*\J@FsaH7#'7V4"
+ F#&<Stq%q]+LQZi^Cf^o/TmU8cf+LbKJ"<9lFqZQWs%A8aaim)<]9g3-OK1W%D5j2f)n"6&
+ *+Mdj&.(,@"M!2f4H-]K+]j/S<%`UdKpcc^_hN8fg.ll^>cu#(Fk?qS;&(4a;K=+rG[Eeuo
+ Ti]@N<80c#nZCfuRX;on7STki54X]pQ"7;UbHFRW\h`J]HEn!Afa_G9BN"u:I5GdsT[=N9B
+ XrVZnkSfi)Z>_8:q&$i\E`lcFpp9V%3=M-V4aV)61fYJ_U`<u*A*]S[4r8?anmAU"\CFbf8
+ V9sBc<M@?r;,P3b[ulX])@[8?U.'N1W\;J@#!R`mSGQMpitZB#8";TcbNhN?34=$3<ha,8o
+ (9jg?Xk>=+4JZr&H:qC81'?2BPYdr\<(,cVG[k*>?_6'&8A%;_%h)A.G,,d[_JG.f'@GAMh
+ .1[k5>._i*]Y>DV$MroYnt<31/ru/M6LS84CbrmB8-JOotnE#mAmEdb-W<2E$IU1G_$PME8
+ U1eT#TG>IRr,hiD9B;CjmkEY0I*hG?f_%HZX<f`O<97RjhC`Rm@71,:XCp!mZmF[#Bl-''.
+ G*^:.piNbG409o-Vqc[/-/7",ALXYLDJP2+7Bm`%sO=V(9TMgVaI30('J+AU?1Gk#J$e*,8
+ LZE3BfchB,//.SF8&m!^\2Ge8PefW>IWtEtoX8TfH[@N3@29a*LaH"*L!kX-2p\(h3bWTCP
+ ESS<IHI3I6_5,56A[cR.PU;KD:+n9.7]Dk)?"Dg%,%LSn-XDmBl/i/#<=adgM@c;XbqQqg;
+ u)n__\M=3YZNnT3qHmH,eOD(a-'?mom++Q@RpKAEnD%KHV1EK=/F.$0+@q_!8i)m<q]'bln
+ 88ZJ"GH@d'MMK]%XS4Zju@(1oPC&<&3PnaZFsqWV^A"csBC*9Y-<6p`RsU>4Ou[r*LV\8NG
+ t?PO7GCKVOl`Wl`'*+j<(q8o86oQp!=frn6%B4dluk[2PBUL4oI9Nc+FO'I]!"Chi5btfZ>
+ >SGA"8BA2Sp`(-)0jDY,&afMBC#h.K;RK(A22R0W;4(rb@>;[`b-u<ZC@fO#^:pb=RYI?&M
+ MMP^D56TOBZSK=A/eOJbTl.hJ5kR]oiYE^,pu%sPu)lu#/9X^)b,p7A5jQCm?,N+JHIXZ$/
+ t32^CWbLD1Cm1\JDi[;6'qd8sN*$=^=b#9.C)\K+!-\5KtFj9/+o?j<P!lNTO#N[<RM"rkn
+ bGs-**pO_75E~>
+Q
+Q q
+117 171.002 7 -7 re W n
+q
+117 171.002 7 -7 re W n
+% Fallback Image: x=117 y=189 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 117 163.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!;bCIjXd)"-O?bfh8*:!G*7N.`eh8bsg/+u6)>kpcrbAlKHVOgfGU]VX**ZtO3W<G#acD(
+ __E9Pp2penXfB3d':phD\Ms%1]"7QMJkEo0^96c?#TK^<c\JrVSZ'a.Q&$PY)n6iqe7YH@\
+ ?,j2j9NRG]T^/'lPF(CD*f^]#RBW+p+g"p_-O*S&\OM2B*mQh/OqkFOi+kO8HKfWgk&`Q==
+ 6J,inP&HCb/U9LlebY3.L#F2j-]H#gM:RlZMkYUueI1LaRd^F'A\3C_XWJhiZR(IOHI!qV-
+ 4j#j1Xun.ITXE<PZf'9.][Nd"I!m+'gmRNsT"K%f_p+2"lC,(g"+pq^f46g!b[O<#[V_GEG
+ Cu2#)#-VGh(m[(X=O[Kc3k+o+$L)Z$#A,14#t8A3lX3?`7itdg=[(V3B5qYB!LLdk07%Up)
+ n[8f<88OUjV-?L:Y!rb^GJ1?XLLH9MZI1]Ct%+n%P^_D&\sK.ot$!Xm&ke1eZ#j,teMW9:+
+ M@[`0lL5_%AA]ng`D9M?Irh,IWAdbdi3rmBTZ;HbQnbCf-tVbX(8H=D5cKuHc-oC,2,_WK/
+ TSMuTPI,Vr3AnI0`(Lp2!\oj).mk;1kV(s9jZ*:I-WbP50VD8\ToY<0*,pgudpL"LW--"4?
+ WhM$r6"7VL@:FgUELkjm[WaksT)&2I6q2XNc#*LMTi[p)+!.:7j.Lsh(0+XG%>uOHEJ&E'+
+ N24#?9Lkt@1fqU_%^K[;jrtObc4YL/hR[I]XVV"<%o/f"b[TSduKDbRITae^q^JW;ShN@@^
+ $rmJ/l^OAHQOt#U^rY42W*n#-+>Rab8U2^-3spBsiW&5pXk\V,trMn1S%f3H+tY6L&PtUs+
+ qRbRC1qB+ih"cg^Kl?A]sO5%\F@*WkUZJe0.D:PDRBr_J4FM8>Qu(<jer`XE(Le)AU+[<a(
+ ucH^F.4*u<BR(dtDV!H7L&a.84rs&H.2_g/Bl]s,\?F^[t7_n&5f-B5t+K<jb9V@"6S!uKT
+ C76F]Bj)F\M<r-/.(;e#g&e6X[cAJore<n+]mQf,s1UuU=*Jg+f[sTqFLk>W>-1]q2)TN)q
+ GbXMMaKkZrQpZL$1?@(TsluW&%Vln$`*m-6B?\WN<^67PJb)In@V(9HlF/gm[(M-CW`MK"D
+ ALDX&i^c>]$^G$\\Ss',2B]-Q?hJ1`@@]p?is4!P0@@U.5g"NuUGGJ)PEF[bC7kX[[ps@cQ
+ @6W<:+Gp[kFE,Qn-6gEFA-K7[hf.Y?THZV^s:.-L3l9^&*&!d&[?U91-kjZGV:>SaHLQGo"
+ T8)sFKdaV7/Wp#G;hnRKt).#Xil9umFXEsLEW+IdcR'!ctXLFn>i0g24^h'bkNl=ctKg7nR
+ f,pU&A"abXR2n*ML[?JmAS#GB<2p056=s(hE99AJ4PbOS?n)H"XiICX)UaS)_O:Gc[(.r@!
+ CA@Obl~>
+Q
+Q q
+125 171.002 7 -7 re W n
+q
+125 171.002 7 -7 re W n
+% Fallback Image: x=125 y=189 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 125 163.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!;bCIjXd(bQ->PfbQ%d`hPrAjli.PR7bTU4P#iUO*P]APj..p;<0-jD%GrflErM=.,cDRW
+ I=@0.G/6c:V`uH#):!?0>d:Xr\7j5!Pfs^Zt;B50eAtF5HA6TD(ACrr)j<]hM4)\Qnb"D/E
+ <SND0%'/PRN,>Cs$k$.d^=Anl@,RYm$X.k?T(,@os5r;7`K-fb&Gl/g)$J,e,5cR,8D@0p8
+ 23@"7h9+)$H\99Hrao(f/q++j7R9;,*AHrC8S36W,n6s_94`T5c7rR0R5VO):=0Yu=-LBT[
+ Gjo,3n`(`FiU_i9];NY"]6a/#l-muPmsj]ibObGiX^99Dnp7NTeH8Un8\g:OfD&QgDo(S\L
+ ]k*59:#ufXJmp5.hlQ7EHuYPg;SsU5d4s$q"!P%A]qT$DIH2)Ea2kj^^TACh;';<4<A@ln9
+ !R%2h$5EBXCZg5V86>"pW/m]#mWFC8um3cO().ET@DVZPP2#F`\%7E4@]B*n/u;%+a4EQtJ
+ 'WGh:%dC@0_f#7dP:\an_YrMl*H`koU?_*Kht:ORXY6,AnS0AkU"SUBc@J,O\0B?Zc2\$67
+ -2=&i;RC!hf#[dl.9KP<UMOYq53g=^WAq`cTT9n/1;.1Fc-8Q1>[UKllq%+G>`ns!ugU;He
+ (PaVFJ-\G-@A[75@ifQn#'kh`$JB5$[8j3menE&m8'/um4[$K<N@e^Qb(PGl^d-<(]b)brE
+ gA8mG.Oe-Q$N(>AE08>9>l]&nN1rhG,<U69gqK6%1NDVD.?$[R2MVNgtRaW5l@Qjda=g#f<
+ )s1]?\\-O2?i,TaE2&["0JI'qZ*P;(702d-JqdA")b#$ED))+tcq8&-*k>Dd7L10JMk[BU"
+ m$D:sr0@;]tFSt8`$lps9`Y)pX!S<QG2O;Ch,Cr)&VYPrhNnJhD<k@o"#aXKMNI5M$>Lk9R
+ V&*,XmeJ33smHuqn0^S0oCi!cc<k#03BKq''&8Q&,T/D*^gW9aP3NfOK<pV,WVKsZo1Xst*
+ ?!#WU?=&tf/*HHLm&1Lk6+`*Y&'iHT5!Gn`Hq'Zu%\\'rf'7B=MKr*f9r='PIV?#[UB.o',
+ g*i@"1jrr*!3u_]AQs:@q&ieT^?Z3JRV?;)h]ujAi#GOq-[h_)@(*_qgsmF*2;#c+b4a]%1
+ \+-kYs$[7gI6Im/S%(JU'@o%$Ltu^p4m9^FtG$6F4^Kf`JW.OE0V#;Ls0_hqjBY=T;H+o"Z
+ %%&3c9k'SM.TZjFP$@$kV?,f+N<?bm\@\uI5:HSLj;\SsiTr]C4W#cYVMaP1g(9dYZ!`eZ\
+ 8K$.d\-;_KgQGpl',48:,-rt0C5jJ37Rh8as7Rjpb=<8Op."stfpU.H*"O9KA@`t15OA<4[
+ Rp6GD1*AIX$uq^EL?UC]c&bkr<ngJWX]6bT1maLPs7h(q4.9WtQB-%])%?<$;8&P0j3SA"6
+ &X3ia8?I.+3VqCCB~>
+Q
+Q q
+134 171.002 7 -7 re W n
+q
+134 171.002 7 -7 re W n
+% Fallback Image: x=134 y=189 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 134 163.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!<KIlPr'*l(#3_dEmeQk7X_CK8H>?*`.*8XURK>.[Lp'@$@#q(6>lB5NEWZQW,_[Sc$tkP
+ Rk*go@LE.+[h?7o;[.OA*PG@qOTlR@Ru'20[C7hOjOf?I/A,muQ)`rI'1Pml/&^m8>>Zqt`
+ d"h0RT%2V?G5d+nPlZ*BAIcr8EcY=mJbS8W+'-YP`rWo>+3Xg]d_G?o+c[]ZmM^4,#*e\Q%
+ Q*k&L@C2\UUeb*BjE4K('PC6Y<g%"=)fAbh[%NfTHE4u_j^<@'9o8bBj:!22_1!_Y>kF&"f
+ IE,]8GB8]:`a&l.e--'I%j#Nm%r[JbBh:q.PFmn'dP,k\(#c'uCj+@#4VtcDb-l+8Ed#dak
+ f6sN*,QX=Lj9uX@A[MNR7@qX,'`f'juVl\F`I64_kWC6WqQ2%&erieQM1:=b8TO"M@(>E;c
+ H``rr&+oG*T`=G+RMoWRa7_[L<O#j6g@:lt)\bZ#<Xn61al)[HnQFCbOMHU"nJ;b0Q+j&op
+ ,YiBLgQaQ5Bk?,ad"WN#[]._WNR*??re3$amf";sYr2TTpj.p(as.s]GpQ,<meRX=u*GLks
+ 4gi1&1USDa>B&`<74$#4BpeG0jc0a:k*;7A-]*n#mGXf.##!Vp_EUQ_]f970'30:=gC1d^u
+ %OS?#cSdL0F`k[<fuE.1.kSHlf_Fgi4cS/4lff:%Dso,.^RfQ.U9EHe2RZ-KR)'J$0+ulf:
+ i24ReQAQL?&?OI[3DBE>;H\I93aB)q8\Sd=]t]Nroib(;toaq/lkXV%#f=QIp^67jdiLNJ<
+ OLCqZQcH&#k=HZuTsh<uIr4N>_#$,$e[B*"Q6c^b^*ooBr2#&P70R98:1GGi%%"*$*Q`MoN
+ eML5#m82[%g1?N_CmE'A6nPeG\!lUiU19DmKT%BD3M&(Zj][d3((6pI2Nl#V0kTBbFA3mZE
+ <omSh]3\$_mf'!j*80jdp)=IDtE4WJ//=3h+50P4BAXMYV?+69t%2DU;cpQ+gcr2:UX"Dil
+ !!Y*:GpnHeX[t^'[mi(CprUD>XE8nt-%$sL/E`Xtf2a13AcL^WXSpNW<q3WHcIlp>(_Ht[d
+ /6\`l(FC*`9rVL\fJ/*2WI?H3o2U;e%$XPjls6)ZFeZV&6_g9=rE/:!g0rF$M-OI)png>FC
+ PIm+e_=[>#7LN,%K,`n(T#",H=k,raq,m%.jW>M%KeH)Wi9#E<s,OU]&pZf,9k+U.-rg9gd
+ r/,fPk,"G7/.0,)iNJaQX6%_TbqFOq'e_Roi"3>%Y_U[:5ndKLAuM<aW?pq1^r$NcKj_/_[
+ qM3!g["u+'\#CNAA0td1"o4QY*bMfRK-^54c1,ugAVr!$\_]THQ'?2J7%O$NE/D!?XI$un/
+ 3/oUX-P!7&4tn,j0XQRo[78]FCI9A!QS5&1CU(6c2OZG^i?i)=]J;2Ul>)=!"Ng4B#Y;*c(
+ 9aM@/Jpf9k1i/O94#cbheVCE*m94'po-+"oaK0<_8D&Tf".*4/Iq_mc?5?'ggku=5HdQhP6
+ b%qZSlMp?WXmt/mc.ZipAau(d%adq8,'RnrXNORaO%epHrR@e5XUU4t[<6QTAqb18Z_h;^L
+ .$q!=;Q2_27+92obbTn1_C7)!f%1kHr(3%YdL'YV164KN8:g?)uq/r&!q"cK3b=tB7;'KQp
+ GR=n@1Y$iXhjV5"ZW[g"^!9[&`2Hu<8Y,JK-4QlS;?8Kddd,#74<H.LSKSRIjSR>q0L5$%`
+ ]d4\VWn8):/EoS1Bb@70QQi-f8lt6"k]GIa#m(/N,mDScKn]fAHWS[T#BiZFUnp@j.!U)kK
+ */3[OKUR)i-\GL.r@,$Tb;#&e60ASOKh,_C:mrZHHF;:gt^idpE;F1:7Zu0Qf."#9lj#<jQ
+ &Qm!X&a\Nt8b3_YSEG2f0<>F@<X0WG!2[7%Lbs9Ns6KXj)Q<XIZi,Q.juFLBmVO6UV'QVCK
+ K$BmIrSPJR(db(+I]%NGIU?eDdr2S7,&SJH@(,$d%#)FmK-8Oqp=UWo%P\li[dH'c"93++B
+ mV)]e(U8+!Ye^nT*nW.3k5[kp*74AneAqU,1nnme&5;pJ;DK$M_f\naIrN6bTcP\rcd69c$
+ c9kD>E&\CB"3JY]:]O3as8<(?WXB1X0+Tfo+oN(B\#3=5c/QjEO.KOXI!R&)8TNmuA$JtQP
+ @&a$-96&IZEk]=+3pC-Z81A0Pr5GDE;SR]4YZutj"NBgCn/mM"`)_QC'<Mk)9eZoI\:3W?Q
+ Uma*aZ]XpZ.2%:&I3SnG.-MnNtpP^UeBH)]Sf^`YU<-qBs$tiN?GB+LlLmVtFs>`_d*~>
+Q
+Q q
+143 171.002 7 -7 re W n
+q
+143 171.002 7 -7 re W n
+% Fallback Image: x=143 y=189 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 143 163.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!<MHVdX2'ZTm1"NUZJH%]-F#R*Xe!O^IGU4?DOK/5!c5mtC4=95O[8>mp\O""NiTN+HXYc
+ )u$U81*V>I?.e/$2XEJnRFr#'l#],ihBh:RYu+[F>/foD@_;Ic#?FG5'i"_#JGR7n9DbDY7
+ 8Fnt<8XIXQXrV+[@:27Lni>JIc!Ek:[2=i9@L`pZP>N*qL+\:fGdYo(Gn6"BB6X8QmPUB:V
+ \aY0I<f&Odi7&&E&gVr^Q(PT_IdEuSNKu[83q_VQB':Q=I8Zmo?d/=-k74#"CSrJ[pf`e&\
+ /SJro95?+.l#1K!:R4.mgm".,]kPqS!l<ROb>0]r>e4</_48KtZQ`:qA)lH;M=oST`-J1($
+ /R,1^;B6i&VY9m:kiGdTFi9nS=e^5o?[HjF%oop=0#DhLP-Z=o?3U=.%2'Zfeq_ODUo/mK.
+ EM`N<m%^+1NVmGt&d@(0KqlO3)(G(`.DlUQ;YBVn`1BSu`bK]^tgJ/VahdVkd;*s*f64n6m
+ E29\6`dS_oF6:L:me$=obcZ.,XiNW"lSgsqg1o8cS;Nlb9u;%:-\>q[ViW2q!(l7u-V)]?I
+ jBWJ)AR[$mdEFW-Jclk?W[)i?<C]o.O4`_L=B@(Efb[Z#Ac:j;('qh58_ZQ)U`5Gp(a_<t\
+ #1)i8_h[Br._34\`f9Dt\t=k;C:;'I"c")Unoh88,8j@:/FpHQ\gc]p$#che&M7q'<R_M%^
+ qnW-bEjap-R@P.EWg`Qgq<HW^Y_.VX&KSc]o1jOj_)Ln1J5O8Ap_`t[,\?#-I&G1GGgn"a;
+ kr^e;k"$`=]3=M>$iecNP]6UFrBR[%9=:Z%JU<A'^a7-gT8s=^U'*GB[7kXa!XhYnc$fqQ(
+ ;j`@PM3qpW<%U"\j(NsQm#CB3B&4sql33G+n%6qKep[sO%ecdrW`^FtpEnC93g*nTXU17<0
+ -\Dt2eMqO^EIQ)&ob_.C2Zk1M[?UgRge]f9?7bHe$,LnZ8na-sY,LJW9BNG%DOkJaLMN7Q!
+ BZFDt-;C`[#C\C)QuF4$?bFoR2k$'KAp[pWeQEDdZOM2s+H!oO[3ZG]g9nDk.epFoYCA.s6
+ iW[8nD^0q$g'H=#QYV6@p^TJ:+,4;PLI7AC+?d<-1+A]6mF0B))Hl8F%MiKBp_19;2/PefT
+ ADBF'ch?8@[`H)ej=?=5?D'O8NH_mTU9k"jnGLU.26+aCN`D,HW@Jb0Ya[s%[0h!K;%E^H7
+ NP#L[0Z*cQoL2h</6'=]2*ncY:UJ2.h6Kh2JU9lji-1>tpAa/.U7[('aA8N;qKcO2h1&Ifn
+ 0'?7J##mIb:T;+ia1T_=MjuGm>[n[0K3T*X0TjD^eG@\DFfpnING8H[BNJtgnV,:Ff:9\7b
+ 7WHP@-_E=j^2_C'>-9\3dJi,/BJ^C:cRKYlILQ"kT<D4,VCP]N;#'mcG`GBX[_eIsAjP\*P
+ HeXR`c-dt1cBEd9!CpmIug>89&8;4I=6k>$""q]gqF6Bc#BCVQ^jiX$e9L3lR#EUYcZHA1l
+ VYr4u%?<P-3ateIHa@c`+MF0[7l`R^/-gldqi*",;OW,g0`Fe-+=POIr_;($ZS>lCFL</EX
+ GW6V"W4;3]p"),$L,ZIH-^j";qq'VsV+VuPfk]iY[p/Kg0L8B*6]X+Tt`fXDCBXb4+?"s+:
+ %foC,U>,J.MR]`rl]`^uoQ.gtp[@9!:AI9tn#TG\;rr#Yj!VQ-4gH-R(E"FKLTs,)+;^!Ut
+ JqLno)dK<)>b"d=G,#NefjrZT'3I<M.sT>h'_qGg8-hURK1H-#&&Yr!J@fY^Sj%j,V[Uo-\
+ eWetJYc#Uh]I6DBmlj.4^I.jgu6kUL.l">jX-V^226^5!!j$f[;04*2TX0%[#J:,5+XlfUI
+ QIf)2(<f#[l=@#RlC^DeeJ3.0F2'ApY'5nesc*s+R*>&5LOB;ka8'I(mE0)[e`O_QdUtei"
+ Zh^Xf6XY^8;S-,Gm!L4)F/`(KD(^1-n"c^+eEKEXuc(A8]`&gqZ*"d+oO0j;qkSdm,C)"-$
+ @:9_/Bb0$Be(lF4/i'GH+J]nPIhR(\daj3A3dTp)RN24HdYf'+<6:#Ll6&ZR9iW[,5d*jco
+ =f[7=&]"DhfXt0u\2efs+$CV4mEtVk;"raDp2h`iE_hOU\:apJTbo@p6p$.]9D?1BIfeJ(I
+ +/~>
+Q
+Q q
+152 171.002 7 -7 re W n
+q
+152 171.002 7 -7 re W n
+% Fallback Image: x=152 y=189 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 152 163.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!<LGu0^V)M_*(G/B](83mE5WZY,lMZn3aCKXP'Y[UlL7AFN&<s5M(Jk?VPdAoMuB[Hl6\O
+ )4+_DMUa[TA^4%b)\1#`=/R&jl<R]dM7E5b7o31XCH4be2j)rQ]c8R02sQ)uP8<QVC1;Cj(
+ #>D:b=?c`4":rpW8olW-qeFlVSqFbR6i9CMY\\E8:;G?V0,DQg#*]QNOCF`gb[:!^M"gr@@
+ -p3*E#TPj1Ir:oH]B5:sdX-h,RIJYL;m:'qeIX0E!gq\PFre[WS9L%h@Ng%1+rsji6g:71:
+ QE]p#4";,,gL#>J-T\j<fWceM-'PN>X./u))qdeS2a]s9D;87QkP*5i2.*u*Ai]Z,[K$/d>
+ m/%l@?4+q_^9A\.,1\RV4ece!>ehI(V74c?FR'g0T`\R96F4`_jm6R=0MUn)1T+X/?CZNTZ
+ G%2_D;#KMnPl%CtiM5*CMt,8B]^P4#P!#o6@-4Gd7eWm#mV;Y-(iRI'=C,IW&iRT@W#]L@f
+ RmE&B'-P+14Z"kN58ehCc!JrLC+oa3hRMPd'dHkg63&S"S^Yd2SrEr+)-n,(qQfu_?so($b
+ SKd.i-k)o(L]O[)po4u,=njZ/@^5GYHS@Jla4LaU0HY[1PONWuR/#RC=bR)i`\DNC>7^Ke<
+ Cfq(8?Hm$?.<i!u]aYE[*`(TSna\"#_1UW_hJ>/k!jCG3.p\2TR-rT"$mZp6-0AC)7LSj-R
+ cT4.:WSAS[FZd&CsLce.1=p-HR'Y.R</E-5[0_"E`1^E(`jarp"/ALpE,pK@keI!oN7_Ba#
+ Vot`)eJBM,ZMP[F%hJ1j6glCG`?*kjOA)Y!27:?*]l<moWU\7HHdM/"X@H,Z6RZGeA#KpJp
+ OC?]&`+B;T<gmu=X^fP2DjV3ATGFNXf0)'R9^$],=1>(seI7j?2:J*"9?E``D?9MlW'_&.s
+ F*upM<,jK">=#<*)_WcDl[J"?OhC7>MVY.Z2C>(/n@N/3."hi>QY;(?:#\-/:G1O7`DfgkF
+ )3so8oJ_+lZZC$X5&(mnNCinmKj:cu^670..8'L%e;e>7?K_'2R'rE/A?F^6#L2gb`"jrCd
+ m/Mo9OarR:-8#P&"S:pj-8@-'4T`P:Mfkcmr6O9A/5FOL5^dBe7"@9]+j(?5UCU;HRn``.J
+ b(>a@J.I+l_L(>`>]L;&R@hh4BCjFOAI"jLpY:fGO;>1+Uj.+#SFrIPsPh$rJ+T&Wr<2,ZE
+ p%5q;^?bOKf>UO$1"o4Xn]^G$=`KS'%p;(&Nb:D<BE#kd3N@P%W&VpRtD#3Z4s<a8!\:JK5
+ 86e&/nGjfcQ2>T!`%F,r6k8`LM-H$sR_>m%A%HAcKO9-Te1q;L*BET]\&-e(!>T0lrN:`?(
+ m[fTc!q-hNFL]$Tnn\/f_kTMH@s6Fe(0$lfmY!JinCILiL'CLKdGgW5nSBcPCYa85N7"A)?
+ JAu[pc.2113760[(X0"d]E6;OsiA3dV#[iJYe$3/>VJ8[7FbY.dB)OR4-V7'UfpG4tmeVEY
+ 4"\:1e,FlgDl@H=1+\Ao;5u)M47jW2WX+T98LIQ[4*325A8&.8h0\M$?O0b=j,&[5B36H4m
+ 67bgA`Mq'KfjMY'+a`M5rMfa1"($o=4XCc7ND6:qT<KIB'*<`1?=UTMlgb=P+@/2NE]clgG
+ Q[,h)[b/K:'rr1'-6csu^\9f$rSBmg9mcoC]$HUJGfN8Ch#%qR&2?lO+>[Ku9)`L/`%3/JO
+ >>!;,)&k)CD8F6t%NL#JVr@JpW36H]D=u<(!EZG>acjMNWm#?u0Rl8gR*4Vi75RBGM=.l7<
+ 6Bl^M-upC`6)!:kQlWd^gKEB.cArZ<A6Hp_q`tG$Cm1XHhXPaX&jqe4a^on?+`F1D8EQQ]h
+ rF9q:HlA^>1"'ZD@nuJPLuk4&qK`YurUp*hHeXC4aZ'Ll@"k0U6q>3`rcs>ZOBs//L8t).1
+ *kfYQ]-B),XNm7'=GkHAtC]DY+UjTPYcY\b=I6pPcJ'Gmf.KDK8!L3)N#/e4VM<)X/6L!Mr
+ 8T_4K@^3mNdW3>BW3rWH(!^>R[pf+UT=L!!!KSQW)*"rG=ktkCb1U"VZ<j8e>EcN9a>F#6`
+ EB'C4:5YNss4;5Frr0eI0;lV#O"c>%A&hL\KP@FVN!q[e"tj/2r-Xd<Y&<q?id1Z4N-HP!K
+ 7In5rdK+^6?OQ#T1_3#iocj6N]LGi:61(OOnJArE@%d.#6_g:k)JZEbrUK,a74YNO*l!~>
+Q
+Q q
+160 171.002 7 -7 re W n
+q
+160 171.002 7 -7 re W n
+% Fallback Image: x=160 y=189 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 160 163.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!<LCK+5F(5>$TJOI@D+Bi_XVB\dh!0pE':n^p0MW/TU<`_utXeK&=:q9"2-qHc<>n.4L*E
+ +Vf!htua6r6;5>0rClTLC%^+:J;]EX<mJ_V)7?X/lug2?00=r5a3Y]AMt]cT,>4I`J(CB?t
+ mmRcLqqrENLY;,QkZXK:g3p]%s,G-A-_mbIIbl-3G\b%X[<*NMD1.7GW\Z0Q+(<DR,bIigo
+ +CUNeFq<cr0g"G!;j3(qA8pBXsmc0?]D@rGq(m,UKQb>!teb;n?DoOVhf;@U4`gtp&=hH&f
+ ,V0B&f>Q\7EH-,(=V$FK2$sLM=]SR(.?RjN$B%5;o)8J]qtPQtl':Y@DP-6\?#PP:(Si2.(
+ F2e-8rB\=Y_W8AT$,N<rhA?/DhZ%I#mp@&;U*;(Y@fJKN@ba!$J)DI/mEL(i0!1"hCcMjbU
+ G9&HNXZ;Aks$(PSD:O969h(LL?7obNlgU5E9h;-K[7"`[*Qnoi:[9"'6]l$NgM2l03JHs+\
+ J>GFQM$+If_QQ=mi^:JVX3PQ$D+G`pO&L]8bfB0eeueVK#CBk]QrPDT^L;Fs[PDf'>A.;?r
+ L]b)?I$i.ZWj.O<f(n4Np/L+;"*#"^)dWrkWk6&ok(u)eGSF`YB$Q!+T$)uRjqeg:(-?M1'
+ kYs$Xo$Gj`>r=LAKnX_K;i<SOc?!@&TB!GP[H?pi],!-HbTh>rr.X[K^KLImQJ[.,*]bs%Y
+ j(kqI4YU+Qn\%!iIjZf:KBT-hY5rZXPu_:OV8PJ`&UKBmG\%%Pd=q\H+FsT&sk_T,@Hc2RN
+ E5HKhAkuEgEdY$N9Tl<fX9ZH@JT2OBes?l0-6hTqUGJY-,coeX\6>N&ZpdrQ4JQmr,YjmDI
+ (f0s.f/STLA>2n`?A2qc4<R^_7sMQjr<WAV6^SIKct5rgVal1O]0$+3r"4P\Q^F8`Xbho+S
+ fXHH!AUP%nD/S1R;Rl8P90;bs!!sjt8["MEjBQkk^s67@b$2NT@[F4Mj>@j1P[uZuJ`5);g
+ c#c],=(_ic-bXRPgh$LTqrF$.T=Zk^c8Bmg,icY47-9m7,[artl:/DHmER.P5"@Cnbl;_P/
+ UA*S5f\J8c6Wu:O:#&elp_?]9M4K3L=tXe.FFLpoe`V?N`C:$i'rTo8\$'[As8o+BlqS@Ql
+ UI(GFqZGGbk$DUi?liA4:e^7#.-Bm1cLl5*%Pj8.D1jitm'jN`5nKA0t/VOWLkiO>_G0_dB
+ Ylce)dTK]q[)a\1.N8-aHI3SUZ-2suPEjhU4@VK8nS4."?4a,jMnoPmS$As#Bl&4.d+\8'M
+ RU`Vb+9fffnRA#NfVajHG)eq7g6.5aWU?HBHAET'Sl<tM.R$7KI%9m7LWh-aXL>%BYE3pQQ
+ O5IPo$0%Xs:+P$>kqE.qCl0u/T3o;8\K$'3d!qI]'(8Z2l`K/,BcLqh*0uK(d*>l76d)`2@
+ <K;JB'"&5o_.g=-e.g3qT_k"mg%mn)1$Verd?1HV6Vj(_F1u3SeG?6]er=#2V4BP->"NuJi
+ Zr[ZXiTZ8>s_UR)%S@B'AFYj&Ze&18q:-ZY*_8*\&Fg&dTm9%`N$S1<oG"PK=]aW1_GEcuV
+ 12i%9S2O+bC,RlB<H+2Ra)JC[c2Hl6sF@-:8j$j8LJQu.c?H:sQac.&,M)M*bl>A%fL\!p+
+ &\jAX^`5W^A0ql<&N/p$0GL%u4B:hIhPTb>B@c5M/S6j[XB!66Z*j_=n63iddp+!07GSE3d
+ *uSeV`<<jCnSt>b\iMfj![JE2[LIh?@)WJgKtQZEFl=iXG8fF[#O/nh3:+jj@b'"o>/&eMh
+ n%@bHi,j.\H68N7`eY1OHBRkd3'&fE%q(`JsR:]A<D&?]@,`a@J9pYVKhtQW%;sj@MM&,<u
+ _&ZI:VQ\YmUqJFOV_L\f-SMKu?@jM]k2&KL4=qJI2_1"SaFsYC=%5]5OfIs"pYWqC.!u1`P
+ ;D6ml:fFsSD!FuEU:"NGqDd*cCU^JkPcH#W*eA7\&Q3gH/8:.ZG])uCg6nitSK7J3C,3`a]
+ ?9P.lTr7H/W'O89V[C%gZ+Kc_lQ@T)#l\"BHTsrYCKKneNGKFuu*U6DQ\.K`re?R``9q`7!
+ fS."kK8+qa*RDLDci4!$Rs],~>
+Q
+Q q
+169 171.002 7 -7 re W n
+q
+169 171.002 7 -7 re W n
+% Fallback Image: x=169 y=189 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 169 163.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!<LHT9ON*ll$:0f!5o9S8MP,*,-YD:tbMI9[+&.["Q"<M>Fnfpm'8CbFl^:KZ/Y[)jPX`$
+ 8ep\f=n]ANMB!itCI>lX7`f5Nh?WG*[FI3WJR:Gs/o,Ie3BKIdcb"oD/=hi%KAsA[:9]0Dc
+ Y,]BedpC25p"h<V#@HsLpi[p)kW75^./f%0$_glPUH_#=2BVF'^W)qD'eQ#A-%3if<n\D46
+ u\t8fn#G+)JkjDbnQAWX7$47ima4Guu<J?**"9t/43HF/1J%euTVVAT%43sM+:HiQd[(n]B
+ `&&:UjZTLK]oSKUq3;0f<!EN^$Os4tN,6e``(sNPQANTU@b$;K[gsH,G'C^`i/hkePI4tKn
+ cj;uRK(C:VZVof0h7440ZT1Q*bfpOhV:2@ZX^/'eQ"]C+r?SMqtAu&3*TU$l(;Rj$k=o[n[
+ [fGpu@YlBr4qYL2Oj(7h=n)Gd,K^@APU7V4I7<?>'Jr-dh"uMrs/'Ci,(n4E,=Y7)Y:j/EP
+ (g8UGaYe*QFn3Lk,>s$A*2M\[(bqAW5r\fK3[Z&>3ZNHRaASbhH]R[bL;^DK,g$q%r1X]o`
+ 2hd:Hi<)ZC]CJiKk`l9;FPY1KF^Ue]s.5_iY)E)5rR%.`V*i$>mW'sfeEm2UK'l6j[mBeG7
+ OSW%@=uPPdFn;]:9+N([LlMB#Vk7oe#@G,?RZ5.L(-EG[F)u-6,79uI/f5Ksd7b$K4RG_tX
+ XDoT6VeH$d6h\YVAJ@h$0p)P9kL!if!9h0E?mYArP/7cf%I$5``KDBA]Ys1Csk2EJ5iiq@9
+ R#a;ibiqaY5&\=m38F<Tr,6U]T.ZS>.!/nLHP(ZLb^BEi/Y1IU?%&a0mn_LC[#_>!>)/376
+ 4HQM[?C+$!DMcQmE%%G(&jVoMt=$4I27%+M>.L"aenjUTf38!q+4[VP$NTX'B<?OP%Hg=gi
+ @ht+n/Q\snAl"RuP7+^H8[22GU^.OBm4;FM*^/O(/7S9($Tp:L!/jMcK)Q7R+\UGJLhjY>s
+ ^,@[i2<HeE\)kn`hS>57a--c3$>j3DMh6jq2<R**S@8?n^Ho4G,N0$<X2^q>9gXmJir@<*)
+ B.3T52AUUEMTN0Yp)Qda%&4%VLMlLOS!(g$A/m<:e-/=;6pS?CQ=;(URO`/]+R9)UB(u?P0
+ r%dWee\^D/Aj['U<N#Kk@:E'@afcDhprs=JZ-8NG>6?qWP0bHFO/:iaspm>C7%?KcqTO"t.
+ I'Xb6WOHeH1'dl#K6,*MjGZRVE^GHF-t(aeOp6s\!`#98nWU^D'i)B*4\*\Glu_3Odh6UUV
+ r-//clIKeHds6,R$ZA9M066DaPUlL3"Y*+nI+h7ZE%6oc*5-!WE_QXf\>FYCgS(t88V/NUG
+ o=rt/R2MB^KO:4&5A!Rmq+oXHnNP?if%/cY;eB!bU;]][8?,/ACXT(]ZZtepBD:eb4;Tf!p
+ Wh"0OIX@D\N-L+L4KBhl2pB:EG?-dLbJe79lkVAF..1OPqkiV/85Ooa]-C!j]$ekQGCj4jQ
+ a[E$Ki42'>Ac=n*c%:YpF"M%,0IpaV20j,`ReLG^>1j9I3A,$(WPD<=tE#;C+,Q,c7T!(sB
+ lKF_,aN`PKU6fiaJn&#$BGqYHMFV:'X+<>GH$KD]X8jc5@A[Xjr<P:r\%<Cg"36+58o-P9o
+ ('e*-W`aF=^V>S[`Gs[*&J!_<@Ji@V4c1UaKrAl2O6XV%hgOl1C0Gngk9nK]',7>rr5>WX4
+ eL2Va26d?kb%-+#-2@68LBDgI:g")V/PF;##ujm>ji\2S$NU:dj94W-TYF[=8k5\Za_0&"[
+ A[#R5i]*dZaq[L<j.[jfjJ:lhVJeZ#&.dJ>RZZ8/":J4J<Z;oK#<A[fm,c<RAn]S88,YJL9
+ 3PBL,GiYXZ^9pa'6aLY;6bp=Fcq_m,&>i_%7Cf\[g)6Yf&(.6[h5;`5&Wfi9Lc_GJfF]nAX
+ QG4<^3G:N&'-[kRZg^]obfkiR"d>;kt8s%I6G4hneGHfnHK)@G`n:gL2n\ZcVX&g0:V6:0h
+ XYi!W&]#Rh/k/;>G)r7o=BUA,U!m]OjFurC/43umu_J/NYE?;3@MLt22W3-$i%d)h;<n@2/
+ iDtCL0E$pKO,fTd3][+Tcj'_e63a4&`oEe*io<Ed%,Sm\%(LCnIatr2c^u`&.8s/!3XWdB0
+ JiobK7Nt>hY54jH6p8\U>AX2D[0W8%mG1Dht9V<qdd2F^LF\oh`*@m',*&]$\.F$^RZ$b^A
+ ~>
+Q
+Q q
+178 171.002 7 -7 re W n
+q
+178 171.002 7 -7 re W n
+% Fallback Image: x=178 y=189 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 178 163.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!<KI5KI<*l+C&1Do.h_Mi8RC`+g>,H5fcXKIcs]dPOF_q(!;8lddS`<pf*X0aHN_CE"^U!
+ O?sEGF7`?F7mM+d'D`#/cCF1Z/)RcIk36pN5j'qjc".Sb)c.ch$s\^Ye5OqZ6WfL3R<B\?5
+ /KmG#>!brn"'FE=uGC2;S)l5irGn,LmVVmtu';=goa-7(5[)Lj>WG]K5,;-hdR=4bFQ^2.W
+ ()uEfB7Xk5/nEujYR6NP#W1]e<+e_(Xp3K]f[68l:56&8X?uP#4K=Tj/':rne*Z6F_2Pcr8
+ 8Nc1Fs&.bk<P*H^gUm3+FEGEo6ar5BT:A,1p?\3YH*Y3bDJ!L'B]s#Ws,5aj-0s-QF*>iOo
+ LN2p,JbupdQ6nkp=J9iA0oW]j,_i@O`%ocDoJVC/hWtA*g_8&Y65'\KSSI2aVef.qk'5tk3
+ (clE<&6#q3AJ%kM+a(IcQg)BLb$<Ad:J9McoaSZRdCgjscFoa<[gg=gk@=*$):%a&<ohEV"
+ T5cb=h^?<MP<41cXgmU&7G(Ymg:XK@O>ruOlF#bW4;L].g"WPp>L%<?YELcri3G(SgtB#t[
+ %`\hI&9Phtsl`@*)n**\.$R[:4)]G<6QJP2)W=B4`G'2&<1)"@P6Oe3fVL.*\>d8r]X(%?;
+ W=O^SV;_,Y;hn:P<b:UKj#Z+-[T?H#hRklIk)HrT1d1f7[C*W\rn$VRYDLnUhUV!t;u/f&8
+ q1m&>-2U!To"X*Xhofhk>"_.V%[s<qJd#2_m0^j\HcVa0l_OK4ar@==#WbTK!ETr/:Uc$>'
+ h[nXCjd:CLs<(mq1CZ<Y:6lke7r2O,?AZ4"d<bg\(7^TPaJeimf?EGLpoaSsEGem<D^aguP
+ 9B=Xk%Y%h;A,oK9+OWCb7WpH<KFH>Am^`("L=4m<<+cu+g=<%nW>SB0eU#,r4,OOU,]chYW
+ 5Vu>7Fe&:S>jUVl[B4oc>o.h19LgYW.pUY_';G0d\I1pN<\W`0BY$Yj0\j7RRdR.M:W9C?$
+ U%;d]>#3&K:lE4_b@C*eA^l3Rl1qH:668q@kKcdHlK4_QH_TS37+Kmqq(_U-_$nTnK:EZ;Q
+ 'PSaY`4SEIkkem#-<V4cFTi97d6Tg*/Rs`T"=aa&,U-B&p4`e,n!PqLT&0%<@pT"pppaeU8
+ &2*ifVTX$7ZrO7r<(l\.nnS$sg5+='=`',Lio[]GEplJ9P.jHe=Aic5]!DTjAbXf0U)Y&W&
+ 4V1pI%'rs_-jF4i2ToXd:*rr6T#3"F[W4YoB0(h<21+,uAEOFUjk[*ag5)PWplJ#mp5MOkc
+ ^?4%U#YL&LrTS,VrVA#SkB_<2TL(+D5pdMc-P)(@ha]4Fa#iER]n,btoTW(s&KD:$nl;:.&
+ Oi`."LPZ=NiX3!>-A/f!*:.8g):Kr/ds>PU(."f=#*C%%C<r=d:+s!4J$PTZ2gFn8p=.pQ6
+ JTX<1SED>+;2N+!-EA"PmYnnNaS?;^kOEr2\?s*Kt='?/],/t=\9j`dI[SXoJufFU7`NYN)
+ W+1<AFJ]$k7c"4"I2qm;VM8'Gec!%nJfG,aKOnBSI/"Y#q/A+Wq4MIZZN[U/)Ajd%o6/RBO
+ )QP9;;)OgVVaB.*1n)Wn"J\9f$lX!'8t*Yp)0ZW_6]$@7q^*O:X",pNu^l=N/t2g)N><5!R
+ SKm_];H$#;Kj@T1?lgWg5N/VG;a2`bSL#QQ4:57\7E,bm_",mZOp%>*pD6XQW7kR]59+pLR
+ L^g:\A#";b$f'QHcQ5&c!m8][\QMd0on!-=QS1^D0#YfJcCNnU#&H1O/S+!U+uA7^I#\U,V
+ GuJ&SVE%R@PMH&[c$*F+X)r3"D?#qeZ7'OX's!s>dsb_.1d-pJUr]t%LulZ,@.rQBZ6KJaI
+ '1g)cs;kS7g++gT]l-Ch6@:Y]6E^c.H.>aFK0biPc06oACa]5-9'eoCDV\0/$G6#+SadSK*
+ <C9;_(mO"Y"(@I4$0iM-_"V>QV%kF=c!\[oYT9b8!AiSfl[!/6-Rd@k!gh/`3?E&\4#^3pP
+ 2$3:1c[mdT6PJCi0jC`@K^"/3g\W//mjSmHFF)$WBcu5s!-Q!U';,Il@#KMiR'$'D0h@hFg
+ J@n"cb(B8-83JRc`gJt.2j"q?S.I]Z,Va&taSsS^?h'.($,/uniX04//+U[,QBaaG,J8K-@
+ ?sLdImNiL7n4:Oa!osC%(r2#n!!IY'YWcEoVp:km-b\(mZZW6GhMSj@LM$P2PuSoO7'28rX
+ 8$)I+e~>
+Q
+Q q
+186 171.002 7 -7 re W n
+q
+186 171.002 7 -7 re W n
+% Fallback Image: x=186 y=189 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 186 163.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!<LHW\bI+32]FN%kNXY^o,GKFl'U`?=r0=E5&e6necd&<+,%>Qbc]+Jbr@/0uU=;$%UJO<
+ Q0@LPo_S65_9O?j'/"mP6\.m(Ur:50s.94oO8`?@R?HpA)GKqn18<qu&kV+!-=r1S\5]6Z$
+ ZBc-6?MNVteSp=@bWW2]6c]_PKO@iM>Voui^"n9*25QQ,?oh<;CqSQfIYJ*YZN;q#,IbOD&
+ a'+Z0WKL2d21G8Fifs=DPWOEKQl=4>-7Rktqfi.nLLL4jn/G)[:`:NcOc++`fH=mt09BGMr
+ YM:/gI<^!B<7Hp&pkIkjp?_/'03t#pr"uJnejAu,X=?4))dhL+gtbVnS5-9Zb[0miMJZ%G<
+ EbVe`eRU](OU%_PeMJ4#m^JSa,M'?f.mktDuKX8GON9Ad7;:7bb'CaKBJJ`CQXb:"pC1%\X
+ g(95Ap(1MT+uo9G2QR:'<6Y[PRM^&8KGGD\g=#nh7@k^:7T=RA]4l]6;`F`?B0UAS&&iT&o
+ J`<)hX5FUFsrCa1="=^#F)\A^/r"OY]RFYCBp/_.'o0/(OWJ!0?1>dHAI*?<58]oepf2Z)A
+ ,o=`bYc&I`mQ-iCqN>oWP3%[X\e:`L>3'6:B)5Ss,fg?5Ce3:U4<5"`F?%\'d`U,]8d<bd^
+ %IH?g[B8rg5rj-''_G@)n_2_6VP^T?U?Up)NfLib3b5jGDa]Gg9<S9"r=mjK;Y8`=+q&AE"
+ PhI6O/qssAqc@kUsX#)=PHekokR5aLg1Cs[Z91Y0:n`R.SBnra[_Cgg\cH%Uc.XKZ$YD+j#
+ <b*G5.6Lf+Z;-J1`24dI93"@3b$c?.>6PKD4s(h91ED2.rJ-<;etC7E6dHT>rG)6mBIgaCN
+ U=SRo4:#P-/d`h]%"Ke_RF;[VlJf*jqu*UknQj*l%".LjbJfP_au]0>;VcpQ'U9)=uoo7r(
+ _a2d:N0ihF+PDKGEiTU'?2/UlX,m@L/PH:O'16;Eq>&$cJdg%*Y?j]1'PDJ>q#A_Gh55M0A
+ 0MTi5:+V7CCHh@Gi6U5;Hp0<ePfo1sH/<IA0'3(1\?@sLUF:#&:'gHqL[Jej[;&D*?.sg)!
+ i"j/+;hTh)a^k]L#YtTM)8"(Id?("5Ygj##-8L=&.9Q#$p_!BBO)(I*C,<1\7uLk)hS*RJW
+ L/U)JJ'n$IEJr)XKcO)rR2ci496)WscpR;-U%Of*AtMi)_`(UH/,.2:,b7]'8--Ef1\Z!9j
+ kf/1>chrk.U+.Hk/j*ZZs50?Q8ITRnm&k\#K3$ih)LT^tLd&qC,`V1B$XHJln#0S!ob&nmc
+ U&":F/)3RIT1<^q_=nk/_qu@0bY)=6sJghB;g'[m1%7IEk!IQAa5W*Z=#SZ+A,4r-r"'DOh
+ >pk9gjYo)pWiqunj9S!&Dq<3[_3?BR7\-:c;%sA=*thmP,L<^gKe#m[gmj&&&c<#*_Tob+o
+ SB/HIbktra2.lt*ek1IW[]Vm%ONe&HAYal93I3B4c5%h6r>A;b!_an7n_(!M+ilHDlj]A%2
+ BVJ>\n;B%h9e%E+qC$4s+rl_mVJuq,quZZttqqCq6g6Xs_[A91]9^/'8!bJkV?TFJOX"\\4
+ Or-r?5OQ=$UjG':a:4ubL17!W5C[^X/S.[ZEp$4U!PE)c)f6]/<MMl7cVPrNp!QkmOf8Haa
+ UQ9pq<['WYTH)VDi<9MT.)B.PIHZ3S/M=T,nYc\IB]Ef#iL-'TG7n76#!;1%5?&FT8,pa3M
+ =r=W''!rGn<DKHmXK8(M#E4[tH$QX";SDCmY<'bb_980RIQgG!<%GSl6?@3]Z<V9`-t^mD(
+ fVYG8"d\K2J9r>XY>pPAu]+B#'tX6IJ[Da-G49uf%6st`X_Wp6&%0N?u.A&%YgH26$/$UNU
+ 1cqd7P(G"m_Qoo-K^BHu$(a<E<RU4,&k3gp.*<LVj3!eAeXrJPVjg;=<h*Vbb3`";h^OK7]
+ b_(NaYJ:6%)"#LPRoJV3Xf)cflCLZbaE`F$AlI`"4ggWiE8GNe2p6UG0S$tQ\QBrQFUfYQ[
+ dF6D$r,B4E$=I;.5^]9f&QA)H1q*#`FIG?/+phlPWjsAfsFYP:@JM\Sr@=5`Ao<Df0]Nj:+
+ Im64/#8S,n1M>4XJ]b8SV&>'NdZ^7CMAn\qqt('U3pks!G04W%\gSq1ET.*P/;-G\l7gUW[
+ C!`kaX,)-WOeqR,\fPc"R%(eef#E,53Bt4"-Oh1LkhgVOZ+[/k/j6SW)+A3+!4SA3'@]S!q
+ kUO+!#h3me(t2~>
+Q
+Q q
+195 171.002 7 -7 re W n
+q
+195 171.002 7 -7 re W n
+% Fallback Image: x=195 y=189 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 195 163.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!<MCJ[r"'ZZPn5Ti=F"B6(&#H>k`$=ZF/=pqd3LdAk;"[O"o6pVN4BYgR#+qLf-TXGsY&J
+ 7kS.Is?6:r$6d<Qe$-Gc3#*Go6+t4l&Yu\M0S'GN\_ZcIr6sp[%=YHS<1Hg-u3sJ`c)ZCMU
+ P_X.N?jFHr-i;,[6p;;'c`jc-g9[FmE[g!shVjHkJhhl`3OQ/'/IXN.)^lKSRW>5i8T=3>&
+ akO+e-`oQ4'aN0iZ@AQ&/>hcj_Z>[Mh5!(RP8#Ef:o3@@G>SGY`Y)1Kc7fM<Z;WR.nIG6Z]
+ 0+SSsgqWl4C?jh0=/8/+ft$MHor=shX1l<7]Y*gjgiApU:H>LMq-\'P[9plL@G<Bn0u4WFP
+ O)SZqiLIeWCtg4EH&igXM;,N_c8q9lIa_okKZZ=a2uVVf$lN%-/At?a+=\7empj'SlfODS*
+ qE7g$1d`L22/Nj(4`Aa]?lh#`epnbKnV=Q=R1$Omh7+m-e9n&b2JR%l?0BR[*OZO*;g.pu8
+ l-hq?b^E#(mgr[a-GjN6IE0lk?SR9p3("(P&,+#RF#rN]u<>jdZHU%Ng4rLBDGW[bPM7!9V
+ fD/CdUDFmX-fXhqM:G6%E^bu^5I_(B@b?6@?9!ac+.dc8g1ICfZE(MnFS?]CNo_-9dq9,a9
+ m3O(W9hbtOK^AW:X%Q8rs*K3D?!Q/2Dk@GRgI$:.K='IcC@8R[aIRtOP-LpT>=[Ea9OH%#Q
+ uhNp];!PWe/pmPW3EM8U#G+n`sSf1lob:>.8ILMXSc,IM$!_5a-XBVYZLTS!aN,GXXMe[d:
+ 4piPUiA@o)nX`%[nqE>JBfOi1>[5)-rNX0-3<qeZ4qXaj-X>iK;u'6"<Q9qYC%s?HUE-&Z.
+ `UbU=k+dh\2%)+[$TI;7;&oSh%Lq]b3@4R*o2.?o>Zbf.;^?Ut"iKL8+!KnAYB'8aXP,L7E
+ Srg[8_].6&'j-UBQpc?<'#C:q=jfU3SRY65u@Q;l7jZ43j=PrI#%mAnbF"nm!cM@%I[VkX!
+ W2_NW@a[%cjh@2P&(VcSHm.5.gE;EX2B!TVf)9IumA>_0)\#O>M\%[;j.QqL`[XHt-J"O"Q
+ LV4%J",GaT,h97[_a-iC37hg=m5j4<+1anD,>d0.[u?bnFEPLU5?g'N)6u$]"J+"YXS@iBn
+ 7aHU/l+f7^e`imU`)P3N.XaI\)<5n,kj-4nP7rA/HeZ:83f@R\3/l;)=MHYfmAqBq[Kcj,@
+ '^7/^rO_+&8me7jT-0N"GP)V..\1:lZa'D5fnXEgl5^iRnbBUTm0f!!)\eh`ND@8,o>dLbV
+ X%-jN&]'(e!,XdG2K@@_X4cMb/0r,(K.%M]RSSXaFCk_\_l9m<e$@b1$>rXn](&$?ueYjeW
+ c"s.0-@K-W,+cM_<&%<agls[.BeEZV3Z8t-\hJ'8ZU6o7"qq[8deNPWHj)Yrd+G#49G?e%&
+ j!3-R@-ZL9TbpTLdmM%h_^3iO"Onf&96i'5&h?ln!qH[/T,H,p@cAHQS>h;Tt_];h1Lk'+u
+ )Bt`E2200/mJn$lDmRQ;!JdTB;(W3a,FYT%(\\Z$_se>Cc'RMS-$LGjk^E]4(!D&+/a\<<[
+ $]6;05PjV!Ie&e"t1f2g=u$AsRYRPU5'UhM<#kXkr*_T%?"p*Se5,kCN![ME%N@Ht6$Ge0U
+ n3.;ja_SF%kXK93V#,/5ud&"qL1oV6j63\g]d#f40.uXlC>?g$+@Ga7.GnR8cK0+9B/=tkV
+ e-%cl^un'U#^CZI]fhaN&Z2mF1Kbp1_&FWT;)1*dM^?6RS9]d?"*f+-mbNtl#e@KB;Zft%B
+ =N'ldaB6b"p+m8rH_SV&uSGT[$8l!#iD+71=,_1RJ0BpjTok0[5Hq(UiP>+*=a'>N!q*d<L
+ !g"<E)4M!ec<FQ7],e\[[0b,I,I!C2YV-Z>db5@VCqDDo%R4[_`QA9!QCd<TP23n5%blKeW
+ 10V:tjs</?E0m;l)8q"]L87\uHL`7&SY_e%KVC!b]3Kc1q6n,?pOVZ`V4<oSf&W9@nSFps7
+ dV`R\G?re%RAua-2.1,d)Q+T(rI.Z'B4[[UYT;m_SI<KSU&<?AA-%%n=S?10!;;'WAodVdV
+ :-V$,&Uml%SIZ4IoB5W0)6RqQ:E],nOU7V8"e?<*GTt/t^0\doJ4b[kGSD2\4:M"G5cKE\\
+ ,?aDZ$^]~>
+Q
+Q q
+204 171.002 7 -7 re W n
+q
+204 171.002 7 -7 re W n
+% Fallback Image: x=204 y=189 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 204 163.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!<LBi%c1)MV&:$VRh7cmgkE5Tp\Y'V#14La!$J16;p6`F^M`5m<4?/:oDS#).R28jirZ&4
+ r*p$2`_J#T4qIW%dQBOA0;#BV;tUpG]#;Ul36lRB!7aaf4ITX`L*2hL"+#0>JZJ#RFnPUZ9
+ >lqu)M6I<BZqe^`K@Q-W&Qg.J@d?E^o/?e:\"d$.`fk"]7]%u%EP^8ZF!X7BU4'g5PsIC6J
+ 2p%8F3c(f,m;hK_GbljC1F+/R:9MA/okk@A/jaMZf]tB6Y5Kj#t8B1YuA@o?-]9=Kclq'mW
+ O3DSN^@(91bJU+!f=1>?iTf@Z](#3=A7lE02D-r[(Dg;ir";g#f$1><_4b92mT^-XMl,&sS
+ "1a^5!-(?\=_VlN5&[Uk4"+h@IO*6)nVna[Cp$]p@YRo2tlVhEHWu-p:d#`fMu8WDW^)K(m
+ 3V(opW""Netl'"1(O(a$B$B")D?c29n9tUl+seo;nS8d4cT-,^nupA)hrPlYi;`E:UTE0V#
+ [\3jX@WlRXW)ainRWLqpL>jt%aP7.%*"WuX>?a6]&9>LN*glr)&N;*,Z:FH9j5Ao?7_^LP<
+ .DJll&O8k<1g/2*;eC#OPk48hHRdg"I.4Gu4!SEp9Vg"S<jKIY.+Fhh0G1DCH+^kcOVO^u)
+ \"ZAP_u,+P<h?.!WL$\-Ci"Ga6#TKB6q>:<Z]H;95(8IbpJF[\F\(`(O6k<Gl%ILp4_`2"j
+ EO$iW>>>%JhCg9:aY"djr7"'32b'7C2$]1kPm4f%@:V8[Im7$hhp!umd>Q"kg>URDegO1o,
+ W6WoIWEI[a#4G+&Xle8.?L$R04:?h+#]-cZ2S,.=l&nA*[$9/E3S2^)h0+RI':1)]b3d/.f
+ $U8#Q4\T7>a#PB\P.2(WX/b9<a\K2Sd"[8<@BU5B.$0M0TM.CVL8TCYoE'W(,WD1CX8iTJs
+ QbAjuDOcb?s.4MT"\AW">M`peUf3Gh2g%/I58[+7ffH0,_@p8\CdSg<+.>Ej0YhXb,Dlrf"
+ 4#8qA^d#a$bjEk\gWT$19h[1acJemY2]$qj-717=3mKH=A6Xp%.ses&P*oR+*r1gGklhfAI
+ Uet0-J+Aa:$##3An:\<NsW/8r8QZ%CT7?8X!JZ&?j-i7MD?)^TcX_?q'K)5!@lJaF_f@MMJ
+ .s-Q7-EDN#\9uU1`qg-:;m%1Fb4L[rbI<.b%0Z!f?)Gk\-KC3jd:qld=O2keUHp(b\`OY@S
+ 7U6Uk;h%F(lH!IVrFVVPU;g/QEPs4o5]VUWtC3pK[7?.c-2qNT?_/7OeS+T]X'!O/)FHLMn
+ :=Uk&`.gQI='rk2f`%WWg9QHJS9TKNp8;T1#LrSQ('NVnQod`#7*,/GNk*7]5;MFgj%=N==
+ A*gn:e%3+W?!UQ`:^D,`JG[dc?nj0K`ntRS_IQ\;PHCN@9;g$58DN;]E,9gj4@>75c(*U#0
+ Rr#El/^L]lLOaPYCOk%l"Y`6!$``8gC%#H]T`PZLWfU]9oGIa75[Mo4EZc[iib&Zat0J>E)
+ s/GfVlu9grG6YkM3_TeC=^i6h'5tPaNZPq/a@/OrK*Cj@Pr<"&FCkYtC"Z.*n_eG[qF1D&,
+ r>96<1sRL5+P8_DbdNX##+BCd3-J>Z1OGZ`,4kJP2m:g")B)8`%3ToG%nV'Vof#\9n;7>;q
+ I<c!bWN-I0/Tcc!r0YkP1ki3m]:)9.]!g\%S9::&fW3;!BfAZ(!nF_L+4(8)6:f.uVdJ4-T
+ >WKq>N@[D:??#H(j/=F@9I?-r_gqn$*=[:>:fRZpSuac8PsJFd6q)Zf&(oTfTcn*U"DaE1V
+ Aa*4&t>RKK6c4;;%0V%L=-K'PE0qFapQqZi5>pm:PY)GBPj"iF1G+H"Neas)@E(-Y]hafRY
+ 'MqKYHm6#&UfoR]1EJY;*(hERh\X[_7m$1h::8hn0hCCr"R9Jq>+'<YYGf4Xp!N&mVsKVbT
+ NC!4]Xn]fk`7!G6g)[V]1&q>pIhqJV>c-8GA^]e%YW7RsW;m*GUsgVM/FS=N+;0I-d>'@bR
+ 7bZmsEEH1LDk7AI9#7l^iT70*dg+VgM1UD#_X1ag/H`b;)[e(K3mj.i(j*;FWnFdXZ_:j\N
+ \9o0_Rf:27()B53%U?XP(G7sN'#^F$a$asB:J@BA3Z``p";>rlfTmGj$_8&Sbj?k9n^LN8e
+ 4Z,rY6)26]j8d>cf!"Ui'T=b%V'"!Igc&0$kEYo)<AQrk772:%!H^1Ui1H?N`]bJ!YY"0QS
+ 1d#nA:"gd4+3si;Xa?io86+,UO<Dme7[q(G@Kj:oV,-(%L2$Q<C!~>
+Q
+Q q
+212 171.002 7 -7 re W n
+q
+212 171.002 7 -7 re W n
+% Fallback Image: x=212 y=189 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 212 163.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%=\)Oi'NH]c9JisVViSb]KeiQs782t=;$MVU:.:7BJM2hTEe&1"&4N9Y0JoIFBlX1gr@
+ r?n6,<R^.YKfi<bQ)[)S'#j+apNrY9!gp[+R\4T!d.]GOMs6]mteR*$!3%-'V;nGa@AC.Bf
+ qM[o]?[eYPHW^us#FYV)6-nEQ9.q;k7,4H/N=I/.6Jo"kH3>;aP\26*\b@q5<+a\([hn'Td
+ d;(a@tp%@P;(P$W_1P;T$29L.2W2_=hF9o[nR$b[Q-Q6Qk;&'nBWC[)>'H8!ShnNZC'U=q%
+ jeO/eOb)4i!>)\r[hpq743l^-c%0^]/(5oe`2M0b<)fO&>@7Re03`TB1$f8iPJ1dF5XBrj3
+ AOL'5EDN_p(nqu!iEY4<\,XP0&l8&$k1M)W3/TjQ:C\g#o+2/oQ8U4i:Um2.4-Er\38R"bk
+ (XOYj\Eb\9f$Y0B;EP\bPsne#1q0L9:+<q0:s+cCD`$X2rRu`J!gAKo(hLc2ZSAK*TZM_ZL
+ ,R^tBTPp;#N+4*SQe%^rem/H4^!*YGW'[t%$nEP'NBT]*ErkNA\np[:aj6:,YT&DZ)q8<N;
+ ^r5jjZ+s89>=0;h*ZW$'%=^*[:agZ2URZd?_<Du_E`'gj,St=TL++*`k`srboro?Kh&TINL
+ J-ub(r8ZhC>0ZF.odbcOAE`6LRlA;`hVN3k5sW5ad<I<%eKhiAhlmA]:*Rsg-hu7E4FSh+a
+ n^8Wc:"'6`5ejX"'82h$Gs[<l3[b$"9rTf`Re1r+M2g=SJ-2E\2_7!6uJLgB""SH/"2r=kV
+ s\$/g)tbDJi@rA&gFK!<L?j;=8_e5(O;nnKN!oA0bA_UnlatQ%/K9jlQ&<8P+_oOR@@=+Zs
+ #)*"o!u4r0Od+!1N)NSM6"FH/$_@^[oaO1DeT)A+'PP:(AB./a$`lBFck?r2<$?kP^A_$LF
+ XG"q07l0C-&jsGKF!,6.<:<'hc'U35=%RtQI7QDqjd;2JX#U>]NG3?jSZ!U:fM)*tRNui;I
+ iVI[O1[>emLY,_g29M7<.3<=Q2$kU``6:oh.JP'[n)2*=;D("`Y0P5N")='AEts`o1I#6^U
+ l\-fneGd1RDTnQ6+HON`n=L?FjflOSb@7*QOJp5P;%S[+d$l(XKLQ,iZJ*$qZ0cmHmA~>
+Q
+Q q
+221 171.002 7 -7 re W n
+q
+221 171.002 7 -7 re W n
+% Fallback Image: x=221 y=189 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 221 163.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%Bh26$(fX]sQSR$sboJBo(.\T`#p^c@;@sXBO[Lq1,Rb,M;2fN]cr<o"5V5Yq$+)BC&V
+ ;2UUsMLC.lAQ\;VZD`O.uO./'QkbU;Qo?pUiNDSSu5&&,<'RoJFS.0f4QmDpd17?sisZ,FG
+ ">_La\Q91p*@6Z4WL5KBNhBPLH7oI7A_jM[H(/X\hP`2csQDFRV@DVrI)45\H4J@7?bIVMJ
+ Jk'-:`pp&3.k2P)PA7^20c'rtQ&02dYR*^S5E=q$_\:5UPY9P1kkKYNdEWp[U9%fG%4(_+$
+ Jl>S[(l2+g'V%CK)`Q-tMW*MYj.m0\SX[O'B.,@NfsC2;^u<0<Jq@t7WdN*I&$hDrM;N?Zh
+ ,KH4lL2cG#KY31l-hV2!.4DfnF]4jZLmeN976Shc_%&!b<(dhI/+tOo^q(\$WL0dnn"=R#m
+ U];>:V[R"L55+InP^PO#;lV@WloTAtDZ[8B^EX2PQj0(lfYkPng`D&X]$q%NRlL-o*PS;hH
+ Gnd+O8l_-]0`rqQSD5$Q%pct!"1YV;bnFMrnC=LV&0I_B.dG.>(++9331+>ZrR0/(AZHYQN
+ 5Nm<,&YdIJ=@jB5R1P;s;kdbjg<j.7LT&rgjFg5ZreuTJFf`G)NCu'u>44U9cDi8[&>J>S?
+ Bu;A*%`[A=o%(YZ7Rij-4EU1,TlP=rZ"(:c8NPM\/s6$PZuS3p?1`))"d5$Z(@:C`Ib&":T
+ ZPDU9haVEHCNq4'-mKed_9uOZbTOA>oYoRd_knVZBMW1%jW_7-4`=JQ'j[0KT-qig\^^i,R
+ !AribbOn#DZlk/m=g.cCmm('.FD4'M_\%>"Yp59Te!0I=9dYDi`r!,n)d;*!_XB"<d0.\iL
+ N?+YaT.rXop72G$nbV4jS&TaDQ/:("j$*.1B'cXan3auJi`'%KF-fELt$5$jU:@_6el`sru
+ rD;/H4W<VY6kBtH9qt@kH#A;=QfTqbp^0Y\3eb/brMMid1U8*Fqdh=>d&o5+'MZK?<eA*GZ
+ cF;Thl7-P%LZ@A_jQ)uF>4,bJ`B<3='GlO\#l+53gDfSK;YfnA*\T1:3$D"l+=SbLF\D-^e
+ \t1@Y+RSM7T>U_1';/8@(RX.,na?:dtsdCU!W"2D(WoQ:frOd4NTX=j@[3LOnUO-9Q-#Y(V
+ N9CRG5)*rru;L3fmP8k`pZ[\Xru@+#;S2aRf#uHe2?t28;H~>
+Q
+Q q
+230 171.002 7 -7 re W n
+q
+230 171.002 7 -7 re W n
+% Fallback Image: x=230 y=189 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 230 163.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!#ZHVD^n(mWHQU0>e>[T0nTg+4OdN'D>cX%eoqC*Y9&/&W^&.1@r?9l$LMeYIpo(Mm4-W+
+ ];^Qq$-tfA&C3=gm5^rNptLr8ZW)fC+(Do/uJ%kBYnpY]W*Y%L372kj^b"lYSi][oH:6^cF
+ R;qfdBPGcIM@Y?p20'0LMielG4KU4GFB(4Q7i#Pm[e4F;gK(0nJ+oB1,PK#69s5gIHdO!"'
+ <J,YC^&(/aSb"<?_.?5I'USEBfnt_htUuLfJeOdOs40WcRQ7k1)HhU!NZ^j4nIubO-:f\pq
+ <N?gbJHiEHQ]St1ZNp<N)dL(6r-Y<:+Zs!aA;Ge!D]WfQPSU\\b0;&[04.>]h7Kq*&LL:C5
+ _'Tk.on(eVbc#\MaPQ)2nsd!(GBm`OqM;;+tO/:^)0)kJ7WQNKX5;;0l?aSS`K2[T=91G)J
+ s?>mdap/5)e$mjkI%MiT=b&,O<sVTE't2\9AJNm/l`_9btriXL>8AVbSBs)iGMjMSXr(jCB
+ AD+"fJFm6c$()P#`uA!^r]eGP=_B2D]d!sc&I)cBTH&V8kJN#jQQbAk?K6q8IP$ce<$$VL6
+ iES"r/&njp_G[Sf:,U^dr"M]%MAb3Y9Ls4l!NPj8FLlB9@2;#MWVbc@(/ToXZ,7be%5<mA^
+ .CqETPa'e'X0_e1FAun3)5C-;_12RGQ7^mm(OGd3,J1IAI"G:NV+\(C^PkRaG.BecPi(oa_
+ 2/iXYQ=@Y_oG9(gtgAeY8NaRfoP3Ii%06@<Y<1d95no\1,^54qtHBPclkt:@tkE-qH9Ddh`
+ ?mfbLKVLj#&:Ig9in`9N.)3*5&-LaH)k/oJ$4Z)iI:O<#&j=pD52(AEI@S,`Se$:"+0FRu=
+ 9r9e_lG1A:+iR_qXUB`=)#:J[NmD127_NJgPBP#$$D*B4TD-R(#IRlAN>(GDM^a_YdNb:0]
+ 3Q`(/rd?*F;#7XQU';8btX'eh7njY1"a;fisl(YGq>g<0-M\YfJ/',oOQ7Z4I%!1UKhd>Z0
+ )MO:u`TOI6<\\':^2jB&B($D$dsLt8foIciVj$4OC[]rOeFE'<A',M12[1;>[r9+dX5FeCk
+ HFNto]\[heMR!9K,T9;Au'9GE)Mk[$Op)P&3MA>]ANn5m+F^cMo3]&aN6_^W=3URcCNF,=E
+ @(AQ7P<q$l1Cu.2FO(6A!il[naCZeL"fV=BmCqYbCiP0K]5O9<]I@N]^,b5+8meAd(DHd.9
+ YtF$B3!$`E!Z7lCNpErXUd3nsJEf_>.&s&m):Hr8M6~>
+Q
+Q q
+39 134.002 7 -7 re W n
+q
+39 134.002 7 -7 re W n
+% Fallback Image: x=39 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 39 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$=\+iE'G]4N91olFbe7u985RO+:iX;fThqN$6mDjY/?tO<9F8fM(C1b@$;n&n9FS2U*f
+ EQcdm2/0;quDo83<B#iqNC'9)h7S?I$a<giI,jhE,A#s(YoU@Vu\9itrUuDm'3Pa2Tep.h:
+ :ddLo#>dG9eB%^`YOSimb"G_*>B0f"@"74fb1c_J5s?!V,W5Y[5iqKgi\h)i00FuDLCf<=`
+ *$&XUZkDk/268UU[eLQ%DUh/VD#ru4$-.:7^or<VN1u,j,kKbI/g=_5lBPp:W/hUErGdr>5
+ (Qai5VBu]\rBmq65HqSNn)*[&Rq/h5(:S0)/.<n%.L6?sc'rtQ&3W297V>Uigtq8:QC+)&<
+ 4mU8Z8*[O+Wpb;/dhOTOdLrf&p/;S)kBPDEI1nm_:0/'#Gp*U]Bj@E]=0_Z*`_.[L$32\A`
+ </hEMG<=,]7N.$Q'r)Rl>#!7sR*m;\9lRB4mU$.r]TpCibFCX<X9-+n:W5>&PNJ*uPs58k;
+ 3HP[+.=0pnBF^]9+DRkQ^b]spH8]$Zq1]K@Kr)EKpk:_4>J#sUYa]>N28LCV/="NJHE@9m.
+ JB+?r4B9,"l4=K%Fjp#1"-&<K+G3TTlJh:/2/5MX;3'"gtC9r<Qa;hLALC];qNt:7179Csg
+ Ubg(FNP2nQDjf>&(1j8\`5'7mf%/8Z4IEjs7V!#'m?8hW\@U\T3Fl`Z7eQFG&AB'j;/+_T4
+ E*`CFAYF/*#p4IqtJ:9p%1'bF3$p*0f\b?)N*k4V73G5%)O)PD&b;^pUtni=0BVc[^;8E)]
+ ?a(J'Tnu\[6Q6/1dU%8Kj4<#+;"2Ls5&8dNX9gq_g'5`9G`K(ESD:@\+)MO:uM_6Vd2A%"%
+ %@:7W")M53@a.c6?A5(8`WUS'k?N'_OXX=0.#SQqIbf[r`J/TAd&0%o">pi2faK@j;]\0:=
+ MY"iLqD:J(?C3cVsa\k=f,h:>l;sMFN,hQ1&fU1V1*DW+iE3KT^M&XLts/S'/['Wd>_2OpL
+ 0,4m(PQ^C[k)JXo8mE?6;Pa7>g1o["s58J+ER]9R^NN=6043QRFJCW@,dR/hnb;K0,#c0(S
+ ,>RPW^NMYl:fpFHTQima-T4%M2r^OX\B;)[e4cjq',+;]I^21p*MtQhAI9(Ul\,$#_0!_qj
+ [Ne5%;8H~>
+Q
+Q q
+47 134.002 7 -7 re W n
+q
+47 134.002 7 -7 re W n
+% Fallback Image: x=47 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 47 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%=\)Oi'Woll9QBn72+o/KLHn`g)TW+S.AWUlEE:FS--OXT6cC`O6c1?$"d'KeZ4E3U`0
+ >otacN_\ZS]Rn//t[te_1ksq]=.CpX;p-p%.T5BAYkR^%MX/NICVSa[s-mM1G^"pFCL^%&9
+ SBpC=O9H?t&?*\UjXiBuD6Mq1op>FV:l'9=6qeLQ%FW2F84bR!J,`XUGI-tmEb<u7GlPum9
+ aY@"'&#7V-PF:%d=$EdW"F0jrE=6jM:_mjamjlJIM)R6OSdaN473pthARl>Y>AuD)dOI(`q
+ +9VfqLl@QL>$@`OIr@Q#?u?J3^>\BZ4F/8Q9hr^"4n/#?E:=u*1Sm\p2331cNqmt2ph/X/%
+ j*J[JWUPO\)[$j6q>/8#9,TOfX2)Y8Z8`/rVP$$W@?'882,NOSf&K23qW,<<&lruEWg8tE,
+ \XhYf"@U=GU1jKRQ9U(a$f]cT42'I>bp-4EuD2[o$0QZ2+3(m93Ur.r]LETgM@D6Zk7I3i$
+ HU2)A5O1Xa.ZMoa20g;_&R0G%Hs^rZmpAhZ!Wo&[VoBdq>OmZ_hQic+#gEcY)_XPmg6P5e@
+ _GHV4l>8#01'l2Ak0itK/M2>2Vku*LFbEg8f'eA>F)nKo-4?TijX+i,^NQDN&.k/=1,,mJ=
+ `qo@1]c-%q0Jq;KbU-Lq^s3E/2IQE*`5dc;FEbnB9M]F;Rl#Tn*.<5ZCKXe"Hs!suCC;XCR
+ $tn-5f5A[-<k;&?uHQO:P=DZr-?\g-VoDE>/]PC/a+lKS<t_hYTS$\&&uVP^=kAM`)89*QG
+ V<XaI/JHgnqH!E3tGG+f3riH4e9G:oQA=bj.rmV>+nufn,J>,qiV4&O=q:k"Tj@+P"I_Qjt
+ !_p+24GQZhj*6_]'rPi4@l7IVZH1*[RQd1O!7Mu%Eq-stakS92/YU?h)`iIX`F23[XNm]br
+ GCC172W<NaLL]!'J.4P/f+Y6<A]qe'I%F\AtGNdSXaN2/R'0(;;kf;7jg*Cc\G8JWD+r6d>
+ 0-9WV`r>oB%[QNZaVhOQBQN'Nn.QE[0<0T<5BcD/[V`TA76PSia,Z#/VPFIu\<PN5%DR&qk
+ KZXs-VoWF6pq<]FWr;-pjD@kXK[9XeCKM]X,Z!I>k`V@rtQ7s/X9X@pN3..8/?)CQ#&q8!X
+ Zkl;&_G.^K^L35]CJZ8V0TB-PfJJ$86l),Ykk[rgT5P"A93="9~>
+Q
+Q q
+56 134.002 7 -7 re W n
+q
+56 134.002 7 -7 re W n
+% Fallback Image: x=56 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 56 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$8OulZ(_'/3,rGp,a@ag`S4sP,`Q1kTb$)/+F$M1mBi-i(B&Gq2O<PQW#eGg'9,u;X"=
+ $moTYM-i78#DDUm)is:ZpaSr8/aAr^A=jBCjunpMdk<%2\fsCL[H>9:29h_utgL'Gqq4bRD
+ 48a83B-b]@iMq\Chlin:Xi['^3dHSIR=c_%JNV@,3Q9Ma^ACE]d^<hQu@rV`+R`6*ribWgU
+ :rHiX/Tr&$>GmZZ]M"Z"SrSrYcb`%dP2Dh)*#Zn2ZOIqTf=p]t@cs\ZW=0G#2H9+A['hD%f
+ 70U97na5'q&2J6IR"BVLq/_dd+s@!Dh?lY?U9IH&d3Ojgn^_&]C#-XX>^?&Rp%?DN`Pm`pI
+ U%H1B6!Mi*^:FP=FNBY>CWe@mdf"c&!@s!(,L+#)F?c0pojgt:*DV8ARuM(a9\Z?nFc*S.Z
+ h8AbJQJ+P.S>M&K_NJ5F@qX_I=H@,UuFWpuI:A4Zn[!T<Pu0Ah,Ol`r5eEEsFXA+=.3=d0L
+ 5:QPU,PK"et7^gIO.2K3l\R5;^PP_?+h'GO)-[&JjEHZlZRTV--)#3+]8*'4@/>F:ena9_\
+ :@IIOq'g4^"S%An8^tK\:%e0*Y5_+HDcn+nTQS00p6X:^QEcBt=:7T+^,I"J*Z*BbNcql3F
+ jlb\M/X`#`7uo>`M"u<6Xdbf;$=U2Z@'\G;[V9H=GLEc$bfm;@^RCRAR$rn9T(2PF@\OPOB
+ ,?8Mr2B$R%eICu1c@r8a2Z!J=4ED!Jf2(UR2&7C\B?ZZb=e14!4'$nak:->G3q.@+EP&m$5
+ j^@Iicn\_F_/2V5qB(RCbTAk_S_IBiPAlg+%/JeVk3d_0GF?=E3aK4?R"c.BRg`TENP6BnL
+ p1T2nlHdh*?Bc-Bb@8O?3R<u&q4?AN"7+.>Z2+!9.ij60?[d`tVA:`K>Ms4l]R\j=SBY2K"
+ jOknH[IV:c':f8L4R"HS,6;#>D%Bci8(Deer)uQJaiYbK+NkW"_0nci8>,hVOe0G]^JhLIH
+ T33,GZ4i`l/MT#;Hu!WUP#kQSKQVH1j`$-`q.)1jR$\nFmfH4tIN@+pP,>-QeS`$F,I7,'E
+ @*np+O2[JSY3Jp#'FLRW9$[gTrP+%IPM7Rio6\_Xi/h+-f@S@(#C5="flrgGA5V]KX8BT~>
+ 
+Q
+Q q
+65 134.002 7 -7 re W n
+q
+65 134.002 7 -7 re W n
+% Fallback Image: x=65 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 65 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$=\)Oi'[90A/[\JCe5@_h1';M?5=/8+;@9cf."e77+ql?Re3IlDY^m!)U;7$?585h/O]
+ 7i)#8"kJ'K&`Z9.`dU=)4RUT.d4bqrl5@qK_h,\*cFqYItG8?e;c*(a$fF&73+@>FU6<G4b
+ H9A-AMgBurJ#NPRoSWiAC*nLR:):g/a2#'>(LrHg,a=]/$+C28s(O8JYd4FAR</M.e\eroj
+ H#ILr!fe[/M+[',Iq=Ak/=:RYlZs.$MW3=7:7lYPo-Vc(GLqqQAo#8mLr;<N'oB7UFbAmJA
+ 6:.nlQ\)ntEV_M4F%$YbRCVq0%roRT06m'mKnXRFJ,hPj/(hEJ@:@7&7U7%3VXX7/^461W-
+ ce;.M0JF,CsC4Ln,P0tfWbPPp'S6E_81c6DuiBrkjQRH\!WNo,Q41')^n$kYOq8YF'Q8-A&
+ kCd[;-MY?]R?sOH>!_*&KOHX%U[YG4Vqf=Y+f*5Qn0e&-J`(@/k[83b%bs"m4t:oL*AkoTA
+ irq%Bl;al$!Zh\S_N!B6pQ+YHO$()SG.Rl8+4'Y:jW4["A151ZigX"/RGET@C#SO.A&Li_m
+ J_D?s9M\_u$bA.k7*b$U'>F:ge`<mG!Lp2dRceGOrK-a0pF=@V-@:TKK$Z+T((Dgf.*7#U<
+ 7=(-qAVf0UMl8%?h[V_0=B]1a.P+d^O-q(n^)Uq>^r?Qg%L<EYfs<G4N"MqZ>-u^3oR'/aj
+ CDl"FPP+M<`W*YX('asbd>F5Q!ut@n(s'!Gfdb@7`e+0NnW]:1odT&IqU!co8M@]NJ3$u=&
+ X`LY\]K/nnm."U7<ZYRtIIOJ4tfg)AEmAT,D3(52o\%9Es5G:HJ*BjEGX]JHIZ+XK&?qDB-
+ 'XAsbA#1,<hH34ur0@>!''O\JM;&9`+)r5l:L@*U"Y@dc:SZ*Cfa;sjpgNTst`Z/?Q[OI.F
+ ?n(]?*9at5cK7\]]Q)`b0^9Y0_(XZ"Tp>P((\Ik2S]Rs28kKeDD"R"(PW#duF9lY@no$*Z#
+ qZLJ3"eY9!2\7ebqneOPUKI5J(\=#.Prj3N'pFWOq>&-](8D2'Z2X_.%[PIRHI,r4C-6p%M
+ \hM?K]m*&LZ@Sq*'UG9G^i.OMXaSC-%ZtsC>Pnj6s^r&h8AX7,5C9C\9(:e>e;=3a!4Mn?B
+ .]ee\rE%4fA\Yq;XsGPFPRN$+Q2rq+"oVnlf.F>/((+otGk~>
+Q
+Q q
+73 134.002 7 -7 re W n
+q
+73 134.002 7 -7 re W n
+% Fallback Image: x=73 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 73 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%CJ9as(oE*ce):Pncs`2[fN;mUjufui=r+Fne#:VkZXk"c0l)p%)R5RFC<<cir5^&([.
+ 6^d@m^kBE_+9F`9"S]f),0ob.^+>FRT(t^$kjRci%,CF^NH"r1E3@`lF-RCVu>`GjrMaUIT
+ S!!q5%,qfaPHJ,P7k0@A:&>ISS5MK&6gE:YFAlga<Z5(0^l1D`6(N1(Yi\qG.f$s^<8j=Hm
+ 6>8JAFi8-V]QQnF*LCP1]Fpo0?im&RWH=^[Mp3%0up+5q)6VNGiUa2HiJa:oVLipPjOk$Na
+ Cu't+CCG%3J:e(q&R5)"nbY7orPHmQ&dBXZ>)ECeY]_T"!t?ecL>BIa(37C?pi15U((MBK4
+ o"S:%$ST?3h/BnKENi3$@dO-5s[QNn`.-!6g&di%\Gt$Mo"H.2nXQsQ52;8ippYkA73Rrbb
+ 'r1dgXHjM=p1sR]8P01n_AsDr.Fa_1T?aIuaF#;,r<+B98XBYV=:g!>cOSe#-^+.\5\^8Q8
+ aMmThr'MN3\tKUb)7$(d:8fs=0e#S4u8`CfIWK[HOu4$19p!FB)7YQ4"?@G<[c-E@'?8!0-
+ Nj;B[](^=$BYf+D4QouC[T'FgY$*^lTYr4KB<fJ(JcGtsaq!j_2&Q>SO+@&h0^>-fY+-_(a
+ Vt="oX%)I2WS[IG^ti;`@rcYQ;5<(5Le3fgm>ZD_&/hJ@?+YjCYN<>2ek2LB[c675q9P0Jf
+ Xt?[VG)QAX-CC,c'`Ec0l@u$S`/]85<m81s*bh.rK^3qj;%j7dC=U/1J80U:;4FdKXHpRVD
+ ;d23Fg'B7jdEe4F;Ig[*93@]Q7i3_$OT)Z8.tdqf[rTlX=5G^k2UKR=t&E59O%D_'7t0@?"
+ f?[E`Y"RX@PXL5oc\EG"@I-F,,pLm><`Ide^,neJ^(4BWo8BbOBBA25tE?5DZG3HW7,Cf*K
+ ]=0@cJG^*n`Bb]nt:Mg:XneH@]QU=*DEMH2h1D@aH@bVkZ\+AdFShA#b_!9HjTfI1i^fduH
+ DUa`]-[`lDk0B7E+sIR7V[J)fdmhPI-Y*Tu(X^Vcp<ZVe=b9)#L'GW=12)*sE7Z^J'D,UPd
+ &Dn[Uc6`@F7%U'#EFZ[)GCteX,CBS?DOD@5@<uccj$]6OqOaS-fUE6h5QS]_:pjq8&J>'JA
+ OY/DKJj!crtqscl\4L0'tul-7G6)dJ"rRE$<$ujQ/6=(@_WZ\\@V~>
+Q
+Q q
+82 134.002 7 -7 re W n
+q
+82 134.002 7 -7 re W n
+% Fallback Image: x=82 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 82 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$=\+fd'Pu/4D:=A?9J+5;X<*UZ$47G<0f!rL:de..bRgLB.EEX5/4)0D,[2Pr7EVn>N(
+ >-h1(qK@U!0_r>Keq3Ba2KThA`9GQX2_sMnf!;h`5c?!<9k2qXEGG?G/[@.p?*b4FN+4:42
+ nkJH78Ge+^fh1cF@E/R6%CeC=kLn)EkI]Qp:%f%KrpMK&GN/mLY1Kn66Rgq/@8G's*pA`Sj
+ ]1c1l2&dJrATYNfa$*IN!F#-"/Znh4DkB_Jp0t(pd>+1$?I%33lV!m/C)>VAf>eZ01HP%9X
+ YV60YWAo3'c0$(eDa/_\BF$hOB^SSh-ne(k(=oWW5_+EA#jg6>DEiKFT+)9>GZ]uU\,Li(r
+ iBbHIZ5:*E;2,MPMts@?XEp$f44]$-%57_Dr7;$)niqBs7_+*DSEBX9a+n:LqGi<7`*n!Y-
+ %s1"-Jb@Up[TScc_YadJ**>7-86G:+U!fG+"a(%YflLk0>igF=ErYPk=<Fgpr&-O7^5k?S/
+ %<Po2Q1>Qj*NZa3Z^`f2HdnRC/*_q#T%VYgXNZR>(i+Z:,#l.E6CqtB!i&[P<PKF.ZeJ--\
+ nl*PK-HH;5nSuq]]S#-ZkS7q%?Bp-%jI6(uc`4U@6`:E"l[E:$70hPr5!9NP#2&$fM0bGp:
+ @*'$4>U]?gPKb:ISI,T,AbYcD&oHH^P:(AM^:6[YZlh99K+%AA+jQWGDD!haJu9udS`/c<4
+ $+0k)O[d:](ts&BT\T/.7oK0H<"]F0t/8`dntm=hSc[/aN-VC&=f7ifSg]Jcm#cTNES&PQ<
+ N8-K?]mjHagLZC$">V&=\83U;PKQKER,6*U1ju1<uM?B%\.)#Jm]+SLn'A;)L3D^n)URaLi
+ PDeL3!amGm35+:Aru,?QioaXhi=./;tq3GK7Dp@-G5W.*658h6`m>AS%:D=$bC"-R,2es\I
+ :EHd2-RtQC21'R")8,ejV=LJV]+]>FJ];,W^YH,ht1@HRaOgCgea2Fq&j9E._7mB3EKdleN
+ h[0:4/.E%'QWV]8rA];`;RC^qW*Po6#>LcHYX)j(?9L3F*oZ(6O&n^$8X;kh1,[qe;l;IdS
+ NA,fe/:H3=iLSuMrW"&d<jP?$ElnCj<9RJR6s-8ifSSC%ZLib7;D:J'0(CYQS+uG?AH>GGb
+ N2tSd'e"V#D$4T.r(k9=iL?gGeLT0@t^Nds_<Fp:fq~>
+Q
+Q q
+91 134.002 7 -7 re W n
+q
+91 134.002 7 -7 re W n
+% Fallback Image: x=91 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 91 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/d91YCH&B+aVe?IGe*gl'+Kieq\+[cNs#!jTE<>7`@d0"\\W')Dh+=eaa?p8R=fY]U]OJ
+ /$g;2^+/9\b;sU4k%ap,N!T7Jf9em([44Qa8_oB("HbF6?/FFaa:mOV.9\X/AH@?TJ29f4S
+ ,@*is;;1bbR]Dq*XHL5%->G[Q&Qa85J0-]oc'o^89A4k'B,WiU:B"s,95&(^NchS*!"UFIa
+ 8k)9E(ja-\u?![<t`KSAQA*W:)mFs[G:0C^0^tcMt(GGFVZR:n*HMUTPANG3@]662Rk`B];
+ Y\K5Zr]rfPRsUiZ+$So9,@.s\oQ3Ml4-5c*_Eod&i1MO0leaT,!`K!ld@,sIkK##HC@>It7
+ QQX$X:ls\>H?AZXY%r\20X#F7E21=HDSZCFoAl]*`RO"_SR:C3H2d8BF'V>YIQ`VIX(m!SX
+ jM4e_Rhe.'S?E`[WB-bEgBQ"s.PcSXqsK1cXNsIDYE9\9qFlcg(:FmG"P''I>#<j$p.S-#[
+ _>_M(p=J`"":WN"Udht20P3uqrP$PrZ\%!M!)_R==8Zq1iA>.IO(QH7BJM\aFXbH6PNa,4K
+ J$Ie#M(H3"?)D"?%D9jfk]W'[kmFbut]4R%SK.V[*1(69G1l7(3aY>GrLPGHcPCEFKZj1Hc
+ KP>/J[;4>1gUE[4o&X&d<'EM6a>!*cd@`mWor@gC_0UIa:StbYjo@P<s3OE.2_-.A!<JK-r
+ T8tGZZr`Xd@`llg"X^g?7q<;f>ZZWlB[[ukYXDaa2F>"#Vp1dl"XR4e"ELYa,[.+e@l.L[d
+ ,Z2E(u>:)*39ADQR8aQ/q05#26olr>gE>k:r,U9(Y7>$Q#nuc->[t9hgrCl-hP>aZ1\;iSd
+ tPeu$CNeHub.!/:hj7=u5$G.-u5D7#J7l_CG_[nVo';+?;2DX1>?fO4N*FmB_VjT#]O!e:n
+ H?BgQXGOF,Qq/p\$,g=huMkhV6`@Y<V"dJ6@_Y;P/<EHe&'0gMWZ1@I%CJ(.cC"$l^5`$O8
+ I#El`6X2W9J$+.m<)mM;\oPbHkKhH^QS+[I074)\f&j\42WA*%?fNjBT$m,t]RY%N"^`Hup
+ 7)(,lR-T)^+]~>
+Q
+Q q
+99 134.002 7 -7 re W n
+q
+99 134.002 7 -7 re W n
+% Fallback Image: x=99 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 99 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$>tg;f*3J<Inkl+#8ErOUOu+tsC!2Cb\nJLjB":0*B):(.)l#:.OJH"uTiIT9<#[>(f#
+ NqWf#SQRN6JM(Lrs__1@N!P,5L-+l.NUn5L+>Ao/j_E"8ncK14oLSo_.:`$Tr]DTVDUm?K(
+ j0$kD:[:MZ?4J&f0FGkr*`%CgKB2t#N;*^7O6kP4faUSHBoJ,:R0%j'[&D-X\bTVtEBNumO
+ FehQd#'MOZ?=)d/PJWhI$rAsB(7sDE^ZXV>CelJ$"Lb1O9^juSIF%-Dn^;Ik>0RrqPqKcD\
+ N.V?I)JUBG$qH=KG$>o7r:gL`>"9n:jm?9;/11ZaGJ_\P^nsiY[h!b0WpINO^8*-+24WQOq
+ '*5J:4#'[MijS`OfMM#=L/4Zd;k_2]R6^Rp%><>'.8l5A!VFePhUQZE:KZ-h7=>=D?enPj[
+ i&OY$OP<1S-bIRl;O`\=-d>lEeNl;-0[L*C#Qi]<G]G(+_/DBFt:IAB<H1W30/P4$0:oZC1
+ q#AmDj=A#?(G/l)*E"_$4J\@Q/GFCE/t@HL67>:.7eI*WiR3eY^NQ%RB^iN]YUJq7dnb[>.
+ 4I,O5q(Dk;dMqPFJXIYpXa(a#`[Y"\Ec,5\j=Lf%`2^0s&i3?PRjUWFiB5ZKiC+?Z1LR4>W
+ `A#N)23-8=<h.s6nQW[FOcbMt7>6IJ)hG\4>-D9`RC0G[#D[rH^S8p/WJ^7?bhUC`$&]UX4
+ <t&$8LQ,hr(,*K1G-oD`^Z2Yin,unf_Y8C\.J8pb7Ng\`(Z*ObRlkEVM;d2EVd&Jh9pnXY&
+ Ugbbbc^d<[s;g%qEWi=\VY<HdS:0-8V9USBAtBm>\%mA7T@kf@4J-R@)[N2fC28ChGNPA86
+ :2L81N.Z^R3<'+,fH7pfUk6m+2r\[f4m94Q,_>ZIVOR?aVDZ+8N7.op'REk0FU/mULJI)8r
+ Afu!o]2iB[[?HpYb_Fg5`bK=eh'G;#i';ONpAW)SjegAtNeU4\+TC=j*+?6RG9KemPPYFeF
+ bhS51p[?]>$4kb,?tgs?i*\;.hCT\QZ]tP)1G.VQibV1]eg3Wl'L*I3%#5I"i94$C\tk"HR
+ !CEOQg8DKIEI554/X2q#3X;W5@8\J2HVM*Css:@dW">sbpFVuIo]WG#5iN.(]I&3hAoP<[!
+ i%MpqA?~>
+Q
+Q q
+108 134.002 7 -7 re W n
+q
+108 134.002 7 -7 re W n
+% Fallback Image: x=108 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 108 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$8P#.E'[>=ZdaWt<Q3/FnJLI7i;OBl366R7=;_/Up/R9Wq-"7FOTgf`a7YEQILh'=WXc
+ u3U`?[1G*%Eh$cmDQOU@eD5J^V;Ij5k*kp[1-#I<RX]p^ag?K^!3`Iuf-]o_'bZo*1tbR$t
+ nOU6a"2$Q'aI:CgW4nFW]QWCbIlN:(Ql%qBKP9BIm7,eUQD<*/,-,6a?tnuobk$!TLgoEh^
+ -Tsb^?"j"e_OIqT&)K^(/HsB>,YqZQp\/:Pcj2(s'Bkb)$&'pk@Y-]u+Ci%%L)i0NodA%%D
+ SO.3HlK[m4m6@g,0B;4kr:kh]hpC8AM@'YL4<-OK$4\.IH9**3`p;797V<e$_=d3mGKeCno
+ 4NIGJ<qp/pF['l&J>.H<sAU&3.G7tcR,>)S_5:d`VT<$.jcVu3%3$P?SAlPI2^u!fY(L?V^
+ G605^'TcO`#94R#i(hhe$NkmN&mMUd2"%D]KF@IJ[DdWPHVIZCRGAqtKX?KfBSP@:hu'`@>
+ Z_eh(.?MG'9I+-3?K*&o(Jk2n?OJ>(pOG3m$$]a+m/A>H`_3@bJ_H"s?2>;i/t1is2Z;'$e
+ 2ZUZKVC5T,t-,[=*CQ@WBaJ,rE3:,ELh;[Q$5<h$UMQt]7glEQ)hMs[AA;").QH@]Yb/^Mr
+ 1@+8DbR?BfE-?u>0B1tZ8_?Zu:(ii!;Ms.De6_DN2<X$lm,&=84'5WW@&24]f$f8.M-PoJN
+ :tmYl&D\m;*U5JDcHnVSo8J2*i@k7S/Dj`DVm(U-C#o6PJ]h,d=HR)EWdg?dUn^sl8AlAdl
+ <qpj\/O$Ge9Uk=BeF]NJo,j<M'$.7;cts-C5&J6qe#l?^Kdu;$eB:6Wmp7][tiC#S(/mU4n
+ <^RA7S(s+$_Hj;)HRm?20EEs>^KaROuh[/fc?@%pa/N\fK$*>7IRE"IJahVMQUrd^VGjHcP
+ c>[27;T]dkHaS@D@QY^FUT9%DuRHpXo.:62EW25iIL_#u:E-GBfZGJ1S:ol(Fa,c-(AnL&=
+ "0%Wa;68Dd'UdTUEFT0OS4qjq@,@hWCl`Z#OIV9a\'`m.NgWMbI`ogJ`J[8XOC.K+faoF)1
+ IL.(EU=Z:9&r!/M'lN@XA$(T5=J#(1s4F)\9SaAKlZ856TfXGB?rtC2=9!KR2pH."e9K<Ru
+ lRs2T1J#O748X&jBWkp:'u)m_QXB~>
+Q
+Q q
+117 134.002 7 -7 re W n
+q
+117 134.002 7 -7 re W n
+% Fallback Image: x=117 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 117 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$=\+fD(elHGe8cua>Zrg4;@>2c'gr?C1I>7nTcukI+qt_H/HqE6&3"X]0IfJD.*WNe+O
+ NU$^f80E.@!dEGL861SW>E&f8GI@LRoL2e,Raaq<!';c2dlk9MXU1:ON%o:S6"bVVoW6r:k
+ i*&^8I4aZMD5c;)$%O6UJmHms=58l/_Br858!C._.]rdK7m.'sL,ir4?0:S+5n*aN'=R*_#
+ ,],Pm8-n3""gIP(?OIM0N9!ks5FAtoqNXi^HJ]pem\Uk2*'I4sF.2j*m0'u,D.nWHSis(*e
+ &.kLbjP91J)[m/Q"5E`9IfG_2s8"$A'boTsAU&O<eQ'H5UI\'HH+D#8RBs5eS!/QLe$@e/O
+ 2^b`i;%HL\V&A/Z#:_-moJB4Ms+hgjbF@U5AEN7P(.ahdaCm_5GP1a%iuiO(.XD#hB$i`$J
+ aGL)N+0/<)neRB_]D09M[=^bX:o8Y]80DmcE0lE-Q_>b8+2^-ua4DM%b]+(YdHhLe2o>QZc
+ bCSdIJ<@^,1M&J9S8kA]Vrp@$&QXY;TM\olBK;dn-%m+EUFSihj&QZ2UIP*1ohU$sU@c'hW
+ \3-\7'+!2)<f.L00A&AKf)8X)gCY(mCB@2*4>u@*NS![UTB'e0$]mJ_sU$sU`K:\bgl252?
+ E9e9kKAl$MmFu&\--JlVcE+2[F*$!d^qi<oM2]BdHY@40n'SK\`b*jY0^3$BT=k^C'O$sMb
+ REghCGN5(SqtqNg;;)D+X'BN'plA<bPfjC2?T.'bj;0]04'<u(G%.lf%=(Se51eo:l:5O<V
+ ALt9X<d-,J8@N(IuBq]LRHmQuhIh(Dd[Ob?<\b3n)r%!U%hs]^-%oAlM3QjL.Obnc=(7(jG
+ F@+<3TuI:PLRDCh9bna'5%!W6DA.T1?5cCMfl(5A;;V6JRT25?Ei*E.R'j6f#M)blm4D3L,
+ 2-C^hAIURQl0BY;V_r"gsNf-8J2P**tHr(p0c1:he2;+PE]X_960Ht0CMQ%)7iHKke%NLQA
+ 3-.P/_SVZcI=7$@km@VAU\O1YM-iJ3.=3@K%>PJSe1!u(Ql$MQ8lVf$k#HlE4@?Iqj+slC[
+ o`s^T9jkuU-oIA`]&]3;]fA]b*,>pMi-QrAYW1%<eRh:A7\>4`Pj5U_qVX;*aZe/Mo4/"<[
+ >]*0fCB@=U@'Oo*I&1bJJ&3OC'#$N^)=%^<c~>
+Q
+Q q
+125 134.002 7 -7 re W n
+q
+125 134.002 7 -7 re W n
+% Fallback Image: x=125 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 125 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%=\)Oi'J7NaV)$)MX:u"]7LbP4JdeA/[?&1-aZ1)-d?(:L"0nReRO;#gZ()AFJ5C2C0G
+ $sb%$?F1XL)fHe_2Fcq_"$-qX(N%c8g*^^"6S+T*NSce^n<f]W!S=^m?]qLB)f%_T.]S)8X
+ Z2H@)P65$ilSE?fr1cis7.:V:t*-Vr+BM7Patek3H^BTNl@nb&rCa=go[iBmXYI9Y^N%4kb
+ _6,%ILT0MXnbY"Kj6Xq>J$?5P]ZEb#XVh(C'?YZ!rcis7BG<C2)b"A0a,FGa@6L6Q"lIG+`
+ _YCVnaPX_R\,#j@aM@6"fXVZ]Q5\hd>LD5bp[@8F8:&A[@@9ni'68.+*K:LIi8K4j$T,pj6
+ ,NZ&=)sMTnZ*O9fbA&hqDAH^;,MlX-a8(bm-S4sX+=h--f`Jmo^iFa]6?U:h\F42_ENI0rd
+ M5`M\o>jKnhO$?t,kl&PDK."mKr4+,5R@p?`7qA808RYcY%+Wkt`63,elShCpb'U.#u2;cA
+ @&83-G4Tqt0t7"$O"GiafDQpu6W1,G&WKWm/sfE!oiXBHo*VTbp"=003/4ZINhQS1u5XH*.
+ Q@AfHT[lFVAMqSFIa3gZlIN::'6F]o@3[:h5$$UU[g4cIREDTLE3]\rUqQIu9L#$"K?Aq7B
+ PIHGddEj!FRU/0Al<oTFL0n(d@HgZ,)+ikQ17epBPNm;VU^R(nM>+'On`%N[<C&pVS>T.[<
+ efYTZ$3BbGjS\%RgY7^I>l.'734:qSXjFL4WT61kjFbi8:RUD1H@/Dg8#rB.G2@?@%!CeZ/
+ DRB=idm[Ycn].c'r:Ed&J@%?pM@i9.Cb.cIkVmjl@O>&men-/Rb'O8ob>gI2EmF.IW@[^q_
+ C9Z]?r'atf#"b8fH]4a^A1E,Z@^HB#.TH>7!YE1a&@6aeEVC7BC>r0Z?=:KkhMWMB[[c3Y6
+ brbuuphiZ.EbGF\S9=0:4gug,-AiiQV_1Q4LiaUk727+Gf^s/?H<'l0ZH[<QK7]>IfYdP<_
+ ."aV:k:,k]%Hbl[GjH9M?58TMpn3>b@=/!dFI@b*+95WS^tBT#:(iSI6B3h21O6o#Rl8+7(
+ D.67]2#!<h7FLCdmCcu?Y%9V3Aa]sW==;3S(P.YIXVP47SJc.4YKV0*)LPn7m(87S@uSTYq
+ VZ?_)YBAdW"7QcCRI=WVQq]P=NabD;n7'F@hj.BsS+(SLIjV-BEM!\Zi+!+=Atq_F[;t)>m
+ dg24NOKa\V[`&brPdIt@SPjn]Gcq8Y)~>
+Q
+Q q
+212 134.002 7 -7 re W n
+q
+212 134.002 7 -7 re W n
+% Fallback Image: x=212 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 212 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!$D>>.t0'SYMb#IQ%MW"EqYJlE%+&0k&H25\3W-;)d$1`-\l'%H]L`i*ShRG&E)N9*qucq
+ qWV+<j0c8sKJ'#ZXKJ%L'5H+CHjuQ3#.A1<!B0AkpWj$:LItB>=)Cp;_[V^\0iu^WmXeW@@
+ 9+jW#A7R5?B-o?+beQa*g`f<<r#4_r0cDjJM6EcQ8)=UeiF-n'o=j"llpR7o`2Q&n:j&eqb
+ i(BZG>eO:f\$kCjdV5\@g;I$s6ikgD41M;T>UZKOWVZd59BBHC(N@2((`!M5sK#3D72sWo,
+ ?B'\5*Zl5D.hjJ9>U_[[[Xc>[*BsD]hS!'#@8?q,#r9QQ=1im(<bU\])&@s[$t>Ho&9(?aE
+ mL46s#K\t:pX,)rUAdl=0EC34IOB#A;5cq^eY"5fY5'f6^%BGJ(V2('G)Ao$l!R9Skc1N#'
+ '14;^b$o3b-Y'aQ1J%iV01FGaHRbGFtKh-Y"jG'Q2XC5BnlR')[QAj:*&])`OX1h@(:CV<?
+ 1*n(g>k+HEn==Z?,\]%S9ns2O1"FQl]kTgL4rA%DL1;99-VG!2_MGcOm8f;uf<LU]H)[[+s
+ L/LpU!;tELl-^d(S0k"j6lr'mll05t$`B?A),h_(I9;<edLJu=bFS_aY9=W02nQ)fG$tA=X
+ )\&4'>uanuVC%Y[8gaT&G5%J"G]"oXW4II#2i^W[Y$LAdbhqg?nbpn4Hp>BAp$3cR(`dLZb
+ O*R!J;cO[A28mKUp"^@]A$:^;(E3jLl&t8Vf(>5Mi@9phRW7JMA;!6ej1G8ZNoL$`'gq(2;
+ $@[#d0+[T([EUl:I>co'TeY7&%>C>oFTK7]-V2$nD'ME%oVa%ipBiHJj<//e00U6ocAgDR\
+ 5+FL8O;^!Ml=A&fkRiCQ_?pG:93kZ-o6/K)C@Gu7Frf[uYfGjpQcP&[fTV=JIq$Dn%,(I^h
+ maddhcP>)Gt-)ot!:S0=/^ZX_WRZN&f'$%q8nHN]qbQXo-7i`)O?>i`@R\\@M2HtLpRb'?Z
+ Z!QBg10,'SPuX_<^Np'Ak2!T.jT\(=0I%E"gn6V`'WWHks*i0"N(kR_llI$afkaEYdFurtO
+ Y#L2W8nX>'>"EdKXHXmoQPBcg[11L,@2rf"GRM8DqJ[f2k/&F?^;$%<3h>!._Bq&,8B.NE8
+ qM)"GQH20f!+Ua5P7IrdILg]ga3f^O83(o]al#7u>HHMS^i\bg*Y3[?1?(j7.+'c;-o',<R
+ $CZ_O:tU]clcaC8^N6kBY`<^1hZ%hJl*+],EdQ5l8m1^)[T.`3Wg8GpD\`u]chRt*o"J\AJ
+ !HC52^`\p2Y#tY!DkN9YT&1ii(qY>3)?B7mj2Br<>$>X9$iPlDijk+A\/<1-W@k79(eU8hr
+ 1DCT;M4]$K5=)M51;#b\Z1JnBGk"P:H7#oRd3;(rX34sl0BD*&!Z'=#1fQ\T.k>U`@nu3=*
+ hFn?V3[D_.f"L>45;prm:ISu_-iq!NCMs&JcBBR?h=AHO8~>
+Q
+Q q
+221 134.002 7 -7 re W n
+q
+221 134.002 7 -7 re W n
+% Fallback Image: x=221 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 221 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!kqBhVH.(fes3@U&u5F\>Os8R18,$cXb:A(7Hea']J=%hhC]`5K>C$FCL:TF/%06nFQkV\
+ %8`;p$Am'cbA*5t.J<5q#B>Te(oGQ8r&mo)u1kM8+EuC"dc<cTU00cZe7(i30h9NK#g+\I'
+ BR_<$t/-C/U1s2N!9"XRu.BgP.3;UV&qjJo;_HC7I1d?'cc'ab8,-Fe:TlhpPpB?m<F35I\
+ (GUuBIG3o%hdsPN[ljFX#DV`/^*@_el=^>A5:I%1BYA`.bj4o(['"2Y8?+95Peug#&f'mFE
+ Ve=GL4ZkC$(Z+"/f<,k/`bI_d+u?^BHWLmrp%S.FRHMkl*'>(IAIHuCS[j,.F4miI2n(2:f
+ >sd]s+dX*D@We[]<g(lJ$sPSA.(%t/dMrii:/imIjQsePfbpiY*;\2l0k6joI+A$VEYkK$=
+ C"[Cu2fY$AC3Ic8V+P(\b1lB;/J06B11P9#g+C'FMHV>0+q?#WGE9j7@0Gc8]qR8na6FZrs
+ _eVb[hl2D&V-e-G^@"G.U5E$)-&-RU<<5&^LR$R6nRoD(A^hY)+JF*DD86XesNbY4Pe?Tp[
+ ?%3%WGc33>/.9$551aui1Gj;eY"9RuWE$)-*#0^bdkiPUlUTU6i:?_$1,W"aJ3m_Uma]U/#
+ 8DLU'D#X?/B4kl[aTuMF"^8L4,C4t,pc^mgo-$17[$o]P6Ve5\)*cN1QHI@m[']bCG@;kh;
+ >A"^W#)iH9UJ(W^-?lu=om?5,tjirfHIbH$-$";V&f7%W86+`:M)Ko%.nadl'e'@F*"/d"t
+ Ue$Adpl<TMQbX,dY0Ih:Xg*`?fil9()]WYd#AuV=j615+U!GgM8P_/Y"5]^hY8qFQ:A^Df7
+ %Te"E,kjRg7(JI6!GA/N[P%V*tD`J[k?*p>Cj95-4<'gNOE_7ef'1;<Y0GJF%i,A9U=>M8a
+ @KVOfnAtrPce:OU1G8#M[O;Js5cWC^=kgc_RJhTIZN#@2N[%/3K3,p-mcA0]:rQrOFnVS';
+ %Ld1OeuacjGESqUD]E4ClEsft8d5+.7</kckNZ%M%ZV/84TnG>Ku2]V&b.&T0KoaFLb^4Xb
+ Vl-Gs"L2Q#L+SoIs6*4>8s)h_5YZ"aJVoJ,8`7>f)d318e_'ubLu7Y=0I^%?-UW]4/9W"NS
+ /-&cTr'&3jlOg,a*k:o?X!sa[dHS]L.ImGOAk9Y^<QCK0_3Ton8=,o0YVs1s4o+EH+<0^P)
+ "/3L_r@5\<VU6`Y9K]$tIWC&W/OPa:*mTj^_m7m*Z@4ILNV#_A=DY+QLZM.B#UNLdVn\f/F
+ l5C/!LKtu"F5Ze&MO:^c7MND>V0Up<H8!Qc&I\PR03ZT6F!&$F18;&=b_mV;[mEf*8TbND8
+ ;H&]<"RqFb/2#N)eKKEY@tm@4[nW]q[JBX@]K?R:`SuWHU:.'OQu/M"cN[ud-l.;NYGo>tW
+ 6<<hJ@;eX!W-'pY]\c@.AGR-0YllHZiGbkUXA'[)ju2jlT_Yj'>s~>
+Q
+Q q
+230 134.002 7 -7 re W n
+q
+230 134.002 7 -7 re W n
+% Fallback Image: x=230 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 230 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!kqGt\ls(mTn9MFnR5&nA<.X\hsF@#S1:83CBKe9Ju$NFIkG@FPWd.8\.gQ)d_HXs+7sO`
+ Hhc(_/ib6H]rh";R/tCq2&mg.pJUSTPoBE)Erkm?a1=0f+7Lk54$0INLfRLS\$$)_s4M',)
+ +cZ'A0`'dD&+d*T$_*YD6e*Nb9YX-Q9pZa8C9.ZD9_FQS=:%,(UVd`\!+c_!unH1L4ij-%<
+ 8a+E@c-W3a29##=2HK@a"QWoZ<U`UGH1Y8J!4M-#'p%7LEUIShgmZ$#1/Sr</+<8/^f8fq&
+ m`(5qBBQf'qk5;&lre"SGQr5!:/6q4:UZ`3"N9]^([gK8>dc3)_'*LVdQf]PE6/_RE)GiWJ
+ -UbNQUbrLRc*1gG4+.l>IR3,!p\7`on.m=k18O$H">uW&!+q-Qf8Mq#[Oo7?uI]#YeY2VI/
+ ^d(Hs9f9r)bM$SK/d@?arq>BbNZdle8`jDf5o1SY'iMl0-@Y<E49LR8B8lj$po%K9'*8n?K
+ 7Wc(+#UA&b9Xe$r>Rd.,3"MJ$en4aXW`S2od>>5e>h4-a9[.P%R%]UU^mcGml5Kn[\Epq44
+ _Tcn[B8hXsqE'BdKaj\]/_74J!gat'>-VQ5c:S5q%2%-P+F:,^olI40b91h&6on:.HBC:-H
+ ?<phGgUuJ90alCkc$U97WZ]W/i^="B_o\,4/J*ka7ISkP]mB?O8BBP;Jj8SdH<XTJ7O+ILY
+ e(hjhj'MET@qi"a6_LpY]qmk$ru4o0QX-eosV-q\$sC+'4"ki$7l736/Fk>VhlP[bQaV5fA
+ GJb;Um*AbO41Z4EMurp$,m"/b5Go(H`+<oDrHU8MK@8?!Rh`4EMFI_cj0NBZO^>;7%(si?X
+ <Vr#@Z)UgqG5:/90[s')fW1g='YTJWDY0P$ESF,I"KG2["?+N6^!/r9YmdkBmbl_E8S$TMM
+ aE.48F_<?Q22h(^>,P!tM]phF^cCN%-#U_"p5Bt^.o)roI\Q2c!j2V6CQBie(FkA$kbmmmg
+ 2U'Q'@`t(9mFu%sMMD8h+TiWWGB7i;6ID$eqa)FH\9JV-?s[db/=)p!h31!Ki6:brYa2"-F
+ \PSK9++EdHtd([@=<6GI9O%ikKTK?AS#ne3;;Q06m$eC_OO/5[cGLA3"pkr;-Sr1J=,:+*u
+ HnJ'^e:GC^CR'G=:b<GBYTbaI4t#i*i^.Z*,h?Z+mDXW2Bm-a9oM<7j]UA+L"SbH$L_8rkG
+ !aK2,<0EtInU"W#\%(Bj93S;]d=n6_\j#[YTLJ<8+?E3RWTKi,&R/l&_!'E#<l2&.3npa(L
+ -@7af1"f\:q9g]"-f#CfOF:]\A10IUN%#u:rP<]uE0SM#2j_t$)[)+4GpHR_Z9M1_7JBoT?
+ ,E]X)acL>mp@`G%@C/?3[2g8+Pm[6&-n0Z^YCl!C]=NHM)*Ju)m6rq-T/b"X6_W^YC4]ihm
+ e=;E.^Pn/7Ylh*!CF!i#6ogk_`pcj^TG6N/7]E.~>
+Q
+Q q
+238 134.002 7 -7 re W n
+q
+238 134.002 7 -7 re W n
+% Fallback Image: x=238 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 238 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!kq=\P#^(_okDLhj)L`[*71d29iNMu+-HdAYG@C>9Fr&D+ET=@#R4$4%-j,#B[dKV9)"L,
+ +I_ciLt7"fgpr.Eb8;;O1`>952S>g>oa@W$?_XQao*eD?$g&T)ZFc4*PZ5^K=3aKiMi$Z@m
+ m/%S%ENo.Df(LroQ9]ShXsNJi/0jaK`mP%SDdQ]qmsNL%dd2Ht;'Ier0LC$3g?S2upWoP!7
+ C_r$+-'.6](T)Id!V$mlqr4p*?52U$-=>C\t=IIdEVms@63.CViW!s\JX&bYHk4WA6H5a>?
+ 21+XimXYJ^a,e!FE$<iR#KfW^*tf7+1n*@f<Ski]nU'uf^J>Y!%X3%)GB!prZm]bL63?psq
+ U*h."](I9M:o0<@U<<P.(XUu&eS!)O[3HZ'aT\"XOdt)@dEg&H[f//1jJ_1`iN=%R59J-bQ
+ sY$h%C-/B08LHaP=>RRl3R:nE.tS$jPeCMo?t(LA^t,Pa",C_._Frqt<=Fs-+s]P:"\tO8!
+ d;U5^*^^t6sG5LLoS6pUg,'"*0Os7GR-<,*;+,L=LNIY'&;9UV)C_IdH<]pj!1+IMC,-I<_
+ QI2j6>mHbmR)F_Hb`ocfY0mJ?QO@(ga%ta?&In1iRRMt3_ju.o[<E9=aM1'gJmdA:6/'nFs
+ &V@i/am<k[lSE]81^?dFL5)@D_HXLFdF!pW"g(d)Il0*GR'g[OB1%;,2n(1Zin#\^@Q&.R1
+ 4MLaM2".$[i_?tes>IZ'M+pNbaF*)r;#!M*&"L9*j;u_\uWBPVlbq8.6=T>YH-tbR7tW^U*
+ 42m`3NsJoB$3MSI1&rB(Q*O$\uMaC$3bVKS7E8U2IBM^Unic[hiit1_P88dfgd6M2)SWW6c
+ Mpf'M>aaN!?u5&&#sBLS;H9AGOJQk[r##I#2aA#[BZ</V::Y7sfg<fRI80B$[M,GP.gm=r@
+ u;9%:sMhKaMgYn$&lddfHgb=J[';SH4>q\9$^jG]e'C>,b-;VViiWPZ"=%9>q'>8B1dY"lI
+ -c%T$96EB\h(:4I]"3r#Bm"`JT"dMibS_[eBu%u4G/e^\rVNqhgqd)M]mZraXFu@U4$-#$9
+ j7DmIan:t;IOP0oC<I-(j>+gZ=&5$Qqb4$OqY*$R@:.TXTbh-UOd,N"%$/q]cMo]Z!mEnno
+ >uam"CJuEVXVVcdo6fZ5&+J.:0^9[^JL/B_=FB2e^IZBO1lF#-'R;1XFAX$5(km@^g4OmDb
+ -Kf[sf8'P/V=;sj&X4\Dsr%2!i2-65*5!!-tP"eUhcO,/m"4mhVYMi2RFQu3%&:GXc0>nc)
+ /?-Hj=b%m3aX^ai0eJ/gA66UA#0-C7=S/I$STbT[2>_05fNZ%$.Ti<pA,e/B]5CZG$4?49N
+ N_L*OehI^-otc*5>Qh7ij\#ZJ<L&kneCXG<FBHQl,GEYYNK#nH:_>t@[OW%/-tK2tb\$;]o
+ m1G*#r:^dT.r#"k7<U"D#`8_%oI0W?N~>
+Q
+Q q
+247 134.002 7 -7 re W n
+q
+247 134.002 7 -7 re W n
+% Fallback Image: x=247 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 247 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!l]I8%k)*641Va-87a.J&WT:MhsEZAbp-4:Ut=A7uj8bsm3<\PB:4GGXJ#WMK1%Pq./Y;5
+ 2O'So=7o;X*gmFa%tpPP=li^]!S`S(ml&]D#KWn%Q!_kPKOLs-fJU[n@m,[(UiiT:5U".B+
+ XX^+(JlI:T,r,!r=[US@8>lM,TDCs'h40.@e(kb+*8hnHc5$Hfo$.I5bLSsrs\ace0/&#UC
+ .UfEJ:*(b?oH0XPcm/6\7CY(%&6b=fteArh2WLmPKfs>'M3cO#nSitK0[ZNI+.W*ou<Dg\)
+ 2E&s+FpX1haTi>g\@V5o4j1CkcLQ!*=Z.s1)'*#Hjb62h5'f&'p[58F)ai2Y$aHuE?Fr+?c
+ 'j![=-LLnW_G"E:i#BQ/R(J84+9<h_M'0<UH1$1\#+mP*ZH/<84u<:nulE@mG`<V$<jipCM
+ qF#[d:/b=b*KNR[,M8]6#K7q/Yn\'mMd\:J[N2\9V!a(=p^iM40p5AGPG&CI(6lEq1^rMg,
+ #>m*;.]b;M(`)]R\&2t-I13O`]Z;Ef0b@Zrs)^@/pmJX2TEj/,?o@V[VL*boVkOsaeGDLp_
+ EIf?t;i+u38#7_4LbQgf[NFcM5S2H3Z@g4BZSfZ)%:rP@Ok#tk4mbe'(aqZa)>>\6nFnJ:$
+ NuE:k>h%3mV6[Bb0sTZVNCV:>aJ]'t`<ZlkT[_&hBB'c;&Y:&TIXULdA&Si\3YiSSq"PFIU
+ QUlU'6k9F,38>gfk_?`I.Lsg"#qnC'UA$eYCFU6#hZqX/($\Omd>!Q*8D@$4PJC7QUn(9+%
+ di&`l6r`AS$J_n7Nd`0fsQO3[g2qM$[!nA-2qk"Ue-j"H<>-IebaR"j%`+),Wr$h\?KMM>U
+ 1M7&O[h3Kpsk?eC)B7*Ih_bVNmp@d<:V(`E.=RW9u3EOCQs:8hQW\$lR!)@T$+niL.U$e0V
+ $mnRR3ob:DUbF&i8T4WlX]2(;KY]ha#R-PT9HW3+:lW24_a4qZRnhr>;V5FPAi=Lo:o38Rm
+ 21X9/.M&ejMm^%7#\]kflkK+-GB[O`@9G9R3!i7hO$Jc*KLn*Y$fA<?mDOij-F4jY]r.l&,
+ SZ:4p1cG=e>88Kd-?.VkCkoVQs#e+!eZID_?A]P^)a?^PA)U"*,KK2+H-a=@FkEO`lQ5t;A
+ bWd,_@,Ts)Tf!KL$bV;RgH/eZ5o3bUgUJ'8mG5%fVltRMm`R''aCMW_Z3;M'Y/B+\kohI'e
+ =^P:$W<p!$i:/!daNgY.>6fjt0b4El"^4%Sm)4N[a.5NV!`]=RtK81kn#H`\bU(3RQR%)O,
+ Sn=SEf"S_t%68pY0,*U9>RI<I/:s(PCImQ\T$_Q<\>DotgDIhGY+KVuGZkOt.97^&8<YgRN
+ k(/0L7Rh;,GBW]1eTJNRN<UV\Iia],Y71s)9K8MZAFu%\^E9?/='lJ>-e7,,#V/@o[.a!2M
+ eG=3W`#Pc/skTG+ZM/6M13p5r#`)6hd$pM~>
+Q
+Q q
+256 134.002 7 -7 re W n
+q
+256 134.002 7 -7 re W n
+% Fallback Image: x=256 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 256 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$CIjXd(bV!>8Q')&oY[tt=@O+oJeAqe7+(sgAOltn=1SYLWECgDe%DTJf/0%a>%ZNR]O
+ 5NDV,Oi=DPGUZgXK,Bk%/G:-W_D1<ORMYFa+a9h`9Tc4m.6cpH>:Hs)<@#D/J5&`>hWY>+-
+ j"\N2qR9l-mWW+*)%8P-=hWT&kqqIe,X.k1aMH:VY585r'V5<j5Ol%p'6?=&[&+6MqGCC.9
+ V*m?fgjQZ3pq57")hmcOIP4GTSNFZq1W[dQ1HfFFPSS:00-G$b,X]tN/CY/OghcCK"Ce<Hf
+ ,BNm6kUF/j'h@If.S8b4M52=X*(qDMhn;*[oB%GKVl5k2,F:'EE-.%@[VQp'*MZZ:^af&^2
+ Jdo,S>/T"(GEL30]$APor1n9o*;fG&UkT7a?=a-ZYpr?`T>s>-)$55LY1@:f\%urD9$)D69
+ N:<p;F+:o5N<ar)9Lc!s1lIM/kf[F'$u'$n@N_/f0@kEU?r\TgLeXd(FWi2E#c]Xm*0)hjH
+ 3O"F\iP4:eg(@Eb>c]kUQeSj!!EQR\c*lgs\3jlL(le7pg4U%!JJmRoT(f?9)[IXU/0\_t+
+ `I<pF/e]l4"r?k=6E6HB2c`r?j?q+m'I!ruukq)r;U,pfU7ktTsGBZZUMUKp30eq##Sk\(Q
+ ($C8rBY-EERQ9uhWH[OL_4e)gmHP$g#X^r>4<A0_'FN[3!6I@Yh[d20lK[m'U?gEn7&1-O`
+ 9VVZc89$c@"]_Gd3<,mJVOJN=.PEQ-_i($AGu!OafO+YL:(29+khO@TPRD"U]rIrI?8*]N,
+ JkQ=:joY&4<39a9[Lln`-eKH8%Ugd9rV\X&pnd?:RBtqY5S!akbdKR5(Sl+3Xk*NG3"YgP7
+ Ff)Xls[H/JZEQ4"2"GUSZ"9^j9UaU.XlDuA[Wn1-D3:?%=JJ,6;ccYkfcCu9+sMMF]r]6jI
+ Q:%34_ZSOAX6jBcq^KPs+'EAdH:(F_?%<HKEVU<aOfGcar\[a#)gIC^0TMfLNlXB.Ok%6SO
+ ;-*BK/rk/7!^6j<<:j7"@V:J!P'?J-H!"096%QVU[_&LFAfDU+qK7uCKjf_CgA]CChNeq:6
+ mBas6t8WcKQu,L0QeWt[t;eid?`N:/%ZORrf.K<SRH&>,%dS^5"F.rpA<Ru+\BacU-7@WG.
+ t_;2$NWr&q>CF:/7-LL,6]d&5:f&!e+s<k99(AMhUHsa%,VJj;pB0$k7&).`1GSdl97791o
+ ^nV&I=ui=u1cU)'Dc6K+1[BUD"j9GS,Vm=S(Zj)SKs7O!oKoB--J!-EI"FuFARf%)B`f'?b
+ -Aq9rf;7Q`4"2?2@Z>1pB`cmQ-^L0M2dBkc?1#e%:R07DQ<HU1e]90qG^LKai5;kEO"QU8i
+ (7BkaUsH,N>0:Y<_G4:BqI;mFWhr6[!"BUdI'C)(@Ll8YNbIHqK2)Yspb`)\1$\Ft)#4+R`
+ u"I7':A~>
+Q
+Q q
+264 134.002 7 -7 re W n
+q
+264 134.002 7 -7 re W n
+% Fallback Image: x=264 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 264 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!kq=\Mau'\,`RJq-c$'o,1VoKt<)@N("iA"o)&NB"kpB]9SY6k^j`p#A=e/OF0V<5FGi8h
+ #AqV6BB[$pIi,Znf!';.q%=KqaO&#R+B=Ddc@]E^:c;iK#?:9lod[lgD+*g?X]WrJK.-e*6
+ GohPI,c;H)*i;,pNBgVh%p!0N)h8gH83)7obD(7!$'0L.BP.24)eiUTX.EmL8t3I*CGkg>>
+ VLSb/A,$oHd/94B#N-A1!V7W4-DC@+i\p<o3WDf5$_5VeU52O$P_3Q['&AO\n:P*M'J]Biq
+ 8G;F<f$i*GMf.@N(5W7,\k(sZjlN[*SA275"*rW"r=?AT's(aan)kM%DB45o>5jsJ,k+Xgk
+ D'&RL(04-oX(86cp#3n]q!:EOHVJ616KdtC3=Z>Z8+15Ids0)^]@ER>Ifp/I!P(aAK5W,Ng
+ CQ==;m1bj25*+K"#K[0JG3Zi5*(LQX@&OlBINfU8"?q5*EI_Y-(MHH^g,d4<t'c9CV\jZXc
+ YW_M)e:&!i\hUoQ!Peq+'&St:-A090AM1i_!AXPi$R)`K7"_E,6?<M^W%mjFMt#(rVVZmIU
+ #T<POIa,VGM"L($P,Mh.BoB/WR\:i+q7=sLX!e.SiHdncYfNn3-'8hU%g?e0%ARumi[C3n;
+ P.A?@]tL<*hnm7^EH/:*k8nKpL-D8HUdrY"94;GXS&]Pn8&;Go505m1rd!J>S+ucu(GFM"^
+ Ge#/NslP_bX6!K\Y[8I=UB'`KS2T33%6+^b:&Fom-9Jk3!C9SNk6u%<%Slp<EGYo>9OEebs
+ jJK6c39Gp,"URI.g7M?t:9<Jl_JkI;rTW$&'7FNq)\Olg(#O&:i=\R7s-5WMp14BZ6q+?7?
+ Rd:sS)eGR-btOGJXaPGg0Op1tA%R^"+($^$7c2Nd=dTi=@p*u"X8YFLuKA5Z/XG9RRZm8*7
+ J/:Q$n9q!9_Z\O-sh7MVJ8Taf]^qfgd2o_t+*TQMrJVDF<irG;PYWP$-1`?k`^:umEn0+>4
+ m31*'1XSicXB*E>Vm5cM<XXt7c0%Hpa;Q.>#A>qZZtgJt=`s1>;b7:m!#gU,+nnJBNFa1L_
+ :2t0&8\GJJk?D;6`!(7.*hpL,JdJiN7tYGcPfN]_9h)e!PKY#$>)iV2Dg(@92?)j$'d!-bU
+ :Gl6e`k?c:SkQ?7lI7S..r=E>T]:SUu-Wgp-5>_;=$\V%O6RYbUe8AEV:R&I@;NfH;C<Q]n
+ ^oknkp#1h&0tSpC)bM;m:!EN-b]X;8uTEIMQ/=E$;CF*#O7h#&[(*;Jjb<<01U7_sT$\f!1
+ HX%TY:l"_Q-dcfmr0elG]ZGX?^PG-X_1`'*omt-2V$OX7=.B[e@E,g8+X8@iFMQKTo+`!aW
+ ZV.2`\"RXdi5=bt[pD::Qr>L%LWn,Rfo3d/lg%Ck$%/nZXUT1lN#==1I?QVb;*=[]fWE`nY
+ hAMn`jEM8q@BMR'7p~>
+Q
+Q q
+273 134.002 7 -7 re W n
+q
+273 134.002 7 -7 re W n
+% Fallback Image: x=273 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 273 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!kqGt=--*6ns[43XGC::`9HU?jMs+H%Wl8\rKH.*>*IO2;/0b@<>NRIaU'RF@[?F66>&RX
+ (6(/$Cf"=<![2k']>Slrf7McYp+*csOIK%(>odo02(#p\^V$FS)1YBi.a85Z#S_Q,U_UO,4
+ ITfch2I+qSfTAR'+A6:+[M;F=3>]V:"pr/T$Nl/e2hmf);>l'15KPFS0c3B9e:O'Q$i:S(6
+ EGODGc7gXh<.4n8r<g/r*iSi*F4U#_@M+<TE3BD2hDS<MfK*M&Cj5];THfN,uh7F=1*<L`E
+ R59P=qF<`A_H\-(TC;+CbejNq^s#us5(*%g0H6K8C[83)X-bD='#7SnO#AmU&7K5G@->h2U
+ IV"<kLqd-V_0KX_YbiG>ne$=Hi89UWDdg6p-mWfhH@LYZ#Cjr_1LV@o7JVHa^A4R@1*>./m
+ B+Oi4qR#m)>5?DaHcS-7?uoM^cluJq@`$^Ebcuo>64VrVJsK0>BYsG/11^oGKGue#)r1RM)
+ 9]RGgYPiBWL$A^$/TW,nPk&";.4S_[1M:?c.Z=de@Dlh;CEMp%G#%N^9?qTPB,AnJb(-9fG
+ h2^_<DE6H>Dcborj3"S&n/uk&umf#+$Zp$"@8L/&OYGX(`2)Kir3[Fs=j67c>XFZrC$O[76
+ R5/=^oAn"i%a@<2k(P?l$5qN'?8,]L:oL=pm:pC10_`ZM*E&j^2n,$nbW(*DZY^XlUV[&ok
+ )`;L`Zrj-:PW-#U)eV_f6feIQjmfBS"'<0gF:@h^:qGOmcG$%E')dIBqh.=rd0";*8d_oa(
+ R@hVOO'MK<PT-e#'LYBAYJ4TC_[OgY.C.H\Vh2[=jo)1(%_PFHC_A0[&<ZX-p-@Ch,p6ebG
+ tdaV#GOlf\U9jkdN;%eE5c,)[V^S+N\ljfNTE,4O/,+_0;3`nf&fannkXl.:k[-6m][T)0!
+ -d9F%%)8^6-d6Z7qej\0jfFL7#iC:h]7Hbj\JA$7"rU&?LGO=CMV:'Jlm+5EBpJicI8PLe0
+ d8JcT=R4OP"rskQ!^]ti5`:a;Lmft`iV/cZG^-HnM_`eHV&C6jkidOKgD_(XH$Q.*86?&;!
+ &cEj85X0S,%_F&[2Bk/!*].lg#&ug(2H=7)BK`GZ#LTeJ1/LQHM-6J"(3@(JAioC,9iq;Kt
+ Ri45\DI9<2ERZB?!hbf>pL\9NIXN=lAb@m,EVZ,f&6J(ScX]a=Ac\9EVtNcs8dd/]]>RH[>
+ 3+&t"4-`!MY0j,?n6'd9jY'FKLe"coR,,C"M9cS&Q*:`kWuj/Z8&)8hih8pODOZ;DS^>ne,
+ X*#,1P!jb?=^nk_O@E_)%4m`m(QdScVTJA6a!+$4]9u(RnXf[=4_amT-#$FM(St,jj%CSQP
+ iF0WkiGEhC6RDmq?4$gC#s:lL[r3si@E_pDWDtEm't9,MQ+o%9%-N]NV:kk2o`K!9'9`~>
+Q
+Q q
+282 134.002 7 -7 re W n
+q
+282 134.002 7 -7 re W n
+% Fallback Image: x=282 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 282 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!kq=%nfT(j-u6#H1Kf^o]#`;2>f!*!pAS(tXBj)E#%aGYj5D)PjG9((+"lUKEBf;(2Pr$I
+ SpK;NRa]$4%@!:eDT/$C"RS[H>eB&^VjgH#qDUr&sedk<%S3hnK',eL-]A1GXjJj$1K%MP?
+ jR+sZ!#L#k+Y,GH;C>Sn2%ic'dbg_([s96PJKD(V0d>9\>3&FfV7L#c11&s"&[FPsre]mCj
+ ffeXi3p[*<Tkg5ORa&C9R8\9<A4d4PI'U"lrR[S8qe>/9U_9$hCAoHNG^1L*,SXftn[Y#0p
+ rQ3>;db^SUj:o(MGJ`=V-qk0l>b@WaB'tdREVrniYG5]oEGsmW4#T!UV+V\,<Zt,%KIgFL]
+ P%lXI+3OXA]7c[N4F6lQr229oB.nYPX5kX\Yt>.XCuDHq!]F08\9$)n\KiT%Ltc4('IfE#+
+ 1n/bfjsoRd+;3/DBID!>ZH%F6;8_[cVD^$8jSVgjg)MaiVuWT?5=UEd;5BqM4tBZR?OEdA*
+ f9lg]2ae>ZDWA+*!Q]T%l_-;5Q?4`R4BPUTQF'Ar''K,-(ufs^;4fs>U2Zqgu7e`^C8N=L#
+ RGC<e(`JYPCFF)*odnu-cIPYU29V)Y6%g)pVQnc'>N?UV*44_m-:r@3fN2(B:m_h\N/Cp03
+ bU/GXAfrl?o_(o#b!6H[V7X=Ymasgt5MptQ9`,^fm_:H:)[BR(C"%%(ckS((*Y_)[9ne;,b
+ ";q4Al^@Go#=.%77Cog;RVo.3YK#O3FkP>:]j.LR6AQNLJ"5YmdLFLSf8AC`TKUDY3'=9T?
+ R45Xi<<P%RT83(s+B_&Sp!mq_WA8P`6l0QjjLu0R`@op]nf`H24b%c%_34DT\OlotUPnM`K
+ 2ec/miqR<7EkSqj(sRb^j4kg9M]"pX:a^SrZ1hE8<.]5&3DR-!R(n.6_o"1[U0GLQN`[u]b
+ _2\Ll&DKq>\KYK[eT54X1[>9!H@W0tR0gTJ<5]dQiL3\=f+>n[M!hMkNcp&'^['jT#g7m1M
+ #7'sg/HcRbSN-$'m&[C/.4M50#RY'Nd]ZqDK9-i;Qj/q"1Ge0n<=)0U^ml^-M%)cp]F)!]'
+ gj8=c_XShH<ON7lfqZsbKEd]?MjL?`'B#*ecNH+<F?#u'14,\Mij3\p@a'O^>YJ71>':LUB
+ Ba^PEV1P)N*HaD:ifOj[oS/gUF)k\g$Mrb6jXG2T?$'<N>#G2,f.(<WeNE@U(Y/F(A&,\oe
+ /8p[?H!nA)E>=''1/r38_e,qfO[<.%E:ig)lD'6nikS:JGkm=mn$.md\g#K2"=5stinK]a.
+ )!i_M=!QZ@QV(O^9];7q\B!_bDcR0c0&/(/dkP*!R?OQ4#SskPKj-NmFo7cU'91s7F,9`!)
+ iX!=Un78"jN8Eg>$u\KEUb2][WbR*lXF9gQL6jhU^nUZ[_gYl(8R#10%M"+'!%iB4M+7.,O
+ :1JTWK=T(V,Gk$O&mpkq6)95eo,jis-N%5lT,_6~>
+Q
+Q q
+291 134.002 7 -7 re W n
+q
+291 134.002 7 -7 re W n
+% Fallback Image: x=291 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 291 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$BhX^n'\-kr'L]o..P?Q]d3%@;iYG6F)RgRXi"h;F6I9E*()&R@:aese6;]3Te,m$50\
+ E'>L*DP.b`oM3Q9hsr:g0`I!i7GR@1Le$5!AudPPI-r-XYU%mQ9mOHdB<BAE:M2T%;JIbfj
+ fc?^?pU_;UX!`Kd[\p7Nrp<go+HR@%+Lp2.K>W$j.DCUHRmp6(T"1n*Xj9u6Mg5@(jbEqV'
+ a`!LdPEop'L`J]=`f7Z=OH+q#F6J'UNA6)5H\PJip?b,aqo]`/=LZ3OHI^O;K&;0G;/JDN.
+ (3mN.=5q&K=I"@2EqZ7udeJ'X8k!:YW2TJ94?Vrd4ch$54W:eXHdoWL/9c<hg9m&BC?1g@j
+ $9G1\\#a&CAn"]D;157*!,H1GOPOV@+;'NlI9PmF(\ca-'qh$V^!A_j2YXl4i:@&Gd_E+F6
+ QRLKu-rtKF!N!F)q^r^-$f)9#T%;G"guWo35TF'&FlL%r*r].bN2?=XYhZM%Mt"q!QW\p81
+ P-/hXsJ(=;6jV`QpD3]I\%O^Mhbi.VP+(GC6J@0<eeIdj"pc2O5qd3b!;.bLXsrDcsUZ[</
+ e83;<m]m2Eiff@.$OZ$jt%l7kp9q+TT7PKj*O@OYBUj@=Jqto!@Ujta:;e,%[-Sj]f(mO4G
+ (9psZhVJQcp)jkO.EKVf2L@?=3FLDh\s!e>R;QoGGOGD)`XU&]k=sX_lKW,_f/,<PA2`Xn>
+ (o9hPsRB"#`=3h@:?*m$dHM=`/K46(+mBSMb<(P3.SRb_ogD*0FW&H>)YopZe9!p3Hdfn:l
+ ?F/]V7?&N**c^iTc;!PF.!bbsNKr<in\<pa8i]'n<*YCRU^-?lU.+[TJ@0W#^CUM=9=t4a.
+ B^L:Rp2l52L)Y2Am96m-)P)!SogEBA@%>)c.7ag@4m5`,p<*J<7a?d]YYa4Cf"_fn5\KRZS
+ Rh^%jkMIaTkVEU=Uh#7,$2uE;7Db/\7:X>@K*hsIG:iKS8B?[R]8d6EW0NV?"_?Z\%7pW@M
+ 8j\-;NY[fb_X;;Uq7EY!SsNOVie?UI/^E4d:rjI2VGeo$J`\8@Oj,mH*ASN#mm's@a^CLK8
+ WQutAgdm9"nLuXXHY"Yk<+3P[XdkKY]ch<_hXr]$8,C_?4P;1[9DJ>LT%(X*Zc@\)[q%`DQ
+ 'J2\#lc=,l/2fP'5dcF@ua_17CJ!5gV*L%sE.A(mA9%P4<)\E.^CO5Y6()d+]M-,XQJCW[&
+ cTStD&Di&No3hk[XtY!3D#`T-&DH%PHS"B$E)E"p:1f\M!CRisBKg0-UU#k+,7\#m`aEsF+
+ (0^@N08!T&9"5h"41hrJK>71dK4Pm!_d)*"@)pl!c*)0ofWNFifW3o[*KL2+lHiQ0uAfDYp
+ ZHs>omHs$bPr:(tfaO.?K.5!dTN`A^_su)t2)L7MbUJf8RA&h3=tSSLOPp'`U8u#B:T5?!m
+ D\MN_/(F<=p0RY")-q+?nu0G*Wc:Z,l7h.fb8<~>
+Q
+Q q
+299 134.002 7 -7 re W n
+q
+299 134.002 7 -7 re W n
+% Fallback Image: x=299 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 299 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!kqBhX^n'\/!i-n7NaBM9,Z,q`%le6n4R'4XjKN!W@V;%r[]RV3l[YZRQ0ZQcH7@;0@D2R
+ S''$NV6UJku_H$PnI4Ba7fiPbiJQ3RC@hm+>JhR9t#V_@OB4o?OuB]^s.`s79-G7%uVY)E=
+ 8`eC7:9aYaA2eZlCQTJeOp':URI95EI+>OqAI"TmNL0ZbmAn:C&scb"3Dp\aj2;l>()EIrQ
+ (Qp(6;jN4LPVfOLri*F$"6DHDY\QZD0A8WhE.(k$olcbchNuq.\GVEk+m^TB'JU%+KZK3#Z
+ IGM@!V2nF+TgMY>F7($TiQ*6lI3`l\8P*&uB`>,<&:g&9?=']jCS#ft5$P]]HI]$/%hB<J-
+ d0sP$Wq2r-LKNPiTgm*_L)#,U8")tEjYfD,kI@kRbFR5ikW@=QS,*V4rh1[F83%PiCfLmQR
+ lPr?HdA0,Jg0P_VO%Q+Cb0;K^IN6be38nb<ePBm5@.82`O>`G;hJ\Ssrs'@_KBpLNDOto6'
+ @c?!QUbk<GLr0A+[72L@?=?md>5ZZF4)KqYZPkQtGkrkS[B'BeJ"<``L!Yckb=O4$p7H?t^
+ g5FN@oIf32XB:>UUPF44Z*#p"qR6i*2qXb*n\T@!C(803F:2+ZdF*>"!]Gq7f=tRiY+I=Ss
+ )IT&lQqZ-W@E/i^K`]qh(GoWV"Z*U)=i+ELRI9M0]mG%VY#WN\ZkjO&2`7Qr3fH*?aZQ:uX
+ //]s70O0$E;Oh$rr#\E=/*f5ojlW)$YJ+_3?^"-Qi]b!nb%>1n0&:B&.8:r4,9%mUVT2N)b
+ *?*!s;0#\1'5?Le?bK4o/XJ`i'V&_A4^)Ns.<LK!E0<)"]=C^J[*ubi;"AW(*O()&XM8"(=
+ oO4Gf+-"pC^I$/XOcba?m""O0lCOt^[++d7>%1B%,EQ6W@[`;C:u8UP`MSY0/A[8$&GSbfI
+ \5Q5s:W_N&V%NHV-hR=#D9D%q4s.=5^&;^_)\^?q;!iAZo!Z`7SJCS(t-kD@TRl862GpVn6
+ q/Xe&fSQE0aAT]P44M`SP"=[,orWq%'p4W^04%%%9O)NM-klYGbeJE:&W3qm1cE4g_nE`Q^
+ #"'+O5hb'Vbnj]-,0]gF_pc`]6=j8n;.IK6pc.h+$DqurWuc-'OnEfc'ZmlK,J#>)n(D(e`
+ Y8gYf-VD#TS)Y"S2%l=;WYAXp-Y&FDqfC@;OB3[`D0S1_-QcD+-nT&J<]/c_?UKhHmoILl4
+ Vmk_=hro"1D-Kso&P/+IZ=(-jbaZi]]b]WM`BIu)QQ3$Y/j.4Yc2cb"27":Pd=N/ko#Sqse
+ X_oL%hbUQh#,^b&H8d_./n='Hp*G&fqD/H`[@')-*I[R:<[MDZ70I$[9B&G[=j:69S=i?c"
+ Kp*!iGP?p4ZDoBNR=Y)<g\"/a(pRqU=Y&]%BZ!n7+q]Pu6IjeiOioK=+*E:J-6-SN5Wh./i
+ 3E%rH9M!#GCojeobU04'6F~>
+Q
+Q q
+308 134.002 7 -7 re W n
+q
+308 134.002 7 -7 re W n
+% Fallback Image: x=308 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 308 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb!krB2"Ld'NKklNMpO+`drspNbAuV7#?LTiX[`'B[fGF+c6n6@PDPkV1Ota;CnT-<JEqsLe
+ r'k>1qU2AZ/EnUr]tZb,1H`WPm-R$'^PHbEqgqIH/!;mQL<O6UUlmW7C1Em-KeTalPXV3'+
+ Vr,,0n2&[L(N+USN)%M'@G7?p#\:_=dVqs%0s70SNO(``J5nn#P9CW_JI8OnfZn)+.amp=i
+ &[kI"8iQ'!"Vk,r7IdUGaP:>J^8^%?3k#44J7n8W[mF`/\I=%opD9.G@)H^4)NaJh,)]S4R
+ D*00nn3:o4an>A19M$B^Mn.Wp<%@q7fu-75^s'6m$<Xj%ASK7iZ%BB2q0`VY!r/d`['[c+T
+ XAP[mHrpE*(W/>3qM&_&Vos<1R#b9]7`I9=N/b)N)THd0>>&;TeD,Z]3p2nRFqjB-s6%EZ3
+ 1t4DV^2:^3"QPo_3j-Qmg5*-WTYo5_/Ym"p5_F1NVeYD\Ef\m+M#6ZYn*Zl"+Dt#;]t"o$3
+ acN-Y$1+0fAb8sAZ(<?;tN3@h/,XGk*Q<*YC)U=RXC?B!^RgX"ZFDJT`E>LTHpkiksB9Hc[
+ Me&.u9hq/d^Euc6^_m_0t9h%UI80kC<+ULqF?/8IX;N[%`TMcF5*Xl;eg;hF]HgY,mcjU=P
+ 0^J$LEl<nGrl^VtS=MI>?7h.nBe1`s8L0jdN?mYhQBq6U3o!rtkEkJn'"W'-&q[Fqm$=@(#
+ \F/@AAcI;'^lB8[gl!TU!k0nn$TQ/c-:\(m3H:T:J\_ld3''q9qG_'']nP7YYcWUgN345&i
+ 0U'[qHAR*4BPp<:MRp:n!m.f?l>"h6#u2-TKLk"Q"BLVRa9)T26O?1CZ'7SOrn+[suF<\7S
+ IZY$FguSpYtH#&9r."_bqDi9!RlQ:N)EJl-ea=54e_QAP33a,'P0no55S@g<$j1W%Ft@r'8
+ r[LQEI$5I*qTC6K)jIraf+N"0dHH3r,*Jt&6Y?qeTL"k:Sa0g2ITrek?(WuP#O[,H*PEH&*
+ )QX.kdPNq6:8^oR#a``GIN=a/+;D7a<^O_&SXi..%VQ&ultgE'/"osO"V=]/k0<+G@DF:!F
+ NMR`jY@\'l05KLT+h_D4`\*=[s*5^6'Ve(q@nf.R10%#_WAYAUNc,ofE>RrBP.pH?([aMD<
+ M$@_85Z0LOON)Adf0DVdP$nBJe@'3e@?:-0*.51*3Xd_Zt#,5crU/X$,rG1cqdnJ*%/g@L0
+ d&i:'`\Bn)Vu"@mZO/'PFY2HJbpOad9lnEe!q!$5G\('`CXW3;g5F0Aj*>[!"?Tl!Z14<L2
+ (]F,!1Q=-(6Z,n_qNd1$E_SXIF<4Fsir5@4KjF"#._UXi[LAO98.$HJ@%gjQ^g6V;MUdCu6
+ `u<;_7+EHGK"P5;-@gR[OA0q'RnaER228LDU&Ik<Igc_o.[>LV;GBJos7uEr$\8uY~>
+Q
+Q q
+317 134.002 7 -7 re W n
+q
+317 134.002 7 -7 re W n
+% Fallback Image: x=317 y=226 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 317 126.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gau0BG>+3I'X\cJMolST\2>J)`Xm-!*"er86_[sF8ts.m\;b/YZ>>p\PfJM6AJCP$5`m?j"U
+ (V8/Pr&.(hJcK/5h4ob4FX\GW[%nGB;4t^@08@SU9h9kLZnEs0(YPkkI:ej^U]30Jl`?'ND
+ m,jEZ#F,n#*J55>!_JqJbc@3r1`<IB7^6paB2Y-3>uA0tWp(4Yj`m+J_-VbV5m*LfYj(`Pu
+ ;3Q!X1I=C9Mb5M2@^:oRn+W7gh,'h(6nBRYe4F&^Skg=poH[W>=n^c0QkN:%Ldq@a,SfVP-
+ cJSd0E(%'iabuWIhn-MP(D`%igt8"Wl'_D+!Uml/I-/1j\!rD<gU_NFg=i]Ff=G^2rO-=_B
+ PM8?U&;$Q%Sh:qn6jc1dn//pB@?$XB!Y#r7db,1rQ+*7A$K@s^(&eFqYJJf<]D[:lEk(.92
+ h%bB[N3scsSG3N47*UQ[<Q(q"2oV'UrNKT'u%u:.T'qr0`NA"VXR)/d`(`2`F64S/j[2eCE
+ qc<:#j6D!'!KU!X]V.ZlWHMREm.fW1t'03ee^+bpS\E43)o8PDf8TANdU91J@<m]OgZ'dk?
+ B@kuFCE!EE2r;"-R12E0jKjm&P#*IImB@>te_23?Xb%OP;Tcn#L(_H1,AgYOLe(dVdQ:[o)
+ V56'&fcU.iP4.6rJPOCSa_<7SdHAf_<_sn`j",qZU:mQV;cD.<=#\.;jGf-nBj;WcgFFaM4
+ rJXM^V?hPY#R"g77Uuo><b2h!Wtb.*S&[@@eCE*m+GbS=I7R=rH@R#\9\mQ!9&t'lCOk"=`
+ 5r2H"_0$^Se!=V55@f/]YgVcI<PcJcIJjcpmhAA5qN\VT)rQdXB";<;4PZX=,?iTr@0J<u5
+ Tn)AjSAA!N/E4Zq.64c2CH0$(iD<Ei\a&2gl132>"gP!Pjo0T,GW^)b`iCo-[lm?NqMDE!s
+ rdc/<N`RsAEUeoEHS.!S3(`C#sFUO+(R?>lWG,bKOflA(0"mI-k<E5Zn>Ihe86YpZ]*But^
+ 9(MQ"iW$c?j9`gB["!T'V+Xt"[TL,`o^q:/&nu^iKZMeoGo@O80f]%+T]E)QM[?[C6"OWKb
+ Yg`X3/(,&_#[FU5(kG\&"$Wm9as!i6KF7G*Zg',@Yq>d2*![NJUo7^At__T5R,lNd4-OYBU
+ E^VO28Y^Yg.9o8YqUq6]LRHE+fiA96iYD*KCJLYue%OGDU*G"EU`gb(:nM)]HKs)_hXS@Se
+ BR351'S+oY_J=#dYW[V_V*2USL'U>^\#p(`@<2\m3&gY*e1J\F<a`8nuab_Lt.OD#b!lK+Q
+ uQkt,e)CB&'eWhL.Tl9KT^W/RUP,"kT$l9Im"PaoW0(rar%B3=N%^,f7!/WrO.oK=)]!(PX
+ 9=f*F*_=j-\q,]3%iHDlC]+q^Q-Eq4*?;9t0Ot5FrUJp^Z*lR`^^uu'U<;)kZ"7=!%+qnAB
+ LoY,+\Z]uaIr0<<E6^t!-!0*&oAeR=W/3?`:T-W#qH!3D\*6p"9N*OO%3OMf(/Cr+[^`U.K
+ "?[-Gq%c(PrM9Qr`+,nHWZpa:lNK@q1,^o?3JM+`\'^9d%'O?iLLrlgjYh\%kcup%\:dM=)
+ a9~>
+Q
+Q q
+325 98.002 7 -7 re W n
+q
+325 98.002 7 -7 re W n
+% Fallback Image: x=325 y=262 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 325 90.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gat=jGtc\"(rq!-E&_.2&7ZG"THqIKW'La[^]ob;3"a!FTHZo\+t?=[%n'T?-KSEba]VdaG,
+ 8FWckUMM)jJ6\9.<:>"^6It'tF[Ye30Ku;d(`+-Z>I2ePDh3q0nt!f5KPI$!UV<`&`Oi@]`
+ ,J%LRoq/h@3ZOi_-gOMtZ`)N?YFm-jC]#Z_\CY-*MCX/`2lTVdL"]1YckCj%=mfohI0iTFh
+ rG*dnO,G!\SRJDEQl7=D'W3)U2*RuEr$AFbkT"V[UVpNaChqS%)]=Wo^OWe7241i/+<srp&
+ I!tm8q;]N?l0/kp]pe#ENfJ<oEe1E4NgCRRgq!'@-_7Ko26f[TJo^YUb;3e:4Zm',\FK<g7
+ u]@Z=Eh5$H+^'<I=+04!]]M_"hM$]OJV'-A8>+BR\M,!m+FV,>q63kk!hi2Za6KVI@B6=rr
+ *F%Ap%&ekMAAqV+\1*a*ujX)mbht]XDZM3d?a/rqu)4J:F1TD5,KFXJs%P'abE[F`BCc$q=
+ Aj8FD`n.7]Cd@^.O4-@2m\+H[7<ljGm:fOH@]^e74#<Pc69EO[DJ/EB\W:bg\OUD++`fZ[#
+ "g"sf+Z?9sBrr"jKT'sP5g9S$\\QfH50:SK],gT7\N<fZ8Q'Dg#adf#shspKoSNEUjc$+TN
+ +?l8Ra5V'"6_U]%F\GJ1EA:jtT0G!Sb\3.UkN9L9`Gc29%HbdDGk!^s>H4O]c^QhpMZ"-@M
+ T4W7p[69cICf4QrMHqY;-i!ZOU+Q&T:a^\0?N;`1G_s:^46?Z,A<WqkYV2kI1b5C,?H*OS!
+ q?">:1FN!(F&8nt\E-GI4\t@<rhI>Z)tl3t^EL2)S3l^B+Md:RqRCTC:J)'+1R/%c"?9#)A
+ ,CYlPYP?bQq_=%>b>VP^A[(3snCG-JNfNQqGM+p-2I(.`Ufn2c#'$Ys0Z5t7Wk#Qu^,nu(p
+ (,0OQ'&YZG0Unf.["mcK`$l>7;Y$X+lBbE?`2\I$'>/hIO<\,de#7]25FVGP>-RG#jM/7D1
+ aBQ+n*?E[4'FI8S&lgrU^7VhL)0DC2874JE[=q%<d&f!:U&kC(!isF$2E'OQiR'`14L_aoY
+ d]CZ8oo#^S2cX^a(MupWg>VHTpV=:J52H<\+amQ%B6<L:!DG*J20&B=-5X.4Q*T^hnPILm4
+ Kt2C2KO:oL[YN>+o2)!dh^mP61n"JUjAV;\9d7III55GW[%O`l?#lTqQF/9HZ/H(a:"3WX%
+ :37YC[),:f$UC4OW%V(bJehS+^+ML5+0:]ph#M*sBa3.rqT"c4MGcQDK<Jj"^F+^rGa%p@.
+ YrIgQYK6d><,Xb)-ZEj&knPL<J@q0l.b$]FnLY$(>W4?.sgsu]$2Mk+.dCd0+8L0Ja\03F5
+ -C@IV>o3*^Z9g;>nKZ6q)MJg,'E#MUTp?HBmfpj02c-Ee\sbp]lB8d&b$\%2cYe[M06AU5A
+ n%Je=]A`=rfJ/n#=b2a<.aPu]tJpBl+1D^:^CY8PrD/:4+[-Z4C/JPUUf6JQVWK,nF"Zl@J
+ t;p&\\acBeHoi<%.AXpcfJn2iI~>
+Q
+Q q
+334 98.002 7 -7 re W n
+q
+334 98.002 7 -7 re W n
+% Fallback Image: x=334 y=262 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 334 90.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$BhX^n'\+<l6pqG9C`9(!->He\U(WI*2(ha91`3^?(_[WA`ZJYlA1:?t$uHQu@`;NDJ0
+ Is+B7LHo(7:dlTLC7r@0"t1:j+7oAI`nGbNGdFcl_jp?;C?lhg=PBHg\H=9ht]&rk$^W:t0
+ &g<q1F?`5M5"KJGHt/38)(ON,8]31NSn=.Yr;+;2)KQVWR#P*tWWEq187b.;R;j3!Xo$Pu]
+ 9T2%Fe@OC$*4e(m(q<$Bg_9JIa"pHGR;mc]0AEGq(i26ej?=18Hc5-]r`k/k'Cu/troVP=s
+ &>*F?CjG1%nabnke8se<?Jt9ZSWkt^hbRj%'T3?5[%'4%&-2Io@J89SX>Od\DJi-L=/LmKj
+ Qb9f_8V,ik(X>H[;4fHm7KEb'!skfI/"Y=V%a3BK7d^sf$[GEp5>PMk4S&q,=e>CfYDHL%X
+ 3#jgY:2D/IPdgKE-GbdVsP[L8/73ZZF'B'lc<Y5S/V@/hF)ma(m.Q(`seG1TM7Jg5LuRa@N
+ "kf?7[E&5UBA7C7aVK<;8.XK2IT/]e9e5G)OtK+4MtG3j)#da"K2p\%&sl\32//(gUprE36
+ )`T:P>Udgfh2E$+e<WNsOraocVZXsg=Rm$Y*\U!,GH,0k(J/g;Y\U*pSBP:[P()$(:.WnoH
+ R<bI=]sG:Rq=ZD'H@>TEFG:8bM"&2I@1JYd(GS8pL6GQqJHM"./1.7)W9@`.D1??%IU[oQ4
+ JL6q[C!;3,gt>tm+]"An([TsW`A!f%O&9h:Fn%Fbg6SU6nD]*&gs;4Q2gWa4=(.O1!nK0da
+ OuCl,_'^@q2I:qYbb$T:b<6br^A:CAmuN<iuj:]K!^TP0E8#Anu0m"GadDY:a-LRSXi(CPR
+ YA6oGm@S5M87!9?I]coH:HG/R'uE1kn<6>E_:5g0d"`6JkTM0*n%m+qQ]dhA#tAMVA,^h<2
+ !i%rXX`)kD,9V80NI$Nu$q0g!PV8W2[%2?T9"CR(>4aUR6%"tR%lVKlL$a01Z1B[R<baF'n
+ 3@kEiTRoruDFCD@\[s56GWaluT1fDb*&=<jpSq3[179mZ>7r!;JUhL0_5DfY7pe><]f:+)G
+ jesaHotZ6Y,QtX7l;3BfdKKP5)r2lf\*6<C2,=L_-,aQ]=8kF!K?%E*_n_:7dTHA85"S.d2
+ KpYh=-n"Y;a:VY=<#_o_*a8X2A)FNt6O;",[(@N$afD(olBH_2aQ'^-7LK$*DeJO,Zm()fU
+ FYW2lsB2]%(=(ZKW+,`o6WGP8.C(lW<CA\(Zj1Z9T4K\]O2$pd;Umj!5^)"JNPB[n`GS2):
+ #\0-$O9NI@K?A->jnfiUBIZKB_6R:s"Y;]apkn]-XWE"4h'c[]1"!F;dJRSgN_<8]NRc\52
+ <L[lcO,UkLD,Mf(?bC9$RZ.;!Si0,j6@9k2We7XFjI#+d]J2YNDhuC"'c"EAN@;`Sf$:d%*
+ =V?7%j.GN)Q0@9dYQ2KWh+qLGTQ#F53Bs_p,;,VBHP/g"tlIHh7qA:"aYY4C]~>
+Q
+Q q
+351 98.002 7 -7 re W n
+q
+351 98.002 7 -7 re W n
+% Fallback Image: x=351 y=262 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 351 90.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%BhVH>'NIGU86%LL0qqNMd(#`g2isu*(o'qA'pi<e$UbZg&reUqAM805'VR,Ga>+G8P[
+ Psb,D/OR!NI`mDJ+VhJ[/u1$F5qKF.ghMnQ9Q$0u)ko8^kEJh=L&Yn%%WSbEr7\J%GKf]/;
+ T/AP#H>naUO-@L<8?-'t[nE%HXb<=&d6.1ln;6mAa,p8PWlbhQ\^jKht7Y?af9F=Hn\q;d_
+ e'94,.3-)q]&s"&+3INs5_^#-NjVPCD]nq]tk2fI-jU;?,Yt]K<E3uYrDsLH,Za1O>c'p0W
+ H>C]iW9r>Lp?b3cU9eL)?b`aOZaFg6RCTf%6cnA"hnLhYE[BuFnRjI,:Y2^YY?oI[[49DJ0
+ l5rD1>%VI\;n2[CY!G_D2R/a+8Oj-&j#u.Ci"`%8S0l(G*XL'(PIIS\:%TBmf)8']ckRcs0
+ -%UPJrHP/6]tsYTS2iHij)"laY,A\hng%=tlj[\<-=?!D9%\:N%[8Vf].(41eH?bb`cc1r8
+ V9b_6E,mHk!fcLeTPo=).#Rm-ciCi'8f[(tA$KBCHJ!jMt?r9EC/a(1os[8JHMK;RL3SPiU
+ UPuSA6Rc3LfC*5Hb)@[t+e#(Nj9R/a7&coS/Q*6/VSd9?j`ud?qP8<`b2%iJZEH/Tc2iQF'
+ r1I)C*;[dkG7RD9#fmU9,eYYNf%0gVAd$AHK6'J_?_;`2Pf1V?+sdE"qPpR@NuuKfr?bHi@
+ j;J86HK91;V^(?'&qh'R(8b.OrVJ(F_]j9=eNa_Ta`DB&JeFGnn":kqmiO,@Mh!Q!s<4GG?
+ \:2<;Ipc!XdoTfR`Ic9h63pP*o/S<1)e*nC5PdP5FY/c(aE8SP%G]hJV]Fl8KWtVrI6f^d.
+ !DI/(n(Ma+b_+c9jVR78-+SiiD@E^j[HF'c9`g.(>FSt6R%?SW?V'*=6orHpHU?-9UrQF9X
+ W`WB_taRA"R5&(B!&`h9#_"^_;mGc"?[>VM2)[cAJKD,"&2E'Dm<i@q7D/B`E1ZlqL(W)`5
+ 36og2LLAH"B<JCJSrn3MD(leF)Etf\=9&,>EEjKR"E"=F5ei['o-$M>gaG4)7dB/<Od`:#/
+ C_FahpL3fBoR#WKRn5fFm8QAa*r/#L--k4p"VR[:?[QMKHjq!`E05m_S\77?@C783guK[f=
+ miJnX2+j+GZq*P\T<#G^G13(T8N:C`j;Pk*C/Q%SkMU<7Io!6cQ>NbhDj96UNZ:qYT5TV$R
+ IChn9tQn0!5D:'.Y&(`0(Bn!Y/2_d87kP_F_eM1RDu5C7W#SN&n8c3B'E3)e&aq\OWFPFIJ
+ S,5R[Pis#PZ%pkUq"U/k%M(tb_GX5<+V'3`@JqN$tAuMGurlWH$/hKMq-cV*1=DP$4#'HWt
+ AVl7UW5[bBK`]8MhG&qHg2<slCFUca!TH<GJ\(dWf#gUpY!ie\[1N,D[2"R9.4^%O'*'UfJ
+ .l)8n6!l8^&G`0=>!omhdA8NQqZQ+m2tT]'[6~>
+Q
+Q q
+360 98.002 7 -7 re W n
+q
+360 98.002 7 -7 re W n
+% Fallback Image: x=360 y=262 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 360 90.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/d=%nfT'ZW'D'bDTV<()."&UeVk`2JX5&I`E=32=J9qOg4i,n:=dMNgse"cCIZ;c'9PTk
+ +Tu&^XED&S.1jatC%tMLV]cf-6#5puK[a"O;5eIHN]TJ'X[QpqQga)JEui8ko7$(WVGkieE
+ 0#%gjfVo:(_3!s:c@L6b7tQH.!G,q&:ES7-u!,^33ej>o;t=BVm]?[dI_6N!f]Z,_mL7Scg
+ OI")&WbL5tCeZ2jHp>#0,hM)5tgg4<IG`nn7r9;\XAnE2U7fGJnqX<&;q<@3@Q0]+V"</7K
+ *]aH'$O_lOqtJtQ#PZg$PN8l"?T;@uloTES/mX>pH8K=0mRNa)q<7)=Cu"6LX39;&JJ9;lE
+ BV!*Rl:T?g(f&2E8nipYH4k`dchJQ$2mRm,T/8p7RZ=L\YWQG*bT@3?spcP]9]^6NQ:>7oM
+ qsI=0*Nu#i^*o\S`EC7jc@0Y.\gu7Y>I.m(rDh?TQif;O*Ds`b!fTi7%V4Dl7;_\1LqI\oa
+ p0WiED21+>U&Vl?^]eC8lOAP;C[j6YO0Mg^$$_58Y%'R"Wh$OT'F-K<S>+>NuKA]YSMil)F
+ mPUQ.cO[91u=#DioF`lTD>8,;Paehlaio<>gr:ES1hbTF*-gX^&POn54j('[@:_OLs[Ph$(
+ ;,a5B>,4E,>.>,G4S@(P%c4gaFlc5hV^La0!fSi`'U%P)iSjduk-hQN??C;#ND7WZ,>;BK<
+ :Z`;#$"f/JW(,5/RJu==rD$hMVc1tc,IXEi7fPe0hEE.)\W_lp@7sWG+PaM_V)7D2/IeTTd
+ C+We="$kV72Hp9(DPlM&Zj+AJBOj$GtH:aLFV^A!R<%aAp/h_KaDPSI7;5pA(:9qWP#T6CC
+ '1'QQZs@1Vi"lVS*2X4Ogu'mOtb-qGL'R2g\TFSPYnq8hOH%DO2_LK.a-n;>mTJ",)4fhU?
+ j.cTAP\\\js#Ve%?g9V#snB&+UP9&0$_P(pRYQ097+\*h)=:q+sda>lcnM`/;rX`T"nGW5U
+ 'VsXuTg/TR@R/K,k2KL>hRF0+D]^s&daF9b*#rUu]-\a)4#%V+h;&EM;cqK<EB%U0Za6j?&
+ c[HFRqZYr;$daunqe&lB#_Q3(B_"?ZkPS,4$#b3"3>4(Z;c]_Mhd$VH@')tlEmpG)@b^C^*
+ SJ)qh@_F9M4TLXi4$ICb-2BWu9!!5*f;!j;/Tkf"agH,tVO(F1f3PZEo=5H=WNFa<VRbDrY
+ k`0eo)>G*m`SddQ!Z.@Q-O:kZSmrZI8^G#_T&Y]H2U[$s!G'f$Vk/63^NLUt`]N/jRq%=*6
+ _j'-_OW.7X0$+DUc@WurPk1Eq[&d^2_Frh1F!Z]h'>SrhV'Q0b8SMo:jYAlW0C2..Yg<@dP
+ X=Unc8kLej?qs[;/nCpq%78d!ZuW\oh/]2!\D9XNqW%a"%VasQ;/gn?.7=aIUOg/\J<(CD~>
+ 
+Q
+Q q
+369 98.002 7 -7 re W n
+q
+369 98.002 7 -7 re W n
+% Fallback Image: x=369 y=262 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 369 90.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%BhVH>'GYRW`MfGpW'nTN)A=E31e(t[iY)!aE?QZ<9[joRdAScKZ5#u9as\8YHO!2T.A
+ 6hY;*`9#)ec'E/3?f[9.<uI^m([[3S;QF7i=*'Ia#"+3GHq8lZr5rHg^hn2YMXu8't1:=dt
+ [Valb1"]T;UQE\:E7'kImiZ*DHi`/<X:.Y46I0<[aB1_1%XR;56cGE3jGHLkb2[;5#n0"j;
+ m2Wa!kH]WRQ]^Y4:/0CMN>IT%h%97%O%/'@YRFOX_S,;r6hVNi?B6]1A`U;Fp]ks5R;-UN`
+ JG:VJb:@#Y^6cm$Vd6q`o'n.9%/c?Y3n2bOAk!r,i*c*2]1D^`_hYd/?8"3QGd2_ro6'AjH
+ [>[uG3oEWHK)!q!uj2=n(ApFI9LaQ`k+a%auGo;Z$:M$JBZdmPq$6P$E;OVldq>]*8t_jbZ
+ _9'l0cii:`.BAKt4`+?n>U+Uek1]mPkclC/s'Wh%1k+hE<<O$)ocpab\%qTn='peX;g\2EU
+ *IS`HP9O]CV>75PesgALb4F6<bPR6sI5]QkYQ/iZ+?FcG(b;g@C2;QA[F:j@>4q8hJ:RJCV
+ c_e4foR?WB!;GNd7#bVWMFq1$"bMUF`Dq[#LcQ!o+B$A'NBF>T//maL,+iO[%X"Gct[B-IA
+ ^>:t79P-2k[HV']Of4X:bOkKtG9?sm6@.Q51]'6p#0rg"k<^$lJu1ejO)]/HUscE7RW#=1U
+ E_!oAs:'XgX>Z'\@@d@aglg]@IN'/eZ0j6aMNX%HU?#<N^:t9@BQcl.p&I%YKi[ho^d^g5\
+ k1Ss4q(eN/j'h+jQb.W2lprnbFm4b@AT>7(.jU(a,mh1N["W?Ok%O)Z27"Z't7Tq`?muAFN
+ \P(4oT'j]V\cUP!LtGPcREbl"&R!-37%+CNH^^17PG!.!T'rKr37-Vql/,7,CmjHKZ0T<D5
+ B>FP^odcZf)r$/.)T_dD!G#I!=5FLD(6JfP2<^8K8/'O'.&@lLR\;(=Fbmg[:F)h?[Vb\DT
+ baB"aisCjQ6dQEI)VZM$^]B%B^g@R+RF'rsNK"dO]'O5i'WoDoiU(VmdO>kI#"+jRi'DWT6
+ >L;7^:O01<bq!f[5".F@!lq5f[4,@DZ3O3,*.c(N^=m$CXrL:FbErH/mKe3#f&@6`:[lQ"5
+ Vec6=dDsN`!,#Bk%Uhn9VKG,nLbQIEFcoio_mt#fQ)^JZU5VLhJCl"=Gr*Xj'96..D>CL4O
+ *\bq5X<Yue35$(urV?XH>)`Gj&l4m\jg@\Bb0.hUCaCL:G-0S,2+QQZOP)%-Bo66])d4`(P
+ FVmNhjO:[KeaF![nf3dRm[t^cWWA.nBFK3l!^kGu*('[;I%,_5WX\M[Db%.`pe<nW"K1=<:
+ Qe.)5Wg"4Q(KQ&eoDUoLgTT4)N>Yq.p?S`\D3;rEb*i\FXO%XriTfmZBHYpVQsh7b%jgOWC
+ >+qF>\@+$<%9<OVpj>Srq;,tHPWq*O2.A$12q$Eq."T8m10s`'X@~>
+Q
+Q q
+377 98.002 7 -7 re W n
+q
+377 98.002 7 -7 re W n
+% Fallback Image: x=377 y=262 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 377 90.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%BhVH.(fa`sO=5uU,YE$rJ4i9T)H#N-NJXBa`&38dpE_P/e>TX\Pbl`8RFX\tM_)0U1/
+ J/`$E+6,aC8:U"BhO6W?>d:%#[C:SB77GGn`?2@?UFD2s3]ApV$1DqnDZma1$!eYQ&os/1j
+ kuV,\lg-t6X8,a*2AYWO,H15*M:M$1:ea2cdY-asd(I'0V1N/gf(X(#R[Y@!Wf4e(EtSU0p
+ Ad\0$bSt;6fi'>HD_s&OE9$a$L\U:q5,ii6Ck32:gPo2W(Y$=O[E<6rsm+`KCmOiU&,7q,'
+ XU0f3dCOIpp$8B^Dbo#p%q7e1'H!c@:H+5D<i)\-A2<]1PTr]6*56"oJ&Mc/ZSQOqEo+*55
+ ;$56"ZC@R$Nqt]52*I4M3h;p\T@RjmoDhG2EcD!(`B#&2s08:&I8a3h>>=K)pGfB`6g;arq
+ miX*4Y_96$)4P^n98t;6Zg*f]'l2[Vef&G3o%LS+<d;aD7!]9UOR,8sCbR`BcdST0EkKd"M
+ ifG'3np[f4aRqqB]t>$I3[Za%?D^TB(?i&WhcD:ntFKktpL;GqRbrqHtH.[;S=?;ug$k[XP
+ I]cg-Gr\J/:dq@rF(6/#qdNfGV.k>Gq#g_VXRtj%;?bBL`j#-#]BdtTS9he*0J]cd>iIb1)
+ +KCEE5BM%e?(>'(^qc\nWQ\$d.jtpq3A\b5*n<g6^H_2\mAdZUcuq9'kVX7lk$L23HWjYD3
+ [e(ll-j*cpWu?e5Rq4!3(>]`L2*C>GV?n5<GBL7(]*sXB4Z4p[/?ZK%efN3NCGDhnA)i$?E
+ ^?0<('7>?FpuZ@u%kM2:T_sE;"+?C"('Ue*.D`]O1cO/DdlKI4=:L>@5,dm-Ph]miNDcqVB
+ %5OU2ACIBtP2J3RIG68PXdRPO!@jN/[_m.[F?LFt3?GONg:FfOC!IEWqX6WHGVKCXZb]i0[
+ ];i>%N@J_ukN;IJ_$@h4NZ+G1I!9TMjGT\gegt_ZW/uU%.c5a:#23UKsGl]7_NeRbjfjOl+
+ cH^*YBYt%rk0995.aRl@7<A-*D:e[Z0IO0f'q:2]6&)%t(cML%NMM13oBtC"EdfJgqbgc3&
+ &VI\iq\W=cbPY=p@dq:ArIu^$W.!t@7umd6l\K?@^Cm.BunT>`.>@(Vh8^`RMd>71,oO?"$
+ .Gl;M!3/E?fAIT((:28ORiKA7)oI(*9V20(/2n)X?VjX[rkJG8Z6K0OQ0lV:(\]<jJ'YGgd
+ uPGgQ%d[nqqlV%T+,QWp8^0%:$ANe0M>a@RN-ORV_7;I*em59_?hP2rBC%W/CsI%FZX8cf>
+ !2C]&>kZ+Z2`]VW(rOJf&+X[M%$KO)fj)T]0I"#?jL8MU'q(ja;oFVRIPKT(u22R.qFolWX
+ \u5mH6^K1?N/mXH1`\'2=sh/MSciL3mt+G>oWYk0DaP6V3pZ(b'aeeX'nMD!>'q[D"cV!MQ
+ jN5tW;-C$o]oQkpul4On=-t8Ifo["'^G~>
+Q
+Q q
+386 98.002 7 -7 re W n
+q
+386 98.002 7 -7 re W n
+% Fallback Image: x=386 y=262 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 386 90.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$BhX^n'Ql^h+<i9bC=K2T&XOma=/%%?0t>6Ah3b.g6t8d+/MS[sZpb<1/X."RTp/.oZ7
+ .#f/8^VGZn4&8b,SGk!Yn=3Ch_:L*P_CWJNE^r?h8<d+5_E.pV)"#4n&:Bs4;b0HM.,h_ST
+ KM:mR7g9hK^L+(*:S^>NsHU,k4+AO;!5a--f4J#0&%MoB%mR`N^![JCbnO`U&%f%ICo-Vlo
+ cI/*^?rV-'RZ\d1a#Le\SbrC.JdJ<D0=0K?rE^*T*P*p[HC,(\Pg':-.V"j^1DVN2(o]3/X
+ @f^68l2g[,bL?(NL(-7`n'hFEOAE$_De4%_qm%t-k0D7%%]AgYc0TN7E%JiK.sfl(erh=1G
+ B]pR)ftOY10AF3pl=1/V+VDS[pqq^Z"$Q^?S2cpP4JE#&dauZd,"Y(."!'WSp09'8eJg`F2
+ \"PiH+1:c(5s<lH5JS1N^VF!fU9gn/]+QoB*;@4HapVbW9gBQpO(fhEHDd7A1h[)g/agJcZ
+ g^?fLPSnAL0q)`QVnE=$W.VG3XUSMVd?i^>Q#%Lt<c8,AH!+k*=I$H]o'rH[X*=[[r@B*Zu
+ <*UN1Xq,gWsQ^`m8.*+P)0DpankQmd7j2M7]*pl1,'S4')@tX.8&J=)3(@9j]E;d?n0sOk,
+ qCIhQX&NVAPJPW>k)H[@!YWZMoAf;rNLM,/\s!fK"3-9C1F#r)K1!`0W=2k[QrU1.*^;9S;
+ WX=7TN*p-kW:iHb^Ch%VPU,aY"kRN;%a_%;PSje%s;kXDFi35H2MoUP7qUS(G:[([->tl$P
+ cN99r4\W+$O@B>E)ggeYr-5)73S#CFh(jO,Sbi@b7_LpVZ.;!D.f!F3oRHGG\19A&/6?o&X
+ O,A1UGM7`+%>)P^VW1)_a/(a9$KWM3V++F?WnMR!p!3VP>)eA#tWhO_e+WlD\Z`%V[3.Y+%
+ J"dGYK-iHqZSb[\1L;;a'TgB8W4++u_r.BQ`&kMTe^:/58g5Yf7Cmj_ZkTJ^7).Gk1"7>H*
+ !'<85%eW<sUHL_I*HCDs-Z%J!\:$H,$Et::hm]bk/uA,s>RkUDP*5C>>ncSXK2,jLd4u)=f
+ <3@XF\5?*/$cKc?G5X&YO<9s?9a*1s"Y.V:=n@ZWDp=@H`+s-&d8NXD:g@>6nVY23"kW_0i
+ Z-1oZqPfUIM)3TjcN,B8.>`+ZQH<CP2C4==b:BX>4DL8cf&9T7S"@C'9.72)R(2a;F&I2OT
+ ;4[a_+&REZ;XKZD:-o0^p`;$8SH\BEWs*7PG<E7QB!J-@;tA7f9Ri9J0HLBt\Q/(s9dOqO#
+ Rhf;m9?F5Hb:TNO8E;(`o^'*@YY>\BYNTeI)Qo1L"iDIM)=jCPA$OqO0?s%sR[k9>;[C-k<
+ (`>,u#l-?77($`C8<Ns&N/1;a@=YKYp-MAYS"!DU.7DTd<(&uS?J_PU^u6GnOYK4PkRhif]
+ "h)A['4$'c)-5N>`bQ!AFAhB)iZ!9#=]qE$CcA=!?uOujT~>
+Q
+Q q
+395 98.002 7 -7 re W n
+q
+395 98.002 7 -7 re W n
+% Fallback Image: x=395 y=262 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 395 90.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/d=\P#n'S\IXQW/oJ<8;?oQO>MtM&Ok\j+Tst0k`8tW/37oNCG438S'=.#SmXV=WA9O$k
+ -T5.%*p>%NQ-M&BZIP>7kgHJ?lBG0MeU159C&s%Ms1D?f!X,3U_6?rc?A/rfN?Cc[U&JR[Q
+ ENA<\DflJgi^@U]\>U'ecTm/]oU6kP>De(_?[mHpY=n"lkqH@)^=SkV@jlLFE)5C%K!*^"*
+ H@)=:K=;4@?&ippL7--'_?.OuSW@(Ig+$$(L]/P'5p5$t_,;sB?i>X_9L"->3-@DPDc+\J0
+ 3&]>i?S<n<<*&-1Q-V'g8j./<@K6>*/R(QnXpnO?-=lf7&/U[@B4hfYYX8\%\*i5+Xmh/kp
+ 6ANYq;_j9'p[NhCA9lmYA_GVo/n8n-s*KH/mj'Ol-d?n9*,k\&qL3JhOp,a8NZIh+ejGWpX
+ dC'<GOES#(rl0g"?'cXem>2?=$3Y%u78os6]a[\*)'0T/4M`-M*cc9*?$s\*)#JZZ+lU%3(
+ Hn4J$nF'h1[@_8cD#Rh#/![-2RPbEJ-2I!ehP*J9EShsB$RR5;TtE4@c:M?kaKI7HfGWAtt
+ EWZiac+YSnV%WliMb5E>$L@Xp#bfi#^_<GUXI.-LKo9,9OUSH0-kr-\A))K>On(hQuU3Gs3
+ .Yt+Hb%doSkg8XNH@&(lIWg2>gf.BHXe&n16G)IrJ^fAFCm;3[=g3E;#J7Jkm+Y#ZkY^r`G
+ EfJD[FI)n-n:^ALBkH'gM:T*daGK0"]IfT^0@up@.@]5RES]7-Gti[cD..)EtjN+:S/7]f[
+ DY3hetE@,[$"C7:&g;Zce\64?]Iqh5-VVj?.Rb#V=U[3BK=?I,sP6a:Tre8.bBTO8bB)cM#
+ h&bIE33+<R@0+"]8AbJ+Z3qcuB(2@hc"iqD`D,'N_KR%6;\DVGrcjqd+E8rpK"%%d4#Bn.o
+ Bh@:$S>bI8o?9"'bDX`K,<mm*Q[F-lgeCW8`XK24r;Smgq#n9n,4%C"](-"<Wn\_M8>j)$h
+ YhBmH$tX"O+JO\jqN;n.@$nWFK)p"6;3=VMb.N%cKgU/Og.4FL32!g*NJ6%j>\qpU\\COh_
+ `%5d@5]q)N+KcO8EO_$Xe-\&ot]*X"P9:E;l*NY!)3/UREak#PlK>7lO7lYl<h9$+DI`L;b
+ 7R'o'bJV$cbm=7nrMmh^t0X5!J</F^?%3Y`u(cG\pK7]ukbOCm_6po[ij*rI!RUKO6?<`.B
+ !_GBjhD_ZL"R%dJ(TkYuFb!-f4qBEa]JXVNR[8LQA`]Q`R'X-NF"=]1E9)NBLG-JjS,m;%L
+ Ea%C1HoVo*gJD%*McB^_LgT%=E_O6@ga[GI,R[[MGIO&utP^iqLAMEJ<ZuHV-k`ZkD.KU!$
+ HY!-ZPrKJ-~>
+Q
+Q q
+403 98.002 7 -7 re W n
+q
+403 98.002 7 -7 re W n
+% Fallback Image: x=403 y=262 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 403 90.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$=\P#n'X\M]W/.rl6"5e)9AFM5/dX.M8PBhn0dLKj`b;)h8UM[1!X1,lSY7h*";o_,hu
+ GQ0*MEtK2GspiUJNkJ:mM/o.>9C=3MfF@[ntNC@@lWDU_!KTHbTC5F70")VZ)YV3X2%B^D%
+ C3B4M9H;[#`a[INc/@q'8*+<a%<S6VDH-HaJGk&S(KCXl$'Onicq=\1kDiSD,\hRo8'm994
+ [9:6SKfE0@[bJ3iLkMNlDgV%rF1n#gSH`XuSaP=eqrUK7-lg*0=q=Ek"M*=+ChVPMapB!'r
+ p/o-*g]29]Un^H/c^i7iEWtO:^qb\`N%ql5a=OHrY+X7%.23JXG32KR^4!2nCgh8=bkCU:H
+ [8/!g11C`:HV.aX0#T'""FO-$EK2GCb.,:%1X#=]Be_bM2?]d"Voh'PBQY9oWDIN%hGPL44
+ DH6Z$(!&RPcEG>[<b.1<\MPV2*+7p$:WK*p!+l'gI(J&J7m4T&0JGrP\30R=Z'nQi-b"2Od
+ @5Un9l4@U?-<&\`X<R$1J4OsMqT7j:9d/e*#J7KS"g.blZ>lIF=5!9e)q:h-ZdOAu)L_Zq0
+ =*4.bAgU8eKB,W`M*.mSE!Z*CAiAl`/Ci:ETkSUaE)9ChK*.[8:,l7#4VFKFpW)9OMbf[Z6
+ Sq[G@;%YGRqSj!*1WX,)&`n]t>%GGhinsf?qWcV4FmDqQI>]./p_Xt);-r,Rq(jMMWRXE!M
+ 3/B4PZCf#aiHmLNuL$PaY-n(^gk2S>J(f$J.ReZo"hI_>H_-kdab04(mrffM9IqM4Z\J4Lc
+ ?Ab,6+P]4+>hd!Kr"ha;d_pKfV6Q7W8VQR-3pF:8^apg_#q_1SPm3T@3%@j5MV?<^:6g3T8
+ =.eBDlQ$[6Rs7a33A#r=HB>`"mo]tBMh*sXeW#PCeRAsLRAoq,UV>d(*412R0ES:kY&7^[9
+ 2mGr=$>+@\;IoB.7Zp:q#0D5C7N.hhNIChd2='$7-q8.hNOI_pCp@b^OC]aj9GOLRH^H]QT
+ -gB9gPS5E<4L972G%(Nm*c,]4YX@hN-8Y\qm=`B41#N7taT+GnHKl4=d3JEb>$20<_62f*`
+ M?7AD+,DVVpSo;7sfOrmHk`=C_H0ra5DME!96+lLLD5FPq()$0ogud/r/?VPEYSlj"8E.Z*
+ CLn9hjX&>V*mrM\i.4mPFqc`j3R+Rbth"mHu#;)UaS(C"6t3?9\tl%0(EWc*k93=34p&#7W
+ C2l,]"En)$Vc3r+0Z1ncLk`'EWBm.bV7H29APcd)_FH*dY5N'1Z*a>O5\8[hOk='hJ,0I[\
+ LhE6)#O,B)7(\]jGc**SD5khKPg.G"l.4HAE.N&YfMT%ou*>K;V*?FaPAhC5kTY!l?JGgBA
+ 1\#0;6HnEH\6b:'(A^4,W2&_HKgWTEq5kqh@%.1X-i<OMYcSB6q7#&q"6ug!MW)iUoL(#?@
+ Wm^oWNRCWBn>/LcL587R^T\3Vo/;&INia05s+D>IfkBC'Uf~>
+Q
+Q q
+412 98.002 7 -7 re W n
+q
+412 98.002 7 -7 re W n
+% Fallback Image: x=412 y=262 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 412 90.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$BhVH>'NL"p;*ZrM%;q"1&pN,?r8AQ(9O&3i7&.bX(bmN>1)dPPN29.G+9buB!G'h4dt
+ %i07>mol<M1lY6mrTtV(D!6ASIj7APOY!dl'I(qI>!!bt6CY]mJ*"]mJ)=ht[!Hp7Ied['W
+ "IlW[OrF`MLKQWq;b<3Y'L_;Rqp>_LV(VUk9^X[P\7;Q7cOZt-=58B;;O('Fj@IeiPMJ,bJ
+ VVpeG5ZjXBTq>9b:>nUDS-G4Io*#7"kQY.3UZXb\$ZZCbNI_0P"rlKp*`UD[.naePh]m[L%
+ -=?/m&[uOWd_UQM-Ve3C5QBmBp!SYP*s.!&1\+@1-KbO9]fpWMbV-GA@;XZ4o'q"1DV^5YC
+ MaWrIXSSa%if%;D[&#dm+L/52ai]J+Yt\l4rCDinJ,D5XS;JXj3uqF=Q]299Q0BUA]kos?K
+ "PC&ATM+,J:^X.op&EU]Uks(G?Q\]D!U4qE(<&(Q3/$r3NmM,q,Y>hZO.8),YKO:V);dD8?
+ :BX6Yspo*F8/bfu-]E8f87Mm.Qfrr%G!J58"j1c'3q$?jtN[YdI$G<p1eb0ctl%WciDip%F
+ CG:qFfM)&i^JIj1V/CN\,&+f;+a^6&KP(3@PH#,%KPnHZ,9?XieABBcFAQ>!P,6QWE4EC]e
+ %/9==lKJWG&/**BR7+n9?GQYBJ3641+$t)U=#VuG.$Z,pk+SB<^:#rQgUC`fB(hK?EBAA6Y
+ $R)iS31o=*%PW6B:>;/Z4.'4[V_s9nZuk&66X2N]=N*4I5]:RX`e5_5k4LtlC3:d%^O.Gom
+ OPp-'F+'[q*KJ-iqa2j6OnE[kI44:%Sf3%H70B@Dg1-A:qh>=lPL(&BHX"q!j\T[m$ED1X4
+ `="D=;hRfL`m$:6##X&d2Ug@X^9@q_'e'T*?bj^A/["=Vj9e)?qo9Gp9jrm>/9XoFK\ijX8
+ BW6l5k-klhPKC.iW$8PJp`J]4cEM8Od82!5NFq/Y7_'32OR;dd764dftAMZtLLP?pBF^q2@
+ U-d#_IABaq7Ue8nA1V$/5atOL4$rG2a,_Bm\A9%+UP"3JN9<d]lZ<]6VPE1tk2tgC_Qq8(S
+ :H.b4aWpSX<GRqU^k4NXN:eVi!*h2Dm)I)S!hrC0^,oJSOPE:<\)>9WtH'RmbUZ%Hl/W>!2
+ PWuY)JE[(Q75VB7qCHAnIFPCdt1'-EH>$dHhaK:*o8_9)r^Vs53ptQ`?_[DJ"+)[$K8rQcn
+ 7!__m#%6"1/]>eQ"o1^\rMXf_V\OKcRH:@r?s8kK\LJr>Qf-@Br6;VUB\ReCpFR"nY@cC11
+ D\[f5k9#AJ=)%8;T0QAC]80gRYh2X5UqYQCiH!+9;:<p?@FD/mWL@"9!,paCqOG%,fd'cE;
+ kcUrg&#MAggci5-O:&T<T$AHUL^I(iVnQJ??&d'qJ\A9IXAV?#N\R$2#GI1BojablIm^E[U
+ 02CjK`;3RHkbi~>
+Q
+Q q
+421 98.002 7 -7 re W n
+q
+421 98.002 7 -7 re W n
+% Fallback Image: x=421 y=262 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 421 90.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/dB1u6$*5to3C-\P&..2d-=&abPN=omR6j73W)WHPp1ldq?1r_jNJPm(G<a.I[OFeSU.N
+ i,l%&HccW_gkeKSgm`PuZPt_;b'oJ=n"^jNRu;n(n!"^#u!ersfP<+9-"&jDo6Dg5"nUd`=
+ sFBIKLl.LHHKO;Nr9i*\iqGZe!FAR_Bea(ql^-^2/H>&rHTPHS4_]Qc11m+E1&:U6$$R>>=
+ 4*K.85J*GmQFSTssSND3G;d*G-6[n@\!\EO,l0!g3L$[S4BOML_AW'"YRlBYHpm$O:bM#")
+ hnEbc]D-I1?Ji?ehVZ)QW/+.8Bl/:]l^Qks#WV_Fd@fm]T<28VZ[0%*W`@p<k2%UiP3$1kN
+ otYF3IjWdh]I()9^;<:3NfOSUoD"s9^Zb905%V:F?90Ybnha&YcOpt/7.\RE8fjQoBGl/dH
+ AgJ0Jt/0-[:Z\R,bYa6f`e#Y:a,'EcNXAYs^#iXWe@Fgu$X.ic532@9N?nF6r93QBpr.7db
+ ?[\B^Q)C2!B]`XK-o)&V;Bg[*U\K9a?fP\\kX]tHWV,Rg6:7&#s+St:\R_Q)\X4?>Xq_M'+
+ JCH#X6c33=He>^`W-Tb%k7#7k@k;%J^,==hG)MUZ7g:k+E[ko;'/ggm)F>Yq<aTHs>bo]1$
+ kN?>F0Ed/_c-f9ZYVnbF;l5Yup_L(j,9qF7T95ri2n-r*,[b1@28*jDA?orXTX1o.V6X"?i
+ FGe6a:brG\S)T"f_D.kJ[78fA_JtC!US8M.me)hOB"\8P+.@TbF=t9h;)VI>,CMNbOJi-Oc
+ ehkRGd"R:a#i63L6d7L.*.1-=0?3qQ4*8PLCNm&W*\+'f[bSW`1AP/>'c*kae=f*()JKGO5
+ H4CX'*[VhWf>B(g?BEh##Aei*?h<>6@f+[fY_85Xh,k?lAf3PU?."B%^a;+B$E['A1B.apu
+ dmmr0$h)h]$HU;ObK!oN+>$Cc@g4[%d]O1akV'=?6H;o<@aB;jlPsR8aoiefJGMP<UNbN&>
+ ]OM2,jqm3Ya9b/#,<RsLqLSdU7l6XTK*S#"=Y`t:AnDr9[r+o"J"Gi^J]dge>1tGA,?+cY]
+ jj"c6+'mU1j4BG#'`d@PqYBcRnAZ'Finpq>""_@87B,SU]6uC9ChXa[C%Eo^5`\DfL?mK!'
+ "#>^07(qRIB6kmY>KODqml3lL<akp[3HcM>8V8p;gd#0hPQE<;rJj=o$E@WMCgd,p=E[G'J
+ g,9F*5.8#(LpE]^*qc.m<,3Wkp@(`.rH!UVi.pi/X"2f?D<oH3Gc:RRXpX0*59V\]L@VVSr
+ q)BnaFMV-QN5$t5`9RLq=1c,m\<,ag9)bE;IeHcrLMqCm6BBS07OX7rL-9E.s`3i?2Pa[KQ
+ Y-"j%Vl`[@@'a^X[8MPUn=%Qp6F\8eD\4lqipXtPX8"^1r_cdOMBE$QN'cC@c1%)&d8MN7.
+ 4G)j[A6WtPtJu8gq8%?&>Krs~>
+Q
+Q q
+429 98.002 7 -7 re W n
+q
+429 98.002 7 -7 re W n
+% Fallback Image: x=429 y=262 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 429 90.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$BhVH>'GW@jW2MF!C5e$`i[u.+d24_q'%aYP%N=@Kf*%)e%TBUuBraqNU*(Qm":IoH^.
+ FGu&6Xlm$Wsi@Q<'k7Kbd:KURf'1.1F,`@t)[ho:rkb^%6-f3VU7=JcF&GICb\98P4jg-Di
+ ORZ90\>/0q$UboR2J#7#a'nY.3OU+/3-S=JA6<2=5F,r9a'2!!%tr$th]c_$7_FXm++Om)c
+ @7fr,;_so*M-G$c8?b2L#kYZVM\3_bG$aWg$6_X!S?"8p:NSLl'q:;[<%3%:mf)tA^lNY7K
+ $29*jfb1Q:2u%[]c=OMrQ%at$f@5nM<R&cW$qC*,HTW+2=8V]F3''6/^78bQcW[c9AS9%g\
+ s*V&^=Vc>T<;9.]P1</P>f>d1T@j$(&7Q'a2KLnlH%1a\K"cZl#cp4CYV:4Ji7N=?a.=qrd
+ ;J+o6bCkI-/Wr!u9=*2.5B0o`&[phHqpCIS6G%n@J8ahj^(UbZ]]e+qVQ"9K+ndN;L;#c(`
+ OOnRU?1cRDdT-;>Zd("BpuXhAAn%U?P"qS7[S]6?mL"6!YZ+:!$=<E!=79gZ^$&!)CmV]d0
+ r4f;&O9q:E2DB*fC(c"oRrJ?dSh:ao/eZ-,ha)\+XjJoJXT`*n@`/MpAn*35:R[[OPll#ig
+ eZeGqrG?E!&pg<IQsdr3oD%jK`DpRalKFU[iBgs<5]'\.>BMeYVH9h?b^DOCWhi-j;,J2GQ
+ 1a&9Ugr-35tPbL0mU&B1E,tU3Rc=*(2gkA[4CqDD(+1;;M#a!4$*4aHH=>/"p<S6pn.B[Ho
+ h6!M%f6`C[iOkJgP*RGSba</7/7tlI@To&*?chOAR0`kVX:*K'Ib\O;WqD9EYm5caRb$rTM
+ qhe?ai4)4jl08.N:"R,=Dsqp*Nk4u8C=S674l62:QQ\qL;+#&X-q*HB,\BAUCaD#j=(_[)Y
+ Z6c!lda2S>>Ji<#ASK]CZS<O//H9+-C@AXJ09c<5%8-S-NE8q-HJY?in$5KtV&=Hp\X_%jr
+ \J#<[["B><!nXM^^qmR&&\O_e/ZE7#')\]@G';/RG8J6<2WX$GCatjS\%@"Fmn\F?T2qpZ-
+ JLp4BjTY7Cc32aSk'+kLZmFIdPC(H7G(n4OWgp0`&>L=)t`u8R#V(CpetJcm@B5rX]8@F/i
+ W+T6OYVXac_0CMo`IQ&m1O,dSdHGBku1se`^a-AtosA7^-;+#"OiFMY2[37rA?:(t!N&PLC
+ m#&+\^T*Fc,!TrVUh$%<l-<ngka>fu$`Erb;&KT-NGF7^b+#9oOQr^T`S61`/1p.Y2?a&q[
+ .a2*>J*e!m,]GGq]?ZH(egtUR,(4R)*MHR$FRl>mW/hZ3aMtqa@dRJ]Da>^**5q#.U:`FZB
+ l\iCf-47H"U"F%G%0hesNeGnpA`:60INW1mAqE&"fbqehJf.m)LOZA.s&rG-nh8\LJDg9HJ
+ f1$hMN*ADBLGJ?2PTlP]Gtg<2jDK3Y9pYN2@=%04#DNHaGC3?@AJJta''PT\N^)41*<:~>
+Q
+Q q
+438 61.002 7 -7 re W n
+q
+438 61.002 7 -7 re W n
+% Fallback Image: x=438 y=299 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 438 53.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gatn$GtaEG(rq-fPThP)<=k/@#jUKt`<iI[8&jN;`/>aQS?S[a0qCoZ;%RDVTh)^[76i\-&Z
+ !4BP=lIO@giBXEld3-!L6k+LKs9%FhW.g,0?i\^1l<qrUoc/T',irTD/<]R3Kf+fUi_cas/
+ *B>l4OFbLMk%Vs`70"j,;OM%hs\rd<fM*E?+)EH,Q`Td<%a4W^fbbaJCXVkkFUIY:P7:L$j
+ qTtgVUJY;)Z\ao7Z>-[kKU8"p/5ruP&2`LX/nVi)*e!ut-G3l`IA]n(84,Bf68WdL`Xcd%e
+ 9>#,rNSV4qp[-.EF1W5"nG)kQOksD*\b5CH4E#-p(<`pGhTG-#lIA]RMrj],+[S?*oB,0O/
+ 1f(N=NKr;=L7/\VG50:\))4H\TQt(Ys@e(/T%;eO%t.,<ecKP:7d[i3,m-Y!Ioq_2ND%N/6
+ H8OC,Jdm4bCS6C$AON_Le`Jb7cgP7#fX4LC8KX.kb4FcH[JXqj("FXJr0k9J#2nIW9SHk3.
+ W<77K`j6c7hBF2/4Z+T0/akN:"s0e`kj1(%<o.,NZ=e]B8ldhB1f,;lmr_1Qr!6Zd@pe#/1
+ 'Bgk_>SR]^eA>Bp8X"2QE&SPt/aZMF<^8@cXaUH\H_#iTN\abuOP5Y8h*>XR\dT;JNNK9%F
+ aTF2&[$?m6mTgp,)nU8^Y?2C4V^IipRm1[(Qbf=5,27gfi+Zk48!&AVlpMd3WOmL[=BKW>:
+ <18-^!4e8@q0WO?X6rCF`gE&mZ`HZA0*cG[rs@7J\mNg=&i7OHr`lJ=>V:>nR<3"j69]pq=
+ ;^dMOp]B_2aPtnSpT--H*lijlI"+?2F6XdA5$Vd1CC4Ic.6,Imd=75qU.nf]\SNdGuK([lu
+ #=fV-p#8,N1]-7A%gCkVe02`AN2"[5+h.1?CkJABdb;TLkS`Bm!I#"m'\Fi?/b>#6p.dk`^
+ >$I8;91k<'3\*;%+\saVS9lP65ZF(,r2&1-k!]HOgACAU!$q>c%#+*HmZWLl5on?&)LeQ(1
+ XfS;blsh"T.G8OAU!%VMj`WEfk@Gu)/6mFQbs'.qojfgRWN5nN(t=c5s7$oj;aCba7>Lsfb
+ 6_<AL`IXc#]V*M"<kL4SG=:TpEns669GNn-"K4`:5!F2`.8JHRM9fAenVnsf5%j`RI==aEZ
+ \rYO+rBRl0<Q?ddgC8nPrSSla3,7M:jp2qWrhB(HEA&m.e`qH]'c=I:Kg%rC/h?U!M/V'!s
+ \O3]894po9\T7H_>r)`@s<0B$V\s!p'6='&pE(?;nN_>UU*a1i3%SfS]?,u2"9-)I@NAgpD
+ ;gtgf\m+JGng8=4Q$rp!*"D_f#Jd&H8r?$`73,hWqQWMFs.ijn?Yg_A#G0Gj.WMrZ(Bpn^'
+ CcjTRD/JYT'ibPH(p+X'ZJf;&,$1kFl-6ngMtm4)XK:9EQGLjA$o^.HDRN=Ep76U*DL?[G3
+ PbH5l03nNIOR@&ap4eKQRj^C[=4$k_N5!9o*71FR[BHCWt<@b2*\iT,f8jIUQX%?>?_NjlD
+ 14W2)R2Qq5M01iC.H0)M49LHmmgi"i<b'!s@j7P-4Y-jiF2!"3:fPUn-]174J8dWN,agQMg
+ ZpelLnRBHW''ZbjT5jQ,mQ84pY;`n"d7id>/@-*RXp2hlKgF`g>`*fa.$HASF@1D;F%mY1r
+ @;`QU,1A']<*7A.r#oc.UMi/`d?U'!%d+3qp.7],Tn6ahUVn)WJP:)T6E;e+T_`9EKEb'I:
+ cKIKUa6-hp-iO>7[IW8~>
+Q
+Q q
+447 61.002 7 -7 re W n
+q
+447 61.002 7 -7 re W n
+% Fallback Image: x=447 y=299 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 447 53.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/dBhVK-'ZZgiK+Yu[_P.77+=2WVLnM#G66]fHOanB&7\W1B-qd6.$F1,Yl3tiYS$E>+"j
+ -fH!`I0E&-:IXlqlAnJ08'YV14p,oeC<WiCgrXk+>6-]Q8PrhK."+G@fn9_*;,OdpI,TALp
+ l=Ve70*OamE1pC7ZPl3BgL3$Y5hc)q<\D!#d8.OnJbQ`9&4!<LLt/@];(8XD(X(`LEZlc5M
+ W\"V^aB7t6-?dGs`/GJgSc,a!n>,%01K7gM3X?_MQ[#WG,j2XO;e=[@QePK8rOJ><;IJaJJ
+ RT^Q!%_!gs]&+DDJc+<W)S9n5cK6A'5CH_R?p(p(_?-IXSdeRujr?G#;,H2lbPNA@&4"d^K
+ .u:`TV>o"M@.GH=0D[0b[f;D`qC/ao9!651FkgZo'PhLm&2^Q&C0.EQR+6^5Z6$Cp[/8cmF
+ fC?P%)PSYkRMe+6:oj2j!O/YV;lI^T*/EcTdb^2Q*@8H@)RI]GYkg1]fhZ`&pFUgir*m$4/
+ G$1fEbr[sJAgH]!],91\jGhiH8u>$@5sfe'2&]d4u>[']=bL[48Q$4A@O6aLWG@eK@)i[$2
+ e!jJh3\%3+R.>E?QN0r*f6GcMn0(/Z5gq.c;7mnI1J5#V/0!?R^GB^s]R$_"6jHO=enk_o7
+ /L0;hF!oNIe/IndD4&^`f.NjLkj[Ql.p$[Tf^D@@,9YG[,CJR?dF$(M^5h"(+'G[%F7V).F
+ W;ClN*QNS-+aHjHARJe?C^%#%1QjOgu#js5C]uR+-?;t.DD;B@=EZ6Au>UYX6R`dER6[5XN
+ ++;(<^:q$EbQ$BJ:V@W#nu9[]OC@<7F0U28TAs>Z`,:62Ce]!jo=^<RlKX'g/:fgr77g6pq
+ m)4E&pDVZ[-1`$_Fl"Phr%X%)8cBi@#S;:i]5k<FEpU4.,cCZL[#72H6HKHRuO#]kU%,RA1
+ ;pmN<F#f;EBLK,Q_h-P4[>n+?KQG\p[BA0/'2,>.;Nu9Dh\YT#"RB51\8L[k@;0s5+;*]Z]
+ 2`)Zs0ej%bkqD-^\YQ1r\]PKd]"3pa8LfLnXGe].l%r!eLrc@l:;"2/PgrhY7RhjIe3,''h
+ 1UJH8jigQP`bLfcjVciH"(9Mi8KsFH,tu$HBspljmY[?OC+o`h[^10D/UMtWG+t"/p)5))a
+ Oq+FE*Xm69G&3g9i+O':3U@[W\aYoDS/4$KLT$o:"C&SX>c_)OfmSl-.=<Tr-_Y'n5-F\eF
+ oN:D'L"U#2R`G8CtO`W80qmMuA\-SI&(_?VTH1O;]2FEEP6*I:I/SPBN9+4n%U->'3bG(+H
+ Ec3Q_oqIJk.lfc,';;gf2E:ID5Q56GfA)dV,Q_2^SE0pSfNB4;mc5/,`31S2SGECGk;cB:W
+ 5Tgf_'tV6DaHH].Dp$5fio5jNh"'mh,?=*uh@Le/VS!ldhAdF#"l0]m:N^nASfq"8,9o9jE
+ eYMOB#hnL8&c^HU@8r-AS%Q,o$kP<@P0L?nZFJahr`!>oVmCmOlg7l]Vh\6NL_H@Knj/QE,
+ `]5rho9pD@ZQ_0o`WMN\iVUHJ@!Tj6ZR9L,HWh=C*!uJ'm`Ys).`=O8Kj2~>
+Q
+Q q
+456 61.002 7 -7 re W n
+q
+456 61.002 7 -7 re W n
+% Fallback Image: x=456 y=299 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 456 53.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/%G>+9'*5*g7)+k_abL"<\9!NsN,Ud%H@7[@4.tUTLQ(l:nLOrXTar[kI!?qfj&7gEDb-
+ D^p)6uXBW5u"*]pCjSkOF4Smj4gKJ,2rZ:;4BrHbXXJ4hpO#V5=44hd^tWpf2-HR@diCVe;
+ -M97ad)riKDj_(W7*L!IuY\\"4)pf)s$2*H:EgsSN#T'5D>>Pe0e.E9@6Vbb@ul:,Q(Xp5J
+ [FQ2ucOphfKcCN.hI_@3f[(E2iNOcM7;DTq183VAY:00A@:$nObr4R^fJRCLK?s-Vj?q*nO
+ \LK6SG5-$8Q<'`o5#gXuf[N;Wo[MHt\M6'G&KI<jo4E`fq4j-$Ys2Xbh>euRIi?R=;UU'@*
+ ]@D\7`-_LKIA66G+,BZ"N->tPa)0e7On#RaN3]BGV!E5]*:4^.k,b%M0Y#:HL9MP\RUDMLk
+ mDngUCZ6X$5P&\,rbT]QC.*eb*KQ<-)C&E,-thH$4QTPI8fc"h(in,ZI(gNhE'"[V`2Fr%:
+ )o:>FXM<,C7Ib/]9;lj8oBN]V5)gVO"nDL2/do>QXXXtD3qLT.8uMMaX(Z@;Q=H>I1/VQB,
+ -/<"dYG^5i<Dg'd;_4H`g3-'#t336T8h#dnF$k*L0m-52rhNsQ%2`/<P.eET)m,6X-J!Q<u
+ LPNbY"PlR7!^=+##XBO<1Tg^]GQKgs!MLt8oki"!"mtONpTn@><9Ao1H)/JGA)j'>A-duUF
+ UHamh6dWoj5Te!bW*dO8-lSE.B-tiN>r<6k[F>7h*!nX1d<c`AR8VD^s$=r?d&'(La-AgTE
+ ji<LG2#c_o@[8Als`PctP>t*YJcOTP(L.l,3-M@r?18_4WOgBcdQ]2)P8s%t!dFo$6[Z0#G
+ KN!Wl-0]T1e&9[+82E,dl^XBW0F#RS%uM0\*(MMh%9l7<PX:aOes4K1QDY\/Hg%BX2T'Cm^
+ uqLk4Info<E$+WOH:P@@uE17CX67`DQ6ARWFVM#d!U.:$b$4-se<7HGn7oV>U.=EcqY:$[6
+ i,bk>`$I#DMcfQ?s1E'pD$m@hGch;ZR=-Ds,Y@l.>36c,3@tERA'.;D,TM&lq#nc2cZgH,-
+ mdr'U:5'BSO9oTH'"?#f,$3He;96I$%@?=6W0(roW(gKmpiG9&j3jjmKTRX`FPjAYt-kD1%
+ uNDRF0EeNXfT37p/u;6q!'3jhp-!Oa]h6B"]iB>X]t1il+e[5Ep#'?/8%uqpaOH.cR(i1c+
+ l&N6',Gc;#'K6X&3INfJs/c3281d$OV?$SgAh\Q2`a,9o9#.j8D;?smk]!YqsUoAUrP+L/0
+ bqcaF8b5D38m%K1E0q7G8d'@U7c5gY;7`/Z20iY9kbYaY]e^ZMf*b8Wk)QBk\TrP[21jOIs
+ :fC<Z/RlE;$qB-D2s@aG(o<[gTE1o,)6o9AD%/#BJ'`O,N>\'ON%.1]n?L'HEFTaI57QlAp
+ i^U5T61Y=L?N`DQe/.4Q3RV[dHR]V*>d=.=GTF$2`^[_b_qCCrV]:%[\=rK$b!:dOI?N3+W
+ 0B_['fQ__a`^%n#KOW`PiDA?<"j0=&met]6?4N.Ih,r\1Cr.Bl!%<Y=CEN!WV[C![b+A_uI
+ l?Z,DZ`PQ1=N$^*.[@/~>
+Q
+Q q
+464 61.002 7 -7 re W n
+q
+464 61.002 7 -7 re W n
+% Fallback Image: x=464 y=299 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 464 53.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+GauI4#u"<"'S`4u[53GK(e##j&I&Xh!fC@o/hdK&6o/9sMkWOg&.gB,!J)][4;a@b&LN#2Be
+ <n[?"G_k7?F@q#*h&4Pspp+&.eutl-G;3O(i*SR,7b/9^_l*p[1-;h"0[j^?)j:IY6^D&q*
+ ^Js%OP`p[1IZ@T>fa7;-@;@,N8Zs'f?mV$PApJ,ht\2UoU$4F`Lkacf?bDeXL\l^M["PA+T
+ NkOe!Q;q"-Ej/"1"q!g0s1INBELjbN61#onF80neZH<%iBh6XT:0K2c_0hF&Q\>c5*`G027
+ 91s&_['_3\2tuZi'7N@*[Bg5r5/oPYJTQ%0P(u(ZW^WXkDspq8gLO73q#1(YlKV4t<hua1U
+ l%e*cCKlhU4T3i2)TX<p%;6YS3U&9QWM6W1VVsRd`mD:*pMsi9hn0h$=$ia31RLlHc$R5_\
+ <f<>IOt$jb90_09WtqfX>YUgUCNk;M$]i_a.7I84_rIC]4JVdUQ.G8,N/^Idj!W+T^=eT(0
+ t>Rl1GlapJuE5T24^h)_Pi,ES#ohRG:.:+g/QDYT.&]k_NA$F=s;4#lfEY#<C%6UREpeP/%
+ a:BZ9NF6DP)FV,qPYQ5;Um91Ps:kb<&3dmUDA7Em<f%,Xlb0CL/m)F7[9O@CgOs`GAl?i?4
+ XgI_79MD%AdqqH>]P6Sq/_G6^qXm`sb[;JP\ZW%3lf#bNrtuj5>#H"$m6eHliVRYpjJh\>O
+ m_Y/g0/#+YD,CVmFm7ZljDL2-IZXqa!s3M3h5#aUnmGAcQdZ[+)iin8tMTAR2d1Cf\+rJT3
+ ioVA6N02U2]rg7&3e>*6;OG"@['?n>)[:K:CD]QT*RR*YBrna85BnNrImg.M;PkKYDo&L1\
+ Me*J$mrJ?1:nUL-B[=082(1OL1CX=QKMb0!$[bm6I\OV+)4e%_cl%g`8>C,6LuMtQO'<:Lb
+ (;Isjd&EI=(6'VaBE!X=N+KPmdNZahu_OVg^$0#TT\DeBMnL?Za`I<h,<W\E"P,%UlK0rTY
+ 3FH7-:X<!5kEL^uV(0Yh;9>6J]L$7M=0Lbh=gK4]3o*r!M,ap`QC3ISr.m*j?iU8q3uUBrQ
+ ^f\ihp82M0B[6@n&\_;EHd)p8UfIi$Q"qNTt39VB93P,A7V?0ghSeeX72p=KkJEF+mON"/d
+ Mdk$6U-#'M:78RAm0jJH>D)pPk/LAS"YI@gcOIIq,g)O`B&#6Cm!l1;\1R.QkD(NIr5lLmj
+ p*"G+O$JQu>\.8?D*`g%G/miUi]m&dIp920iukD-JgBg)ns3I.p_`s8Y.F`ee`^4dY+M#@[
+ +G'4X^7U_>g&*$m@;HR$E']S[U)WlXuNLp=Y2]!/.$Rbk.6L7dpe1isEqPL:XYIM)i-`:;]
+ *i/(mK*.Q-7n(D8aG<gFP/q-C?-f+mVko[Rqr::8=]SQ94lUM0"M/>_nFRHWd7N1R2'F.,2
+ FX4/<8edI-@f$dqYYUBjQVMX_7$d2Q'Ddr)1P%C;:Uc"hGITCd+SiQ$HT0]q<h<khtm+f@o
+ h04d"g"&;&-uS?'7fa2L0Upm)''E%.+XT)eq#VP6gt+Gl8Q"-E4B6P0m?NoHQL^JG1rY:^&
+ E4;/bs*JGb*S*cm84Ab*UUd`KZQ$fld;*e]?%~>
+Q
+Q q
+143 16.002 7 -7 re W n
+q
+143 16.002 7 -7 re W n
+% Fallback Image: x=143 y=344 w=7 h=7 res=300ppi size=2700
+[ 0.24 0 0 0.24 143 8.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 30 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/$D+IT6(bH"D%+E-g/+#\Z7E[+D"8sZ;5u:&D,=s:4rM+c`,.*W7S"!cQg6X-jiC\*YL!
+ rFa?%1=)l8!G(e@'BXf6"UgVH[[Np3*dMU7XRg`oXns4aZU<c[2hJr4THZ5:Rrlq6O`)f%0
+ T?c2Bt;Iq,6J&.67o0'lS]G&$mMVN"&3fIX)+DIbL+0en``U<66$i.m"$+$F?H8ranos']F
+ `p=:T;FmsX>=tQ`/?!^hX(C/[-K*Ss!GNT29hZsY'Z#,sFg]ScS0L$rkI,9DVf_[Wd<g8q0
+ 0fhoVpX[hVA[<n]UJ&J@mdAhRCWDHO?f.nJ5$'[\bjtJQg9BN@G^Ep@GJO=OmbYX='gtPNV
+ PHb?M@=!)UbZO.cHh!'ORVc3l,*Drd8IQRB=`jgg8\.e.p&UZ\WO["qWcV@S$?SMorVH700
+ aTZma<C</?Q!1l?&im?q89'ZEgp/S>u2D0p(28Roq?rb[ns7NfFMQLEq4n'$1Un9ID3bZSQ
+ CmE\K5*b-P_bZa6>Zd*uUUlUbZq9\.hBd)k=u?+a9]j@J^9:!$`G0/$RtY[@K[hE2EQ\\)T
+ QdZPou9:(65FSKf,NJ>,CJ3BbV-V<DsKjq:"*RE/uO\m/3Ogf*BHc6?aN9pppG#W$7405>>
+ 41!buDXH6Ti8i"WZo"aI!!RL`0?&(FiF,H1^V$[C>Yn7BmMoPWk5+bMmd:K2Vo6Q4.EZ<@l
+ aR<4-R;*!jpWU7^81u?@nPkTe.em@iTN.f@@=3tZkVug?>+#4^OPCWF_k.27!j9<18]^2B<
+ 5AH%Ye4YVb;o*<H$_Z_(\&j2OW'5hbrr0,\et`XLW</IV@rQ/R,B&H!r%EE;KM.,k,.l=4^
+ ,!YM=X..+cDX[r])>K<mV':.WaG@ePEI4.>Q0&\mr[s+44FrOG*\R5WYKl]5OEF3]]9FllZ
+ SWRV\rPtK[r+VqhnYCFOS2_Z*Hn8L?F`PmN6Z@[T(30I!6;?A3?_c!IWE,\jur):Fh81JRd
+ GfB:;0=b?+(BOgG"(8t`gtB"=+X"LI)u^'Ur/$OJaoS3#BmSJm0`gfaPmU_,Xn@O-3:&YSI
+ c')P&)9Bk#hdbIkGtCV*&6plH9Lt*;7;:M9^!H*kWaR:PI>"5+kU^NhbKn&4<,Mpi'd`U>5
+ 5jr--Mt1=U)b%?m*N^&ifk-"cbD#o3l.f]]71k@!nE3MGG&q+cD%O+FbqTq9KFW#bUb?etR
+ $6JAd@t!fR1H6&B&TPmrH[\Qg9joi+o'i,E9.[fBOHTJQ`QPUNuFn6X+iL/^<!pu9JsW^pO
+ 7BR&mm-gOP)<P_+C.G>j.mRDs3P&LV-_)a?8'#h:/RnOY)*!-5XJKucNf'.,iUq]b*?iR.?
+ !4dq!T)~>
+Q
+Q q
+257 16.002 6 -7 re W n
+q
+257 16.002 6 -7 re W n
+% Fallback Image: x=257 y=344 w=6 h=7 res=300ppi size=2250
+[ 0.24 0 0 0.24 257 8.801953 ] concat
+/DeviceRGB setcolorspace
+8 dict dup begin
+  /ImageType 1 def
+  /Width 25 def
+  /Height 30 def
+  /Interpolate false def
+  /BitsPerComponent 8 def
+  /Decode [ 0 1 0 1 0 1 ] def
+  /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
+  /Interpolate false def
+  /ImageMatrix [ 1 0 0 -1 0 30 ] def
+end
+image
+Gb"/ch(RB"'Z\t^U`pPQAPlM@Q`P/JA4(+\>fgMTR5#N:P&,DMFk&tC+l+u.Y,oW:9-.\^=q
+ d&,Bu[$J;5/9<1R<JSXaU5"5'pYMchj6Yk<+-PjF2RWe@0Amr)jC8qXD<)0^r2rf!`*emB!
+ I*IU3[$)B.%f-\eNp2ZNr@ou@S5TodOCBOjM:?#"9.K*RlrJ]G@-i[E=Nn!]bG:QOr$=':s
+ 6b;[huV!`,I(caW;bKG5)9'u#GWDQEN$`^9#k`J>)[C#!C'JaFOd%J6B,q$<tTKr2C)B@8Y
+ YQ'JFj6-k.s7Amr]t/>Z(G@6^_?Cep\oGW.?X,E6HG&#C,^BuTmSG=;-n3R>o*PqL5t[#lM
+ q-Bj)?p:,?>bB]f04Z5qtD!N=+A!QgeiO7io:afUn^F=EVd'4=OBrmoQ[nU#$m^fe(C$o]M
+ N7=.P!*;W$qK;)%IY=!";!@a,`)3TJpf5$fCXKp9!<HC\@A"UI4eD=jo$0;I#`P+.&n'G4+
+ ,g$kKstfqM>n/q*H;I+O!eg\)^a_<Q:>:;ataCp[VG9N5u8!X#QE]6:`CWB<:D1^OK"HIY1
+ _?XnE9r]"slnXi$I?(LQW'H=)_a)pO,p?o?^\V5Wda,1(4DQ[_ic$*pFShrNE@;0LGL!nFm
+ lBM5F[;V[\n!8`aHRK_UX9T:$j@Rh\`JfonZV<]n&E?_hUiY_cGBeC9,'[t^mN)^I`stbtg
+ Y7tVnKLKS,C>@MHhbrO.BfRE@:@m)hm1n@a7R%':Vcc#fW0CJ9pq5V2<!T)[+L&HI&X`%<E
+ a,nI--C)_sQ>YfHWm#&>6pr>lXtfQ2cXQrKSnq92_S*o!s%pHC(%6)_!i%Y2f%":)H;a>d-
+ t47=u49?E?".YY=g[K[%eC>+3a.<D8>q,<%jq[c4b2-$m5n]lqXY5HB=R94Y?Rb0ktO8kjF
+ 2Pj#)#^+=$A`F<Ou[;t*;D$@#@de2pdJ<IS7_KW][?bY.s@pGE/FsH%`(30J@kjcNV#V=O+
+ a8,N7D\FKK~>
+Q
+Q Q
+showpage
+%%Trailer
+end restore
+%%EOF
diff -Naur ns-3.18.1/src/lte/doc/source/figures/lte-ue-rrc-states.dot ns-3.19/src/lte/doc/source/figures/lte-ue-rrc-states.dot
--- ns-3.18.1/src/lte/doc/source/figures/lte-ue-rrc-states.dot	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/lte-ue-rrc-states.dot	2013-12-20 09:44:51.000000000 -0800
@@ -1,23 +1,38 @@
-digraph LteRrcStates {
+digraph LteUeRrcStates {
 
 
-IDLE_CELL_SELECTION [shape="box",width=5]
-IDLE_WAIT_SYSTEM_INFO [shape="box",width=5]
-IDLE_CAMPED_NORMALLY [shape="box",width=5]
-IDLE_RANDOM_ACCESS [shape="box",width=5]
-IDLE_CONNECTING [shape="box",width=5]
-CONNECTED_NORMALLY [shape="box",width=5]
-CONNECTED_HANDOVER [shape="box",width=5]
-
-
-IDLE_CELL_SELECTION -> IDLE_WAIT_SYSTEM_INFO  [label="eNB CellId enforced by upper layers"]
-IDLE_WAIT_SYSTEM_INFO -> IDLE_CAMPED_NORMALLY [label="rx MIB + SIB2"]
-IDLE_CAMPED_NORMALLY -> IDLE_RANDOM_ACCESS [label="connection request by upper layers"]
-IDLE_RANDOM_ACCESS -> IDLE_CONNECTING  [label="random access successful"]
-IDLE_RANDOM_ACCESS -> IDLE_CAMPED_NORMALLY  [label="random access failure"]
+IDLE_START [shape="box",width=3]
+IDLE_CELL_SEARCH [shape="box",width=3]
+IDLE_WAIT_MIB_SIB1 [shape="box",width=3]
+IDLE_WAIT_MIB [shape="box",width=3]
+IDLE_WAIT_SIB1 [shape="box",width=3]
+IDLE_CAMPED_NORMALLY [shape="box",width=3]
+IDLE_WAIT_SIB2 [shape="box",width=3]
+IDLE_RANDOM_ACCESS [shape="box",width=3]
+IDLE_CONNECTING [shape="box",width=3]
+CONNECTED_NORMALLY [shape="box",width=3]
+CONNECTED_HANDOVER [shape="box",width=3]
+
+
+// Network attachment
+IDLE_START -> IDLE_WAIT_MIB [label="manual\nattachment"]
+IDLE_START -> IDLE_CELL_SEARCH [label="automatic attachment\nby cell selection"]
+IDLE_CELL_SEARCH -> IDLE_WAIT_MIB_SIB1 [label="synchronized to a cell"]
+IDLE_WAIT_MIB_SIB1 -> IDLE_WAIT_SIB1 [label="rx MIB"]
+IDLE_WAIT_SIB1 -> IDLE_CAMPED_NORMALLY [label="rx SIB1 and\ncell selection successful"]
+IDLE_WAIT_SIB1 -> IDLE_CELL_SEARCH [label="rx SIB1 and\ncell selection failed"]
+IDLE_WAIT_MIB -> IDLE_CAMPED_NORMALLY [label="rx MIB"]
+IDLE_CAMPED_NORMALLY -> IDLE_WAIT_SIB2 [label="connection request\nby upper layer"]
+
+// Connection establishment
+IDLE_WAIT_SIB2 -> IDLE_RANDOM_ACCESS [label="rx SIB2"]
+IDLE_RANDOM_ACCESS -> IDLE_CONNECTING [label="random access\nsuccessful"]
+IDLE_RANDOM_ACCESS -> IDLE_CAMPED_NORMALLY [label="random access\nfailure"]
 IDLE_CONNECTING -> CONNECTED_NORMALLY [label="rx RRC CONN SETUP"]
-IDLE_CONNECTING -> IDLE_CAMPED_NORMALLY [label="rx RRC CONN REJECT"]
-CONNECTED_NORMALLY -> CONNECTED_HANDOVER [label="rx RRC CONN RECONF with MobilityCltrInfo"]
-CONNECTED_HANDOVER -> CONNECTED_NORMALLY [label="random access successful"]
+IDLE_CONNECTING -> IDLE_CAMPED_NORMALLY [label="rx RRC CONN\nREJECT"]
+
+// Handover
+CONNECTED_NORMALLY -> CONNECTED_HANDOVER [label="rx RRC CONN RECONF\nwith MobilityCtrlInfo"]
+CONNECTED_HANDOVER -> CONNECTED_NORMALLY [label="random access\nsuccessful"]
 
 }
diff -Naur ns-3.18.1/src/lte/doc/source/figures/lte-ue-rrc-states.pdf ns-3.19/src/lte/doc/source/figures/lte-ue-rrc-states.pdf
--- ns-3.18.1/src/lte/doc/source/figures/lte-ue-rrc-states.pdf	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/lte-ue-rrc-states.pdf	2013-12-20 09:44:51.000000000 -0800
@@ -1,206 +1,170 @@
-%PDF-1.4
-%ÐÔÅØ
-
-
-
-9 0 obj <<
-/Length 82        
-/Filter /FlateDecode
+%PDF-1.5
+%µí®û
+3 0 obj
+<< /Length 4 0 R
+   /Filter /FlateDecode
 >>
 stream
-xÚ3T0 BC]=#e¢�œËUÈe”ÐÉ�Tà1Ð32³47 ³áÊQõ7°€¨@fcS­ï™k¬à’ÏˆÒ�’î8i ¡"&ú
+xœÍY]�·|Ÿ_ÁÇ™‡¥I6?¥³bG°.öébÃ0Œ@ÖY–ƒ;Ù:Kp”_Ÿªæ~ùvçp³Ž‚@ÐÞÉáôtWWWsßÞðßíOæ“ÎüôÛ Ùxç³I-˜U«˜úÑ¼¾2o�Î|cÞ¬w¸øl³ƒ7¿Î<Åÿß}oœuæjðÎ<3ÇvxŽuü‡ûCÎ°f…Å{Ó0ðñåà£uÎ…ulw%Rm2­9+­F)æòføäÕÊ­°È\¾¾ÿ:­B?�V"ãøã“iåýø|ÏãóiUÇË)æñFe¼˜ŠÇõ÷—O‡'—;}ÅC\\n_öÕN´ïm=Þ?÷ìîÕð–Ç6ž}~`ºx±Aªi%Ù?ßqÉææ1â­Í„VmKÅ´œ,æpMKÕ¼4¡&[6-âon¢­ðAÕæŠËŒqì„Ž9áŽ=¯ì¢[›m¥èª,´ Ôj]©t©®˜kŒˆu9`�Ø$#¯‡Çó0­…}sþ}1…8¾‡�ÜøN]÷Ëd¼™²pJÖƒ?O˜9å:šiûMœ)}~èkuÁkFDïÿq
+y|ÃËwêvo³+Þ'³ò®Ë ûåLøaŠiü0Iß[7Ñ[¯ùPýÐ‰ß&i{úM«!C·Q­seø®&· ÑGSÍÓàùf«"0¬W^nAšÆgSÒQ¸ïñ�Åõ¹ã²ÂâÍYqéR31[ƒÂÒ—€Ëº†eÌ@_"
+ìöƒ‰%X™gÅ–„KÏkvƒŸAeÄsÞâ*‰JÞ–Ô�Öãïµ>g³$¤˜ŒEYéTnð;~ÞóC!v­Ž€œ @ù.”îóA¸üƒÛ�)Øv1N€RbŸúa²¹)uŠë«kúú#´m©ÍÔâl<nŒÏ‚o@@ƒ ¶æ‚˜1¨A`fÉKÞ³ãÀÈ€	P¡ÃdÐB‚ëd!ª$ß‡�GñiøpÙÖþxŽÔH1�ñêîí©©÷ä¥’Å¹ìEÿvŠ‚À•òÅ¿§UŽW¤!ešAöøî8;ú<›âN@P�drý8Úae˜K)6ÅbJj
+”!‡LGÁ+DIA!
+¤x`=ƒÉQÆ¢éA2G$!•õ*A°)öÍŒ5œd}­,n)‚ž*Fª�I–7aæµYŸÝNmü×¦°<›rÏ£#lJ„øª'DžJ%Ÿµ³Gfø—0Ñ­'ûò¾äüoªÐ/Ï Þß/Ö»AŽß2h(2ë *ØÄMñD	Š%%¶¢'ƒ†²8¢VdÍâ˜‚…Á•·ÑTŽØ ;0í
+B�ÒÁ((2Ùas¼þLíˆ™u&?¨NZº²MÝÅ°„¥µKM r®KjGýo…¼‰mN“ÕpÝ�Ž"*:ÖG^
+žÏªÂx­U€Npç¼šËëUHŒõ¶*DkKP5úÛ®‰yÁÛ‹/LôAï¿Íû¼.t·GiÊƒW›’Zbk¹Ý-©KõXÙ—Œ¶õnàM2¾šÄ÷¢üóv·5ûž¤
+Î„Ôº.N(&“/²Šm–ŽZ*ˆGhiãÐaF§ý#+œ(ŠY©ðII™ú9IQÿ£µjg€@°W ŒƒFR°uyÆPm—D’t/Äñ’8B¦âà¯�G½Ie™.Ým®ú�P»¾äH•„_c;A�{ Buçÿ¤J†#…ÄRHæ”	ô€Æ1!™3fBôÊ»@R5àå’e@ÕLà\§Ae5áíÐþ¨™ê¼I`Í�ç4U€^â,W•Jn–õdu§v€^Ä�Ž4M�%õ4«}sÞÕ0¡#N?îôaÄKë»E�Óuo¡±†ŠZ6Ý¡GÏ-wow¨·þÊ‰_9®›Ü"V¥O+‚5%>`ªbê €�»RO8J	(W’Ý‰È»à‹và�ª#¬ëYKGß#|;;›†¸¾OÑøüÐ~ˆ®�Y´e-ªÔ}Càa•¶}èø-ÛC”­Šè£d «¡¨— Ì‚¥%*x�c�B“ˆ‰NŠÊ´‚>q�‚žÀA'
+•T_HDS�nµzZ!‚ú(K�zþ±¨¾±å>‘ÓÒ´Œ¥¶B«UGïô¢‚„íÌ:–dšìU1{éšP+£¤§Ä7¦¦å}T·){=,ºÖ—Ç£¹ã´Àà„ˆÌû€p±Í°+fƒ&¥v·JÏ»¶÷€™é¢ ís9¨õÇªóûÞ91×¼‹n™Êyù±$¼Îþ!œª›™<i<?ç»ö‰32¹_Ãáü³#HÈJÜ‚f†ºQ#<4ƒ€@£t°B7³ì»„aÀ1Èð¨ž¾Vv2Å.¨hå¡õm$vxPX�ö/3¢û‚Bx[éÅy‚
+”å�gz‘M0ÛPŠ‚qf`¬øô113ÇÏR	D$E·zAù,ÒÍôâ£í	ôs¿Qý9´™h_Ö�Ih+j€žãùF�ƒ�,×ƒÖåçE´Y Ì@gƒ%”l‰ÙÈ P›Ábˆv^]žPÍqç0DÐ†62‰×£((»E¿j±�0"ñ0�4uÿÃ£˜X´ÃµýÅÅËxfÎz!A.ô(¡ê7Xx'JOôüþ©¦Ç6cŽ%4eìò„FaLÆçù„ÞKÙ¸Ÿ²ó=ï®å•í	ÿ0Óó8�gUzn¡WÐ@Âv‘ß‘y<¯àwß˜åa.¼ªÙ¸†'}'¢õs
+bf7» eUî#ô{ÃºŠ{å®;««Ö¿«—¾<ÅrÂ	” ±OóµwI?ï©óµ.Ðeü%æ�›ÑiÁÓ±hm¾é	MßCYà-$ƒh…ÇŽpb ¡ßUÒ$§dí!vÀ"Ãn þ¦NæÒFù-À¦ƒüFSIÒ•œl†“À)*]ØcBNS'´f^3e{TÜQJº�j8J‹o¤kAgÂJÁÊ²èTCßÈÿiˆh–‡m¤þ¢žv|áâ~vù„¼.ô½Ó{½Õë<7ÑêðëÄNlUägï¦�ÒµW]Ñë¶Ö¿æj+f¤Óø“ç¤WåƒêÉŸ7»öfjÖø�H5~)D=2f`Tæ°àñ”WvP$P² 
+^úÏnÉ5=åæé3j·>°%ž~³Sós\Ÿœ¨A]:–’Ö¦¨M»ýD±àÔ¨V-àz�Ðýÿ?«Ø_ÿÈRè
 endstream
 endobj
-8 0 obj <<
-/Type /Page
-/Contents 9 0 R
-/Resources 7 0 R
-/MediaBox [0 0 198.425 177.092]
-/Parent 10 0 R
-/Group 6 0 R
->> endobj
-5 0 obj <<
-/Type /XObject
-/Subtype /Form
-/FormType 1
-/PTEX.FileName (./source/figures/lte-ue-rrc-states.pdf)
-/PTEX.PageNumber 1
-/PTEX.InfoDict 11 0 R
-/BBox [0 0 735 656]
-/Group 6 0 R
-/Resources <<
-/ExtGState <<
-/a0 <<
-/CA 1
-/ca 1
->>
->>/Font << /f-0-0 12 0 R>>
->>
-/Length 1668
-/Filter /FlateDecode
->>
-stream
-xœÕXÛŠG}¯¯¨˜rIu‡Ð†0ä!ÉBŒÖ{që@œ‡ü~ŽêÒ]3½³K.,vwWIêéèHêß•‹:²Õ1:S˜õ!ä ¿<èŸõoŠ´ü}ù¤ßÜZýé�þüãwøïOeõ;üûU½ÿ ­±ú^‘ÕßkXsAÖÝê“Ž¥T»ÇO�yÒ¿¨!ý–äOLs—'ìE«�Áq~ê8ÌÛEÞXkÙûº¶=1'(SNA‡â�+Ù»¬o>«7�{€¤¾yTï¿�4-NrÃËÁ9¹q¸a¹ñË�HnV¢ÜÄåxcˆªMi•MË!?+¼­Ä¥^òØ�³Äj®@¤Z¹]>Ü¼SßÞìýø¿P2¾ûÅ¾ž_>B¸ÈÍ¶xVWÛ¯Ûyæ~ìŒ…¼{ÃÃgUµºŽ9TÑGˆz¹);O9Û=•ŠI¹ÇJLÆÁës°&Ú°=»7±¾›ÝºÙ%WwEŠržír[yÂJ<’© ßé½½(hÍzš//�ìrä‚·ÈÊ‚è7 9rKÛî×-jä'ÅU‘�@S\œˆÒÂÕ"BG¢Ie‰yR¨–Âlé¶[þØŽ"ð’ë]7|ßÅï»Øx±¼ WƒCcþaa×ºçèñl
-ywU
-Å‘Bž^�ZÖzXÄ¬,Üf�TVk«îÈ…ÁL}¡§Ï0ÚhªŸ$…–ƒç²ÆçÓ¬ñé8k|<Îï/É‘:ÎïN³fÈÌY³é}uÖøðbÖì2A²‡`¥œšM4	0¼IeÂ¶Z™l„~Í@ö;G§Ô* ¿„”Ü ¡ãW!pŽQØ‘¥ª¶Ÿ16¼#ºaè¸	É§µ²»F|ôl>’ö–�·ÎÑ$vÚ•hr*(UØÎxDa=ðÒ—j.›µr)˜’’<¦ ÑdÙ²ŠFQÑRÐhdãBÐ‰Xw�+ÎUÉ&;‰GÂ3�A1ÚyK C‰qR¼ÄX´.ˆb½>i˜	!õÞpª>Õ¹¿õè-ÂñEøÆT<(z\!v9–ˆU¸ÇN ©¨Z5U¯¤ÞMpêä|wbúqqe6½‘ôm×èä<,OlgÖŸÉ»¾Y�‰íýT>v
-{¶çäM‰-Dì<Àh‚+5$ÀãŒXÁ».$“£Ãsš`Ã…MöY0Æ†JÀB2ä Ï,êÂÖ„ÔðyžÿDKàUš’ÐŸF¡|ð„þœ©õÊy<;µËÐÃ%\ŸÕs£ŽŒ ãŠóGÝ,ßq¥NKÿ@…\ó¬8z‡n`Åá±è˜ð·£EBÄá
-öÏwö ^»„—~j!OªŒ7êóß6þC’÷Í,c,‹.µ²æÄ1>ð Gª2ƒ�nÎÎ$L‡æ Ô0Lø™¤•háçV4F€š£7‘Ru	¬£¦göçj8ê3[W“‚¤R«ÎQâP¹Y@ŒÈxxÉBi5|§w!ŠóŠbÉÙÿŠÇú +ôŽ`õŒ�Ñ:ÛYÑíbí½­%HœJQÜåQ»qb‚‘ØÇ(ÕOú›-Ö^ª'�€Î	C0G ;*4ÄØV@½$/2vœkåÙ°«<£ôFj•8§3°ð„
-'mLq&iÑ<‘©³BmH7à
-%Þµ‚b¯uaaLµ½ØûœkìF{¼¶;qÝž†¤µÓÙòwŒU]PìÐœ×|;èbÊtn™~ŽÀ(^3ƒ /:�‘‘Àžá¤ù§<sÐSzÌ§¾nÞ8&ËÆ�Ô‰œÖqc¬Ø>nôg*}ÜÏéÅq£ïŠT7Òêñ1n 2Î2•ªvzŽÕzI¾fÜx-Tî?<�˜òÇ>óùzš®B#oß'þi0òÝÉà<Œí&¾°\ó•öeÖ7ò¬#‰DŸ]›$ˆƒFëø/ÜLÀ«™lC	Ù†:ª(4v•IÇ	ñy^ÅK­ÊÀ|^gTrˆâRBQÀER±KÆú¤Qø,HâLW‰�gÖ�Ì4Ÿ× øVâe®QèAš±w”§*Öâzòåòoâ{Çº£›š¾™T«êJn=C\Öy¥BãñxòéD6&£1Å°:iUGëºêcÉømnÚN³op¦ñ…`ÿEí“ØI6Õ�’��Z¤”ät`Œ-–4Z~ðˆ˜mˆ[ ªQKuê æÊ¦ò™‡ÐW£Â»s0ó2EÉÔêú¥ÞËÅ©%Š“ÆÏƒŸ	MIÆ”^ãwz—�-ðW‚íÿÜ÷ý þ1â.5
-endstream
+4 0 obj
+   2409
 endobj
-11 0 obj
+2 0 obj
 <<
-/Creator (cairo 1.10.2 \(http://cairographics.org\))
-/Producer (cairo 1.10.2 \(http://cairographics.org\))
+   /ExtGState <<
+      /a0 << /CA 1 /ca 1 >>
+   >>
+   /Font <<
+      /f-0-0 5 0 R
+   >>
 >>
 endobj
-12 0 obj
-<<
-/Type /Font
-/Subtype /Type0
-/BaseFont /KBXRUU+DejaVuSans
-/Encoding /Identity-H
-/DescendantFonts [ 13 0 R]
-/ToUnicode 14 0 R
+6 0 obj
+<< /Type /Page
+   /Parent 1 0 R
+   /MediaBox [ 0 0 663 1052 ]
+   /Contents 3 0 R
+   /Group <<
+      /Type /Group
+      /S /Transparency
+      /I true
+      /CS /DeviceRGB
+   >>
+   /Resources 2 0 R
+>>
+endobj
+7 0 obj
+<< /Length 8 0 R
+   /Filter /FlateDecode
+   /Length1 12060
 >>
+stream
+xœízytUÖï9gŸSU·êNusoæá&!„0%& ”‘¥ƒŠi• 2LÀ†€@£B‚ BTD&!"­	Æ9‚Lm·‚Ý´øÙ*6íëˆ´ÚvHNÞ®º	b¿¶×{½õÖzU÷Ô\gØÃoïß©K(!D'•HøÎ{§•}Rºm	!iÛ	aSîœÿ@˜Ü�T@H>DeiÙ]÷Îé3!™xNöÜuÏ¢Ò¦Î<�Ç{	IýaæŒi%òo1Gð>ž“¾3ñ‚»^YŽççð¼ËÌ{XøÍÜX¬¬›†çM÷Ì¾sè�ç'ðü½{§-,ã[•9„dmÄópÙý3ÊªÇÃ¬ƒ„ˆ™„‘RYÃKÅvì­Jâ-7¿L”ËTŒ“ì¦SÍ×ÿ©æSÍ9Qfª™‘j¦–rÒ:Z¿”5ª÷‡oïW²%Gq,Äi¬£÷+d?£‰„sëè:ÿøIØ–Õ2Ö“ÝœC-OŽ°D‘(ëÅ6¡L�Ê3Ó�;&N·ô@ñØõˆ:¬G#&ém…Hµk­ökÌ¯çÉ%‰.ð·6_j6p±«¼Ôœs 8ŠÒ©ÔÌÓOR3R�}¥.Ñ|š"?“Çe!ÝFÐ9SÉi"ûòK{Óž4f‡Ü$+åƒ²ÆV‡Ý>Ÿ…í’a¹Y5YÆi" \ÁFíœkÎ±\9j‘Z	•œS»û©¡Ô£ÇØZïÀ1œÞÝQÇ¬Ã°G Ts»­š¿ êR%ãÆÊrO55ÙÝÇþû/äHñà¢°*³£…º¶xv¤­€ýÐz�8½[ÛÝöÅn»�íÍ2‰å^”µï7d%ŒûíºPE4”šÏƒ—ÿ(÷®_OœñTµÁŸÑ¸´yÜÌk°ä”dÍÅT�¥¤$êFr
+Qz:¸1¶ÚäÕdcÆ£æÚnÉº‘’ ’´„8o/5.˜ÖÍ¶©¹µùœˆÈÝîÒ9ìø÷ü‡Í˜‚œÑã&©~ï×xØ±›œvÀ‡
+˜úrJVvÖ/²`*õ¦éiJ(�B“i(ÈSÓºfæ'Ó¼Ü¾ù}ºf£.òûtÉË�æ#æž¸ã¹—ìXüùä'òü¬o*Ë›ï¡±jKùçÇhÌwwÿIl·_ßÊùwÎH‰ëqæå3ÎÉþÝÐa«¼oIJl¯7÷>×Õ–Qêà+Ô�JFY^%¢Heo	Íê\ë9ý¥æÜ:ºN?é547…¥­ýÍþf¿þ“­(âJ!~êg)ªße¹Ê\Û\®©`ë&ÝLUø7mŽ·]@µ´œŽÝúm_ÂöúýÛÖõÄ¤„ÎL!85uÐ‰ÉÐ+uÕ\±/ºLÐ5ûF!µšÂ2—piªÂ�Qâºá?Õc›÷ s§šò_«øëÜi‘Cäåv£¼­Bõ1ŸêÓ|d™OÊÈZâR©ÆpñhÇ&ÒI¬È}�ÉÒùl	ÜÏ¨µ*ºŠUºg›¡†ÇL%S]4•æÑtH…tÖ(/°Yþ%+ø`UÛ«No[ìkéA+ä2Òé³ãqìQ$‘¼håã8@WLà LÎ¡Pá$<Tí
+V{–\(`ºHb´WèqqÜÔÝ<ÉöˆÖ¦f´3â×ƒ.5Û#·×+£Ç1-+Ùêâ(*ˆ §ò	Ñ ‹†žA2hë
+™JWµ«ÖÕNîKû²at›)æñybAÔ*e•ú¸ò¸š‚CEkŒ‰J‡Þ´µuŽ„Ç,ÓaÝõå×�<óÆ¨5Ï£ïQÒúPÛjùXuõc¬1ú‘åLZQ3½mµ8ýÑ×b¿h»PõÐC+l¿›Ûþ…ÈD¿‹#}­xÏÓÞ}zµIŸ&ûxuºW¼ç!9A¼=ìfÇ›øþBÎA_BJ£‰àYnß~!ï•“h‘Yz~y;‘©Ÿ’åçKg}ý+ù‚\LWÒq+¿ÓOßq»<"ÿ(ÏÈ#·ßñáˆˆ{¨mºmx'¾‰�6õ´‚Z5{�“eº‚¨$ú»h'4áÏ1=<È9Pä Âœ™gËÇFkö_ÇŽµ¥!f·=ÉJZzØ(eÛA9bM/^Ž�A­Ì¸#Æå%»b”¯^™r(±!½Þ\ã&1ëqiF
+hÁ¡]±Á§šssMGíMç.µ¢$_ð_0ÑPùÖ}9I9É9)9áœÔœ´Á™V’•l¥Xa+ÕJ+J*J.J)
+¥¥e–e®HªJ®J©
+W¥®H{$³6óbfrç«�/u¾Pœ\œR.N-K.K)—¥V&W¦T†+Sc§¢ìœB¸–ö3ÓóQöi]óûôÍKµM"MQó¯CØŠf¯ºwÙìÍõõƒWí=Þv™²ç7¿<~ÆëSþû"Ë+-Ÿ>÷ÌÁ¬Û–í.�öÖ3¯½¨XÓ»÷îÌÌV[VûPV“PVQ$HZ‰à"à¥J•×\«ÓÆ`½å4Æ0�Ùá®ÀÑÈ¹s¹—ÐG¸g‡Þ¡™D¡Vœ®æÛê‰t•î«_²¤ú…úú^œ÷Ö{ô}zˆíh›¶mÛëÛYùåÚ½¥w^„�¶-ôÃŽ|+¶bú[q^¡ù`âV£V¥ 8Ñüï° ¿uPþr;¢í ¦f[U9ö‡œ˜kCb0z Ù2Âä™t-—+FÏ}íµÓÏTU‰­òíõmµ«ÇlÙö+^O¯#fÌÁñÏÃñ$:Ji�w}`m¬+à�ÐÐX'ÊG\¤•>8®œ”+j…VáªÐ+Œrw…§Â[á«ðW˜å�Ú¸‹qæUšCMeæÚ“žfoÙÜ�{÷ToØ»wÃE�.þ]~CMøôüÑ£çÿúÞ‘¯ž”ïÉfùµ<BhÒþŽ¯"DMÂ>¦‘)VW%àŠõ%I¹«’ÂPŸÐçW‰éÓ4¥ÈÔ|E‰±Zü°tÇ{Z[QG†:‘—­1+*§KQ—².�t©Åõ�.ŸviïâÂ;¶B×rlë'y!ç&Ïúæòý¯7Ü?oýŽ†û¬ÛÑÐ0¸nÑâ=°zÉüï>o»�m}úÉ×··U±­Ï<ñÆ³mU¼xß]Ó—Däüd‘tr»	_ç/’F&¨ÆÉ0U±+ôsË°ã\‘«c�pÞn?ý­z\xñåZ%ø•-ÔœG™Ä‘ÁVYIWqïJÏ*½Áä1õ6°<dDp(Û¹N`óËKüß¡
+_‚?¡2á‘„ÚA¯Jò: .­ààü˜§Š^:|ø¥¢§ÆÜôÜÔ6ùíE•	Ïðü½=z|qòä=zìîÒç¥: ½SW¼ÇEúXq?zS½{“NÑ‹ÆØxcÛrs®mTÙƒš;é@qÄŽ¯»{‰íF{
+_š÷Öa¶Ýô¶­¶ •`ÛÖ%ßtÚqÊ#HH™Õc�k¥¶J„vQÑà¦¯Æ6êÝkBLid4ø†&:†ÝäXˆ-žs~Ä:ÿ¥¦�uYƒ“Ê’j“~—t1I&ƒé`6848AôT³µlWO}6™Mg³Ù¡Ù	®©sl¦:	Ô�á!/—¨ŽXU^ÑzÀ}ò•YG¦ßù»_ÊKhÚY­ŸSµž=·jKƒ—Ý>åõ#}úìëÞ“ö§:Úüò“¦M÷m½"K›úþT–�ÿ^–ç®€Rqè}”è¿3âŸ•&š«-LF¡,·£Ì#‘ Áís5Ä†Öúê6Å‘@`x¬[A'sr…HÓÍvÓ,r^.N®L®Ml;Ò°cUŽo¡XbSf»_>ÿØcÏÛ¥í×^,?AÚÛO”¿8 ¡�e?þ8vsÉ4Ù(ÀµqZÉNì%×Ê‰¨ãbâ£k¬T�¹LâÓMC'Äç5}Äç1Ýbï¼ÝÐÝ¦aè…Ãå'†¨‚×¼F£ßëqë.ˆæã>Ãï?eg�£ë´ñ·"92lr4º.h%ÓÏÉMMfŒc¹6Ë1’ iW%~š�ÆäNN£ÖE…Mq�'Z�ñø=éž|ÏHýúÏ×}–^å©ôlðt‚�0„Ûð¾b~î1zÐºã½ñ¾LÒ…vaaYZ7W†ÞÅèâÎôt÷v÷…Í~$Ÿæ³ž#úë}�¾îþžo�/Ç¼žXÔbXÜ–b©–Vèª÷ŒôŽôYæx2–Že ˆ‰‰Êu¢v‹ë}‚1Á=Ù;ÙWd–ÒR6S¿Û{·¯Ø,×zúV“‡]+ŒîÕžÕÞÕ¾Í®j£Ú½Å»Å·ÝØîÞãÝã«3ß7?5ÛÍ˜·	/flù¨åÁ”æ¹hÛ0fã’÷Ü8>/U|‡ÞNogæ{‹·ŒX9ž�iÝ÷DøÐ�x˜ö
+ÙÄ(Xä©njyüÔ´L\J •à?›íwg#öA¿È$ç;¸Ô¸*5îG*…˜¸šW†VÇÚ˜˜Qÿ#—º9AóªZ0mh7?fº§~Â¥$¿³A2ðS.ÕI¥H¦�ïÞ›¨'‰îÞ=�žî�®�ú@c Û“0j®›ÞÍè•Ìu�î–Ü-%+œ•Ú%s¥¾ÒXé^é	Ø£gLÑÜà/øÀq	�È“\™ÙYƒ³îÈªÈªÌz$«6ëbV,ŠxÎ¿’6%ý%m}Ñ¹aÍ˜�SV¯ž¾qpÓsÿøã”wî)=<mùÚ{¬=�ÿù·¥ùà}Ýº�o�Lõvß¼úÉ—ÓÓ_ÏÏŸ<vtQ†¯Kõò­{“#º‚ñvæ¦nZn�ñŠpé.¯» ÝŠÅS†Ž¥˜ª¦"¯š¦2˜Ÿ6	qê‚zØ~CsºKS„M¥•xü§ND˜‚FÌÏ»Ò�´Ê–·×–÷·
+SC¯!z@ï&ºèaý:v�è£çè7²›D¡né“Ù,öKq—^¬—³
+¶DTˆJ½†U‹$•¸˜„+HPˆBUŽÜRu×u7ñÆCˆ‡´8·ßæ©"¬„Õ°–îê¢gaoØ;ˆ€|ž'r´¾®c°;Ç;Œ££˜Å‡¢}*…j¡fi–kˆ~“ÛòZÞIl¢6Ù]ä-ewÁ4>]+Åj±Vâ*ÑKŒd>-ga@,R©´2m¡»Â]á]Éª`_-V¸6Ö{7ñmÞýÞ[QéQ¶3¹löç¢éCNÐ´à{sR®–ò]ù¶§/ø»´ôþ–‹�¼BI±uGÞ°ú€­$fb°ˆ(	õˆ$Xwê*”Ê~Í@¶‹úº’È¯Ó‘wxÐ	[›Íˆ¦ì”éß«
+uSæèf"Ø×ÅôªQzWÖU«]QC}Ô|ýn¶„•«‹ôJ¶\]®?Â¢95 Š&@:í	™ˆn}è @™¹fh³\óµE®etTÓ' h�?É/Æ-šŽaì(fKiíõ®¬8.+šÄéV~Àq§´NZ>Ã±ƒ3ßÓÜ1g&7Xéq¤ZwU–Ñjý…ÓÐXT\Š ÞÄh—Ø¹o€§FhÖ){Ä‘ÄÚá˜ŽøÒ"iu„^9ÈÀ¼ýOu¦NÒSé:äÙ§žzV6Ò}t£4?ßR¹¤ú9yñrÛ_ÙÑ¶OªÖ¬]ÁJåu³ïŸS¶ãÍW?ü½?¡®°×|
+öW'–*„ZÎjÅ2•Ôº´%H
+5ìå³ufîš" ™kSr[+rúÀÇÙÔ~©¦ÈÏpæÀ$%7ÓÇè¨Öí»ùÜõ#ìÙ°Ž|F!nš$Ç
+*è“¦UÞzW£ª+èÃ6:y(æE§NØ‰ÐÁ¢¨mQv&ÁŸÓˆ•2²ç“Ï748´"ªw"˜Ç_o;€IDé�B8íMÂö>Æxí"OYñšÉ€9Y¨í"�°Kh@	§Šî?;ºÎÀ0ìvÂ°b‡ÞÑuQö¨{ÔM¹Mæ•Æ«f ìx[(X4ëÊ†³‘ª04Ÿ	Z-lô…-Ç°câP'&Þ Ý“µ;ŒbZÌJ¡˜‹éZ…Qiì7KQ\>M�³Únd[—²ƒm3xñÎÖ�7ì„ŒÎür
+Æ+$'Šo Þ`ƒÐÖzëé&ˆAŽÆ†›ch’“Tææ^É‰š~’]á†ÌÉ£i'GBáÂ3õõ^\r¼�´_òbÛÌŽvîÄ	^f·ÿ³ygÉ4:„j¸™&CIÊx ÚÐ"”±Ao°†	SQnWí�à”Q0Â¯‰Oê¦K§öÎÐQ	.1q€SDÄ7]#GLSÜ�i‘oü­ö¼1nÌˆf®J�-5�j2;!ýçý_aƒZ�ëœëñ<¤wÕ¯å×èø-ê$½TŸOóùêú:¾\ßÌ·ñMêcú#úº‹ïçÏ©Ïêµz¢\`,2µEÈodAW‘áên„=‹ÐOôQmœÎñŒ„ab¨k”ay&“‰t2›·`Þ3óž‰®ÉF‘g¶g!­ð<A7ª{èvµÎó¾çSO»'Ûžnc6Ø:¸ËKä/éî3ò�<t†¾$ï?C³h/nû´í-Z/G°Q,ZÎ¡ë;æÝø:w¢È +–Vûíéò€_×�¼‹8Ï`Óž.F &"1Çƒ‘ˆ…RBƒCw„ö‡„cW0†#ºØó`tƒ\·eË:ÙŸ¾w™RÙ~YÙmï?Vµò±_|üÉçm;;æ’ò°}Yd%«÷”Ù†Pˆ ��	”Êy_Ñ]� {A‡Ò
+:”Æ¿¶bzŠaczN_Ö_Á†«w³Rµ’©
+u)!¯£#•[è$e½[Y¤¬ +Õt‹²Íð;>dwªÕ~VÓ$/¶ÍB”¾œÂ?kéÁ?»œ‚r²çâÎˆ‹Î\Cº¥THµûQ{®!Î—q!¬Ó½+s4­ƒJá632ëæl!ó¬l£pö¬-‘³ÊUò0ÆÄ*ºHÜ(ëå—ò/²žŽ ñ4�ŽØ.o•[å6y+ÝN§ãúœ3wßŠ:;ïèl£ÕLgŽ˜2aï ¹•f'3Z¡-@…©ˆ ‰ÄR]ÎŒµ3£€²û™°Ht[„ƒ2ÌÔYfÃææÂÒÆ²±b¬6ƒýŠm`þh)zWšýh°ô»èLXeú6Ýƒâ'ò#Üò3t+}âLÛÅãâtÛVÚúm[;ÉÓ²Ñø~p¸öd+Qø©[Û¥Ð*²É«4ê,J%ªKhŸqcÐþ ¤�ÿ‘ãx¯pgJ©)à„=Íè¿�‹'9ôe+TªÙŸš’hdÂ==?ÏÎ3ÙuwÞD³åïêêö½¦7Í¼s}k6ü~ý˜W÷`¿jP¶£PÏ‰d‹•Ÿ ±‰FÄžn/ô?mnôÔå¤–¿Î¨žã%ÉîbA'ÚÆ› ƒ7Á˜æ7ß4;d~éêÐ1M­Ü	|¢˜¨.æ‹Åü„ª8•Çãy‚H|€ÌWæÅÏMx q9Y·<~yÂòÄ�dg‚‰Î°¿/éw½z2‘Û±]!t5{«õÆ¹t]Þ´›ž_yÇ‡ŸšôWzkœ¼´{÷îôÑ÷n¹ ¦ð†×äþõíÛž+K’‹Ì§!G�âÌ§%’ë¬„Nî\ï[›ðZ\c’Ãœ‡#‡¾*RøÏ�ë¤Ï–++þœÌ®
+ôª “�Q„fwÆ6÷Ç¨1 ¾þ
+ƒnÛwUÈ(ÙýÏï�þÂþmÇþù#ýëŒcõÞµô5hLÂ6Ü‰fW±ûÎþ5ýKÿ2®dÔþ'”.fW˜=ëßÉ÷w¶íSôÝWq{ú·Î`F:çë× í$‘+LD­†„j-ð´¹/Tí}T[›ÌH¢Ù‡çÅÆþd.Îµ6]™·—§.ØS¢fj~ª©ðÎ™zsõ>G¾Ìóä_jå3r]CoŒª³ËZ×ÈòkE¿Üyš>º£­bÜº™ÞKï£›GûÃÅò·ò÷òù[çsq{�,u¾³¤ÐŠ2Q«EYæFö_Ð1}ÿ“o®ç"üÒÁ^çÛ«ÇòyŠ=ë=Û<Î·W¿!ÑùG��üâ¦Á+ï§[6Èo/í®yÛ‘Ë”K¶gb®­1Ó ¢Ú»ÖE–´D½?6y}àÇ&mÇé ÒÜŽ/´èÒ)Që1™»µ+3ÕH=p|ß;oï;.?EÜüR~ŠÉõ¼‹~xÖ´Þ&ÏÊ�hwÚÅîCç·5…¼beb~¡Ì.@±wð>"(%…Àé~b@#BPµóûÙÏf‘fætÝa8.¦ÀRxÐU¦q;îY<�ÝIWÚ•eñ,‘¡„µþ$�æ±A|�è§Œ CéP6’�ÃŒ÷J)»›ß-#ßšÏñEbžR©=N6)Yèô©FÅFµþ�ž¡ú íÆ¨þUK�ŽïÅéNÍ²ß‹ùŽ:bgî©¦H"j*öW*N?
+SÚÊXQ[Ý1û+ñˆÝmýl™MD>–�ù™›þ¹ô„—ž€\z‚Í¥'üoqé7þ—Ž¤h¦�–{eo7‹£v>=ºÎÓ‘ÃuZÅÿ1§V»�cG‹4=_ÉFŠaÈ¶oe·Š	z‘~»O”ê‹�q/BÆ]Å6³ÇÅF½‘5Šß²#ð¾HÌ
+7„®.Ü¹C,¢Q›	Z‚+h„ÜöÂt–	©<C¤)ij†–‰ì;ÕHw@_ÞW+°97Ã¸Å;f¶† ßbØ|{"fwY+nVnV‹´q®ñúãNRBg°Y0ƒÏ³”Yê}®iÆ]îÙÞyd]Ä–ÂB¾T,V*”Åj…º9g…«\Ÿo,uW±Uù7ÙD7²ð$BØ_&7kVv�{›wÙA·³í°‡ï»”]êm»{¿÷7ìEx�¿*ê]ox›Ø;p‚‹îž@íM7húÄú¿|yæ/_ÖË�ÏüýÛ3¼¸µfÙår-Ô´Îr¼ÛöT8álî“ÑÓ€xIi§ãè4º�>Hc‡ÙÙp×pNx@xojZ{»ýRKo¦ÅxiÇý(¼_påþÏ/Û8K·Ð'1¹ØJk;ÖÃ¸¾GßÃûQÿñmâô±Û¼¯!‚ëo8f)=%)éépôDÒ…dû[�qD%½Ho’€g]¯zW8²ˆ!’JBÎßq‚ˆ{ö‡’‰&>Ò�d‘�2òàÕ’FbQÿù—…æ“zr×·Ènò$Ý�g¥xy^©eÈ
+2¯¼C�cºÓ¯í É‡ød9»9¡£H^%äŒ`äOb4H�]>†ä7óz~žŸ$ýø\~’ó¹4žÅ,ð. ¦¦�zú)™KÁW��|÷’Oá$ì&_b+ë?NÖ“í¤û¤³I+g7ã•#â$Ù‚ël¼­ôCìÝ!ú9MÎF�­ô4Žë8ùž<ãYW+ÅþÁºNâû[È\d_§©N$ë�×°÷ØÖtg›½Äig½ˆ^VNÆ“íJ½TÓ±[b;è;´YÙ@jÉ‡pÌ��é
+žÎwòd}DPLÖcÝ[ìw”RŠÜYËíÚÙ^Lw“¯x±:ë~×¶y�ÝŒ#*%�X(~Ó@ºVcOí»Iä¤:ŠgãûXƒºGMÈlÈ'³ð¨œì#H/¨!ë±&g¼J?ñ=¾ù$ÿÇ¼ž®cß““0½¢”_@Y£ÃØYø+j$d�žaËYRg��~orj¯žÿrö«á:RTçY®oo/š„Ùóä:‘XZÏHÿìçn~Ö«çè¢Iáº¶¡C:jZ<¯�›„‡ö^ÆëC‡8÷ìFëDþF×…ïœ~Øÿpú€‡ý3ô"²ñ‹ÛÃE[îðúŽ¤hŽŸì?¨kçþµîóÜïš@l|‰¼álÕ{e!žÏÿñQËXÏý×\®A-e·‘£J9Êç‘£Â‹{ÒÞ,‚¤ŠÑÞ"¿X�×kÈ\4í£ü<)²ÒÑ²¿$sÔãä+ oñR2‡­A€
+�C¼™Ì±÷XÇ!ÞH®uî÷ ³Õ¯Èå<ÖµKùFáý<2	Ÿ›ƒÏäâõVìË�hŸ_´·²ß“l|®Æ¾o×¥ä‘¹ì¶öñ19`÷‹oÁg×Øy„³Á²íÆR„¥ËYÜ)´¼Ç-û?@Xš1ï�’y Ë(.Ü»b±à³:"±Þ)Æ „ZÌëÜ«P~aB¼øž‘Ý�ç¬/
+ë‹ºˆöTŒåw„„Ð:£ûSOHl,FP¾‡�ø,9°ÎÄ4gôë¤½&±Ô’R‰å”ý?JG;×ÀxŒ
+3åílm¶µÉC,÷¼žUZí—%´áŸðC.ü£¾÷Âw.IøïøÖ¯�‹ðÍÃ×‹o$\¨�¯k ¹þÖÿCÂWà¯…p^Â_ráËsãÄ—5p<7¾ø<[|ÑŸgÃgþ,áÓ\ø¯ |Rg%|€?-…3¯Â%|„�´NŸ.N/…SÃáÃÄ‡>H€ßKø�„÷%üVÂÉ8q<Yœ�p<ŽåÂQ	‡W˜âp"¼MÞ‘ð¶„·$¼)á	¯KxMB£„W%2¡ae†h�Pÿ
+æ^yyªxåUx¥’¿ü›ñòT«^¶øo2à „—jà€„%ÔIØ/a_	¼à…½{2ÄÞØ³; ödÀî ìÂNïj��ž—°CÂsØ.áÙg¼âÙ\xÆO—@->R[Û$l}Ê-¶JxÊO>'ž,�'¶øÅq°Å›ux\Â¦�Ø$¡ÆÕøRulÜà»Á/<Ö�>òªxTÂ#ë§ŠG^…G*ùú_gˆõSa½Å�ë$¬]Ó[¬•°¦7<ŒÃ|øzX½Ê«ƒ°Ê€*¼PU+QR+3`…	¿’ðÐrS<$a¹	Ë$TJ¨�`µ?¸t©xPÂÒ¥°¤ÊÇ‡Dy,–°HÂB/,pÃ|æIx æ¶Àý-0§Ê$Ì–pŸ„{Rá—f™…bÖ8¸[ÂÌ¥pž”J˜!¡DÂ�¦K˜6 Š[àv7L•p«„)&OÒÅä˜¤Ã-Ñqâ–\˜(a¶<¡Æ‡`õ‹q±psÆŽŠc%ð	cnò‹1nòÃ�Fã�ÑF�ô‹QQ02É#Fúa„†KVCk`ˆ„X/qC¾
+×�KÂ`	×]×áÚA>qm ôˆAV»z`€„	ýûEÿè××/ú¡o¾!úú!ß€>É�ç�Ük‘+ár²‘ã�lz÷r‰Þ~èå‚ž¹Ð£{†èQÝ³¢{d [f†èv=df@×CtõA†]$¤KHóA*Ž35 áHi�dBr	$y %˜(!¡â!Oâ$Ä–@J*FB4¾!	A	Qø@@";ì%ÌBð/_	x%xÜÑÂ#Á�O»£Á� ûÁ%AÃÇ4	j”d�~ÁÑB€WAbôòÖ¨ˆZOKV¬£=þ_XÈÿíüÇ%éÑ"
+endstream
 endobj
-13 0 obj
-<<
-/Type /Font
-/Subtype /CIDFontType2
-/BaseFont /KBXRUU+DejaVuSans
-/CIDSystemInfo <<
-/Registry (Adobe)
-/Ordering (Identity)
-/Supplement 0
->>
-/FontDescriptor 15 0 R
-/W [ 0 [ 600 294 770 557 631 500 698 634 610 787 748 988 684 610 862 575 615 686 317 277 634 633 352 611 411 549 634 591 633 634 612 520 603 694 591 837 636 392 277 634 974 774 294 731 751 684 817 633]]
->>
+8 0 obj
+   8545
 endobj
-14 0 obj
-<<
-/Length 16 0 R
-/Filter /FlateDecode
+9 0 obj
+<< /Length 10 0 R
+   /Filter /FlateDecode
 >>
 stream
-xœ]“Ájã0@ïþ
-»‡bK‰¥‚ai/9ìniv?À–äÔÐØFqùûuô†jHàyf¤y–¦|>¼ÆaQåkšü1.ªÆ�âeº&UOÃXh£Âà¡üïÏí\”kññvYâù0öS±ß«òm^–tS?ÃÔÅ…Rªü“BLÃxRÿž�¼:^çù#žã¸¨ªhb¿.÷«�·ç¨Ê\üxk|Xn�kÙWÆßÛ•É¬iÉO!^æÖÇÔŽ§Xì«õiÔ¾_Ÿ¦ˆcøß:ÊºÞ¿·)§ë5½ª¶OM&m¡ä¡-TCu¦º‡,±äˆ	í Yó‰L©k¡ud:ÈÓP &}Fbê!›IW™,}jñ3~¦‚ð³øiü,}jü,�iü¬ì€ŸÅAãçdü,î?+1ü?'}âç¤3ü,î?Çš¿šLƒ_Í?·ƒð3„ßF2ñsØñ£3ƒŸcwƒŸå[9?ÎÈÈùµ�œFFÎOz‘óãüœ¬‚ŸÝå++wó~yï“ö9þšÒ:yó4Üç`ãçÄÎÓ|¯Ê¿ÿâ“ñ"
+xœ]“Anã0E÷>…–í¢°cSR0í&‹vŠfæ ŽDg4²¡8‹Ü~Dþ¢ºˆõ-“Ÿ�
+U?íŸ÷iZMý–çpàÕŒSŠ™/ó56G>M©Ú´&Naý|Óg8KU—äÃí²òyŸÆ¹ê{S¿—�—5ßÌÝcœ�|_cêß9ržÒÉÜý}:`ëp]–>sZMSív&òXì^†åu8³©5ùaË÷i½=”´ïˆ?·…M«ï …9òeç!�¸ê›fgúqÜUœâ�o´EÊqÿ†\õô«„6MYŠ&h ƒhm‹¶£ê²ÝAw¢‘k5wƒø�ì·Øoeñ$ñ´…Þíï$Þ£–—Zž^<ê:©ë"t~'üþNüÛFuYÊ>j9­'þŽ¡Y48�pzxzõÄ989¯ýzôå¥ð�ð|H|:ôÕi_Ø÷ê?@â��ôèÁé…Ó‚ß
+?�“„“p¤çN«œ>Nê¢V§µÀà•ž^=ÁOÊ‹ó±ú_ÃÓŠ'A“h�Ü²È€}N’ŒšÜ‰¯×œËøêÅÑ¹•‰�Ý­e^$Kÿ7à
 endstream
 endobj
-15 0 obj
-<<
-/Type /FontDescriptor
-/FontName /KBXRUU+DejaVuSans
-/FontFamily (DejaVu Sans)
-/Flags 4
-/FontBBox [ -1020 -415 1680 1166]
-/ItalicAngle 0
-/Ascent 928
-/Descent -235
-/CapHeight 1166
-/StemV 80
-/StemH 80
-/FontFile2 17 0 R
->>
+10 0 obj
+   442
 endobj
-16 0 obj
-425
+11 0 obj
+<< /Type /FontDescriptor
+   /FontName /IGBVUZ+DejaVuSans
+   /FontFamily (DejaVu Sans)
+   /Flags 32
+   /FontBBox [ -1020 -415 1680 1166 ]
+   /ItalicAngle 0
+   /Ascent 928
+   /Descent -235
+   /CapHeight 1166
+   /StemV 80
+   /StemH 80
+   /FontFile2 7 0 R
+>>
+endobj
+5 0 obj
+<< /Type /Font
+   /Subtype /TrueType
+   /BaseFont /IGBVUZ+DejaVuSans
+   /FirstChar 32
+   /LastChar 122
+   /FontDescriptor 11 0 R
+   /Encoding /WinAnsiEncoding
+   /Widths [ 317 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 636 636 0 0 0 0 0 0 0 0 0 0 0 0 0 0 684 686 698 770 631 575 774 751 294 294 0 557 862 748 787 603 0 694 634 610 731 684 988 0 610 0 0 0 0 0 500 0 612 634 549 634 615 352 0 633 277 0 0 277 974 633 611 634 634 411 520 392 633 0 817 591 591 524 ]
+    /ToUnicode 9 0 R
+>>
+endobj
+1 0 obj
+<< /Type /Pages
+   /Kids [ 6 0 R ]
+   /Count 1
+>>
 endobj
-17 0 obj
-<<
-/Length 18 0 R
-/Filter /FlateDecode
-/Length1 11376
+12 0 obj
+<< /Creator (cairo 1.12.14 (http://cairographics.org))
+   /Producer (cairo 1.12.14 (http://cairographics.org))
 >>
-stream
-xœÕzy|UÅù÷Ì<3g»ë¹¹7!{B6Â–4!@ áÙQdP4@ˆHU‚ÈhE…„ETDˆ)&÷²ÕVÀJÕŸUAômDjÑÚ�LÞçœ› ö×¾Ë_ïçÍeÎ2çœ™gžõû<¡„ƒT IÓï›ZÊ–ÿ=›�äìÝ6}þƒIäžø|B:ßA•%¥wß7§×üY„¤â=Ùs÷½‹J¶é�þ¯÷â7þ™3¦_9ù^!iöõž‰î:eÞ[xŸ:ó¾6}õ.Þãý›÷Îž>•°óÝ	IOÅûÆû¦.,åO*sðþk¼O*}`Fiõox™�ã‰™„‘YÍKÄN¤V%1–›_!Êª‰rÆIVãé¦_ÿé¦ÓMÙf²™–l&—pÒ2b[ÎËjÕûÓ÷(™„’£¸–âŽÑóò"£q„sË¨Zÿ¸‰õ8—ÕwŽ“Õ”M-O¶°D¡(ëÅv¡L‰È5SŽ;&Î4w#HŽ#jq�˜¤§"Uú2Zå×˜ß "Ú“Câtð·4]n2óñÏòrSöþ¢J§P37‰˜~’œ–ìœ3)Ýp™æÑDù¹<.èvºŸVË™²PNYWÐN´'íN£vÉM²BþZV#™Î:ø,œ_ {Ý¬Š,ã4ú®à¤ö
-Î5e[z¶Z¨V@çÔ&?9”|ôûSË]¸†35íc¬Á1\ö
-”*n£UñAu�3n,çtc£M>Òï¿˜½?Ñƒ+ˆÀ¡Ìövj[cØ‘Ö|öSË@q¦F­iý²Æ¦±­IÆó Ü‹¼öýŽ<O	ã~{,%çñà•�äÞõë‰³ž¹m_Šq‰D“ÞVŒç)ï>£Ê¤O‘}¼*êQsmŒí!ÙAŒM�-ès—z~¼˜}À›Ë�«¡ž4%Ì×œÞ}BÞ«7‘"£äÂò6"/Q?%Ë/”Ìúö7ò¹˜®¤cW~+¦�¹ëNyD~$ÏÊ#wÞujøpäÿÝt&Ý>Ì¡«²íKþ4Ò•A~mð¸™×Å4�©KLL(0\	‰<DIè©àÆNU&¯"Ó�à.	†+1V%�c£½=Ôè`ç.þO›ZšÎ™�°>à
-Î9ð6£ò³G��¨ú½ßâeûiRçý>TŒ)3³2™	áõuVBÁÈDš@CAžÜ9=#/�ææôÎë•ž…:’×+57'’Ÿ{â®g_^°kñ’ŸÊ³¾«(kzà…†Ê­e_£Q?Üóg±óÝ>½+æOŸ‘ÝíìÁ³ÉÎúÃ�¡«~}ÿ’ÄN=ÞÜsø\º-»fÔ�oP7T2Òò*a³P',¡ùOŸk9‡*q¹)'›Žª5ÆM|ÍÀBfiDk{³¯Ù§ï$+‚è‰ÄOý,Qõë–^ªo×õ)`ëLŠ™¬ðïZ/o½ˆêÒ|F8ödËÿ,òÙE¢HŠ¡TH•ûÑÀÚNz´/¢CþN(ú–vÑ£"ÒÎ¶tssìcFXÒÎ2>‘­>ù„RÙö	íGÊUò°|WVÒEâfY'ÏË¯dNch,¾SÞ.·Éíòvº“NÃß³¶%rqí:Yd%¨&e”™Šª¨È‹šP¨ÊâxoÄpˆ2Ð”“ß.Hþ­ÝP„‰.¡•Ý›õU‡³aê=¬D­`ªBu%Dc”¡t„r�¨Ì ÷(‹”ôa¥ŠnU¶»üSšº	)G‘‰Õ�òRë¬FqæJ"ÿ¼¹ÿüJ"Ò9˜uÒé¦eÖ£ÝÐyŒ¡CŒá2Xe.—¡˜ª¦
-“MS™	Ì�o›„¸Á@Áõ¸4·ËÐ5Ep`Ô¥�ÿô‰¨öõäth¦ÀiíM\;‡/q�Äk¯ó{…)‚QŒ€ÑE¤IÆ@6Pô2²�›Ù-¢À°ŒIlû•¸Û(2ÊX9["ÊE…QÍªD¼Jt¦ú/�.9ÌQ—T�èÜ0ÜÄ!Ò¢Ý~oOIJ’š¤¥è©Fš+É›äÀúAÏÙZo=ß5È�íJ†Ò‘ÌâCÐ… à
-4K³ôÁÆ-nËky'²	Ú$w¡·„ÝSù4Q¤©EZ±^l»�ù´Œ-„üA±HY¤.ÐJµ…îrw¹w%«„U|µX¡?ìZïÝÄ·{_ôÞnK*W§ö?š¢Ó”Á'Påò¿´'åj‰z÷¶D©øE»5wþæKÄÖw¿ÓPv¹õ¶u#1)á‚3SNMb2`¨¦àŠÝ©›`höƒj…eºÐ5U±…Fta¸ü§ÃR;wº)pMjâzA…ewUhIn[h>êc>Õ§ùÈD2Ÿ”’µDW©ÆÐy$�fèDVèF�ÈÒùl	<À¨µJºŠU¸7³-PÍ£�	:M¶9 É�ÂäE–&ËÎ³üVµÞµêŒð¶FÃ¾æn´\.sâBú–NìÜhuÓY7eÂ>C¹Û
-ªØÆ¦0•[½Žª;^'àDÒœ«•¶öŠdy,›e£Fe³„¥�acÄmûÛÀü‘4�tš	}h_°\,„Rc»áÁµ€#MôSü,ÝF?Ûzé¸8Óº••´|�QîéðJ¢m{ä«ØFf¯¡ÝÈÐQˆ†^` ËÐl§áBi¡¨„¡Äñ�zOØs„eÖØ”cþ{SÃE•:¶5léÌ± a¤³t5IMGë¥æ÷°%¬L]dT°åêrãÉ©"h,¤Ðî�¡uÑ{Ñ€:¯ÏÐféóµEˆUÖA}‚Ž§AáájiŠãlzÐ¥´œöxW–—åèqZ4ø	õ6±…pÒüùUì‘âøÇL+ÐŽøš h0Â !ylÈàs]RŽÂäÖRVØZ{ÌFÃkZûØö0ãl9/#AKJ­T¢úJm•=OE½›¾Ú©>Pç^bZH#£XÀ7$Î�W�f M›Îù/âïòEìÈ¶2Å—ÆïˆÿCü¥x1ˆ¢ƒØ Ð XÑ]ÍÒ²ôîÆl2›Îf³C³cõ)slì�ìÒk°‹êÄ[•—·ìwŸ|eÖ‘iÓÿð+yY¡™-_PµŽ=»jk½—Ý9ùõ#½zíëÚ�ö¥� 7ÉO7Ø·� ê±ùÔÔŽ“ÈMVJ4©2ôª "Eã…DÓ¥±ˆèDA¼q‘":®§Nâ<Ùf^¢XÔ‡0lt˜˜�\ìì@Çd'Ü§\½HC€
-*ª	R’é:ø™'Ÿ|F6Ðn}t£t1~¡¹bIÕ³òÒ•Ö¯ÙÑÖO+×¬]ÁJäÀÙÌ)ÝõæK«Ÿ&ßüÞŸQ®o¡p)A¤¼ó+d£ŠØ8Œ‡-�¿—ŠK<üV]�ügS‡ü&ã·~GúZÑ1õÄ¬ÚZoÝQœhl˜p‰w„–“c�yîrc“¿ñböÁ¢„Š„	à c3%eÐ™92ˆ¤ÁÈ0¾AIÀÓuuý^Zr¼�´_òRë‘ç{l÷îÇ{²;ÿÙ´»x*L5üž*CÇ/\8Ž×tePŒz�¸2t^ªTzÍ:wƒ�æJF{tÍ54hsýr“ã>‘(3€Æx (ô~ÈÆ•hÎü!¼È¤6Æ*®[²¤jo}}ÁËóÞ:Ìv¶ÞÁ¶mßöúÎÖJ^´oFñw8o2å'äG™dÅ	?ukÏ+´’lò*‹P‰ªÍãsÝ´“ÃN>\vò1ªÖë\#Œš4 ±e@ccÀQƒs¨þ‹9x“MZ¡ÂÐŽ�	‘¬xU)y¹y½zç²Ÿj§ßB³äëkk÷½¦·Îœ¾¾%þ¸~ô«{Úå4ùaã¬‘ˆ³ê¤Þ]gã¬€oBC:9ºŠ³¬”AÑe¤L)WËµr½Ü(w•¹Ë=åÞr_¹¿Ü,ìˆ¾m"—d–U†ÊR€ÆænÜ»§jÃÞ½.Ñ€¼xéoò;jÂgŽ½ðõ{G¾yB¾'›ä·hTùh;AÚ×ñ/(3‰4š$Û
-*ˆILTzëôÕP0<ÅÄ
-=¦Í´ÿÓ'lƒ?P±=Â–V$_UŒLÑý‰çêëûZÑ3Ìã¯·îGA•LÂ™yp¾h2ÈŠ%+é*î]éYeÔ›¼>ªÎN>2<8“�sÉ‡_^¾èÿÙãòÅúc+b‰Ý+èu ½Ã›tnOBàÂè'_>|øåÂ'Gßòì”Vù!zZeüÓ<oo·n_ž<ùe·n5©©t õÒ í—â`„C(«�¨C®°MA½Û§×w
-­õÕÅnŠ&�À°NnE‹jÛTNX}Ã6uøg6V^‡"j³	b)˜;„�Gp­è9»µþ¶ßKe'H[Û‰²—úÕ×³¬vb·O•ò'ü5L-Þ�ÔPrƒœ€¾ºˆøèë&UcºI|†é2ñyMñyL·‡Ø'¯�¨ÛDZàqé~â•ðš×Õà÷zÜ†ŽèSóqŸËï?m›À¨ZmÜí×ì xÕ�0é?—cgÓf~à?ƒRñmTÎ¤ÎÔº¤¡):x"�(�ß“âÉóŒ0~iŒöLÖ'³ŒJO…gƒ'€8UW\Âíòº|Q4ÄüÜ/¢Œ +èŽñÆø2H*MeI<IdbM3R]©îOWoW_’Ù‡äQD<[ô5z»z»ûzò½ù¾lóFbQÄ`!j±Kµ´}ˆ1Ì3Â;Âg™ãÈ:†�‡B^(&(ãÕ	ÚmúmÆx×x÷$ï$_¡YBKØLãï=¾"³L[è]è[MÖW¸V¸W{V{Wû¶èU®*÷VïVßN×N÷ï_­ù¾ù™ÙfÎÀ8.¼´ÍC)¢eFo\²áÞ›Çå&ËþïÐ;é�ïÌ|oñÖá+ÇñÑ-á^âèØ>Ô±‰Ž’þVÜ5¹Ö Á:7úÇ k4zÊ¡!Û1ä‡íEÑá&g‡Þ´Ýdºî°¸êÃÓé>ÛM¾PWwÓKóÞz�¾O±]­S·o}'+»²coÉôK°ÛÑsÔ§�Hƒ;Z±±£Î»–¾ñ7†9ä:M÷Ÿ;×>,=¬ëIàtJÚUËoWóŸ©ÿ\ôWµœõíÐýÝ­û£æ:=§í �Ê�G=�>ƒ¤‘+#:Ñ¥{ÉóQJ½×LZ™x(®>ÝD”›DA';ž$‚’Ž´ž8�ä†³ÃÆs—[.Û¦é¿Ø®ÃÖýÙñÙ	Ù‰ÙIÙÉÙ�eXñV‚•h%YÉVçÂøÂ„ÂÄÂ¤ÂäÂÎ…¥+â+*+“*“Wt~$cGÆ¥Œ„ŽO;>êø (¡(±(©(¹4¡4±4©4¹"¡"±"©"¹Ó”ë¼ô´O‡�ì ‘Ž°jžã2ÙëŸí]6{K}]Ý †U{�·^¡ì¹MEÇÍx}òß/±Ü’²isÏÈ¼¹uYMÉÔ·ž~íÍ@ùšž=k22Zl_:}éäU¹Ð^/Û^.{­\‚>v5®­îdûØ´ºkõ’[c5¯ª;ébûøÓ?«— ÓýÁvº�Ÿ×K:Ê%$ÃÆÉ÷Åq®8wOyÝ]ÝÝýõþFW·+‰$¡5w1º¸ºFd³B]#»$tIÌLÊLNÍXi¬t­t¯ôìhÀ˜b(.pƒ¼à?DCÄB�×3²2eÞ•YžY‘ùHæŽÌK™�ÐìæükaFIùï…™ÞÈVX3z÷äÕ«§mÔøì?>šüÎ½%‡§._;c�µgó_~_r€Ú×¥Ë¸qÖˆdo×-«Ÿ8˜’òz^Þ¤1£
-Ó|©UË·íMë¢�)×9˜2‚ô³:Ñ*¿]zø�q»ò8È´K�Á0Œ§—í¢(ªPbhPè®Ð‹!á ­«ø‘#rì†0‡n�ë¶n]'ûÒ÷®ØÕ“+ò˜Èj}ÿ±Ê•�íúòãO¿hÝÝ^÷‡óG ­¾dåa
-†bar
-'!à¡*=XåYæâBqm¤WÑÑÜ4âÜÜ±b”.Rg†Aî ›Ä@~àg®]´ËÕJpÒÔÅTA&¦*jPˆY$Ë4’FÓX:d(éjº–®'%ô¦½ÙP:”Íóø<± b•²JÝ¬lVQX( ¨ˆèIíõšÉI6t¾Ê
-XwcÙÀ“gß¹fá'Çè{”´<ÔºZ>VUõkˆ|ä×r&-¯žÖºZœùð£u‡Ø/[/V>ôÐ
-[çû£La<tÑ›¬¡Â.qäˆjŸ0›gLÆ¨ËÄ7SÇ•ØÁ3FÝÄ|sDN¹FÞ¬ýŠiŠ»#$úÆÝn×¦ñ`:ÁQ¹.8*Np<Ýhv”kþSµæ_SJjm687bxÈH7nà¿0ÆóÛÔ‰F‰1Ÿ.æóÕ�u|¹±…oç›ÔÇŒGŒ]ôyþ"V}ÆØaÄÀ…ÐW„DH�qeBºHÓ»º’<ýh>ô½T»“íCÅ}¤ËòL"è$6	nÃ˜7	cÞ}’«Ð3Û³�–{§Õ=t§Zëyßó™§Í“e—˜]Hqj*¼XþŠÖœ•‡ä¡³ôeùÀYšI3yQëg­oÑ:9œ�d‘r]oËà,êåÇ‚#zH±L¢Ó'T,ÄI”¡„4·ÿ“–-l„tÏ�ÙÔl¯Dæ%›°�õh=µ»õë!xë©û¢†õÀ1«Q®#Å%Ôô­èõcb¡S
-”Øå˜ÿSæFÏŽà£œì`Äo0jÄEùA‰·á|iË,èÈÂrjzóM³½~a¯¯+Ñ8zN­œñ|‚˜ .æ‹ÅüØÊh•Ícx¬ˆ{�ÌWæÅÌ�}0n9Y½<fyìò¸Ýdw¬‰ìJÃ•äõ&}Òë�8·sB…ÐÕì­–›çÒu¹Soynå]§.>=ñkr{´¼\SS³€>Úï¾M#TÜtâ9_¿}Ç³¥ñò¯&¶“òïÅ6´sDž^¡ùàybÒ­Òp¡7Çhìxí¼ÉIRrÚw8œB¦(û_…“Udr0²¿�§¤çÙŠIÐ2¹bÔÜ×^;óte¥Ø&ß^ßºcõè­Û?`EëéÀ°�»–‡ª¤›åU^ç/‘&¨ÆÉP§c�Û©ÙµåB½H/ÕE8%Åèo§¥uu¼èÊ%ø�“›"¾˜ìä<¾èÀÑu¾µ±¯E7Ä;(zâéë²Ó|qø_ðÅõ	)½.Q�Âµ¥Ð¬Žœ”Í½–©ö««»Š¦[÷]—¦×üóÇŽ|G�Gú:“ÉVºÐ;ùˆ¯†Ü•ñIPÛíÇÈ§iJ¡©ù
-ã:!äOq\hzxG£`ÚêðÞ�VDvjajiê#©;ð÷Fêg©m©:RîÄöÐõÙìKk3‡¼¹üÅ×ë˜·~WýÖíª¯T»hñX½dþ_ØIîSOØI.Ûöôão<ã$»wO[rmÿfÚJ<É·’ˆˆ¥U[¥ž2÷…ª¼�jk‰3{ñÜNÑ.‚]û:×ÒxuGž¾h«Mšc�
-ïØ¹áQ×ïéðwäA˜'¿Ú!Ÿ–óèzçcT�]Ú²F^”ßböøÕî3ôÑ]­åcÇÓ-ô>z?Ý2|èŸî*’¿—”Èß§9µÇjYâìÿ¹H�ábD­µd™³…|ÞñúÙ^à¹0öpjüÎž ÇòzŠ<ë=Û=Îž _	ƒî¼£ÇN~yË •÷‹3Íä÷—kªßvø²ù’‰ó™Ä²"5fºˆ¨ò®ÕÉ²€gôÅ)o\›Òví›9í;‡˜î'F¬ÇäìÙ®"ìðvÇþãûÞy{ßqù™üJž—Ÿ‰3-ó.�:u	Ö´Ü!?Á³+MíØÏèï¬¹»ÔªØœ,3âD_�vlóµ8V5À.4dï/tvùrÍdÌ›vÑîû¯cÇZ;gZŸ`ÅÍÝì?{ìŽ:¶B^±20Þ)£(ö‰>g&Æ»àôEb«‰Tí¨UÿçBn¡fÇüiºÂ0>LL†¥ð ?S™Æí½“ ‹á1¢+I§é,“gŠ4%IëKr1éÀˆ>Êp2„a#ø1LÁø£”°{ø=b1™Oç³E|‘˜§Th›É&%hr¸zÏF¶>EÏÒ?ÐzDœ¹Å¿iî†ôO DÉÃØî¦µFˆñá=–ñ†ãí=–ñÿG{,oü›=–px7í(°öÁåÄGóè¨Z7¾ài�ÿÚñ½5C­6Á"Y¤èlä#Ø1Ô°ŒÛÙíb¼QhÜÏî%Æ"VÎ‰rQÉ¶°Íb£ÑÀÄïÙx_Ä¦ƒÂ]ÂÐ\:žÜ!‘ÈùX-VºBn}¥°Hæi¢³ÒYMÓ2ôT#Ù•âÎ‡Þ¼·–oïÅ°á0”[¼ =#¬6»ì}˜	ˆ&°B>FÜªÜªjcõq˜O'Åt›3ø,1K™¥Þ¯OuÝíží�GæÑEl),äKÅb¥\Y¬–«µEz¹^fÌw-uW²Ub½wÙD7²ð\Ø¨o‹feU»·{w‘]t'Û	{øñ¼ò¼ºGÛé~Ñû;ö¼Æ_uúÞFöœàÇÄ"gO'–ÚÿhŠ‹¦L¨ûêüÙ¯Î×É�Ïþíû³¼¨¥fÙíÊ¨n™ÕQctj}½~^cÜôïkŒMÉóþ¢pœ¼Þ›ÿ›
-£lÝf—�H	ö‰Ø5û¯á$	ÏìžKYmmxÄl×OÚßPÈ,çœíø&û{no·aœÕˆŽù­‹¸‰‡x‰íÚ$§*"‘$Št"Ñ$†Äb�'	$çIÆx•BR1'NÇl¯É$]I7Ò�ô =íê'Í#uä8þÞ"5ä	ºïJpÖ9Ø³ƒí'+È<ìy‡GˆÒûv!¡§ðÍJrj�ü‘${	9+¹LÇ‘8F>Ò|DÕ„�æø­¼Ž_à'I>—ŸäE|.Í…§Å±[>¼Ëè÷IýŒÌ%‡àÈ…>˜{ÉgpjÈyœ…ãøÇÉz²“”!-A:›”³2v+ö'ÉVüÍÆç'é6z
-©;D"gÈfàl8ÙFÏàºŽ“ÉC0Ž•¹¬é?‚c�Äï·’¹ÈØ3Ô ’uÃ>¤çšæã¡‡8ãü.‘rœyÙ©Ô)A5g±9¶‹¾C›”d9wÀø˜®à)|7NÖ‡9 Ed=Ž½ÕþF)¡˜y8¿2{t¶€Ñò/R§áØïÚ+Â9°[qE%¤ÛÅ�kêOWÀj¤Ô~ONª#y~�#¨KqÕ„Ì†<Ô•Ùø|ÙOz@5Y�#9ëUúˆñË'øç¸æõtû‘œ„Á(ÿ~y�*c#çWÔ°»#Ý“üµ,mDq­5fbÒ{“’{tÿ—Û$¿šTK
-k=‹’êÚÚ
-'"â�T+âj!M«åi)Ÿÿ§‡Ÿ÷è>ªpbRmë�Áí£)Œ}c'â¥}‡ÝØ?d°óÌž´V¤á¿EµIÓg&=ì8¥ßÃþýz„­ƒ�[lütóÌ»|~ ‰šc&ÇŸß¸®ãü�[öyÐÇã­F:ì	�ê}2žÏÿø°yŒç�öþkÙ¨¡%ìrTÉ$Gù<rTxñLÚšD5™+‚¤’ÙÖ¬ÜŒ×-ä¨ú,?öµ(ð½­ØšÈ±”ek�Ä|ò~3GÈ!öG’ÅÏ“90’â%ØÄs¹Ÿís®/�2Þ�Ìæ§pÎõ8Né¯@{Š"Õ�BútŒ¥'‡”\2—ÝÑV->&ûÑ¼ŽÚ4(kÈ{žöuÆ¶ìÆVˆ­Û'HÑƒ¨û÷bÃk>± ºårå=d¾¯¯Â†Ï|ßUÔÞPËÜ½°íE¾á¸ž¯	ñNÄv‰¾oŽÃö!�…„Dì$³8ú!‘›	é‡­”�hœ3¿‹é‹ß�Å1ãp¬¸¨ÎØ¿‘�¤-i³ýÓ©dÃ8ôO3ÑÃÙ»ï[l)ò‹Ä3¯cVÛ	ÍAøgü”ÿ¨†½ðƒ„Ëþžß{áoÕp)¾{øFñ�„‹Õðm545Ã_›áHø¦|] $|•çÏ�ç«á¾xn,|ùE–ø²¾È‚Ï%üEÂg9ð_Aø´>‘ðq þ¼Î¾
-Iø_ÿp)œ9=LœY
-§‡Á©bÅ)	ÄÂ%üAÂû~/ád5œ8ž NH8ž Çrà¨„Ã+Lq8Þ�„F	ïHx[Â[Þ”ð†„×%¼&¡AÂ«™P¿2MÔK¨{ã�„WN¯¼
-¯Tðƒ¿K§XmpÐâ¿Kƒ^®†ý^’P+áE	ûŠá/ìÝ“&öÃžš€Ø“5x‰~¾vKxNÂ.	Ï`§„gžöŠgrài/<U;ð•Õ°]Â¶'Ý˜íÁ“nxâñhñD1<¾Õ/�†­~ØbÀf	›ª=b“„jTáGUÕ°qƒWlì¼ðX3<úÈ«âQ	�¬Ÿ"y©àë›&ÖO�õÿm¬“°vMO±VÂšžð0.óáaõ*—X„U.¨ÄŽÊbX‰œZ™+Lø�„‡–›â!	ËMX&¡BB¹«í×K—Š_KXº–CÙ¸�(KƒÅIXè…n˜oÀ<	6ÃÜfx æ4C©„Ùî—po2üJÂ,³@Ì÷H˜¹îÆ›	3$K˜.aš„©ý ¨îtÃ	·K˜,aÒDCLj†‰Ü-nË�	ÆãÌã`\ÆR¿Û	nÂ˜‘bŒ„BüRÂè[üb´„[üp³„Qød”„‘#übdŒˆ÷ˆ~î�a†VÃ�j,á&ÖCÜÔ¯Â�£À’0HÂÀb`nà7`@�`µù ¿úIÈ—Ð·OPôm†>½ý¢Ozç¹Do?ä¹ Wäz ç.‘#á.ÈÎr‰ld¹ g]ôôCºç@·®i¢[1tÍˆ®i�€.i¢Ë��‘éi.‘îƒ4¤JH‘ÐÙÉ¸Îä $Cb3$àŠ!ÞqÈÁ8	±ÍS Ñx-¡S1D!§¢$DâG‘Ñ’”!!€/$f=„Y þ¥à+¯�;Rx$¸ñmw$¸$~Ð%høš&A‚RŒÙ‰_pÔ€`/HŒZ~Áz õ‘@ëhñŠu´Ûÿäÿ5ÿË¿øÿ	À¶Ô.
-endstream
 endobj
-18 0 obj
-8287
+13 0 obj
+<< /Type /Catalog
+   /Pages 1 0 R
+>>
 endobj
-6 0 obj
-<<
-/Type /Group
-/S /Transparency
-/CS /DeviceRGB
->>endobj
-7 0 obj <<
-/XObject << /Im3 5 0 R >>
-/ProcSet [ /PDF ]
->> endobj
-10 0 obj <<
-/Type /Pages
-/Count 1
-/Kids [8 0 R]
->> endobj
-19 0 obj <<
-/Type /Catalog
-/Pages 10 0 R
->> endobj
-20 0 obj <<
-/Producer (pdfTeX-1.40.10)
-/Creator (TeX)
-/CreationDate (D:20130503000710-04'00')
-/ModDate (D:20130503000710-04'00')
-/Trapped /False
-/PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0)
->> endobj
 xref
-0 21
-0000000001 65535 f 
-0000000002 00000 f 
-0000000003 00000 f 
-0000000004 00000 f 
-0000000000 00000 f 
-0000000305 00000 n 
-0000012116 00000 n 
-0000012181 00000 n 
-0000000179 00000 n 
-0000000018 00000 n 
-0000012246 00000 n 
-0000002298 00000 n 
-0000002427 00000 n 
-0000002573 00000 n 
-0000002959 00000 n 
-0000003460 00000 n 
-0000003697 00000 n 
-0000003717 00000 n 
-0000012095 00000 n 
-0000012304 00000 n 
-0000012355 00000 n 
+0 14
+0000000000 65535 f 
+0000012816 00000 n 
+0000002524 00000 n 
+0000000015 00000 n 
+0000002501 00000 n 
+0000012325 00000 n 
+0000002633 00000 n 
+0000002848 00000 n 
+0000011488 00000 n 
+0000011511 00000 n 
+0000012031 00000 n 
+0000012054 00000 n 
+0000012881 00000 n 
+0000013011 00000 n 
 trailer
-<< /Size 21
-/Root 19 0 R
-/Info 20 0 R
-/ID [<552026DB78C544153E75AB9B07581754> <552026DB78C544153E75AB9B07581754>] >>
+<< /Size 14
+   /Root 13 0 R
+   /Info 12 0 R
+>>
 startxref
-12621
+13064
 %%EOF
diff -Naur ns-3.18.1/src/lte/doc/source/figures/lte-ue-rrc-states.png ns-3.19/src/lte/doc/source/figures/lte-ue-rrc-states.png
--- ns-3.18.1/src/lte/doc/source/figures/lte-ue-rrc-states.png	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/lte-ue-rrc-states.png	2013-12-20 09:44:51.000000000 -0800
@@ -1,123 +1,238 @@
 ‰PNG
 
-   IHDR  t     ‰†Bø   bKGD ÿ ÿ ÿ ½§“    IDATxœìÝ{\õþ?ð÷p]X�‹ ïŠ"¤)™X†EˆZ‚`y7Ä¯™•™™ò;f§›&Š&–žLM05MÄ8yëbi*âÑL¼€y‰‹%ŠÜo{›ßó=ûÝö2;»»‹¾žø`?ó™Ï¼?ŸÙ™}û™�Y†eY    ƒ�µ    €û’K    ’K    �ƒµxäçç[;
-  ÐÃÕÕuêÔ©ÖŽ cpC�åeddÌŸ?ßÚQ  €���åååÖŽ ÃÌ¥uàä `ƒ222ÒÓÓ­@û†ï\   €h�\   €h�\   €h�\   €h�\   €h�\   €h�\   €h�\   €h�\   €h�\   €h�\   €h�\   €h�\   €h�\Ã0Ãè–p$I§N�}ôÑ¹sçæççY]o½„É²lNNN|||@@€“““››[xxøœ9sN�:eÒ†F+<0-7oÞœ={vïÞ½���]]]ÃÃÃçÍ›wæÌÝMˆ§ÑQå7žF´ZÓË²ÙÙÙcÆŒñóósrròóó=zôW_}Å²¬Þhƒ‚‚
-…n¹ ‘ h/X°¸5kÖZ;
-ø?ºÇÏ!“��PUUÅ¿ºÞö[s ÖÖÖÆÅÅmDÈ†F+00-çÎ�óðð0ÚSãäoÄè¸ñ4¢Õšn<uuu£G�Ö»Ê¨Q£êêêôF»yófÝrÓFÚÎÏ ­‡™K ƒ¸ƒD¡PTVVž8qbÁ‚‰$77711‘–—è¶¦EàºS§NýöÛo½¼¼V­ZuõêÕ–––†††K—.mÜ¸1**JÄµÒ‚jjj"""¾ûî»ÊÊÊ–––¢¢¢õë×GFFêV%NþFŒŽ›Þ†”œœ|ðàAOOÏŒŒŒ’’™LVZZºvíZ//¯C‡%''ë]kéÒ¥r¹ÜÔn ´'’NhCøŸ±­Ñ=çÎ�ëÐ¡egg­,¼¿C‡‘‡‡ÇåË—ùk
-ÙP›FëââBDÅÅÅ­ŒAH£„�›�6µýðÃD$•J
-
-´jH¥R":|ø°ÖêaaaD´aÃá½ Ãù õ0s	`‚¤¦¦ÑÎ�;-¶Ñ­[·QjjjHHˆÅ6j///"jjj²v Dm<n™™™D´páÂþýûk-êß¿ÿÂ…Õu4½ýöÛD´lÙ²––ÑC °H.L3nÜ8"ÒºC¥MqwqÛµqñññD4lØ°”””­[·(•JkÓ¦ãvòäI"?~¼Þ¥IIIê 4=÷Üs¡¡¡¥¥¥›6mj‹¨  l’K ÓôìÙ“ˆîÞ½kêŠFïk6äöíÛDÔ£G�¶ÞPë­\¹2>>¾¾¾>333999""ÂÛÛ{ÆŒ7oÞl£8y1uÜLò×_QïÞ½õ.åÊÿüóO­r;;;nòrùòåÍÍÍm €Õ!¹0�J¥²v¶ËÍÍ-77·°°0---11±G�µµµYYY,((°vt6aÂ„	!!!·nÝÚ°aƒµc hH.LÃMÂùúúšº¢Þo=YÑÏÏO½Ý6Ý�XÂÂÂRSSsrrnÜ¸QTTS]]½hÑ¢¶ˆ“§SÇÍ$þþþDtíÚ5½K¹ò€€ ÝEvvvK–,!¢´´´ÆÆÆ¶ˆ Àº�\˜&77—ˆô>[§�:T½Ýv'88xÛ¶mDtüøqoºMÇ�k<''GïR®œ«£kâÄ‰ÁÁÁ·oß^¿~}[Ä `]H.LðÛo¿­X±‚ˆ&Mšd±�¾ðÂD´bÅŠââb‹mTDUUU$ø‰å"jÓqãc™žž^XX¨µ¨°°0==�ˆfÌ˜¡w]{{{nòråÊ•¢ `uH.ŒP*•UUUyyy.|ôÑGkkkGŒ‘˜˜h± âââÆŽ[]]=tèÐ5kÖ\¿~].—755]¹reÓ¦MÃ†³X$F0 --íÔ©SUUU
-…âÎ�;Ü3ç‰hÈ�!¦MÇ-66–»uiøðáüqYY™\.///ÿä“O†ÞÐÐ�””ôÔSOZ}òäÉAAAfÜ Ð˜õtLh<¤×Öè<‡L||¼ÞŸä9¾Z Šþó�m­¡===ýõWËÇ)pÜ´6ÊÓ5­�2räH½-ÇÅÅéýùGÍ’¬¬,žHÀZp~h=Ì\áäääããùÊ+¯äåååææzzzZ8ww÷ƒfgg?ûì³þþþR©´ÿþsæÌÑ}˜¢�?þ­·Þ6l˜···½½½T*Ÿ?þ…hùxÚtÜÜÝÝ:´k×®¸¸8_____ß¸¸¸]»v<xÐÍÍ�õ)S¦z’ @»Æ°ÿ"ddd¤§§———[;  øœŸZ3—     k ð ãÿY›º¶ÐŽB  kÁÌ%    ˆ3— VÖŽ&üÚQ¨  `-˜¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ8X;€TccãÆ�­  üM~~¾µC h÷�\ZGuuõìÙ³­  h´v íÃ²¬µc €v,###==½¼¼ÜÚ�  €MÀw.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.ÀB†a&((H¡Pè–ë–pìíí»ví:fÌ˜¼¼<![aY6'''>>>  ÀÉÉÉÍÍ-<<|Îœ9§N�25T�/…´ÐFZZZRSS{öìéèèh�Í	g´û–‡A€ûÃ²¬µc €v,###==½¼¼ÜhMõçèæÍ›gÎœ©U®y.Òû‰Ë0LvvvRRÏ&êêêžþùo¿ýVïRá§;­�ø_
-i¡�,Y²dÙ²eê—¶s>7Ú}ËŒ��Ã Àý
-3— `iK—.•ËåF«±,Ë²¬B¡øý÷ßY–}ï½÷øW™:uê·ß~ëååµjÕª«W¯¶´´444\ºtiãÆ�QQQ"…oCvîÜID999---ÈQ ÀF`æ ZÅÔ™Ë°°°‹/nØ°aöìÙšåº3—š%·oßö÷÷wrrjii1Ôþ·ß~;jÔ(�S§N…„„˜Û!=ØìÌ¥ƒƒƒR©T©T¶vu3—B`à~…™K ÍöíÛ£££===���ƒ‚‚-ZTSS£Uçí·ß&¢eË–ñ¤‰º¸�až:[·n%¢ÔÔT!™¥�P…»qãFBB‚›››��Ïœ9s…¬Å÷…<¥R¹téÒ=z8;;‡††fffj-%";;;õ·÷d2ÙŠ+àêêêêê:`À€ôôtÍyb®fSSÓÜ¹sýüü¸r…B±víÚÁƒ»¹¹¹ººFGGïÛ·O`¨æuŸˆgÏžíãããîî>nÜ¸›7oÑO?ýÄ0L@@@SS“få–––.]º0óã�?êmMïWõ~_VïvV0:†FØ¨'NL›6­K—.ŽŽŽ;vŒ��ýþûï¹EÂÇÄŒØ
-Å¿þõ¯¡C‡vêÔÉÉÉ)00püøñ‡6€, @+¬Y³&00P¥RMž<Y÷VSSÃÕäJ”Jehh(}òÉ'šåšmj–(Šë×¯?÷ÜsD4oÞ<žHºwïND—/_æXx¨zãÑ}y÷îÝ.]ºh6•˜˜È‚CJJŠV�Ý»w³æºš››‡®[>bÄ™L¦Ù¬æWWY–•Éd±±±º+
-	ÕŒî«ÃP×ätéÒ¥²²’eYî;«V­Ò\åã�?&¢ÈÈHþ6ùù·k´‚ð§5ÂBÖm–a˜ÜÜ\n©Ñ11;6Ý÷Ø FáÝ ­Â%—›6m"¢Î�;ïÞ½ûÎ�;���'OžŒŒŒ$¢ÔÔT®¦úëË/¿$¢ÀÀÀ¦¦&Öpr©ÉÝÝ=55•ûf¡!‰„ˆ¸6y˜ª�—‹-"¢îÝ»=z´®®îÈ‘#ÝºuãÿxC×®]÷íÛWSSSRR2vìX"zì±ÇE’––FDžžž[¶l©¨¨¨¨¨øüóÏ;tè@D+W®Ô\¥sçÎ¨««ã
-W­ZEDnnnk×®---mnn>yòdBB‚�PÍè¾:Ýµ-ZÄ²ì¡C‡ˆ¨S§Nõõõ\ýæææÀÀ@"Ú»w/›ü…üÛ5ZAøŽÓa!�5êÐ¡CÕÕÕ2™¬¬¬lÍš5¤‘L³csuu%¢wß}·¬¬L&“UVVîÛ·/66–'r ~H. U¸ärÈ�!DtìØ1ÍE×®]#¢>}úp/Õ¥J¥’»r½fÍVXrID}ûöÝ±cO$“K“Bò’ëË7ß|£.ùúë¯ù³+á1|ÿý÷ê
-×¯_'"wwwC‘DDDQff¦f³›7o&¢h®¢•¢=ôÐCD´qãF3B5£ûê0t×
-å^<˜ˆÒÒÒ¸—Ü]hh¨J¥âo“¿Ðèvù+ßq<I°¡Ø>üì³Ïúûûk^I—H$ê
-ücbvlÜŒ��}ýõ×7oÞ|õêU£‘ðCr	 ­Â%—Üä‡½½½½½½��÷-@î“ÌÑÑ‘«©ùQº}ûv"òóókhhÐÍ	´JîÝ»÷óÏ?6Œˆ6oÞl(�—ÅMÕèKggg"ªªªÒ˜?»ƒf®¬R©ø#áÒë;wîhn«¢¢‚ˆ\\\4W¹wïžf"ª¨¨0#T3º¯Cw-u.•››KD;v¬««kjjâ¦è²²²Œ¶É_ht»ü„ï8­6ð®]»Ý•¥®Ï?&fÇ–——×£GÍ-ÆÅÅÝ¾}Ûhü †à† Ë²D¤T*¹›—¹©n‘Þ§Mœ8188øöíÛë×¯7Ú¸——×ðáÃ¹‹é+V¬0TmèÐ¡DÄ} ‹j[—/rD¼%ÜËËK`Mk×Ø±c#""*++×®]»qãÆ[·nuëÖMïw
-Õto¾Öºý¥õ„�†ðæ¼ÿþû,Ë¾ôÒKEEEÜÿ(êëëµêð�‰Ù±EEE]½z5//oåÊ•ãÇ�wssûöÛoçÍ›gRü š�\€ÂÂÂˆèôéÓzÿ«[ßÞÞ~É’%D´råJ“6TZZjhÑ/¼@D+V¬(..1T£zöìIDÇ�W—üüóÏü«ˆ'88˜ˆ<¨Y¸ÿ~"êÛ·/ÏŠÜÒÿûßf„jF÷Õt×âZ#"†a¸wÈêÕ«¹ï’¾ùæ›ŽŽŽ<­ùùù‘æ�ÝšíÜ.…6ÚqDÄ]¿NKKæþG¡{S<ÿ˜´&6‡¨¨¨…fggÿöÛoD¤¾QÀzß…  q—Å·lÙBDþþþ›6mºqãFcccsssQQÑÆ�‡ÊÕÔ:ç(Š   ½ç"­’ªªªcÇŽq—Åyäž`¸[^¼½½?úè£k×®Éd²ÆÆÆË—/sQçê˜*ÿK3îh1#!‘p	‡——×Ö­[ïÜ¹sçÎ�ÌÌLOOOÒ¹¡G«ÙÕ«W‘»»ûºuëÊÊÊš››óóó¹zŒ†Ú7ôpÔ "__ßÆÆFžY–}òÉ'‰hìØ±%%%µµµû÷ïïÚµ«Þ3û†³wÏ psÇÂâÅ‹+++«ªªvïÞÍåÊZMñŒ‰Ù±=þøãÛ¶m+--•ËåÜÅWWW!] ÐÉ% ´
-—\²,;wî\}ÿ�ý¿3Ý¶¬¬,­:š5u¹¸¸?~œ'˜ÚÚÚ¸¸8þ0Ì•ÿ¥yÏâ1c¸ŒFÒÜÜüøã�ë6­¾Ñ^o³2™ì©§ž2	¨­yÑ¸qã4WÔ|$gÛ¶mÜ¢¥K—ò´ÆÑš²%�9	ß®Ñ
-æí8žAàþÖ�ÂŸ>}ºÞ¦xÆ¤5o*-/¾ø¢�. è…ä ZE�\²,{øðáñãÇwîÜÙÑÑÑÅÅ%,,ì�7Þ8þ<·T÷ƒM.—÷îÝ[·\ësN"‘Íš5ëÊ•+FãQ©TÙÙÙê»n¥RiÿþýçÌ™“ŸŸ¯YÍ¤Pù_²,{ýúõ±cÇJ¥RooïY³fé½KI—©Ã%$’æææ´´´ˆˆ‰Dâââ±bÅ
-ÍG8
-L&“¥§§s+J¥ÒèèhÍ;¦ùC5£û\…úúú™3gzyyI¥Òøøøë×¯kU;uê¹»»kÞaÃcË–-!!!ŽŽŽ]»v}ï½÷
-…ÞãÙ®�ÀÌØq<ƒÀý­P(ÒÓÓûôéãììÜ«W¯÷Þ{OýEI“ÆÄŒØòóógÎœÙ³gOGGGŸ¨¨¨Ï>ûL¡Pé€^øùG há?ÿ`ª”””ÌÌÌpOâl½ûàw)E Ñá†  °E7oÞ<pà éû™¢ÆÚ¡¿y
-  `1êç.�=º_¿~ÖÆF`L ½@r	  ¶H"‘DGGs¿jŒ	´H. Àæ´Ñ·�6kËß¶´åØ 4á;—     $—     $—     $—     $—     $—     $—     $—     $—     $—     $—     $—     †eYkÇ  íÉ/¿ü£T*¹—*•J¥R988p/†IHHøâ‹/¬   X“ƒµ €vfÐ Annnååå†*Œ3Æ’ñ  €MÁeq 0Ã03fÌpttÔ»T*•ÆÇÇ[8$  °H.ÀdS¦L‘ËåºåŽŽŽIII‰Äò! €�@r	 &			Õ-—Ëå“'O¶|<  `;�\€9^xáÝ+ãÞÞÞ111V‰  l’K 0Ç¤I“
-…f‰““ÓäÉ“ííí­  Ø$— `ŽnÝºEFF2£.‘Éd“&M²bH  `�\€™¦OŸ®9OÙ¹sç¡C‡Z1  °H.ÀLÏ?ÿ¼úWœœœ¦OŸ®9‘	  &$— `&__ß#Fp“—¸&  $— `¾iÓ¦q“—}ûö·v8  `}H.À|ñññÜÌå”)S¬  Øü¶¸äçç[;
- q„……�?ÞÎÎnãÆ�ÖŽ@®®®S§Nµv í£þ>>XLFFÆüùó­  èX^^ní( Ú1Ì\ZN^pßhiiÙ½{÷´iÓ¬€222ÒÓÓ­@û†ï\@«8;;ã"  ¨!¹€ÖÂã- @É%    ˆÉ%    ˆÉ%    ˆÉ%    ˆÉ%    ˆÉ%    ˆÉ%    ˆÉ%    ˆÉ%    ˆÉ%    ˆÉ%    ˆÉ%Ü·†ÑúÍkFƒD"éÔ©Ó£�>:wîÜüü|!«ë­ —�ðzöìÉ0Ìùóç5ãââ¸FŒ¡Y~îÜ9†azöì©ÕHTTÃ0C†á‰Ðh´&…}óæÍÙ³g÷îÝÛÙÙÙÕÕ5<<|Þ¼ygÎœá–N˜0�a˜èèh–e5×R©TO<ñÃ0'NÒŽðh…tG]2jÔ(Í¨F�eRßuGU³$((H¡P©É?ò,Ëfgg�3ÆÏÏÏÉÉÉÏÏoôèÑ_}õ•Ö� Ø.,nÍš5���ÖŽâþ§ûç9ªªªøW×Û¾Ù‡ÕŒ3ˆhÍš5ê¹\îææFDÃH$’ææfõ¢Õ«WQJJŠf—.]Ro±°°�D9œ;wÎÃÃƒgÝ»wïúûûÑG}¤¹"@@@ee¥�v„G+¤;ÜKGGG. .T®D`ßõŽªV›7oXÓP¨uuu£G�Ö[gÔ¨QuuuÂãóàüÐz˜¹„÷ÖW(•••'NœX°`�D"ÉÍÍMLLdMŸÒ{\	Y‘››<räˆºäìÙ³õõõ}úô	knn>}ú´zWMk:óóÏ?'"gggõßÂãä)ä±`Á‚šššˆˆˆï¾û®²²²¥¥¥¨¨hýúõ‘‘‘\…Ž;nÚ´‰ˆ/^|åÊ®ðòåËo½õmÞ¼ÙÛÛ[H;¦F+d/ÄÄÄÈåò½{÷r/÷îÝ«P(bbbŒöZ¸¥K—Êår£ÕxBMNN>xð §§gFFFII‰L&+--]»v­——×¡C‡’““EŒ  ­è=)C›ÂÿŒ-C÷nè=îÜ¹:Qvv¶ÑÊÂ+ð+--%"OOO¥RÉ•¬X±‚ˆfÍšõê«¯Ñ|À•+
-.¼òòrõê2™¬S§NDôé§Ÿ‘��OKK‹ðÍÞÅÅ…ˆŠ‹‹ù«¥¤¤Ñ#�<¢P(är9—2Îœ9ÓÔv„D+¤#\�ÌÌL"Š‰‰á
-Ÿzê)"ÊÊÊ2u(½¯ÂÂÂˆhÃ†Fkjù‡~ "©TZPP µ¨  @*•ÑáÃ‡…‡
-fÀù õ0s	@HMM%¢�;wZl£]ºt	
-
-ª®®>wîWrôèQ"ŠŽŽ~â‰'ˆèçŸæÊÏž=[[[¨^}ß¾}=ôÐK/½q÷îÝo¾ù¦­cöòò"¢¦¦&þjkÖ¬éÞ½ûéÓ§—/_¾|ùò3gÎôèÑcÍš5¦¶#®„„''§#GŽTTTTTT=zÔÉÉ)!!A¬öß~ûm"Z¶lYKK‹y-péïÂ…û÷ï¯µ¨ÿþ.T× °eH.ˆˆÆ�GDêJ,CóÊ¸R©ÌËË#¢èèèáÃ‡ÑÉ“'¹k¬\…'Ÿ|Rs]î:øÌ™3Õÿ½2ÞzñññD4lØ°”””­[·(•JÝj:tÈÌÌdæý÷ßÿàƒ†ÉÌÌtww7µqyzzŽ9R©TæääìÙ³G©TÆÅÅúê§ž{î¹ÐÐÐÒÒRî‹f8yò$�?^ïÒ¤¤$"Ò{ó €m±öÔéƒ—],C÷ÎóžçfÑ\\\„TÖ¬ÐšÃêË/¿$¢Ñ£G³,Ë}Ã²OŸ>Ü¢ÐÐP":yò$Ë²±±±DÄÝ/Ì)++³··wvvænO©¬¬tvv¶³³+))Ø_óÿºº:./TëÐ¡Crrò�7t+¿öÚk\�yóæµ¦!áßê—Û·o'�¹á;v˜1<ï+n‡655ñÔ4§D"!"n]]���ô÷·(´œŸZ3— DD*•Êòåf.�?®P(¸‹àÑÑÑÜ"õ•q¹\ž——Ç=ßG½bff¦R©7nwŒ··wBB‚J¥Rƒ°�¸¹¹åææ¦¥¥%&&öèÑ£¶¶6++kàÀ�Z•ÓÒÒ¸?–/_ÞšvD4vìX‰DrìØ±ãÇ�»¸¸Œ;VÜö'L˜rëÖ­6ˆÛ2 @;‚ä€ˆèæÍ›DäëëkêŠzÿÓ&p]ÿÐÐÐººº³gÏrÉ%—S’Fryúôé†††°°0îön‹Üï¸ûf8Ü•ñ¬¬,á[7[XXXjjjNNÎ�7ŠŠŠbbbª««-Z¤U�»kGóóÚBà^pww=z´J¥R©T£G�æü$";;»%K–QZZ7Ñ($Zu9÷§k×®é]‹+7f  Ñ!¹ "ÊÍÍ%"õ£p,†›¼<|øðñãÇIcæ’û#//�»ƒXó!DGŽ¹~ý:ÅÆÆªŸÂÍ]:¿~ýºæ³�, 88xÛ¶mDÄÅoõvŒš0a‚Öâš8qbppðíÛ·×¯_oêºC‡%¢œœ½K¹r® €-Cr	@¿ýö÷ I“&YxÓ\Öøé§ŸÖÔÔuîÜ™+÷÷÷®««ãž4¤y7ÿ�;¸­GKUUµ~ÆT¬vø=óÌ3R©T*•Ž3¦-Ú···ç&/W®\iêºÜc,ÓÓÓµ¦§§÷ì}  [†äPJ¥²ªª*//oáÂ…�>úhmmíˆ#-Ftt4Ã0ååå¤1mÉá®ŒWTTØÙÙ©/—WWWïÝ»—aÝ{_JJJìììöîÝ[]]ÝFÑ0 --íÔ©SUUU
-…âÎ�;ÜÃç‰ÈÐOP¶i;fpuu­¯¯¯¯¯wuum£MLž<9((èîÝ»¦®___?|øð�?þ¸¬¬L.————òÉ'Ã‡ohhHJJâÏ	 `ÓZu;˜w#Z†î;œç@ˆ��×ûó�<G�X‡Uxx8·ÖöíÛ5Ë¹[›‰èá‡V®[·Ž4ž®åé§Ÿ&¢uëÖžÁÂP===ýõWá[«ž¦HßÝâ<-ï¼áúº%šwV™´­ÚÚÚ‘#GêíN\\~þÑp~h=Ì\ÂÊÉÉÉÇÇ'22ò•W^ÉËËËÍÍõôô´J$êïSê�¹¤¿á’»ê­y+�&îšiÛ]?þü[o½5lØ0ooo{{{©T>þü.8ÐòíØ¬)á±�Ã    IDATS¦ôîÝÛŒÝÝÝ:´k×®¸¸8_____ß¸¸¸]»v<xPô;�  ÚÃ¶ý½¥ %###==�»
-  ¶çg€ÖÃÌ%    ˆÆÁÚ ÜŸ†áYj›WÚcÌâÂ  ´f.   @4˜¹híq–«=Æ,.Œ  @ëaæ    Dƒä    Dƒä    Dƒä    Dƒä    Dƒä    Dƒä    Dƒä    Dƒä    Dƒä    Dƒä    Dƒä    Dƒä    Dã`í P���7n´v  ð7ùùùÖ ÝCriÕÕÕ³gÏ¶v   -00ÐÚ! ´oË²ÖŽ Ú±ŒŒŒôôôòòrk  6ß¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹    Ñ ¹ ›Ãü×¨Q£4ËG�¥^¤[_oÃØÛÛwíÚuÌ˜1yyyþæÍ›³gÏîÝ»·³³³««kxxø¼yóÎœ9Óú€ÏŸ?¿hÑ¢Aƒ¹¹¹9;;½òÊ+¥¥¥è €pË²ÖŽ Ú±ŒŒŒôôôòòrÛä/†aþúë/ooo"ª¬¬ô÷÷gF.—‘æ¹‹«¯[¢ÛlvvvRR’ˆ¡j9þ|tttMM�î¢Ö¬·Ž——×Ñ£G#""Z9 €X0s	 6*&&F.—ïÝ»—{¹wï^…B#¼–eY–U(¿ÿþ{bb"Ë²ï½÷žI1èN1ò[°`AMMMDDÄwß}WYYÙÒÒRTT´~ýúÈÈÈÖ<pàÀU«V�;w®¡¡¡¦¦fÿþý={ö¬ªªzýõ×Mê @›ÂÌ% ´JÛÍ\fffÎ˜1#&&æ‡~ ¢˜˜˜ü1+++99™„Mj–Ü¾}ÛßßßÉÉ©¥¥ÅÔH„Ÿ']]]›ššŠ‹‹ûôécR³æ|úôé!C†¸¸¸466
-Œ  ­aæ ÄÁMò555Í�;×ÏÏÏÁÁ�ˆÆ�Ï0LÿþýU*WM¥RõïßŸa˜	&ð7˜��àäätäÈ‘ŠŠŠŠŠŠ£G�:99%$$˜ùøø˜·º@^^^DÔÔÔÔú¦„Ü¯_?"òððhýæ  Ä‚ä Ä4mÚ´uëÖUTT(•J"Z¿~½··÷Å‹wìØÁUØ¾}ûÅ‹;uê´~ýzþ¦<==GŽ©T*srröìÙ£T*ãââÌH¤”Jå�7^}õU"zî¹çLï“	âãã‰hØ°a)))[·n-((àÆÁ$Âþê«¯ˆhàÀ�æÆ ÐX €VX³fM`` ûßë¹�;w>pà@]]�ºÂ¶mÛˆ¨gÏž2™L&“õìÙ“ˆöîÝËÓ¦úì´}ûv"ŠŽŽ~â‰'ˆhÇŽšKuëk•hrwwOMMmii1©w¦ž'ëêê¸üR­C‡ÉÉÉ7nÜ=àÂÂB†aŽ?nR§  Ú’K h­äRoÖ8fÌ"Z¿~ýºuëˆhòäÉümªs¯ÚÚZ‰DbgggggçââÂå¬æ%—DÔ·o_.=5ºi~FÇ¤°°0---11±G�Ü*žžž.\1àÂÂÂ€€ "úÇ?þa4  KBr	 ­¢•\Þ»wO·NYY™‡‡‡¿¿¿¿¿@@@ee%›š¹Wbb"÷2))Iw©À’{÷îýüóÏÃ†#¢Í›7Ýt+“KMEEEÜîqqqb|òäIîñL/¾ø¢J¥2) €¶†ï\€˜¸;Z´x{{wêÔÉÑÑ±±±Ñ×××ÍÍMxƒêû~ŒÞ ÄÕðáÃ¿üòK"Z±bOM­S$O¡@ÁÁÁÜŽ?.JÀˆ‰‰¹wïÞìÙ³7lØ`Ò“’  , É% ´¹ÔÔÔ«W¯.]ºôÿøÇ…–,Y"|ÝgžyF*•J¥RîÚzëYþ'mªªªÈ”çiÑ8+++!!¡±±ñå—_þôÓO‘Y€Br	 mëðáÃëÖ­ëß¿ÿÔ©S_ýõnÝº­^½úèÑ£Wwuu­¯¯¯¯¯wuu5;†êêêãÇ�Ož<™ˆÚôÇl�––vêÔ©ªª*…BqçÎ�ÜÜ\îÊþ�!C„·£7àôôô3f(Š×^{mýúõÈ,À6á!ê Ð*ê‡¨ë}ÞxUUUxxxyyù¾}ûžyæ"úòË/§L™Ò­[·ß~ûÍÓÓSo›ü�.òrC‰—‹‹Ë÷ßÿØc�	ì�©Q7´]OOÏŸ~úIýÌ óæÉ&ïÜ¹ÓÖ�ð 3— Ð†^~ùåòòòaÃ†q™%Mš4)22²¤¤äå—_¶X‰$((hÖ¬YçÎ�žYšáüùóo½õÖ°aÃ¼½½ííí¥Rixxøüùó/\¸`ÒÓ(-0 €è0s	 ­Ò?ÿ  íf.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4H.   @4Ë²ÖŽ Ú“_~ù%&&F©Tr/U*•J¥rppà^2“��ðÅ_X/@  °&k  íÌ AƒÜÜÜÊËËU3fŒ%ã  ›‚Ëâ `†afÌ˜áèè¨w©T*���·pH  `;�\€É¦L™"—ËuË“’’$‰åC  �ä Lª[.—Ë'Ožlùx  Àv ¹ s¼ðÂºWÆ½½½cbb¬  Ø$— `ŽI“&)
-Í''§É“'ÛÛÛ[+$  °H.ÀÝºu‹ŒŒdF]"“É&MšdÅ�  À ¹ 3MŸ>]sž²sçÎC‡µb<  `�\€™žþyõ¯0899MŸ>]s"  LH.ÀL¾¾¾#FŒà&/qM  8H.À|Ó¦Mã&/ûöíníp  Àú�\€ùâãã¹™Ë)S¦X;  °	ømq+(((ÈÏÏ·v â;þ¼��ÝÆ�­€\]]§N�jí( Ú1Fý}|°˜ŒŒŒùóç[;
-  Ð#00°¼¼ÜÚQ ´c˜¹´œ¼à¾ÑÒÒ²{÷îiÓ¦Y; ddd¤§§[;
-€öß¹€VqvvÆ5D  PCr	 ­…Ç[ €’K    ’K    ’K    ’K    ’K    ’K    ’K    ’K    ’K    ’K    ’K    ’K¸?1£õƒ×Œ‰DÒ©S§G}tîÜ¹ùùùBV×[A/áA²,›““àäääææ>gÎœS§NéVŽŠŠbfÈ�!üñŒ5J³|Ô¨QzÓØÁÁ!00ð¹çž;{ö¬©}4iTùq�)
-Ýr­Ê,Ëfgg�3ÆÏÏÏÉÉÉÏÏoôèÑ_}õË²†F†ë©¿¿||ü±cÇU8€jBö‹Ñ^kN˜0�a˜èèh­î¨Tª'žx‚a˜‰'ò´	 `e,XÜš5k­Å}N÷íÍs$$$TUUñ¯®·ýÖSµµµqqq¹té’zQaa¡¡x+++¹Â»wïr%GÃÑÑñçŸ6©�<utG•ŸzÅÍ›7ë–k–ÔÕÕ�=ZïFG�UWWg´§vvvhÍ rî£½Ö*¼{÷®¿¿?}ôÑGšå«W¯&¢€€ u„ :œŸZ3—ð`áÞ÷
-…¢²²òÄ‰,�H$¹¹¹‰‰‰,oªÄÓš�ëN�:õÛo¿õòòZµjÕÕ«W[ZZ.]º´qãÆ¨¨(­ÊŸþ99;;«ÿÖ+&&F.—ïÝ»—{¹wï^…BÃssó¯¿þ-—Ëß~ûm3ú(î¨.]ºT.—óTHNN>xð §§gFFFII‰L&+--]»v­——×¡C‡’““õ´¥¥¥  `äÈ‘*•êÝwßÕ­fê 
-Ü/¦êØ±ã¦M›ˆhñâÅW®\á
-/_¾üÖ[oÑæÍ›½½½ÅÚ €øÄËSA(üÏØtßÞ†ÞðçÎ�ëÐ¡egg­,¼¿C‡‘‡‡ÇåË—�V–Éd�:u"¢O?ý”ˆ|||ZZZôÆ“™™ID111\áSO=EDYYYBF£´´”ˆ\]]yêè2iT…4FD6l0´‰~ø�ˆ¤RiAA�VR©”ˆ>Ìayy9I$Ý­@Ö”ýb´×z¥¤¤Ñ#�<¢P(ärydd$Íœ9“§5h=œŸZÉ¥àäeÂ“K–e—-[FDÜ4›ÑÊ+ðã¾3÷á‡
-©œ““CD=ôË²z36.žªª*'''{{ûÛ·oß¾}ÛÞÞÞÉÉ©ººÚòÉ%«oT…4µk×."êÚµkss³ÞMLž<™ˆÞ}÷]½�pó‘S¦Lá‰�K.}||t·.| YSö‹Ñ^ë]TSSÓ½{w"úàƒÞÿ}"êÑ£Gmm-OkÐz8?´.‹Ð¸qãˆèÌ™3Û"w¿·]£¸ë­3gÎTÿkè
-¬§§çÈ‘#•JeNNÎž={”Je\\œ‡‡û2™ì·ß~{á…ˆhðàÁ¦ôƒ�y£úÜsÏ…††–––r×…u�<y’ˆÆ�¯wiRRýwxuÉd²ÂÂBnFPëÆŽI(|¿˜§C‡™™™Ã¼ÿþû|ðÃ0™™™îîî"n  MX;»}áÆ ûöæyÃ755‘‹‹‹�ÊšÌ>¦$	555­YVVfooïììÌÝÃQYYéììlggWRR¢·wÛ·o'¢èèè'žx‚ˆvìØ¡·;z#7û†½‘ëŽ*?uS_~ù%rã£µ	þ¡kllÔ»+µDGGß½{·5hê~1ÚkC^{í5®Î¼yóxª�Xp~h=Ì\�J¥²veff*•ÊqãÆq÷px{{'$$¨T*õµŒ;V"‘;vìøñã...cÇŽ5º	{{{ÿ¤¤¤“'O>\¬ÈÍÕ	&„„„ÜºukÃ†b£ÉÇÇgùòå;vÔ»Tà šº_Ì–––Æý±|ùrq[ h#H.èæÍ›DäëëkêŠzÿÇ&dE???õvùÛçn1á®är¸+°YYYz·åîî>zôh•J¥R©F�íææf4~…BñçŸîÙ³Gï5q³ûhö¨ÚÙÙ-Y²„ˆÒÒÒ¸™HMÜ3z®]»¦w]®<  @«œûÖ­[¯½öÚÝ»wÇŒóçŸêmAÈ š±_Ìæââ¢õ €�Cr	@¹¹¹DÄÝ�kC‡Uo—Ç‘#G®_¿ND±±±êGyÇÆÆÑõë×�9¢w­	&hýa­Õ‰'ß¾}{ýúõZ‹¸¡ãn¦ÑÅ•sut¬]»vÌ˜1÷îÝãë£—Ñ4o¿  <(Ä¾ÎÆá;= ûö6ô†?þ<÷Ðœ={ö­,¼?îQDžžžEEE<Õ¸;£™<y²Þx¤R©T*mhh0­�ø[SGï¨šÔÔ_|AD>>>Zåß}÷¹¹¹™ý(¢¢¢"ÍÁ7i ÍÛ/BzmvÎÏ ­‡–àäeüé”B¡¸wïÞ‰'Þ|óMî‘#F¨T*žÕ�¶o*îË|ÞÞÞ}ôÑµk×d2YccãåË—¹‡¨³,[UU%‘H†¹qã†Öº%%%vvv‰Dý8üñX&¹4:ª&mN¡P©36ÍšñññDäååµvíÚÒÒR™LVVVöñÇ{yyQRR’Ñ^¼øâ‹D4~üx��Õ\*â~RA`ÎÏ ­‡–àäe†Ò)½âããõþü£^+eôç×­[GôÖòôÓOÑºuëõWÈhðG(¤�<utGUÈæ4K4oŽÑ,¯­­9r¤Þ�ÆÅÅéýùG­m•——»¸¸0sæÌ!¢¹ÔŒýÂ3†ÂÙPl .œŸZß¹„‘“““��Oddä+¯¼’———››ëééiáÜÝÝ<˜��ýì³Ïúûû;88H¥ÒþýûÏ™3‡{L#÷ÐDÍ[F4Í˜1ƒÄ~°b+‰>ªS¦LéÝ»·n¹»»û¡C‡víÚçëëëàààëë·k×®ƒòßÃÄ	|íµ×X–ýÇ?þajTín¿  XÃŠzc#‘‘‘‘žžÎýL  ØœŸZ3—     k pb†géx¹  ðàÀÌ%    ˆ3— âÃTœ Àƒ3—     $—     $—     $—     $—     $—     $—     $—     $—     $—     üü£åTVV^»víúõë?üðƒJ¥²v8    âCr)>¥RYVVvíÚ5.•TÿQ]]MDööööööÖ   @|H.[åÏ?ÿ¼xñâõ¿«ªªâ–öú¯çŸ^ý·——WFFFzzºu#0Ë²ÍÍÍ...Ö  l’K¡d2Ùï¿ÿ^TTT\\\\\|õêÕk×®Ýºu‹[êëëÛ»wï���Ñ£G÷þ¯€€ C­566nÜ¸ÑR±ˆ#'''**Šç�¶ ººº¦¦¦¥¥E©TêýW¡PÈd2Í“’’°[9ùùùÖ ÝcX–µv¶¨¬¬¬ø¿®\¹R\\|óæM¥RID�;wîÛ·oŸ>}z÷îÝ«W/.�twwÞxFFÆüùóÛ,v  0_```yy¹µ£ hÇ�\’úröÅ‹/]ºtýúõÒÒR¹\N×µûõëÖ«W¯®]»:::Z;d KûñÇGŽ©T*ÿøã�nÝºY;0nÃ†óæÍcY–;›âèèøÜsÏíØ±Ãb�À}ï�K.kkk/\¸péÒ¥ââbî¨ööö=zô			þ¯.]ºX;^ ë»yóæÃ?\]]Í²ì­[·pý´½(**7n\qq1wÕE/†aöìÙ“˜˜hÉÀ àþvŸ'—r¹¼¨¨ˆK%
-
-nÞ¼ID®®®ýúõïÛ·opppß¾}ƒ‚‚œœœ¬/€Í©®®<xpII	7v÷îÝŽ;Z;(ª¹¹yáÂ…ëÖ­cýg{''§{÷îI¥RËÇ ÷«û*¹T*•W®\9{öì¥K—.^¼xöìÙ?ÿü“ˆ\\\~øá°°0îêv¿~ý­,@; P(âââŽ;¦¾´Z[[kÒ7ŒÁäää¼ðÂÜ­<šåööö^^^�;wž2eÊÄ‰»víj­à~Ò¾“K™LváÂ…_~ùåüùóÜÅîšš"
-èß¿DDDÿþýÃÃÃûõë‡‡§ ˜áõ×__·n�æEÕ¦¦&‰DbÅ�À<ÅÅÅIII—.]Òü{{û7ÞxãÞ½{999µµµ�?þøäÉ“Ç�ïíímÅP ½kgÉ¥B¡¸téÒ/ÿõÛo¿Éd2—ˆˆˆˆˆˆððp.§Äe;€ÖÛ°aÃË/¿¬uŠP*•vvøÙØv©¹¹yÑ¢EŸ|ò‰ú¹��ÝŸþÙ©S§–––C‡íØ±cÿþý*•ê™gž™9sæÈ‘#ñs `[O.[ZZÎœ9sö¿Š‹‹
-…T*:tè°aÃ4hÐ \ãÝO?ý«u#ˆ��Ï­!Ð.lÝºõ¥—^R*•
-…bðàÁ§OŸÖ\Z[[»{÷î-[¶äççwîÜ999yÆŒ½{÷¶V´ ÐÙbryãÆ�Ó§Oss“¿þúkmm­ƒƒC¿~ýÿ×C=„›o ÚÎï¿ÿ>hÐ ††­TÒÉÉ©¥¥ÅZQ�X.]º”˜˜XTT´bÅŠE‹ª³eË–mÛ¶Ý¹s'66öÍ7ß|ê©§†±p¨ ÐÙDr©T*
-
-Ž?~âÄ‰'NÜºuËÎÎ.88X�M8ÐÕÕÕÚa<ª««###ÿøãÝç#ººº644X%*WccãüùóçÏŸÂSM.—ïÛ·ïÓO?ýñÇCBBæÎ�;mÚ4777‹Å	 í‘Õ’K…BñŸÿüçèÑ£yyyyyyµµµC‡:thTTÔ#�<Ò¡C«ð S©Tñññß~û­ÖmÅ�êêjËGVwùòåO>ùdÛ¶mööö)))¯¾új¯^½¬ Ø(‹&—*•êüùó?ýôÓ‘#GŽ;V__ß³gÏÇ<******,,7
- X×Ö­[“““íííõ~·²cÇŽwïÞµ|T`#jjj¶lÙ²nÝº’’’)S¦,^¼888ØÚA€Í±Drù×_8pààÁƒG�½wïž··÷“O>ƒï‰Øš¢¢¢/¾øâóÏ?¿}û¶£££æÅñ€€€[·nY16°*•êÀ�ï½÷Þ¯¿þ:fÌ˜wÞygðàÁÖ
- lH[%—,Ëþúë¯Ø¿ÿÙ³g†‰ŠŠŠ‹‹{úé§~øa<ÞÀÆ©Tª;vÌœ9“ˆ”J%Ã0J¥²[·nüñ‡µC› T*¿úê«eË–]¹reÂ„	~øa�=¬ Øñ/CþóŸÿ
-
-<xpFFFïÞ½·mÛVQQqìØ±Å‹GFF"³°}vvv.\ðóóûë¯¿>ûì³Aƒ1ãììlí¸ÀVØÛÛOž<¹  `Ïž=¡¡¡ÿïÿý?îg, à'ÚÌeaaáž={vïÞ}ùòåààà	&<õÔSÃ†spp¥} °¤æææ.]ºÌ�;÷�wÞáJ~ÿý÷£G�þÏÿü�u¤T*7oÞüÎ;ï¨Tªwß}wöìÙ˜D x�µ6¹ljjÚ¹sç¿þõ¯³gÏvíÚõùçŸŸ4iÒ AƒÄŠ ¬bëÖ­³fÍúã�?¬´uuuË—/_½zõC=ôùçŸ‡‡‡[;" °ó“Ë«W¯~öÙg™™™õõõãÆ�{ñÅ£££q»7ÀýáÑGíÚµkvv¶µ�væÚµk³fÍ:~üøË/¿üá‡J¥RkG –fNrYXXøþûïçääôêÕkÖ¬YÉÉÉ�:uj‹à À*Îž=;xðàüñÉ'Ÿ´v,Ðþ(•Ê5kÖüóŸÿÎÉÉÁSA 4¦M4^¸páùçŸè¡‡®]»–��]\\¼hÑ"d– ÷™6„……!³óØÛÛ¿ùæ›.\pqq‰ŒŒ<pà€µ# ‹š\ÖÕÕ½öÚk,++Û·oß/¿ü’˜˜ˆß™¸ÿTUUíØ±cÖ¬YÖÚ·   ãÇ�¿øâ‹Ï>ûì¼yótM îW‚nå>xðàK/½ÔÐÐ°iÓ¦3f §¸�}ùå—D4mÚ4kížƒƒCZZZ÷îÝ_ýõ{÷îeeeá.r€�ñ™Ë?üðÙgŸ}ì±Ç.]º”’’‚Ìà>¦R©>ùä“©S§z{{[;¸OÌ™3çÀ�999S§NÕû›õ pŸ1rCÏâÅ‹W¯^½~ýz<ÜàAðõ×_�?þÊ•+}úô±v,p_ùá‡âããÇŒ³sçN<ÿàþÆ—\®[·îµ×^ËÎÎNJJ²dL `-�=ö˜��Onn®µ�û—_¦¤¤¬[·ÎÚ± @2øßÇãÇ�ÏŸ?ÿŸÿü'2K€Ä©S§òòòŽ;fí@àþôôÓOïÙ³gìØ±½zõzã�7¬ ´ý3—•••?üpïÞ½øá|ÿàñüóÏ—””œ:uÊÚ�ÀýlÅŠ‹/ÎÍÍ}öÙg­ ´	ý7ô¼óÎ;r¹|çÎ�÷}fÉ0nQF’Úù \»vmïÞ½óçÏ·ü¦Ûõ¸YKKKKjjjÏž=ŽžÖ8[kØSSSgÎœ9eÊ”.X~ë `zf./]º±uëÖ)S¦X%¦¶À�Cu;k¨8ÂÇ#Ií|æÍ›·ÿþââbËÿ—²]�›µ,Y²dÙ²eê—f¤Vv¹\{ãÆ�Ó§Oãg8 î?zf.—,Y2`À€É“'[>ËcYi •••Ÿþù«¯¾zß_¬¸oìÜ¹“ˆrrrZZZžÄlçtçèè¸gÏGGÇqãÆµ´´X; ™vrY\\œ››ûÎ;ïà*Àƒ#++ËÎÎ.%%ÅÚ�€Püñ�7ÎÉÉÉÚ±˜£cÇŽß|óÍÅ‹ñ[P ÷íä233³[·ncÆŒÑ*W(k×®<x°›››««kttô¾}û¸E2™lÅŠpuuuuu0`@zzºæ/}qßìQ*•K—.íÑ£‡³³shhhff¦fûBêÑöíÛ£££===���ƒ‚‚-ZTSSc4Hu¢ÌhÐ,Q· J_tqk555Í�;×ÏÏOóoü=ºqãFBB‚›››��Ïœ9s…|kJ·�g+
-…â_ÿú×Ð¡C;uêäää`Ô    IDAT8~üøÃ‡ó�›!���³gÏöññqww7nÜÍ›7‰è§Ÿ~b&   ©©I³rKKK—.]†ùñÇyÆ�¿�{©w»+ð�ñî>~'Nœ˜6mZ—.];vìûý÷ßs‹„�‰±ñìS½š››?úè£™3gzxxðw™§Gš+ò ºïj­x†õõõ3fÌðððX»v-Ý»woêÔ©^^^>>>o½õÿ,�Ñ¾ðœôxñï2ž]#|¯©™ˆìììÔG„À½ch@„nfœÊô
-ýê«¯vîÜ™––Æ_ ÚöïÂÂÂÞxã­B™L«wÝæææáÃ‡ë.1b„L&Ó¼
-£;)²{÷nõ&ŒÖQ©Tz¯Ô‡……ÕÔÔðÉÓqÍ¿Åê‹.®ŽæC�„ôèîÝ»]ºtÑ\”˜˜¨°Vüz�nÅÐdÿ¸ê£:BN—.]*++Y–�ŠŠ"¢U«Vi®òñÇQdd$›ü…üÛ5ZÁèøÚ}BÖm–a˜ÜÜ\n©Ñ11;6ž}ª×G}äêêú×_iE®Ûeþ±£ïjá‡á¸qã4+üûßÿ~ä‘G4K¾øâC]6Úžó	Ï¢ÖnÂ÷š¡jü=b¼?½ä©cê©ŒßòåËííí÷ïßo´& ´;•ÔÔÔ0óõ×_kUZµj¹¹¹­]»¶´´´¹¹ùäÉ“			,ËrÿãôôôÜ²eKEEEEEÅçŸÞ¡C"Z¹råÿnƒˆˆºvíºoß¾ššš’’’±cÇÑc�=öq«³iÓ&"êÜ¹óîÝ»ïÜ¹ÓØØxòäÉÈÈH"JMMå’5pÞÔ*«/†¶Ò¹sçÔÕÕ	ìÑ¢E‹ˆ¨{÷îG�­««;räH·nÝLý<0ºWWW"z÷ÝwËÊÊd2Yeeå¾}ûbccùÇÍPu£]´hË²‡"¢N�:Õ××sõ›››‰hïÞ½ümòòo×h£ãch÷		xÔ¨Q‡ª®®–ÉdeeekÖ¬!�dÚè˜˜ÿ>ÕÒÐÐàïï¯õ_JC]æï+à 1ú®~0à·ß~«©©yùå—‰ÈÃÃC«dØ°a<;‹¿/<çžE­9ÜLÚk¬¾£CàÞø’§Ž©§2£’““;tèpõêU!•ÀöýíTræÌ"Ò=Âzè!"Ú¸q£îúD”™™©Y¸yófîÔÿ¿Û "¢ï¿ÿ^]áúõëDäîîþq«3dÈ":vì˜æ†®]»FD}úôá’–\ŠÕC[ÑÊ¢Œö($$„ˆ¾ùæõÒ¯¿þÚÔÏ�[‰��}ýõ×7oÞ¬µ÷�›¡>êFÊ½<x0¥¥¥q/¹)ºÐÐP•JÅß&¡ÑíòW0:>¬�Ý'$àÃ‡?ûì³þþþšW%‰ºÿ˜˜ÿ>Õ²fÍ­iKž.í‘ÑÄè»Zøa˜ŸŸÏ½¼uë–Þ’N�:ñtœ¿/<çžE­9ÜLÚk¬¾£CàÞø’§Ž©§2£ärù°aÃÂÂÂ„Ô ÷·SÉÁƒ‰HwnÆÅÅ…ˆ***t×—H$DtçÎÍÂŠŠ
-"rqqùßmQSS“º‚J¥Ò{Îâ©Ãý·ÞÞÞÞÞÞÞÎÎŽû¦WÁÑÑ‘?HVXr)V_måÞ½{š…F{äììLDUUUêUîÝ»gêç�Ñ­äååõèÑƒ4ÄÅÅÝ¾}›ÜõQ7Zõg÷‹‚;v¬««kjjâ¦è²²²Œ¶É_ht»üŒŽk`÷x×®]†¾ß¦®Ï?&fÇÆ¿O5qÓ–óçÏ×Û­f…ôˆ{És€}W?›››µ6¡UÂ0Œn—ö…ç|Â³¨5‡›ð½¦9Â{¤»
-ÿKž:¦žÊ„())ñññIIIX lÙßN%ß|ó�æ	ZM”äR{Ã&ž×¸áÒPû¬¹É¥ÀÆù+í‘�ä’;‰kNþ©o�¸–eåry^^ÞÊ•+Ç�ïææFD'NØ5­>ò$y*•Š›”Zºt)wûE·nÝÔß¢ÓËhï„l—¿‚�ñ1u¸¿ûõëGD/½ôRQQ—lÕ××k5Å?&­‰�gŸjÊÈÈpuuýóÏ?y:¢&¤GzWÔ,1¹ä˜¯í‹yÉe+7�{MoÍØ;Z/…nfôZˆ0ÃÿN hþvä9rDïIsÀ€D´iÓ&Ýõ¹�Æ­[·jnÙ²…t®aioØÄÏ$îâéÓ§õ„'Hö¿çM¹\Î³	±ú¢Ko£=rYÜßßŸˆ®_¿®.ùî»ïL7-ÜÅ,oooî¥¡qÓÅm”çò4Ë²»wï&"//¯€€ "úøã�ùÛ4Ú;!Ûå¯ d|„FjÖä²¨êêjõÒÿûßºMñŒ‰X±iíSµÆÆFÿ×_]`³Bzdô xYÜÔÃPH‰I}á9Ÿð,jåá&pG«ƒfìSO&º«pLí5�…J¥Ò‹/¶¾) °¢¿�&¸ç³äååiUZ½z5¹»»¯[·®¬¬¬¹¹9??_ó†//¯­[·Þ¹sçÎ�;™™™žžž¤óí{í›ø™Ä}ºøûûoÚ´éÆ����ÍÍÍEEE7n:t(�,Ër?ñå—_j^°ÓÚ„X}Ñ3Êú*í‘�zž|òI";vlIIImmíþýû»víjÒ¸=þøãÛ¶m+--•Ëå+V¬ "WWWþq3ÔGžkX–U*•¡¡¡\M__ßÆÆFþ6�öNÈvù+C»�g¸¿ƒ‚‚ˆhñâÅ•••UUU»wïöóóÓmŠgLÌŽ�Ÿª­]»Vï´¥¡f…ôÈè"ð†SC!%&õ…ç|Â³¨5‡›À½f¨ƒfìSO&†FUÈU ¹\þØc�………©ïr€öèo§	•Jååå•‘‘¡UI&“=õÔS¤ƒeÙæææÇ\wQtt4÷»¬HÉ%Ë²sçÎÕÝ�ºO�,Ë&''ë-×ü[¬¾èeø{$äQDÜ×d5©h"p+zË_|ñEþq3ÔG­§Ãh>ˆ³mÛ6nÑÒ¥KyFLxïŒn×hþñáÙ}†�û{åÊ•Z­MŸ>]oS<cb^lzë«÷)§¡¡¡K—.¯¼òŠÑŽ¨	éO<ÜßBEdÆa(¤Ä¤¾ðœOøO5fn<‹„ì#3öŽÖKá‡›n0Fß¨Â•––úøøLš4ÉÔÀvhùãÆ�Óûð™L–žž!‘H¤Ritt´úÂVsssZZ·ÈÅÅ%""bÅŠê�V¼ä’eÙÃ‡�?¾sçÎŽŽŽ...ÜS9ÏŸ?o4Èêêê9sætïÞÝÑÑQ³Y­MˆÒ]<ø{týúõ±cÇJ¥RooïY³f544è6µeË–��GGÇ®]»¾÷Þ{
-…Â¤qËÏÏŸ9sfÏž=}||¢¢¢>ûì3…BÁ?n†úX__?sæL///©T¯y‰�sêÔ)"rww×üÖ£½3º]!�ñïáŸ‘š5
-EzzzŸ>}œ��{õêõÞ{ï©nÒ˜˜ÿ>å¼ÿþûîîî·nÝ2Ú5!=r€}W›q
-)1µ/<çžE¬¹‡›�½ÆÓA3öŽ'³Oe&9xð ��Ý–-[ÌX lÃþýÌ;wîœ>}úüÁÝ¸
-¶†û$k`žÃö¥¤¤dff.X°€{X`ëÛ1ÑÇÄ¨ÒÒÒ¾}û¾óÎ;©©©–Ù"€IÞxã�M›6�9s†û’. ´/ÚÉesss�=¦OŸ®{‘l�í§J<nÞ¼9dÈ�ŠŠŠ‹/r7·¶^{O.ÛbLŒJII9vìØ¥K—ÚéÏRÃ}O&“EGG755ýç?ÿÁ» ÝÑþmq‰Dòî»ï®]»–»W@,ÃôìÙ³¢¢bôèÑË¢lœUÆäìÙ³[·n]¶l>³Áf999egg—””,^¼ØÚ± €É´g.‰H&“…„„><++Ë!Ÿ‡ãÁ0ŒD"‰þÿìÝy@Tåþ?ðÏÀ°ƒ±›ŠŠ†‚[In¸ ˆ —%Á4MsÉŒÊÌÌìfÝk×LÓRP1CKÅT”pIÉÜ»‰¢WSÃÐPC AÙ†aÎï�ó½ó›;Ë™3ÃÀ™aÞ¯¿ôœÏyÎçy†yøpÖÑ£¿ùæ^taÒG.[iL¸�3F"‘œ={VÓ3·ŒÄ®]»fÌ˜qòäÉ��¡s ¨).‰hÏž=/¿ürfffxxxÛç ­$333***;;›}e€‘›2eÊ¹sç®_¿îââ"t. À—úâ’ˆæÎ�›‘‘qõêÕ®]»¶qN Ð¤Riß¾}°gÏ¡sà¥¬¬¬oß¾±±±_ýµÐ¹  _‹ËÚÚÚçŸÞÓÓóØ±còÇÐ €éúæ›oÞxã�¼¼¼=z� _GŽ‰ŠŠúé§ŸÆ�/t. À‹Æâ’ˆòòò‚‚‚BCC÷íÛÇ¾[ LÔÃ‡ûôé3}úôµk×
-�€nâãã/_¾|ãÆö•ë `ä”ïWÔ§OŸ#GŽœ>}zÜ¸q………m– Ü›o¾Ù¡C‡O?ýTèD t¶qãÆššš�>úHèD €®â’ˆBBBNŸ>]\\Ü¿ÿ]»vµMN `XLOOONN¶··: �yyy}öÙgÉÉÉ—/_: ÐŽë´¸\MMÍ{ï½÷Í7ß:tÝºuƒjƒÌ À =zÔ§OŸ��ü}¦‹a˜#F466^¼xÑÂBËa ¯¯¨““Ó×_ýë¯¿Z[[<8>>þ×_míÌ À –.]*•J“’’„N@"‘(%%åÚµk_}õ•Ð¹ €:üý×¿ÿS§NeddüùçŸƒ3fÌîÝ»[/9 h¡¬¬¬Í›7¯Y³ÆÍÍMè\ Z¤OŸ>ï¼óÎÇ\VV&t. À…×iqU'NœHLLüé§ŸÜÜÜæÌ™3wîÜnÝº<9 h‰†††çŸÞÍÍíÔ©Sx´uuu}úô;vì7ß|#t.  ‘žÅ%ëÎ�;_ýõ¶mÛÊËËƒƒƒgÌ˜1iÒ¤Ž;0? ÐÛo¼±oß¾ë×¯·Ù»%ZûNÈË—/8Pè\ @½—¬¦¦¦£G�¦¦¦9rD$�?>&&æoû›»»»AR =üðÃ±±±û÷ï���: C1bDssó¹sçp<À8 ¸”«ªªÚ¿ÿÁƒO�:%‘H†Ó³gOCí øøë¯¿úõë�³‡Ðþ\¼xqèÐ¡ßÿýÄ‰…Î Ô0dq)W[[{üøñC‡eff–——÷éÓ':::&&&((ÈÒÒÒà» EÃŒ?þÏ?ÿ¼råŠƒƒƒÐé Þ”)S.]º”——‡·Ç¡V).åØ3‡:tèPAA�‹‹Ë¨Q£ÆŒ3fÌ˜€€€ÖÛ/€9[·nÝ’%KÎŸ?�GÒB{õÇlÜ¸qîÜ¹Bç ÊZ·¸T”ŸŸêÔ©“'Ož9sæÑ£G^^^!!!l¡Ù½{÷¶É Ý»~ýú�!C.\¸bÅ
-¡shE			?ýôS~~¾µµµÐ¹ Àÿh»âR®¹¹ù×_=yòäÉ“'ÏŸ?ßØØèëë;fÌ˜Q£F6ÌÏÏ¯�óh7***ž{î¹gžyæèÑ£x‹	´oýõW�=V¯^ýÖ[o	� üŠKEuuuYYY§N�:}útNNŽT*õòò:thppð°aÃž}öYüI
-ÀÃ0ÑÑÑW¯^½råŠ‡‡‡Ðé ´º…îÝ»·  ÀÎÎNè\ àÿ¸¸T$•JóóóÏ�;—•••••u÷î]KKËgžy&88xøðá#GŽôõõ:G ãµjÕª�?þøÔ©S#GŽ:€¶P\\ìçç÷Å_¼ùæ›Bç ÿŸ—JnÝº•�����}þüù¼¼<™Læïï4hÐ Aƒ0 åªž8qâ™gžéÒ¥‹AÐ‰'ÂÃÃW¬XñÁ�@Ûyç�w8ðÇXYY	� üã-.UWW_¼xñäÉ“.\¸råÊ“'OÄbq@@À AƒØr³_¿~zÌ,ñññ‡^´hÑ|Ð¡C‡ÖÈ ”••=ûì³}úôùé§Ÿp©%˜•âââîÝ»§¤¤¼òÊ+Bç ÿÇ4ŠKE2™ì÷ß¿ü_999õõõ666ýúõcj>÷Üs}úôáSköèÑãÎ�;–––:tX±bÅÜ¹sÅbqtÀ€¤Rixxx~~þ•+WðZ,0CÓ§OÏÉÉ¹~ý:^Ø`$L¯¸T"•JoÜ¸!¯5¯_¿ÞÔÔdmmÐ_�«««Ò†ŽŽŽÍÍÍì-,,¼¼¼V®\9}útÌP`BÞxã��;wž;w®_¿~Bç €ë×¯0àÈ‘#&L:  jÅ¥‰DrãÆ�œœœkÿõèÑ#"êÒ¥‹¼Ð0`@÷îÝ¯_¿>pà@Åm-,,d2ÙÀ�“’’FŒ!P t�’’’���‘‘�ˆƒ9		qtt<|ø°Ð‰  Qû+.UÝ»wO^hæääÜ½{—aGGÇÀÀÀÿüç?2™L)^,K¥Ò	&$%%á¡›`Ì~ùå—ÐÐÐ?üpÙ²eBç ¤C‡½ðÂùùù={ö: 0ƒâRIuuõõë×¯]»vøðáŸþ¹±±Qm˜X,ffÎœ9Ÿ~ú)®c#TTT4hÐ Q£F¥¥¥áB0sÍÍÍ=zô˜<yòçŸ.t. `"Åå?üðàÁÃ¶¹qãÆ7npw_$ÙÙÙÅÆÆŽ17á‚QùöÛo?øà[[[¡ss8lØ0asøä“O6lØPTT„o€àL£¸>wîœÐY  €,HLL6‡û÷ïwëÖmÏž=“&M6 0™'ïvòª­­urr’Ö666DÄž"·µµõ÷÷ïÛ·o@@@@@@Ÿ>}|}}qØ @­àà`¡S "êÜ¹shhhjj*ŠK Á™LqiXyyyleimmÝ«W¯°ud@@@·nÝPJ ˜œiÓ¦Íž=»´´ÔÓÓSè\ Ìš™—O=õÔ¡C‡úôéÓ­[7KKK¡Ó €–š8qâo¼ñý÷ßãUã Â2ÓCtÝ»w�ŽŽöóóCe	 Ð>888DFF¦¥¥	�€¹3Óâ  ÚŸ©S§ž;w®¤¤DèD ÌŠK  h'Æ�ïèèxèÐ!¡0k(.  �°±±	Å{ „…â  Ú�¨¨¨Ó§O×ÔÔ�€ùBq	  íGDD„D"ÉÊÊ: ó…â  Ú//¯€€€S§N	�€ùBq	  íJHHÈ™3g„ÎÀ|¡¸ €v%$$$''§ªªJèD ÌŠK  hWFŒAD¸ì@((.  ]qssó÷÷¿pá‚Ð‰ ˜)—À—H$‰DªKX¶¶¶C†™?~vv6ŸÍÕ¨¥S†,±XìååóË/¿¨6l˜H$<x0GS~~~R©”»:1“žžéééimmíéé9aÂ„½{÷2£©;ŠË#""tEÜg3ÌÈÈˆ‰‰ñöö¶¶¶vttìÛ·oBB‚Ò¯j>a|>Ó{÷îÍ›7¯G�666ööö}ûö]°`Á¥K—÷Å'@ÑsÏ=÷ë¯¿¼Yž“Ï0žß5Uü¿¤:Í6üg<>‘ªô=Mó÷T¬i+­CÇÑˆÚÖ@#Æ>|Á‚BgaîT`8~®bcc«ªª¸7WÛ~K~JÕnkaa‘™™©™——'¸qãGS[·n5à ÔÔÔL˜0AmpDDDMM�jËb±ØÊÊª¢¢‚]X^^Î.Ñidøw¼ºº:<<\ëÁ3ŒcpØ€«W¯vìØ‘»>1  ãœŸ]]]e2™a›Uûs¨:Éð	ãù%RÅsC=fÒeÆÓiØÑSjŸ#1Ž­´G#ª­Ó&ãœ¼Ì�¦/3ûo©TZQQ‘••µhÑ"[[["
-		QœÙµ~-[þ½Ul¡±±177wüøñD¤¹hÑ""²±±!¢…jjŠˆ|}}%	G’:B\\9;;'&&J$’û÷ï'%%¹¸¸Q\\œjËìT¸eËvaJJ
-É�eê:DZ;MD..._|ñÅíÛ·kkkóòòRRR†¦k˜Ö$ÇŒCDýúõ;vìXEEEccc~~~rr²âGÆ'dœó3{<ìÞ½{†m–ç$Ã'Œç—HÏõ˜møÏx|"2z|šâ¿•®cŽjRo¦1jÆ9y™þ_æ«W¯vèÐ�ˆÒÓÓµóÐ#Ãââb"²µµU\(‘H<<<ˆè«¯¾""77·ÆÆFµMÑæÍ›9vÁNœ8AD¹¹¹JÁ¹¹¹DtòäI¥–·mÛFD¡¡¡ìÂ±cÇÑöíÛõ.­?zô(uìØñæÍ›íðcx|¦vvvDtëÖ­Æ€€Œs~foW=kÑB<'­aü¿DJxn¨ßlÃÆã©JïÑãÓ”Ö­ôs—z3�Q3ÎÉËÜèôe^±bMœ8‘O0Ï =2dg.777Å…DÔ¿†aúõëGÿ[+6•––FD�;wnhhÐ´þƒ0uêT"Z¶l™ÚàeË–Ñ´iÓ”Z®ªª²¶¶¶´´,-----µ´´´¶¶~ôè‘Ã¥µãS¦L!¢Ï>ûŒ»ža�ÏÔÇÇ‡ˆ®]»ÖÂ�ÑÎÏ^^^k×®eþûsXWW÷Ö[oyxxXZZ2ÿ=°ÐÜÜÌÆ777³5Ó‹/¾¨©Mž“ŒÖ0þ_"%<7Ôo¶á?ãñ‰T¥÷èñiJëVzŒ9ŠK½™Æ¨íäeVtú2³×öuîÜ™O0Ï �2T<ç2}útÅ0ö:¤õë×3“””DDáááj›jnnîÝ»7mØ°AS’üÁ××—4\éÈ0Lnn.uïÞ]µå¨¨("Ú´iSrr2EGGsïW­ïÚµ+iý³žgŸ$ˆÈÑÑqÖ¬YÛ·o¿~ýºT*Õ#d´óóÈ‘#_ýuæ¿?‡l5)ÿ™|ðà�««+¥¦¦²ñ;vì "�‡jj“ç$£5Œÿ—H	Ïõ›møÏx|"Ué1z|šâ¹•cÞòßJfË4FÍh'/³¢Ó—¹¾¾žˆìììø+¨¥S†JF�]^^.�)**²´´´±±ao‘©¨¨°±±±°°(,,TÛµÝ»w‘��O}}}�½
-“mGU]]�¦ûî»ïØŽŒ5ŠˆvíÚÅ½_µøtœ;C]ÃŸiMMMLLŒâò:Ìœ9óîÝ»òFøÄ€€Œv~~õÕWÇŒÃü÷ç°S§N™™™Š7²ìÜ¹“ˆºuë&‘H$I·nÝˆhÿþýmò™dø„ñÿ)1È—”c¶á?ãi�TÕ’ÑSj_Sb[é1æ|:j™Æ¨íäeV8fUµµµš&/îö¹'>*rssËÎÎVŒY¾|9M™2E¾dòäÉDô¯ýKm×š››ýýý‰hÝºu-½§ûêêj[[[;;;ö·£®³ŸŽ·}qÉºqãÆªU«&NœÈn!"ggçë×¯ë‚0ÚùyåÊ•Ýºucþûs¨¶jŒŒŒ$¢äää�7ÑÔ©S¹Ûä3Éð	3Úâ’ÿŒ§5R•Þ£§:ohJŒc+—mÉ4FÍh'/³Â1Ë¨úí·ßˆ¨K—.|‚yè”aIIÉÛo¿MD®®®%%%ìB™LÖ½{w":~ü¸|«ãÇ�Q÷îÝ5ÝÛÎ8ôôôd‹E½AïÓâÃLœ8‘ý¯üO�†‹gÇÛþ´¸ªüüüÐÐPRw­‚N1ÐfŒv~Þ±c‡���L&c+++UcŠŠŠ:vìèååååååíí-æ—&Z'žaÆyZœý7ÿ�;R•£Ç§)ž[á´x[ÂCÔ¡U<x�ˆ‚‚‚„JÀÛÛ;)))22²²²réÒ¥ìÂ3gÎÜ¹s‡ˆÂÂÂäOÄ#¢;wîœ9sFmSS¦LéÕ«Wii){É#Jƒ0tèP"bïªQÅ.gcT±Gÿ¡žg÷Î¦Í�g˜~zõêÅž¬<{ölKb ¼¼¼åw¿±�àQâêêêááaeeUWWçîîîèèÈ¿}µ“Ï0½¿D:}Iõ›møÏxzÏ�Ä{ô¨U'.P&tuË‹ÑþelVT`4ýåää°OáùþûïµóÐ#Ãüü|±X,‹óóó™ÿÞA©‰â1¥¦RSS‰ÈÍÍ­%ƒpìØ1"rttÔéá ì¿kkkjkk¹÷«ÏŽ³�êpvvf‡Kžaº&)ÇÞeooßÂhF;?_»v�ˆä/P3þ|"Ú±cÇÊ•+‰hñâÅÜmj�dx†ñÿ)á¹aKfF—�#R•Þ£Ç§)­[é1æúÍ`Àà´8ðÇýe–J¥•••YYYï½÷ž1<D]îµ×^#¢øøøªª*[[[‘H¤z#Haa¡………­­­ü…:JMI¥R???y5¦i§Z�½1ÅÅÅ%))éþýû‰¤¨¨hýúõ�5Ö©³jéÔqö!Ã®®®k×®-((�H$uuu7oÞTûu­aZ“ìß¿ÿÊ•+³³³+++›ššÊÊÊ8À^ÈÂ?d´óóƒˆH~`^5àÄ‰"‘(00°¹¹¹¾¾¾K—.gÎœáh“{’Ñ)Œç—HÏ[2ÛðœcéOî    IDATñ¸#Uµdô´6Åg+]ÇÅ¥ÞLcÔŒvò2+š¾ÌjÅÄÄ¨}ý£Z<ôÈ�a˜ââb;;;‘H4sæLRx¹’qãÆÑÆ�55%nyK¡ººš}ô†ªððpµ/dÓ©³j±w*ðìx¿þQÓZggç+W®ð�íüÜÐÐ@D‡Rûe©¬¬ìÔ©>|˜]²k×."êÒ¥‹Ò×V‘Ú¦ä“Ì¥K—ø‡µöë[8ÛpÏx|"Ué4zÜ½Ó”˜Ö1ÑiÌùt
-Ô2�Q3ÚÉË¬p™­­­ÝÜÜ‚‚‚Þ|óÍsçÎiÚœã+ÍgjÐ5CÖ’%KäMíÞ½[í¶ìc5¨©©¦¦¦=z´p†‘Édiiiáááîîîb±ØÝÝ=<<<--Mõ%ÈÜ}ç?2äßq6Ãôôô¨¨(///±Xìàà˜�� tS'Ÿ0­ŸiNNÎÒ¥K‡îêêjiiéààÐ·oß…*> ‰OÈ˜çg±XÌþ„«~YØGj>\¾D&“±WH¿ôÒKšäždäÂñãù]SÅÿKª÷lÃ=ãñ‰T¥ÓèqÌªw»óÙJ§¡ãN´1œ‰‘4hPbb¢Ð‰  Àÿ0æù¹cÇŽ_~ùå«¯¾*t"`HW®\yî¹çzôèñÇ�¨':  €VÁÞ't`02™ìÖ­[.$¢àà`¡Ó�P\‚i‰DkMâ |ëÁà ¨emm-‘H„ÎÆÒÒ’ý‡��Í¢E‹„M8à9—  Ð>577ËËh:tè0nÜ¸3gÎôíÛWè\@#¹Ó€Ão08 jÉd2Ci?0×™
-|ë   }Â‘K A ¸ €ö©¹¹Y,Æ	:€¶†â  Ú§êêjö-¬ Ð–P\ @;TWW'‘Hœ��…NÀì ¸ €vèÑ£GD„â í¡¸ €vÅ%€PP\ @;TZZJDnnnB'`vP\ @;ôçŸÚÙÙyxx�€ÙAq	  íPaaaçÎ�¹_Ž
- ­Å%  ´C÷ïßïÒ¥‹ÐY ˜#—  ÐÝ»wÅ%€ P\ @;ôÛo¿�€9Bq	  íMeeå_ýÕ§O¡0G&óÒÕÜÜÜ””¡³  €ÿñàÁ¡SP#//�ˆP\ÂdŠËÓ§OŸ>}Zè,  Àäåå9::vîÜYèD Ì‘i—YYYB§ ÐêFŒááá‘‘‘!t" &ïÊ•+Àsˆ �k.ŒÅ¼yó~øá‡’’¡0yçÏŸ6l˜ÐY ˜)— ÆbÒ¤I...Û·o: ÓV]]ýÛo¿<XèD ÌŠK cacc3cÆŒ­[·Êd2¡s0a—.]’ÉdC‡: 3…âÀˆ$$$Ü»wïÄ‰B'`ÂÎ�;×¹sgooo¡0S(.ŒH�=F�•œœ,t" &ìøñãcÇŽ: ó…âÀ¸,Z´èÈ‘#ìSú @WÕÕÕ/^7nœÐ‰ ˜/— Æ%22ò™gžY¿~½Ð‰ ˜¤ÿûßÍÍÍ¡¡¡B'`¾P\‘H4þüÔÔÔòòr¡s0=gÎœ	ôðð: ó…âÀèÌœ9ÓÞÞï;ÐCfffxx¸ÐY ˜5— FÇÞÞþÕW_MNN–H$Bç`JrrrnÝº/t" fÅ%€1JHH(++KKK: S’‘‘Ñ¥K—   ¡0k(.ŒQ×®]gÎœù�ü/øÛ·o_ll,^) ,— Fê£�>úë¯¿víÚ%t" ¦!//ïÖ­[±±±B'`îP\©®]»N›6mÅŠR©Tè\ L@jjj·nÝF�-t" æÅ%€ñZºtéŸþ¹{÷n¡0vÍÍÍ;wîœ:u*Î‰NÄ0ŒÐ9 €F¯¼òÊùóçoÞ¼)‹…ÎÀx?~<<<<??¿gÏžBç`îpäÀ¨}ðÁwîÜÙ¿¿Ð‰ µ�;w<•%€1@q	`Ôz÷î=iÒ¤�?þ¸©©Iè\ ŒTeeåþýû§OŸ.t" @„âÀø­Zµª°°pãÆ�B'`¤¶nÝjee5cÆ¡ "— ÆÏ××wþüùË—/¯¨¨: £ÓÜÜ¼iÓ¦W^yÅÑÑQè\ €Å%€IøðÃ-,,V®\)t" Fç§Ÿ~*,,LHH: ø?¸[À4$&&.Y²$//¯G�Bç`Dbbb?~üóÏ?� ü— ¦¡±±Ñßß?88xçÎ�Bç`,nÝºÕ»wïôôô‰'
-� ü— &c÷îÝÓ§O?þüàÁƒ…ÎÀ(Ìš5ëòåË×¯_Ç³ÓŒŠK SVRRrõêU+++¡sXaa¡ŸŸßÖ­[qŸ8€QÁ= ¦dÓ¦MwîÜY»v­Ð‰h'‰p0Éœ566.Y²¤[·nVVVütú±ILLôññyé¥—ôÍ ZŠK Sâçç÷á‡þë_ÿºsçŽÐ¹ pY¾|ùêÕ«ïÝ»'•J[£ý‡nÝºuþüù8Š`lpZÀÄH$’gŸ}¶sçÎG�:.ìñ'Ì0f«G�wîÜÉÈÈøÛßþfmmÍs+þ?6‹/þöÛoïÞ½Û¡C‡%
- ††âÀôdee�9òûï¿7æ;dQ\š9±XÜÜÜ,“Étº:‚ç�MQQQÏž=—/_þÞ{ïµ(K h8-`z‚ƒƒgÌ˜ñöÛoëôÎöj¶úúúùóç{zzŠÅbvyVVÖôéÓŸ~úi++«§žz*,,ìøñãª677úé§¾¾¾666½{÷Þ¶m›bÌÝ»wcccÝÜÜêêê”ö.‘H>ÿüóØÛÛÛÛÛ0`Íš5Š/Lg÷òäÉ“Y³fuìØÑÛÛ;))‰ˆ*++_~ùe77·¥K—r—Zû"•J“’’äèèhoo?zôèÃ‡k]EDß}÷ÝèÑ£���mllüüüÞÿýÇ�Ë7Ü´iÓÐ¡C=<<¬­­}||âããOž<É½Jw°Ú‹•Iïä?0Ddaa!O’Oxúì³Ïžzê©·ÞzK× -0 `‚ªªªºví.“ÉxnÂ~åãââ”¾þªÓ‚H$:xð Ò†³gÏV
-Û·oP^^þôÓO+®’ReFŽ©º£��‰D¢¸—^xA1àÐ¡CÏ?ÿ¼â’ÔÔT­}ÔÔ‰D¦Ã½J&“M�:UuU@@ÀãÇ�†Qù¶«Tq«ÝPq¡ñôNS¼Ö.hŠQRPP`eeµ~ýzî0 
-ŠK SõË/¿XZZnÜ¸‘g<ûk»S§N™™™555òåG�}ôè‘D")**Z·n)mØ¹sçÃ‡?~ü¸°°0::šˆ‚ƒƒÙ€÷ßŸˆºvíúóÏ?×ÔÔœ9s¦K—.ŠUÂªU«ˆÈÙÙùÛo¿-+++++ûæ›oØKåV¯^­¸—\»víñãÇo¼ñuìØQiÉðáÃ9úÈÝ—/¾ø‚ˆ“’’îß¿ßÐÐpþüùØØXîU[¶laÇmß¾}>¬««;þ|PP-Y²„a{{{"Z¶lYQQ‘D"©¨¨8|øpXX÷*UÜÁZ+3cë�jÂ†*.çÎ�Û©S§ºº:î0 
-ŠK öá‡ÚÚÚ^»v�O0ûk{ÿþýJËOž<ååå%?QND¶¶¶J?~\¾„½WÝÉÉ‰ý¯¿¿?ýðÃò€(V	ýúõ#¢mÛ¶)îwëÖ­l5©¸—ììlö¿%%%j—xxxpô‘»/ýû÷'¢””Õ9V±�¬ÿå—_QÏž=åÝ{ç�w¶nÝzûömyÇ*UÜÁZ+3cë]+——/_¶°°Ø¹s'G Å%€	kjj2dH@@ Ÿ£8ì¯íÊÊJÅ…iiiš®xSÚ°¾¾^¾D&“)ÆØØØQUU•< ²²R1ÀÖÖ–ˆ>|¨¸ë²²2"²³³SÜKCCƒÒ.”–ˆD"MÔÚ;;;"*++SÝ–c{|ÎÒÒÒÒÒÒÂÂ‚½ˆ�mÖÊÊŠa˜sçÎùúú*î.<<¼´´”{•*î`­•™±õN5a­]Ð£($$$((ˆÿÕ  ÐöP\˜¶?þøÃÉÉiáÂ…Z#ÕþÚîÓ§½þúëùùùlùøäÉ>¿ï°¸äN˜»òÐÚýÊ/v•&lLSSÓ¹sçV¯^ïèèHDS¦LÑºJG0[ó)Uò»¦Œ³wª–Ö.¨ÝJQff&ýûßÿÖ  Æ Å%€Éûê«¯,,,8À¦ö×6[>zôH¾äÐ¡Cº—<O‹ïØ±C±…o¿ý–TN‹s'Ì]yhíË€ˆhË–-ªÛr¬4hýç?ÿÑ´_%ì9eWWW�Viöòò"¢;wîÈŽ;fÌ½Sý°´vAíVrMMMþþþì¥¢ `ÌP\´o½õ–­­íÅ‹9bÔþÚöóó#¢?ü°¢¢¢ªªjß¾}žžžº—<oèqqqÙ±cÇÃ‡>|¸mÛ6gggR¹¡‡;aîâRk_¾üòK"rrrÚ¸qcQQQCCCvv6[¬p¬b‹`//¯-[¶Ü½{·®®®¡¡!???%%eèÐ¡ÃŒ1bçÎ�÷ïßojj*++ûüóÏ‰ÈÞÞž{•*îà1cÆQtttaaauuõ‘#G:wîlÌ½Sý°´v�û#NII±²²ÊËËÓô  FÅ%@{ •J#""¼½½‹ŠŠ4Å¨ýµ½zõjú_3fÌÐµ¸äó(¢#F�ŠÑ£G766jÚ‹®Å¥Ö¾H$’±cÇª¦Á½Ša˜ùóç«®’¨]þÚk¯q¯Òôi
-þñÇ•VÉŸdœ½SÜÏ.p|Ä¥¥¥...ÿûß5}ú `<P\´•••={ö|î¹ç4ÝÜ£ö×¶T*]³fMÏž=mllºwïþÉ'ŸÈlÎ½¡ÒÂ;wîDGG;88¸ººÎ�;·¶¶V) ¡¡aÕªUýúõ³µµµ³³ë×¯ßçŸ.¯,Õî…Ï]û"‘HÖ¬YÃ¦áàà0zôhùÙ|ŽUÃœ<y2>>¾S§NVVVvvvï¾ûnNNÃ0ÙÙÙsæÌéÖ­›•••››Û°aÃ¾þúk©TÊ½J•Öào¿ýÖßßßÊÊªsçÎŸ|ò‰ü�ÝÆÙ;µ–Ö.húˆgÏžíëë[[[«éÓ ã�×?´ùùùC†‰ŠŠJMM: ƒÉÎÎ>|xzzºâ+  Àh¡¸hW:4qâÄ5kÖ¼ûî»Bç` 2™lÈ�!NNN§N�: àE¬= LGLLÌÊ•+ß{ï=WW×™3g
-�@K­[·îúõëW¯^: àÅ%@{óþûï×ÕÕÍ™3ÇÆÆæ¥—^: ýÝ¼yséÒ¥ÿüç?{÷î-t. ÀN‹´CÃ$$$lß¾ýÐ¡CãÇ�: }03zôè'Ož\¼xQñ}ž `äðuh‡D"Ñ¦M›$ILLLZZZll¬Ðè,%%%;;ûÒ¥K¨,LŽ\´[2™ì�7Þøæ›o¶oß>mÚ4¡ÓÐÁƒúôéóÊ+¯¬[·Nè\ @7øs Ý²°°øê«¯lmmgÌ˜QZZŠûÇÁT0óÚk¯¹ºº~úé§Bç :Cq	Ðž‰D¢ÄÄÄ¾}û&$$äææ~ýõ×ÖÖÖB' Å—_~yìØ±ììl¡s �á´8€Y8qâÄ¤I“ž{î¹ŒŒö¥Þ ÆéâÅ‹#FŒX¾|ù’%K„Î ô�âÀ\Ü¸q#22ÒÑÑ133Ó××Wèt Ô¨­­}þùç]]]þùgKKK¡Ó }X�  ´‘ÀÀÀ³gÏZXX_¼xQèt ”13kÖ¬ÊÊÊÝ»w£²0](.ÌH—.]²²²ú÷ï?bÄˆµk×âÄ•üã™™™?þøcçÎ�…Î ô‡Óâ æ(%%eþüùÁÁÁ»wïöôô: :xð`\\Ü–-[fÏž-t. Ð"(.ÌÔåË—'Ož,‘HöìÙ,t:`Ö~þùçˆˆˆ¹sç®_¿^è\  ¥pZÀL4èÊ•+ƒ		Y¶l™L&:#0SYYY‘‘‘±±±‰‰‰Bç €#— fM&“-_¾|ùòå/¼ðÂW_}åææ&tF`^rrrF�=|øðƒZYY	�  ŠK  ãÇ�Ïš5K&“}ýõ×ÑÑÑB§æâ�?þ3fŒ··÷É“'�œœ„N §Å€ÂÂÂnß¾ýâ‹/ÆÆÆ¾øâ‹åååBgí_nnîðáÃ{öìyúôiT– í	ŠK  "²··OJJ:vìØÅ‹<ÈÜÔÔÔf‰A»tùòåQ£Fõë×ïðáÃxÇ#@;ƒâ þ¿qãÆ]½zuÜ¸q'Nœ={vii©jÌ…&Mš$•JÛ>=hNŸ>6`À€ƒÚÛÛ� ŠK ø®®®;wî<tèÐéÓ§ýýý7lØÐÜÜ¬ðþûï:thÖ¬Y¸bô°}ûöˆˆˆqãÆ=zÇ,Ú%—  FTTÔíÛ·?øàƒ÷ß¿OŸ>Ç�g—Ÿ:uêìÙ³D´{÷îš#˜†aþñ�Ìš5ë­·ÞÚ³g����Ð@«@q	 êYYY-Y²äÆ�Ý»w?~|TTTaaáÂ…Ù—>Ëd²äää?üPè4Á4<yòdÊ”)+V¬HLLüòË/-,ðÛ ÝÂ£ˆ @†avìØ±xñâ:Ü½{WqÒ‰D+W®\²d‰€é�ñ»qãÆÄ‰kjjöíÛ7bÄ¡Ó€Ö…â x)++0`Àƒ”&‘H´yóæ×^{M¨ÄÀÈ>|xúôéÝ»wÏÈÈèÖ­›Ðé @«Ã‰	 àåÈ‘#¥¥¥ªŽ2óúë¯ïÝ»W�¬À˜Õ××ÏŸ??&&fâÄ‰çÎ�Ce	`&pä ´kllôõõ}ðà�¦ KKËÃ‡GDD´eV`Ì²²²¦OŸÞØØ¸}ûö°°0¡Ó€¶ƒ#—  ÝÖ­[9*K"’Édqqq—/_n³”Àh555}öÙgcÇŽõóó»té*K sƒâ ´hnnÞ»w/{“8Y[[[[[+Å0#‘HBCCoÞ¼Ùæ	‚¹råÊóÏ?¿råÊµk×?~¼S§NBg m§Å¡Måææfgg�è£¹¹¹¢¢¢TÁƒ?~LD"‘ÈÚÚš­/�œœþþ÷¿?õÔSBç¸páÂŽ;zõê5}út777¡Ó�ÙÛÛ¿üòËBg&Å%´©ÄÄÄ…
-�  ¨áããS\\,t`òÄB' f“W»WUUÕÐÐàíí-t"  ƒÄÄÄ5kÖ�´(.ÀÀ\\\„N  ƒz    À`P\   €Á ¸    ƒAq	    ƒâ    Å%    ŠK    0—    `0(.   À`P\   €Á ¸    ƒAq	    ƒâ t&‰D"‘ê–­­­‡‡Ç�!CæÏŸŸ��ÍgsµjñO’a˜ŒŒŒ˜˜oookkkGGÇ¾}û&$$\¸pA),===22ÒÓÓÓÚÚÚÓÓsÂ„	{÷îeFmV~~~R©”Ïhð�ÔÚSî¾p4¢ÔZKR%"©Túí·ßŽ7ÎÝÝÝÊÊªcÇŽœ?þÅ‹Õ|  `¶€6´nÝ:¡³€–R�=8&™ØØØªª*îÍÕ¶ß’)«ºº:<<\k#555&LPQSS£6«­[·òþ‘IjíG#J­µ$Õ‡2Dk¶`º0?ƒ¡àÈ% ;­H¥ÒŠŠŠ¬¬¬E‹ÙÚÚ<xpâÄ‰¿Hµ5%<·}ùå—úé'—/¾øâöíÛ���µµµyyy)))Ã†“‡Íœ9óÇtvvNLL,,,”H$÷ïßOJJrqq9zôèÌ™3Õ6þé§Ÿ655ñIƒg$wOµöEí†ºŽwª2™ìÅ_¼pá‚��ÏæÍ›ïÝ»'‘Hž<yrãÆ�M›6q� `ŽZTšè·ª³‡¦ùäêÕ«:t ¢ôôt­Áü¸=z”ˆ:vìxóæMŽ°'N‘ƒƒCnn®ÒªÜÜ\":yò¤RVD´yófŽlu�ly_x¶©wªû÷ï'"OOÏ¢¢"ži€ÉÁü†‚#— ÐŠ°dÉ"Ú³gO›ítÇŽD´dÉŽ°mÛ¶ÑâÅ‹•V.^¼X£èã�?&¢+V466r§Á?’Ï¾´�ÖTwíÚED~øa§N�Z/ hP\@ëzá…ˆèÒ¥Km¶Gö."v¿ÎŸ?ODñññj×ÆÅÅÉ›R4iÒ¤Þ½{ß¿Ë–-Üíó�äÀ³/-¤5Uöã‹ˆˆhÕ4  }@q	 ­«[·nDT^^®ë†zß-^ZZJD¾¾¾Üa< ¢=z¨]Ë.ÿë¯¿”–[XX°ÇùV®\ÙÐÐÀÑ>ÿHŽžòìKiMµ¬¬ŒˆºtéÂ‘v«f &Å% ´.™L&t
-6yòdÿ’’’Í›7*Rp|Ret¿+ ÌŠK h]÷îÝ#"www]7T{�8Ÿ===åûåàååEDj×²Ë½½½UWYXX|ôÑGD´jÕªºº:Ž]ðŒäè)Ï¾´wªlþù§Ú´[;7 0-(. u<x�ˆ‚‚‚Úl�C‡•ïWkXFF†Úµìr6FÕ”)SzõêUZZšœœÌ½þ‘Ijí‹Ap¤Ê¦qøðá6H L^kÜ‚ 	uÑ>¨Îšæ“œœöQDßÿ½Ö`þÜØÇ÷8;;çççs„;vŒˆuz‘ü¿©©©Däææ¦u4øGêÝžmê�*›ÆSO=UPP ÓÁ„`~CÁ‘K 0°æææªªªsçÎ-^¼xÈ�!ÕÕÕ!!!'Nl³ÂÃÃ£££=z4tèÐuëÖÝ¹s§©©©¾¾þ÷ßß²eËðáÃÙ°°°°˜˜˜'OžŒ9rýúõEEEMMMÅÅÅ6l9rdmmm\\ÜØ±c5íeêÔ©~~~|nTâ©w_ESªlƒ^·nû,÷šššßÿ}õêÕ†Í LžÐÕ-˜üeÜ>¨Î“LLLŒÚ×?rÌH-Ÿ²x¾þ±ººzüøñjcÂÃÃÕ¾þQqÉöíÛÕ&¦k¤Ö$ùô…cï«ø§Z]]©6‡íÛ·«Ý#˜ÌÏ`(8r	 fmmíææôæ›ož;wîàÁƒÎÎÎmœƒ““Ó�?þ˜žžååå%‹]éäätôèÑ´´´ððpwww±Xìîîž––öã�?:::rïeÚ´išžd¤w¤Þ}1M©:999rä‡~ˆ‹‹{úé§mllœœœ¸téÒ‚‚‚W^yÅà™ €‰1¸ÑÚPbbâš5kŠ‹‹…N  þæg0¹    ƒ�  €n¸_ƒ³1  ÂÂ‘K    0¹ ƒc“  ÆG.   À`P\   €Á ¸    ƒAq	    ƒâ    Å%    ŠK    0—    `0(.   À`P\   €Á ¸    ƒAq	    ƒâ    F,t`vêêêRRR„Î  þGvv¶Ð)@;�âÚÚ£G�æÍ›'t   ÌÇÇGè =1#t  &)11qÍš5ÅÅÅB' `DpÍ%    ŠK    0—    `0(.   À`P\   €Á ¸    ƒAq	    ƒâ    Å%    ŠK    0—    `0(.   À`P\   €Á ¸    ƒAq	    ƒâ    Å%    ŠK    0—    `0(.   À`P\   €Á ¸    ƒAq	    ƒâ    Å%    ŠK  #"R ‹½¼¼bbb~ùåýÂ†ÉÈÈˆ‰‰ñöö¶¶¶vttìÛ·oBBÂ…¸Óà¹!Ã0ééé‘‘‘žžžÖÖÖžžž&LØ»w/Ã0jöóó“J¥ªËõ‹TuïÞ½yóæõèÑÃÆÆÆÞÞ¾oß¾,¸té’j;jq¯UãÈGS�ä–��Ï¤I“~ýõWî¾ ˜0  ô²nÝ:Ã¶©v¢¶°°ÈÌÌÔ5¬ºº:<<\�ÉŸç†555&LPQSS£6á­[·ª.×/RÉÕ«W;vì¨µ³šúÅ†q¬UjMS><÷heeõïÿ›£; ¦G. Œ;A766æææŽ?^&“-[¶L×°—_~ù§Ÿ~rqqùâ‹/nß¾ÝØØX[[›———’’2lØ0Ž½óÜpæÌ™?þø£³³sbbbaa¡D"¹ÿ~RR’‹‹ËÑ£GgÎœ©¶ñO?ý´©©‰Ï ð�d-Z´èñãÇýúõ;vìXEEEccc~~~rrrPP�j°ÚßˆªËÕóOIu�W®\=ztSSÓÇ¬_S ÆÎ`e* €™i½#—ŠKŠ‹‹‰ÈÖÖV§°£G�QÇŽoÞ¼©S<7<qâ988äææúEåâ    IDAT*­ÊÍÍupp ¢“'O*%@D›7oæèÿH%vvvDtëÖ-îêô»�#XÓ*M=R\rÿþ}"²··ç™€iÁ‘K €–b/§«¯¯Ÿ?¾§§§X,&¢øøx‘H(“ÉØ0™L(‰&Ož¬ë.u
-Û±c-Y²Äßß_§ñÜpÛ¶mD´xñâÀÀ@¥U���‹/–Ç(b�Õ­X±¢±±‘;þ‘r...DT__Ï3 Z	ŠK  Ã˜>}úÆ�ËÊÊš››‰(99ÙÕÕõ·ß~ÛµkðÝwßýöÛoÉÉÉ|”H$7nÜ˜={6EDDè–��MD/¼ð‚®½à¹áùóç‰(>>^íÚ¸¸8ySŠ&MšÔ»wïû÷ïoÙ²…»}þ‘r111D4|øðÙ³gïØ±#77—ý ŒŠD"¹víÚ+¯¼BDƒ:€Ö!ô¡S  S%?-ÎN§�:uÊÌÌT¼‘eçÎ�DÔ­[7‰D"‘HºuëFDû÷ïçhSíD=zôèòòr�Âlmm‰¨¾¾^×NñÜ�;¬®®Žˆììì”ff÷îÝDäããÃn«ú›ˆ¤’šš¶¾”ëÐ¡ÃÌ™3ïÞ½«Ú>Ï_ˆ;å¿‰Ú}á†hÇP\ èI©¸T[5FFFQrròÆ�‰hêÔ©ÜmªV!nnnÙÙÙº†mqÙÜÜÌžp_·nÃY\j�TëÆ�«V­š8q¢¯¯/»‰³³óõë×•Úª¸´´´ôòòŠ‹‹»té’Ö¾ ˜(—  zR*.+++UcŠŠŠ:vìèååååååíí]QQÁÝ¦biRRRòöÛo‘««kII‰Na]»v%"]ïæá¿![ºÝ¸qCíÚÜÜ\"êÞ½»Ú„¿ûî;"òôô¬­­å(.µFj•ŸŸJDááájÛ×Š#˜½²¶©©Iq¡D"!"±XÌ³€v	×\ {C‰WWW++«ºº:wwwž÷å°¼½½“’’"##+++—.]ªSØÐ¡C‰èàÁƒ:v‚ï†lXFF†Úµìr6FÕ”)SzõêUZZªõÚSþ‘jõêÕ‹½2áìÙ³zlÎÍÕÕ•ˆØ›ôåØÿ>õÔSß€)ºº 0UJG.ÕÆÌŸ?ŸˆvìØ±råJ"Z¼x1w›ªMåçç‹Åb±XœŸŸÏ?Œ}¢�³³³âV|ðÜðØ±cDäèè¨Ó£ˆäÿMMM%"777ÕŽð�ä#//�þ÷¡?:µÃ<nÜ8"úê«¯nØ°�ˆÂÂÂx6Ð.áÇ @OZ‹Ë'N°O#jnn®¯¯ïÒ¥‹……Å™3g8ÚTÛÔk¯½FDñññ:…EGG‘««ëÚµk
-
-$I]]ÝÍ›7Ùg¡säÀsCöî—¤¤¤û÷ïK$’¢¢¢õë×³Gpãââ8ú%•JýüüÔæà©¤ÿþ+W®ÌÎÎ®¬¬ljj*++;pà {ÕfHH÷ÐiÂ¼}ûv"êÐ¡ÃŽ;ÊÊÊÊÊÊ¶oßîääÄþ-Á³€v	?î  zâ..+++;uêDD‡f—°Ï$êÒ¥KUU•¦6Õ6U\\lgg'‰äw�ð	kí×?VWW�?^mLxx¸Ú×?*.a‹3­Å%G¤Ú¡Såìì|åÊ­ajçØiss³ÚQŠˆˆ�Éd<h—ðã  'îârÊ”)D4|øpù™LÆ¾Šð¥—^ÒÔ¦¦BdÉ’%DªS˜L&KOO�ŠŠòòò‹Å���			ª·Ÿ+á¹¡L&KKKwww‹ÅîîîáááiiiJÕ•Ú„›ššzôèÁ§¸Ô©$''géÒ¥Ã‡wuuµ´´tppèÛ·ïÂ…UÛoyqÉ0LccãêÕ«û÷ïoggggg×¿ÿÕ«WK$�hDŒ¾¯I 0s‰‰‰kÖ¬Qº¥ ÀÌánq    0—    `0(.   À`P\   €Á ¸    ƒAq	    ƒâ    Å%    ŠK    0—    `0(.   À`P\   €Á ¸    ƒAq	    ƒâ    Å%    Œˆa¡s  0—/_mnnfÿ+“Éd2™X,fÿ+‰bccSSS…K @xb¡  0Ï=÷œ££cqq±¦€ÈÈÈ¶Ì Àá´8  _"‘hÖ¬YVVVj×:88ÄÄÄ´qJ  ÆÅ% €¦M›ÖÔÔ¤ºÜÊÊ*..ÎÖÖ¶íS 0*(. tàïïß»woÕåMMMS§Nmû|  ŒŠK  Ý¼òÊ+ªgÆ]]]CCCÉ À¨ ¸ ÐÍK/½$•J—X[[O�:ÕÒÒR¨”  ŒŠK  ÝtéÒ%((H$É—H$’—^zIÀ”  ŒŠK  �Í˜1Cñ8e§N�†*`>  ÆÅ% €Î^|ñEù(¬­­gÌ˜¡x  Àœ¡¸ Ð™»»{HH{ðçÄ ¡¸ ÐÇôéÓÙƒ—Ï<óLß¾}…N ÀX ¸ ÐGLL{ärÚ´iBç `DðnqhS¹¹¹ÙÙÙBg`999)))Bç` ööö/¿ü²ÐY€ÉÉ¯Ih‰‰‰.:  PÃÇÇ§¸¸Xè,ÀäáÈ%´5L^Ðn466îÛ·oúôéB'` ‰‰‰kÖ¬:hpÍ% €žlllp @	ŠK  ýáñ–  JP\   €Á ¸    ƒAq	    ƒâ    Å%    ŠK    0—    `0(.   À`P\   €Á ¸    ƒAq	    ƒâÀŒ0“‘‘ãíímmmíèèØ·oß„„„.(…¥§§GFFzzzZ[[{zzN˜0aïÞ½Ã(5(‰D"‘ŸŸŸT*U]Þ’Hµø÷…£¥ÖøìNq¡­­­‡‡Ç�!CæÏŸŸ��­Óøë4¤ûÁ‹Å^^^111¿üò‹¦°ˆˆÅåjYnØ°a"‘hðàÁ�ÒÚk¥…“'O‰D£G�VêŽL&5j”H$š2e
-G› `¼€6´nÝ:¡³0SÕÕÕáááZ§‚ššš	&¨�‰ˆˆ¨©©QlS¾jëÖ­ªË[É‘¤Ö¾p4¢ÔŸÝqÄÄÆÆVUUñÿäjý>E™™™ªab±ØÊÊª¢¢‚]X^^Î.QÍ�•——'oóÆ�š:¥µ×JËËË½¼¼ˆhíÚµŠË¿üòK"òöö–gmó3
-ŠKhS˜¼MD..._|ñÅíÛ·kkkóòòRRR†&‹‹‹#"ggçÄÄÄÂÂB‰Drÿþý¤¤$"Š‹‹SlS^søúúJ$¥å-‰4H_ø´ÉgwŠ1R©´¢¢"++kÑ¢E¶¶¶D"“É¸[PjŠÏ8èñA°ÿnllÌÍÍ?~<©†±uù–-[Ø…)))lÁªi(-ZDD666D´páBîñáèµêòÃ‡‘­­íÍ›7Ù%yyyì¨*•ÅÐ0?ƒ¡ ¸„6…ÉK(G�%¢Ž;Ê‹«uâÄ	"rppÈÍÍUZ•››ëàà@D'Ož”/d‹†€€ "Ú¼y³ÒrÅÍu�ly_x¶©kq©èêÕ«:t ¢ôôt�2Ñ:ú}ŠaÅÅÅlÝ¦º÷mÛ¶Qhh(»pìØ±D´}ûvµÝ”H$DôÕW_‘››[cc£ÚNiíµÚU³gÏ&¢çŸ^*•655Ñœ9s8ZƒV‚ùÅ%´)L^Ba/_ûì³Ï¸Ã¦N�JDË–-S»vÙ²eD4mÚ4ù¶hHKK#¢Î�;744(.WÜV×È–÷…g›-).†Y±bMœ8Q§L´Žƒ~„b[\º¹¹©î½ªªÊÚÚÚÒÒ²´´´´´ÔÒÒÒÚÚúÑ£Gj»™‘‘ADýû÷g¦_¿~j+é–—�?îÚµ+-_¾ü_ÿúùúúVWWs´­ó3
-ŠKhS˜¼„ÂþþÖz¨Ï××—4\WÇ0Lnn.uïÞ]¾„-š››{÷îMD6lP\®¸­®‘-ïÏ6[X\²×#vîÜY§L´Žƒ~ûoÅÓâÓ§OWÛ‘¨¨("Ú´iSrr2EGGkê&{Ýçúõë†IJJ"¢ððpµ�ÒÚkMkOŸ>-‰¬¬¬¬¬¬D"Ñ™3g8š‚ÖƒùÅ%´)L^Ba¯c«¯¯oIX]]ÙÙÙÉ—È‹†Ý»w‘��»-GÉÈ3R-�ú¢vïšVqìŽ{óúúz¥1á™	÷8è÷A(=ztyy¹Ú½÷ÝwlÀ¨Q£ˆh×®]j»YTTdiiiccÃÞ[SQQacccaaQXX¨¶Y­½Öäí·ßfc,XÀ­
-ó3
-E 0yòdÿ’’’Í›7*Ò$Èd2ý6líqpss[¹råSO=¥vmtt´­­í/¿üröìY;;;ö)UÛ¶mknn~á…\]]‰ÈÕÕ566V&“É/Ð4”U«V±ÿX¹r¥a[€¶‡âÀ,xzzÑ½{÷¸ÃØGÃ¨]Ë.÷ööV]eaañÑGÑªU«ØãjšðŒTû×°N}Ñ	Çî¸±i¸»»ëºGîqÐïƒ`Ó.))yûí·ËËË###ÿúë/µ-899M˜0A&“Éd²	&8::ªÆ0ÃÞúÃÞsÃš3gmß¾�çøðdgg§ô 0](.ÌÂÐ¡C‰èàÁƒ|ÂØ{8T±ËÙUS¦LéÕ«Wii){þ‘IjíKÛ`Ó`ïqÖÇ8´äƒðööNJJŠŒŒ¬¬¬\ºt©¦½Ož<YéJÎœ9sçÎ"
-“?b=,,ŒˆîÜ¹sæÌîÞ€ùj�³í êáš¡°�ïqvvÎÏÏç;vì9::ê÷œÔÔT"rssS�^ôŽÔ»/<Ûä3jŠÉÉÉaEôý÷ßë—‰¦qháÁ0L~~¾X,‹ÅŠ£¤V[[ëàààààP[[«¶öŽuM¦N�ªu|øðŒ�V…ùßdhS˜¼Ä^WçêêºvíÚ‚‚‰DRWWwóæM¥�ÇÄÄ‘‹‹KRRÒýû÷%IQQÑúõëµ>»›a©Têçç§öoW½#[Ò>mêZ÷H¥ÒÊÊÊ¬¬¬÷Þ{Oï‡¨ËÿË1-ù X¯½öÅÇÇóì¬âÚªª*[[[‘Ht÷î]¥°ÂÂB[[[ù«‰P\¶˜ŸÁPðM†6…ÉK@<_ÿX]]Í>ÅFUxx¸Ú·*.Q¼Õ£%‘Z“äÓŽ½ë´;Ž˜˜˜=^ÿÈgZøA0S\\lgg'‰.]º¤u”ÖnÜ¸‘´®dÜ¸qD´qãFÅ9Æ�ÿ kÊÚ æg0|“¡Maò–L&KOO�ŠŠòòò‹Å���			ÙÙÙJaiiiáááîîîb±ØÝÝ=<<<--MõøœjAÐÔÔÔ£GÕåºFr"üû¢iï:íNq¡µµµ››[PPÐ›o¾yîÜ9µmrà?LË>Ö’%KH¡Fä.à×8�ˆvïÞ­6’}ŽÒÀ�7äCþƒ¬)7h˜ŸÁPDŒAïøà–˜˜¸fÍöÝ!  `<0?ƒ¡ànq    0±Ð	  ´"‘ˆc-N€™À‘K    0¹ 0›  ¹    Bq	    ƒâ    Å%    ŠK    0—    `0(.   À`P\   €Á ¸    ƒAq	    ƒâ    Å%    ŠK    0±Ð	€Ù©««KII:Cb¦´´ÔËËKèD @�êêêªª*‰D"•J‰¨¡¡A&“Q]]Éd²††"’J¥���DÔÔÔ4|øð§Ÿ~ZÐ¬���-t
-ÐN ¸„¶öèÑ£yóæ	� €F§OŸ:aøøø�´"†a„ÎÀ”8p ==ýÂ…–––aaaQQQaaa¾¾¾B§ ¥¦¦¾öÚk2™¬©©‰#ÌÒÒrÄˆgÎœi³Ä Ú— ¼”””¤§§ïÛ·ïÂ…¶¶¶¡¡¡ÑÑÑûÛß<==…N x¹}ûö/¼�ŸŸÏžWËÒÒ299gW ZÅ% —²²²ŒŒŒ½{÷ž={ÖÑÑ1&&&>>~Ü¸qvvvB§ :khhxÿý÷7lØ ©ÿõgaaQRR‚?ZÅ%€�=bkÊÓ§OÛØØDEEMž<9""ÂÖÖVèÔ  ¥¾ûî»¹sçJ¥R¥C˜"‘ÈÁÁaìØ±³fÍš0a‚•••P˜4— ÿ#++kË–-éééÃ„‡‡Ož<9**ÊÁÁAè¼ À�~ÿý÷ØØØ‚‚ÅúR,Ož<¹´´ôôéÓnnn/¿üò¬Y³ÌÀ¡¸ "*//OMMÝºuëÍ›78gÎœ©S§º¸¸� ´–úúú7ß|sÛ¶mò%"‘¨°°ðé§Ÿ.**úî»ïvîÜ™——”��0eÊ\ÀŠK0w?ÿüó×_}àÀ{{ûiÓ¦Íž={àÀ�B' m�a˜õë×¿÷Þ{"‘H*•öë×/''G1àÒ¥K›7oÞ³g���Ý¬Y³^ýu???¡²0xC˜)‰D²sçÎgŸ}6$$äÁƒß~ûmIIÉ†PY˜‘H´`Á‚¬¬,www†a&Ož¬ôÍ7ß/]ºô‡~xæ™gÂÃÃ�;†ã2 P\‚Ù)**Z°`�‡‡Ç¼yóFŒqëÖ­3gÎL�:7ë ˜§ÁƒçææFGGÇÅÅ©pqqy÷ÝwóóóüñG‘H1pàÀ]»vq<ÒÀœá´8˜‘òòòO?ýtË–-–––sæÌyç�wºví*tR `b®_¿¾fÍš½{÷úøø,\¸pîÜ¹öööB'`DP\‚YxòäÉÚµk¿üòKggç7ÞxcÞ¼yÎÎÎB' &¬°°pÝºu[¶lqrrúûßÿ>oÞ<¡“0
-(.¡�«©©ùòË/×¯_ogg÷ÏþsÖ¬Yxv Jeeåúõë×®]kkk»hÑ¢à —Ðn1“ššúÏþ³²²òÝwß]´h‘“““ÐI@;TXX¸|ùòíÛ·÷îÝ{Ó¦MÁÁÁBg $ÜÐíSAAÁØ±cçÌ™]PP°lÙ2T– ÐJºté²eË–ß~û­S§N#GŽœ1cÆ_ý%tR ‚Aq	íMccã|Ð»wïúúú«W¯®_¿ÞÝÝ]è¤  ýëÕ«×Ñ£G8�••åïï¿aÃœó„ÓâÐ®äääÌ�;7//oÙ²e.‹ÅBg f§¾¾þóÏ?ÿì³ÏBCC·mÛæéé)tF m
-G.¡�`fíÚµƒvqqÉÍÍ]¼x1*K „��Ý²eË®^½ZRRòÌ3ÏìÙ³GèŒ ÚŠKh=z½dÉ’O>ùäØ±cÝ»w:# 0wYYYñññÓ¦M{ûí·›››…Î �à´8˜¼»wïFFF–——ïß¿7i€±Ù¹sç«¯¾:~üø={ö888�@«Cq	¦-//oìØ±ÎÎÎ™™™8`	 ÆéâÅ‹111™™™�;w:€Ö…âLXNNNXXX@@À�ðÆ 0fùùù‘‘‘¶¶¶gÏžuqq:€V„âLUAAÁ°aÃxàÀ;;;¡Ó Ð¢¼¼<88¸C‡§OŸvtt:€Ö‚âLREEÅ°aÃ:tèðóÏ?ã& 0ùùùÁÁÁÁÁÁßÿ¿öî=.ª2ÿøw†áæ \ä2 ¨¨™¢]Le×Ô4|)²¢™¹YúZ“ÍjÍÔÊLË
-E·€t×‚¨!^@CÍRÌ]Ó¨uwÓ¦K®bˆ„ÈEE†aÎï�§æ7{Î™3g†�™ÁÏû�^ÍsžsžïóœgŽ_Îmöísqq±w8 íO‹ƒóá8nÎœ9Z­öàÁƒÈ,À‰<øàƒ‡:zôhrr²½ch/H.Áù¤§§ñÅyyy�ÆÞ±  Xføðáééé+V¬øûßÿnïX Ú.‹ƒ“9wîÜðáÃW­Zµxñb{Ç `¥§Ÿ~úÌ™3gÏžíÖ­›½c°1œ¹'³`Á‚aÃ†½öÚk6ß²ÂˆJ¥Òh4ñññ'Ož´®ÇqyyyñññÁÁÁnnn^^^ƒNJJúöÛo¥Ã�¹"Çq{÷î�8qbPP�››[PPP\\ÜîÝ»….²Pû÷ï¯Óé„åÖÕ²bôxj¤Ãk;™Û´®iCÌ±±±Æå±±±ÖuÇì*¼
-ÒÛBÎÄhcsÖ­ÞÜÜ¼téÒ°°0WWW™«oÜ¸Q§Ó½üòË–Çh{í1ÉÁ‰X1�IzÚp Î£  @©Tž;w®=6.úQ*•‡¶´Ú�;wbbbL}!%b�¹b}}}\\œh�ØØØúúzÑ€322„åÖÕ´íèñ¶ï ƒ`ª]›àmÓTÖ5ÍÖR©T®®®555¬°ººš•X±M³«HwGfgÍ’91ÚØœuá-[¶ÌŠÙrèÐ!"úüóÏ-mÎæÚc’ƒ±nKTÆd§ÑÚÚ:xðàiÓ¦µÓö�¿'ÍÍÍÅÅÅ&L ¢aÃ†YZmòäÉDäëë»nÝºK—.577744\¸paóæÍQQQ1È\qêÔ©Däãã“ššZVV¦Õj¯]»–––Æ^ž7uêTaÀDÔ§O­V+ÚKkÚdôy¤#´9S�Z[‹åa[¶la…›7o&"Ã¹L›„g]}«GXæÄàmß¶Á›Â~Á!//¯¹¹Ù¢§OŸÞ¯_¿¦¦&K[´-$—÷9ë&0’KèNœ8ADgÏžm§í¿'×¯_'"‹ª9r„ˆ¼½½/^¼hQ 2W<vì©ÕêââbÞ¢ââböø|aa!/àððp"Ú¸q£DGä×²zôxd$šní‘\feeÑøñãYá¸qãˆhÛ¶mNš\ÊÿZÙ%¹d/Òëõ–®XZZêááññÇ[º¢m!¹¼ÏY7�‘\BgðÒK/EFFò
-Ùänll\°`A`` ‹‹÷ë9­ðððÖÖVV­µµ•%Ó§O7µ}Sé‘¿¿¿EÕfÌ˜AD~ø¡¥”¹âÌ™3‰håÊ•¢KW®\IDÏ>û,/àÜÜ\"
-5œ#1•WÉ©)dõèñ8È H·n¬´´”%=†ÉvöìY¶ÃB­­­ÞÞÞDTZZ*l…Ä/Òét«V­êÝ»·››ÛÀ�333¥CbkÕÕÕ¹¹¹¹¸¸Ü¸qãÆ�...nnn·nÝv°¹¹yõêÕC†ñôôôôô2dHJJŠðünCCÃ¼yóºwïîåå5eÊC_„ƒ&ñQ´³Ç�'"�FÓØØhXSSS�=ˆ¨°°Pþ×Ê¢±å:„Ásæö‚©&ÌŽªÁë¯¿îïï_WW'lTÞ×_=kÖ¬=z¨T*??¿§žzêË/¿”-såÊ•øøxµZÝ½{÷ùóç744ðz-sJÔ××?ÿüóÝºuÓh4©©©ÇÕÔÔ<ûì³>>>Ý»wë­·¤“³}iiiIMM}ôÑGÕjµ§§çèÑ£
-
-Ì.â8nÇŽ£G�ööövssë×¯ßâÅ‹oÝºeXqÃ†#FŒpuuž:uê±cÇ¤	IWÎ"a¡ƒôÎÔ–ÓÑ:¿,-p4­­­!!!+V¬à•³ÉÍ²IÃD¯¬¬ôóó#¢íÛ·³jÙÙÙDxóæMSMOŒ/ìþþ÷¿·¨ZïÞ½‰ÈÒÓ–òWìÓ§�?^tiqq1õíÛ—pkkë Aƒˆè“O>vÄÒšBVŒž(éÖEcþþûïÙÇ5kÖ°ûÜSRRXÉ÷ßOD½{÷mÅÔÁÝ°hÎœ9¼¥{öì‘ˆÇ°…I“&Ñ_þò—6ÑäÉ“…ljjzâ‰'„Œ;Ö�L°’ßýîwÆzöìi¸¡“·M‰�¦:EDëÖ­3îHzz:ýzg…ü¯•EcË;tƒ7»D›�3ªuuu~~~«V­6j*<c
-…âÀ�2£å8®ºººgÏžÆ‹{–U�?%Œ+|öÙg�?þ¸q‰á,±§LõE«ÕFGGëH/Òëõì/OžðððÛ·os'Ãº‹„¤+‹®h\è8½3UßlLÕùe‘ÄŽp/^$¢ï¾ûŽWÎ&w�=>lüÇŽ;ˆ(,,L«ÕjµÚ°°0"ÊÏÏ—hBô;6fÌ˜êêj‹ªyxxÑ½{÷,í£Ì¥«566‘§§'/`Žãrrrˆ($$„­+<.È¯)Ô–Ñ3Þ¾ƒ‚hl¦<÷ÜsD”žžÎ>Ž7îá‡:t¨á’4K’fÏž-ŒGô#¯<44ôàÁƒ·oß.++c÷þö·¿•ˆÇ°µ�;w²½0zôh"úôÓO…m­^½šˆ|||233«ªªªªª¶nÝÊ^ŽcHŽÙ*½{÷þÛßþV__âÄ‰^½zÑ’%KätGNgÙUïÀÀÀ»wï²’¦¦¦��úõk+ÿkeÑØ
-¦¦„ô^°bT�½ùæ›���Æw^š
-/66öÈ‘#·nÝÒjµåååü1ýï�Íf£]²d‰èÞ4Ä/J:ôÜ¹s·oßþãÿHDÞÞÞ¼’ßüæ7{Jº/ëÖ­#"//¯´´´k×®555}óÍ7S¦L‘^´eË6n{öì¹yófc%Ñ‚D  BIDATcã7ß|3lØ0"Zºt)Çq]ºt!¢•+W–——kµÚšššƒFGGK/’®,:ëŒ­w¦¦½DLÕùe‘ÉÝàHöïß¯T*xålr‹f�'N$¢6¬_¿žˆfÎœ)Ý	øûûYZÍa“ËÖÖÖ�»ÁKâhb¶¦�Õ£gàPƒ ›)[·n%¢ÄÄDŽãÜÝÝ—.]ºdÉv�711‘ˆŒ/Mò6kªV~ôèQCÉ•+Wˆ¨k×®ñ¶vçÎ¥R©T*===YŽÂk+22’ˆ²²²Œ·�‘‘ADC‡5Þ ñ…¹ýû÷Ñ AƒätGfg{ì1"Z½z5ûÈ2òAƒ±K«í”\
-¦¦„ô^°bT�•——»ººîÜ¹Ólx………“&MÒh4*•Ê0?�ïl6-›ÿÂ½iˆ_þ”0|Á+**DK…�•Ù—!C†ÑæÍ›…+J,>|8�<yÒ¸ðòåËDôÀºý§?ý)##ãÒ¥K†j‹„¤+‹Î:ãBGë�©i/ÑSu~Y$Z
-àh6mÚäëë+,g“»¶¶V¸¨¼¼ÜÛÛ[£Ñh4šàà`Ã%<SŒ¿'¯¼ò
-ùùùUTTXTÍ1/‹³ÿg§²‚‚‚„wYYTSÈŠÑåPƒ ;¸q÷ùçŸÑñãÇ‰è‹/¾à8.((ˆˆ®\¹bªS�²rãŒJ¯×›�Ð¸‚áŠ§áñyÞê,iãÝ.RUUEFÙ9[Åø¦ÀÚÚZ2Ê¤»#³³ ¢îÝ»×××ß»w��¶Ü¶m[jÝeq‰æX¹ðÐajJHï+F•'!!Áø<Ÿhx¹¹¹¦^+(?ZwwwÑ½i¨ JNµšà•(
-ÑÎÊé‹§§'UUU	×•XÄÎÏ¹¸¸¸¸¸°?«­¸ººrwúôivô0ˆ‰‰¹qã†ô"!éÊÂYÄ+t´Þ	6ÛSu~Y$Z
-àhÒÓÓ5�°\br766>ðÀ¡¡¡Ýºu‹ŒŒ4û†á¦Ø¹Ï^xÁ¢jìÉƒääd³�â‘¹â3Ï<CDï¾û®èRSÏ²°ÿ×ét ¢””é£‰tM!«G�Ç¡A¾ÐÐP"*))yõÕWÕjusssSSS—.].\øã�?Q¯^½$Z1Õ¨œã»ôZ»wïf·ÜñVwœäR¯×³sfï¿ÿ~ZZ4ÃM~ò¿Vm[Ñr9{ÁŠQå)((P(×¯_—hô¡‡"¢ùóç—””°ôñîÝ»rúk\hÃäRb@LE"¿/Ö¥_l‘)¬NKKËéÓ§SRR½¼¼ˆhÆŒf	ITf9ŸñóLìrŠÃöN¸³ÌvAt­ÿ_djÔ Jff¦———°\br³Ÿ¾ÈÎÎNNN&¢Å‹K7!ÜTII‰J¥R©T%%%ò«±»Ç|||Œ×’CæŠ_~ù%yyyYôÃÇíÛ·‘¿¿¿Ù$j
-Y=z<Ž62Íš5‹ˆ222Ç
-cccÃÃÃÙEsé›Øq¼¥¥…·YÑ`ÌFh\¡¡¡A­V«ÕjÃ-%¼ÕY>—��m¼…ÌÌLj·Ëâ¦:ËqÜž={ˆÈ××788˜Œncå,ùZµelEËåì+F•‡ÝPÁ{�W‡å…†Gƒ9Žûì³Ï¤#Ê¼,.gJHˆ©Hä÷eèÐ¡dô¢Vc‹ØÍÿøÇ?LµËÃ.;øùùY´Èle�FCÿ{±‚²¶wÂ�e¶¢kýÿ"™!Ø{YIee%¯ÜÔä>vì˜B¡ˆˆˆhmm½wï^¯^½”Jå‰'$šÝÔ¼yóè×ÛéäWcwÐûùù}ôÑG—/_Öjµ���/^”ùu³+ÆÇÇ³ƒÙßìvøôôt‰÷‡>êtºþýûÓ¯¬«)Ô–ÑsäA�‰Ý‘6vìX"bïdá8Ž= ðÔSOÑÖ­[%Z	$¢œœÞ=…¢Á˜�Pºo){zÃ××7;;ûæÍ›7oÞÌÊÊòññ¡v{ ÇTg9Ž3<ÎOD¼7Éœm[Ñr9{ÁŠQ7nÜ3Ï<#Ñ(›´o½õVMMM]]Ýž={Ø‘e>Ð#gJX1nòûòç?ÿ™ˆºvíº~ýúòòò¦¦¦¢¢"ö\‹Ä"–k4š-[¶”––666655•””lÞ¼yäÈ‘Ç�5jÇŽ×®]kii©ªªZ³fuéÒEz‘�tå'Ÿ|’ˆ&Ož\VVvçÎ�C‡±‹Û;áÎ2Ûé]ŒäœCee¥B¡0þk›�Üµµµìõxd%Ÿ~ú)õêÕ‹÷29³›º~ýº§§§B¡8sæŒüjíýó�wîÜa/úŠ‰‰ýåCãÃ›´Íþc`ª¦�E£g¶w5r\ºtÉ°µ.°Â~øÁPøßÿþW¢•çŸ^´›¢Á˜�PºoiSSÓ¨Q£„c8fÌÃ�$¬„÷Þë^E$ÑY†½ç�ˆÞÿ}^äÖýü£Ec+Z.g/X1ªBÉÉÉ!!!�nä0`o*�ˆDX(çUD2§„ã&¿/Z­–½ùŸGz÷ë5+Qœ‰CÐ¼yó¤	IWf÷^3¼	È1{gÜ„Ì.Hïb$—à4¢¢¢Œ_æÂˆNnv{–ñÝñz½ž½¯Ápb@ÈÔ÷déÒ¥dôK'2«éõú½{÷ž…T«ÕIIIÂ¨yd®¨×ëssscbbT*U@@@LLLnn®ð­ÅÂ€[ZZúõë',—_SÈ¢Ñ3udtÌA�‰ýƒ*,ìÙ³§t<·nÝJJJêÝ»7ï·¿Eƒ1¡táÒ¦¦¦Õ«WGFFzxxxzzFFF®Y³Æ8b«Ü½{wîÜ¹¾¾¾jµ:>>^þóI2;Ë|ûí·DÔµkWÑ¿åLŒ¶Œ­h¹œ½`Å¨
-±Ÿg/cmT§Ó­]»ö�pwwïÛ·ï»ï¾ÛÒÒb6aá•+W&Ož¬V«ýüüþð‡?Ÿl“9%¤GIzÊé‹V«]»v-C­V�3Æp~AbÇq………‰‰‰=zôpuuõôôíµ×Ø�Í�;7,,ÌÕÕÕßß?**jÓ¦M:�Nz‘�ÙÊ™™™tuu}÷Ýwu:�#÷Ntg™í‚Ä.Vp’‡{ Ç‘’’²víÚŸþÙø½ Ð™Ì™3'++kÑ¢Eìm÷•âââÈÈÈ.î pRJ{  Wbbb]]Ý®]»ì ´‹«W¯>|˜Ä~`æ~Àî},++³w  m…äœFß¾}gÏž½|ùr­VkïX ÀÆ
-EXXXUUU\\{OÍý†½Æp‘Ày!¹g²lÙ²ŠŠ
-ö èd<<<bbbØoÜÝ‡XZÉRL §†{×À™ôíÛwþüùK–,‰‰‰á=ð N °·ˆ#¹„N g.ÁÉ¤¤¤„††Î˜1£µµÕÞ±  ØLuu5y{{Û;€¶Br	NÆÃÃ#++ëÌ™3ìâ  :‡ï¾ûÎËË‹ý‚€SCr	Îç‘GùðÃßxãá[^ œÔwß}÷è£�º¸¸Ø;€¶Br	NiÑ¢E/¿ürBBÂ±cÇì €œ:ujøðáöŽÀðupV­­­3fÌøê«¯Nœ8iïp  ¬wêÔ©Q£F�;wG3èpæœ•‹‹ËÎ�;}ôÑ'žxâèÑ£ö Àz[¶lyì±Ç�YBç€äœ˜»»û‘#GfÍš‡ç{ ÀIUVVæååÝŸ¿K�’ËÊ•+í€õ”Jell¬R©|ã�7ª««Ÿ|òIüò8 8—ùóç×ÖÖfddàð�î¹„N"''çÅ_ìÓ§Ï®]»"""ì €,'Ož3fL^^^BB‚½c°$—Ðy”••Íž=ûÔ©SË–-{ç�w”JÜõ ­±±qÄˆþþþ_}õ•½c°üë�G¯^½Ž;ööÛoðÁqqq—.]²wD  RæÌ™S]]�““cï@ l	É%t**•jÅŠ_ýueeåàÁƒ—/_ÞØØhï   DlÝºuïÞ½[·nÕh4öŽÀ–�\B'4bÄˆþóŸ)))Ÿ|òIxxøŽ;ðCä àPòóó“’’–-[kïX lÉ%tN*•ê•W^)));vì/¼¹ÿ~Üa Ž`çÎ�Ó§Oýõ×ß{ï={Ç`{H.¡3
-
-ÊÌÌüá‡"##GŽ‰»æÀ¾òóóçÌ™óâ‹/~ðÁöŽ ] ¹„ÎïÁÜµk×Ù³gCBBÆ�?jÔ¨üü|½^oï¸ àþÂq\rrò´iÓæÏŸ¿~ýz…Baïˆ Ú’K¸_<8??ÿôéÓ¾¾¾Ó¦M0`@zzúÝ»wå¬+³ €)MMMÏ>ûìòåË?úè£ôôtd–Ð‰!¹„ûËÈ‘#
-
-ÎŸ??fÌ˜%K–„††.^¼øòåË«ètºˆˆˆíÛ·wX� ÐÉ\¼x1**êðáÃ¯¾úª½Ãh_H.á~4hÐ ŒŒŒÒÒÒäää0 &&¦  @ô¡òS§NýôÓO³gÏž={6^l Ñëõ+W®2dˆF£ùñÇãââì@»Cr	÷¯àààU«VýôÓOûöíS(			}ûö}ÿý÷ËÊÊŒ«åçç»ººÑ®]»ÂÃÃÏž=k§xÀÉüç?ÿ‰ŽŽþðÃßyç�ƒÙ;"€Ž€ŸøÅÕ«W322²³³+**žxâ‰çž{nêÔ©]»vÕh4UUU¬ŽJ¥R(k×®Å…- �ÐÔÔ”œœ¼fÍšðððM›6=öØcöŽ ã ¹øz½¾°°0;;{ÿþýD4jÔ¨£G�òê(ŠI“&eggûøøØ#F p\Çåçç¿ùæ›•••«V­Z°`�‹‹‹½ƒèPH.ÄÝ¾}{÷îÝ«W¯.//oiiá-uuuÌËË>|¸]Â tüøñ7Þxã_ÿú×ôéÓ×­[×³gO{G`¸ç@œ··÷¼yóÜÜÜ„™%µ´´Ü¸qcÔ¨Qiii 8š“'ON˜0aüøñAAAÿþ÷¿sss‘YÂ}É%€I?þøcII‰©¥:�®¥¥eáÂ…“'O®««ëÈÀ ÀAèõúýû÷�1bôèÑ÷îÝ;}úô¡C‡†jï¸ ì	—Å¡CÙ;
-¹
-óòòäü–O@@@RRR�=: * pçÏŸß·o_eeåC==pà@{GÔV]ºt™5k–½£ §‡ä:TjjêÂ…í  ˆ		¹~ýº½£ §§²w pßq–ƒÇq™™™­­­J¥ÒÛÛ[¡PøøøÿKD¾¾¾ö  ­RSS×®]kï( 3@r	 N¡PÌ�;×ÞQ   8<Ð    6ƒä    lÉ%    Ø’K    °$—    `3H.   Àf�\   €Í ¹    ›Ar	    6ƒä    lÉ%    Ø’K    °$— �ÇqyyyñññÁÁÁnnn^^^ƒNJJúöÛoyÕöîÝ;qâÄ   77·   ¸¸¸Ý»wsÇÛ B¡P(ýû÷×étÂò¶Ô%¿/ámMNsÆ…���#FŒxùå—‹ŠŠ,ÑþJ—QTT”B¡>|¸Ä-X9½�3yä…B±k×.Ñ-ìÚµK¡P<òÈ#Â äµJ¥Òh4ñññ'OžÝ> 8 }üñÇ!!!öŽâ>rçÎ�˜˜³_ÿúúú¸¸8Ñ:±±±õõõÆÛ4,ÊÈÈ–·±¦D�fû"±ÞÖä4'QgÊ”)uuuò÷oËfË/\¸`hëüùó¦V¤¶¬°2§Áúõë‰hüøñ¢�7n­_¿Þl ÒA*•ÊÃ‡‹6íÇg°$—Ð¡pðê`“'O&"__ßuëÖ]ºt©¹¹¹¡¡áÂ…›7oŽŠŠ2T›:u*ùøø¤¦¦–••iµÚk×®¥¥¥ùúúÑÔ©S�·iøç¿OŸ>Z­–WÞ–š6é‹œmÊiÎ¸ŽN§«©©9uêÔ¢E‹<<<ˆhìØ±z½^zf›3U¾hÑ""rww'¢…šZÑÒ�5Û™Ó ®®ÎÃÃC¡P\½z•Xii);EjH[-êæææâââ	&Ñ°aÃ¤WÛÂñlÉ%t(¼:Ò‘#GˆÈÛÛûâÅ‹ÕŽ;FDjµº¸¸˜·¨¸¸X­VQaa¡¡�¥áááD´qãF^¹ñê–Öl{_dnÓÒŒÇØ÷ßß­[7"Ú»wo#-×jµ���Dô×¿þ•ˆüýý›››EWlËÀ
-{aÑ4˜9s&­X±‚Wó�wÞ!¢™3gš@:Èë×¯‘‡‡‡ôŠ`[8>ƒ­àžK€N+;;›ˆ–.]:pà@‰jYYYD´xñâˆˆÞ¢ˆˆˆÅ‹ê[¾|9}ðÁÍÍÍÒaÈ¯)Af_:ÀÐ¡C—.]JD¦n:l£ƒVUU2dþüù‘‘‘ÕÕÕ¢5Û2°Â^X4æÎ�KDÛ¶mÓëõ†jz½~Û¶m†¥mçååe“í @Cr	Ði±‡6¤«}óÍ7D”˜˜(º”]*>ÿ1mÚ´Aƒ]»vmË–-ÒÛ—_S‚Ì¾tÆ™3gÚcã[·n¥_ó3ö_V"ÔÆ�åõÂ¢i0vìØ°°°Ÿ~úéøñã†:………eeeaaacÇŽµ"F«Õž?~Îœ9Dkõv Àžì}êî/¸ìÒ‘Ø}u÷îÝkKµÆÆF"òôô4”999DÂÖR,­)qŒ’ÙÑÖM-’>$J¬~ïÞ=Þ˜È‰DÎA¸¼¼ÜÅÅÅÝÝ½¦¦†ã¸ššwww¥RYVV&Ú5ù»Àl/,�«V­"¢§Ÿ~ÚP2}út"zï½÷dö]ºÎ˜1cª««M)´ŸÁVpæ ¬ôôÓO8°¢¢bãÆ�¶ªéŒ¯ÛVVVVkkkBB‚ŸŸùùùM™2Åp¹Y¨-ÛÆ^¼ðÂ...¨­­%¢ÚÚÚÏ>ûL©T>ÿüómÙ,ãïïŸœœÜ½{÷¶o
- :’K€N+((ˆˆ®^½*]M£ÑÑåË—E—²òàà`á"¥RùöÛoÑêÕ«Ù™-SdÖýØ¢¾XD¢9i,Œ€€€66'¬Ànjd…ÃÝ�¢±Éßf{aé4èÑ£Ç„	š››?ýôS"Ú¹sgsssttthh¨pu9CÍ
-+**^yå•êêê‰'þüóÏõ ’K€NkäÈ‘DtàÀ9ÕòòòD—²rVGhÆŒ¸qãÆ†¤[‘_S"H³}é,ŒaÃ†Ùv³'Nœ¸rå
-EGG^*MDW®\9qâ„èZV,¯VL–øfffþÛöGy‚ƒƒÓÒÒ&NœX[[»lÙ²6n ìÃŠKé VÃ==‰½¾ÇÇÇ§¤¤D¢Ú—_~ID^^^½ŠÈðqûöíDäïï/<¤X]Óê¾ÈÜ¦œ£Ÿ©:gÏže/ñÙ·o_#á•³÷û˜"ñ~+VØK§ÇqZ­–�øÜ´iI¾5IbpDë”””¨T*•J%wCÛáø¶‚ä:^Œ½xÜÏÏï£�>º|ù²V«mll¼xñ"ïÅãñññDäëë›––víÚ5­V[^^žžž.ñuÃG�N×¿Ñ¿W­®Ù–¾ÈÙ¦¥�N§«­­=uêÔë¯¿ÞN/Q7¼™¼´´”W­¬¬L©TJ¼™\æÀší…EÓ€‘ù¾w+ÆgÞ¼yD”˜˜(½.ØŽÏ`+H.¡CáàÕÁdþüã�;wØo¢ÅÄÄˆþü£q‰ñã&m©i6H9}‘hÝ¢æ$êÄÇÇÛüç¥Sñ©§ž"Áo*W°b`…½°h0ò©ÒìPóV¼~ýº§§§B¡8sæŒè˜€Íáø¶‚ä:^O¯×ïÝ»wÒ¤I�F¥R©Õêˆˆˆ¤¤¤¢¢"^µÜÜÜ˜˜˜€€ •J“››+<?'LZZZúõëg*³‘_S:‘ßS­[Ôœq¡›››¿¿ÿ°aÃ^zé¥Ó§O‹nS‚©HŒË~øa"ÊÉÉÝ{åÐÃ?ljƒrVN/äOv#æã�?.Ñw9C-\—½æÝTÂ6‡ã3ØŠ‚“÷t$€M¤¦¦®]»–ý¶  8ŸÁVð´8    ØŒÊÞ  81…B!±—† à>„3—    `38s	 `=œ› àÁ™K    °$—    `3H.   Àf�\   €Í ¹    ›Ar	    6ƒä    lÉ%    Ø’K    °$—    `3H.   Àf�\   €Í ¹    ›QÙ; ¸ï466nÞ¼ÙÞQ  Àÿ(**²wÐI ¹„ŽvëÖ­_|ÑÞQ   _HHˆ½C€Î@Áqœ½c    €N÷\   €Í ¹    ›Ar	    6ƒä    læÿ tÎ·Ñ*í    IEND®B`‚
\ No newline at end of file
+   IHDR       8gq)   bKGD ÿ ÿ ÿ ½§“    IDATxœìÝi\çÞ7ðÿ„%aS@DpEd±…¢¨-.EÐŠH­VëRiµZ«VmåØžç®¶EÑzôhýÔ—ŠKQ\ªâÎâq©»=‚EÜ@V‘%$™çÅœ;wš�„%’ß÷…såš¹~3ÙþÌ\™0,Ë    èFÀw    €æÅ   €P<   èÁ’ï   ‡¬¬¬Ç�ó�ÀdyzzöéÓ‡ï`ìLhF>øàƒ}ûöñ�Àd�5jïÞ½|§ c‡#O ÍÞÜšÈ|Àwh0ç	   @(ž    ô€â	   @(ž    ô€â	   @(ž    ô€â	   @(ž    ô€â	   @(ž    ô€â	   @(ž    ô€â	   @(ž  ¹b†aÕŽH$ruuíÝ»÷Ì™3³²²tY\mµtLøèÑ£Ï>û¬K—.B¡ÐÖÖÖÏÏoöìÙ—/_®sýj
+e&$$¤Î´–––nnn#FŒ8þ|ýÆ -–eùÎ  ºúàƒˆhïÞ½|1
+Üç½â›˜–
+ :::11ÑÑÑQËâj×¯–.ïœ×¯_+++Ó´¸.õŠ| ?þø£G�Üÿoß¾íëë«KZ�@�šš:tèP½Æ2[x}�Žpä	 LË²,ËJ$’¢¢¢ôôôyóæ‰D¢”””˜˜˜zÔ¬:º,8oÞ¼²²2ÿãÇ�ÕÔÔdgg¯[·.88Xíšµ4ÑæÍ›‰H(Êÿ¯%mMMÍ­[·†"“É.\¨ïX  Ž<4'øËX‘¦#Oªok×¯_ç�wÊËË÷îÝ;jÔ(í�ë\›Žlmm«ªªîß¿ïåå¥K-ÃÕÖÖzxx¬_¿~úôé...Ož<±¶¶Ö¾øÓ§OÝÝÝE"QUU•îc™3¼¾@G8ò ¦/000..ŽˆvïÞm°A�œœˆHµp©‡ÔÔÔ‚‚‚€€€iÓ¦ùûû¿|ùòÐ¡C:.kooßð   Å ˜…‘#G‘|²¶Œ1‚ˆúöí»mÛ¶[·nI¥Òú­Š;O÷É'ŸÈÿÕræŽˆÄbñíÛ·ccc‰(22²~ƒ€&8mÐœà´‚"ÝOÛQuuµ�����Meee��;¨¥Ë;gEEÅøñã<(oiÑ¢ELLÌwß}×±cGMÃ©®ùÉ“':t°´´|úô©³³sqqq»víjkk=zäéé©=mXXØ¾}ûZµj¥ãXf¯/ÐŽ<€Y�ÉdÑÞÞ>%%åöíÛñññ111;v,//ßºuk¯^½nÝº¥ûz¥RéÈ‘#���‰ÈÙÙ9::Z&“mÝºUû‚...K—.U­œ  �P<€YxôèµnÝZßëým;Ž¯¯o\\Üþýûsss³³³\ZZ:þ|ÝGOLL$"î‡;s·uëVÕ$\¼§OŸÎš5ëåË—Ã†{öì™îi@(ž À,¤¤¤‘ü2¼ðööNJJ"¢.è¸È™3grrrˆ(<<\~5Ëððp"ÊÉÉ9sæŒÚ¥Ú¶m»zõêaÃ†ûí·� þÅ ˜¾7n,[¶ŒˆÆŽËo’’’Òg²‘ö‰áÚïýñÇ---“’’îß¿¯{B ¨Š' 0MR©´¤¤$##ãë¯¿îÝ»wyyù€bbb 000>>þâÅ‹%%%‰¤°°�»P'iú‰%¥¥¥`&77Wé¼a^^ž@ 8pà@ii©¦Å½½½ccc%	>4.K¾  42µß;1bÄÖ­[UïRÛYõ|Z:hrãÆ�7n¨¶;::®\¹²ÎÅ‰hçÎ�ÕÕÕƒVývž§§ç AƒNž<¹sçÎ3fhZÃwß}—””´ÿþ+W®é2( Ô	Gž À4Y[[»¸¸Ï˜1####%%Eñ‡íàúõëß~ûmß¾}���-,,ìììüüüæÌ™sóæÍ^½zé²î¬œâTqE“'O¦ºÎÜµk×nÖ¬Y,Ë.X°@ÿ-  õp�'€æ×¡h:x}�Žpä	   @˜ó PZ®?N¸x7€IÃ‘'    =àÈ @}àØ€ÙÂ‘'    = x   ÐŠ'    = x   ÐŠ'    = x   ÐŠ'    = x   ÐŠ'    = x   ÐŠ'    = x   ÐŠ'    =Xò  ô“ŸŸŸœœÌw
+ ”ŸŸïááÁw
+hP<43/^3fß) LÓ¨Q£øŽ Í Ã²,ß  ÙûÏþ3uêÔ.|õÕWK—.å;4‚¼¼¼ØØØ³gÏÎš5kñâÅ¶¶¶|'0˜ó "“Éüýý_½zuéÒ%TN&£}ûö'Ožüé§Ÿ6oÞìïïŸ‘‘Áw" c�â	 êïÑ£Gøî»ï–,YrñâÅ^½zñ�Ã0S§N½}ûv—.]ÂÂÂ-Z$•JùÀ?O P,Ë®^½ºG�R©ôîÝ»_~ù¥……ß¡ Ixzz?~|óæÍ			½{÷~ðàß‰ x†â	 ôVYY9qâÄ¹sçÎ˜1ãÔ©S;vä;4¹‰'fffVUU…„„¤¦¦ò€O(ž @?>ýí·ßŽ=š�� 
+ùNâïïùòå˜˜˜#FÄÅÅI$¾ðÅ èáÈ‘#AAAB¡ðêÕ«C†á;š��Í¦M›6mÚ´fÍšAƒ={öŒïD <@ñ ºZµjÕˆ#>üðÃóçÏ·oßžï8À›ØØØÌÌÌüüü·ÞzëÚµk|Ç04O P7±X<yòä¸¸¸6¬_¿§ê W¯^×¯_ìÓ§ÏÎ�;ùŽ`P(ž  ¯_¿ŽŽŽNNNNNNŽ��å;‡ýû÷�?~âÄ‰?þø#ßq ?Ï Ú”••6,;;ûôéÓ!!!|Çãbmm½iÓ¦îÝ»ýõ×ÏŸ?_¶lÃ0|‡hrøy ÐèÙ³gƒ®ªª:uêT§N�øŽÆëÐ¡CcÆŒ‰‰‰Ùºu«••ßq šŠ' P¯°°pðàÁeeeiii]»vå;»cÇŽ�5*22r×®]ÖÖÖ|ÇhB(ž @�òòò�–––ž>}_¬eff¾÷Þ{ýû÷ß»w/ê'0a(ž @Ùë×¯ôüùóôôt¾ã@sróæÍ�<xßÊS…oÛÀ_H¥Ò	&Ü¿?55•èËßß?--íÊ•+#GŽ¬©©á;@“@ñ 1wîÜãÇ�9rÄÏÏ�ï,Ð,:t(==}ÆŒ|gh¸T üŸýë_ëÖ­;|øpŸ>}øÎÍXhhèáÃ‡ÃÃÃÛ´ió�üƒï8 �Å ü×Ñ£GçÌ™³dÉ’ˆˆ¾³@³÷öÛooÝºuÜ¸qmÛ¶ýâ‹/øŽÐ˜0a ˆˆ?~üÆo4h÷îÝ¸Î!4–¬\¹òÄ‰aaa|gh4(ž €¤RéÀ�‹ŠŠ.]ºdkkËw0,Ë¾ÿþûYYY×®]sssã;@ãÀ„q  …^»ví×_Eå�‹a˜íÛ·;;;�9²¶¶–ï8 �Å€¹ËÈÈˆ��_ºt©——ßYÀÙÛÛÿòË/7oÞüþûïùÎÐ8pÚÀ¬UUUùûû÷èÑ#%%S� élß¾}òäÉ§N�Âä'0(ž ÌÚW_}µmÛ¶?þøÃÅÅ…ï,`â&Mš”––vóæÍV­Zñ� AP<˜¯+W®ôîÝûçŸþä“OøÎ¦¯¬¬,  à�7Þ8pà ßY Å€ùêß¿?Ë²çÏŸÌkú#w‚ÒÞýšÝ†œ8q"""b÷îÝcÆŒá;K3ÓìkÓ†â	ÀL<x0&&æ÷ßhÄÕÕ[¼¦0MÒ�ƒÕÞV¢)ÛôéÓ8pçÎœ)Ö‹1?ÖfÅ€9’J¥~~~»wïnÜ5Õ[</aP<q4e{ýúµŸŸ_HHH£?÷L›1?ÖfÈ¼ŽÕ gß¾}ÙÙÙ.ä;˜;;»uëÖýòË/ä;@=¡x0GË—/;vl·nÝÓÓÓ'L˜àááaeeÕªU«ððð'N(v`FõrŠ�Šÿ‘ãZÄbñ²eËmmmmmm¯šÈu®¨¨˜<yrË–-Û¶m»zõj"*..?~¼“““‹‹Ë·ß~«ø—·öÀZÂ(mˆD"Y½zuPP�½½½­­mXXXjjª¦]W¿Aµ„©s·×O*•.^¼¸cÇŽB¡ÐÇÇ'11QõÒkÇÑŽ;ÂÂÂ…Ba×®]çÏŸ_VV¦´N-ãjÙ^"ŠŒŒ9räœ9sªªª4íç¦ÐèÏ1ÒaW�/]ãÂ€™9~ü8Ã0·nÝRjW}`&%%E©ƒÚ¥4­�»«ººúí·ßV½kÀ€b±XqÙ‘#G*v8xðà[o½¥Ø²}ûvkyÇSü¿X,×ÔSUý­3Œ¦j�Çý?66VéÞääd¥ÀºïX™L6nÜ8Õ}}}ËÊÊtWËör?~lgg·páBMû¹)è»+ÔnˆÚ….�Ú0úÔø;ê�€Ù	�ˆˆPm�ŒŒ<vìXii©X,ÎÏÏ_µjË;èþ Ô'>>žˆ·lÙRPPPPP°yóæ-ZÑòåË¼qãFYYÙçŸND-[¶TjéÛ·o+µ¯X±‚ˆìííW¯^ýøñãêêêÌÌÌèèhM{¯QÕ}…ÚãqëôôôLMM-++ËËË‹ŠŠ"¢~ýú)�«ûŽÝ¸q#¹»»'''VVVfffQ\\œ¾ãjÚ�,Ë&$$…Âû÷ïkéÓ¸šî9V�]¡ÔXïçð�€yyøð!Ã0‡V½+--møðánnn–––ò?E"‘¼C½‹'"JLLTlÜ´i÷I¦¸`VVwóéÓ§j[\]]X©�û²á†T»©Õ(ƒê¾Bíñ¸Î'Nœ�·äää‘ƒƒƒRÝwlHH�?^q ‡‘———¾ãª�Í‹ÅÝ»w×R§6º¦{ŽÕcW(5Öûy¼À#`^¾ùæOOO©TªÔþË/¿húyy]>Ôö‰DDTXX¨ØXPP@D666ŠVWWs7e2™Ú†aX©ÝÆÆ†ˆ
+
+
+4í±FÙKšÚë\¡öx\Ïªª*y‹|¿)õÑ}Çr?maaaaa!�<¡•••¾ãjÙ™,Ër“·Î�;§½[ciºçX=v…bcCžWÀL0#R©tÛ¶m&LP½*æ÷ßÏ²ì´iÓ²³³¹O‚ŠŠ
+¥>ª_–nô	¿B¡Pq,Õùèºnt�>h£¬�«M9š>ƒuß±Ü¤R©T*•Éd2™L~—âÇÕî½÷Þ‹ŒŒœ5k–¼à0€¦xŽißu¾pxy2Cƒ¸X ¥¥¥Ñ�;wTïâ>?JKKå-òo’Ë[ÜÜÜˆ(''GÞrüøq¥>ÜçDmm­âÊ¹ÓvÛ¶mSlÜ²e©œ¶Sì ½E—ÀjÃ(­'00�ˆ6nÜ¨ºOT5dPµíu®P{<µoãJ�úîØ   "ºté’ÚuWÓ~PróæM‹­[·jïÖ(šâ9¦Ë®¨ó…Sï�€/x$ ÌÈ´iÓÔÞÕµkW"úæ›oŠŠŠJJJ’““Û´i£ô~=pà@"ŠŠŠÊËË+//?|ø°§§§RWWW"Úµk—â‰nÂ¸““Ó¶mÛ
+IeÂ¸b$í-ºVFi=+W®$"‡µk×æççWWWgeeišˆÓ�AÕ¶×¹Bíñš¢xâŠZ77·�7æææVVVVWWgggoØ°¡OŸ>º�«i?¨Š��uww¯¨¨ÐÞ­ášâ9¦Ë®¨ó…Sï�€/x$ ÌEmm­‹‹Ë?ü öÞåË—Ó_Mœ8QéýúèÑ£J}äßÐ–÷ùøã�•ú°,[]]Ý¿RVSSÃ-¨ï›.�Õ†QZ�X,4h�j¶zï%Mƒªm¯s…Úã©�ªÔ¨Ú§Î–™3gªŽ¨ï¸šöƒª?ÿüS$­^½ZS‡Æ¢ï®ÐåáÖeWÔùÂ©÷@À< æâìÙ³¤áœË²‰$!!ÁËËK(vîÜyÑ¢Eò	.ŠÝ¶lÙÒ½{w+++OOÏE‹I$¥>¥¥¥Ó§OïÐ¡ƒ•••â]ÕÕÕñññþþþ"‘ÈÆÆÆßßÙ²eòÊ‰ÕÿƒM—ÀšÂ(u‹Å			\6;;»°°°C‡Õ{/iTm».+ÔO—On}w,'--mÔ¨QîîîVVV666¾¾¾sçÎ½~ýºîãjÚjÍž=ÛÍÍ­²²RKŸ†kŠç˜.»‚­ë…Sï�€/øm; sñ·¿ýmÿþý<à;€²gÏžuéÒ%!!aÆŒ|g¨¾m`.N�:¥öZÕ ¼kÛ¶íÇ¼lÙ2±XÌw€º¡x0¥¥¥×®]ã&®¡¼xñbûöí|¨Š' ³�‘‘Á²ì;ï¼Ãw õ<=='Nœ¸téRù|  £…â	À,dffvïÞÝÅÅ…ï  -X° //o÷îÝ|¨Š' ³ðïÿ[é§ãŒMçÎ�Ç�·dÉC^p P<˜>™LvåÊ•7ß|“ï  uˆ‹‹ËÎÎ>vìßA ´Añ`úrssËÊÊP<�ñëÑ£Ç�!CV¯^Íw mP<˜¾Û·o3ÃýÀ€‘ûüóÏÓÒÒ²³³ù Š' ÓwïÞ=;;;¾ƒ ÔmØ°a;v\¿~=ßA 4Bñ`ú²³³»wïÎc †a†á1€¥<MÏ Ûnl»·�ÁÔ©S·nÝúúõk¾³ÔÍÄv>èÅ€é{ðà�··7ß) ¡ÌçsúÓO?­©©Ù¹sgý×´£ÌgrÌm{	Å€é{ôèQÇŽùNM…û¥R¾S4&—Q£F­Y³ÆÄ¶LŠ' W[[ûìÙ³öíÛó@Ÿþù�;wÒÓÓù Š' ÷äÉ©TjÅSeeågŸ}æâââàà0räÈG�ÑéÓ§†iÛ¶mUU•bçšš†aN�:¥vm‰dõêÕAAAööö¶¶¶aaa©©©ò{wìØæèè(
+»ví:þü²²²úÅ–H$?ýôSŸ>}\]]­­­Ûµk7jÔ¨´´´z�¥½¿¦í’Ÿa(¶È× ‹—-[hkkkkk˜��P[[+ïÀõ—J¥‹/îØ±£P(ôññILL¬ßþi"}úôñ÷÷ß´i“ê]ééé&Lððð°²²jÕªUxxø‰'ä÷jÚQZv öR]O6"Ò¾3¹±***&OžÜ²eË¶mÛr×b(..?~¼“““‹‹Ë·ß~«t˜Mûó¤ÎQËöB#`À¤eddQ^^�¸w›˜˜Å7�¢¢"–eCCC‰hÅŠŠ‹¬Y³†ˆ‚ƒƒÕ®P,‡‡‡«}C“ÉdãÆ�S½Ë××·¬¬L1�R<Máccc5½yê;V�ýµl—¦JCTWW¿ýöÛª= ‹û«nWrr²jÓ[³f�­­í«W¯”ÚU·Ža˜””M÷ê¸5­PËƒÂê¶3¹–‘#G*v8xð ÒEÿ·oßÎõ×ýy¥e\-Û‡]	`â<HDÕÕÕ<fàÞ¸;tèpöìÙW¯^�9s†;6þ|–e¹ËI»ººVTTpý«««ÛµkGDP»Â+V‘½½ýêÕ«?~\]]�™™Í²ìÆ�‰ÈÝÝ=99¹°°°²²233388˜ˆâââó(ÅÓÞÖÖ–ˆ.\˜ŸŸ/‹‹ŠŠRSSÃÃÃë1V�ýµl—–œŠíñññDäèè¸eË–‚‚‚‚‚‚Í›7·hÑ‚ˆ–/_®ØßÓÓ355µ¬¬,///**ŠˆúõëW÷ci@VVVIIIJí‘‘‘ÇŽ+--‹Åùùù«V­¢¿ÖÙºì(ÝW¨Ëƒ¢}gr}oÜ¸QVVöùçŸQË–-•ZúöíËõ×ýy¥Ë¸úîvÐv+€‰Û²e‹½½=¿¸7ñC‡É[~ýõW"òññánQ||<w“;ìäãã#“ÉÔ®0  €ˆ6lØ zWHH�?^±ñáÃ‡Däåå¥˜G)ž¦ðÜUÂÃÃ¿üòËM›6=xð ÞcÕÙ_ËviÉ©ØÎ]
+511Q±wò+00P±ÿ‰'ärrrˆÈÁÁAÓNàKdddDD„RcZZÚðáÃÝÜÜ,--åÇTD"‘¼ƒ¾Å“öêò hß™\Ÿ¬¬,îæÓ§OÕ¶¸ººr7u^é2®ÚØÐ@Ø­ &.!!¡C‡üfàÞÄKJJä-ÅÅÅŠŸO)))DÔªU«W¯^UUUq‡�¶nÝªi…666DTPP zw ÈÂÂÂÂÂB ùT+++Å<Jñ4�•‘‘¡ô]Åˆˆˆ/^Ôc¬:ûkÙ.-9ÛE"*v((( "ÅþUUUòòâÕ´ø²cÇ‹gÏžÉ[~ùåMswä}ô*žê\¡.Šö�ÉÝ”ý•wPja†»©ûóJ—qÕÆ†Â„q ÷êÕ+î¬�1‹ŠŠò÷÷/**Z½zõ†ž>}Ú¾}{µÓ>êÄ²,I¥R©T*“É¸cWÜ]Š“¦uúàÁƒŒŒŒåË—�5ÊÞÞþ·ß~›={v=ÆjôlÁ•Y£�Jmcc³gÏyË÷ßÏ²ì´iÓ²³³¹Ò¡¢¢¢!C4Ê
+uÙ™B¡P©ƒR«Pî�nÏ“fñ š$O &®¶¶ÖÚÚšïDD.\�ÿÿÜ¹sDÔ©S'î&Ã0ÿûß‰håÊ•Ü¬�¯¾úÊÊÊJÓªºuëFDÜt.%¾¾¾DtéÒ%µ/Ö/¹¥¥ehhè×_½wïÞ7n÷m,}Çª³¿–í¢ÿýt”H$Z¢rWC=zô¨bãáÃ‡å+o^ìììFŒ¡xµLîìU||¼··7W:¨~SÓŽRÛ^ç
+µ?(M¡±žÃº<a žt>F ÍÒ¼yóúôéÃoîÝFÓ„qŽT*õññáz¶nÝº²²RË
+W®\IDk×®ÍÏÏ¯®®ÎÊÊâæðnÙ²…ˆÜÜÜ6nÜ˜››[YYY]]���½aÃù~Pz÷ÓþfØ¿ÿ¤¤¤Ç�×ÖÖ,[¶Œˆlmmë1V�ýµlË²®®®D´k×.Å“5JCp¥§““Ó¶mÛ
+IeÂ¸ÚÇHË>çWÞ»w�»ÙµkW"úæ›oŠŠŠJJJ’““Û´i£^ÓŽRÛ^ç
+µ?(ºìLÕ>Ú[êñVÛ¨i?@ÃãK ÑÌ™3ß~ûm~3pïéJ_Õ–_ª@.))‰»kñâÅÚW(‹¤é¯Á™3gªÞ¥Ø¡ÎÏ6ÕðJ¦N�Z¿±´÷×¾]üq�CTWW÷ïß_uaaa555Z¶WûNà‘X,vqqáN®±,»|ùr¥M›8q¢RxM;Jm{�+Ôþ è²3UûÔÙ¢ïóJm£¦ý ‡]	`â>ûì³Áƒó›�{ã®¨¨øä“Oœœœ¸s1999JÝ.^¼HDŠSË5‹Å			þþþ"‘ÈÎÎ.,,LñÛ|iii£F�rww·²²²±±ñõõ�;wîõë×ó(ÅÓ4PVVÖ'Ÿ|Ò©S'+++—ÐÐÐŸþY"‘Ôo¬:ûkÙ®ÒÒÒéÓ§wèÐA~BSíÕÕÕñññÜlllüýý—-[&¯œ4m¯1¸~öÙgò¯
+J$’„„///¡PØ¹sçE‹É§ÉûkÚQjÛuY¡–¥‰Š'Vÿç•j£¦ý Ç°øå  “ûâÅ‹#GŽð¤n±±±‰‰‰óæÍã®¬À9~üxDDDNNŽ|’ ¿0aÀÄ‰Åb#™0®Ý£G�¸
+OÓ½Ál0 E‹Ü´w c€â	ÀÄ‰ÅbÅKÿ'†a:uêTPP0tèÐ=zðŒ‹µµõ�!C”~N€G(ž LœP(‹Å|§¨›H$Šˆˆà~˜@ÉðáÃÏž=[ZZÊw ""cÿ{ ÈÖÖöùóç|§¨&_‚vÃ†cYöÄ‰£G�æ; Ž<˜:[[ÛÊÊJ¾S 4ˆ³³s¿~ýpæŒŠ' gccSUUÅw
+€†>|øÑ£Gq½l0(ž Lœ��Ž<�	6lXqqñ¥K—ø€â	ÀÔá´˜†nÝºuêÔ‰ûUA ~¡x0q¶¶¶8m¦aàÀ�gÎœá; Š' S×²eËòòr|�LÀ€.^¼øúõk¾ƒ€¹Cñ`âÜÜÜÄbqqq1ßA jàÀ�b±8##ƒï `îP<˜¸6mÚ‘ñ_ê	 NmÛ¶íÖ­ÎÜïP<˜8777"zñâßA ÁÀ�OŸ>Íw
+0w(ž Lœ³³³••Ž<�i0`ÀÕ«Wñ;-À/O &ŽaWWWO`ÂÂÂd2ÙùóçùfÅ€ékÓ¦Í‹/ÄbñíÛ·÷íÛ÷�ü#==�ïP õÑºukÌ~á‡�LSQQÑ½{÷îÝ»—��-¶oß¾bÅ
+™LÆÝ‹)·Ð|…††feeñ�ÌŠ' q‘8®    IDAT´}ûöI“&‘@ °´´¬­­UºÎ“¿¿?OÑ *$$d×®]‰ÄÒaÀœ¶0AãÆ�ëÜ¹³@ �Édb±X©rjÓ¦�³³3_Ù ¨wïÞ•••·nÝâ;˜/O &ÈÒÒrÕªUò“tŠ†yóÍ7	 ±ôèÑ£E‹/^ä;˜/O ¦)**ªoß¾ªç5¬­­{õêÅK$€F!Þ|óÍÿûß|ó…â	Àd­\¹R*•*5ŠÅâ€€ ^ò 4–Þ½{£x¡x0Y!!!Ã†³²²RldY³Å¡¹		ÉÎÎ.))á;˜)O ¦lÅŠJŸ„Ba×®]ùÊÐ(‚ƒƒY–½zõ*ßAÀL¡x0eÝºu›4i’âÁ'#4\»víÚµk÷ûï¿óÌŠ' ÷Ã?ÿ}¥[YYó› QÜ¼y“ï`¦P<˜8ww÷Ù³gË>aÂ˜???\ê	ø‚â	Àô-X°ÀÆÆ†ˆjkkñU;0~~~÷îÝ«­­å;˜#O ¦ÏÑÑqþüùÜÿ{öìÉo€Fáïï/‹³³³ùæ?�,99™ï Fûöí[´h!Nž<Éwh�ÐÐP¾Sð¯{÷îÖÖÖ·nÝÂß`xŒÒ�^4Ã0|G 0e{öì=z4ß)Œ‚ŸŸßðáÃ—,YÂw0;8ò�oîÆI*•îÛ·oÌ˜1|�úÃ'Šüýý1gx�9O æÂÂÂ•˜__ß;wîð�ÌŠ'  h–zôèñçŸVUUñÌŠ'  h–¼¼¼d2YNNßAÀì x €f©K—.�àÁƒ|³ƒâ	  š%‘Häáá�â	Å  4W^^^(žÀðP< @s…â	x�â	  š+OÀO  Ð\yyy=}úôõë×|ó‚â	  š«Î�;³,ûèÑ#¾ƒ€yAñ  ÍU‡ˆèÏ?ÿä;˜O  Ð\ÙÛÛ;99=~ü˜ï `^P< @3æéé‰â	Å˜†a”~—žQ ‰\]]{÷î=sæÌ¬¬,]WÛA-ÝC²,»ÿþ#F´mÛÖÚÚÚÞÞÞÏÏoúôé/^Ôk ÓêLÉ£G�>ûì³.]º…B[[[??¿Ù³g_¾|YuwHhh(Ã0!!!ZÒr,--ÝÜÜFŒqþüy¥nºï=MCè½#€Wžžžyyy|§ 3Ã4*"Ú³gß)4R}ÚkyuDGG—””h_\íúòZ+//�ˆˆ¨s%º¤cZƒ)¹víZË–-ëÜRÝwÈÝ»wåwÝ¾}[SZ%�àÈ‘#ò>zí½ÆÝ!†AÆýúâÅôéÓÃÂÂøNæGž ˆþ÷óR"‘¥§§Ï›7O$¥¤¤ÄÄÄ°Z+ -kS¢ã²ãÇ�ÿí·ßœœœV¬XñàÁƒššš×¯_ß½{wÃ†¡¡¡�8PÍ›7¯¬¬ÌßßÿøñãEEE555ÙÙÙëÖ­Ví¬KÎÍ›7‘P(”ÿ_-nÙššš[·n2D&“-\¸P~¯^{LŽ<Z}ü÷_ÆªO{M/„k×®µhÑ‚ˆöîÝ[ggÝ;hwìØ1"jÙ²åü¡½§.5iZ"ºÿ~3pÄb±««+­_¿žˆ\\\jjjê\Õ“'OˆH$q7¾÷Œÿ]ÑÈ__¼HJJ
+…R©”ï `Fpä	@½ÀÀÀ¸¸8"Ú½{·ÁÝ¶mÅÅÅuïÞÝ`ƒÖ�““UUU5ÊÚRSS
+
+¦M›æïïÿòåËC‡é¸¬½½=÷Ÿf´÷ yxxÔÔÔðÌŠ' �FŽIDJ3 ›7K�×È�1‚ˆúöí»mÛ¶[·nI¥Òz¯�;O÷É'ŸÈÿÕræŽˆÄbñíÛ·ccc‰(22’klF{Q»víˆèùóç|sÂ÷¡/05dÜ§TŸöZ^Üa]:+v¨÷kM$QUU•Ž¢} ÓêLÕ«W¯¸úI®E‹üqnn®¾9óóó-,,„BaQQË²EEEB¡P äååÕ¹ª°°°—/_reïÕ{‡÷ë‹%%%DôÛo¿ñÌŽ<h$“ÉøŽ`¼ìííSRRnß¾Ó±cÇòòò­[·öêÕëÖ­[z­*11Q*•Ž9ÒÙÙ™ˆœ��£££e2ÙÖ­[µ/èââ²téÒV­ZÕ{+À8::
+…Bœ¶CBñ ÷ƒY­[·ÖwAµ©è²`›6mäã6é@�Å××7..nÿþý¹¹¹ÙÙÙƒ.--�?¾î9Y–MLL$"î‡;s·uëVÕÍá–}úôé¬Y³^¾|9lØ°gÏžqw5|ïé»ù`$Z·n�â		Å€F)))D¤ö»÷M¤OŸ>òq›ooï¤¤$"ºpá‚îK�9s&''‡ˆÂÃÃå×À'¢œœœ3gÎ¨]ªmÛ¶«W¯6lXqqñ·ß~Ë56ë½áêêZXXÈw
+0#(ž Ô»qãÆ²eËˆhìØ±tÒ¤ID´lÙ²û÷ïlÐFÄÍ>ÑëŽö‰áÚïýñÇ---“’’¸ÝÕÜ÷Ô›««ë‹/øNfÅÀÿ‘J¥%%%_ýuïÞ½ËËËc° QQQ¥¥¥}úôYµjUNNNmmmUUÕ½{÷6nÜØ·o_ƒ%©S```||üÅ‹KJJ$Iaa!wMQ"Òôû*ªJKK8À0ŒÒ4s–eóòòÁ�JKK5-îíí+‘H¸ƒOÍhïAãjÓ¦NÛ�Aé2«@wdÜßR}ÚkyuŒ1BíÏ³hy)5üµÖè?ÏÒDi5-èèèøûï¿ë˜aíÚµD4xð`µC¼ûî»D´víZÅU)õyòä‰��Ã0—/_ÖwïiÚ¨:·�GdÜ¯/¾|ýõ×AAA|§ 3‚#O ÿÇÚÚÚÅÅ%88xÆŒ)))ŽŽŽÎàààpôèÑ½{÷>ÜÍÍÍÒÒÒÎÎ®gÏžÓ§OWû[Å|¹~ýú·ß~Û·o_ggg;;;??¿9sæÜ¼y³W¯^:®„;+§8U\ÑäÉ“©®3wíÚµ›5kË², æ³÷ qµjÕª¨¨ˆï`F_0�FÅ0Ìž={F�Íw „×—Z?ÿüó‚Š‹‹ùæGž   ystt,//Ç± 0K¾ ˜†a´ÜkToýÍ(*@Ë–-¥RiEE…ƒƒßYÀ,àÈ  4oÜÜD-_Ìh\(ž Gû×7øN÷Í(*@Ë–-‰¨¬¬Œï `.P< @ó†#O``(ž   yãŠ'yƒAñ  Í›���¥¥eyy9ßAÀ\ x €fÏÖÖöõë×|§ s�â	  š=[[ÛÊÊJ¾S€¹@ñ  ÍŠ'0$O  ÐìÙÚÚVUUñ�ÌŠ'  hölllpä	Å  4{8m†„â	  š=O`Høa`h999gÎœ9}ú4ßA ÀY[[‹Åb¾S€¹@ñõ÷ôéÓÓ§OŸ>}úÌ™3�=²··ûí·ù æH Èd2¾S€¹@ñú)**âª¥Ó§Oggg[ZZ†„„Lš4iÐ A½{÷¶²²b†ïŒ ‡êêj‘HÄw
+€†Bñ†„â	êÆ²lFFÆáÃ‡SSSïÞ½keeõÎ;ïLž<yðàÁ––ÊÏ¢¬¬,^rB=ìÛ·oðàÁÜOƒ4_(žÀ`–eùÎ FJ,Ÿ?>55õðáÃ999-[¶:thDD„›››¦¥pä	 IíÙ³gôèÑ|§0:cÇŽ‹Åû÷ïç;˜yeÅÅÅ\ÁtâÄ‰òòòîÝ»ÇÄÄ:´_¿~VVVu.Žr¼¹zõjPPP``àµk×øÎÐ 8m†„â	þëÅ‹¿üòËÞ½{³²²ìíí‡ò¯ý+""ÂÕÕ•ïhÐTöîÝË0Ì�7rrr:wîÌw€úCñ†„âÉÜ½~ý:55uÏž=¿ýö›L&2dHRRRTT”½½=ßÑ iÉd²mÛ¶±,kmm�””ôÝwßñ� þP<�!á"™fªººú×_ýðÃ]]]Ç�ÿúõëuëÖ=þüÐ¡CãÆ�Cåd233Ÿ?NDb±xË–-8ß
+ÍŠ'0$y2;W¯^Ý°aÃîÝ»«««‡²~ýú¨¨(|ÙÊýòË/VVVµµµD”——wåÊ•àà`¾CÔŠ'0$Oæ¢²²rïÞ½7nÌÈÈèÔ©Óüùó'MšäééÉw.à‡D"Ù¹s'W9‘µµõÎ�;Q<Aó…â		§íL_ZZÚèÑ£[µj5cÆ__ß+W®äääüýïGådÎÎœ9SZZ*¿)‹·oß.‘HxŒÐ(žÀ�P<™,‰D²gÏž>}ú¼ûî»·oßþÇ?þñèÑ£ŸþùÍ7ßä;ðo÷îÝJž())ÁOBó…â		Å“	*//_¹re×®]Ç�ß©S§ôôô»wïÎ�;×ÅÅ…ïh`jjjöîÝ+?gÇ±²²Ú±c_‘ Å®0nRž={¿yóf‘HôÅ_|þùç¸J¨:xðàÈ‘#U_û666/_¾´µµå%€^öîÝ;zôh"²²²’ÉdíÚµ³´´´³³³±±9räÌ™3ùŽ	¦	ÆMDIIÉ�?þ¸fÍKKË¿ýío3gÎlÙ²%ß¡ÀHíÚµËÂÂBu†SMMMjjê˜1cxI —ÈÈHkkk±X\QQ!o,++“ÿÿþçøÈfGžš½šššµk×.Y²„eÙ9sæÌž=»E‹|‡ãUQQáââRSS£z—……Å�!CŽ9bøT õuìØ1µ_tèÜ¹óÃ‡	Ìæ<5o{öìéÞ½ûÿüÏÿL�:5''çÿý¿ÿ‡Ê	´;vì˜ÚÊ‰ˆ¤RéÉ“'KJJ	 ~Þÿ}µóœ,--§L™bø<`>pÚ®¹zðàÁŒ3N�:»páBwww¾AóPXXøÁÈoþþûïNNN�:u’·Ü»w¯OŸ>|DÐÏðáÃ†Qm—Édü±Áã€Ái»æG"‘,]ºtÉ’%ÞÞÞ6l		á;4co¾ùfxxøÒ¥KùP¸pá‚T*•·XZZ¾ûî»G�å1˜<œ¶kf<xÐ¯_¿%K–,\¸ðÊ•+¨œ �†Á¼¡ù5j”R‹T*ýôÓOy	æÅSs²eË–^½z‰Åâ+W®ÄÅÅ)]ä ‡Ÿ¡‹ŽŽVªþ‡ÎW0(žš‡ÚÚÚÏ?ÿüÓO?�9sæÅ‹}}}ùN&B  x‚æËÝÝ½W¯^ò™OVVV“'OÆ–ÐÔ0a¼xùòeLLÌõë×÷ïß?räH¾ã€IÁi;hî>øàƒ›7or,¨­­���å;˜>y2v�?îß¿ÿ“'O²²²P9A£Ãi;hîÞÿ}®r½zõÂ�y0 OFíþýû}ûöµ²²JOOÇ;4œ¶ƒæÎËË«k×®DÄ0ÌÔ©SùŽfÅ“ñzþüyDDD»víÎ�;×¶m[¾ã€iÂi;0Üwî,,,ðãB`˜ód¤^¿~ýÞ{ï	‚ÔÔT'''¾ã€ÉÂi;UÉÉÉ|G ý888QPPÐÉ“'ùÎuõððà;Eƒ x2R_|ñENNNVVVëÖ­ùÎ¦Å“*½h¦233333ùNuÛ³gÏèÑ£ùNÑ (žŒÑöíÛ·mÛväÈ‘nÝºñ�Læ<©eoîæfÍš53gÎTûk-`TLã1Âœ'£sÿþý3f|ñÅ‘‘‘|gÓ‡9O`¾øâÓøT†fÅ“Ñ™9sfûöíãããùf§íÀ4ø8ÃÁi;ã²ÿþ“'OfddØÚÚò�ÌNÛ è¥º©¬¬œ3gÎ„	úôéÃw08m  /OFdýúõ%%%K–,á;˜œ¶ ÐŠ'cQSS³råÊ3f¸»»ó�ÌŠ'  }¡x2‰‰‰¥¥¥sçÎå;˜Ìy ÐŠ'£ “ÉV­Z5vìXWWW¾³€yÁœ'  }áÛvFáìÙ³÷ïßß·oßAÀìà´ €¾päÉ(lß¾=88ØÏÏ�ï `vpÚ @_(žø÷úõë}ûö}ôÑG|s„Óv  úBñÄ¿ãÇ�WWWã‡´€8m  /Oü;räHïÞ½Û¶mËw0G(ž  ô…â‰Ç�÷ÝwùN¡Ã0üþÐ¦ð¾�MGiÓ4m)æ<™Õç £@$¹ººöîÝ{æÌ™YYYº,®¶ƒZºÄëÔ©Ã0×¯_WlŒˆˆàÖ0`À Åök×®1Ó©S'¥•„††2¢%a�iõŠ-ï¬ôSî‘‘‘j×£ýQ°°°ðôô6lXFF†.£_P<ñì�?þxòäIxx8ßA@=ÝßC›)sž€ˆˆjjj
+ÿýï¯]»644täÈ‘¥¥¥†À•GgÏž•·H$®†`æâÅ‹555ò»Îœ9CDT\ÃüÁ•}—.]ºsçŽARÿ—¥¥å©S§Š‹‹¹›EEEiiiVVVú®G&“åçç=z´ÿþû÷ïoì˜ÐhP<ñ,==ÝÎÎ.((ˆï ÆˆeYijNÛ™=î…&‘HŠŠŠÒÓÓçÍ›'‰RRRbbbêñÜ`ÕÑeA®xâª"ÎÕ«W+**¼¼¼|}}«««/]º$¿‹ë¦t8jóæÍD$
+åÿ×=§–F]<¸¶¶öÀ�ÜÍH$’Áƒë¾ù£ðŸÿü‡Ûó‹-Ò}q00O<»zõj¯^½êñ
+@£Ài;àXXX8;;÷íÛwÅŠYYY-Z´8sæŒ!~p•Ðùóçå‡BÏ�;GDaaaaaaò›D$•JÏŸ?O=òT[[›””DDÿüç?‰())I,,ü˜1cˆhÏž=ÜMî?\£^,,,ºtéòÓO?Qvvv£f„Æ„â‰g×®]{ã�74Ý+‘H~úé§>}ú¸ººZ[[·k×nÔ¨Qiii§OŸf¦mÛ¶UUUŠýkjj<<<†9uêýï)'©TºxñâŽ;
+…BŸÄÄD¥!V¯^doookk–ššªØAûâÜUUU3gÎlÓ¦�¥å/»*‹—-[hkkkkk˜��P[[«´ .+Wº©}^ÂŽ;ÂÂÂ…Ba×®]çÏŸ_VV&¿7777::ÚÞÞÞÅÅeúôé•••šö¼|DÕ¡uÜ@Uééé&Lððð°²²jÕªUxxø‰'´ÐþèhßXá´¨
+Œ‹‹#¢Ý»wlP�®]»–––^»v�káNá………½óÎ;¤P<]½zµ¼¼ÜÛÛ»]»vòÅSSS
+
+¦M›æïïÿòåËC‡,|tt´µµõ™3g
+
+
+
+
+
+Îž=kmm]¿µqï3...�š•ÚC¬`‰ÄÖÖvóæÍš:ÄÆÆjzÔBCC‰hÅŠŠý×¬YCDÁÁÁÜM®³êJ’““¹b±Xít+—÷yÿý÷—­®®~ûí·UW;`À ±X¬ïÊ•n*éÒ¥w¯L&7nœj__ß²²2–e_¾|éáá¡xWLLŒÒJÔŽ¨ãê²6†aRRR4õ×òèÔ¹±šöžê(cÆŒáÎ€íÙ³‡ï�Oõ9 åù÷î]"òôôÔ¥³Žê4eÊ"JHH`YV"‘´hÑ‚ˆž<yòâÅ"²µµå^_ñññD4mÚ4Åe‡JDkÖ¬aYvõêÕD¡{Âz‡—/8|øp"úé§ŸÖ­[GDQQQjW«½E"‘äää|ðÁD4{öìzä1~¦ñúBñÄ§G�QVV–¦¶¶¶D´páÂüü|±X\TT”ššÎ²ì±cÇˆÈÕÕµ¢¢‚ë\]]ÍývàÀ®…{Mzzz¦¦¦–••åååEEEQ¿~ý¸+V¬ "{{ûÕ«W?~ü¸ºº:333::ZÇÅå}ÜÝÝ�9òêÕ+®‘{ksttÜ²e÷wØæÍ›¹÷ÁåË—ë»rµ{æðáÃÃXZZ^¼x‘kÙ¸q#—$99¹°°°²²233388˜ˆâââX–�?>uèÐáìÙ³¯^½:sæLûöíë÷y ËªŠŒŒ<vìXii©X,ÎÏÏ_µj)Tºª´<:un¬jrM[:vìØ‘#GjÙfÈ4ÞÜUéU<qGµmllté¬ØA-îÚµ‹ˆ†Ê²,7ÃÉËË‹»ËÇÇ‡ˆ233Y–åþ¨P|Œòóó-,,„BaQQË²EEEB¡P äååé¸½/žvìØA
+ÇÉvîÜ©vµšZ988ÄÅÅÕÔÔÔ#�ñ3�×Š'>qG¡Ÿ={¦©C÷îÝ‰(<<üË/¿Ü´iÓƒïå¦™ÇÇÇs7¹ÃN>>>2™Œká^‡'Nœ�/’““Ã½2¹›D´aÃµ£×¹¸¼�¼\ãøûûQbb¢bã¦M›ˆ(00Pß•«ËÍÍurr"¢~øAÞÈ}9ùüùóŠ=>|(ÿåvæ¡C‡ä÷þúë¯:~(5ê²�ªÒÒÒ†îææ&?¹ID"‘HS-�N�«š\Ó–Ž7nÄˆš2˜'ÓxsW¥Ë¹Üë×¯ÉàÅÓ³gÏ¸7�ÚÚÚ„„"š2e
+w×´iÓˆhéÒ¥b±ØÎÎŽa˜/^Èüá‡ˆèÃ?”·pó�¾ÿþ{·W¯œj,//‰D�@ ØØØpLê²ÏÕî±nÝºqå—é1�×Š'>%%%‰D"y­£*##£cÇŽŠ¯¨ˆˆù[FJJ
+µjÕêÕ«WUUUÜa§­[·Êç©ªª’·Èg·p7mllˆ¨  @íèu..ïS\\¬¸ H$"¢ÂÂBÅÆ‚‚Å÷bÝW®”ªººúÍ7ß$¢~ýúI$y;w”ÎÂÂÂÂÂ‚{ÿ’ÏO²²²bY–ûNII‰|ù÷ŠÕn¾–ºl ’_~ùEÓ%4­åÑ©scU“kë£�>âÎ/€œi¼¹«Òåƒ\Žûªûöíué¬c]pG˜.^¼øÞ{ïÑŽ;¸vnöUDDDzz:õìÙS¾ˆL&ëÜ¹3ýõ�1nBaçÎ�ß`µ$¬wxÅå3Þÿ}M«­³¥¸¸øÜ¹s}ûö%¢M›6Õ#’‘3�×&Œó)??ßÝÝ]Ëe„BCC<x�‘‘±|ùòQ£FÙÛÛÿöÛo³gÏæî�ŠŠò÷÷/**Z½zõ†ž>}Ú¾}{Õ©0Ü'=§—,Òeqî8P=Ô#Û¬Y³®^½Ú²eË;vXXXÈÛY–%"©T*•Je2÷ŽÉÝ¥}·apO›6-;;›++**ê½¶FÜX\ª Ôâþ6ãÎ÷�»´´´.÷=;ù222Nž<I½HÁ™3g¸ãÖáááò/vp§örrr¯}ÐÔä_¯«Ç÷ìäœœœÞ~ûmîæ²eË'46O|zùòe�ß§°´´ýúë¯÷îÝ{ãÆ"’E‹a˜¿ÿýïD´råJnÎW_}¥×UºuëFD¬_~M¼½½‰èèÑ£Š�‡–�XoÛ·oß°a­_¿¾C‡ŠwùúúÑ¥K—Ôþ•@DÜÅˆ¹wdŽüË;Zp%�D"Ql¬ÇrçÔâãã½½½¹’‘ûF¤Z�:7Vw¸T¨ºqã÷±=vìXÍUEë×¯/++ëÚµ«»»;×îæææííýêÕ«õë×Ó_/R ý’Nu^ð©½÷Þ{vvvvvvÃ†k”>~ü¸QÖ�¯)g�Ž¦L™òî»ïjéÐ¿ÿ¤¤¤Ç�×ÖÖpog¶¶¶òR©”;ÊMD­[·®¬¬T\\íC¬Ø¸råJ"rppX»vm~~~uuuVV–Ò„q-‹kêÃUrNNNÛ¶m+,,,,,LLLttt$•	ãz­üÖ­[ÜéªñãÇ«î«-[¶‘››ÛÆ�sss+++«««³³³7lØÐ§O¶¾Æ]]]‰h×®]ŠguÙ@%]»v%¢o¾ù¦¨¨¨¤¤$99¹M›6ÚG×òèÔ¹±uîL¹I“&qósAŽLâ´‚*Õç€b‹D")..NOOÿê«¯¸ú~À€:žóÒ±ƒ.
+å¡?ýôSÅ»¸ïâ‘@ �O())‰DÃäææ*­*//O ˆD"ùÉz-	ë^û‚Ú÷¹Ú–’’’óçÏs§íÞzë­zD2r¦ñúBñÄ§1cÆÈO�«EêL�:U±w]8"Z¼x±ÚÅµ4ŠÅâAƒ©¡ãâšúTWW÷ïß_uµaaaòï�ÔcåÜñMiY–�9s¦Ú\Ÿz\ª€eÙ�?þXuUºl ’åË—+už8q¢öÑµ?:Ú7¶Î�©¸�‘‘‘Zö€"“xsW¥úÐô"¢#F(NÔÞYÇ:òóóã–’Oxâp_g#¢7ÞxCÞ¸víZ"<x°ÚUq?ºvíZM{@ËÎÑ‘ö5ísÕU666.\¨G$#G&ñúBñÄ§¡C‡Nš4IK‡¬¬¬O>ù¤S§NVVV...¡¡¡?ÿü³â,i–e/^¼HDJït¬nŠX,NHHð÷÷‰Dvvvaaaòï£é²¸¦7Žêêêøøxnµ666þþþË–-S,,ê±r]Þ—ÓÒÒF�åîîneeeÀ‡Å    IDATccãëë;wîÜë×¯s÷æääDEEÙÙÙ9;;O™2…û>‘öwÌÒÒÒéÓ§wèÐA~>TÇT"‘H¼¼¼„BaçÎ�-Z$Ÿœ¤et-�N�«ã#«z93goîª´l[[[»¸¸Ï˜1###CÓâZ^ƒuvÐÑ¬Y³¸¥òóóÛåç°æÍ›'oìÕ«íÚµKíª¸™C½zõÒ´”¶N¯œº,¨iŸ«¶È‰D¢®]»N™2åÞ½{õÈcüLãõ…¹¢|ŠŒŒl×®]OÉÇÆÆ&&&Î›7�»,€^>ýôÓÇ�?~œï F„a˜={öŒ=šï  &È4^_˜0Þ¼=zôèÈ‘#¤îRÝ ºÀ·í  ôeYw0Vòi•C‡íÑ£¿a ™Bñ†¡ýZ$Æù$lŽ™Á0P<ñI H¥Ò†¬A$………q?ÖP¸T €¾P<ñÉÁÁáÕ«Wõ^ŸyÐpÃÈ¯íÐtšãûUsÌ†�9O|jÑ¢Eyy9ß)À¬á´ €¾P<ñ©eË–(ž€_8m  /O|jÙ²eii)ß)À¬á´ €¾P<ñ©]»vùùù|§ ³†Óv  úBñÄ'ww÷ÊÊÊ²²2¾ƒ€ùÂi;  }¡xâS»víˆèéÓ§|ó…Óv  úBñÄ'OOO"’ÿ`€áá´ €¾P<ñÉÑÑÑÕÕ5;;›ï `¾P< èÅÏ¼¼¼<xÀw
+0_˜ó  /O<óöö¾ÿ>ß)À|aÎ €¾P<ñÌÇÇçÎ�;|§ ó…Óv  úBñÄ³àààüüü'OžðÌNÛ èÅÏÞ|óM�@pùòe¾ƒ€™Âi;  }YòÀÜ988tëÖíòåËÑÑÑ|gs„Óvjeeeñ ŒŠ'þáÈðÅ“Zÿüç?ÿùÏò� ŒŠ'þ÷Ýw,Ë2Ãw0;˜ó¤
+;¤¹swwŸ={öüùóù&sžøTRRòðáC¾ƒ€9Âœ'0=ÁÁÁW®\á;˜2Oü°´´ÄKx�Óv`z‚‚‚ðŽ
+M
+Åÿlmmßzë­“'OòÌŠ'0=ÁÁÁ¹¹¹………|“…âÉ(2äøñãøÃ8m&&88˜a˜«W¯òLŠ'£þäÉ“»wïòÌŽ<�éqvvîÔ©¾ÅMÅ“Qvvv>qâßAÀì x“„9ãÐ¤P<‹Aƒ)OR©”¯<`>pÚLŠ'hR(žŒÅ�!CÎ�;WUUÅ²lzzú´iÓüýýù¦GžÀ$?}úôéÓ§|Ó„‹d‹!C†TUU}úé§gÏž}úô)Ã0ŽŽŽ|‡Ó‡â	LÒo¼aaaqùòå#Fð�LŽ<ñïáÃ‡.0` íÛ·�ûS	Ÿg`(žÀ$ÙÛÛ{yy]»v�ï `špä‰OçÏŸÿá‡NŸ>-¿Ê³X,–ß‹�40 ÌySÕ«W/OÐDpä‰O�;wþý÷ßY–•J¥ª¥>ÒÀ pä	LU@@À�7øN¦	ÅŸ<<<Nž<iee¥ö^|¤� xSðçŸóLŠ'ž½ñÆ›6mR{>ÒÀ pÚLU@@ Ý¼y“ï `‚P<ñoÂ„	_|ñ…@ üX xÀ‘'0UmÛ¶mÓ¦Íõë×ù&Å“QXµjU¿~ý”Îßáx  Š'0aþþþ˜öMÅ“Q°´´üõ×_ÝÜÜ,-ñýG0(O`Â0gšŠ'cáììœššjiiÉ0×‚�40 ÌypçÎÅKÀ 4
+OF$  `çÎ�ò›øHÀ‘'0ab±øÞ½{|SƒâÉ¸ÄÄÄÌŸ?_uò8@Añ&ÌÇÇG$aÎ84:|H�Å‹¿óÎ;„Óv`8m&ÌÒÒÒÇÇÓž Ñýezr~~~ff&_Q@î£�>ºyófiiirr2ßY ‘�=šï�#O`ÚüüünÝºÅw
+05)ž233ÇŒÃWP…‡Ãô x0$??¿“'Oò�L�š/Æã�ÔHìß¿ÿý÷ßç;4šääd#¬†qÚL›��Ï³gÏJJJœœœøÎ¦sžŒ*'0 yÓÖ£G"Âî q¡x0kÍ±xzôèÑgŸ}Ö¥K¡Phkkëçç7{öìË—/+öaF~É4ÅŽ………§§ç°aÃ222”V~ïÞ½øøøÞ½{¥5žêV€¾:tè`ggw÷î]¾ƒ€IÁõ¬ÌZ³+ž®_¿VVV&o¹}ûöíÛ·×¬Y£û†Èd²üüüüüücÇŽíÝ»Wñ(¯��O#'^	ooï?þøƒï `Rpä	À¬5»9OóæÍ+++ó÷÷?~üxQQQMMMvvöºuë‚ƒƒuYœeY–e%ÉþóŸ˜˜–e-Z¤Ø¡G�ß}÷ÝíÛ·›&>ð G�(ž qáÈ€YkvGž²²²ˆhß¾}^^^\‹·····÷çŸ®ûJ,,,ºtéòÓO?8p ;;[ñ®;wî4bZ0>>>›6mâ;˜y0k+ž¸é;UUU3gÎlÓ¦÷Ø£F�b¦gÏžò£_2™¬gÏžÃhúf"÷�©ªªªF‰DD..._Uzzú„	<<<¬¬¬Zµj~âÄ	¥±†‘J¥‹/îØ±£P(ôññILLTì“››mooïââ2}úôÊÊÊ†"êÑ£G^^Þë×¯ù&„U°gÏ¥ h,ÆùúÚ¹s§¥¥¥âÞpg±,ûüùsggg"Ú¾};×mÛ¶mDäêêZXX¨v=Ó§O'"{{ûÉ“'oÝºõæÍ›‰DÓpšZ$INNÎ|@D³gÏÖX¯­SÄ0LJJŠR‡ØØX¥nÉÉÉ\‡—/_zxx(Þ£WÐ„;gwõêU¾ƒ€é@ñ` ÆùúÚµk—………âê ww÷#GŽ¼zõJÞž””DD�:u‹Åb±¸S§NDtàÀMëyõêÕˆ#‹Œ-Z|üñÇ¹¹¹ªÃ©¶(rppˆ‹‹«©©ÑXÇ­‹ŒŒ<vìXii©X,ÎÏÏ_µj+­ÍÓÓ355µ¬¬,///**ŠˆúõëÇu˜?>uèÐáìÙ³¯^½:sæLûöíQ<5ŠÚÚZ¡P˜””Äw0(ž Ä8__»wïˆ«ÔVEÃ†#¢uëÖ­]»–ˆÆ�WçÚnß¾Ó±cGnÍŽŽŽ7oÞTN5€’nÝºíÜ¹SK`·.--møðánnnÜéHŽH$RZÛ‰'ä-999\ÇÝìÞ½;:tHÞá×_EñÔX|}}¿ùæ¾S€éÀ„q ³fà	ãaaaª�?ÿü³¯¯ï?ü@DmÛ¶ý×¿þUçz|}}}}}¹ÿß¿ÆŒiiióçÏ?vì˜öå[RRrëÖ­o¾ùæ£�>ªªªúä“OôÚE{öì;v¬ên¬®®Vjéß¿¿üÿ\Ù÷êÕ+îfnn®RîÂ¡QàwÐ¸0aÀ¬q‡�6œÚŸÈpvvvuuµ²²ª¬¬lÝºµ½½½^ëôööæÎý]¸pA¯$o¿ýö®]»ˆhÙ²ez�¨äûï¿gYvÚ´iÙÙÙUUU,ËVTT¨í)‰äÿÇÕ/ÉÇÇ×É„F„â	À¬qá†¬ŸTÅÅÅ=xð`ñâÅ,¸yóæßÿþw}×PRRBØŠÇ�×oAÎÃ‡‰(>>ÞÛÛ›+�N�:¥ïJ¸É^Šõß¹sç’
+uëÖ-''G"‘ðLŠ' ³ÆO<^'3--míÚµ={ö?~ü—_~Ù¾}û•+Wž={VSÿÀÀÀøøø‹/–””H$’ÂÂÂ””î‹i!!!º�[ZZzáÂ…qãÆ‘¿¿C6ÁÓÓ“ˆ–/_^\\\ZZºwïÞ©S§ê»nþøÌ™3Ï�;WQQqöìÙÙ³g7$(òòòª­­}ôèßAÀT(N€2ž	­ªÙ3…ÂÖ­[‡„„|ñÅ™™™º,®¶C�;Dn²Âµk×‡Â­!,,L±ý÷ß'¢Ž;*­¤OŸ>DôÖ[oiIXgZ½bË;GDD(¶GDD¨]�öGA xxx:4==]—Ñårss§N�Ú¹sgkkk›ž={Îš5ëÒ¥K�2ôü±téÒ��ùãa<¯/E ¢ÚÚÚ¦Híµ¸¸ØÝÝ�ˆRSS¹–�;wQûöíKJJ´¬G•££ãï¿ÿ®e8MÚØØ\¸p¡ÎnZ6mùòåJ�'Nœ¨´”Ú•(6âRMª¸¸˜ˆ~ûí7¾ƒ€‰h–Å“’èèh¥÷Ù:ßq´¬M—x“'O&¢U«VÉ[jkk¹‰ÃˆD¢êêjù]+W®$¢ØØXÅ5(ž}¿}û¶ö= %­^±¹ž–––VVVEEE\ãË—/¹Mû\µE	Ã0ûöíÓ% Ë²×®]kÙ²e�›Pï¡ë±[Æx^_Š¸¯t‰Åâ¦Hí#òá‡Qß¾}å-2™Œû¡n
+¶ªë×¯ûí·}ûöuvv¶°°°³³óóó›3gN^^žöá”ž"‘¨k×®S¦L¹wïž–nº<—$IBB‚———P(ìÜ¹ó¢E‹jkk•–R»¥Æœœœ¨¨(;;;ggç)S¦È/ê¨ehÐ�““ÓºuëøN&¢™OÜÿ%IQQQzzú¼yó¸�ÉdZ¯sýzÙ¾};EEEÉ[.^¼HD^^^={ö$¢óçÏËïzï½÷ˆHé#óæÍ#"¡PHDsæÌÑ+a½ÃsrÇ™6nÜÈ5nØ°�ˆ"##µïsÕù¯ƒ‘ŸŸŸŽHDj˜¬Q†Vúa2S†ñ¼¾¥¤¤‘b¹`’‚‚‚æÎ�Ëw
+0Í²xúÿìÝy\çÚ7ð+!ì ˆ�â‚Š"Š ¢•º[\JQ\PQ«¶ÖjµÚV±›ô´=§n§¢{J­­¸VÁ—º7À\P‹ÊâÂ¾É’ÌûÇ¼Ož”@ÈF†d~ß?üÈäÎÌo&$¹¸çž{”¥¤¤4kÖŒˆâââl¬yõØá¥NNN2™Œ]Â^­3{öìO?ý”ˆ–-[Æ.—J¥l¼œœÅÓ%‰««+­_¿žˆÄb±ê4}�W<±w„>|8»pØ°aD£mñÄzñâYYYi˜ÁÖÖ–ˆ<x IT}6�âIC‡&"ö1 3öÎ;ïŒ;–ë`&L~À¸¿¿DDýþûïFÛhÛ¶m===‹‹‹SRRØ%ìøÖÀÀ@vjÅe2×¯_/--õòòjÝºµâéñññ¹¹¹=zô˜;w®ŸŸ_~~>ûf¡¡¡VVV			¹¹¹¹¹¹gÏžµ²²
+ÕmmÚÞ¬iÞ˜ŒÏšÂÕv FÐ©S§G�q�Ì„ÉOD4nÜ8"ºzõª17:dÈ"JHH "™L–˜˜HD���ƒ&¢¤¤$vÐÛ€=W¥°yóf"b'åcÿe—‡““ÓÛo¿-“ÉöíÛ·wï^™L\ß8$5d2ÙãÇ�Ùž6öaš`o¬1`À€™3gnÝº555U&“gÓP'OÀ�:uÊÈÈÀ¯:†r7TÓ9­ šMu‰Û�akk«Icå5Ø¹õFŽÉ0Ì•+Wˆ¨sçÎìCÞÞÞDÄ^DD{öìQ<1;;ÛÂÂÂÚÚš²]PP`mm-
+îªùÞÕGñÄ;v�R?{{
+MŽ¹êáRw0UMóÆdÆÑtÞ_ÊŽ=JDÊ7›0Kì	å :3‡ž'N¦¨a{ž.\¸ •JÙ÷¤â¾Š3w555‰‰‰�@ù–ÑÑÑ2™lÜ¸qìÍä���CCCår¹bÔ‘Œ3ÆÆÆæüùó.\°µµe'˜ÑMYYÙÁƒ÷îÝ«a{‡ƒ*ß˜¬´´4&&¦gÏž©©©�ºi¨“P($ô<têÔ‰ˆpæÂŠ'vÞ3mŸXg9©ásÝÜÜ¼½½ËÊÊ®_¿ÎOŠQ)Š§+W®¼zõÊÇÇ‡În‘¯=sæLÅªØ3w111Fûstt9r¤\.—Ëå#GŽÔönŠcUXXxîÜ9±X<mÚ4­Î<úøøDDDìÛ·ïñãÇéééÃ‡/..fï*ßØ›†ZpÚx¢uëÖvvvìtð z2‡â‰½Öš�Æ˜ØÎ§Ó§O³wTPt/±ÿILL<uê”¢+!!�½•zPP�à±§ö222ØRÆ1yòäZÿÑ�AîÆù�ÉxŽóÆŒC xxx xƒ0ùâéÖ­[ìwç”)SŒ¼i¶*Z¿~}II‰§§';Q2¹¹¹yyy•••±3(�WßGbÌ”Q£FÙÛÛÛÛÛ‡„„d…úÜŒÛ“ñNÛxzz¢xƒ0ÉâI&“%&&~õÕW}ûö---2dˆâVF(rrrH©Û‰Åž¹ËÍÍ
+…ŠÓyÅÅÅû÷ïµG3“™™)
+÷ïß_\\lœðvvvååååååvvv:¯D‡»ƒ5Á“ñNÛ`¶0×´Ã~Ð×2vìØ˜˜Õ‡êl¬ü%Ñ`õÄb±¯¯/;ÌYµxÚ¸q#ùûû³3ÑÎ�;«ªª†ÎÞO™»»û°aÃN�:µsçÎO>ùDÃ \Q=n¶¶¶ì]htëÖ­[·n©.wrrÒdnºVÅ�(êc�â©ÖJµ 3Bµgœ‚²ººú_ÿúWlllvv¶T*Õds?Î|+�;uêÄŽ:Ð“Iö<YYY‰Åâ€€€O>ù$11ñàÁƒNNNœ$QŒgª³ç‰þ>à‰=+§<T\{¿<Óû¬¸;XJJÊÀ�5yJ}7&»}ûvÏž=uÓP'>�ybrµõeË–­ZµêÉ“'R©”«|ãááQTTTRRÂu0yM´çIõ/!­þ6j°±¡þÒŠŠŠŠŠŠR]Þ¶m[ÕMÜ¸qCÍª¦L™¢<lKMB�Ã«¢&Ç\ÿãÖ£G�=z4ØLçMóçohCÁ˜'UÆ9ìMöíÛ7jÔ(+++Mž‚—IOîîîD”••¥Ã´À ÊL²ç	 …o'nšŽ§OŸÑ¸qã4¬œ@mÛ¶%¢ììl®ƒ€ÉCñT�Z\§«[ÉÜDb€æ§í¤RiTTTïÞ½ìììãããÍvìØèäädmmíéé¹hÑ"�Ï}H¥Ò_~ù¥_¿~®®®VVV­[·;}ú´ÎÛRß¾¾ýRüBªþŠÖúu•H$+W®ô÷÷·³³³³³ó÷÷_½z5{ÿ%åö2™lùòå:t°¶¶öööV3¶FÑžˆ„B¡bs/^|ï½÷Ú¶mkiiÙ²eË   “'Oª>QçCñøñãÐÐP±X<oÞ¼ŠŠ
+5«2KNNN(žÀ ”¯ùjš·�0>Í�XÓÑD27‘MSÓ|]¼x‘ˆž>}ÊÎ7¦ú’ÉåröªÆZ|||JJJØ•Ôz}Õ¿ÜõûÓa[¶—H$õíW}jm¢ªªŠ½ae-C†‘H$ÊíU÷+66¶Î#Pß¦U
+‚ƒÖw`•lðPäçç³ý.
+Š+”þ-1#]»výþûï¹N&Å€‘4Í÷{OëþóŸDäàà•••UUU•””Ê0{Ýh›6mbccóòò***’’’Ø9i#""Ø•¨ùRWÅÎŽ±xñâììl‰DRPP¤Ã¶lÿŸÿü§¾ýR“Syydd$999mÙ²%77777wóæÍÍš5#¢U«V)·www���/))ÉÌÌdoy4pà@5G^uë#FŒ8~üxqq±D"ÉÎÎþïÿKDõ=E«CÁÎàß¾}û³gÏ–••%$$´k×Ž‡ÅÓðáÃ?üðC®S€ÉCñ`$Móý•””DDÝºu#¢6¨6`çß:þ¼òBv¦AÅÍ°µ*žºvíJDAAA.Ü´iÓÃ‡uÞVƒíÙ«êÜ/59•—³³ˆEGG+7Ø´iùûû+·?yò¤¢{#GGÇúB�[?}úôèÑ£ÝÜÜD¢ÿ»”ÇÆÆ¦¾§hu(ØÃ~øðaÅ£àañ4cÆŒàà`®S€ÉCñ`$MóýuéÒ%öšˆrssU°EB¡�£Ã~éZZZ²m´*žkMuüòåK¶Õ`{[[ÛúöKMNååì‘ÉËËSn�››KD¶¶¶Êí+++S?ÔwT·¾{÷îúÆ3Õ÷­…µµ5)ž^XXÈÃâé»ï¾óõõå:˜<àµò3CD2™L&“±7“fþ÷k[yÐ´æú÷ïÿðáÃÄÄÄU«V………988üñÇááá:lËàÙôÁ–Y,.�Xºt)Ã0sçÎMOOgë°òòrÍŸÞ¤ESÖ¶m[ý¡xà5ök¾cÇŽDtèÐ!Õ>>>DtåÊ•:ÿüÒm£"‘¨ÿþ_}õU\\;ã<{Y™¶Ûj°}—.]êÛ/Å¾«Ÿ£ÒËË‹ˆŽ;¦¼ðÈ‘#Š•
+{Š-22ÒËË‹­ÃÎœ9£ùÓ<ô÷ÛoŸ;wÎ€ùMEÛ¶m‹‹‹µ*LT¡xà5¶€%¢Ï?ÿ|Ýºu999ÕÕÕ—.]7n}üñÇD4fÌ˜M›6=yò¤²²²ººúÁƒ7nìß¿¿[<xðŽ;Ø{’äååíÝ»—ˆªªªtØVƒíß{ï½úö‹ˆ\\\ˆ(..ŽÝz�ØKØ.\¸mÛ¶üüüüüü˜˜˜Ï?ÿ\ñ�¡°ó7®Zµª°°°¸¸8..nÎœ9š?½ÁCÁŽaŸ?þ¹sçÊËËÏž=Ëööñ¦zÃPþë¤iŽÉ 0Móýuýúu"ºÿþ°aÃêû|˜?¾ú�Z&ªŸ-Êê\Ïœ9stÛ–úö‰DÍ~Í˜1£ÁMTUU4Hu���ÕÕÕjöWýAPm°jÕªZ›˜>}z­6êT(0U+??ŸˆN�:Åu0m(ž Œ¤i¾¿Ø»=|øP"‘¬^½ÚÏÏÏÆÆÆÞÞ>00PùÊ¬Ó§O‡……µiÓÆÒÒÒÖÖÖÇÇçóÏ?¿yó&û¨ú/õZ’““gÍšåááaii)‹û÷ïÿÛo¿±wÆÕa[¶W³_ÅÅÅóæÍkß¾½¥¥e}ÅÃ0UUU‘‘‘ìlmmýüüV®\©¨œêÛ_m‹'©TºzõêÎ�;[[[wìØqÉ’%Š±Jõ=EÛC‘‘‘1fÌ{{{ggçÙ³g¿zõŠ‡ÅÃ0vvvµ.ŸÐ–€QúC066vòäÉŒ®ã @�¦ùþºyófÏž=ÓÓÓÙÁ= fÏËËkúôéß}÷×AÀ„aÌ ¯áÆÀÀ7mÛ¶ÍÉÉá:˜6O ¼†ß`¶ÐŠ' ^Cñ|ÓºuëgÏžq�LŠ' ^c‹'ÅŒØ fÏÅÅ…�#@g(ž xcž€o\\\Ø	 t&R]kü f/99™ëuÀi;à±X\UUU^^îààÀu0UuO“'O6~ àNÛß°3Ëçåå¡x�ýí´Ý¤I“¸›q
+LFrr²···��Ý?ü ‘H¸Žcb¸z«×§í€oÄb1áÌècž@k}ûö½}ûö?üéííýÇp�t‡ÓvÀ7(ž@(ž@"‘(<<üþýûýû÷1bÄèÑ£³²²¸ºÀi;àGGG›¼¼<®ƒ€	CñºkÕªÕ¶mÛŽ9rçÎ�îÝ»GEEÉd2®C�vpÚxH,£ç	ô�â	ôrçÎ�…FDDôîÝûòåË\'-à´ðŠ'ÐŠ'0 [[ÛÅ‹§¦¦ŠÅâþýûOŸ>½°°�ëP OÀC˜ê	ô„â	¦sçÎ'OžŒŽŽ>qâ„��Ï¶mÛ¸NÃ˜'à!ô<�žP<�!	‚éÓ§ß¿Ò¤I|ðÁ�!Cîß¿Ïu(Pcž€‡P<�žP<�áµhÑ"**êÊ•+ååå~~~_ýuUU×¡ n8m<$‹qµèÅ4–×_=99yõêÕ¿üòK÷îÝOœ8Áu"¨NÛaÌè	Å4"ÅtPýúõ=ztvv6×¡àopÚxH,bjÐŠ'ht­[·Þ¶m[|||ZZš¯¯/¦ƒjRpÚxH,Ëåò¢¢"®ƒ€©BñF2jÔ(v:¨E‹½ñÆW®\á:¡x^jÙ²%pLŠ'0;;;v:¨-Zôë×ï£�>*--å:ßaÌðPóæÍ‰¨¤¤„ë `ªP<�±yyy�:u*::úÀ�]»vÅtPÜÂ˜'à¡fÍšQYY×AÀT¡x°ÓA¥§§Oœ8ñƒ>6lXzz:×¡x
+§í€‡‰=ß 3OÀv:¨sçÎåææöìÙsñâÅÕÕÕ\‡âœ¶‰Dvvv(ž@g(ž€cLIIY±bÅš5kºwï~êÔ)®ñNÛ?5kÖÅèÅpO1T�=‚‚‚&Mš”››Ëu(¾Ài;à'O OÐT´iÓ&..îðáÃW®\éÒ¥¦ƒ2œ¶~jÖ¬ŒƒÎP<AÓ2zôè»wï†‡‡/Z´¨OŸ>×®]ã:‘™Ãi;à'ô<�>P<A“ÃNuõêUkkë~ýú…‡‡ãÄÆƒÓvÀOöööååå\§ S…â	š(??¿—ƒy    IDAT‹/nÞ¼y×®]˜ªñ x~²³³«¬¬ä:˜*OÐt)¦ƒ5jÔŒ3F�õäÉ®C™Œy~²µµ­¨¨à:˜*OÐÔ9;;ÿöÛogÏž}òäI·nÝ0”aaÌð“­­-zž@g(žÀ4<X1”ŸŸßéÓ§¹Nd&pÚøÉÎÎ=O 3O`2,--ÃÃÃoÝºåéé4}úô¼¼<®CiDð¿FŒ¡¼|ÄˆŠ‡TÛ×¹�@`aaáîî’˜˜h�l„ÓvÀ?�ÑóÔ”ßé`X(žÀÄtìØñèÑ£‡:wî;”©|ñ‹D¢3gÎ²?œ>}ÚÒÒRÛõÈåòìììcÇŽ4hß¾}z¦Âi;à§ÆóÔ4ßé`X(žÀ$±ÓAÍ™3çË/¿<xpjj*×‰6|øðšššýû÷³?îß¿_*•>\ó50Ã0ŒT*}ôèÑøñã†Y²d‰ž©pÚø©ñÆ<5Íw:Š'0Uööö‘‘‘×®]“Éd½zõjúÓAMž<™ˆöìÙÃþÈþ‡]¨‹N�:ýòË/D”žž®g*OÀO�7æ©i¾ÓÁ°P<�iëÑ£GRRÒæÍ›wîÜéíí½wï^®œyPYY9þü×^{M$………	___Å¹B¹\îëë+üpµ²²JHHÈÍÍÍÍÍ={ö¬••Uhh¨ÎÙˆH,ëöôZ«2•SŸ †bmmÍ^·«ú6'"³|§ƒ!1 fáÅ‹ï½÷ž@ `§ƒ2È:Ù÷È„	ï—/^8;;Ñ¶mÛØ6[·n%"WW×¼¼<õëafôèÑDôË/¿¬[·ŽˆÆŒ£ü¨jû:—H¥ÒŒŒŒ‰'Qxx¸þ»)
+ÿýwý×`B¶oßniiÉÔõ6gÆ,ßé`@(žÀ¬œ={ÖÛÛÛÎÎîûï¿¯®®ÖsmìY›6mŽ=ZVVÆ.Ü¾};yxxH$‰DâááADû÷ïop=ÃìØ±ƒˆß|óM"Ú¹s'£ÍGª2GGÇˆˆý÷‘a‹]»vé¿ ²{÷n�@ÀÔó6gÌñ�„â	Ì�D"‰ŒŒ´±±éÞ½{bb¢>«b?¼T?.CBBˆhÝºuk×®%¢©S§j²†aJKKmll„B¡P(´µµe?©uûH%¢.]º°Êz²´´Ü±c‡þë0!ì)~©TZßÛœ1»w:Š'0O�=
+ï½÷^nn®n+a?¹
+k-ÏÎÎnÞ¼¹›››››[«V­
+
+
+4YûÿñãÇ³?N˜0AõQ—ž;wnÀ€D´iÓ&ÝöNÁÊÊjûöíz®À´:tˆˆÜ©¾Í³{§ƒaÀ8˜§N�:?~üÐ¡CgÏžíÚµë†]/(kÑ¢E­%ÎÎÎ®®®–––...š¯M1ÚT‡«o”#<x×®]D´råJ�×ÃR>yÀìÄKŠž'Õ·9™Ý;Å˜³Ñ£G§¦¦¾ûî»üñ›o¾yçÎƒ¬6""âáÃ‡Ë—/ÿÇ?þqûöíï¾ûNóçŽ5ÊÞÞÞÞÞž=# ¿¬¬,=× 
+qµð{U]MM�š6föNCâºëÀRRRúôécii¹`Áå1¡êÕù9uê{³L&«¬¬l×®�P(LHHÐv=jmpIQQÑùóçÙÎü7ÞxCÃÝ©���]tt´ž+0-			D”››[ßÛÓüÞé`@(ž€/d2Ùo¿ýÖ¼ys�£G�jòÕ�¶ÂÂÂ6mÚQ||<»dçÎ�DÔ®]»¢¢"Í×£þÑú–¨²µµ½pá‚&û¢†½½ý–-[ô\	€i¹páåääÔùö4Ëw:NÛ_…Â9sæÜ¿àÀ�!!!£G�ÎÌÌÔv%üqNNÎ€F�Å.™2eJ@@@ffæÇlèÈõ²±±ñôôœ={vJJÊÀ�õ\Æ<±wu¬ï„µY¾ÓÁ€ð¡	|töìÙyóæeff~õÕWß|ó�••×‰¸Ô¼yó5kÖ|øá‡\0ž¤¤¤dgg³=L ZAÏðQ```JJÊW_}µråÊ€€€ääd®q	=OÀCø�} xž²±±Y¼xqjjj«V­0}úôüü|®CqÅð{ç8 m¡x^óôôüã�?:”��Ð¥K}¦ƒ2]˜ª xˆ‡ït0 O ›*00ðîÝ»\'2*ô<o¡ç	tƒâ	€ˆÈÉÉ)**êÊ•+UUUþþþááá¯^½â:”‘ xÂï<èÅÀÿéÕ«WrròÚµkcbbüüüŽ?Îu"c@ñ¼…ž'ÐŠ'€¿QL5`À€‘#GŽ=ÚìïŠ€1OÀCøƒô�â	 ­ZµÚ¶mÛ™3g>|èíí½råJ™LÆu¨Æ‚ž'à!övªL má÷ ^C‡MIIùòË/¿ÿþûÞ½{_ºt‰ëD�Åð�D"!"kkk®ƒ€IBñ Ž­­-;”‹‹;TAA×¡§í€‡ª««‰ˆçw �¡xhXçÎ�Ož<¹{÷î'NøúúnÛ¶ÍœºjÐó<Äö<¡xÝ xÐÔÄ‰ÓÓÓ'MšôÁ:ôÞ½{\'2OÀC‰ÄÂÂÂÂÂ‚ë `’P<hA1Tyyy�=¾þúëªª*®Cé§í€‡$	º�@g(ž ´öúë¯'''¯^½ú—_~ñõõ=qâ×‰ô‚ž'à!O O º‰Dááá÷ïßïß¿ppðèÑ£³³³¹¥#OÀCÕÕÕ(ž@g(ž t×ºuëmÛ¶ÅÇÇ§¥¥ùúúFEE™âtP(ž€‡Ðóú@ñ ¯Q£FÝ½{wáÂ…W®\á:‘v0æ	xH"‘`’'ÐŠ' `§ƒº}û¶³³s¿~ý>úè£ÒÒR®Ci
+=OÀCååå\§ S…â	À`¼¼¼N�:}àÀ�®]»nÛ¶­Îf3fÌ¸~ýº‘³©�â	xèÕ«W(ž@g(ž I LŸ>===}âÄ‰ìtP÷ïßWnpæÌ™­[·N˜0¡°°�«�µà´ðzž@(ž ¯E‹QQQçÎ�ËËËëÕ«×âÅ‹Ù{ATWWøá‡B¡0;;;,,¬‰Œ.GÏðŠ'ÐŠ'€Æ2pàÀ”””+V¬Y³Æ××÷äÉ“Ë—/ÏÊÊ’Ëå2™ìüùóááá\g$Bñ¼„â	ô�â	 ±ÓAÝ¸qÃÃÃcÄˆ+V¬Pô6Éd²uëÖmÜ¸‘Û„„â	x	cž@(ž ]çÎ�Oœ8ÑµkW�@Pë¡yóæ]¸p�“T
+B¡Åðzž@(ž Œaûöí÷îÝ“J¥µ–33nÜ8ng'0|S^^nooÏu
+0U(ž ]~~þ‚ê|H.——––†„„TVV9•NÛ¡ç	ô�â	 Ñýë_ÿ*))©¯@©©©¹sçÎüùó�œJ§í€‡ŠŠŠœœœ¸N¦
+Å@ãª¨¨())iÝº5	…BÕ62™lË–-ë×¯7z:"œ¶þ‘H$ååå-[¶ä:˜*× Ìœ��ÝÎ�;‰èùóç—/_NJJJLL¼qãFUU{_R‰DBDÃÌŸ?ßÇÇgðàÁFNˆÓvÀ7ìµÎÎÎ\S…â	/999++‹ëMTïÞ½{÷î-“Éž>}úàÁƒ‡Þ¿???Ÿˆd2ÙÈ‘#W­Z%‹�©¸¸øþýû±±±ÆÜ(èÃÝÝ½_¿~\§0a(ž@Oø‹oâÄ‰{÷îå:€Ù
+‹‹‹ã:…	»xñâ Aƒž={ÖªU+®³€IBÏ4
+|¸ëL*•ÖÔÔØÚÚrš¨‰'rÁä¡ç	ô„â	 i‰D"Þ˜ �¨°°ÐÞÞÞÚÚšë `ªpµ  ðKaa!º�@(ž  €_ŠŠŠP<�>P<  ¿äååùšV03(ž  €_p�è	Å  ðË‹/P<�>P<  ¿<þüµ×^ã:˜0O  À#Ã¼|ù=O O  À#555nnn\†â	  xäùóçD„â	ô�â	  xäÅ‹D„Óv O  À#ÏŸ?·±±iÑ¢×AÀ„¡x  Á¥v ?O ê�@ º„eccãêêÚ·oßùóç'''kòô:ÔI“x�àæÍ›ÊƒƒƒÙ52DyyJJŠ@ ððð¨µ’þýû‚>}ú¨IØ`Z­b?yòä£�>êÔ©“µµµ��]÷îÝÃÃÃ¯^½ZßvU·naaáîî’˜˜Xkå÷ïß�ŒŒìÛ·¯P(Ô0ðÊ“'O:tèÀu
+0m¸y;€îª««óòòòòò._¾¼víÚÐÐÐèèh'''£2dHttôÙ³gýýýÙ%R©”­'Á¥K—ª««·ŽOHH ¢¡C‡*¯áÞ½{lÙwåÊ•;wîøøø4væ›7o–””(–¤¥¥¥¥¥ýüóÏÃh¸¹\ž�����}üøñ¸¸¸	&(òöö6pb0/OŸ>EñzBÏ€.†aF*•\¼xñ‹/¾°±±9xðàøñã5¯ j­­MžÈö-±Uëúõëååå�;wöññ©ªªºråŠâ!¶Y­î¨Í›7[`±ÿ×<§š…j|ñÅ%%%~~~'Nœ(((¨®®NOO_·n]@@€&»¬8ò�=b�ö’%K”tëÖíûï¿OKKÓdmÀCèy¨óS@aaaaaa\§0Õ·I}oœ”””fÍšQ\\\ƒ�5o ^VV999Éd2vÉÊ•+‰höìÙŸ~ú)-[¶Œ].•JÙx999Š§K$WWW"Z¿~=‰ÅâêêjÍêÞÖÖ–ˆ<x ¾™&Gž½lÊÊÊÊ€ñš>szŸ\.·³³Û²e×AÀ´¡ç	À0üýý#""ˆè÷ß7ÚFÛ¶mëééY\\œ’’Â.9{ö,¾ùæ›DtîÜ9vùõë×KKK½¼¼Z·n­xz|||nnn�=æÎ�ëçç—ŸŸøðáÆÎÌ^åTYY©ÿªØ!Mb±XÿUOäååUTT´oßžë `ÚP<Ì¸qãˆ¨ÖÀçÆ¦|æN&“±žLDIII555TÏ€'ö<Ý¬Y³ÿ6xæNcÇŽ%¢Ìœ9sëÖ­©©©2™LÛ•Èd²Ç�³½k'N4|J0SOž<!"œ¶=¡x0öB¶üü|mŸ¨óekô÷âéÆ�¥¥¥�;wnÝºµ«««··wEEÅµk×ˆèÏ?ÿ¤¿xÊÉÉ9qâ„µµõ´iÓˆèÝwßµ¶¶>yò${*°ñ¬ZµjìØ±åååÑÑÑ3fÌðóósvvþàƒØoµ±G$uìØñ�?þˆˆˆXµjU£sòäÉöRM®ƒ€iCñ`0r¹Üøeë¡.H¥Rö$]`` û�âÌ]MMMbb¢@ P<DDÑÑÑ2™lÜ¸qÎÎÎDäìì*—Ëcbb5°ƒƒÃÁƒÓÒÒ"##Ç�ß¡C‡ÒÒÒ˜˜˜ž={¦¦¦jµª²²²ƒîÝ»·‘¢‚ùyúôiëÖ­---¹¦Å€Á°}'...Ú>±Î‰>×ÍÍÍÛÛ»¬¬ìúõëlñÄÖL¤T<]¹råÕ«W>>>ìðpv‹ÑÑÑD4sæLÅªØ3w111šo]g>>>ûöí{üøqzzúðáÃ‹‹‹-ZÔàÇ§°°ðÜ¹sb±xÚ´iF8ÛæáéÓ§íÚµã:˜<O sðàA"Òð’{b;ŸNŸ>}áÂRêybÿ“˜˜xêÔ)úû9»„„„ŒŒ"
+
+
+Rœ(
+
+"¢ŒŒå¹ŒÀËËkûöíDÄæ×P‹-¼k×."b¯1hÐƒ¼¼¼¸N&Å€aÜºu‹ý
+Ÿ2eŠ‘7ÍVEë×¯/))ñôôlÓ¦»ÜÍÍÍËË«¬¬Œ�‰@y´¸ú®ãwä‘Î=^�=NÌFzzz—.]¸N&Å€îd2YQQQbbâW_}Õ·oßÒÒÒ!C†Œ?ÞÈ1ANN)u;±Ø3w¹¹¹B¡Pq:¯¸¸xÿþý�àñãÇµÎfff
+…Âýû÷7RZÿÈÈÈK—.I¥Ò¼¼<vrQ"ªï1u*..¾páÂÔ©S‰ÈÏÏ¯‘Ò‚9©¨¨ÈÊÊBñúÃíY tQçÕpcÇŽ�‰‰Q}¨ÎÆÊ½,6PO,ûúú²£­U‹§�7‘¿¿¿â6ò;wî¬ªª>|¸êÛîîîÃ†;uêÔÎ�;?ùähåÖ­[·nÝR]îää´fÍšŸ®z¬lmm•Ÿ¨zG<ö?FÈMÜÃ‡†AñúCÏ€î¬¬¬Äbq@@À'Ÿ|’˜˜xðàAcÞØN™b<S�=Oô÷OìY9å¡âÊ>øàjÌ3w7oÞüöÛoàììlaaaooß½{÷Ï>ûìöíÛ={öÔ|=666žžž³gÏNII8p`#¥s’žž.‰:uêÄu0yü5ÇNZÇu 3„÷—Î–-[¶}ûöpLzž  €0ZÅ@ÓUçÌãÚNAnd¦˜xÅ
+Š'  0Ã xCÁÕv M—)I4ÅÌÀ999eeeÞÞÞ\s€ž'  0)))B¡°G�\s€â	  ÌßÍ›7=<<¹æ Å  ˜¿[·n¡Û	Å  ˜?O`@(ž  ÀÌ•••edd xCAñ  f.55U.—ûûûsÌŠ'  0s·nÝjÑ¢E»ví¸fÅ  ˜¹[·nuïÞsÜƒ¡ x  3wóæMxBñ  æ¬²²òÆ�}ûöå:˜O  `ÎnÜ¸QSSƒâ	Å  ˜³Ë—/¿öÚk;vä:˜O  `Î._¾Ü§O®S€Yq ÌSvvvll,×) ÌPvvvÛ¶m¹NaJ.]º4wî\®S€YAñ�âÒ¥K“'Oæ:€y
+ã:‚ÉÈÉÉÉÌÌÄ€'0,Ã0\g  #Ù°aÃW_}U\\Œ	o€'öïß?yòäââb{{{®³€ùÀ˜' IMMíÖ­*'à�Ë—/ûøø rÃBñÀ#©©©Ý»wç:€ñ\ºté�7Þà:˜O <‚â	xåÕ«W—.]2d×AÀÜ xà‹gÏž¢xþ¸xñbMMÍ°aÃ¸æÅ _¤¦¦‘¯¯/×A Œ$!!ÁÛÛÛÕÕ•ë `nP<ðEjjj«V­Äb1×A ŒäÏ?ÿ:t(×)À¡xà‹;wî Û	ø£¨¨èÆ�ð�Å _<zôÈËË‹ë Frþüy†a¹fÅ _<}ú´}ûö\§ 0’„„ggg®ƒ€BñÀ555Ïž=CñüñçŸâœ4O ¼�““#“ÉP<Oäåå¥¥¥½ùæ›\ó„â	€ž>}JD:tà:€19rÄÚÚ—ÚA#AñÀOŸ>µµµÅ„7ÀG�2dni�Å /<}úÔÝÝ·>�H$§N�
+		á:˜-O ¼ðôéSœ³ž8þ|iiéèÑ£¹fÅ /dee¹»»s�ÀŽ=êëëÛ®];®ƒ€ÙBñÀ¹¹¹nnn\§ 0†Ã‡�5Šë`ÎP<ðB~~~Ë–-¹NÐèÒÓÓ3220à	Š' ^ÈÏÏÇ-��Ž9Ò²eË~ýúqÌŠ' óW^^^UU…ž'àƒcÇŽ½õÖ[\s†â	ÀüQ‹-¸Ð¸ž={vöìÙ°°0®ƒ€™Cñ`þÊËË‰ÈÁÁ�ë  �kÿþýð�Å€ù{õêa¶e0{{öì5j”��×AÀÌ¡x0lÏŠ'0o™™™‰‰‰“'Oæ:˜?O æ�íy²³³ã:@#Ú·o_óæÍß~ûm®ƒ€ùCñ`þjjjˆÈÚÚšë MÈ“'O>úè£N�:Y[[ÛÙÙuïÞ=<<üêÕ«ÊmA­»
+”XXX¸»»‡„„$&&ÖZùýû÷###ûöí+
+9¿Ÿ ê^˜«={öŒ;¿ç`†a¸Î  �ëÀ�ãÇ�—H$–––\ginÞ¼XRR¢ú�òG"[s¨.©E ÄÅÅM˜0¡¾fÜ~Ìªî…YzòäIÇŽ�=:bÄ®³€ùCÏ€ù“ËåD$âýþÿ}ñÅ%%%~~~'Nœ(((¨®®NOO_·n]@@€&Og†a©TúèÑ£ñãÇ3³dÉåÝºuûþûïÓÒÒ'>Ô!66ÖÙÙyøðá\^@Ï€ùÛ»wïÄ‰år9ONß4ÈÎÎ®²²òÁƒ�;wVÓ¬¾ž'å%/_¾tss³²²ª®®ÖdÆ×2A@@@÷îÝ·lÙÂuàü%
+`þØ/Nó¨œØ<•••óçÏíµ×D"QXX˜@ ðõõe;ØˆH.—ûúú
+‚ú.¼bç­¬¬4H"2È­o.^¼øÞ{ïµmÛÖÒÒ²eË–AAA'Ož¬µ-�@ “É–/_Þ¡Ckkkooïèèhå6�?upp‹ÅóæÍ«¨¨Ð?XÓ—’’ríÚµ™3grxƒ swèÐ!"ªªªâ:ˆ°\ÊŒ^¼xáììLDÛ¶mcÛlÝº•ˆ\]]óòòê\É¼yóˆÈÁÁáƒ>ˆ‰‰¹}û¶T*­o[õ-‘J¥'N$¢ððp5iµÚ5e�ààÁƒµ¨–±±±lƒüüü¶mÛ*?4~üx>|Ôúé§ÞÞÞ\§ 1ów 0Ãv`qÄ ØR M›6G�-++cnß¾�ˆ<<<$‰D"ñðð ¢ýû÷×·’²²²±cÇ*Íš5›1cÆãÇ�U·¥ºD™££cDDDuuµš´îÚˆ#Ž?^\\,‘H²³³ÿûßÿQ@@@­µ¹»»ÇÇÇ—””dffŽ3†ˆÈ6X´hµoßþìÙ³eee			íÚµ3ûâ©¢¢ÂÉÉiåÊ•\1çw °.\¸@DÏž=ã:ˆ°¥€jaÄÞ‘cÝºuk×®%¢©S§6¸ª´´´ÈÈÈñãÇwèÐ�]­““ÓíÛ·kmKuëµtéÒeçÎ�jÒj¸k§OŸ=z´›››H$R¬ÜÆÆ¦ÖÚNž<©X’‘‘Ápì�]»v%¢Ã‡+8pÀì‹§]»vYZZ¾xñ‚ë À#0`þ®_¿Þ»wï¿þú«cÇŽ\gÑ;Æ¨°°°Ö}Žsrr|||lmmÙ6iiiì¹<=xðà“O>9}útppðñãÇ•·ÅÔ?`¼¨¨(55õ›o¾ILLÜ´iÓ¬Y³êL«ÉÇìž={¦L™RgKÅBvm•••ŠÛ�0Ã^DÉ¶±±±©®®.**rrrR$d�ƒÔ>ÜÑÑQQ&Œ˜?öÆ,ì<ãæ¡VåDDÎÎÎ®®®–––...ÚÞÙËË‹=÷ÇöÒicðàÁ»ví"¢•+WjµÅZ–.]Ê0ÌÜ¹sÓÓÓ+++†aoª£JùÆmæq€>þúë¯?ÿüSµlhT(ž Ì{-X~~>×AQDDÄÃ‡—/_þ�üãöíÛß}÷�¶k(**"=zh²²²t{"ë¯¿þ"¢ÈÈH///¶<:sæŒ¶+a{)×çÎ�Ó'UÓ·uëÖÖ­[søÅ€ùsvv¶°°0ãâéôéÓk×®õõõ}÷Ýw.\Ø®]»5kÖœ={¶¾öþþþ‘‘‘—.]***’J¥yyyd/LëÓ§�æÛ-..¾páÂÔ©S‰ÈÏÏOŸ]pww'¢U«VÇÅÅÍ™3GÛ•°ãÇçÏŸîÜ¹òòò³gÏ†‡‡ë“ª‰“ÉdÑÑÑï¿ÿ¾ò(1 càf¨ —X,^·n×)@õƒ«°°°M›6DÏ.Ù¹s'µk×®¾ëû<trrºqã†šmÕ÷D[[Û.4ØLÍ~­ZµªVãéÓ§×zV�+Q^È·©
+Ž;&ÒÓÓ¹¼ƒž' ^‹ÅæÚóôñÇçää0`Ô¨Qì’)S¦dff~üñÇu>åæÍ›ß~ûí€Ø>9{{ûîÝ»öÙg·oßîÙ³§æ›¶±±ñôôœ={vJJÊÀ�õÙ‹Ï?ÿ|õêÕ�;w¶¶¶îØ±ã’%K6oÞ¬íJZ¶lyþüù1cÆØÛÛ;;;Ïž=›Èe®V¯^âååÅuà\mÀo¾ù¦��Ï/¿üÂu ÃHIIéÕ«×éÓ§‡Æuàô<ðBÇŽÙ9� ÌÃO?ýÔ£GTNÀ	O ¼àááñøñc®S ÆóçÏwïÞ½`Á®ƒ O¡xà�§OŸ*n�`ÒÖ­[çìì<mÚ4®ƒ O¡xà…öíÛWWW?þœë  úzõêÕúõë?úè#kkk®³ O¡xàö®gwïÞå:€¾vìØQQQQß¥” F€â	€\]]Û´isãÆ®ƒ è…a˜ÿùŸÿ	suuå:ðfeà‹=zÜºu‹ë z9pàÀÝ»wwìØÁuà5ô<ð…¿¿ÿÍ›7¹N ;¹\þÏþsüøñþþþ\g^CñÀ~~~0í72    IDAT>,//ç:€ŽöíÛwÿþý%K–pøÅ _<X*•^¼x±‘Ö/A}?6ê¶Ltf¦ºº:""ÂÃÃÃÒÒRóC§ùq–ËåK–,	õññÑ#&€`Ì _´jÕªK—.çÎ�æ:KÂ~sãFUú[¶l™êí�èÀ�÷îÝÛ½{wãm@Cèyà‘ÀÀÀ³gÏr�Â4°÷Nç:…)ùý÷ß‰hß¾}ÕÕÕ?tr¹üûï¿3fŒ¯¯¯a× Ü€GöìÙóî»ï:::|åµºpµGÇ€+GÏ“¡ˆD"™L&—Ëµ:Ý©áñß¿XXØ�70Tšô<ðH`` \.WÓù$•J£¢¢z÷îíàà`gg¯xtÇŽ���NNNÖÖÖžžž‹-*))Ñ-‰T*ýå—_úõëçêêjeeÕºuë°°°Ó§Oë¼-õíëÛ/Å×¼@‰òÅ$ÉÊ•+ýýýíìììììüýýW¯^]SS£hÀ¶—ÉdË—/ïÐ¡ƒµµµ··wtt´Î¡ÎÁ@µªy½t~)Õ¤ªï!Å¾‘P(T„Ôd4Á0Ì?ü0bÄTNÐT0 À'ƒzÿý÷ë|H"‘Õù)!—Ë§N�ªú���OII	ûôZ)ê?afÎœYß'’¶Ûj°½šýª/C­MTUU<Xµå�!C$‰r{ÕýŠ��Õá Ôw •ªÙ/}^J5©ê{¨¾öîBƒ¿'¬ØØX�@pùòeõÍ ŒÅ ¿üøã�NNNì¨”ZþóŸÿ‘ƒƒCTTTVVVUUURRRhh(Ã07n$¢6mÚÄÆÆæååUTT$%%QDDût­¾íììˆhñâÅÙÙÙ‰¤   >>>((H‡m5Ø^Í~©É©¼<22’ˆœœœ¶lÙ’›››››»yóæfÍšÑªU«”Û»»»ÇÇÇ—””dffŽ3†ˆ¨ÃA¨/˜òB5û¥ÏK©&•¶�R<½zõªmÛ¶ï¾û®š6 F†â	€_?~,Nž<©úP�=ˆhÃ†ªõéÓ‡ˆÎŸ?¯¼ð¯¿þ"¢Î�;³?jõ¥ÈÞk/((háÂ…›6mzøð¡ÎÛj°½šýR“Sy¹ŸŸEGG+7Ø´iùûû+·W>°Däèè¨ÃA¨/˜òB5û¥ÏK©&•¶�R<­X±ÂÞÞ>;;[M #CñÀ;~~~sçÎU]nkkKD¹¹¹ª±]B¡�×Â~íYZZ²m´úRLLLìÐ¡)	~ùò¥Ûj°½šýR“Sy¹��ååå)7ÈÍÍ%"[[[åö•••Šr¹\çƒP_0å…jöKŸ—RM*më_<=þÜÑÑñŸÿüg} 8�â	€wþûßÿ:88(Æ)4øe\¶�V_ŠÃÔÔÔ$&&®Zµ*,,ÌÁÁ�ˆÞyç¶Õ`{cO®¼ÁƒÀ0[ÓÈårEãŠŠ
+Õ×¶xÒäðªI¥æ!Õ�mp<DóæÍkÝºuYYY½G€(ž x§¨¨ÈÎÎnýúõµ–³—2mÜ¸Qõ)½{÷&¢+W®¨Y­V_Šµ°§�œ��uØVƒíÕìó¿_ð555j6Áž¶Ûºu«rƒ-[¶�Êi;5+i�òA`ÆÍÍ�ˆ222Nœ8¡¼B5û¥çK©&•š‡Tw¶Á]¨óY
+©©©›7oÖ0*€Ñ xà£3føùùÕZ¸fÍ"rtt\»vmvvvUUUrr2;Ê˜-ÜÜÜ6nÜøøñãŠŠŠªªªôôô6ôë×�}ºVÅÓ Aƒ¶oßž••USS“››»råJ"²³³Óa[¶W³_Ã¸ººÑ®]»”Ï¸ÕÚ;`¼E‹[·nÍËËËËË‹ŽŽvrr"•ãµvSçƒÀ0ÌÐ¡C‰hÌ˜1™™™¥¥¥GŽqwwW^¡šýÒç¥T“J}`Õ�mpÔ¢‘#G¾þúë2™¬¾ÀO |ÄÞá®V÷ƒD"6l©`�?¾êCÊ´*žê\Ïœ9stÛ–úöê÷kÆŒn¢ªªjÐ AªkT\·XçþêsŽ;Vë!ÅL¾^ú¼”jR©¬¼	wAÍ!bû¨ê;z BñÀS½zõ?~|­…‰dõêÕ~~~666ööö���‡V<zúôé°°°6mÚXZZÚÚÚúøø|þùç7oÞdÕðK‘•œœ<kÖ,ö&²b±¸ÿþ¿ýö›T*Õm[¶W³_ÅÅÅóæÍkß¾½¥¥¥òjkm¢ªª*22’]ƒ­­­ŸŸßÊ•+•g|¨sõ<[¶léÚµ«¥¥¥»»û’%K¤Ri­ªÙ/�_J5©Ô®sgÜ…:Ÿ%‘Hºwï>räÈú ·p{ ž:vìXHHÈåË—ßxã®³ üÍÒ¥KW¯^}çÎ�víÚq� (ž ø«oß¾b±øÈ‘#\ø?÷îÝëÙ³ç?üðùçŸs� n(ž øëðáÃ¡¡¡×®]ëÕ«×Y ˆˆ†	|õêÕåË—-,,¸ŽP7O üÅ0LŸ>}ììì´½W+@cØ¼yó¼yó®^½ÊN’Ð4	¹  œ›6mJLLd/_àÖË—/-Z´`ÁTNÐÄ¡ç	€ï>ûì³mÛ¶Ý¿ßÅÅ…ë,ÀkS§N½|ùrjj*{€&Å ß•””x{{�3æ×_å:ð×™3gÞzë­Œ;–ë, @ñ ;eÊ”cÇŽ½ýöÛ\g>***ò÷÷Ø»w/×Y †â	 ˆˆæÌ™³wïÞ”””öíÛs�ø…a˜���{÷î¥¤¤°7½hâP< QUUUß¾}›5köçŸŠD"®ã �üøã�_ýõÅ‹1_+˜
+\m DD666»víº~ýúÒ¥K¹Î<réÒ¥¯¿þú_ÿú*'0!èy€ÿóë¯¿ÎŸ?ÿèÑ£AAA\góWTTÔ·o_WW×„„ôw‚	Añ 3kÖ¬½{÷^¼x±{÷î\gs&‘H‚‚‚>|xùòå¶mÛr@(ž àod2Yhhèõë×/]º„Û²B#‘Ëå“'O>}útbbb·nÝ¸Ž O P[YYÙÀ�¥Ribb"®~‚ÆñÓO?�8q"00�ë, ZÃ€q ¨ÍÑÑqÿþý¹¹¹S¦L©®®æ:˜›�7®Zµ***
+•˜(O P‡N�:9r$999,,L"‘pÌÇæÍ›çÎ�ûÍ7ßÌ�;—ë, :Âi; ¨×Í›7‡þúë¯:tÈÆÆ†ë8`ò~þùç…®X±"""‚ë, ºCÏ ÔËßßÿôéÓ×¯_7nœêù»¤¤¤ÒÒRN‚A÷âÅÕ…lå‰Ê	LŠ' PÇßß?>>>))),,ìÕ«WŠåãÆ�ûøã�9ÌMÓŽ;†RYY©¼píÚµ.üæ›o-ZÄU0 CAñ è×¯_RRÒ­[·úöí›™™É.œ1cFAAÁÎ�;÷ìÙÃm<hRž<yòÑGÝ¿ÿ‹/¾`—0±`Á‚¥K—._¾œÛx �1O  ‘gÏž�9277÷È‘#IIIááár¹œˆìííÓÒÒ:tèÀu@à^MMM@@À�;w¤R)íÙ³gÔ¨QÓ¦M;qâÄŽ;Æ�Ïu@ Ã@ñ šÊÏÏ=zôÃ‡KKKkjjØ…"‘¨W¯^IIIÜÆÎ}ÿý÷ÿþ÷¿e2	{{ûÎ�;ggg>|¸oß¾\§0O  …‚‚ÿ/^°],‹%K–|ûí·Î�;wnÈ�!Êß)"‘ÈÎÎ·úóƒ1O  …eË–=þ\¹r""™Lö¯ýëòåË\¥Î•––N›6M (/”J¥ååå'Ožä*@#AÏ hêèÑ££G�®óCÃÂÂ¢M›6iiiŽŽŽÆœ{ÿý÷ÿýwÅÉ\e"‘èÊ•+={ö4~*€F‚ž' ÐHaaáÌ™3ë{T&“åää|ýõ×ÆŒMÄ¡C‡¶mÛVgåDDÃL™2¥ªªÊÈ© Š' ÐÈùóç›5kÆ0ŒP(¬sl¸L&[¿~ýñãÇ�Ÿ8ôâÅ‹3fÔ:a§`aa!
+ÓÓÓ×­[gä` �§í @yyyÇ����ÿã�?ÊËËE"‘òø'�@Ð¬Y³{÷îµjÕŠÃ�`4r¹|Ð AW¯^­Õídmm]]]íèè8vìØ1cÆº¸¸pÀàP<€.*++Ž=Ÿ••%‰ˆH*•
+…Â#F9r„ë€`kÖ¬Y´h;ã—âwÀÏÏoÄˆ£F�ê×¯&° ³„â	ÀÄdgg'%%q�âo²³³SRRnÜ¸qÿþ}ö{töìÙÃ‡ç:4®¬¬¬¯¿þZ1«S×®]{õêÕ«W¯6mÚpM_“&Mâ:4i(ž LLllìäÉ“¹N`ÎðÍê‰¸  ºhâîÃ·hÑ‚ë ÐX=zTZZÚ³gÏú†Š›(üqš@ñ †'P9™7OOO®# pS    hÅ   €P<   hÅ   €P<   hÅ   €P<   hÅ   €P<   hÅ   €P<   hÅ   €P<ð‘@ ªKX666®®®}ûö�?~rr²&O¯³A�4É0Ì¾}ûÆŽÛªU++++‡îÝ»Ï›7ïÒ¥Kª�û÷ï/úôé£>Ïˆ#”—�1¢Î`Ê�E"QëÖ­'Nœxýúum÷Q«£ª»OOO©Tªº¼Vc†aâââBBB^{í5++«×^{mäÈ‘{öìa¦¾#Ãî©››ÛØ±cÏŸ?__3 ‚&¯Kƒ{]káäÉ“A```­Ý‘Ëåo¾ù¦@ xç�wÔ¬À  0){öìÑÿ�«úöWó)ZTT¤þéu®_ŸÏœÒÒÒàà`Wr÷î]ÅCiiiõå‰D–––ìÂüü|v‰†GÃÒÒòÜ¹sZí£š6ªGU=Å7mÚ¤º\yIYYÙÈ‘#ëÜèˆ#ÊÊÊÜS¡PxôèQ} KÃ×¥Á½®µ0??ßÍÍ�ˆ~üñGååkÖ¬!¢V­Z)êÀ ï/0{ø01�Z<±ÿ—J¥/^üâ‹/lllˆhÈ�!r¹\ÍÓ\¿¶ÆŒCD-Z´øÏþóðáÃêêêW¯^Ý½{wÃ†ýû÷¯Õø‹/¾ "kkk"úì³ÏêËÃVc7ndnØ°�­'Ô�ªªª7nÑàÁƒµÚG­Žª&«"¢:H$51&L˜@DNNN?ýôSff¦D"ÉÊÊŠŠŠjÑ¢M˜0¡¾„ÕÕÕ©©©o¿ý6¨6Óü ²4|]ÜkÕåñññDdccsïÞ=vÉÝ»wÙ£Z«ìÓŠ'Ð~E LŒŠ'e)))Íš5#¢¸¸¸kÞ@½ãÇ�QóæÍ_�jH$WWW"Z¿~=‰Åâêêê:óDGGÑðáÃÙ…Ã†#¢˜˜MŽFVVÙÙÙ©i£J«£ªÉª|||ˆè×_­o§N�""{{ûÔÔÔZkHMMµ··'¢Ó§O«I˜““ÃÖ%ª[×ü 2Ú¼.îu�Íœ9“ˆÞxã©TZSS@D³fÍR³6M xMàWÀÄ¹xbæßÿþ7�?^“Æ6P�³òÃ?hÒxß¾}DÔ£G†aüüüê¬HØ<EEEVVV/_¾|ùò¥………••Uqq±ñ‹'¦®£ªÉªvïÞMDîîîUUUunbêÔ©D´xñâ:W²xñb"š6mšš„lñ$‹U·®ùd´y]Üë:*))iß¾=-[¶léÒ¥DÔ¡C‡ÒÒR5kÓŠ'ÐŒ@Æ�GDW¯^5ÚÙñÔìv´yóf"š5k–â_v‰*''§·ß~[&“íÛ·oïÞ½2™,88¸yóæê×/‘HnÝºõþûïQïÞ½µÙut;ª'NôööÎÊÊÚ¸qc�’’’ˆ(,,¬ÎGÙ3zõW—H$iiil�N­�á,­ æ¯‹nš5k-–.]ºlÙ2�@íèèhÀM Ô‹ëê ´cüž§ÊÊJ"²µµÕ¤±r�?sØÁ+•••¶ÌÎÎ¶°°°¶¶fÇX[[…ÂÌÌÌ:÷nÇŽDøæ›oÑÎ�;ëÜ�:“ë<`¼ÎäªGU=ÅªvíÚED­[·f�O­M¨?tu¾”µæççës µ}]Üëú,X°€m®¦™æÐóš@Ï 4@.—s¡^ÑÑÑ2™lÜ¸qÎÎÎDäìì*—Ëqj3fŒ��Íùóç/\¸`kkËKWÏÂÂÂÍÍmÂ„	IIIƒ6Tr��êäÉ“»víúìÙ³_ýÕPa”‰Åâ+V´lÙ²ÎG5<€Ú¾.:‹ŒŒdÿ³bÅ
+Ã®@O Ð€'Ož‘‹‹‹¶O¬ó/6MžøÚk¯)¶«~ýìföL‹=CSç¶GŽ)—ËårùÈ‘#Ì/•JŸ?¾wïÞ:ÏÙé¼�:U¡PøÝwßQdd$Û“¤Œ½†ÿ¯¿þªó¹ìòV­ZÕZÎÆ~öìÙ‚òóóCBBž?^ç49€:¼.:³µµ­õ #@ñ 8xð ±W3G¿~ýÛU#!!!##ƒˆ‚‚‚S5QFFFBBB�Ïš<yr­ÿpBŸ£úÎ;ïxyy½|ùrÝºuµb;X[»œm£ªU«VQQQ!!!………ß~ûm}[oð êöº ˜CŸ€Æeä1O7oÞd/ªß»woƒ�5o ;U�““Szzºšfì•eõ™:uj�y^½zeoooooÿêÕ«úÒj’_Ÿ6uU­VµmÛ6"‹Åµ–Ÿ8q‚ˆtžª ==]$‰D"åƒ¯ÕÔíuÑd¯un£9ŒyMàWÀÄg’ÌÂÂÂ‹/~ùå—ÜN’éììüã�?þõ×_‰¤¢¢âÞ½{ŠI2‹ŠŠlllÁãÇ�k=733S(ÚØØ(¦ðVŸÇ8ÅSƒGU«ÍI¥ROOOEE¢ÜrìØ±DÔ¢E‹¨¨¨¬¬,‰D’��ýóÏ?78I¦Âœ9sˆ(,,LÃ�U~Ô€¯‹&4l£9O 	üŠ ˜ãßžeìØ±uÞž¥N6hPƒ·gY»v-)MØXË[o½EDk×®­o59êj²�jÚ¨UM6§¼DyðµòòÒÒRv–pUÁÁÁuÞž¥Ö¶rrrlmmÁÕ«W59 Ê�êðº¨9†šäú²iÅhcž  6+++±XðÉ'Ÿ$&&<xÐÉÉÉÈ�;7zôh777‘Hdooïëë;oÞ<vš"vÒ å!ÉÊ>øà2ôÄBz2øQ�6mZ§N�T—;::?~|÷îÝÁÁÁ..."‘ÈÅÅ%88x÷îÝÇŽS?FžÕºuë0ó�üCÛT&÷º è@ÀôÂ hl±±±“'OÆ; 1àýš@Ï   €D\  Þjåáý8  ¦=O    Z@Ï ºRjÁ0-èy   ÐŠ'    - x   ÐŠ'    - x   ÐŠ'    - x   ÐŠ'    - x   ÐŠ'    - x   ÐŠ'    - x012™Œë …G�q LÄu  ÐHffæ�Ž9rþüy"Š��å:häÛo¿]¼x±¥¥¥ñ7ýôéÓ²²².]ºp²u•œœÌu0†a¸Î  ucæÆ�G�=zôèµk×¬­­‡æææ¶iÓ&®£˜3|3‚z(ž š©TzæÌ™½{÷=zôùóçîîî!!!£F�:t¨­­-×é@³gÏÞ´iÓÌ™37oÞÌI€øûûWVVZXXÈd²æÍ›>¼]»vœD0(ž š
+™LöçŸÆÆÆ8p °°0  `ìØ±!!!=zôà:è¢²²ÒÅÅåÕ«WÎÎÎyyyB!7cLãââ&Mš¤øÑÂÂB(ÖÔÔ´lÙrÈ�!o½õVHHH›6m8É`¢P<pL"‘œ8q"..îðáÃeeeC‡}ï½÷FŽ)‹¹Žz‰‰‰™5k–\.'¢óçÏ4ˆ«$ï¿ÿþï¿ÿ^SSSk¹¥¥¥T*þþþ£F�3fÌë¯¿ÎIB Ó‚â	€3iii[¶lÙµk×Ë—/ýüü&Ož<iÒ$OOO®s�aôë×ïÊ•+r¹ÜÊÊêÓO?]³fWIÊËËýýýŸ>}*•JÕ4;pà@hh¨ÑR˜.O ÆVTT´k×®˜˜˜k×®yxxLŸ>ý�wÞéÚµ+×¹À�îß¿ïíí­ø±M›6ÙÙÙæ¹{÷n¯^½ª««ë|ÔÒÒrúôé¸@C˜ç	ÀH$I\\Ü[o½åââ²dÉ’þýû_»v-##cñâÅ¨œÌOLLŒò999·oßæ0O·nÝÖ®][çC"‘¨U«VQQQFŽ`ºP<4º¢¢¢Õ«W{yy½óÎ;ÃDGG?~ü8**
+ãKÌUMMÍÆ�•ÇYZZ8p€ÃHDôá‡N�:U$ª=½ŸL&Û¹s§½½='© LNÛ4¢{÷îýÏÿüÏ¶mÛ¬­­çÌ™3oÞ<\Î‡­õéêãã“––ÆU$–êà'‘HdiiùöÛooÞ¼ÙÙÙ™Ûx ¦=O †'•J·mÛÖ»wïnÝº¥¤¤DGG?þ|ÅŠ¨œxbãÆ�µÞ¹sçñãÇœäQpppØ³g�@ `‰D;vüóÏ?ïÜ¹ãíí}üøqnã˜
+O †Ä0ÌÁƒ{öì9cÆ±X|üøñ¤¤¤‰'ZYYqŒäùóçÇ�W½®M$>|˜“HÊ^ýõeË–±“NÉåòÍ›7÷íÛ÷úõëAAA!!!ááá‰„ëŒ MŠ' ƒ9~üøo¼1~üxooïÔÔÔ?þø#88XñW>ðÄöíÛë|ÑårùÞ½{�ŸGÕW_}5tèP"úâ‹/HDŽŽŽÛ·o�‰‰Ù²eËÀ�ÿúë/®34i(ž  ..ÎÏÏ/$$ÄÃÃãÎ�;±±±>>>\‡nlØ°¡Îé”äryrrraa¡ñ#Õ"
+cccÇ�ÿïÿ[yùôéÓ¯]»&•J{õêµk×.®â4}(ž ô’‘‘1bÄˆI“&999�;w.66Vyvà›äädånv8¶µµµµµµ•••L&;zô(‡ñZ´h§<™«K—.ÉÉÉ3fÌx÷Ýw§OŸþêÕ+Nâ4q¸Ú@G555?þøãÒ¥KÛ¶mûÓO?�1‚ëDÀ½'Ož<zô¨¦¦¦¼¼œˆ6oÞœ““3cÆ©TZYYYUU0aÂ®c6ìðáÃ3gÎtqqùý÷ßýýý¹ŽÐ´ xÐÅ™3gæÎ�ûâÅ‹åË—òÉ'ªsç ÑìÙ³Ÿ>}zòäI®ƒè"##cÊ”)wîÜùùçŸgÎœÉu€&§í ´SQQÔ¡C‡7n„‡‡£r‚úTUUÙÚÚr�BG;vLJJúòË/çÌ™ZRRÂu"€¦Å€RSSvíÚµ}ûöS§NuîÜ™ëDÐ¤UVVÚØØp�Bw‹/>|øð…ôàÁ®4	(ž 4óÿØ»Ï¸&²µàÏ$„Ð›(¨€ˆ(ˆ¸ë
+l¨`Á²¶]{Y+Øî½º«+vQY
+¨ë*ˆ¢ˆbWQÁUl¨`Yš BBHy?Ì{s³!„B&åùð3gæ<3¦<œsæœØØž={ZXXäääL˜0�êp�`³Ùj�<‘=zdllìááqøðaªÃAˆz˜<!Ô8>Ÿ¿bÅŠÐÐÐ¹sç¦¥¥ÙÙÙQRš‘<€­­mzzúÂ…§OŸ>eÊ‹EuDQ	Çj Ô.—;eÊ”ÄÄÄC‡á°Y$‹¥¾cžÄèèèDDD¸¸¸Ì�;·   >>¾M›6T…5°å	!iêêê&L˜pîÜ¹””Ìœ�¼4¦åIhêÔ©™™™ïß¿÷ôôÌÊÊ¢:„¨�ÉB?üðCjjjjjê Aƒ¨©ÍKž  {÷î<èÙ³gŸ>}6mÚDu8Q “'„´víÚãÇ�Ÿ:uÊÛÛ›êX�ZÒÈä	 Œ��×¯_¿jÕªI“&á(¤m0yBH²”””Ÿþ922ÛœP“©ûTR~öìÙóçÏûøø¼yó†êˆRLž’àÍ›7“&Mš8qâÜ¹s©Ž©1Mmy6lØ�7>}úÔ»wïœœªÃAHI0yBH�Ç›<yrëÖ­÷îÝKu,H½©õã2òðð¸{÷®££cß¾}Ï�;Gu8)&O‰‹ŽŽÎÈÈ8tè�‘‘Õ±´,‚ ‚ :
+�%4¾å‰diiyýúõÐÐÐ#F¬]»—LEçyBèJJJV®\9oÞ¼>}úP‹Â�~¥É¥ù7­¶¶V hCò t:}×®]nnnóçÏúôiLLŒÆ7¹!m†-OýÃªU«ôôô~þùgªQ�@€UËa³Ù  U‡É�    IDAT9ÄÌ™3ÏŸ?ùòå�SB-“'„þ'777&&æçŸ611¡:¤öÈäIKZž„üüüÒÒÒŠŠŠú÷ï��à!M…ÉBÿ³nÝº®]»†††Šmçr¹‘‘‘žžžFFF¾¾¾ÉÉÉä.‡³iÓ&�-[¶ÔÕÕ	�%Çñx¼õë×ÛÛÛ3™Ì.]ºÄÄÄˆž_–2 pìØ1___333&“éääVYYÙh�ÂQM„Ñ-Â3(äZê#�b±X,°¶¶ÖÑÑ‘år
+
+
+FŒadddii9gÎœšš±h%Øª¿QJ-\.÷×_íÕ«—•••®®nÛ¶mCBB®^½*ý¦ÉN;“' ðððøã�?˜Lf¯^½îÝ»Gu8µ BH ÙÙÙ pöìY±íÇÏÏOâ{‡Íf÷íÛ·þ®þýûs8òprKý¥]âãã…U4Z†ÏçO˜0¡~E®®®•••Òƒ”òÆýYQ×RYfôèÑÂò�^Nii©ØêË£F��V,x‰­¥¡õv¤ß4Ùýõ×_ ðèÑ#yÔ,kÌ˜1L&óÄ‰TÇ‚�‚aò„Ðÿ5jT�=ø|¾Øö­[·€‘‘Qdddaa!›ÍÎÈÈ1b„@ ˆˆˆ  33³Ã‡:tˆìòÛ¼y3y8ù½Û®]»äääÊÊÊ·oß@ïÞ½…U4ZæàÁƒ `kk_RRRSS“‘‘áåå áááÒƒ4�gˆmWÔµ4T‹­­mJJJUU•,— :t¸qãFUUUZZZûöíåMž­ÅÀÀ  Ö®][TTÄápÊÊÊ’““ýüü¤ß4ÙÝ¿ ž={Öœ“¨5.—;oÞ<‚ """¨Ž!EÂä	!�@ xýú5�NOHH¨¿«{÷î pàÀ�ú»ÜÝÝ &&Ftctt4 xxx�¿’ßÁ©©©Â¯^½ cccá–FËôìÙ nÞ¼)ZÑË—/ S§NÒƒÈ–<)êZªåôéÓÂ-�^Ž‹‹ œ;wN¸÷Ì™3ò&O2Öâçç·hÑ¢èèèçÏŸ7tª¦ÉÈÈ €·oß6ç$`çÎ�4máÂ…<�êXRLž‚ððð:p¹Üú»È§¥Š‹‹ëï"‡³”””ˆn$2Ò××'%¿ƒY,–° ŸÏ—˜H)C¶‘Ðét:�N£Ñh4špƒÁ�¤@¶äIQ×ÒP-åååÂ-�^“É€OŸ>	)//—7yj´–;wîØÛÛƒÿ¿ÿþ[úM“Ýµk×¤ü§h•Ã‡3Œï¿ÿ¾®®ŽêXR 0Ž°ÙìC‡…††ÒéôªBtÔpCC�¥” Àãñx<ŸÏ'ûÉ]¢º•C–k©ÏÜÜ\ø³B.§þ<LbËÓ6Z‹··÷óçÏïÜ¹³yóæ��##£K—.ýøã�2Ð(-œª !¡¡¡gÏžMHH3fLmm-Õá Ô\˜<!.\øôéSCÃ‡;wî gÏž­¿ËÙÙ™<\tãùóç…G)Š««+ dggKüHz�ðß<ƒËåJ©Bi×2\Žƒƒ ÜºuKxHzzºØI¬­­àõë×Â-¢åe© ttt¼½½—/_ž��ððáC HMM%wÉrÓ¤ÓÚ§í$
+¸yóæ�;w,úX%Bj©ù�W©»����6´wÛ¶m `ll¼gÏž¢¢"6›�™™):`ÜÜÜ<..®¤¤¤¤¤$&&ÆÌÌê²;§ØÆFË>| lll<XPPPSSÃf³óóó8Ð«W/éA
++++ 8~ü¸h�›XŠº–úêhôrd0>`À  
+
+zûöíçÏŸÏŸ?ß®];¹nZŸ>}Ž=ZXXXWWW\\¼iÓ& 000�~ÓdwìØ1�¦«©ž<yÒ®]»=z»GRG˜<!mWUUe``°oß¾†
+p8œ�JüÃƒÍfK\ÅÅ××—\šC  äI ,X°@ÊŸ@R‚S§N•¸]ôgE]K}H¿Y¦*k$‘9d¬Eâö™3gJ¿i²‹ŽŽ622’÷(�÷æÍ›Î�;wîÜùÍ›7TÇ‚Paò„´]||<�Nÿðáƒ”2gË–-îîîzzz†††¾¾¾ÂÁØlvDD¹K__ßÝÝ}Ó¦MÂlC ¸äI \½z5$$ÄÖÖ–Á`èëë»ºº.Y²äÁƒ�YQQ1gÎœ:0ÑÓŠU¡�k©¯¡Ò/çÕ«WAAA†††3fÌ¨®®®žÃ‡»¸¸0ŒvíÚ­[·NØÅ&c-™™™Ó§Owpp`0–––ÞÞÞû÷ï>4ÐÐM“Ýž={Z·n-ïQÚàÝ»wnnnŽŽŽTÇ‚PS\Ù
+i·ÐÐÐ/^ˆ—A*Hí–7Þ¶m[ddäÛ·o©D•——“Ï6^»vÍÉÉ‰êp’GÚ.55UâÜÜ5‹ÅÂÑâ±°°HKKsrròññyôèÕá $Lž�VËÏÏÿþýàÁƒ©i ÚÚZLž¤044LNNîÞ½»¯¯ïÝ»w©!9`ò„´Zzzº‰‰‰§§'Õ� Äb±p’'é’““{÷îíçç÷ÇPB²Âä	iµÌÌÌo¾ùFGG‡ê@PãÈqšTG!6›�-O�"Wöòò
+¼wïÕá $Lž�VûóÏ?±Ù	µLždd``pîÜ¹ž={<øÁƒT‡ƒPã0yBÚ«ººúÉ“'_ý5Õ� ÍÄf³±ÛNFzzzgÏžõñññõõÅö'¤ú0yBÚ+//�ÇãyxxPÒLø´�\Fbbb¯^½üýý?~Lu8IƒÉÒ^ùùùzzzŽŽŽT‚4vÛÉKWW711±k×®xòä	Õá Ô Lž�özñâ…££#�†ïÔ"°Û®	Èçï:tèàçç÷êÕ+ªÃAH2üÚ@ÚëùóçÎÎÎJ¨ˆ rvlm¦…7»íšÆÄÄäüùóÆÆÆääT‡ƒ�˜<!íõúõkª£@»íšÌÊÊêêÕ«</00ðóçÏT‡ƒ�8Lž�öz÷î�­­-ÕQ �…ÉSs´mÛ6==½¤¤dÈ�!555T‡ƒÐ?`ò„´ŸÏÿøñc›6m¨i,ì¶k&;;»‹/>{ölüøñ\.—êpúLž�–*++«««SfòTSS3kÖ,KKKccã‘#G¾~ý ®_¿ND›6mX,–háÚÚZ;;;‚ ®]»&ñl‡‰m$•X¯Œ àØ±c¾¾¾fffL&ÓÉÉ),,¬²²Rì,kÁ‚ÖÖÖ²ÏÕ~ûöíÉ“'ÛÙÙ1ŒV­Zùùù¥¦¦’»d¿'-›¢`ËSó¹ºº¦¤¤\¿~}îÜ¹TÇ‚�BZ‰|úÑ£GJ¨‹|¯�5Jô­gggWVV&¼½½`ëÖ­¢‡ìÚµ ¼¼¼¤ŸSúFéõ6Z€ÏçO˜0¡þ‡†««kee¥èF�ÝèGŠÄØD‘””Dîmôž(6¶bff¶ÿ~%Wª‘’““uttþýïSBÿ“'¤¥²³³   @	u‘ßÜ:t¸qãFUUUZZZûöí ,,L \¼x ¬¬¬¾|ùB–g³ÙmÛ¶€Ó§OK?§ô�Òëm´ÀÁƒÀÖÖ6>>¾¤¤¤¦¦&##ÃËË ÂÃÃEÏ`kk›’’RUUÕèMþpñâÅŠŠ
+‡STT´cÇI½'Š�­…èééÅÅÅ)¿^�´wï^‚ bbb¨!� “'¤µÈ®ŸÒÒR%ÔE~‹Ÿ;wN¸åÌ™3 Ð¥KòWr}½ˆˆòW²‰¥K—.|>_ú9¥ol´^ézöì	 7oÞ­âåË— Ð©S'Ñ3HIòŠíêÕ«Ã‡·±±íMÓÓÓ�~O[KàóùAœ<y’’Ú5Ò¿þõ/]]Ý´´4ªA“'¤­Îž= l6[	u‘ßâŸ>}n)//Í’’’  U«VUUU,‹lb‰��môœÒ76Z¯ô @§Óét:�F£ÑhÂUCôååå2Þòç'N44ç“°¼ô{¢ØØZù€ØÙ³g)©]SM™2ÅØØX9½íI�Æ‘–b³Ù Àd2©  ((ÈÝÝ½¬¬,22òÀ�ïß¿oß¾½Ä1=Bd® <$6¼ºùÈ“óx<�ÇçóÉ&rW]]�hIsss¹ÎüÓO?	‚Ù³gççç³X,�@ðåË±2ÒïIËÅ¦(ägW¬èèhOOÏ   œ<Q“'¤¥ø|¾’f¹uë–ðçôôt NÑIÄš5k `Û¶m °lÙ2ƒ!ålÖÖÖ  údœèùe¬WzWWW ÈÎÎ–ø‡—WÜ ²-""ÂÙÙ™|­þC…ÒïIËÅ¦(dò„OÛ)ƒÁHHH`0Ã†ÃÉŸ•Z¤=!•wìØ1aÿNK#ßkRn�×¥K²dëÖ­kjj¤ŸsÀ€ ôöíÛÏŸ?Ÿ?¾]»vboêFë•^àðáÃ `ccsðàÁ‚‚‚šš6›�ŸŸàÀ�^½z‰žAö›@þìää «V­*++ûôéS||<™Š�JÊ=Qll-�LJïPs<yòÄÜÜ<$$„ÇãQÒR˜<!-uäÈ&“©œºÈoñ‘#GŠþÝ":e éèÑ£ä®õë×7zÎ.ˆý!4mÚ4‰É“”z-°`Á	r‰ÔÒ´äióæÍbg›2eŠÄSI¹'
+Œ­%<~ü rss©
+@³¥¤¤Ðéô6PÒR˜<!-uüøq�¦œºÈoñ/_¾LŸ>ÝÜÜÜÐÐ088øÕ«WbÅ²²² ÀØØXt·‡vqqa0íÚµ[·n�p
+fÙë•%°«W¯†„„ØÚÚ2}}}WW×%K–<xð@ô²ßòg.—»eË–N�:1™LGGÇuëÖ	*ÉuO[K¸wï <þœª 4ÞöíÛi4ÚÅ‹©i#B ãR²3gÎŒ5ŠÃáHZ¤LÓ¦M‹‰‰YºtéÖ­[rÂúƒÊå-@9…ß¥ÉÈÈðññ),,´³³£:�õÃ?ÄÇÇÿñÇÂî]„”Œ#-EŽä­­­¥:�ÿ÷úõë””é}Cj}OÈ‡ñi»µgÏ—Q£F}þü™êX�vÁä	i)ò[�|$ŠrA888víÚ•êpT‚ºß|ÚN	ôôôN�:UVV6uêTUn@Eš“'¤¥,,,  ¬¬Œê@þŸžžž¿¿?¹ê"©õ=ÁäI9Ú·oâÄ‰äääíÛ·SÒ"Ê^f!aii	 ¥¥¥�;w¦:––uÔèiUù�uUŽM,‹Á`ÐétªÑ|X»víÊ•+¿ýö[ªÃAZ[ž�–²´´$¢¤¤„ê@�fb³ÙØì¤4«V­ò÷÷Ÿ0aÂ§OŸ¨ŽiLž�–ÒÕÕ511Áä	µ6›�£Å•† ˆ#GŽÐh´‰'ª{›%R˜<!íeii‰Éj!,[ž”ÉÌÌìèÑ£©©©»wï¦:¤ù0yBÚ«uëÖ¥¥¥TG�4vÛ)_ïÞ½×¬Y–““Cu,HÃaò„´WëÖ­±å	µ�ÚÚZì¶S¾ÿûßÞÞÞcÇŽ­ªª¢:¤É0yBÚËÚÚúÃ‡TG�4vÛQ‚F£EGG/_¾œêX�&Ãä	i/''§/^PÒLØmGGGÇ½{÷îß¿¿þâÙ)
+&OH{999ªÈ$ãHÃ`òD¡	&L˜0aúôéåååTÇ‚4&OH{999ñùü×¯_SÒ@,Ç<Qh×®] °hÑ"ªAš	“'¤½:vìHöÜ¡–€-OÔjÕªÕþýû�=zæÌªcA“'¤½ŒŒŒ¬­­1yB-“'Ê}÷ÝwóæÍÃÎ;¤p˜<!­æääôòåËÊÊÊ+W®lØ°!88øÄ‰T…4Î0®
+vïÞÍçó—,YBu HÓàÂÀHÕÕÕ=xð ;;»ººúøñãQQQ�€N§óx¼Y³fQÒ8U�*hÕªÕÎ�;'L˜0yòä�RÒ˜<!íòÇÌŸ?ÿÑ£G‡N§ÁårÉ]< (iì¶SãÇ�?~üøüùó>|¨««Ku8HC`·Ò._}õÕçÏŸÉ„‰Çã	3'AöööÔD†4&Oª#**ª¨¨hÓ¦MT‚4&OH»0ŒÃ‡7´îº……ŽSA
+�Ývª£]»v«V­Ú¸qcAAÕ± �ÉÒ:>>>“'Of0õwaŸRlyR)K—.íÐ¡ÃâÅ‹©iLž�6Ú¾}»���ØF:�Þ¹sgJâAšŸ¶S)ººº»wï>{öìùóç©ŽiLž�6jÕªÕÆ�	‚Ý¨££ƒ-OHQ°ÛNÕ4($$dÑ¢E¸"j>Lž�–š5kV�=ttþ÷À)—ËÅÑâH!ø|>‡ÃÁäIÕlÙ²åýû÷QQQT‚Ô&OHKÑh´ðù|á�‡-OH!È¶ì¶S5öööK—.]¿~=Î9Žš	“'¤½¾þúë~øAtä8&OH!Èä	[žTÐ²eËètúæÍ›©©7Lž�V‹ˆˆ022"?ÑéôvíÚQÒ˜<©,SSÓ•+WFFFQRc˜<!­fnn.9nee%:
+¡&c±X€É“ªš7ož••Õúõë©©1Lž�¶›9s¦§§' 899QÒ8æI•éééýûßÿŽŽŽ~úô)Õ± u…g+[fffaa!ÕQ 9räÝ»wétz||<Õ± æj×®]¯^½¨�»íTÜÔ©S·oßþŸÿüçäÉ“TÇ‚ÔÑÐ:¨…Œ3æÔ©STG��Æ
+		IHH 6†Û·o÷éÓ§¨¨ÈÖÖ–ÚHPCNž<9aÂ„ÜÜÜ®]»RR?ØmG���R1ååå—.]¢:
+Ô\!!!T¿¿°ÛNŒ;¶[·nk×®¥:¤–0yB ÀÜÜ|È�!TG�4vÛ©>‚ Ö¬YsêÔ©ÜÜ\ªcAê“'„R0ª’'‚ ÄBRŒ=ÚÍÍí—_~¡:¤~0yB!c±Xººº4~Àª4‚ V­ZŸ——Gu,HÍà{!„ŒÍfã€'µ0vìØ®]»FDDPR3˜<!„�‚±Ùlð¤h4ÚŠ+Nœ8‘ŸŸOu,H�`ò„B
+Æb±Èä‰„Äb±,X`mm-œÂþöíÛ“'O¶³³c0­ZµòóóKMM=y �Ç[¿~½½½=“ÉìÒ¥KLLŒh™‚‚‚#FYZZÎ™3§¦¦F,‡³iÓ&�-[¶ÔÕÕ‰ÕòåË—ÐÐPSSÓ6mÚDFF@yyù¤I“ÌÍÍ---W¯^-�:£M£×Âår###===�ŒŒ|}}“““Ý ÇŽóõõ533c2™NNNaaa•••Âýõ×^½zYYYéêê¶mÛ6$$äêÕ«ÒwI4~üx'''ù„äCõ“ÅZ'$$§*@¨…¨ÈûkÝºu�;wü7ç=z´ØGný�b‚ ’’’„g 7N›6M¬X||<Y ´´ÔÎÎNt×¨Q£D«`³Ù}ûö­_Qÿþý9Žh-#GŽ-pöìÙo¾ùFtË‘#G¤\¬ôkáp8~~~õËHßÅçó'L˜P—««kee¥@ ¨g„ÇJÙÕ�ØØX:�žŸŸ/ï4ÒZØò„B
+&6æ)+++%%¥ªªJðßT#  àâÅ‹§¨¨hÇŽ�`Ã†bç¹råJrrreeåÛ·oƒ‚‚ `×®]ä®Í›7uèÐáÆ�UUUiiiþù§è±;wî¼yó¦™™ÙáÃ‡‹‹‹‹‹‹:dbb’––¶sçNÑ’>¬¬¬œ;w. L™2…ÃáˆnÙ¿¿”‹•~-»víJMM522ŠŒŒ,,,d³Ù#FŒ�¾ëÐ¡CÇ�·µµ���/))©©©ÉÈÈðòòzüø1ÙDtâÄ	 X»vmQQ‡Ã)++KNN&S1)»2iÒ$GGÇM›6I)ƒÐ?Pœ¼iùË!�¤"ï¯Å‹ûí·‚ÿ¦J§OŸ+põêÕáÃ‡ÛØØˆ®E­§§',@nIMMnyõê “¿º¸¸ À¹sç„Îœ9#ú©îîî 111¢õFGG€‡‡‡h-™™™ä¯ïß¿—¸ÅÊÊJÊÅJ¿–îÝ»À�ê(eWÏž=àæÍ›¢_¾|	 �:u^¾ŸŸß¢E‹¢££Ÿ?.,&e—‡b0/_¾”¥0B˜<)›Š|¸#¤‘Täý5gÎ___Á³“òòrÑ½'Nœhh6&aòW‹%ÜÂçóEË0™L øôé“°@yy¹hrÐUII‰hÕÅÅÅ  ¯¯/Z›Í«BlA]i£×B¶À×?VÊ.  Óét:�F£Ñh4a-C Ü¹sÇÞÞ^´:ÿ¿ÿþ[ú.)8ŽƒƒÃŒ3¤Cˆ„Ýv!¤`bÝvæææ¢{úé'�@0{öìüü|2=úòå‹Äóˆ>²×r³_’y˜hb[—ýZäBÖÈãñx<ŸÏçóùÂÈïÞÞÞÏŸ?¿sçÎæÍ›CBBŒŒŒ.]ºôã�?Jß%ƒÁX±bEllìë×¯›?Òx˜<!„�‚	Ÿ¶“ˆì~Šˆˆpvv&‹]»vMÞ* àÖ­[Â-ééé¢œ��àÂ…¢ÏŸ? �;w–·º†4z-d]gÏž­¬”]®®® ���-ñ�~²ŒŽŽŽ··÷òåË>| Â§ü¤ì’"44ÔÖÖG>!Y`ò„B
+&}ž§víÚÀæÍ›ËËË+**fÎœ)oäøñ¤§§ùòåÆ�b�+äÓj‹-:räHiiiiiillì’%K„»¢Ñk™<y2 ,Y²$**êÝ»wµµµYYYäó}Rv‘Õƒ‚‚¢££_¿~Íb±jkkŸ={vðàAooo èÛ·ï±cÇŠŠŠ¸\nIIÉ©S§à¿«âHÙ%ƒÁ;tèÐ›7ou�ÆRVÿ ú*2&C!ê¿„D_ZL&³uëÖ={öœ?~FF†,‡K,Ðä×-9î!''Gt£põ_rHŠÐýû÷ÀÞÞ^ì$½zõ€o¾ùFJ„�F+WØ3gÎtttÔÕÕÕ××wss[¸p¡ØŸàÒï<�F³³³¼}û¶h™œœœåË—õÕW†††ººº;vœ;wîÛ·oe‰J]¨ÈûËßß?44TÐÀ‹|óæÍb/Œ)S¦ˆ•”x èFY¦*èÓ§Oý¡¯¯ommmCµÈ²E®káp8”ø^�²K ,X° þ.a‰ÛgÎœ)}W£Øl¶��Ý¼yód)Œ´&OÊ¦"î
+ÑÐç¬D#FŒÜ*ñp‰çoèÓ³Q¡¡¡ @>8Mª««322 ‚ ôôô„£bÁ¶mÛ `Ú´i¢gøë¯¿„5æååI¿R¢•=ìœœSSÓF�•ñÎqêÔ)éeÌÍÍ>|Øh`êBEÞ_ýúõ›;w® �9—ËÝ²eK§N�˜L¦££ãºuë„W
+ËH<Plã«W¯‚‚‚-,,fÌ˜Q]]-V€ÍfGDD¸»»ëéééëë»»»oÚ´I˜9I¬E–-ò^‡ÃÙ²e†¡¡¡¯¯¯ð!A)»ÁÕ«WCBBlmm†¾¾¾««ë’%K<x 233§OŸîààÀ`0,--½½½÷ïßÏår¥ï’Å®]»˜LfQQ‘Œå‘vÂäIÙTäÃ]!¤Îr¹Ü²²²Û·o/]º”ìÂèß¿?9ð³¡Ã=¿\Ž9 AAAÂ-YYY Ð©S'777øçƒÐÃ†€£G�ŠžaéÒ¥ðßÁ³‹/–+Â¦?`À  pww¿|ùrYYYmmm~~~TT”———ô“‹Ýù/^�íÝºu–éÑ£ÇÖ­[srrª««+++ÏŸ?OŽ›éß¿¿¼qª,yõìÙsÉ’%TG�š‚ÅbÙÚÚþøã�T‚T&OÊ¦"î
+!û©999&&& ���ÐhaÙHWXX fff<�ÜB�1cÆüùóàçŸ&·s¹\2¼wïÞ	çp8VVV °wï^ °´´ý“½Ñ›<ùˆÖ³gÏ¤“åÎüø tuu¥œç�?þ ‘×5€Š¼¿ºwï¾jÕ*ª£@M´cÇ===ÑO„Äà€q¤ááá ðûï¿+­R;;;''§ŠŠŠœœrË�7 À××·_¿~ òtÒ½{÷>þìììÜ¶m[ááÉÉÉÅÅÅÝ»wŸ={¶»»{iié¹sçZ:fò™v‹ÕüS‘™[ZZJ)ÓµkW h¨£5.¬ÖfÌ˜all¼{÷nªAª“'¤$äC4wïÞUf¥ýû÷€´´4 àñxwîÜ ___rÍ¯ŒŒr|Y€ì2:tè LŸ>]ø/¹¥E€��Ï´iÓââârssy<ž¼'áñxdëÚ˜1c¤”<yò$ ôèÑ£©ñ"É¤OU€Tœ¡¡áÒ¥KwïÞ]ZZJu,HEaò„”„^Ó„#B�Mžîß¿ÿùóçN�:µtQÊ    IDATmÛÖÊÊªK—.555är`×¯_&½{÷îòåËL&sâÄ‰ 0iÒ$&“™ššJv¶œÍ›7ùò%&&fêÔ©îîî¡¡¡2NÜGÞGGÇK—.…‡‡×JèñãÇK—.%bÕªU
+»  õ&ÉDjgÎœ9ººº¿þú+Õ� …ÉRáÊÊDæC·nÝâr¹d'�¯¯/¹KØsWWWwçÎ‚ „»  &&†Çã�9ÒÂÂ ,,,FŒÁçóccc[4`##£¤¤¤¼¼¼ˆˆˆQ£FÙÛÛþü966¶G�¹¹¹r�ªªª*))‰œä¦¾Ç�<¸²²rÅŠ½{÷VDìè°ÛNÝ™˜˜Ì›7/22R!¦#ÍƒÉR²í¤uëÖò(q°žŒÇÚØØtéÒ¥ªªêÞ½{dòDæL ’<eggWWW»ºº’ÃÃÉcbb `Ú´iÂS‘=w±±±²×Þd®®®ááá‰‰‰ùùùƒª¨¨kô@áý)//OOO·´´œ8qbýÞÆÌÌÌ¾}û~øðaæÌ™6lh™‹ÐjØm§-ZÄápÈ¥”ƒÉR’¤¤$ ðòòRr½dãÓÕ«WÉ…,„ÍKäwîÜ¹rå
+ü³Ï.--�\ÁÞÏÏOØQèçç ¯^½";•ÆÙÙùèÑ£ðÏ…8ennÞ·oßãÇ�€Ør)))ƒ*//Ÿ5kÖ¾}ûZnÅ4­Åãñêêê0yRw­Zµš>}ú¶mÛ8Õ± •ƒÉR†‡’_áß}÷�’«&³¢½{÷VVV:99ÙÚÚ’Ûmllœ��«ªªÈ™DG‹K®„aãb>}úRg•NtœVllìˆ#jjjæÎ�»wï^ÌœZ¹ŽyÒ Ë–-+..&ÿzAH&O¨¥ðx¼OŸ>Ý¹sgùòåß~ûíçÏŸû÷ï/\ABi|}}	‚x÷îˆ4;‘Èž»ââb�&ìÎ«¨¨8}ú4Ab}…oß¾¥Ñh§OŸ®¨¨h¡h=<<"""²²²>}úD®Ì•””DÞ´ž={Ê~žŠŠŠ[·n‘K˜¹»»“·lÙÊår.\…™S!“'lyÒ vvv“&MÚ¸qczE®…æ�BQ‘Iü¢þKHÊ+-88Xâò,R^–ŠzÝvëÖ�<êØ±c¢Û�;Fnÿê«¯„÷ìÙ ƒ’xªÁƒÀž={ºRnŽ,º^33³û÷ïK9yCêëëßºuKz ())‘7TÕ¤
+ï/²©OlaA¥a³Ùaaaööö:::2¾Å^NM{éjª§OŸÒh´øøxªAª[žPKÑÕÕµ´´ôòòš7oÞ�;w’’’ÌÌÌ(‰D8žIbËüsÀÙ+':T\¹^^ËõÜ=xð`õêÕ>>>t:ÝÐÐ°[·n‹/~ôè‘\³1ééé999Í˜1#''¦S2j»í~þùçÍ›7¿~ýšËåR€†éÜ¹óèÑ£7lØ hù'E�!ð¡dä¤…			T‚�R…÷W^^^·nÝ?~LNà®d;v|õêUbbâ°aÃtuu›p²?¿„>|Ø£G�.øûûSRØò„BŠDí˜§7oÞ ÀÈ‘#›–9¡úºwï>dÈ��7RR!˜<!u%qæqy§ W2uŒÉ‹\šPùÉù*"‡6Óh4á‹êöíÛ“'O¶³³c0­ZµòóóKMM­ ôÓJßHþÊb±,X`mmM·";vÌ×××ÌÌŒÉd:99………UVV*äz•iåÊ•7oÞ$×wB°ÛNùT¡[A3HÏ6Tó…­Ž1«Ux]¹rÅÏÏ¯¼¼œ\æYi$¾º�ÄÔçÌ™3äBŠP¯ŸNú¯RÊŒ=:11QX¯@ ˜4i9Ù˜(WW×ŒŒ“&]%eúôécff–œœLu H%`ËRWÒ… ::ÉÔ1f$/ªºíD_E¢/ª€€€‹/VTTp8œ¢¢¢;v‚–˜Y>+++%%¥ªªŠ¬÷Ð¡CÇ�·µµ���/))©©©ÉÈÈðòòzüøñ/¿ü¢ðÚ[ÚŠ+RRRrrr¨©LžBH‘X,Aª3ÏÓÒ¥KýõW;;»Å‹€¼K%Êb÷îÝ���FFFä¯äÂ&¿ÿþû˜1c,--õõõ{õêuâÄ	 8}ú´ÂkoiC‡íÑ£Ç–-[¨©LžBH‘Øl¶®®®Šb;yòäàÁƒ“““?~ü(:yÙ<¦XbS��ùYÿþýuttèt:�N§Ñh;v„ÿ®t©v–/_ÿüùsªAÔÃä	!„‰Íf«ÎÚ,?ýô“@ ˜={v~~>‹Å_¾|‘ëõÇ<‘#âëãEÂãñx<ŸÏçóùÂ“ÔÕÕÉƒŠ3fŒ££ã¶mÛ¨Q“'„R$6›­:}v/_¾€ˆˆggg2ªk×®Éukkkøg[‘ŒkT»ºº@vv¶ÆŒð£Óé‹/>räHII	Õ± Šaò„BŠÄb±T'yj×® lÞ¼¹¼¼¼¢¢"!!aæÌ™r��œêsÑ¢E………UUU)))?üðƒ,Î�; ‚‚‚¢££_¿~Íb±jkkŸ={vðàAoooù/E%L›6ÍÔÔ”\Ä	i3LžBH‘TªÛŽL•~ùå—V­Z™››�;vÈ�!r�aÙ²e pîÜ¹öíÛ›˜˜6Œ\á±Q¡¡¡,øøñãŒ3ôôô:wî<sæÌÌÌÌ&\‹*`2™³gÏÞ»woC}—HK`ò„BŠ¤RÝvK–,Ù²eK§N�˜L¦££ãºuëä]™1  àðáÃ...£]»vëÖ­;pà€ŒÇîÚµëêÕ«!!!¶¶¶C__ßÕÕuÉ’%<�ÿRTÅÜ¹s¿|ùrôèQªATÂI2•M&ñCHS©ÂûkñâÅüñGFF…1 5sæÌôôô'OžÐhØ ¡¥ð?!„I¥ZžPKXºté‹/.^¼Hu ˆ2˜<!„�"±X,Õó„ZBçÎ�‡²cÇªA”Áä	!„	[ž´ÁâÅ‹¯]»¦Öƒ·Ps`ò„BŠ„É“6<xp÷îÝwîÜIu ˆ˜<!„�"©ÔT¨å,\¸ð÷ßÿðáÕ� 
+èP€6***Š��§:
+„4PQQ‘��µ1¨Ô$™¨åLœ8qõêÕQQQë×¯§:¤l˜<Q ++kÜ¸qTG��f
+		¡6 ì¶ÓL&sÎœ9‘‘‘+W®444¤:¤TØm§l			WzBš�ËåN›6�N§ÇÅÅQ‹†£|5Lž´Çœ9sX,V\\Õ� eÃä	!e Óé‡Z³fÍÔ©SqUvÍ†ÝvÚ£uëÖ“'OÞ¹s'ŸÏ§:¤T˜<!¤<k×®Ý¸qã²eËV¬XAu,¨¥`Ë“VY²dÉË—/ÏŸ?Ou H©pÌBJnbb2þüêêê]»vAuDHÁði;­Ò¹sgÿ;vQRLžR¶9sæ‡††r8œ½{÷âòX[ž´ÍâÅ‹|÷î]///ªcAJ‚ŸÚQ`Ò¤I¿ýö[LLÌ¤I“êêê¨)ŽyÒ6tuuýõ×_©)&OQcìØ±IIIIII£F�b³ÙT‡ƒƒËår¹\ì¶Ó*A,X°àÄ‰¥¥¥TÇ‚”“'„(xéÒ¥›7o~ùò…êp��y0¶<i›)S¦ìß¿Ÿê@�’`ò„•úöí{íÚµG�TVVRj.Lž´“¾¾þÔ©S÷ïßÏår©Ž)&OQÌÓÓ3==ýÕ«WÀfuÇb± “'­4wîÜwïÞ%''SRLž¢ž««ëõë×KJJúöíûîÝ;ªÃAMG¶<á˜'-Ô±cG??¿¨¨(ªAÊ€ÉB*¡sçÎ·nÝâr¹}úôyõêÕá &Ân;m6oÞ¼k×®åååQjq˜<!¤*:tèpóæM##£þýû?{öŒêpPS`·�6tttÄaãÚ “'„Tˆ��Mzzz›6múöíûðáCªÃArÃn;mF£Ñ~øá‡£G�VWWSjY˜<!¤ZÌÍÍ/_¾Ü©S§þýûgeeQ’vÛi¹éÓ§³X¬“'ORjY˜<!¤rLMM/\¸àîî˜™™Iu8H˜<i9++«Ñ£GïÛ·�ê@PËÂä	!Udll|ñâÅo¿ývðàÁ©©©T‡ƒdÅb±‚`2™T‚(3cÆŒ»wïæääPjA˜<!¤¢ôõõ“““'L˜xøðaªÃA2a³ÙL&“ ªA”ñõõuvvÆ÷¬fÃä	!ÕE§Ó÷ïß¿fÍš~øaÛ¶mT‡ƒÇf³q´¸–#búôéG�­©©¡:ÔR0yBH¥±víÚ�;w†……­X±‚êpP#X,xBßÿ}MMMbb"Õ� –‚ÉBj`áÂ…qqqÛ·oŸ;w.ŸÏ§:Ô 6›�É²¶¶ŽŽŽ¦:ÔRt¨ !$“I“&™ššŽ7®¢¢"..ŽÁ`P’ »í)44tØ°a/^¼prr¢:¤xØò„�Ú>|ø¥K—.\¸ðåËªÃA`Ë"2ÄÎÎ.66–ê@P‹Àä	!uÒ·oßÛ·o?}útàÀ�eeeT‡ƒÄaò„Ht:}êÔ©111<�êX�âaò„�šqss»zõê‡üýýKJJ¨ývÛ!¡)S¦|øðáúõëT‚“'„Ô�‹‹Ë�;wª««{÷î]PP@u8èði;$ääääííGu Hñ0yBH-µk×.;;ÛÞÞÞÓÓóÎ�;T‡ƒþvÛ!QßÿýéÓ§+++•Y)!BGGÇÆÆ&88øæÍ›M+&ƒƒƒÛ´i£««kddÔ­[·9sæ4ºò¦Œ
+‚„„„¡C‡Z[[ëêêZ[[ž<yR HØÉÉ‰ËåÖßÞ´’M'@©­ÚÚÚñãÇ$''S‚   ‰'RR•••‡Rf¥¿ëi4ZJJŠ¼Å>þìïïß„üAÆ«ªª%–	¨ªª’ptttýíM+Ùd˜<!¤Þø|þÒ¥Kétú¾}û¨Ž	üÃ?PR!ãÇ�ï×¯Ÿ2kMjkksss‡ ^^^ò
+
+ ssó­[·>þ¼¶¶¶ººú¯¿þ:pà€···”d<pôèÑ `ff¶sçÎ·oßr8œÂÂÂÈÈHsss =ztý€ÀÞÞžÃáH¼yK6&Oi‚�;wNu Ú®OŸ>óçÏ§:
+¤B’““i4Ú›7o”VcýáÝ»w  §§'W±‹/€©©é“'Oä
+@Æ¯\¹ †††¹¹¹b»rssàêÕ«b»ºº€èßŠ%O²”l2ó„�&øñÇccc·oß>mÚ4±n~¤L8æ	‰ñ÷÷·´´üý÷ß-IŽÈa±X,°¶¶ÖÑÑ			!ÂÍÍM¸® ŸÏwss#bÜ¸qòFbdd$W1r¨{xx¸‹‹‹\Éx`LL ,_¾ÜÍÍMl—››ÛòåË…eDýë_ÿ€6ÔÖÖJCö’M¡�!¤
+RSS���ƒ‚‚ª««©ŽEKuëÖí_ÿúÕQ Õ²`Áww÷F‹‘_ÊdOéãÇ� päÈ²™—XYY•””H?ù³hÜäÉ“å*Ö¡C �·ÙIöííí //OâÞÜÜ\ ptt˜ÇãuéÒ vïÞ]ÿBä-Ùd˜<!¤Q²³³[·nÝ³gÏââbªcÑFNNNë×¯§:
+¤Znß¾-%K"¿ÚmmmSRR„c¥�=
+ ‡Ãá888 ÀéÓ§=�__ßÒÒR¹Š‘m¨,KÞë•ñ@éÅjjj @___,`�@püøq hÛ¶-ylCÉ“,%›»íÒ(^^^™™™eeeýúõ{óæÕáhì¶Cõy{{wèÐ!>>^–Â»wïö�Mš4ièÐ¡<pà@AAÁ„	FŽ)W –––7nlÕª•BŠQnÜ¸q...ïß¿ß·oŸ¢JÊM!)BH¥¼yó¦k×®íÛ·¯?µ(KKË¨¨(ª£@*gÙ²e;v”^†üR.//Û^TTdjjjcccccÓ¦M›²²2YÎCþüþýû…€……Åû÷ïå*¦šÝväÏÇŽ kkëêêêúÉŒì%›[žÒ@íÛ·¿uë–½½}Ÿ>}pueÂÆ‘DãÆ�{ùòåýû÷-I>¥/ÊÂÂÂÊÊŠÁ`ÔÔÔ´nÝZÆqß¤6mÚDFF:´¼¼|õêÕrëÕ« $%%É^�\’Å%î%·“eê?~¼³³óßÿ%½ÙKÊG!)BHÕÕÕÍš5‹N§c[ˆÒÐéôß~û�ê(�*êÔ©SXX˜”})/X°  âââ6nÜ Ë—/—^QýóäççëèèèèèäççË^ŒœqÀÌÌLô(YÈxàåË—ÀÈÈH®©
+„¿9r ,--ë_ˆì%›“'„49ÔÂ…y<Õ±h8‡�æEZkÅŠ|>¿¡¿Ú¯\¹BÎVÀãñX,Vûöíi4ZZZš”Š$žgæÌ™ "W1r®K‹íÛ·¿|ù’ÃáÔÔÔ<yòDÆI2=088 ÌÍÍ###9NQQÑ®]»¤L’)ü•Ëå:99Il	’½d“aò„�æ‹‹‹ÓÕÕ		iÂƒ3ª¦  `æÌ™ŽŽŽºººúúúnnn.ÌÎÎ-ÓÐ‡)‰F£ÙÙÙÞ¾}[´LNNÎòåË¿úê+CCC]]ÝŽ;Î�;÷íÛ·²Çöùóg ¸páBs.iª{÷îÀ½{÷*Pÿu[^^nkk Âõ—~ûí7 hß¾ý§OŸd?�@ x÷î�¾¾>AwïÞ•½XK/Ïòùógr~„úüýý%.Ï"º%66V–äIJÉ&Ãä	!­píÚ5333ooo)ÓÃ¨¾œœSSÓF?ÇÚ"† ˆS§NI/cnnþðáCÃ+..€ë×¯7ÿJ‘Frtt\µjUC{ë¿nÇ� >>>Â-|>ßËË ¾ûî;ÙÏC
+€AƒÉUŒÏç'$$>ÜÆÆFGGÇÐÐÐÍÍmÎœ9™™™R¯UÖù|þ‰'üýý[·n­££Óºukÿ'NÔo¢«p]]]ÇŽeùh¨d“aò„�¶ÈËËëÐ¡ƒ““Ó³gÏ¨Ž¥‰  îîî—/_.++«­­ÍÏÏ�ŠŠ’²hWý-\.÷Å‹£F�€nÝº	ËôèÑcëÖ­999ÕÕÕ•••çÏŸ'çÔéß¿¿Œá‘sC4ú¥‚´ÖâÅ‹»víJuHAo!„4Ï‡†þîÝ»äädOOOªÃ‘›��‹ÅzöìY§N�¤# D?Üêoùûï¿mlltuu¥,Ý���Ý³gO}}}r¾¾F={ö¬sçÎ999²”GÚ&==Ý××÷éÓ§�;w¦:Ô,8UBZ¤M›6éééžžž¾¾¾ÉÉÉÊ¬Z!ëv‘ÃHY,–Bâ‘p$êÚµ+ 4ÔQX›Í œª 5¤wïÞ­[·nÂÃÿHÕ`ò„�v144LLL		=zôáÃ‡•\ûäÉ“÷ìÙS\\Ìãñ¢¢¢,,,?~LŽ�€cÇŽ=~üØÊÊª¡YÈgs|||¦M›—››Ëãñä��ÇãÌŸ? ÆŒ#¥äÉ“' G�2ž™Ìê0yB¡ÓéÃ†ÃäIPÜmˆ¢ŸÏÿÏþCDXX˜r¦0 ?pš¹nWUU™?	™˜˜L�:µ   ~]õ·ˆ266¯­­m¨®¼¼<SSS‚ nÝº%ã5Þ¸q >~ü(cy¤…’’’‚(,,¤:Ô,˜<!¤½üüü***Zº.2e©Ÿ: ¢¢¢öìÙ &LhôTyyy£F�"—w  33³G�‰ÕU¿v1�;wnhBË¼¼¼6mÚ ÀÊ•+e¿ÆK—.€n&R__¾|Ñ××?pà Õ� fÁä	!­–““cggçææ&Öx£pd¾Òüu»Ääçç4 üýýÅêª_»ð×òòòôôt ˆŽŽ;gFF†…… Ìœ9SÊ”†õ�9s Øl¶\—€´Í°aÃ‚ƒƒ©Ž5ŽyBH«yxxdeeéêêzzzÞ¼y³¥«Sìº] àììLöýÝºuK®0úöí{üøq Ø´i“è®”””Aƒ•——Ïš5kß¾}ä¸r±Ùl�Æd2e?i!ÿ«W¯JyÌ©>LžÒv¶¶¶éééÞÞÞ~~~d"¢LáááÏŸ?_¿~ýÊ•+=z´fÍyÏðéÓ'øç4r),,þ;bÄˆššš¹sçîÝ»W®Ì	 Øl6ŽG�
+¬®®ÎÈÈ :Ôt˜<!„ÀÈÈèÌ™3‹-úþûïW¬X!œ; ¥]½zuÏž=nnn“&MZ´hQûöí·mÛF»–ÈÃÃ#"""++ëÓ§O\.·¤¤$))‰œî²gÏž²×[QQqëÖ­	& €»»;¹qË–-¡¡¡\.wáÂ…QQQòfN€É’�ƒƒƒ³³39B©+ªûB*dÿþýcÌ˜1555Š=sýœ&¬ÛÕÐç˜™™Ùýû÷¥ÔÕÐ�úúúÂ‡é¤|NÊ¸¦ÍöíÛÛ¶m+û=AZkáÂ…îîîJ¨HôeL§Ó­­­ƒ‚‚ÒÓÓ¥k(I�ým%VŒÏçŸ:u*((ÈÆÆ†Á`�ë´Ìž=›œ‹_ÊI$žME¨bL!
+¥¦¦šššöìÙóÃ‡
+<mýÁ&¬ÛõàÁƒÕ«WûøøXXXÐétCCÃnÝº-^¼XlùÞF?åõôôœœœfÌ˜ñôéÓ†Êˆ’1yúå—_e)‰´Ü…‚(**jéŠ$¾ži4ZJJJ£ÅÄÞG�¾­$Õè
+ÁRNRÿlª—gA‰»ÿ~PP�¾¾þùóçq	Ùýç?ÿILLÌËË£:¤êX,–¥¥åîÝ»§M›Ö¢‰.LÄápž={¶lÙ²Ë—/{yyeggK,&Ë©d?*88øÜ¹sæææ«W¯nß¾=—Ë}óæÍíÛ·cccïÜ¹Óh-ª	“'„�¥¥¥£F�ÊÉÉ‰‹‹#¡F…‡‡_»víÏ?ÿ¤:¤üüü¬¬¬Ž;Ö¢µÔÏEÞ¿okk«§§'ºÌQ%O—.]
+055ÍÊÊrqqiZÀª	Œ#„$°´´¼xñb@@ÀØ±c7oÞLu8êŒ#Ù0àúõëTÕ.ïœ M ááá2fNj“'„�d†††ñññ¿þúëš5k†^YYIuDªŽÍfëëëSRýúõûðáÃóçÏ•V#‡ÃÉËË#;
+”Pcff& Œ9R	u)™Õ „TÚÌ™3]\\BBBúôé“””äèèHuDª‹ÅbaË’‘§§§¡¡azzz§N�Zº.±y7|}}wìØÑh1R£=hRŽúûï¿@¸Œ’&Á–'„P#úöíK>TìååuåÊªÃQ]Øm‡dÇ`0¼½½•0­¿KKË�7¶jÕJÉõjLžB�ëØ±cfffÿþýÄÖ3ABØm‡äÒ¯_?)SÂ*ùtýû÷ï.\XZZ:tèÐ>4TLŒŒ'—x”µµ5 ¼~ýZ¡W£0yBÉÄÈÈ(!!aÃ†«V­š8q¢è£:ˆ„ÝvH.ýúõ+,,TZnÑ¦M›ÈÈÈ¡C‡–——¯^½Z	5öêÕ ’’’”P—’aò„’AáááçÎ�KIIñññyûö-Õ©ì¶CrñôôÔÓÓ“kMëæÛ¾}»ŽŽÎÑ£GŸ={ÖÒu}ÿý÷ °iÓ&%Ô¥d˜<!„ä3tèÐììl‹õí·ßfeeQŽ
+Áä	ÉEOOÏÓÓ“|$Miœ��§M›Æår•ÐøäïïTQQÑ«W¯;v¼zõª®®ŽÅb=}úôàÁƒ>>>-@ËÁI2BMQRR2fÌ˜ììì}ûöM™2…êpT‚››ÛèÑ£×­[Gu Hm,[¶,--íÞ½{-t~‰sN¾ÿÞÉÉ‰Ífggg{zzBOÌ‘„Ç64I¦ô£ªªªÆŽÛÐ*Èõ3œ$!¤ÉZ·n}åÊ•Ù³gO�:uÎœ9µµµTGD=6›Íd2©Ž©//¯ÜÜ\%� lÛ¶íÂ…ÁÊ•+e<„Œ°	ÏC_¸p!!!aøðá666:::äÂÀsæÌQr“›baËB¨YRRR¦L™Ò®]»ÄÄÄŽ;R•ììì–.]ºxñbªAjãÕ«W;v¼sçŽ··7Õ±Hsÿþý¯¿þºcÇŽ/^¼ :•€-O¡f:thNNŽžžÞW_}•˜˜Hu8TÂ1OH^–––¢kôª>ŸÿôéSòO‚Þ½{SŽªÀä	!Ô\íÛ·OOOŸ:uê˜1cV¬XÁãñ¨Žˆ8U’AžžžwïÞ¥:�Ñéô.]ºÜ¼y“Éd.]º”êpT&O!`2™‘‘‘G�Ý³gÏÀ�Ée´¶<¡&ðòòRå–' 011<xpZZZ·nÝ¨ŽEU`ò„R˜‰'þùçŸ%%%Ê ›r‡ÏçããH^_e¥mŠ    IDATýõË—/Uvám�@PYY™ššJÎx‰H˜<!„ÉÅÅ%++ËÇÇ§oß¾Zµ�›Í lyBòêÞ½»@ ÈËË£:$LžB
+fllüûï¿ÿôÓO«W¯ž1c™Uh<òYnLž�¼:tè`bb‚É“zÁä	!¤xA¬\¹òÊ•+ÉÉÉß|ó�6|1�9"vÛ!yáêêúøñcªArÀä	!ÔRú÷ïÿôéÓ®]»öèÑcíÚµ|>ŸêˆZvÛ¡&sssÓ†?04	&O¡dffvâÄ‰C‡mÝºÕÏÏïýû÷TGÔR0yBM†-Oj“'„P‹›2eÊÝ»wËÊÊºwïžœœLu8-¢ÉëW äææV\\\\\Lu HV˜<!„”¡K—.™™™&Lž2eJMMÕ)¶<¡&suu€¿þú‹ê@�¬0yB)‰žž^ddä¥K—®\¹âééùðáCª#R$LžP“ÙØØ˜šš>þœê@�¬0yB)•ŸŸßƒìíí¿ýöÛÈÈH�Y›§*@ÍÑ±cÇ—/_R’&O!e³¶¶NII‰ˆˆó÷÷ÿøñ#Õ) ›Í¦ÓéºººT‚Ô’ƒƒÃ«W¯¨ŽÉ
+“'„‚øñÇ¯]»–ŸŸÿÍ7ß\¾|™êˆš¶CÍáèèˆÉ“Áä	!D™Þ½{?xð ÿþ3fÌøüù3Õ5‹ÅÂä	5¶<©LžBT233‹‹‹»|ùrjjª³³ó™3g¨Ž¨‰°å	5‡££ã§OŸ***¨É“'„õœ››<zôè±cÇ–••Q‘ÜØl6Nò„šÌÁÁ °ñI]`ò„R	&&&û÷ï¿xñbVV–«««Ä&¨ŠŠŠY³f©æ2/Øò„š£}ûöA¼yó†ê@�L0yB©�!C†�MP£F�ªßvàÀ�Ÿþ™ªð¤Àä	5‡žžž¹¹¹f<yª0yB©SSS²	*33S´	êöíÛÑÑÑ °nÝºóçÏS£˜<¡f²¶¶ÆZÔ&O!UäïïŸ——'l‚zÿþý¤I“‚ ÷Ž;VÕRe±X8æ	5‡••&Oê“'„�Š"› Nœ8‘––6vìØwïÞ‘£�A]]Ý°aÃTêÑ$lyBÍdmmý÷ßS’	&O!•6nÜ¸“'Offfr¹\áF.—ûîÝ»‰'ªÎàqLžP3aò¤F0yB©4�·|ùrMüÃª®®îÒ¥Kª3x§*@Í„cžÔ&O!•¶oß¾ˆ6;	ñùüuëÖ�>}ZùQÕ‡3Œ£fÂ1Oj“'„�êúøñãŠ+¤÷ÍM�:µ  @i!5»íP3™™™UVVªNO4’“'„�êÊÎÎvuuÕÕÕ ]]]:�.V@ °ÙìáÃ‡×ÔÔPàÿ`·j&###�@@ù+É“'„�ê
+
+
+ÊÊÊª©©ÉËËÛ½{÷wß}×±cG  ‚Ì¨  ®®îÙ³gß}÷�@  0Tì¶CÍddd _¾|¡:Ô8‚Ú�„�D™™™………TG¡¢>|ø�ŸŸŸŸŸÿäÉ“>  A�àûï¿¤*ª…0`ÄˆT€äÒ®]»^½zQÅ?äää|õÕWÏž=ëÔ©Õ± F`ò„�*3fÌ©S§¨Ž!�’��@uÿðüùsggçû÷ï÷èÑƒêXP#t¨ !$™
+~¸«¸ººº·oß’ýzI1fÌªC� »íÔŽyBiƒ�™R_˜<©LžB!ê‘Ok²X,ªA�Ãä	!„¢9�>DV˜<!„BÔ#0yR˜<!„BÔÃäI�`ò„B©
+LžÔ&O!„�J §{¥:
+Ô8LžB!•€É“ºÀä	!„R	˜<©LžB!êñx<�Çd2©5“'„Bˆz555 ```@u ¨q˜<!„BÔÃäI�`ò„BQ“'5‚ÉBZ� rj>±-$===++«o¿ývÁ‚™™™².±€DrEHÒÑÑ±±±	¾yó¦ÄÂÞÞÞAôìÙSÊ©œœœ¸\®ô«�ë& €@ HHH:t¨µµµ®®®µµu``àÉ“'ëþž6  @t{@@€¼wF”ô'#LLLnÓ¦�®®®‘‘Q·nÝæÌ™“••%o1YþO_¿~=kÖ¬Ž;2™LƒnÝºýøã�wïÞ­K–2Z“'u"@©ž�����%TTÿs@ÊÇÅˆ#>}ú$ýp‰çoÎ‡�Äci4ZJJŠXÉ¿þúKX //OÊ©¢££xªªª%¨ªªªfƒQVVFn,--%·Èugd¿ðÏŸ?ûûû7ú!c1)7‡,�““cjj*ý$²”i9J{É%;; 
+
+
+¨5[žB�\.·¬¬ìöíÛK—.ÕÓÓKJJ5j”@þG©%~ú4áµµµ¹¹¹C†áóùk×®+sèÐ!  V"nÈúõëëêêd¬´Ñ›0uêÔ.˜™™íÜ¹óíÛ·§°°022ÒÜÜüâÅ‹S§N­æAƒÕÕÕ�>}šüõôéÓ\.wÐ A�†$Q£>iÒ¤K—.™››oÝºõùóçµµµÕÕÕýõ×�¼½½å-&zs$þŸ.]º´²²ÒÝÝýòåËeeeµµµùùùQQQ^^^ÂÃe)£m°åI�(6C)å-OõKæää˜˜˜ @BBB£…e/Ð„ß½{ zzz¢9Ž•• ìÝ» ,--kkk%žÊÕÕ öíÛ'¥
+ÙoÂ•+W ÀÐÐ077W¬pnn®¡¡! \½zUìÌ111 0hÐ rãÀ� 66¶	·«Ñ¿xñ" ˜šš>yòDÊyd,&�áÿT__ ž={ÖÌ2-G5[žÎŸ? ÕÕÕT‚‡-O!™xxx„‡‡Àï¿ÿNu,  FFF¢¿&''wïÞ}öìÙîîî¥¥¥çÎ�“xà¿þõ/ Ø°aCmm­¼•Ö¿	d´|ùr777±ÂnnnË—/–5bÄ]]Ý´´´ââââââ7nèêêŽ1BÞx@†�‹‹€ððp)ç‘±˜,ÌÍÍ€Åb5³Œ¶)))144Ä–'µ€ÉBHV#GŽ 
+‡ôr8œ¼¼¼iÓ¦€Ø€k²»júôéÂê¹3fL—.]
+<Ø„ÄnBFF „„„H,<zôh ¨?ÌÜÌÌlÈ�!</11ñÔ©S<Ïßß¿¡1@Ò5zádídØRÈXLÁÁÁ àãã3mÚ´¸¸¸ÜÜ\�×„2Ú¦¸¸¸uëÖTG�dCuÓBHì¶d;�¾¾¾,…E4çÃGâ±¾¾¾¥¥¥Â2EEEt:�Éd’C°ËÊÊ˜L&�F{ûö­ÄK;~ü8 ´mÛ–Åb5ó&èéé yžúÈQ,ïØ±cÇÈé×¯ üöÛoÒë•H–—¡¼Å2üŸVUU‘¹‘�‰‰ÉÔ©SE‡BËR¦å¨f·Ý²eË¾ùæª£@2Á–'„�¬ø|>Õ!  XZZnÜ¸±U«VÂ-111<oäÈ‘ `aa1bÄ>Ÿ/E$fÜ¸q...ïß¿ß·oŸ¼µ+ê&éééÝ¼yóÖ­[úúúAAAM8‰¼®FFFIIIyyy£F�²··ÿüùslll�=rsse/£m°åI�`ò„’Õë×¯ 	ŸïÿtkÂÞ¿¿páÂÒÒÒ¡C‡~øðA¸‹TDvç‘È¬ØØX‰Ñh´5kÖ @DDÙ8$;±›`cc /_¾”X˜ÜÞ¦M›ú»Œ��ù|>ŸÏÂ%/ÜÚÚZ¶2­]úÿ©««kxxxbbbAAA~~þ Aƒ***ÂÂÂä-£=JJJ0yR˜<!„d•”” >LÞ¦M›ÈÈÈ¡C‡–——¯^½šÜ˜––öêÕ+ ðóóÎÖèçç ¯^½JKK“xªñãÇ;;;ÿý÷ßQQQrÅ vzõê ‰‰‰“ÛÉ2õ�7Nì¹ÈxádídØRü{÷E½ÿ�ÿµË²€»( xEECAÅ”¼•b*rIQAQÒJ+Ó:ÚÅÛù¦}Ž�“y=¦Sï!¨™ä-)ïBj¥¡šf‚¦(( À^Øùý1¿Ï~öìevv™]x>þ‚y¿Þïy½ß«;/ffgy†ÕNçÎ�·mÛFD§N�ªKLÃV\\Ì~pŠ' àåÒ¥KK—.%¢	&ˆ›ÉÊ•+e2Ù¶mÛ®]»FÖéd©ÕÅÅ…=ù´lÙ2þ»6]ö1NË—/¿|ù²QðåË——/_ND“'O6;ÚK/½¤P(
+E\\ÿôxNüÕW_%¢¥K—²Ëe	Ï°Z{ôèqŸqäÓ€=xðÀ××Wì,€ÛßF uæ 7ŒkµÚÒÒÒÓ§OÏž=›½¡xðàÁ:�Ž£»Õñëž!Ã0S§N%¢ÄÄÄG�¹»»K$Ó�oß¾-•JÝÝÝõ7J«Õ›}3´ì�ÏÞÞÞ)))………jµº¨¨hõêÕì§ñø/ÿå4qö†*Ÿ•+WÞ¸qC­VWVVæçç³O¿Ôwäf5É=z,^¼8''§´´T£Ñýõ×ìÌ?Æ~ð†q­V+—Ë·oß.v"ÀŠ' G$zñdV||¼Ù¯gáøÃÌj@-2dæÎ�;‰„=ñ£Ú¤‘aÃ†Ñš5k,excu­¡¼¼|øðáfƒ£££Í~=‹ ÉšµfÍþ¯ç¯g±ÔêååõóÏ?ó�±,žþüóO":sæŒØ‰ /(ž ‘ƒOr¹Ü××7""â�wÞ1û¶^ëã(Õ­xb†}X%kçÎ�fû²�$èÙ³§¥¡4MÇŽë¸Ãètºôôôèèh???™Læçç�žžnx‚Š{:|ZõìÙ“ÿÄÙ333GŒ “É
+EXXØôéÓsrrŒ&b5ÌêkzñâÅùóç0ÀÇÇÇÅÅE¡PtëÖíý÷ß7|€ŸûqÀâéÄ‰DtçÎ±^$Lc½ºàÈÆŽKD™™™b'Ð 9àÿ¯­[·¾õÖ[•••‰Dì\À:Ü0   ²[·nµmÛ•“³�‰�  4^Ü‡ŠF~^‹Ó¨Üºu+((Hì,€/œy  Š'ç‚â	 DÃ}K¦ØÙ‰‹Ó¨Üºu«]»vbg|¡x  ÓÓ§OÿüóOö1WàP<  ˆ)??_§Ó………‰�ð…â	  @L—/_öððÐ?rŠ'   1]¹rå™gžqqq;àÅ  €˜®\¹‚kvÎÅ  €˜._¾*v  Š'   Ñ<~ü¸°°Å“sAñ   š«W¯Q×®]ÅN@ñ   šsçÎ5oÞ¼C‡b' x  Íùóç#""ð•ÀÎÅ  €hÎ�;÷ÜsÏ‰�ƒâ	  @%%%7nÜˆˆˆ;Å  €8ÎŸ?Ï0LŸ>}ÄN„‘‰�  ˜WTT”‘‘!v PQQQëÖ­ÅÎ‚ˆèÜ¹sAAA~~~b'Â xpP¹¹¹IIIbgÐ0%&&Š�ÑùóçqÃ“3Bñàˆ233ÅN«®®V*•_}õÕØ±cÅÎœ Ã0çÏŸŸ5k–Ø‰€`¸ç	 À6ÜÝÝ;tèÀ>óÀª«W¯Þ¿?22RìD@0O  6Šâ	x:vì˜——×³Ï>+v" Š'  ›	½råŠØY€s8~üø€\\\ÄNCñ `3]»v½víšF£;pt:�îøñãƒ;¨O  6ªÑh~ÿýw±GwåÊ•’’ON
+Å €Í<óÌ3...¸rV;vÌÛÛ;<<\ìD 6P< Ø>p<?~|àÀ�R)ŽÂN	/ €-õîÝûÂ…bgM§Ó�:ujàÀ�b'µ„â	 À–zõêuþüy±³ ‡öã�?>|ø0&&FìD –P< ØR¯^½îÝ»w÷î]±ÇuðàÁŽ;véÒEìD –P< ØÒ³Ï>+•Jqå88p ::Zì, öP< ØRÓ¦Mƒƒƒúé'±uçÎ�‹/ÆÆÆŠ�ÔŠ'  ëÝ»7Š'°äðáÃxÂ“SCñ `c½zõÂe;°äàÁƒ‘‘‘b'µ‡â	 ÀÆzõêuÿþý¢¢"±‡£V«�=ŠkvÎÅ €�õìÙS*•â�`êÌ™3¸[ÜÙ¡x °±¦M›öìÙóøñãb'gß¾}]»víØ±£Ø‰@� x °½�ž<yRì,À±ÔÔÔddd$%%‰�ÔŠ'  Û8pà¯¿þúøñc±röìÙ{÷î¡xj P< Øûµe§OŸ;p {öì	}æ™gÄNê
+Å €íùøøtíÚWî@�a˜Ý»w'&&Š�Ø Š'  »ÀmO`(77÷Î�;cÇŽ;°O  v1pàÀŸ~ú©¢¢BìDÀ!ìÞ½»K—.¡¡¡b'6€â	 À.¤ÕjsssÅNÄÇ0Lff&®Ù5(ž  ì"   cÇŽ¸rDtáÂ…ÂÂÂ1cÆˆ�ØŠ'  {‰‰‰ùöÛoÅÎB‰D"‘HÄÎ¢¡Ù¼ys÷îÝÃÃÃÅNlÅ €½ÄÅÅ]ºt	_r×È©TªôôôI“&‰�ØŠ'  {‰ŒŒôðð8tè�Ø‰€˜:TVV–œœ,v"`3†aÄÎ  Á1b„L&ûúë¯ÅN„/öš6”��PQQñÝwß‰�ØÎ< ØQllìÑ£GU*U­G`oBªªªš1c†¿¿¿L&c·Ÿ>}zÒ¤I­[·vuumÞ¼yTT”Ñá™íXSSóÉ'Ÿ¹¹¹uéÒ%--Í0æ�?þ5j”R©ôõõ�>}zee¥ÑÞÕjõÒ¥KÃÃÃ›4iÒ¤I“ðððåË—k4£½<yòdòäÉÍš5LII!¢ÒÒÒ‰'z{{ûúúÎŸ?Ÿ»³:­V›’’Ò»wo¥RÙ¤I“ÈÈÈ¬¬,«MD´}ûöÈÈH///77·ààà¹sç–••é;~ñÅýúõkÑ¢…\.oÙ²ebbbvv6w“P%%%ß~û-®Ù54  ØÍíÛ·‰è»ï¾«õì{uBB‚Ñû¶éû¹D"Ù·oŸQÇ)S¦…edd°>lÝºµa“þã`l@uu5û=3F¬V«÷2zôhÃ€o¾ùæ¹çž3Ü²uëV«s´4µZeÃÝ¤ÓéÌ^)-++cÆteô}9š„úâ‹/”Jå“'OjÑŠ'  û
+{ï½÷jÝ�=l·jÕêÀ�úí111‡züø±Z­.**ZµjEDDulÓ¦MVVVYYÙíÛ·GŽIDÏ?ÿ<0wî\"j×®ÝñãÇ+**Ž;Ö¶m[Ã*aÉ’%DäååµiÓ¦ââââââ�76mÚ”ˆ–-[f¸—ðððK—.•••½ýöÛDÔ¬Y3£-à˜#÷\V¬XADJ¥2%%¥°°°ººúìÙ³£F�ânÚ°a»n<¨¬¬<{ölDDÍ›7�a˜&MšÑÂ…‹ŠŠÔjuIIIVVVTTw“Pýúõ›4iR-:‚#Cñ `_sçÎíÔ©S­»³ÕÉÞ½{�¶ggg�1"  @!�ˆÜÝÝ�:žôºyó&yzz²¿†„„Ñþýûõú{³Ø_»wïNDiii†ûMMMe«%Ã½äää°¿Þ½{×ì–-ZpÌ‘{.=zô ¢õë×›vähêÓ§�<yÒpã�7ˆˆ}9ØéGEE½÷Þ{©©©×¯_×‡q4	rãÆ‰DrèÐ¡Úu‡…â	 À¾~øá"úý÷ßk×�­$JKK7¦§§[z“QÇªª*ý�NgãææFD�=Ò”––¸»»Ñƒw]\\LD†{©®®6Ú…Ñ‰Dbi‚VçâááADÅÅÅ¦}9šØ³G......R©T*•ê÷âêêÊ0Ì™3g‚‚‚w}ÿþ}î&A,XÐ²eK�F#´#88Ü0 `_Ï?ÿ¼··w?pçíímøë?ÿùO†a¦M›VPPÀ–GOž<1Û‘-€Xö{ú%[‡îÂhcù†qþs„ÝcMMMMM�N§ÓétúØÞû÷ïýúõ3gÎ,[¶,11Q©T>|øÝwßånâO£ÑlØ°áÍ7ß4<�„ˆ… @#ñÆoôêÕ«v}Í¾W³¥ÉãÇ�õ[¾ùæ£H³7ò¼l·eËÃ6mÚD&—í¸æ>ÜX�û`î6˜öåhêÝ»7�;wÎÒ~�°Wô|||5qÈÌÌ”Éd………‚z�SÀ™'  »;vìO?ýôûï¿ÛjÀ6mÚÑ²eËJKK?~œ™™9uêT¡ƒ°÷�Ï˜1ãÄ‰Ož<9~ü¸ÑÉöÓjï½÷ÞÖ­[>|øðáÃÍ›7ðÁú&›°:ösþ|ðÁÚµkïÜ¹£R©rssÙÏ÷q4±7ª�9255õÖ­[UUU*•êÚµk6lèß¿?8pûöíEEEZ­öÁƒ»wï&¢êêjî&þ¾üòËØØX£Ï3B!võ Ðði4??¿Å‹×¢¯Ù÷êeË–½™¿òÊ+F‘f;näó¨‚^xÁôÀ©R©,í…ÏAsQ«ÕC†1{üâhbfÆŒ¦Mú ³Û§N�ÊÝÄÓµk×$É�øw'‚â	  >Lž<¹wïÞµèh¶òÐjµË—/ïÔ©“››[‡>þøcýƒ+¹;m¼yóæÈ‘#
+…��Ï›o¾ùôéS£€êêê%K–tïÞÝÝÝÝÃÃ£{÷îK—.ÕWNf÷Âg‹Ð¹¨ÕêåË—³i(ŠÈÈHýÕFŽ&†a²³³[µjåêêêááúÁ\¼x‘a˜œœœ×_½}ûö®®®¾¾¾ýû÷ÿòË/µZ-wOóæÍ
+
+ª©©áßœ¾ž  >=z4***??Ÿ½Ó0•JÕºuëwß}wÁ‚bçv�{ž  êÃ�!CÚ¶m»yóf±»ûæ›oÊÊÊÞxã±{Añ P¤Ré¤I“¶mÛVSS#v.`_©©©111b'ö‚â	  ž¼úê«ýõûÌLh¨~ûí·ìììiÓ¦‰�Øîy ¨?}úô			Ù²e‹Ø‰€½L›6íäÉ“W®\±ß#IAt8ó PÞzë­ôôtöN á)))Ù¶mÛŒ3P95l(ž  êÏ„	
+Î<5T7ntwwõÕWÅNìÅ @ýñðð˜8qâ—_~©ÿ]h0´ZíÚµk§L™Â~'14`(ž  êÕôéÓoÞ¼ùý÷ß‹�ØØ¾}ûîÜ¹ó·¿ýMìDÀîpÃ8 @}ëß¿@@ÀÞ½{ÅNliàÀ�¾¾¾xYœy ¨o³gÏÞ·oßo¿ý&v"NF¥RÍ›7�ýÖþwdK$’z¸}ûÂ…§N�š9s¦½wŽ gž  ê›N§{æ™g†¾fÍ±sq&,X´h‘þWžÇ/¶r²÷Áî�7ÞÈÍÍÍËËÃçìœy ¨oR©tæÌ™iii%%%bçâL¾úê+"Ú³gûÍÄb§óîÝ»·cÇŽ™3g¢rj$P< ˆàµ×^suuÅWÝ	òçŸÑèÑ£år¹Ø¹ü—•+Wúøøà	�Š'  xzzN›6måÊ•ÕÕÕöÛ‹V«ýâ‹/úõë×¢E¹\Þ²eËÄÄÄììl¶ÕìÍ@FµZmJJJïÞ½•Je“&M"##³²²¬6ÑöíÛ###½¼¼ÜÜÜ‚ƒƒçÎ�[VVf5+KMlVì×J¥R}’|¦`o�?^·nÝ{ï½çææVo;‘1   †‡zzz®ZµÊ~»˜2e
+Ç;¿Ù£€áFµZe¶;G“N§KNN6m
+-++ãÎÊR“¥x«S°cCK–,ñòò*//·ß.ÀÑàÌ €8š7o>mÚ´¥K—VUUÙiéééD´páÂ¢¢"µZ]RR’••e¶è1kõêÕß}÷�R©LII),,¬®®>{öì¨Q£¸›6nÜ¸sçÎV­Zedd<xð ²²òìÙ³W®\ùôÓO¹³²ÔÄ±Ø¬ô0Û¯—pÕÕÕ«V­š6mš§§§Ø¹@ýÁ§í  Dsÿþý:,]ºÔNOVìÒ¥Ëo¿ýÕµk×°°°Aƒë[Í~Ípcxxø¥K—Ö¯_ÿæ›o�ÌÑÔ·oßüñäÉ“/¼ð‚~ãÍ›7;vìØ©S§k×®qd%4a«S°c+©©©3gÎüã�?üýýí1>8¨ú>Õ  Þyç�¶mÛVUUÙcð3gÎ¾çGGGß¿Ÿm5{0ÜèááADÅÅÅ¦#s4±_Nââââââ"•JÙ[”Øa]]]¹³š°Õ)XŠ±‰šššÎ�;O�:Õƒƒ#Ã™'  1=xð€½Ÿzþüùö_«Õž;wîÌ™3çÎ�;|øð“'OÆ�Ï~æ_*•2£ÓéôÅMUU[ú°‡†&MšTUUûùùkµÉR>ìÈYq4™žC²:³½leïÞ½ã¢¹ÎŠ    IDATÆ�»víZ‡l>884ñê6  `†ùøã�===ïÝ»gïÝ¸qƒˆ|||Ø_ˆèæÍ›ú€#GŽÂÃÃ‰hÃ†¦Cq4õîÝ›ˆÎ�;W»¬8šL[V§`¶—­DDD$&&Úcdpp¸a @d³fÍR*•†ÏÎ¶•�nß¾½¨¨H«Õ>xð`÷îÝD¤8B×®]‰è½÷Þ+,,¬¨¨8pàÀo¼aØ}Ò¤IDôÁ¬]»öÎ�;*•*77wôèÑÜMo¿ý6�9255õÖ­[UUU*•êÚµk6lèß¿?wVÜ	›²:û9uêÔùóçgÍšU?»Ç"võ  Ìš5kÜÜÜnÜ¸aÛaÍ¾íëïÑ9xð Q“þIl€Z­2dˆÙGÃ03fÌà8èpdÅ�°á.xNÁl/›xñÅ‡nóaÁ) x ŸZ­îÚµkll¬m‡ÍÉÉyýõ×ÙoÒõõõíß¿ÿ—_~©Õjõ›6m
+		quumÓ¦ÍÇ¬Õj�JµZ½|ùòîÝ»»»»+ŠÈÈÈýû÷[mb&;;;11±U«V®®®¡¡¡|ðÁÅ‹¹³âNØldu
+ö(žNž<IDgÏžµí°à,pÃ8 €C8wî\¿~ývìØ1~üx±s+†®Õj¿ÿþ{±q x po¼ñÆ�òóó½¼¼ÄÎ,:sæÌóÏ?ìØ±ÈÈH±sq x pÅÅÅ!!!“'Oþ÷¿ÿ-v.`Q\\Ü“'ONœ8!v" |Ú ÀQ´hÑbÉ’%)))¹¹¹bçæ�?þàÁƒ,;Î< 8–#F\¹rå×_U*•bçÆâããKJJNŸ>-v" &œy p,7n|úôé‡~(v"`ìÂ…û÷ïÇK8ó àp¶oßþê«¯ž<yrÀ€bçÿ'!!¡°°ðÜ¹sb'"Cñ àˆ/\¸ðóÏ?ûøøˆ�ýòË/½{÷ÎÌÌ3fŒØ¹€ÈP< 8¢'Ož<÷ÜsG�uqq; Aƒ1ÿûxLhäpÏ €#R*•çÎ�ûÇ?þ!v.@YYY§N�Z±b…Ø‰€CÀ™'  Ç•žžžœœ¼wïÞQ£F‰�Kã¥V«Ÿ}öÙ��ö‹Šdb'   �?>;;ûõ×_					;�FjñâÅ·nÝÊÊÊ;p8ó àÐ4ÍK/½tùòåœœœ¶mÛŠ�N£sáÂ…~ýú­Zµêoû›Ø¹€£@ñ àè***^xá�Fsúôiooo±ÓiD4M¿~ý\\\Îž=‹ÛöA7Œ 8:OOÏ¯¿þº¤¤dÂ„	�Fìt‘ùóç_¹reãÆ�¨œÀŠ'  'Ð¾}ûýû÷Ÿ>}:99Y«ÕŠ�N£°oß¾+V¬Y³&,,Lì\À±à² €Ó8{öìðáÃ‡¶k×.WWW±ÓiÈîÞ½>hÐ ÌÌL±s‡ƒâ	 À™œ>}:::::::==]&Ã'¦íB¥REFFÿôÓO^^^b§—í  œÉóÏ?ÿÕW_eeeM�:µ¦¦Æ°©  à£�>+±ƒa˜‰'<x•˜…¿Z  œÌˆ#ÒÓÓÇ�ÿôéÓmÛ¶Éår"*//�‹‹ûã�?FŽ!vŽN,%%eïÞ½ß|óÍ3Ï<#v.à pæ	 ÀùŒ=ú»ï¾;räHTTTyy¹N§›0aÂ­[·ˆhòäÉ¸£¼Ö222fÏž½dÉ’—^zIì\Àqáž'  gõóÏ?ÇÄÄ´iÓfÀ€kÖ¬ÑétD$•J-Zô÷¿ÿ]ììœÏž={’’’æÎ�ûé§ŸŠ�84O  NìÊ•+,--5Ü(—Ë¯^½Ú±cG±²rFgÎœ‰ŠŠ;vlZZšD";ph¸l àÄT*Õ“'OŒö:�î­·Þ+%gtòäÉ˜˜˜áÃ‡§¦¦¢r«P< 8«‡ÆÇÇët:£kZ­öûï¿OOO+1ç²ÿþ¨¨¨Q£FeffâéÀ.Û 8%�N—��mööp‰Dâëëûûï¿7mÚ´þss"LLL|é¥—vìØ�çŽO8ó à”þóŸÿ>|ØÒÀÃ<zôèÃ?¬ç¬œËöíÛG�5fÌ˜�;w¢rþpæ	 ÀY]½z5###--íöíÛ2™Ìô”D"9uêÔ€DIÏÁ-\¸ðŸÿüçÿüÏÿüãÿÀ}N Š'  §÷ÓO?mÙ²eÇŽ¥¥¥...ú'�Ëd²:\¾|§UÕÔÔÌž=;%%eùòå³fÍ;p>(ž  ˆêêêƒnÛ¶íàÁƒZ­V*•jµZ‰D‚ÁPEEÅ„	Ž;–––6nÜ8±Ó§„â	 œRQQÑÙ³gÅÎÂA=}úôÜ¹s'OžÌÏÏgÆÕÕuÕªU~~~bç%>�N7þüÇ�Ï™3§C‡b§ãèP\Z‚â	 œRFFFRR’ØY 4d¨,Á- À‰áÍ�§ß~û­U«Vžžžb'ÎœpCñ Ðð…„„ˆ�@Ã�ç<   €â	   @ O     x    Å   € (ž    @ñ     Š'    P<   €â	   @ O     x    Å €I$‰Dbº…åîîÞ¢E‹¾}ûÎ˜1#''‡Ow³fñO’a˜={öÄÇÇÊår¥RÙ­[·éÓ§çææ…effÆÅÅùûûËårÿØØØ]»v1c6«àà`­VËg5øGZ�)÷\81­.©‘V«Ý´iÓ°aÃüüü\]]›5kÖ³gÏ3füøã�f^ p: €Úµk—S¼ƒ™¾Ór¼!�5êÑ£GÜÝÍŽ_—·÷òòòèèh«ƒTTTÄÆÆš�‰‰‰©¨¨0›Ujj*ÏÕàÉ‘¤Õ¹pb4Z]R}ðàAß¾}­fëÈœåÿ—Xpæ	 @ì[°V«-))9}úô¬Y³ÜÝÝ÷íÛ7fÌ†ß1Þt4#<ûNœ8ñðáÃÞÞÞ+V¬¸~ýºJ¥zúôéÕ«W×¯_ß¿}Øk¯½vðàA//¯Ï>ûìöíÛjµº°°0%%ÅÛÛûÐ¡C¯½öšÙÁ?ùä�FÃ'ž‘Ü3µ:³…®wª:�nÜ¸q¹¹¹-[¶\·nÝ­[·Ôjõ“'O._¾üÅ_pUàLêTz ˆÄYþ26}§µôÞûË/¿4mÚ”ˆ233­óàvèÐ!"jÖ¬Y~~>GØÑ£G‰H¡Päåå5ååå)
+"ÊÎÎ6Ê*44”ˆÖ­[Ç‘­ÐÈºÏ…ç˜µNuïÞ½Däïï_TTÄ3ä,ÿ¿Ä‚3O  !<<|Þ¼yDôÕW_ÕÛN·lÙBDóæÍ		áKKK#¢9sæ„……5………Í™3Gcè£�>"¢E‹©T*î4øGrà9—:²šêŽ;ˆèÃ?lÕª•ýÒ q¡x p£G�&¢óçÏ×ÛÙ»ÔÙýr8{ö,%&&šmMHHÐehìØ±]ºt),,Ü°a÷øü#9ðœKYM•}ùbbbìšˆÅ €£hß¾==|øPhÇZÚîþýûDÄvïÞ="êØ±£ÙVvû_ýe´]*•²çi/^\]]Í1>ÿHŽ™òœKYMµ¸¸˜ˆÚ¶mË‘¶]3„z€â	 ÀQèt:±S°±¤¤¤���»wï®[·ÎV‘¢ã“*#ü®p"(ž  Å­[·ˆÈÏÏOhG³÷´òéèïï¯ß/‡€€ "ºqã†ÙVv{`` i“T*]°`-Y²¤²²’c<#9fÊs.uÇ�*›ÆŸþi6m{çõÅ €£Ø·oEDDÔÛûõë§ß¯Õ°={ö˜me·³1¦Æ�ß¹sçû÷ï¯]»–{/ü#9’´:›àH•M#++«Ò ÑØã#|  öæ,¥6}§µôÞ{ñâEöQ»wï¶Ì?€ûñ~//¯‚‚Ž°#GŽ‘R©ô¨ý¯[·n%"___««Á?²Ösá9f­SeÓhÞ¼ù�7íÑ¡8Ëÿ/±`i À)9Ë›;÷1X«Õ–––ž>}zöìÙîîîD4xð`�NÇÑÝêøB�9’ˆ|||V®\yãÆµZ]YY™ŸŸÏ>XRODÞÞÞ)))………jµº¨¨hõêÕÞÞÞD”��À‘•V«6ûG{­#ë2>cÖ%U6__ß•+W^»v­ººº¼¼<??éÒ¥(ž, 8%gys·t6+>>Þì×³˜Å3À*ž_ÏR^^>|øp³1ÑÑÑf¿žÅpËæÍ›Í&&4Òj’|æÂ±wŽ&þ©–——ÇÅÅ™ÍA¡PlÞ¼ÙìŠ³üÿ– œ’³¼¹sr¹Ü××7""â�wÞ9sæŒ¥î¥ Ÿ’Â*�N—™™9bÄˆ€€ ™L¦P(ÂÂÂ¦OŸž““c–žžíçç'“Éüüü¢££ÓÓÓO•YšµF£Ñ?é .‘VgÊs.–öÎÑÄ?UÖþýûZ·níæææééÙ³gÏùóçß»wÏìî�³üÿ‹„ÁÍÿ à„222’’’ð`øÿÅŸ¶   @&v  `/Ü³Æy€ÚÁ™'    pæ	  ÁÂ¹% {À™'    P<   €â	   @ O     x    Å   € (ž    @ñ     Š'    P<   €â	   @ O     x   @&v  µ—‘‘!v
+ PNNŽØ)84O àÄ’’’ÄN 	Ã0bç   \FFFRRŽ8Ð0àž'    P<   €â	   @ O     x    Å   € (ž    @ñ     Š'    P<   €â	   @ O     x    Å   € (ž    @ñ     Š'    P<   €â	   @ O     x    Å   € (ž    @ñ     Š'    P< €S’�Édñññ'Ož¬]Ã0{öì‰��”ËåJ¥²[·nÓ§OÏÍÍåNƒgG†a233ãââüýýår¹¿¿llì®]»†1›ppp°V«5Ý^»HS·nÝzë­·:vìèææÖ¤I“nÝº½ûî»çÏŸ7Ç,îVÃ0Ž|,ÍHÿbµlÙrìØ±?ýô÷\DÀ   ØÙ®]»l~Ä1{P“J¥V^^]‹%ÏŽ±±±fcbbb***Ì&œššjº½v‘F~ùå—fÍšY�¬¥y±a­F£YÊ‡ç]]]Oœ8Á1�ú‡â	  ìÎ~Åû³J¥ÊËË>|8EDD9r$y{{¯X±âúõë*•êéÓ§W¯^]¿~}ÿþý9ràÙ1!!�ˆ¼¼¼>ûì³Û·o«ÕêÂÂÂ””ooo"JHH0M˜ˆ‚‚‚ÔjµÙ‰�4òâ‹/Q÷îÝ�9RRR¢R©
+
+
+Ö®]Ë±tVq-žØŸ«««þùçÈÈH"8p Ï4êŠ'  °;{O¬;wî‘»»» °C‡Q³fÍòóó%À³ãÑ£G‰H¡Päåå5ååå)
+"ÊÎÎ6J844”ˆÖ­[Ç1þ‘F<<<ˆèÚµkÜ·xbQ“&Mx¦Q?pÏ  Ôöv–ªªª3føûûËd2"JLL”H$aaa:�ŽÓétaaa‰$))Iè.”J¥ °-[¶Ñ¼yóBBBíˆgÇ´´4"š3gNXX˜QSXXØœ9sô1†>úè#"Z´h‘J¥âNƒ¤{Æ«ªªŠg<»z €†Oæ‰=ô°—±ô‡¡{÷îùøøÑÖ­[Ùx¶.iÑ¢Åƒ,�ix3¼7iÒ$AaíÚµ#"¡§�øw
+
+"¢Ë—/›mÍËË#¢:%\SSÓ¥K"úüóÏM'"4ÒÈôéÓ‰H©TNž<yóæÍ¿þú«V«5T'p[j²4#ög•JuñâEö
+#.Û @£cT<µjÕêÀ�†7JoÛ¶�ˆÚ·o¯V«Õjuûöí‰hïÞ½cš=#ùðáCAaîîîDTUU%tR<;r‡UVV‘‡‡‡QÂÃìÜ¹“ˆZ¶lÉöå(5¬F©¨¨ˆ��7\�¦M›¾öÚküñ‡éøf™ŽiÃâÉn €ÆÈ¨x2[ÅÅÅÑÚµk×¬YCDÉÉÉÜcše}}}srr„†9lñTSSÃ^\µjÃY<Y�4ëòåËK–,3f{nŒˆ¼¼¼~ýõW£ñÅ*ž\\\ÎŸ?ou.õÅ  Ø�QñTZZjSTTÔ¬Y³€€€€€€ÀÀÀ’’î1½wïÞ�9s&ùøøÜ½{WP˜c^¶cÞ¾};ùûû?}ú”£x²iUAAÁÐ¡C‰(::ÚìøVq³w¶i4Ã�jµšˆd2ÏA
+n €úÆÞ°lÄÇÇ§E‹®®®•••~~~<ïûf¦¤¤ÄÅÅ•––ÎŸ?_PX¿~ýˆhß¾}'Á·#¶gÏ³­ìv6ÆÔøñã;wî|ÿþýµk×rï…¤Y�;wf¯œž:uªÝ¹±7´±rÔcmÞ¼¹ÍwWÄ®Þ   á3:ód6fÆŒD´eË–Å‹Ñœ9s¸Ç4ª  @&“Éd²‚‚þaì¼¼¼{ñÁ³ã‘#GˆH©T
+zT�þ×­[·‘¯¯¯éDøGòqõêUúï‡‡#xØ°aDôŸÿüÇpãçŸNDQQQ<q(N�"  8;«ÅÓÑ£GÙ§ÔÔÔTUUµmÛV*•;vŒcL³CM�:•ˆ…±ÏºôññY¹rå�7Ôjueee~~>Ï‡dZíÈÞ�ííí�’’RXX¨V«‹ŠŠV¯^Íñ�Lý¯Z­688Øì)þ‘Fzôè±xñâœœœÒÒR�FS\\üõ×_³wM<˜{é,áÞ¼y35mÚtË–-ÅÅÅÅÅÅ›7oöôôdkežƒ8'H  œwñTZZÚªU+"ÊÊÊb·ìØ±ƒˆÚ¶mûèÑ#KcšêÎ�;‰D—1Ÿ0{=Kyy9û|SÑÑÑf¿žÅp[|X-ž8"Í.�)//¯ŸþÙj˜ÙÁ9vZSScv•bbbt:ÏAŠ¤  ÎŽ»x?~<0@¿E§ÓEDDÑ„	,�ié@;oÞ<":t¨ 0�N—™™9bÄˆ€€ ™L¦P(ÂÂÂ¦OŸnúñ=#<;êtºôôôèèh???™Læçç�žžnT=˜MX£ÑtìØ‘Oñd)ÒÈÅ‹çÏŸ?`À …BÑ­[·÷ßÿöíÛ¦ã×½xbF¥R-[¶¬G�=zôX¶l™áWÊðÄqH~ßí  PkIII8â@Ã€OÛ   €â	   @ O     x    Å   € (ž    @ñ     Š'    P<   €â	   @ O     x    Å   € (ž    @ñ     Š'    $Ãˆ�  44………=zôÐh4ì¯ÃhµZWWWöW‰DÒ§OŸ£G�Š— @íÉÄN    6mÚtèÐáçŸ6ü]¥R±?H$’˜˜‘R¨+\¶  »˜<y²‹‹‹Ù&‰D’œœ\Ïù Ø
+Š'  °‹qãÆ™½3ÄÅÅeàÀ�õŸ€M x  »ðóó<x°Ù“O“&Mªÿ| lÅ  ØË¤I“LO>¹¸¸$&&Š’€M x  {=z´Lö_ŸL’ÉdÑÑÑM›6+%€ºCñ  öâéé9bÄÃú©¦¦fâÄ‰"¦Pw(ž  ÀŽ^~ùåššý¯Mš41b„ˆù ÔŠ'  °£ØØX…BÁþìêê:fÌwwwqS¨#O  `Gnnn‰‰‰ì³Å5ï Š'  °¯äädö{Z|||†*v: u…â	  ìkðàÁÞÞÞD4nÜ8£ß8#ü# §TTTtöìY±³ ¾ž{î¹#GŽdddˆ�ð5nÜ8±SpP³ÏÎ ppIIIbgÐ�¡B°gž À‰áÍÝ‰lÚ´iÊ”)bg¼à�n¸ç	  êÃäÉ“ÅNÀ6P< @}�H$b§ `(ž    @ñ     Š'    P<   €â	   @ O     x    Å   € (ž    @ñ     Š'    P< ˜Á0Ìž={âããår¹R©ìÖ­ÛôéÓsss�Â233ãââüýýår¹¿¿llì®]»†1P"‘H$’àà`­Vkº½.‘fñŸÇ F£ñÙ�áFww÷-ZôíÛwÆŒ999‚Ö_Ð:�ð‚%“ÉâããOž<i),&&Æp{LLŒÙEÖëß¿¿D"éÓ§Ç¤¬ÎÚpKRR’D"‰ŒŒ4š‹N§4h�D"?~<Ç€` €Úµk—ýÞÁÊËË£££­¾mVTTÄÆÆš�‰‰‰©¨¨0Sß”ššjº½Ž‘IZ�Ç F£ñÙGÌ¨Q£=zÄÿUÐw´ºµ{!I¥Ò˜†Éd2WW×’’vãÃ‡Ù-¦9°®^½ªóòåË–&euÖ†[>|@D+W®4Üþïÿ›ˆõéÙ�]ÿ5 X pJv}s9r$y{{¯X±âúõë*•êéÓ§W¯^]¿~}ÿþýõa			DäååõÙgŸÝ¾}[­V¦¤¤x{{QBB‚á˜úcjPP�Z­6Ú^—H›Ì…Ï˜|vg£ÕjKJJNŸ>=kÖ,www"<x°N§ãÁh(>ëP‹‚ýY¥Rååå>œˆ"""LÃØºsÃ†ìÆõë×³™¥¥˜5k¹¹¹Ñûï¿Ï½>³6Ú˜••EDîîîùùùì–«W¯²KjTóÙ
+Š'nX pJö{s?tè5kÖL 2ëèÑ£D¤P(òòòŒšòòò
+eggë7²ÅÐÐP"Z·n�ÑvÃîB#ë>žc
+-žýòË/M›6%¢ÌÌLA™X]‡Ú½†awîÜaKÓ½§¥¥ÑÐ¡CÙ�C†!¢Í›7›�¦Z­nÑ¢ýç?ÿ!"___•JevRVgmº}Ê”)DôÜsÏiµZ�FAD¯¿þ:ÇPu�â‰– œ’ýÞÜÙ;H>ýôSî°ääd"Z¸p¡ÙÖ…ÑË/¿¬ßÂÓÓÓ‰¨M›6ÕÕÕ†Ûû
+�¬û\xŽY—â‰a˜E‹Ñ˜1cebuj÷BÆ°Å“¯¯¯éÞ=z$—Ë]\\îß¿ÿþ}¹\þøñc³ÓÜ³gõèÑƒa˜îÝ»›­k]<•••µk×Žˆþõ¯ýóŸÿ$¢   òòrŽ¡êÅ7, 8%û½¹³‡(«§j‚‚‚ÈÂ}-ÃäååQ‡ô[ØƒbMMM—.]ˆèóÏ?7ÜnØWhdÝçÂsÌ:Oìý@mÚ´”‰Õu¨ÝÁþlxÙnÒ¤If'2bÄ"úâ‹/Ö®]KD#GŽ´4Mö¾«Õ«W3“’’BDÑÑÑf'euÖf›~øá‰Dâêêêêê*‘HŽ;Æ1N¡xâ†¥ §d¿7wöV’ªªªº„UVV‘‡‡‡~‹þ ¸sçN"jÙ²%Û—£$âi– ¹˜Ý»¥&ŽÝqw¯ªª2Zž™p¯Cí^#‘‘‘>4»÷íÛ·³ƒ"¢;v˜�fQQ‘‹‹‹››{ûvII‰›››T*½}û¶Ùa­ÎÚ¬™3g²ï¾û.Ç u‡â‰U  P¯’’’BBBîÞ½»nÝ:[E:�NW»Žö^__ßÅ‹7oÞÜlëÈ‘#ÝÝÝOž<yêÔ)ö|Siii555£G�öññ!"ŸQ£Fét:ýR6±dÉö‡Å‹ÛpX
+Å Àñ÷÷'¢[·nq‡±Ÿ¿qã†ÙVv{`` i“T*]°`-Y²„=/b	ÏH³š‹ »ãÆ¦áçç't�ÜëP»‚MûîÝ»3gÎ|øða\\Ü_ýevOOÏØØX�N§Óébcc•J¥iÃ0ì­åìmÝ¬×_�ˆ6oÞÌs}øððð0úD�â	 à¿ôë×�ˆöíÛÇ'Œ½GØ»��15~üøÎ�;ß¿Ÿ½�†ÿHŽ$­Î¥~°i°ŠcêòB¦¤¤ÄÅÅ•––ÎŸ?ßÒÞ“’’Œ~0rìØ±›7oQTT”þšQQQDtóæÍcÇŽqÏœ�}® Ø—½UàååUPPÀväÈ"R*•µû„üÖ­[‰È×××ô­¸Ö‘µžÏ1ù5,Å\¼x‘}TÁîÝ»k—‰¥u¨ãÁ0LAA�L&“Éd†«döôéS…B¡P(ž>}jvö–$''[]Øîyâ†¥ §TÉôññY¹rå�7Ôjueee~~¾Ñƒ%ããã‰ÈÛÛ;%%¥°°P­V­^½Úê³†ÑjµÁÁÁfÿŽ­ud]æÂgL¡Å“V«ô‹	    IDAT---=}úôìÙ³ký�Lý¯ëP—‚5uêT"JLLä9YÃÖG�¹»»K$’?þøÃ(ìöíÛR©ÔÝÝ]ÿhuO– œ’#|=Kyy9û)wSÑÑÑf¿Äp‹á­Äu‰´š$Ÿ¹pì]Ðî8bâããkñõ,|Ö¡Ž/Ã0wîÜñðð�H$çÏŸ·ºF­kÖ¬!ƒi6l­Y³Æ°#Çò°¼l¶�â‰– œ’½ßÜu:]ffæˆ#d2™B¡›>}zNNŽQXzzztt´ŸŸŸL&óóó‹ŽŽNOO7=¿bzÌÓh4;v4Ý.4’ã@+h.–ö.hw†år¹¯¯oDDÄ;ï¼sæÌ³crà¿LÝ^Ö¼yóÈ â®Q[{öìID;wî4É>g¡gÏž†9Ö�g€¥ÄlÅ7	c»O  Ô›ŒŒŒ¤¤$¼ƒØþqÃ§í    �‰�   4:‰„£'<ÀÁáÌ   € 8ó  õç–À©áÌ   € (ž    @ñ     Š'    P<   €â	   @ O     x    Å   € (ž    @ñ     Š'    P<    ; €ÚËÈÈ;hD.]ºTPPÐ§OŸvíÚ‰�‹}åääˆ�‚CCñ N,))Iì ÑÙ³g�Ø)€È$Ãˆ� €Ó«©©Y³fÍ‚Z·n½mÛ¶Þ½{‹�ØÅµk×ºuë¦V«e2™V«HNNNLLìÛ·¯D";;¨'(ž  êêÚµk¯¾úê…æÌ™ó?ÿó?îîîbgv”’’òþûïë�žr¹\­V7mÚ4>>~ìØ±Ã‡—Ëåâfö†â	  N6mÚôî»ïvèÐaóæÍ={ö;°;�N7`À€.hµZÃí®®®�F¡PŒ5*>>>66V¡Pˆ•$ØŠ' €ZºwïÞk¯½–��½`Á‚Èd¸‹´±¸råJxx¸Qñ¤ÇVQ>>>§OŸîÒ¥K=çõ �*  ¨�óçÏ÷ë×ï×_=tèÐÂ…Q95*¡¡¡.tqq1ÛªÑh\\\’““Q95T8ó  ØÚµkgÍšõÂ/ìÜ¹ÓÏÏOìt@555½{÷¾|ù²éù'WW×^½z�:u
+%uC…3O  TVV&''Ï˜1cöìÙ‡FåÔh¹¸¸ìÜ¹ÓôvR©T©Tfff¢rjÀP< ðU\\<xðàC‡íß¿ÿ“O>±tÕ‰.]º|ôÑGFÿ†>|x«V­ÄÊ
+êŠ'  ^.]ºÔ³gÏ²²².¼ôÒKb§áÿý¿ÿª?Éäââ¿{÷î·ß~[§Ó‰›ØŠ'  ërss‡pìØ±Ž;Š�8
+™L–ššÊÖIr¹¼OŸ>™™™GŽÙ¾}ûèÑ£«««ÅNìÅ €'Nœ6lXDDÄ‰'ÅNKDDÄìÙ³‰H«Ó‹/¾¸oß¾~øaüøñ�FìÁöði;  .ûöíKJJš0aÂÆ�q“˜U]]ýì³Ï~þùçC†ÑoÌÉÉ‰ŽŽŽ‹‹Û¾}»TŠS
+Š'  ‹¾ýöÛÄÄÄ±cÇ¦¥¥áÃSÀáñãÇ^^^FÙ«½			›7oÆ7ß5$¨… Ì;qâÄØ±c'Nœ¸eËTNÀÍ´r"¢¾}ûîÚµë«¯¾š?~ý§öã²páB±s  p8gÏž�ŽŽž0aBjj*®¹@­uîÜ9  àïÿ{```¯^½ÄNl—í  ŒýþûïÏ?ÿ|�=²²²är¹Øé€Ó[¸páâÅ‹�?Þ¯_?±s@ñ ð_=zÔ·o_ooïììl¥R)v:Ð03~üø'N\¸p¡uëÖb§u…â	 àÿ¨Õê!C†Ü»wïÇôññ;h8ž<yÒ¯_?¥Ryüøq777±Ó�:Á…| €ÿ3mÚ´¼¼¼¬¬,TN`[J¥2##ãêÕ«¸y¼@ñ ðÿKKKÛ¼yó¦M›BBBÄÎ .]ºlØ°aÕªUÇ�;¨\¶  "*((èÕ«×Ì™3?ýôS±s�†ìå—_>qâÄåË—Í>Ý œŠ'  ªªªŠˆˆðóóûþûïñ`°«’’’ÐÐÐ#FlØ°Aì\ –ð @,¸}û6éõ yóæ+V¬Ø¸qã?ü v.PK8ó �Ý©S§"##ÓÒÒ^yå±s�Æâ¥—^º~ýz^^$æŒP<@£öäÉ“nÝºõìÙsïÞ½bç�Haaa—.]>úè£yóæ‰�†Ô Ð¨ýãÿxüøñÚµkÅN—6mÚÌ�;wÑ¢Eýõ—Ø¹€`(ž  ñÊËË[½zõÇhÛ‘%d2Y@@@||üÉ“'kÆ0Ìž={âããår¹R©ìÖ­ÛôéÓsss¹ÓàÙ‘a˜ÌÌÌ¸¸8¹\îïï»k×.ÓKlªÁÁÁZ­Öt{í"MÕbõŒ8Ô"XJoöìÙ^^^‹-â^�úÁçu�ÿÃ  4J:�nÀ€}úô©©©±ùàfßo¥Ré�„†•——GGG×â=œgÇŠŠŠØØX³1111fNMM5Ý^»HÛ®žÑø²–ö»}ûv—üü|î©|^ÐÃJ@#µ{÷n©TzáÂ{nx(R©TyyyÃ‡'¢ˆˆ¡a#GŽ$"ooï+V\¿~]¥R=}úôêÕ«ë×¯ïß¿?G<;&$$‘——×gŸ}vûömµZ]XX˜’’âííMD			¦	QPP�Z­6;¡‘6Y=G^Žôjjjzôè‘””Ä=‹z€âI¬ 4F�¦S§N/¿ü²�Æ7=Ý¹s‡ˆÜÝÝ…:tˆˆš5k&ôäÏŽG�%"…B‘——gÔ”——§P(ˆ(;;Û(áÐÐP"Z·nÇDøGšªõêq�EàØ5Ã0»ví’J¥¦»®g(žÁJ@c´qãF¹\~ëÖ-£íì!¤²²òoû[‹-\\\Øs¡¡¡ú«{555ì�sÜ¸q–Æ·tø÷õõ6~üx"úôÓO…N�gÇääd"Z¸p¡ÙÖ…‘a‰É&œžžNDmÚ´©®®¶4þ‘¦j½zFd¸÷®ÓéBCC_yå£í¦ÿÙí§N�š8qb«V­d2™��Ï°aÃŽ9bÚQ«Õþë_ÿj×®�\.		Ù´i“aÌÍ›7ããã
+EóæÍ§M›öôéS£TU*Õ’%KzôèááááááÑ£G�eË–™žf«¨¨xíµ×š6mðÙgŸ1SRRòòË/{yy5oÞüÃ?Ôéts·:�FóÙgŸõêÕK¡Pxxx4hÿþýV›†Ù¶mÛ Aƒš5k&—Ë;vì8gÎœÇ�ë;®]»¶oß¾~~~®®®���			G�ån2~u8f Ð UWW·iÓfúôé¦Mì!�-˜X÷îÝc¿$xëÖ­lÌ–-[ˆ¨E‹<°´ÃC‘á…§I“&	
+k×®Õâžžƒ‚‚ˆèòåËf[óòòˆ¨C‡F	×ÔÔtéÒ…ˆ>ÿüsÓ‰�4U‹Õ3ËA�{ïÃlÝºU&“•ò¦ÿ·’H$ûöí3ê8eÊ£°ŒŒ6àáÃ‡­[·6l3fŒá.ª««hº£Áƒëë'vËèÑ£¾ùæ›çž{Îp‹þ�YÜsQ«ÕQQQ¦1ÜM:�Ž­†�„††–••1cº2ú¾MÆ™[}Q ˜ÔÔTWW×›7oš6±ï•­Zµ:pà€þ6ámÛ¶QûöíÕjµZ­nß¾=íÝ»—cfß‚###>|((ÌÝÝ�ˆªªª„Î‘gGî°ÊÊJ"òðð0J˜a˜�;wQË–-Ù¾¦Çþ‘¦ê²z†ã;È"˜ÍÍ�J¥jÙ²åìÙ³MûýSd&&&æÐ¡C�?V«ÕEEE«V­¢ÿ¾ŒíØ¦M›¬¬¬²²²Û·o³7~=ÿüólÀÜ¹s‰¨]»vÇ�¯¨¨8vìXÛ¶ms[²d	yyymÚ´©¸¸¸¸¸xãÆ�M›6%¢eË–î%<<üÒ¥Keeeo¿ý65kÖÌhË€8Vž{.+V¬ "¥R™’’RXXX]]}öìÙQ£Fq7±_zÓªU«ŒŒŒTVVž={6""‚ˆæÍ›Ç0L“&MˆháÂ…EEEjµº¤¤$+++**Š»ÉŠ' htzôèaén'ö�`ZÅÅÅÑÚµk×¬YCDÉÉÉÜ»0=dúúúæääsØâ©¦¦&$$„ˆV­ZÅpOV#MÕzõôjÌæfä_ÿú—¯¯¯J¥2êkúO1;;{Äˆ2™L?¦áÝ`ì–ï¾ûN¿åæÍ›DäééÉþÊælx‘ëë¯¿6Ì­{÷îD”––f¸ßÔÔT"
+7Ü‹þE¹{÷®Ù--Z´0;_>séÑ£­_¿Þ´#GSŸ>}ˆèäÉ“†oÜ¸AD�:uÒO?**ê½÷ÞKMM½~ýº>Œ£ÉŠ' h\Nœ8AD?ýô“ÙVöí»´´Ôh{QQQ³fÍKJJ¸÷bx(º{÷îÌ™3‰ÈÇÇçîÝ»‚Âó²ûóöíÛ‰ÈßßßôŽA‘¦j±zf9Ô"pûë¯¿\]]ÓÓÓ�úýSLOO·ô4&£Ž†µ N§3Œqss#¢G�éJKKØjÒèªtqq1‘l¼þ~/ý.Œ¶H$KS¶:"*..6íËÑÄž=rqqqqq‘J¥R©T¿WWW†aÎœ9Ã¾âzÑÑÑ÷ïßçn2‚â	 —I“&õîÝÛR«¥£]eee§N�Ú´iÓ´iÓîÝ»ž!à9{îjòäÉ‚ÂØ[ž/^Ì½;S<;N˜0�ˆ>þøc³­–î•fÖjµ�;w&¢eË–q×Ü‘¦j½zFj¬zé¥—bcc¹ûvíÚ•ˆ¦M›VPPÀ–GOž<1Š4ÛÑp£‹'îÉrOßê\jW<±M–°1�æÌ™3Ë–-KLLT*•D4~üx«Mÿ55K³ hx*++===×®]k)ÀÒÛýŒ3ˆhË–-‹/&¢9sæpïÈtœ‚‚™L&“É
+
+
+ø‡±¶÷òò2ìÅÏŽGŽ!"¥R)èSúú_·nÝJD¾¾¾Vœ‘¦j½zFm¸¥§§»ººêk³}ÙºGÿÁ1†a¾ùæ£H³7ò¼l·eËÃ6mÚD&—í¸'Ë=}«s	'¢6˜öåhêÝ»7�;wÎÒ~�°Wô|||5¡x€F$33S&“ñü”œÞÑ£G%IXXXMMMUUUÛ¶m¥Ré±cÇ8vdvœ©S§Qbb¢ 0ön_Ÿ•+WÞ¸qC­VWVVæççó|H¦ÕŽñññDäííÍÞ{ËÞº»zõjŽçCêÕjµÁÁÁô¿jiª.«çÈ‹À­¢¢ÂÝÝ]_²˜íËîèÃ?,))yôèQFF†¿¿¿Ðâ‰çãÞÞÞ[¶lyðàÁƒÒÒÒ¼¼¼Èä†qîÉrOßê\þýï‘§§çš5kŠŠŠª««srrØ»Â9šØ"/  `Ã†üñGeeeuuuAAÁúõëûõëÇ0Ì/¼°mÛ¶ÂÂB�FS\\¼téR"jÒ¤	w“ñzZš @ÃóòË/¿øâ‹¦o÷¥¥¥­Zµ"¢¬¬,vËŽ;ˆ¨mÛ¶†>¬ŽÃ0Ì�;w<<<$Éùóçù‡ÙûëYÊËËÙ˜ŠŽŽ6ûÍ$†[6oÞl6þ‘¦­žÕÙ9Ô"p>|øØ±c9úê/ê½òÊ+F‘f;näó¨‚^xÁt)"##õ¬ùL–{úVç¢V«‡bšwó¿ç‰Íb,ü³™:u*w“ñzZš @Ã ÿÓÙ,Ó·{ö¾ÃO\ët:ö“Ï&Là?kÞ¼yD4tèPAa:�.33Sÿ¹$…B6}útÓ áÙQ§Ó¥§§GGGûùùÉd2??¿èèèôôtÓ'š&¬Ñh:vìhº�¤)A«géé˜‹ÀmÅŠþþþ}µZíòåË;uêäææÖ¡C‡�?þX£ÑEšíh´ñæÍ›#GŽT(>>>o¾ù¦éÝîÕÕÕK–,éÞ½»»»»‡‡G÷îÝ—.]júa@îÉrOŸÏ\ÔjõòåËÙ4
+Edd¤þj#GÃ0ÙÙÙ‰‰‰­Zµruuõððýàƒ.^¼È0LNNÎë¯¿Þ¾}{WWW__ßþýûùå—Z­–»Éˆ„áü÷ Ð`\¿~½sçÎ999}ûö; 3rssûõëwýúuÃë€à€¤b'  POrssÝÝÝ{öì)v" æõìÙÓÍÍíÜ¹sb'V x€ÆâêÕ«Ï<óû äææÖ©S§üü|±+P<@cqíÚµN�:‰� —àà`öòàÈP<@cqëÖ­:ˆ� —víÚýùçŸbgV x€Æ¢¬¬Œ}V€Ãòòò*++;°Å 4Ož<a¿oÀa)•Jý·”€ÃBñ �…Z­–ËåbgÀE.—«Õj±³ +P<@c¡P(ôpLOž<a¿MŠ' h,pAßÓ§OqqÙñ¡x€Æ¢yóæ<¨ç�J$‰Db«0³½$ILLŒáö˜˜}S-äÀýk]0³gÏžøøøÀÀ@¹\®T*»uë6}úôÜÜÜZ�i“lU*Õ¼yóØoð°Õd7oÞÜæÃ:µÚ­¹ÿ5š_Ï �Ä”)SŠŠŠ¾ûî»úÜ)ûö­§5úÕR˜ Áe2™D"¹wïž��•””H$ö›Â�i5îéðœ¬UãÆ�;|ø°ÙÖZ�o“ô,X°hÑ"ÓdleðàÁÏ<óÌºuël;¬S«Ýš×úŸ8ó �Eppðõë×ëy§†ß�j'C‡Õh4{÷îeÝ»w¯V«:t¨=öÅ=[MvâÄ‰‡ööö^±bÅõë×U*ÕÓ§O¯^½º~ýúþýû×}üºøê«¯ˆhÏž=ì·äÚ|ü?þøO#3bï5¯œy€ÆâÛo¿9rdqq±¯¯¯X9ØãÌSZZÚäÉ“‡zôèQ":tè÷ß¿yóæ×^{Mè˜u<—SÇÑX‡Ž‰‰iÖ¬YnnnHHˆý²­]z2™¬¦¦F§ÓÙã’ÐÃ‡[´hqàÀ£ë°�\íÖgž  là…^�J¥§N�ª]÷[·nI$///�NÇn¹té{_Å¥K—Ø-:�ÎËËK"‘Üºu‹Ýbxã…áfïIª©©ùä“O‚‚‚ÜÜÜºté’––Æ'±Q£FÉåòcÇŽ?~\.—�5Ê4R­V/]º4<<¼I“&Mš4	_¾|9{uÏPeeå[o½åëëëéé9zôhý\ÈÚ}$V'ûÃ?H$’ÀÀÀªª*ÃŽ*•ªuëÖ‰äûï¿ß²eÍ›7�OåDæ“ý¹ªªjÆŒþþþ2™ŒcÓü-½
+úV"’J¥ú=ò\U>Îœ9#‘Hê~vM«Õ~ñÅýúõkÑ¢…\.oÙ²ebbbvv¶áDŒºmÔjµ)))½{÷V*•Mš4‰ŒŒÌÊÊ²ÚDDÛ·o�ŒŒôòòrssž;w®þ™ŸYYj²´æ|¦`_ @£Ñ½{÷Ù³g×º{»víˆè—_~a]ºt)û~½lÙ2vË/¿üBDíÚµÓw1|§åxfž2eŠQkFFG>úFŒAD_|ñÅÚµk‰häÈ‘F»f¦ººzàÀ�¦	<X­V8fÌÃ€Ö­[—””˜N‡ûWK“e+ƒ+VNdõêÕD¡_äüü|î×Âêb&$$˜Ýn)y«¯‚Ù=òYUþæÍ›×µkW¡½L™N�cL7ªÕê¨¨(³Ý9št:]rr²iShhhYYwV–š,Å[�‚¥[Añ �Èœ9s:uêTëî¯¼ò
+­^½šýuÈ�!={ö:t(»…-^}õU}žoèìö6mÚdee•••Ý¾}{äÈ‘DôüóÏsä£mûöíD9hÐ "Ú±ãÿkïî£¢ªó?€f`p”x~Ù:Ã‡BÅ¶³¦I#œ“²<Ç¢<‡ãÑMtõ+m·]i}HÌ6|È´ee�TÈ2•Š—"M±Š'‡a˜»|÷7g~ópçÞ™�ë0ï×�ã÷é~¾ß™îýpç;wÞ1?Vnn.ùùù³{Tûöíóõõ%"CòÇºDGGôÑG===gÏž�ŠŠ"¢6™Ž�ÉVUUQHHHoo/+Ñh4÷Þ{/½÷Þ{Ç)•J"ºsçÏÄ…,fDDÄÉ“'{zz„‡'äU°cU…›<yrNNŽØ^æÆŒCD[¶limmÕjµ•••III§`^¸}ûv";vl^^Þ�74ÍÅ‹ÓÒÒø«
+Ù²—••µ··÷÷÷_¼x1!!�ˆ6nÜÈ•Ø€‘< Œœ/¿ü’ˆêêêìë¾oß>"JOOç8®¯¯ÏÛÛ{ãÆ�6lP*•ýýýÇ¥§§Qqq±¡‹¨äéôéÓ†’––"7nO<†Ñº»»•J¥\.—Ëå>>>,c09V||<•””�PTTDDÓ¦M3ðÄ‰†ÿøÇ?ˆ(66VÈtNö¡‡"¢ÜÜ\öO–qÆÆÆêõzÎyÉKÅxÚ[»$ó¿
+v¬ª@MMMDôñÇ‹êeûÄ3))éÅ_,**º|ù²q­ÍÌcêÔ©DTPP`>2OÕ¬Y³ˆèÜ¹sÆ…ÍÍÍDÄþbá‰JlÀHž  FŽ^¯�‰‰1ÜG‹]	BCC9Ž{ÿý÷‰¨¦¦†mÚøàƒ8Ž%¢––CQÉ“qÆ`ØYÅ�qÃgmK–,±x,–”´··�ÐÖÖFD>>>Æ]ººº:;;‰H©T
+™ŽÀÉVTTQ```OOÏ�;wØm§ÒÒRV+ðc;žñYygg'{k—dþWÁŽUhÛ¶m���ƒƒƒ¢zYtáÂ…	&�µZ}ëÖ-‹S0/ôññ!¢¶¶6ó‘yªØÝ#–Çv yzzòG%6`›S°ÖÆY�<€{Ù¼ysHHˆF£±¯{dd$555ýáP©T�fÌ˜1k×®ýþûï‰(**Ê¸½Àº�‹¯£G�²¶IÙq™g]†;yÒëõì†Ík¯½–——ÇÍ°C(33“ˆ¶nÝÊ3qþñ–;å’ì¬äI¯×Oœ8qÍš5Â»ð¼páÂßþö·ôôtöÈòÌÌLVÅrvŸ�éïï7ž—}É«²ÆfT<Uæ¯‹Í)XìåDHž À½´µµ)•J“ÏY„{æ™gˆ¨¨¨(66699™.\¸0..Ž}¨·|ùrãö&gpvÒ7¿» ä²mÎ¸A__ŸJ¥b¿ßg±;ËWöïßo<Bqq1ÛÇvÖ&Ëq\YYùûû‡‡‡“Ñ62îÿ6Eùùù555ñÌ�gü‘Lž„¬ªçÎ�#¢ÿûßÂ»Çî˜°†……Ñÿ¿?zêÔ)ãyM›6�ˆ
+Í‡â©bŸÆ~þùçöEÅSeþºØœ‚Å^N„ä	 ÜNffæÌ™3íëË¶³<úè£D´k×.VøÆoÑ‚ˆhß¾}ÆíMÎà!!!Dtøða“==Ž'O6kÙÖfÿýû÷······—””øùùÑ°m·6YŽã†††bccYûàà`¶cÌ€mÓØ¹sgss³V«íïïolldÉ´9þH&OBVUˆ+VÄÇÇoÏï‘G9xðà�7ÛÚÚ^ýu"3f«�7o-Z´èúõëÝÝÝÿú×¿ØýTÃ¼vìØADãÆ�Û³gOkk«F£©­­e»ÂyªXÊVXXxõêÕþþ~�FÓÔÔTPP�˜˜ÈÀæ¯‹Í)XìåDHž ÀíÔÕÕÉd²ªª*;ú?£¼¡¡�^ºtÉPxåÊãö&gpöàJc›ñ
+o`R«Ñhyä23wî\öàfC—Å‹7°ïQ<“e<È
+_{í5“È»»»Õjµy¨Ž,¦Íh­uäï%dUmúá‡<==í¾jÎâº­\¹’Õ²ízÆO
+`´Zíüùó-®<OÇq«W¯¶xhÖ€'*þ€�!p
+{9’' pGiiiÓ§O7Þ3!Üøñã‰(22Ò¼püøñ&�MÎà¿üòKvvvtt´§§§q•Å½Í³?óZ�F“››¯T*}||âãã_ýuãk<ëÒÛÛ›••åïï¯R©RSS…ï8Y†ýÄï¸qãŒ·Xèõúòòò'žx",,L¡P¨Tª)S¦dgg×ÖÖÚßÚ²Ø¼¸
+yìXU›Ö­[mÇs¡¬©­­ÍÊÊb¿¤4gÎœ½{÷êt:CƒâââI“&yzzFFF¾úê«:�Îd^Z­vÛ¶mlR*•jîÜ¹†syª8Ž«®®NOO�ˆˆðôôôññ‰‹‹ËÉÉùæ›oø£âØâëbs
+Ãš<áçY ÀÕÕÕÍœ9óÄ‰ìñ’0òž{î¹’’’uëÖ±G¹­_~ù%&&fÓ¦Më×¯—:
+É ¸©Å‹766Ö××î[Àˆ¹víÚ¬Y³ÚÚÚ.]º4yòd©Ã‘ÒK/½TPPÐÒÒÂ¾b.¿m njçÎ�?üðÃ®]»¤ÄíÈd²˜˜˜¶¶¶ääd7ÏœZ[[wìØñòË/¿h  ´IDAT#sr-Hž ÀMÅÄÄ¬^½zëÖ­íííRÇâv”J¥Z­f?èáÎrssŸþy©qð± ¸¯îîîØØØyóæ¾ù0b¦N�ú÷¿ÿý…^�:É ¸µªªªäääŠŠŠÔÔT©c÷2oÞ¼ÞÞÞO?ýT.Ç§@.É ¸»¥K—ÖÕÕÕ××cß	Œ˜ÊÊÊE‹}øá‡ì�«àZ�<€»»uëV\\\ZZ{z8Àpëíí}à�fÌ˜qüøq©c{àV! ¸»ÐÐÐC‡8p@êXÀ-¬_¿¾¯¯/??_ê@ÀN¸ó @D”““SPPðÅ_Lš4IêX`4«®®NJJÚ¿ÿòåË¥Žì„ä	 €ˆh`` 11Q§Ó}öÙg>>>R‡£S__ßƒ>uêÔ)™L&u8`'|l @Däíí}ðàÁ+W®àW2`ø¬Zµª½½½¨¨™“KCò ð?qqq………o¿ý6;Ã¡  àÐ¡CåååQQQRÇQH  À]äé§Ÿ¾yófNNNHHÈ²eË¤F�†††œœœ?þñ�óæÍ“:pö< ˜ZµjUqqqMMÍœ9s¤ŽFƒÛ·o'&&FDDTWW+¸máò�< ˜Òjµjµº±±ñã�?ž8q¢Ôá€këëëûÝï~§ÕjÏŸ?ïëë+u8àØó `ÊËËë½÷Þ‹ˆˆ˜?~ss³Ôá€ÊÌÌlmm=qâ2§QÉ €~~~~øáøñã~øáï¾ûNêpÀUåääœ9sæØ±c&L�:p$O  –ùúúž:u*&&fÁ‚---&µ·oßþâ‹/$	\Çq/¼ðÂÞ½{+++ûÛßJ8’'  «|}}Ož<2þü¦¦&ãª+V,Y²¤§§GªØà.÷â‹/–––9rdÁ‚RÇN†ä	 €O@@À¹sçbccgÏžýÑG±Âüüü÷ßÿæÍ›kÖ¬‘4:¸q·aÃ†7ß|3???--MêpÀùðm;  Ût:]vvö�JKK'Ožœ��088Èª>üÔSOIÜ=ôz}vvö¾}ûöîÝ›••%u80,�< ¢×ë×®]ûÖ[o…‡‡ÿüóÏ:�Žˆd2Ù˜1c.]º-u€ =�F³téÒššš²²²””©Ã�á‚ä	 @„”””Ó§O³Ì‰ñôô|è¡‡>ùä	Éuuuýþ÷¿ÿüóÏ+**ðñÑ{ž  „ª¬¬¬ªª2Îœˆhppð³Ï>Û±c‡TQÁÝàûï¿Ÿ={ö•+W>ùädN£î< òóÏ?ÇÆÆþúë¯O›
+…¢®®nÚ´i#HîÌ™3S¦L9vìXHHˆÔáÀ°Ã�'  A²²²º»»yþà\¶lÙÀÀÀH†’Ú¼yóÂ…ÓÓÓ«««‘9¹	$O  ¶]¹r¥««‹ˆär¹§§§y�NwùòåM›6�xh ™–––ÄÄÄÝ»w———xyyIŒ|l  TÿÅ‹+++ËËËúé'//¯ÁÁAã³¨L&«¬¬Ä×¬ÜÁ‰'žþùàààòòòÉ“'KŒ($O  ¢éõúººº“'OVVV~ûí·2™lppP.—744H#—ÞÞÞœœœÂÂÂ¬¬¬¼¼<•J%uD0Ò�<€Kjmm½xñ¢ÔQýúë¯_ýõW_}õí·ßj4"š5kVNNŽÔqÁ°hmmÝ¶m[__ßÊ•+gÎœ)u8ÃkéÒ¥R‡p—Bò .©¬¬,##Cê( F3dÖ(¤  À~wíÉ½££#00Pê( ì„?NøáÛv  Î‡Ì	`Cò    ’'    �<   ˆ€ä	   @$O    " y   É   €Hž    D@ò    ’'    �<   ˆ€ä	   @$O  ÿÃqÜñãÇSSSÃÃÃ½¼¼ÆŽûÀdggúé§&ÍÊËËSRRBCC½¼¼BCC“““�=ÊqœÉ€2™L&“Ýÿý:�Î¼Ü‘–	ŸÏ &£	9œq¡R©		™={öêÕ«kkkE­¿Åùò—Ñœ9sd2Ù¬Y³x»°Bf!äm0cÆ™Löî»ïZáÝwß•Éd3fÌ0@ÈR+Š°°°ÔÔÔsçÎY† à‚Ž=êÜ3Xww·Z­¶yªìééINN¶ØfáÂ…===ÆcªŠŠŠÌËlÉ¤Í¹ðb2š�Ãñ´IKKëêêþ*˜Œl³¼¡¡Áp¬ÿüç?Ö:’ck>�oƒ={öÑc�=fq²óçÏ'¢={öØ€?H¹\~òäI‹‡°›Óÿÿe°4 à’œ~r_´hùûûoß¾ýòåË}}}sæÌ14[²d	ùùùíÚµëúõëZ­öÆ�yyyþþþD´dÉã1—·	&hµZ“rGZ:e.BÆr8ã6:�®££ãüùóëÖ­S*•Dôè£�êõzþlÎZùºuëˆÈÛÛ›ˆÖ®]k­£Ø…µ9�oƒ®®.¥R)“É®]»fØÕ«WÙ-.CZ&v©êëëüq"JHHàï(’'~X pIÎ=¹WUUÑ=÷ÜÓØØÈÓìÌ™3D¤R©êëëMªêëëU*UWW
+Ù¥...ŽˆòóóMÊ�»‹méø\Ž)öŠnìë¯¿öõõ%¢òòr#±X®ÕjCBBˆèí·ß&¢   ��‹YXóYˆz,[¶Œˆ6oÞlÒò•W^!¢eË–Ù€?È›7o‘R©äï(’'~X pIÎ=¹gffÑ_ÿúWþfìB¸eË‹µ[¶l!¢§Ÿ~ÚPÂ.uGŽ!¢ÈÈH�Fc\nÜWlKÇç"pLG’'Žãþò—¿Ñ“O>é`$Ë�?NDS§Nå8.>>Þb–æ”…5™…¨·AMMEGGÚEEEQMM�� xÚ°ä)((ˆ¿£XHžøai À%9÷äMD6oÕL˜0�¬ì­á8®¾¾žˆ~ó›ßJØ¥nhh(66–ˆÞ|óMãrã¾b[:>�c:˜<±=I‘‘‘Fb±œí:Ú½{7ÇqyyyD¤V«-vtpaMf!êm ×ëcbbˆèôéÓ†6§N�"¢˜˜ã�Å.µñÇvË—/çï(’'~X pIÎ=¹³}-wîÜq¤Y?ùøøJ—ºÃ‡Ñ½÷ÞËúò\¹¶´HÔ\,ÝZÏáø»ß¹sÇdM„DbóˆÇµ¶¶zxxx{{wttp×ÑÑáíí-—Ë¯_¿nqjÂ_›³û6øóŸÿLD†’¥K—ÑŸþô'�sço3wîÜÛ·o[[Rû yâ‡G  »ŒŒŒI“&ýøã�ùùùÎjéôzý0�\RR244´xñâ€€ "
+HKKÓëõ¥¥¥Û;²°ÎâÙgŸõðð¨¨¨èìì$¢ÎÎÎþóŸr¹|ÅŠŽËmÝº500Ðñ¡@8$O  JD×®]ãoFDÍÍÍkYyxx¸y•\.é¥—ˆ(77—Ý™°F`K‹‹š‹(<‡ãÇÂvðpæJJJˆè¹çž3feeQii©ÅØ„¿6g!ömñøã�¼óÎ;DtèÐ¡���¤¤¤ÈÈHóîB–šþøã�kÖ¬¹}ûvJJÊO?ý$jFà $O  ”˜˜HDBš±}ÊæX9kc.33sâÄ‰·nÝzë­·ø�"¼%O�6ç22X			ÎöìÙ³---D”””dxhdRRµ´´œ={Öb/»Ödv¼XbW\\lø/+qDxxx^^^JJJggç¦M›Ä±ã£>  ÉÇ£
+üüüšššxš±}¾cÇŽõ¨Ã?8@DAAAæ§_»[Ú=�c
+¹RXkóÍ7ß°/ù;vÌÁHLÊÙ÷Ý¬áùþ¿k>±oŽã´Z-»qµwï^â}ªÏâXlÓÔÔ¤P(
+…ð—[ìyâ‡¥ —4LÉØ¹sgss³V«íïïoll4y°djj*ùûûçååÝ¸qC«Õ¶¶¶îÞ½›ç!™†êtºûï¿ßâß®v·td.BÆ{E×ét���çÏŸ_¿~ý0=$ÓðäÉ«W¯š4»~ýº\.çyò¤À…µ9QoFàó<íXŸ•+WQzz:_Q�<ñÃÒ €K’êçYº»»Ù—ÃÍ©Õj‹?Ïb\b¼�Ù‘–6ƒ2ž£‹:O›ÔÔT§ÿ<ÿož,X°€Ì~óÄ¸�k>QoFø/ÉØ\j“Ž7oÞôññ‘Éduuu×ÄHžøai À%ÇÉ]¯×———?ñÄaaa
+…B¥RM™2%;;»¶¶Ö¤Ù‘#GÔjupp°B¡V«ÕGŽ1¿¿b~©¼ï¾û¬]¹…·ä¿Ä
+Ÿ‹µ£‹:œq¡——WPPPBBÂªU«.\¸`qLÖ"1.Ÿ>}:>|Øâì‘Ó§O·6 �…2áo¶jæÌ™<s²Ôæ}7nÜHÖJ; yâ'ã„}c à®RVVÆœ#u  £þÿâ‡oÛ   ˆ �:   p2™Œ§79À…àÎ   €¸ó  #÷–`ÔÀ�'    �<   ˆ€ä	   @$O    " y   É   €Hž    D@ò    ’'    �<   ˆ€ä	   @$O    " y   A!u   ö+++“:€Q¨¶¶VêîjHž À…eddH ¸ÇqRÇ    à2°ç	   @$O    " y   É   €ÿþ-¡ê=’Æ    IEND®B`‚
\ No newline at end of file
diff -Naur ns-3.18.1/src/lte/doc/source/figures/ue-meas-consumer.dia ns-3.19/src/lte/doc/source/figures/ue-meas-consumer.dia
--- ns-3.18.1/src/lte/doc/source/figures/ue-meas-consumer.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/ue-meas-consumer.dia	2013-12-20 09:44:51.000000000 -0800
@@ -0,0 +1,10 @@
+‹     í]]s£8}Ï¯p¹v·ÊM�„�èL2•îš­y˜™�Jw?§°­8ì`HN:ó°¿}%pü	ÆAˆ„äºªÝe[‘¸ sttuuõÓÏ?æáà^$iGçCdÙÃ�ˆ&ñ4ˆfçÃïßþý‘¾8ùiøŸä¿YâÏò/¢T}:ÞfÙÝ§ÓÓ‡‡+|Lý,N¬0XX©8ýŸ†þ©,t:¼86+˜ú™¯¾[~ëgYŒ™Dþ\œÇþä¯Y/¢é°(µ,7‰Ã8ÜûáùðÃMþž.«9Ýªç@ÝwþLŒáÿU]µ-_ž×¤ê;‘ìV;¿‹Ó@ÉïöŠTÔ£Þ7Ê,K¥²P4»øpé|(.iùÅº®²­l$›ûÉ,ˆöÛ‘÷&,n¶8ÆXÞêqÏfCO÷äùÍ�»m.ì¶¹¤Ûæ‚ôú.N²Ä²ý&Çq
+?*ZÍ’…hÞN:ñCÙÅ™¥aÅM�eqÍõßøazŒÅ×+´=¹³$˜îV‰ŠZ‚iv{ýÃÐí*j4Tû}�ãP”]}e­UÿØNõ»O'gïõŸkö†¢¶ÊáaÊôùÃÃlLEZÓÍ¶ËTÔt»,vZw×wË{cŠ¯vë¼‰ÐÉ²úÏëaz°|ÀKÆø“,¸ú´qOâñÅ$[û5ó£©ŸLŸãÃµ‘
+$˜žÿcoß¬]óde’÷îÖ]¼êRxDÐ®õûÜQU÷x¼[u"/Þ�f¡XWFœ!Í¡˜_Oâ$Ú×­‘×ŸóÆ¾!OœA°FÝ·"˜ÝfÕ•7¬{'S‘Ô]9²£Žçj«¡•3*>Þ¬Åô6~¸.‘�GŒIåpºîí�»?Òíþ��m°ÿ#ÛòèÈ“ogˆY6!"ßMbAÃ¢cÀàÄ1‰ÛBvñBŽg#ä¢†Ð"ù ®·GÀŠÙ—?6�µmýúœVŠ®t�øÓ`‘"Ú”±.”‰Y$ã�½NpL Æ ãþÁ˜èÂ˜�01cWÁ+0Ÿá|@ÆÔ0�›t�±ÝWq
+HnŠä.pì´0±4©«s+G¡˜qck^|‚I{�áesµ VM­×4^v[åX"q�f�¡ØmAD‹ùq®¨zê§·¡ˆf‡	µ·^¨¾ Ú|Á,:"5)á™å¨6É²%:rå›QÖÐ²	t|‹£¿À7Ó)y£+xs[ÀV�“FVm(¼	7nmZÞ o•xcÚžfÏøø&›xßä¬¶ƒñMÏ&Àà­o¼¼™ßT#ùø&ñf||Óµðx«Ä›§ïïÁÌ¸ÃÇ]{|°gÜåÓÔ ·T H;i¿„ap—Š²¸í¸o„LÂMU†$Ê�Iˆ57â¨±ÌÚöƒ9&!G,oóÅ)‡À�À¤?!jz<BÎÆx„Œ�Gˆöt<ra<zÊOüˆä· *’ôpìrM:UôÍˆ�dqÙXcÄ�Åß×ù•?ÃžòÎÁhäÕüÎ´–ŠÕ#N«—™ì½ÆK{öêV-F|Û7¶¹õ3btý¬!FÓk?Iâ‡êËÆX³êkóW_O·´KVÒŽ'ÂÜ0+aË%K^Â<4ÌJ;ö”8ÈJ˜f%ù;°°°R5+éGGI5ÏMNOT„ò™ä&ÅHÜ0#mÛR^€*€ØÖÜ¦¤€28	8	8©’“ô#°�YNb9%¡N(	ÕQª¡$¯†‘Ò»'¤rß­«¿•Ë1½“‹¬vr1ã¹X¯¯mc�}?²”¡'”iG¤¹#j4Í±B9Ã.¦gÌ¢®üäZ˜‘¦A,™º5¹.vÊT=Õ<9ÐV¹�<B¿ÊgËrÎâ$Ènçy…$ã¨ÊìGYYÓêûÁ�?ÂGy…~”ùxš³kñ§¿Šð^dÁÄßTÏ¿‚=ô—‚”oï%°½F·;dU§$aª×Ð.Tn&±m½†ü0˜EsQþ4K7|ÎÝR–~äy¹Ï/é€’9x“Xë$“œ“îÁíé—Á­DÈ²sfq1ôÖ?Ÿù~b•�ZÛQ¼…<Žñ4d�‚™ÏªTGûªC;N9†e"AœÉVP.;�c¹ù™÷Cv\þq:Ã´ÎÈ»!¡ÑW¡Á_Dh`[[‚Y¡ÁWB#Ola^hx 4@h´/40ja‰Õ¬ÐÀ¶åpê®„&EŽÓ¡ñM¤Ùà‹Ÿ
+�¦åFÞAnôUnÈqÿEäÖßåov)Å]ÉBº�Íí¹rã€Ü -D¿–Ür©�WË)*Þñx–S¾§"ùGzòg«œÙ 9LkŽ¼GÂZJo56¬9ª¨P;¸á6©:<Ë!Žë�ä„c—(/u)‘�ZLRáëgÂ««/ƒ/«§wr%ä£¼	f‹ÄWŸ��;±ê;oª$`ÆN™±%®¢-x‰Œròd÷&dÅU’£�ç²þpÕïÂO‰P�O•:T	ø©oðÓ›à'·…år„Ì®—c‹z®«šA¹š¢–c“¼YÎš&•èx½|ðõòO ¥ÖÌe§`xsçÐRÖÌ_h>ÙB ²a
+”c­‡0!Û"ØÅgÜB6gò3¶Ü^Pà*Rùw?òg…XJì$\Y…v#öÔÅöBŒÈ[H¶hôÐFd¹Eì$¶Áê¤Ò“5†_ÖTyÙÒÅ\>€¤B¾Ï…?ÇáômN]e_Á®9lb�íw7sõô7qu¬uŠWV×²‘:ÆõBª]]}QK Y,{òk´wEL¹ÖysJíÝ±[8(”%&Ä
+_?µ˜§R]ôÃÑ/þˆ§âó‰ä' ¤®(Iö”·çå”„ZÐJf)	³|F')É%r:Çóù\/¦sÀG]J$žOÞ€�úÍG¸�.n4‚åp¢%äXÌå¬?Ätyw>*OÓ—<rí]„l½Erzw!„´²e4w*³<B¼9a×²]õ‡œ¾Šhºá‡¨­î¢¶€¢úDQ©T‰v<1£‰ÕòŒóùahty†m!ÔÔ­¥–9¯%gÔ¦UÝ2«ìgÔ0q¨|À“»Ý†×c¿É|§77Û@‚¼¡æó†VáN;š£ÀCxy*ÏPwÐÛ¶¬ôw €OC—»-8�g}Ü²1Îs‡ãeœ²ÇT�ž×“–Þ,¢<˜è_'—Óéw¡$z¡ÍÁ‰Ð™AöØWÑ× fûeâõkã¸Ï°ËÂõÖÜ¨\Äî'7^‰É=x/^Â{Üø&¬úÑÅ†—ÆÎ’­Ü‚­Tê œ­X_Ø*Kü‰¤ñ"™`¬—b,Oõ `¬þ0ÖÁ¬ˆ§ïumz&Ó‘nW/ß¦|?vãÂ£Î¯Ú¶¤ô÷ƒ§SÕ�ªqý¯üø*ð(½²sé»§®Q\#»ðê.¡MŠê¢{Ç ò‡ÏÃDu G p x7 G-<ÙÙªÍÓù“fŸd5gOzuèwë
+ ¸Ü]€·àL0
+ng‰kÏ<®½\{5¸vëpí ®×ÝàZ?
+Óð6:œÓŠ\‹PÌÏpgF“º3£IÍ™Ñ¸nàVV085N�†è¯JÒŽºd�C Žb$÷iÁ9ÇglýÕ”•ŽŽýÚ¶«ìwÖ»È¯WJ€é.µ%ÂÐ¥f9[”�hwœ±cZi``�÷ÇmÄ¹b£¬�–ë^¾�ÒÀ¤“0ómÛ*RçCœ9ÈüÆøcmà�v€?¦´�?Öþhþàð×¼�ý×FÃ×øËe3^#Ð¸lÞ±­¼ ÝºùÝéf¯Þ ð†:rg‹7H7¼AêxÃÞ Þxo¼Aµãÿøˆ˜ÌvÎò#Œî8[næ–-æÜa˜5¶-+Ómj:ˆ}ØÔ-Á§›‡�Yô©úÑ2	œ·ÛË±×‹TÞ{~p‚g·;¹U·„\•ýß­H±~î\£EVüD-ÏÆ´?ôô›˜ÉédÏí*{.0Ò[ÈþFÛHPi”’0Úœ²¨…»›²ìØVRÀéãœàèÐU2Úñ‹¹¸0Ét¥e$YPõt®•ä	ä×0Ï2žc�‚ªyeª¦øú�"¹8)>È³ÄŸ_œüPøÃªì  
\ No newline at end of file
diff -Naur ns-3.18.1/src/lte/doc/source/figures/ue-meas-piecewise-a1.dia ns-3.19/src/lte/doc/source/figures/ue-meas-piecewise-a1.dia
--- ns-3.18.1/src/lte/doc/source/figures/ue-meas-piecewise-a1.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/ue-meas-piecewise-a1.dia	2013-12-20 09:44:51.000000000 -0800
@@ -0,0 +1,12 @@
+‹     í�Ý�Ú8Àß÷¯ˆè+ÍÆ_ùèv·º“î®'Uºªí=#r	JÂn¹‡ûÛÏNØ…HXŒÓ5k¤­
+3±™ùe2ž˜÷~Ì#ëž¥Y˜Ä·=`;=‹Å£dÆÓÛÞßß~ë÷>Ü]½‡ôÿ›¦tnñOÄ™xvÛ›åùâÝõõÃÃƒ­2š'©…K;c×ÿÑ(¢×\èºwweYÛ
+Æ4§âµõ«4ÏÓp¸Ì™Ó9»íéèû4M–ñ¸WJ­åFI”¤Ö=�n{o&Å£w½Vs]ÑÓ {A§l˜2úý°j‡?‚àÕ–ÖÕÎIr‘|µØ9 Gü»%³–Ê¸P<½{ó~SÒú…�®}zÐH>§é4Œwíð¹‰Ê‰€¶!ä“A?p<ì�Ç9y¾¹a·æ¢nÍ¥Ýš³Á"Ió”†ù®Éa’DŒÆ¥Õ<]²Óíd#qk–Ä(&až'-Ç?¡QvÌ Ê—Ÿ¢í¹‘;MÃqsàV$hyÇùlðCÑt•ÚWŠ´ß‡Y8ŒØ¾£ãülêWçQ_ÿv
+zo>.é¥¶ƒ§‡±Ï#Ï?=L—á˜e-nV•9 i¶»n›õºÜ±S¾T;Y&"ºbéZý¯›Ó´µþ‚×Ä±è(ïŸmÍI2ü‡�òõ`¿æ4Ótl½µ¾±yo+	éYáø¶÷—S�­úø¸6Â�éZ$O>E`ŸÔ‡¿�Cº‡Ãºê”=�§{R�mº�ÜdcLúÄFòN´™‹YhqõšÌ!r¹AE®–FäáœH$¢ïÊ“8ßgL¼nMè<ŒVü˜hœõ¬,_	7áIfùÑ�,ºgy8¢ÛÞüü#˜±p:Û{<:¶ïTÀ•3Zõ½CþgC ‘³TERCÞê8r†ø	ÏÙþ¯“ÅËùz*�´²8ÏŠûâ�êa±9Økå‹%xN'�%QÐ‡
+AäÙ>è;ä86àÆl@ â±5ÏˆTƒ¨â~—@ ðr„ÎK OaÌ¶ä¬	¥s¡>RH l„SÇE>¼!À ø}d#ø§%q<`ñ¸ÀÑÃÚó68uØüû-ê†÷]­<G)¿žfƒâRnw>7x U<8'ž:øôhš&gOYÕƒˆÅÓæÑY­óE:‰@ôÒ#ÐuÀc0àW#6Bg~ˆ?9ùa˜<�Àà±I8–@•F  ¾'ü½ÈÄ‰íc~åÇmj’Œùúå³IÅ•×*Nhrñ—œ‹ ‘îƒ@!ˆ8p  ð‹êä�0W&_>ƒ>%4R¡Â#Daò²H_[]Ò=‰H$*ÖI� Q±DâëA"`HÔ‰Š%dH¤5‰¼3�($° @ä<�h¢�<n‰:!0$ÒŸD¾<‰<õ r×�#Ü˜.=#ˆÌÅY ò.±iäÕ�(�ì•õj(Nx¢R-ìhR£6ôQMŸªÓ™n5ëÓ@ºq ¥ýjœ;›†5¬SÃ6k�P¨ê€f•LG
+I7ÍO-…È…|�(ä
+uC!ÏPHw
+I7ÎB –BÁ†B¢UH
+ù†BÝ\‘C!Ý)$Ý<,	UÖ‚�í:.|ä�k£ ùÚ�H´ëu�"bP¤;Š¤Û¨¡Ú›¡·�"äh†"sKcG(2÷4j�"éFj¤¶N�@EX ÈÓE¦XÝŠ�)Vk�"éNj¤¶X�ˆ@zD‘¯YVd*Ö¡ÈT¬µG‘|+µÚŠ5
+¶Q„¡f(2eëŽÚMÙZ{É÷R«-[cTA‘fekhÊÖ¡È”­µG‘t75V[¶ÆÞ6ŠˆfekhÊÖ¡È”­µßŠO~_â>P¾(wslGXãÿ*ß4ïæœ<hý7+Œ ;ì¼¸“ó(”îÊ%@­÷
+ý°¼K›`ÛÿÕã^í|–²l–Dcs"U¾�–pÃ¼_ûÕí­ázãˆâÞ8ìnöúÝqyúlöÿ[œ3ñ?¥úã.rÃðê „ÎÐš<µ½)w”;IˆîH@À�ê²Õ£÷JÝ´§ ïwû{}PÂgXŽ	/Ç`õýÇÍmŠLÉï&S2PÚõD“)]”È9n°jï°,2%è”™„e¦�É””v<ÑdJ %WþÛˆÒl%òTRŽ))&rD“'é„¤ÏI´:´rìÉcIeMÉÇ®X7æ§A¹uãŸ…Aë¢qe8{w�j{€F¯] ÑÏÚÞ?u1´X®‡åNHN&Õ�üùKÜgÿ—J×¢ù%ÃS+$EHŠC¢6¤ýA£ 9B ]¨KgXLTëRø	²uYØÖšÃš!´¾ßLY„Ž0=Ñç‘sŽµ*•>�à£¸ŒÖ†´_€4
+xG4rƒ#M`r„À…¢�3¬v¨í³Ü \ºÏò8¯Æm(�¤ÅA»€×ÒÇéR×]ú–ÌÿÔˆûôŸY2bË¬oiXxËž’nzòmázDéÕ àF�ïÃ›À&¾Ã}Ã&'ÚäóCÛÊSãp”Ÿøkµ›sçJc–ªš´ÂD‹w	Õ;¨ºn»æ¸AQpà à(ôKeQ?	£è(âqš‰l–<†tô}š&Ëx\73L’ˆÑ¸4”§K¦®KÜÙa³´óM¢p1˜%iøoç4jÜ„F“0ÃA(*µÊŒdËaÆÕ³Ó#T	íå·ÄÊqÏMló’K ¾Ü¼ââââŸ@|ù]6»øo¢¶¼] Ÿ›ÁÅšOA|Ø. ¾ÆÐ—›ºŸN}]nhl'p}AÙ@þCþô|¡Œ—ß¾ÚÅo£µµ÷’ñX0¡5ã‰æŒ—œ:ÃxÃxÃxÃøVÆK7’bQ� ŽRÆãuéF´‘ŠÚ^×n Ðºx#9u¯‚ñ¦Xcÿš‹5åóˆ®XzwU>áÓ”Îï®þ�3Üª  
\ No newline at end of file
diff -Naur ns-3.18.1/src/lte/doc/source/figures/ue-meas-piecewise-a1-hys.dia ns-3.19/src/lte/doc/source/figures/ue-meas-piecewise-a1-hys.dia
--- ns-3.18.1/src/lte/doc/source/figures/ue-meas-piecewise-a1-hys.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/ue-meas-piecewise-a1-hys.dia	2013-12-20 09:44:51.000000000 -0800
@@ -0,0 +1,9 @@
+‹     í�Ý�â8Àßû¯@ÌË�Ä¦ã¯|ìl÷êVÚ»Yi¥[íÎ=#r”„îaöo_;¡HBã8Ó#uKãŠMÕÏ•J¹òÃ�_Wáà‰%iGC`ÙÃ‹¦ñ,ˆÃÿ}þ÷wÞðÇÇ»fýžÿ-ºðoD©x÷0\fÙúûûûççg+Ü¦4‹+6VÊîÿ¢aHïy£ûáãÝ`pØÁŒfTÛ¥Y–“MÆ]±‡á„N¿,’xÍ†E«]»iÆÉà‰†Ãóü5¼ßus_ê§¡ï5]°IÂè—ú®mþòýKº^³¤Úíj§o’m×GMjúÿÚìZ¥¼Q´xüð/ü¡8¥Ý�}_§N´VH¶¢É"ˆŽåð¹	‹‰€–!ä“A|Ï·]ì‚—9y»¸I¿âÂ~Å%ýŠÒñ:N²„Ù±ÈI‡ŒF…Ô,Ù°Ëå¤Srk–Ä(æA–Å-ç?§azÎ ŠÃ¯ÖöVË]$Á¬ÙpK-jzyfÙrüUÑt½oõþ¤Á$d§Î>ˆ²ÎºßvÓ}õ×Éé½ÿº¤6½Õ.3�FÞ¾<,6ÁŒ¥-jVnSÓÓr×ì¾mÖ«íÎ�˜âPe±ÎE„tË’]÷?í—éÁîÞg@§Yðôòî`NâÉÿÙ4Ûö�ŒF3šÌß>³¯ÙðÀ	‚ÙÃð¿vy¶ªãã½qM×:~Õ)G¨:ücxÔõ=™T»NøÙÓh²×î¡å@’�Y“²�‹\r™ÌLÌB‹ªWÚÔ‘;÷Jí*nD¬X�#Ñ`}u(�£ì”0q|0§« Üòs¢Q:¤ÙV¨	w2‹¯~báË‚)=Ôæ·ŸÁ’‹åÉsØãÑ¶<»ôŽœÐ²îÕéŸ!€DNRI~«mË	âþ"Z±Ó?'‹6«ÝTž)å$pÞfOù)UÍb*°ÅÖŠƒx.'�%‘?‚
+AäZÛä#°-À…Y€@0Ä=âÁ*5 R¢’ú]�Àû!ê–@¿; �½#”ö…”ºBØò‰p†�?` <á9À»Lè4Ž¢1‹fù ÎÖ‰�Á¥Ãæ¿ït]|êjå-�òëi6Î/åŽçs�PÆƒ}áÒÁ§oL“$~nX=e»‡,Z4�†ÈŠh�/Ò‹¢÷n�Žãnƒ>¿±²9óCüÆÈOÃX`­c€ç:áXÞ !Tj�€x®Ð÷Ü'–‡ù•—©‰3þû¿ÿf\qå1�’_ü=ûâ5 "² Â#à+ ^�ü(Äå�É÷Ï _ãç4R¡\#D`òºHo-.ét@"Ò‰° $"‚Dž$†D=�ˆ!C"­Iäv@" �DÀò� ‘ý
+" 	ˆ>q»5$ê…DÀ�Hyò$rÕƒÈÙ%ŽpaºäŒä 2g=€È½Æ¤‘›‘/"8*ãÕP,x"R-äh£6ôQMŸ²Ò™l5ãÓ@:q ¥ùjœ;û„5¬SÂ6	k½P¨¬€æ.™Ž’Nš®Z
+‘
+y:QÈ1ê‡B®¡�î’Nœ…@-…ü=…Dª�>ò…ú¹"†BºSH:yX$ªŒ!Ë±øÂ!ÇB>ò´!‘H×5(êEÄ HwI§QCµ›¡{ˆ"dk†"³¥±'™=�Ú£H:‘©�S#PB(rõA‘	V÷ƒ"d‚ÕÚ£H:“©V#"P„^Päiæ™ˆuO(2kíQ$ŸJ­6b�üCa¨ŠLØº§4F¶ÖEò¹ÔjÃÖ•P¤YØš°uO(2akíQ$�M�Õ†­±{ˆ"¢YØš°uO(2akÝQåësL(-LŒÄŽŽ|£+q, Ìåi²Ý5[&,]ÆáÌ°Hy)"¡†W¸åõæÊCÐA¥t¥ÛïEÿ6W5A$bAìå»­]-j-·iÆ8”‚ôî\÷˜8úOC§Š§s•ñ�´§ì‚ND1�p…NDC:…Œ>8õ'là¤œêêªwPÖ¸ª+«'/ë-[Hãÿ•×t>Óiõwoµªs.,Ç]½òâ~”·ƒ’È¾jÝõöªë÷¡¹~‹âúFo¿¹ÞJ'~ Tq‰]TÓ/tåôêA}A‹þ‚‹#‡ú+pšÑ$STPÿ ou%õ…HÕ7ÏèƒTN¤Rëß¡
+À«Ü^XÚ¾s»^¢�•�UÏH�®üc
+‰ÒÇ:Ø�d„wµ/�m!‚ÜÑ¥æÏ»è¿‰¯©`!¹Æ˜àæbÿ^åW€Úú+.ö¸»xX
+„$ xš&�L)‚þ†I}ÔaWøÔ”Ûƒ’ßA5¢¸÷”^%Q�Å8JJ5šh<¥+€²»Ø�ÔnA.yJÈ3ž’�R­&Oé
+ :ØuCïºÁzõ”HRòŒ§d tJ�§¤”~‹ÃmÍ}9åCÝ*³¶DâÀ(OÚâ¡\ÒÖšÏÂ¸õf\i8'ëé·}@c·½A£Z?¿ôfa~_¯j–G&9Ÿ—MòÛß9ìÐPaV¥iŒü¢á%’Ü"|ÅQÑé�É6�´7ð¯T¡p!2¥Ï8Ç¯„En/„…-©…üófuó[?o&,Bg4 �Ü3_j3¤ƒŽR#çÂØïÂ•�nÐhVœÑ Q©19£A£aa¿½�vÁX¼bü[S®Õ¿¤ñ”…,|N‚\_NÅ¤Sá8³²‰Úep)Èó p5ˆgsðZäB©|Šh[,`L³SˆB¶âÐL"–(›·\F‹†‰®�.÷«}[åíÅR öm  %W³�²ål„áY"ÄëÂ¾eü<žÐé—Eo¢YUÌ$ŽCF£BP–l˜º}ö=¥•oëñ2N‚?ã(£aãàæ4L™„CS&$ÝLRÞ=»ÜB•_:ŸÐS|¯Ä{ÿpïÚÚÚÚ÷L{éTM~yÉ¯¤<¥¼ç2ràs18ýäÀç×± ž¾Ì—œºoN}]¶¿¶¸zçÎ@þ†!ù¾SÆËg¾ÚêÏe0‚+a¼äÔÆÆÆßãÏ»ù„í2õ”Ö‚Ù§Ä[®Ìy·žÊã9ùys�#{dn…J{X>ƒT}—£ˆø*ÂˆX}±ësM`Ñ�?rí�Åöª9X¾â«­¶jG¼(«Ê*öQÝËn«˜o¸¼—ŠútÅû�nYòxW¼á‹„®ïþ§3‹»ûÂ  
\ No newline at end of file
diff -Naur ns-3.18.1/src/lte/doc/source/figures/ue-meas-piecewise-motion.dia ns-3.19/src/lte/doc/source/figures/ue-meas-piecewise-motion.dia
--- ns-3.18.1/src/lte/doc/source/figures/ue-meas-piecewise-motion.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/doc/source/figures/ue-meas-piecewise-motion.dia	2013-12-20 09:44:51.000000000 -0800
@@ -0,0 +1,17 @@
+‹     í�[s£6Çßó)ç•ÅèÆe½ÉNû°Ó‡NÛ™nûê‘�âÐÅàrñK?{Å%`0Ž±hË3ÉŒA>Éúÿ$Ä—¯Ïë@{dqâGáÍæDcá2òüpu3ùëû·OÎäëíÕÏ§Ÿùß*¦k�"L²w7“û4Ý|žNŸžžŒ`›Ð4Š�À06ý—�òBÓÉí•¦Ux4¥Ù±ò(MÓØ_<¤LéšÝLtùcG¡7)J•å–QÅÚ#n&×wùk2-ÍLkvØÞÐ[ÄŒþè6mò—ëžbzÃâ¦Ùõ&J|^$ÝnöŠtØÉþWÊ”¥^(\Ý^ÿ„¯‹K*¼Új»ÐN'éšÆ+?Ü÷ÃÛ&(„�7q×´±^ÚäíîãºÆu�ëÎOæ›(Ncê§û.Q0^Óø��î'YÒ€w±CÕP‹;?M£žë¿£ArLŠÃ;µ½U¹«Ø÷·V¢ÃÊ“ï¥÷ógAÍUXß
+²þè'þ"`mWï‡éÙÌoÏc¾ùíäô~ýøÀÞPXë<‡FÞ><¬|�%=Ý¬^¦ÃÒ}YlÚ×êÍrÇ6Lq¨1Xç.ºeqiþç×aZ+¿à’8]¦þãË»J›D‹Ø2-+ûgJC�ÆžöIûÕù§v“>ñ½›Éïf½µšõãÖ8÷škíúÑQ³öûìè2½X4-Çüâi¸
+Xa.Ñ¡a!Î0  ŽŽdç4§Ë(ç,ôò
+]­–ÓàÔj‡ëå¦é¸M¡o1ÊÇ6Ïñµßž/è2`Ö_ð4g¼ùæ4Ž£§¦/ÆëVÅCMÏ®×†uÑÛ^}Šƒ…àNW xï
+´,pºdF„LWn.ÄÿY�ü2”;” ÷ø�=§‚R€p¨ ±N
+Ð4�ãè\‰Ð‚dÆÝÈFö‰NÓ¬zf{�2]‹—|y\+×XIÿÍâ­ö£qÇ‚úÀ,´kI…i›Çì¸vG×~°åFÃd¢%é6›.qÎý…�,õ—´Š•·_Á=óW÷­×PíºN]èÀæ´Þ;:¡!€d˜£úÌü@øÆ4‡9âëÞU¸fíßfe&q¤—Öy÷Û„ñ˜_Ò�IÍ(4BÃiä
+¤4°­;;¹²�HAh¹
+B Bx8„€ÈE	2LÄ¤˜‘Í2w‰œ÷¢oŠCcpˆ÷"¤8$5‡È8dä0°é`îÄÊgD‡ì|F$ÉÒLÁhÙù¬HÁHjYÃµÐ:)²0_‹eáYl’™e ’Í‘ i %X¢y~Â«³dŠH¢‰TïˆFàýÀ�#{0Œ ÐŸ�¸yXF‰20&:’%T”úkÅ ñâýï#ÆŠÌK›9CIäêP ˆlÃ:ÈgD€Ï„¸3I¦CÐ4µu¢@$Dµî§æBÎ…Ü¡H(‚ ¨0ËÄ ¬4
+ƒêPAHB�Á™´ÀK!R¡�#…,E¡q(d+
+ÉN¡ÁÙÄˆ¥�ûJ!e¢�£(4
+…êPQHF
+N©Î~·™ÅˆË´à‡,¹È‘†DÙ]
+Ec ˆ(ÉŽ¢ÁùÔPl|ÚU!S2©(õH(RajéQ48«‰�S#PCÎPdËƒ"¬EH«¥GÑàÄj$6X�H†"ô‚"G²Y‘ŠX�„"±–EƒÓª±Øˆ5r«(ÂP2©°õHwy¨°µô(œT�Å†­1ª¡H²°5Taë‘P¤ÂÖÒ£hpV5¶ÆvED²°5Taë‘P¤ÂÖÒ è�(ØvíQè¿÷•ˆÞ&4û7 Ü£Ð°Gá†·Äüˆ
+É¡
+è=êÞj³Á÷¿Ùà5Áá©Â@ð¾f!(Çqà,ÛZ§””ID
+ªQ«Ö4ùÞDIê%Îp�È
+À×!ÊmˆªWª5ã»ï¼£.SPð·³ˆ£¬ÊÁXc”Ý3AÐ_@�Q))t†{3DŽQÐÜ�Q°ÜêÝ>DÁže$½ç]%§K”>ÃMB·JÎ£N.'·ž�x=Õ*ÕšHÚwþÔ­[• ä9Cª¼Ðma&&=_JÍmÕ¨VkFdµŽºHQYgHúºŽB°U¾�BöH)ÔËCöÔHu‘¢²Ï�¾,vƒz«˜ûåšÂ`7û¬)»gÂ ¿€ZM]¤¤œ3¤áŠ\MáêORxž+¨z�Z3­úÎ«Xß¥=ÐºgH#š-ñš.�3éädý4GÜÆÃî©U–èqŽÍþU¼Ïø{{U{"ðíÕWhå5€  
\ No newline at end of file
diff -Naur ns-3.18.1/src/lte/doc/source/lte-design.rst ns-3.19/src/lte/doc/source/lte-design.rst
--- ns-3.18.1/src/lte/doc/source/lte-design.rst	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/doc/source/lte-design.rst	2013-12-20 09:44:51.000000000 -0800
@@ -1,14 +1,14 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
-
-++++++++++++++++++++++++++
- Design Documentation
-++++++++++++++++++++++++++
+++++++++++++++++++++
+Design Documentation
+++++++++++++++++++++
 
 
----------
+--------
 Overview
----------
+--------
 
 
 An overview of the  LTE-EPC simulation model is depicted in
@@ -34,9 +34,9 @@
 
 .. _sec-design-criteria:
 
------------------------
+---------------
 Design Criteria
------------------------
+---------------
 
 
 LTE Model
@@ -61,7 +61,7 @@
     The reason is that, since packet scheduling is done on
     a per-RB basis, an eNB might transmit on a subset only of all the available
     RBs, hence interfering with other eNBs only on those RBs where it is
-    trasmitting.
+    transmitting.
     Note that this requirement rules out the adoption of a system level simulation
     approach, which evaluates resource allocation only at the granularity of
     call/bearer establishment.
@@ -114,11 +114,10 @@
 The main objective of the EPC model is to provides means for the
 simulation of end-to-end IP connectivity over the LTE model. 
 To this aim, it supports for the
-interconnection of multiple UEs to the internet, via a radio access
+interconnection of multiple UEs to the Internet, via a radio access
 network of multiple eNBs connected to a single SGW/PGW node, as shown
 in Figure :ref:`fig-epc-topology`.
 
-
 The following design choices have been made for the EPC model:
 
  #. The only Packet Data Network (PDN) type supported is IPv4.
@@ -157,18 +156,18 @@
 
 
 
-.. _overall-architecture:
+.. _sec-overall-architecture:
 
------------------------
+------------
 Architecture
------------------------
+------------
 
 
 
 
 
-LTE Model 
-++++++++++
+LTE Model
++++++++++
 
 
 
@@ -391,6 +390,8 @@
 on the actual models used in each case. 
 
 
+.. _sec-fading-model:
+
 Fading Model
 ++++++++++++
 
@@ -439,12 +440,12 @@
 Antennas
 ++++++++
 
-Being based on the SpectrumPhy, the LTE PHY model supports antenna
-modeling via the ns-3 AntennaModel class. Hence, any model based on
+Being based on the ``SpectrumPhy``, the LTE PHY model supports antenna
+modeling via the ns-3 ``AntennaModel`` class. Hence, any model based on
 this class can be associated with any eNB or UE instance. For
-instance, the use of the CosineAntennaModel associated with an eNB
+instance, the use of the ``CosineAntennaModel`` associated with an eNB
 device allows to model one sector of a macro base station. By default,
-the IsotropicAntennaModel is used for both eNBs and UEs. 
+the ``IsotropicAntennaModel`` is used for both eNBs and UEs. 
 
 
 
@@ -455,9 +456,9 @@
         \clearpage
 
 
-----
+---
 PHY
-----
+---
 
 
 Overview
@@ -476,9 +477,10 @@
 .. _fig-lte-subframe-structure:
 
 .. figure:: figures/lte-subframe-structure.*
-   :width: 50px
+   :align: center
+   :width: 300px
 
-   Lte subframe division.
+   LTE subframe division.
 
 
 Considering the granularity of the simulator based on RB, the control and the reference signaling have to be consequently modeled considering this constraint.  According to the standard [TS36211]_, the downlink control frame starts at the beginning of each subframe and lasts up to three symbols across the whole system bandwidth, where the actual duration is provided by the Physical Control Format Indicator Channel (PCFICH). The information on the allocation are then mapped in the remaining resource up to the duration defined by the PCFICH, in the so called Physical Downlink Control Channel (PDCCH). A PDCCH transports a single message called Downlink Control Information (DCI) coming from the MAC layer, where the scheduler indicates the resource allocation for a specific user.
@@ -725,7 +727,7 @@
 Therefore the PHY layer implements the MIMO model as the gain perceived by the receiver when using a MIMO scheme respect to the one obtained using SISO one. We note that, these gains referred to a case where there is no correlation between the antennas in MIMO scheme; therefore do not model degradation due to paths correlation.
 
 
-.. _phy-ue-measurements:
+.. _sec-phy-ue-measurements:
 
 UE PHY Measurements Model
 +++++++++++++++++++++++++
@@ -776,9 +778,9 @@
 
 
 
-----------
-HARQ 
-----------
+----
+HARQ
+----
 
 The HARQ scheme implemented is based on a incremental redundancy (IR) solutions combined with multiple stop-and-wait processes for enabling a continuous data flow. In detail, the solution adopted is the *soft combining hybrid IR Full incremental redundancy* (also called IR Type II), which implies that the retransmissions contain only new information respect to the previous ones. The resource allocation algorithm of the HARQ has been implemented within the respective scheduler classes (i.e., ``RrFfMacScheduler`` and ``PfFfMacScheduler``, refer to their correspondent sections for more info), while the decodification part of the HARQ has been implemented in the ``LteSpectrumPhy`` and ``LteHarqPhy`` classes which will be detailed in this section.
 
@@ -821,9 +823,9 @@
    Interaction between HARQ and LTE protocol stack
 
 
-------
-MAC 
-------
+---
+MAC
+---
   
 
 Resource Allocation Model
@@ -832,7 +834,7 @@
 
 We now briefly describe how resource allocation is handled in LTE,
 clarifying how it is modeled in the simulator. The scheduler is in
-charge of generating specific structures calles Data Control Indication (DCI)
+charge of generating specific structures called *Data Control Indication* (DCI)
 which are then transmitted by the PHY of the eNB to the connected UEs, in order
 to inform them of the resource allocation on a per subframe basis. In doing this
 in the downlink direction, the scheduler has to fill some specific fields of the
@@ -914,6 +916,7 @@
 MAC headers specified by 3GPP. 
 
 
+.. _sec-ff-mac-scheduler:
 
 The FemtoForum MAC Scheduler Interface
 ++++++++++++++++++++++++++++++++++++++
@@ -1003,7 +1006,7 @@
 
 For what concern the HARQ, RR implements the non adaptive version, which implies that in allocating the retransmission attempts RR uses the same allocation configuration of the original block, which means maintaining the same RBGs and MCS. UEs that are allocated for HARQ retransmissions are not considered for the transmission of new data in case they have a transmission opportunity available in the same TTI. Finally, HARQ can be disabled with ns3 attribute system for maintaining backward compatibility with old test cases and code, in detail::
 
-  Config::SetDefault ("ns3::RrFfMacScheduler::HarqEnabled", BooleanValue (false));
+   Config::SetDefault ("ns3::RrFfMacScheduler::HarqEnabled", BooleanValue (false));
 
 The scheduler implements the filtering of the uplink CQIs according to their nature with ``UlCqiFilter`` attibute, in detail:
 
@@ -1081,11 +1084,14 @@
    \right)}{\tau}
    
 
-For what concern the HARQ, PF implements the non adaptive version, which implies that in allocating the retransmission attempts the scheduler uses the same allocation configuration of the original block, which means maintaining the same RBGs and MCS. UEs that are allocated for HARQ retransmissions are not considered for the transmission of new data in case they have a transmission opportunity available in the same TTI. Finally, HARQ can be disabled with ns3 attribute system for maintaining backward compatibility with old test cases and code, in detail.
+For what concern the HARQ, PF implements the non adaptive version, which implies that in allocating the retransmission attempts the scheduler uses the same allocation configuration of the original block, which means maintaining the same RBGs and MCS. UEs that are allocated for HARQ retransmissions are not considered for the transmission of new data in case they have a transmission opportunity available in the same TTI. Finally, HARQ can be disabled with ns3 attribute system for maintaining backward compatibility with old test cases and code, in detail::
+
+   Config::SetDefault ("ns3::PfFfMacScheduler::HarqEnabled", BooleanValue (false));
+
 
 
 Maximum Throughput (MT) Scheduler
-----------------------------------
+---------------------------------
 
 The Maximum Throughput (MT) scheduler [FCapo2012]_ aims to maximize the overall throughput of eNB.
 It allocates each RB to the user that can achieve the maximum achievable rate in the current TTI.
@@ -1122,7 +1128,7 @@
 
 
 Throughput to Average (TTA) Scheduler
---------------------------------------
+-------------------------------------
 
 The Throughput to Average (TTA) scheduler [FCapo2012]_ can be considered as an intermediate between MT and PF. 
 The metric used in TTA is calculated as follows:
@@ -1255,6 +1261,8 @@
 metric (:math:`Msch`, :math:`MCoI`) by weight :math:`W[n]`. This strategy will guarantee the throughput of lower
 quality UE tend towards the TBR. 
 
+::
+
   Config::SetDefault ("ns3::PfFfMacScheduler::HarqEnabled", BooleanValue (false));
 
 The scheduler implements the filtering of the uplink CQIs according to their nature with ``UlCqiFilter`` attibute, in detail:
@@ -1264,6 +1272,8 @@
   - ``ALL_UL_CQI``: all CQIs are stored in the same internal attibute (i.e., the last CQI received is stored independently from its nature).
 
 
+.. _sec-random-access:
+
 Random Access
 +++++++++++++
 
@@ -1347,9 +1357,9 @@
         \clearpage
 
 
-----
-RLC 
-----
+---
+RLC
+---
 
 
 
@@ -1441,7 +1451,7 @@
           in the receiver peer
 
 
-.. _am_data_transfer:
+.. _sec-am_data_transfer:
 
 AM RLC
 ++++++
@@ -1667,7 +1677,7 @@
 retransmission are not performed, and there are no STATUS PDUs.
 
 Transmit operations in uplink
-------------------------------
+-----------------------------
 
 The transmit operations in the uplink are similar to those of the
 downlink, with the main difference that the Report_Buffer_Status is
@@ -1857,11 +1867,13 @@
 
  - generation (at the eNB) and interpretation (at the UE) of System
    Information (in particular the Master Information Block and, at the
-   time of this writing, only System Information Block Type 2)
+   time of this writing, only System Information Block Type 1 and 2)
+ - initial cell selection
  - RRC connection establishment procedure
  - RRC reconfiguration procedure, supporting the following use cases:
    + reconfiguration of the SRS configuration index
    + reconfiguration of the PHY TX mode (MIMO)
+   + reconfiguration of UE measurements
    + data radio bearer setup
    + handover
  - RRC connection re-establishment, supporting the following use
@@ -1901,6 +1913,7 @@
 .. _fig-lte-ue-rrc-states:
 
 .. figure:: figures/lte-ue-rrc-states.*
+   :scale: 70 %
    :align: center
 
    UE RRC State Machine
@@ -1938,11 +1951,173 @@
 .. _fig-lte-enb-rrc-states:
 
 .. figure:: figures/lte-enb-rrc-states.*
+   :scale: 70 %
    :align: center
 
    ENB RRC State Machine for each UE
 
 
+.. _sec-initial-cell-selection:
+
+Initial Cell Selection
+++++++++++++++++++++++
+
+Initial cell selection is an IDLE mode procedure, performed by UE when it has
+not yet camped or attached to an eNodeB. The objective of the procedure is to
+find a suitable cell and attach to it to gain access to the cellular network.
+
+It is typically done at the beginning of simulation, as depicted in Figure
+:ref:`fig-lte-cell-selection-timeline` below. The time diagram on the left side
+is illustrating the case where initial cell selection succeed on first try,
+while the diagram on the right side is for the case where it fails on the first
+try and succeed on the second try. The timing assumes the use of real RRC
+protocol model (see :ref:`sec-rrc-protocol-models`) and no transmission error.
+
+.. _fig-lte-cell-selection-timeline:
+
+.. figure:: figures/lte-cell-selection-timeline.*
+   :scale: 80 %
+   :align: center
+
+   Sample runs of initial cell selection in UE and timing of related events
+
+The functionality is based on 3GPP IDLE mode specifications, such as in
+[TS36300]_, [TS36304]_, and [TS36331]_. However, a proper implementation of IDLE
+mode is still missing in the simulator, so we reserve several simplifying
+assumptions:
+
+ - multiple carrier frequency is not supported;
+ 
+ - multiple Public Land Mobile Network (PLMN) identities (i.e. multiple network
+   operators) is not supported;
+ 
+ - RSRQ measurements are not utilized;
+ 
+ - stored information cell selection is not supported;
+
+ - "Any Cell Selection" state and camping to an acceptable cell is not
+   supported;
+ 
+ - marking a cell as barred or reserved is not supported;
+
+ - cell reselection is not supported, hence it is not possible for UE to camp to
+   a different cell after the initial camp has been placed; and
+ 
+ - UE's Closed Subscriber Group (CSG) white list contains only one CSG identity.
+   
+Also note that initial cell selection is only available for EPC-enabled
+simulations. LTE-only simulations must use the manual attachment method. See
+section :ref:`sec-network-attachment` of the User Documentation for more
+information on their differences in usage.
+
+The next subsections cover different parts of initial cell selection, namely
+*cell search*, *broadcast of system information*, and *cell selection evaluation*.
+
+.. _sec-cell-search:
+
+Cell Search
+-----------
+
+Cell search aims to detect surrounding cells and measure the strength of
+received signal from each of these cells. One of these cells will become the
+UE's entry point to join the cellular network.
+
+The measurements are based on the RSRP of the received PSS, averaged by Layer 1
+filtering, and performed by the PHY layer, as previously described in more
+detail in section :ref:`sec-phy-ue-measurements`. PSS is transmitted by eNodeB
+over the central 72 sub-carriers of the DL channel (Section 5.1.7.3 [TS36300]_),
+hence we model cell search to operate using a DL bandwidth of 6 RBs. Note that
+measurements of RSRQ are not available at this point of time in simulation. As
+a consequence, the ``LteUePhy::RsrqUeMeasThreshold`` attribute does not apply
+during cell search.
+
+By using the measured RSRP, the PHY entity is able to generate a list of
+detected cells, each with its corresponding cell ID and averaged RSRP. This list
+is periodically pushed via CPHY SAP to the RRC entity as a measurement report.
+
+The RRC entity inspects the report and simply choose the cell with the strongest
+RSRP, as also indicated in Section 5.2.3.1 of [TS36304]_. Then it instructs back
+the PHY entity to synchronize to this particular cell. The actual operating
+bandwidth of the cell is still unknown at this time, so the PHY entity listens
+only to the minimum bandwidth of 6 RBs. Nevertheless, the PHY entity will be
+able to receive system broadcast message from this particular eNodeB, which is
+the topic of the next subsection.
+
+Broadcast of System Information
+-------------------------------
+
+System information blocks are broadcasted by eNodeB to UEs at predefined time
+intervals, adapted from Section 5.2.1.2 of [TS36331]_. The supported system
+information blocks are:
+
+ - Master Information Block (MIB)
+      Contains parameters related to the PHY layer, generated during cell
+      configuration and broadcasted every 10 ms at the beginning of radio frame
+      as a control message.
+
+ - System Information Block Type 1 (SIB1)
+      Contains information regarding network access, broadcasted every 20 ms at
+      the middle of radio frame as a control message. Not used in manual
+      attachment method. UE must have decoded MIB before it can receive SIB1.
+      
+ - System Information Block Type 2 (SIB2)
+      Contains UL- and RACH-related settings, scheduled to transmit via RRC
+      protocol at 16 ms after cell configuration, and then repeats every 80 ms
+      (configurable through `LteEnbRrc::SystemInformationPeriodicity` attribute.
+      UE must be camped to a cell in order to be able to receive its SIB2.
+
+Reception of system information is fundamental for UE to advance in its
+lifecycle. MIB enables the UE to increase the initial DL bandwidth of 6 RBs to
+the actual operating bandwidth of the network. SIB1 provides information
+necessary for cell selection evaluation (explained in the next section). And
+finally SIB2 is required before the UE is allowed to switch to CONNECTED state.
+
+Cell Selection Evaluation
+-------------------------
+
+UE RRC reviews the measurement report produced in :ref:`sec-cell-search` and the
+cell access information provided by SIB1. Once both information is available for
+a specific cell, the UE triggers the evaluation process. The purpose of this
+process is to determine whether the cell is a suitable cell to camp to.
+
+The evaluation process is a slightly simplified version of Section 5.2.3.2 of
+[TS36304]_. It consists of the following criteria:
+
+ - Rx level criterion; and
+ 
+ - closed subscriber group (CSG) criterion.
+ 
+The first criterion, Rx level, is based on the cell's measured RSRP
+:math:`Q_{rxlevmeas}`, which has to be higher than a required minimum
+:math:`Q_{rxlevmin}` in order to pass the criterion:
+
+.. math::
+
+   Q_{rxlevmeas} - Q_{rxlevmin} > 0 
+
+where :math:`Q_{rxlevmin}` is determined by each eNodeB and is obtainable by UE
+from SIB1.
+
+The last criterion, CSG, is a combination of a true-or-false parameter called
+*CSG indication* and a simple number *CSG identity*. The basic rule is that UE
+shall not camp to eNodeB with a different CSG identity. But this rule is only
+enforced when CSG indication is valued as true. More details are provided in
+Section :ref:`sec-network-attachment` of the User Documentation.
+
+When the cell passes all the above criteria, the cell is deemed as *suitable*.
+Then UE camps to it (`IDLE_CAMPED_NORMALLY` state).
+
+After this, upper layer may request UE to enter CONNECTED mode. Please refer to
+section :ref:`sec-rrc-connection-establishment` for details on this.
+
+On the other hand, when the cell does not pass the CSG criterion, then the cell
+is labeled as *acceptable* (Section 10.1.1.1 [TS36300]_). In this case, the RRC
+entity will tell the PHY entity to synchronize to the second strongest cell and
+repeat the initial cell selection procedure using that cell. As long as no
+suitable cell is found, the UE will repeat these steps while avoiding cells that
+have been identified as acceptable.
+
+   
 
 Radio Admission Control
 +++++++++++++++++++++++
@@ -1990,109 +2165,493 @@
 based on UE measurements are planned only at a later stage).
 
 
-UE Measurements
-+++++++++++++++
+.. _sec-ue-measurements:
 
+UE RRC Measurements Model
++++++++++++++++++++++++++
 
 UE RRC measurements support
 ---------------------------
 
-The UE RRC entity provides support for UE measurements; in
-particular, it implements the procedures described in Section 5.5 of
-[TS36331]_, with the following simplifying assumptions:
+The UE RRC entity provides support for UE measurements; in particular, it
+implements the procedures described in Section 5.5 of [TS36331]_, with the
+following simplifying assumptions:
 
- - only E-UTRA intra-frequency measurements are supported;
+ - only E-UTRA intra-frequency measurements are supported, which implies:
+   
+   - only one measurement object is used during the simulation;
+   - measurement gaps are not needed to perform the measurements;
+   - Event B1 and B2 are not implemented;
+   
+ - only `reportStrongestCells` purpose is supported, while `reportCGI` and
+   `reportStrongestCellsForSON` purposes are not supported;
 
- - measurement gaps are not needed to perform the measurements;
+ - `s-Measure` is not supported;
+ 
+ - since carrier aggregation is not supported in by the LTE module, the
+   following assumptions in UE measurements hold true:
+   
+   - no notion of secondary cell (`SCell`);
+   - primary cell (`PCell`) simply means serving cell;
+   - Event A6 is not implemented;
+   
+ - speed dependant scaling of time-to-trigger (Section 5.5.6.2 of [TS36331]_) is
+   not supported.
 
- - only event-driven measurements are supported; the other type of
-   measurements are not supported;
+Overall design
+--------------
 
- - only the events A2 and A4 are to be supported; 
+The model is based on the concept of *UE measurements consumer*, which is an
+entity that may request an eNodeB RRC entity to provide UE measurement reports.
+Consumers are, for example, :ref:`sec-handover-algorithm`, which compute
+handover decision based on UE measurement reports. Test cases and user's
+programs may also become consumers. Figure :ref:`fig-ue-meas-consumer` depicts
+the relationship between these entities.
 
- - time-to-trigger is not supported, i.e., a time-to-trigger value
-   equal to zero is always assumed;
+.. _fig-ue-meas-consumer:
+   
+.. figure:: figures/ue-meas-consumer.*
+   :scale: 80 %
+   :align: center
 
- - layer 3 filtering assumes that the periodicity of the measurements
-   reported by the PHY is equal to 200ms;
+   Relationship between UE measurements and its consumers
 
- - in measurement reports, the reportQuantity is always assumed to be
-   "both", i.e., both RSRP and RSRQ are always reported, regardless of
-   the trigger quantity.
+The whole UE measurements function at the RRC level is divided into 4 major
+parts:
 
+ #. Measurement configuration (handled by ``LteUeRrc::ApplyMeasConfig``)
+ 
+ #. Performing measurements (handled by ``LteUeRrc::DoReportUeMeasurements``)
+ 
+ #. Measurement report triggering (handled by
+    ``LteUeRrc::MeasurementReportTriggering``)
+   
+ #. Measurement reporting (handled by ``LteUeRrc::SendMeasurementReport``)
 
-eNB RRC measurement configuration
----------------------------------
+The following sections will describe each of the parts above.
 
-The eNB RRC entity configures the UE measurements. The eNB RRC entity
-sends the configuration parameters to the UE RRC entity in the
-MeasConfig IE of the RRC Connection Reconfiguration message when the UE
-attaches to the eNB or the RRC Handover Request message when the target
-eNB initiates the handover procedure.
+Measurement configuration
+-------------------------
 
-The eNB RRC entity implements the configuration parameters and procedures
-described in Section 5.5 of [TS36331]_, with the following simplifying
-assumptions:
+An eNodeB RRC entity configures UE measurements by sending the configuration
+parameters to the UE RRC entity. This set of parameters are defined within the
+``MeasConfig`` Information Element (IE) of the RRC Connection Reconfiguration
+message (:ref:`sec-rrc-connection-reconfiguration`).
 
- - only E-UTRA intra-frequency measurements are configured, so only the
-   downlink carrier frequency of the serving cell is configured as
-   measurement object;
+The eNodeB RRC entity implements the configuration parameters and procedures
+described in Section 5.5.2 of [TS36331]_, with the following simplifying
+assumption:
 
- - only the events A2 and A4 are configured;
+ - configuration (i.e. addition, modification, and removal) can only be done
+   before the simulation begins;
+   
+ - all UEs attached to the eNodeB will be configured the same way, i.e. there is
+   no support for configuring specific measurement for specific UE; and
+   
+ - it is assumed that there is a one-to-one mapping between the PCI and the
+   E-UTRAN Global Cell Identifier (EGCI). This is consistent with the PCI
+   modeling assumptions described in :ref:`sec-phy-ue-measurements`.
+
+The eNodeB RRC instance here acts as an intermediary between the consumers and
+the attached UEs. At the beginning of simulation, each consumer provides the
+eNodeB RRC instance with the UE measurements configuration that it requires.
+After that, the eNodeB RRC distributes the configuration to attached UEs.
+
+Users may customize the measurement configuration using several methods. Please
+refer to Section :ref:`sec-configure-ue-measurements` of the User Documentation
+for the description of these methods.
 
- - only the RSRQ threshold is configured for both events;
+.. _sec-performing-measurements:
 
- - the reportInterval parameter is configured to 480 ms, so once the
-   events are triggered, the UE will send the measurement reports with
-   this periodicity;
+Performing measurements
+-----------------------
 
- - the filterCoefficientRSRQ parameter is configured to fc4, it is the
-   default value specified in the protocol specification [TS36331]_;
+UE RRC receives both RSRP and RSRQ measurements on periodical basis from UE PHY,
+as described in :ref:`sec-phy-ue-measurements`. *Layer 3 filtering* will be
+applied to these received measurements. The implementation of the filtering
+follows Section 5.5.3.2 of [TS36331]_:
 
- - the hysteresis and timeToTrigger parameters are configured with
-   values equal to zero;
+.. math::
 
- - it is assumed that there is a one-to-one mapping between the PCI
-   and the E-UTRAN Global Cell Identifier (EGCI). This is consistent
-   with the PCI modeling assumptions described in :ref:`phy-ue-measurements`.
+   F_n = (1 - a) \times F_{n-1} + a \times M_n
 
+where:
 
+ - :math:`M_n` is the latest received measurement result from the physical
+   layer;
+ - :math:`F_n` is the updated filtered measurement result;
+ - :math:`F_{n-1}` is the old filtered measurement result, where
+   :math:`F_0 = M_1` (i.e. the first measurement is not filtered); and
+ - :math:`a = (\frac{1}{2})^{\frac{k}{4}}`, where :math:`k` is the configurable
+   `filterCoefficent` provided by the ``QuantityConfig``;
+   
+:math:`k = 4` is the default value, but can be configured by setting the
+`RsrpFilterCoefficient` and `RsrqFilterCoefficient` attributes in
+``LteEnbRrc``.
+
+Therefore :math:`k = 0` will disable Layer 3 filtering. On the other hand, past
+measurements can be granted more influence on the filtering results by using
+larger value of :math:`k`.
+
+Measurement reporting triggering
+--------------------------------
+
+In this part, UE RRC will go through the list of active measurement
+configuration and check whether the triggering condition is fulfilled in
+accordance with Section 5.5.4 of [TS36331]_. When at least one triggering
+condition from all the active measurement configuration is fulfilled, the
+measurement reporting procedure (described in the next subsection) will be
+initiated.
+
+3GPP defines two kinds of `triggerType`: *periodical* and *event-based*. At the
+moment, only event-based criterion is supported. There are various events that
+can be selected, which are briefly described in the table below: 
+
+.. table:: List of supported event-based triggering criteria
+
+   ======== ======================================================
+   Name     Description
+   ======== ======================================================
+   Event A1 Serving cell becomes better than `threshold`
+   Event A2 Serving cell becomes worse than `threshold`
+   Event A3 Neighbour becomes `offset` dB better than serving cell
+   Event A4 Neighbour becomes better than `threshold`
+   Event A5 Serving becomes worse than `threshold1`
+            *AND* neighbour becomes better than `threshold2`
+   ======== ======================================================
+
+Two main conditions to be checked in an event-based trigger are the *entering
+condition* and the *leaving condition*. More details on these two can be found
+in Section 5.5.4 of [TS36331]_.
+
+An event-based trigger can be further configured by introducing hysteresis and
+time-to-trigger. *Hysteresis* (:math:`Hys`) defines the distance between the
+entering and leaving conditions in dB. Similarly, *time-to-trigger* introduces
+delay to both entering and leaving conditions, but as a unit of time.
+
+The *periodical* type of reporting trigger is not supported, but its behaviour
+can be easily obtained by using an event-based trigger. This can be done by
+configuring the measurement in such a way that the entering condition is always
+fulfilled, for example, by setting the threshold of Event A1 to zero (the
+minimum level). As a result, the measurement reports will always be triggered
+at every certain interval, as determined by the `reportInterval` field within
+``LteRrcSap::ReportConfigEutra``, therefore producing the same behaviour as
+periodical reporting.
+
+As a limitation with respect to 3GPP specifications, the current model does not
+support any cell-specific configuration. These configuration parameters are
+defined in measurement object. As a consequence, incorporating a list of black
+cells into the triggering process is not supported. Moreover, cell-specific
+offset (i.e., :math:`O_{cn}` and :math:`O_{cp}` in Event A3, A4, and A5) are not
+supported as well. The value equal to zero is always assumed in place of them.
+
+Measurement reporting
+---------------------
+
+This part handles the submission of measurement report from the UE RRC entity
+to the serving eNodeB entity via RRC protocol. Several simplifying assumptions
+have been adopted:
+
+ - `reportAmount` is *not* applicable (i.e. always assumed to be infinite);
+   
+ - in measurement reports, the `reportQuantity` is always assumed to be `BOTH`,
+   i.e., both RSRP and RSRQ are always reported, regardless of the
+   `triggerQuantity`.
+
+
+.. _sec-handover:
 
 Handover
 ++++++++
 
-The RRC model support the execution of an X2-based handover procedure.
-There are 2 ways to trigger the handover procedure:
+The RRC model supports UE mobility in CONNECTED mode by invoking the X2-based
+handover procedure. The model is intra-EUTRAN and intra-frequency, as based on
+Section 10.1.2.1 of [TS36300]_.
+
+This section focuses on the process of triggering a handover. The handover
+execution procedure itself is covered in Section :ref:`sec-x2`.
 
- - the handover could be triggered explicitly by the simulation program
-   by scheduling an execution of the method ``LteEnbRrc::SendHandoverRequest ()``
+There are two ways to trigger the handover procedure:
 
- - the handover could be triggered automatically by the eNB RRC entity.
-   The eNB executes the following algorithm :ref:`fig-lte-handover-algorithm` 
-   to trigger the handover procedure for a UE providing measurements in its
-   serving cell and the neighbour cells the UE measures:
+ - *explicitly* (or manually) triggered by the simulation program by scheduling
+   an execution of the method ``LteEnbRrc::SendHandoverRequest``; or
 
-.. _fig-lte-handover-algorithm:
+ - *automatically* triggered by the eNodeB RRC entity based on UE measurements
+   and according to the selected handover algorithm.
 
-.. figure:: figures/lte-handover-algorithm.*
+Section :ref:`sec-x2-based-handover` of the User Documentation provides some
+examples on using both explicit and automatic handover triggers in simulation.
+The next subsection will take a closer look on the automatic method, by
+describing the design aspects of the handover algorithm interface and the
+available handover algorithms.
+
+.. _sec-handover-algorithm:
+
+Handover algorithm
+------------------
+
+Handover in 3GPP LTE has the following properties:
+
+ - UE-assisted
+     The UE provides input to the network in the form of measurement reports.
+     This is handled by the :ref:`sec-ue-measurements`.
+   
+ - Network-controlled
+     The network (i.e. the source eNodeB and the target eNodeB) decides when to
+     trigger the handover and oversees its execution.
+
+The *handover algorithm* operates at the source eNodeB and is responsible in
+making handover decisions in an "automatic" manner. It interacts with an eNodeB
+RRC instance via the *Handover Management SAP* interface. These relationships
+are illustrated in Figure :ref:`fig-ue-meas-consumer` from the previous section.
+
+The handover algorithm interface consists of the following methods:
+
+ - ``AddUeMeasReportConfigForHandover``
+     (Handover Algorithm -> eNodeB RRC) Used by the handover algorithm to
+     request measurement reports from the eNodeB RRC entity, by passing the
+     desired reporting configuration. The configuration will be applied to
+     all future attached UEs.
+
+ - ``ReportUeMeas``
+     (eNodeB RRC -> Handover Algorithm) Based on the UE measurements configured
+     earlier in ``AddUeMeasReportConfigForHandover``, UE may submit measurement
+     reports to the eNodeB. The eNodeB RRC entity uses the ``ReportUeMeas``
+     interface to forward these measurement reports to the handover algorithm.
+     
+ - ``TriggerHandover``
+     (Handover Algorithm -> eNodeB RRC) After examining the measurement reports
+     (but not necessarily), the handover algorithm may declare a handover. This
+     method is used to notify the eNodeB RRC entity about this decision, which
+     will then proceed to commence the handover procedure. 
+
+One note for the ``AddUeMeasReportConfigForHandover``. The method will return
+the ``measId`` (measurement identity) of the newly created measurement
+configuration. Typically a handover algorithm would store this unique number. It
+may be useful in the ``ReportUeMeas`` method, for example when more than one
+configuration has been requested and the handover algorithm needs to
+differentiate incoming reports based on the configuration that triggered them.
+
+A handover algorithm is implemented by writing a subclass of the
+``LteHandoverAlgorithm`` abstract superclass and implementing each of the above
+mentioned SAP interface methods. Users may develop their own handover algorithm
+this way, and then use it in any simulation by following the steps outlined in
+Section :ref:`sec-x2-based-handover` of the User Documentation.
+
+Alternatively, users may choose to use one of the 3 built-in handover algorithms
+provided by the LTE module: no-op, A2-A4-RSRQ, and strongest cell handover
+algorithm. They are ready to be used in simulations or can be taken as an
+example of implementing a handover algorithm. Each of these built-in algorithms
+is covered in each of the following subsections.
+
+No-op handover algorithm
+------------------------
+
+The *no-op handover algorithm* (``NoOpHandoverAlgorithm`` class) is the simplest
+possible implementation of handover algorithm. It basically does nothing, i.e.,
+does not call any of the Handover Management SAP interface methods. Users may
+choose this handover algorithm if they wish to disable automatic handover
+trigger in their simulation.
+
+A2-A4-RSRQ handover algorithm
+-----------------------------
+
+The *A2-A4-RSRQ handover algorithm* provides the functionality of the default
+handover algorithm originally included in LENA M6 (ns-3.18), ported to the
+Handover Management SAP interface as the ``A2A4RsrqHandoverAlgorithm`` class.
+
+As the name implies, the algorithm utilizes the Reference Signal Received
+Quality (RSRQ) measurements acquired from Event A2 and Event A4. Thus, the
+algorithm will add 2 measurement configuration to the corresponding eNodeB RRC
+instance. Their intended use are described as follows:
+
+ - *Event A2* (serving cell's RSRQ becomes worse than `threshold`) is leveraged
+   to indicate that the UE is experiencing poor signal quality and may benefit
+   from a handover.
+ 
+ - *Event A4* (neighbour cell's RSRQ becomes better than `threshold`) is used
+   to detect neighbouring cells and acquire their corresponding RSRQ from every
+   attached UE, which are then stored internally by the algorithm. By default,
+   the algorithm configures Event A4 with a very low threshold, so that the
+   trigger criteria are always true.
+   
+Figure :ref:`fig-lte-legacy-handover-algorithm` below summarizes this procedure.
+
+.. _fig-lte-legacy-handover-algorithm:
+
+.. figure:: figures/lte-legacy-handover-algorithm.*
+   :scale: 70 %
+   :align: center
+
+   A2-A4-RSRQ handover algorithm
+ 
+Two attributes can be set to tune the algorithm behaviour:
+
+ - ``ServingCellThreshold``
+     The `threshold` for Event A2, i.e. a UE must have an RSRQ lower than this
+     threshold to be considered for a handover.
+
+ - ``NeighbourCellOffset``
+     The `offset` that aims to ensure that the UE would receive better signal
+     quality after the handover. A neighbouring cell is considered as a target
+     cell for the handover only if its RSRQ is higher than the serving cell's
+     RSRQ by the amount of this `offset`.
+
+The value of both attributes are expressed as RSRQ range (Section 9.1.7 of
+[TS36133]_), which is an integer between 0 and 34, with 0 as the lowest RSRQ.
+
+Strongest cell handover algorithm
+---------------------------------
+
+The *strongest cell handover algorithm*, or also sometimes known as the
+*traditional power budget (PBGT) algorithm*, is developed using [Dimou2009]_ as
+reference. The idea is to provide each UE with the best possible Reference
+Signal Received Power (RSRP). This is done by performing a handover as soon as
+a better cell (i.e. with stronger RSRP) is detected.
+
+*Event A3* (neighbour cell's RSRP becomes better than serving cell's RSRP) is
+chosen to realize this concept. The ``A3RsrpHandoverAlgorithm`` class is the
+result of the implementation. Handover is triggered for the UE to the best cell
+in the measurement report.
+
+A simulation which uses this algorithm is usually more vulnerable to ping-pong
+handover (consecutive handover to the previous source eNodeB within short period
+of time), especially when the :ref:`sec-fading-model` is enabled. This problem
+is typically tackled by introducing a certain delay to the handover. The
+algorithm does this by including hysteresis and time-to-trigger parameters
+(Section 6.3.5 of [TS36331]_) to the UE measurements configuration.
+
+*Hysteresis* (a.k.a. handover margin) delays the handover in regard of RSRP. The
+value is expressed in dB, ranges between 0 to 15 dB, and have a 0.5 dB accuracy,
+e.g., an input value of 2.7 dB is rounded to 2.5 dB.
+
+On the other hand, *time-to-trigger* delays the handover in regard of time. 3GPP
+defines 16 valid values for time-to-trigger (all in milliseconds): 0, 40, 64,    
+80, 100, 128, 160, 256, 320, 480, 512, 640, 1024, 1280, 2560, and 5120.
+
+The difference between hysteresis and time-to-trigger is illustrated in Figure
+:ref:`fig-lte-strongest-cell-handover-algorithm` below, which is taken from the
+`lena-x2-handover-measures` example. It depicts the perceived RSRP of serving
+cell and a neighbouring cell by a UE which moves pass the border of the cells.
+
+.. _fig-lte-strongest-cell-handover-algorithm:
+
+.. figure:: figures/lte-strongest-cell-handover-algorithm.*
    :align: center
 
-   Algorithm to automatically trigger the Handover procedure
+   Effect of hysteresis and time-to-trigger in strongest cell handover algorithm
 
-The simulation user can set two parameters to control the handover decision:
+By default, the algorithm uses a hysteresis of 3.0 dB and time-to-trigger of
+256 ms. These values can be tuned through the ``Hysteresis`` and
+``TimeToTrigger`` attributes of the ``A3RsrpHandoverAlgorithm`` class.
 
- - servingHandoverThreshold, if the RSRQ value measured by the UE in its
-   serving cell is less or equal to the servingHandoverThreshold parameter
-   (i.e. the conditions of the UE in the serving cell are getting bad or
-   not good enough), then the eNB considers this UE to hand it over to a new
-   neighbour eNB. The handover will eventually be triggered depending on the 
-   measurements of the neighbour cells.
 
- - neighbourHandoverOffset, if the UE is considered for handover, and
-   the difference between the best neighbour RSRQ 
-   and the RSRQ difference between the neighbor and the serving cell
-   is greater or equal to the neighbourHandoverOffset 
-   parameter, then the handover procedure is triggered for this UE.
+Neighbour Relation
+++++++++++++++++++
+
+LTE module supports a simplified *Automatic Neighbour Relation* (ANR) function.
+This is handled by the ``LteAnr`` class, which interacts with an eNodeB RRC
+instance through the ANR SAP interface.
+
+Neighbour Relation Table
+------------------------
+
+The ANR holds a *Neighbour Relation Table* (NRT), similar to the description in
+Section 22.3.2a of [TS36300]_. Each entry in the table is called a *Neighbour
+Relation* (NR) and represents a detected neighbouring cell, which contains the
+following boolean fields:
+
+ - `No Remove`
+     Indicates that the NR shall *not* be removed from the NRT. This is `true`
+     by default for user-provided NR and `false` otherwise.
+     
+ - `No X2`
+     Indicates that the NR shall *not* use an X2 interface in order to initiate
+     procedures towards the eNodeB parenting the target cell. This is `false` by
+     default for user-provided NR, and `true` otherwise.
+
+ - `No HO`
+     Indicates that the NR shall *not* be used by the eNodeB for handover
+     reasons. This is `true` in most cases, except when the NR is both
+     user-provided and network-detected.
+
+Each NR entry may have at least one of the following properties:
+
+ - User-provided
+     This type of NR is created as instructed by the simulation user. For
+     example, a NR is created automatically upon a user-initiated establishment
+     of X2 connection between 2 eNodeBs, e.g. as described in Section
+     :ref:`sec-x2-based-handover`. Another way to create a user-provided NR is
+     to call the ``AddNeighbourRelation`` function explicitly.
+
+ - Network-detected
+     This type of NR is automatically created during the simulation as a result
+     of the discovery of a nearby cell.
+
+In order to automatically create network-detected NR, ANR utilizes UE
+measurements. In other words, ANR is a consumer of UE measurements, as depicted
+in Figure :ref:`fig-ue-meas-consumer`. RSRQ and Event A4 (neighbour becomes
+better than `threshold`) are used for the reporting configuration. The default
+Event A4 `threshold` is set to the lowest possible, i.e., maximum detection
+capability, but can be changed by setting the ``Threshold`` attribute of
+``LteAnr`` class. Note that the A2-A4-RSRQ handover algorithm also utilizes a
+similar reporting configuration. Despite the similarity, when both ANR and this
+handover algorithm are active in the eNodeB, they use separate reporting
+configuration.
+
+Also note that automatic setup of X2 interface is not supported. This is the
+reason why the `No X2` and `No HO` fields are true in a network-detected but not
+user-detected NR.
+
+Role of ANR in Simulation
+-------------------------
+
+The ANR SAP interface provides the means of communication between ANR and eNodeB
+RRC. Some interface functions are used by eNodeB RRC to interact with the NRT,
+as shown below:
+
+ - ``AddNeighbourRelation``
+     (eNodeB RRC -> ANR) Add a new user-provided NR entry into the NRT.
+
+ - ``GetNoRemove``
+     (eNodeB RRC -> ANR) Get the value of `No Remove` field of an NR entry of
+     the given cell ID.
+     
+ - ``GetNoHo``
+     (eNodeB RRC -> ANR) Get the value of `No HO` field of an NR entry of
+     the given cell ID.
+
+ - ``GetNoX2``
+     (eNodeB RRC -> ANR) Get the value of `No X2` field of an NR entry of
+     the given cell ID.
+
+Other interface functions exist to support the role of ANR as a UE measurements
+consumer, as listed below:
+
+ - ``AddUeMeasReportConfigForAnr``
+     (ANR -> eNodeB RRC) Used by the ANR to request measurement reports from the
+     eNodeB RRC entity, by passing the desired reporting configuration. The
+     configuration will be applied to all future attached UEs.
+     
+ - ``ReportUeMeas``
+     (eNodeB RRC -> ANR) Based on the UE measurements configured earlier in
+     ``AddUeMeasReportConfigForAnr``, UE may submit measurement reports to the
+     eNodeB. The eNodeB RRC entity uses the ``ReportUeMeas`` interface to
+     forward these measurement reports to the ANR.
+
+Please refer to the corresponding API documentation for ``LteAnrSap`` class for
+more details on the usage and the required parameters.
+
+The ANR is utilized by the eNodeB RRC instance as a data structure to keep track
+of the situation of nearby neighbouring cells. The ANR also helps the eNodeB RRC
+instance to determine whether it is possible to execute a handover procedure to
+a neighbouring cell. This is realized by the fact that eNodeB RRC will only
+allow a handover procedure to happen if the NR entry of the target cell has both
+`No HO` and `No X2` fields set to `false`. 
+
+ANR is enabled by default in every eNodeB instance in the simulation. It can be
+disabled by setting the ``AnrEnabled`` attribute in ``LteHelper`` class to
+`false`.
 
 
 RRC sequence diagrams
@@ -2101,6 +2660,8 @@
 In this section we provide some sequence diagrams that explain the
 most important RRC procedures being modeled.
 
+.. _sec-rrc-connection-establishment:
+
 RRC connection establishment
 ----------------------------
 
@@ -2118,6 +2679,8 @@
 
 
 
+.. _sec-rrc-connection-reconfiguration:
+
 RRC connection reconfiguration
 ------------------------------
 
@@ -2351,9 +2914,9 @@
 
 
 
---------
+---
 NAS
---------
+---
 
 
 The focus of the LTE-EPC model is on the NAS Active state, which corresponds to EMM Registered, ECM connected, and RRC connected. Because of this, the following simplifications are made:
@@ -2472,9 +3035,9 @@
  #. it removes the GTP header and retrieves the TEID which is
     contained in it;
  #. leveraging on the one-to-one mapping between S1-U bearers and
-    Radio Bearers (which is a 3GPP requirement), it determines the Radio
-    Bearer ID (RBID) to which the packet belongs;
- #. it records the RBID in a dedicated tag called LteRadioBearerTag,
+    Radio Bearers (which is a 3GPP requirement), it determines the 
+    Bearer ID (BID) to which the packet belongs;
+ #. it records the BID in a dedicated tag called EpsBearerTag,
     which is added to the packet; 
  #. it forwards the packet to the LteEnbNetDevice of the eNB node via
     a raw packet socket
@@ -2483,7 +3046,7 @@
 end-to-end IP header, since the IP/UDP/GTP headers of the S1 protocol
 stack have already been stripped. Upon reception of
 the packet from the EpcEnbApplication, the LteEnbNetDevice will
-retrieve the RBID from the LteRadioBearerTag, and based on the RBID
+retrieve the BID from the EpsBearerTag, and based on the BID
 will determine the Radio Bearer instance (and the corresponding PDCP
 and RLC protocol instances) which are then used to forward the packet
 to the UE over the LTE radio interface. Finally, the LteUeNetDevice of
@@ -2515,15 +3078,15 @@
 
 The eNB receives the packet via its LteEnbNetDevice. Since there is a
 single PDCP and RLC protocol instance for each Radio Bearer, the
-LteEnbNetDevice is able to determine the RBID of the packet. This RBID
-is then recorded onto an LteRadioBearerTag, which is added to the
+LteEnbNetDevice is able to determine the BID of the packet. This BID
+is then recorded onto an EpsBearerTag, which is added to the
 packet. The LteEnbNetDevice then forwards the packet to the
 EpcEnbApplication via a raw packet socket.
 
 Upon receiving the packet, the EpcEnbApplication performs the
 following operations:
 
- #. it retrieves the RBID from the LteRadioBearerTag in the packet;
+ #. it retrieves the BID from the EpsBearerTag in the packet;
  #. it determines the corresponding EPS Bearer instance and GTP-U TEID by
     leveraging on the one-to-one mapping between S1-U bearers and Radio
     Bearers;
@@ -2580,7 +3143,7 @@
 
 
 
-
+.. _sec-x2:
 
 ---
 X2 
@@ -2597,8 +3160,7 @@
 
 For a representation of how the X2 interface fits in the overall
 architecture of the LENA simulation model, the reader is referred to
-the figure :ref:`overall-architecture`.
-
+the figure :ref:`fig-epc-topology`.
 
 The X2 interface implemented in the simulator provides detailed implementation of the following elementary procedures of the Mobility Management functionality [TS36423]_:
 
@@ -2617,16 +3179,30 @@
 in particular, *lossless handover* as described in Section 2.6.3.2 of
 [Sesia2009]_ is not supported at the time of this writing.
 
-Figure :ref:`fig-x2-based-handover-seq-diagram` shows the interaction of the entities of the X2 model in the simulator.
+Figure :ref:`fig-x2-based-handover-seq-diagram` below shows the interaction of
+the entities of the X2 model in the simulator. The shaded labels indicate the
+moments when the UE or eNodeB transition to another RRC state.
 
 .. _fig-x2-based-handover-seq-diagram:
 
 .. figure:: figures/lte-epc-x2-handover-seq-diagram.*
-    :width: 700px
-    :align: center
+   :scale: 80 %
+   :align: center
 
-    Sequence diagram of the X2-based handover
+   Sequence diagram of the X2-based handover
 
+The figure also shows two timers within the handover procedure: the *handover
+leaving timer* is maintained by the source eNodeB, while the *handover joining
+timer* by the target eNodeB. The duration of the timers can be configured in
+the ``HandoverLeavingTimeoutDuration`` and ``HandoverJoiningTimeoutDuration``
+attributes of the respective ``LteEnbRrc`` instances. When one of these timers
+expire, the handover procedure is considered as failed.
+
+However, there is no proper handling of handover failure in the current version
+of LTE module. Users should tune the simulation properly in order to avoid
+handover failure, otherwise unexpected behaviour may occur. Please refer to
+Section :ref:`sec-tuning-handover-simulation` of the User Documentation for some
+tips regarding this matter.
 
 The X2 model is an entity that uses services from:
 
@@ -2833,9 +3409,9 @@
 
 
 
------------------
+---
 S11
------------------
+---
 
 The S11 interface provides control plane interaction between the SGW
 and the MME using the GTPv2-C protocol specified in [TS29274]_. In the
@@ -2875,19 +3451,23 @@
 various components. These objects are:
 
 
- * LteHelper, which takes care of the configuration of the LTE radio
+ * ``LteHelper``, which takes care of the configuration of the LTE radio
    access network, as well as of coordinating the setup and release of
-   EPS bearers 
- * EpcHelper, which takes care of the configuratio of the Evolved
-   Packet Core
+   EPS bearers. The ``LteHelper`` class provides both the API
+   definition and its implementation.  
+ * ``EpcHelper``, which takes care of the configuration of the Evolved
+   Packet Core. The ``EpcHelper`` class is an abstract base class
+   which only provides the API definition; the implementation is delegated
+   to child classes in order to allow for different EPC network
+   models.
 
 It is possible to create a simple LTE-only simulations by
-using LteHelper alone, or to create complete LTE-EPC simulations by
-using both LteHelper and EpcHelper. When both helpers are used, they
-interact in a master-slave fashion, with LteHelper being the Master
-that interacts directly with the user program, and EpcHelper working
+using ``LteHelper`` alone, or to create complete LTE-EPC simulations by
+using both ``LteHelper`` and ``EpcHelper``. When both helpers are used, they
+interact in a master-slave fashion, with ``LteHelper`` being the Master
+that interacts directly with the user program, and ``EpcHelper`` working
 "under the hood" to configure the EPC upon explicit methods called by
-LteHelper. The exact interactions are displayed in the Figure :ref:`fig-helpers`.
+``LteHelper``. The exact interactions are displayed in the Figure :ref:`fig-helpers`.
 
 .. _fig-helpers:
    
diff -Naur ns-3.18.1/src/lte/doc/source/lte-references.rst ns-3.19/src/lte/doc/source/lte-references.rst
--- ns-3.18.1/src/lte/doc/source/lte-references.rst	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/doc/source/lte-references.rst	2013-12-20 09:44:51.000000000 -0800
@@ -20,11 +20,11 @@
 
 .. [TS36213] 3GPP TS 36.213 "E-UTRA Physical layer procedures"
 
-.. [TS36214] 3GPP TS 36.213 "E-UTRA Physical layer â€“ Measurements"
+.. [TS36214] 3GPP TS 36.214 "E-UTRA Physical layer â€“ Measurements"
 
 .. [TS36300] 3GPP TS 36.300 "E-UTRA and E-UTRAN; Overall description; Stage 2"
 
-.. [TS36304] 3GPP TS 36.104 "E-UTRA User Equipment (UE) procedures in idle mode"
+.. [TS36304] 3GPP TS 36.304 "E-UTRA User Equipment (UE) procedures in idle mode"
 
 .. [TS36321] 3GPP TS 36.321 "E-UTRA Medium Access Control (MAC) protocol specification"
 
@@ -40,34 +40,39 @@
 
 .. [TS36423] 3GPP TS 36.423 "E-UTRAN X2 application protocol (X2AP)"
 
+.. [TR36814] 3GPP TR 36.814 "E-UTRA Further advancements for E-UTRA physical layer aspects"
 
-.. [R1-081483] 3GPP R1-081483 `Conveying MCS and TB size via PDCCH <http://www.3gpp.org/ftp/tsg_ran/WG1_RL1/TSGR1_52b/Docs/R1-081483.zip>`_
-
-.. [R4-092042] 3GPP R4-092042 "Simulation assumptions and parameters for FDD HeNB RF requirements"
+.. [R1-081483] 3GPP R1-081483 `"Conveying MCS and TB size via PDCCH"
+   <http://www.3gpp.org/ftp/tsg_ran/WG1_RL1/TSGR1_52b/Docs/R1-081483.zip>`_
 
-.. [TR36814] 3GPP TR 36.814 "E-UTRA Further advancements for E-UTRA physical layer aspects"
+.. [R4-092042] 3GPP R4-092042 `"Simulation assumptions and parameters for FDD HeNB RF requirements"
+   <http://www.3gpp.org/ftp/tsg_ran/wg4_radio/TSGR4_51/Documents/R4-092042.zip>`_
 
-.. [FFAPI] `FemtoForum LTE MAC Scheduler Interface Specification v1.11 <http://www.femtoforum.org/femto/technical.php>`_
+.. [FFAPI] FemtoForum `"LTE MAC Scheduler Interface Specification v1.11"
+   <http://www.smallcellforum.org/smallcellforum_resources/pdfsend05.php?file=LTE%20MAC%20Scheduler%20Interface%20Specification.pdf>`_
 
-.. [ns3tutorial] `The ns-3 Tutorial <http://www.nsnam.org/docs/tutorial/singlehtml/index.html>`_
+.. [ns3tutorial] `"The ns-3 Tutorial"
+   <http://www.nsnam.org/docs/tutorial/singlehtml/index.html>`_
 
-.. [ns3manual] `The ns-3 Manual <http://www.nsnam.org/docs/manual/singlehtml/index.html>`_
+.. [ns3manual] `"The ns-3 Manual"
+   <http://www.nsnam.org/docs/manual/singlehtml/index.html>`_
 
-.. [Sesia2009] S. Sesia, I. Toufik and M. Baker, "LTE - The UMTS Long Term Evolution - from theory to practice", 
+.. [Sesia2009] S. Sesia, I. Toufik and M. Baker,
+   "LTE - The UMTS Long Term Evolution - from theory to practice",
    Wiley, 2009
 
 .. [Baldo2009] N. Baldo and M. Miozzo, "Spectrum-aware Channel and PHY layer modeling for ns3", 
-   Proceedings of ICST NSTools 2009, Pisa, Italy. 
+   Proceedings of ICST NSTools 2009, Pisa, Italy
 
-.. [Piro2010] Giuseppe Piro, Luigi Alfredo Grieco, Gennaro Boggia, and Pietro Camarda, A Two-level 
-   Scheduling Algorithm for QoS Support in the Downlink of LTE Cellular Networks", Proc. of 
-   European Wireless, EW2010, Lucca, Italy, Apr., 2010 
+.. [Piro2010] Giuseppe Piro, Luigi Alfredo Grieco, Gennaro Boggia, and Pietro Camarda,
+   "A Two-level Scheduling Algorithm for QoS Support in the Downlink of LTE Cellular Networks",
+   Proc. of European Wireless, EW2010, Lucca, Italy, Apr., 2010 
 
 .. [Holtzman2000] J.M. Holtzman, "CDMA forward link waterfilling power control", 
    in Proc. of IEEE VTC Spring, 2000.
 
 .. [Piro2011] G. Piro, N. Baldo. M. Miozzo, "An LTE module for the ns-3 network simulator", 
-    in Proc. of Wns3 2011 (in conjunction with SimuTOOLS 2011), March 2011, Barcelona (Spain)
+   in Proc. of Wns3 2011 (in conjunction with SimuTOOLS 2011), March 2011, Barcelona (Spain)
 
 .. [Seo2004] H. Seo, B. G. Lee. "A proportional-fair power allocation scheme for fair and efficient multiuser OFDM systems", 
    in Proc. of IEEE GLOBECOM, December 2004. Dallas (USA)
@@ -76,40 +81,65 @@
    competition and proposals for the award of 800 MHz and 2.6 GHz
    spectrum and related issues", March 2011 
 
-.. [RealWireless] RealWireless, Low-power shared access to spectrum
-   for mobile broadband,  Final Report, Ofcom Project MC/073, 18th
+.. [RealWireless] RealWireless, "Low-power shared access to spectrum
+   for mobile broadband",  Final Report, Ofcom Project MC/073, 18th
    March 2011 
 
-.. [PaduaPEM] http://mailman.isi.edu/pipermail/ns-developers/2011-November/009559.html
+.. [PaduaPEM] `"Ns-developers - LTE error model contribution"
+   <http://mailman.isi.edu/pipermail/ns-developers/2011-November/009559.html>`_
 
-.. [ViennaLteSim] The Vienna LTE Simulators http://www.nt.tuwien.ac.at/about-us/staff/josep-colom-ikuno/lte-simulators/
+.. [ViennaLteSim] `"The Vienna LTE Simulators"
+   <http://www.nt.tuwien.ac.at/about-us/staff/josep-colom-ikuno/lte-simulators/>`_
 
-.. [LozanoCost] Joan Olmos, Silvia Ruiz, Mario GarcÃ­a-Lozano and David MartÃ­n-SacristÃ¡n, "Link Abstraction Models Based on Mutual Information for LTE Downlink", COST 2100 TD(10)11052 Report
+.. [LozanoCost] Joan Olmos, Silvia Ruiz, Mario GarcÃ­a-Lozano and David MartÃ­n-SacristÃ¡n,
+   "Link Abstraction Models Based on Mutual Information for LTE Downlink",
+   COST 2100 TD(10)11052 Report
 
-.. [wimaxEmd] WiMAX Forum White Paper, WiMAX System Evaluation Methodology, July 2008.
+.. [wimaxEmd] WiMAX Forum White Paper, "WiMAX System Evaluation Methodology", July 2008.
 
-.. [mathworks] Matlab R2011b Documentation Communications System Toolbox, `Methodology for Simulating Multipath Fading Channels <http://www.mathworks.es/help/toolbox/comm/ug/a1069449399.html#bq5zk36>`_
+.. [mathworks] Matlab R2011b Documentation Communications System Toolbox,
+   `"Methodology for Simulating Multipath Fading Channels"
+   <http://www.mathworks.es/help/toolbox/comm/ug/a1069449399.html#bq5zk36>`_
 
-.. [CatreuxMIMO] S. Catreux, L.J. Greenstein, V. Erceg, "Some results and insights on the performance gains of MIMO systems," Selected Areas in Communications, IEEE Journal on , vol.21, no.5, pp. 839- 847, June 2003
+.. [CatreuxMIMO] S. Catreux, L.J. Greenstein, V. Erceg,
+   "Some results and insights on the performance gains of MIMO systems,"
+   Selected Areas in Communications, IEEE Journal on , vol.21, no.5, pp. 839- 847, June 2003
 
-.. [Ikuno2010] J.C. Ikuno, M. Wrulich, M. Rupp, "System Level Simulation of LTE Networks," Vehicular Technology Conference (VTC 2010-Spring), 2010 IEEE 71st , vol., no., pp.1-5, 16-19 May 2010
+.. [Ikuno2010] J.C. Ikuno, M. Wrulich, M. Rupp, "System Level Simulation of LTE Networks,"
+   Vehicular Technology Conference (VTC 2010-Spring), 2010 IEEE 71st , vol., no., pp.1-5, 16-19 May 2010
 
-
-.. [Milos2012] J. Milos, "Performace Analysis Of PCFICH LTE Control Channel", Proceedings of the 19th Conference STUDENT EEICT 2012, Brno, CZ, 2012.
+.. [Milos2012] J. Milos, "Performance Analysis Of PCFICH LTE Control Channel",
+   Proceedings of the 19th Conference STUDENT EEICT 2012, Brno, CZ, 2012.
 
 .. [FujitsuWhitePaper] "Enhancing LTE Cell-Edge Performance via PDCCH ICIC".
 
-
-.. [Bharucha2011] Z. Bharucha, G. Auer, T. Abe, N. Miki, "Femto-to-Macro Control Channel Interference Mitigation via Cell ID Manipulation in LTE," Vehicular Technology Conference (VTC Fall), 2011 IEEE , vol., no., pp.1-6, 5-8 Sept. 2011
-
-.. [R4-081920] 3GPP R4-081920 `LTE PDCCH/PCFICH Demodulation Performance Results with Implementation Margin
- <http://www.3gpp.org/ftp/tsg_ran/wg4_radio/TSGR4_48/Documents/R4-081920.zip>`_
-
-.. [FCapo2012] F.Capozzi, G.Piro L.A.Grieco, G.Boggia, P.Camarda, "Downlink Packet Scheduling in LTE Cellular Networks: Key Design Issues and a Survey", IEEE Comm. Surveys and Tutorials, vol.2012, no.99, pp.1-23, Jun. 2012
-
-.. [FABokhari2009] F.A. Bokhari, H. Yanikomeroglu, W.K. Wong, M. Rahman, "Cross-Layer Resource Scheduling for Video Traffic in the Downlink of OFDMA-Based Wireless 4G Networks",EURASIP J. Wirel. Commun. Netw., vol.2009, no.3, pp. 1-10, Jan. 2009. 
-
-.. [WKWong2004] W.K. Wong, H.Y. Tang, V.C.M, Leung, "Token bank fair queuing: a new scheduling algorithm for wireless multimedia services", Int. J. Commun. Syst., vol.17, no.6, pp.591-614, Aug.2004. 
-
-.. [GMonghal2008] G.Mongha, K.I. Pedersen, I.Z. Kovacs, P.E. Mogensen, " QoS Oriented Time and Frequency Domain Packet Schedulers for The UTRAN Long Term Evolution", In Proc. IEEE VTC, 2008.
-
+.. [Bharucha2011] Z. Bharucha, G. Auer, T. Abe, N. Miki,
+   "Femto-to-Macro Control Channel Interference Mitigation via Cell ID Manipulation in LTE,"
+   Vehicular Technology Conference (VTC Fall), 2011 IEEE , vol., no., pp.1-6, 5-8 Sept. 2011
+
+.. [R4-081920] 3GPP R4-081920 `"LTE PDCCH/PCFICH Demodulation Performance Results with Implementation Margin"
+   <http://www.3gpp.org/ftp/tsg_ran/wg4_radio/TSGR4_48/Documents/R4-081920.zip>`_
+
+.. [FCapo2012] F.Capozzi, G.Piro, L.A. Grieco, G.Boggia, P.Camarda,
+   "Downlink Packet Scheduling in LTE Cellular Networks: Key Design Issues and a Survey",
+   IEEE Comm. Surveys and Tutorials, vol.2012, no.99, pp.1-23, Jun. 2012
+
+.. [FABokhari2009] F.A. Bokhari, H. Yanikomeroglu, W.K. Wong, M. Rahman,
+   "Cross-Layer Resource Scheduling for Video Traffic in the Downlink of OFDMA-Based Wireless 4G Networks",
+   EURASIP J. Wirel. Commun. Netw., vol.2009, no.3, pp. 1-10, Jan. 2009. 
+
+.. [WKWong2004] W.K. Wong, H.Y. Tang, V.C.M, Leung,
+   "Token bank fair queuing: a new scheduling algorithm for wireless multimedia services",
+   Int. J. Commun. Syst., vol.17, no.6, pp.591-614, Aug.2004. 
+
+.. [GMonghal2008] G. Mongha, K.I. Pedersen, I.Z. Kovacs, P.E. Mogensen,
+   "QoS Oriented Time and Frequency Domain Packet Schedulers for The UTRAN Long Term Evolution",
+   In Proc. IEEE VTC, 2008.
+
+.. [Dimou2009] K. Dimou, M. Wang, Y. Yang, M. Kazmi, A. Larmo, J. Pettersson, W. Muller, Y. Timner,
+   "Handover within 3GPP LTE: Design Principles and Performance",
+   Vehicular Technology Conference Fall (VTC 2009-Fall), 2009 IEEE 70th, pp.1-5, 20-23 Sept. 2009
+
+.. [Lee2010] Y.J. Lee, B.J. Shin, J.C. Lim, D.H. Hong,
+   "Effects of time-to-trigger parameter on handover performance in SON-based LTE systems",
+   Communications (APCC), 2010 16th Asia-Pacific Conference on, pp.492-496, Oct. 31 2010--Nov. 3 2010
diff -Naur ns-3.18.1/src/lte/doc/source/lte-testing.rst ns-3.19/src/lte/doc/source/lte-testing.rst
--- ns-3.18.1/src/lte/doc/source/lte-testing.rst	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/doc/source/lte-testing.rst	2013-12-20 09:44:51.000000000 -0800
@@ -1,9 +1,10 @@
 .. include:: replace.txt
+.. highlight:: bash
 
 
-+++++++++++++++++++++++++++
- Testing Documentation
-+++++++++++++++++++++++++++
++++++++++++++++++++++
+Testing Documentation
++++++++++++++++++++++
 
 
 Overview
@@ -12,20 +13,20 @@
 To test and validate the ns-3 LTE module, several test suites are provided which are integrated with the ns-3 test framework.
 To run them, you need to have configured the build of the simulator in this way::
 
-    ./waf configure --enable-tests --enable-modules=lte --enable-examples
-    ./test.py
+    $ ./waf configure --enable-tests --enable-modules=lte --enable-examples
+    $ ./test.py
 
 The above will run not only the test suites belonging to the LTE module, but also those belonging to all the other ns-3 modules on which the LTE module depends. See the ns-3 manual for generic information on the testing framework.
 
 You can get a more detailed report in HTML format in this way::
 
-    ./test.py -w results.html
+    $ ./test.py -w results.html
 
 After the above command has run, you can view the detailed result for each test by opening the file ``results.html`` with a web browser. 
 
 You can run each test suite separately using this command::
 
-    ./test.py -s test-suite-name
+    $ ./test.py -s test-suite-name
 
 For more details about ``test.py`` and the ns-3 testing framework, please refer to the ns-3 manual.
 
@@ -161,7 +162,7 @@
 Inter-cell Interference Tests
 -----------------------------
 
-The test suite `lte-interference`` provides system tests recreating an
+The test suite `lte-interference` provides system tests recreating an
 inter-cell interference scenario with two eNBs, each having a single
 UE attached to it and employing Adaptive Modulation and Coding both in
 the downlink and in the uplink. The topology of the scenario
@@ -195,16 +196,247 @@
 
 
 UE Measurements Tests
------------------------------
+---------------------
 
-The test suite `lte-ue-measurements`` provides system tests recreating an
-inter-cell interference scenario identical of the one defined for `lte-interference`` test-suite. However, in this test the quantities to be tested are represented by RSRP and RSRQ measurements performed by the UE in two different points of the stack: the source, which is UE PHY layer, and the destination, that is the eNB RRC.
+The test suite `lte-ue-measurements` provides system tests recreating an
+inter-cell interference scenario identical of the one defined for
+`lte-interference` test-suite. However, in this test the quantities to be
+tested are represented by RSRP and RSRQ measurements performed by the UE in two
+different points of the stack: the source, which is UE PHY layer, and the
+destination, that is the eNB RRC.
+
+The test vectors are obtained by the use of a dedicated octave script (available
+in `src/lte/test/reference/lte-ue-measurements.m`), which does the link budget
+calculations (including interference) corresponding to the topology of each
+test case, and outputs the resulting RSRP and RSRQ. The obtained values are then
+used for checking the correctness of the UE Measurements at PHY layer. After
+that, they have to be converted according to 3GPP formatting for the purpose of
+checking their correctness at eNB RRC level.
 
-The test vectors are obtained by use of a dedicated octave script
-(available in
-`src/lte/test/reference/lte-ue-measurements.m`), which does
-the link budget calculations (including interference) corresponding to the topology of each
-test case, and outputs the resulting RSRP and RSRQ. The obtained values are then used for checking the correctness of the UE Measurements at PHY layer, while they have to converted according to 3GPP formatting for checking they correctness at eNB RRC level.
+
+
+UE measurement configuration tests
+----------------------------------
+
+Besides the previously mentioned test suite, there are 3 other test suites for
+testing UE measurements: `lte-ue-measurements-piecewise-1`,
+`lte-ue-measurements-piecewise-2`, and `lte-ue-measurements-handover`. These
+test suites are more focused on the reporting trigger procedure, i.e. the
+correctness of the implementation of the event-based triggering criteria is
+verified here.
+
+In more specific, the tests verify the *timing* and the *content* of each
+measurement reports received by eNodeB. Each test case is an stand-alone LTE
+simulation and the test case will pass if measurement report(s) only occurs at
+the prescribed time and shows the correct level of RSRP (RSRQ is not verified at
+the moment).
+
+
+Piecewise configuration
+#######################
+
+The piecewise configuration aims to test a particular UE measurements
+configuration. The simulation script will setup the corresponding measurements
+configuration to the UE, which will be active throughout the simulation.
+
+Since the reference values are precalculated by hands, several assumptions are
+made to simplify the simulation. Firstly, the channel is only affected by path
+loss model (in this case, Friis model is used). Secondly, the ideal RRC protocol
+is used, and layer 3 filtering is disabled. Finally, the UE moves in a
+predefined motion pattern between 4 distinct spots, as depicted in Figure
+:ref:`fig-ue-meas-piecewise-motion` below. Therefore the fluctuation of the
+measured RSRP can be determined more easily.
+
+.. _fig-ue-meas-piecewise-motion:
+   
+.. figure:: figures/ue-meas-piecewise-motion.*
+   :scale: 80 %
+   :align: center
+
+   UE movement trace throughout the simulation in piecewise configuration
+
+The motivation behind the *"teleport"* between the predefined spots is to
+introduce drastic change of RSRP level, which will guarantee the triggering of
+entering or leaving condition of the tested event. By performing drastic
+changes, the test can be run within shorter amount of time.
+
+Figure :ref:`fig-ue-meas-piecewise-a1` below shows the measured RSRP after
+layer 1 filtering by the PHY layer during the simulation with a piecewise
+configuration. Because layer 3 filtering is disabled, these are the exact values
+used by the UE RRC instance to evaluate reporting trigger procedure. Notice that
+the values are refreshed every 200 ms, which is the default filtering period of
+PHY layer measurements report. The figure also shows the time when entering and
+leaving conditions of an example instance of Event A1 (serving cell becomes
+better than threshold) occur during the simulation.
+
+.. _fig-ue-meas-piecewise-a1:
+   
+.. figure:: figures/ue-meas-piecewise-a1.*
+   :scale: 80 %
+   :align: center
+
+   Measured RSRP trace of an example Event A1 test case in piecewise
+   configuration
+
+Each reporting criterion is tested several times with different threshold/offset
+parameters. Some test scenarios also take hysteresis and time-to-trigger into
+account. Figure :ref:`fig-ue-meas-piecewise-a1-hys` depicts the effect of
+hysteresis in another example of Event A1 test.
+
+.. _fig-ue-meas-piecewise-a1-hys:
+   
+.. figure:: figures/ue-meas-piecewise-a1-hys.*
+   :scale: 80 %
+   :align: center
+
+   Measured RSRP trace of an example Event A1 with hysteresis test case in
+   piecewise configuration
+
+Piecewise configuration is used in two test suites of UE measurements. The first
+one is `lte-ue-measurements-piecewise-1`, henceforth Piecewise test #1, which
+simulates 1 UE and 1 eNodeB. The other one is `lte-ue-measurements-piecewise-2`,
+which has 1 UE and 2 eNodeBs in the simulation.
+
+Piecewise test #1 is intended to test the event-based criteria which are not
+dependent on the existence of a neighbouring cell. These criteria include Event
+A1 and A2. The other events are also briefly tested to verify that they are
+still working correctly (albeit not reporting anything) in the absence of any
+neighbouring cell. Table :ref:`tab-ue-meas-piecewise-1` below lists the
+scenarios tested in piecewise test #1. 
+
+.. _tab-ue-meas-piecewise-1:
+
+.. table:: UE measurements test scenarios using piecewise configuration #1
+
+   ====== ================== ================ ========== ===============
+   Test # Reporting Criteria Threshold/Offset Hysteresis Time-to-Trigger
+   ====== ================== ================ ========== ===============
+   1      Event A1           Low              No         No
+   2      Event A1           Normal           No         No
+   3      Event A1           Normal           No         Short
+   4      Event A1           Normal           No         Long
+   5      Event A1           Normal           No         Super
+   6      Event A1           Normal           Yes        No
+   7      Event A1           High             No         No
+   8      Event A2           Low              No         No
+   9      Event A2           Normal           No         No
+   10     Event A2           Normal           No         Short
+   11     Event A2           Normal           No         Long
+   12     Event A2           Normal           No         Super
+   13     Event A2           Normal           Yes        No
+   14     Event A2           High             No         No
+   15     Event A3           Zero             No         No
+   16     Event A4           Normal           No         No
+   17     Event A5           Normal-Normal    No         No
+   ====== ================== ================ ========== ===============
+
+Other events such as Event A3, A4, and A5 depend on measurements of neighbouring
+cell, so they are more thoroughly tested in Piecewise test #2. The simulation
+places the nodes on a straight line and instruct the UE to *"jump"* in a similar
+manner as in Piecewise test #1. Handover is disabled in the simulation, so the
+role of serving and neighbouring cells do not switch during the simulation.
+Table :ref:`tab-ue-meas-piecewise-2` below lists the scenarios tested in
+Piecewise test #2.
+
+.. _tab-ue-meas-piecewise-2:
+
+.. table:: UE measurements test scenarios using piecewise configuration #2
+
+   ====== ================== ================ ========== ===============
+   Test # Reporting Criteria Threshold/Offset Hysteresis Time-to-Trigger
+   ====== ================== ================ ========== ===============
+   1      Event A1           Low              No         No
+   2      Event A1           Normal           No         No
+   3      Event A1           Normal           Yes        No
+   4      Event A1           High             No         No
+   5      Event A2           Low              No         No
+   6      Event A2           Normal           No         No
+   7      Event A2           Normal           Yes        No
+   8      Event A2           High             No         No
+   9      Event A3           Positive         No         No
+   10     Event A3           Zero             No         No
+   11     Event A3           Zero             No         Short
+   12     Event A3           Zero             No         Super
+   13     Event A3           Zero             Yes        No
+   14     Event A3           Negative         No         No
+   15     Event A4           Low              No         No
+   16     Event A4           Normal           No         No
+   17     Event A4           Normal           No         Short
+   18     Event A4           Normal           No         Super
+   19     Event A4           Normal           Yes        No
+   20     Event A4           High             No         No
+   21     Event A5           Low-Low          No         No
+   22     Event A5           Low-Normal       No         No
+   23     Event A5           Low-High         No         No
+   24     Event A5           Normal-Low       No         No
+   25     Event A5           Normal-Normal    No         No
+   26     Event A5           Normal-Normal    No         Short
+   27     Event A5           Normal-Normal    No         Super
+   28     Event A5           Normal-Normal    Yes        No
+   29     Event A5           Normal-High      No         No
+   30     Event A5           High-Low         No         No
+   31     Event A5           High-Normal      No         No
+   32     Event A5           High-High        No         No
+   ====== ================== ================ ========== ===============
+
+One note about the tests with time-to-trigger, they are tested using 3 different
+values of time-to-trigger: *short* (shorter than report interval), *long*
+(shorter than the filter measurement period of 200 ms), and *super* (longer than
+200 ms). The first two ensure that time-to-trigger evaluation always use the
+latest measurement reports received from PHY layer. While the last one is
+responsible for verifying time-to-trigger cancellation, for example when a
+measurement report from PHY shows that the entering/leaving condition is no
+longer true before the first trigger is fired.
+
+Handover configuration
+######################
+
+The purpose of the handover configuration is to verify whether UE measurement
+configuration is updated properly after a succesful handover takes place. For
+this purpose, the simulation will construct 2 eNodeBs with different UE
+measurement configuration, and the UE will perform handover from one cell to
+another. The UE will be located on a straight line between the 2 eNodeBs, and
+the handover will be invoked manually. The duration of each simulation is
+2 seconds (except the last test case) and the handover is triggered exactly at
+halfway of simulation.
+
+The `lte-ue-measurements-handover` test suite covers various types of
+configuration differences. The first one is the difference in report interval,
+e.g. the first eNodeB is configured with 480 ms report interval, while the
+second eNodeB is configured with 240 ms report interval. Therefore, when the UE
+performed handover to the second cell, the new report interval must take effect.
+As in piecewise configuration, the timing and the content of each measurement
+report received by the eNodeB will be verified.
+
+Other types of differences covered by the test suite are differences in event
+and differences in threshold/offset. Table :ref:`tab-ue-meas-handover` below
+lists the tested scenarios. 
+
+.. _tab-ue-meas-handover:
+
+.. table:: UE measurements test scenarios using handover configuration
+
+   ====== ================ =========================== ===========================
+   Test # Test Subject     Initial Configuration       Post-Handover Configuration
+   ====== ================ =========================== ===========================
+   1      Report interval  480 ms                      240 ms
+   2      Report interval  120 ms                      640 ms
+   3      Event            Event A1                    Event A2
+   4      Event            Event A2                    Event A1
+   5      Event            Event A3                    Event A4
+   6      Event            Event A4                    Event A3
+   7      Event            Event A2                    Event A3
+   8      Event            Event A3                    Event A2
+   9      Event            Event A4                    Event A5
+   10     Event            Event A5                    Event A4
+   11     Threshold/offset RSRP range 52 (Event A1)    RSRP range 56 (Event A1)
+   12     Threshold/offset RSRP range 52 (Event A2)    RSRP range 56 (Event A2)
+   13     Threshold/offset A3 offset -30 (Event A3)    A3 offset +30 (Event A3)
+   14     Threshold/offset RSRP range 52 (Event A4)    RSRP range 56 (Event A4)
+   15     Threshold/offset RSRP range 52-52 (Event A5) RSRP range 56-56 (Event A5)
+   16     Time-to-trigger  1024 ms                     100 ms
+   17     Time-to-trigger  1024 ms                     640 ms
+   ====== ================ =========================== ===========================
 
 
 
@@ -573,24 +805,52 @@
 --------------------
 
 
-The test suite ``lte-phy-error-model`` generates different test cases for evaluating both data and control error models. For what concern the data, the test consists of nine test cases with single eNB and a various number of UEs, all having the same Radio Bearer specification. Each test is designed for evaluating the error rate perceived by a specific TB size in order to verify that it corresponds to the expected values according to the BLER generated for CB size analog to the TB size. This means that, for instance, the test will check that the performance of a TB of :math:`N` bits is analogous to the one of a a CB size of :math:`N` bits by collecting the performance of a user which has been forced the generation of a such TB size according to the distance to eNB. In order to significantly test the BLER at MAC level, we configured the Adaptive Modulation and Coding (AMC) module, the ``LteAmc`` class, for making it less robust to channel conditions by using the PiroEW2010 AMC model and configuring it to select the MCS considering a target BER of 0.03 (instead of the default value of 0.00005). We note that these values do not reflect the actual BER, since they come from an analytical bound which does not consider all the transmission chain aspects; therefore the BER and BLER actually experienced at the reception of a TB is in general different. 
-
-The parameters of the nine test cases are reported in the following:
-
- #. 4 UEs placed 1800 meters far from the eNB, which implies the use of MCS 2 (SINR of -5.51 dB) and a TB of 256 bits, that in turns produce a BLER of 0.33 (see point A in figure :ref:`fig-mcs-2-test`).
- #. 2 UEs placed 1800 meters far from the eNB, which implies the use of MCS 2 (SINR of -5.51 dB) and a TB of 528 bits, that in turns produce a BLER of 0.11 (see point B in figure :ref:`fig-mcs-2-test`).
- #. 1 UE placed 1800 meters far from the eNB, which implies the use of MCS 2 (SINR of -5.51 dB) and a TB of 1088 bits, that in turns produce a BLER of 0.02 (see point C in figure :ref:`fig-mcs-2-test`).
- #. 1 UE placed 600 meters far from the eNB, which implies the use of MCS 12 (SINR of 4.43 dB) and a TB of 4800 bits, that in turns produce a BLER of 0.3 (see point D in figure :ref:`fig-mcs-12-test`).
- #. 3 UEs placed 600 meters far from the eNB, which implies the use of MCS 12 (SINR of 4.43 dB) and a TB of 1632 bits, that in turns produce a BLER of 0.55 (see point E in figure :ref:`fig-mcs-12-test`).
- #. 1 UE placed 470 meters far from the eNB, which implies the use of MCS 16 (SINR of 8.48 dB) and a TB of 7272 bits (segmented in 2 CBs of 3648 and 3584 bits), that in turns produce a BLER of 0.14, since each CB has CBLER equal to 0.075 (see point F in figure :ref:`fig-mcs-14-test`).
-
+The test suite ``lte-phy-error-model`` generates different test cases for
+evaluating both data and control error models. For what concern the data, the
+test consists of six test cases with single eNB and a various number of UEs,
+all having the same Radio Bearer specification. Each test is designed for
+evaluating the error rate perceived by a specific TB size in order to verify
+that it corresponds to the expected values according to the BLER generated for
+CB size analog to the TB size. This means that, for instance, the test will
+check that the performance of a TB of :math:`N` bits is analogous to the one of
+a CB size of :math:`N` bits by collecting the performance of a user which has
+been forced the generation of a such TB size according to the distance to eNB.
+In order to significantly test the BLER at MAC level, we configured the Adaptive
+Modulation and Coding (AMC) module, the ``LteAmc`` class, for making it less
+robust to channel conditions by using the PiroEW2010 AMC model and configuring
+it to select the MCS considering a target BER of 0.03 (instead of the default
+value of 0.00005). We note that these values do not reflect the actual BER,
+since they come from an analytical bound which does not consider all the
+transmission chain aspects; therefore the BER and BLER actually experienced at
+the reception of a TB is in general different.
+
+The parameters of the six test cases are reported in the following:
+
+#. 4 UEs placed 1800 meters far from the eNB, which implies the use of MCS 2
+   (SINR of -5.51 dB) and a TB of 256 bits, that in turns produce a BLER of 0.33
+   (see point A in figure :ref:`fig-mcs-2-test`).
+#. 2 UEs placed 1800 meters far from the eNB, which implies the use of MCS 2
+   (SINR of -5.51 dB) and a TB of 528 bits, that in turns produce a BLER of 0.11
+   (see point B in figure :ref:`fig-mcs-2-test`).
+#. 1 UE placed 1800 meters far from the eNB, which implies the use of MCS 2
+   (SINR of -5.51 dB) and a TB of 1088 bits, that in turns produce a BLER of
+   0.02 (see point C in figure :ref:`fig-mcs-2-test`).
+#. 1 UE placed 600 meters far from the eNB, which implies the use of MCS 12
+   (SINR of 4.43 dB) and a TB of 4800 bits, that in turns produce a BLER of 0.3
+   (see point D in figure :ref:`fig-mcs-12-test`).
+#. 3 UEs placed 600 meters far from the eNB, which implies the use of MCS 12
+   (SINR of 4.43 dB) and a TB of 1632 bits, that in turns produce a BLER of 0.55
+   (see point E in figure :ref:`fig-mcs-12-test`).
+#. 1 UE placed 470 meters far from the eNB, which implies the use of MCS 16
+   (SINR of 8.48 dB) and a TB of 7272 bits (segmented in 2 CBs of 3648 and 3584
+   bits), that in turns produce a BLER of 0.14, since each CB has CBLER equal to
+   0.075 (see point F in figure :ref:`fig-mcs-14-test`).
 
 .. _fig-mcs-2-test:
 
 .. figure:: figures/MCS_2_test.*
    :align: center
 
-
    BLER for tests 1, 2, 3.
 
 .. _fig-mcs-12-test:
@@ -607,15 +867,34 @@
 
    BLER for test 6.
 
-
-The test verifies that in each case the expected number of packets received correct corresponds to a Bernoulli distribution with a confidence interval of 99%, where the probability of success in each trail is :math:`p=1-BER` and :math:`n` is the total number of packet sent.
-
-The error model of PCFICH-PDDCH channels consists of 4 test cases with a single UE and several eNBs, where the UE is connected to only one eNB in order to have the remaining acting as interfering ones. The errors on data are disabled in order to verify only the ones due to erroneous decodification of PCFICH-PDCCH. The test verifies that the error on the data received respects the decodification error probability of the PCFICH-PDCCH with a tolerance of 0.1 due to the errors that might be produced in quantizing the MI and the error curve. As before, the system has been forced on working in a less conservative fashion in the AMC module for appreciating the results in border situations. The parameters of the 4 tests cases are reported in the following:
-
- #. 2 eNBs placed 1078 meters far from the UE, which implies a SINR of -2.00 dB and a TB of 217 bits, that in turns produce a BLER of 0.007.
- #. 3 eNBs placed 1078 meters far from the UE, which implies a SINR of -4.00 dB and a TB of 217 bits, that in turns produce a BLER of 0.045.
- #. 4 eNBs placed 1078 meters far from the UE, which implies a SINR of -6.00 dB and a TB of 133 bits, that in turns produce a BLER of 0.206.
- #. 5 eNBs placed 1078 meters far from the UE, which implies a SINR of -7.00 dB and a TB of 81 bits, that in turns produce a BLER of 0.343.
+The test condition verifies that in each test case the expected number of
+packets received correctly corresponds to a Bernoulli distribution with a
+confidence interval of 99%, where the probability of success in each trail is
+:math:`p=1-BER` and :math:`n` is the total number of packets sent.
+
+The error model of PCFICH-PDCCH channels consists of 4 test cases with a single
+UE and several eNBs, where the UE is connected to only one eNB in order to have
+the remaining acting as interfering ones. The errors on data are disabled in
+order to verify only the ones due to erroneous decodification of PCFICH-PDCCH.
+As before, the system has been forced on working in a less conservative fashion
+in the AMC module for appreciating the results in border situations. The
+parameters of the 4 tests cases are reported in the following:
+
+#. 2 eNBs placed 1078 meters far from the UE, which implies a SINR of -2.00 dB
+   and a TB of 217 bits, that in turns produce a BLER of 0.007.
+#. 3 eNBs placed 1040 meters far from the UE, which implies a SINR of -4.00 dB
+   and a TB of 217 bits, that in turns produce a BLER of 0.045.
+#. 4 eNBs placed 1250 meters far from the UE, which implies a SINR of -6.00 dB
+   and a TB of 133 bits, that in turns produce a BLER of 0.206.
+#. 5 eNBs placed 1260 meters far from the UE, which implies a SINR of -7.00 dB
+   and a TB of 81 bits, that in turns produce a BLER of 0.343.
+
+The test condition verifies that in each test case the expected number
+of packets received correct corresponds to a Bernoulli distribution
+with a confidence interval of 99.8%, where the probability of success
+in each trail is :math:`p=1-BER` and :math:`n` is the total number of
+packet sent. The larger confidence interval is due to the errors that
+might be produced in quantizing the MI and the error curve.  
 
 
 HARQ Model
@@ -782,6 +1061,58 @@
 
  
 
+Initial cell selection
+----------------------
+
+The test suite `lte-cell-selection` is responsible for verifying the
+:ref:`sec-initial-cell-selection` procedure. The test is a simulation of a small 
+network of 2 non-CSG cells and 2 non-CSG cells. Several static UEs are then
+placed at predefined locations. The UEs enter the simulation without being
+attached to any cell. Initial cell selection is enabled for these UEs, so each
+UE will find the best cell and attach to it by themselves.
+
+At predefined check points time during the simulation, the test verifies that
+every UE is attached to the right cell. Moreover, the test also ensures that the
+UE is properly connected, i.e., its final state is `CONNECTED_NORMALLY`. Figure
+:ref:`fig-lte-cell-selection-scenario` depicts the network layout and the
+expected result. When a UE is depicted as having 2 successful cell selections
+(e.g., UE #3 and #4), any of them is accepted by the test case.
+
+.. _fig-lte-cell-selection-scenario:
+
+.. figure:: figures/lte-cell-selection-scenario.*
+   :scale: 80 %
+   :align: center
+
+   Sample result of cell selection test
+
+The figure shows that CSG members may attach to either CSG or non-CSG cells, and
+simply choose the stronger one. On the other hand, non-members can only attach
+to non-CSG cells, even when they are actually receiving stronger signal from a
+CSG cell.
+
+For reference purpose, Table :ref:`tab-cell-selection-error-rate` shows the
+error rate of each UE when receiving transmission from the control channel.
+Based on this information, the check point time for UE #3 is done at a later
+time than the others to compensate for its higher risk of failure.
+
+.. _tab-cell-selection-error-rate:
+
+.. table:: UE error rate in Initial Cell Selection test
+
+   ==== ==========
+   UE # Error rate
+   ==== ==========
+   1     0.00%
+   2     1.44%
+   3    12.39%
+   4     0.33%
+   5     0.00%
+   6     0.00%
+   ==== ==========
+
+The test uses the default Friis path loss model and without any channel fading
+model.
 
 
 GTP-U protocol
@@ -910,6 +1241,7 @@
 instance of this scenario defined by the following parameters:
 
  - the number of eNBs in the X-axes
+ - the number of UEs
  - the number of EPS bearers activated for the UE
  - a list of check point events to be triggered, where each event is defined by:
    + the time of the first check point event
@@ -917,9 +1249,22 @@
    + interval time between two check point events
    + the index of the UE doing the handover
    + the index of the eNB where the UE must be connected
+ - a boolean flag indicating whether UDP traffic is to be used instead of TCP traffic
+ - the type of scheduler to be used
+ - the type of handover algorithm to be used
+ - a boolean flag indicating whether handover is admitted by default 
  - a boolean flag indicating whether the ideal RRC protocol is to be used instead of the
    real RRC protocol
- - the type of scheduler to be used (RR or PF)
+
+The test suite consists of many test cases. In fact, it has been one of the most
+time-consuming test suite in ns-3. The test cases run with *some* combination of
+the following variable parameters:
+
+ - number of eNBs: 2, 3, 4;
+ - number of EPS bearers: 0, 1, 2;
+ - RRC: ideal, real (see :ref:`sec-rrc-protocol-models`);
+ - MAC scheduler: round robin, proportional fair (see :ref:`sec-ff-mac-scheduler`); and
+ - handover algorithm: A2-A4-RSRQ, strongest cell (see :ref:`sec-handover-algorithm`).
 
 Each test case passes if the following conditions are true:
 
@@ -992,3 +1337,48 @@
 computation, utilizing the fact that the handover will be delayed when this
 computation is broken. In the default simulation configuration, the handover
 delay observed because of a broken RA-RNTI computation is typically 6 ms.
+
+
+Selection of target cell in handover algorithm
+----------------------------------------------
+
+eNodeB may utilize :ref:`sec-handover-algorithm` to automatically create
+handover decisions during simulation. The decision includes the UE which should
+do the handover and the target cell where the UE should perform handover to.
+
+The test suite ``lte-handover-target`` verifies that the handover algorithm is
+making the right decision, in particular, in choosing the right target cell. It
+consists of several short test cases for different network topology (2Ã—2 grid
+and 3Ã—2 grid) and types of handover algorithm (the A2-A4-RSRQ handover algorithm
+and the strongest cell handover algorithm).
+
+Each test case is a simulation of a micro-cell environment with the following
+parameter:
+
+ - EPC is enabled
+ - several circular (isotropic antenna) micro-cell eNodeBs in a rectangular grid
+   layout, with 130 m distance between each adjacent point 
+ - 1 static UE, positioned close to and attached to the source cell
+ - no control channel error model
+ - no application installed
+ - no channel fading
+ - default path loss model (Friis)
+ - 1s simulation duration
+
+To trigger a handover, the test case "shutdowns" the source cell at +0.5s
+simulation time. Figure :ref:`fig-lte-handover-target-scenario` below
+illustrates the process. This is done by setting the source cell's Tx power to
+a very low value. As a result, the handover algorithm notices that the UE
+deserves a handover and several neighbouring cells become candidates of target
+cell at the same time.
+
+.. _fig-lte-handover-target-scenario:
+
+.. figure:: figures/lte-handover-target-scenario.*
+   :scale: 80 %
+   :align: center
+
+   ``lte-handover-target`` test scenario in a 2Ã—2 grid
+
+The test case then verifies that the handover algorithm, when faced with more
+than one options of target cells, is able to choose the right one.
diff -Naur ns-3.18.1/src/lte/doc/source/lte-user.rst ns-3.19/src/lte/doc/source/lte-user.rst
--- ns-3.18.1/src/lte/doc/source/lte-user.rst	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/doc/source/lte-user.rst	2013-12-20 09:44:51.000000000 -0800
@@ -1,9 +1,9 @@
 .. include:: replace.txt
 
 
-+++++++++++++++++++++++++++++++++
- User Documentation
-+++++++++++++++++++++++++++++++++
+++++++++++++++++++
+User Documentation
+++++++++++++++++++
 
 
 Background
@@ -39,6 +39,8 @@
 
 
 
+.. _sec-basic-simulation-program:
+
 Basic simulation program
 ------------------------
 
@@ -60,7 +62,7 @@
       // the rest of the simulation program follows
 
 
-#. Create a LteHelper object::
+#. Create an ``LteHelper`` object::
 
       Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
 
@@ -68,7 +70,7 @@
    objects (e.g., the Channel object) and provide the methods to add
    eNBs and UEs and configure them.
 
-#. Create Node objects for the eNB(s) and the UEs::
+#. Create ``Node`` objects for the eNB(s) and the UEs::
 
       NodeContainer enbNodes;
       enbNodes.Create (1);
@@ -137,8 +139,8 @@
 For how to compile and run simulation programs, please refer to [ns3tutorial]_.
 
 
-Configuration of LTE model parameters 
---------------------------------------
+Configuration of LTE model parameters
+-------------------------------------
 
 All the relevant LTE model parameters are managed through the ns-3
 attribute system. Please refer to the [ns3tutorial]_ and [ns3manual]_
@@ -261,10 +263,12 @@
      ./waf --run lena-simple --command-template="%s --PrintAttributes=ns3::LteEnbMac"
      ./waf --run lena-simple --command-template="%s --PrintAttributes=ns3::LteEnbPhy"
      ./waf --run lena-simple --command-template="%s --PrintAttributes=ns3::LteUePhy"
-     ./waf --run lena-simple --command-template="%s --PrintAttributes=ns3::EpcHelper"
+     ./waf --run lena-simple --command-template="%s --PrintAttributes=ns3::PointToPointEpcHelper"
  
 
 
+.. _sec-simulation-output:
+
 Simulation Output
 -----------------
 
@@ -382,14 +386,14 @@
   2. Cell ID
   3. unique UE ID (IMSI)
   4. RSRP
-  5. Linear average of the SINR peceived by the RBs
+  5. Linear average over all RBs of the downlink SINR in linear units
 
 The contents in the UE SINR file are:
 
   1. Simulation time in seconds at which the allocation is indicated by the scheduler
   2. Cell ID
   3. unique UE ID (IMSI)
-  4. SINR in linear units for the UE
+  4. uplink SINR in linear units for the UE
 
 In the interference filename the content is:
 
@@ -503,7 +507,7 @@
    Excerpt of the fading trace included in the simulator for an urban  scenario (speed of 3 kmph).
 
 
-Mobility Model with Buildings 
+Mobility Model with Buildings
 -----------------------------
 
 We now explain by examples how to use the buildings model (in particular, the ``MobilityBuildingInfo`` and the ``BuildingPropagationModel`` classes) in an ns-3 simulation program to setup an LTE simulation scenario that includes buildings and indoor nodes.
@@ -653,10 +657,12 @@
 with different antenna orientations to be installed on each node.
 
 
+.. _sec-radio-environment-maps:
+
 Radio Environment Maps
 ----------------------
 
-By using the class RadioEnvironmentMapHelper it is possible to output
+By using the class ``RadioEnvironmentMapHelper`` it is possible to output
 to a file a Radio Environment Map (REM), i.e., a uniform 2D grid of values
 that represent the Signal-to-noise ratio in the downlink with respect
 to the eNB that has the strongest signal at each point. 
@@ -676,9 +682,9 @@
   remHelper->SetAttribute ("Z", DoubleValue (0.0));
   remHelper->Install ();
 
-By configuring the attributes of the RadioEnvironmentMapHelper object
+By configuring the attributes of the ``RadioEnvironmentMapHelper`` object
 as shown above, you can tune the parameters of the REM to be
-generated. Note that each RadioEnvironmentMapHelper instance can
+generated. Note that each ``RadioEnvironmentMapHelper`` instance can
 generate only one REM; if you want to generate more REMs, you need to
 create one separate instance for each REM. 
 
@@ -758,6 +764,7 @@
 
 
 
+.. _sec-evolved-packet-core:
 
 Evolved Packet Core (EPC)
 -------------------------
@@ -769,11 +776,18 @@
 IPv4 over LTE, and also to connect an LTE network to any other IPv4
 network you might have in your simulation.
 
-First of all, in your simulation program you need to create two
-helpers::
+First of all, in addition to ``LteHelper`` that we already introduced
+in :ref:`sec-basic-simulation-program`, you need to use an additional
+``EpcHelper`` class, which will take care of creating the EPC entities and
+network topology. Note that you can't use ``EpcHelper`` directly, as
+it is an abstract base class; instead, you need to use one of its
+child classes, which provide different EPC topology implementations. In
+this example we will consider ``PointToPointEpcHelper``, which
+implements an EPC based on point-to-point links. To use it, you need
+first to insert this code in your simulation program::
 
   Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
-  Ptr<EpcHelper> epcHelper = CreateObject<EpcHelper> ();
+  Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper> ();
 
 Then, you need to tell the LTE helper that the EPC will be used::
 
@@ -794,11 +808,11 @@
 the default; otherwise, the attribute won't be changed (e.g., if
 you changed the default to ``RLC_AM_ALWAYS``, it won't be touched).
 
-It is to be noted that, upon construction, the EpcHelper will also
-create and configure the PGW node. Its configuration in particular
-is very complex, and hence is done automatically by the Helper. Still,
-it is allowed to access the PGW node in order to connect it to other
-IPv4 network (e.g., the internet). Here is a very simple example about
+It is to be noted that the ``EpcHelper`` will also automatically
+create the PGW node and configure it so that it can properly handle
+traffic from/to the LTE radio access network.  Still,
+you need to add some explicit code to connect the PGW to other
+IPv4 networks (e.g., the internet). Here is a very simple example about
 how to connect a single remote host to the PGW via a point-to-point
 link::
 
@@ -826,7 +840,7 @@
 
 It's important to specify routes so that the remote host can reach LTE
 UEs. One way of doing this is by exploiting the fact that the
-EpcHelper will by default assign to LTE UEs an IP address in the
+``PointToPointEpcHelper`` will by default assign to LTE UEs an IP address in the
 7.0.0.0 network. With this in mind, it suffices to do::
 
   Ipv4StaticRoutingHelper ipv4RoutingHelper;
@@ -913,74 +927,401 @@
 
 
 
-X2-based handover
------------------
+.. _sec-network-attachment:
 
-The execution of an X2-based handover between two eNBs requires the
-configuration of an X2 interface between the two eNBs. This needs to
-be done explicitly within the simulation program like this::
+Network Attachment
+------------------
 
-     lteHelper->AddX2Interface (enbNodes);
+As shown in the basic example in section :ref:`sec-basic-simulation-program`,
+attaching a UE to an eNodeB is done by calling ``LteHelper::Attach`` function.
 
-where ``enbNodes`` is a ``NodeContainer`` that contains the two eNBs
-between which the X2 interface is to be configured.
+There are 2 possible ways of network attachment. The first method is the
+*"manual"* one, while the second one has a more *"automatic"* sense on it. Each
+of them will be covered in this section.
+
+Manual attachment
+*****************
+
+This method uses the ``LteHelper::Attach`` function mentioned above. It has been
+the only available network attachment method in earlier versions of LTE module.
+It is typically invoked before the simulation begins::
+
+   lteHelper->Attach (ueDevs, enbDev); // attach one or more UEs to a single eNodeB
+
+``LteHelper::InstallEnbDevice`` and ``LteHelper::InstallUeDevice`` functions
+must have been called before attaching. In an EPC-enabled simulation, it is also
+required to have IPv4 properly pre-installed in the UE.
+
+This method is very simple, but requires you to know exactly which UE belongs to
+to which eNodeB before the simulation begins. This can be difficult when the UE
+initial position is randomly determined by the simulation script.
+
+One may choose the distance between the UE and the eNodeB as a criterion for
+selecting the appropriate cell. It is quite simple (at least from the
+simulator's point of view) and sometimes practical. But it is important to note
+that sometimes distance does not make a single correct criterion. For instance,
+the eNodeB antenna directivity should be considered as well. Besides that, one
+should also take into account the channel condition, which might be fluctuating
+if there is fading or shadowing in effect. In these kind of cases, network
+attachment should not be based on distance alone.
+
+In real life, UE will automatically evaluate certain criteria and select the
+best cell to attach to, without manual intervention from the user. Obviously
+this is not the case in this ``LteHelper::Attach`` function. The other network
+attachment method uses more *"automatic"* approach to network attachment, as
+will be described next.
+
+Automatic attachment using Idle mode cell selection procedure
+*************************************************************
+
+The strength of the received signal is the standard criterion used for selecting
+the best cell to attach to. The use of this criterion is implemented in the
+`initial cell selection` process, which can be invoked by calling another
+version of the ``LteHelper::Attach`` function, as shown below::
+
+   lteHelper->Attach (ueDevs); // attach one or more UEs to a strongest cell
+
+The difference with the manual method is that the destination eNodeB is not
+specified. The procedure will find the best cell for the UEs, based on several
+criteria, including the strength of the received signal (RSRP).
+
+After the method is called, the UE will spend some time to measure the
+neighbouring cells, and then attempt to attach to the best one. More details can
+be found in section :ref:`sec-initial-cell-selection` of the Design
+Documentation.
 
+It is important to note that this method only works in EPC-enabled simulations.
+LTE-only simulations must resort to manual attachment method.
 
-Manual handover trigger
+Closed Subscriber Group
 ***********************
 
-Handover event can be triggered "manually" within the simulation
-program by scheduling an  explicit handover event. The ``LteHelper``
-provides a convenient method for the scheduling of a handover
-event. As an example, let us assume that ``ueLteDevs``` is a
-``NetDeviceContainer`` that contains the UE that is to be handed over,
-and that ``enbLteDevs`` is another ``NetDeviceContainer`` that
-contains the source and the target eNB. Then, an handover at 0.1s can be
-scheduled like this::
+An interesting use case of the initial cell selection process is to setup a
+simulation environment with Closed Subscriber Group (CSG).
 
-     lteHelper->HandoverRequest (Seconds (0.100), 
-                                 ueLteDevs.Get (0), 
-                                 enbLteDevs.Get (0), 
-                                 enbLteDevs.Get (1));
+For example, a certain eNodeB, typically a smaller version such as femtocell,
+might belong to a private owner (e.g. a household or business), allowing access
+only to some UEs which have been previously registered by the owner. The eNodeB
+and the registered UEs altogether form a CSG.
+
+The access restriction can be simulated by "labeling" the CSG members with the
+same CSG ID. This is done through the attributes in both eNodeB and UE, for
+example using the following ``LteHelper`` functions::
+
+   // label the following eNodeBs with CSG identity of 1 and CSG indication enabled
+   lteHelper->SetEnbDeviceAttribute ("CsgId", UintegerValue (1));
+   lteHelper->SetEnbDeviceAttribute ("CsgIndication", BooleanValue (true));
 
+   // label one or more UEs with CSG identity of 1
+   lteHelper->SetUeDeviceAttribute ("CsgId", UintegerValue (1));
+   
+   // install the eNodeBs and UEs
+   NetDeviceContainer csgEnbDevs = lteHelper->InstallEnbDevice (csgEnbNodes);
+   NetDeviceContainer csgUeDevs = lteHelper->InstallUeDevice (csgUeNodes);
 
-Note that the UE needs to be already connected to the source eNB,
-otherwise the simulation will terminate with an error message.
+Then enable the initial cell selection procedure on the UEs:: 
 
+   lteHelper->Attach (csgUeDevs);
 
-Automatic handover trigger
-**************************
+This is necessary because the CSG restriction only works with automatic method
+of network attachment, but not in the manual method.
+
+Note that setting the CSG indication of an eNodeB as false (the default value)
+will disable the restriction, i.e., any UEs can connect to this eNodeB.
+
+
+
+.. _sec-configure-ue-measurements:
+
+Configure UE measurements
+-------------------------
 
-Handover procedure can be triggered "automatically" by the serving eNB of 
-the UE. It is also known as the source eNB in the handover procedure. In
-order to control when the handover procedure is initiated, you can configure
-the parameters of the handover algorithm in your simulation program 
-through the ns-3 attributes of the eNB RRC entity::
+The active UE measurement configuration in a simulation is dictated by the
+selected so called "consumers", such as handover algorithm. Users may add their
+own configuration into action, and there are several ways to do so:
 
+ #. direct configuration in eNodeB RRC entity;
+ 
+ #. configuring existing handover algorithm; and
+ 
+ #. developing a new handover algorithm.
+ 
+This section will cover the first method only. The second method is covered in
+:ref:`sec-automatic-handover`, while the third method is explained in length in
+Section :ref:`sec-handover-algorithm` of the Design Documentation.
+
+Direct configuration in eNodeB RRC works as follows. User begins by creating a
+new ``LteRrcSap::ReportConfigEutra`` instance and pass it to the
+``LteEnbRrc::AddUeMeasReportConfig`` function. The function will return the
+``measId`` (measurement identity) which is a unique reference of the
+configuration in the eNodeB instance. This function must be called before the
+simulation begins. The measurement configuration will be active in all UEs
+attached to the eNodeB throughout the duration of the simulation. During the
+simulation, user can capture the measurement reports produced by the UEs by
+listening to the existing ``LteEnbRrc::RecvMeasurementReport`` trace source.
 
-  Config::SetDefault ("ns3::LteEnbRrc::ServingCellHandoverThreshold",
-                      UintegerValue (30));
+The structure `ReportConfigEutra` is in accord with 3GPP specification.
+Definition of the structure and each member field can be found in Section 6.3.5
+of [TS36331]_.
 
-  Config::SetDefault ("ns3::LteEnbRrc::NeighbourCellHandoverOffset",
-                      UintegerValue (1));
+The code sample below configures Event A1 RSRP measurement to every eNodeB
+within the container ``devs``::
 
+   LteRrcSap::ReportConfigEutra config;        
+   config.eventId = LteRrcSap::ReportConfigEutra::EVENT_A1;
+   config.threshold1.choice = LteRrcSap::ThresholdEutra::THRESHOLD_RSRP;
+   config.threshold1.range = 41;
+   config.triggerQuantity = LteRrcSap::ReportConfigEutra::RSRP;
+   config.reportInterval = LteRrcSap::ReportConfigEutra::MS480;
+   
+   std::vector<uint8_t> measIdList;
 
-The UE measurements are used in the automatic handover algorithm. You can
-configure the parameters of the UE measurements in your simulation program
-through the ns-3 attributes of the eNB RRC entity. You can set the thresholds
-of events A2 and A4::
+   NetDeviceContainer::Iterator it;
+   for (it = devs.Begin (); it != devs.End (); it++)
+   {
+     Ptr<NetDevice> dev = *it;
+     Ptr<LteEnbNetDevice> enbDev = dev->GetObject<LteEnbNetDevice> ();
+     Ptr<LteEnbRrc> enbRrc = enbDev->GetRrc ();
+    
+     uint8_t measId = enbRrc->AddUeMeasReportConfig (config);
+     measIdList.push_back (measId); // remember the measId created
+    
+     enbRrc->TraceConnect ("RecvMeasurementReport",
+                           "context",
+                           MakeCallback (&RecvMeasurementReportCallback));
+   }
+
+Note that thresholds are expressed as range. In the example above, the range 41
+for RSRP corresponds to -100 dBm. The conversion from and to the range format is
+due to Section 9.1.4 and 9.1.7 of [TS36133]_. The ``EutranMeasurementMapping``
+class has several static functions that can be used for this purpose.
+
+The corresponding callback function would have a definition similar as below::
+
+   void
+   RecvMeasurementReportCallback (std::string context,
+                                  uint64_t imsi,
+                                  uint16_t cellId,
+                                  uint16_t rnti,
+                                  LteRrcSap::MeasurementReport measReport);
+
+This method will register the callback function as a consumer of UE
+measurements. In the case where there are more than one consumers in the
+simulation (e.g. handover algorithm), the measurements intended for other
+consumers will also be captured by this callback function. Users may utilize the
+the ``measId`` field, contained within the ``LteRrcSap::MeasurementReport``
+argument of the callback function, to tell which measurement configuration has
+triggered the report.
+
+In general, this mechanism prevents one consumer to unknowingly intervene with
+another consumer's reporting configuration.
+
+Note that only the reporting configuration part (i.e.
+``LteRrcSap::ReportConfigEutra``) of the UE measurements parameter is open for
+consumers to configure, while the other parts are kept hidden. The
+intra-frequency limitation is the main motivation behind this API implementation
+decision:
 
+ - there is only one, unambiguous and definitive *measurement object*, thus
+   there is no need to configure it;
+   
+ - *measurement identities* are kept hidden because of the fact that there is
+   one-to-one mapping between reporting configuration and measurement identity,
+   thus a new measurement identity is set up automatically when a new reporting
+   configuration is created;
 
-  Config::SetDefault ("ns3::LteEnbRrc::EventA2Threshold",
-                      UintegerValue (32));
+ - *quantity configuration* is configured elsewhere, see
+   :ref:`sec-performing-measurements`; and
+   
+ - *measurement gaps* are not supported, because it is only applicable for
+   inter-frequency settings;
 
-  Config::SetDefault ("ns3::LteEnbRrc::EventA4Threshold",
-                      UintegerValue (2));
 
 
-You can find more info about events A2 and A4 in Subsections 5.5.4.3 and 5.5.4.5
-of [TS36331]_.
+.. _sec-x2-based-handover:
 
+X2-based handover
+-----------------
+
+As defined by 3GPP, handover is a procedure for changing the serving cell of a
+UE in CONNECTED mode. The two eNodeBs involved in the process are typically
+called the *source eNodeB* and the *target eNodeB*.
+
+In order to enable the execution of X2-based handover in simulation, there are
+two requirements that must be met. Firstly, EPC must be enabled in the
+simulation (see :ref:`sec-evolved-packet-core`).
+
+Secondly, an X2 interface must be configured between the two eNodeBs, which
+needs to be done explicitly within the simulation program::
+
+   lteHelper->AddX2Interface (enbNodes);
+
+where ``enbNodes`` is a ``NodeContainer`` that contains the two eNodeBs between
+which the X2 interface is to be configured. If the container has more than two
+eNodeBs, the function will create an X2 interface between every pair of eNodeBs
+in the container.
+
+Lastly, the target eNodeB must be configured as "open" to X2 HANDOVER REQUEST.
+Every eNodeB is open by default, so no extra instruction is needed in most
+cases. However, users may set the eNodeB to "closed" by setting the boolean
+attribute ``LteEnbRrc::AdmitHandoverRequest`` to `false`. As an example, you can
+run the ``lena-x2-handover`` program and setting the attribute in this way::
+
+   NS_LOG=EpcX2:LteEnbRrc ./waf --run lena-x2-handover --command="%s --ns3::LteEnbRrc::AdmitHandoverRequest=false"
+
+After the above three requirements are fulfilled, the handover procedure can be
+triggered manually or automatically. Each will be presented in the following
+subsections.
+
+
+Manual handover trigger
+***********************
+
+Handover event can be triggered "manually" within the simulation program by
+scheduling an explicit handover event. The ``LteHelper`` object provides a
+convenient method for the scheduling of a handover event. As an example, let us
+assume that ``ueLteDevs`` is a ``NetDeviceContainer`` that contains the UE that
+is to be handed over, and that ``enbLteDevs`` is another ``NetDeviceContainer``
+that contains the source and the target eNB. Then, a handover at 0.1s can be
+scheduled like this::
+
+   lteHelper->HandoverRequest (Seconds (0.100), 
+                               ueLteDevs.Get (0), 
+                               enbLteDevs.Get (0), 
+                               enbLteDevs.Get (1));
+
+Note that the UE needs to be already connected to the source eNB, otherwise the
+simulation will terminate with an error message. 
+
+For an example with full source code, please refer to the ``lena-x2-handover``
+example program.
+
+
+.. _sec-automatic-handover:
+
+Automatic handover trigger
+**************************
+
+Handover procedure can also be triggered "automatically" by the serving eNodeB 
+of the UE. The logic behind the trigger depends on the handover algorithm
+currently active in the eNodeB RRC entity. Users may select and configure the
+handover algorithm that will be used in the simulation, which will be explained
+shortly in this section. Users may also opt to write their own implementation of
+handover algorithm, as described in Section :ref:`sec-handover-algorithm` of the
+Design Documentation.
+
+Selecting a handover algorithm is done via the ``LteHelper`` object and its
+``SetHandoverAlgorithmType`` method as shown below::
+
+   Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
+   lteHelper->SetHandoverAlgorithmType ("ns3::A2A4RsrqHandoverAlgorithm");
+ 
+The selected handover algorithm may also provide several configurable
+attributes, which can be set as follows::
+
+   lteHelper->SetHandoverAlgorithmAttribute ("ServingCellThreshold",
+                                             UintegerValue (30));
+   lteHelper->SetHandoverAlgorithmAttribute ("NeighbourCellOffset",
+                                             UintegerValue (1));
+
+Three options of handover algorithm are included in the LTE module. The
+*A2-A4-RSRQ* handover algorithm (named as ``ns3::A2A4RsrqHandoverAlgorithm``) is
+the default option, and the usage has already been shown above.
+
+Another option is the *strongest cell* handover algorithm (named as
+``ns3::A3RsrpHandoverAlgorithm``), which can be selected and configured by the
+following code::
+
+   lteHelper->SetHandoverAlgorithmType ("ns3::A3RsrpHandoverAlgorithm");
+   lteHelper->SetHandoverAlgorithmAttribute ("Hysteresis",
+                                             DoubleValue (3.0));
+   lteHelper->SetHandoverAlgorithmAttribute ("TimeToTrigger",
+                                             TimeValue (MilliSeconds (256)));
+
+The last option is a special one, called the *no-op* handover algorithm, which
+basically disables automatic handover trigger. This is useful for example in
+cases where manual handover trigger need an exclusive control of all handover
+decision. It does not have any configurable attributes. The usage is as
+follows::
+
+   lteHelper->SetHandoverAlgorithmType ("ns3::NoOpHandoverAlgorithm");
+
+For more information on each handover algorithm's decision policy and their
+attributes, please refer to their respective subsections in Section
+:ref:`sec-handover-algorithm` of the Design Documentation.
+
+Finally, the ``InstallEnbDevice`` function of ``LteHelper`` will instantiate one
+instance of the selected handover algorithm for each eNodeB device. In other
+words, make sure to select the right handover algorithm before finalizing it in
+the following line of code::
+
+   NetDeviceContainer enbLteDevs = lteHelper->InstallEnbDevice (enbNodes); 
+
+Example with full source code of using automatic handover trigger can be found
+in the ``lena-x2-handover-measures`` example program.
+
+
+.. _sec-tuning-handover-simulation:
+
+Tuning simulation with handover
+*******************************
+
+As mentioned in the Design Documentation, the current implementation of handover
+model may produce unpredicted behaviour when handover failure occurs. This
+subsection will focus on the steps that should be taken into account by users
+if they plan to use handover in their simulations.
+
+The major cause of handover failure that we will tackle is the error in
+transmitting handover-related signaling messages during the execution of a
+handover procedure. As apparent from the Figure
+:ref:`fig-x2-based-handover-seq-diagram` from the Design Documentation, there
+are many of them and they use different interfaces and protocols. For the sake
+of simplicity, we can safely assume that the X2 interface (between the source
+eNodeB and the target eNodeB) and the S1 interface (between the target eNodeB
+and the SGW/PGW) are quite stable. Therefore we will focus our attention to the
+RRC protocol (between the UE and the eNodeBs) and the Random Access procedure,
+which are normally transmitted through the air and susceptible to degradation of
+channel condition. 
+
+A general tips to reduce transmission error is to *ensure high enough SINR*
+level in every UE. This can be done by a proper planning of the network topology
+that *minimizes network coverage hole*. If the topology has a known coverage
+hole, then the UE should be configured not to venture to that area.
+
+Another approach to keep in mind is to *avoid too-late handovers*. In other
+words, handover should happen before the UE's SINR becomes too low, otherwise
+the UE may fail to receive the handover command from the source eNodeB. Handover
+algorithms have the means to control how early or late a handover decision is
+made. For example, A2-A4-RSRQ handover algorithm can be configured with a higher
+threshold to make it decide a handover earlier. Similarly, smaller hysteresis
+and/or shorter time-to-trigger in the strongest cell handover algorithm
+typically results in earlier handovers. In order to find the right values for
+these parameters, one of the factors that should be considered is the UE
+movement speed. Generally, a faster moving UE requires the handover to be
+executed earlier. Some research work have suggested recommended values, such as
+in [Lee2010]_.
+
+The above tips should be enough in normal simulation uses, but in the case some
+special needs arise then an extreme measure can be taken into consideration.
+For instance, users may consider *disabling the channel error models*. This will
+ensure that all handover-related signaling messages will be transmitted
+successfully, regardless of distance and channel condition. However, it will
+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");
+   
+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
+handover-related signaling messages are transmitted using these channels. An
+exception is when the simulation uses the ideal RRC protocol. In this case, only
+the Random Access procedure is left to be considered. The procedure consists of
+control messages, therefore we only need to disable the control channel's error
+model.
+      
+
+.. _sec-handover-traces:
 
 Handover traces
 ***************
@@ -991,76 +1332,73 @@
 handover execution phase at both the UE and eNB side. As an example,
 in your simulation program you can declare the following methods::
 
-
-  void 
-  NotifyHandoverStartUe (std::string context, 
-                         uint64_t imsi, 
-                         uint16_t cellid, 
-                         uint16_t rnti, 
-                         uint16_t targetCellId)
-  {
-    std::cout << context 
-              << " UE IMSI " << imsi 
-              << ": previously connected to CellId " << cellid 
-              << " with RNTI " << rnti 
-              << ", doing handover to CellId " << targetCellId 
-              << std::endl;
-  }
-
-  void 
-  NotifyHandoverEndOkUe (std::string context, 
-                         uint64_t imsi, 
-                         uint16_t cellid, 
-                         uint16_t rnti)
-  {
-    std::cout << context 
-              << " UE IMSI " << imsi 
-              << ": successful handover to CellId " << cellid 
-              << " with RNTI " << rnti 
-              << std::endl;
-  }
-
-  void 
-  NotifyHandoverStartEnb (std::string context, 
+   void 
+   NotifyHandoverStartUe (std::string context, 
                           uint64_t imsi, 
-                          uint16_t cellid, 
+                          uint16_t cellId, 
                           uint16_t rnti, 
                           uint16_t targetCellId)
-  {
-    std::cout << context 
-              << " eNB CellId " << cellid 
-              << ": start handover of UE with IMSI " << imsi 
-              << " RNTI " << rnti 
-              << " to CellId " << targetCellId 
-              << std::endl;
-  }
+   {
+     std::cout << Simulator::Now ().GetSeconds () << " " << context 
+               << " UE IMSI " << imsi 
+               << ": previously connected to CellId " << cellId 
+               << " with RNTI " << rnti 
+               << ", doing handover to CellId " << targetCellId 
+               << std::endl;
+   }
 
-  void 
-  NotifyHandoverEndOkEnb (std::string context, 
+   void 
+   NotifyHandoverEndOkUe (std::string context, 
                           uint64_t imsi, 
-                          uint16_t cellid, 
+                          uint16_t cellId, 
                           uint16_t rnti)
-  {
-    std::cout << context 
-              << " eNB CellId " << cellid 
-              << ": completed handover of UE with IMSI " << imsi 
-              << " RNTI " << rnti 
-              << std::endl;
-  }
-
+   {
+     std::cout << Simulator::Now ().GetSeconds () << " " << context 
+               << " UE IMSI " << imsi 
+               << ": successful handover to CellId " << cellId 
+               << " with RNTI " << rnti 
+               << std::endl;
+   }
+
+   void 
+   NotifyHandoverStartEnb (std::string context, 
+                           uint64_t imsi, 
+                           uint16_t cellId, 
+                           uint16_t rnti, 
+                           uint16_t targetCellId)
+   {
+     std::cout << Simulator::Now ().GetSeconds () << " " << context 
+               << " eNB CellId " << cellId 
+               << ": start handover of UE with IMSI " << imsi 
+               << " RNTI " << rnti 
+               << " to CellId " << targetCellId 
+               << std::endl;
+   }
+
+   void 
+   NotifyHandoverEndOkEnb (std::string context, 
+                           uint64_t imsi, 
+                           uint16_t cellId, 
+                           uint16_t rnti)
+   {
+     std::cout << Simulator::Now ().GetSeconds () << " " << context 
+               << " eNB CellId " << cellId 
+               << ": completed handover of UE with IMSI " << imsi 
+               << " RNTI " << rnti 
+               << std::endl;
+   }
 
 Then, you can hook up these methods to the corresponding trace sources
 like this::
 
-  Config::Connect ("/NodeList/*/DeviceList/*/LteEnbRrc/HandoverStart",
-                   MakeCallback (&NotifyHandoverStartEnb));
-  Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/HandoverStart",
-                   MakeCallback (&NotifyHandoverStartUe));
-  Config::Connect ("/NodeList/*/DeviceList/*/LteEnbRrc/HandoverEndOk",
-                   MakeCallback (&NotifyHandoverEndOkEnb));
-  Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/HandoverEndOk",
-                   MakeCallback (&NotifyHandoverEndOkUe));
-
+   Config::Connect ("/NodeList/*/DeviceList/*/LteEnbRrc/HandoverStart",
+                    MakeCallback (&NotifyHandoverStartEnb));
+   Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/HandoverStart",
+                    MakeCallback (&NotifyHandoverStartUe));
+   Config::Connect ("/NodeList/*/DeviceList/*/LteEnbRrc/HandoverEndOk",
+                    MakeCallback (&NotifyHandoverEndOkEnb));
+   Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/HandoverEndOk",
+                    MakeCallback (&NotifyHandoverEndOkUe));
 
 The example program ``src/lte/examples/lena-x2-handover.cc``
 illustrates how the all above instructions can be integrated in a
@@ -1075,14 +1413,6 @@
     NS_LOG=LteEnbRrc:LteUeRrc:EpcX2 ./waf --run lena-x2-handover
 
 
-Whether a target eNB will accept or not an incoming X2 HANDOVER
-REQUEST is controlled by the boolean attribute
-``LteEnbRrc::AdmitHandoverRequest`` (default: true). As an example,
-you can run the ``lena-x2-handover`` program setting the attribute to
-false in this way::
-
-   NS_LOG=EpcX2:LteEnbRrc ./waf --run lena-x2-handover 
-     --command="%s --ns3::LteEnbRrc::AdmitHandoverRequest=false"
 
 
 
@@ -1093,28 +1423,311 @@
 show how to simulate different LTE scenarios. 
 
 
+
 Reference scenarios
 -------------------
 
 There is a vast amount of reference LTE simulation scenarios which can
 be found in the literature. Here we list some of them: 
 
- * The dual stripe model [R4-092042]_, which is partially implemented
-   in the example program
-   ``src/lte/examples/lena-dual-stripe.cc``. This example program
-   features a lot of configurable parameters which can be customize by
-   changing the corresponding global variable. To get a list of all these
-   parameters, you can run this command::
-
-     ./waf --run lena-dual-stripe --command-template="%s --PrintGlobals"
-
-
-
- * The system simulation scenarios mentioned in section A.2 of [TR36814]_
-
-
+ * The system simulation scenarios mentioned in section A.2 of [TR36814]_.
 
+ * The dual stripe model [R4-092042]_, which is partially implemented in the
+   example program ``src/lte/examples/lena-dual-stripe.cc``. This example
+   program features a lot of configurable parameters which can be customized by
+   changing the corresponding global variables. To get a list of all these
+   global variables, you can run this command::
 
+     ./waf --run lena-dual-stripe --command-template="%s --PrintGlobals"
+     
+   The following subsection presents an example of running a simulation
+   campaign using this example program.
+
+
+Handover simulation campaign
+****************************
+
+In this subsection, we will demonstrate an example of running a simulation
+campaign using the LTE module of |ns3|. The objective of the campaign is to
+compare the effect of each built-in handover algorithm of the LTE module.
+
+The campaign will use the ``lena-dual-stripe`` example program. First, we have
+to modify the example program to produce the output that we need. In this
+occassion, we want to produce the number of handovers, user average throughput,
+and average SINR.
+
+The number of handovers can be obtained by counting the number of times the
+`HandoverEndOk` :ref:`sec-handover-traces` is fired. Then the user average
+throughput can be obtained by enabling the RLC :ref:`sec-simulation-output`.
+Finally, SINR can be obtained by enabling the PHY simulation output. The
+following sample code snippet shows one possible way to obtain the above::
+
+   void
+   NotifyHandoverEndOkUe (std::string context, uint64_t imsi,
+                          uint16_t cellId, uint16_t rnti)
+   {
+     std::cout << "Handover IMSI " << imsi << std::endl;
+   }
+
+   int
+   main (int argc, char *argv[])
+   {
+     /*** SNIP ***/
+
+     Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/HandoverEndOk",
+                      MakeCallback (&NotifyHandoverEndOkUe));
+
+     lteHelper->EnablePhyTraces ();
+     lteHelper->EnableRlcTraces ();
+     Ptr<RadioBearerStatsCalculator> rlcStats = lteHelper->GetRlcStats ();
+     rlcStats->SetAttribute ("StartTime", TimeValue (Seconds (0)));
+     rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (simTime)));
+
+     Simulator::Run ();
+     Simulator::Destroy ();
+     return 0;
+   }
+
+Then we have to configure the parameters of the program to suit our simulation
+needs. We are looking for the following assumptions in our simulation:
+
+ * 7 sites of tri-sectored macro eNodeBs (i.e. 21 macrocells) deployed in
+   hexagonal layout with 500 m inter-site distance.
+
+ * Although ``lena-dual-stripe`` is originally intended for a two-tier
+   (macrocell and femtocell) simulation, we will simplify our simulation to
+   one-tier (macrocell) simulation only.
+
+ * UEs are randomly distributed around the sites and attach to the network
+   automatically using Idle mode cell selection. After that, UE will roam the
+   simulation environment with 60 kmph movement speed.
+
+ * 50 seconds simulation duration, so UEs would have traveled far enough to
+   trigger some handovers.
+
+ * 46 dBm macrocell Tx power and 10 dBm UE Tx power.
+
+ * EPC mode will be used because the X2 handover procedure requires it to be
+   enabled.
+
+ * Full-buffer downlink and uplink traffic, both in 5 MHz bandwidth, using TCP
+   protocol and Proportional Fair scheduler.
+
+ * Ideal RRC protocol.
+
+Table :ref:`tab-handover-campaign-program-parameter` below shows how we
+configure the parameters of ``lena-dual-stripe`` to achieve the above
+assumptions.
+
+.. _tab-handover-campaign-program-parameter:
+
+.. table:: ``lena-dual-stripe`` parameter configuration for handover campaign
+
+   ================== ========== ===============================================
+   Parameter name     Value      Description
+   ================== ========== ===============================================
+   simTime            50         50 seconds simulation duration
+   nBlocks            0          Disabling apartment buildings and femtocells
+   nMacroEnbSites     7          Number of macrocell sites (each site has 3
+                                 cells)
+   nMacroEnbSitesX    2          The macrocell sites will be positioned in a
+                                 2-3-2 formation
+   interSiteDistance  500        500 m distance between adjacent macrocell sites
+   macroEnbTxPowerDbm 46         46 dBm Tx power for each macrocell
+   epc                1          Enable EPC mode
+   epcDl              1          Enable full-buffer DL traffic
+   epcUl              1          Enable full-buffer UL traffic
+   useUdp             0          Disable UDP traffic and enable TCP instead
+   macroUeDensity     0.00002    Determines number of UEs (translates to 48 UEs
+                                 in our simulation)
+   outdoorUeMinSpeed  16.6667    Minimum UE movement speed in m/s (60 kmph)
+   outdoorUeMaxSpeed  16.6667    Maximum UE movement speed in m/s (60 kmph)
+   macroEnbBandwidth  25         5 MHz DL and UL bandwidth
+   generateRem        1          (Optional) For plotting the Radio Environment
+                                 Map
+   ================== ========== ===============================================
+
+Some of the required assumptions are not available as parameters of
+``lena-dual-stripe``. In this case, we override the default attributes, as
+shown in Table :ref:`tab-handover-campaign-default-values` below.
+
+.. _tab-handover-campaign-default-values:
+
+.. table:: Overriding default attributes for handover campaign
+
+   ==================================================== ================================== ==============================================
+   Default value name                                   Value                              Description
+   ==================================================== ================================== ==============================================
+   ns3::LteHelper::HandoverAlgorithm                    `ns3::NoOpHandoverAlgorithm`,      Choice of handover algorithm
+                                                        `ns3::A3RsrpHandoverAlgorithm`, or
+                                                        `ns3::A2A4RsrqHandoverAlgorithm`
+   ns3::LteHelper::Scheduler                            `ns3::PfFfMacScheduler`            Proportional Fair scheduler
+   ns3::LteHelper::UseIdealRrc                           1                                 Ideal RRC protocol
+   ns3::RadioBearerStatsCalculator::DlRlcOutputFilename `<run>`-DlRlcStats.txt             File name for DL RLC trace output
+   ns3::RadioBearerStatsCalculator::UlRlcOutputFilename `<run>`-UlRlcStats.txt             File name for UL RLC trace output
+   ns3::PhyStatsCalculator::DlRsrpSinrFilename          `<run>`-DlRsrpSinrStats.txt        File name for DL PHY RSRP/SINR trace output
+   ns3::PhyStatsCalculator::UlSinrFilename              `<run>`-UlSinrStats.txt            File name for UL PHY SINR trace output
+   ==================================================== ================================== ==============================================
+
+|ns3| provides many ways for passing configuration values into a simulation. In
+this example, we will use the command line arguments. It is basically done by
+appending the parameters and their values to the ``waf`` call when starting each
+individual simulation. So the ``waf`` calls for invoking our 3 simulations would
+look as below::
+
+   $ ./waf --run="lena-dual-stripe
+     --simTime=50 --nBlocks=0 --nMacroEnbSites=7 --nMacroEnbSitesX=2
+     --epc=1 --useUdp=0 --outdoorUeMinSpeed=16.6667 --outdoorUeMaxSpeed=16.6667
+     --ns3::LteHelper::HandoverAlgorithm=ns3::NoOpHandoverAlgorithm
+     --ns3::RadioBearerStatsCalculator::DlRlcOutputFilename=no-op-DlRlcStats.txt
+     --ns3::RadioBearerStatsCalculator::UlRlcOutputFilename=no-op-UlRlcStats.txt
+     --ns3::PhyStatsCalculator::DlRsrpSinrFilename=no-op-DlRsrpSinrStats.txt
+     --ns3::PhyStatsCalculator::UlSinrFilename=no-op-UlSinrStats.txt
+     --RngRun=1" > no-op.txt
+
+   $ ./waf --run="lena-dual-stripe
+     --simTime=50 --nBlocks=0 --nMacroEnbSites=7 --nMacroEnbSitesX=2
+     --epc=1 --useUdp=0 --outdoorUeMinSpeed=16.6667 --outdoorUeMaxSpeed=16.6667
+     --ns3::LteHelper::HandoverAlgorithm=ns3::A3RsrpHandoverAlgorithm
+     --ns3::RadioBearerStatsCalculator::DlRlcOutputFilename=a3-rsrp-DlRlcStats.txt
+     --ns3::RadioBearerStatsCalculator::UlRlcOutputFilename=a3-rsrp-UlRlcStats.txt
+     --ns3::PhyStatsCalculator::DlRsrpSinrFilename=a3-rsrp-DlRsrpSinrStats.txt
+     --ns3::PhyStatsCalculator::UlSinrFilename=a3-rsrp-UlSinrStats.txt
+     --RngRun=1" > a3-rsrp.txt
+
+   $ ./waf --run="lena-dual-stripe
+     --simTime=50 --nBlocks=0 --nMacroEnbSites=7 --nMacroEnbSitesX=2
+     --epc=1 --useUdp=0 --outdoorUeMinSpeed=16.6667 --outdoorUeMaxSpeed=16.6667
+     --ns3::LteHelper::HandoverAlgorithm=ns3::A2A4RsrqHandoverAlgorithm
+     --ns3::RadioBearerStatsCalculator::DlRlcOutputFilename=a2-a4-rsrq-DlRlcStats.txt
+     --ns3::RadioBearerStatsCalculator::UlRlcOutputFilename=a2-a4-rsrq-UlRlcStats.txt
+     --ns3::PhyStatsCalculator::DlRsrpSinrFilename=a2-a4-rsrq-DlRsrpSinrStats.txt
+     --ns3::PhyStatsCalculator::UlSinrFilename=a2-a4-rsrq-UlSinrStats.txt
+     --RngRun=1" > a2-a4-rsrq.txt
+
+Some notes on the execution:
+
+ * Notice that some arguments are not specified because they are already the
+   same as the default values. We also keep the handover algorithms on each own
+   default settings.
+
+ * Note the file names of simulation output, e.g. RLC traces and PHY traces,
+   because we have to make sure that they are not overwritten by the next
+   simulation run. In this example, we specify the names one by one using the
+   command line arguments.
+
+ * The ``--RngRun=1`` argument at the end is used for setting the run number
+   used by the random number generator used in the simulation. We re-run the
+   same simulations with different `RngRun` values, hence creating several
+   independent replications of the same simulations. Then we average the
+   results obtained from these replications to achieve some statistical
+   confidence.
+
+ * We can add a ``--generateRem=1`` argument to generate the files necessary for
+   generating the Radio Environment Map (REM) of the simulation. The result is
+   Figure :ref:`fig-lte-handover-campaign-rem` below, which can be produced by
+   following the steps described in Section :ref:`sec-radio-environment-maps`.
+   This figure also shows the position of eNodeBs and UEs at the beginning of a
+   simulation using ``RngRun = 1``. Other values of `RngRun` may produce
+   different UE position.
+   
+.. _fig-lte-handover-campaign-rem:
 
+.. figure:: figures/lte-handover-campaign-rem.*
+   :align: center
 
+   REM obtained from a simulation in handover campaign
 
+After hours of running, the simulation campaign will eventually end. Next we
+will perform some post-processing on the produced simulation output to obtain
+meaningful information out of it.
+
+In this example, we use GNU Octave to assist the processing of throughput and
+SINR data, as demonstrated in a sample GNU Octave script below::
+
+   % RxBytes is the 10th column
+   DlRxBytes = load ("no-op-DlRlcStats.txt") (:,10);
+   DlAverageThroughputKbps = sum (DlRxBytes) * 8 / 1000 / 50
+
+   % RxBytes is the 10th column
+   UlRxBytes = load ("no-op-UlRlcStats.txt") (:,10);
+   UlAverageThroughputKbps = sum (UlRxBytes) * 8 / 1000 / 50
+
+   % Sinr is the 6th column
+   DlSinr = load ("no-op-DlRsrpSinrStats.txt") (:,6);
+   % eliminate NaN values
+   idx = isnan (DlSinr);
+   DlSinr (idx) = 0;
+   DlAverageSinrDb = 10 * log10 (mean (DlSinr)) % convert to dB
+
+   % Sinr is the 5th column
+   UlSinr = load ("no-op-UlSinrStats.txt") (:,5);
+   % eliminate NaN values
+   idx = isnan (UlSinr);
+   UlSinr (idx) = 0;
+   UlAverageSinrDb = 10 * log10 (mean (UlSinr)) % convert to dB
+
+As for the number of handovers, we can use simple shell scripting to count the
+number of occurrences of string "Handover" in the log file::
+
+   $ grep "Handover" no-op.txt | wc -l
+
+Table :ref:`tab-handover-campaign-results` below shows the complete statistics
+after we are done with post-processing on every individual simulation run. The
+values shown are the average of the results obtained from ``RngRun`` of 1, 2, 3,
+and 4.
+
+.. _tab-handover-campaign-results:
+
+.. table:: Results of handover campaign
+
+   ===================================== ========== =========== ==============
+   Statistics                            No-op      A2-A4-RSRQ  Strongest cell
+   ===================================== ========== =========== ==============
+   Average DL system throughput          6 615 kbps 20 509 kbps 19 709 kbps
+   Average UL system throughput          4 095 kbps 5 705 kbps  6 627 kbps
+   Average DL SINR                       -0.10 dB   5.19 dB     5.24 dB
+   Average UL SINR                       9.54 dB    81.57 dB    79.65 dB
+   Number of handovers per UE per second 0          0.05694     0.04771
+   ===================================== ========== =========== ==============
+
+.. Below are the detailed datasheets from the campaign, for informational
+   purpose, but hidden from the published document.
+
+.. ======================= ========== ========== ========== ========== =======
+   NoOp                    RngRun = 1 RngRun = 2 RngRun = 3 RngRun = 4 Average
+   ======================= ========== ========== ========== ========== =======
+   DlAverageThroughputKbps 8 476      4 478      6 913      6 593      6 615
+   UlAverageThroughputKbps 4 923      2 962      4 715      3 779      4 095
+   DlAverageSinrDb         0.40       -0.99      0.84       -0.64      -0.10
+   UlAverageSinrDb         7.93       8.06       12.52      9.65       9.54
+   NumHandoverPerUePerSec  0          0          0          0          0
+   ======================= ========== ========== ========== ========== =======
+
+.. ======================= ========== ========== ========== ========== =======
+   A2A4Rsrq                RngRun = 1 RngRun = 2 RngRun = 3 RngRun = 4 Average
+   ======================= ========== ========== ========== ========== =======
+   DlAverageThroughputKbps 21 575     18 500     n/a        21 451     20 509
+   UlAverageThroughputKbps 6 039      5 320      n/a        5 757      5 705
+   DlAverageSinrDb         5.31       5.16       n/a        5.09       5.19
+   UlAverageSinrDb         84.17      79.18      n/a        81.37      81.57
+   NumHandoverPerUePerSec  0.05458    0.06000    n/a        0.05625    0.05694
+   ======================= ========== ========== ========== ========== =======
+   RngRun = 3 simulation got a segmentation fault as around +15.2s. The cause is
+   unknown at the moment.
+
+.. ======================= ========== ========== ========== ========== =======
+   A3Rsrp                  RngRun = 1 RngRun = 2 RngRun = 3 RngRun = 4 Average
+   ======================= ========== ========== ========== ========== =======
+   DlAverageThroughputKbps 20 349     17 781     20 229     20 478     19 709
+   UlAverageThroughputKbps 6 491      6 397      7 555      6 064      6 627
+   DlAverageSinrDb         5.24       5.08       5.63       5.01       5.24
+   UlAverageSinrDb         83.62      81.94      78.84      74.19      79.65
+   NumHandoverPerUePerSec  0.04625    0.04917    0.04958    0.04583    0.04771
+   ======================= ========== ========== ========== ========== =======
+
+The results show that having a handover algorithm in a mobility simulation
+improves both user throughput and SINR significantly. There is little difference
+between the two handover algorithms in this campaign scenario. It would be
+interesting to see their performance in different scenarios, such as scenarios
+with home eNodeBs deployment.
diff -Naur ns-3.18.1/src/lte/examples/lena-dual-stripe.cc ns-3.19/src/lte/examples/lena-dual-stripe.cc
--- ns-3.18.1/src/lte/examples/lena-dual-stripe.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/examples/lena-dual-stripe.cc	2013-12-20 09:44:51.000000000 -0800
@@ -55,7 +55,7 @@
   FemtocellBlockAllocator (Box area, uint32_t nApartmentsX, uint32_t nFloors);
   void Create (uint32_t n);
   void Create ();
-  
+
 private:
   bool OverlapsWithAnyPrevious (Box);
   Box m_area;
@@ -66,7 +66,7 @@
   double m_ySize;
   Ptr<UniformRandomVariable> m_xMinVar;
   Ptr<UniformRandomVariable> m_yMinVar;
-  
+
 };
 
 FemtocellBlockAllocator::FemtocellBlockAllocator (Box area, uint32_t nApartmentsX, uint32_t nFloors)
@@ -76,12 +76,12 @@
     m_xSize (nApartmentsX*10 + 20),
     m_ySize (70)
 {
-    m_xMinVar = CreateObject<UniformRandomVariable> ();
-    m_xMinVar->SetAttribute ("Min", DoubleValue (area.xMin));
-    m_xMinVar->SetAttribute ("Max", DoubleValue (area.xMax - m_xSize));
-    m_yMinVar = CreateObject<UniformRandomVariable> ();
-    m_yMinVar->SetAttribute ("Min", DoubleValue (area.yMin));
-    m_yMinVar->SetAttribute ("Max", DoubleValue (area.yMax - m_ySize));
+  m_xMinVar = CreateObject<UniformRandomVariable> ();
+  m_xMinVar->SetAttribute ("Min", DoubleValue (area.xMin));
+  m_xMinVar->SetAttribute ("Max", DoubleValue (area.xMax - m_xSize));
+  m_yMinVar = CreateObject<UniformRandomVariable> ();
+  m_yMinVar->SetAttribute ("Min", DoubleValue (area.yMin));
+  m_yMinVar->SetAttribute ("Max", DoubleValue (area.yMax - m_ySize));
 }
 
 void 
@@ -104,7 +104,7 @@
       box.xMin = m_xMinVar->GetValue ();
       box.xMax = box.xMin + m_xSize;
       box.yMin = m_yMinVar->GetValue ();
-      box.yMax = box.yMin + m_ySize;      
+      box.yMax = box.yMin + m_ySize;
       ++attempt;
     }
   while (OverlapsWithAnyPrevious (box));
@@ -156,7 +156,7 @@
       ++index;
       Box box = (*it)->GetBoundaries ();
       outFile << "set object " << index
-              << " rect from " << box.xMin  << "," << box.yMin  
+              << " rect from " << box.xMin  << "," << box.yMin
               << " to "   << box.xMax  << "," << box.yMax
               << " front fs empty "
               << std::endl;
@@ -184,7 +184,7 @@
             {
               Vector pos = node->GetObject<MobilityModel> ()->GetPosition ();
               outFile << "set label \"" << uedev->GetImsi ()
-                      << "\" at "<< pos.x << "," << pos.y << " left font \"Helvetica,4\" textcolor rgb \"grey\" front point pt 1 ps 0.3 lc rgb \"grey\" offset 0,0"  
+                      << "\" at "<< pos.x << "," << pos.y << " left font \"Helvetica,4\" textcolor rgb \"grey\" front point pt 1 ps 0.3 lc rgb \"grey\" offset 0,0"
                       << std::endl;
             }
         }
@@ -212,7 +212,8 @@
             {
               Vector pos = node->GetObject<MobilityModel> ()->GetPosition ();
               outFile << "set label \"" << enbdev->GetCellId ()
-                      << "\" at "<< pos.x << "," << pos.y << " left font \"Helvetica,4\" textcolor rgb \"white\" front  point pt 2 ps 0.3 lc rgb \"white\" offset 0,0"  
+                      << "\" at "<< pos.x << "," << pos.y
+                      << " left font \"Helvetica,4\" textcolor rgb \"white\" front  point pt 2 ps 0.3 lc rgb \"white\" offset 0,0"
                       << std::endl;
             }
         }
@@ -220,133 +221,131 @@
 }
 
 
-static ns3::GlobalValue g_nBlocks ("nBlocks", 
-                                   "Number of femtocell blocks", 
+static ns3::GlobalValue g_nBlocks ("nBlocks",
+                                   "Number of femtocell blocks",
                                    ns3::UintegerValue (1),
                                    ns3::MakeUintegerChecker<uint32_t> ());
-static ns3::GlobalValue g_nApartmentsX ("nApartmentsX", 
-                                        "Number of apartments along the X axis in a femtocell block",  
+static ns3::GlobalValue g_nApartmentsX ("nApartmentsX",
+                                        "Number of apartments along the X axis in a femtocell block",
                                         ns3::UintegerValue (10),
                                         ns3::MakeUintegerChecker<uint32_t> ());
-static ns3::GlobalValue g_nFloors ("nFloors", 
-                                   "Number of floors",  
+static ns3::GlobalValue g_nFloors ("nFloors",
+                                   "Number of floors",
                                    ns3::UintegerValue (1),
                                    ns3::MakeUintegerChecker<uint32_t> ());
-static ns3::GlobalValue g_nMacroEnbSites ("nMacroEnbSites", 
-                                          "How many macro sites there are",  
+static ns3::GlobalValue g_nMacroEnbSites ("nMacroEnbSites",
+                                          "How many macro sites there are",
                                           ns3::UintegerValue (3),
                                           ns3::MakeUintegerChecker<uint32_t> ());
-static ns3::GlobalValue g_nMacroEnbSitesX ("nMacroEnbSitesX", 
-                                           "(minimum) number of sites along the X-axis of the hex grid",  
+static ns3::GlobalValue g_nMacroEnbSitesX ("nMacroEnbSitesX",
+                                           "(minimum) number of sites along the X-axis of the hex grid",
                                            ns3::UintegerValue (1),
                                            ns3::MakeUintegerChecker<uint32_t> ());
-static ns3::GlobalValue g_interSiteDistance ("interSiteDistance", 
-                                             "min distance between two nearby macro cell sites",  
+static ns3::GlobalValue g_interSiteDistance ("interSiteDistance",
+                                             "min distance between two nearby macro cell sites",
                                              ns3::DoubleValue (500),
                                              ns3::MakeDoubleChecker<double> ());
-static ns3::GlobalValue g_areaMarginFactor ("areaMarginFactor", 
+static ns3::GlobalValue g_areaMarginFactor ("areaMarginFactor",
                                             "how much the UE area extends outside the macrocell grid, "
-                                            "expressed as fraction of the interSiteDistance",   
+                                            "expressed as fraction of the interSiteDistance",
                                             ns3::DoubleValue (0.5),
                                             ns3::MakeDoubleChecker<double> ());
-static ns3::GlobalValue g_macroUeDensity ("macroUeDensity", 
-                                          "How many macrocell UEs there are per square meter",   
+static ns3::GlobalValue g_macroUeDensity ("macroUeDensity",
+                                          "How many macrocell UEs there are per square meter",
                                           ns3::DoubleValue (0.00002),
                                           ns3::MakeDoubleChecker<double> ());
-static ns3::GlobalValue g_homeEnbDeploymentRatio ("homeEnbDeploymentRatio", 
-                                                  "The HeNB deployment ratio as per 3GPP R4-092042",   
+static ns3::GlobalValue g_homeEnbDeploymentRatio ("homeEnbDeploymentRatio",
+                                                  "The HeNB deployment ratio as per 3GPP R4-092042",
                                                   ns3::DoubleValue (0.2),
                                                   ns3::MakeDoubleChecker<double> ());
-static ns3::GlobalValue g_homeEnbActivationRatio ("homeEnbActivationRatio", 
-                                                  "The HeNB activation ratio as per 3GPP R4-092042",   
+static ns3::GlobalValue g_homeEnbActivationRatio ("homeEnbActivationRatio",
+                                                  "The HeNB activation ratio as per 3GPP R4-092042",
                                                   ns3::DoubleValue (0.5),
                                                   ns3::MakeDoubleChecker<double> ());
-static ns3::GlobalValue g_homeUesHomeEnbRatio ("homeUesHomeEnbRatio", 
-                                               "How many (on average) home UEs per HeNB there are in the simulation",         
+static ns3::GlobalValue g_homeUesHomeEnbRatio ("homeUesHomeEnbRatio",
+                                               "How many (on average) home UEs per HeNB there are in the simulation",
                                                ns3::DoubleValue (1.0),
                                                ns3::MakeDoubleChecker<double> ());
-static ns3::GlobalValue g_macroEnbTxPowerDbm ("macroEnbTxPowerDbm", 
-                                              "TX power [dBm] used by macro eNBs",   
+static ns3::GlobalValue g_macroEnbTxPowerDbm ("macroEnbTxPowerDbm",
+                                              "TX power [dBm] used by macro eNBs",
                                               ns3::DoubleValue (46.0),
                                               ns3::MakeDoubleChecker<double> ());
-static ns3::GlobalValue g_homeEnbTxPowerDbm ("homeEnbTxPowerDbm", 
-                                             "TX power [dBm] used by HeNBs",   
+static ns3::GlobalValue g_homeEnbTxPowerDbm ("homeEnbTxPowerDbm",
+                                             "TX power [dBm] used by HeNBs",
                                              ns3::DoubleValue (20.0),
                                              ns3::MakeDoubleChecker<double> ());
-static ns3::GlobalValue g_macroEnbDlEarfcn ("macroEnbDlEarfcn", 
-                                            "DL EARFCN used by macro eNBs", 
+static ns3::GlobalValue g_macroEnbDlEarfcn ("macroEnbDlEarfcn",
+                                            "DL EARFCN used by macro eNBs",
                                             ns3::UintegerValue (100),
                                             ns3::MakeUintegerChecker<uint16_t> ());
-static ns3::GlobalValue g_homeEnbDlEarfcn ("homeEnbDlEarfcn", 
-                                           "DL EARFCN used by HeNBs",  
+static ns3::GlobalValue g_homeEnbDlEarfcn ("homeEnbDlEarfcn",
+                                           "DL EARFCN used by HeNBs",
                                            ns3::UintegerValue (100),
                                            ns3::MakeUintegerChecker<uint16_t> ());
-static ns3::GlobalValue g_macroEnbBandwidth ("macroEnbBandwidth", 
-                                             "bandwidth [num RBs] used by macro eNBs",  
+static ns3::GlobalValue g_macroEnbBandwidth ("macroEnbBandwidth",
+                                             "bandwidth [num RBs] used by macro eNBs",
                                              ns3::UintegerValue (25),
                                              ns3::MakeUintegerChecker<uint16_t> ());
-static ns3::GlobalValue g_homeEnbBandwidth ("homeEnbBandwidth", 
-                                            "bandwidth [num RBs] used by HeNBs",  
+static ns3::GlobalValue g_homeEnbBandwidth ("homeEnbBandwidth",
+                                            "bandwidth [num RBs] used by HeNBs",
                                             ns3::UintegerValue (25),
                                             ns3::MakeUintegerChecker<uint16_t> ());
-static ns3::GlobalValue g_simTime ("simTime", 
-                                   "Total duration of the simulation [s]",  
+static ns3::GlobalValue g_simTime ("simTime",
+                                   "Total duration of the simulation [s]",
                                    ns3::DoubleValue (0.25),
                                    ns3::MakeDoubleChecker<double> ());
-static ns3::GlobalValue g_generateRem ("generateRem", 
+static ns3::GlobalValue g_generateRem ("generateRem",
                                        "if true, will generate a REM and then abort the simulation;"
-                                       "if false, will run the simulation normally (without generating any REM)",  
+                                       "if false, will run the simulation normally (without generating any REM)",
                                        ns3::BooleanValue (false),
                                        ns3::MakeBooleanChecker ());
-static ns3::GlobalValue g_epc ("epc", 
+static ns3::GlobalValue g_epc ("epc",
                                "If true, will setup the EPC to simulate an end-to-end topology, "
                                "with real IP applications over PDCP and RLC UM (or RLC AM by changing "
                                "the default value of EpsBearerToRlcMapping e.g. to RLC_AM_ALWAYS). "
-                               "If false, only the LTE radio access will be simulated with RLC SM. ",  
+                               "If false, only the LTE radio access will be simulated with RLC SM. ",
                                ns3::BooleanValue (false),
                                ns3::MakeBooleanChecker ());
-static ns3::GlobalValue g_epcDl ("epcDl", 
+static ns3::GlobalValue g_epcDl ("epcDl",
                                  "if true, will activate data flows in the downlink when EPC is being used. "
                                  "If false, downlink flows won't be activated. "
-                                 "If EPC is not used, this parameter will be ignored.",  
+                                 "If EPC is not used, this parameter will be ignored.",
                                  ns3::BooleanValue (true),
                                  ns3::MakeBooleanChecker ());
-static ns3::GlobalValue g_epcUl ("epcUl", 
+static ns3::GlobalValue g_epcUl ("epcUl",
                                  "if true, will activate data flows in the uplink when EPC is being used. "
                                  "If false, uplink flows won't be activated. "
-                                 "If EPC is not used, this parameter will be ignored.",  
+                                 "If EPC is not used, this parameter will be ignored.",
                                  ns3::BooleanValue (true),
                                  ns3::MakeBooleanChecker ());
-static ns3::GlobalValue g_useUdp ("useUdp", 
+static ns3::GlobalValue g_useUdp ("useUdp",
                                   "if true, the UdpClient application will be used. "
                                   "Otherwise, the BulkSend application will be used over a TCP connection. "
-                                  "If EPC is not used, this parameter will be ignored.",  
+                                  "If EPC is not used, this parameter will be ignored.",
                                   ns3::BooleanValue (true),
                                   ns3::MakeBooleanChecker ());
-static ns3::GlobalValue g_fadingTrace ("fadingTrace", 
-                                           "The path of the fading trace (by default no fading trace "
-                                           "is loaded, i.e., fading is not considered)",  
-                                           ns3::StringValue (""),
-                                           ns3::MakeStringChecker ());
+static ns3::GlobalValue g_fadingTrace ("fadingTrace",
+                                       "The path of the fading trace (by default no fading trace "
+                                       "is loaded, i.e., fading is not considered)",
+                                       ns3::StringValue (""),
+                                       ns3::MakeStringChecker ());
 static ns3::GlobalValue g_numBearersPerUe ("numBearersPerUe",
-                                               "How many bearers per UE there are in the simulation",
-                                               ns3::UintegerValue (1),
-                                               ns3::MakeUintegerChecker<uint16_t> ());
-
+                                           "How many bearers per UE there are in the simulation",
+                                           ns3::UintegerValue (1),
+                                           ns3::MakeUintegerChecker<uint16_t> ());
 static ns3::GlobalValue g_srsPeriodicity ("srsPeriodicity",
-                                               "SRS Periodicity (has to be at least greater than the number of UEs per eNB)",
-                                               ns3::UintegerValue (80),
-                                               ns3::MakeUintegerChecker<uint16_t> ());
-
+                                          "SRS Periodicity (has to be at least "
+                                          "greater than the number of UEs per eNB)",
+                                          ns3::UintegerValue (80),
+                                          ns3::MakeUintegerChecker<uint16_t> ());
 static ns3::GlobalValue g_outdoorUeMinSpeed ("outdoorUeMinSpeed",
-                                   "Minimum speed value of macor UE with random waypoint model [m/s].",
-                                   ns3::DoubleValue (0.0),
-                                   ns3::MakeDoubleChecker<double> ());
-
+                                             "Minimum speed value of macor UE with random waypoint model [m/s].",
+                                             ns3::DoubleValue (0.0),
+                                             ns3::MakeDoubleChecker<double> ());
 static ns3::GlobalValue g_outdoorUeMaxSpeed ("outdoorUeMaxSpeed",
-                                   "Maximum speed value of macor UE with random waypoint model [m/s].",
-                                   ns3::DoubleValue (0.0),
-                                   ns3::MakeDoubleChecker<double> ());
+                                             "Maximum speed value of macor UE with random waypoint model [m/s].",
+                                             ns3::DoubleValue (0.0),
+                                             ns3::MakeDoubleChecker<double> ());
 
 int
 main (int argc, char *argv[])
@@ -427,7 +426,7 @@
   GlobalValue::GetValueByName ("outdoorUeMaxSpeed", doubleValue);
   uint16_t outdoorUeMaxSpeed = doubleValue.Get ();
 
-  Config::SetDefault ("ns3::LteEnbRrc::SrsPeriodicity", UintegerValue(srsPeriodicity));
+  Config::SetDefault ("ns3::LteEnbRrc::SrsPeriodicity", UintegerValue (srsPeriodicity));
 
   Box macroUeBox;
   double ueZ = 1.5;
@@ -447,7 +446,7 @@
       macroUeBox = Box (-areaMarginFactor*interSiteDistance, 
                         (nMacroEnbSitesX + areaMarginFactor)*interSiteDistance, 
                         -areaMarginFactor*interSiteDistance, 
-                        (nMacroEnbSitesY -1)*interSiteDistance*sqrt(0.75) + areaMarginFactor*interSiteDistance,
+                        (nMacroEnbSitesY -1)*interSiteDistance*sqrt (0.75) + areaMarginFactor*interSiteDistance,
                         ueZ, ueZ);
     }
   else
@@ -455,7 +454,7 @@
       // still need the box to place femtocell blocks
       macroUeBox = Box (0, 150, 0, 150, ueZ, ueZ);
     }
-  
+
   FemtocellBlockAllocator blockAllocator (macroUeBox, nApartmentsX, nFloors);
   blockAllocator.Create (nBlocks);
 
@@ -465,9 +464,9 @@
   uint32_t nHomeUes = round (nHomeEnbs * homeUesHomeEnbRatio);
   NS_LOG_LOGIC ("nHomeUes = " << nHomeUes);
   double macroUeAreaSize = (macroUeBox.xMax - macroUeBox.xMin) * (macroUeBox.yMax - macroUeBox.yMin);
-  uint32_t nMacroUes = round (macroUeAreaSize * macroUeDensity) ;
+  uint32_t nMacroUes = round (macroUeAreaSize * macroUeDensity);
   NS_LOG_LOGIC ("nMacroUes = " << nMacroUes << " (density=" << macroUeDensity << ")");
-  
+
   NodeContainer homeEnbs;
   homeEnbs.Create (nHomeEnbs);
   NodeContainer macroEnbs;
@@ -492,23 +491,23 @@
 
 //   lteHelper->EnableLogComponents ();
 //   LogComponentEnable ("PfFfMacScheduler", LOG_LEVEL_ALL);
-  
+
   if (!fadingTrace.empty ())
     {
       lteHelper->SetAttribute ("FadingModel", StringValue ("ns3::TraceFadingLossModel"));
-      lteHelper->SetFadingModelAttribute("TraceFilename", StringValue (fadingTrace));
+      lteHelper->SetFadingModelAttribute ("TraceFilename", StringValue (fadingTrace));
     }
 
-  Ptr<EpcHelper> epcHelper;
+  Ptr<PointToPointEpcHelper> epcHelper;
   if (epc)
     {
       NS_LOG_LOGIC ("enabling EPC");
-      epcHelper = CreateObject<EpcHelper> ();
-      lteHelper->SetEpcHelper (epcHelper);      
+      epcHelper = CreateObject<PointToPointEpcHelper> ();
+      lteHelper->SetEpcHelper (epcHelper);
     }
 
   // Macro eNBs in 3-sector hex grid
-  
+
   mobility.Install (macroEnbs);
   BuildingsHelper::Install (macroEnbs);
   Ptr<LteHexGridEnbTopologyHelper> lteHexGridEnbTopologyHelper = CreateObject<LteHexGridEnbTopologyHelper> ();
@@ -533,7 +532,7 @@
     }
   
   // HomeEnbs randomly indoor
-  
+
   Ptr<PositionAllocator> positionAlloc = CreateObject<RandomRoomPositionAllocator> ();
   mobility.SetPositionAllocator (positionAlloc);
   mobility.Install (homeEnbs);
@@ -544,14 +543,17 @@
   lteHelper->SetEnbDeviceAttribute ("UlEarfcn", UintegerValue (homeEnbDlEarfcn + 18000));
   lteHelper->SetEnbDeviceAttribute ("DlBandwidth", UintegerValue (homeEnbBandwidth));
   lteHelper->SetEnbDeviceAttribute ("UlBandwidth", UintegerValue (homeEnbBandwidth));
+  lteHelper->SetEnbDeviceAttribute ("CsgId", UintegerValue (1));
+  lteHelper->SetEnbDeviceAttribute ("CsgIndication", BooleanValue (true));
   NetDeviceContainer homeEnbDevs  = lteHelper->InstallEnbDevice (homeEnbs);
 
-
   // home UEs located in the same apartment in which there are the Home eNBs
   positionAlloc = CreateObject<SameRoomPositionAllocator> (homeEnbs);
   mobility.SetPositionAllocator (positionAlloc);
   mobility.Install (homeUes);
   BuildingsHelper::Install (homeUes);
+  // set the home UE as a CSG member of the home eNodeBs
+  lteHelper->SetUeDeviceAttribute ("CsgId", UintegerValue (1));
   NetDeviceContainer homeUeDevs = lteHelper->InstallUeDevice (homeUes);
 
   // macro Ues
@@ -614,10 +616,11 @@
   Ipv4InterfaceContainer ueIpIfaces;
   Ptr<Node> remoteHost;
   NetDeviceContainer ueDevs;
+
   if (epc)
     {
       NS_LOG_LOGIC ("setting up internet and remote host");
-  
+
       // Create a single RemoteHost
       NodeContainer remoteHostContainer;
       remoteHostContainer.Create (1);
@@ -646,34 +649,38 @@
       ues.Add (homeUes);
       ues.Add (macroUes);
       ueDevs.Add (homeUeDevs);
-      ueDevs.Add (macroUeDevs);      
+      ueDevs.Add (macroUeDevs);
 
-      // Install the IP stack on the UEs      
+      // Install the IP stack on the UEs
       internet.Install (ues);
       ueIpIfaces = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueDevs));
+
+      // attachment (needs to be done after IP stack configuration)
+      // using initial cell selection
+      lteHelper->Attach (macroUeDevs);
+      lteHelper->Attach (homeUeDevs);
     }
+  else
+    {
+      // macro UEs attached to the closest macro eNB
+      lteHelper->AttachToClosestEnb (macroUeDevs, macroEnbDevs);
 
-  // attachment (needs to be done after IP stack configuration)
-  // macro UEs attached to the closest macro eNB
-  lteHelper->AttachToClosestEnb (macroUeDevs, macroEnbDevs);
-  // each home UE is ttach explicitly to its home eNB
-  NetDeviceContainer::Iterator ueDevIt;
-  NetDeviceContainer::Iterator enbDevIt = homeEnbDevs.Begin ();
-
-  for (ueDevIt = homeUeDevs.Begin ();
-       ueDevIt != homeUeDevs.End ();
-       ++ueDevIt, ++enbDevIt)
-    {
-      // this because of the order in which SameRoomPositionAllocator
-      // will place the UEs
-      if (enbDevIt == homeEnbDevs.End ())
+      // each home UE is attached explicitly to its home eNB
+      NetDeviceContainer::Iterator ueDevIt;
+      NetDeviceContainer::Iterator enbDevIt;
+      for (ueDevIt = homeUeDevs.Begin (), enbDevIt = homeEnbDevs.Begin ();
+           ueDevIt != homeUeDevs.End (); ++ueDevIt, ++enbDevIt)
         {
-          enbDevIt = homeEnbDevs.Begin ();
+          // this because of the order in which SameRoomPositionAllocator
+          // will place the UEs
+          if (enbDevIt == homeEnbDevs.End ())
+            {
+              enbDevIt = homeEnbDevs.Begin ();
+            }
+          lteHelper->Attach (*ueDevIt, *enbDevIt);
         }
-      lteHelper->Attach (*ueDevIt, *enbDevIt);
     }
 
-
   if (epc)
     {
       NS_LOG_LOGIC ("setting up applications");
@@ -687,7 +694,7 @@
       // exactly at the same time) 
       Ptr<UniformRandomVariable> startTimeSeconds = CreateObject<UniformRandomVariable> ();
       if (useUdp)
-        {      
+        {
           startTimeSeconds->SetAttribute ("Min", DoubleValue (0));
           startTimeSeconds->SetAttribute ("Max", DoubleValue (0.010));
         }
@@ -732,7 +739,7 @@
                       clientApps.Add (ulClientHelper.Install (ue));
                       PacketSinkHelper ulPacketSinkHelper ("ns3::UdpSocketFactory", 
                                                            InetSocketAddress (Ipv4Address::GetAny (), ulPort));
-                      serverApps.Add (ulPacketSinkHelper.Install (remoteHost));  
+                      serverApps.Add (ulPacketSinkHelper.Install (remoteHost));
                     }
                 }
               else // use TCP
@@ -749,11 +756,11 @@
                       serverApps.Add (dlPacketSinkHelper.Install (ue));
                     }
                   if (epcUl)
-                    {     
-                      NS_LOG_LOGIC ("installing TCP UL app for UE " << u);              
+                    {
+                      NS_LOG_LOGIC ("installing TCP UL app for UE " << u);
                       BulkSendHelper ulClientHelper ("ns3::TcpSocketFactory",
                                                      InetSocketAddress (remoteHostAddr, ulPort));
-                      ulClientHelper.SetAttribute ("MaxBytes", UintegerValue (0));                  
+                      ulClientHelper.SetAttribute ("MaxBytes", UintegerValue (0));
                       clientApps.Add (ulClientHelper.Install (ue));
                       PacketSinkHelper ulPacketSinkHelper ("ns3::TcpSocketFactory", 
                                                            InetSocketAddress (Ipv4Address::GetAny (), ulPort));
@@ -795,7 +802,7 @@
       // for radio bearer activation purposes, consider together home UEs and macro UEs
       NetDeviceContainer ueDevs;
       ueDevs.Add (homeUeDevs);
-      ueDevs.Add (macroUeDevs);  
+      ueDevs.Add (macroUeDevs);
       for (uint32_t u = 0; u < ueDevs.GetN (); ++u)
         {
           Ptr<NetDevice> ueDev = ueDevs.Get (u);
@@ -830,7 +837,7 @@
     }
   else
     {
-      Simulator::Stop (Seconds (simTime));  
+      Simulator::Stop (Seconds (simTime));
     }
 
   lteHelper->EnableMacTraces ();
diff -Naur ns-3.18.1/src/lte/examples/lena-profiling.cc ns-3.19/src/lte/examples/lena-profiling.cc
--- ns-3.18.1/src/lte/examples/lena-profiling.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/examples/lena-profiling.cc	2013-12-20 09:44:51.000000000 -0800
@@ -1,208 +1,208 @@
-/* -*-  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: Jaume Nin <jnin@cttc.es>
- */
-
-#include "ns3/core-module.h"
-#include "ns3/network-module.h"
-#include "ns3/mobility-module.h"
-#include "ns3/lte-module.h"
-#include "ns3/config-store.h"
-#include <ns3/buildings-module.h>
-#include <iomanip>
-#include <string>
-#include <vector>
-//#include "ns3/gtk-config-store.h"
-
-using namespace ns3;
-
-int
-main (int argc, char *argv[])
-{
-  uint32_t nEnbPerFloor = 1;
-  uint32_t nUe = 1;
-  uint32_t nFloors = 0;
-  double simTime = 1.0;
-  CommandLine cmd;
-
-  cmd.AddValue ("nEnb", "Number of eNodeBs per floor", nEnbPerFloor);
-  cmd.AddValue ("nUe", "Number of UEs", nUe);
-  cmd.AddValue ("nFloors", "Number of floors, 0 for Friis propagation model",
-                nFloors);
-  cmd.AddValue ("simTime", "Total duration of the simulation (in seconds)",
-                simTime);
-  cmd.Parse (argc, argv);
-
-  ConfigStore inputConfig;
-  inputConfig.ConfigureDefaults ();
-
-  // parse again so you can override default values from the command line
-  cmd.Parse (argc, argv);
-
-  // Geometry of the scenario (in meters)
-  // Assume squared building
-  double nodeHeight = 1.5;
-  double roomHeight = 3;
-  double roomLength = 8;
-  uint32_t nRooms = std::ceil (std::sqrt (nEnbPerFloor));
-  uint32_t nEnb;
-
-  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
-  //lteHelper->EnableLogComponents ();
-  //LogComponentEnable ("BuildingsPropagationLossModel", LOG_LEVEL_ALL);
-  if (nFloors == 0)
-    {
-      lteHelper->SetAttribute ("PathlossModel",
-                               StringValue ("ns3::FriisPropagationLossModel"));
-      nEnb = nEnbPerFloor;
-    }
-  else
-    {
-      lteHelper->SetAttribute ("PathlossModel",
-                               StringValue ("ns3::HybridBuildingsPropagationLossModel"));
-      nEnb = nFloors * nEnbPerFloor;
-    }
-
-  // Create Nodes: eNodeB and UE
-  NodeContainer enbNodes;
-  std::vector<NodeContainer> ueNodes;
-
-  enbNodes.Create (nEnb);
-  for (uint32_t i = 0; i < nEnb; i++)
-    {
-      NodeContainer ueNode;
-      ueNode.Create (nUe);
-      ueNodes.push_back (ueNode);
-    }
-
-  MobilityHelper mobility;
-  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
-  std::vector<Vector> enbPosition;
-  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
-  Ptr<Building> building;
-
-  if (nFloors == 0)
-    {
-      // Position of eNBs
-      uint32_t plantedEnb = 0;
-      for (uint32_t row = 0; row < nRooms; row++)
-        {
-          for (uint32_t column = 0; column < nRooms && plantedEnb < nEnbPerFloor; column++, plantedEnb++)
-            {
-              Vector v (roomLength * (column + 0.5), roomLength * (row + 0.5), nodeHeight);
-              positionAlloc->Add (v);
-              enbPosition.push_back (v);
-              mobility.Install (ueNodes.at(plantedEnb));
-            }
-        }
-      mobility.SetPositionAllocator (positionAlloc);
-      mobility.Install (enbNodes);
-      BuildingsHelper::Install (enbNodes);
-
-      // Position of UEs attached to eNB
-      for (uint32_t i = 0; i < nEnb; i++)
-        {
-          Ptr<UniformRandomVariable> posX = CreateObject<UniformRandomVariable> ();
-          posX->SetAttribute ("Min", DoubleValue (enbPosition.at(i).x - roomLength * 0.5));
-          posX->SetAttribute ("Max", DoubleValue (enbPosition.at(i).x + roomLength * 0.5));
-          Ptr<UniformRandomVariable> posY = CreateObject<UniformRandomVariable> ();
-          posY->SetAttribute ("Min", DoubleValue (enbPosition.at(i).y - roomLength * 0.5));
-          posY->SetAttribute ("Max", DoubleValue (enbPosition.at(i).y + roomLength * 0.5));
-          positionAlloc = CreateObject<ListPositionAllocator> ();
-          for (uint32_t j = 0; j < nUe; j++)
-            {
-              positionAlloc->Add (Vector (posX->GetValue (), posY->GetValue (), nodeHeight));
-              mobility.SetPositionAllocator (positionAlloc);
-            }
-          mobility.Install (ueNodes.at(i));
-          BuildingsHelper::Install (ueNodes.at(i));
-        }
-
-    }
-  else
-    {
-      building = CreateObject<Building> ();
-      building->SetBoundaries (Box (0.0, nRooms * roomLength,
-                                    0.0, nRooms * roomLength,
-                                    0.0, nFloors* roomHeight));
-      building->SetBuildingType (Building::Residential);
-      building->SetExtWallsType (Building::ConcreteWithWindows);
-      building->SetNFloors (nFloors);
-      building->SetNRoomsX (nRooms);
-      building->SetNRoomsY (nRooms);
-      mobility.Install (enbNodes);
-      BuildingsHelper::Install (enbNodes);
-      uint32_t plantedEnb = 0;
-      for (uint32_t floor = 0; floor < nFloors; floor++)
-        {
-          uint32_t plantedEnbPerFloor = 0;
-          for (uint32_t row = 0; row < nRooms; row++)
-            {
-              for (uint32_t column = 0; column < nRooms && plantedEnbPerFloor < nEnbPerFloor; column++, plantedEnb++, plantedEnbPerFloor++)
-                {
-                  Vector v (roomLength * (column + 0.5),
-                            roomLength * (row + 0.5),
-                            nodeHeight + roomHeight * floor);
-                  positionAlloc->Add (v);
-                  enbPosition.push_back (v);
-                  Ptr<MobilityModel> mmEnb = enbNodes.Get (plantedEnb)->GetObject<MobilityModel> ();
-                  mmEnb->SetPosition (v);
-
-                  // Positioning UEs attached to eNB
-                  mobility.Install (ueNodes.at(plantedEnb));
-                  BuildingsHelper::Install (ueNodes.at(plantedEnb));
-                  for (uint32_t ue = 0; ue < nUe; ue++)
-                    {
-                      Ptr<MobilityModel> mmUe = ueNodes.at(plantedEnb).Get (ue)->GetObject<MobilityModel> ();
-                      Vector vUe (v.x, v.y, v.z);
-                      mmUe->SetPosition (vUe);
-                    }
-                }
-            }
-        }
-    }
-
-
-  // Create Devices and install them in the Nodes (eNB and UE)
-  NetDeviceContainer enbDevs;
-  std::vector<NetDeviceContainer> ueDevs;
-  enbDevs = lteHelper->InstallEnbDevice (enbNodes);
-  for (uint32_t i = 0; i < nEnb; i++)
-    {
-      NetDeviceContainer ueDev = lteHelper->InstallUeDevice (ueNodes.at(i));
-      ueDevs.push_back (ueDev);
-      lteHelper->Attach (ueDev, enbDevs.Get (i));
-      enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
-      EpsBearer bearer (q);
-      lteHelper->ActivateDataRadioBearer (ueDev, bearer);
-    }
-
-
-  BuildingsHelper::MakeMobilityModelConsistent ();
-
-  Simulator::Stop (Seconds (simTime));
-  lteHelper->EnableTraces ();
-
-  Simulator::Run ();
-
-  /*GtkConfigStore config;
-  config.ConfigureAttributes ();*/
-
-  Simulator::Destroy ();
-  return 0;
-}
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Jaume Nin <jnin@cttc.es>
+ */
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/lte-module.h"
+#include "ns3/config-store.h"
+#include <ns3/buildings-module.h>
+#include <iomanip>
+#include <string>
+#include <vector>
+//#include "ns3/gtk-config-store.h"
+
+using namespace ns3;
+
+int
+main (int argc, char *argv[])
+{
+  uint32_t nEnbPerFloor = 1;
+  uint32_t nUe = 1;
+  uint32_t nFloors = 0;
+  double simTime = 1.0;
+  CommandLine cmd;
+
+  cmd.AddValue ("nEnb", "Number of eNodeBs per floor", nEnbPerFloor);
+  cmd.AddValue ("nUe", "Number of UEs", nUe);
+  cmd.AddValue ("nFloors", "Number of floors, 0 for Friis propagation model",
+                nFloors);
+  cmd.AddValue ("simTime", "Total duration of the simulation (in seconds)",
+                simTime);
+  cmd.Parse (argc, argv);
+
+  ConfigStore inputConfig;
+  inputConfig.ConfigureDefaults ();
+
+  // parse again so you can override default values from the command line
+  cmd.Parse (argc, argv);
+
+  // Geometry of the scenario (in meters)
+  // Assume squared building
+  double nodeHeight = 1.5;
+  double roomHeight = 3;
+  double roomLength = 8;
+  uint32_t nRooms = std::ceil (std::sqrt (nEnbPerFloor));
+  uint32_t nEnb;
+
+  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
+  //lteHelper->EnableLogComponents ();
+  //LogComponentEnable ("BuildingsPropagationLossModel", LOG_LEVEL_ALL);
+  if (nFloors == 0)
+    {
+      lteHelper->SetAttribute ("PathlossModel",
+                               StringValue ("ns3::FriisPropagationLossModel"));
+      nEnb = nEnbPerFloor;
+    }
+  else
+    {
+      lteHelper->SetAttribute ("PathlossModel",
+                               StringValue ("ns3::HybridBuildingsPropagationLossModel"));
+      nEnb = nFloors * nEnbPerFloor;
+    }
+
+  // Create Nodes: eNodeB and UE
+  NodeContainer enbNodes;
+  std::vector<NodeContainer> ueNodes;
+
+  enbNodes.Create (nEnb);
+  for (uint32_t i = 0; i < nEnb; i++)
+    {
+      NodeContainer ueNode;
+      ueNode.Create (nUe);
+      ueNodes.push_back (ueNode);
+    }
+
+  MobilityHelper mobility;
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  std::vector<Vector> enbPosition;
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  Ptr<Building> building;
+
+  if (nFloors == 0)
+    {
+      // Position of eNBs
+      uint32_t plantedEnb = 0;
+      for (uint32_t row = 0; row < nRooms; row++)
+        {
+          for (uint32_t column = 0; column < nRooms && plantedEnb < nEnbPerFloor; column++, plantedEnb++)
+            {
+              Vector v (roomLength * (column + 0.5), roomLength * (row + 0.5), nodeHeight);
+              positionAlloc->Add (v);
+              enbPosition.push_back (v);
+              mobility.Install (ueNodes.at(plantedEnb));
+            }
+        }
+      mobility.SetPositionAllocator (positionAlloc);
+      mobility.Install (enbNodes);
+      BuildingsHelper::Install (enbNodes);
+
+      // Position of UEs attached to eNB
+      for (uint32_t i = 0; i < nEnb; i++)
+        {
+          Ptr<UniformRandomVariable> posX = CreateObject<UniformRandomVariable> ();
+          posX->SetAttribute ("Min", DoubleValue (enbPosition.at(i).x - roomLength * 0.5));
+          posX->SetAttribute ("Max", DoubleValue (enbPosition.at(i).x + roomLength * 0.5));
+          Ptr<UniformRandomVariable> posY = CreateObject<UniformRandomVariable> ();
+          posY->SetAttribute ("Min", DoubleValue (enbPosition.at(i).y - roomLength * 0.5));
+          posY->SetAttribute ("Max", DoubleValue (enbPosition.at(i).y + roomLength * 0.5));
+          positionAlloc = CreateObject<ListPositionAllocator> ();
+          for (uint32_t j = 0; j < nUe; j++)
+            {
+              positionAlloc->Add (Vector (posX->GetValue (), posY->GetValue (), nodeHeight));
+              mobility.SetPositionAllocator (positionAlloc);
+            }
+          mobility.Install (ueNodes.at(i));
+          BuildingsHelper::Install (ueNodes.at(i));
+        }
+
+    }
+  else
+    {
+      building = CreateObject<Building> ();
+      building->SetBoundaries (Box (0.0, nRooms * roomLength,
+                                    0.0, nRooms * roomLength,
+                                    0.0, nFloors* roomHeight));
+      building->SetBuildingType (Building::Residential);
+      building->SetExtWallsType (Building::ConcreteWithWindows);
+      building->SetNFloors (nFloors);
+      building->SetNRoomsX (nRooms);
+      building->SetNRoomsY (nRooms);
+      mobility.Install (enbNodes);
+      BuildingsHelper::Install (enbNodes);
+      uint32_t plantedEnb = 0;
+      for (uint32_t floor = 0; floor < nFloors; floor++)
+        {
+          uint32_t plantedEnbPerFloor = 0;
+          for (uint32_t row = 0; row < nRooms; row++)
+            {
+              for (uint32_t column = 0; column < nRooms && plantedEnbPerFloor < nEnbPerFloor; column++, plantedEnb++, plantedEnbPerFloor++)
+                {
+                  Vector v (roomLength * (column + 0.5),
+                            roomLength * (row + 0.5),
+                            nodeHeight + roomHeight * floor);
+                  positionAlloc->Add (v);
+                  enbPosition.push_back (v);
+                  Ptr<MobilityModel> mmEnb = enbNodes.Get (plantedEnb)->GetObject<MobilityModel> ();
+                  mmEnb->SetPosition (v);
+
+                  // Positioning UEs attached to eNB
+                  mobility.Install (ueNodes.at(plantedEnb));
+                  BuildingsHelper::Install (ueNodes.at(plantedEnb));
+                  for (uint32_t ue = 0; ue < nUe; ue++)
+                    {
+                      Ptr<MobilityModel> mmUe = ueNodes.at(plantedEnb).Get (ue)->GetObject<MobilityModel> ();
+                      Vector vUe (v.x, v.y, v.z);
+                      mmUe->SetPosition (vUe);
+                    }
+                }
+            }
+        }
+    }
+
+
+  // Create Devices and install them in the Nodes (eNB and UE)
+  NetDeviceContainer enbDevs;
+  std::vector<NetDeviceContainer> ueDevs;
+  enbDevs = lteHelper->InstallEnbDevice (enbNodes);
+  for (uint32_t i = 0; i < nEnb; i++)
+    {
+      NetDeviceContainer ueDev = lteHelper->InstallUeDevice (ueNodes.at(i));
+      ueDevs.push_back (ueDev);
+      lteHelper->Attach (ueDev, enbDevs.Get (i));
+      enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
+      EpsBearer bearer (q);
+      lteHelper->ActivateDataRadioBearer (ueDev, bearer);
+    }
+
+
+  BuildingsHelper::MakeMobilityModelConsistent ();
+
+  Simulator::Stop (Seconds (simTime));
+  lteHelper->EnableTraces ();
+
+  Simulator::Run ();
+
+  /*GtkConfigStore config;
+  config.ConfigureAttributes ();*/
+
+  Simulator::Destroy ();
+  return 0;
+}
diff -Naur ns-3.18.1/src/lte/examples/lena-rem-sector-antenna.cc ns-3.19/src/lte/examples/lena-rem-sector-antenna.cc
--- ns-3.18.1/src/lte/examples/lena-rem-sector-antenna.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/examples/lena-rem-sector-antenna.cc	2013-12-20 09:44:51.000000000 -0800
@@ -1,230 +1,230 @@
-/* -*-  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: Jaume Nin <jnin@cttc.es>
- */
-
-#include "ns3/core-module.h"
-#include "ns3/network-module.h"
-#include "ns3/mobility-module.h"
-#include "ns3/lte-module.h"
-#include "ns3/config-store.h"
-#include <ns3/buildings-propagation-loss-model.h>
-#include <ns3/buildings-helper.h>
-#include <ns3/radio-environment-map-helper.h>
-#include <iomanip>
-#include <string>
-#include <vector>
-//#include "ns3/gtk-config-store.h"
-
-using namespace ns3;
-using std::vector;
-
-int
-main (int argc, char *argv[])
-{
-  CommandLine cmd;
-  cmd.Parse (argc, argv);
-
-  ConfigStore inputConfig;
-  inputConfig.ConfigureDefaults ();
-
-  cmd.Parse (argc, argv);
-
-  // Geometry of the scenario (in meters)
-  // Assume squared building
-  double nodeHeight = 1.5;
-  double roomHeight = 3;
-  double roomLength = 500;
-  uint32_t nRooms = 2;
-  // Create one eNodeB per room + one 3 sector eNodeB (i.e. 3 eNodeB) + one regular eNodeB
-  uint32_t nEnb = nRooms*nRooms + 4;
-  uint32_t nUe = 1;
-
-  Ptr < LteHelper > lteHelper = CreateObject<LteHelper> ();
-  //lteHelper->EnableLogComponents ();
-  lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisPropagationLossModel"));
-
-  // Create Nodes: eNodeB and UE
-  NodeContainer enbNodes;
-  NodeContainer oneSectorNodes;
-  NodeContainer threeSectorNodes;
-  vector < NodeContainer > ueNodes;
-
-  oneSectorNodes.Create (nEnb-3);
-  threeSectorNodes.Create (3);
-
-  enbNodes.Add (oneSectorNodes);
-  enbNodes.Add (threeSectorNodes);
-
-  for (uint32_t i = 0; i < nEnb; i++)
-    {
-      NodeContainer ueNode;
-      ueNode.Create (nUe);
-      ueNodes.push_back (ueNode);
-    }
-
-  MobilityHelper mobility;
-  vector<Vector> enbPosition;
-  Ptr < ListPositionAllocator > positionAlloc = CreateObject<ListPositionAllocator> ();
-  Ptr < Building > building;
-  building = Create<Building> ();
-  building->SetBoundaries (Box (0.0, nRooms * roomLength,
-                                0.0, nRooms * roomLength,
-                                0.0, roomHeight));
-  building->SetBuildingType (Building::Residential);
-  building->SetExtWallsType (Building::ConcreteWithWindows);
-  building->SetNFloors (1);
-  building->SetNRoomsX (nRooms);
-  building->SetNRoomsY (nRooms);
-  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
-  mobility.Install (enbNodes);
-  BuildingsHelper::Install (enbNodes);
-  uint32_t plantedEnb = 0;
-  for (uint32_t row = 0; row < nRooms; row++)
-    {
-      for (uint32_t column = 0; column < nRooms; column++, plantedEnb++)
-        {
-          Vector v (roomLength * (column + 0.5),
-                    roomLength * (row + 0.5),
-                    nodeHeight );
-          positionAlloc->Add (v);
-          enbPosition.push_back (v);
-          Ptr<MobilityModel> mmEnb = enbNodes.Get (plantedEnb)->GetObject<MobilityModel> ();
-          mmEnb->SetPosition (v);
-        }
-    }
-
-  // Add a 1-sector site
-  Vector v (500, 3000, nodeHeight);
-  positionAlloc->Add (v);
-  enbPosition.push_back (v);
-  mobility.Install (ueNodes.at(plantedEnb));
-  plantedEnb++;
-
-  // Add the 3-sector site
-  for (uint32_t index = 0; index < 3; index++, plantedEnb++)
-    {
-      Vector v (500, 2000, nodeHeight);
-      positionAlloc->Add (v);
-      enbPosition.push_back (v);
-      mobility.Install (ueNodes.at(plantedEnb));
-    }
-
-
-  mobility.SetPositionAllocator (positionAlloc);
-  mobility.Install (enbNodes);
-
-  // Position of UEs attached to eNB
-  for (uint32_t i = 0; i < nEnb; i++)
-    {
-      Ptr<UniformRandomVariable> posX = CreateObject<UniformRandomVariable> ();
-      posX->SetAttribute ("Min", DoubleValue (enbPosition.at(i).x - roomLength * 0));
-      posX->SetAttribute ("Max", DoubleValue (enbPosition.at(i).x + roomLength * 0));
-      Ptr<UniformRandomVariable> posY = CreateObject<UniformRandomVariable> ();
-      posY->SetAttribute ("Min", DoubleValue (enbPosition.at(i).y - roomLength * 0));
-      posY->SetAttribute ("Max", DoubleValue (enbPosition.at(i).y + roomLength * 0));
-      positionAlloc = CreateObject<ListPositionAllocator> ();
-      for (uint32_t j = 0; j < nUe; j++)
-        {
-          if ( i == nEnb - 3 )
-            {
-              positionAlloc->Add (Vector (enbPosition.at(i).x + 10, enbPosition.at(i).y, nodeHeight));
-            }
-          else if ( i == nEnb - 2 )
-            {
-              positionAlloc->Add (Vector (enbPosition.at(i).x - std::sqrt (10), enbPosition.at(i).y + std::sqrt (10), nodeHeight));
-            }
-          else if ( i == nEnb - 1 )
-            {
-              positionAlloc->Add (Vector (enbPosition.at(i).x - std::sqrt (10), enbPosition.at(i).y - std::sqrt (10), nodeHeight));
-            }
-          else
-            {
-              positionAlloc->Add (Vector (posX->GetValue (), posY->GetValue (), nodeHeight));
-            }
-          mobility.SetPositionAllocator (positionAlloc);
-        }
-      mobility.Install (ueNodes.at(i));
-      BuildingsHelper::Install (ueNodes.at(i));
-    }
-
-  // Create Devices and install them in the Nodes (eNB and UE)
-  NetDeviceContainer enbDevs;
-  vector < NetDeviceContainer > ueDevs;
-
-  // power setting in dBm for small cells
-  Config::SetDefault ("ns3::LteEnbPhy::TxPower", DoubleValue (20.0));
-  enbDevs = lteHelper->InstallEnbDevice (oneSectorNodes);
-
-
-  // power setting for three-sector macrocell
-  Config::SetDefault ("ns3::LteEnbPhy::TxPower", DoubleValue (43.0));
-
-  // Beam width is made quite narrow so sectors can be noticed in the REM
-  lteHelper->SetEnbAntennaModelType ("ns3::CosineAntennaModel");
-  lteHelper->SetEnbAntennaModelAttribute ("Orientation", DoubleValue (0));
-  lteHelper->SetEnbAntennaModelAttribute ("Beamwidth",   DoubleValue (100));
-  lteHelper->SetEnbAntennaModelAttribute ("MaxGain",     DoubleValue (0.0));
-  enbDevs.Add ( lteHelper->InstallEnbDevice (threeSectorNodes.Get (0)));
-
-  lteHelper->SetEnbAntennaModelType ("ns3::CosineAntennaModel");
-  lteHelper->SetEnbAntennaModelAttribute ("Orientation", DoubleValue (360/3));
-  lteHelper->SetEnbAntennaModelAttribute ("Beamwidth",   DoubleValue (100));
-  lteHelper->SetEnbAntennaModelAttribute ("MaxGain",     DoubleValue (0.0));
-  enbDevs.Add ( lteHelper->InstallEnbDevice (threeSectorNodes.Get (1)));
-
-  lteHelper->SetEnbAntennaModelType ("ns3::CosineAntennaModel");
-  lteHelper->SetEnbAntennaModelAttribute ("Orientation", DoubleValue (2*360/3));
-  lteHelper->SetEnbAntennaModelAttribute ("Beamwidth",   DoubleValue (100));
-  lteHelper->SetEnbAntennaModelAttribute ("MaxGain",     DoubleValue (0.0));
-  enbDevs.Add ( lteHelper->InstallEnbDevice (threeSectorNodes.Get (2)));
-
-  for (uint32_t i = 0; i < nEnb; i++)
-    {
-      NetDeviceContainer ueDev = lteHelper->InstallUeDevice (ueNodes.at(i));
-      ueDevs.push_back (ueDev);
-      lteHelper->Attach (ueDev, enbDevs.Get (i));
-      enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
-      EpsBearer bearer (q);
-      lteHelper->ActivateDataRadioBearer (ueDev, bearer);
-    }
-
-  BuildingsHelper::MakeMobilityModelConsistent ();
-
-  // by default, simulation will anyway stop right after the REM has been generated
-  Simulator::Stop (Seconds (0.0069));  
-
-  Ptr<RadioEnvironmentMapHelper> remHelper = CreateObject<RadioEnvironmentMapHelper> ();
-  remHelper->SetAttribute ("ChannelPath", StringValue ("/ChannelList/0"));
-  remHelper->SetAttribute ("OutputFile", StringValue ("rem.out"));
-  remHelper->SetAttribute ("XMin", DoubleValue (-2000.0));
-  remHelper->SetAttribute ("XMax", DoubleValue (+2000.0));
-  remHelper->SetAttribute ("YMin", DoubleValue (-500.0));
-  remHelper->SetAttribute ("YMax", DoubleValue (+3500.0));
-  remHelper->SetAttribute ("Z", DoubleValue (1.5));
-  remHelper->Install ();
-
-  Simulator::Run ();
-
-//  GtkConfigStore config;
-//  config.ConfigureAttributes ();
-
-  lteHelper = 0;
-  Simulator::Destroy ();
-  return 0;
-}
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Jaume Nin <jnin@cttc.es>
+ */
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/lte-module.h"
+#include "ns3/config-store.h"
+#include <ns3/buildings-propagation-loss-model.h>
+#include <ns3/buildings-helper.h>
+#include <ns3/radio-environment-map-helper.h>
+#include <iomanip>
+#include <string>
+#include <vector>
+//#include "ns3/gtk-config-store.h"
+
+using namespace ns3;
+using std::vector;
+
+int
+main (int argc, char *argv[])
+{
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+
+  ConfigStore inputConfig;
+  inputConfig.ConfigureDefaults ();
+
+  cmd.Parse (argc, argv);
+
+  // Geometry of the scenario (in meters)
+  // Assume squared building
+  double nodeHeight = 1.5;
+  double roomHeight = 3;
+  double roomLength = 500;
+  uint32_t nRooms = 2;
+  // Create one eNodeB per room + one 3 sector eNodeB (i.e. 3 eNodeB) + one regular eNodeB
+  uint32_t nEnb = nRooms*nRooms + 4;
+  uint32_t nUe = 1;
+
+  Ptr < LteHelper > lteHelper = CreateObject<LteHelper> ();
+  //lteHelper->EnableLogComponents ();
+  lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisPropagationLossModel"));
+
+  // Create Nodes: eNodeB and UE
+  NodeContainer enbNodes;
+  NodeContainer oneSectorNodes;
+  NodeContainer threeSectorNodes;
+  vector < NodeContainer > ueNodes;
+
+  oneSectorNodes.Create (nEnb-3);
+  threeSectorNodes.Create (3);
+
+  enbNodes.Add (oneSectorNodes);
+  enbNodes.Add (threeSectorNodes);
+
+  for (uint32_t i = 0; i < nEnb; i++)
+    {
+      NodeContainer ueNode;
+      ueNode.Create (nUe);
+      ueNodes.push_back (ueNode);
+    }
+
+  MobilityHelper mobility;
+  vector<Vector> enbPosition;
+  Ptr < ListPositionAllocator > positionAlloc = CreateObject<ListPositionAllocator> ();
+  Ptr < Building > building;
+  building = Create<Building> ();
+  building->SetBoundaries (Box (0.0, nRooms * roomLength,
+                                0.0, nRooms * roomLength,
+                                0.0, roomHeight));
+  building->SetBuildingType (Building::Residential);
+  building->SetExtWallsType (Building::ConcreteWithWindows);
+  building->SetNFloors (1);
+  building->SetNRoomsX (nRooms);
+  building->SetNRoomsY (nRooms);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.Install (enbNodes);
+  BuildingsHelper::Install (enbNodes);
+  uint32_t plantedEnb = 0;
+  for (uint32_t row = 0; row < nRooms; row++)
+    {
+      for (uint32_t column = 0; column < nRooms; column++, plantedEnb++)
+        {
+          Vector v (roomLength * (column + 0.5),
+                    roomLength * (row + 0.5),
+                    nodeHeight );
+          positionAlloc->Add (v);
+          enbPosition.push_back (v);
+          Ptr<MobilityModel> mmEnb = enbNodes.Get (plantedEnb)->GetObject<MobilityModel> ();
+          mmEnb->SetPosition (v);
+        }
+    }
+
+  // Add a 1-sector site
+  Vector v (500, 3000, nodeHeight);
+  positionAlloc->Add (v);
+  enbPosition.push_back (v);
+  mobility.Install (ueNodes.at(plantedEnb));
+  plantedEnb++;
+
+  // Add the 3-sector site
+  for (uint32_t index = 0; index < 3; index++, plantedEnb++)
+    {
+      Vector v (500, 2000, nodeHeight);
+      positionAlloc->Add (v);
+      enbPosition.push_back (v);
+      mobility.Install (ueNodes.at(plantedEnb));
+    }
+
+
+  mobility.SetPositionAllocator (positionAlloc);
+  mobility.Install (enbNodes);
+
+  // Position of UEs attached to eNB
+  for (uint32_t i = 0; i < nEnb; i++)
+    {
+      Ptr<UniformRandomVariable> posX = CreateObject<UniformRandomVariable> ();
+      posX->SetAttribute ("Min", DoubleValue (enbPosition.at(i).x - roomLength * 0));
+      posX->SetAttribute ("Max", DoubleValue (enbPosition.at(i).x + roomLength * 0));
+      Ptr<UniformRandomVariable> posY = CreateObject<UniformRandomVariable> ();
+      posY->SetAttribute ("Min", DoubleValue (enbPosition.at(i).y - roomLength * 0));
+      posY->SetAttribute ("Max", DoubleValue (enbPosition.at(i).y + roomLength * 0));
+      positionAlloc = CreateObject<ListPositionAllocator> ();
+      for (uint32_t j = 0; j < nUe; j++)
+        {
+          if ( i == nEnb - 3 )
+            {
+              positionAlloc->Add (Vector (enbPosition.at(i).x + 10, enbPosition.at(i).y, nodeHeight));
+            }
+          else if ( i == nEnb - 2 )
+            {
+              positionAlloc->Add (Vector (enbPosition.at(i).x - std::sqrt (10), enbPosition.at(i).y + std::sqrt (10), nodeHeight));
+            }
+          else if ( i == nEnb - 1 )
+            {
+              positionAlloc->Add (Vector (enbPosition.at(i).x - std::sqrt (10), enbPosition.at(i).y - std::sqrt (10), nodeHeight));
+            }
+          else
+            {
+              positionAlloc->Add (Vector (posX->GetValue (), posY->GetValue (), nodeHeight));
+            }
+          mobility.SetPositionAllocator (positionAlloc);
+        }
+      mobility.Install (ueNodes.at(i));
+      BuildingsHelper::Install (ueNodes.at(i));
+    }
+
+  // Create Devices and install them in the Nodes (eNB and UE)
+  NetDeviceContainer enbDevs;
+  vector < NetDeviceContainer > ueDevs;
+
+  // power setting in dBm for small cells
+  Config::SetDefault ("ns3::LteEnbPhy::TxPower", DoubleValue (20.0));
+  enbDevs = lteHelper->InstallEnbDevice (oneSectorNodes);
+
+
+  // power setting for three-sector macrocell
+  Config::SetDefault ("ns3::LteEnbPhy::TxPower", DoubleValue (43.0));
+
+  // Beam width is made quite narrow so sectors can be noticed in the REM
+  lteHelper->SetEnbAntennaModelType ("ns3::CosineAntennaModel");
+  lteHelper->SetEnbAntennaModelAttribute ("Orientation", DoubleValue (0));
+  lteHelper->SetEnbAntennaModelAttribute ("Beamwidth",   DoubleValue (100));
+  lteHelper->SetEnbAntennaModelAttribute ("MaxGain",     DoubleValue (0.0));
+  enbDevs.Add ( lteHelper->InstallEnbDevice (threeSectorNodes.Get (0)));
+
+  lteHelper->SetEnbAntennaModelType ("ns3::CosineAntennaModel");
+  lteHelper->SetEnbAntennaModelAttribute ("Orientation", DoubleValue (360/3));
+  lteHelper->SetEnbAntennaModelAttribute ("Beamwidth",   DoubleValue (100));
+  lteHelper->SetEnbAntennaModelAttribute ("MaxGain",     DoubleValue (0.0));
+  enbDevs.Add ( lteHelper->InstallEnbDevice (threeSectorNodes.Get (1)));
+
+  lteHelper->SetEnbAntennaModelType ("ns3::CosineAntennaModel");
+  lteHelper->SetEnbAntennaModelAttribute ("Orientation", DoubleValue (2*360/3));
+  lteHelper->SetEnbAntennaModelAttribute ("Beamwidth",   DoubleValue (100));
+  lteHelper->SetEnbAntennaModelAttribute ("MaxGain",     DoubleValue (0.0));
+  enbDevs.Add ( lteHelper->InstallEnbDevice (threeSectorNodes.Get (2)));
+
+  for (uint32_t i = 0; i < nEnb; i++)
+    {
+      NetDeviceContainer ueDev = lteHelper->InstallUeDevice (ueNodes.at(i));
+      ueDevs.push_back (ueDev);
+      lteHelper->Attach (ueDev, enbDevs.Get (i));
+      enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
+      EpsBearer bearer (q);
+      lteHelper->ActivateDataRadioBearer (ueDev, bearer);
+    }
+
+  BuildingsHelper::MakeMobilityModelConsistent ();
+
+  // by default, simulation will anyway stop right after the REM has been generated
+  Simulator::Stop (Seconds (0.0069));  
+
+  Ptr<RadioEnvironmentMapHelper> remHelper = CreateObject<RadioEnvironmentMapHelper> ();
+  remHelper->SetAttribute ("ChannelPath", StringValue ("/ChannelList/0"));
+  remHelper->SetAttribute ("OutputFile", StringValue ("rem.out"));
+  remHelper->SetAttribute ("XMin", DoubleValue (-2000.0));
+  remHelper->SetAttribute ("XMax", DoubleValue (+2000.0));
+  remHelper->SetAttribute ("YMin", DoubleValue (-500.0));
+  remHelper->SetAttribute ("YMax", DoubleValue (+3500.0));
+  remHelper->SetAttribute ("Z", DoubleValue (1.5));
+  remHelper->Install ();
+
+  Simulator::Run ();
+
+//  GtkConfigStore config;
+//  config.ConfigureAttributes ();
+
+  lteHelper = 0;
+  Simulator::Destroy ();
+  return 0;
+}
diff -Naur ns-3.18.1/src/lte/examples/lena-simple-epc.cc ns-3.19/src/lte/examples/lena-simple-epc.cc
--- ns-3.18.1/src/lte/examples/lena-simple-epc.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/examples/lena-simple-epc.cc	2013-12-20 09:44:51.000000000 -0800
@@ -57,7 +57,7 @@
   cmd.Parse(argc, argv);
 
   Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
-  Ptr<EpcHelper>  epcHelper = CreateObject<EpcHelper> ();
+  Ptr<PointToPointEpcHelper>  epcHelper = CreateObject<PointToPointEpcHelper> ();
   lteHelper->SetEpcHelper (epcHelper);
 
   ConfigStore inputConfig;
diff -Naur ns-3.18.1/src/lte/examples/lena-x2-handover.cc ns-3.19/src/lte/examples/lena-x2-handover.cc
--- ns-3.18.1/src/lte/examples/lena-x2-handover.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/examples/lena-x2-handover.cc	2013-12-20 09:44:51.000000000 -0800
@@ -29,91 +29,89 @@
 
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LenaX2HandoverExample");
 
-
-void 
-NotifyConnectionEstablishedUe (std::string context, 
-                               uint64_t imsi, 
-                               uint16_t cellid, 
+void
+NotifyConnectionEstablishedUe (std::string context,
+                               uint64_t imsi,
+                               uint16_t cellid,
                                uint16_t rnti)
 {
-  std::cout << context 
-            << " UE IMSI " << imsi 
-            << ": connected to CellId " << cellid 
-            << " with RNTI " << rnti 
+  std::cout << Simulator::Now ().GetSeconds () << " " << context
+            << " UE IMSI " << imsi
+            << ": connected to CellId " << cellid
+            << " with RNTI " << rnti
             << std::endl;
 }
 
-void 
-NotifyHandoverStartUe (std::string context, 
-                       uint64_t imsi, 
-                       uint16_t cellid, 
-                       uint16_t rnti, 
+void
+NotifyHandoverStartUe (std::string context,
+                       uint64_t imsi,
+                       uint16_t cellid,
+                       uint16_t rnti,
                        uint16_t targetCellId)
 {
-  std::cout << context 
-            << " UE IMSI " << imsi 
-            << ": previously connected to CellId " << cellid 
-            << " with RNTI " << rnti 
-            << ", doing handover to CellId " << targetCellId 
+  std::cout << Simulator::Now ().GetSeconds () << " " << context
+            << " UE IMSI " << imsi
+            << ": previously connected to CellId " << cellid
+            << " with RNTI " << rnti
+            << ", doing handover to CellId " << targetCellId
             << std::endl;
 }
 
-void 
-NotifyHandoverEndOkUe (std::string context, 
-                       uint64_t imsi, 
-                       uint16_t cellid, 
+void
+NotifyHandoverEndOkUe (std::string context,
+                       uint64_t imsi,
+                       uint16_t cellid,
                        uint16_t rnti)
 {
-  std::cout << context 
-            << " UE IMSI " << imsi 
-            << ": successful handover to CellId " << cellid 
-            << " with RNTI " << rnti 
+  std::cout << Simulator::Now ().GetSeconds () << " " << context
+            << " UE IMSI " << imsi
+            << ": successful handover to CellId " << cellid
+            << " with RNTI " << rnti
             << std::endl;
 }
 
-void 
-NotifyConnectionEstablishedEnb (std::string context, 
-                                uint64_t imsi, 
-                                uint16_t cellid, 
+void
+NotifyConnectionEstablishedEnb (std::string context,
+                                uint64_t imsi,
+                                uint16_t cellid,
                                 uint16_t rnti)
 {
-  std::cout << context 
-            << " eNB CellId " << cellid 
-            << ": successful connection of UE with IMSI " << imsi 
-            << " RNTI " << rnti 
+  std::cout << Simulator::Now ().GetSeconds () << " " << context
+            << " eNB CellId " << cellid
+            << ": successful connection of UE with IMSI " << imsi
+            << " RNTI " << rnti
             << std::endl;
 }
 
-void 
-NotifyHandoverStartEnb (std::string context, 
-                        uint64_t imsi, 
-                        uint16_t cellid, 
-                        uint16_t rnti, 
+void
+NotifyHandoverStartEnb (std::string context,
+                        uint64_t imsi,
+                        uint16_t cellid,
+                        uint16_t rnti,
                         uint16_t targetCellId)
 {
-  std::cout << context 
-            << " eNB CellId " << cellid 
-            << ": start handover of UE with IMSI " << imsi 
-            << " RNTI " << rnti 
-            << " to CellId " << targetCellId 
+  std::cout << Simulator::Now ().GetSeconds () << " " << context
+            << " eNB CellId " << cellid
+            << ": start handover of UE with IMSI " << imsi
+            << " RNTI " << rnti
+            << " to CellId " << targetCellId
             << std::endl;
 }
 
-void 
-NotifyHandoverEndOkEnb (std::string context, 
-                        uint64_t imsi, 
-                        uint16_t cellid, 
+void
+NotifyHandoverEndOkEnb (std::string context,
+                        uint64_t imsi,
+                        uint16_t cellid,
                         uint16_t rnti)
 {
-  std::cout << context 
-            << " eNB CellId " << cellid 
-            << ": completed handover of UE with IMSI " << imsi 
-            << " RNTI " << rnti 
+  std::cout << Simulator::Now ().GetSeconds () << " " << context
+            << " eNB CellId " << cellid
+            << ": completed handover of UE with IMSI " << imsi
+            << " RNTI " << rnti
             << std::endl;
 }
- 
-
 
 
 /**
@@ -121,7 +119,6 @@
  * It instantiates two eNodeB, attaches one UE to the 'source' eNB and
  * triggers a handover of the UE towards the 'target' eNB.
  */
-NS_LOG_COMPONENT_DEFINE ("EpcX2HandoverExample");
 int
 main (int argc, char *argv[])
 {
@@ -146,23 +143,24 @@
 
   // change some default attributes so that they are reasonable for
   // this scenario, but do this before processing command line
-  // arguments, so that the user is allowed to override these settings 
-  Config::SetDefault ("ns3::UdpClient::Interval", TimeValue (MilliSeconds(10)));
-  Config::SetDefault ("ns3::UdpClient::MaxPackets", UintegerValue(1000000));
-  Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue(false));
+  // arguments, so that the user is allowed to override these settings
+  Config::SetDefault ("ns3::UdpClient::Interval", TimeValue (MilliSeconds (10)));
+  Config::SetDefault ("ns3::UdpClient::MaxPackets", UintegerValue (1000000));
+  Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue (false));
 
   // Command line arguments
   CommandLine cmd;
-  cmd.AddValue("numberOfUes", "Number of UEs", numberOfUes);
-  cmd.AddValue("numberOfEnbs", "Number of eNodeBs", numberOfEnbs);
-  cmd.AddValue("simTime", "Total duration of the simulation (in seconds)",simTime);
-  cmd.Parse(argc, argv);
+  cmd.AddValue ("numberOfUes", "Number of UEs", numberOfUes);
+  cmd.AddValue ("numberOfEnbs", "Number of eNodeBs", numberOfEnbs);
+  cmd.AddValue ("simTime", "Total duration of the simulation (in seconds)", simTime);
+  cmd.Parse (argc, argv);
 
 
   Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
-  Ptr<EpcHelper> epcHelper = CreateObject<EpcHelper> ();
+  Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper> ();
   lteHelper->SetEpcHelper (epcHelper);
-  lteHelper->SetSchedulerType("ns3::RrFfMacScheduler");
+  lteHelper->SetSchedulerType ("ns3::RrFfMacScheduler");
+  lteHelper->SetHandoverAlgorithmType ("ns3::NoOpHandoverAlgorithm"); // disable automatic handover
 
   Ptr<Node> pgw = epcHelper->GetPgwNode ();
 
@@ -193,24 +191,24 @@
 
   NodeContainer ueNodes;
   NodeContainer enbNodes;
-  enbNodes.Create(numberOfEnbs);
-  ueNodes.Create(numberOfUes);
+  enbNodes.Create (numberOfEnbs);
+  ueNodes.Create (numberOfUes);
 
   // Install Mobility Model
   Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
   for (uint16_t i = 0; i < numberOfEnbs; i++)
     {
-      positionAlloc->Add (Vector(distance * 2*i - distance, 0, 0));
+      positionAlloc->Add (Vector (distance * 2 * i - distance, 0, 0));
     }
   for (uint16_t i = 0; i < numberOfUes; i++)
     {
-      positionAlloc->Add (Vector(0, 0, 0));
+      positionAlloc->Add (Vector (0, 0, 0));
     }
   MobilityHelper mobility;
-  mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
-  mobility.SetPositionAllocator(positionAlloc);
-  mobility.Install(enbNodes);
-  mobility.Install(ueNodes);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.SetPositionAllocator (positionAlloc);
+  mobility.Install (enbNodes);
+  mobility.Install (ueNodes);
 
   // Install LTE Devices in eNB and UEs
   NetDeviceContainer enbLteDevs = lteHelper->InstallEnbDevice (enbNodes);
@@ -233,23 +231,23 @@
   // Attach all UEs to the first eNodeB
   for (uint16_t i = 0; i < numberOfUes; i++)
     {
-      lteHelper->Attach (ueLteDevs.Get(i), enbLteDevs.Get(0));
+      lteHelper->Attach (ueLteDevs.Get (i), enbLteDevs.Get (0));
     }
 
 
   NS_LOG_LOGIC ("setting up applications");
-    
+
   // Install and start applications on UEs and remote host
   uint16_t dlPort = 10000;
   uint16_t ulPort = 20000;
 
   // randomize a bit start times to avoid simulation artifacts
   // (e.g., buffer overflows due to packet transmissions happening
-  // exactly at the same time) 
+  // exactly at the same time)
   Ptr<UniformRandomVariable> startTimeSeconds = CreateObject<UniformRandomVariable> ();
   startTimeSeconds->SetAttribute ("Min", DoubleValue (0));
   startTimeSeconds->SetAttribute ("Max", DoubleValue (0.010));
-     
+
   for (uint32_t u = 0; u < numberOfUes; ++u)
     {
       Ptr<Node> ue = ueNodes.Get (u);
@@ -264,33 +262,33 @@
 
           ApplicationContainer clientApps;
           ApplicationContainer serverApps;
-          
+
           NS_LOG_LOGIC ("installing UDP DL app for UE " << u);
           UdpClientHelper dlClientHelper (ueIpIfaces.GetAddress (u), dlPort);
           clientApps.Add (dlClientHelper.Install (remoteHost));
-          PacketSinkHelper dlPacketSinkHelper ("ns3::UdpSocketFactory", 
+          PacketSinkHelper dlPacketSinkHelper ("ns3::UdpSocketFactory",
                                                InetSocketAddress (Ipv4Address::GetAny (), dlPort));
           serverApps.Add (dlPacketSinkHelper.Install (ue));
-              
+
           NS_LOG_LOGIC ("installing UDP UL app for UE " << u);
           UdpClientHelper ulClientHelper (remoteHostAddr, ulPort);
           clientApps.Add (ulClientHelper.Install (ue));
-          PacketSinkHelper ulPacketSinkHelper ("ns3::UdpSocketFactory", 
+          PacketSinkHelper ulPacketSinkHelper ("ns3::UdpSocketFactory",
                                                InetSocketAddress (Ipv4Address::GetAny (), ulPort));
-          serverApps.Add (ulPacketSinkHelper.Install (remoteHost));  
-             
+          serverApps.Add (ulPacketSinkHelper.Install (remoteHost));
+
           Ptr<EpcTft> tft = Create<EpcTft> ();
           EpcTft::PacketFilter dlpf;
           dlpf.localPortStart = dlPort;
           dlpf.localPortEnd = dlPort;
-          tft->Add (dlpf); 
+          tft->Add (dlpf);
           EpcTft::PacketFilter ulpf;
           ulpf.remotePortStart = ulPort;
           ulpf.remotePortEnd = ulPort;
           tft->Add (ulpf);
           EpsBearer bearer (EpsBearer::NGBR_VIDEO_TCP_DEFAULT);
           lteHelper->ActivateDedicatedEpsBearer (ueLteDevs.Get (u), bearer, tft);
-          
+
           Time startTime = Seconds (startTimeSeconds->GetValue ());
           serverApps.Start (startTime);
           clientApps.Start (startTime);
@@ -304,11 +302,11 @@
 
   // X2-based Handover
   lteHelper->HandoverRequest (Seconds (0.100), ueLteDevs.Get (0), enbLteDevs.Get (0), enbLteDevs.Get (1));
-  
-  
+
   // Uncomment to enable PCAP tracing
   //p2ph.EnablePcapAll("lena-x2-handover");
 
+  lteHelper->EnablePhyTraces ();
   lteHelper->EnableMacTraces ();
   lteHelper->EnableRlcTraces ();
   lteHelper->EnablePdcpTraces ();
@@ -333,13 +331,13 @@
                    MakeCallback (&NotifyHandoverEndOkUe));
 
 
-  Simulator::Stop(Seconds(simTime));
-  Simulator::Run();
+  Simulator::Stop (Seconds (simTime));
+  Simulator::Run ();
 
   // GtkConfigStore config;
-  // config.ConfigureAttributes();
+  // config.ConfigureAttributes ();
 
-  Simulator::Destroy();
+  Simulator::Destroy ();
   return 0;
 
 }
diff -Naur ns-3.18.1/src/lte/examples/lena-x2-handover-measures.cc ns-3.19/src/lte/examples/lena-x2-handover-measures.cc
--- ns-3.18.1/src/lte/examples/lena-x2-handover-measures.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/examples/lena-x2-handover-measures.cc	2013-12-20 09:44:51.000000000 -0800
@@ -27,12 +27,92 @@
 #include "ns3/point-to-point-module.h"
 #include "ns3/config-store-module.h"
 
-#include <iomanip>
-
 using namespace ns3;
 
 NS_LOG_COMPONENT_DEFINE ("LenaX2HandoverMeasures");
 
+void
+NotifyConnectionEstablishedUe (std::string context,
+                               uint64_t imsi,
+                               uint16_t cellid,
+                               uint16_t rnti)
+{
+  std::cout << context
+            << " UE IMSI " << imsi
+            << ": connected to CellId " << cellid
+            << " with RNTI " << rnti
+            << std::endl;
+}
+
+void
+NotifyHandoverStartUe (std::string context,
+                       uint64_t imsi,
+                       uint16_t cellid,
+                       uint16_t rnti,
+                       uint16_t targetCellId)
+{
+  std::cout << context
+            << " UE IMSI " << imsi
+            << ": previously connected to CellId " << cellid
+            << " with RNTI " << rnti
+            << ", doing handover to CellId " << targetCellId
+            << std::endl;
+}
+
+void
+NotifyHandoverEndOkUe (std::string context,
+                       uint64_t imsi,
+                       uint16_t cellid,
+                       uint16_t rnti)
+{
+  std::cout << context
+            << " UE IMSI " << imsi
+            << ": successful handover to CellId " << cellid
+            << " with RNTI " << rnti
+            << std::endl;
+}
+
+void
+NotifyConnectionEstablishedEnb (std::string context,
+                                uint64_t imsi,
+                                uint16_t cellid,
+                                uint16_t rnti)
+{
+  std::cout << context
+            << " eNB CellId " << cellid
+            << ": successful connection of UE with IMSI " << imsi
+            << " RNTI " << rnti
+            << std::endl;
+}
+
+void
+NotifyHandoverStartEnb (std::string context,
+                        uint64_t imsi,
+                        uint16_t cellid,
+                        uint16_t rnti,
+                        uint16_t targetCellId)
+{
+  std::cout << context
+            << " eNB CellId " << cellid
+            << ": start handover of UE with IMSI " << imsi
+            << " RNTI " << rnti
+            << " to CellId " << targetCellId
+            << std::endl;
+}
+
+void
+NotifyHandoverEndOkEnb (std::string context,
+                        uint64_t imsi,
+                        uint16_t cellid,
+                        uint16_t rnti)
+{
+  std::cout << context
+            << " eNB CellId " << cellid
+            << ": completed handover of UE with IMSI " << imsi
+            << " RNTI " << rnti
+            << std::endl;
+}
+
 
 /**
  * Sample simulation script for an automatic X2-based handover based on the RSRQ measures.
@@ -44,7 +124,7 @@
 int
 main (int argc, char *argv[])
 {
-  // LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_ALL);
+  // LogLevel logLevel = (LogLevel)(LOG_PREFIX_ALL | LOG_LEVEL_ALL);
 
   // LogComponentEnable ("LteHelper", logLevel);
   // LogComponentEnable ("EpcHelper", logLevel);
@@ -56,37 +136,51 @@
   // LogComponentEnable ("LteEnbNetDevice", logLevel);
   // LogComponentEnable ("LteUeRrc", logLevel);
   // LogComponentEnable ("LteUeNetDevice", logLevel);
+  // LogComponentEnable ("A2A4RsrqHandoverAlgorithm", logLevel);
+  // LogComponentEnable ("A3RsrpHandoverAlgorithm", logLevel);
 
   uint16_t numberOfUes = 1;
   uint16_t numberOfEnbs = 2;
   uint16_t numBearersPerUe = 0;
-  double distance = 1000.0; // m
-  double yForUe = 1000.0;   // m
-  double speed = 20;        // m/s
-  double simTime = 3.0 * distance / speed; // 3000 m / 20 m/s = 150 secs
-  double enbTxPowerDbm = 20.0;
+  double distance = 500.0; // m
+  double yForUe = 500.0;   // m
+  double speed = 20;       // m/s
+  double simTime = (double)(numberOfEnbs + 1) * distance / speed; // 1500 m / 20 m/s = 75 secs
+  double enbTxPowerDbm = 46.0;
 
   // change some default attributes so that they are reasonable for
   // this scenario, but do this before processing command line
-  // arguments, so that the user is allowed to override these settings 
-  Config::SetDefault ("ns3::UdpClient::Interval", TimeValue (MilliSeconds(10)));
-  Config::SetDefault ("ns3::UdpClient::MaxPackets", UintegerValue(1000000));
-  Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue(true));
+  // arguments, so that the user is allowed to override these settings
+  Config::SetDefault ("ns3::UdpClient::Interval", TimeValue (MilliSeconds (10)));
+  Config::SetDefault ("ns3::UdpClient::MaxPackets", UintegerValue (1000000));
+  Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue (true));
 
   // Command line arguments
   CommandLine cmd;
-  cmd.AddValue("simTime", "Total duration of the simulation (in seconds)", simTime);
-  cmd.AddValue("speed", "Speed of the UE (default = 20 m/s)", speed);
-  cmd.AddValue("enbTxPowerDbm", "TX power [dBm] used by HeNBs (defalut = 20.0)", enbTxPowerDbm);
+  cmd.AddValue ("simTime", "Total duration of the simulation (in seconds)", simTime);
+  cmd.AddValue ("speed", "Speed of the UE (default = 20 m/s)", speed);
+  cmd.AddValue ("enbTxPowerDbm", "TX power [dBm] used by HeNBs (defalut = 46.0)", enbTxPowerDbm);
 
-  cmd.Parse(argc, argv);
+  cmd.Parse (argc, argv);
 
 
   Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
-  Ptr<EpcHelper> epcHelper = CreateObject<EpcHelper> ();
+  Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper> ();
   lteHelper->SetEpcHelper (epcHelper);
   lteHelper->SetSchedulerType ("ns3::RrFfMacScheduler");
 
+  lteHelper->SetHandoverAlgorithmType ("ns3::A2A4RsrqHandoverAlgorithm");
+  lteHelper->SetHandoverAlgorithmAttribute ("ServingCellThreshold",
+                                            UintegerValue (30));
+  lteHelper->SetHandoverAlgorithmAttribute ("NeighbourCellOffset",
+                                            UintegerValue (1));
+
+  //  lteHelper->SetHandoverAlgorithmType ("ns3::A3RsrpHandoverAlgorithm");
+  //  lteHelper->SetHandoverAlgorithmAttribute ("Hysteresis",
+  //                                            DoubleValue (3.0));
+  //  lteHelper->SetHandoverAlgorithmAttribute ("TimeToTrigger",
+  //                                            TimeValue (MilliSeconds (256)));
+
   Ptr<Node> pgw = epcHelper->GetPgwNode ();
 
   // Create a single RemoteHost
@@ -114,6 +208,21 @@
   // interface 0 is localhost, 1 is the p2p device
   remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);
 
+  /*
+   * Network topology:
+   *
+   *      |     + --------------------------------------------------------->
+   *      |     UE
+   *      |
+   *      |               d                   d                   d
+   *    y |     |-------------------x-------------------x-------------------
+   *      |     |                 eNodeB              eNodeB
+   *      |   d |
+   *      |     |
+   *      |     |                                             d = distance
+   *            o (0, 0, 0)                                   y = yForUe
+   */
+
   NodeContainer ueNodes;
   NodeContainer enbNodes;
   enbNodes.Create (numberOfEnbs);
@@ -127,14 +236,14 @@
       enbPositionAlloc->Add (enbPosition);
     }
   MobilityHelper enbMobility;
-  enbMobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
-  enbMobility.SetPositionAllocator(enbPositionAlloc);
-  enbMobility.Install(enbNodes);
+  enbMobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  enbMobility.SetPositionAllocator (enbPositionAlloc);
+  enbMobility.Install (enbNodes);
 
   // Install Mobility Model in UE
   MobilityHelper ueMobility;
   ueMobility.SetMobilityModel ("ns3::ConstantVelocityMobilityModel");
-  ueMobility.Install(ueNodes);
+  ueMobility.Install (ueNodes);
   ueNodes.Get (0)->GetObject<MobilityModel> ()->SetPosition (Vector (0, yForUe, 0));
   ueNodes.Get (0)->GetObject<ConstantVelocityMobilityModel> ()->SetVelocity (Vector (speed, 0, 0));
 
@@ -160,23 +269,23 @@
   // Attach all UEs to the first eNodeB
   for (uint16_t i = 0; i < numberOfUes; i++)
     {
-      lteHelper->Attach (ueLteDevs.Get(i), enbLteDevs.Get(0));
+      lteHelper->Attach (ueLteDevs.Get (i), enbLteDevs.Get (0));
     }
 
 
   NS_LOG_LOGIC ("setting up applications");
-    
+
   // Install and start applications on UEs and remote host
   uint16_t dlPort = 10000;
   uint16_t ulPort = 20000;
 
   // randomize a bit start times to avoid simulation artifacts
   // (e.g., buffer overflows due to packet transmissions happening
-  // exactly at the same time) 
+  // exactly at the same time)
   Ptr<UniformRandomVariable> startTimeSeconds = CreateObject<UniformRandomVariable> ();
   startTimeSeconds->SetAttribute ("Min", DoubleValue (0));
   startTimeSeconds->SetAttribute ("Max", DoubleValue (0.010));
-     
+
   for (uint32_t u = 0; u < numberOfUes; ++u)
     {
       Ptr<Node> ue = ueNodes.Get (u);
@@ -195,22 +304,22 @@
           NS_LOG_LOGIC ("installing UDP DL app for UE " << u);
           UdpClientHelper dlClientHelper (ueIpIfaces.GetAddress (u), dlPort);
           clientApps.Add (dlClientHelper.Install (remoteHost));
-          PacketSinkHelper dlPacketSinkHelper ("ns3::UdpSocketFactory", 
+          PacketSinkHelper dlPacketSinkHelper ("ns3::UdpSocketFactory",
                                                InetSocketAddress (Ipv4Address::GetAny (), dlPort));
           serverApps.Add (dlPacketSinkHelper.Install (ue));
 
           NS_LOG_LOGIC ("installing UDP UL app for UE " << u);
           UdpClientHelper ulClientHelper (remoteHostAddr, ulPort);
           clientApps.Add (ulClientHelper.Install (ue));
-          PacketSinkHelper ulPacketSinkHelper ("ns3::UdpSocketFactory", 
+          PacketSinkHelper ulPacketSinkHelper ("ns3::UdpSocketFactory",
                                                InetSocketAddress (Ipv4Address::GetAny (), ulPort));
-          serverApps.Add (ulPacketSinkHelper.Install (remoteHost));  
+          serverApps.Add (ulPacketSinkHelper.Install (remoteHost));
 
           Ptr<EpcTft> tft = Create<EpcTft> ();
           EpcTft::PacketFilter dlpf;
           dlpf.localPortStart = dlPort;
           dlpf.localPortEnd = dlPort;
-          tft->Add (dlpf); 
+          tft->Add (dlpf);
           EpcTft::PacketFilter ulpf;
           ulpf.remotePortStart = ulPort;
           ulpf.remotePortEnd = ulPort;
@@ -221,6 +330,7 @@
           Time startTime = Seconds (startTimeSeconds->GetValue ());
           serverApps.Start (startTime);
           clientApps.Start (startTime);
+
         } // end for b
     }
 
@@ -229,11 +339,10 @@
   lteHelper->AddX2Interface (enbNodes);
 
   // X2-based Handover
-//   lteHelper->HandoverRequest (Seconds (0.100), ueLteDevs.Get (0), enbLteDevs.Get (0), enbLteDevs.Get (1));
-  
-  
+  //lteHelper->HandoverRequest (Seconds (0.100), ueLteDevs.Get (0), enbLteDevs.Get (0), enbLteDevs.Get (1));
+
   // Uncomment to enable PCAP tracing
-  //p2ph.EnablePcapAll("lena-x2-handover");
+  // p2ph.EnablePcapAll("lena-x2-handover-measures");
 
   lteHelper->EnablePhyTraces ();
   lteHelper->EnableMacTraces ();
@@ -244,14 +353,28 @@
   Ptr<RadioBearerStatsCalculator> pdcpStats = lteHelper->GetPdcpStats ();
   pdcpStats->SetAttribute ("EpochDuration", TimeValue (Seconds (1.0)));
 
+  // connect custom trace sinks for RRC connection establishment and handover notification
+  Config::Connect ("/NodeList/*/DeviceList/*/LteEnbRrc/ConnectionEstablished",
+                   MakeCallback (&NotifyConnectionEstablishedEnb));
+  Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/ConnectionEstablished",
+                   MakeCallback (&NotifyConnectionEstablishedUe));
+  Config::Connect ("/NodeList/*/DeviceList/*/LteEnbRrc/HandoverStart",
+                   MakeCallback (&NotifyHandoverStartEnb));
+  Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/HandoverStart",
+                   MakeCallback (&NotifyHandoverStartUe));
+  Config::Connect ("/NodeList/*/DeviceList/*/LteEnbRrc/HandoverEndOk",
+                   MakeCallback (&NotifyHandoverEndOkEnb));
+  Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/HandoverEndOk",
+                   MakeCallback (&NotifyHandoverEndOkUe));
+
 
-  Simulator::Stop(Seconds(simTime));
-  Simulator::Run();
+  Simulator::Stop (Seconds (simTime));
+  Simulator::Run ();
 
   // GtkConfigStore config;
-  // config.ConfigureAttributes();
+  // config.ConfigureAttributes ();
 
-  Simulator::Destroy();
+  Simulator::Destroy ();
   return 0;
 
 }
diff -Naur ns-3.18.1/src/lte/helper/epc-helper.cc ns-3.19/src/lte/helper/epc-helper.cc
--- ns-3.18.1/src/lte/helper/epc-helper.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/epc-helper.cc	2013-12-20 09:44:51.000000000 -0800
@@ -1,6 +1,6 @@
 /* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2011-2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ * Copyright (c) 2011-2013 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -22,84 +22,21 @@
 
 #include <ns3/epc-helper.h>
 #include <ns3/log.h>
-#include <ns3/inet-socket-address.h>
-#include <ns3/mac48-address.h>
-#include <ns3/eps-bearer.h>
+#include <ns3/node.h>
 #include <ns3/ipv4-address.h>
-#include <ns3/internet-stack-helper.h>
-#include <ns3/point-to-point-helper.h>
-#include <ns3/packet-socket-helper.h>
-#include <ns3/packet-socket-address.h>
-#include <ns3/epc-enb-application.h>
-#include <ns3/epc-sgw-pgw-application.h>
-
-#include <ns3/lte-enb-rrc.h>
-#include <ns3/epc-x2.h>
-#include <ns3/lte-enb-net-device.h>
-#include <ns3/lte-ue-net-device.h>
-#include <ns3/epc-mme.h>
-#include <ns3/epc-ue-nas.h>
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("EpcHelper");
+NS_LOG_COMPONENT_DEFINE ("EpcHelper")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (EpcHelper);
+NS_OBJECT_ENSURE_REGISTERED (EpcHelper)
+  ;
 
 
 EpcHelper::EpcHelper () 
-  : m_gtpuUdpPort (2152)  // fixed by the standard
 {
   NS_LOG_FUNCTION (this);
-
-  // since we use point-to-point links for all S1-U links, 
-  // we use a /30 subnet which can hold exactly two addresses 
-  // (remember that net broadcast and null address are not valid)
-  m_s1uIpv4AddressHelper.SetBase ("10.0.0.0", "255.255.255.252");
-
-  m_x2Ipv4AddressHelper.SetBase ("12.0.0.0", "255.255.255.252");
-
-  // we use a /8 net for all UEs
-  m_ueAddressHelper.SetBase ("7.0.0.0", "255.0.0.0");
-  
-  // create SgwPgwNode
-  m_sgwPgw = CreateObject<Node> ();
-  InternetStackHelper internet;
-  internet.Install (m_sgwPgw);
-  
-  // create S1-U socket
-  Ptr<Socket> sgwPgwS1uSocket = Socket::CreateSocket (m_sgwPgw, TypeId::LookupByName ("ns3::UdpSocketFactory"));
-  int retval = sgwPgwS1uSocket->Bind (InetSocketAddress (Ipv4Address::GetAny (), m_gtpuUdpPort));
-  NS_ASSERT (retval == 0);
-
-  // create TUN device implementing tunneling of user data over GTP-U/UDP/IP 
-  m_tunDevice = CreateObject<VirtualNetDevice> ();
-  // allow jumbo packets
-  m_tunDevice->SetAttribute ("Mtu", UintegerValue (30000));
-
-  // yes we need this
-  m_tunDevice->SetAddress (Mac48Address::Allocate ()); 
-
-  m_sgwPgw->AddDevice (m_tunDevice);
-  NetDeviceContainer tunDeviceContainer;
-  tunDeviceContainer.Add (m_tunDevice);
-  
-  // the TUN device is on the same subnet as the UEs, so when a packet
-  // addressed to an UE arrives at the intenet to the WAN interface of
-  // the PGW it will be forwarded to the TUN device. 
-  Ipv4InterfaceContainer tunDeviceIpv4IfContainer = m_ueAddressHelper.Assign (tunDeviceContainer);  
-
-  // create EpcSgwPgwApplication
-  m_sgwPgwApp = CreateObject<EpcSgwPgwApplication> (m_tunDevice, sgwPgwS1uSocket);
-  m_sgwPgw->AddApplication (m_sgwPgwApp);
-  
-  // connect SgwPgwApplication and virtual net device for tunneling
-  m_tunDevice->SetSendCallback (MakeCallback (&EpcSgwPgwApplication::RecvFromTunDevice, m_sgwPgwApp));
-
-  // Create MME and connect with SGW via S11 interface
-  m_mme = CreateObject<EpcMme> ();
-  m_mme->SetS11SapSgw (m_sgwPgwApp->GetS11SapSgw ());
-  m_sgwPgwApp->SetS11SapMme (m_mme->GetS11SapMme ());
 }
 
 EpcHelper::~EpcHelper ()
@@ -112,38 +49,7 @@
 {
   static TypeId tid = TypeId ("ns3::EpcHelper")
     .SetParent<Object> ()
-    .AddConstructor<EpcHelper> ()
-    .AddAttribute ("S1uLinkDataRate", 
-                   "The data rate to be used for the next S1-U link to be created",
-                   DataRateValue (DataRate ("10Gb/s")),
-                   MakeDataRateAccessor (&EpcHelper::m_s1uLinkDataRate),
-                   MakeDataRateChecker ())
-    .AddAttribute ("S1uLinkDelay", 
-                   "The delay to be used for the next S1-U link to be created",
-                   TimeValue (Seconds (0)),
-                   MakeTimeAccessor (&EpcHelper::m_s1uLinkDelay),
-                   MakeTimeChecker ())
-    .AddAttribute ("S1uLinkMtu", 
-                   "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.",
-                   UintegerValue (2000),
-                   MakeUintegerAccessor (&EpcHelper::m_s1uLinkMtu),
-                   MakeUintegerChecker<uint16_t> ())
-    .AddAttribute ("X2LinkDataRate",
-                   "The data rate to be used for the next X2 link to be created",
-                   DataRateValue (DataRate ("10Gb/s")),
-                   MakeDataRateAccessor (&EpcHelper::m_x2LinkDataRate),
-                   MakeDataRateChecker ())
-    .AddAttribute ("X2LinkDelay",
-                   "The delay to be used for the next X2 link to be created",
-                   TimeValue (Seconds (0)),
-                   MakeTimeAccessor (&EpcHelper::m_x2LinkDelay),
-                   MakeTimeChecker ())
-    .AddAttribute ("X2LinkMtu",
-                   "The MTU of the next X2 link to be created. Note that, because of some big X2 messages, you need a big MTU.",
-                   UintegerValue (3000),
-                   MakeUintegerAccessor (&EpcHelper::m_x2LinkMtu),
-                   MakeUintegerChecker<uint16_t> ())
-  ;
+    ;
   return tid;
 }
 
@@ -151,194 +57,9 @@
 EpcHelper::DoDispose ()
 {
   NS_LOG_FUNCTION (this);
-  m_tunDevice->SetSendCallback (MakeNullCallback<bool, Ptr<Packet>, const Address&, const Address&, uint16_t> ());
-  m_tunDevice = 0;
-  m_sgwPgwApp = 0;  
-  m_sgwPgw->Dispose ();
-}
-
-
-void
-EpcHelper::AddEnb (Ptr<Node> enb, Ptr<NetDevice> lteEnbNetDevice, uint16_t cellId)
-{
-  NS_LOG_FUNCTION (this << enb << lteEnbNetDevice << cellId);
-
-  NS_ASSERT (enb == lteEnbNetDevice->GetNode ());
-
-  // add an IPv4 stack to the previously created eNB
-  InternetStackHelper internet;
-  internet.Install (enb);
-  NS_LOG_LOGIC ("number of Ipv4 ifaces of the eNB after node creation: " << enb->GetObject<Ipv4> ()->GetNInterfaces ());
-
-  // create a point to point link between the new eNB and the SGW with
-  // the corresponding new NetDevices on each side  
-  NodeContainer enbSgwNodes;
-  enbSgwNodes.Add (m_sgwPgw);
-  enbSgwNodes.Add (enb);
-  PointToPointHelper p2ph;
-  p2ph.SetDeviceAttribute ("DataRate", DataRateValue (m_s1uLinkDataRate));
-  p2ph.SetDeviceAttribute ("Mtu", UintegerValue (m_s1uLinkMtu));
-  p2ph.SetChannelAttribute ("Delay", TimeValue (m_s1uLinkDelay));  
-  NetDeviceContainer enbSgwDevices = p2ph.Install (enb, m_sgwPgw);
-  NS_LOG_LOGIC ("number of Ipv4 ifaces of the eNB after installing p2p dev: " << enb->GetObject<Ipv4> ()->GetNInterfaces ());  
-  Ptr<NetDevice> enbDev = enbSgwDevices.Get (0);
-  Ptr<NetDevice> sgwDev = enbSgwDevices.Get (1);
-  m_s1uIpv4AddressHelper.NewNetwork ();
-  Ipv4InterfaceContainer enbSgwIpIfaces = m_s1uIpv4AddressHelper.Assign (enbSgwDevices);
-  NS_LOG_LOGIC ("number of Ipv4 ifaces of the eNB after assigning Ipv4 addr to S1 dev: " << enb->GetObject<Ipv4> ()->GetNInterfaces ());
-  
-  Ipv4Address enbAddress = enbSgwIpIfaces.GetAddress (0);
-  Ipv4Address sgwAddress = enbSgwIpIfaces.GetAddress (1);
-
-  // create S1-U socket for the ENB
-  Ptr<Socket> enbS1uSocket = Socket::CreateSocket (enb, TypeId::LookupByName ("ns3::UdpSocketFactory"));
-  int retval = enbS1uSocket->Bind (InetSocketAddress (enbAddress, m_gtpuUdpPort));
-  NS_ASSERT (retval == 0);
-  
-
-  // give PacketSocket powers to the eNB
-  //PacketSocketHelper packetSocket;
-  //packetSocket.Install (enb); 
-  
-  // create LTE socket for the ENB 
-  Ptr<Socket> enbLteSocket = Socket::CreateSocket (enb, TypeId::LookupByName ("ns3::PacketSocketFactory"));
-  PacketSocketAddress enbLteSocketBindAddress;
-  enbLteSocketBindAddress.SetSingleDevice (lteEnbNetDevice->GetIfIndex ());
-  enbLteSocketBindAddress.SetProtocol (Ipv4L3Protocol::PROT_NUMBER);
-  retval = enbLteSocket->Bind (enbLteSocketBindAddress);
-  NS_ASSERT (retval == 0);  
-  PacketSocketAddress enbLteSocketConnectAddress;
-  enbLteSocketConnectAddress.SetPhysicalAddress (Mac48Address::GetBroadcast ());
-  enbLteSocketConnectAddress.SetSingleDevice (lteEnbNetDevice->GetIfIndex ());
-  enbLteSocketConnectAddress.SetProtocol (Ipv4L3Protocol::PROT_NUMBER);
-  retval = enbLteSocket->Connect (enbLteSocketConnectAddress);
-  NS_ASSERT (retval == 0);  
-  
-
-  NS_LOG_INFO ("create EpcEnbApplication");
-  Ptr<EpcEnbApplication> enbApp = CreateObject<EpcEnbApplication> (enbLteSocket, enbS1uSocket, enbAddress, sgwAddress, cellId);
-  enb->AddApplication (enbApp);
-  NS_ASSERT (enb->GetNApplications () == 1);
-  NS_ASSERT_MSG (enb->GetApplication (0)->GetObject<EpcEnbApplication> () != 0, "cannot retrieve EpcEnbApplication");
-  NS_LOG_LOGIC ("enb: " << enb << ", enb->GetApplication (0): " << enb->GetApplication (0));
-
-  
-  NS_LOG_INFO ("Create EpcX2 entity");
-  Ptr<EpcX2> x2 = CreateObject<EpcX2> ();
-  enb->AggregateObject (x2);
-
-  NS_LOG_INFO ("connect S1-AP interface");
-  m_mme->AddEnb (cellId, enbAddress, enbApp->GetS1apSapEnb ());
-  m_sgwPgwApp->AddEnb (cellId, enbAddress, sgwAddress);
-  enbApp->SetS1apSapMme (m_mme->GetS1apSapMme ());
+  Object::DoDispose ();
 }
 
 
-void
-EpcHelper::AddX2Interface (Ptr<Node> enb1, Ptr<Node> enb2)
-{
-  NS_LOG_FUNCTION (this << enb1 << enb2);
-
-  // Create a point to point link between the two eNBs with
-  // the corresponding new NetDevices on each side
-  NodeContainer enbNodes;
-  enbNodes.Add (enb1);
-  enbNodes.Add (enb2);
-  PointToPointHelper p2ph;
-  p2ph.SetDeviceAttribute ("DataRate", DataRateValue (m_x2LinkDataRate));
-  p2ph.SetDeviceAttribute ("Mtu", UintegerValue (m_x2LinkMtu));
-  p2ph.SetChannelAttribute ("Delay", TimeValue (m_x2LinkDelay));
-  NetDeviceContainer enbDevices = p2ph.Install (enb1, enb2);
-  NS_LOG_LOGIC ("number of Ipv4 ifaces of the eNB #1 after installing p2p dev: " << enb1->GetObject<Ipv4> ()->GetNInterfaces ());
-  NS_LOG_LOGIC ("number of Ipv4 ifaces of the eNB #2 after installing p2p dev: " << enb2->GetObject<Ipv4> ()->GetNInterfaces ());
-  Ptr<NetDevice> enb1Dev = enbDevices.Get (0);
-  Ptr<NetDevice> enb2Dev = enbDevices.Get (1);
-
-  m_x2Ipv4AddressHelper.NewNetwork ();
-  Ipv4InterfaceContainer enbIpIfaces = m_x2Ipv4AddressHelper.Assign (enbDevices);
-  NS_LOG_LOGIC ("number of Ipv4 ifaces of the eNB #1 after assigning Ipv4 addr to X2 dev: " << enb1->GetObject<Ipv4> ()->GetNInterfaces ());
-  NS_LOG_LOGIC ("number of Ipv4 ifaces of the eNB #2 after assigning Ipv4 addr to X2 dev: " << enb2->GetObject<Ipv4> ()->GetNInterfaces ());
-
-  Ipv4Address enb1X2Address = enbIpIfaces.GetAddress (0);
-  Ipv4Address enb2X2Address = enbIpIfaces.GetAddress (1);
-
-  // Add X2 interface to both eNBs' X2 entities
-  Ptr<EpcX2> enb1X2 = enb1->GetObject<EpcX2> ();
-  Ptr<LteEnbNetDevice> enb1LteDev = enb1->GetDevice (0)->GetObject<LteEnbNetDevice> ();
-  uint16_t enb1CellId = enb1LteDev->GetCellId ();
-  NS_LOG_LOGIC ("LteEnbNetDevice #1 = " << enb1LteDev << " - CellId = " << enb1CellId);
-
-  Ptr<EpcX2> enb2X2 = enb2->GetObject<EpcX2> ();
-  Ptr<LteEnbNetDevice> enb2LteDev = enb2->GetDevice (0)->GetObject<LteEnbNetDevice> ();
-  uint16_t enb2CellId = enb2LteDev->GetCellId ();
-  NS_LOG_LOGIC ("LteEnbNetDevice #2 = " << enb2LteDev << " - CellId = " << enb2CellId);
-
-  enb1X2->AddX2Interface (enb1CellId, enb1X2Address, enb2CellId, enb2X2Address);
-  enb2X2->AddX2Interface (enb2CellId, enb2X2Address, enb1CellId, enb1X2Address);
-
-  enb1LteDev->GetRrc ()->AddX2Neighbour (enb2LteDev->GetCellId ());
-  enb2LteDev->GetRrc ()->AddX2Neighbour (enb1LteDev->GetCellId ());
-}
-
-
-void 
-EpcHelper::AddUe (Ptr<NetDevice> ueDevice, uint64_t imsi)
-{
-  NS_LOG_FUNCTION (this << imsi << ueDevice );
-  
-  m_mme->AddUe (imsi);
-  m_sgwPgwApp->AddUe (imsi);
-  
-
-}
-
-void
-EpcHelper::ActivateEpsBearer (Ptr<NetDevice> ueDevice, uint64_t imsi, Ptr<EpcTft> tft, EpsBearer bearer)
-{
-  NS_LOG_FUNCTION (this << ueDevice << imsi);
-
-  // we now retrieve the IPv4 address of the UE and notify it to the SGW;
-  // we couldn't do it before since address assignment is triggered by
-  // the user simulation program, rather than done by the EPC   
-  Ptr<Node> ueNode = ueDevice->GetNode (); 
-  Ptr<Ipv4> ueIpv4 = ueNode->GetObject<Ipv4> ();
-  NS_ASSERT_MSG (ueIpv4 != 0, "UEs need to have IPv4 installed before EPS bearers can be activated");
-  int32_t interface =  ueIpv4->GetInterfaceForDevice (ueDevice);
-  NS_ASSERT (interface >= 0);
-  NS_ASSERT (ueIpv4->GetNAddresses (interface) == 1);
-  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);
-  Ptr<LteUeNetDevice> ueLteDevice = ueDevice->GetObject<LteUeNetDevice> ();
-  if (ueLteDevice)
-    {
-      ueLteDevice->GetNas ()->ActivateEpsBearer (bearer, tft);
-    }
-}
-
-
-Ptr<Node>
-EpcHelper::GetPgwNode ()
-{
-  return m_sgwPgw;
-}
-
-
-Ipv4InterfaceContainer 
-EpcHelper::AssignUeIpv4Address (NetDeviceContainer ueDevices)
-{
-  return m_ueAddressHelper.Assign (ueDevices);
-}
-
-
-
-Ipv4Address
-EpcHelper::GetUeDefaultGatewayAddress ()
-{
-  // return the address of the tun device
-  return m_sgwPgw->GetObject<Ipv4> ()->GetAddress (1, 0).GetLocal ();
-}
-
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/lte/helper/epc-helper.h ns-3.19/src/lte/helper/epc-helper.h
--- ns-3.18.1/src/lte/helper/epc-helper.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/epc-helper.h	2013-12-20 09:44:51.000000000 -0800
@@ -1,6 +1,6 @@
 /* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2011-2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ * Copyright (c) 2011-2013 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -39,12 +39,11 @@
 class EpcMme;
 
 /**
- * \brief Helper class to handle the creation of the EPC entities and protocols.
+ * \brief Base helper class to handle the creation of the EPC entities.
  *
- * This Helper will create an EPC network topology comprising of a
- * single node that implements both the SGW and PGW functionality, and
- * is connected to all the eNBs in the simulation by means of the S1-U
- * interface. 
+ * This class provides the API for the implementation of helpers that
+ * allow to create EPC entities and the nodes and interfaces that host
+ * and connect them. 
  */
 class EpcHelper : public Object
 {
@@ -73,7 +72,7 @@
    * \param lteEnbNetDevice the LteEnbNetDevice of the eNB node
    * \param cellId ID of the eNB
    */
-  void AddEnb (Ptr<Node> enbNode, Ptr<NetDevice> lteEnbNetDevice, uint16_t cellId);
+  virtual void AddEnb (Ptr<Node> enbNode, Ptr<NetDevice> lteEnbNetDevice, uint16_t cellId) = 0;
 
   /** 
    * Notify the EPC of the existance of a new UE which might attach at a later time
@@ -81,7 +80,7 @@
    * \param ueLteDevice the UE device to be attached
    * \param imsi the unique identifier of the UE
    */
-  void AddUe (Ptr<NetDevice> ueLteDevice, uint64_t imsi);
+  virtual void AddUe (Ptr<NetDevice> ueLteDevice, uint64_t imsi) = 0;
 
   /** 
    * Add an X2 interface between two eNB
@@ -89,7 +88,7 @@
    * \param enbNode1 one eNB peer of the X2 interface
    * \param enbNode2 the other eNB peer of the X2 interface
    */
-  void AddX2Interface (Ptr<Node> enbNode1, Ptr<Node> enbNode2);
+  virtual void AddX2Interface (Ptr<Node> enbNode1, Ptr<Node> enbNode2) = 0;
 
   /** 
    * Activate an EPS bearer, setting up the corresponding S1-U tunnel.
@@ -102,7 +101,7 @@
    * \param tft the Traffic Flow Template of the new bearer
    * \param bearer struct describing the characteristics of the EPS bearer to be activated
    */
-  void ActivateEpsBearer (Ptr<NetDevice> ueLteDevice, uint64_t imsi, Ptr<EpcTft> tft, EpsBearer bearer);
+  virtual void ActivateEpsBearer (Ptr<NetDevice> ueLteDevice, uint64_t imsi, Ptr<EpcTft> tft, EpsBearer bearer) = 0;
 
 
   /** 
@@ -113,7 +112,7 @@
    * intended for this method is to allow the user to configure the Gi
    * interface of the PGW, i.e., to connect the PGW to the internet.
    */
-  Ptr<Node> GetPgwNode ();
+  virtual Ptr<Node> GetPgwNode () = 0;
 
   /** 
    * Assign IPv4 addresses to UE devices
@@ -122,66 +121,16 @@
    * 
    * \return the interface container, \see Ipv4AddressHelper::Assign() which has similar semantics
    */
-  Ipv4InterfaceContainer AssignUeIpv4Address (NetDeviceContainer ueDevices);
+  virtual Ipv4InterfaceContainer AssignUeIpv4Address (NetDeviceContainer ueDevices) = 0;
 
 
   /** 
    * 
    * \return the address of the Default Gateway to be used by UEs to reach the internet
    */
-  Ipv4Address GetUeDefaultGatewayAddress ();
+  virtual Ipv4Address GetUeDefaultGatewayAddress () = 0;
 
 
-
-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; 
-  
-  Ptr<Node> m_sgwPgw; 
-  Ptr<EpcSgwPgwApplication> m_sgwPgwApp;
-  Ptr<VirtualNetDevice> m_tunDevice;
-  Ptr<EpcMme> m_mme;
-
-  /**
-   * S1-U interfaces
-   */
-
-  /** 
-   * helper to assign addresses to S1-U NetDevices 
-   */
-  Ipv4AddressHelper m_s1uIpv4AddressHelper; 
-
-  DataRate m_s1uLinkDataRate;
-  Time     m_s1uLinkDelay;
-  uint16_t m_s1uLinkMtu;
-
-  /**
-   * UDP port where the GTP-U Socket is bound, fixed by the standard as 2152
-   */
-  uint16_t m_gtpuUdpPort;
-
-  /**
-   * Map storing for each IMSI the corresponding eNB NetDevice
-   * 
-   */
-  std::map<uint64_t, Ptr<NetDevice> > m_imsiEnbDeviceMap;
-  
-  /** 
-   * helper to assign addresses to X2 NetDevices 
-   */
-  Ipv4AddressHelper m_x2Ipv4AddressHelper;   
-
-  DataRate m_x2LinkDataRate;
-  Time     m_x2LinkDelay;
-  uint16_t m_x2LinkMtu;
-
 };
 
 
diff -Naur ns-3.18.1/src/lte/helper/lte-global-pathloss-database.cc ns-3.19/src/lte/helper/lte-global-pathloss-database.cc
--- ns-3.18.1/src/lte/helper/lte-global-pathloss-database.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/lte-global-pathloss-database.cc	2013-12-20 09:44:51.000000000 -0800
@@ -28,7 +28,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("LteGlobalPathlossDatabase");
+NS_LOG_COMPONENT_DEFINE ("LteGlobalPathlossDatabase")
+  ;
 
 
 LteGlobalPathlossDatabase::~LteGlobalPathlossDatabase (void)
diff -Naur ns-3.18.1/src/lte/helper/lte-helper.cc ns-3.19/src/lte/helper/lte-helper.cc
--- ns-3.18.1/src/lte/helper/lte-helper.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/lte-helper.cc	2013-12-20 09:44:51.000000000 -0800
@@ -43,6 +43,8 @@
 #include <ns3/lte-enb-net-device.h>
 #include <ns3/lte-ue-net-device.h>
 #include <ns3/ff-mac-scheduler.h>
+#include <ns3/lte-handover-algorithm.h>
+#include <ns3/lte-anr.h>
 #include <ns3/lte-rlc.h>
 #include <ns3/lte-rlc-um.h>
 #include <ns3/lte-rlc-am.h>
@@ -63,16 +65,18 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteHelper);
+NS_OBJECT_ENSURE_REGISTERED (LteHelper)
+  ;
 
 LteHelper::LteHelper (void)
-  :  m_fadingStreamsAssigned (false),
-     m_imsiCounter (0),
-     m_cellIdCounter (0)
+  : m_fadingStreamsAssigned (false),
+    m_imsiCounter (0),
+    m_cellIdCounter (0)
 {
   NS_LOG_FUNCTION (this);
   m_enbNetDeviceFactory.SetTypeId (LteEnbNetDevice::GetTypeId ());
   m_enbAntennaModelFactory.SetTypeId (IsotropicAntennaModel::GetTypeId ());
+  m_ueNetDeviceFactory.SetTypeId (LteUeNetDevice::GetTypeId ());
   m_ueAntennaModelFactory.SetTypeId (IsotropicAntennaModel::GetTypeId ());
   m_channelFactory.SetTypeId (MultiModelSpectrumChannel::GetTypeId ());
 }
@@ -145,7 +149,16 @@
                    "The allowed values for this attributes are the type names "
                    "of any class inheriting from ns3::FfMacScheduler.",
                    StringValue ("ns3::PfFfMacScheduler"),
-                   MakeStringAccessor (&LteHelper::SetSchedulerType, &LteHelper::GetSchedulerType),
+                   MakeStringAccessor (&LteHelper::SetSchedulerType,
+                                       &LteHelper::GetSchedulerType),
+                   MakeStringChecker ())
+    .AddAttribute ("HandoverAlgorithm",
+                   "The type of handover algorithm to be used for eNBs. "
+                   "The allowed values for this attributes are the type names "
+                   "of any class inheriting from ns3::HandoverAlgorithm.",
+                   StringValue ("ns3::NoOpHandoverAlgorithm"),
+                   MakeStringAccessor (&LteHelper::SetHandoverAlgorithmType,
+                                       &LteHelper::GetHandoverAlgorithmType),
                    MakeStringChecker ())
     .AddAttribute ("PathlossModel",
                    "The type of pathloss model to be used. "
@@ -168,6 +181,11 @@
                    BooleanValue (true), 
                    MakeBooleanAccessor (&LteHelper::m_useIdealRrc),
                    MakeBooleanChecker ())
+    .AddAttribute ("AnrEnabled",
+                   "Activate or deactivate Automatic Neighbour Relation function",
+                   BooleanValue (true),
+                   MakeBooleanAccessor (&LteHelper::m_isAnrEnabled),
+                   MakeBooleanChecker ())
   ;
   return tid;
 }
@@ -210,6 +228,27 @@
   m_schedulerFactory.Set (n, v);
 }
 
+std::string
+LteHelper::GetHandoverAlgorithmType () const
+{
+  return m_handoverAlgorithmFactory.GetTypeId ().GetName ();
+}
+
+void
+LteHelper::SetHandoverAlgorithmType (std::string type)
+{
+  NS_LOG_FUNCTION (this << type);
+  m_handoverAlgorithmFactory = ObjectFactory ();
+  m_handoverAlgorithmFactory.SetTypeId (type);
+}
+
+void
+LteHelper::SetHandoverAlgorithmAttribute (std::string n, const AttributeValue &v)
+{
+  NS_LOG_FUNCTION (this << n);
+  m_handoverAlgorithmFactory.Set (n, v);
+}
+
 
 void 
 LteHelper::SetPathlossModelType (std::string type) 
@@ -251,6 +290,13 @@
   m_enbAntennaModelFactory.Set (n, v);
 }
 
+void
+LteHelper::SetUeDeviceAttribute (std::string n, const AttributeValue &v)
+{
+  NS_LOG_FUNCTION (this);
+  m_ueNetDeviceFactory.Set (n, v);
+}
+
 void 
 LteHelper::SetUeAntennaModelType (std::string type)
 {
@@ -368,6 +414,7 @@
 
   Ptr<LteEnbMac> mac = CreateObject<LteEnbMac> ();
   Ptr<FfMacScheduler> sched = m_schedulerFactory.Create<FfMacScheduler> ();
+  Ptr<LteHandoverAlgorithm> handoverAlgorithm = m_handoverAlgorithmFactory.Create<LteHandoverAlgorithm> ();
   Ptr<LteEnbRrc> rrc = CreateObject<LteEnbRrc> ();
 
   if (m_useIdealRrc)
@@ -402,6 +449,9 @@
   mac->SetLteEnbCmacSapUser (rrc->GetLteEnbCmacSapUser ());
   rrc->SetLteMacSapProvider (mac->GetLteMacSapProvider ());
 
+  rrc->SetLteHandoverManagementSapProvider (handoverAlgorithm->GetLteHandoverManagementSapProvider ());
+  handoverAlgorithm->SetLteHandoverManagementSapUser (rrc->GetLteHandoverManagementSapUser ());
+
   mac->SetFfMacSchedSapProvider (sched->GetFfMacSchedSapProvider ());
   mac->SetFfMacCschedSapProvider (sched->GetFfMacCschedSapProvider ());
 
@@ -411,7 +461,6 @@
   phy->SetLteEnbPhySapUser (mac->GetLteEnbPhySapUser ());
   mac->SetLteEnbPhySapProvider (phy->GetLteEnbPhySapProvider ());
 
-
   phy->SetLteEnbCphySapUser (rrc->GetLteEnbCphySapUser ());
   rrc->SetLteEnbCphySapProvider (phy->GetLteEnbCphySapProvider ());
 
@@ -422,6 +471,15 @@
   dev->SetAttribute ("LteEnbMac", PointerValue (mac));
   dev->SetAttribute ("FfMacScheduler", PointerValue (sched));
   dev->SetAttribute ("LteEnbRrc", PointerValue (rrc)); 
+  dev->SetAttribute ("LteHandoverAlgorithm", PointerValue (handoverAlgorithm));
+
+  if (m_isAnrEnabled)
+    {
+      Ptr<LteAnr> anr = CreateObject<LteAnr> (cellId);
+      rrc->SetLteAnrSapProvider (anr->GetLteAnrSapProvider ());
+      anr->SetLteAnrSapUser (rrc->GetLteAnrSapUser ());
+      dev->SetAttribute ("LteAnr", PointerValue (anr));
+    }
 
   phy->SetDevice (dev);
   dlPhy->SetDevice (dev);
@@ -448,7 +506,6 @@
     {
       NS_LOG_WARN ("UL propagation model does not have a Frequency attribute");
     }
-  
 
   dev->Initialize ();
 
@@ -464,7 +521,7 @@
       // S1 SAPs
       rrc->SetS1SapProvider (enbApp->GetS1SapProvider ());
       enbApp->SetS1SapUser (rrc->GetS1SapUser ());
-      
+
       // X2 SAPs
       Ptr<EpcX2> x2 = n->GetObject<EpcX2> ();
       x2->SetEpcX2SapUser (rrc->GetEpcX2SapUser ());
@@ -493,7 +550,7 @@
 
   Ptr<LteInterferencePowerChunkProcessor> pInterf = Create<LteInterferencePowerChunkProcessor> (phy);
   dlPhy->AddInterferenceCtrlChunkProcessor (pInterf); // for RSRQ evaluation of UE Measurements
-  
+
   Ptr<LteCtrlSinrChunkProcessor> pCtrl = Create<LteCtrlSinrChunkProcessor> (phy->GetObject<LtePhy> (), dlPhy);
   dlPhy->AddCtrlSinrChunkProcessor (pCtrl);
 
@@ -517,20 +574,20 @@
   Ptr<LteUeRrc> rrc = CreateObject<LteUeRrc> ();
 
   if (m_useIdealRrc)
-    {      
-      Ptr<LteUeRrcProtocolIdeal> rrcProtocol = CreateObject<LteUeRrcProtocolIdeal> ();      
+    {
+      Ptr<LteUeRrcProtocolIdeal> rrcProtocol = CreateObject<LteUeRrcProtocolIdeal> ();
       rrcProtocol->SetUeRrc (rrc);
       rrc->AggregateObject (rrcProtocol);
       rrcProtocol->SetLteUeRrcSapProvider (rrc->GetLteUeRrcSapProvider ());
-      rrc->SetLteUeRrcSapUser (rrcProtocol->GetLteUeRrcSapUser ());      
+      rrc->SetLteUeRrcSapUser (rrcProtocol->GetLteUeRrcSapUser ());
     }
   else
     {
-      Ptr<LteUeRrcProtocolReal> rrcProtocol = CreateObject<LteUeRrcProtocolReal> ();      
+      Ptr<LteUeRrcProtocolReal> rrcProtocol = CreateObject<LteUeRrcProtocolReal> ();
       rrcProtocol->SetUeRrc (rrc);
       rrc->AggregateObject (rrcProtocol);
       rrcProtocol->SetLteUeRrcSapProvider (rrc->GetLteUeRrcSapProvider ());
-      rrc->SetLteUeRrcSapUser (rrcProtocol->GetLteUeRrcSapUser ());      
+      rrc->SetLteUeRrcSapUser (rrcProtocol->GetLteUeRrcSapUser ());
     }
 
   if (m_epcHelper != 0)
@@ -552,9 +609,17 @@
   phy->SetLteUeCphySapUser (rrc->GetLteUeCphySapUser ());
   rrc->SetLteUeCphySapProvider (phy->GetLteUeCphySapProvider ());
 
-  NS_ABORT_MSG_IF (m_imsiCounter >= 0xFFFFFFFF, "max num UEs exceeded");  
+  NS_ABORT_MSG_IF (m_imsiCounter >= 0xFFFFFFFF, "max num UEs exceeded");
   uint64_t imsi = ++m_imsiCounter;
-  Ptr<LteUeNetDevice> dev = CreateObject<LteUeNetDevice> (n, phy, mac, rrc, nas, imsi);
+
+  Ptr<LteUeNetDevice> dev = m_ueNetDeviceFactory.Create<LteUeNetDevice> ();
+  dev->SetNode (n);
+  dev->SetAttribute ("Imsi", UintegerValue (imsi));
+  dev->SetAttribute ("LteUePhy", PointerValue (phy));
+  dev->SetAttribute ("LteUeMac", PointerValue (mac));
+  dev->SetAttribute ("LteUeRrc", PointerValue (rrc));
+  dev->SetAttribute ("EpcUeNas", PointerValue (nas));
+
   phy->SetDevice (dev);
   dlPhy->SetDevice (dev);
   ulPhy->SetDevice (dev);
@@ -579,6 +644,47 @@
 
 
 void
+LteHelper::Attach (NetDeviceContainer ueDevices)
+{
+  NS_LOG_FUNCTION (this);
+  for (NetDeviceContainer::Iterator i = ueDevices.Begin (); i != ueDevices.End (); ++i)
+    {
+      Attach (*i);
+    }
+}
+
+void
+LteHelper::Attach (Ptr<NetDevice> ueDevice)
+{
+  NS_LOG_FUNCTION (this);
+
+  if (m_epcHelper == 0)
+    {
+      NS_FATAL_ERROR ("This function is not valid without properly configured EPC");
+    }
+
+  Ptr<LteUeNetDevice> ueLteDevice = ueDevice->GetObject<LteUeNetDevice> ();
+  if (ueLteDevice == 0)
+    {
+      NS_FATAL_ERROR ("The passed NetDevice must be an LteUeNetDevice");
+    }
+
+  // initiate cell selection
+  Ptr<EpcUeNas> ueNas = ueLteDevice->GetNas ();
+  NS_ASSERT (ueNas != 0);
+  uint16_t dlEarfcn = ueLteDevice->GetDlEarfcn ();
+  ueNas->StartCellSelection (dlEarfcn);
+
+  // instruct UE to immediately enter CONNECTED mode after camping
+  ueNas->Connect ();
+
+  // activate default EPS bearer
+  m_epcHelper->ActivateEpsBearer (ueDevice, ueLteDevice->GetImsi (),
+                                  EpcTft::Default (),
+                                  EpsBearer (EpsBearer::NGBR_VIDEO_TCP_DEFAULT));
+}
+
+void
 LteHelper::Attach (NetDeviceContainer ueDevices, Ptr<NetDevice> enbDevice)
 {
   NS_LOG_FUNCTION (this);
@@ -605,7 +711,7 @@
       // activate default EPS bearer
       m_epcHelper->ActivateEpsBearer (ueDevice, ueLteDevice->GetImsi (), EpcTft::Default (), EpsBearer (EpsBearer::NGBR_VIDEO_TCP_DEFAULT));
     }
-  
+
   // tricks needed for the simplified LTE-only simulations 
   if (m_epcHelper == 0)
     {
@@ -639,7 +745,7 @@
         {
           minDistance = distance;
           closestEnbDevice = *i;
-        }      
+        }
     }
   NS_ASSERT (closestEnbDevice != 0);
   Attach (ueDevice, closestEnbDevice);
@@ -661,8 +767,8 @@
 {
   NS_LOG_FUNCTION (this);
 
-  NS_ASSERT_MSG (m_epcHelper != 0, "dedicated EPS bearers cannot be set up when EPC is not used");
-  
+  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);
 }
@@ -702,8 +808,8 @@
   if ((!m_active) && (imsi == m_imsi))
     {
       Ptr<LteUeRrc> ueRrc = m_ueDevice->GetObject<LteUeNetDevice> ()->GetRrc ();
-      NS_ASSERT (ueRrc->GetState () == LteUeRrc::CONNECTED_NORMALLY);      
-      uint16_t rnti = ueRrc->GetRnti();
+      NS_ASSERT (ueRrc->GetState () == LteUeRrc::CONNECTED_NORMALLY);
+      uint16_t rnti = ueRrc->GetRnti ();
       Ptr<LteEnbNetDevice> enbLteDevice = m_ueDevice->GetObject<LteUeNetDevice> ()->GetTargetEnb ();
       Ptr<LteEnbRrc> enbRrc = enbLteDevice->GetObject<LteEnbNetDevice> ()->GetRrc ();
       NS_ASSERT (ueRrc->GetCellId () == enbLteDevice->GetCellId ());
@@ -719,14 +825,14 @@
       m_active = true;
     }
 }
-  
+
 
 void 
 LteHelper::ActivateDataRadioBearer (Ptr<NetDevice> ueDevice, EpsBearer bearer)
 {
   NS_LOG_FUNCTION (this << ueDevice);
-  NS_ASSERT_MSG (m_epcHelper == 0, "this method must not be used when EPC is being used");  
-  
+  NS_ASSERT_MSG (m_epcHelper == 0, "this method must not be used when the EPC is being used");
+
   // Normally it is the EPC that takes care of activating DRBs
   // when the UE gets connected. When the EPC is not used, we achieve
   // the same behavior by hooking a dedicated DRB activation function
@@ -738,7 +844,7 @@
   std::ostringstream path;
   path << "/NodeList/" << enbLteDevice->GetNode ()->GetId () 
        << "/DeviceList/" << enbLteDevice->GetIfIndex ()
-       << "/LteEnbRrc/ConnectionEstablished";  
+       << "/LteEnbRrc/ConnectionEstablished";
   Ptr<DrbActivator> arg = Create<DrbActivator> (ueDevice, bearer);
   Config::Connect (path.str (), MakeBoundCallback (&DrbActivator::ActivateCallback, arg));
 }
@@ -748,6 +854,8 @@
 {
   NS_LOG_FUNCTION (this);
 
+  NS_ASSERT_MSG (m_epcHelper != 0, "X2 interfaces cannot be set up when the EPC is not used");
+
   for (NodeContainer::Iterator i = enbNodes.Begin (); i != enbNodes.End (); ++i)
     {
       for (NodeContainer::Iterator j = i + 1; j != enbNodes.End (); ++j)
@@ -782,7 +890,7 @@
   uint16_t targetCellId = targetEnbDev->GetObject<LteEnbNetDevice> ()->GetCellId ();
   Ptr<LteEnbRrc> sourceRrc = sourceEnbDev->GetObject<LteEnbNetDevice> ()->GetRrc ();
   uint16_t rnti = ueDev->GetObject<LteUeNetDevice> ()->GetRrc ()->GetRnti ();
-  sourceRrc->SendHandoverRequest (rnti, targetCellId);  
+  sourceRrc->SendHandoverRequest (rnti, targetCellId);
 }
 
 
@@ -793,7 +901,7 @@
 LteHelper::ActivateDataRadioBearer (NetDeviceContainer ueDevices, EpsBearer bearer)
 {
   NS_LOG_FUNCTION (this);
-   for (NetDeviceContainer::Iterator i = ueDevices.Begin (); i != ueDevices.End (); ++i)
+  for (NetDeviceContainer::Iterator i = ueDevices.Begin (); i != ueDevices.End (); ++i)
     {
       ActivateDataRadioBearer (*i, bearer);
     }
diff -Naur ns-3.18.1/src/lte/helper/lte-helper.h ns-3.19/src/lte/helper/lte-helper.h
--- ns-3.18.1/src/lte/helper/lte-helper.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/lte-helper.h	2013-12-20 09:44:51.000000000 -0800
@@ -49,8 +49,8 @@
 class SpectrumPropagationLossModel;
 
 /**
- * Creation and configuration of LTE entities
- *
+ * \ingroup lte
+ * \brief Creation and configuration of LTE entities
  */
 class LteHelper : public Object
 {
@@ -113,6 +113,26 @@
   void SetSchedulerAttribute (std::string n, const AttributeValue &v);
 
   /**
+   *
+   * \param type the type of handover algorithm to be used for the eNBs
+   */
+  void SetHandoverAlgorithmType (std::string type);
+
+  /**
+   *
+   * \return the handover algorithm type
+   */
+  std::string GetHandoverAlgorithmType () const;
+
+  /**
+   * set an attribute for the handover algorithm to be created
+   *
+   * \param n the name of the attribute
+   * \param v the value of the attribute
+   */
+  void SetHandoverAlgorithmAttribute (std::string n, const AttributeValue &v);
+
+  /**
    * set an attribute for the LteEnbNetDevice to be created
    * 
    * \param n the name of the attribute
@@ -134,6 +154,14 @@
    */
   void SetEnbAntennaModelAttribute (std::string n, const AttributeValue &v);
 
+  /**
+   * set an attribute for the LteUeNetDevice to be created
+   *
+   * \param n the name of the attribute
+   * \param v the value of the attribute
+   */
+  void SetUeDeviceAttribute (std::string n, const AttributeValue &v);
+
   /** 
    * 
    * \param type the type of AntennaModel to be used for the UEs
@@ -161,6 +189,7 @@
    * \param v the value of the attribute
    */
   void SetSpectrumChannelAttribute (std::string n, const AttributeValue &v);
+
   /**
    * create a set of eNB devices
    *
@@ -180,40 +209,101 @@
   NetDeviceContainer InstallUeDevice (NodeContainer c);
 
   /**
-   * Attach a set of UE devices to a single eNB device
+   * \brief Enables automatic attachment of a set of UE devices to a suitable
+   *        cell using Idle mode initial cell selection procedure.
+   * \param ueDevices the set of UE devices to be attached
+   *
+   * By calling this, the UE will start the initial cell selection procedure at
+   * the beginning of simulation. In addition, the function also instructs each
+   * UE to immediately enter CONNECTED mode and activates the default EPS
+   * bearer.
    *
-   * \param ueDevices
-   * \param enbDevice
+   * If this function is called when the UE is in a situation where entering
+   * CONNECTED mode is not possible (e.g. before the simulation begin), then the
+   * UE will attempt to connect at the earliest possible time (e.g. after it
+   * camps to a suitable cell).
+   *
+   * Note that this function can only be used in EPC-enabled simulation.
    */
-  void Attach (NetDeviceContainer ueDevices, Ptr<NetDevice> enbDevice);
+  void Attach (NetDeviceContainer ueDevices);
 
   /**
-   * Attach a UE to the network
+   * \brief Enables automatic attachment of a UE device to a suitable cell
+   *        using Idle mode initial cell selection procedure.
+   * \param ueDevice the UE device to be attached
+   *
+   * By calling this, the UE will start the initial cell selection procedure at
+   * the beginning of simulation. In addition, the function also instructs the
+   * UE to immediately enter CONNECTED mode and activates the default EPS
+   * bearer.
    *
-   * Attach a UE device to the network via a given eNB, and activate the default EPS bearer.
+   * If this function is called when the UE is in a situation where entering
+   * CONNECTED mode is not possible (e.g. before the simulation begin), then the
+   * UE will attempt to connect at the earliest possible time (e.g. after it
+   * camps to a suitable cell).
    *
-   * \param ueDevice
-   * \param enbDevice
+   * Note that this function can only be used in EPC-enabled simulation.
+   */
+  void Attach (Ptr<NetDevice> ueDevice);
+
+  /**
+   * \brief Manual attachment of a set of UE devices to the network via a given
+   *        eNodeB.
+   * \param ueDevices the set of UE devices to be attached
+   * \param enbDevice the destination eNodeB device
+   *
+   * In addition, the function also instructs each UE to immediately enter
+   * CONNECTED mode and activates the default EPS bearer.
+   *
+   * The function can be used in both LTE-only and EPC-enabled simulations.
+   * Note that this function will disable Idle mode initial cell selection
+   * procedure.
+   */
+  void Attach (NetDeviceContainer ueDevices, Ptr<NetDevice> enbDevice);
+
+  /**
+   * \brief Manual attachment of a UE device to the network via a given eNodeB.
+   * \param ueDevice the UE device to be attached
+   * \param enbDevice the destination eNodeB device
+   *
+   * In addition, the function also instructs the UE to immediately enter
+   * CONNECTED mode and activates the default EPS bearer.
+   *
+   * The function can be used in both LTE-only and EPC-enabled simulations.
+   * Note that this function will disable Idle mode initial cell selection
+   * procedure.
    */
   void Attach (Ptr<NetDevice> ueDevice, Ptr<NetDevice> enbDevice);
 
   /** 
-   * Attach each UE in a set to the closest (w.r.t. distance) eNB among those in a set.
+   * \brief Manual attachment of a set of UE devices to the network via the
+   *        closest eNodeB (with respect to distance) among those in the set.
+   * \param ueDevices the set of UE devices to be attached
+   * \param enbDevices the set of eNodeB devices to be considered
    * 
+   * This function finds among the eNodeB set the closest eNodeB for each UE,
+   * and then invokes manual attachment between the pair.
    * 
+   * Users are encouraged to use automatic attachment (Idle mode cell selection)
+   * instead of this function.
    * 
-   * \param ueDevices the set of UEs
-   * \param enbDevices the set of eNBs
+   * \sa LteHelper::Attach(NetDeviceContainer ueDevices);
    */
   void AttachToClosestEnb (NetDeviceContainer ueDevices, NetDeviceContainer enbDevices);
 
   /** 
-   * Attach an UE ito the closest (w.r.t. distance) eNB among those in a set
-   * Will call LteHelper::Attach () passing to it the single eNB
-   * instance which resulted to be the closest to the UE 
+   * \brief Manual attachment of a UE device to the network via the closest
+   *        eNodeB (with respect to distance) among those in the set.
+   * \param ueDevice the UE device to be attached
+   * \param enbDevices the set of eNodeB devices to be considered
+   *
+   * This function finds among the eNodeB set the closest eNodeB for the UE,
+   * and then invokes manual attachment between the pair.
    * 
-   * \param ueDevice the UE
-   * \param enbDevices the set of eNBs
+   * Users are encouraged to use automatic attachment (Idle mode cell selection)
+   * instead of this function.
+   *
+   * \sa LteHelper::Attach(Ptr<NetDevice> ueDevice);
    */
   void AttachToClosestEnb (Ptr<NetDevice> ueDevice, NetDeviceContainer enbDevices);
 
@@ -229,7 +319,7 @@
   /**
    * Activate a dedicated EPS bearer on a given UE device
    *
-   * \param ueDevices the set of UE devices
+   * \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
    */
@@ -252,14 +342,19 @@
   void AddX2Interface (Ptr<Node> enbNode1, Ptr<Node> enbNode2);
 
   /**
-   * Trigger an X2-based handover of a UE between two eNBs
-   *
+   * \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
-   * \param ueDev the UE that hands off
-   * \param enbDev1 source eNB, originally the UE is attached to this eNB
-   * \param enbDev2 target eNB, the UE is finally connected to this eNB
+   * \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)
+   *
+   * \warning Requires the use of EPC mode. See SetEpcHelper() method.
    */
-  void HandoverRequest (Time hoTime, Ptr<NetDevice> ueDev, Ptr<NetDevice> sourceEnbDev, Ptr<NetDevice> targetEnbDev);
+  void HandoverRequest (Time hoTime, Ptr<NetDevice> ueDev,
+                        Ptr<NetDevice> sourceEnbDev, Ptr<NetDevice> targetEnbDev);
 
 
   /** 
@@ -285,12 +380,15 @@
   /** 
    * 
    * 
-   * \param type the fading model to be used
+   * \param model the fading model to be used
    */
   void SetFadingModel (std::string model);
 
   /**
    * set an attribute of the fading model
+   *
+   * \param n the name of the attribute
+   * \param v the value of the attribute
    */
   void SetFadingModelAttribute (std::string n, const AttributeValue &v);
 
@@ -323,7 +421,7 @@
    * Enable trace sinks for UL PHY layer
    */
   void EnableUlPhyTraces (void);
-  
+
   /**
    * Enable trace sinks for DL transmission PHY layer
    */
@@ -404,10 +502,34 @@
   virtual void DoInitialize (void);
 
 private:
+  /**
+   * \brief 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.
+   * \param n the node where the device is to be installed
+   * \return pointer to the created device
+   */
   Ptr<NetDevice> InstallSingleUeDevice (Ptr<Node> n);
 
-  void DoHandoverRequest (Ptr<NetDevice> ueDev, Ptr<NetDevice> sourceEnbDev, Ptr<NetDevice> targetEnbDev);
+  /**
+   * \brief 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)
+   *
+   * This method is normally scheduled by HandoverRequest() to run at a specific
+   * time where a manual handover is desired by the simulation user.
+   */
+  void DoHandoverRequest (Ptr<NetDevice> ueDev,
+                          Ptr<NetDevice> sourceEnbDev,
+                          Ptr<NetDevice> targetEnbDev);
 
   Ptr<SpectrumChannel> m_downlinkChannel;
   Ptr<SpectrumChannel> m_uplinkChannel;
@@ -416,9 +538,11 @@
   Ptr<Object> m_uplinkPathlossModel;
 
   ObjectFactory m_schedulerFactory;
+  ObjectFactory m_handoverAlgorithmFactory;
   ObjectFactory m_propagationModelFactory;
   ObjectFactory m_enbNetDeviceFactory;
   ObjectFactory m_enbAntennaModelFactory;
+  ObjectFactory m_ueNetDeviceFactory;
   ObjectFactory m_ueAntennaModelFactory;
 
   ObjectFactory m_dlPathlossModelFactory;
@@ -445,6 +569,7 @@
   uint16_t m_cellIdCounter;
 
   bool m_useIdealRrc;
+  bool m_isAnrEnabled;
 };
 
 
diff -Naur ns-3.18.1/src/lte/helper/lte-hex-grid-enb-topology-helper.cc ns-3.19/src/lte/helper/lte-hex-grid-enb-topology-helper.cc
--- ns-3.18.1/src/lte/helper/lte-hex-grid-enb-topology-helper.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/lte-hex-grid-enb-topology-helper.cc	2013-12-20 09:44:51.000000000 -0800
@@ -32,7 +32,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteHexGridEnbTopologyHelper);
+NS_OBJECT_ENSURE_REGISTERED (LteHexGridEnbTopologyHelper)
+  ;
 
 LteHexGridEnbTopologyHelper::LteHexGridEnbTopologyHelper ()
 {
diff -Naur ns-3.18.1/src/lte/helper/lte-stats-calculator.cc ns-3.19/src/lte/helper/lte-stats-calculator.cc
--- ns-3.18.1/src/lte/helper/lte-stats-calculator.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/lte-stats-calculator.cc	2013-12-20 09:44:51.000000000 -0800
@@ -29,7 +29,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("LteStatsCalculator");
+NS_LOG_COMPONENT_DEFINE ("LteStatsCalculator")
+  ;
 
 LteStatsCalculator::LteStatsCalculator ()
   : m_dlOutputFilename (""),
diff -Naur ns-3.18.1/src/lte/helper/lte-stats-calculator.h ns-3.19/src/lte/helper/lte-stats-calculator.h
--- ns-3.18.1/src/lte/helper/lte-stats-calculator.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/lte-stats-calculator.h	2013-12-20 09:44:51.000000000 -0800
@@ -51,6 +51,7 @@
 
   /**
    * Get the name of the file where the uplink statistics will be stored.
+   * @return the name of the file where the uplink statistics will be stored
    */
   std::string GetUlOutputFilename (void);
 
@@ -63,12 +64,14 @@
 
   /**
    * Get the name of the file where the downlink statistics will be stored.
+   * @return the name of the file where the downlink statistics will be stored
    */
   std::string GetDlOutputFilename (void);
 
   /**
    * Checks if there is an already stored IMSI for the given path
    * @param path Path in the attribute system to check
+   * @return true if the path exists, false otherwise
    */
   bool ExistsImsiPath (std::string path);
 
@@ -82,12 +85,14 @@
   /**
    * Retrieves the imsi information for the given path
    * @param path Path in the attribute system to get
+   * @return the IMSI associated with the given path
    */
   uint64_t GetImsiPath (std::string path);
 
   /**
    * Checks if there is an already stored cell id for the given path
    * @param path Path in the attribute system to check
+   * @return true if the path exists, false otherwise
    */
   bool ExistsCellIdPath (std::string path);
 
@@ -101,6 +106,7 @@
   /**
    * Retrieves the cell id information for the given path
    * @param path Path in the attribute system to get
+   * @return the cell ID associated with the given path
    */
   uint16_t GetCellIdPath (std::string path);
 
diff -Naur ns-3.18.1/src/lte/helper/mac-stats-calculator.cc ns-3.19/src/lte/helper/mac-stats-calculator.cc
--- ns-3.18.1/src/lte/helper/mac-stats-calculator.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/mac-stats-calculator.cc	2013-12-20 09:44:51.000000000 -0800
@@ -25,9 +25,11 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("MacStatsCalculator");
+NS_LOG_COMPONENT_DEFINE ("MacStatsCalculator")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (MacStatsCalculator);
+NS_OBJECT_ENSURE_REGISTERED (MacStatsCalculator)
+  ;
 
 MacStatsCalculator::MacStatsCalculator ()
   : m_dlFirstWrite (true),
@@ -131,9 +133,9 @@
 
 void
 MacStatsCalculator::UlScheduling (uint16_t cellId, uint64_t imsi, uint32_t frameNo,
-                                  uint32_t subframeNo, uint16_t rnti,uint8_t mcs, uint16_t size)
+                                  uint32_t subframeNo, uint16_t rnti,uint8_t mcsTb, uint16_t size)
 {
-  NS_LOG_FUNCTION (this << cellId << imsi << frameNo << subframeNo << rnti << (uint32_t) mcs << size);
+  NS_LOG_FUNCTION (this << cellId << imsi << frameNo << subframeNo << rnti << (uint32_t) mcsTb << size);
   NS_LOG_INFO ("Write UL Mac Stats in " << GetUlOutputFilename ().c_str ());
 
   std::ofstream outFile;
@@ -165,7 +167,7 @@
   outFile << frameNo << "\t";
   outFile << subframeNo << "\t";
   outFile << rnti << "\t";
-  outFile << (uint32_t) mcs << "\t";
+  outFile << (uint32_t) mcsTb << "\t";
   outFile << size << std::endl;
   outFile.close ();
 }
diff -Naur ns-3.18.1/src/lte/helper/mac-stats-calculator.h ns-3.19/src/lte/helper/mac-stats-calculator.h
--- ns-3.18.1/src/lte/helper/mac-stats-calculator.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/mac-stats-calculator.h	2013-12-20 09:44:51.000000000 -0800
@@ -53,9 +53,7 @@
    */
   virtual ~MacStatsCalculator ();
 
-  /**
-   * Inherited from ns3::Object
-   */
+  // Inherited from ns3::Object
   static TypeId GetTypeId (void);
 
   /**
@@ -67,6 +65,7 @@
 
   /**
    * Get the name of the file where the uplink statistics will be stored.
+   * @return the name of the file where the uplink statistics will be stored
    */
   std::string GetUlOutputFilename (void);
 
@@ -79,6 +78,7 @@
 
   /**
    * Get the name of the file where the downlink statistics will be stored.
+   * @return the name of the file where the downlink statistics will be stored
    */
   std::string GetDlOutputFilename (void);
 
@@ -108,7 +108,7 @@
    * @param sizeTb Size of transport block
    */
   void UlScheduling (uint16_t cellId, uint64_t imsi,uint32_t frameNo, uint32_t subframeNo,
-                     uint16_t rnti, uint8_t mcs, uint16_t sizeTb);
+                     uint16_t rnti, uint8_t mcsTb, uint16_t sizeTb);
 
   
   /** 
diff -Naur ns-3.18.1/src/lte/helper/phy-rx-stats-calculator.cc ns-3.19/src/lte/helper/phy-rx-stats-calculator.cc
--- ns-3.18.1/src/lte/helper/phy-rx-stats-calculator.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/phy-rx-stats-calculator.cc	2013-12-20 09:44:51.000000000 -0800
@@ -27,9 +27,11 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("PhyRxStatsCalculator");
+NS_LOG_COMPONENT_DEFINE ("PhyRxStatsCalculator")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (PhyRxStatsCalculator);
+NS_OBJECT_ENSURE_REGISTERED (PhyRxStatsCalculator)
+  ;
 
 PhyRxStatsCalculator::PhyRxStatsCalculator ()
   : m_dlRxFirstWrite (true),
diff -Naur ns-3.18.1/src/lte/helper/phy-rx-stats-calculator.h ns-3.19/src/lte/helper/phy-rx-stats-calculator.h
--- ns-3.18.1/src/lte/helper/phy-rx-stats-calculator.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/phy-rx-stats-calculator.h	2013-12-20 09:44:51.000000000 -0800
@@ -35,7 +35,7 @@
 /**
  * Takes care of storing the information generated at PHY layer regarding 
  * reception. Metrics saved are:
- *time\tframe\tsframe\tRNTI\tmcsTb1\tsizeTb1\tmcsTb2\tsizeTb2
+ *
  *   - Timestamp (in seconds)
  *   - Frame index
  *   - Subframe index
@@ -58,9 +58,7 @@
    */
   virtual ~PhyRxStatsCalculator ();
 
-  /**
-   * Inherited from ns3::Object
-   */
+  // Inherited from ns3::Object
   static TypeId GetTypeId (void);
 
   /**
@@ -72,6 +70,7 @@
 
   /**
    * Get the name of the file where the UL RX PHY statistics will be stored.
+   * @return the name of the file where the UL RX PHY statistics will be stored
    */
   std::string GetUlRxOutputFilename (void);
 
@@ -84,40 +83,19 @@
 
   /**
    * Get the name of the file where the DL RX PHY statistics will be stored.
+   * @return the name of the file where the DL RX PHY statistics will be stored
    */
   std::string GetDlRxOutputFilename (void);
 
   /**
    * Notifies the stats calculator that an downlink reception has occurred.
-   * @param cellId Cell ID of the attached Enb
-   * @param imsi IMSI of the scheduled UE
-   * @param frameNo Frame number
-   * @param subframeNo Subframe number
-   * @param rnti C-RNTI scheduled
-   * @param layer the layer (cw) of the transmission
-   * @param txMode the transmission Mode
-   * @param mcs MCS for transport block
-   * @param size Size of transport block
-   * @param rv the redundancy version (HARQ)
-   * @param ndi new data indicator flag
-   * @param correctness correctness of the TB received
+   * @param params Trace information regarding PHY reception stats
    */
   void DlPhyReception (PhyReceptionStatParameters params);
 
   /**
    * Notifies the stats calculator that an uplink reception has occurred.
-   * @param cellId Cell ID of the attached Enb
-   * @param imsi IMSI of the scheduled UE
-   * @param frameNo Frame number
-   * @param subframeNo Subframe number
-   * @param rnti C-RNTI scheduled
-   * @param layer the layer (cw) of the transmission
-   * @param txMode the transmission Mode
-   * @param mcs MCS for transport block
-   * @param size Size of transport block
-   * @param rv the redundancy version (HARQ)
-   * @param ndi new data indicator flag
-   * @param correctness correctness of the TB received
+   * @param params Trace information regarding PHY reception stats
    */
   void UlPhyReception (PhyReceptionStatParameters params);
 
diff -Naur ns-3.18.1/src/lte/helper/phy-stats-calculator.cc ns-3.19/src/lte/helper/phy-stats-calculator.cc
--- ns-3.18.1/src/lte/helper/phy-stats-calculator.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/phy-stats-calculator.cc	2013-12-20 09:44:51.000000000 -0800
@@ -25,9 +25,11 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("PhyStatsCalculator");
+NS_LOG_COMPONENT_DEFINE ("PhyStatsCalculator")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (PhyStatsCalculator);
+NS_OBJECT_ENSURE_REGISTERED (PhyStatsCalculator)
+  ;
 
 PhyStatsCalculator::PhyStatsCalculator ()
   :  m_RsrpSinrFirstWrite (true),
diff -Naur ns-3.18.1/src/lte/helper/phy-stats-calculator.h ns-3.19/src/lte/helper/phy-stats-calculator.h
--- ns-3.18.1/src/lte/helper/phy-stats-calculator.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/phy-stats-calculator.h	2013-12-20 09:44:51.000000000 -0800
@@ -63,20 +63,19 @@
    */
   virtual ~PhyStatsCalculator ();
 
-  /**
-   * Inherited from ns3::Object
-   */
+  // Inherited from ns3::Object
   static TypeId GetTypeId (void);
 
   /**
    * Set the name of the file where the RSRP/SINR statistics will be stored.
    *
-   * \param filename string with the name of the file
+   * @param filename string with the name of the file
    */
   void SetCurrentCellRsrpSinrFilename (std::string filename);
 
   /**
    * Get the name of the file where the RSRP/SINR statistics will be stored.
+   * @return the name of the file where the RSRP/SINR statistics will be stored
    */
   std::string GetCurrentCellRsrpSinrFilename  (void);
 
@@ -89,6 +88,7 @@
 
   /**
    * Get the name of the file where the UE SINR statistics will be stored.
+   * @return the name of the file where the UE SINR statistics will be stored
    */
   std::string GetUeSinrFilename (void);
 
@@ -101,6 +101,7 @@
 
   /**
    * Get the name of the file where the interference statistics will be stored.
+   * @return the name of the file where the interference statistics will be stored
    */
   std::string GetInterferenceFilename (void);
 
@@ -123,8 +124,6 @@
   void ReportUeSinr (uint16_t cellId, uint64_t imsi, uint16_t rnti, double sinrLinear);
   /**
    * Notifies the stats calculator that an interference report has occurred.
-   * @param imsi IMSI of the scheduled UE
-   * @param rnti C-RNTI scheduled
    * @param cellId Cell ID of the reported Enb
    * @param interference Measured interference for each RB
    */
diff -Naur ns-3.18.1/src/lte/helper/phy-tx-stats-calculator.cc ns-3.19/src/lte/helper/phy-tx-stats-calculator.cc
--- ns-3.18.1/src/lte/helper/phy-tx-stats-calculator.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/phy-tx-stats-calculator.cc	2013-12-20 09:44:51.000000000 -0800
@@ -27,9 +27,11 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("PhyTxStatsCalculator");
+NS_LOG_COMPONENT_DEFINE ("PhyTxStatsCalculator")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (PhyTxStatsCalculator);
+NS_OBJECT_ENSURE_REGISTERED (PhyTxStatsCalculator)
+  ;
 
 PhyTxStatsCalculator::PhyTxStatsCalculator ()
   : m_dlTxFirstWrite (true),
diff -Naur ns-3.18.1/src/lte/helper/phy-tx-stats-calculator.h ns-3.19/src/lte/helper/phy-tx-stats-calculator.h
--- ns-3.18.1/src/lte/helper/phy-tx-stats-calculator.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/phy-tx-stats-calculator.h	2013-12-20 09:44:51.000000000 -0800
@@ -37,7 +37,7 @@
 /**
  * Takes care of storing the information generated at PHY layer regarding 
  * transmission. Metrics saved are:
- *time\tframe\tsframe\tRNTI\tmcsTb1\tsizeTb1\tmcsTb2\tsizeTb2
+ *
  *   - Timestamp (in seconds)
  *   - Frame index
  *   - Subframe index
@@ -60,20 +60,19 @@
    */
   virtual ~PhyTxStatsCalculator ();
 
-  /**
-   * Inherited from ns3::Object
-   */
+  // Inherited from ns3::Object
   static TypeId GetTypeId (void);
 
   /**
    * Set the name of the file where the UL Tx PHY statistics will be stored.
    *
-   * \param outputFilename string with the name of the file
+   * @param outputFilename string with the name of the file
    */
   void SetUlTxOutputFilename (std::string outputFilename);
 
   /**
    * Get the name of the file where the UL RX PHY statistics will be stored.
+   * @return the name of the file where the UL RX PHY statistics will be stored
    */
   std::string GetUlTxOutputFilename (void);
 
@@ -86,38 +85,19 @@
 
   /**
    * Get the name of the file where the DL TX PHY statistics will be stored.
+   * @return the name of the file where the DL TX PHY statistics will be stored
    */
   std::string GetDlTxOutputFilename (void);
 
   /**
    * Notifies the stats calculator that an downlink trasmission has occurred.
-   * @param cellId Cell ID of the attached Enb
-   * @param imsi IMSI of the scheduled UE
-   * @param frameNo Frame number
-   * @param subframeNo Subframe number
-   * @param rnti C-RNTI scheduled
-   * @param layer the layer (cw) of the transmission
-   * @param txMode the transmission Mode
-   * @param mcs MCS for transport block
-   * @param size Size of transport block
-   * @param rv the redundancy version (HARQ)
-   * @param ndi new data indicator flag
+   * @param params Trace information regarding PHY transmission stats
    */
   void DlPhyTransmission (PhyTransmissionStatParameters params);
 
   /**
    * Notifies the stats calculator that an uplink trasmission has occurred.
-   * @param cellId Cell ID of the attached Enb
-   * @param imsi IMSI of the scheduled UE
-   * @param frameNo Frame number
-   * @param subframeNo Subframe number
-   * @param rnti C-RNTI scheduled
-   * @param layer the layer (cw) of the transmission
-   * @param txMode the transmission Mode
-   * @param mcs MCS for transport block
-   * @param size Size of transport block
-   * @param rv the redundancy version (HARQ)
-   * @param ndi new data indicator flag
+   * @param params Trace information regarding PHY transmission stats
    */
   void UlPhyTransmission (PhyTransmissionStatParameters params);
 
diff -Naur ns-3.18.1/src/lte/helper/point-to-point-epc-helper.cc ns-3.19/src/lte/helper/point-to-point-epc-helper.cc
--- ns-3.18.1/src/lte/helper/point-to-point-epc-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/helper/point-to-point-epc-helper.cc	2013-12-20 09:44:51.000000000 -0800
@@ -0,0 +1,346 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011-2013 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * 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: Jaume Nin <jnin@cttc.es>
+ *         Nicola Baldo <nbaldo@cttc.es>
+ *         Manuel Requena <manuel.requena@cttc.es>
+ */
+
+#include <ns3/point-to-point-epc-helper.h>
+#include <ns3/log.h>
+#include <ns3/inet-socket-address.h>
+#include <ns3/mac48-address.h>
+#include <ns3/eps-bearer.h>
+#include <ns3/ipv4-address.h>
+#include <ns3/internet-stack-helper.h>
+#include <ns3/point-to-point-helper.h>
+#include <ns3/packet-socket-helper.h>
+#include <ns3/packet-socket-address.h>
+#include <ns3/epc-enb-application.h>
+#include <ns3/epc-sgw-pgw-application.h>
+
+#include <ns3/lte-enb-rrc.h>
+#include <ns3/epc-x2.h>
+#include <ns3/lte-enb-net-device.h>
+#include <ns3/lte-ue-net-device.h>
+#include <ns3/epc-mme.h>
+#include <ns3/epc-ue-nas.h>
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("PointToPointEpcHelper")
+  ;
+
+NS_OBJECT_ENSURE_REGISTERED (PointToPointEpcHelper)
+  ;
+
+
+PointToPointEpcHelper::PointToPointEpcHelper () 
+  : m_gtpuUdpPort (2152)  // fixed by the standard
+{
+  NS_LOG_FUNCTION (this);
+
+  // since we use point-to-point links for all S1-U links, 
+  // we use a /30 subnet which can hold exactly two addresses 
+  // (remember that net broadcast and null address are not valid)
+  m_s1uIpv4AddressHelper.SetBase ("10.0.0.0", "255.255.255.252");
+
+  m_x2Ipv4AddressHelper.SetBase ("12.0.0.0", "255.255.255.252");
+
+  // we use a /8 net for all UEs
+  m_ueAddressHelper.SetBase ("7.0.0.0", "255.0.0.0");
+  
+  // create SgwPgwNode
+  m_sgwPgw = CreateObject<Node> ();
+  InternetStackHelper internet;
+  internet.Install (m_sgwPgw);
+  
+  // create S1-U socket
+  Ptr<Socket> sgwPgwS1uSocket = Socket::CreateSocket (m_sgwPgw, TypeId::LookupByName ("ns3::UdpSocketFactory"));
+  int retval = sgwPgwS1uSocket->Bind (InetSocketAddress (Ipv4Address::GetAny (), m_gtpuUdpPort));
+  NS_ASSERT (retval == 0);
+
+  // create TUN device implementing tunneling of user data over GTP-U/UDP/IP 
+  m_tunDevice = CreateObject<VirtualNetDevice> ();
+  // allow jumbo packets
+  m_tunDevice->SetAttribute ("Mtu", UintegerValue (30000));
+
+  // yes we need this
+  m_tunDevice->SetAddress (Mac48Address::Allocate ()); 
+
+  m_sgwPgw->AddDevice (m_tunDevice);
+  NetDeviceContainer tunDeviceContainer;
+  tunDeviceContainer.Add (m_tunDevice);
+  
+  // the TUN device is on the same subnet as the UEs, so when a packet
+  // addressed to an UE arrives at the intenet to the WAN interface of
+  // the PGW it will be forwarded to the TUN device. 
+  Ipv4InterfaceContainer tunDeviceIpv4IfContainer = m_ueAddressHelper.Assign (tunDeviceContainer);  
+
+  // create EpcSgwPgwApplication
+  m_sgwPgwApp = CreateObject<EpcSgwPgwApplication> (m_tunDevice, sgwPgwS1uSocket);
+  m_sgwPgw->AddApplication (m_sgwPgwApp);
+  
+  // connect SgwPgwApplication and virtual net device for tunneling
+  m_tunDevice->SetSendCallback (MakeCallback (&EpcSgwPgwApplication::RecvFromTunDevice, m_sgwPgwApp));
+
+  // Create MME and connect with SGW via S11 interface
+  m_mme = CreateObject<EpcMme> ();
+  m_mme->SetS11SapSgw (m_sgwPgwApp->GetS11SapSgw ());
+  m_sgwPgwApp->SetS11SapMme (m_mme->GetS11SapMme ());
+}
+
+PointToPointEpcHelper::~PointToPointEpcHelper ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TypeId
+PointToPointEpcHelper::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::PointToPointEpcHelper")
+    .SetParent<EpcHelper> ()
+    .AddConstructor<PointToPointEpcHelper> ()
+    .AddAttribute ("S1uLinkDataRate", 
+                   "The data rate to be used for the next S1-U link to be created",
+                   DataRateValue (DataRate ("10Gb/s")),
+                   MakeDataRateAccessor (&PointToPointEpcHelper::m_s1uLinkDataRate),
+                   MakeDataRateChecker ())
+    .AddAttribute ("S1uLinkDelay", 
+                   "The delay to be used for the next S1-U link to be created",
+                   TimeValue (Seconds (0)),
+                   MakeTimeAccessor (&PointToPointEpcHelper::m_s1uLinkDelay),
+                   MakeTimeChecker ())
+    .AddAttribute ("S1uLinkMtu", 
+                   "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.",
+                   UintegerValue (2000),
+                   MakeUintegerAccessor (&PointToPointEpcHelper::m_s1uLinkMtu),
+                   MakeUintegerChecker<uint16_t> ())
+    .AddAttribute ("X2LinkDataRate",
+                   "The data rate to be used for the next X2 link to be created",
+                   DataRateValue (DataRate ("10Gb/s")),
+                   MakeDataRateAccessor (&PointToPointEpcHelper::m_x2LinkDataRate),
+                   MakeDataRateChecker ())
+    .AddAttribute ("X2LinkDelay",
+                   "The delay to be used for the next X2 link to be created",
+                   TimeValue (Seconds (0)),
+                   MakeTimeAccessor (&PointToPointEpcHelper::m_x2LinkDelay),
+                   MakeTimeChecker ())
+    .AddAttribute ("X2LinkMtu",
+                   "The MTU of the next X2 link to be created. Note that, because of some big X2 messages, you need a big MTU.",
+                   UintegerValue (3000),
+                   MakeUintegerAccessor (&PointToPointEpcHelper::m_x2LinkMtu),
+                   MakeUintegerChecker<uint16_t> ())
+  ;
+  return tid;
+}
+
+void
+PointToPointEpcHelper::DoDispose ()
+{
+  NS_LOG_FUNCTION (this);
+  m_tunDevice->SetSendCallback (MakeNullCallback<bool, Ptr<Packet>, const Address&, const Address&, uint16_t> ());
+  m_tunDevice = 0;
+  m_sgwPgwApp = 0;  
+  m_sgwPgw->Dispose ();
+}
+
+
+void
+PointToPointEpcHelper::AddEnb (Ptr<Node> enb, Ptr<NetDevice> lteEnbNetDevice, uint16_t cellId)
+{
+  NS_LOG_FUNCTION (this << enb << lteEnbNetDevice << cellId);
+
+  NS_ASSERT (enb == lteEnbNetDevice->GetNode ());
+
+  // add an IPv4 stack to the previously created eNB
+  InternetStackHelper internet;
+  internet.Install (enb);
+  NS_LOG_LOGIC ("number of Ipv4 ifaces of the eNB after node creation: " << enb->GetObject<Ipv4> ()->GetNInterfaces ());
+
+  // create a point to point link between the new eNB and the SGW with
+  // the corresponding new NetDevices on each side  
+  NodeContainer enbSgwNodes;
+  enbSgwNodes.Add (m_sgwPgw);
+  enbSgwNodes.Add (enb);
+  PointToPointHelper p2ph;
+  p2ph.SetDeviceAttribute ("DataRate", DataRateValue (m_s1uLinkDataRate));
+  p2ph.SetDeviceAttribute ("Mtu", UintegerValue (m_s1uLinkMtu));
+  p2ph.SetChannelAttribute ("Delay", TimeValue (m_s1uLinkDelay));  
+  NetDeviceContainer enbSgwDevices = p2ph.Install (enb, m_sgwPgw);
+  NS_LOG_LOGIC ("number of Ipv4 ifaces of the eNB after installing p2p dev: " << enb->GetObject<Ipv4> ()->GetNInterfaces ());  
+  Ptr<NetDevice> enbDev = enbSgwDevices.Get (0);
+  Ptr<NetDevice> sgwDev = enbSgwDevices.Get (1);
+  m_s1uIpv4AddressHelper.NewNetwork ();
+  Ipv4InterfaceContainer enbSgwIpIfaces = m_s1uIpv4AddressHelper.Assign (enbSgwDevices);
+  NS_LOG_LOGIC ("number of Ipv4 ifaces of the eNB after assigning Ipv4 addr to S1 dev: " << enb->GetObject<Ipv4> ()->GetNInterfaces ());
+  
+  Ipv4Address enbAddress = enbSgwIpIfaces.GetAddress (0);
+  Ipv4Address sgwAddress = enbSgwIpIfaces.GetAddress (1);
+
+  // create S1-U socket for the ENB
+  Ptr<Socket> enbS1uSocket = Socket::CreateSocket (enb, TypeId::LookupByName ("ns3::UdpSocketFactory"));
+  int retval = enbS1uSocket->Bind (InetSocketAddress (enbAddress, m_gtpuUdpPort));
+  NS_ASSERT (retval == 0);
+  
+
+  // give PacketSocket powers to the eNB
+  //PacketSocketHelper packetSocket;
+  //packetSocket.Install (enb); 
+  
+  // create LTE socket for the ENB 
+  Ptr<Socket> enbLteSocket = Socket::CreateSocket (enb, TypeId::LookupByName ("ns3::PacketSocketFactory"));
+  PacketSocketAddress enbLteSocketBindAddress;
+  enbLteSocketBindAddress.SetSingleDevice (lteEnbNetDevice->GetIfIndex ());
+  enbLteSocketBindAddress.SetProtocol (Ipv4L3Protocol::PROT_NUMBER);
+  retval = enbLteSocket->Bind (enbLteSocketBindAddress);
+  NS_ASSERT (retval == 0);  
+  PacketSocketAddress enbLteSocketConnectAddress;
+  enbLteSocketConnectAddress.SetPhysicalAddress (Mac48Address::GetBroadcast ());
+  enbLteSocketConnectAddress.SetSingleDevice (lteEnbNetDevice->GetIfIndex ());
+  enbLteSocketConnectAddress.SetProtocol (Ipv4L3Protocol::PROT_NUMBER);
+  retval = enbLteSocket->Connect (enbLteSocketConnectAddress);
+  NS_ASSERT (retval == 0);  
+  
+
+  NS_LOG_INFO ("create EpcEnbApplication");
+  Ptr<EpcEnbApplication> enbApp = CreateObject<EpcEnbApplication> (enbLteSocket, enbS1uSocket, enbAddress, sgwAddress, cellId);
+  enb->AddApplication (enbApp);
+  NS_ASSERT (enb->GetNApplications () == 1);
+  NS_ASSERT_MSG (enb->GetApplication (0)->GetObject<EpcEnbApplication> () != 0, "cannot retrieve EpcEnbApplication");
+  NS_LOG_LOGIC ("enb: " << enb << ", enb->GetApplication (0): " << enb->GetApplication (0));
+
+  
+  NS_LOG_INFO ("Create EpcX2 entity");
+  Ptr<EpcX2> x2 = CreateObject<EpcX2> ();
+  enb->AggregateObject (x2);
+
+  NS_LOG_INFO ("connect S1-AP interface");
+  m_mme->AddEnb (cellId, enbAddress, enbApp->GetS1apSapEnb ());
+  m_sgwPgwApp->AddEnb (cellId, enbAddress, sgwAddress);
+  enbApp->SetS1apSapMme (m_mme->GetS1apSapMme ());
+}
+
+
+void
+PointToPointEpcHelper::AddX2Interface (Ptr<Node> enb1, Ptr<Node> enb2)
+{
+  NS_LOG_FUNCTION (this << enb1 << enb2);
+
+  // Create a point to point link between the two eNBs with
+  // the corresponding new NetDevices on each side
+  NodeContainer enbNodes;
+  enbNodes.Add (enb1);
+  enbNodes.Add (enb2);
+  PointToPointHelper p2ph;
+  p2ph.SetDeviceAttribute ("DataRate", DataRateValue (m_x2LinkDataRate));
+  p2ph.SetDeviceAttribute ("Mtu", UintegerValue (m_x2LinkMtu));
+  p2ph.SetChannelAttribute ("Delay", TimeValue (m_x2LinkDelay));
+  NetDeviceContainer enbDevices = p2ph.Install (enb1, enb2);
+  NS_LOG_LOGIC ("number of Ipv4 ifaces of the eNB #1 after installing p2p dev: " << enb1->GetObject<Ipv4> ()->GetNInterfaces ());
+  NS_LOG_LOGIC ("number of Ipv4 ifaces of the eNB #2 after installing p2p dev: " << enb2->GetObject<Ipv4> ()->GetNInterfaces ());
+  Ptr<NetDevice> enb1Dev = enbDevices.Get (0);
+  Ptr<NetDevice> enb2Dev = enbDevices.Get (1);
+
+  m_x2Ipv4AddressHelper.NewNetwork ();
+  Ipv4InterfaceContainer enbIpIfaces = m_x2Ipv4AddressHelper.Assign (enbDevices);
+  NS_LOG_LOGIC ("number of Ipv4 ifaces of the eNB #1 after assigning Ipv4 addr to X2 dev: " << enb1->GetObject<Ipv4> ()->GetNInterfaces ());
+  NS_LOG_LOGIC ("number of Ipv4 ifaces of the eNB #2 after assigning Ipv4 addr to X2 dev: " << enb2->GetObject<Ipv4> ()->GetNInterfaces ());
+
+  Ipv4Address enb1X2Address = enbIpIfaces.GetAddress (0);
+  Ipv4Address enb2X2Address = enbIpIfaces.GetAddress (1);
+
+  // Add X2 interface to both eNBs' X2 entities
+  Ptr<EpcX2> enb1X2 = enb1->GetObject<EpcX2> ();
+  Ptr<LteEnbNetDevice> enb1LteDev = enb1->GetDevice (0)->GetObject<LteEnbNetDevice> ();
+  uint16_t enb1CellId = enb1LteDev->GetCellId ();
+  NS_LOG_LOGIC ("LteEnbNetDevice #1 = " << enb1LteDev << " - CellId = " << enb1CellId);
+
+  Ptr<EpcX2> enb2X2 = enb2->GetObject<EpcX2> ();
+  Ptr<LteEnbNetDevice> enb2LteDev = enb2->GetDevice (0)->GetObject<LteEnbNetDevice> ();
+  uint16_t enb2CellId = enb2LteDev->GetCellId ();
+  NS_LOG_LOGIC ("LteEnbNetDevice #2 = " << enb2LteDev << " - CellId = " << enb2CellId);
+
+  enb1X2->AddX2Interface (enb1CellId, enb1X2Address, enb2CellId, enb2X2Address);
+  enb2X2->AddX2Interface (enb2CellId, enb2X2Address, enb1CellId, enb1X2Address);
+
+  enb1LteDev->GetRrc ()->AddX2Neighbour (enb2LteDev->GetCellId ());
+  enb2LteDev->GetRrc ()->AddX2Neighbour (enb1LteDev->GetCellId ());
+}
+
+
+void 
+PointToPointEpcHelper::AddUe (Ptr<NetDevice> ueDevice, uint64_t imsi)
+{
+  NS_LOG_FUNCTION (this << imsi << ueDevice );
+  
+  m_mme->AddUe (imsi);
+  m_sgwPgwApp->AddUe (imsi);
+  
+
+}
+
+void
+PointToPointEpcHelper::ActivateEpsBearer (Ptr<NetDevice> ueDevice, uint64_t imsi, Ptr<EpcTft> tft, EpsBearer bearer)
+{
+  NS_LOG_FUNCTION (this << ueDevice << imsi);
+
+  // we now retrieve the IPv4 address of the UE and notify it to the SGW;
+  // we couldn't do it before since address assignment is triggered by
+  // the user simulation program, rather than done by the EPC   
+  Ptr<Node> ueNode = ueDevice->GetNode (); 
+  Ptr<Ipv4> ueIpv4 = ueNode->GetObject<Ipv4> ();
+  NS_ASSERT_MSG (ueIpv4 != 0, "UEs need to have IPv4 installed before EPS bearers can be activated");
+  int32_t interface =  ueIpv4->GetInterfaceForDevice (ueDevice);
+  NS_ASSERT (interface >= 0);
+  NS_ASSERT (ueIpv4->GetNAddresses (interface) == 1);
+  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);
+  Ptr<LteUeNetDevice> ueLteDevice = ueDevice->GetObject<LteUeNetDevice> ();
+  if (ueLteDevice)
+    {
+      ueLteDevice->GetNas ()->ActivateEpsBearer (bearer, tft);
+    }
+}
+
+
+Ptr<Node>
+PointToPointEpcHelper::GetPgwNode ()
+{
+  return m_sgwPgw;
+}
+
+
+Ipv4InterfaceContainer 
+PointToPointEpcHelper::AssignUeIpv4Address (NetDeviceContainer ueDevices)
+{
+  return m_ueAddressHelper.Assign (ueDevices);
+}
+
+
+
+Ipv4Address
+PointToPointEpcHelper::GetUeDefaultGatewayAddress ()
+{
+  // return the address of the tun device
+  return m_sgwPgw->GetObject<Ipv4> ()->GetAddress (1, 0).GetLocal ();
+}
+
+
+} // namespace ns3
diff -Naur ns-3.18.1/src/lte/helper/point-to-point-epc-helper.h ns-3.19/src/lte/helper/point-to-point-epc-helper.h
--- ns-3.18.1/src/lte/helper/point-to-point-epc-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/helper/point-to-point-epc-helper.h	2013-12-20 09:44:51.000000000 -0800
@@ -0,0 +1,135 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011-2013 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * 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: Jaume Nin <jnin@cttc.es>
+ *         Nicola Baldo <nbaldo@cttc.es>
+ *         Manuel Requena <manuel.requena@cttc.es>
+ */
+
+#ifndef POINT_TO_POINT_EPC_HELPER_H
+#define POINT_TO_POINT_EPC_HELPER_H
+
+#include <ns3/object.h>
+#include <ns3/ipv4-address-helper.h>
+#include <ns3/data-rate.h>
+#include <ns3/epc-tft.h>
+#include <ns3/eps-bearer.h>
+#include <ns3/epc-helper.h>
+
+namespace ns3 {
+
+class Node;
+class NetDevice;
+class VirtualNetDevice;
+class EpcSgwPgwApplication;
+class EpcX2;
+class EpcMme;
+
+/**
+ * \brief Create an EPC network with PointToPoint links
+ *
+ * This Helper will create an EPC network topology comprising of a
+ * single node that implements both the SGW and PGW functionality, and
+ * an MME node. The S1-U, X2-U and X2-C interfaces are realized over
+ * PointToPoint links. 
+ */
+class PointToPointEpcHelper : public EpcHelper
+{
+public:
+  
+  /** 
+   * Constructor
+   */
+  PointToPointEpcHelper ();
+
+  /** 
+   * Destructor
+   */  
+  virtual ~PointToPointEpcHelper ();
+  
+  // inherited from Object
+  static TypeId GetTypeId (void);
+  virtual void DoDispose ();
+
+  // inherited from EpcHelper
+  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 Ptr<Node> GetPgwNode ();
+  virtual Ipv4InterfaceContainer AssignUeIpv4Address (NetDeviceContainer ueDevices);
+  virtual Ipv4Address GetUeDefaultGatewayAddress ();
+
+
+
+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; 
+  
+  Ptr<Node> m_sgwPgw; 
+  Ptr<EpcSgwPgwApplication> m_sgwPgwApp;
+  Ptr<VirtualNetDevice> m_tunDevice;
+  Ptr<EpcMme> m_mme;
+
+  /**
+   * S1-U interfaces
+   */
+
+  /** 
+   * helper to assign addresses to S1-U NetDevices 
+   */
+  Ipv4AddressHelper m_s1uIpv4AddressHelper; 
+
+  DataRate m_s1uLinkDataRate;
+  Time     m_s1uLinkDelay;
+  uint16_t m_s1uLinkMtu;
+
+  /**
+   * UDP port where the GTP-U Socket is bound, fixed by the standard as 2152
+   */
+  uint16_t m_gtpuUdpPort;
+
+  /**
+   * Map storing for each IMSI the corresponding eNB NetDevice
+   * 
+   */
+  std::map<uint64_t, Ptr<NetDevice> > m_imsiEnbDeviceMap;
+  
+  /** 
+   * helper to assign addresses to X2 NetDevices 
+   */
+  Ipv4AddressHelper m_x2Ipv4AddressHelper;   
+
+  DataRate m_x2LinkDataRate;
+  Time     m_x2LinkDelay;
+  uint16_t m_x2LinkMtu;
+
+};
+
+
+
+
+} // namespace ns3
+
+#endif // POINT_TO_POINT_EPC_HELPER_H
diff -Naur ns-3.18.1/src/lte/helper/radio-bearer-stats-calculator.cc ns-3.19/src/lte/helper/radio-bearer-stats-calculator.cc
--- ns-3.18.1/src/lte/helper/radio-bearer-stats-calculator.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/radio-bearer-stats-calculator.cc	2013-12-20 09:44:51.000000000 -0800
@@ -29,9 +29,11 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("RadioBearerStatsCalculator");
+NS_LOG_COMPONENT_DEFINE ("RadioBearerStatsCalculator")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED ( RadioBearerStatsCalculator);
+NS_OBJECT_ENSURE_REGISTERED ( RadioBearerStatsCalculator)
+  ;
 
 RadioBearerStatsCalculator::RadioBearerStatsCalculator ()
   : m_firstWrite (true),
diff -Naur ns-3.18.1/src/lte/helper/radio-bearer-stats-calculator.h ns-3.19/src/lte/helper/radio-bearer-stats-calculator.h
--- ns-3.18.1/src/lte/helper/radio-bearer-stats-calculator.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/radio-bearer-stats-calculator.h	2013-12-20 09:44:51.000000000 -0800
@@ -79,31 +79,32 @@
   virtual
   ~RadioBearerStatsCalculator ();
 
-  /**
-   * Inherited from ns3::Object
-   */
+  // Inherited from ns3::Object
   static TypeId GetTypeId (void);
   void DoDispose ();
 
   /**
    * Get the name of the file where the uplink statistics will be stored.
+   * @return the name of the file where the uplink statistics will be stored
    */
   std::string GetUlOutputFilename (void);
 
   /**
    * Get the name of the file where the downlink statistics will be stored.
+   * @return the name of the file where the downlink statistics will be stored
    */
   std::string GetDlOutputFilename (void);
 
   /**
    * Set the name of the file where the uplink PDCP statistics will be stored.
    *
-   * \param outputFilename string with the name of the file
+   * @param outputFilename string with the name of the file
    */
   void SetUlPdcpOutputFilename (std::string outputFilename);
 
   /**
    * Get the name of the file where the uplink PDCP statistics will be stored.
+   * @return the name of the file where the uplink PDCP statistics will be stored
    */
   std::string GetUlPdcpOutputFilename (void);
 
@@ -116,6 +117,7 @@
 
   /**
    * Get the name of the file where the downlink PDCP statistics will be stored.
+   * @return the name of the file where the downlink PDCP statistics will be stored
    */
   std::string GetDlPdcpOutputFilename (void);
 
diff -Naur ns-3.18.1/src/lte/helper/radio-environment-map-helper.cc ns-3.19/src/lte/helper/radio-environment-map-helper.cc
--- ns-3.18.1/src/lte/helper/radio-environment-map-helper.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/helper/radio-environment-map-helper.cc	2013-12-20 09:44:51.000000000 -0800
@@ -46,7 +46,8 @@
 
 
 
-NS_OBJECT_ENSURE_REGISTERED (RadioEnvironmentMapHelper);
+NS_OBJECT_ENSURE_REGISTERED (RadioEnvironmentMapHelper)
+  ;
 
 RadioEnvironmentMapHelper::RadioEnvironmentMapHelper ()
 {
diff -Naur ns-3.18.1/src/lte/model/a2-a4-rsrq-handover-algorithm.cc ns-3.19/src/lte/model/a2-a4-rsrq-handover-algorithm.cc
--- ns-3.18.1/src/lte/model/a2-a4-rsrq-handover-algorithm.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/model/a2-a4-rsrq-handover-algorithm.cc	2013-12-20 09:44:51.000000000 -0800
@@ -0,0 +1,289 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ * Copyright (c) 2013 Budiarto Herman
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Original work authors (from lte-enb-rrc.cc):
+ * - Nicola Baldo <nbaldo@cttc.es>
+ * - Marco Miozzo <mmiozzo@cttc.es>
+ * - Manuel Requena <manuel.requena@cttc.es>
+ *
+ * Converted to handover algorithm interface by:
+ * - Budiarto Herman <budiarto.herman@magister.fi>
+ */
+
+#include "a2-a4-rsrq-handover-algorithm.h"
+#include <ns3/log.h>
+#include <ns3/uinteger.h>
+
+NS_LOG_COMPONENT_DEFINE ("A2A4RsrqHandoverAlgorithm");
+
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (A2A4RsrqHandoverAlgorithm)
+  ;
+
+
+///////////////////////////////////////////
+// Handover Management SAP forwarder
+///////////////////////////////////////////
+
+
+A2A4RsrqHandoverAlgorithm::A2A4RsrqHandoverAlgorithm ()
+  : m_a2MeasId (0),
+    m_a4MeasId (0),
+    m_servingCellThreshold (30),
+    m_neighbourCellOffset (1),
+    m_handoverManagementSapUser (0)
+{
+  NS_LOG_FUNCTION (this);
+  m_handoverManagementSapProvider = new MemberLteHandoverManagementSapProvider<A2A4RsrqHandoverAlgorithm> (this);
+}
+
+
+A2A4RsrqHandoverAlgorithm::~A2A4RsrqHandoverAlgorithm ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+
+TypeId
+A2A4RsrqHandoverAlgorithm::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::A2A4RsrqHandoverAlgorithm")
+    .SetParent<LteHandoverAlgorithm> ()
+    .AddConstructor<A2A4RsrqHandoverAlgorithm> ()
+    .AddAttribute ("ServingCellThreshold",
+                   "If the RSRQ of the serving cell is worse than this threshold, "
+                   "neighbour cells are consider for handover",
+                   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
+    .AddAttribute ("NeighbourCellOffset",
+                   "Minimum offset between serving and best neighbour cell to trigger the Handover",
+                   UintegerValue (1),
+                   MakeUintegerAccessor (&A2A4RsrqHandoverAlgorithm::m_neighbourCellOffset),
+                   MakeUintegerChecker<uint8_t> ())
+  ;
+  return tid;
+}
+
+
+void
+A2A4RsrqHandoverAlgorithm::SetLteHandoverManagementSapUser (LteHandoverManagementSapUser* s)
+{
+  NS_LOG_FUNCTION (this << s);
+  m_handoverManagementSapUser = s;
+}
+
+
+LteHandoverManagementSapProvider*
+A2A4RsrqHandoverAlgorithm::GetLteHandoverManagementSapProvider ()
+{
+  NS_LOG_FUNCTION (this);
+  return m_handoverManagementSapProvider;
+}
+
+
+void
+A2A4RsrqHandoverAlgorithm::DoInitialize ()
+{
+  NS_LOG_FUNCTION (this);
+
+  NS_LOG_LOGIC (this << " requesting Event A2 measurements"
+                     << " (threshold=" << (uint16_t) m_servingCellThreshold << ")");
+  LteRrcSap::ReportConfigEutra reportConfigA2;
+  reportConfigA2.eventId = LteRrcSap::ReportConfigEutra::EVENT_A2;
+  reportConfigA2.threshold1.choice = LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ;
+  reportConfigA2.threshold1.range = m_servingCellThreshold;
+  reportConfigA2.triggerQuantity = LteRrcSap::ReportConfigEutra::RSRQ;
+  reportConfigA2.reportInterval = LteRrcSap::ReportConfigEutra::MS240;
+  m_a2MeasId = m_handoverManagementSapUser->AddUeMeasReportConfigForHandover (reportConfigA2);
+
+  NS_LOG_LOGIC (this << " requesting Event A4 measurements"
+                     << " (threshold=0)");
+  LteRrcSap::ReportConfigEutra reportConfigA4;
+  reportConfigA4.eventId = LteRrcSap::ReportConfigEutra::EVENT_A4;
+  reportConfigA4.threshold1.choice = LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ;
+  reportConfigA4.threshold1.range = 0; // intentionally very low threshold
+  reportConfigA4.triggerQuantity = LteRrcSap::ReportConfigEutra::RSRQ;
+  reportConfigA4.reportInterval = LteRrcSap::ReportConfigEutra::MS480;
+  m_a4MeasId = m_handoverManagementSapUser->AddUeMeasReportConfigForHandover (reportConfigA4);
+
+  LteHandoverAlgorithm::DoInitialize ();
+}
+
+
+void
+A2A4RsrqHandoverAlgorithm::DoDispose ()
+{
+  NS_LOG_FUNCTION (this);
+  delete m_handoverManagementSapProvider;
+}
+
+
+void
+A2A4RsrqHandoverAlgorithm::DoReportUeMeas (uint16_t rnti,
+                                           LteRrcSap::MeasResults measResults)
+{
+  NS_LOG_FUNCTION (this << rnti << (uint16_t) measResults.measId);
+
+  if (measResults.measId == m_a2MeasId)
+    {
+      NS_ASSERT_MSG (measResults.rsrqResult <= m_servingCellThreshold,
+                     "Invalid UE measurement report");
+      EvaluateHandover (rnti, measResults.rsrqResult);
+    }
+  else if (measResults.measId == m_a4MeasId)
+    {
+      if (measResults.haveMeasResultNeighCells
+          && !measResults.measResultListEutra.empty ())
+        {
+          for (std::list <LteRrcSap::MeasResultEutra>::iterator it = measResults.measResultListEutra.begin ();
+               it != measResults.measResultListEutra.end ();
+               ++it)
+            {
+              NS_ASSERT_MSG (it->haveRsrqResult == true,
+                             "RSRQ measurement is missing from cellId " << it->physCellId);
+              UpdateNeighbourMeasurements (rnti, it->physCellId, it->rsrqResult);
+            }
+        }
+      else
+        {
+          NS_LOG_WARN (this << " Event A4 received without measurement results from neighbouring cells");
+        }
+    }
+  else
+    {
+      NS_LOG_WARN ("Ignoring measId " << (uint16_t) measResults.measId);
+    }
+
+} // end of DoReportUeMeas
+
+
+void
+A2A4RsrqHandoverAlgorithm::EvaluateHandover (uint16_t rnti,
+                                             uint8_t servingCellRsrq)
+{
+  NS_LOG_FUNCTION (this << rnti << (uint16_t) servingCellRsrq);
+
+  MeasurementTable_t::iterator it1;
+  it1 = m_neighbourCellMeasures.find (rnti);
+
+  if (it1 == m_neighbourCellMeasures.end ())
+    {
+      NS_LOG_WARN ("Skipping handover evaluation for RNTI " << rnti << " because neighbour cells information is not found");
+    }
+  else
+    {
+      // Find the best neighbour cell (eNB)
+      NS_LOG_LOGIC ("Number of neighbour cells = " << it1->second.size ());
+      uint16_t bestNeighbourCellId = 0;
+      uint8_t bestNeighbourRsrq = 0;
+      MeasurementRow_t::iterator it2;
+      for (it2 = it1->second.begin (); it2 != it1->second.end (); ++it2)
+        {
+          if ((it2->second->m_rsrq > bestNeighbourRsrq)
+              && IsValidNeighbour (it2->first))
+            {
+              bestNeighbourCellId = it2->first;
+              bestNeighbourRsrq = it2->second->m_rsrq;
+            }
+        }
+
+      // Trigger Handover, if needed
+      if (bestNeighbourCellId > 0)
+        {
+          NS_LOG_LOGIC ("Best neighbour cellId " << bestNeighbourCellId);
+
+          if ((bestNeighbourRsrq - servingCellRsrq) >= m_neighbourCellOffset)
+            {
+              NS_LOG_LOGIC ("Trigger Handover to cellId " << bestNeighbourCellId);
+              NS_LOG_LOGIC ("target cell RSRQ " << (uint16_t) bestNeighbourRsrq);
+              NS_LOG_LOGIC ("serving cell RSRQ " << (uint16_t) servingCellRsrq);
+
+              // Inform eNodeB RRC about handover
+              m_handoverManagementSapUser->TriggerHandover (rnti,
+                                                            bestNeighbourCellId);
+            }
+        }
+
+    } // end of else of if (it1 == m_neighbourCellMeasures.end ())
+
+} // end of EvaluateMeasurementReport
+
+
+bool
+A2A4RsrqHandoverAlgorithm::IsValidNeighbour (uint16_t cellId)
+{
+  NS_LOG_FUNCTION (this << cellId);
+
+  /**
+   * \todo In the future, this function can be expanded to validate whether the
+   *       neighbour cell is a valid target cell, e.g., taking into account the
+   *       NRT in ANR and whether it is a CSG cell with closed access.
+   */
+
+  return true;
+}
+
+
+void
+A2A4RsrqHandoverAlgorithm::UpdateNeighbourMeasurements (uint16_t rnti,
+                                                        uint16_t cellId,
+                                                        uint8_t rsrq)
+{
+  NS_LOG_FUNCTION (this << rnti << cellId << (uint16_t) rsrq);
+  MeasurementTable_t::iterator it1;
+  it1 = m_neighbourCellMeasures.find (rnti);
+
+  if (it1 == m_neighbourCellMeasures.end ())
+    {
+      // insert a new UE entry
+      MeasurementRow_t row;
+      std::pair<MeasurementTable_t::iterator, bool> ret;
+      ret = m_neighbourCellMeasures.insert (std::pair<uint16_t, MeasurementRow_t> (rnti, row));
+      NS_ASSERT (ret.second);
+      it1 = ret.first;
+    }
+
+  NS_ASSERT (it1 != m_neighbourCellMeasures.end ());
+  Ptr<UeMeasure> neighbourCellMeasures;
+  std::map<uint16_t, Ptr<UeMeasure> >::iterator it2;
+  it2 = it1->second.find (cellId);
+
+  if (it2 != it1->second.end ())
+    {
+      neighbourCellMeasures = it2->second;
+      neighbourCellMeasures->m_cellId = cellId;
+      neighbourCellMeasures->m_rsrp = 0;
+      neighbourCellMeasures->m_rsrq = rsrq;
+    }
+  else
+    {
+      // insert a new cell entry
+      neighbourCellMeasures = Create<UeMeasure> ();
+      neighbourCellMeasures->m_cellId = cellId;
+      neighbourCellMeasures->m_rsrp = 0;
+      neighbourCellMeasures->m_rsrq = rsrq;
+      it1->second[cellId] = neighbourCellMeasures;
+    }
+
+} // end of UpdateNeighbourMeasurements
+
+
+} // end of namespace ns3
diff -Naur ns-3.18.1/src/lte/model/a2-a4-rsrq-handover-algorithm.h ns-3.19/src/lte/model/a2-a4-rsrq-handover-algorithm.h
--- ns-3.18.1/src/lte/model/a2-a4-rsrq-handover-algorithm.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/model/a2-a4-rsrq-handover-algorithm.h	2013-12-20 09:44:51.000000000 -0800
@@ -0,0 +1,152 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ * Copyright (c) 2013 Budiarto Herman
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Original work authors (from lte-enb-rrc.cc):
+ * - Nicola Baldo <nbaldo@cttc.es>
+ * - Marco Miozzo <mmiozzo@cttc.es>
+ * - Manuel Requena <manuel.requena@cttc.es>
+ *
+ * Converted to handover algorithm interface by:
+ * - Budiarto Herman <budiarto.herman@magister.fi>
+ */
+
+#ifndef A2_A4_RSRQ_HANDOVER_ALGORITHM_H
+#define A2_A4_RSRQ_HANDOVER_ALGORITHM_H
+
+#include <ns3/lte-handover-algorithm.h>
+#include <ns3/lte-handover-management-sap.h>
+#include <ns3/lte-rrc-sap.h>
+#include <ns3/simple-ref-count.h>
+#include <ns3/ptr.h>
+#include <map>
+
+namespace ns3 {
+
+
+/**
+ * \brief Handover algorithm implementation based on RSRQ measurements, Event
+ *        A2 and Event A4.
+ *
+ * Handover decision made by this algorithm is primarily based on Event A2
+ * measurements (serving cell's RSRQ becomes worse than threshold). When the
+ * event is triggered, the first condition of handover is fulfilled.
+ *
+ * Event A4 measurements (neighbour cell's RSRQ becomes better than threshold)
+ * are used to detect neighbouring cells and their respective RSRQ. When a
+ * neighbouring cell's RSRQ is higher than the serving cell's RSRQ by a certain
+ * offset, then the second condition of handover is fulfilled.
+ *
+ * When the first and second conditions above are fulfilled, the algorithm
+ * informs the eNodeB RRC to trigger a handover.
+ *
+ * The threshold for Event A2 can be configured in the `ServingCellThreshold`
+ * attribute. The offset used in the second condition can also be configured by
+ * setting the `NeighbourCellOffset` attribute.
+ *
+ * The following code snippet is an example of using and configuring the
+ * handover algorithm in a simulation program:
+ *
+ *     Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
+ *
+ *     NodeContainer enbNodes;
+ *     // configure the nodes here...
+ *
+ *     lteHelper->SetHandoverAlgorithmType ("ns3::A2A4RsrqHandoverAlgorithm");
+ *     lteHelper->SetHandoverAlgorithmAttribute ("ServingCellThreshold",
+ *                                               UintegerValue (30));
+ *     lteHelper->SetHandoverAlgorithmAttribute ("NeighbourCellOffset",
+ *                                               UintegerValue (1));
+ *     NetDeviceContainer enbLteDevs = lteHelper->InstallEnbDevice (enbNodes);
+ *
+ * \note Setting the handover algorithm type and attributes after the call to
+ *       LteHelper::InstallEnbDevice does not have any effect to the devices
+ *       that have already been installed.
+ */
+class A2A4RsrqHandoverAlgorithm : public LteHandoverAlgorithm
+{
+public:
+  /**
+   * \brief Creates an A2-A4-RSRQ handover algorithm instance.
+   */
+  A2A4RsrqHandoverAlgorithm ();
+
+  virtual ~A2A4RsrqHandoverAlgorithm ();
+
+  // inherited from Object
+  static TypeId GetTypeId ();
+
+  // inherited from LteHandoverAlgorithm
+  virtual void SetLteHandoverManagementSapUser (LteHandoverManagementSapUser* s);
+  virtual LteHandoverManagementSapProvider* GetLteHandoverManagementSapProvider ();
+
+  // let the forwarder class access the protected and private members
+  friend class MemberLteHandoverManagementSapProvider<A2A4RsrqHandoverAlgorithm>;
+
+protected:
+  // inherited from Object
+  virtual void DoInitialize ();
+  virtual void DoDispose ();
+
+  // inherited from LteHandoverAlgorithm as a Handover Management SAP implementation
+  void DoReportUeMeas (uint16_t rnti, LteRrcSap::MeasResults measResults);
+
+private:
+  // Internal methods
+  void EvaluateHandover (uint16_t rnti, uint8_t servingCellRsrq);
+  bool IsValidNeighbour (uint16_t cellId);
+  void UpdateNeighbourMeasurements (uint16_t rnti, uint16_t cellId,
+                                    uint8_t rsrq);
+
+  // The expected measurement identities
+  uint8_t m_a2MeasId;
+  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.
+   */
+  class UeMeasure : public SimpleRefCount<UeMeasure>
+  {
+  public:
+    uint16_t m_cellId;
+    uint8_t m_rsrp;
+    uint8_t m_rsrq;
+  };
+
+  //               cellId
+  typedef std::map<uint16_t, Ptr<UeMeasure> > MeasurementRow_t;
+  //               rnti
+  typedef std::map<uint16_t, MeasurementRow_t> MeasurementTable_t;
+  MeasurementTable_t m_neighbourCellMeasures;
+
+  // Class attributes
+  uint8_t m_servingCellThreshold;
+  uint8_t m_neighbourCellOffset;
+
+  // Handover Management SAPs
+  LteHandoverManagementSapUser* m_handoverManagementSapUser;
+  LteHandoverManagementSapProvider* m_handoverManagementSapProvider;
+
+}; // end of class A2A4RsrqHandoverAlgorithm
+
+
+} // end of namespace ns3
+
+
+#endif /* A2_A4_RSRQ_HANDOVER_ALGORITHM_H */
diff -Naur ns-3.18.1/src/lte/model/a3-rsrp-handover-algorithm.cc ns-3.19/src/lte/model/a3-rsrp-handover-algorithm.cc
--- ns-3.18.1/src/lte/model/a3-rsrp-handover-algorithm.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/model/a3-rsrp-handover-algorithm.cc	2013-12-20 09:44:51.000000000 -0800
@@ -0,0 +1,194 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Budiarto Herman
+ *
+ * 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: Budiarto Herman <budiarto.herman@magister.fi>
+ *
+ */
+
+#include "a3-rsrp-handover-algorithm.h"
+#include <ns3/log.h>
+#include <ns3/double.h>
+#include <ns3/lte-common.h>
+#include <list>
+
+NS_LOG_COMPONENT_DEFINE ("A3RsrpHandoverAlgorithm");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (A3RsrpHandoverAlgorithm)
+  ;
+
+
+A3RsrpHandoverAlgorithm::A3RsrpHandoverAlgorithm ()
+  : m_handoverManagementSapUser (0)
+{
+  NS_LOG_FUNCTION (this);
+  m_handoverManagementSapProvider = new MemberLteHandoverManagementSapProvider<A3RsrpHandoverAlgorithm> (this);
+}
+
+
+A3RsrpHandoverAlgorithm::~A3RsrpHandoverAlgorithm ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+
+TypeId
+A3RsrpHandoverAlgorithm::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::A3RsrpHandoverAlgorithm")
+    .SetParent<LteHandoverAlgorithm> ()
+    .AddConstructor<A3RsrpHandoverAlgorithm> ()
+    .AddAttribute ("Hysteresis",
+                   "Handover margin (hysteresis) in dB "
+                   "(rounded to the nearest multiple of 0.5 dB)",
+                   DoubleValue (3.0),
+                   MakeDoubleAccessor (&A3RsrpHandoverAlgorithm::m_hysteresisDb),
+                   MakeDoubleChecker<uint8_t> (0.0, 15.0)) // Hysteresis IE value range is [0..30] as per Section 6.3.5 of 3GPP TS 36.331
+    .AddAttribute ("TimeToTrigger",
+                   "Time during which neighbour cell's RSRP "
+                   "must continuously higher than serving cell's RSRP "
+                   "in order to trigger a handover",
+                   TimeValue (MilliSeconds (256)), // 3GPP time-to-trigger median value as per Section 6.3.5 of 3GPP TS 36.331
+                   MakeTimeAccessor (&A3RsrpHandoverAlgorithm::m_timeToTrigger),
+                   MakeTimeChecker ())
+  ;
+  return tid;
+}
+
+
+void
+A3RsrpHandoverAlgorithm::SetLteHandoverManagementSapUser (LteHandoverManagementSapUser* s)
+{
+  NS_LOG_FUNCTION (this << s);
+  m_handoverManagementSapUser = s;
+}
+
+
+LteHandoverManagementSapProvider*
+A3RsrpHandoverAlgorithm::GetLteHandoverManagementSapProvider ()
+{
+  NS_LOG_FUNCTION (this);
+  return m_handoverManagementSapProvider;
+}
+
+
+void
+A3RsrpHandoverAlgorithm::DoInitialize ()
+{
+  NS_LOG_FUNCTION (this);
+
+  uint8_t hysteresisIeValue = EutranMeasurementMapping::ActualHysteresis2IeValue (m_hysteresisDb);
+  NS_LOG_LOGIC (this << " requesting Event A3 measurements"
+                     << " (hysteresis=" << (uint16_t) hysteresisIeValue << ")"
+                     << " (ttt=" << m_timeToTrigger.GetMilliSeconds () << ")");
+
+  LteRrcSap::ReportConfigEutra reportConfig;
+  reportConfig.eventId = LteRrcSap::ReportConfigEutra::EVENT_A3;
+  reportConfig.a3Offset = 0;
+  reportConfig.hysteresis = hysteresisIeValue;
+  reportConfig.timeToTrigger = m_timeToTrigger.GetMilliSeconds ();
+  reportConfig.reportOnLeave = false;
+  reportConfig.triggerQuantity = LteRrcSap::ReportConfigEutra::RSRP;
+  reportConfig.reportInterval = LteRrcSap::ReportConfigEutra::MS1024;
+  m_measId = m_handoverManagementSapUser->AddUeMeasReportConfigForHandover (reportConfig);
+
+  LteHandoverAlgorithm::DoInitialize ();
+}
+
+
+void
+A3RsrpHandoverAlgorithm::DoDispose ()
+{
+  NS_LOG_FUNCTION (this);
+  delete m_handoverManagementSapProvider;
+}
+
+
+void
+A3RsrpHandoverAlgorithm::DoReportUeMeas (uint16_t rnti,
+                                         LteRrcSap::MeasResults measResults)
+{
+  NS_LOG_FUNCTION (this << rnti << (uint16_t) measResults.measId);
+
+  if (measResults.measId != m_measId)
+    {
+      NS_LOG_WARN ("Ignoring measId " << (uint16_t) measResults.measId);
+    }
+  else
+    {
+      if (measResults.haveMeasResultNeighCells
+          && !measResults.measResultListEutra.empty ())
+        {
+          uint16_t bestNeighbourCellId = 0;
+          uint8_t bestNeighbourRsrp = -std::numeric_limits<double>::infinity ();
+
+          for (std::list <LteRrcSap::MeasResultEutra>::iterator it = measResults.measResultListEutra.begin ();
+               it != measResults.measResultListEutra.end ();
+               ++it)
+            {
+              if (it->haveRsrpResult)
+                {
+                  if ((bestNeighbourRsrp < it->rsrpResult)
+                      && IsValidNeighbour (it->physCellId))
+                    {
+                      bestNeighbourCellId = it->physCellId;
+                      bestNeighbourRsrp = it->rsrpResult;
+                    }
+                }
+              else
+                {
+                  NS_LOG_WARN ("RSRP measurement is missing from cell ID " << it->physCellId);
+                }
+            }
+
+          if (bestNeighbourCellId > 0)
+            {
+              NS_LOG_LOGIC ("Trigger Handover to cellId " << bestNeighbourCellId);
+              NS_LOG_LOGIC ("target cell RSRP " << (uint16_t) bestNeighbourRsrp);
+              NS_LOG_LOGIC ("serving cell RSRP " << (uint16_t) measResults.rsrpResult);
+
+              // Inform eNodeB RRC about handover
+              m_handoverManagementSapUser->TriggerHandover (rnti,
+                                                            bestNeighbourCellId);
+            }
+        }
+      else
+        {
+          NS_LOG_WARN (this << " Event A3 received without measurement results from neighbouring cells");
+        }
+    } // end of else of if (measResults.measId != m_measId)
+
+} // end of DoReportUeMeas
+
+
+bool
+A3RsrpHandoverAlgorithm::IsValidNeighbour (uint16_t cellId)
+{
+  NS_LOG_FUNCTION (this << cellId);
+
+  /**
+   * \todo In the future, this function can be expanded to validate whether the
+   *       neighbour cell is a valid target cell, e.g., taking into account the
+   *       NRT in ANR and whether it is a CSG cell with closed access.
+   */
+
+  return true;
+}
+
+
+} // end of namespace ns3
diff -Naur ns-3.18.1/src/lte/model/a3-rsrp-handover-algorithm.h ns-3.19/src/lte/model/a3-rsrp-handover-algorithm.h
--- ns-3.18.1/src/lte/model/a3-rsrp-handover-algorithm.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/model/a3-rsrp-handover-algorithm.h	2013-12-20 09:44:51.000000000 -0800
@@ -0,0 +1,114 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Budiarto Herman
+ *
+ * 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: Budiarto Herman <budiarto.herman@magister.fi>
+ *
+ */
+
+#ifndef A3_RSRP_HANDOVER_ALGORITHM_H
+#define A3_RSRP_HANDOVER_ALGORITHM_H
+
+#include <ns3/lte-handover-algorithm.h>
+#include <ns3/lte-handover-management-sap.h>
+#include <ns3/lte-rrc-sap.h>
+#include <ns3/nstime.h>
+
+namespace ns3 {
+
+
+/**
+ * \brief Implementation of the strongest cell handover algorithm, based on RSRP
+ *        measurements and Event A3.
+ *
+ * The algorithm utilizes Event A3 (Section 5.5.4.4 of 3GPP TS 36.331) UE
+ * measurements and the Reference Signal Reference Power (RSRP). It is defined
+ * as the event when the UE perceives that a neighbour cell's RSRP is better
+ * than the serving cell's RSRP.
+ *
+ * Handover margin (a.k.a. hysteresis) and time-to-trigger (TTT) can be
+ * configured to delay the event triggering. The values of these parameters
+ * apply to all attached UEs.
+ *
+ * The following code snippet is an example of using and configuring the
+ * handover algorithm in a simulation program:
+ *
+ *     Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
+ *
+ *     NodeContainer enbNodes;
+ *     // configure the nodes here...
+ *
+ *     lteHelper->SetHandoverAlgorithmType ("ns3::A3RsrpHandoverAlgorithm");
+ *     lteHelper->SetHandoverAlgorithmAttribute ("Hysteresis",
+ *                                               DoubleValue (3.0));
+ *     lteHelper->SetHandoverAlgorithmAttribute ("TimeToTrigger",
+ *                                               TimeValue (MilliSeconds (256)));
+ *     NetDeviceContainer enbLteDevs = lteHelper->InstallEnbDevice (enbNodes);
+ *
+ * \note Setting the handover algorithm type and attributes after the call to
+ *       LteHelper::InstallEnbDevice does not have any effect to the devices
+ *       that have already been installed.
+ */
+class A3RsrpHandoverAlgorithm : public LteHandoverAlgorithm
+{
+public:
+  /**
+   * \brief Creates a strongest cell handover algorithm instance.
+   */
+  A3RsrpHandoverAlgorithm ();
+
+  virtual ~A3RsrpHandoverAlgorithm ();
+
+  // inherited from Object
+  static TypeId GetTypeId ();
+
+  // inherited from LteHandoverAlgorithm
+  virtual void SetLteHandoverManagementSapUser (LteHandoverManagementSapUser* s);
+  virtual LteHandoverManagementSapProvider* GetLteHandoverManagementSapProvider ();
+
+  // let the forwarder class access the protected and private members
+  friend class MemberLteHandoverManagementSapProvider<A3RsrpHandoverAlgorithm>;
+
+protected:
+  // inherited from Object
+  virtual void DoInitialize ();
+  virtual void DoDispose ();
+
+  // inherited from LteHandoverAlgorithm as a Handover Management SAP implementation
+  void DoReportUeMeas (uint16_t rnti, LteRrcSap::MeasResults measResults);
+
+private:
+  // Internal method
+  bool IsValidNeighbour (uint16_t cellId);
+
+  // The expected measurement identity
+  uint8_t m_measId;
+
+  // Class attributes
+  double m_hysteresisDb;
+  Time m_timeToTrigger;
+
+  // Handover Management SAPs
+  LteHandoverManagementSapUser* m_handoverManagementSapUser;
+  LteHandoverManagementSapProvider* m_handoverManagementSapProvider;
+
+}; // end of class A3RsrpHandoverAlgorithm
+
+
+} // end of namespace ns3
+
+
+#endif /* A3_RSRP_HANDOVER_ALGORITHM_H */
diff -Naur ns-3.18.1/src/lte/model/epc-enb-application.cc ns-3.19/src/lte/model/epc-enb-application.cc
--- ns-3.18.1/src/lte/model/epc-enb-application.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/epc-enb-application.cc	2013-12-20 09:44:51.000000000 -0800
@@ -33,7 +33,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("EpcEnbApplication");
+NS_LOG_COMPONENT_DEFINE ("EpcEnbApplication")
+  ;
 
 
 EpcEnbApplication::EpsFlowId_t::EpsFlowId_t ()
diff -Naur ns-3.18.1/src/lte/model/epc-gtpu-header.cc ns-3.19/src/lte/model/epc-gtpu-header.cc
--- ns-3.18.1/src/lte/model/epc-gtpu-header.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/epc-gtpu-header.cc	2013-12-20 09:44:51.000000000 -0800
@@ -30,7 +30,8 @@
  *        GTP-U-v1 Header
  ********************************************************/
 
-NS_OBJECT_ENSURE_REGISTERED (GtpuHeader);
+NS_OBJECT_ENSURE_REGISTERED (GtpuHeader)
+  ;
 
 TypeId
 GtpuHeader::GetTypeId (void)
diff -Naur ns-3.18.1/src/lte/model/epc-mme.cc ns-3.19/src/lte/model/epc-mme.cc
--- ns-3.18.1/src/lte/model/epc-mme.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/epc-mme.cc	2013-12-20 09:44:51.000000000 -0800
@@ -33,7 +33,8 @@
 
 
 
-NS_OBJECT_ENSURE_REGISTERED (EpcMme);
+NS_OBJECT_ENSURE_REGISTERED (EpcMme)
+  ;
 
 EpcMme::EpcMme ()
   : m_s11SapSgw (0)
diff -Naur ns-3.18.1/src/lte/model/epc-mme.h ns-3.19/src/lte/model/epc-mme.h
--- ns-3.18.1/src/lte/model/epc-mme.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/epc-mme.h	2013-12-20 09:44:51.000000000 -0800
@@ -84,10 +84,10 @@
 
   /** 
    * Add a new ENB to the MME. 
-   * \param imsi the unique identifier of the UE
+   * \param ecgi E-UTRAN Cell Global ID, the unique identifier of the eNodeB
    * \param enbS1apSap the ENB side of the S1-AP SAP 
    */
-  void AddEnb (uint16_t egci, Ipv4Address enbS1UAddr, EpcS1apSapEnb* enbS1apSap); 
+  void AddEnb (uint16_t ecgi, Ipv4Address enbS1UAddr, EpcS1apSapEnb* enbS1apSap);
   
   /** 
    * Add a new UE to the MME. This is the equivalent of storing the UE
diff -Naur ns-3.18.1/src/lte/model/epc-s11-sap.h ns-3.19/src/lte/model/epc-s11-sap.h
--- ns-3.18.1/src/lte/model/epc-s11-sap.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/epc-s11-sap.h	2013-12-20 09:44:51.000000000 -0800
@@ -99,7 +99,7 @@
   /** 
    * send a Create Session Response message
    * 
-   * \params msg the message
+   * \param msg the message
    */
   virtual void CreateSessionResponse (CreateSessionResponseMessage msg) = 0;
 
@@ -120,7 +120,7 @@
   /** 
    * send a Modify Bearer Response message
    * 
-   * \params msg the message
+   * \param msg the message
    */
   virtual void ModifyBearerResponse (ModifyBearerResponseMessage msg) = 0;
 
@@ -158,7 +158,7 @@
   /** 
    * send a Create Session Request message
    * 
-   * \params msg the message
+   * \param msg the message
    */
   virtual void CreateSessionRequest (CreateSessionRequestMessage msg) = 0;
 
@@ -174,7 +174,7 @@
   /** 
    * send a Modify Bearer Request message
    * 
-   * \params msg the message
+   * \param msg the message
    */
   virtual void ModifyBearerRequest (ModifyBearerRequestMessage msg) = 0;
 
diff -Naur ns-3.18.1/src/lte/model/epc-s1ap-sap.h ns-3.19/src/lte/model/epc-s1ap-sap.h
--- ns-3.18.1/src/lte/model/epc-s1ap-sap.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/epc-s1ap-sap.h	2013-12-20 09:44:51.000000000 -0800
@@ -53,11 +53,11 @@
    * 
    * \param mmeUeS1Id in practice, we use the IMSI
    * \param enbUeS1Id in practice, we use the RNTI
-   * \param s-tmsi in practice, the imsi
+   * \param stmsi in practice, the imsi
    * \param ecgi in practice, the cell Id
    * 
    */
-  virtual void InitialUeMessage (uint64_t mmeUeS1Id, uint16_t enbUeS1Id, uint64_t imsi, uint16_t ecgi) = 0;
+  virtual void InitialUeMessage (uint64_t mmeUeS1Id, uint16_t enbUeS1Id, uint64_t stmsi, uint16_t ecgi) = 0;
 
 
   /**
@@ -76,10 +76,12 @@
    * 
    * \param mmeUeS1Id in practice, we use the IMSI
    * \param enbUeS1Id in practice, we use the RNTI
-   * \param ecgi in practice, the cell Id
+   * \param erabSetupList
    * 
    */
-  virtual void InitialContextSetupResponse (uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list<ErabSetupItem> erabSetupList) = 0;
+  virtual void InitialContextSetupResponse (uint64_t mmeUeS1Id,
+                                            uint16_t enbUeS1Id,
+                                            std::list<ErabSetupItem> erabSetupList) = 0;
 
 
   /**
@@ -126,10 +128,12 @@
    * 
    * \param mmeUeS1Id in practice, we use the IMSI
    * \param enbUeS1Id in practice, we use the RNTI
-   * \param ecgi in practice, the cell Id
+   * \param erabToBeSetupList
    * 
    */
-  virtual void InitialContextSetupRequest (uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list<ErabToBeSetupItem> erabToBeSetupList) = 0;
+  virtual void InitialContextSetupRequest (uint64_t mmeUeS1Id,
+                                           uint16_t enbUeS1Id,
+                                           std::list<ErabToBeSetupItem> erabToBeSetupList) = 0;
 
 
   /**
diff -Naur ns-3.18.1/src/lte/model/epc-sgw-pgw-application.cc ns-3.19/src/lte/model/epc-sgw-pgw-application.cc
--- ns-3.18.1/src/lte/model/epc-sgw-pgw-application.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/epc-sgw-pgw-application.cc	2013-12-20 09:44:51.000000000 -0800
@@ -30,7 +30,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("EpcSgwPgwApplication");
+NS_LOG_COMPONENT_DEFINE ("EpcSgwPgwApplication")
+  ;
 
 
 /////////////////////////
diff -Naur ns-3.18.1/src/lte/model/epc-sgw-pgw-application.h ns-3.19/src/lte/model/epc-sgw-pgw-application.h
--- ns-3.18.1/src/lte/model/epc-sgw-pgw-application.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/epc-sgw-pgw-application.h	2013-12-20 09:44:51.000000000 -0800
@@ -130,7 +130,8 @@
    * Let the SGW be aware of a new eNB 
    * 
    * \param cellId the cell identifier
-   * \param enbAdd the address of the eNB
+   * \param enbAddr the address of the eNB
+   * \param sgwAddr the address of the SGW
    */
   void AddEnb (uint16_t cellId, Ipv4Address enbAddr, Ipv4Address sgwAddr);
 
diff -Naur ns-3.18.1/src/lte/model/epc-tft.cc ns-3.19/src/lte/model/epc-tft.cc
--- ns-3.18.1/src/lte/model/epc-tft.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/epc-tft.cc	2013-12-20 09:44:51.000000000 -0800
@@ -28,7 +28,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("EpcTft");
+NS_LOG_COMPONENT_DEFINE ("EpcTft")
+  ;
 
 std::ostream& operator<< (std::ostream& os, EpcTft::Direction& d)
 {
diff -Naur ns-3.18.1/src/lte/model/epc-tft.h ns-3.19/src/lte/model/epc-tft.h
--- ns-3.18.1/src/lte/model/epc-tft.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/epc-tft.h	2013-12-20 09:44:51.000000000 -0800
@@ -124,7 +124,7 @@
   /** 
    * add a PacketFilter to the Traffic Flow Template
    * 
-   * \param the PacketFilter to be added
+   * \param f the PacketFilter to be added
    * 
    * \return the id( 0 <= id < 16) of the newly added filter, if the addition was successful. Will fail if you try to add more than 15 filters. This is to be compliant with TS 24.008.
    */
diff -Naur ns-3.18.1/src/lte/model/epc-ue-nas.cc ns-3.19/src/lte/model/epc-ue-nas.cc
--- ns-3.18.1/src/lte/model/epc-ue-nas.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/epc-ue-nas.cc	2013-12-20 09:44:51.000000000 -0800
@@ -35,14 +35,14 @@
 
 
 
-const char* g_ueNasStateName[EpcUeNas::NUM_STATES] = 
-  {
-      "OFF",
-      "ATTACHING",
-      "IDLE_REGISTERED",
-      "CONNECTING_TO_EPC",
-      "ACTIVE "    
-  };
+const char* g_ueNasStateName[EpcUeNas::NUM_STATES] =
+{
+  "OFF",
+  "ATTACHING",
+  "IDLE_REGISTERED",
+  "CONNECTING_TO_EPC",
+  "ACTIVE"
+};
 
 std::string ToString (EpcUeNas::State s)
 {
@@ -52,10 +52,12 @@
 
 
 
-NS_OBJECT_ENSURE_REGISTERED (EpcUeNas);
+NS_OBJECT_ENSURE_REGISTERED (EpcUeNas)
+  ;
 
 EpcUeNas::EpcUeNas ()
   : m_state (OFF),
+    m_csgId (0),
     m_asSapProvider (0),
     m_bidCounter (0)
 {
@@ -73,7 +75,7 @@
 EpcUeNas::DoDispose ()
 {
   NS_LOG_FUNCTION (this);
-  delete m_asSapUser;  
+  delete m_asSapUser;
 }
 
 TypeId
@@ -92,41 +94,76 @@
 void 
 EpcUeNas::SetDevice (Ptr<NetDevice> dev)
 {
+  NS_LOG_FUNCTION (this << dev);
   m_device = dev;
 }
 
 void 
 EpcUeNas::SetImsi (uint64_t imsi)
 {
+  NS_LOG_FUNCTION (this << imsi);
   m_imsi = imsi;
 }
 
 void
+EpcUeNas::SetCsgId (uint32_t csgId)
+{
+  NS_LOG_FUNCTION (this << csgId);
+  m_csgId = csgId;
+  m_asSapProvider->SetCsgWhiteList (csgId);
+}
+
+uint32_t
+EpcUeNas::GetCsgId () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_csgId;
+}
+
+void
 EpcUeNas::SetAsSapProvider (LteAsSapProvider* s)
 {
+  NS_LOG_FUNCTION (this << s);
   m_asSapProvider = s;
 }
 
-LteAsSapUser* 
+LteAsSapUser*
 EpcUeNas::GetAsSapUser ()
 {
+  NS_LOG_FUNCTION (this);
   return m_asSapUser;
 }
 
-void 
+void
 EpcUeNas::SetForwardUpCallback (Callback <void, Ptr<Packet> > cb)
 {
+  NS_LOG_FUNCTION (this);
   m_forwardUpCallback = cb;
 }
 
+void
+EpcUeNas::StartCellSelection (uint16_t dlEarfcn)
+{
+  NS_LOG_FUNCTION (this << dlEarfcn);
+  m_asSapProvider->StartCellSelection (dlEarfcn);
+}
+
 void 
-EpcUeNas::Connect (uint16_t cellId, uint16_t earfcn)
+EpcUeNas::Connect ()
 {
   NS_LOG_FUNCTION (this);
 
-  // since RRC Idle Mode cell selection is not supported yet, we
+  // tell RRC to go into connected mode
+  m_asSapProvider->Connect ();
+}
+
+void
+EpcUeNas::Connect (uint16_t cellId, uint16_t dlEarfcn)
+{
+  NS_LOG_FUNCTION (this << cellId << dlEarfcn);
+
   // force the UE RRC to be camped on a specific eNB
-  m_asSapProvider->ForceCampedOnEnb (cellId, earfcn);
+  m_asSapProvider->ForceCampedOnEnb (cellId, dlEarfcn);
 
   // tell RRC to go into connected mode
   m_asSapProvider->Connect ();
@@ -165,7 +202,7 @@
 EpcUeNas::Send (Ptr<Packet> packet)
 {
   NS_LOG_FUNCTION (this << packet);
-  
+
   switch (m_state)
     {
     case ACTIVE:
@@ -181,15 +218,15 @@
           {
             m_asSapProvider->SendData (packet, bid); 
             return true;
-        }
+          }
       }
       break;
 
-    default:      
+    default:
       NS_LOG_WARN (this << " NAS OFF, discarding packet");
       return false;
       break;
-    }        
+    }
 }
 
 void 
@@ -203,13 +240,20 @@
 void 
 EpcUeNas::DoNotifyConnectionFailed ()
 {
-  NS_FATAL_ERROR ("connection failed, it should not happen with the current model");
+  NS_LOG_FUNCTION (this);
+
+  SwitchToState (OFF);
+  /**
+   * \todo Currently not implemented, action by NAS and upper layers after UE
+   *       fails to switch to CONNNECTED mode. Maybe a retry, or just stop here
+   *       and fire a trace to let user know.
+   */
 }
 
 void
 EpcUeNas::DoRecvData (Ptr<Packet> packet)
 {
-  NS_LOG_FUNCTION (this);
+  NS_LOG_FUNCTION (this << packet);
   m_forwardUpCallback (packet);
 }
 
@@ -229,10 +273,17 @@
   m_tftClassifier.Add (tft, bid);
 }
 
+EpcUeNas::State
+EpcUeNas::GetState () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_state;
+}
+
 void 
 EpcUeNas::SwitchToState (State newState)
 {
-  NS_LOG_FUNCTION (this << newState);
+  NS_LOG_FUNCTION (this << ToString (newState));
   State oldState = m_state;
   m_state = newState;
   NS_LOG_INFO ("IMSI " << m_imsi << " NAS " << ToString (oldState) << " --> " << ToString (newState));
diff -Naur ns-3.18.1/src/lte/model/epc-ue-nas.h ns-3.19/src/lte/model/epc-ue-nas.h
--- ns-3.18.1/src/lte/model/epc-ue-nas.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/epc-ue-nas.h	2013-12-20 09:44:51.000000000 -0800
@@ -64,36 +64,64 @@
    */
   void SetImsi (uint64_t imsi);
 
-  /** 
+  /**
+   *
+   * \param csgId Closed Subscriber Group identity
+   */
+  void SetCsgId (uint32_t csgId);
+
+  /**
+   *
+   * \return csgId Closed Subscriber Group identity
+   */
+  uint32_t GetCsgId () const;
+
+  /**
    * Set the AS SAP provider to interact with the NAS entity
-   * 
+   *
    * \param s the AS SAP provider
    */
   void SetAsSapProvider (LteAsSapProvider* s);
 
-  /** 
-   * 
-   * 
+  /**
+   *
+   *
    * \return the AS SAP user exported by this RRC
    */
   LteAsSapUser* GetAsSapUser ();
 
-  /** 
+  /**
    * set the callback used to forward data packets up the stack
-   * 
+   *
    * \param cb the callback
    */
   void SetForwardUpCallback (Callback <void, Ptr<Packet> > cb);
- 
-  /** 
-   * instruct the NAS to go to ACTIVE state, i.e., EMM Registered + ECM Connected
-   * Since RRC Idle Mode cell selection is not supported yet, we
-   * force the UE RRC to be camped on a specific eNB.
+
+  /**
+   * \brief Causes NAS to tell AS to find a suitable cell and camp to it.
+   *
+   * \param dlEarfcn the DL frequency of the eNB
+   */
+  void StartCellSelection (uint16_t dlEarfcn);
+
+  /**
+   * \brief Causes NAS to tell AS to go to ACTIVE state.
    * 
+   * The end result is equivalent with EMM Registered + ECM Connected states.
+   */
+  void Connect ();
+
+  /**
+   * \brief Causes NAS to tell AS to camp to a specific cell and go to ACTIVE
+   *        state.
    * \param cellId the id of the eNB to camp on
-   * \param earfcn the DL frequency of the eNB
+   * \param dlEarfcn the DL frequency of the eNB
+   *
+   * The end result is equivalent with EMM Registered + ECM Connected states.
+   * Since RRC Idle Mode cell selection is not supported yet, we force the UE
+   * RRC to be camped on a specific eNB.
    */
-  void Connect (uint16_t cellId, uint16_t earfcn);
+  void Connect (uint16_t cellId, uint16_t dlEarfcn);
  
   /** 
    * instruct the NAS to disconnect
@@ -126,18 +154,23 @@
    * 
    */
   enum State 
-    {
-      OFF = 0,
-      ATTACHING,
-      IDLE_REGISTERED,
-      CONNECTING_TO_EPC,
-      ACTIVE,
-      NUM_STATES
-    };
+  {
+    OFF = 0,
+    ATTACHING,
+    IDLE_REGISTERED,
+    CONNECTING_TO_EPC,
+    ACTIVE,
+    NUM_STATES
+  };
+
+  /**
+   * \return The current state
+   */
+  State GetState () const;
 
  
 private:
-  
+
   // LTE AS SAP methods
   void DoNotifyConnectionSuccessful ();
   void DoNotifyConnectionFailed ();
@@ -155,7 +188,9 @@
   Ptr<NetDevice> m_device;
 
   uint64_t m_imsi;
-  
+
+  uint32_t m_csgId;
+
   LteAsSapProvider* m_asSapProvider;
   LteAsSapUser* m_asSapUser;
 
diff -Naur ns-3.18.1/src/lte/model/epc-x2.cc ns-3.19/src/lte/model/epc-x2.cc
--- ns-3.18.1/src/lte/model/epc-x2.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/epc-x2.cc	2013-12-20 09:44:51.000000000 -0800
@@ -80,7 +80,8 @@
 
 ///////////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (EpcX2);
+NS_OBJECT_ENSURE_REGISTERED (EpcX2)
+  ;
 
 EpcX2::EpcX2 ()
   : m_x2cUdpPort (4444),
diff -Naur ns-3.18.1/src/lte/model/epc-x2.h ns-3.19/src/lte/model/epc-x2.h
--- ns-3.18.1/src/lte/model/epc-x2.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/epc-x2.h	2013-12-20 09:44:51.000000000 -0800
@@ -92,15 +92,20 @@
   void SetEpcX2SapUser (EpcX2SapUser * s);
 
   /**
-   * \param s the X2 SAP Provider interface offered by this EPC X2 entity
+   * \return the X2 SAP Provider interface offered by this EPC X2 entity
    */
   EpcX2SapProvider* GetEpcX2SapProvider ();
 
 
   /**
-   * \param s the X2 SAP Provider interface offered by this EPC X2 entity
+   * Add an X2 interface to this EPC X2 entity
+   * \param enb1CellId the cell ID of the current eNodeB
+   * \param enb1X2Address the address of the current eNodeB
+   * \param enb2CellId the cell ID of the neighbouring eNodeB
+   * \param enb2X2Address the address of the neighbouring eNodeB
    */
-  void AddX2Interface (uint16_t enb1CellId, Ipv4Address enb1X2Address, uint16_t enb2CellId, Ipv4Address enb2X2Address);
+  void AddX2Interface (uint16_t enb1CellId, Ipv4Address enb1X2Address,
+                       uint16_t enb2CellId, Ipv4Address enb2X2Address);
 
 
   /** 
diff -Naur ns-3.18.1/src/lte/model/epc-x2-header.cc ns-3.19/src/lte/model/epc-x2-header.cc
--- ns-3.18.1/src/lte/model/epc-x2-header.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/epc-x2-header.cc	2013-12-20 09:44:51.000000000 -0800
@@ -27,7 +27,8 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (EpcX2Header);
+NS_OBJECT_ENSURE_REGISTERED (EpcX2Header)
+  ;
 
 EpcX2Header::EpcX2Header ()
   : m_messageType (0xfa),
@@ -145,7 +146,8 @@
 
 /////////////////////////////////////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (EpcX2HandoverRequestHeader);
+NS_OBJECT_ENSURE_REGISTERED (EpcX2HandoverRequestHeader)
+  ;
 
 EpcX2HandoverRequestHeader::EpcX2HandoverRequestHeader ()
   : m_numberOfIes (1 + 1 + 1 + 1),
@@ -433,7 +435,8 @@
 
 /////////////////////////////////////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (EpcX2HandoverRequestAckHeader);
+NS_OBJECT_ENSURE_REGISTERED (EpcX2HandoverRequestAckHeader)
+  ;
 
 EpcX2HandoverRequestAckHeader::EpcX2HandoverRequestAckHeader ()
   : m_numberOfIes (1 + 1 + 1 + 1),
@@ -658,7 +661,8 @@
 
 /////////////////////////////////////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (EpcX2HandoverPreparationFailureHeader);
+NS_OBJECT_ENSURE_REGISTERED (EpcX2HandoverPreparationFailureHeader)
+  ;
 
 EpcX2HandoverPreparationFailureHeader::EpcX2HandoverPreparationFailureHeader ()
   : m_numberOfIes (1 + 1 + 1),
@@ -783,7 +787,8 @@
 
 /////////////////////////////////////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (EpcX2SnStatusTransferHeader);
+NS_OBJECT_ENSURE_REGISTERED (EpcX2SnStatusTransferHeader)
+  ;
 
 EpcX2SnStatusTransferHeader::EpcX2SnStatusTransferHeader ()
   : m_numberOfIes (3),
@@ -975,7 +980,8 @@
 
 /////////////////////////////////////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (EpcX2UeContextReleaseHeader);
+NS_OBJECT_ENSURE_REGISTERED (EpcX2UeContextReleaseHeader)
+  ;
 
 EpcX2UeContextReleaseHeader::EpcX2UeContextReleaseHeader ()
   : m_numberOfIes (1 + 1),
@@ -1082,7 +1088,8 @@
 
 /////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (EpcX2LoadInformationHeader);
+NS_OBJECT_ENSURE_REGISTERED (EpcX2LoadInformationHeader)
+  ;
 
 EpcX2LoadInformationHeader::EpcX2LoadInformationHeader ()
   : m_numberOfIes (1),
@@ -1306,7 +1313,8 @@
 
 ////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (EpcX2ResourceStatusUpdateHeader);
+NS_OBJECT_ENSURE_REGISTERED (EpcX2ResourceStatusUpdateHeader)
+  ;
 
 EpcX2ResourceStatusUpdateHeader::EpcX2ResourceStatusUpdateHeader ()
   : m_numberOfIes (3),
diff -Naur ns-3.18.1/src/lte/model/eps-bearer-tag.cc ns-3.19/src/lte/model/eps-bearer-tag.cc
--- ns-3.18.1/src/lte/model/eps-bearer-tag.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/eps-bearer-tag.cc	2013-12-20 09:44:51.000000000 -0800
@@ -26,7 +26,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (EpsBearerTag);
+NS_OBJECT_ENSURE_REGISTERED (EpsBearerTag)
+  ;
 
 TypeId
 EpsBearerTag::GetTypeId (void)
diff -Naur ns-3.18.1/src/lte/model/eps-bearer-tag.h ns-3.19/src/lte/model/eps-bearer-tag.h
--- ns-3.18.1/src/lte/model/eps-bearer-tag.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/eps-bearer-tag.h	2013-12-20 09:44:51.000000000 -0800
@@ -54,7 +54,7 @@
    *
    * @param rnti the value of the RNTI to set
    */
-  void SetRnti (uint16_t tid);
+  void SetRnti (uint16_t rnti);
 
   /**
    * Set the bearer id to the given value.
diff -Naur ns-3.18.1/src/lte/model/fdbet-ff-mac-scheduler.cc ns-3.19/src/lte/model/fdbet-ff-mac-scheduler.cc
--- ns-3.18.1/src/lte/model/fdbet-ff-mac-scheduler.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/fdbet-ff-mac-scheduler.cc	2013-12-20 09:44:51.000000000 -0800
@@ -43,7 +43,8 @@
 };  // see table 7.1.6.1-1 of 36.213
 
 
-NS_OBJECT_ENSURE_REGISTERED (FdBetFfMacScheduler);
+NS_OBJECT_ENSURE_REGISTERED (FdBetFfMacScheduler)
+  ;
 
 
 
@@ -650,6 +651,14 @@
   rbgMap.resize (m_cschedCellConfig.m_dlBandwidth / rbgSize, false);
   FfMacSchedSapUser::SchedDlConfigIndParameters ret;
 
+
+  //   update UL HARQ proc id
+  std::map <uint16_t, uint8_t>::iterator itProcId;
+  for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
+    {
+      (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
+    }
+
   // RACH Allocation
   m_rachAllocationMap.resize (m_cschedCellConfig.m_ulBandwidth, 0);
   uint16_t rbStart = 0;
@@ -691,6 +700,44 @@
         }
       rbStart = rbStart + rbLen;
 
+      if (m_harqOn == true)
+        {
+          // generate UL-DCI for HARQ retransmissions
+          UlDciListElement_s uldci;
+          uldci.m_rnti = newRar.m_rnti;
+          uldci.m_rbLen = rbLen;
+          uldci.m_rbStart = rbStart;
+          uldci.m_mcs = m_ulGrantMcs;
+          uldci.m_tbSize = tbSizeBits / 8;
+          uldci.m_ndi = 1;
+          uldci.m_cceIndex = 0;
+          uldci.m_aggrLevel = 1;
+          uldci.m_ueTxAntennaSelection = 3; // antenna selection OFF
+          uldci.m_hopping = false;
+          uldci.m_n2Dmrs = 0;
+          uldci.m_tpc = 0; // no power control
+          uldci.m_cqiRequest = false; // only period CQI at this stage
+          uldci.m_ulIndex = 0; // TDD parameter
+          uldci.m_dai = 1; // TDD parameter
+          uldci.m_freqHopping = 0;
+          uldci.m_pdcchPowerOffset = 0; // not used
+
+          uint8_t harqId = 0;
+          std::map <uint16_t, uint8_t>::iterator itProcId;
+          itProcId = m_ulHarqCurrentProcessId.find (uldci.m_rnti);
+          if (itProcId == m_ulHarqCurrentProcessId.end ())
+            {
+              NS_FATAL_ERROR ("No info find in HARQ buffer for UE " << uldci.m_rnti);
+            }
+          harqId = (*itProcId).second;
+          std::map <uint16_t, UlHarqProcessesDciBuffer_t>::iterator itDci = m_ulHarqProcessesDciBuffer.find (uldci.m_rnti);
+          if (itDci == m_ulHarqProcessesDciBuffer.end ())
+            {
+              NS_FATAL_ERROR ("Unable to find RNTI entry in UL DCI HARQ buffer for RNTI " << uldci.m_rnti);
+            }
+          (*itDci).second.at (harqId) = uldci;
+        }
+
       ret.m_buildRarList.push_back (newRar);
     }
   m_rachList.clear ();
@@ -952,6 +999,16 @@
   m_dlInfoListBuffered.clear ();
   m_dlInfoListBuffered = dlInfoListUntxed;
 
+  if (rbgAllocatedNum == rbgNum)
+    {
+      // all the RBGs are already allocated -> exit
+      if ((ret.m_buildDataList.size () > 0) || (ret.m_buildRarList.size () > 0))
+        {
+          m_schedSapUser->SchedDlConfigInd (ret);
+        }
+      return;
+    }
+
   std::map <uint16_t, fdbetsFlowPerf_t>::iterator itFlow;
   std::map <uint16_t, double> estAveThr;                                // store expected average throughput for UE
   std::map <uint16_t, double>::iterator itMax = estAveThr.end ();
@@ -1381,20 +1438,13 @@
   if (m_harqOn == true)
     {
       //   Process UL HARQ feedback
-      //   update UL HARQ proc id
-      std::map <uint16_t, uint8_t>::iterator itProcId;
-      for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
-        {
-          (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
-        }
-
       for (uint16_t i = 0; i < params.m_ulInfoList.size (); i++)
         {        
           if (params.m_ulInfoList.at (i).m_receptionStatus == UlInfoListElement_s::NotOk)
             {
               // retx correspondent block: retrieve the UL-DCI
               uint16_t rnti = params.m_ulInfoList.at (i).m_rnti;
-              itProcId = m_ulHarqCurrentProcessId.find (rnti);
+              std::map <uint16_t, uint8_t>::iterator itProcId = m_ulHarqCurrentProcessId.find (rnti);
               if (itProcId == m_ulHarqCurrentProcessId.end ())
                 {
                   NS_LOG_ERROR ("No info find in HARQ buffer for UE (might change eNB) " << rnti);
diff -Naur ns-3.18.1/src/lte/model/fdmt-ff-mac-scheduler.cc ns-3.19/src/lte/model/fdmt-ff-mac-scheduler.cc
--- ns-3.18.1/src/lte/model/fdmt-ff-mac-scheduler.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/fdmt-ff-mac-scheduler.cc	2013-12-20 09:44:51.000000000 -0800
@@ -43,7 +43,8 @@
 };  // see table 7.1.6.1-1 of 36.213
 
 
-NS_OBJECT_ENSURE_REGISTERED (FdMtFfMacScheduler);
+NS_OBJECT_ENSURE_REGISTERED (FdMtFfMacScheduler)
+  ;
 
 
 
@@ -639,6 +640,13 @@
   rbgMap.resize (m_cschedCellConfig.m_dlBandwidth / rbgSize, false);
   FfMacSchedSapUser::SchedDlConfigIndParameters ret;
 
+  //   update UL HARQ proc id
+  std::map <uint16_t, uint8_t>::iterator itProcId;
+  for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
+    {
+      (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
+    }
+
   // RACH Allocation
   m_rachAllocationMap.resize (m_cschedCellConfig.m_ulBandwidth, 0);
   uint16_t rbStart = 0;
@@ -680,6 +688,44 @@
         }
       rbStart = rbStart + rbLen;
 
+      if (m_harqOn == true)
+        {
+          // generate UL-DCI for HARQ retransmissions
+          UlDciListElement_s uldci;
+          uldci.m_rnti = newRar.m_rnti;
+          uldci.m_rbLen = rbLen;
+          uldci.m_rbStart = rbStart;
+          uldci.m_mcs = m_ulGrantMcs;
+          uldci.m_tbSize = tbSizeBits / 8;
+          uldci.m_ndi = 1;
+          uldci.m_cceIndex = 0;
+          uldci.m_aggrLevel = 1;
+          uldci.m_ueTxAntennaSelection = 3; // antenna selection OFF
+          uldci.m_hopping = false;
+          uldci.m_n2Dmrs = 0;
+          uldci.m_tpc = 0; // no power control
+          uldci.m_cqiRequest = false; // only period CQI at this stage
+          uldci.m_ulIndex = 0; // TDD parameter
+          uldci.m_dai = 1; // TDD parameter
+          uldci.m_freqHopping = 0;
+          uldci.m_pdcchPowerOffset = 0; // not used
+
+          uint8_t harqId = 0;
+          std::map <uint16_t, uint8_t>::iterator itProcId;
+          itProcId = m_ulHarqCurrentProcessId.find (uldci.m_rnti);
+          if (itProcId == m_ulHarqCurrentProcessId.end ())
+            {
+              NS_FATAL_ERROR ("No info find in HARQ buffer for UE " << uldci.m_rnti);
+            }
+          harqId = (*itProcId).second;
+          std::map <uint16_t, UlHarqProcessesDciBuffer_t>::iterator itDci = m_ulHarqProcessesDciBuffer.find (uldci.m_rnti);
+          if (itDci == m_ulHarqProcessesDciBuffer.end ())
+            {
+              NS_FATAL_ERROR ("Unable to find RNTI entry in UL DCI HARQ buffer for RNTI " << uldci.m_rnti);
+            }
+          (*itDci).second.at (harqId) = uldci;
+        }
+
       ret.m_buildRarList.push_back (newRar);
     }
   m_rachList.clear ();
@@ -941,6 +987,16 @@
   m_dlInfoListBuffered.clear ();
   m_dlInfoListBuffered = dlInfoListUntxed;
 
+  if (rbgAllocatedNum == rbgNum)
+    {
+      // all the RBGs are already allocated -> exit
+      if ((ret.m_buildDataList.size () > 0) || (ret.m_buildRarList.size () > 0))
+        {
+          m_schedSapUser->SchedDlConfigInd (ret);
+        }
+      return;
+    }
+
 
 
   for (int i = 0; i < rbgNum; i++)
@@ -1361,20 +1417,13 @@
   if (m_harqOn == true)
     {
       //   Process UL HARQ feedback
-      //   update UL HARQ proc id
-      std::map <uint16_t, uint8_t>::iterator itProcId;
-      for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
-        {
-          (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
-        }
-
       for (uint16_t i = 0; i < params.m_ulInfoList.size (); i++)
         {        
           if (params.m_ulInfoList.at (i).m_receptionStatus == UlInfoListElement_s::NotOk)
             {
               // retx correspondent block: retrieve the UL-DCI
               uint16_t rnti = params.m_ulInfoList.at (i).m_rnti;
-              itProcId = m_ulHarqCurrentProcessId.find (rnti);
+              std::map <uint16_t, uint8_t>::iterator itProcId = m_ulHarqCurrentProcessId.find (rnti);
               if (itProcId == m_ulHarqCurrentProcessId.end ())
                 {
                   NS_LOG_ERROR ("No info find in HARQ buffer for UE (might change eNB) " << rnti);
diff -Naur ns-3.18.1/src/lte/model/fdtbfq-ff-mac-scheduler.cc ns-3.19/src/lte/model/fdtbfq-ff-mac-scheduler.cc
--- ns-3.18.1/src/lte/model/fdtbfq-ff-mac-scheduler.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/fdtbfq-ff-mac-scheduler.cc	2013-12-20 09:44:51.000000000 -0800
@@ -44,7 +44,8 @@
 };  // see table 7.1.6.1-1 of 36.213
 
 
-NS_OBJECT_ENSURE_REGISTERED (FdTbfqFfMacScheduler);
+NS_OBJECT_ENSURE_REGISTERED (FdTbfqFfMacScheduler)
+  ;
 
 
 
@@ -694,6 +695,13 @@
   rbgMap.resize (m_cschedCellConfig.m_dlBandwidth / rbgSize, false);
   FfMacSchedSapUser::SchedDlConfigIndParameters ret;
 
+  //   update UL HARQ proc id
+  std::map <uint16_t, uint8_t>::iterator itProcId;
+  for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
+    {
+      (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
+    }
+
   // RACH Allocation
   m_rachAllocationMap.resize (m_cschedCellConfig.m_ulBandwidth, 0);
   uint16_t rbStart = 0;
@@ -735,6 +743,44 @@
         }
       rbStart = rbStart + rbLen;
 
+            if (m_harqOn == true)
+        {
+          // generate UL-DCI for HARQ retransmissions
+          UlDciListElement_s uldci;
+          uldci.m_rnti = newRar.m_rnti;
+          uldci.m_rbLen = rbLen;
+          uldci.m_rbStart = rbStart;
+          uldci.m_mcs = m_ulGrantMcs;
+          uldci.m_tbSize = tbSizeBits / 8;
+          uldci.m_ndi = 1;
+          uldci.m_cceIndex = 0;
+          uldci.m_aggrLevel = 1;
+          uldci.m_ueTxAntennaSelection = 3; // antenna selection OFF
+          uldci.m_hopping = false;
+          uldci.m_n2Dmrs = 0;
+          uldci.m_tpc = 0; // no power control
+          uldci.m_cqiRequest = false; // only period CQI at this stage
+          uldci.m_ulIndex = 0; // TDD parameter
+          uldci.m_dai = 1; // TDD parameter
+          uldci.m_freqHopping = 0;
+          uldci.m_pdcchPowerOffset = 0; // not used
+
+          uint8_t harqId = 0;
+          std::map <uint16_t, uint8_t>::iterator itProcId;
+          itProcId = m_ulHarqCurrentProcessId.find (uldci.m_rnti);
+          if (itProcId == m_ulHarqCurrentProcessId.end ())
+            {
+              NS_FATAL_ERROR ("No info find in HARQ buffer for UE " << uldci.m_rnti);
+            }
+          harqId = (*itProcId).second;
+          std::map <uint16_t, UlHarqProcessesDciBuffer_t>::iterator itDci = m_ulHarqProcessesDciBuffer.find (uldci.m_rnti);
+          if (itDci == m_ulHarqProcessesDciBuffer.end ())
+            {
+              NS_FATAL_ERROR ("Unable to find RNTI entry in UL DCI HARQ buffer for RNTI " << uldci.m_rnti);
+            }
+          (*itDci).second.at (harqId) = uldci;
+        }
+
       ret.m_buildRarList.push_back (newRar);
     }
   m_rachList.clear ();
@@ -996,6 +1042,15 @@
   m_dlInfoListBuffered.clear ();
   m_dlInfoListBuffered = dlInfoListUntxed;
 
+  if (rbgAllocatedNum == rbgNum)
+    {
+      // all the RBGs are already allocated -> exit
+      if ((ret.m_buildDataList.size () > 0) || (ret.m_buildRarList.size () > 0))
+        {
+          m_schedSapUser->SchedDlConfigInd (ret);
+        }
+      return;
+    }
 
   // update token pool, counter and bank size
   std::map <uint16_t, fdtbfqsFlowPerf_t>::iterator itStats;
@@ -1612,20 +1667,13 @@
   if (m_harqOn == true)
     {
       //   Process UL HARQ feedback
-      //   update UL HARQ proc id
-      std::map <uint16_t, uint8_t>::iterator itProcId;
-      for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
-        {
-          (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
-        }
-
       for (uint16_t i = 0; i < params.m_ulInfoList.size (); i++)
         {        
           if (params.m_ulInfoList.at (i).m_receptionStatus == UlInfoListElement_s::NotOk)
             {
               // retx correspondent block: retrieve the UL-DCI
               uint16_t rnti = params.m_ulInfoList.at (i).m_rnti;
-              itProcId = m_ulHarqCurrentProcessId.find (rnti);
+              std::map <uint16_t, uint8_t>::iterator itProcId = m_ulHarqCurrentProcessId.find (rnti);
               if (itProcId == m_ulHarqCurrentProcessId.end ())
                 {
                   NS_LOG_ERROR ("No info find in HARQ buffer for UE (might change eNB) " << rnti);
diff -Naur ns-3.18.1/src/lte/model/ff-mac-scheduler.cc ns-3.19/src/lte/model/ff-mac-scheduler.cc
--- ns-3.18.1/src/lte/model/ff-mac-scheduler.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/ff-mac-scheduler.cc	2013-12-20 09:44:51.000000000 -0800
@@ -28,7 +28,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (FfMacScheduler);
+NS_OBJECT_ENSURE_REGISTERED (FfMacScheduler)
+  ;
 
 
 FfMacScheduler::FfMacScheduler ()
diff -Naur ns-3.18.1/src/lte/model/lte-amc.cc ns-3.19/src/lte/model/lte-amc.cc
--- ns-3.18.1/src/lte/model/lte-amc.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/lte-amc.cc	2013-12-20 09:44:51.000000000 -0800
@@ -36,7 +36,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteAmc);
+NS_OBJECT_ENSURE_REGISTERED (LteAmc)
+  ;
 
 // from 3GPP R1-081483 "Conveying MCS and TB size via PDCCH"
 // file TBS_support.xls
diff -Naur ns-3.18.1/src/lte/model/lte-amc.h ns-3.19/src/lte/model/lte-amc.h
--- ns-3.18.1/src/lte/model/lte-amc.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/lte-amc.h	2013-12-20 09:44:51.000000000 -0800
@@ -86,9 +86,10 @@
    * \brief Create a message with CQI feedback
    * \param sinr the SpectrumValue vector of SINR for evaluating the CQI
    * \param rbgSize size of RB group (in RBs) for evaluating subband/wideband CQI
-   *
+   * \return a vector of CQI feedbacks
    */
-  /*static*/ std::vector<int> CreateCqiFeedbacks (const SpectrumValue& sinr, uint8_t rbgSize = 0);
+  /*static*/ std::vector<int> CreateCqiFeedbacks (const SpectrumValue& sinr,
+                                                  uint8_t rbgSize = 0);
 
   /**
    * \brief Get a proper CQI for the spectrale efficiency value.
diff -Naur ns-3.18.1/src/lte/model/lte-anr.cc ns-3.19/src/lte/model/lte-anr.cc
--- ns-3.18.1/src/lte/model/lte-anr.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/model/lte-anr.cc	2013-12-20 09:44:51.000000000 -0800
@@ -0,0 +1,264 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ * Copyright (c) 2013 Budiarto Herman
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Original work authors (from lte-enb-rrc.cc):
+ * - Nicola Baldo <nbaldo@cttc.es>
+ * - Marco Miozzo <mmiozzo@cttc.es>
+ * - Manuel Requena <manuel.requena@cttc.es>
+ *
+ * Converted to ANR interface by:
+ * - Budiarto Herman <budiarto.herman@magister.fi>
+ */
+
+#include "lte-anr.h"
+#include <ns3/log.h>
+#include <ns3/uinteger.h>
+
+NS_LOG_COMPONENT_DEFINE ("LteAnr");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (LteAnr)
+  ;
+
+
+LteAnr::LteAnr (uint16_t servingCellId)
+  : m_anrSapUser (0),
+    m_threshold (0),
+    m_measId (0),
+    m_servingCellId (servingCellId)
+{
+  NS_LOG_FUNCTION (this << servingCellId);
+  m_anrSapProvider = new MemberLteAnrSapProvider<LteAnr> (this);
+}
+
+
+LteAnr::~LteAnr ()
+{
+  NS_LOG_FUNCTION (this << m_servingCellId);
+}
+
+
+TypeId
+LteAnr::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::LteAnr")
+    .SetParent<Object> ()
+    .AddAttribute ("Threshold",
+                   "Minimum RSRQ range value required for detecting a neighbour cell",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&LteAnr::m_threshold),
+                   MakeUintegerChecker<uint8_t> (0, 34)) // RSRQ range is [0..34] as per Section 9.1.7 of 3GPP TS 36.133
+  ;
+  return tid;
+}
+
+
+void
+LteAnr::AddNeighbourRelation (uint16_t cellId)
+{
+  NS_LOG_FUNCTION (this << m_servingCellId << cellId);
+
+  if (cellId == m_servingCellId)
+    {
+      NS_FATAL_ERROR ("Serving cell ID " << cellId << " may not be added into NRT");
+    }
+
+  if (m_neighbourRelationTable.find (cellId) != m_neighbourRelationTable.end ())
+    {
+      NS_FATAL_ERROR ("There is already an entry in the NRT for cell ID " << cellId);
+    }
+
+  NeighbourRelation_t neighbourRelation;
+  neighbourRelation.noRemove = true;
+  neighbourRelation.noHo = true;
+  neighbourRelation.noX2 = false;
+  neighbourRelation.detectedAsNeighbour = false;
+  m_neighbourRelationTable[cellId] = neighbourRelation;
+}
+
+
+void
+LteAnr::RemoveNeighbourRelation (uint16_t cellId)
+{
+  NS_LOG_FUNCTION (this << m_servingCellId << cellId);
+
+  NeighbourRelationTable_t::iterator it = m_neighbourRelationTable.find (cellId);
+  if (it != m_neighbourRelationTable.end ())
+    {
+      NS_FATAL_ERROR ("Cell ID " << cellId << " cannot be found in NRT");
+    }
+
+  m_neighbourRelationTable.erase (it);
+}
+
+
+void
+LteAnr::SetLteAnrSapUser (LteAnrSapUser* s)
+{
+  NS_LOG_FUNCTION (this << s);
+  m_anrSapUser = s;
+}
+
+
+LteAnrSapProvider*
+LteAnr::GetLteAnrSapProvider ()
+{
+  NS_LOG_FUNCTION (this);
+  return m_anrSapProvider;
+}
+
+
+void
+LteAnr::DoInitialize ()
+{
+  NS_LOG_FUNCTION (this);
+  NS_LOG_LOGIC (this << " requesting Event A4 measurements"
+                     << " (threshold=" << (uint16_t) m_threshold << ")");
+  LteRrcSap::ReportConfigEutra reportConfig;
+  reportConfig.eventId = LteRrcSap::ReportConfigEutra::EVENT_A4;
+  reportConfig.threshold1.choice = LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ;
+  reportConfig.threshold1.range = m_threshold;
+  reportConfig.triggerQuantity = LteRrcSap::ReportConfigEutra::RSRQ;
+  reportConfig.reportInterval = LteRrcSap::ReportConfigEutra::MS480;
+  m_measId = m_anrSapUser->AddUeMeasReportConfigForAnr (reportConfig);
+}
+
+
+void
+LteAnr::DoDispose ()
+{
+  NS_LOG_FUNCTION (this);
+  delete m_anrSapProvider;
+  m_neighbourRelationTable.clear ();
+}
+
+
+void
+LteAnr::DoReportUeMeas (LteRrcSap::MeasResults measResults)
+{
+  uint8_t measId = measResults.measId;
+  NS_LOG_FUNCTION (this << m_servingCellId << (uint16_t) measId);
+
+  if (measId != m_measId)
+    {
+      NS_LOG_WARN (this << " Skipping unexpected measurement identity " << (uint16_t) measId);
+    }
+  else
+    {
+      if (measResults.haveMeasResultNeighCells
+          && !(measResults.measResultListEutra.empty ()))
+        {
+          for (std::list <LteRrcSap::MeasResultEutra>::iterator it = measResults.measResultListEutra.begin ();
+               it != measResults.measResultListEutra.end ();
+               ++it)
+            {
+              // Keep new RSRQ value reported for the neighbour cell
+              NS_ASSERT_MSG (it->haveRsrqResult == true,
+                             "RSRQ measure missing for cellId " << it->physCellId);
+
+              // Update Neighbour Relation Table
+              NeighbourRelationTable_t::iterator itNrt = m_neighbourRelationTable.find (it->physCellId);
+              if (itNrt != m_neighbourRelationTable.end ())
+                {
+                  // Update neighbour relation entry
+                  NS_LOG_LOGIC (this << " updating NRT of cell " << m_servingCellId
+                                     << " with entry of cell " << it->physCellId);
+                  if (itNrt->second.noX2 == false)
+                    {
+                      NS_LOG_LOGIC (this << " enabling handover"
+                                         << " from cell " << m_servingCellId
+                                         << " to cell " << it->physCellId);
+                      itNrt->second.noHo = false;
+                    }
+                  itNrt->second.detectedAsNeighbour = true;
+                }
+              else
+                {
+                  // Discovered new neighbour
+                  NS_LOG_LOGIC (this << " inserting NRT of cell " << m_servingCellId
+                                     << " with newly discovered neighbouring cell "
+                                     << it->physCellId);
+                  NeighbourRelation_t neighbourRelation;
+                  neighbourRelation.noRemove = false;
+                  neighbourRelation.noHo = true;
+                  neighbourRelation.noX2 = true;
+                  neighbourRelation.detectedAsNeighbour = true;
+                  m_neighbourRelationTable[it->physCellId] = neighbourRelation;
+                }
+
+            } // end of for (it = measResults.measResultListEutra.begin ())
+
+        } // end of if (measResults.haveMeasResultNeighCells && !(measResults.measResultListEutra.empty ()))
+      else
+        {
+          NS_LOG_WARN (this << " Event A4 received without measurement results from neighbouring cells");
+          /// \todo Remove neighbours in the NRT.
+        }
+
+    } // end of else of if (measId != m_measId)
+
+} // end of DoReportUeMeas
+
+
+void
+LteAnr::DoAddNeighbourRelation (uint16_t cellId)
+{
+  NS_LOG_FUNCTION (this << cellId);
+  AddNeighbourRelation (cellId);
+}
+
+
+bool
+LteAnr::DoGetNoRemove (uint16_t cellId) const
+{
+  NS_LOG_FUNCTION (this << m_servingCellId << cellId);
+  return Find (cellId)->noRemove;
+}
+
+
+bool
+LteAnr::DoGetNoHo (uint16_t cellId) const
+{
+  NS_LOG_FUNCTION (this << m_servingCellId << cellId);
+  return Find (cellId)->noHo;
+}
+
+
+bool
+LteAnr::DoGetNoX2 (uint16_t cellId) const
+{
+  NS_LOG_FUNCTION (this << m_servingCellId << cellId);
+  return Find (cellId)->noX2;
+}
+
+
+const LteAnr::NeighbourRelation_t *
+LteAnr::Find (uint16_t cellId) const
+{
+  NeighbourRelationTable_t::const_iterator it = m_neighbourRelationTable.find (cellId);
+  if (it == m_neighbourRelationTable.end ())
+    {
+      NS_FATAL_ERROR ("Cell ID " << cellId << " cannot be found in NRT");
+    }
+  return &(it->second);
+}
+
+
+} // end of namespace ns3
+
diff -Naur ns-3.18.1/src/lte/model/lte-anr.h ns-3.19/src/lte/model/lte-anr.h
--- ns-3.18.1/src/lte/model/lte-anr.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/model/lte-anr.h	2013-12-20 09:44:51.000000000 -0800
@@ -0,0 +1,233 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ * Copyright (c) 2013 Budiarto Herman
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Original work authors (from lte-enb-rrc.cc):
+ * - Nicola Baldo <nbaldo@cttc.es>
+ * - Marco Miozzo <mmiozzo@cttc.es>
+ * - Manuel Requena <manuel.requena@cttc.es>
+ *
+ * Converted to ANR interface by:
+ * - Budiarto Herman <budiarto.herman@magister.fi>
+ */
+
+#ifndef LTE_ANR_H
+#define LTE_ANR_H
+
+#include <ns3/object.h>
+#include <ns3/lte-rrc-sap.h>
+#include <ns3/lte-anr-sap.h>
+#include <map>
+
+namespace ns3 {
+
+
+class LteAnrSapProvider;
+class LteAnrSapUser;
+class LteNeighbourRelation;
+
+/**
+ * \brief Automatic Neighbour Relation function.
+ *
+ * ANR is a conceptually a list of neighbouring cells called the Neighbour
+ * Relation Table (NRT). ANR has the capability of automatically inserting new
+ * entries into NRT based on measurement reports obtained from the eNodeB RRC
+ * instance. Besides this, ANR also supports manual insertion and accepts
+ * queries for the NRT content.
+ *
+ * The LteHelper class automatically installs one ANR instance for each eNodeB
+ * RRC instance. When installed, ANR will assist the eNodeB RRC's handover
+ * function, e.g., by preventing an X2-based handover execution if there is no
+ * X2 interface to the target neighbour cell. If this is not desired, it can be
+ * disabled by the following code sample:
+ *
+ *     Config::SetDefault ("ns3::LteHelper::AnrEnabled", BooleanValue (false));
+ *     Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
+ *
+ * The communication between an ANR instance and the eNodeB RRC instance is done
+ * through the *ANR SAP* interface. The ANR instance corresponds to the
+ * "provider" part of this interface, while the eNodeB RRC instance takes the
+ * role of the "user" part. The following code skeleton establishes the
+ * connection between both instances:
+ *
+ *     Ptr<LteEnbRrc> u = ...;
+ *     Ptr<LteAnr> p = ...;
+ *     u->SetLteAnrSapProvider (p->GetLteAnrSapProvider ());
+ *     p->SetLteAnrSapUser (u->GetLteAnrSapUser ());
+ *
+ * However, user rarely needs to use the above code, since it has already been
+ * taken care by LteHelper::InstallEnbDevice.
+ *
+ * The current ANR model is inspired from Section 22.3.2a and 22.3.3 of 3GPP
+ * TS 36.300.
+ *
+ * \sa SetLteAnrSapProvider, SetLteAnrSapUser
+ */
+class LteAnr : public Object
+{
+public:
+  /**
+   * \brief Creates an ANR instance.
+   * \param servingCellId the cell ID of the eNodeB instance whom this ANR
+   *                      instance is to be associated with
+   */
+  LteAnr (uint16_t servingCellId);
+  virtual ~LteAnr ();
+
+  // inherited from Object
+  static TypeId GetTypeId ();
+
+  /**
+   * \brief Provide an advance information about a related neighbouring cell
+   *        and add it as a new Neighbour Relation entry.
+   * \param cellId the cell ID of the new neighbour
+   *
+   * This function simulates the Neighbour Relation addition operation by
+   * network operations and maintenance, as depicted in Section 22.3.2a of
+   * 3GPP TS 36.300.
+   *
+   * An entry added by this function will have the NoRemove flag set to TRUE and
+   * the NoHo flag set to TRUE. Hence, the cell may not act as the target cell
+   * of a handover, unless a measurement report of the cell is received, which
+   * will update the NoHo flag to FALSE.
+   */
+  void AddNeighbourRelation (uint16_t cellId);
+
+  /**
+   * \brief Remove an existing Neighbour Relation entry.
+   * \param cellId the cell ID to be removed from the NRT
+   *
+   * This function simulates the Neighbour Relation removal operation by
+   * network operations and maintenance, as depicted in Section 22.3.2a of
+   * 3GPP TS 36.300.
+   */
+  void RemoveNeighbourRelation (uint16_t cellId);
+
+  /**
+   * \brief Set the "user" part of the ANR SAP interface that this ANR instance
+   *        will interact with.
+   * \param s a reference to the "user" part of the interface, typically a
+   *          member of an LteEnbRrc instance
+   */
+  virtual void SetLteAnrSapUser (LteAnrSapUser* s);
+
+  /**
+   * \brief Export the "provider" part of the ANR SAP interface.
+   * \return the reference to the "provider" part of the interface, typically to
+   *         be kept by an LteEnbRrc instance
+   */
+  virtual LteAnrSapProvider* GetLteAnrSapProvider ();
+
+  // let the forwarder class access the protected and private members
+  friend class MemberLteAnrSapProvider<LteAnr>;
+
+protected:
+  // inherited from Object
+  virtual void DoInitialize ();
+  virtual void DoDispose ();
+
+private:
+
+  // ANR SAP PROVIDER IMPLEMENTATION
+
+  /**
+   * \brief Implementation of LteAnrSapProvider::ReportUeMeas.
+   * \param measResults a single report of one measurement identity
+   */
+  void DoReportUeMeas (LteRrcSap::MeasResults measResults);
+
+  /**
+   * \brief Implementation of LteAnrSapProvider::AddNeighbourRelation.
+   * \param cellId the Physical Cell ID of the new neighbouring cell
+   */
+  void DoAddNeighbourRelation (uint16_t cellId);
+
+  /**
+   * \brief Implementation of LteAnrSapProvider::GetNoRemove.
+   * \param cellId the Physical Cell ID of the neighbouring cell of interest
+   * \return if true, the Neighbour Relation shall *not* be removed from the NRT
+   */
+  bool DoGetNoRemove (uint16_t cellId) const;
+
+  /**
+   * \brief Implementation of LteAnrSapProvider::GetNoHo.
+   * \param cellId the Physical Cell ID of the neighbouring cell of interest
+   * \return if true, the Neighbour Relation shall *not* be used by the eNodeB
+   *         for handover reasons
+   */
+  bool DoGetNoHo (uint16_t cellId) const;
+
+  /**
+   * \brief Implementation of LteAnrSapProvider::GetNoX2.
+   * \param cellId the Physical Cell ID of the neighbouring cell of interest
+   * \return if true, the Neighbour Relation shall *not* use an X2 interface in
+   *         order to initiate procedures towards the eNodeB parenting the
+   *         target cell
+   */
+  bool DoGetNoX2 (uint16_t cellId) const;
+
+  // ANR SAP
+
+  /**
+   * \brief Reference to the "provider" part of the ANR SAP interface, which is
+   *        automatically created when this class instantiates.
+   */
+  LteAnrSapProvider* m_anrSapProvider;
+
+  /**
+   * \brief Reference to the "user" part of the ANR SAP interface, which is
+   *        provided by the eNodeB RRC instance.
+   */
+  LteAnrSapUser* m_anrSapUser;
+
+  // ATTRIBUTE
+
+  /// The attribute Threshold.
+  uint8_t m_threshold;
+
+  /**
+   * \brief Neighbour Relation between two eNodeBs (serving eNodeB and neighbour
+   *        eNodeB).
+   */
+  struct NeighbourRelation_t
+  {
+    bool noRemove;
+    bool noHo;
+    bool noX2;
+    bool detectedAsNeighbour;
+  };
+
+  //               cellId
+  typedef std::map<uint16_t, NeighbourRelation_t> NeighbourRelationTable_t;
+
+  NeighbourRelationTable_t m_neighbourRelationTable;
+
+  // internal methods
+  const NeighbourRelation_t* Find (uint16_t cellId) const;
+
+  // The expected measurement identity
+  uint8_t m_measId;
+
+  uint16_t m_servingCellId;
+
+}; // end of class LteAnr
+
+
+} // end of namespace ns3
+
+
+#endif /* LTE_ANR_H */
diff -Naur ns-3.18.1/src/lte/model/lte-anr-sap.cc ns-3.19/src/lte/model/lte-anr-sap.cc
--- ns-3.18.1/src/lte/model/lte-anr-sap.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/model/lte-anr-sap.cc	2013-12-20 09:44:51.000000000 -0800
@@ -0,0 +1,38 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Budiarto Herman
+ *
+ * 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: Budiarto Herman <budiarto.herman@magister.fi>
+ *
+ */
+
+#include "lte-anr-sap.h"
+
+
+namespace ns3 {
+
+
+LteAnrSapProvider::~LteAnrSapProvider ()
+{
+}
+
+
+LteAnrSapUser::~LteAnrSapUser ()
+{
+}
+
+
+} // end of namespace ns3
diff -Naur ns-3.18.1/src/lte/model/lte-anr-sap.h ns-3.19/src/lte/model/lte-anr-sap.h
--- ns-3.18.1/src/lte/model/lte-anr-sap.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/model/lte-anr-sap.h	2013-12-20 09:44:51.000000000 -0800
@@ -0,0 +1,233 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Budiarto Herman
+ *
+ * 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: Budiarto Herman <budiarto.herman@magister.fi>
+ *
+ */
+
+#ifndef LTE_ANR_SAP_H
+#define LTE_ANR_SAP_H
+
+#include <ns3/lte-rrc-sap.h>
+
+namespace ns3 {
+
+
+/**
+ * \brief Service Access Point (SAP) offered by the ANR instance to the eNodeB
+ *        RRC instance.
+ *
+ * This is the *ANR SAP Provider*, i.e., the part of the SAP that contains the
+ * ANR (Automatic Neighbour Relation) methods called by the eNodeB RRC instance.
+ */
+class LteAnrSapProvider
+{
+public:
+  virtual ~LteAnrSapProvider ();
+
+  /**
+   * \brief Send a UE measurement report to the ANC instance.
+   * \param measResults a single report of one measurement identity
+   *
+   * The received measurement report is a result of the UE measurement
+   * configuration previously configured by calling
+   * LteAnrSapUser::AddUeMeasReportConfigForAnr. The report may be stored and
+   * utilized for the purpose of maintaining Neighbour Relation Table (NRT).
+   */
+  virtual void ReportUeMeas (LteRrcSap::MeasResults measResults) = 0;
+
+  /**
+   * \brief Add a new Neighbour Relation entry.
+   * \param cellId the Physical Cell ID of the new neighbouring cell
+   */
+  virtual void AddNeighbourRelation (uint16_t cellId) = 0;
+
+  /**
+   * \brief Get the value of *No Remove* field of a neighbouring cell from the
+   *        Neighbour Relation Table (NRT).
+   * \param cellId the Physical Cell ID of the neighbouring cell of interest
+   * \return if true, the Neighbour Relation shall *not* be removed from the NRT
+   */
+  virtual bool GetNoRemove (uint16_t cellId) const = 0;
+
+  /**
+   * \brief Get the value of *No HO* field of a neighbouring cell from the
+   *        Neighbour Relation Table (NRT).
+   * \param cellId the Physical Cell ID of the neighbouring cell of interest
+   * \return if true, the Neighbour Relation shall *not* be used by the eNodeB
+   *         for handover reasons
+   */
+  virtual bool GetNoHo (uint16_t cellId) const = 0;
+
+  /**
+   * \brief Get the value of *No X2* field of a neighbouring cell from the
+   *        Neighbour Relation Table (NRT).
+   * \param cellId the Physical Cell ID of the neighbouring cell of interest
+   * \return if true, the Neighbour Relation shall *not* use an X2 interface in
+   *         order to initiate procedures towards the eNodeB parenting the
+   *         target cell
+   */
+  virtual bool GetNoX2 (uint16_t cellId) const = 0;
+
+}; // end of class LteAnrSapProvider
+
+
+
+/**
+ * \brief Service Access Point (SAP) offered by the eNodeB RRC instance to the
+ *        ANR instance.
+ *
+ * This is the *ANR SAP User*, i.e., the part of the SAP that contains the
+ * eNodeB RRC methods called by the ANR (Automatic Neighbour Relation) instance.
+ */
+class LteAnrSapUser
+{
+public:
+  virtual ~LteAnrSapUser ();
+
+  /**
+   * \brief Request a certain reporting configuration to be fulfilled by the UEs
+   *        attached to the eNodeB entity.
+   * \param reportConfig the UE measurement reporting configuration
+   * \return the measurement identity associated with this newly added
+   *         reporting configuration
+   *
+   * The eNodeB RRC entity is expected to configure the same reporting
+   * configuration in each of the attached UEs. When later in the simulation a
+   * UE measurement report is received from a UE as a result of this
+   * configuration, the eNodeB RRC entity shall forward this report to the ANC
+   * instance through the LteAnrSapProvider::ReportUeMeas SAP function.
+   *
+   * \note This function is only valid before the simulation begins.
+   */
+  virtual uint8_t AddUeMeasReportConfigForAnr (LteRrcSap::ReportConfigEutra reportConfig) = 0;
+
+}; // end of class LteAnrSapUser
+
+
+
+/**
+ * \brief Template for the implementation of the LteAnrSapProvider as a member
+ *        of an owner class of type C to which all methods are forwarded.
+ */
+template <class C>
+class MemberLteAnrSapProvider : public LteAnrSapProvider
+{
+public:
+  MemberLteAnrSapProvider (C* owner);
+
+  // inherited from LteAnrSapProvider
+  virtual void ReportUeMeas (LteRrcSap::MeasResults measResults);
+  virtual void AddNeighbourRelation (uint16_t cellId);
+  virtual bool GetNoRemove (uint16_t cellId) const;
+  virtual bool GetNoHo (uint16_t cellId) const;
+  virtual bool GetNoX2 (uint16_t cellId) const;
+
+private:
+  MemberLteAnrSapProvider ();
+  C* m_owner;
+
+}; // end of class MemberLteAnrSapProvider
+
+
+template <class C>
+MemberLteAnrSapProvider<C>::MemberLteAnrSapProvider (C* owner)
+  : m_owner (owner)
+{
+}
+
+
+template <class C>
+void
+MemberLteAnrSapProvider<C>::ReportUeMeas (LteRrcSap::MeasResults measResults)
+{
+  m_owner->DoReportUeMeas (measResults);
+}
+
+
+template <class C>
+void
+MemberLteAnrSapProvider<C>::AddNeighbourRelation (uint16_t cellId)
+{
+  m_owner->DoAddNeighbourRelation (cellId);
+}
+
+
+template <class C>
+bool
+MemberLteAnrSapProvider<C>::GetNoRemove (uint16_t cellId) const
+{
+  return m_owner->DoGetNoRemove (cellId);
+}
+
+
+template <class C>
+bool
+MemberLteAnrSapProvider<C>::GetNoHo (uint16_t cellId) const
+{
+  return m_owner->DoGetNoHo (cellId);
+}
+
+
+template <class C>
+bool
+MemberLteAnrSapProvider<C>::GetNoX2 (uint16_t cellId) const
+{
+  return m_owner->DoGetNoX2 (cellId);
+}
+
+
+
+/**
+ * \brief Template for the implementation of the LteAnrSapUser as a member of an
+ *        owner class of type C to which all methods are forwarded.
+ */
+template <class C>
+class MemberLteAnrSapUser : public LteAnrSapUser
+{
+public:
+  MemberLteAnrSapUser (C* owner);
+
+  // inherited from LteAnrSapUser
+  virtual uint8_t AddUeMeasReportConfigForAnr (LteRrcSap::ReportConfigEutra reportConfig);
+
+private:
+  MemberLteAnrSapUser ();
+  C* m_owner;
+
+}; // end of class MemberLteAnrSapUser
+
+
+template <class C>
+MemberLteAnrSapUser<C>::MemberLteAnrSapUser (C* owner)
+  : m_owner (owner)
+{
+}
+
+
+template <class C>
+uint8_t
+MemberLteAnrSapUser<C>::AddUeMeasReportConfigForAnr (LteRrcSap::ReportConfigEutra reportConfig)
+{
+  return m_owner->DoAddUeMeasReportConfigForAnr (reportConfig);
+}
+
+
+} // end of namespace ns3
+
+
+#endif /* LTE_ANR_SAP_H */
diff -Naur ns-3.18.1/src/lte/model/lte-asn1-header.cc ns-3.19/src/lte/model/lte-asn1-header.cc
--- ns-3.18.1/src/lte/model/lte-asn1-header.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/lte-asn1-header.cc	2013-12-20 09:44:51.000000000 -0800
@@ -29,7 +29,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Asn1Header);
+NS_OBJECT_ENSURE_REGISTERED (Asn1Header)
+  ;
 
 TypeId
 Asn1Header::GetTypeId (void)
diff -Naur ns-3.18.1/src/lte/model/lte-as-sap.h ns-3.19/src/lte/model/lte-as-sap.h
--- ns-3.18.1/src/lte/model/lte-as-sap.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/lte/model/lte-as-sap.h	2013-12-20 09:44:51.000000000 -0800
@@ -33,7 +33,7 @@
 /**
  * This class implements the Access Stratum (AS) Service Access Point
  * (SAP), i.e., the interface between the EpcUeNas and the LteUeRrc.
- * In particular, this class implements the  
+ * In particular, this class implements the
  * Provider part of the SAP, i.e., the methods exported by the
  * LteUeRrc and called by the EpcUeNas.
  * 
@@ -43,24 +43,42 @@
 public:
   virtual ~LteAsSapProvider ();
 
-  /** 
-   * Force the RRC to stay camped on a certain eNB
-   * 
-   * \param enbDevice the eNB device (wild hack, might go away in
-   * future versions)
-   * \param cellId the Cell ID identifying the eNB
-   */
-  virtual void ForceCampedOnEnb (uint16_t cellId, uint16_t earfcn) = 0;
-  
-  /** 
-   * Tell the RRC to go into Connected Mode
-   * 
+  /**
+   * \brief Set the selected Closed Subscriber Group subscription list to be
+   *        used for cell selection.
+   *
+   * \param csgId identity of the subscribed CSG
+   */
+  virtual void SetCsgWhiteList (uint32_t csgId) = 0;
+
+  /**
+   * \brief Initiate Idle mode cell selection procedure.
+   *
+   * \param dlEarfcn the downlink carrier frequency (EARFCN)
+   */
+  virtual void StartCellSelection (uint16_t dlEarfcn) = 0;
+
+  /** 
+   * \brief Force the RRC entity to stay camped on a certain eNodeB.
+   *
+   * \param cellId the cell ID identifying the eNodeB
+   * \param dlEarfcn the downlink carrier frequency (EARFCN)
+   */
+  virtual void ForceCampedOnEnb (uint16_t cellId, uint16_t dlEarfcn) = 0;
+
+  /**
+   * \brief Tell the RRC entity to enter Connected mode.
+   *
+   * If this function is called when the UE is in a situation where connecting
+   * is not possible (e.g. before the simulation begin), then the UE will
+   * attempt to connect at the earliest possible time (e.g. after it camps to a
+   * suitable cell).
    */
   virtual void Connect (void) = 0;
 
   /** 
-   * Send a data packet
-   * 
+   * \brief Send a data packet.
+   *
    * \param packet the packet
    * \param bid the EPS bearer ID
    */
@@ -68,13 +86,13 @@
 
 
   /** 
-   * Tell the RRC to release the connection
-   * 
+   * \brief Tell the RRC entity to release the connection.
+   *
    */
   virtual void Disconnect () = 0;
 
 };
-  
+
 
 /**
  * This class implements the Access Stratum (AS) Service Access Point
@@ -88,15 +106,15 @@
 {
 public:
   virtual ~LteAsSapUser ();
-  
+
   /** 
-   * Notify the NAS that RRC Connection Establishment was successful
+   * \brief Notify the NAS that RRC Connection Establishment was successful.
    * 
    */
   virtual void NotifyConnectionSuccessful () = 0;
 
   /** 
-   * Notify the NAS that RRC Connection Establishment failed
+   * \brief Notify the NAS that RRC Connection Establishment failed.
    * 
    */
   virtual void NotifyConnectionFailed () = 0;
@@ -114,9 +132,9 @@
    * \param packet the packet
    */
   virtual void RecvData (Ptr<Packet> packet) = 0;
-  
+
 };
-  
+
 
 
 
@@ -132,8 +150,10 @@
   MemberLteAsSapProvider (C* owner);
 
   // inherited from LteAsSapProvider
+  virtual void SetCsgWhiteList (uint32_t csgId);
+  virtual void StartCellSelection (uint16_t dlEarfcn);
+  virtual void ForceCampedOnEnb (uint16_t cellId, uint16_t dlEarfcn);
   virtual void Connect (void);
-  virtual void ForceCampedOnEnb (uint16_t cellId, uint16_t earfcn);
   virtual void SendData (Ptr<Packet> packet, uint8_t bid);
   virtual void Disconnect ();
 
@@ -154,12 +174,25 @@
 }
 
 template <class C>
-void 
-MemberLteAsSapProvider<C>::ForceCampedOnEnb (uint16_t cellId, uint16_t earfcn)
+void
+MemberLteAsSapProvider<C>::SetCsgWhiteList (uint32_t csgId)
 {
-  m_owner->DoForceCampedOnEnb (cellId, earfcn);
+  m_owner->DoSetCsgWhiteList (csgId);
 }
 
+template <class C>
+void
+MemberLteAsSapProvider<C>::StartCellSelection (uint16_t dlEarfcn)
+{
+  m_owner->DoStartCellSelection (dlEarfcn);
+}
+
+template <class C>
+void
+MemberLteAsSapProvider<C>::ForceCampedOnEnb (uint16_t cellId, uint16_t dlEarfcn)
+{
+  m_owner->DoForceCampedOnEnb (cellId, dlEarfcn);
+}
 
 template <class C>
 void 
diff -Naur ns-3.18.1/src/lte/model/lte-common.cc ns-3.19/src/lte/model/lte-common.cc
--- ns-3.18.1/src/lte/model/lte-common.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-common.cc	2013-12-20 09:44:51.000000000 -0800
@@ -128,14 +128,14 @@
 
 
 uint32_t BufferSizeLevelBsrTable[64] = {
-  
+
   0, 10, 12, 14, 17, 19, 22, 26, 31, 36, 42, 49, 57, 67, 78, 91, 
   107, 125, 146, 171, 200, 234, 274, 321, 376, 440, 515, 603, 
   706, 826, 967, 1132, 1326, 1552, 1817, 2127, 2490, 2915, 3413,
   3995, 4677, 5476, 6411, 7505, 8787, 10287, 12043, 14099, 16507,
   19325, 22624, 26487, 31009, 36304, 42502, 49759, 58255,
   68201, 79846, 93749, 109439, 128125, 150000, 150000
-  
+
 };
 
 uint32_t
@@ -161,7 +161,7 @@
           index++;
         }
     }
-    
+
   return (index);
 }
 
@@ -210,7 +210,7 @@
 EutranMeasurementMapping::Dbm2RsrpRange (double dbm)
 {
   // 3GPP TS 36.133 section 9.1.4 RSRP Measurement Report Mapping
-  double range = std::min( std::max (std::floor(dbm + 141), 0.0), 97.0);
+  double range = std::min (std::max (std::floor (dbm + 141), 0.0), 97.0);
   return (uint8_t) range;
 }
 
@@ -242,5 +242,100 @@
   return RsrqRange2Db (Db2RsrqRange (v));
 }
 
+double
+EutranMeasurementMapping::IeValue2ActualHysteresis (uint8_t hysteresisIeValue)
+{
+  if (hysteresisIeValue > 30)
+    {
+      NS_FATAL_ERROR ("The value " << (uint16_t) hysteresisIeValue
+                                   << " is out of the allowed range (0..30)"
+                                   << " for Hysteresis IE value");
+    }
+
+  double actual = static_cast<double> (hysteresisIeValue) * 0.5;
+  NS_ASSERT (actual >= 0.0);
+  NS_ASSERT (actual <= 15.0);
+  return actual;
+}
+
+uint8_t
+EutranMeasurementMapping::ActualHysteresis2IeValue (double hysteresisDb)
+{
+  if ((hysteresisDb < 0.0) || (hysteresisDb > 15.0))
+    {
+      NS_FATAL_ERROR ("The value " << hysteresisDb
+                                   << " is out of the allowed range (0..15) dB"
+                                   << " for hysteresis");
+    }
+
+  uint8_t ieValue = lround (hysteresisDb * 2.0);
+  NS_ASSERT (ieValue <= 30);
+  return ieValue;
+}
+
+double
+EutranMeasurementMapping::IeValue2ActualA3Offset (int8_t a3OffsetIeValue)
+{
+  if ((a3OffsetIeValue < -30) || (a3OffsetIeValue > 30))
+    {
+      NS_FATAL_ERROR ("The value " << (int16_t) a3OffsetIeValue
+                                   << " is out of the allowed range (-30..30)"
+                                   << " for a3-Offset IE value");
+    }
+
+  double actual = static_cast<double> (a3OffsetIeValue) * 0.5;
+  NS_ASSERT (actual >= -15.0);
+  NS_ASSERT (actual <= 15.0);
+  return actual;
+}
+
+int8_t
+EutranMeasurementMapping::ActualA3Offset2IeValue (double a3OffsetDb)
+{
+  if ((a3OffsetDb < -15.0) || (a3OffsetDb > 15.0))
+    {
+      NS_FATAL_ERROR ("The value " << a3OffsetDb
+                                   << " is out of the allowed range (-15..15) dB"
+                                   << " for A3 Offset");
+    }
+
+  int8_t ieValue = lround (a3OffsetDb * 2.0);
+  NS_ASSERT (ieValue >= -30);
+  NS_ASSERT (ieValue <= 30);
+  return ieValue;
+}
+
+double
+EutranMeasurementMapping::IeValue2ActualQRxLevMin (int8_t qRxLevMinIeValue)
+{
+  if ((qRxLevMinIeValue < -70) || (qRxLevMinIeValue > -22))
+    {
+      NS_FATAL_ERROR ("The value " << (int16_t) qRxLevMinIeValue
+                                   << " is out of the allowed range (-70..-22)"
+                                   << " for Q-RxLevMin IE value");
+    }
+
+  double actual = static_cast<double> (qRxLevMinIeValue) * 2;
+  NS_ASSERT (actual >= -140.0);
+  NS_ASSERT (actual <= -44.0);
+  return actual;
+}
+
+double
+EutranMeasurementMapping::IeValue2ActualQQualMin (int8_t qQualMinIeValue)
+{
+  if ((qQualMinIeValue < -34) || (qQualMinIeValue > -3))
+    {
+      NS_FATAL_ERROR ("The value " << (int16_t) qQualMinIeValue
+                                   << " is out of the allowed range (-34..-3)"
+                                   << " for Q-QualMin IE value");
+    }
+
+  double actual = static_cast<double> (qQualMinIeValue);
+  NS_ASSERT (actual >= -34.0);
+  NS_ASSERT (actual <= -3.0);
+  return actual;
+}
+
 }; // namespace ns3
 
diff -Naur ns-3.18.1/src/lte/model/lte-common.h ns-3.19/src/lte/model/lte-common.h
--- ns-3.18.1/src/lte/model/lte-common.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-common.h	2013-12-20 09:44:51.000000000 -0800
@@ -76,12 +76,12 @@
   * Srs Configuration index for UE specific SRS, see section 8.2 of TS 36.213
   */
   uint16_t  m_srsConfigurationIndex;
-  
-  public:
-    LteUeConfig_t ();
-    
-    friend bool operator == (const LteUeConfig_t &a, const LteUeConfig_t &b);
-    friend bool operator < (const LteUeConfig_t &a, const LteUeConfig_t &b);
+
+public:
+  LteUeConfig_t ();
+
+  friend bool operator == (const LteUeConfig_t &a, const LteUeConfig_t &b);
+  friend bool operator < (const LteUeConfig_t &a, const LteUeConfig_t &b);
 };
 
 
@@ -95,24 +95,22 @@
 
   //static const double MIN_FP_S11DOT3_VALUE = -4096;
 
-
 };
 
 class BufferSizeLevelBsr
 {
-  
-  public:
-    static uint32_t BsrId2BufferSize (uint8_t val);
-    static uint8_t BufferSize2BsrId (uint32_t val);
-    
-    static int  m_bufferSizeLevelBsr[64];
-    
-    
+
+public:
+  static uint32_t BsrId2BufferSize (uint8_t val);
+  static uint8_t BufferSize2BsrId (uint32_t val);
+
+  static int  m_bufferSizeLevelBsr[64];
+
 };
 
 class TransmissionModesLayers
 {
-  public:
+public:
   static uint8_t TxMode2LayerNum (uint8_t txMode);
 };
 
@@ -120,31 +118,31 @@
 struct PhyTransmissionStatParameters
 {
   int64_t  m_timestamp; // in millisecond
-  uint16_t m_cellId;
-  uint64_t m_imsi;
-  uint16_t m_rnti;
-  uint8_t  m_txMode;
-  uint8_t  m_layer;
-  uint8_t  m_mcs;
-  uint16_t m_size;
-  uint8_t  m_rv;
-  uint8_t  m_ndi;
+  uint16_t m_cellId;  ///< Cell ID of the attached Enb
+  uint64_t m_imsi;    ///< IMSI of the scheduled UE
+  uint16_t m_rnti;    ///< C-RNTI scheduled
+  uint8_t  m_txMode;  ///< the transmission Mode
+  uint8_t  m_layer;   ///< the layer (cw) of the transmission
+  uint8_t  m_mcs;     ///< MCS for transport block
+  uint16_t m_size;    ///< Size of transport block
+  uint8_t  m_rv;      ///< the redundancy version (HARQ)
+  uint8_t  m_ndi;     ///< new data indicator flag
 };
 
 
 struct PhyReceptionStatParameters
 {
   int64_t  m_timestamp; // in millisecond
-  uint16_t m_cellId;
-  uint64_t m_imsi;
-  uint16_t m_rnti;
-  uint8_t  m_txMode;
-  uint8_t  m_layer;
-  uint8_t  m_mcs;
-  uint16_t m_size;
-  uint8_t  m_rv;
-  uint8_t  m_ndi;
-  uint8_t  m_correctness;
+  uint16_t m_cellId;       ///< Cell ID of the attached Enb
+  uint64_t m_imsi;         ///< IMSI of the scheduled UE
+  uint16_t m_rnti;         ///< C-RNTI scheduled
+  uint8_t  m_txMode;       ///< the transmission Mode
+  uint8_t  m_layer;        ///< the layer (cw) of the transmission
+  uint8_t  m_mcs;          ///< MCS for transport block
+  uint16_t m_size;         ///< Size of transport block
+  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
 };
 
 
@@ -158,7 +156,7 @@
 public:
   /** 
    * converts an RSRP range to dBm as per 
-   * 3GPP TS 36.133 section 9.1.4 RSRP Measurement Report Mapping  
+   * 3GPP TS 36.133 section 9.1.4 RSRP Measurement Report Mapping
    *
    * \param range the RSRP range value
    * 
@@ -168,7 +166,7 @@
 
   /** 
    * convert an RSRP value in dBm to the corresponding range as per 
-   * 3GPP TS 36.133 section 9.1.4 RSRP Measurement Report Mapping 
+   * 3GPP TS 36.133 section 9.1.4 RSRP Measurement Report Mapping
    * 
    * \param dbm the RSRP value in dBm
    * 
@@ -194,7 +192,7 @@
    * 
    * \return the corresponding range
    */
-  static uint8_t Db2RsrqRange (double db);  
+  static uint8_t Db2RsrqRange (double db);
 
   /** 
    * Quantize an RSRP value according to the measurement mapping of TS 36.133
@@ -212,9 +210,81 @@
    * 
    * \return the quantized RSRQ value in dB
    */
-  static double QuantizeRsrq(double v);
+  static double QuantizeRsrq (double v);
 
-};
+  /**
+   * \brief Returns the actual value of a hysteresis parameter.
+   * \param hysteresisIeValue IE value of hysteresis
+   * \return actual value in dB, which is IE value * 0.5 dB
+   *
+   * As per section 6.3.5 of 3GPP TS 36.331.
+   *
+   * The allowed values for hysteresis IE value are between 0 and 30.
+   *
+   * \sa LteRrcSap::ReportConfigEutra
+   */
+  static double IeValue2ActualHysteresis (uint8_t hysteresisIeValue);
+
+  /**
+   * \brief Returns the IE value of hysteresis.
+   * \param hysteresisDb actual hysteresis value in dB
+   * \return IE value of hysteresis in dB, which is actual value * 2, rounded
+   *         to the nearest integer
+   *
+   * The allowed values for hysteresis are between 0 and 15 dB.
+   *
+   * \sa LteRrcSap::ReportConfigEutra
+   */
+  static uint8_t ActualHysteresis2IeValue (double hysteresisDb);
+
+  /**
+   * \brief Returns the actual value of an a3-Offset parameter.
+   * \param a3OffsetIeValue IE value of a3-Offset
+   * \return actual value in dB, which is IE value * 0.5 dB
+   *
+   * As per section 6.3.5 of 3GPP TS 36.331.
+   *
+   * The allowed values for a3-Offset IE value are between -30 and 30.
+   *
+   * \sa LteRrcSap::ReportConfigEutra
+   */
+  static double IeValue2ActualA3Offset (int8_t a3OffsetIeValue);
+
+  /**
+   * \brief Returns the IE value of a3-Offset.
+   * \param a3OffsetDb actual A3 Offset value in dB
+   * \return IE value of a3-Offset in dB, which is actual value * 2, rounded
+   *         to the nearest integer
+   *
+   * The allowed values for A3 Offset are between -15 and 15 dB.
+   *
+   * \sa LteRrcSap::ReportConfigEutra
+   */
+  static int8_t ActualA3Offset2IeValue (double a3OffsetDb);
+
+  /**
+   * \brief Returns the actual value of an Q-RxLevMin parameter.
+   * \param qRxLevMinIeValue IE value of Q-RxLevMin
+   * \return Q-RxLevMin actual value in dBm, which is IE value * 2 dBm
+   *
+   * As per section 6.3.4 of 3GPP TS 36.331.
+   *
+   * \sa LteRrcSap::CellSelectionInfo
+   */
+  static double IeValue2ActualQRxLevMin (int8_t qRxLevMinIeValue);
+
+  /**
+   * \brief Returns the actual value of an Q-QualMin parameter.
+   * \param qQualMinIeValue IE value of Q-QualMin
+   * \return Q-QualMin actual value in dB, which is IE value dB
+   *
+   * As per section 6.3.4 of 3GPP TS 36.331.
+   *
+   * \sa LteRrcSap::CellSelectionInfo
+   */
+  static double IeValue2ActualQQualMin (int8_t qQualMinIeValue);
+
+}; // end of class EutranMeasurementMapping
 
 }; // namespace ns3
 
diff -Naur ns-3.18.1/src/lte/model/lte-control-messages.cc ns-3.19/src/lte/model/lte-control-messages.cc
--- ns-3.18.1/src/lte/model/lte-control-messages.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-control-messages.cc	2013-12-20 09:44:51.000000000 -0800
@@ -258,11 +258,33 @@
 }
 
 
+// ----------------------------------------------------------------------------------------------------------
+
+
+
+Sib1LteControlMessage::Sib1LteControlMessage (void)
+{
+  SetMessageType (LteControlMessage::SIB1);
+}
+
+
+void
+Sib1LteControlMessage::SetSib1 (LteRrcSap::SystemInformationBlockType1 sib1)
+{
+  m_sib1 = sib1;
+}
+
+LteRrcSap::SystemInformationBlockType1
+Sib1LteControlMessage::GetSib1 () const
+{
+  return m_sib1;
+}
 
 
 // ---------------------------------------------------------------------------
 
 
+
 DlHarqFeedbackLteControlMessage::DlHarqFeedbackLteControlMessage (void)
 {
   SetMessageType (LteControlMessage::DL_HARQ);
diff -Naur ns-3.18.1/src/lte/model/lte-control-messages.h ns-3.19/src/lte/model/lte-control-messages.h
--- ns-3.18.1/src/lte/model/lte-control-messages.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-control-messages.h	2013-12-20 09:44:51.000000000 -0800
@@ -22,8 +22,10 @@
 #ifndef LTE_CONTROL_MESSAGES_H
 #define LTE_CONTROL_MESSAGES_H
 
-#include "ns3/ptr.h"
-#include "ns3/simple-ref-count.h"
+#include <ns3/ptr.h>
+#include <ns3/simple-ref-count.h>
+#include <ns3/ff-mac-common.h>
+#include <ns3/lte-rrc-sap.h>
 #include <list>
 
 namespace ns3 {
@@ -58,6 +60,7 @@
     RACH_PREAMBLE, // Random Access Preamble
     RAR, // Random Access Response
     MIB, // Master Information Block
+    SIB1, // System Information Block Type 1
   };
 
   LteControlMessage (void);
@@ -77,24 +80,10 @@
 private:
   MessageType m_type;
 };
-} // namespace ns3
-
-#endif /* LTE_CONTROL_MESSAGES_H */
-
-
 
 
 // -----------------------------------------------------------------------
 
-
-#ifndef DL_DCI_LTE_CONTROL_MESSAGES_H
-#define DL_DCI_LTE_CONTROL_MESSAGES_H
-
-#include <ns3/object.h>
-#include <ns3/ff-mac-common.h>
-
-namespace ns3 {
-
 /**
  * \ingroup lte
  * The Downlink Data Control Indicator messages defines the RB allocation for the
@@ -118,26 +107,13 @@
   */
   DlDciListElement_s GetDci (void);
 
-
 private:
   DlDciListElement_s m_dci;
 };
-} // namespace ns3
-
-#endif /* DL_DCI_LTE_CONTROL_MESSAGES_H */
 
 
 // ---------------------------------------------------------------------------
 
-
-#ifndef UL_DCI_LTE_CONTROL_MESSAGES_H
-#define UL_DCI_LTE_CONTROL_MESSAGES_H
-
-#include <ns3/object.h>
-#include <ns3/ff-mac-common.h>
-
-namespace ns3 {
-
 /**
  * \ingroup lte
  * The Uplink Data Control Indicator messages defines the RB allocation for the
@@ -161,30 +137,13 @@
   */
   UlDciListElement_s GetDci (void);
 
-
 private:
   UlDciListElement_s m_dci;
 };
-} // namespace ns3
-
-#endif /* UL_DCI_LTE_CONTROL_MESSAGES_H */
-
 
 
 // ---------------------------------------------------------------------------
 
-
-
-#ifndef DLCQI_LTE_CONTROL_MESSAGES_H
-#define DLCQI_LTE_CONTROL_MESSAGES_H
-
-#include <ns3/object.h>
-#include <ns3/ff-mac-common.h>
-
-namespace ns3 {
-
-class LteNetDevice;
-
 /**
  * \ingroup lte
  * The downlink CqiLteControlMessage defines an ideal list of
@@ -208,27 +167,13 @@
   */
   CqiListElement_s GetDlCqi (void);
 
-
 private:
   CqiListElement_s m_dlCqi;
 };
-} // namespace ns3
-
-#endif /* DLCQI_LTE_CONTROL_MESSAGES_H */
 
 
 // ---------------------------------------------------------------------------
 
-#ifndef BSR_LTE_CONTROL_MESSAGES_H
-#define BSR_LTE_CONTROL_MESSAGES_H
-
-#include <ns3/object.h>
-#include <ns3/ff-mac-common.h>
-
-namespace ns3 {
-
-class LteNetDevice;
-
 /**
  * \ingroup lte
  * The uplink BsrLteControlMessage defines the specific
@@ -244,7 +189,7 @@
   * \brief add a BSR feedback record into the message.
   * \param bsr the BSR feedback
   */
-  void SetBsr (MacCeListElement_s ulcqi);
+  void SetBsr (MacCeListElement_s bsr);
 
   /**
   * \brief Get BSR informations
@@ -252,28 +197,14 @@
   */
   MacCeListElement_s GetBsr (void);
 
-
 private:
   MacCeListElement_s m_bsr;
 
-
 };
 
-} // namespace ns3
-
-#endif /* BSR_LTE_CONTROL_MESSAGES_H */
-
 
 // ---------------------------------------------------------------------------
 
-#ifndef DL_HARQ_LTE_CONTROL_MESSAGES_H
-#define DL_HARQ_LTE_CONTROL_MESSAGES_H
-
-#include <ns3/object.h>
-#include <ns3/ff-mac-common.h>
-
-namespace ns3 {
-
 /**
  * \ingroup lte
  * The downlink DlHarqFeedbackLteControlMessage defines the specific
@@ -287,7 +218,7 @@
 
   /**
   * \brief add a DL HARQ feedback record into the message.
-  * \param DlInfoListElement_s the dl HARQ feedback
+  * \param m the DL HARQ feedback
   */
   void SetDlHarqFeedback (DlInfoListElement_s m);
 
@@ -297,26 +228,13 @@
   */
   DlInfoListElement_s GetDlHarqFeedback (void);
 
-
 private:
   DlInfoListElement_s m_dlInfoListElement;
 
-
 };
-} // namespace ns3
-
-#endif /* DL_HARQ_LTE_CONTROL_MESSAGES_H */
-
-
-#ifndef RACH_PREAMBLE_LTE_CONTROL_MESSAGES_H
-#define RACH_PREAMBLE_LTE_CONTROL_MESSAGES_H
-
-#include <ns3/object.h>
-#include <ns3/ff-mac-common.h>
 
-namespace ns3 {
 
-class LteNetDevice;
+// ---------------------------------------------------------------------------
 
 /**
  * \ingroup lte
@@ -327,12 +245,11 @@
 {
 public:
   RachPreambleLteControlMessage (void);
-
   
   /** 
    * Set the Random Access Preamble Identifier (RAPID), see 3GPP TS 36.321 6.2.2
    *
-   * \param rapid
+   * \param rapid the RAPID
    */
   void SetRapId (uint32_t rapid);
   
@@ -343,26 +260,12 @@
   uint32_t GetRapId () const;
 
 private:
-  
   uint32_t m_rapId;
 
-
 };
 
-} // namespace ns3
-
-#endif  // RACH_PREAMBLE_LTE_CONTROL_MESSAGES_H
 
-
-#ifndef RAR_LTE_CONTROL_MESSAGES_H
-#define RAR_LTE_CONTROL_MESSAGES_H
-
-#include <ns3/object.h>
-#include <ns3/ff-mac-common.h>
-
-namespace ns3 {
-
-class LteNetDevice;
+// ---------------------------------------------------------------------------
 
 /**
  * \ingroup lte
@@ -414,54 +317,92 @@
    * \return a const iterator to the end of the RAR list
    */
   std::list<Rar>::const_iterator RarListEnd () const;
-  
-  
+
 private:
-  
   std::list<Rar> m_rarList;
   uint16_t m_raRnti;
 
 };
 
-} // namespace ns3
 
-#endif  // RAR_LTE_CONTROL_MESSAGES_H
+// ---------------------------------------------------------------------------
 
+/**
+ * \ingroup lte
+ * \brief Abstract model for broadcasting the Master Information Block (MIB)
+ *        within the control channel (BCCH).
+ *
+ * MIB is transmitted by eNodeB RRC and received by UE RRC at every radio frame,
+ * i.e., every 10 milliseconds.
+ *
+ * \sa LteEnbRrc::ConfigureCell, LteEnbPhy::StartFrame,
+ *     LteUeRrc::DoRecvMasterInformationBlock
+ */
+class MibLteControlMessage : public LteControlMessage
+{
+public:
+  /**
+   * \brief Create a new instance of MIB control message.
+   */
+  MibLteControlMessage (void);
 
+  /**
+   * \brief Replace the MIB content of this control message.
+   * \param mib the desired MIB content
+   */
+  void SetMib (LteRrcSap::MasterInformationBlock mib);
 
+  /**
+   * \brief Retrieve the MIB content from this control message.
+   * \return the current MIB content that this control message holds
+   */
+  LteRrcSap::MasterInformationBlock GetMib () const;
 
-#ifndef MIB_LTE_CONTROL_MESSAGES_H
-#define MIB_LTE_CONTROL_MESSAGES_H
+private:
+  LteRrcSap::MasterInformationBlock m_mib;
 
-#include <ns3/object.h>
-#include <ns3/ff-mac-common.h>
-#include <ns3/lte-rrc-sap.h>
+}; // end of class MibLteControlMessage
 
-namespace ns3 {
 
-class LteNetDevice;
+// ---------------------------------------------------------------------------
 
 /**
  * \ingroup lte
+ * \brief Abstract model for broadcasting the System Information Block Type 1
+ *        (SIB1) within the control channel (BCCH).
+ *
+ * SIB1 is transmitted by eNodeB RRC and received by UE RRC at the 6th subframe
+ * of every odd-numbered radio frame, i.e., every 20 milliseconds.
  *
- * abstract model for broadcasting the Master Information Block
+ * \sa LteEnbRrc::SetSystemInformationBlockType1, LteEnbPhy::StartSubFrame,
+ *     LteUeRrc::DoRecvSystemInformationBlockType1
  */
-class MibLteControlMessage : public LteControlMessage
+class Sib1LteControlMessage : public LteControlMessage
 {
 public:
+  /**
+   * \brief Create a new instance of SIB1 control message.
+   */
+  Sib1LteControlMessage (void);
 
-  MibLteControlMessage (void);
+  /**
+   * \brief Replace the SIB1 content of this control message.
+   * \param sib1 the desired SIB1 content
+   */
+  void SetSib1 (LteRrcSap::SystemInformationBlockType1 sib1);
 
-  void SetMib (LteRrcSap::MasterInformationBlock mib);
+  /**
+   * \brief Retrieve the SIB1 content from this control message.
+   * \return the current SIB1 content that this control message holds
+   */
+  LteRrcSap::SystemInformationBlockType1 GetSib1 () const;
 
-  LteRrcSap::MasterInformationBlock GetMib () const;
-  
 private:
-  
-  LteRrcSap::MasterInformationBlock m_mib;
+  LteRrcSap::SystemInformationBlockType1 m_sib1;
+
+}; // end of class Sib1LteControlMessage
 
-};
 
 } // namespace ns3
 
-#endif  // MIB_LTE_CONTROL_MESSAGES_H
+#endif  // LTE_CONTROL_MESSAGES_H
diff -Naur ns-3.18.1/src/lte/model/lte-enb-cphy-sap.h ns-3.19/src/lte/model/lte-enb-cphy-sap.h
--- ns-3.18.1/src/lte/model/lte-enb-cphy-sap.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-enb-cphy-sap.h	2013-12-20 09:44:51.000000000 -0800
@@ -83,19 +83,25 @@
    * \param rnti the RNTI of the user
    * \param txMode the transmissionMode of the user
    */
-  virtual void SetTransmissionMode (uint16_t  rnti, uint8_t txMode) = 0;
+  virtual void SetTransmissionMode (uint16_t rnti, uint8_t txMode) = 0;
 
   /**
    * \param rnti the RNTI of the user
-   * \param txMode the SRS Configuration Index of the user
+   * \param srsCi the SRS Configuration Index of the user
    */
-  virtual void SetSrsConfigurationIndex (uint16_t  rnti, uint16_t srsCi) = 0;
+  virtual void SetSrsConfigurationIndex (uint16_t rnti, uint16_t srsCi) = 0;
 
   /** 
    * 
    * \param mib the Master Information Block to be sent on the BCH
    */
   virtual void SetMasterInformationBlock (LteRrcSap::MasterInformationBlock mib) = 0;
+
+  /**
+   *
+   * \param sib1 the System Information Block Type 1 to be sent on the BCH
+   */
+  virtual void SetSystemInformationBlockType1 (LteRrcSap::SystemInformationBlockType1 sib1) = 0;
 };
 
 
@@ -137,6 +143,7 @@
   virtual void SetTransmissionMode (uint16_t  rnti, uint8_t txMode);
   virtual void SetSrsConfigurationIndex (uint16_t  rnti, uint16_t srsCi);
   virtual void SetMasterInformationBlock (LteRrcSap::MasterInformationBlock mib);
+  virtual void SetSystemInformationBlockType1 (LteRrcSap::SystemInformationBlockType1 sib1);
   
 private:
   MemberLteEnbCphySapProvider ();
@@ -211,6 +218,13 @@
   m_owner->DoSetMasterInformationBlock (mib);
 }
 
+template <class C>
+void
+MemberLteEnbCphySapProvider<C>::SetSystemInformationBlockType1 (LteRrcSap::SystemInformationBlockType1 sib1)
+{
+  m_owner->DoSetSystemInformationBlockType1 (sib1);
+}
+
 
 
 /**
diff -Naur ns-3.18.1/src/lte/model/lte-enb-mac.cc ns-3.19/src/lte/model/lte-enb-mac.cc
--- ns-3.18.1/src/lte/model/lte-enb-mac.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-enb-mac.cc	2013-12-20 09:44:51.000000000 -0800
@@ -43,7 +43,8 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (LteEnbMac);
+NS_OBJECT_ENSURE_REGISTERED (LteEnbMac)
+  ;
 
 
 
diff -Naur ns-3.18.1/src/lte/model/lte-enb-mac.h ns-3.19/src/lte/model/lte-enb-mac.h
--- ns-3.18.1/src/lte/model/lte-enb-mac.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-enb-mac.h	2013-12-20 09:44:51.000000000 -0800
@@ -133,7 +133,7 @@
 
   /**
   * \brief Receive a CE element containing the buffer status report
-  * \param msg the BSR message
+  * \param bsr the BSR message
   */
   void ReceiveBsrMessage  (MacCeListElement_s bsr);
 
diff -Naur ns-3.18.1/src/lte/model/lte-enb-net-device.cc ns-3.19/src/lte/model/lte-enb-net-device.cc
--- ns-3.18.1/src/lte/model/lte-enb-net-device.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-enb-net-device.cc	2013-12-20 09:44:51.000000000 -0800
@@ -38,6 +38,8 @@
 #include <ns3/lte-ue-net-device.h>
 #include <ns3/lte-enb-phy.h>
 #include <ns3/ff-mac-scheduler.h>
+#include <ns3/lte-handover-algorithm.h>
+#include <ns3/lte-anr.h>
 #include <ns3/ipv4-l3-protocol.h>
 #include <ns3/abort.h>
 #include <ns3/log.h>
@@ -46,7 +48,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED ( LteEnbNetDevice);
+NS_OBJECT_ENSURE_REGISTERED ( LteEnbNetDevice)
+  ;
 
 TypeId LteEnbNetDevice::GetTypeId (void)
 {
@@ -60,6 +63,16 @@
                    PointerValue (),
                    MakePointerAccessor (&LteEnbNetDevice::m_rrc),
                    MakePointerChecker <LteEnbRrc> ())
+    .AddAttribute ("LteHandoverAlgorithm",
+                   "The handover algorithm associated to this EnbNetDevice",
+                   PointerValue (),
+                   MakePointerAccessor (&LteEnbNetDevice::m_handoverAlgorithm),
+                   MakePointerChecker <LteHandoverAlgorithm> ())
+    .AddAttribute ("LteAnr",
+                   "The automatic neighbour relation function associated to this EnbNetDevice",
+                   PointerValue (),
+                   MakePointerAccessor (&LteEnbNetDevice::m_anr),
+                   MakePointerChecker <LteAnr> ())
     .AddAttribute ("LteEnbMac",
                    "The MAC associated to this EnbNetDevice",
                    PointerValue (),
@@ -104,11 +117,28 @@
                    UintegerValue (18100),
                    MakeUintegerAccessor (&LteEnbNetDevice::m_ulEarfcn),
                    MakeUintegerChecker<uint16_t> (18000, 24599))
+    .AddAttribute ("CsgId",
+                   "The Closed Subscriber Group (CSG) identity that this eNodeB belongs to",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&LteEnbNetDevice::SetCsgId,
+                                         &LteEnbNetDevice::GetCsgId),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("CsgIndication",
+                   "If true, only UEs which are members of the CSG (i.e. same CSG ID) "
+                   "can gain access to the eNodeB, therefore enforcing closed access mode. "
+                   "Otherwise, the eNodeB operates as a non-CSG cell and implements open access mode.",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&LteEnbNetDevice::SetCsgIndication,
+                                        &LteEnbNetDevice::GetCsgIndication),
+                   MakeBooleanChecker ())
   ;
   return tid;
 }
 
 LteEnbNetDevice::LteEnbNetDevice ()
+  : m_isConstructed (false),
+    m_isConfigured (false),
+    m_anr (0)
 {
   NS_LOG_FUNCTION (this);
 }
@@ -132,6 +162,15 @@
   m_rrc->Dispose ();
   m_rrc = 0;
 
+  m_handoverAlgorithm->Dispose ();
+  m_handoverAlgorithm = 0;
+
+  if (m_anr != 0)
+    {
+      m_anr->Dispose ();
+      m_anr = 0;
+    }
+
   m_phy->Dispose ();
   m_phy = 0;
 
@@ -141,21 +180,17 @@
 
 
 Ptr<LteEnbMac>
-LteEnbNetDevice::GetMac (void) const
+LteEnbNetDevice::GetMac () const
 {
-  NS_LOG_FUNCTION (this);
   return m_mac;
 }
 
-
 Ptr<LteEnbPhy>
-LteEnbNetDevice::GetPhy (void) const
+LteEnbNetDevice::GetPhy () const
 {
-  NS_LOG_FUNCTION (this);
   return m_phy;
 }
 
-
 Ptr<LteEnbRrc>
 LteEnbNetDevice::GetRrc () const
 {
@@ -177,6 +212,7 @@
 void 
 LteEnbNetDevice::SetUlBandwidth (uint8_t bw)
 { 
+  NS_LOG_FUNCTION (this << uint16_t (bw));
   switch (bw)
     { 
     case 6:
@@ -203,6 +239,7 @@
 void 
 LteEnbNetDevice::SetDlBandwidth (uint8_t bw)
 {
+  NS_LOG_FUNCTION (this << uint16_t (bw));
   switch (bw)
     { 
     case 6:
@@ -229,6 +266,7 @@
 void 
 LteEnbNetDevice::SetDlEarfcn (uint16_t earfcn)
 { 
+  NS_LOG_FUNCTION (this << earfcn);
   m_dlEarfcn = earfcn;
 }
 
@@ -241,20 +279,55 @@
 void 
 LteEnbNetDevice::SetUlEarfcn (uint16_t earfcn)
 { 
+  NS_LOG_FUNCTION (this << earfcn);
   m_ulEarfcn = earfcn;
 }
 
+uint32_t
+LteEnbNetDevice::GetCsgId () const
+{
+  return m_csgId;
+}
+
+void
+LteEnbNetDevice::SetCsgId (uint32_t csgId)
+{
+  NS_LOG_FUNCTION (this << csgId);
+  m_csgId = csgId;
+  UpdateConfig (); // propagate the change to RRC level
+}
+
+bool
+LteEnbNetDevice::GetCsgIndication () const
+{
+  return m_csgIndication;
+}
+
+void
+LteEnbNetDevice::SetCsgIndication (bool csgIndication)
+{
+  NS_LOG_FUNCTION (this << csgIndication);
+  m_csgIndication = csgIndication;
+  UpdateConfig (); // propagate the change to RRC level
+}
+
 
 void 
 LteEnbNetDevice::DoInitialize (void)
 {
-
+  NS_LOG_FUNCTION (this);
+  m_isConstructed = true;
   UpdateConfig ();
   m_phy->Initialize ();
   m_mac->Initialize ();
   m_rrc->Initialize ();
-}
+  m_handoverAlgorithm->Initialize ();
 
+  if (m_anr != 0)
+    {
+      m_anr->Initialize ();
+    }
+}
 
 
 bool
@@ -266,16 +339,33 @@
 }
 
 
-
-
 void
 LteEnbNetDevice::UpdateConfig (void)
 {
   NS_LOG_FUNCTION (this);
 
-  m_rrc->ConfigureCell (m_ulBandwidth, m_dlBandwidth, m_ulEarfcn, m_dlEarfcn, m_cellId);
-  m_rrc->SetCellId (m_cellId);
-
+  if (m_isConstructed)
+    {
+      if (!m_isConfigured)
+        {
+          NS_LOG_LOGIC (this << " Configure cell " << m_cellId);
+          // we have to make sure that this function is called only once
+          m_rrc->ConfigureCell (m_ulBandwidth, m_dlBandwidth, m_ulEarfcn, m_dlEarfcn, m_cellId);
+          m_isConfigured = true;
+        }
+
+      NS_LOG_LOGIC (this << " Updating SIB1 of cell " << m_cellId
+                         << " with CSG ID " << m_csgId
+                         << " and CSG indication " << m_csgIndication);
+      m_rrc->SetCsgId (m_csgId, m_csgIndication);
+    }
+  else
+    {
+      /*
+       * Lower layers are not ready yet, so do nothing now and expect
+       * ``DoInitialize`` to re-invoke this function.
+       */
+    }
 }
 
 
diff -Naur ns-3.18.1/src/lte/model/lte-enb-net-device.h ns-3.19/src/lte/model/lte-enb-net-device.h
--- ns-3.18.1/src/lte/model/lte-enb-net-device.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-enb-net-device.h	2013-12-20 09:44:51.000000000 -0800
@@ -40,6 +40,8 @@
 class LteEnbMac;
 class LteEnbRrc;
 class FfMacScheduler;
+class LteHandoverAlgorithm;
+class LteAnr;
 
 
 /**
@@ -106,7 +108,7 @@
   uint16_t GetDlEarfcn () const;
 
   /** 
-   * \param bw the downlink carrier frequency (EARFCN)
+   * \param earfcn the downlink carrier frequency (EARFCN)
    */
   void SetDlEarfcn (uint16_t earfcn);
 
@@ -116,10 +118,54 @@
   uint16_t GetUlEarfcn () const;
 
   /** 
-   * \param bw the uplink carrier frequency (EARFCN)
+   * \param earfcn the uplink carrier frequency (EARFCN)
    */
   void SetUlEarfcn (uint16_t earfcn);
 
+  /**
+   * \brief Returns the CSG ID of the eNodeB.
+   * \return the Closed Subscriber Group identity
+   * \sa LteEnbNetDevice::SetCsgId
+   */
+  uint32_t GetCsgId () const;
+
+  /**
+   * \brief Associate the eNodeB device with a particular CSG.
+   * \param csgId the intended Closed Subscriber Group identity
+   *
+   * CSG identity is a number identifying a Closed Subscriber Group which the
+   * cell belongs to. eNodeB is associated with a single CSG identity.
+   *
+   * The same CSG identity can also be associated to several UEs, which is
+   * equivalent as enlisting these UEs as the members of this particular CSG.
+   *
+   * \sa LteEnbNetDevice::SetCsgIndication
+   */
+  void SetCsgId (uint32_t csgId);
+
+  /**
+   * \brief Returns the CSG indication flag of the eNodeB.
+   * \return the CSG indication flag
+   * \sa LteEnbNetDevice::SetCsgIndication
+   */
+  bool GetCsgIndication () const;
+
+  /**
+   * \brief Enable or disable the CSG indication flag.
+   * \param csgIndication if TRUE, only CSG members are allowed to access this
+   *                      cell
+   *
+   * When the CSG indication field is set to TRUE, only UEs which are members of
+   * the CSG (i.e. same CSG ID) can gain access to the eNodeB, therefore
+   * enforcing closed access mode. Otherwise, the eNodeB operates as a non-CSG
+   * cell and implements open access mode.
+   *
+   * \note This restriction only applies to initial cell selection and
+   *       EPC-enabled simulation.
+   *
+   * \sa LteEnbNetDevice::SetCsgIndication
+   */
+  void SetCsgIndication (bool csgIndication);
 
 protected:
   // inherited from Object
@@ -127,16 +173,20 @@
 
 
 private:
+  bool m_isConstructed;
+  bool m_isConfigured;
 
   /**
-   * Several attributes (e.g., the bandwidth) are exported as
-   * attributes of the LteEnbNetDevice from a user perspective,  but
-   * are actually used also in other modules as well (the RRC, the
-   * PHY, the scheduler...). This methods takes care of updating the
-   * configuration of all modules so that their copy of the attribute
-   * values is in sync with the one in the LteEnbNetDevice.
+   * \brief Propagate attributes and configuration to sub-modules.
+   *
+   * Several attributes (e.g., the bandwidth) are exported as the attributes of
+   * the LteEnbNetDevice from a user perspective, but are actually used also in
+   * other sub-modules (the RRC, the PHY, the scheduler, etc.). This method
+   * takes care of updating the configuration of all these sub-modules so that
+   * their copy of attribute values are in sync with the one in
+   * the LteEnbNetDevice.
    */
-  void UpdateConfig (void);
+  void UpdateConfig ();
 
   Ptr<LteEnbMac> m_mac;
 
@@ -146,6 +196,10 @@
 
   Ptr<FfMacScheduler> m_scheduler;
 
+  Ptr<LteHandoverAlgorithm> m_handoverAlgorithm;
+
+  Ptr<LteAnr> m_anr;
+
   uint16_t m_cellId; /**< Cell Identifer. Part of the CGI, see TS 29.274, section 8.21.1  */
 
   uint8_t m_dlBandwidth; /**< downlink bandwidth in RBs */
@@ -154,7 +208,10 @@
   uint16_t m_dlEarfcn;  /**< downlink carrier frequency */
   uint16_t m_ulEarfcn;  /**< uplink carrier frequency */
 
-};
+  uint16_t m_csgId;
+  bool m_csgIndication;
+
+}; // end of class LteEnbNetDevice
 
 } // namespace ns3
 
diff -Naur ns-3.18.1/src/lte/model/lte-enb-phy.cc ns-3.19/src/lte/model/lte-enb-phy.cc
--- ns-3.18.1/src/lte/model/lte-enb-phy.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-enb-phy.cc	2013-12-20 09:44:51.000000000 -0800
@@ -49,7 +49,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (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
@@ -525,6 +526,21 @@
   NS_LOG_FUNCTION (this);
 
   ++m_nrSubFrames;
+
+  /*
+   * Send SIB1 at 6th subframe of every odd-numbered radio frame. This is
+   * equivalent with Section 5.2.1.2 of 3GPP TS 36.331, where it is specified
+   * "repetitions are scheduled in subframe #5 of all other radio frames for
+   * which SFN mod 2 = 0," except that 3GPP counts frames and subframes starting
+   * from 0, while ns-3 counts starting from 1.
+   */
+  if ((m_nrSubFrames == 6) && ((m_nrFrames % 2) == 1))
+    {
+      Ptr<Sib1LteControlMessage> msg = Create<Sib1LteControlMessage> ();
+      msg->SetSib1 (m_sib1);
+      m_controlMessagesQueue.at (0).push_back (msg);
+    }
+
   if (m_srsPeriodicity>0)
     { 
       // might be 0 in case the eNB has no UEs attached
@@ -973,6 +989,14 @@
 }
 
 
+void
+LteEnbPhy::DoSetSystemInformationBlockType1 (LteRrcSap::SystemInformationBlockType1 sib1)
+{
+  NS_LOG_FUNCTION (this);
+  m_sib1 = sib1;
+}
+
+
 void
 LteEnbPhy::SetHarqPhyModule (Ptr<LteHarqPhy> harq)
 {
diff -Naur ns-3.18.1/src/lte/model/lte-enb-phy.h ns-3.19/src/lte/model/lte-enb-phy.h
--- ns-3.18.1/src/lte/model/lte-enb-phy.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-enb-phy.h	2013-12-20 09:44:51.000000000 -0800
@@ -95,7 +95,7 @@
   void SetLteEnbCphySapUser (LteEnbCphySapUser* s);
 
   /**
-   * \param pw the transmission power in dBm
+   * \param pow the transmission power in dBm
    */
   void SetTxPower (double pow);
 
@@ -106,7 +106,7 @@
 
 
   /**
-   * \param pw the noise figure in dB
+   * \param pow the noise figure in dB
    */
   void SetNoiseFigure (double pow);
 
@@ -178,6 +178,7 @@
   * \brief Create the UL CQI feedback from SINR values perceived at
   * the physical layer with the PUSCH signal received from eNB
   * \param sinr SINR values vector
+  * \return UL CQI feedback in the format usable by an FF MAC scheduler
   */
   FfMacSchedSapProvider::SchedUlCqiInfoReqParameters CreatePuschCqiReport (const SpectrumValue& sinr);
   
@@ -185,6 +186,7 @@
   * \brief Create the UL CQI feedback from SINR values perceived at
   * the physical layer with the SRS signal received from eNB
   * \param sinr SINR values vector
+  * \return UL CQI feedback in the format usable by an FF MAC scheduler
   */
   FfMacSchedSapProvider::SchedUlCqiInfoReqParameters CreateSrsCqiReport (const SpectrumValue& sinr);
 
@@ -242,7 +244,7 @@
   virtual void GenerateCtrlCqiReport (const SpectrumValue& sinr);
   virtual void GenerateDataCqiReport (const SpectrumValue& sinr);
   virtual void ReportInterference (const SpectrumValue& interf);
-  virtual void ReportRsReceivedPower (const SpectrumValue& interf);
+  virtual void ReportRsReceivedPower (const SpectrumValue& power);
 
 
 
@@ -264,6 +266,7 @@
   void DoSetTransmissionMode (uint16_t  rnti, uint8_t txMode);
   void DoSetSrsConfigurationIndex (uint16_t  rnti, uint16_t srcCi);  
   void DoSetMasterInformationBlock (LteRrcSap::MasterInformationBlock mib);
+  void DoSetSystemInformationBlockType1 (LteRrcSap::SystemInformationBlockType1 sib1);
 
   // LteEnbPhySapProvider forwarded methods
   void DoSendMacPdu (Ptr<Packet> p);  
@@ -301,6 +304,7 @@
   uint16_t m_currentSrsOffset;
 
   LteRrcSap::MasterInformationBlock m_mib;
+  LteRrcSap::SystemInformationBlockType1 m_sib1;
 
   Ptr<LteHarqPhy> m_harqPhyModule;
 
diff -Naur ns-3.18.1/src/lte/model/lte-enb-rrc.cc ns-3.19/src/lte/model/lte-enb-rrc.cc
--- ns-3.18.1/src/lte/model/lte-enb-rrc.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-enb-rrc.cc	2013-12-20 09:44:51.000000000 -0800
@@ -15,36 +15,32 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- * Author: Nicola Baldo <nbaldo@cttc.es>
- *         Marco Miozzo <mmiozzo@cttc.es>
- *         Manuel Requena <manuel.requena@cttc.es>
+ * Authors: Nicola Baldo <nbaldo@cttc.es>
+ *          Marco Miozzo <mmiozzo@cttc.es>
+ *          Manuel Requena <manuel.requena@cttc.es>
  */
 
-#include "ns3/fatal-error.h"
-#include "ns3/log.h"
-#include "ns3/abort.h"
-#include "ns3/pointer.h"
-#include "ns3/object-map.h"
-#include "ns3/object-factory.h"
-#include "ns3/simulator.h"
-
 #include "lte-enb-rrc.h"
 
-#include "lte-enb-net-device.h"
-#include "lte-radio-bearer-info.h"
-#include "eps-bearer-tag.h"
-#include "ff-mac-csched-sap.h"
-#include "epc-enb-s1-sap.h"
-
-#include "lte-rlc.h"
-#include "lte-rlc-tm.h"
-#include "lte-rlc-um.h"
-#include "lte-rlc-am.h"
-#include "lte-pdcp.h"
-#include "lte-pdcp-sap.h"
-
+#include <ns3/fatal-error.h>
+#include <ns3/log.h>
+#include <ns3/abort.h>
+
+#include <ns3/pointer.h>
+#include <ns3/object-map.h>
+#include <ns3/object-factory.h>
 #include <ns3/simulator.h>
 
+#include <ns3/lte-radio-bearer-info.h>
+#include <ns3/eps-bearer-tag.h>
+#include <ns3/packet.h>
+
+#include <ns3/lte-rlc.h>
+#include <ns3/lte-rlc-tm.h>
+#include <ns3/lte-rlc-um.h>
+#include <ns3/lte-rlc-am.h>
+#include <ns3/lte-pdcp.h>
+
 
 
 
@@ -54,10 +50,13 @@
 namespace ns3 {
 
 
-// ///////////////////////////
+///////////////////////////////////////////
 // CMAC SAP forwarder
-// ///////////////////////////
+///////////////////////////////////////////
 
+/**
+ * \brief Class for forwarding CMAC SAP User functions.
+ */
 class EnbRrcMemberLteEnbCmacSapUser : public LteEnbCmacSapUser
 {
 public:
@@ -95,19 +94,25 @@
 }
 
 
+
+///////////////////////////////////////////
+// UeManager
+///////////////////////////////////////////
+
+
 const char* g_ueManagerStateName[UeManager::NUM_STATES] = 
-  {
-    "INITIAL_RANDOM_ACCESS",
-    "CONNECTION_SETUP",
-    "CONNECTION_REJECTED",
-    "CONNECTED_NORMALLY",
-    "CONNECTION_RECONFIGURATION",
-    "CONNECTION_REESTABLISHMENT",
-    "HANDOVER_PREPARATION",
-    "HANDOVER_JOINING",
-    "HANDOVER_PATH_SWITCH",
-    "HANDOVER_LEAVING",
-  };
+{
+  "INITIAL_RANDOM_ACCESS",
+  "CONNECTION_SETUP",
+  "CONNECTION_REJECTED",
+  "CONNECTED_NORMALLY",
+  "CONNECTION_RECONFIGURATION",
+  "CONNECTION_REESTABLISHMENT",
+  "HANDOVER_PREPARATION",
+  "HANDOVER_JOINING",
+  "HANDOVER_PATH_SWITCH",
+  "HANDOVER_LEAVING",
+};
 
 std::string ToString (UeManager::State s)
 {
@@ -115,13 +120,8 @@
 }
 
 
-
-///////////////////////////////////////////
-// UeManager 
-///////////////////////////////////////////
-
-
-NS_OBJECT_ENSURE_REGISTERED (UeManager);
+NS_OBJECT_ENSURE_REGISTERED (UeManager)
+  ;
 
 
 UeManager::UeManager ()
@@ -248,19 +248,14 @@
 
     case HANDOVER_JOINING:
       m_handoverJoiningTimeout = Simulator::Schedule (m_rrc->m_handoverJoiningTimeoutDuration, 
-                                                 &LteEnbRrc::HandoverJoiningTimeout, 
-                                                 m_rrc, m_rnti);
+                                                      &LteEnbRrc::HandoverJoiningTimeout,
+                                                      m_rrc, m_rnti);
       break;      
 
     default:
       NS_FATAL_ERROR ("unexpected state " << ToString (m_state));
-      break;      
-    }  
-
-  m_servingCellMeasures = CreateObject<UeMeasure> ();
-  m_servingCellMeasures->m_cellId = m_rrc->m_cellId;
-  m_servingCellMeasures->m_rsrp = 0;
-  m_servingCellMeasures->m_rsrq = 0;
+      break;
+    }
 
 }
 
@@ -281,7 +276,6 @@
       m_rrc->m_x2uTeidInfoMap.erase (it->second->m_gtpTeid);
     }
 
-  m_servingCellMeasures = 0;
 }
 
 TypeId UeManager::GetTypeId (void)
@@ -310,7 +304,7 @@
     .AddTraceSource ("StateTransition",
                      "fired upon every UE state transition seen by the UeManager at the eNB RRC",
                      MakeTraceSourceAccessor (&UeManager::m_stateTransitionTrace))
-    ;
+  ;
   return tid;
 }
 
@@ -490,8 +484,8 @@
       // a previous reconfiguration still ongoing, we need to wait for it to be finished
       m_pendingRrcConnectionReconfiguration = true;
       break;
-      
-    case CONNECTED_NORMALLY:      
+
+    case CONNECTED_NORMALLY:
       {
         m_pendingRrcConnectionReconfiguration = false;
         LteRrcSap::RrcConnectionReconfiguration msg = BuildRrcConnectionReconfiguration ();
@@ -499,21 +493,21 @@
         RecordDataRadioBearersToBeStarted ();
         SwitchToState (CONNECTION_RECONFIGURATION);
       }
-      break;      
-      
+      break;
+
     default:
       NS_FATAL_ERROR ("method unexpected in state " << ToString (m_state));
-      break;      
+      break;
     }
 }
 
 void 
 UeManager::PrepareHandover (uint16_t cellId)
-{  
-  NS_LOG_FUNCTION (this << cellId);  
+{
+  NS_LOG_FUNCTION (this << cellId);
   switch (m_state)
     {
-    case CONNECTED_NORMALLY:      
+    case CONNECTED_NORMALLY:
       {
         m_targetCellId = cellId;
         EpcX2SapProvider::HandoverRequestParams params;
@@ -529,14 +523,14 @@
         LteRrcSap::HandoverPreparationInfo hpi;
         hpi.asConfig.sourceUeIdentity = m_rnti;
         hpi.asConfig.sourceDlCarrierFreq = m_rrc->m_dlEarfcn;
-        hpi.asConfig.sourceMeasConfig = BuildMeasConfig ();
+        hpi.asConfig.sourceMeasConfig = m_rrc->m_ueMeasConfig;
         hpi.asConfig.sourceRadioResourceConfig = GetRadioResourceConfigForHandoverPreparationInfo ();
         hpi.asConfig.sourceMasterInformationBlock.dlBandwidth = m_rrc->m_dlBandwidth;
         hpi.asConfig.sourceMasterInformationBlock.systemFrameNumber = 0;
-        hpi.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.plmnIdentityInfo.plmnIdentity = 0;
+        hpi.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.plmnIdentityInfo.plmnIdentity = m_rrc->m_sib1.cellAccessRelatedInfo.plmnIdentityInfo.plmnIdentity;
         hpi.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.cellIdentity = m_rrc->m_cellId;
-        hpi.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIndication = 0;
-        hpi.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIdentity = 0;
+        hpi.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIndication = m_rrc->m_sib1.cellAccessRelatedInfo.csgIndication;
+        hpi.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIdentity = m_rrc->m_sib1.cellAccessRelatedInfo.csgIdentity;
         LteEnbCmacSapProvider::RachConfig rc = m_rrc->m_cmacSapProvider->GetRachConfig ();
         hpi.asConfig.sourceSystemInformationBlockType2.radioResourceConfigCommon.rachConfigCommon.preambleInfo.numberOfRaPreambles = rc.numberOfRaPreambles;
         hpi.asConfig.sourceSystemInformationBlockType2.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo.preambleTransMax = rc.preambleTransMax;
@@ -558,7 +552,7 @@
       
     default:
       NS_FATAL_ERROR ("method unexpected in state " << ToString (m_state));
-      break;      
+      break;
     }
 
 }
@@ -583,8 +577,8 @@
   SwitchToState (HANDOVER_LEAVING);
   m_handoverLeavingTimeout = Simulator::Schedule (m_rrc->m_handoverLeavingTimeoutDuration, 
                                                   &LteEnbRrc::HandoverLeavingTimeout, 
-                                                  m_rrc, m_rnti);  
-  NS_ASSERT (handoverCommand.haveMobilityControlInfo);  
+                                                  m_rrc, m_rnti);
+  NS_ASSERT (handoverCommand.haveMobilityControlInfo);
   m_rrc->m_handoverStartTrace (m_imsi, m_rrc->m_cellId, m_rnti, handoverCommand.mobilityControlInfo.targetPhysCellId);
 
   EpcX2SapProvider::SnStatusTransferParams sst;
@@ -628,7 +622,7 @@
 UeManager::SendData (uint8_t bid, Ptr<Packet> p)
 {
   NS_LOG_FUNCTION (this << p << (uint16_t) bid);
-   switch (m_state)
+  switch (m_state)
     {
     case INITIAL_RANDOM_ACCESS:
     case CONNECTION_SETUP:
@@ -926,8 +920,9 @@
 void 
 UeManager::RecvMeasurementReport (LteRrcSap::MeasurementReport msg)
 {
-  NS_LOG_FUNCTION (this);
-  NS_LOG_LOGIC ("measId " << (uint16_t) msg.measResults.measId
+  uint8_t measId = msg.measResults.measId;
+  NS_LOG_FUNCTION (this << (uint16_t) measId);
+  NS_LOG_LOGIC ("measId " << (uint16_t) measId
                 << " haveMeasResultNeighCells " << msg.measResults.haveMeasResultNeighCells
                 << " measResultListEutra " << msg.measResults.measResultListEutra.size ());
   NS_LOG_LOGIC ("serving cellId " << m_rrc->m_cellId
@@ -943,124 +938,25 @@
                     << " RSRQ " << (it->haveRsrqResult ? (uint16_t) it->rsrqResult : 255));
     }
 
-  m_rrc->m_recvMeasurementReportTrace (m_imsi, m_rrc->m_cellId, m_rnti, msg);
-
-  // Just these two measId are supported
-  NS_ASSERT_MSG ((msg.measResults.measId == 1) || (msg.measResults.measId == 2),
-                 "Measure identity is unknown");
-
-  /// Event A2 (Serving becomes worse than threshold)
-  if (msg.measResults.measId == 1)
-    {
-      // Keep new RSRQ value reported for the serving cell
-      m_servingCellMeasures->m_rsrq = msg.measResults.rsrqResult;
-      m_servingCellMeasures->m_rsrp = msg.measResults.rsrpResult;
-
-      // Serving cell is worse than a handover threshold.
-      // This handover threshold is independent from the event A2 threshold
-      if (m_servingCellMeasures->m_rsrq <= m_rrc->m_servingCellHandoverThreshold)
-        {
-          // Find the best neighbour cell (eNB)
-          Ptr<UeMeasure> bestNeighbour = 0;
-          uint8_t bestNeighbourRsrq = 0;
-          NS_LOG_LOGIC ("Number of neighbour cells = " << m_neighbourCellMeasures.size ());
-          for (std::map <uint16_t, Ptr<UeMeasure> >::iterator it = m_neighbourCellMeasures.begin ();
-               it != m_neighbourCellMeasures.end ();
-               ++it)
-            {
-              if (it->second->m_rsrq > bestNeighbourRsrq)
-                {
-                  Ptr<NeighbourRelation> neighbourRelation = m_rrc->m_neighbourRelationTable[it->second->m_cellId];
-                  if ((neighbourRelation->m_noHo == false) &&
-                      (neighbourRelation->m_noX2 == false))
-                    {
-                      bestNeighbour = it->second;
-                      bestNeighbourRsrq = it->second->m_rsrq;
-                    }
-                }
-            }
-
-          // Trigger Handover, if needed
-          if (bestNeighbour)
-            {
-              uint16_t targetCellId = bestNeighbour->m_cellId;
-              NS_LOG_LOGIC ("Best neighbour cellId " << targetCellId);
-              if ( (bestNeighbour->m_rsrq - m_servingCellMeasures->m_rsrq >= m_rrc->m_neighbourCellHandoverOffset) &&
-                   (m_state == CONNECTED_NORMALLY) )
-                {
-                  NS_LOG_LOGIC ("Trigger Handover to cellId " << targetCellId);
-                  NS_LOG_LOGIC ("target cell RSRQ " << (uint16_t) bestNeighbour->m_rsrq);
-                  NS_LOG_LOGIC ("serving cell RSRQ " << (uint16_t) m_servingCellMeasures->m_rsrq);
-                  PrepareHandover (targetCellId);
-                }
-            }
-        }
+  if ((m_rrc->m_handoverManagementSapProvider != 0)
+      && (m_rrc->m_handoverMeasIds.find (measId) != m_rrc->m_handoverMeasIds.end ()))
+    {
+      // this measurement was requested by the handover algorithm
+      m_rrc->m_handoverManagementSapProvider->ReportUeMeas (m_rnti,
+                                                            msg.measResults);
     }
-  /// Event A4 (Neighbour becomes better than threshold)
-  else if (msg.measResults.measId == 2)
+
+  if ((m_rrc->m_anrSapProvider != 0)
+      && (m_rrc->m_anrMeasIds.find (measId) != m_rrc->m_anrMeasIds.end ()))
     {
-      // Update the NRT
-      if (msg.measResults.haveMeasResultNeighCells && ! (msg.measResults.measResultListEutra.empty ()))
-        {
-          for (std::list <LteRrcSap::MeasResultEutra>::iterator it = msg.measResults.measResultListEutra.begin ();
-               it != msg.measResults.measResultListEutra.end ();
-               ++it)
-            {
-              // Keep new RSRQ value reported for the neighbour cell
-              NS_ASSERT_MSG (it->haveRsrqResult == true, "RSRQ measure missing for cellId " << it->physCellId);
+      // this measurement was requested by the ANR function
+      m_rrc->m_anrSapProvider->ReportUeMeas (msg.measResults);
+    }
 
-              // Update Neighbour Relation Table
-              if (m_rrc->m_neighbourRelationTable.find (it->physCellId) != m_rrc->m_neighbourRelationTable.end ())
-                {
-                  // Update neighbour info
-                  Ptr<NeighbourRelation> neighbourRelation = m_rrc->m_neighbourRelationTable[it->physCellId];
-                  NS_ASSERT_MSG (neighbourRelation->m_physCellId == it->physCellId,
-                                 "Wrong cellId " << neighbourRelation->m_physCellId);
-
-                  if (neighbourRelation->m_noX2 == false)
-                    {
-                      neighbourRelation->m_noHo = false;
-                    }
-                  neighbourRelation->m_detectedAsNeighbour = true;
-                }
-              else // new neighbour
-                {
-                  Ptr<NeighbourRelation> neighbourRelation = CreateObject <NeighbourRelation> ();
-                  neighbourRelation->m_physCellId = it->physCellId;
-                  neighbourRelation->m_noRemove = false;
-                  neighbourRelation->m_noHo = true;
-                  neighbourRelation->m_noX2 = true;
-                  neighbourRelation->m_detectedAsNeighbour = true;
-                  m_rrc->m_neighbourRelationTable[it->physCellId] = neighbourRelation;
-                }
+  // fire a trace source
+  m_rrc->m_recvMeasurementReportTrace (m_imsi, m_rrc->m_cellId, m_rnti, msg);
 
-              // Update measure info of the neighbour cell
-              Ptr<UeMeasure> neighbourCellMeasures;
-              if (m_neighbourCellMeasures.find (it->physCellId) != m_neighbourCellMeasures.end ())
-                {
-                  neighbourCellMeasures = m_neighbourCellMeasures[it->physCellId];
-                  neighbourCellMeasures->m_cellId = it->physCellId;
-                  neighbourCellMeasures->m_rsrq = it->rsrqResult;
-                  neighbourCellMeasures->m_rsrp = 0;
-                }
-              else
-                {
-                  neighbourCellMeasures = CreateObject <UeMeasure> ();
-                  neighbourCellMeasures->m_cellId = it->physCellId;
-                  neighbourCellMeasures->m_rsrq = it->rsrqResult;
-                  neighbourCellMeasures->m_rsrp = 0;
-                  m_neighbourCellMeasures[it->physCellId] = neighbourCellMeasures;
-                }
-            }
-        }
-      else
-        {
-           NS_LOG_LOGIC ("WARNING");
-//            NS_ASSERT_MSG ("Event A4 received without measure results for neighbour cells");
-           // TODO Remove neighbours in the neighbourCellMeasures table
-        }
-    }
-}
+} // end of UeManager::RecvMeasurementReport
 
 
 // methods forwarded from CMAC SAP
@@ -1099,19 +995,19 @@
 
 
 uint16_t
-UeManager::GetRnti (void)
+UeManager::GetRnti (void) const
 {
   return m_rnti;
 }
 
 uint64_t
-UeManager::GetImsi (void)
+UeManager::GetImsi (void) const
 {
   return m_imsi;
 }
 
 uint16_t
-UeManager::GetSrsConfigurationIndex (void)
+UeManager::GetSrsConfigurationIndex (void) const
 {
   return m_physicalConfigDedicated.soundingRsUlConfigDedicated.srsConfigIndex;
 }
@@ -1136,7 +1032,7 @@
 }
 
 UeManager::State
-UeManager::GetState (void)
+UeManager::GetState (void) const
 {
   return m_state;
 }
@@ -1195,78 +1091,11 @@
   msg.radioResourceConfigDedicated = BuildRadioResourceConfigDedicated ();
   msg.haveMobilityControlInfo = false;
   msg.haveMeasConfig = true;
-  msg.measConfig = BuildMeasConfig ();
+  msg.measConfig = m_rrc->m_ueMeasConfig;
 
   return msg;
 }
 
-LteRrcSap::MeasConfig
-UeManager::BuildMeasConfig ()
-{
-  // Just intra-frequency measurements are supported,
-  // so just one measurement object is created
-  LteRrcSap::MeasObjectToAddMod measObject;
-  measObject.measObjectId = 1;
-  measObject.measObjectEutra.carrierFreq = m_rrc->m_dlEarfcn;
-  measObject.measObjectEutra.allowedMeasBandwidth = m_rrc->m_dlBandwidth;
-  measObject.measObjectEutra.presenceAntennaPort1 = false;
-  measObject.measObjectEutra.neighCellConfig = 0;
-  measObject.measObjectEutra.offsetFreq = 0;
-  measObject.measObjectEutra.haveCellForWhichToReportCGI = false;
-
-  // Just event A2 and event A4 are supported
-  LteRrcSap::ReportConfigToAddMod reportConfigA2;
-  reportConfigA2.reportConfigId = 1;
-  reportConfigA2.reportConfigEutra.triggerType = LteRrcSap::ReportConfigEutra::EVENT;
-  reportConfigA2.reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::EVENT_A2;
-  reportConfigA2.reportConfigEutra.threshold1.choice = LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ;
-  reportConfigA2.reportConfigEutra.threshold1.range = m_rrc->m_eventA2Threshold;
-  reportConfigA2.reportConfigEutra.hysteresis = 0;
-  reportConfigA2.reportConfigEutra.timeToTrigger = 0;
-  reportConfigA2.reportConfigEutra.triggerQuantity = LteRrcSap::ReportConfigEutra::RSRQ;
-  reportConfigA2.reportConfigEutra.reportQuantity = LteRrcSap::ReportConfigEutra::SAME_AS_TRIGGER_QUANTITY; 
-  reportConfigA2.reportConfigEutra.maxReportCells = LteRrcSap::MaxReportCells;
-  reportConfigA2.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::MS480;
-  reportConfigA2.reportConfigEutra.reportAmount = 255;
-
-  LteRrcSap::ReportConfigToAddMod reportConfigA4;
-  reportConfigA4.reportConfigId = 2;
-  reportConfigA4.reportConfigEutra.triggerType = LteRrcSap::ReportConfigEutra::EVENT;
-  reportConfigA4.reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::EVENT_A4;
-  reportConfigA4.reportConfigEutra.threshold1.choice = LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ;
-  reportConfigA4.reportConfigEutra.threshold1.range = m_rrc->m_eventA4Threshold;
-  reportConfigA4.reportConfigEutra.hysteresis = 0;
-  reportConfigA4.reportConfigEutra.timeToTrigger = 0;
-  reportConfigA4.reportConfigEutra.triggerQuantity = LteRrcSap::ReportConfigEutra::RSRQ;
-  reportConfigA4.reportConfigEutra.reportQuantity = LteRrcSap::ReportConfigEutra::SAME_AS_TRIGGER_QUANTITY; 
-  reportConfigA4.reportConfigEutra.maxReportCells = LteRrcSap::MaxReportCells;
-  reportConfigA4.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::MS480;
-  reportConfigA4.reportConfigEutra.reportAmount = 255;
-
-  LteRrcSap::MeasIdToAddMod measId[2];
-  measId[0].measId = 1;
-  measId[0].measObjectId = 1;
-  measId[0].reportConfigId = 1;
-  measId[1].measId = 2;
-  measId[1].measObjectId = 1;
-  measId[1].reportConfigId = 2;
-
-  LteRrcSap::MeasConfig measConfig;
-  measConfig.measObjectToAddModList.push_back (measObject);
-  measConfig.reportConfigToAddModList.push_back (reportConfigA2);
-  measConfig.reportConfigToAddModList.push_back (reportConfigA4);
-  measConfig.measIdToAddModList.push_back (measId[0]);
-  measConfig.measIdToAddModList.push_back (measId[1]);
-  measConfig.haveQuantityConfig = true;
-  measConfig.quantityConfig.filterCoefficientRSRP = 4; // default = fc4 (See TS 36.331)
-  measConfig.quantityConfig.filterCoefficientRSRQ = 4; // default = fc4 (See TS 36.331)
-  measConfig.haveMeasGapConfig = false;
-  measConfig.haveSmeasure = false;
-  measConfig.haveSpeedStatePars = false;
-
-  return measConfig;
-}
-
 LteRrcSap::RadioResourceConfigDedicated
 UeManager::BuildRadioResourceConfigDedicated ()
 {
@@ -1345,10 +1174,11 @@
 void 
 UeManager::SwitchToState (State newState)
 {
-  NS_LOG_FUNCTION (this << newState);
+  NS_LOG_FUNCTION (this << ToString (newState));
   State oldState = m_state;
   m_state = newState;
-  NS_LOG_INFO ("IMSI " << m_imsi << " RNTI " << m_rnti << " UeManager " << ToString (oldState) << " --> " << ToString (newState));
+  NS_LOG_INFO (this << "IMSI " << m_imsi << " RNTI " << m_rnti << " UeManager "
+                    << ToString (oldState) << " --> " << ToString (newState));
   m_stateTransitionTrace (m_imsi, m_rrc->m_cellId, m_rnti, oldState, newState);
   
   switch (newState)
@@ -1385,16 +1215,19 @@
 }
 
 
-  
-// ///////////////////////////
+
+///////////////////////////////////////////
 // eNB RRC methods
-// ///////////////////////////
+///////////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (LteEnbRrc);
+NS_OBJECT_ENSURE_REGISTERED (LteEnbRrc)
+  ;
 
 LteEnbRrc::LteEnbRrc ()
   : m_x2SapProvider (0),
     m_cmacSapProvider (0),
+    m_handoverManagementSapProvider (0),
+    m_anrSapProvider (0),
     m_rrcSapUser (0),
     m_macSapProvider (0),
     m_s1SapProvider (0),
@@ -1407,12 +1240,12 @@
 {
   NS_LOG_FUNCTION (this);
   m_cmacSapUser = new EnbRrcMemberLteEnbCmacSapUser (this);
+  m_handoverManagementSapUser = new MemberLteHandoverManagementSapUser<LteEnbRrc> (this);
+  m_anrSapUser = new MemberLteAnrSapUser<LteEnbRrc> (this);
   m_rrcSapProvider = new MemberLteEnbRrcSapProvider<LteEnbRrc> (this);
   m_x2SapUser = new EpcX2SpecificEpcX2SapUser<LteEnbRrc> (this);
   m_s1SapUser = new MemberEpcEnbS1SapUser<LteEnbRrc> (this);
   m_cphySapUser = new MemberLteEnbCphySapUser<LteEnbRrc> (this);
-
- 
 }
 
 
@@ -1428,6 +1261,8 @@
   NS_LOG_FUNCTION (this);
   m_ueMap.clear ();
   delete m_cmacSapUser;
+  delete m_handoverManagementSapUser;
+  delete m_anrSapUser;
   delete m_rrcSapProvider;
   delete m_x2SapUser;
   delete m_s1SapUser;
@@ -1446,10 +1281,10 @@
                    MakeObjectMapAccessor (&LteEnbRrc::m_ueMap),
                    MakeObjectMapChecker<UeManager> ())
     .AddAttribute ("DefaultTransmissionMode",
-                  "The default UEs' transmission mode (0: SISO)",
-                  UintegerValue (0),  // default tx-mode
-                  MakeUintegerAccessor (&LteEnbRrc::m_defaultTransmissionMode),
-                  MakeUintegerChecker<uint8_t> ())
+                   "The default UEs' transmission mode (0: SISO)",
+                   UintegerValue (0),  // default tx-mode
+                   MakeUintegerAccessor (&LteEnbRrc::m_defaultTransmissionMode),
+                   MakeUintegerChecker<uint8_t> ())
     .AddAttribute ("EpsBearerToRlcMapping", 
                    "Specify which type of RLC will be used for each type of EPS bearer. ",
                    EnumValue (RLC_SM_ALWAYS),
@@ -1460,65 +1295,85 @@
                                     PER_BASED,     "PacketErrorRateBased"))
     .AddAttribute ("SystemInformationPeriodicity",
                    "The interval for sending system information (Time value)",
-                   TimeValue (MilliSeconds (80)),  
+                   TimeValue (MilliSeconds (80)),
                    MakeTimeAccessor (&LteEnbRrc::m_systemInformationPeriodicity),
                    MakeTimeChecker ())
+
+    // SRS related attributes
     .AddAttribute ("SrsPeriodicity",
                    "The SRS periodicity in milliseconds",
-                   UintegerValue (40),  
+                   UintegerValue (40),
                    MakeUintegerAccessor (&LteEnbRrc::SetSrsPeriodicity, 
                                          &LteEnbRrc::GetSrsPeriodicity),
                    MakeUintegerChecker<uint32_t> ())
+
+    // Timeout related attributes
     .AddAttribute ("ConnectionTimeoutDuration",
                    "After a RA attempt, if no RRC Connection Request is received before this time, the UE context is destroyed. Must account for reception of RAR and transmission of RRC CONNECTION REQUEST over UL GRANT.",
-                   TimeValue (MilliSeconds (15)),  
+                   TimeValue (MilliSeconds (15)),
                    MakeTimeAccessor (&LteEnbRrc::m_connectionTimeoutDuration),
                    MakeTimeChecker ())
     .AddAttribute ("ConnectionRejectedTimeoutDuration",
                    "Time to wait between sending a RRC CONNECTION REJECT and destroying the UE context",
-                   TimeValue (MilliSeconds (30)),  
+                   TimeValue (MilliSeconds (30)),
                    MakeTimeAccessor (&LteEnbRrc::m_connectionRejectedTimeoutDuration),
                    MakeTimeChecker ())
     .AddAttribute ("HandoverJoiningTimeoutDuration",
                    "After accepting a handover request, if no RRC Connection Reconfiguration Completed is received before this time, the UE context is destroyed. Must account for reception of X2 HO REQ ACK by source eNB, transmission of the Handover Command, non-contention-based random access and reception of the RRC Connection Reconfiguration Completed message.",
-                   TimeValue (MilliSeconds (200)),  
+                   TimeValue (MilliSeconds (200)),
                    MakeTimeAccessor (&LteEnbRrc::m_handoverJoiningTimeoutDuration),
                    MakeTimeChecker ())
     .AddAttribute ("HandoverLeavingTimeoutDuration",
                    "After issuing a Handover Command, if neither RRC Connection Reestablishment nor X2 UE Context Release has been previously received, the UE context is destroyed.",
-                   TimeValue (MilliSeconds (500)),  
+                   TimeValue (MilliSeconds (500)),
                    MakeTimeAccessor (&LteEnbRrc::m_handoverLeavingTimeoutDuration),
                    MakeTimeChecker ())
-   .AddAttribute ("AdmitHandoverRequest",
+
+    // Cell selection related attribute
+   .AddAttribute ("QRxLevMin",
+                  "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. The default value -70 corresponds to -140 dBm and is "
+                  "the lowest possible value as defined by Section 6.3.4 of "
+                  "3GPP TS 36.133. This restriction, however, only applies to "
+                  "initial cell selection and EPC-enabled simulation.",
+                  TypeId::ATTR_GET | TypeId::ATTR_CONSTRUCT,
+                  IntegerValue (-70),
+                  MakeIntegerAccessor (&LteEnbRrc::m_qRxLevMin),
+                  MakeIntegerChecker<int8_t> (-70, -22))
+
+    // Handover related attributes
+    .AddAttribute ("AdmitHandoverRequest",
                    "Whether to admit an X2 handover request from another eNB",
-                   BooleanValue (true),  
+                   BooleanValue (true),
                    MakeBooleanAccessor (&LteEnbRrc::m_admitHandoverRequest),
-                   MakeBooleanChecker ()) 
-   .AddAttribute ("AdmitRrcConnectionRequest",
-                   "Whether to admit a connection request from a Ue",
-                   BooleanValue (true),  
+                   MakeBooleanChecker ())
+    .AddAttribute ("AdmitRrcConnectionRequest",
+                   "Whether to admit a connection request from a UE",
+                   BooleanValue (true),
                    MakeBooleanAccessor (&LteEnbRrc::m_admitRrcConnectionRequest),
                    MakeBooleanChecker ())
-    .AddAttribute ("EventA2Threshold",
-                   "Threshold of the event A2 (Serving becomes worse than threshold)",
-                   UintegerValue (34),
-                   MakeUintegerAccessor (&LteEnbRrc::m_eventA2Threshold),
-                   MakeUintegerChecker<uint8_t> ())
-    .AddAttribute ("EventA4Threshold",
-                   "Threshold of the event A4 (Neighbour becomes better than threshold)",
-                   UintegerValue (0),
-                   MakeUintegerAccessor (&LteEnbRrc::m_eventA4Threshold),
-                   MakeUintegerChecker<uint8_t> ())
-    .AddAttribute ("ServingCellHandoverThreshold",
-                   "If serving cell is worse than this threshold, neighbour cells are consider for Handover",
-                   UintegerValue (15),
-                   MakeUintegerAccessor (&LteEnbRrc::m_servingCellHandoverThreshold),
-                   MakeUintegerChecker<uint8_t> ())
-    .AddAttribute ("NeighbourCellHandoverOffset",
-                   "Minimum offset between serving and best neighbour cell to trigger the Handover",
-                   UintegerValue (1),
-                   MakeUintegerAccessor (&LteEnbRrc::m_neighbourCellHandoverOffset),
-                   MakeUintegerChecker<uint8_t> ())
+
+    // UE measurements related attributes
+    .AddAttribute ("RsrpFilterCoefficient",
+                   "Determines the strength of smoothing effect induced by "
+                   "layer 3 filtering of RSRP in all attached UE; "
+                   "if set to 0, no layer 3 filtering is applicable",
+                   // i.e. the variable k in 3GPP TS 36.331 section 5.5.3.2
+                   UintegerValue (4),
+                   MakeUintegerAccessor (&LteEnbRrc::m_rsrpFilterCoefficient),
+                   MakeUintegerChecker<uint8_t> (0))
+    .AddAttribute ("RsrqFilterCoefficient",
+                   "Determines the strength of smoothing effect induced by "
+                   "layer 3 filtering of RSRQ in all attached UE; "
+                   "if set to 0, no layer 3 filtering is applicable",
+                   // i.e. the variable k in 3GPP TS 36.331 section 5.5.3.2
+                   UintegerValue (4),
+                   MakeUintegerAccessor (&LteEnbRrc::m_rsrqFilterCoefficient),
+                   MakeUintegerChecker<uint8_t> (0))
+
+    // Trace sources
     .AddTraceSource ("NewUeContext",
                      "trace fired upon creation of a new UE context",
                      MakeTraceSourceAccessor (&LteEnbRrc::m_newUeContextTrace))
@@ -1570,6 +1425,34 @@
 }
 
 void
+LteEnbRrc::SetLteHandoverManagementSapProvider (LteHandoverManagementSapProvider * s)
+{
+  NS_LOG_FUNCTION (this << s);
+  m_handoverManagementSapProvider = s;
+}
+
+LteHandoverManagementSapUser*
+LteEnbRrc::GetLteHandoverManagementSapUser ()
+{
+  NS_LOG_FUNCTION (this);
+  return m_handoverManagementSapUser;
+}
+
+void
+LteEnbRrc::SetLteAnrSapProvider (LteAnrSapProvider * s)
+{
+  NS_LOG_FUNCTION (this << s);
+  m_anrSapProvider = s;
+}
+
+LteAnrSapUser*
+LteEnbRrc::GetLteAnrSapUser ()
+{
+  NS_LOG_FUNCTION (this);
+  return m_anrSapUser;
+}
+
+void
 LteEnbRrc::SetLteEnbRrcSapUser (LteEnbRrcSapUser * s)
 {
   NS_LOG_FUNCTION (this << s);
@@ -1622,15 +1505,105 @@
 {
   NS_LOG_FUNCTION (this << (uint32_t) rnti);
   NS_ASSERT (0 != rnti);
-  std::map<uint16_t, Ptr<UeManager> >::iterator it = m_ueMap.find (rnti);  
+  std::map<uint16_t, Ptr<UeManager> >::iterator it = m_ueMap.find (rnti);
   NS_ASSERT_MSG (it != m_ueMap.end (), "RNTI " << rnti << " not found in eNB with cellId " << m_cellId);
   return it->second;
 }
 
-void
-LteEnbRrc::ConfigureCell (uint8_t ulBandwidth, uint8_t dlBandwidth, uint16_t ulEarfcn, uint16_t dlEarfcn, uint16_t cellId)
+uint8_t
+LteEnbRrc::AddUeMeasReportConfig (LteRrcSap::ReportConfigEutra config)
 {
   NS_LOG_FUNCTION (this);
+
+  // SANITY CHECK
+
+  NS_ASSERT_MSG (m_ueMeasConfig.measIdToAddModList.size () == m_ueMeasConfig.reportConfigToAddModList.size (),
+                 "Measurement identities and reporting configuration should not have different quantity");
+
+  if (Simulator::Now () != Seconds (0))
+    {
+      NS_FATAL_ERROR ("AddUeMeasReportConfig may not be called after the simulation has run");
+    }
+
+  // INPUT VALIDATION
+
+  switch (config.triggerQuantity)
+    {
+    case LteRrcSap::ReportConfigEutra::RSRP:
+      if ((config.eventId == LteRrcSap::ReportConfigEutra::EVENT_A5)
+          && (config.threshold2.choice != LteRrcSap::ThresholdEutra::THRESHOLD_RSRP))
+        {
+          NS_FATAL_ERROR ("The given triggerQuantity (RSRP) does not match with the given threshold2.choice");
+        }
+
+      if (((config.eventId == LteRrcSap::ReportConfigEutra::EVENT_A1)
+           || (config.eventId == LteRrcSap::ReportConfigEutra::EVENT_A2)
+           || (config.eventId == LteRrcSap::ReportConfigEutra::EVENT_A4)
+           || (config.eventId == LteRrcSap::ReportConfigEutra::EVENT_A5))
+          && (config.threshold1.choice != LteRrcSap::ThresholdEutra::THRESHOLD_RSRP))
+        {
+          NS_FATAL_ERROR ("The given triggerQuantity (RSRP) does not match with the given threshold1.choice");
+        }
+      break;
+
+    case LteRrcSap::ReportConfigEutra::RSRQ:
+      if ((config.eventId == LteRrcSap::ReportConfigEutra::EVENT_A5)
+          && (config.threshold2.choice != LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ))
+        {
+          NS_FATAL_ERROR ("The given triggerQuantity (RSRQ) does not match with the given threshold2.choice");
+        }
+
+      if (((config.eventId == LteRrcSap::ReportConfigEutra::EVENT_A1)
+           || (config.eventId == LteRrcSap::ReportConfigEutra::EVENT_A2)
+           || (config.eventId == LteRrcSap::ReportConfigEutra::EVENT_A4)
+           || (config.eventId == LteRrcSap::ReportConfigEutra::EVENT_A5))
+          && (config.threshold1.choice != LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ))
+        {
+          NS_FATAL_ERROR ("The given triggerQuantity (RSRQ) does not match with the given threshold1.choice");
+        }
+      break;
+
+    default:
+      NS_FATAL_ERROR ("unsupported triggerQuantity");
+      break;
+    }
+
+  if (config.purpose != LteRrcSap::ReportConfigEutra::REPORT_STRONGEST_CELLS)
+    {
+      NS_FATAL_ERROR ("Only REPORT_STRONGEST_CELLS purpose is supported");
+    }
+
+  if (config.reportQuantity != LteRrcSap::ReportConfigEutra::BOTH)
+    {
+      NS_LOG_WARN ("reportQuantity = BOTH will be used instead of the given reportQuantity");
+    }
+
+  uint8_t nextId = m_ueMeasConfig.reportConfigToAddModList.size () + 1;
+
+  // create the reporting configuration
+  LteRrcSap::ReportConfigToAddMod reportConfig;
+  reportConfig.reportConfigId = nextId;
+  reportConfig.reportConfigEutra = config;
+
+  // create the measurement identity
+  LteRrcSap::MeasIdToAddMod measId;
+  measId.measId = nextId;
+  measId.measObjectId = 1;
+  measId.reportConfigId = nextId;
+
+  // add both to the list of UE measurement configuration
+  m_ueMeasConfig.reportConfigToAddModList.push_back (reportConfig);
+  m_ueMeasConfig.measIdToAddModList.push_back (measId);
+
+  return nextId;
+}
+
+void
+LteEnbRrc::ConfigureCell (uint8_t ulBandwidth, uint8_t dlBandwidth,
+                          uint16_t ulEarfcn, uint16_t dlEarfcn, uint16_t cellId)
+{
+  NS_LOG_FUNCTION (this << (uint16_t) ulBandwidth << (uint16_t) dlBandwidth
+                        << ulEarfcn << dlEarfcn << cellId);
   NS_ASSERT (!m_configured);
   m_cmacSapProvider->ConfigureMac (ulBandwidth, dlBandwidth);
   m_cphySapProvider->SetBandwidth (ulBandwidth, dlBandwidth);
@@ -1641,13 +1614,54 @@
   m_ulBandwidth = ulBandwidth;
   m_cellId = cellId;
   m_cphySapProvider->SetCellId (cellId);
+
+  /*
+   * Initializing the list of UE measurement configuration (m_ueMeasConfig).
+   * Only intra-frequency measurements are supported, so only one measurement
+   * object is created.
+   */
+
+  LteRrcSap::MeasObjectToAddMod measObject;
+  measObject.measObjectId = 1;
+  measObject.measObjectEutra.carrierFreq = m_dlEarfcn;
+  measObject.measObjectEutra.allowedMeasBandwidth = m_dlBandwidth;
+  measObject.measObjectEutra.presenceAntennaPort1 = false;
+  measObject.measObjectEutra.neighCellConfig = 0;
+  measObject.measObjectEutra.offsetFreq = 0;
+  measObject.measObjectEutra.haveCellForWhichToReportCGI = false;
+
+  m_ueMeasConfig.measObjectToAddModList.push_back (measObject);
+  m_ueMeasConfig.haveQuantityConfig = true;
+  m_ueMeasConfig.quantityConfig.filterCoefficientRSRP = m_rsrpFilterCoefficient;
+  m_ueMeasConfig.quantityConfig.filterCoefficientRSRQ = m_rsrqFilterCoefficient;
+  m_ueMeasConfig.haveMeasGapConfig = false;
+  m_ueMeasConfig.haveSmeasure = false;
+  m_ueMeasConfig.haveSpeedStatePars = false;
+
+  // Enabling MIB transmission
   LteRrcSap::MasterInformationBlock mib;
   mib.dlBandwidth = m_dlBandwidth;
   m_cphySapProvider->SetMasterInformationBlock (mib);
-  m_configured = true;
 
-  // the first time System Information is sent
+  // Enabling SIB1 transmission with default values
+  m_sib1.cellAccessRelatedInfo.cellIdentity = cellId;
+  m_sib1.cellAccessRelatedInfo.csgIndication = false;
+  m_sib1.cellAccessRelatedInfo.csgIdentity = 0;
+  m_sib1.cellAccessRelatedInfo.plmnIdentityInfo.plmnIdentity = 0; // not used
+  m_sib1.cellSelectionInfo.qQualMin = -34; // not used, set as minimum value
+  m_sib1.cellSelectionInfo.qRxLevMin = m_qRxLevMin; // set as minimum value
+  m_cphySapProvider->SetSystemInformationBlockType1 (m_sib1);
+
+  /*
+   * Enabling transmission of other SIB. The first time System Information is
+   * transmitted is arbitrarily assumed to be at +0.016s, and then it will be
+   * regularly transmitted every 80 ms by default (set the
+   * SystemInformationPeriodicity attribute to configure this).
+   */
   Simulator::Schedule (MilliSeconds (16), &LteEnbRrc::SendSystemInformation, this);
+
+  m_configured = true;
+
 }
 
 
@@ -1655,6 +1669,10 @@
 LteEnbRrc::SetCellId (uint16_t cellId)
 {
   m_cellId = cellId;
+
+  // update SIB1 too
+  m_sib1.cellAccessRelatedInfo.cellIdentity = cellId;
+  m_cphySapProvider->SetSystemInformationBlockType1 (m_sib1);
 }
 
 bool
@@ -1667,7 +1685,7 @@
   NS_ASSERT_MSG (found, "no EpsBearerTag found in packet to be sent");
   Ptr<UeManager> ueManager = GetUeManager (tag.GetRnti ());
   ueManager->SendData (tag.GetBid (), packet);
-  
+
   return true;
 }
 
@@ -1736,8 +1754,7 @@
 LteEnbRrc::DoRecvRrcConnectionRequest (uint16_t rnti, LteRrcSap::RrcConnectionRequest msg)
 {
   NS_LOG_FUNCTION (this << rnti);
-  
-    GetUeManager (rnti)->RecvRrcConnectionRequest (msg);
+  GetUeManager (rnti)->RecvRrcConnectionRequest (msg);
 }
 
 void
@@ -2016,6 +2033,67 @@
 }
 
 
+uint8_t
+LteEnbRrc::DoAddUeMeasReportConfigForHandover (LteRrcSap::ReportConfigEutra reportConfig)
+{
+  NS_LOG_FUNCTION (this);
+  uint8_t measId = AddUeMeasReportConfig (reportConfig);
+  m_handoverMeasIds.insert (measId);
+  return measId;
+}
+
+void
+LteEnbRrc::DoTriggerHandover (uint16_t rnti, uint16_t targetCellId)
+{
+  NS_LOG_FUNCTION (this << rnti << targetCellId);
+
+  bool isHandoverAllowed = true;
+
+  if (m_anrSapProvider != 0)
+    {
+      // ensure that proper neighbour relationship exists between source and target cells
+      bool noHo = m_anrSapProvider->GetNoHo (targetCellId);
+      bool noX2 = m_anrSapProvider->GetNoX2 (targetCellId);
+      NS_LOG_DEBUG (this << " cellId=" << m_cellId
+                         << " targetCellId=" << targetCellId
+                         << " NRT.NoHo=" << noHo << " NRT.NoX2=" << noX2);
+
+      if (noHo || noX2)
+        {
+          isHandoverAllowed = false;
+          NS_LOG_LOGIC (this << " handover to cell " << targetCellId
+                             << " is not allowed by ANR");
+        }
+    }
+
+  Ptr<UeManager> ueManager = GetUeManager (rnti);
+  NS_ASSERT_MSG (ueManager != 0, "Cannot find UE context with RNTI " << rnti);
+
+  if (ueManager->GetState () != UeManager::CONNECTED_NORMALLY)
+    {
+      isHandoverAllowed = false;
+      NS_LOG_LOGIC (this << " handover is not allowed because the UE"
+                         << " rnti=" << rnti << " is in "
+                         << ToString (ueManager->GetState ()) << " state");
+    }
+
+  if (isHandoverAllowed)
+    {
+      // initiate handover execution
+      ueManager->PrepareHandover (targetCellId);
+    }
+}
+
+uint8_t
+LteEnbRrc::DoAddUeMeasReportConfigForAnr (LteRrcSap::ReportConfigEutra reportConfig)
+{
+  NS_LOG_FUNCTION (this);
+  uint8_t measId = AddUeMeasReportConfig (reportConfig);
+  m_anrMeasIds.insert (measId);
+  return measId;
+}
+
+
 
 uint16_t
 LteEnbRrc::AddUe (UeManager::State state)
@@ -2030,7 +2108,7 @@
       if ((rnti != 0) && (m_ueMap.find (rnti) == m_ueMap.end ()))
         {
           found = true;
-          break;        
+          break;
         }
     }
 
@@ -2060,7 +2138,7 @@
     }
   // need to do this after UeManager has been deleted
   RemoveSrsConfigurationIndex (srsCi); 
- }
+}
 
 TypeId
 LteEnbRrc::GetRlcType (EpsBearer bearer)
@@ -2100,17 +2178,21 @@
 void
 LteEnbRrc::AddX2Neighbour (uint16_t cellId)
 {
-  NS_LOG_FUNCTION (cellId);
-  NS_ASSERT_MSG (m_neighbourRelationTable.find (cellId) == m_neighbourRelationTable.end (),
-                 "There is already an entry in the Neighbour Relation Table for cellId " << cellId);
-
-  Ptr<NeighbourRelation> neighbourRelation = CreateObject <NeighbourRelation> ();
-  neighbourRelation->m_physCellId = cellId;
-  neighbourRelation->m_noRemove = true;
-  neighbourRelation->m_noHo = true;
-  neighbourRelation->m_noX2 = false;
-  neighbourRelation->m_detectedAsNeighbour = false;
-  m_neighbourRelationTable[cellId] = neighbourRelation;
+  NS_LOG_FUNCTION (this << cellId);
+
+  if (m_anrSapProvider != 0)
+    {
+      m_anrSapProvider->AddNeighbourRelation (cellId);
+    }
+}
+
+void
+LteEnbRrc::SetCsgId (uint32_t csgId, bool csgIndication)
+{
+  NS_LOG_FUNCTION (this << csgId << csgIndication);
+  m_sib1.cellAccessRelatedInfo.csgIdentity = csgId;
+  m_sib1.cellAccessRelatedInfo.csgIndication = csgIndication;
+  m_cphySapProvider->SetSystemInformationBlockType1 (m_sib1);
 }
 
 
@@ -2236,14 +2318,17 @@
 void
 LteEnbRrc::SendSystemInformation ()
 {
-//   NS_LOG_FUNCTION (this);
-  // for simplicity, we use the same periodicity for all sibs
-  // note that in real systems the periodicy of each sibs could be different
+  // NS_LOG_FUNCTION (this);
+
+  /*
+   * For simplicity, we use the same periodicity for all SIBs. Note that in real
+   * systems the periodicy of each SIBs could be different.
+   */
   LteRrcSap::SystemInformation si;
   si.haveSib2 = true;
   si.sib2.freqInfo.ulCarrierFreq = m_ulEarfcn;
   si.sib2.freqInfo.ulBandwidth = m_ulBandwidth;
-  
+
   LteEnbCmacSapProvider::RachConfig rc = m_cmacSapProvider->GetRachConfig ();
   LteRrcSap::RachConfigCommon rachConfigCommon;
   rachConfigCommon.preambleInfo.numberOfRaPreambles = rc.numberOfRaPreambles;
@@ -2255,5 +2340,6 @@
   Simulator::Schedule (m_systemInformationPeriodicity, &LteEnbRrc::SendSystemInformation, this);
 }
 
+
 } // namespace ns3
 
diff -Naur ns-3.18.1/src/lte/model/lte-enb-rrc.h ns-3.19/src/lte/model/lte-enb-rrc.h
--- ns-3.18.1/src/lte/model/lte-enb-rrc.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-enb-rrc.h	2013-12-20 09:44:51.000000000 -0800
@@ -25,17 +25,20 @@
 
 #include <ns3/nstime.h>
 #include <ns3/object.h>
-#include <ns3/packet.h>
+#include <ns3/traced-callback.h>
+#include <ns3/event-id.h>
+
 #include <ns3/lte-enb-cmac-sap.h>
 #include <ns3/lte-mac-sap.h>
 #include <ns3/ff-mac-sched-sap.h>
+#include <ns3/ff-mac-csched-sap.h>
 #include <ns3/lte-pdcp-sap.h>
 #include <ns3/epc-x2-sap.h>
 #include <ns3/epc-enb-s1-sap.h>
+#include <ns3/lte-handover-management-sap.h>
 #include <ns3/lte-enb-cphy-sap.h>
 #include <ns3/lte-rrc-sap.h>
-#include <ns3/traced-callback.h>
-#include <ns3/event-id.h>
+#include <ns3/lte-anr-sap.h>
 
 #include <map>
 #include <set>
@@ -45,38 +48,10 @@
 class LteRadioBearerInfo;
 class LteSignalingRadioBearerInfo;
 class LteDataRadioBearerInfo;
-class EpcEnbS1SapUser;
-class EpcEnbS1SapProvider;
-class LteUeRrc;
 class LteEnbRrc;
+class Packet;
 
 
-/**
- * Neighbour Relation between two eNBs (serving eNB and neighbour eNB)
- * See XXXXX for more info
- */
-class NeighbourRelation : public Object
-{
-public:
-  uint16_t  m_physCellId;
-  bool      m_noRemove;
-  bool      m_noHo;
-  bool      m_noX2;
-  bool      m_detectedAsNeighbour;
-};
-
-/**
- * Measurements reported by a UE for a cellId
- * The values are quantized according 3GPP TS XXXXX
- */
-class UeMeasure : public Object
-{
-public:
-  uint16_t  m_cellId;
-  uint8_t   m_rsrp;
-  uint8_t   m_rsrq;
-};
-
 
 /**
  * Manages all the radio bearer information possessed by the ENB RRC for a single UE
@@ -94,19 +69,19 @@
    * 
    */
   enum State
-    {
-      INITIAL_RANDOM_ACCESS = 0,
-      CONNECTION_SETUP,
-      CONNECTION_REJECTED,
-      CONNECTED_NORMALLY,
-      CONNECTION_RECONFIGURATION,
-      CONNECTION_REESTABLISHMENT,
-      HANDOVER_PREPARATION,
-      HANDOVER_JOINING,
-      HANDOVER_PATH_SWITCH,
-      HANDOVER_LEAVING,
-      NUM_STATES
-    };
+  {
+    INITIAL_RANDOM_ACCESS = 0,
+    CONNECTION_SETUP,
+    CONNECTION_REJECTED,
+    CONNECTED_NORMALLY,
+    CONNECTION_RECONFIGURATION,
+    CONNECTION_REESTABLISHMENT,
+    HANDOVER_PREPARATION,
+    HANDOVER_JOINING,
+    HANDOVER_PATH_SWITCH,
+    HANDOVER_LEAVING,
+    NUM_STATES
+  };
 
   UeManager ();
  
@@ -260,21 +235,31 @@
    */
   void RecvUeContextRelease (EpcX2SapUser::UeContextReleaseParams params); 
 
-  // methods forwarded from RRC SAP
+
+  // METHODS FORWARDED FROM ENB RRC SAP ///////////////////////////////////////
+
+  /// Part of the RRC protocol. Implement the LteEnbRrcSapProvider::CompleteSetupUe interface.
   void CompleteSetupUe (LteEnbRrcSapProvider::CompleteSetupUeParameters params);
+  /// Part of the RRC protocol. Implement the LteEnbRrcSapProvider::RecvRrcConnectionRequest interface.
   void RecvRrcConnectionRequest (LteRrcSap::RrcConnectionRequest msg);
+  /// Part of the RRC protocol. Implement the LteEnbRrcSapProvider::RecvRrcConnectionSetupCompleted interface.
   void RecvRrcConnectionSetupCompleted (LteRrcSap::RrcConnectionSetupCompleted msg);
+  /// Part of the RRC protocol. Implement the LteEnbRrcSapProvider::RecvRrcConnectionReconfigurationCompleted interface.
   void RecvRrcConnectionReconfigurationCompleted (LteRrcSap::RrcConnectionReconfigurationCompleted msg);
+  /// Part of the RRC protocol. Implement the LteEnbRrcSapProvider::RecvRrcConnectionReestablishmentRequest interface.
   void RecvRrcConnectionReestablishmentRequest (LteRrcSap::RrcConnectionReestablishmentRequest msg);
+  /// Part of the RRC protocol. Implement the LteEnbRrcSapProvider::RecvRrcConnectionReestablishmentComplete interface.
   void RecvRrcConnectionReestablishmentComplete (LteRrcSap::RrcConnectionReestablishmentComplete msg);
+  /// Part of the RRC protocol. Implement the LteEnbRrcSapProvider::RecvMeasurementReport interface.
   void RecvMeasurementReport (LteRrcSap::MeasurementReport msg);
 
 
-  // methods forwarded from CMAC SAP
+  // METHODS FORWARDED FROM ENB CMAC SAP //////////////////////////////////////
+
   void CmacUeConfigUpdateInd (LteEnbCmacSapUser::UeConfig cmacParams);
 
+  // METHODS FORWARDED FROM ENB PDCP SAP //////////////////////////////////////
 
-  // methods forwarded from PDCP SAP
   void DoReceivePdcpSdu (LtePdcpSapUser::ReceivePdcpSduParameters params);
   
   /** 
@@ -282,19 +267,19 @@
    * \return the RNTI, i.e., an UE identifier that is unique within
    * the cell
    */
-  uint16_t GetRnti (void);
+  uint16_t GetRnti (void) const;
 
   /** 
    *
    * \return the IMSI, i.e., a globally unique UE identifier
    */
-  uint64_t GetImsi (void);
+  uint64_t GetImsi (void) const;
 
   /** 
    * 
    * \return the SRS Configuration Index
    */
-  uint16_t GetSrsConfigurationIndex (void);  
+  uint16_t GetSrsConfigurationIndex (void) const;
 
   /** 
    * Set the SRS configuration index and do the necessary reconfiguration
@@ -307,7 +292,7 @@
    * 
    * \return the current state
    */
-  State GetState ();
+  State GetState () const;
 
 
 private:
@@ -341,7 +326,7 @@
    * current configuration
    */
   LteRrcSap::RrcConnectionReconfiguration BuildRrcConnectionReconfiguration ();
-  
+
   /** 
    * 
    * \return a RadioResourceConfigDedicated struct built based on the
@@ -351,14 +336,6 @@
 
   /** 
    * 
-   * \return a MeasConfig struct built based on the
-   * current configuration
-   */
-  LteRrcSap::MeasConfig BuildMeasConfig ();
-
-
-  /** 
-   * 
    * \return a newly allocated identifier for a new RRC transaction
    */
   uint8_t GetNewRrcTransactionIdentifier ();
@@ -438,13 +415,10 @@
   EventId m_handoverJoiningTimeout;
   EventId m_handoverLeavingTimeout;
 
-  Ptr<UeMeasure> m_servingCellMeasures;
-  //       cellid
-  std::map<uint16_t, Ptr<UeMeasure> > m_neighbourCellMeasures;
-
 };
 
 
+
 /**
  * \ingroup lte
  * 
@@ -454,6 +428,8 @@
 {
 
   friend class EnbRrcMemberLteEnbCmacSapUser;
+  friend class MemberLteHandoverManagementSapUser<LteEnbRrc>;
+  friend class MemberLteAnrSapUser<LteEnbRrc>;
   friend class MemberLteEnbRrcSapProvider<LteEnbRrc>;
   friend class MemberEpcEnbS1SapUser<LteEnbRrc>;
   friend class EpcX2SpecificEpcX2SapUser<LteEnbRrc>;
@@ -507,6 +483,36 @@
 
 
   /**
+   * set the Handover Management SAP this RRC should interact with
+   *
+   * \param s the Handover Management SAP Provider to be used by this RRC
+   */
+  void SetLteHandoverManagementSapProvider (LteHandoverManagementSapProvider * s);
+
+  /**
+   * Get the Handover Management SAP offered by this RRC
+   * \return s the Handover Management SAP User interface offered to the
+   *           handover algorithm by this RRC
+   */
+  LteHandoverManagementSapUser* GetLteHandoverManagementSapUser ();
+
+
+  /**
+   * set the ANR SAP this RRC should interact with
+   *
+   * \param s the ANR SAP Provider to be used by this RRC
+   */
+  void SetLteAnrSapProvider (LteAnrSapProvider * s);
+
+  /**
+   * Get the ANR SAP offered by this RRC
+   * \return s the ANR SAP User interface offered to the ANR instance by this
+   *           RRC
+   */
+  LteAnrSapUser* GetLteAnrSapUser ();
+
+
+  /**
    * set the RRC SAP this RRC should interact with
    *
    * \param s the RRC SAP User to be used by this RRC
@@ -568,20 +574,50 @@
   Ptr<UeManager> GetUeManager (uint16_t rnti);
 
   /**
-   * configure cell-specific parameters
+   * \brief Add a new UE measurement reporting configuration
+   * \param config the new reporting configuration
+   * \return the measurement ID (measId) referring to the newly added
+   *         reporting configuration
+   *
+   * Assuming intra-frequency environment, the new measurement reporting
+   * configuration will be automatically associated to the only measurement
+   * object (i.e., a new measurement identity will be automatically created).
    *
+   * Can only be called before the start of simulation.
+   */
+  uint8_t AddUeMeasReportConfig (LteRrcSap::ReportConfigEutra config);
+
+  /**
+   * \brief Configure cell-specific parameters.
    * \param ulBandwidth the uplink bandwidth in number of RB
    * \param dlBandwidth the downlink bandwidth in number of RB
    * \param ulEarfcn the UL EARFCN
    * \param dlEarfcn the DL EARFCN
    * \param cellId the ID of the cell
+   *
+   * Configure cell-specific parameters and propagate them to lower layers.
+   * The parameters include bandwidth, EARFCN (E-UTRA Absolute Radio Frequency
+   * Channel Number), and cell ID.
+   *
+   * In addition to parameter configuration, this function also performs several
+   * other tasks:
+   *  - Initializing UE measurement (i.e. measurement object and quantity
+   *    configuration), which is expected to be further configured through
+   *    `LteEnbRrc::AddUeMeasReportConfig`;
+   *  - Enabling MIB (Master Information Block) broadcast transmission
+   *  - Enabling SIB (System Information Block) broadcast transmission
+   *
+   * Typically runs when the eNodeB NetDevice is installed, for instance by
+   * `LteHelper::InstallEnbDevice` (i.e. before the simulation starts).
+   *
+   * \warning Raises an error when executed more than once.
    */
   void ConfigureCell (uint8_t ulBandwidth,
                       uint8_t dlBandwidth,
                       uint16_t ulEarfcn, 
                       uint16_t dlEarfcn,
                       uint16_t cellId);
-  
+
   /** 
    * set the cell id of this eNB
    * 
@@ -603,7 +639,6 @@
   /** 
    * set the callback used to forward data packets up the stack
    * 
-   * \param void 
    * \param cb 
    */
   void SetForwardUpCallback (Callback <void, Ptr<Packet> > cb);
@@ -646,8 +681,8 @@
    * by sending a handover request to the target eNB over the X2
    * interface 
    *
-   * \param imsi the id of the UE to be handed over 
-   * \param cellId the id of the target eNB
+   * \param rnti the ID of the UE to be handed over
+   * \param cellId the ID of the target eNB
    */
   void SendHandoverRequest (uint16_t rnti, uint16_t cellId);
 
@@ -663,21 +698,30 @@
 private:
 
 
-  // methods forwarded from RRC SAP
-  
+  // RRC SAP methods
+
+  /// Part of the RRC protocol. Forwarding LteEnbRrcSapProvider::CompleteSetupUe interface to UeManager::CompleteSetupUe
   void DoCompleteSetupUe (uint16_t rnti, LteEnbRrcSapProvider::CompleteSetupUeParameters params);
+  /// Part of the RRC protocol. Forwarding LteEnbRrcSapProvider::RecvRrcConnectionRequest interface to UeManager::RecvRrcConnectionRequest
   void DoRecvRrcConnectionRequest (uint16_t rnti, LteRrcSap::RrcConnectionRequest msg);
+  /// Part of the RRC protocol. Forwarding LteEnbRrcSapProvider::RecvRrcConnectionSetupCompleted interface to UeManager::RecvRrcConnectionSetupCompleted
   void DoRecvRrcConnectionSetupCompleted (uint16_t rnti, LteRrcSap::RrcConnectionSetupCompleted msg);
+  /// Part of the RRC protocol. Forwarding LteEnbRrcSapProvider::RecvRrcConnectionReconfigurationCompleted interface to UeManager::RecvRrcConnectionReconfigurationCompleted
   void DoRecvRrcConnectionReconfigurationCompleted (uint16_t rnti, LteRrcSap::RrcConnectionReconfigurationCompleted msg);
+  /// Part of the RRC protocol. Forwarding LteEnbRrcSapProvider::RecvRrcConnectionReestablishmentRequest interface to UeManager::RecvRrcConnectionReestablishmentRequest
   void DoRecvRrcConnectionReestablishmentRequest (uint16_t rnti, LteRrcSap::RrcConnectionReestablishmentRequest msg);
+  /// Part of the RRC protocol. Forwarding LteEnbRrcSapProvider::RecvRrcConnectionReestablishmentComplete interface to UeManager::RecvRrcConnectionReestablishmentComplete
   void DoRecvRrcConnectionReestablishmentComplete (uint16_t rnti, LteRrcSap::RrcConnectionReestablishmentComplete msg);
+  /// Part of the RRC protocol. Forwarding LteEnbRrcSapProvider::RecvMeasurementReport interface to UeManager::RecvMeasurementReport
   void DoRecvMeasurementReport (uint16_t rnti, LteRrcSap::MeasurementReport msg);
 
-
   // S1 SAP methods
+
   void DoDataRadioBearerSetupRequest (EpcEnbS1SapUser::DataRadioBearerSetupRequestParameters params);
-  void DoPathSwitchRequestAcknowledge (EpcEnbS1SapUser::PathSwitchRequestAcknowledgeParameters params);       
+  void DoPathSwitchRequestAcknowledge (EpcEnbS1SapUser::PathSwitchRequestAcknowledgeParameters params);
+
   // X2 SAP methods
+
   void DoRecvHandoverRequest (EpcX2SapUser::HandoverRequestParams params);
   void DoRecvHandoverRequestAck (EpcX2SapUser::HandoverRequestAckParams params);
   void DoRecvHandoverPreparationFailure (EpcX2SapUser::HandoverPreparationFailureParams params);
@@ -687,12 +731,21 @@
   void DoRecvResourceStatusUpdate (EpcX2SapUser::ResourceStatusUpdateParams params);
   void DoRecvUeData (EpcX2SapUser::UeDataParams params);
 
-
   // CMAC SAP methods
+
   uint16_t DoAllocateTemporaryCellRnti ();
   void DoNotifyLcConfigResult (uint16_t rnti, uint8_t lcid, bool success);
   void DoRrcConfigurationUpdateInd (LteEnbCmacSapUser::UeConfig params);
-  
+
+  // Handover Management SAP methods
+
+  uint8_t DoAddUeMeasReportConfigForHandover (LteRrcSap::ReportConfigEutra reportConfig);
+  void DoTriggerHandover (uint16_t rnti, uint16_t targetCellId);
+
+  // ANR SAP methods
+
+  uint8_t DoAddUeMeasReportConfigForAnr (LteRrcSap::ReportConfigEutra reportConfig);
+
 
   // Internal methods
 
@@ -730,7 +783,7 @@
   /** 
    * Add a neighbour with an X2 interface
    *
-   * \param cellid neighbouring cell id
+   * \param cellId neighbouring cell id
    */
   void AddX2Neighbour (uint16_t cellId);
 
@@ -746,6 +799,27 @@
    */
   uint32_t GetSrsPeriodicity () const;
 
+  /**
+   * \brief Associate this RRC entity with a particular CSG information.
+   * \param csgId the intended Closed Subscriber Group identity
+   * \param csgIndication if TRUE, only CSG members are allowed to access the
+   *                      cell
+   *
+   * CSG identity is a number identifying a Closed Subscriber Group which the
+   * cell belongs to. eNodeB is associated with a single CSG identity.
+   *
+   * The same CSG identity can also be associated to several UEs, which is
+   * equivalent as enlisting these UEs as the members of this particular CSG.
+   * When the CSG indication field is set to TRUE, only UEs which are members of
+   * the CSG (i.e. same CSG ID) can gain access to the eNodeB, therefore
+   * enforcing closed access mode. Otherwise, the eNodeB operates as a non-CSG
+   * cell and implements open access mode.
+   *
+   * This restriction only applies to initial cell selection and EPC-enabled
+   * simulation.
+   */
+  void SetCsgId (uint32_t csgId, bool csgIndication);
+
 private:
 
   /** 
@@ -804,6 +878,12 @@
   LteEnbCmacSapUser* m_cmacSapUser;
   LteEnbCmacSapProvider* m_cmacSapProvider;
 
+  LteHandoverManagementSapUser* m_handoverManagementSapUser;
+  LteHandoverManagementSapProvider* m_handoverManagementSapProvider;
+
+  LteAnrSapUser* m_anrSapUser;
+  LteAnrSapProvider* m_anrSapProvider;
+
   LteEnbRrcSapUser* m_rrcSapUser;
   LteEnbRrcSapProvider* m_rrcSapProvider;
 
@@ -823,46 +903,57 @@
   uint16_t m_ulBandwidth;
   uint16_t m_lastAllocatedRnti;
 
-  std::map<uint16_t, Ptr<UeManager> > m_ueMap;  
+  /// the System Information Block Type 1 that is currently broadcasted over BCH
+  LteRrcSap::SystemInformationBlockType1 m_sib1;
+
+  std::map<uint16_t, Ptr<UeManager> > m_ueMap;
+
+  /**
+   * \brief List of measurement configuration which are active in every UE
+   *        attached to this eNodeB instance.
+   */
+  LteRrcSap::MeasConfig m_ueMeasConfig;
+
+  std::set<uint8_t> m_handoverMeasIds;
+  std::set<uint8_t> m_anrMeasIds;
 
   struct X2uTeidInfo
   {
     uint16_t rnti;
     uint8_t drbid;
   };
-    
+
   //       TEID      RNTI, DRBID
-  std::map<uint32_t, X2uTeidInfo> m_x2uTeidInfoMap; 
-  
+  std::map<uint32_t, X2uTeidInfo> m_x2uTeidInfoMap;
+
   uint8_t m_defaultTransmissionMode;
 
   enum LteEpsBearerToRlcMapping_t m_epsBearerToRlcMapping;
 
   Time m_systemInformationPeriodicity;
-  
+
   // SRS related attributes
   uint16_t m_srsCurrentPeriodicityId;
   std::set<uint16_t> m_ueSrsConfigurationIndexSet;
   uint16_t m_lastAllocatedConfigurationIndex;
   bool m_reconfigureUes;
 
+  // Cell selection related attribute
+  int8_t m_qRxLevMin;
+
   // Handover related attributes
   bool m_admitHandoverRequest;
   bool m_admitRrcConnectionRequest;
-  uint8_t m_eventA2Threshold;
-  uint8_t m_eventA4Threshold;
-  uint8_t m_servingCellHandoverThreshold;
-  uint8_t m_neighbourCellHandoverOffset;
+
+  // UE measurements related attributes
+  uint8_t m_rsrpFilterCoefficient;
+  uint8_t m_rsrqFilterCoefficient;
 
   // timeouts
   Time m_connectionTimeoutDuration;
   Time m_connectionRejectedTimeoutDuration;
   Time m_handoverJoiningTimeoutDuration;
-  Time m_handoverLeavingTimeoutDuration;  
-
-  //       cellid
-  std::map<uint16_t, Ptr<NeighbourRelation> > m_neighbourRelationTable;
-
+  Time m_handoverLeavingTimeoutDuration;
 
   //             cellid    rnti   
   TracedCallback<uint16_t, uint16_t> m_newUeContextTrace;
diff -Naur ns-3.18.1/src/lte/model/lte-handover-algorithm.cc ns-3.19/src/lte/model/lte-handover-algorithm.cc
--- ns-3.18.1/src/lte/model/lte-handover-algorithm.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/model/lte-handover-algorithm.cc	2013-12-20 09:44:51.000000000 -0800
@@ -0,0 +1,60 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Budiarto Herman
+ *
+ * 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: Budiarto Herman <budiarto.herman@magister.fi>
+ *
+ */
+
+#include "lte-handover-algorithm.h"
+#include <ns3/log.h>
+
+NS_LOG_COMPONENT_DEFINE ("LteHandoverAlgorithm");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (LteHandoverAlgorithm)
+  ;
+
+
+LteHandoverAlgorithm::LteHandoverAlgorithm ()
+{
+}
+
+
+LteHandoverAlgorithm::~LteHandoverAlgorithm ()
+{
+}
+
+
+TypeId
+LteHandoverAlgorithm::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::LteHandoverAlgorithm")
+    .SetParent<Object> ()
+  ;
+  return tid;
+}
+
+
+void
+LteHandoverAlgorithm::DoDispose ()
+{
+}
+
+
+
+} // end of namespace ns3
diff -Naur ns-3.18.1/src/lte/model/lte-handover-algorithm.h ns-3.19/src/lte/model/lte-handover-algorithm.h
--- ns-3.18.1/src/lte/model/lte-handover-algorithm.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/model/lte-handover-algorithm.h	2013-12-20 09:44:51.000000000 -0800
@@ -0,0 +1,111 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Budiarto Herman
+ *
+ * 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: Budiarto Herman <budiarto.herman@magister.fi>
+ *
+ */
+
+#ifndef LTE_HANDOVER_ALGORITHM_H
+#define LTE_HANDOVER_ALGORITHM_H
+
+#include <ns3/object.h>
+#include <ns3/lte-rrc-sap.h>
+
+namespace ns3 {
+
+
+class LteHandoverManagementSapUser;
+class LteHandoverManagementSapProvider;
+
+
+/**
+ * \brief The abstract base class of a handover algorithm that operates using
+ *        the Handover Management SAP interface.
+ *
+ * Handover algorithm receives measurement reports from an eNode RRC instance
+ * and tells the eNodeB RRC instance when to do a handover.
+ *
+ * This class is an abstract class intended to be inherited by subclasses that
+ * implement its virtual methods. By inheriting from this abstract class, the
+ * subclasses gain the benefits of being compatible with the LteEnbNetDevice
+ * class, being accessible using namespace-based access through ns-3 Config
+ * subsystem, and being installed and configured by LteHelper class (see
+ * LteHelper::SetHandoverAlgorithmType and
+ * LteHelper::SetHandoverAlgorithmAttribute methods).
+ *
+ * The communication with the eNodeB RRC instance is done through the *Handover
+ * Management SAP* interface. The handover algorithm instance corresponds to the
+ * "provider" part of this interface, while the eNodeB RRC instance takes the
+ * role of the "user" part. The following code skeleton establishes the
+ * connection between both instances:
+ *
+ *     Ptr<LteEnbRrc> u = ...;
+ *     Ptr<LteHandoverAlgorithm> p = ...;
+ *     u->SetLteHandoverManagementSapProvider (p->GetLteHandoverManagementSapProvider ());
+ *     p->SetLteHandoverManagementSapUser (u->GetLteHandoverManagementSapUser ());
+ *
+ * However, user rarely needs to use the above code, since it has already been
+ * taken care by LteHelper::InstallEnbDevice.
+ *
+ * \sa LteHandoverManagementSapProvider, LteHandoverManagementSapUser
+ */
+class LteHandoverAlgorithm : public Object
+{
+public:
+  LteHandoverAlgorithm ();
+  virtual ~LteHandoverAlgorithm ();
+
+  // inherited from Object
+  static TypeId GetTypeId ();
+
+  /**
+   * \brief Set the "user" part of the Handover Management SAP interface that
+   *        this handover algorithm instance will interact with.
+   * \param s a reference to the "user" part of the interface, typically a
+   *          member of an LteEnbRrc instance
+   */
+  virtual void SetLteHandoverManagementSapUser (LteHandoverManagementSapUser* s) = 0;
+
+  /**
+   * \brief Export the "provider" part of the Handover Management SAP interface.
+   * \return the reference to the "provider" part of the interface, typically to
+   *         be kept by an LteEnbRrc instance
+   */
+  virtual LteHandoverManagementSapProvider* GetLteHandoverManagementSapProvider () = 0;
+
+protected:
+
+  // inherited from Object
+  virtual void DoDispose ();
+
+  // HANDOVER MANAGEMENT SAP PROVIDER IMPLEMENTATION
+
+  /**
+   * \brief Implementation of LteHandoverManagementSapProvider::ReportUeMeas.
+   * \param rnti Radio Network Temporary Identity, an integer identifying the UE
+   *             where the report originates from
+   * \param measResults a single report of one measurement identity
+   */
+  virtual void DoReportUeMeas (uint16_t rnti, LteRrcSap::MeasResults measResults) = 0;
+
+}; // end of class LteHandoverAlgorithm
+
+
+} // end of namespace ns3
+
+
+#endif /* LTE_HANDOVER_ALGORITHM_H */
diff -Naur ns-3.18.1/src/lte/model/lte-handover-management-sap.cc ns-3.19/src/lte/model/lte-handover-management-sap.cc
--- ns-3.18.1/src/lte/model/lte-handover-management-sap.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/model/lte-handover-management-sap.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,37 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Budiarto Herman
+ *
+ * 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: Budiarto Herman <budiarto.herman@magister.fi>
+ *
+ */
+
+#include "lte-handover-management-sap.h"
+
+namespace ns3 {
+
+
+LteHandoverManagementSapProvider::~LteHandoverManagementSapProvider ()
+{
+}
+
+
+LteHandoverManagementSapUser::~LteHandoverManagementSapUser ()
+{
+}
+
+
+} // end of namespace ns3
diff -Naur ns-3.18.1/src/lte/model/lte-handover-management-sap.h ns-3.19/src/lte/model/lte-handover-management-sap.h
--- ns-3.18.1/src/lte/model/lte-handover-management-sap.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/model/lte-handover-management-sap.h	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,194 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Budiarto Herman
+ *
+ * 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: Budiarto Herman <budiarto.herman@magister.fi>
+ *
+ */
+
+#ifndef LTE_HANDOVER_MANAGEMENT_SAP_H
+#define LTE_HANDOVER_MANAGEMENT_SAP_H
+
+#include <ns3/lte-rrc-sap.h>
+
+namespace ns3 {
+
+
+/**
+ * \brief Service Access Point (SAP) offered by the handover algorithm instance
+ *        to the eNodeB RRC instance.
+ *
+ * This is the *Handover Management SAP Provider*, i.e., the part of the SAP
+ * that contains the handover algorithm methods called by the eNodeB RRC
+ * instance.
+ */
+class LteHandoverManagementSapProvider
+{
+public:
+  virtual ~LteHandoverManagementSapProvider ();
+
+  /**
+   * \brief Send a UE measurement report to handover algorithm.
+   * \param rnti Radio Network Temporary Identity, an integer identifying the UE
+   *             where the report originates from
+   * \param measResults a single report of one measurement identity
+   *
+   * The received measurement report is a result of the UE measurement
+   * configuration previously configured by calling
+   * LteHandoverManagementSapUser::AddUeMeasReportConfigForHandover. The report
+   * may be stored and utilised for the purpose of making handover decision.
+   */
+  virtual void ReportUeMeas (uint16_t rnti,
+                             LteRrcSap::MeasResults measResults) = 0;
+
+}; // end of class LteHandoverManagementSapProvider
+
+
+/**
+ * \brief Service Access Point (SAP) offered by the eNodeB RRC instance to the
+ *        handover algorithm instance.
+ *
+ * This is the *Handover Management SAP User*, i.e., the part of the SAP that
+ * contains the eNodeB RRC methods called by the handover algorithm instance.
+ */
+class LteHandoverManagementSapUser
+{
+public:
+  virtual ~LteHandoverManagementSapUser ();
+
+  /**
+   * \brief Request a certain reporting configuration to be fulfilled by the UEs
+   *        attached to the eNodeB entity.
+   * \param reportConfig the UE measurement reporting configuration
+   * \return the measurement identity associated with this newly added
+   *         reporting configuration
+   *
+   * The eNodeB RRC entity is expected to configure the same reporting
+   * configuration in each of the attached UEs. When later in the simulation a
+   * UE measurement report is received from a UE as a result of this
+   * configuration, the eNodeB RRC entity shall forward this report to the
+   * handover algorithm through the LteHandoverManagementSapProvider::ReportUeMeas
+   * SAP function.
+   *
+   * \note This function is only valid before the simulation begins.
+   */
+  virtual uint8_t AddUeMeasReportConfigForHandover (LteRrcSap::ReportConfigEutra reportConfig) = 0;
+
+  /**
+   * \brief Instruct the eNodeB RRC entity to prepare a handover.
+   * \param rnti Radio Network Temporary Identity, an integer identifying the
+   *             UE which shall perform the handover
+   * \param targetCellId the cell ID of the target eNodeB
+   *
+   * This function is used by the handover algorithm entity when a handover
+   * decision has been reached.
+   *
+   * The process to produce the decision is up to the implementation of handover
+   * algorithm. It is typically based on the reported UE measurements, which are
+   * received through the LteHandoverManagementSapProvider::ReportUeMeas function.
+   */
+  virtual void TriggerHandover (uint16_t rnti, uint16_t targetCellId) = 0;
+
+}; // end of class LteHandoverManagementSapUser
+
+
+
+/**
+ * \brief Template for the implementation of the LteHandoverManagementSapProvider
+ *        as a member of an owner class of type C to which all methods are
+ *        forwarded.
+ */
+template <class C>
+class MemberLteHandoverManagementSapProvider : public LteHandoverManagementSapProvider
+{
+public:
+  MemberLteHandoverManagementSapProvider (C* owner);
+
+  // inherited from LteHandoverManagemenrSapProvider
+  virtual void ReportUeMeas (uint16_t rnti, LteRrcSap::MeasResults measResults);
+
+private:
+  MemberLteHandoverManagementSapProvider ();
+  C* m_owner;
+
+}; // end of class MemberLteHandoverManagementSapProvider
+
+
+template <class C>
+MemberLteHandoverManagementSapProvider<C>::MemberLteHandoverManagementSapProvider (C* owner)
+  : m_owner (owner)
+{
+}
+
+
+template <class C>
+void
+MemberLteHandoverManagementSapProvider<C>::ReportUeMeas (uint16_t rnti, LteRrcSap::MeasResults measResults)
+{
+  m_owner->DoReportUeMeas (rnti, measResults);
+}
+
+
+
+/**
+ * \brief Template for the implementation of the LteHandoverManagementSapUser
+ *        as a member of an owner class of type C to which all methods are
+ *        forwarded.
+ */
+template <class C>
+class MemberLteHandoverManagementSapUser : public LteHandoverManagementSapUser
+{
+public:
+  MemberLteHandoverManagementSapUser (C* owner);
+
+  // inherited from LteHandoverManagementSapUser
+  virtual uint8_t AddUeMeasReportConfigForHandover (LteRrcSap::ReportConfigEutra reportConfig);
+  virtual void TriggerHandover (uint16_t rnti, uint16_t targetCellId);
+
+private:
+  MemberLteHandoverManagementSapUser ();
+  C* m_owner;
+
+}; // end of class MemberLteAnrSapUser
+
+
+template <class C>
+MemberLteHandoverManagementSapUser<C>::MemberLteHandoverManagementSapUser (C* owner)
+  : m_owner (owner)
+{
+}
+
+
+template <class C>
+uint8_t
+MemberLteHandoverManagementSapUser<C>::AddUeMeasReportConfigForHandover (LteRrcSap::ReportConfigEutra reportConfig)
+{
+  return m_owner->DoAddUeMeasReportConfigForHandover (reportConfig);
+}
+
+
+template <class C>
+void
+MemberLteHandoverManagementSapUser<C>::TriggerHandover (uint16_t rnti, uint16_t targetCellId)
+{
+  return m_owner->DoTriggerHandover (rnti, targetCellId);
+}
+
+
+} // end of namespace ns3
+
+
+#endif /* LTE_HANDOVER_MANAGEMENT_SAP_H */
diff -Naur ns-3.18.1/src/lte/model/lte-harq-phy.cc ns-3.19/src/lte/model/lte-harq-phy.cc
--- ns-3.18.1/src/lte/model/lte-harq-phy.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-harq-phy.cc	2013-12-20 09:44:50.000000000 -0800
@@ -27,7 +27,8 @@
 
 namespace ns3 {
 
-//NS_OBJECT_ENSURE_REGISTERED (LteHarqPhy);
+//NS_OBJECT_ENSURE_REGISTERED (LteHarqPhy)
+//  ;
 
 
 LteHarqPhy::LteHarqPhy ()
diff -Naur ns-3.18.1/src/lte/model/lte-harq-phy.h ns-3.19/src/lte/model/lte-harq-phy.h
--- ns-3.18.1/src/lte/model/lte-harq-phy.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-harq-phy.h	2013-12-20 09:44:50.000000000 -0800
@@ -88,8 +88,8 @@
   /**
   * \brief Return the info of the HARQ procId in case of retranmissions
   * for UL (asynchronous)
+  * \param rnti the RNTI of the transmitter
   * \param harqProcId the HARQ proc id
-  * \param layer layer no. (for MIMO spatail multiplexing)
   * \return the vector of the info related to HARQ proc Id
   */
   HarqProcessInfoList_t GetHarqProcessInfoUl (uint16_t rnti, uint8_t harqProcId);
diff -Naur ns-3.18.1/src/lte/model/lte-mi-error-model.cc ns-3.19/src/lte/model/lte-mi-error-model.cc
--- ns-3.18.1/src/lte/model/lte-mi-error-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-mi-error-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -328,62 +328,72 @@
   
   double MI;
   double MIsum = 0.0;
+  SpectrumValue sinrCopy = sinr;
   
   for (uint32_t i = 0; i < map.size (); i++)
     {
-      SpectrumValue sinrCopy = sinr;
       double sinrLin = sinrCopy[map.at (i)];
       if (mcs <= MI_QPSK_MAX_ID) // QPSK
         {
-          int tr = 0;
-          while ((tr<MI_MAP_QPSK_SIZE)&&(MI_map_qpsk_axis[tr] < sinrLin))
-            {
-              tr++;
-            }
+
           if (sinrLin > MI_map_qpsk_axis[MI_MAP_QPSK_SIZE-1])
             {
               MI = 1;
             }
           else 
-            {
-              NS_ASSERT_MSG (tr<MI_MAP_QPSK_SIZE, "MI map out of data");
-              MI = MI_map_qpsk[tr];
+            { 
+              // since the values in MI_map_qpsk_axis are uniformly spaced, we have
+              // index = ((sinrLin - value[0]) / (value[SIZE-1] - value[0])) * (SIZE-1)
+              // the scaling coefficient is always the same, so we use a static const
+              // to speed up the calculation
+              static const double scalingCoeffQpsk = 
+                (MI_MAP_QPSK_SIZE - 1) / (MI_map_qpsk_axis[MI_MAP_QPSK_SIZE-1] - MI_map_qpsk_axis[0]);
+              double sinrIndexDouble = (sinrLin -  MI_map_qpsk_axis[0]) * scalingCoeffQpsk + 1;
+              uint32_t sinrIndex = std::max(0.0, std::floor (sinrIndexDouble));
+              NS_ASSERT_MSG (sinrIndex < MI_MAP_QPSK_SIZE, "MI map out of data");
+              MI = MI_map_qpsk[sinrIndex];
             }
         }
       else
         {
           if (mcs > MI_QPSK_MAX_ID && mcs <= MI_16QAM_MAX_ID )	// 16-QAM
             {
-              int tr = 0;
-              while ((tr<MI_MAP_16QAM_SIZE)&&(MI_map_16qam_axis[tr] < sinrLin))
-                {
-                  tr++;
-                }
               if (sinrLin > MI_map_16qam_axis[MI_MAP_16QAM_SIZE-1])
                 {
                   MI = 1;
                 }
               else 
                 {
-                  NS_ASSERT_MSG (tr<MI_MAP_16QAM_SIZE, "MI map out of data");
-                  MI = MI_map_16qam[tr];
+                  // since the values in MI_map_16QAM_axis are uniformly spaced, we have
+                  // index = ((sinrLin - value[0]) / (value[SIZE-1] - value[0])) * (SIZE-1)
+                  // the scaling coefficient is always the same, so we use a static const
+                  // to speed up the calculation
+                  static const double scalingCoeff16qam = 
+                    (MI_MAP_16QAM_SIZE - 1) / (MI_map_16qam_axis[MI_MAP_16QAM_SIZE-1] - MI_map_16qam_axis[0]);
+                  double sinrIndexDouble = (sinrLin -  MI_map_16qam_axis[0]) * scalingCoeff16qam + 1;
+                  uint32_t sinrIndex = std::max(0.0, std::floor (sinrIndexDouble));
+                  NS_ASSERT_MSG (sinrIndex < MI_MAP_16QAM_SIZE, "MI map out of data");
+                  MI = MI_map_16qam[sinrIndex];
                 }
             }
           else // 64-QAM
             {
-              int tr = 0;
-              while ((tr<MI_MAP_64QAM_SIZE)&&(MI_map_64qam_axis[tr] < sinrLin))
-                {
-                  tr++;
-                }
               if (sinrLin > MI_map_64qam_axis[MI_MAP_64QAM_SIZE-1])
                 {
                   MI = 1;
                 }
               else
                 {
-                  NS_ASSERT_MSG (tr<MI_MAP_64QAM_SIZE, "MI map out of data");
-                  MI = MI_map_64qam[tr];
+                  // since the values in MI_map_64QAM_axis are uniformly spaced, we have
+                  // index = ((sinrLin - value[0]) / (value[SIZE-1] - value[0])) * (SIZE-1)
+                  // the scaling coefficient is always the same, so we use a static const
+                  // to speed up the calculation
+                  static const double scalingCoeff64qam = 
+                    (MI_MAP_64QAM_SIZE - 1) / (MI_map_64qam_axis[MI_MAP_64QAM_SIZE-1] - MI_map_64qam_axis[0]);
+                  double sinrIndexDouble = (sinrLin -  MI_map_64qam_axis[0]) * scalingCoeff64qam + 1;
+                  uint32_t sinrIndex = std::max(0.0, std::floor (sinrIndexDouble));
+                  NS_ASSERT_MSG (sinrIndex < MI_MAP_64QAM_SIZE, "MI map out of data");
+                  MI = MI_map_64qam[sinrIndex];
                 }
             }
         }
diff -Naur ns-3.18.1/src/lte/model/lte-mi-error-model.h ns-3.19/src/lte/model/lte-mi-error-model.h
--- ns-3.18.1/src/lte/model/lte-mi-error-model.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-mi-error-model.h	2013-12-20 09:44:50.000000000 -0800
@@ -82,8 +82,8 @@
   static double Mib (const SpectrumValue& sinr, const std::vector<int>& map, uint8_t mcs);
   /** 
    * \brief map the mmib (mean mutual information per bit) for different MCS
-   * \param mmib mean mutual information per bit of a code-block
-   * \param mcs the MCS
+   * \param mib mean mutual information per bit of a code-block
+   * \param ecrId Effective Code Rate ID
    * \param cbSize the size of the CB
    * \return the code block error rate
    */
diff -Naur ns-3.18.1/src/lte/model/lte-net-device.cc ns-3.19/src/lte/model/lte-net-device.cc
--- ns-3.18.1/src/lte/model/lte-net-device.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-net-device.cc	2013-12-20 09:44:50.000000000 -0800
@@ -40,7 +40,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED ( LteNetDevice);
+NS_OBJECT_ENSURE_REGISTERED ( LteNetDevice)
+  ;
 
 ////////////////////////////////
 // LteNetDevice
diff -Naur ns-3.18.1/src/lte/model/lte-pdcp.cc ns-3.19/src/lte/model/lte-pdcp.cc
--- ns-3.18.1/src/lte/model/lte-pdcp.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-pdcp.cc	2013-12-20 09:44:50.000000000 -0800
@@ -61,7 +61,8 @@
 
 ///////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (LtePdcp);
+NS_OBJECT_ENSURE_REGISTERED (LtePdcp)
+  ;
 
 LtePdcp::LtePdcp ()
   : m_pdcpSapUser (0),
diff -Naur ns-3.18.1/src/lte/model/lte-pdcp.h ns-3.19/src/lte/model/lte-pdcp.h
--- ns-3.18.1/src/lte/model/lte-pdcp.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-pdcp.h	2013-12-20 09:44:50.000000000 -0800
@@ -68,7 +68,7 @@
   /**
    *
    *
-   * \param s the PDCP SAP Provider interface offered to the RRC by this LTE_PDCP
+   * \return the PDCP SAP Provider interface offered to the RRC by this LTE_PDCP
    */
   LtePdcpSapProvider* GetLtePdcpSapProvider ();
 
@@ -82,7 +82,7 @@
   /**
    *
    *
-   * \param s the RLC SAP User interface offered to the RLC by this LTE_PDCP
+   * \return the RLC SAP User interface offered to the RLC by this LTE_PDCP
    */
   LteRlcSapUser* GetLteRlcSapUser ();
 
diff -Naur ns-3.18.1/src/lte/model/lte-pdcp-header.cc ns-3.19/src/lte/model/lte-pdcp-header.cc
--- ns-3.18.1/src/lte/model/lte-pdcp-header.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-pdcp-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LtePdcpHeader);
+NS_OBJECT_ENSURE_REGISTERED (LtePdcpHeader)
+  ;
 
 LtePdcpHeader::LtePdcpHeader ()
   : m_dcBit (0xff),
diff -Naur ns-3.18.1/src/lte/model/lte-pdcp-tag.cc ns-3.19/src/lte/model/lte-pdcp-tag.cc
--- ns-3.18.1/src/lte/model/lte-pdcp-tag.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-pdcp-tag.cc	2013-12-20 09:44:50.000000000 -0800
@@ -25,7 +25,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (PdcpTag);
+NS_OBJECT_ENSURE_REGISTERED (PdcpTag)
+  ;
 
 PdcpTag::PdcpTag ()
   : m_senderTimestamp (Seconds (0))
diff -Naur ns-3.18.1/src/lte/model/lte-pdcp-tag.h ns-3.19/src/lte/model/lte-pdcp-tag.h
--- ns-3.18.1/src/lte/model/lte-pdcp-tag.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-pdcp-tag.h	2013-12-20 09:44:50.000000000 -0800
@@ -56,6 +56,7 @@
 
   /**
    * Get the instant when the PDCP delivers the PDU to the MAC SAP provider
+   * @return the sender timestamp
    */
   Time  GetSenderTimestamp (void) const;
 
diff -Naur ns-3.18.1/src/lte/model/lte-phy.cc ns-3.19/src/lte/model/lte-phy.cc
--- ns-3.18.1/src/lte/model/lte-phy.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-phy.cc	2013-12-20 09:44:50.000000000 -0800
@@ -33,7 +33,8 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (LtePhy);
+NS_OBJECT_ENSURE_REGISTERED (LtePhy)
+  ;
 
 
 LtePhy::LtePhy ()
diff -Naur ns-3.18.1/src/lte/model/lte-phy.h ns-3.19/src/lte/model/lte-phy.h
--- ns-3.18.1/src/lte/model/lte-phy.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-phy.h	2013-12-20 09:44:50.000000000 -0800
@@ -121,13 +121,6 @@
   void DoDispose ();
 
   /**
-   * \brief Receive SendLteControlMessage (PDCCH map, CQI feedbacks) using the ideal control channel
-   * \param msg the Ideal Control Message to receive
-   */
-//   virtual void ReceiveLteControlMessage (Ptr<LteControlMessage> msg) = 0;
-
-
-  /**
    * \param tti transmission time interval
    */
   void SetTti (double tti);
@@ -188,7 +181,7 @@
    * 
    * \param sinr the SINR vs frequency measured by the device
    */
-  virtual void  GenerateCtrlCqiReport (const SpectrumValue& sinr) = 0;
+  virtual void GenerateCtrlCqiReport (const SpectrumValue& sinr) = 0;
   
   /** 
   * generate a CQI report based on the given SINR of Data frame
@@ -196,25 +189,25 @@
   * 
   * \param sinr the SINR vs frequency measured by the device
   */
-  virtual void  GenerateDataCqiReport (const SpectrumValue& sinr) = 0;
+  virtual void GenerateDataCqiReport (const SpectrumValue& sinr) = 0;
 
   /**
   * generate a report based on the linear interference and noise power
   * perceived during DATA frame
   * NOTE: used only by eNB 
   *
-  * \param sinr the interference + noise power measured by the device
+  * \param interf the interference + noise power measured by the device
   */
-  virtual void ReportInterference (const SpectrumValue& power) = 0;
+  virtual void ReportInterference (const SpectrumValue& interf) = 0;
 
   /**
   * generate a report based on the linear RS power perceived during CTRL 
   * frame
   * NOTE: used only by UE for evaluating RSRP
   *
-  * \param sinr the RS power measured by the device
+  * \param power the RS power measured by the device
   */
-  virtual void ReportRsReceivedPower (const SpectrumValue& interf) = 0;
+  virtual void ReportRsReceivedPower (const SpectrumValue& power) = 0;
 
 
 
diff -Naur ns-3.18.1/src/lte/model/lte-phy-tag.cc ns-3.19/src/lte/model/lte-phy-tag.cc
--- ns-3.18.1/src/lte/model/lte-phy-tag.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-phy-tag.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LtePhyTag);
+NS_OBJECT_ENSURE_REGISTERED (LtePhyTag)
+  ;
 
 TypeId
 LtePhyTag::GetTypeId (void)
diff -Naur ns-3.18.1/src/lte/model/lte-radio-bearer-info.cc ns-3.19/src/lte/model/lte-radio-bearer-info.cc
--- ns-3.18.1/src/lte/model/lte-radio-bearer-info.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-radio-bearer-info.cc	2013-12-20 09:44:50.000000000 -0800
@@ -29,7 +29,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteRadioBearerInfo);
+NS_OBJECT_ENSURE_REGISTERED (LteRadioBearerInfo)
+  ;
 
 LteRadioBearerInfo::LteRadioBearerInfo (void)
 {
diff -Naur ns-3.18.1/src/lte/model/lte-radio-bearer-tag.cc ns-3.19/src/lte/model/lte-radio-bearer-tag.cc
--- ns-3.18.1/src/lte/model/lte-radio-bearer-tag.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-radio-bearer-tag.cc	2013-12-20 09:44:50.000000000 -0800
@@ -25,7 +25,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteRadioBearerTag);
+NS_OBJECT_ENSURE_REGISTERED (LteRadioBearerTag)
+  ;
 
 TypeId
 LteRadioBearerTag::GetTypeId (void)
diff -Naur ns-3.18.1/src/lte/model/lte-radio-bearer-tag.h ns-3.19/src/lte/model/lte-radio-bearer-tag.h
--- ns-3.18.1/src/lte/model/lte-radio-bearer-tag.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-radio-bearer-tag.h	2013-12-20 09:44:50.000000000 -0800
@@ -57,7 +57,7 @@
    *
    * @param rnti the value of the RNTI to set
    */
-  void SetRnti (uint16_t tid);
+  void SetRnti (uint16_t rnti);
 
   /**
    * Set the LC id to the given value.
@@ -71,7 +71,7 @@
   *
   * @param layer the value of the layer to set
   */
-  void SetLayer (uint8_t lcid);
+  void SetLayer (uint8_t layer);
 
 
   virtual void Serialize (TagBuffer i) const;
diff -Naur ns-3.18.1/src/lte/model/lte-rlc-am.cc ns-3.19/src/lte/model/lte-rlc-am.cc
--- ns-3.18.1/src/lte/model/lte-rlc-am.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-rlc-am.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteRlcAm);
+NS_OBJECT_ENSURE_REGISTERED (LteRlcAm)
+  ;
 
 LteRlcAm::LteRlcAm ()
 {
@@ -93,6 +94,14 @@
                    TimeValue (MilliSeconds (100)),
                    MakeTimeAccessor (&LteRlcAm::m_pollRetransmitTimerValue),
                    MakeTimeChecker ())
+    .AddAttribute ("TxOpportunityForRetxAlwaysBigEnough",
+                   "If true, always pretend that the size of a TxOpportunity is big enough "
+                   "for retransmission. If false (default and realistic behavior), no retx "
+                   "is performed unless the corresponding TxOpportunity is big enough.",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&LteRlcAm::m_txOpportunityForRetxAlwaysBigEnough),
+                   MakeBooleanChecker ())
+
     ;
   return tid;
 }
@@ -211,7 +220,8 @@
 
       Ptr<Packet> packet = m_retxBuffer.at (m_vtA.GetValue ()).m_pdu->Copy ();
 
-      if ( packet->GetSize () <= bytes )
+      if (( packet->GetSize () <= bytes )
+          || m_txOpportunityForRetxAlwaysBigEnough)
         {
           LteRlcAmHeader rlcAmHeader;
           packet->PeekHeader (rlcAmHeader);
@@ -258,7 +268,8 @@
       uint16_t vta = m_vtA.GetValue ();
       Ptr<Packet> packet = m_txedBuffer.at (vta)->Copy ();
 
-      if ( packet->GetSize () <= bytes )
+      if (( packet->GetSize () <= bytes )
+          || m_txOpportunityForRetxAlwaysBigEnough)
         {
           NS_LOG_INFO ("Move SN = " << vta << " to retxBuffer");
           m_retxBuffer.at (vta).m_pdu = m_txedBuffer.at (vta)->Copy ();
@@ -962,12 +973,22 @@
       NS_LOG_INFO ("ackSn     = " << ackSn);
       NS_LOG_INFO ("VT(A)     = " << m_vtA);
       NS_LOG_INFO ("VT(S)     = " << m_vtS);
+
+      m_vtA.SetModulusBase (m_vtA);
+      m_vtS.SetModulusBase (m_vtA);
+      ackSn.SetModulusBase (m_vtA);
       while (m_vtA < ackSn && m_vtA < m_vtS)
         {
 //           NS_LOG_INFO ("seqNumber = " << seqNumber);
 //           NS_LOG_INFO ("m_txedBuffer( VT(A) ).size = " << m_txedBuffer.size ());
 
           uint16_t seqNumberValue = m_vtA.GetValue ();
+          if (m_pollRetransmitTimer.IsRunning () 
+              && (seqNumberValue == m_pollSn.GetValue ()))
+            {
+              m_pollRetransmitTimer.Cancel ();
+            }
+
           if (m_txedBuffer.at (seqNumberValue))
             {
               NS_LOG_INFO ("ACKed SN = " << seqNumberValue << " from txedBuffer");
@@ -985,6 +1006,9 @@
             }
 
           m_vtA++;
+          m_vtA.SetModulusBase (m_vtA);
+          m_vtS.SetModulusBase (m_vtA);
+          ackSn.SetModulusBase (m_vtA);
         }
 
       NS_LOG_INFO ("New VT(A) = " << m_vtA);
diff -Naur ns-3.18.1/src/lte/model/lte-rlc-am.h ns-3.19/src/lte/model/lte-rlc-am.h
--- ns-3.18.1/src/lte/model/lte-rlc-am.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-rlc-am.h	2013-12-20 09:44:50.000000000 -0800
@@ -150,6 +150,8 @@
   uint16_t m_maxRetxThreshold;  /// \todo How these parameters are configured???
   uint16_t m_pollPdu;
   uint16_t m_pollByte;
+  
+  bool m_txOpportunityForRetxAlwaysBigEnough;
 
   /**
    * SDU Reassembling state
diff -Naur ns-3.18.1/src/lte/model/lte-rlc-am-header.cc ns-3.19/src/lte/model/lte-rlc-am-header.cc
--- ns-3.18.1/src/lte/model/lte-rlc-am-header.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-rlc-am-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteRlcAmHeader);
+NS_OBJECT_ENSURE_REGISTERED (LteRlcAmHeader)
+  ;
 
 LteRlcAmHeader::LteRlcAmHeader ()
   : m_headerLength (0),
diff -Naur ns-3.18.1/src/lte/model/lte-rlc.cc ns-3.19/src/lte/model/lte-rlc.cc
--- ns-3.18.1/src/lte/model/lte-rlc.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-rlc.cc	2013-12-20 09:44:50.000000000 -0800
@@ -81,7 +81,8 @@
 
 ///////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (LteRlc);
+NS_OBJECT_ENSURE_REGISTERED (LteRlc)
+  ;
 
 LteRlc::LteRlc ()
   : m_rlcSapUser (0),
@@ -167,7 +168,8 @@
 
 ////////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (LteRlcSm);
+NS_OBJECT_ENSURE_REGISTERED (LteRlcSm)
+  ;
 
 LteRlcSm::LteRlcSm ()
 {
diff -Naur ns-3.18.1/src/lte/model/lte-rlc.h ns-3.19/src/lte/model/lte-rlc.h
--- ns-3.18.1/src/lte/model/lte-rlc.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-rlc.h	2013-12-20 09:44:50.000000000 -0800
@@ -81,7 +81,7 @@
   /**
    *
    *
-   * \param s the RLC SAP Provider interface offered to the PDCP by this LTE_RLC
+   * \return the RLC SAP Provider interface offered to the PDCP by this LTE_RLC
    */
   LteRlcSapProvider* GetLteRlcSapProvider ();
 
@@ -95,7 +95,7 @@
   /**
    *
    *
-   * \param s the MAC SAP User interface offered to the MAC by this LTE_RLC
+   * \return the MAC SAP User interface offered to the MAC by this LTE_RLC
    */
   LteMacSapUser* GetLteMacSapUser ();
 
diff -Naur ns-3.18.1/src/lte/model/lte-rlc-header.cc ns-3.19/src/lte/model/lte-rlc-header.cc
--- ns-3.18.1/src/lte/model/lte-rlc-header.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-rlc-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteRlcHeader);
+NS_OBJECT_ENSURE_REGISTERED (LteRlcHeader)
+  ;
 
 LteRlcHeader::LteRlcHeader ()
   : m_headerLength (0),
diff -Naur ns-3.18.1/src/lte/model/lte-rlc-sdu-status-tag.cc ns-3.19/src/lte/model/lte-rlc-sdu-status-tag.cc
--- ns-3.18.1/src/lte/model/lte-rlc-sdu-status-tag.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-rlc-sdu-status-tag.cc	2013-12-20 09:44:50.000000000 -0800
@@ -22,7 +22,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteRlcSduStatusTag);
+NS_OBJECT_ENSURE_REGISTERED (LteRlcSduStatusTag)
+  ;
 
 LteRlcSduStatusTag::LteRlcSduStatusTag ()
 {
diff -Naur ns-3.18.1/src/lte/model/lte-rlc-tag.cc ns-3.19/src/lte/model/lte-rlc-tag.cc
--- ns-3.18.1/src/lte/model/lte-rlc-tag.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-rlc-tag.cc	2013-12-20 09:44:50.000000000 -0800
@@ -24,7 +24,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (RlcTag);
+NS_OBJECT_ENSURE_REGISTERED (RlcTag)
+  ;
 
 RlcTag::RlcTag ()
   : m_senderTimestamp (Seconds (0))
diff -Naur ns-3.18.1/src/lte/model/lte-rlc-tag.h ns-3.19/src/lte/model/lte-rlc-tag.h
--- ns-3.18.1/src/lte/model/lte-rlc-tag.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-rlc-tag.h	2013-12-20 09:44:50.000000000 -0800
@@ -55,6 +55,7 @@
 
   /**
    * Get the instant when the RLC delivers the PDU to the MAC SAP provider
+   * @return the sender timestamp
    */
   Time  GetSenderTimestamp (void) const
   {
diff -Naur ns-3.18.1/src/lte/model/lte-rlc-tm.cc ns-3.19/src/lte/model/lte-rlc-tm.cc
--- ns-3.18.1/src/lte/model/lte-rlc-tm.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-rlc-tm.cc	2013-12-20 09:44:50.000000000 -0800
@@ -29,7 +29,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteRlcTm);
+NS_OBJECT_ENSURE_REGISTERED (LteRlcTm)
+  ;
 
 LteRlcTm::LteRlcTm ()
   : m_maxTxBufferSize (0),
@@ -130,7 +131,6 @@
 
   if (bytes < packet->GetSize ())
     {
-      // Stingy MAC: Header fix part is 2 bytes, we need more bytes for the data
       NS_LOG_WARN ("TX opportunity too small = " << bytes << " (PDU size: " << packet->GetSize () << ")");
       return;
     }
diff -Naur ns-3.18.1/src/lte/model/lte-rlc-um.cc ns-3.19/src/lte/model/lte-rlc-um.cc
--- ns-3.18.1/src/lte/model/lte-rlc-um.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-rlc-um.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteRlcUm);
+NS_OBJECT_ENSURE_REGISTERED (LteRlcUm)
+  ;
 
 LteRlcUm::LteRlcUm ()
   : m_maxTxBufferSize (10 * 1024),
diff -Naur ns-3.18.1/src/lte/model/lte-rrc-protocol-ideal.cc ns-3.19/src/lte/model/lte-rrc-protocol-ideal.cc
--- ns-3.18.1/src/lte/model/lte-rrc-protocol-ideal.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-rrc-protocol-ideal.cc	2013-12-20 09:44:50.000000000 -0800
@@ -39,7 +39,8 @@
 
 const Time RRC_IDEAL_MSG_DELAY = MilliSeconds (0); 
 
-NS_OBJECT_ENSURE_REGISTERED (LteUeRrcProtocolIdeal);
+NS_OBJECT_ENSURE_REGISTERED (LteUeRrcProtocolIdeal)
+  ;
 
 LteUeRrcProtocolIdeal::LteUeRrcProtocolIdeal ()
   :  m_ueRrcSapProvider (0),
@@ -206,7 +207,8 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (LteEnbRrcProtocolIdeal);
+NS_OBJECT_ENSURE_REGISTERED (LteEnbRrcProtocolIdeal)
+  ;
 
 LteEnbRrcProtocolIdeal::LteEnbRrcProtocolIdeal ()
   :  m_enbRrcSapProvider (0)
@@ -323,50 +325,6 @@
 }
 
 void 
-LteEnbRrcProtocolIdeal::DoSendMasterInformationBlock (LteRrcSap::MasterInformationBlock msg)
-{
-  NS_LOG_FUNCTION (this);
-  for (std::map<uint16_t, LteUeRrcSapProvider*>::const_iterator it = m_enbRrcSapProviderMap.begin ();
-       it != m_enbRrcSapProviderMap.end ();
-       ++it)
-    {
-      Simulator::Schedule (RRC_IDEAL_MSG_DELAY, 
-                           &LteUeRrcSapProvider::RecvMasterInformationBlock,
-                           it->second, 
-                           msg);
-    }
-}
-
-void 
-LteEnbRrcProtocolIdeal::DoSendSystemInformationBlockType1 (LteRrcSap::SystemInformationBlockType1 msg)
-{
-  NS_LOG_FUNCTION (this << m_cellId);
- // walk list of all nodes to get UEs with this cellId
-  Ptr<LteUeRrc> ueRrc;
-  for (NodeList::Iterator i = NodeList::Begin (); i != NodeList::End (); ++i)
-    {
-      Ptr<Node> node = *i;
-      int nDevs = node->GetNDevices ();
-      for (int j = 0; j < nDevs; ++j)
-        {
-          Ptr<LteUeNetDevice> ueDev = node->GetDevice (j)->GetObject <LteUeNetDevice> ();
-          if (ueDev != 0)
-            {
-              NS_LOG_LOGIC ("considering UE " << ueDev->GetImsi ());
-              Ptr<LteUeRrc> ueRrc = ueDev->GetRrc ();              
-              if (ueRrc->GetCellId () == m_cellId)
-                {       
-                  Simulator::Schedule (RRC_IDEAL_MSG_DELAY, 
-                                       &LteUeRrcSapProvider::RecvSystemInformationBlockType1,
-                                       ueRrc->GetLteUeRrcSapProvider (), 
-                                       msg);          
-                }             
-            }
-        }
-    } 
-}
-
-void 
 LteEnbRrcProtocolIdeal::DoSendSystemInformation (LteRrcSap::SystemInformation msg)
 {
   NS_LOG_FUNCTION (this << m_cellId);
diff -Naur ns-3.18.1/src/lte/model/lte-rrc-protocol-ideal.h ns-3.19/src/lte/model/lte-rrc-protocol-ideal.h
--- ns-3.18.1/src/lte/model/lte-rrc-protocol-ideal.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-rrc-protocol-ideal.h	2013-12-20 09:44:50.000000000 -0800
@@ -116,8 +116,6 @@
   // methods forwarded from LteEnbRrcSapUser
   void DoSetupUe (uint16_t rnti, LteEnbRrcSapUser::SetupUeParameters params);
   void DoRemoveUe (uint16_t rnti);
-  void DoSendMasterInformationBlock (LteRrcSap::MasterInformationBlock msg);
-  void DoSendSystemInformationBlockType1 (LteRrcSap::SystemInformationBlockType1 msg);
   void DoSendSystemInformation (LteRrcSap::SystemInformation msg);
   void SendSystemInformation (LteRrcSap::SystemInformation msg);
   void DoSendRrcConnectionSetup (uint16_t rnti, LteRrcSap::RrcConnectionSetup msg);
diff -Naur ns-3.18.1/src/lte/model/lte-rrc-protocol-real.cc ns-3.19/src/lte/model/lte-rrc-protocol-real.cc
--- ns-3.18.1/src/lte/model/lte-rrc-protocol-real.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-rrc-protocol-real.cc	2013-12-20 09:44:50.000000000 -0800
@@ -40,7 +40,8 @@
 
 const Time RRC_REAL_MSG_DELAY = MilliSeconds (0); 
 
-NS_OBJECT_ENSURE_REGISTERED (LteUeRrcProtocolReal);
+NS_OBJECT_ENSURE_REGISTERED (LteUeRrcProtocolReal)
+  ;
 
 LteUeRrcProtocolReal::LteUeRrcProtocolReal ()
   :  m_ueRrcSapProvider (0),
@@ -350,7 +351,8 @@
     }
 }
 
-NS_OBJECT_ENSURE_REGISTERED (LteEnbRrcProtocolReal);
+NS_OBJECT_ENSURE_REGISTERED (LteEnbRrcProtocolReal)
+  ;
 
 LteEnbRrcProtocolReal::LteEnbRrcProtocolReal ()
   :  m_enbRrcSapProvider (0)
@@ -503,50 +505,6 @@
 }
 
 void 
-LteEnbRrcProtocolReal::DoSendMasterInformationBlock (LteRrcSap::MasterInformationBlock msg)
-{
-  NS_LOG_FUNCTION (this);
-  for (std::map<uint16_t, LteUeRrcSapProvider*>::const_iterator it = m_enbRrcSapProviderMap.begin ();
-       it != m_enbRrcSapProviderMap.end ();
-       ++it)
-    {
-      Simulator::Schedule (RRC_REAL_MSG_DELAY, 
-                           &LteUeRrcSapProvider::RecvMasterInformationBlock,
-                           it->second, 
-                           msg);
-    }
-}
-
-void 
-LteEnbRrcProtocolReal::DoSendSystemInformationBlockType1 (LteRrcSap::SystemInformationBlockType1 msg)
-{
-  NS_LOG_FUNCTION (this << m_cellId);
-  // walk list of all nodes to get UEs with this cellId
-  Ptr<LteUeRrc> ueRrc;
-  for (NodeList::Iterator i = NodeList::Begin (); i != NodeList::End (); ++i)
-    {
-      Ptr<Node> node = *i;
-      int nDevs = node->GetNDevices ();
-      for (int j = 0; j < nDevs; ++j)
-        {
-          Ptr<LteUeNetDevice> ueDev = node->GetDevice (j)->GetObject <LteUeNetDevice> ();
-          if (ueDev != 0)
-            {
-              NS_LOG_LOGIC ("considering UE " << ueDev->GetImsi ());
-              Ptr<LteUeRrc> ueRrc = ueDev->GetRrc ();
-              if (ueRrc->GetCellId () == m_cellId)
-                {
-                  Simulator::Schedule (RRC_REAL_MSG_DELAY, 
-                                       &LteUeRrcSapProvider::RecvSystemInformationBlockType1,
-                                       ueRrc->GetLteUeRrcSapProvider (), 
-                                       msg);
-                }
-            }
-        }
-    } 
-}
-
-void 
 LteEnbRrcProtocolReal::DoSendSystemInformation (LteRrcSap::SystemInformation msg)
 {
   NS_LOG_FUNCTION (this << m_cellId);
diff -Naur ns-3.18.1/src/lte/model/lte-rrc-protocol-real.h ns-3.19/src/lte/model/lte-rrc-protocol-real.h
--- ns-3.18.1/src/lte/model/lte-rrc-protocol-real.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-rrc-protocol-real.h	2013-12-20 09:44:50.000000000 -0800
@@ -128,8 +128,6 @@
   // methods forwarded from LteEnbRrcSapUser
   void DoSetupUe (uint16_t rnti, LteEnbRrcSapUser::SetupUeParameters params);
   void DoRemoveUe (uint16_t rnti);
-  void DoSendMasterInformationBlock (LteRrcSap::MasterInformationBlock msg);
-  void DoSendSystemInformationBlockType1 (LteRrcSap::SystemInformationBlockType1 msg);
   void DoSendSystemInformation (LteRrcSap::SystemInformation msg);
   void SendSystemInformation (LteRrcSap::SystemInformation msg);
   void DoSendRrcConnectionSetup (uint16_t rnti, LteRrcSap::RrcConnectionSetup msg);
diff -Naur ns-3.18.1/src/lte/model/lte-rrc-sap.cc ns-3.19/src/lte/model/lte-rrc-sap.cc
--- ns-3.18.1/src/lte/model/lte-rrc-sap.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-rrc-sap.cc	2013-12-20 09:44:50.000000000 -0800
@@ -18,7 +18,7 @@
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
 
-#include "ns3/lte-rrc-sap.h"
+#include "lte-rrc-sap.h"
 
 namespace ns3 {
 
@@ -26,4 +26,25 @@
 {
 }
 
+LteRrcSap::ReportConfigEutra::ReportConfigEutra ()
+{
+  triggerType = EVENT;
+  eventId = EVENT_A1;
+  threshold1.choice = ThresholdEutra::THRESHOLD_RSRP;
+  threshold1.range = 0;
+  threshold2.choice = ThresholdEutra::THRESHOLD_RSRP;
+  threshold2.range = 0;
+  reportOnLeave = false;
+  a3Offset = 0;
+  hysteresis = 0;
+  timeToTrigger = 0;
+  purpose = REPORT_STRONGEST_CELLS;
+  triggerQuantity = RSRP;
+  reportQuantity = BOTH;
+  maxReportCells = MaxReportCells;
+  reportInterval = MS480;
+  reportAmount = 255;
+}
+
+
 } // namespace ns3
diff -Naur ns-3.18.1/src/lte/model/lte-rrc-sap.h ns-3.19/src/lte/model/lte-rrc-sap.h
--- ns-3.18.1/src/lte/model/lte-rrc-sap.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-rrc-sap.h	2013-12-20 09:44:50.000000000 -0800
@@ -38,16 +38,20 @@
 class Packet;
 
 /**
- * Class holding definition common to all Ue/Enb SAP
- * Users/Providers. See 3GPP TS 36.331 for reference. 
+ * \ingroup lte
+ *
+ * \brief Class holding definition common to all UE/eNodeB SAP Users/Providers.
+ *
+ * See 3GPP TS 36.331 for reference.
+ *
  * Note that only those values that are (expected to be) used by the
  * ns-3 model are mentioned here. The naming of the variables that are
  * defined here is the same of 36.331, except for removal of "-" and
  * conversion to CamelCase or ALL_CAPS where needed in order to follow
- * the ns-3 coding style. Due to the 1-to-1 mapping with TS 36.331, 
+ * the ns-3 coding style. Due to the 1-to-1 mapping with TS 36.331,
  * detailed doxygen documentation is omitted, so please refer to
  * 36.331 for the meaning of these data structures / fields.
- * 
+ *
  */
 class LteRrcSap
 {
@@ -73,6 +77,12 @@
     uint32_t csgIdentity;
   };
 
+  struct CellSelectionInfo
+  {
+    int8_t qRxLevMin; ///< INTEGER (-70..-22), actual value = IE value * 2 [dBm].
+    int8_t qQualMin; ///< INTEGER (-34..-3), actual value = IE value [dB].
+  };
+
   struct FreqInfo
   {
     uint16_t ulCarrierFreq;
@@ -225,16 +235,26 @@
     uint8_t cellForWhichToReportCGI;
   };
 
+  /**
+   * \brief Threshold for event evaluation.
+   *
+   * For RSRP-based threshold, the actual value is (value - 140) dBm. While for
+   * RSRQ-based threshold, the actual value is (value - 40) / 2 dB. This is in
+   * accordance with section 9.1.4 and 9.1.7 of 3GPP TS 36.133.
+   *
+   * \sa ns3::EutranMeasurementMapping
+   */
   struct ThresholdEutra
   {
     enum
     {
-      THRESHOLD_RSRP,
-      THRESHOLD_RSRQ
+      THRESHOLD_RSRP, ///< RSRP is used for the threshold.
+      THRESHOLD_RSRQ ///< RSRQ is used for the threshold.
     } choice;
-    uint8_t range;
+    uint8_t range; ///< Value range used in RSRP/RSRQ threshold.
   };
 
+  /// Specifies criteria for triggering of an E-UTRA measurement reporting event.
   struct ReportConfigEutra
   {
     enum
@@ -245,34 +265,50 @@
 
     enum
     {
-      EVENT_A1,
-      EVENT_A2,
-      EVENT_A3,
-      EVENT_A4,
-      EVENT_A5
-    } eventId;
-    ThresholdEutra threshold1; // used for A1, A2, A4, A5
-    ThresholdEutra threshold2; // used for A5
-    bool reportOnLeave; // used for A3
-    int8_t a3Offset; // used for A3
+      EVENT_A1, ///< Event A1: Serving becomes better than absolute threshold.
+      EVENT_A2, ///< Event A2: Serving becomes worse than absolute threshold.
+      EVENT_A3, ///< Event A3: Neighbour becomes amount of offset better than PCell.
+      EVENT_A4, ///< Event A4: Neighbour becomes better than absolute threshold.
+      EVENT_A5 ///< Event A5: PCell becomes worse than absolute `threshold1` AND Neighbour becomes better than another absolute `threshold2`.
+
+    } eventId; ///< Choice of E-UTRA event triggered reporting criteria.
+
+    ThresholdEutra threshold1; ///< Threshold for event A1, A2, A4, and A5.
+    ThresholdEutra threshold2; ///< Threshold for event A5.
+
+    /// Indicates whether or not the UE shall initiate the measurement reporting procedure when the leaving condition is met for a cell in `cellsTriggeredList`, as specified in 5.5.4.1 of 3GPP TS 36.331.
+    bool reportOnLeave;
+
+    /// Offset value for Event A3. An integer between -30 and 30. The actual value is (value * 0.5) dB.
+    int8_t a3Offset;
+
+    /// Parameter used within the entry and leave condition of an event triggered reporting condition. The actual value is (value * 0.5) dB.
     uint8_t hysteresis;
+
+    /// Time during which specific criteria for the event needs to be met in order to trigger a measurement report.
     uint16_t timeToTrigger;
+
     enum
     {
       REPORT_STRONGEST_CELLS,
       REPORT_CGI
     } purpose;
+
     enum
     {
-      RSRP,
-      RSRQ
-    } triggerQuantity;
+      RSRP, ///< Reference Signal Received Power
+      RSRQ ///< Reference Signal Received Quality
+    } triggerQuantity; ///< The quantities used to evaluate the triggering condition for the event, see 3GPP TS 36.214.
+
     enum
     {
       SAME_AS_TRIGGER_QUANTITY,
-      BOTH
-    } reportQuantity;
+      BOTH ///< Both the RSRP and RSRQ quantities are to be included in the measurement report.
+    } reportQuantity; ///< The quantities to be included in the measurement report, always assumed to be BOTH.
+
+    /// Maximum number of cells, excluding the serving cell, to be included in the measurement report.
     uint8_t maxReportCells;
+
     enum
     {
       MS120,
@@ -291,9 +327,14 @@
       SPARE3,
       SPARE2,
       SPARE1
-    } reportInterval;
+    } reportInterval; ///< Indicates the interval between periodical reports.
+
+    /// Number of measurement reports applicable, always assumed to be infinite.
     uint8_t reportAmount;
-  };
+
+    ReportConfigEutra ();
+
+  }; // end of struct ReportConfigEutra
 
   struct MeasObjectToAddMod
   {
@@ -424,6 +465,7 @@
   struct SystemInformationBlockType1
   {
     CellAccessRelatedInfo cellAccessRelatedInfo;
+    CellSelectionInfo cellSelectionInfo;
   };
 
   struct SystemInformationBlockType2
@@ -558,10 +600,10 @@
 
 
 /**
- * Service Access Point (SAP) used by the UE RRC to send messages to
- * the eNB. Each method defined in this class correspond to the
- * transmission of a message that is defined in section 6.2.2 of TS
- * 36.331.
+ * \brief Part of the RRC protocol. This Service Access Point (SAP) is used by
+ *        the UE RRC to send messages to the eNB. Each method defined in this
+ *        class corresponds to the transmission of a message that is defined in
+ *        Section 6.2.2 of TS 36.331.
  */
 class LteUeRrcSapUser : public LteRrcSap
 {
@@ -573,20 +615,63 @@
   };
 
   virtual void Setup (SetupParameters params) = 0;
+
+  /**
+   * \brief Send an _RRCConnectionRequest message to the serving eNodeB
+   *        during an RRC connection establishment procedure
+   *        (Section 5.3.3 of TS 36.331).
+   * \param msg the message
+   */
   virtual void SendRrcConnectionRequest (RrcConnectionRequest msg) = 0;
+
+  /**
+   * \brief Send an _RRCConnectionSetupComplete_ message to the serving eNodeB
+   *        during an RRC connection establishment procedure
+   *        (Section 5.3.3 of TS 36.331).
+   * \param msg the message
+   */
   virtual void SendRrcConnectionSetupCompleted (RrcConnectionSetupCompleted msg) = 0;
+
+  /**
+   * \brief Send an _RRCConnectionReconfigurationComplete_ message to the serving eNodeB
+   *        during an RRC connection reconfiguration procedure
+   *        (Section 5.3.5 of TS 36.331).
+   * \param msg the message
+   */
   virtual void SendRrcConnectionReconfigurationCompleted (RrcConnectionReconfigurationCompleted msg) = 0;
+
+  /**
+   * \brief Send an _RRCConnectionReestablishmentRequest_ message to the serving eNodeB
+   *        during an RRC connection re-establishment procedure
+   *        (Section 5.3.7 of TS 36.331).
+   * \param msg the message
+   */
   virtual void SendRrcConnectionReestablishmentRequest (RrcConnectionReestablishmentRequest msg) = 0;
+
+  /**
+   * \brief Send an _RRCConnectionReestablishmentComplete_ message to the serving eNodeB
+   *        during an RRC connection re-establishment procedure
+   *        (Section 5.3.7 of TS 36.331).
+   * \param msg the message
+   */
   virtual void SendRrcConnectionReestablishmentComplete (RrcConnectionReestablishmentComplete msg) = 0;
+
+  /**
+   * \brief Send a _MeasurementReport_ message to the serving eNodeB
+   *        during a measurement reporting procedure
+   *        (Section 5.5.5 of TS 36.331).
+   * \param msg the message
+   */
   virtual void SendMeasurementReport (MeasurementReport msg) = 0;
+
 };
 
 
 /**
- * Service Access Point (SAP) used to let the UE RRC receive a message
- * from the eNB RRC. Each method defined in this class correspond to
- * the reception of a message that is defined in section 6.2.2 of TS
- * 36.331.
+ * \brief Part of the RRC protocol. This Service Access Point (SAP) is used to
+ *        let the UE RRC receive a message from the eNB RRC. Each method defined
+ *        in this class corresponds to the reception of a message that is
+ *        defined in Section 6.2.2 of TS 36.331.
  */
 class LteUeRrcSapProvider : public LteRrcSap
 {
@@ -598,24 +683,71 @@
   };
 
   virtual void CompleteSetup (CompleteSetupParameters params) = 0;
-  virtual void RecvMasterInformationBlock (MasterInformationBlock msg) = 0;
-  virtual void RecvSystemInformationBlockType1 (SystemInformationBlockType1 msg) = 0;
+
+  /**
+   * \brief Receive a _SystemInformation_ message from the serving eNodeB
+   *        during a system information acquisition procedure
+   *        (Section 5.2.2 of TS 36.331).
+   * \param msg the message
+   */
   virtual void RecvSystemInformation (SystemInformation msg) = 0;
+
+  /**
+   * \brief Receive an _RRCConnectionSetup_ message from the serving eNodeB
+   *        during an RRC connection establishment procedure
+   *        (Section 5.3.3 of TS 36.331).
+   * \param msg the message
+   */
   virtual void RecvRrcConnectionSetup (RrcConnectionSetup msg) = 0;
+
+  /**
+   * \brief Receive an _RRCConnectionReconfiguration_ message from the serving eNodeB
+   *        during an RRC connection reconfiguration procedure
+   *        (Section 5.3.5 of TS 36.331).
+   * \param msg the message
+   */
   virtual void RecvRrcConnectionReconfiguration (RrcConnectionReconfiguration msg) = 0;
+
+  /**
+   * \brief Receive an _RRCConnectionReestablishment_ message from the serving eNodeB
+   *        during an RRC connection re-establishment procedure
+   *        (Section 5.3.7 of TS 36.331).
+   * \param msg the message
+   */
   virtual void RecvRrcConnectionReestablishment (RrcConnectionReestablishment msg) = 0;
+
+  /**
+   * \brief Receive an _RRCConnectionReestablishmentReject_ message from the serving eNodeB
+   *        during an RRC connection re-establishment procedure
+   *        (Section 5.3.7 of TS 36.331).
+   * \param msg the message
+   */
   virtual void RecvRrcConnectionReestablishmentReject (RrcConnectionReestablishmentReject msg) = 0;
+
+  /**
+   * \brief Receive an _RRCConnectionRelease_ message from the serving eNodeB
+   *        during an RRC connection release procedure
+   *        (Section 5.3.8 of TS 36.331).
+   * \param msg the message
+   */
   virtual void RecvRrcConnectionRelease (RrcConnectionRelease msg) = 0;
+
+  /**
+   * \brief Receive an _RRCConnectionReject_ message from the serving eNodeB
+   *        during an RRC connection establishment procedure
+   *        (Section 5.3.3 of TS 36.331).
+   * \param msg the message
+   */
   virtual void RecvRrcConnectionReject (RrcConnectionReject msg) = 0;
 
 };
 
 
 /**
- * Service Access Point (SAP) used by the eNB RRC to send messages to
- * the UE RC.  Each method defined in this class correspond to
- * the transmission of a message that is defined in section 6.2.2 of TS
- * 36.331.
+ * \brief Part of the RRC protocol. This Service Access Point (SAP) is used by
+ *        the eNB RRC to send messages to the UE RRC.  Each method defined in
+ *        this class corresponds to the transmission of a message that is
+ *        defined in Section 6.2.2 of TS 36.331.
  */
 class LteEnbRrcSapUser : public LteRrcSap
 {
@@ -628,14 +760,69 @@
 
   virtual void SetupUe (uint16_t rnti, SetupUeParameters params) = 0;
   virtual void RemoveUe (uint16_t rnti) = 0;
-  virtual void SendSystemInformationBlockType1 (SystemInformationBlockType1 msg) = 0;
+
+  /**
+   * \brief Send a _SystemInformation_ message to all attached UEs
+   *        during a system information acquisition procedure
+   *        (Section 5.2.2 of TS 36.331).
+   * \param msg the message
+   */
   virtual void SendSystemInformation (SystemInformation msg) = 0;
+
+  /**
+   * \brief Send an _RRCConnectionSetup_ message to a UE
+   *        during an RRC connection establishment procedure
+   *        (Section 5.3.3 of TS 36.331).
+   * \param rnti the RNTI of the destination UE
+   * \param msg the message
+   */
   virtual void SendRrcConnectionSetup (uint16_t rnti, RrcConnectionSetup msg) = 0;
+
+  /**
+   * \brief Send an _RRCConnectionReconfiguration_ message to a UE
+   *        during an RRC connection reconfiguration procedure
+   *        (Section 5.3.5 of TS 36.331).
+   * \param rnti the RNTI of the destination UE
+   * \param msg the message
+   */
   virtual void SendRrcConnectionReconfiguration (uint16_t rnti, RrcConnectionReconfiguration msg) = 0;
+
+  /**
+   * \brief Send an _RRCConnectionReestablishment_ message to a UE
+   *        during an RRC connection re-establishment procedure
+   *        (Section 5.3.7 of TS 36.331).
+   * \param rnti the RNTI of the destination UE
+   * \param msg the message
+   */
   virtual void SendRrcConnectionReestablishment (uint16_t rnti, RrcConnectionReestablishment msg) = 0;
+
+  /**
+   * \brief Send an _RRCConnectionReestablishmentReject_ message to a UE
+   *        during an RRC connection re-establishment procedure
+   *        (Section 5.3.7 of TS 36.331).
+   * \param rnti the RNTI of the destination UE
+   * \param msg the message
+   */
   virtual void SendRrcConnectionReestablishmentReject (uint16_t rnti, RrcConnectionReestablishmentReject msg) = 0;
+
+  /**
+   * \brief Send an _RRCConnectionRelease_ message to a UE
+   *        during an RRC connection release procedure
+   *        (Section 5.3.8 of TS 36.331).
+   * \param rnti the RNTI of the destination UE
+   * \param msg the message
+   */
   virtual void SendRrcConnectionRelease (uint16_t rnti, RrcConnectionRelease msg) = 0;
+
+  /**
+   * \brief Send an _RRCConnectionReject_ message to a UE
+   *        during an RRC connection establishment procedure
+   *        (Section 5.3.3 of TS 36.331).
+   * \param rnti the RNTI of the destination UE
+   * \param msg the message
+   */
   virtual void SendRrcConnectionReject (uint16_t rnti, RrcConnectionReject msg) = 0;
+
   virtual Ptr<Packet> EncodeHandoverPreparationInformation (HandoverPreparationInfo msg) = 0;
   virtual HandoverPreparationInfo DecodeHandoverPreparationInformation (Ptr<Packet> p) = 0;
   virtual Ptr<Packet> EncodeHandoverCommand (RrcConnectionReconfiguration msg) = 0;
@@ -645,10 +832,10 @@
 
 
 /**
- * Service Access Point (SAP) used to let the eNB RRC receive a
- * message from a UE RRC.  Each method defined in this class correspond to
- * the reception of a message that is defined in section 6.2.2 of TS
- * 36.331.
+ * \brief Part of the RRC protocol. This Service Access Point (SAP) is used to
+ *        let the eNB RRC receive a message from a UE RRC.  Each method defined
+ *        in this class corresponds to the reception of a message that is
+ *        defined in Section 6.2.2 of TS 36.331.
  */
 class LteEnbRrcSapProvider : public LteRrcSap
 {
@@ -660,11 +847,64 @@
   };
 
   virtual void CompleteSetupUe (uint16_t rnti, CompleteSetupUeParameters params) = 0;
-  virtual void RecvRrcConnectionRequest (uint16_t rnti, RrcConnectionRequest msg) = 0;
-  virtual void RecvRrcConnectionSetupCompleted (uint16_t rnti, RrcConnectionSetupCompleted msg) = 0;
-  virtual void RecvRrcConnectionReconfigurationCompleted (uint16_t rnti, RrcConnectionReconfigurationCompleted msg) = 0;
-  virtual void RecvRrcConnectionReestablishmentRequest (uint16_t rnti, RrcConnectionReestablishmentRequest msg) = 0;
-  virtual void RecvRrcConnectionReestablishmentComplete (uint16_t rnti, RrcConnectionReestablishmentComplete msg) = 0;
+
+  /**
+   * \brief Receive an _RRCConnectionRequest_ message from a UE
+   *        during an RRC connection establishment procedure
+   *        (Section 5.3.3 of TS 36.331).
+   * \param rnti the RNTI of UE which sent the message
+   * \param msg the message
+   */
+  virtual void RecvRrcConnectionRequest (uint16_t rnti,
+                                         RrcConnectionRequest msg) = 0;
+
+  /**
+   * \brief Receive an _RRCConnectionSetupComplete_ message from a UE
+   *        during an RRC connection establishment procedure
+   *        (Section 5.3.3 of TS 36.331).
+   * \param rnti the RNTI of UE which sent the message
+   * \param msg the message
+   */
+  virtual void RecvRrcConnectionSetupCompleted (uint16_t rnti,
+                                                RrcConnectionSetupCompleted msg) = 0;
+
+  /**
+   * \brief Receive an _RRCConnectionReconfigurationComplete_ message from a UE
+   *        during an RRC connection reconfiguration procedure
+   *        (Section 5.3.5 of TS 36.331).
+   * \param rnti the RNTI of UE which sent the message
+   * \param msg the message
+   */
+  virtual void RecvRrcConnectionReconfigurationCompleted (uint16_t rnti,
+                                                          RrcConnectionReconfigurationCompleted msg) = 0;
+
+  /**
+   * \brief Receive an _RRCConnectionReestablishmentRequest_ message from a UE
+   *        during an RRC connection re-establishment procedure
+   *        (Section 5.3.7 of TS 36.331).
+   * \param rnti the RNTI of UE which sent the message
+   * \param msg the message
+   */
+  virtual void RecvRrcConnectionReestablishmentRequest (uint16_t rnti,
+                                                        RrcConnectionReestablishmentRequest msg) = 0;
+
+  /**
+   * \brief Receive an _RRCConnectionReestablishmentComplete_ message from a UE
+   *        during an RRC connection re-establishment procedure
+   *        (Section 5.3.7 of TS 36.331).
+   * \param rnti the RNTI of UE which sent the message
+   * \param msg the message
+   */
+  virtual void RecvRrcConnectionReestablishmentComplete (uint16_t rnti,
+                                                         RrcConnectionReestablishmentComplete msg) = 0;
+
+  /**
+   * \brief Receive a _MeasurementReport_ message from a UE
+   *        during a measurement reporting procedure
+   *        (Section 5.5.5 of TS 36.331).
+   * \param rnti the RNTI of UE which sent the message
+   * \param msg the message
+   */
   virtual void RecvMeasurementReport (uint16_t rnti, MeasurementReport msg) = 0;
 
 };
@@ -777,8 +1017,6 @@
 
   // methods inherited from LteUeRrcSapProvider go here
   virtual void CompleteSetup (CompleteSetupParameters params);
-  virtual void RecvMasterInformationBlock (MasterInformationBlock msg);
-  virtual void RecvSystemInformationBlockType1 (SystemInformationBlockType1 msg);
   virtual void RecvSystemInformation (SystemInformation msg);
   virtual void RecvRrcConnectionSetup (RrcConnectionSetup msg);
   virtual void RecvRrcConnectionReconfiguration (RrcConnectionReconfiguration msg);
@@ -812,20 +1050,6 @@
 
 template <class C>
 void
-MemberLteUeRrcSapProvider<C>::RecvMasterInformationBlock (MasterInformationBlock msg)
-{
-  Simulator::ScheduleNow (&C::DoRecvMasterInformationBlock, m_owner, msg);
-}
-
-template <class C>
-void
-MemberLteUeRrcSapProvider<C>::RecvSystemInformationBlockType1 (SystemInformationBlockType1 msg)
-{
-  Simulator::ScheduleNow (&C::DoRecvSystemInformationBlockType1, m_owner, msg);
-}
-
-template <class C>
-void
 MemberLteUeRrcSapProvider<C>::RecvSystemInformation (SystemInformation msg)
 {
   Simulator::ScheduleNow (&C::DoRecvSystemInformation, m_owner, msg);
@@ -889,8 +1113,6 @@
 
   virtual void SetupUe (uint16_t rnti, SetupUeParameters params);
   virtual void RemoveUe (uint16_t rnti);
-  virtual void SendMasterInformationBlock (MasterInformationBlock msg);
-  virtual void SendSystemInformationBlockType1 (SystemInformationBlockType1 msg);
   virtual void SendSystemInformation (SystemInformation msg);
   virtual void SendRrcConnectionSetup (uint16_t rnti, RrcConnectionSetup msg);
   virtual void SendRrcConnectionReconfiguration (uint16_t rnti, RrcConnectionReconfiguration msg);
@@ -934,20 +1156,6 @@
 }
 
 template <class C>
-void
-MemberLteEnbRrcSapUser<C>::SendMasterInformationBlock (MasterInformationBlock msg)
-{
-  m_owner->DoSendMasterInformationBlock (msg);
-}
-
-template <class C>
-void
-MemberLteEnbRrcSapUser<C>::SendSystemInformationBlockType1 (SystemInformationBlockType1 msg)
-{
-  m_owner->DoSendSystemInformationBlockType1 (msg);
-}
-
-template <class C>
 void
 MemberLteEnbRrcSapUser<C>::SendSystemInformation (SystemInformation msg)
 {
diff -Naur ns-3.18.1/src/lte/model/lte-spectrum-phy.cc ns-3.19/src/lte/model/lte-spectrum-phy.cc
--- ns-3.18.1/src/lte/model/lte-spectrum-phy.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-spectrum-phy.cc	2013-12-20 09:44:50.000000000 -0800
@@ -110,10 +110,12 @@
   return ( (a.m_rnti < b.m_rnti) || ( (a.m_rnti == b.m_rnti) && (a.m_layer < b.m_layer) ) );
 }
 
-NS_OBJECT_ENSURE_REGISTERED (LteSpectrumPhy);
+NS_OBJECT_ENSURE_REGISTERED (LteSpectrumPhy)
+  ;
 
 LteSpectrumPhy::LteSpectrumPhy ()
   : m_state (IDLE),
+    m_cellId (0),
   m_transmissionMode (0),
   m_layersNum (1)
 {
diff -Naur ns-3.18.1/src/lte/model/lte-spectrum-phy.h ns-3.19/src/lte/model/lte-spectrum-phy.h
--- ns-3.18.1/src/lte/model/lte-spectrum-phy.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-spectrum-phy.h	2013-12-20 09:44:50.000000000 -0800
@@ -227,7 +227,7 @@
   * Start a transmission of control frame in DL
   *
   *
-  * @param ctrlMsgList the burst of contrl messages to be transmitted
+  * @param ctrlMsgList the burst of control messages to be transmitted
   * @param pss the flag for transmitting the primary synchronization signal
   *
   * @return true if an error occurred and the transmission was not
@@ -239,9 +239,6 @@
   /**
   * Start a transmission of control frame in UL
   *
-  *
-  * @param pb the burst of control messages to be transmitted
-  *
   * @return true if an error occurred and the transmission was not
   * started, false otherwise.
   */
@@ -250,7 +247,7 @@
 
   /**
    * set the callback for the end of a TX, as part of the
-   * interconnections betweenthe PHY and the MAC
+   * interconnections between the PHY and the MAC
    *
    * @param c the callback
    */
@@ -258,7 +255,7 @@
 
   /**
    * set the callback for the end of a RX in error, as part of the
-   * interconnections betweenthe PHY and the MAC
+   * interconnections between the PHY and the MAC
    *
    * @param c the callback
    */
@@ -266,7 +263,7 @@
 
   /**
    * set the callback for the successful end of a RX, as part of the
-   * interconnections betweenthe PHY and the MAC
+   * interconnections between the PHY and the MAC
    *
    * @param c the callback
    */
@@ -274,7 +271,7 @@
   
   /**
   * set the callback for the successful end of a RX ctrl frame, as part 
-  * of the interconnections betweenthe LteSpectrumPhy and the PHY
+  * of the interconnections between the LteSpectrumPhy and the PHY
   *
   * @param c the callback
   */
@@ -282,7 +279,7 @@
   
   /**
   * set the callback for the erroneous end of a RX ctrl frame, as part 
-  * of the interconnections betweenthe LteSpectrumPhy and the PHY
+  * of the interconnections between the LteSpectrumPhy and the PHY
   *
   * @param c the callback
   */
@@ -298,7 +295,7 @@
 
   /**
   * set the callback for the DL HARQ feedback as part of the 
-  * interconnections betweenthe LteSpectrumPhy and the PHY
+  * interconnections between the LteSpectrumPhy and the PHY
   *
   * @param c the callback
   */
@@ -306,7 +303,7 @@
 
   /**
   * set the callback for the UL HARQ feedback as part of the
-  * interconnections betweenthe LteSpectrumPhy and the PHY
+  * interconnections between the LteSpectrumPhy and the PHY
   *
   * @param c the callback
   */
@@ -330,7 +327,7 @@
   *
   *
   * \param p the new LteSinrChunkProcessor to be added to the RS power 
-  * \processing chain
+  *          processing chain
   */
   void AddRsPowerChunkProcessor (Ptr<LteSinrChunkProcessor> p);
   
@@ -342,7 +339,7 @@
   void AddDataSinrChunkProcessor (Ptr<LteSinrChunkProcessor> p);
 
   /**
-  *  LteSinrChunkProcessor devoted to evaluate intefrerence + noise power 
+  *  LteSinrChunkProcessor devoted to evaluate interference + noise power
   *  in control symbols of the subframe
   *
   * \param p the new LteSinrChunkProcessor to be added to the data processing chain
@@ -350,7 +347,7 @@
   void AddInterferenceCtrlChunkProcessor (Ptr<LteSinrChunkProcessor> p);
 
   /**
-  *  LteSinrChunkProcessor devoted to evaluate intefrerence + noise power
+  *  LteSinrChunkProcessor devoted to evaluate interference + noise power
   *  in data symbols of the subframe
   *
   * \param p the new LteSinrChunkProcessor to be added to the data processing chain
diff -Naur ns-3.18.1/src/lte/model/lte-spectrum-value-helper.h ns-3.19/src/lte/model/lte-spectrum-value-helper.h
--- ns-3.18.1/src/lte/model/lte-spectrum-value-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-spectrum-value-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -102,12 +102,15 @@
    * \param earfcn the carrier frequency (EARFCN) of the transmission
    * \param bandwidth the Transmission Bandwidth Configuration in
    * number of resource blocks
-   * \param txPower the total power in dBm over the whole bandwidth
-   * \param ActiveRbs the list of Active Resource Blocks (PRBs)
+   * \param powerTx the total power in dBm over the whole bandwidth
+   * \param activeRbs the list of Active Resource Blocks (PRBs)
    *
    * \return a pointer to a newly allocated SpectrumValue representing the TX Power Spectral Density in W/Hz for each Resource Block
    */
-  static Ptr<SpectrumValue> CreateTxPowerSpectralDensity (uint16_t earfcn, uint8_t bandwidth, double powerTx, std::vector <int> activeRbs);
+  static Ptr<SpectrumValue> CreateTxPowerSpectralDensity (uint16_t earfcn,
+                                                          uint8_t bandwidth,
+                                                          double powerTx,
+                                                          std::vector <int> activeRbs);
 
 
   /**
diff -Naur ns-3.18.1/src/lte/model/lte-ue-cphy-sap.h ns-3.19/src/lte/model/lte-ue-cphy-sap.h
--- ns-3.18.1/src/lte/model/lte-ue-cphy-sap.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-ue-cphy-sap.h	2013-12-20 09:44:50.000000000 -0800
@@ -53,24 +53,66 @@
    */
   virtual void Reset () = 0;
 
-  /** 
-   * tell the PHY to synchronize with a given eNB for communication purposes
-   * 
-   * \param cellId the ID of the eNB
-   * \param dlEarfcn  the carrier frequency (EARFCN) in downlink
+  /**
+   * \brief Tell the PHY entity to listen to PSS from surrounding cells and
+   *        measure the RSRP.
+   * \param dlEarfcn the downlink carrier frequency (EARFCN) to listen to
+   *
+   * This function will instruct this PHY instance to listen to the DL channel
+   * over the bandwidth of 6 RB at the frequency associated with the given
+   * EARFCN.
+   *
+   * After this, it will start receiving Primary Synchronization Signal (PSS)
+   * and periodically returning measurement reports to RRC via
+   * LteUeCphySapUser::ReportUeMeasurements function.
    */
-  virtual void SyncronizeWithEnb (uint16_t cellId, uint16_t dlEarfcn) = 0;
-  
+  virtual void StartCellSearch (uint16_t dlEarfcn) = 0;
+
   /**
-   * \param dlBandwidth the DL bandwidth in PRBs
+   * \brief Tell the PHY entity to synchronize with a given eNodeB over the
+   *        currently active EARFCN for communication purposes.
+   * \param cellId the ID of the eNodeB to synchronize with
+   *
+   * By synchronizing, the PHY will start receiving various information
+   * transmitted by the eNodeB. For instance, when receiving system information,
+   * the message will be relayed to RRC via
+   * LteUeCphySapUser::RecvMasterInformationBlock and
+   * LteUeCphySapUser::RecvSystemInformationBlockType1 functions.
+   *
+   * Initially, the PHY will be configured to listen to 6 RBs of BCH.
+   * LteUeCphySapProvider::SetDlBandwidth can be called afterwards to increase
+   * the bandwidth.
+   */
+  virtual void SynchronizeWithEnb (uint16_t cellId) = 0;
+
+  /**
+   * \brief Tell the PHY entity to align to the given EARFCN and synchronize
+   *        with a given eNodeB for communication purposes.
+   * \param cellId the ID of the eNodeB to synchronize with
+   * \param dlEarfcn the downlink carrier frequency (EARFCN)
+   *
+   * By synchronizing, the PHY will start receiving various information
+   * transmitted by the eNodeB. For instance, when receiving system information,
+   * the message will be relayed to RRC via
+   * LteUeCphySapUser::RecvMasterInformationBlock and
+   * LteUeCphySapUser::RecvSystemInformationBlockType1 functions.
+   *
+   * Initially, the PHY will be configured to listen to 6 RBs of BCH.
+   * LteUeCphySapProvider::SetDlBandwidth can be called afterwards to increase
+   * the bandwidth.
+   */
+  virtual void SynchronizeWithEnb (uint16_t cellId, uint16_t dlEarfcn) = 0;
+
+  /**
+   * \param dlBandwidth the DL bandwidth in number of PRBs
    */
   virtual void SetDlBandwidth (uint8_t dlBandwidth) = 0;
 
   /** 
-   * Configure uplink (normally done after reception of SIB2)
+   * \brief Configure uplink (normally done after reception of SIB2)
    * 
-   * \param ulEarfcn the carrier frequency (EARFCN) in uplink
-   * \param ulBandwidth the UL bandwidth in PRBs
+   * \param ulEarfcn the uplink carrier frequency (EARFCN)
+   * \param ulBandwidth the UL bandwidth in number of PRBs
    */
   virtual void ConfigureUplink (uint16_t ulEarfcn, uint8_t ulBandwidth) = 0;
 
@@ -86,9 +128,9 @@
   virtual void SetTransmissionMode (uint8_t txMode) = 0;
 
   /**
-   * \param txMode the transmissionMode of the user
+   * \param srcCi the SRS configuration index
    */
-  virtual void SetSrsConfigurationIndex (uint16_t   srcCi) = 0;
+  virtual void SetSrsConfigurationIndex (uint16_t srcCi) = 0;
 
 };
 
@@ -102,40 +144,59 @@
 class LteUeCphySapUser
 {
 public:
-  
+
   /** 
    * destructor
    */
   virtual ~LteUeCphySapUser ();
 
-  
+
   /**
    * Parameters of the ReportUeMeasurements primitive: RSRP [dBm] and RSRQ [dB]
    * See section 5.1.1 and 5.1.3 of TS 36.214
    */
   struct UeMeasurementsElement
-    {
-      uint16_t m_cellId;
-      double m_rsrp;  // [dBm]
-      double m_rsrq;  // [dB]
-    };
+  {
+    uint16_t m_cellId;
+    double m_rsrp;  // [dBm]
+    double m_rsrq;  // [dB]
+  };
+
   struct UeMeasurementsParameters
-    {
-      std::vector <struct UeMeasurementsElement> m_ueMeasurementsList;
-    };
+  {
+    std::vector <struct UeMeasurementsElement> m_ueMeasurementsList;
+  };
 
 
-  /** 
+  /**
+   * \brief Relay an MIB message from the PHY entity to the RRC layer.
+   * \param cellId the ID of the eNodeB where the message originates from
+   * \param mib the Master Information Block message
    * 
-   * \param mib the Master Information Block received on the BCH
+   * This function is typically called after PHY receives an MIB message over
+   * the BCH.
    */
-  virtual void RecvMasterInformationBlock (LteRrcSap::MasterInformationBlock mib) = 0;
+  virtual void RecvMasterInformationBlock (uint16_t cellId,
+                                           LteRrcSap::MasterInformationBlock mib) = 0;
 
   /**
+   * \brief Relay an SIB1 message from the PHY entity to the RRC layer.
+   * \param cellId the ID of the eNodeB where the message originates from
+   * \param sib1 the System Information Block Type 1 message
    *
-   * \param params the structure containing the vector of cellId, SRSP and RSRQ
+   * This function is typically called after PHY receives an SIB1 message over
+   * the BCH.
+   */
+  virtual void RecvSystemInformationBlockType1 (uint16_t cellId,
+                                                LteRrcSap::SystemInformationBlockType1 sib1) = 0;
+
+  /**
+   * \brief Send a report of RSRP and RSRQ values perceived from PSS by the PHY
+   *        entity (after applying layer-1 filtering) to the RRC layer.
+   * \param params the structure containing a vector of cellId, RSRP and RSRQ
    */
   virtual void ReportUeMeasurements (UeMeasurementsParameters params) = 0;
+
 };
 
 
@@ -154,8 +215,10 @@
 
   // inherited from LteUeCphySapProvider
   virtual void Reset ();
-  virtual void SyncronizeWithEnb (uint16_t cellId, uint16_t dlEarfcn);  
-  virtual void SetDlBandwidth (uint8_t ulBandwidth);
+  virtual void StartCellSearch (uint16_t dlEarfcn);
+  virtual void SynchronizeWithEnb (uint16_t cellId);
+  virtual void SynchronizeWithEnb (uint16_t cellId, uint16_t dlEarfcn);
+  virtual void SetDlBandwidth (uint8_t dlBandwidth);
   virtual void ConfigureUplink (uint16_t ulEarfcn, uint8_t ulBandwidth);
   virtual void SetRnti (uint16_t rnti);
   virtual void SetTransmissionMode (uint8_t txMode);
@@ -185,14 +248,28 @@
 }
 
 template <class C>
-void 
-MemberLteUeCphySapProvider<C>::SyncronizeWithEnb (uint16_t cellId, uint16_t dlEarfcn)
+void
+MemberLteUeCphySapProvider<C>::StartCellSearch (uint16_t dlEarfcn)
 {
-  m_owner->DoSyncronizeWithEnb (cellId, dlEarfcn);
+  m_owner->DoStartCellSearch (dlEarfcn);
 }
 
 template <class C>
-void 
+void
+MemberLteUeCphySapProvider<C>::SynchronizeWithEnb (uint16_t cellId)
+{
+  m_owner->DoSynchronizeWithEnb (cellId);
+}
+
+template <class C>
+void
+MemberLteUeCphySapProvider<C>::SynchronizeWithEnb (uint16_t cellId, uint16_t dlEarfcn)
+{
+  m_owner->DoSynchronizeWithEnb (cellId, dlEarfcn);
+}
+
+template <class C>
+void
 MemberLteUeCphySapProvider<C>::SetDlBandwidth (uint8_t dlBandwidth)
 {
   m_owner->DoSetDlBandwidth (dlBandwidth);
@@ -240,8 +317,10 @@
   MemberLteUeCphySapUser (C* owner);
 
   // methods inherited from LteUeCphySapUser go here
-  virtual void RecvMasterInformationBlock (LteRrcSap::MasterInformationBlock mib);
-
+  virtual void RecvMasterInformationBlock (uint16_t cellId,
+                                           LteRrcSap::MasterInformationBlock mib);
+  virtual void RecvSystemInformationBlockType1 (uint16_t cellId,
+                                                LteRrcSap::SystemInformationBlockType1 sib1);
   virtual void ReportUeMeasurements (LteUeCphySapUser::UeMeasurementsParameters params);
 
 private:
@@ -262,9 +341,18 @@
 
 template <class C> 
 void 
-MemberLteUeCphySapUser<C>::RecvMasterInformationBlock (LteRrcSap::MasterInformationBlock mib)
+MemberLteUeCphySapUser<C>::RecvMasterInformationBlock (uint16_t cellId,
+                                                       LteRrcSap::MasterInformationBlock mib)
+{
+  m_owner->DoRecvMasterInformationBlock (cellId, mib);
+}
+
+template <class C>
+void
+MemberLteUeCphySapUser<C>::RecvSystemInformationBlockType1 (uint16_t cellId,
+                                                            LteRrcSap::SystemInformationBlockType1 sib1)
 {
-  m_owner->DoRecvMasterInformationBlock (mib);
+  m_owner->DoRecvSystemInformationBlockType1 (cellId, sib1);
 }
 
 template <class C>
diff -Naur ns-3.18.1/src/lte/model/lte-ue-mac.cc ns-3.19/src/lte/model/lte-ue-mac.cc
--- ns-3.18.1/src/lte/model/lte-ue-mac.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-ue-mac.cc	2013-12-20 09:44:50.000000000 -0800
@@ -41,7 +41,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteUeMac);
+NS_OBJECT_ENSURE_REGISTERED (LteUeMac)
+  ;
 
 
 ///////////////////////////////////////////////////////////
@@ -339,6 +340,10 @@
       std::map <uint8_t, LcInfo>::iterator lcInfoMapIt;
       lcInfoMapIt = m_lcInfoMap.find (lcid);
       NS_ASSERT (lcInfoMapIt !=  m_lcInfoMap.end ());
+      NS_ASSERT_MSG ((lcid != 0) || (((*it).second.txQueueSize == 0)
+                                     && ((*it).second.retxQueueSize == 0)
+                                     && ((*it).second.statusPduSize == 0)),
+                     "BSR should not be used for LCID 0");
       uint8_t lcg = lcInfoMapIt->second.lcConfig.logicalChannelGroup;
       queue.at (lcg) += ((*it).second.txQueueSize + (*it).second.retxQueueSize + (*it).second.statusPduSize);
     }
@@ -411,6 +416,21 @@
   // preambles are sent no one is received, so there is no need
   // for contention resolution
   m_cmacSapUser->NotifyRandomAccessSuccessful ();
+  // trigger tx opportunity for Message 3 over LC 0
+  // this is needed since Message 3's UL GRANT is in the RAR, not in UL-DCIs
+  const uint8_t lc0Lcid = 0;
+  std::map <uint8_t, LcInfo>::iterator lc0InfoIt = m_lcInfoMap.find (lc0Lcid);
+  NS_ASSERT (lc0InfoIt != m_lcInfoMap.end ());
+  std::map <uint8_t, LteMacSapProvider::ReportBufferStatusParameters>::iterator lc0BsrIt
+    = m_ulBsrReceived.find (lc0Lcid);
+  if ((lc0BsrIt != m_ulBsrReceived.end ())
+      && (lc0BsrIt->second.txQueueSize > 0))
+    {
+      NS_ASSERT_MSG (raResponse.m_grant.m_tbSize > lc0BsrIt->second.txQueueSize, 
+                     "segmentation of Message 3 is not allowed");
+      lc0InfoIt->second.macSapUser->NotifyTxOpportunity (raResponse.m_grant.m_tbSize, 0, 0); 
+      lc0BsrIt->second.txQueueSize = 0;
+    }
 }
 
 void 
diff -Naur ns-3.18.1/src/lte/model/lte-ue-net-device.cc ns-3.19/src/lte/model/lte-ue-net-device.cc
--- ns-3.18.1/src/lte/model/lte-ue-net-device.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-ue-net-device.cc	2013-12-20 09:44:50.000000000 -0800
@@ -48,7 +48,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED ( LteUeNetDevice);
+NS_OBJECT_ENSURE_REGISTERED ( LteUeNetDevice)
+  ;
 
 
 TypeId LteUeNetDevice::GetTypeId (void)
@@ -57,6 +58,12 @@
     tid =
     TypeId ("ns3::LteUeNetDevice")
     .SetParent<LteNetDevice> ()
+    .AddConstructor<LteUeNetDevice> ()
+    .AddAttribute ("EpcUeNas",
+                   "The NAS associated to this UeNetDevice",
+                   PointerValue (),
+                   MakePointerAccessor (&LteUeNetDevice::m_nas),
+                   MakePointerChecker <EpcUeNas> ())
     .AddAttribute ("LteUeRrc",
                    "The RRC associated to this UeNetDevice",
                    PointerValue (),
@@ -74,10 +81,25 @@
                    MakePointerChecker <LteUePhy> ())
     .AddAttribute ("Imsi",
                    "International Mobile Subscriber Identity assigned to this UE",
-                   TypeId::ATTR_GET,
-                   UintegerValue (0), // not used because the attribute is read-only
+                   UintegerValue (0),
                    MakeUintegerAccessor (&LteUeNetDevice::m_imsi),
                    MakeUintegerChecker<uint64_t> ())
+    .AddAttribute ("DlEarfcn",
+                   "Downlink E-UTRA Absolute Radio Frequency Channel Number (EARFCN) "
+                   "as per 3GPP 36.101 Section 5.7.3. ",
+                   UintegerValue (100),
+                   MakeUintegerAccessor (&LteUeNetDevice::SetDlEarfcn,
+                                         &LteUeNetDevice::GetDlEarfcn),
+                   MakeUintegerChecker<uint16_t> (0, 6149))
+    .AddAttribute ("CsgId",
+                   "The Closed Subscriber Group (CSG) identity that this UE is associated with, "
+                   "i.e., giving the UE access to cells which belong to this particular CSG. "
+                   "This restriction only applies to initial cell selection and EPC-enabled simulation. "
+                   "This does not revoke the UE's access to non-CSG cells. ",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&LteUeNetDevice::SetCsgId,
+                                         &LteUeNetDevice::GetCsgId),
+                   MakeUintegerChecker<uint32_t> ())
   ;
 
   return tid;
@@ -85,21 +107,9 @@
 
 
 LteUeNetDevice::LteUeNetDevice (void)
+  : m_isConstructed (false)
 {
   NS_LOG_FUNCTION (this);
-  NS_FATAL_ERROR ("This constructor should not be called");
-}
-
-
-  LteUeNetDevice::LteUeNetDevice (Ptr<Node> node, Ptr<LteUePhy> phy, Ptr<LteUeMac> mac, Ptr<LteUeRrc> rrc, Ptr<EpcUeNas> nas, uint64_t imsi)
-{
-  NS_LOG_FUNCTION (this);
-  m_phy = phy;
-  m_mac = mac;
-  m_rrc = rrc;
-  m_nas = nas;
-  SetNode (node);
-  m_imsi = imsi;
 }
 
 LteUeNetDevice::~LteUeNetDevice (void)
@@ -127,9 +137,22 @@
 LteUeNetDevice::UpdateConfig (void)
 {
   NS_LOG_FUNCTION (this);
-  m_nas->SetImsi (m_imsi);
-  m_rrc->SetImsi (m_imsi);
-  
+
+  if (m_isConstructed)
+    {
+      NS_LOG_LOGIC (this << " Updating configuration: IMSI " << m_imsi
+                         << " CSG ID " << m_csgId);
+      m_nas->SetImsi (m_imsi);
+      m_rrc->SetImsi (m_imsi);
+      m_nas->SetCsgId (m_csgId); // this also handles propagation to RRC
+    }
+  else
+    {
+      /*
+       * NAS and RRC instances are not be ready yet, so do nothing now and
+       * expect ``DoInitialize`` to re-invoke this function.
+       */
+    }
 }
 
 
@@ -171,6 +194,35 @@
   return m_imsi;
 }
 
+uint16_t
+LteUeNetDevice::GetDlEarfcn () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_dlEarfcn;
+}
+
+void
+LteUeNetDevice::SetDlEarfcn (uint16_t earfcn)
+{
+  NS_LOG_FUNCTION (this << earfcn);
+  m_dlEarfcn = earfcn;
+}
+
+uint32_t
+LteUeNetDevice::GetCsgId () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_csgId;
+}
+
+void
+LteUeNetDevice::SetCsgId (uint32_t csgId)
+{
+  NS_LOG_FUNCTION (this << csgId);
+  m_csgId = csgId;
+  UpdateConfig (); // propagate the change down to NAS and RRC
+}
+
 void
 LteUeNetDevice::SetTargetEnb (Ptr<LteEnbNetDevice> enb)
 {
@@ -190,6 +242,7 @@
 LteUeNetDevice::DoInitialize (void)
 {
   NS_LOG_FUNCTION (this);
+  m_isConstructed = true;
   UpdateConfig ();
   m_phy->Initialize ();
   m_mac->Initialize ();
diff -Naur ns-3.18.1/src/lte/model/lte-ue-net-device.h ns-3.19/src/lte/model/lte-ue-net-device.h
--- ns-3.18.1/src/lte/model/lte-ue-net-device.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-ue-net-device.h	2013-12-20 09:44:50.000000000 -0800
@@ -55,43 +55,65 @@
   static TypeId GetTypeId (void);
 
   LteUeNetDevice (void);
-  /**
-   * \brief Create an UE net device
-   * \param node the node to which the device belongs
-   * \param phy the PHY entity
-   * \param mac the MAC entity
-   * \param rrc the RRC entity
-   * \param nas the NAS entity
-   * \param imsi the unique UE identifier
-   * 
-   */
-  LteUeNetDevice (Ptr<Node> node, Ptr<LteUePhy> phy, Ptr<LteUeMac> mac, Ptr<LteUeRrc> rrc, Ptr<EpcUeNas> nas, uint64_t imsi);
-
   virtual ~LteUeNetDevice (void);
   virtual void DoDispose ();
 
 
   // inherited from NetDevice
   virtual bool Send (Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber);
-  
+
 
   Ptr<LteUeMac> GetMac (void) const;
 
-  Ptr<LteUeRrc> GetRrc () const ;
+  Ptr<LteUeRrc> GetRrc () const;
 
   Ptr<LteUePhy> GetPhy (void) const;
-  
+
   Ptr<EpcUeNas> GetNas (void) const;
 
   uint64_t GetImsi () const;
 
- 
+  /**
+   * \return the downlink carrier frequency (EARFCN)
+   *
+   * Note that real-life handset typically supports more than one EARFCN, but
+   * the sake of simplicity we assume only one EARFCN is supported.
+   */
+  uint16_t GetDlEarfcn () const;
+
+  /**
+   * \param earfcn the downlink carrier frequency (EARFCN)
+   *
+   * Note that real-life handset typically supports more than one EARFCN, but
+   * the sake of simplicity we assume only one EARFCN is supported.
+   */
+  void SetDlEarfcn (uint16_t earfcn);
+
+  /**
+   * \brief Returns the CSG ID the UE is currently a member of.
+   * \return the Closed Subscriber Group identity
+   */
+  uint32_t GetCsgId () const;
+
+  /**
+   * \brief Enlist the UE device as a member of a particular CSG.
+   * \param csgId the intended Closed Subscriber Group identity
+   *
+   * UE is associated with a single CSG identity, and thus becoming a member of
+   * this particular CSG. As a result, the UE may gain access to cells which
+   * belong to this CSG. This does not revoke the UE's access to non-CSG cells.
+   *
+   * \note This restriction only applies to initial cell selection and
+   *       EPC-enabled simulation.
+   */
+  void SetCsgId (uint32_t csgId);
+
   /**
    * \brief Set the targer eNB where the UE is registered
    * \param enb
    */
   void SetTargetEnb (Ptr<LteEnbNetDevice> enb);
-  
+
   /**
    * \brief Get the targer eNB where the UE is registered
    * \return the pointer to the enb
@@ -105,16 +127,18 @@
 
 
 private:
+  bool m_isConstructed;
 
   /**
-   * Some attributes are exported as
-   * attributes of the LteUeNetDevice from a user perspective,  but
-   * are actually used also in other modules as well (the RRC, the
-   * PHY...). This methods takes care of updating the
-   * configuration of all modules so that their copy of the attribute
-   * values is in sync with the one in the LteUeNetDevice.
+   * \brief Propagate attributes and configuration to sub-modules.
+   *
+   * Several attributes (e.g., the IMSI) are exported as the attributes of the
+   * LteUeNetDevice from a user perspective, but are actually used also in other
+   * sub-modules (the RRC, the PHY, etc.). This method takes care of updating
+   * the configuration of all these sub-modules so that their copy of attribute
+   * values are in sync with the one in the LteUeNetDevice.
    */
-  void UpdateConfig (void);
+  void UpdateConfig ();
 
   Ptr<LteEnbNetDevice> m_targetEnb;
 
@@ -124,8 +148,12 @@
   Ptr<EpcUeNas> m_nas;
 
   uint64_t m_imsi;
-  
-};
+
+  uint16_t m_dlEarfcn; /**< downlink carrier frequency */
+
+  uint32_t m_csgId;
+
+}; // end of class LteUeNetDevice
 
 } // namespace ns3
 
diff -Naur ns-3.18.1/src/lte/model/lte-ue-phy.cc ns-3.19/src/lte/model/lte-ue-phy.cc
--- ns-3.18.1/src/lte/model/lte-ue-phy.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-ue-phy.cc	2013-12-20 09:44:50.000000000 -0800
@@ -106,8 +106,20 @@
 // LteUePhy methods
 ////////////////////////////////////////
 
+const char* g_uePhyStateName[LteUePhy::NUM_STATES] =
+{
+  "CELL_SEARCH",
+  "SYNCHRONIZED"
+};
+
+std::string ToString (LteUePhy::State s)
+{
+  return std::string (g_uePhyStateName[s]);
+}
 
-NS_OBJECT_ENSURE_REGISTERED (LteUePhy);
+
+NS_OBJECT_ENSURE_REGISTERED (LteUePhy)
+  ;
 
 
 LteUePhy::LteUePhy ()
@@ -118,10 +130,11 @@
 
 LteUePhy::LteUePhy (Ptr<LteSpectrumPhy> dlPhy, Ptr<LteSpectrumPhy> ulPhy)
   : LtePhy (dlPhy, ulPhy),
-    m_p10CqiPeriocity (MilliSeconds (1)),  // ideal behavior  
+    m_p10CqiPeriocity (MilliSeconds (1)),  // ideal behavior
     m_a30CqiPeriocity (MilliSeconds (1)),  // ideal behavior
     m_uePhySapUser (0),
     m_ueCphySapUser (0),
+    m_state (CELL_SEARCH),
     m_subframeNo (0),
     m_rsReceivedPowerUpdated (false),
     m_rsInterferencePowerUpdated (false),
@@ -134,7 +147,7 @@
   m_uePhySapProvider = new UeMemberLteUePhySapProvider (this);
   m_ueCphySapProvider = new MemberLteUeCphySapProvider<LteUePhy> (this);
   m_macChTtiDelay = UL_PUSCH_TTIS_DELAY;
-  
+
   NS_ASSERT_MSG (Simulator::Now ().GetNanoSeconds () == 0,
                  "Cannot create UE devices after simulation started");
   Simulator::ScheduleNow (&LteUePhy::SubframeIndication, this, 1, 1);
@@ -185,40 +198,40 @@
                                        &LteUePhy::GetNoiseFigure),
                    MakeDoubleChecker<double> ())
     .AddAttribute ("TxMode1Gain",
-                  "Transmission mode 1 gain in dB",
-                  DoubleValue (0.0),
-                   MakeDoubleAccessor (&LteUePhy::SetTxMode1Gain                       ),
-                  MakeDoubleChecker<double> ())
+                   "Transmission mode 1 gain in dB",
+                   DoubleValue (0.0),
+                   MakeDoubleAccessor (&LteUePhy::SetTxMode1Gain),
+                   MakeDoubleChecker<double> ())
     .AddAttribute ("TxMode2Gain",
-                    "Transmission mode 2 gain in dB",
-                    DoubleValue (4.2),
-                   MakeDoubleAccessor (&LteUePhy::SetTxMode2Gain                       ),
-                    MakeDoubleChecker<double> ())
+                   "Transmission mode 2 gain in dB",
+                   DoubleValue (4.2),
+                   MakeDoubleAccessor (&LteUePhy::SetTxMode2Gain),
+                   MakeDoubleChecker<double> ())
     .AddAttribute ("TxMode3Gain",
-                    "Transmission mode 3 gain in dB",
-                    DoubleValue (-2.8),
-                   MakeDoubleAccessor (&LteUePhy::SetTxMode3Gain                       ),
-                    MakeDoubleChecker<double> ())
+                   "Transmission mode 3 gain in dB",
+                   DoubleValue (-2.8),
+                   MakeDoubleAccessor (&LteUePhy::SetTxMode3Gain),
+                   MakeDoubleChecker<double> ())
     .AddAttribute ("TxMode4Gain",
-                    "Transmission mode 4 gain in dB",
-                    DoubleValue (0.0),
-                   MakeDoubleAccessor (&LteUePhy::SetTxMode4Gain                       ),
-                    MakeDoubleChecker<double> ())
+                   "Transmission mode 4 gain in dB",
+                   DoubleValue (0.0),
+                   MakeDoubleAccessor (&LteUePhy::SetTxMode4Gain),
+                   MakeDoubleChecker<double> ())
     .AddAttribute ("TxMode5Gain",
-                  "Transmission mode 5 gain in dB",
-                  DoubleValue (0.0),
-                   MakeDoubleAccessor (&LteUePhy::SetTxMode5Gain                       ),
-                  MakeDoubleChecker<double> ())
+                   "Transmission mode 5 gain in dB",
+                   DoubleValue (0.0),
+                   MakeDoubleAccessor (&LteUePhy::SetTxMode5Gain),
+                   MakeDoubleChecker<double> ())
     .AddAttribute ("TxMode6Gain",
-                    "Transmission mode 6 gain in dB",
-                    DoubleValue (0.0),
-                   MakeDoubleAccessor (&LteUePhy::SetTxMode6Gain                       ),
-                    MakeDoubleChecker<double> ())
+                   "Transmission mode 6 gain in dB",
+                   DoubleValue (0.0),
+                   MakeDoubleAccessor (&LteUePhy::SetTxMode6Gain),
+                   MakeDoubleChecker<double> ())
     .AddAttribute ("TxMode7Gain",
-                  "Transmission mode 7 gain in dB",
-                  DoubleValue (0.0),
-                   MakeDoubleAccessor (&LteUePhy::SetTxMode7Gain                       ),
-                  MakeDoubleChecker<double> ())
+                   "Transmission mode 7 gain in dB",
+                   DoubleValue (0.0),
+                   MakeDoubleAccessor (&LteUePhy::SetTxMode7Gain),
+                   MakeDoubleChecker<double> ())
     .AddTraceSource ("ReportCurrentCellRsrpSinr",
                      "RSRP and SINR statistics.",
                      MakeTraceSourceAccessor (&LteUePhy::m_reportCurrentCellRsrpSinrTrace))
@@ -243,18 +256,21 @@
                    MakePointerAccessor (&LteUePhy::GetUlSpectrumPhy),
                    MakePointerChecker <LteSpectrumPhy> ())
     .AddAttribute ("RsrqUeMeasThreshold",
-                  "Receive threshold for PSS on RSRQ [dB]",
-                  DoubleValue (-1000.0),
-                   MakeDoubleAccessor (&LteUePhy::m_pssReceptionThreshold                    ),
-                  MakeDoubleChecker<double> ())
+                   "Receive threshold for PSS on RSRQ [dB]",
+                   DoubleValue (-1000.0),
+                   MakeDoubleAccessor (&LteUePhy::m_pssReceptionThreshold),
+                   MakeDoubleChecker<double> ())
     .AddAttribute ("UeMeasurementsFilterPeriod",
-                  "Time period for reporting UE measurements (default 200 ms.) ",
-                  TimeValue (MilliSeconds (200)),
-                  MakeTimeAccessor (&LteUePhy::m_ueMeasurementsFilterPeriod),
-                  MakeTimeChecker ())
+                   "Time period for reporting UE measurements (default 200 ms.) ",
+                   TimeValue (MilliSeconds (200)),
+                   MakeTimeAccessor (&LteUePhy::m_ueMeasurementsFilterPeriod),
+                   MakeTimeChecker ())
     .AddTraceSource ("ReportUeMeasurements",
                      "Report UE measurements RSRP (dBm) and RSRQ (dB).",
                      MakeTraceSourceAccessor (&LteUePhy::m_reportUeMeasurements))
+    .AddTraceSource ("StateTransition",
+                     "Trace fired upon every UE PHY state transition",
+                     MakeTraceSourceAccessor (&LteUePhy::m_stateTransitionTrace))
   ;
   return tid;
 }
@@ -408,34 +424,33 @@
 {
   NS_LOG_FUNCTION (this);
 
-  if ((!(m_dlConfigured && m_ulConfigured)) || (m_rnti == 0))
-    {
-      // abort method, the UE is still not registered
-      m_pssList.clear ();
-      return;
-    }
+  NS_ASSERT (m_state != CELL_SEARCH);
+  NS_ASSERT (m_cellId > 0);
 
-  // check periodic wideband CQI
-  if (Simulator::Now () > m_p10CqiLast + m_p10CqiPeriocity)
+  if (m_dlConfigured && m_ulConfigured && (m_rnti > 0))
     {
-      Ptr<LteUeNetDevice> thisDevice = GetDevice ()->GetObject<LteUeNetDevice> ();
-      Ptr<DlCqiLteControlMessage> msg = CreateDlCqiFeedbackMessage (sinr);
-      if (msg)
+      // check periodic wideband CQI
+      if (Simulator::Now () > m_p10CqiLast + m_p10CqiPeriocity)
         {
-          DoSendLteControlMessage (msg);
+          Ptr<LteUeNetDevice> thisDevice = GetDevice ()->GetObject<LteUeNetDevice> ();
+          Ptr<DlCqiLteControlMessage> msg = CreateDlCqiFeedbackMessage (sinr);
+          if (msg)
+            {
+              DoSendLteControlMessage (msg);
+            }
+          m_p10CqiLast = Simulator::Now ();
         }
-      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)
+      // check aperiodic high-layer configured subband CQI
+      if  (Simulator::Now () > m_a30CqiLast + m_a30CqiPeriocity)
         {
-          DoSendLteControlMessage (msg);
+          Ptr<LteUeNetDevice> thisDevice = GetDevice ()->GetObject<LteUeNetDevice> ();
+          Ptr<DlCqiLteControlMessage> msg = CreateDlCqiFeedbackMessage (sinr);
+          if (msg)
+            {
+              DoSendLteControlMessage (msg);
+            }
+          m_a30CqiLast = Simulator::Now ();
         }
-      m_a30CqiLast = Simulator::Now ();
     }
 
   // Generate PHY trace
@@ -472,20 +487,22 @@
       m_rsrpSinrSampleCounter = 0;
     }
 
-  // Generate UE Measurements for upper layers
   if (m_pssReceived)
     {
+      // measure instantaneous RSRQ now
       NS_ASSERT_MSG (m_rsInterferencePowerUpdated, " RS interference power info obsolete");
-      // PSSs received
-      NS_LOG_DEBUG (this << " Process PSS RNTI " << m_rnti << " cellId " << m_cellId << " PSS num " << m_pssList.size ());
+
       std::list <PssElement>::iterator itPss = m_pssList.begin ();
       while (itPss != m_pssList.end ())
         {
-          uint8_t rbNum = 0;
+          uint16_t rbNum = 0;
           double rsrqSum = 0.0;
-          Values::const_iterator itIntN = m_rsIntereferencePower.ConstValuesBegin ();
+
+          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++)
+          for (itPj = m_rsReceivedPower.ConstValuesBegin ();
+               itPj != m_rsReceivedPower.ConstValuesEnd ();
+               itIntN++, itPj++)
             {
               rbNum++;
               // convert PSD [W/Hz] to linear power [W] for the single RE
@@ -493,43 +510,31 @@
               double intPowerTxW = ((*itPj) * 180000.0) / 12.0;
               rsrqSum += (2 * (noisePowerTxW + intPowerTxW));
             }
+
           NS_ASSERT (rbNum == (*itPss).nRB);
-          double rsrp_dBm = 10 * log10 (1000 * ((*itPss).pssPsdSum / (double)rbNum));
           double rsrq_dB = 10 * log10 ((*itPss).pssPsdSum / rsrqSum);
 
           if (rsrq_dB > m_pssReceptionThreshold)
             {
-              // report UE Measurements to upper layers
-              NS_LOG_INFO (this << " PSS received from CellId " << (*itPss).cellId << " has RSRP " << rsrp_dBm << " and RSRQ " << rsrq_dB << " RBnum " << (uint16_t)rbNum);
+              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 =  m_UeMeasurementsMap.find ((*itPss).cellId);
-              if (itMeasMap == m_UeMeasurementsMap.end ())
-                {
-                  // insert new entry
-                  UeMeasurementsElement newEl;
-                  newEl.rsrpSum = rsrp_dBm;
-                  newEl.rsrpNum = 1;
-                  newEl.rsrqSum = rsrq_dB;
-                  newEl.rsrqNum = 1;
-                  m_UeMeasurementsMap.insert (std::pair <uint16_t, UeMeasurementsElement> ((*itPss).cellId, newEl));
-                }
-              else
-                {
-                  (*itMeasMap).second.rsrpSum += rsrp_dBm;
-                  (*itMeasMap).second.rsrpNum++;
-                  (*itMeasMap).second.rsrqSum += rsrq_dB;
-                  (*itMeasMap).second.rsrqNum++;
-                }
-
+              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++;
-        }
-        m_pssList.clear ();
-    }
 
+        } // end of while (itPss != m_pssList.end ())
 
-  
-}
+      m_pssList.clear ();
+
+    } // end of if (m_pssReceived)
+
+} // end of void LteUePhy::GenerateCtrlCqiReport (const SpectrumValue& sinr)
 
 void
 LteUePhy::GenerateDataCqiReport (const SpectrumValue& sinr)
@@ -542,7 +547,7 @@
 {
   NS_LOG_FUNCTION (this << interf);
   m_rsInterferencePowerUpdated = true;
-  m_rsIntereferencePower = interf; 
+  m_rsInterferencePower = interf;
 }
 
 void
@@ -550,7 +555,7 @@
 {
   NS_LOG_FUNCTION (this << power);
   m_rsReceivedPowerUpdated = true;
-  m_rsReceivedPower = power;  
+  m_rsReceivedPower = power;
 }
 
 
@@ -559,7 +564,7 @@
 LteUePhy::CreateDlCqiFeedbackMessage (const SpectrumValue& sinr)
 {
   NS_LOG_FUNCTION (this);
-  
+
 
   // apply transmission mode gain
   NS_ASSERT (m_transmissionMode < m_txModeGain.size ());
@@ -573,7 +578,7 @@
   if (Simulator::Now () > m_p10CqiLast + m_p10CqiPeriocity)
     {
       cqi = m_amc->CreateCqiFeedbacks (newSinr, m_dlBandwidth);
-      
+
       int nLayer = TransmissionModesLayers::TxMode2LayerNum (m_transmissionMode);
       int nbSubChannels = cqi.size ();
       double cqiSum = 0.0;
@@ -660,27 +665,41 @@
 {
   NS_LOG_FUNCTION (this << Simulator::Now ());
   NS_LOG_DEBUG (this << " Report UE Measurements ");
+
   LteUeCphySapUser::UeMeasurementsParameters ret;
+
   std::map <uint16_t, UeMeasurementsElement>::iterator it;
-  for (it = m_UeMeasurementsMap.begin (); it != m_UeMeasurementsMap.end (); it++)
+  for (it = m_ueMeasurementsMap.begin (); it != m_ueMeasurementsMap.end (); it++)
     {
       double avg_rsrp = (*it).second.rsrpSum / (double)(*it).second.rsrpNum;
       double avg_rsrq = (*it).second.rsrqSum / (double)(*it).second.rsrqNum;
-      NS_LOG_DEBUG (this << " CellId " << (*it).first << " RSRP " << avg_rsrp << " (nSamples " << (*it).second.rsrpNum << ") RSRQ " << avg_rsrq << " (nSamples " << (*it).second.rsrpNum << ")");
+      /*
+       * In CELL_SEARCH state, this may result in avg_rsrq = 0/0 = -nan.
+       * UE RRC must take this into account when receiving measurement reports.
+       * TODO remove this shortcoming by calculating RSRQ during CELL_SEARCH
+       */
+      NS_LOG_DEBUG (this << " CellId " << (*it).first
+                         << " RSRP " << avg_rsrp
+                         << " (nSamples " << (uint16_t)(*it).second.rsrpNum << ")"
+                         << " RSRQ " << avg_rsrq
+                         << " (nSamples " << (uint16_t)(*it).second.rsrqNum << ")");
+
       LteUeCphySapUser::UeMeasurementsElement newEl;
       newEl.m_cellId = (*it).first;
       newEl.m_rsrp = avg_rsrp;
       newEl.m_rsrq = avg_rsrq;
       ret.m_ueMeasurementsList.push_back (newEl);
+
       // report to UE measurements trace
-      m_reportUeMeasurements (m_rnti, m_cellId, avg_rsrp, avg_rsrq, ((*it).first == m_cellId ? 1 : 0));
+      m_reportUeMeasurements (m_rnti, (*it).first, avg_rsrp, avg_rsrq, ((*it).first == m_cellId ? 1 : 0));
     }
-  m_ueCphySapUser-> ReportUeMeasurements(ret);
-  m_UeMeasurementsMap.clear ();
-  Simulator::Schedule (m_ueMeasurementsFilterPeriod, &LteUePhy::ReportUeMeasurements, this);
-}
 
+  // report to RRC
+  m_ueCphySapUser->ReportUeMeasurements (ret);
 
+  m_ueMeasurementsMap.clear ();
+  Simulator::Schedule (m_ueMeasurementsFilterPeriod, &LteUePhy::ReportUeMeasurements, this);
+}
 
 void
 LteUePhy::DoSendLteControlMessage (Ptr<LteControlMessage> msg)
@@ -708,7 +727,7 @@
 LteUePhy::ReceiveLteControlMessageList (std::list<Ptr<LteControlMessage> > msgList)
 {
   NS_LOG_FUNCTION (this);
-  
+
   std::list<Ptr<LteControlMessage> >::iterator it;
   for (it = msgList.begin (); it != msgList.end(); it++)
   {
@@ -760,7 +779,7 @@
     }
     else if (msg->GetMessageType () == LteControlMessage::UL_DCI) 
     {
-      // set the uplink bandwidht according to the UL-CQI
+      // set the uplink bandwidth according to the UL-CQI
       Ptr<UlDciLteControlMessage> msg2 = DynamicCast<UlDciLteControlMessage> (msg);
       UlDciListElement_s dci = msg2->GetDci ();
       if (dci.m_rnti != m_rnti)
@@ -828,8 +847,16 @@
     else if (msg->GetMessageType () == LteControlMessage::MIB) 
       {
         NS_LOG_INFO ("received MIB");
+        NS_ASSERT (m_cellId > 0);
         Ptr<MibLteControlMessage> msg2 = DynamicCast<MibLteControlMessage> (msg);
-        m_ueCphySapUser->RecvMasterInformationBlock (msg2->GetMib ());
+        m_ueCphySapUser->RecvMasterInformationBlock (m_cellId, msg2->GetMib ());
+      }
+    else if (msg->GetMessageType () == LteControlMessage::SIB1)
+      {
+        NS_LOG_INFO ("received SIB1");
+        NS_ASSERT (m_cellId > 0);
+        Ptr<Sib1LteControlMessage> msg2 = DynamicCast<Sib1LteControlMessage> (msg);
+        m_ueCphySapUser->RecvSystemInformationBlockType1 (m_cellId, msg2->GetSib1 ());
       }
     else
     {
@@ -847,14 +874,7 @@
 LteUePhy::ReceivePss (uint16_t cellId, Ptr<SpectrumValue> p)
 {
   NS_LOG_FUNCTION (this << cellId << (*p));
-  if (!m_dlConfigured)
-    {
-      // LteUePhy not yet configured -> skip measurement
-      return;
-    }
-  m_pssReceived = true;
-  PssElement el;
-  el.cellId = cellId;
+
   double sum = 0.0;
   uint16_t nRB = 0;
   Values::const_iterator itPi;
@@ -865,10 +885,43 @@
       sum += powerTxW;
       nRB++;
     }
+
+  // measure instantaneous RSRP now
+  double rsrp_dBm = 10 * log10 (1000 * (sum / (double)nRB));
+  NS_LOG_INFO (this << " PSS RNTI " << m_rnti << " cellId " << m_cellId
+                    << " has RSRP " << rsrp_dBm << " and RBnum " << nRB);
+  // note that m_pssReceptionThreshold does not apply here
+
+  // store measurements
+  std::map <uint16_t, UeMeasurementsElement>::iterator itMeasMap = m_ueMeasurementsMap.find (cellId);
+  if (itMeasMap == m_ueMeasurementsMap.end ())
+    {
+      // insert new entry
+      UeMeasurementsElement newEl;
+      newEl.rsrpSum = rsrp_dBm;
+      newEl.rsrpNum = 1;
+      newEl.rsrqSum = 0;
+      newEl.rsrqNum = 0;
+      m_ueMeasurementsMap.insert (std::pair <uint16_t, UeMeasurementsElement> (cellId, newEl));
+    }
+  else
+    {
+      (*itMeasMap).second.rsrpSum += rsrp_dBm;
+      (*itMeasMap).second.rsrpNum++;
+    }
+
+  /*
+   * Collect the PSS for later processing in GenerateCtrlCqiReport()
+   * (to be called from ChunkProcessor after RX is finished).
+   */
+  m_pssReceived = true;
+  PssElement el;
+  el.cellId = cellId;
   el.pssPsdSum = sum;
   el.nRB = nRB;
   m_pssList.push_back (el);
-}
+
+} // end of void LteUePhy::ReceivePss (uint16_t cellId, Ptr<SpectrumValue> p)
 
 
 void
@@ -884,17 +937,17 @@
   NS_LOG_FUNCTION (this << frameNo << subframeNo);
 
   NS_ASSERT_MSG (frameNo > 0, "the SRS index check code assumes that frameNo starts at 1");
-  
+
   // refresh internal variables
   m_rsReceivedPowerUpdated = false;
   m_rsInterferencePowerUpdated = false;
   m_pssReceived = false;
-  
+
   if (m_ulConfigured)
     {
       // update uplink transmission mask according to previous UL-CQIs
       SetSubChannelsForTransmission (m_subChannelsForTransmissionQueue.at (0));
-   
+
       // shift the queue
       for (uint8_t i = 1; i < m_macChTtiDelay; i++)
         {
@@ -926,7 +979,7 @@
         }
       else
         {
-      // send only PUCCH (ideal: fake null bandwidth signal)
+          // send only PUCCH (ideal: fake null bandwidth signal)
           if (ctrlMsg.size ()>0)
             {
               NS_LOG_LOGIC (this << " UE - start TX PUCCH (NO PUSCH)");
@@ -953,9 +1006,10 @@
     }
   
   // schedule next subframe indication
-  Simulator::Schedule (Seconds (GetTti ()), &LteUePhy::SubframeIndication, this, frameNo, subframeNo);  
+  Simulator::Schedule (Seconds (GetTti ()), &LteUePhy::SubframeIndication, this, frameNo, subframeNo);
 }
-  
+
+
 void
 LteUePhy::SendSrs ()
 {
@@ -976,7 +1030,7 @@
 LteUePhy::DoReset ()
 {
   NS_LOG_FUNCTION (this);
-  
+
   m_rnti = 0;
   m_transmissionMode = 0;
   m_srsPeriodicity = 0;
@@ -1005,25 +1059,47 @@
   m_sendSrsEvent.Cancel ();
   m_downlinkSpectrumPhy->Reset ();
   m_uplinkSpectrumPhy->Reset ();
+
+} // end of void LteUePhy::DoReset ()
+
+void
+LteUePhy::DoStartCellSearch (uint16_t dlEarfcn)
+{
+  NS_LOG_FUNCTION (this << dlEarfcn);
+  m_dlEarfcn = dlEarfcn;
+  DoSetDlBandwidth (6); // configure DL for receiving PSS
+  SwitchToState (CELL_SEARCH);
 }
 
 void
-LteUePhy::DoSyncronizeWithEnb (uint16_t cellId, uint16_t dlEarfcn)
+LteUePhy::DoSynchronizeWithEnb (uint16_t cellId, uint16_t dlEarfcn)
+{
+  NS_LOG_FUNCTION (this << cellId << dlEarfcn);
+  m_dlEarfcn = dlEarfcn;
+  DoSynchronizeWithEnb (cellId);
+}
+
+void
+LteUePhy::DoSynchronizeWithEnb (uint16_t cellId)
 {
   NS_LOG_FUNCTION (this << cellId);
+
+  if (cellId == 0)
+    {
+      NS_FATAL_ERROR ("Cell ID shall not be zero");
+    }
+
   m_cellId = cellId;
-  m_dlEarfcn = dlEarfcn;
   m_downlinkSpectrumPhy->SetCellId (cellId);
   m_uplinkSpectrumPhy->SetCellId (cellId);
 
-  // configure DL for receing the BCH with the minimum bandwith
-  m_dlBandwidth = 6;
-  Ptr<SpectrumValue> noisePsd = LteSpectrumValueHelper::CreateNoisePowerSpectralDensity (m_dlEarfcn, m_dlBandwidth, m_noiseFigure);
-  m_downlinkSpectrumPhy->SetNoisePowerSpectralDensity (noisePsd);
-  m_downlinkSpectrumPhy->GetChannel ()->AddRx (m_downlinkSpectrumPhy);  
-  
+  // configure DL for receiving the BCH with the minimum bandwidth
+  DoSetDlBandwidth (6);
+
   m_dlConfigured = false;
   m_ulConfigured = false;
+
+  SwitchToState (SYNCHRONIZED);
 }
 
 void
@@ -1048,10 +1124,10 @@
               break;
             }
         }
-  
+
       Ptr<SpectrumValue> noisePsd = LteSpectrumValueHelper::CreateNoisePowerSpectralDensity (m_dlEarfcn, m_dlBandwidth, m_noiseFigure);
       m_downlinkSpectrumPhy->SetNoisePowerSpectralDensity (noisePsd);
-      m_downlinkSpectrumPhy->GetChannel ()->AddRx (m_downlinkSpectrumPhy);  
+      m_downlinkSpectrumPhy->GetChannel ()->AddRx (m_downlinkSpectrumPhy);
     }
   m_dlConfigured = true;
 }
@@ -1186,4 +1262,25 @@
 }
 
 
+LteUePhy::State
+LteUePhy::GetState () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_state;
+}
+
+
+void
+LteUePhy::SwitchToState (State newState)
+{
+  NS_LOG_FUNCTION (this << newState);
+  State oldState = m_state;
+  m_state = newState;
+  NS_LOG_INFO (this << " cellId=" << m_cellId << " rnti=" << m_rnti
+                    << " UePhy " << ToString (oldState)
+                    << " --> " << ToString (newState));
+  m_stateTransitionTrace (m_cellId, m_rnti, oldState, newState);
+}
+
+
 } // namespace ns3
diff -Naur ns-3.18.1/src/lte/model/lte-ue-phy.h ns-3.19/src/lte/model/lte-ue-phy.h
--- ns-3.18.1/src/lte/model/lte-ue-phy.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-ue-phy.h	2013-12-20 09:44:50.000000000 -0800
@@ -32,6 +32,7 @@
 #include <ns3/lte-ue-cphy-sap.h>
 #include <ns3/ptr.h>
 #include <ns3/lte-amc.h>
+#include <set>
 
 
 namespace ns3 {
@@ -54,6 +55,16 @@
 
 public:
   /**
+   * \brief The states of the UE PHY entity
+   */
+  enum State
+  {
+    CELL_SEARCH = 0,
+    SYNCHRONIZED,
+    NUM_STATES
+  };
+
+  /**
    * @warning the default constructor should not be used
    */
   LteUePhy ();
@@ -98,7 +109,7 @@
 
 
   /**
-   * \param pw the transmission power in dBm
+   * \param pow the transmission power in dBm
    */
   void SetTxPower (double pow);
 
@@ -107,9 +118,9 @@
    */
   double GetTxPower () const;
   /**
-   * \param pw the noise figure in dB
+   * \param nf the noise figure in dB
    */
-  void SetNoiseFigure (double pow);
+  void SetNoiseFigure (double nf);
 
   /**
    * \return the noise figure in dB
@@ -131,7 +142,6 @@
    */
   Ptr<LteSpectrumPhy> GetUlSpectrumPhy () const;
 
-
   /**
    * \brief Create the PSD for the TX
    * \return the pointer to the PSD
@@ -160,11 +170,11 @@
    */
   std::vector <int> GetSubChannelsForReception (void);
 
-
   /**
   * \brief Create the DL CQI feedback from SINR values perceived at
   * the physical layer with the signal received from eNB
   * \param sinr SINR values vector
+  * \return a DL CQI control message containing the CQI feedback
   */
   Ptr<DlCqiLteControlMessage> CreateDlCqiFeedbackMessage (const SpectrumValue& sinr);
 
@@ -179,8 +189,6 @@
   // callbacks for LteSpectrumPhy
   virtual void ReceiveLteControlMessageList (std::list<Ptr<LteControlMessage> >);
   virtual void ReceivePss (uint16_t cellId, Ptr<SpectrumValue> p);
-  
-  
 
 
 
@@ -200,25 +208,29 @@
 
 
   /**
-  * \brief Send the SRS signal in the last symbols of the frame
-  */
+   * \brief Send the SRS signal in the last symbols of the frame
+   */
   void SendSrs ();
-  
-    /**
-  * \brief PhySpectrum generated a new DL HARQ feedback
-  */
+
+  /**
+   * \brief PhySpectrum generated a new DL HARQ feedback
+   */
   virtual void ReceiveLteDlHarqFeedback (DlInfoListElement_s mes);
 
   /**
-  * \brief Set the HARQ PHY module
-  */
+   * \brief Set the HARQ PHY module
+   */
   void SetHarqPhyModule (Ptr<LteHarqPhy> harq);
 
+  /**
+   * \return The current state
+   */
+  State GetState () const;
 
 
 
 private:
-  
+
   void SetTxMode1Gain (double gain);
   void SetTxMode2Gain (double gain);
   void SetTxMode3Gain (double gain);
@@ -230,11 +242,22 @@
 
   void QueueSubChannelsForTransmission (std::vector <int> rbMap);
 
+  /**
+   * \brief Layer-1 filtering of RSRP and RSRQ measurements and reporting to
+   *        the RRC entity.
+   *
+   * Initially executed at +0.200s, and then repeatedly executed with
+   * periodicity as indicated by the *UeMeasurementsFilterPeriod* attribute.
+   */
   void ReportUeMeasurements ();
 
+  void SwitchToState (State s);
+
   // UE CPHY SAP methods
-  void DoReset ();  
-  void DoSyncronizeWithEnb (uint16_t cellId, uint16_t dlEarfcn);  
+  void DoReset ();
+  void DoStartCellSearch (uint16_t dlEarfcn);
+  void DoSynchronizeWithEnb (uint16_t cellId);
+  void DoSynchronizeWithEnb (uint16_t cellId, uint16_t dlEarfcn);
   void DoSetDlBandwidth (uint8_t ulBandwidth);
   void DoConfigureUplink (uint16_t ulEarfcn, uint8_t ulBandwidth);
   void DoSetRnti (uint16_t rnti);
@@ -242,16 +265,16 @@
   void DoSetSrsConfigurationIndex (uint16_t srcCi);
 
   // UE PHY SAP methods 
-  virtual void DoSendMacPdu (Ptr<Packet> p);  
+  virtual void DoSendMacPdu (Ptr<Packet> p);
   virtual void DoSendLteControlMessage (Ptr<LteControlMessage> msg);
   virtual void DoSendRachPreamble (uint32_t prachId, uint32_t raRnti);
-  
+
   std::vector <int> m_subChannelsForTransmission;
   std::vector <int> m_subChannelsForReception;
-  
+
   std::vector< std::vector <int> > m_subChannelsForTransmissionQueue;
-  
-  
+
+
   Ptr<LteAmc> m_amc;
 
   Time m_p10CqiPeriocity; /**< Wideband Periodic CQI: 2, 5, 10, 16, 20, 32, 40, 64, 80 or 160 ms */
@@ -272,7 +295,7 @@
  
   uint8_t m_transmissionMode;
   std::vector <double> m_txModeGain;
-  
+
   uint16_t m_srsPeriodicity;
   uint16_t m_srsSubframeOffset;
   uint16_t m_srsConfigured;
@@ -281,34 +304,38 @@
   bool m_dlConfigured;
   bool m_ulConfigured;
 
+  State m_state;
+  //             cellid    rnti
+  TracedCallback<uint16_t, uint16_t, State, State> m_stateTransitionTrace;
+
   uint8_t m_subframeNo;
 
   bool m_rsReceivedPowerUpdated;
   SpectrumValue m_rsReceivedPower;
 
   bool m_rsInterferencePowerUpdated;
-  SpectrumValue m_rsIntereferencePower;
+  SpectrumValue m_rsInterferencePower;
 
   bool m_pssReceived;
   struct PssElement
-    {
-      uint16_t cellId;
-      double pssPsdSum;
-      uint16_t nRB;
-    };
+  {
+    uint16_t cellId;
+    double pssPsdSum;
+    uint16_t nRB;
+  };
   std::list <PssElement> m_pssList;
 
   double m_pssReceptionThreshold; // on RSRQ [W]
 
   struct UeMeasurementsElement
-    {
-      double rsrpSum;
-      uint8_t rsrpNum;
-      double rsrqSum;
-      uint8_t rsrqNum;
-    };
+  {
+    double rsrpSum;
+    uint8_t rsrpNum;
+    double rsrqSum;
+    uint8_t rsrqNum;
+  };
 
-  std::map <uint16_t, UeMeasurementsElement> m_UeMeasurementsMap;
+  std::map <uint16_t, UeMeasurementsElement> m_ueMeasurementsMap;
   Time m_ueMeasurementsFilterPeriod;
   Time m_ueMeasurementsFilterLast;
 
@@ -327,7 +354,7 @@
 
   /**
    * Trace information regarding RSRP and RSRQ (see TS 36.214)
-   * uint16_t rnti, uint16_t cellId, double rsrp, double sinr, bool servingCell
+   * uint16_t rnti, uint16_t cellId, double rsrpDbm, double rsrqDb, bool isServingCell
    */
   TracedCallback<uint16_t, uint16_t, double, double, bool> m_reportUeMeasurements;
 
diff -Naur ns-3.18.1/src/lte/model/lte-ue-rrc.cc ns-3.19/src/lte/model/lte-ue-rrc.cc
--- ns-3.18.1/src/lte/model/lte-ue-rrc.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-ue-rrc.cc	2013-12-20 09:44:50.000000000 -0800
@@ -16,27 +16,23 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
+ *         Budiarto Herman <budiarto.herman@magister.fi>
  */
 
+#include "lte-ue-rrc.h"
+
 #include <ns3/fatal-error.h>
 #include <ns3/log.h>
 #include <ns3/object-map.h>
 #include <ns3/object-factory.h>
-#include <ns3/node-list.h>
-#include <ns3/node.h>
 #include <ns3/simulator.h>
 
-#include "lte-ue-rrc.h"
-#include "lte-enb-rrc.h"
-#include "lte-rlc.h"
-#include "lte-rlc-tm.h"
-#include "lte-rlc-um.h"
-#include "lte-rlc-am.h"
-#include "lte-pdcp.h"
-#include "lte-pdcp-sap.h"
-#include "lte-radio-bearer-info.h"
-#include "lte-as-sap.h"
-#include "lte-enb-net-device.h"
+#include <ns3/lte-rlc.h>
+#include <ns3/lte-rlc-tm.h>
+#include <ns3/lte-rlc-um.h>
+#include <ns3/lte-rlc-am.h>
+#include <ns3/lte-pdcp.h>
+#include <ns3/lte-radio-bearer-info.h>
 
 #include <cmath>
 
@@ -45,7 +41,6 @@
 namespace ns3 {
 
 
-
 /////////////////////////////
 // CMAC SAP forwarder
 /////////////////////////////
@@ -58,7 +53,7 @@
   virtual void SetTemporaryCellRnti (uint16_t rnti);
   virtual void NotifyRandomAccessSuccessful ();
   virtual void NotifyRandomAccessFailed ();
-  
+
 private:
   LteUeRrc* m_rrc;
 };
@@ -94,16 +89,21 @@
 
 
 const char* g_ueRrcStateName[LteUeRrc::NUM_STATES] = 
-  {
-    "IDLE_CELL_SELECTION",
-    "IDLE_WAIT_SYSTEM_INFO",
-    "IDLE_CAMPED_NORMALLY",
-    "IDLE_RANDOM_ACCESS",
-    "IDLE_CONNECTING",
-    "CONNECTED_NORMALLY",
-    "CONNECTED_REESTABLISHING",
-    "CONNECTED_HANDOVER"
-  };
+{
+  "IDLE_START",
+  "IDLE_CELL_SEARCH",
+  "IDLE_WAIT_MIB_SIB1",
+  "IDLE_WAIT_MIB",
+  "IDLE_WAIT_SIB1",
+  "IDLE_CAMPED_NORMALLY",
+  "IDLE_WAIT_SIB2",
+  "IDLE_RANDOM_ACCESS",
+  "IDLE_CONNECTING",
+  "CONNECTED_NORMALLY",
+  "CONNECTED_HANDOVER",
+  "CONNECTED_PHY_PROBLEM",
+  "CONNECTED_REESTABLISHING"
+};
 
 std::string ToString (LteUeRrc::State s)
 {
@@ -115,7 +115,8 @@
 // ue RRC methods
 /////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (LteUeRrc);
+NS_OBJECT_ENSURE_REGISTERED (LteUeRrc)
+  ;
 
 
 LteUeRrc::LteUeRrc ()
@@ -124,15 +125,16 @@
     m_rrcSapUser (0),
     m_macSapProvider (0),
     m_asSapUser (0),
-    m_state (IDLE_CELL_SELECTION),
+    m_state (IDLE_START),
     m_imsi (0),
     m_rnti (0),
     m_cellId (0),
     m_useRlcSm (true),
-    m_connectionPending (0),
-    m_receivedMib (0),
-    m_receivedSib2 (0)
-
+    m_connectionPending (false),
+    m_hasReceivedMib (false),
+    m_hasReceivedSib1 (false),
+    m_hasReceivedSib2 (false),
+    m_csgWhiteList (0)
 {
   NS_LOG_FUNCTION (this);
   m_cphySapUser = new MemberLteUeCphySapUser<LteUeRrc> (this);
@@ -188,12 +190,30 @@
                    UintegerValue (0), // unused, read-only attribute
                    MakeUintegerAccessor (&LteUeRrc::GetRnti),
                    MakeUintegerChecker<uint16_t> ())
+    .AddTraceSource ("MibReceived",
+                     "trace fired upon reception of Master Information Block",
+                     MakeTraceSourceAccessor (&LteUeRrc::m_mibReceivedTrace))
+    .AddTraceSource ("Sib1Received",
+                     "trace fired upon reception of System Information Block Type 1",
+                     MakeTraceSourceAccessor (&LteUeRrc::m_sib1ReceivedTrace))
+    .AddTraceSource ("Sib2Received",
+                     "trace fired upon reception of System Information Block Type 2",
+                     MakeTraceSourceAccessor (&LteUeRrc::m_sib2ReceivedTrace))
     .AddTraceSource ("StateTransition",
                      "trace fired upon every UE RRC state transition",
                      MakeTraceSourceAccessor (&LteUeRrc::m_stateTransitionTrace))
+    .AddTraceSource ("InitialCellSelectionEndOk",
+                     "trace fired upon successful initial cell selection procedure",
+                     MakeTraceSourceAccessor (&LteUeRrc::m_initialCellSelectionEndOkTrace))
+    .AddTraceSource ("InitialCellSelectionEndError",
+                     "trace fired upon failed initial cell selection procedure",
+                     MakeTraceSourceAccessor (&LteUeRrc::m_initialCellSelectionEndErrorTrace))
     .AddTraceSource ("RandomAccessSuccessful",
                      "trace fired upon successful completion of the random access procedure",
                      MakeTraceSourceAccessor (&LteUeRrc::m_randomAccessSuccessfulTrace))
+    .AddTraceSource ("RandomAccessError",
+                     "trace fired upon failure of the random access procedure",
+                     MakeTraceSourceAccessor (&LteUeRrc::m_randomAccessErrorTrace))
     .AddTraceSource ("ConnectionEstablished",
                      "trace fired upon successful RRC connection establishment",
                      MakeTraceSourceAccessor (&LteUeRrc::m_connectionEstablishedTrace))
@@ -206,7 +226,10 @@
     .AddTraceSource ("HandoverEndOk",
                      "trace fired upon successful termination of a handover procedure",
                      MakeTraceSourceAccessor (&LteUeRrc::m_handoverEndOkTrace))
-    ;
+    .AddTraceSource ("HandoverEndError",
+                     "trace fired upon failure of a handover procedure",
+                     MakeTraceSourceAccessor (&LteUeRrc::m_handoverEndErrorTrace))
+  ;
   return tid;
 }
 
@@ -280,7 +303,7 @@
 }
 
 uint64_t
-LteUeRrc::GetImsi (void)
+LteUeRrc::GetImsi (void) const
 {
   return m_imsi;
 }
@@ -314,7 +337,7 @@
   return m_dlBandwidth;
 }
 
-uint16_t 
+uint16_t
 LteUeRrc::GetDlEarfcn () const
 {
   return m_dlEarfcn;
@@ -327,9 +350,8 @@
   return m_ulEarfcn;
 }
 
-
 LteUeRrc::State
-LteUeRrc::GetState (void)
+LteUeRrc::GetState (void) const
 {
   NS_LOG_FUNCTION (this);
   return m_state;
@@ -356,7 +378,7 @@
   rlc->SetRnti (m_rnti);
   rlc->SetLcId (lcid);
 
-  m_srb0 = CreateObject<LteSignalingRadioBearerInfo> ();  
+  m_srb0 = CreateObject<LteSignalingRadioBearerInfo> ();
   m_srb0->m_rlc = rlc;
   m_srb0->m_srbIdentity = 0;
   LteUeRrcSapUser::SetupParameters ueParams;
@@ -372,7 +394,7 @@
   lcConfig.logicalChannelGroup = 0; // all SRBs mapped to LCG 0
 
   m_cmacSapProvider->AddLc (lcid, lcConfig, rlc->GetLteMacSapUser ());
-    
+
 }
 
 
@@ -381,7 +403,6 @@
 {
   NS_LOG_FUNCTION (this << packet);
 
-
   uint8_t drbid = Bid2Drbid (bid);
 
   std::map<uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it =   m_drbMap.find (drbid);
@@ -391,35 +412,44 @@
   params.pdcpSdu = packet;
   params.rnti = m_rnti;
   params.lcid = it->second->m_logicalChannelIdentity;
-  
-  NS_LOG_LOGIC (this << " RNTI=" << m_rnti << " sending " << packet << "on DRBID " << (uint32_t) drbid << " (LCID" << params.lcid << ")" << " (" << packet->GetSize () << " bytes)");
-  it->second->m_pdcp->GetLtePdcpSapProvider ()->TransmitPdcpSdu (params);  
+
+  NS_LOG_LOGIC (this << " RNTI=" << m_rnti << " sending packet " << packet
+                     << " on DRBID " << (uint32_t) drbid
+                     << " (LCID " << (uint32_t) params.lcid << ")"
+                     << " (" << packet->GetSize () << " bytes)");
+  it->second->m_pdcp->GetLtePdcpSapProvider ()->TransmitPdcpSdu (params);
 }
 
+
 void
 LteUeRrc::DoDisconnect ()
 {
   NS_LOG_FUNCTION (this);
 
   switch (m_state)
-    {      
-    case IDLE_CELL_SELECTION:
+    {
+    case IDLE_START:
+    case IDLE_CELL_SEARCH:
+    case IDLE_WAIT_MIB_SIB1:
+    case IDLE_WAIT_MIB:
+    case IDLE_WAIT_SIB1:
     case IDLE_CAMPED_NORMALLY:
       NS_LOG_INFO ("already disconnected");
       break;
 
+    case IDLE_WAIT_SIB2:
     case IDLE_CONNECTING:
-      NS_LOG_INFO ("aborting connection setup procedure");
-      SwitchToState (IDLE_CAMPED_NORMALLY);
+      NS_FATAL_ERROR ("cannot abort connection setup procedure");
       break;
-      
+
     case CONNECTED_NORMALLY:
-    case CONNECTED_REESTABLISHING:
     case CONNECTED_HANDOVER:
+    case CONNECTED_PHY_PROBLEM:
+    case CONNECTED_REESTABLISHING:
       LeaveConnectedMode ();
       break;
-      
-    default:
+
+    default: // i.e. IDLE_RANDOM_ACCESS
       NS_FATAL_ERROR ("method unexpected in state " << ToString (m_state));
       break;
     }
@@ -446,10 +476,11 @@
 LteUeRrc::DoNotifyRandomAccessSuccessful ()
 {
   NS_LOG_FUNCTION (this << m_imsi << ToString (m_state));
-  m_randomAccessSuccessfulTrace (m_imsi, m_cellId, m_rnti);  
+  m_randomAccessSuccessfulTrace (m_imsi, m_cellId, m_rnti);
+
   switch (m_state)
     {
-    case IDLE_RANDOM_ACCESS:     
+    case IDLE_RANDOM_ACCESS:
       {
         // we just received a RAR with a T-C-RNTI and an UL grant
         // send RRC connection request as message 3 of the random access procedure 
@@ -459,342 +490,269 @@
         m_rrcSapUser->SendRrcConnectionRequest (msg); 
       }
       break;
-      
-    case CONNECTED_HANDOVER:     
+
+    case CONNECTED_HANDOVER:
       {
         LteRrcSap::RrcConnectionReconfigurationCompleted msg;
         msg.rrcTransactionIdentifier = m_lastRrcTransactionIdentifier;
         m_rrcSapUser->SendRrcConnectionReconfigurationCompleted (msg);
+
+        // 3GPP TS 36.331 section 5.5.6.1 Measurements related actions upon handover
+        std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator measIdIt;
+        for (measIdIt = m_varMeasConfig.measIdList.begin ();
+             measIdIt != m_varMeasConfig.measIdList.end ();
+             ++measIdIt)
+          {
+            VarMeasReportListClear (measIdIt->second.measId);
+          }
+
         SwitchToState (CONNECTED_NORMALLY);
         m_handoverEndOkTrace (m_imsi, m_cellId, m_rnti);
       }
       break;
-          
+
     default:
       NS_FATAL_ERROR ("unexpected event in state " << ToString (m_state));
       break; 
-    } 
+    }
 }
 
 void
 LteUeRrc::DoNotifyRandomAccessFailed ()
 {
-  NS_LOG_FUNCTION (this);
+  NS_LOG_FUNCTION (this << m_imsi << ToString (m_state));
+  m_randomAccessErrorTrace (m_imsi, m_cellId, m_rnti);
+
+  switch (m_state)
+    {
+    case IDLE_RANDOM_ACCESS:
+      {
+        SwitchToState (IDLE_CAMPED_NORMALLY);
+        m_asSapUser->NotifyConnectionFailed ();
+      }
+      break;
+
+    case CONNECTED_HANDOVER:
+      {
+        m_handoverEndErrorTrace (m_imsi, m_cellId, m_rnti);
+        /**
+         * \todo After a handover failure because of a random access failure,
+         *       send an RRC Connection Re-establishment and switch to
+         *       CONNECTED_REESTABLISHING state.
+         */
+      }
+      break;
+
+    default:
+      NS_FATAL_ERROR ("unexpected event in state " << ToString (m_state));
+      break;
+    }
 }
 
 
+void
+LteUeRrc::DoSetCsgWhiteList (uint32_t csgId)
+{
+  NS_LOG_FUNCTION (this << m_imsi << csgId);
+  m_csgWhiteList = csgId;
+}
+
 void 
-LteUeRrc::DoForceCampedOnEnb (uint16_t cellId, uint16_t earfcn)
+LteUeRrc::DoStartCellSelection (uint16_t dlEarfcn)
 {
-  NS_LOG_FUNCTION (this << cellId << earfcn);
-    
-  m_cellId = cellId;
-  m_dlEarfcn = earfcn;
-  m_cphySapProvider->SyncronizeWithEnb (m_cellId, m_dlEarfcn); 
-  SwitchToState (IDLE_WAIT_SYSTEM_INFO);
+  NS_LOG_FUNCTION (this << m_imsi << dlEarfcn);
+  NS_ASSERT_MSG (m_state == IDLE_START,
+                 "cannot start cell selection from state " << ToString (m_state));
+  m_dlEarfcn = dlEarfcn;
+  m_cphySapProvider->StartCellSearch (dlEarfcn);
+  SwitchToState (IDLE_CELL_SEARCH);
 }
 
 void 
+LteUeRrc::DoForceCampedOnEnb (uint16_t cellId, uint16_t dlEarfcn)
+{
+  NS_LOG_FUNCTION (this << m_imsi << cellId << dlEarfcn);
+
+  switch (m_state)
+    {
+    case IDLE_START:
+      m_cellId = cellId;
+      m_dlEarfcn = dlEarfcn;
+      m_cphySapProvider->SynchronizeWithEnb (m_cellId, m_dlEarfcn);
+      SwitchToState (IDLE_WAIT_MIB);
+      break;
+
+    case IDLE_CELL_SEARCH:
+    case IDLE_WAIT_MIB_SIB1:
+    case IDLE_WAIT_SIB1:
+      NS_FATAL_ERROR ("cannot abort cell selection " << ToString (m_state));
+      break;
+
+    case IDLE_WAIT_MIB:
+      NS_LOG_INFO ("already forced to camp to cell " << m_cellId);
+      break;
+
+    case IDLE_CAMPED_NORMALLY:
+    case IDLE_WAIT_SIB2:
+    case IDLE_RANDOM_ACCESS:
+    case IDLE_CONNECTING:
+      NS_LOG_INFO ("already camped to cell " << m_cellId);
+      break;
+
+    case CONNECTED_NORMALLY:
+    case CONNECTED_HANDOVER:
+    case CONNECTED_PHY_PROBLEM:
+    case CONNECTED_REESTABLISHING:
+      NS_LOG_INFO ("already connected to cell " << m_cellId);
+      break;
+
+    default:
+      NS_FATAL_ERROR ("unexpected event in state " << ToString (m_state));
+      break;
+    }
+
+}
+
+void
 LteUeRrc::DoConnect ()
 {
-  NS_LOG_FUNCTION (this);
+  NS_LOG_FUNCTION (this << m_imsi);
+
   switch (m_state)
     {
-    case IDLE_CELL_SELECTION:
-    case IDLE_WAIT_SYSTEM_INFO:
+    case IDLE_START:
+    case IDLE_CELL_SEARCH:
+    case IDLE_WAIT_MIB_SIB1:
+    case IDLE_WAIT_SIB1:
+    case IDLE_WAIT_MIB:
       m_connectionPending = true;
       break;
 
-    case IDLE_CAMPED_NORMALLY:     
-      StartConnection ();
+    case IDLE_CAMPED_NORMALLY:
+      m_connectionPending = true;
+      SwitchToState (IDLE_WAIT_SIB2);
       break;
 
+    case IDLE_WAIT_SIB2:
     case IDLE_RANDOM_ACCESS:
     case IDLE_CONNECTING:
-      NS_LOG_WARN ("already connecting (state " << ToString (m_state) << ")");      
+      NS_LOG_INFO ("already connecting");
       break;
 
     case CONNECTED_NORMALLY:
     case CONNECTED_REESTABLISHING:
     case CONNECTED_HANDOVER:
-      NS_LOG_WARN ("already connected (state " << ToString (m_state) << ")");      
-      break;  
-      
+      NS_LOG_INFO ("already connected");
+      break;
+
     default:
-      NS_FATAL_ERROR ("cannot connect while in state " << ToString (m_state));
+      NS_FATAL_ERROR ("unexpected event in state " << ToString (m_state));
       break;
     }
-
-
 }
 
 
 
 // CPHY SAP methods
 
-void 
-LteUeRrc::DoRecvMasterInformationBlock (LteRrcSap::MasterInformationBlock msg)  
+void
+LteUeRrc::DoRecvMasterInformationBlock (uint16_t cellId,
+                                        LteRrcSap::MasterInformationBlock msg)
 { 
-  NS_LOG_FUNCTION (this);
   m_dlBandwidth = msg.dlBandwidth;
   m_cphySapProvider->SetDlBandwidth (msg.dlBandwidth);
-  m_receivedMib = true;
-  if (m_state == IDLE_WAIT_SYSTEM_INFO && m_receivedMib && m_receivedSib2)
+  m_hasReceivedMib = true;
+  m_mibReceivedTrace (m_imsi, m_cellId, m_rnti, cellId);
+
+  switch (m_state)
     {
+    case IDLE_WAIT_MIB:
+      // manual attachment
       SwitchToState (IDLE_CAMPED_NORMALLY);
+      break;
+
+    case IDLE_WAIT_MIB_SIB1:
+      // automatic attachment from Idle mode cell selection
+      SwitchToState (IDLE_WAIT_SIB1);
+      break;
+
+    default:
+      // do nothing extra
+      break;
     }
 }
 
 void
-LteUeRrc::DoReportUeMeasurements (LteUeCphySapUser::UeMeasurementsParameters params)
+LteUeRrc::DoRecvSystemInformationBlockType1 (uint16_t cellId,
+                                             LteRrcSap::SystemInformationBlockType1 msg)
 {
-  NS_LOG_FUNCTION (this);
-
-  for (std::vector <LteUeCphySapUser::UeMeasurementsElement>::iterator newMeasIt = params.m_ueMeasurementsList.begin (); newMeasIt != params.m_ueMeasurementsList.end (); ++newMeasIt)
-    {      
-      NS_LOG_LOGIC (this << " CellId " << newMeasIt->m_cellId << " RSRP " << newMeasIt->m_rsrp << " RSRQ " << newMeasIt->m_rsrq);    
-      
-      //  3GPP TS 36.331 section 5.5.3.2 Layer 3 filtering
-      std::map<uint16_t, MeasValues>::iterator storedMeasIt = m_storedMeasValues.find (newMeasIt->m_cellId);
-      if (storedMeasIt == m_storedMeasValues.end ())
-        {
-          // first value is unfiltered
-          MeasValues v;
-          v.rsrp = newMeasIt->m_rsrp;
-          v.rsrq = newMeasIt->m_rsrq;
-          std::pair<uint16_t, MeasValues> val (newMeasIt->m_cellId, v);
-          std::pair<std::map<uint16_t, MeasValues>::iterator, bool> 
-            ret = m_storedMeasValues.insert (val);
-          NS_ASSERT_MSG (ret.second == true, "element already existed");
-          storedMeasIt = ret.first;
-        }
-      else
-        {
-          // F_n = (1-a) F_{n-1} + a M_n
-          storedMeasIt->second.rsrp = (1 - m_varMeasConfig.aRsrp) * storedMeasIt->second.rsrp 
-            + m_varMeasConfig.aRsrp * newMeasIt->m_rsrp;          
-          storedMeasIt->second.rsrq = (1 - m_varMeasConfig.aRsrq) * storedMeasIt->second.rsrq 
-            + m_varMeasConfig.aRsrq * newMeasIt->m_rsrq;          
-        }  
-      storedMeasIt->second.timestamp = Simulator::Now ();
-    }
-
-                  
-  //  3GPP TS 36.331 section 5.5.4.1 Measurement report triggering - General
-  for (std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator measIdIt 
-         = m_varMeasConfig.measIdList.begin ();
-       measIdIt != m_varMeasConfig.measIdList.end ();
-       ++measIdIt)               
-    {
-      NS_ASSERT (measIdIt->first == measIdIt->second.measId);
-      uint8_t measId = measIdIt->first;
-      NS_LOG_LOGIC (this << " considering measId " << (uint32_t) measId);
-
-      std::map<uint8_t, LteRrcSap::ReportConfigToAddMod>::iterator 
-        reportConfigIt = m_varMeasConfig.reportConfigList.find (measIdIt->second.reportConfigId);
-      NS_ASSERT (reportConfigIt != m_varMeasConfig.reportConfigList.end ());
-      LteRrcSap::ReportConfigEutra& reportConfigEutra = reportConfigIt->second.reportConfigEutra;
-
-      std::map<uint8_t, LteRrcSap::MeasObjectToAddMod>::iterator 
-        measObjectIt = m_varMeasConfig.measObjectList.find (measIdIt->second.measObjectId);
-      NS_ASSERT (measObjectIt != m_varMeasConfig.measObjectList.end ());
-      LteRrcSap::MeasObjectEutra& measObjectEutra = measObjectIt->second.measObjectEutra;
-
-      std::map<uint8_t, VarMeasReport>::iterator 
-        measReportIt = m_varMeasReportList.find (measId);
-          
-      // we don't check the purpose field, as it is only included for
-      // triggerType == periodical, which is not supported  
-      NS_ASSERT_MSG (reportConfigEutra.triggerType 
-                     == LteRrcSap::ReportConfigEutra::EVENT,
-                     "only triggerType == event is supported");
-      // only EUTRA is supported, no need to check for it
-
-      bool eventEntryCondApplicable = false;
-      bool eventLeavingCondApplicable = false;
-
-      std::list<uint16_t> concernedCellsEntry;
-      std::list<uint16_t> concernedCellsLeaving;
-              
-      switch (reportConfigEutra.eventId)
-        {
-        case LteRrcSap::ReportConfigEutra::EVENT_A2:
-          {
-            double ms; // Ms, the measurement for serving cell
-            double thresh; // Tresh, the threshold parameter for this event
-            double hys = (double) reportConfigEutra.hysteresis * 0.5; // Hys, the hysteresis parameter for this event. See 36.331 section 6.3.5 for the conversion.
-            switch (reportConfigEutra.triggerQuantity)
-              {
-              case LteRrcSap::ReportConfigEutra::RSRP:
-                ms = m_storedMeasValues[m_cellId].rsrp;
-                //ms = EutranMeasurementMapping::QuantizeRsrp (m_storedMeasValues[m_cellId].rsrp);
-                NS_ASSERT (reportConfigEutra.threshold1.choice 
-                           == LteRrcSap::ThresholdEutra::THRESHOLD_RSRP);
-                thresh = EutranMeasurementMapping::RsrpRange2Dbm (reportConfigEutra.threshold1.range);
-                break;
-              case LteRrcSap::ReportConfigEutra::RSRQ:
-                ms = m_storedMeasValues[m_cellId].rsrq;
-                //ms = EutranMeasurementMapping::QuantizeRsrq (m_storedMeasValues[m_cellId].rsrq);
-                NS_ASSERT (reportConfigEutra.threshold1.choice 
-                           == LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ);                
-                thresh = EutranMeasurementMapping::RsrqRange2Db (reportConfigEutra.threshold1.range);
-                break;
-              default:
-                NS_FATAL_ERROR ("unsupported triggerQuantity");
-                break;
-              }            
-            // Inequality A2-1 (Entering condition) :  Ms + Hys < Thresh
-            bool entryCond = ms + hys < thresh;
-            if (entryCond == true 
-                && (measReportIt == m_varMeasReportList.end ()
-                    || (measReportIt != m_varMeasReportList.end () 
-                        && (measReportIt->second.cellsTriggeredList.find (m_cellId) 
-                            == measReportIt->second.cellsTriggeredList.end ()))))
-              {
-                concernedCellsEntry.push_back (m_cellId);
-                eventEntryCondApplicable = true;
-              }
-            // Inequality A2-2 (Leaving condition) : Ms âˆ’ Hys > Thresh
-            bool leavingCond = ms - hys > thresh;
-            if (leavingCond         
-                && measReportIt != m_varMeasReportList.end ()
-                && (measReportIt->second.cellsTriggeredList.find (m_cellId) 
-                    != measReportIt->second.cellsTriggeredList.end ()))
-              {
-                concernedCellsLeaving.push_back (m_cellId);
-                eventLeavingCondApplicable = true;
-              }
-            NS_LOG_LOGIC ("event A2: serving cell " << m_cellId << " ms=" << ms << " thresh=" << thresh << " entryCond=" << entryCond << " leavingCond=" << leavingCond);
-          }                  
-          break;
+  switch (m_state)
+    {
+    case IDLE_WAIT_SIB1:
+      NS_ASSERT_MSG (cellId == msg.cellAccessRelatedInfo.cellIdentity,
+                     "Cell identity in SIB1 does not match with the originating cell");
+      m_hasReceivedSib1 = true;
+      m_lastSib1 = msg;
+      m_sib1ReceivedTrace (m_imsi, m_cellId, m_rnti, cellId);
+      EvaluateCellForSelection ();
+      break;
 
-        case LteRrcSap::ReportConfigEutra::EVENT_A4:
-          {
-            for (std::map<uint16_t, MeasValues>::iterator storedMeasIt = m_storedMeasValues.begin ();
-                 storedMeasIt != m_storedMeasValues.end ();
-                 ++storedMeasIt)
-              {
-                uint16_t cellId = storedMeasIt->first;
-                if (cellId != m_cellId) 
-                  {
-                    double mn; // Mn, the measurement for neighboring cell
-                    double thresh; // Tresh, the threshold parameter for this event
-                    double hys = (double) reportConfigEutra.hysteresis * 0.5; // Hys, the hysteresis parameter for this event. See 36.331 section 6.3.5 for the conversion.
-                    switch (reportConfigEutra.triggerQuantity)
-                      {
-                      case LteRrcSap::ReportConfigEutra::RSRP:
-                        mn = storedMeasIt->second.rsrp;
-                        //mn = EutranMeasurementMapping::QuantizeRsrp (storedMeasIt->second.rsrp);
-                        NS_ASSERT (reportConfigEutra.threshold1.choice 
-                                   == LteRrcSap::ThresholdEutra::THRESHOLD_RSRP);    
-                        thresh = EutranMeasurementMapping::RsrpRange2Dbm (reportConfigEutra.threshold1.range);            
-                        break;
-                      case LteRrcSap::ReportConfigEutra::RSRQ:
-                        mn = storedMeasIt->second.rsrq;
-                        //mn = EutranMeasurementMapping::QuantizeRsrq (storedMeasIt->second.rsrq);
-                        NS_ASSERT (reportConfigEutra.threshold1.choice 
-                                   == LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ);                
-                        thresh = EutranMeasurementMapping::RsrqRange2Db (reportConfigEutra.threshold1.range);
-                        break;
-                      default:
-                        NS_FATAL_ERROR ("unsupported triggerQuantity");
-                        break;
-                      }            
-                    // Inequality A4-1 (Entering condition) :  Mn + Ofn + Ocn âˆ’ Hys > Thresh
-                    bool entryCond = mn + measObjectEutra.offsetFreq + 0.0 - hys > thresh;
-                    if (entryCond == true 
-                        && (measReportIt == m_varMeasReportList.end ()
-                            || (measReportIt != m_varMeasReportList.end () 
-                                && (measReportIt->second.cellsTriggeredList.find (cellId) 
-                                    == measReportIt->second.cellsTriggeredList.end ()))))
-                      {
-                        concernedCellsEntry.push_back (cellId);
-                        eventEntryCondApplicable = true;
-                      }
-                    // Inequality A4-2 (Leaving condition) : Mn + Ofn + Ocn + Hys < Thresh
-                    bool leavingCond = mn + measObjectEutra.offsetFreq + 0.0 + hys < thresh;
-                    if (leavingCond         
-                        && measReportIt != m_varMeasReportList.end ()
-                        && (measReportIt->second.cellsTriggeredList.find (cellId) 
-                            != measReportIt->second.cellsTriggeredList.end ()))
-                      {
-                        concernedCellsLeaving.push_back (cellId);
-                        eventLeavingCondApplicable = true;
-                      }
-                   
-                    NS_LOG_LOGIC ("event A4: neighbor cell " << cellId << " mn=" << mn << " thresh=" << thresh << " entryCond=" << entryCond << " leavingCond=" << leavingCond);
-                  }
-              }
-          }
-          break;
+    case IDLE_CAMPED_NORMALLY:
+    case IDLE_RANDOM_ACCESS:
+    case IDLE_CONNECTING:
+    case CONNECTED_NORMALLY:
+    case CONNECTED_HANDOVER:
+    case CONNECTED_PHY_PROBLEM:
+    case CONNECTED_REESTABLISHING:
+      NS_ASSERT_MSG (cellId == msg.cellAccessRelatedInfo.cellIdentity,
+                     "Cell identity in SIB1 does not match with the originating cell");
+      m_hasReceivedSib1 = true;
+      m_lastSib1 = msg;
+      m_sib1ReceivedTrace (m_imsi, m_cellId, m_rnti, cellId);
+      break;
 
-        default:
-          NS_FATAL_ERROR ("unsupported eventId " << reportConfigEutra.eventId);
-          break;
-          
-          } // switch (event type)
+    case IDLE_WAIT_MIB_SIB1:
+      // MIB has not been received, so ignore this SIB1
+      break;
 
-      NS_LOG_LOGIC ("eventEntryCondApplicable=" << eventEntryCondApplicable
-                    << " eventLeavingCondApplicable=" << eventLeavingCondApplicable);
+    default: // e.g. IDLE_START, IDLE_CELL_SEARCH, IDLE_WAIT_MIB, IDLE_WAIT_SIB2
+      // do nothing
+      break;
+    }
+}
 
-      bool initiateUeMeasurementReportingProcedure = false;
+void
+LteUeRrc::DoReportUeMeasurements (LteUeCphySapUser::UeMeasurementsParameters params)
+{
+  NS_LOG_FUNCTION (this);
 
-      if (eventEntryCondApplicable)
-        {          
-          if (measReportIt == m_varMeasReportList.end ())
-            {
-              VarMeasReport r;
-              r.measId = measId;              
-              std::pair<uint8_t, VarMeasReport> val (measId, r);
-              std::pair<std::map<uint8_t, VarMeasReport>::iterator, bool> 
-                ret = m_varMeasReportList.insert (val);
-              NS_ASSERT_MSG (ret.second == true, "element already existed");
-              measReportIt = ret.first;
-            }
-          for (std::list<uint16_t>::iterator it = concernedCellsEntry.begin ();
-               it != concernedCellsEntry.end ();
-               ++it)
-            {
-              measReportIt->second.cellsTriggeredList.insert (*it);
-            }
-          measReportIt->second.numberOfReportsSent = 0;
-          initiateUeMeasurementReportingProcedure = true;
-        }
-      
-      if (eventLeavingCondApplicable)
-        {                  
-          NS_ASSERT (measReportIt != m_varMeasReportList.end ());
-          for (std::list<uint16_t>::iterator it = concernedCellsLeaving.begin ();
-               it != concernedCellsLeaving.end ();
-               ++it)
-            {
-              measReportIt->second.cellsTriggeredList.erase (*it);
-            }
+  // layer 3 filtering does not apply in IDLE mode
+  bool useLayer3Filtering = (m_state == CONNECTED_NORMALLY);
 
-          // reportOnLeave will only be set when eventId = eventA3
-          if(reportConfigEutra.eventId == LteRrcSap::ReportConfigEutra::EVENT_A3)
-            {
-              if (reportConfigEutra.reportOnLeave)
-                {
-                  initiateUeMeasurementReportingProcedure = true;
-                }
-            }    
-        }
+  std::vector <LteUeCphySapUser::UeMeasurementsElement>::iterator newMeasIt;
+  for (newMeasIt = params.m_ueMeasurementsList.begin ();
+       newMeasIt != params.m_ueMeasurementsList.end (); ++newMeasIt)
+    {
+      SaveUeMeasurements (newMeasIt->m_cellId, newMeasIt->m_rsrp,
+                          newMeasIt->m_rsrq, useLayer3Filtering);
+    }
 
-      if (initiateUeMeasurementReportingProcedure)
-        {
-          SendMeasurementReport (measId);
-        }    
-      
-      if ((measReportIt != m_varMeasReportList.end ())
-          && (measReportIt->second.cellsTriggeredList.empty ()))
+  if (m_state == IDLE_CELL_SEARCH)
+    {
+      // start decoding BCH
+      SynchronizeToStrongestCell ();
+    }
+  else
+    {
+      std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator measIdIt;
+      for (measIdIt = m_varMeasConfig.measIdList.begin ();
+           measIdIt != m_varMeasConfig.measIdList.end (); ++measIdIt)
         {
-          measReportIt->second.periodicReportTimer.Cancel ();
-          m_varMeasReportList.erase (measReportIt);
+          MeasurementReportTriggering (measIdIt->first);
         }
-      
-    } // for each measId in m_varMeasConfig.measIdList   
-}
+    }
+
+} // end of LteUeRrc::DoReportUeMeasurements
 
 
 
@@ -803,7 +761,7 @@
 void 
 LteUeRrc::DoCompleteSetup (LteUeRrcSapProvider::CompleteSetupParameters params)
 {
-  NS_LOG_FUNCTION (this);
+  NS_LOG_FUNCTION (this << " RNTI " << m_rnti);
   m_srb0->m_rlc->SetLteRlcSapUser (params.srb0SapUser);
   if (m_srb1)
     {
@@ -813,40 +771,52 @@
 
 
 void 
-LteUeRrc::DoRecvSystemInformationBlockType1 (LteRrcSap::SystemInformationBlockType1 msg)
-{
-  NS_LOG_FUNCTION (this);
-  // to be implemented
-}
-
- 
-void 
 LteUeRrc::DoRecvSystemInformation (LteRrcSap::SystemInformation msg)
 {
-  NS_LOG_FUNCTION (this);
+  NS_LOG_FUNCTION (this << " RNTI " << m_rnti);
+
   if (msg.haveSib2)
     {
-      m_receivedSib2 = true;
-      m_ulBandwidth = msg.sib2.freqInfo.ulBandwidth;
-      m_ulEarfcn = msg.sib2.freqInfo.ulCarrierFreq;
-      LteUeCmacSapProvider::RachConfig rc;
-      rc.numberOfRaPreambles = msg.sib2.radioResourceConfigCommon.rachConfigCommon.preambleInfo.numberOfRaPreambles;
-      rc.preambleTransMax = msg.sib2.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo.preambleTransMax;
-      rc.raResponseWindowSize = msg.sib2.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo.raResponseWindowSize;
-      m_cmacSapProvider->ConfigureRach (rc);
-      m_cphySapProvider->ConfigureUplink (m_ulEarfcn, m_ulBandwidth);
-    }
-  if (m_state == IDLE_WAIT_SYSTEM_INFO && m_receivedMib && m_receivedSib2)
-    {
-       SwitchToState (IDLE_CAMPED_NORMALLY);
+      switch (m_state)
+        {
+        case IDLE_CAMPED_NORMALLY:
+        case IDLE_WAIT_SIB2:
+        case IDLE_RANDOM_ACCESS:
+        case IDLE_CONNECTING:
+        case CONNECTED_NORMALLY:
+        case CONNECTED_HANDOVER:
+        case CONNECTED_PHY_PROBLEM:
+        case CONNECTED_REESTABLISHING:
+          m_hasReceivedSib2 = true;
+          m_ulBandwidth = msg.sib2.freqInfo.ulBandwidth;
+          m_ulEarfcn = msg.sib2.freqInfo.ulCarrierFreq;
+          m_sib2ReceivedTrace (m_imsi, m_cellId, m_rnti);
+          LteUeCmacSapProvider::RachConfig rc;
+          rc.numberOfRaPreambles = msg.sib2.radioResourceConfigCommon.rachConfigCommon.preambleInfo.numberOfRaPreambles;
+          rc.preambleTransMax = msg.sib2.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo.preambleTransMax;
+          rc.raResponseWindowSize = msg.sib2.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo.raResponseWindowSize;
+          m_cmacSapProvider->ConfigureRach (rc);
+          m_cphySapProvider->ConfigureUplink (m_ulEarfcn, m_ulBandwidth);
+          if (m_state == IDLE_WAIT_SIB2)
+            {
+              NS_ASSERT (m_connectionPending);
+              StartConnection ();
+            }
+          break;
+
+        default: // IDLE_START, IDLE_CELL_SEARCH, IDLE_WAIT_MIB, IDLE_WAIT_MIB_SIB1, IDLE_WAIT_SIB1
+          // do nothing
+          break;
+        }
     }
+
 }
 
 
 void 
 LteUeRrc::DoRecvRrcConnectionSetup (LteRrcSap::RrcConnectionSetup msg)
-{    
-  NS_LOG_FUNCTION (this);
+{
+  NS_LOG_FUNCTION (this << " RNTI " << m_rnti);
   switch (m_state)
     {
     case IDLE_CONNECTING:
@@ -860,7 +830,7 @@
         m_connectionEstablishedTrace (m_imsi, m_cellId, m_rnti);
       }
       break;
-      
+
     default:
       NS_FATAL_ERROR ("method unexpected in state " << ToString (m_state));
       break;
@@ -885,12 +855,12 @@
           m_cellId = mci.targetPhysCellId;
           NS_ASSERT (mci.haveCarrierFreq);
           NS_ASSERT (mci.haveCarrierBandwidth);
-          m_cphySapProvider->SyncronizeWithEnb (m_cellId, mci.carrierFreq.dlCarrierFreq); 
-          m_cphySapProvider->SetDlBandwidth ( mci.carrierBandwidth.dlBandwidth); 
+          m_cphySapProvider->SynchronizeWithEnb (m_cellId, mci.carrierFreq.dlCarrierFreq);
+          m_cphySapProvider->SetDlBandwidth ( mci.carrierBandwidth.dlBandwidth);
           m_cphySapProvider->ConfigureUplink (mci.carrierFreq.ulCarrierFreq, mci.carrierBandwidth.ulBandwidth); 
           m_rnti = msg.mobilityControlInfo.newUeIdentity;
           m_srb0->m_rlc->SetRnti (m_rnti);
-          NS_ASSERT_MSG (mci.haveRachConfigDedicated, "handover is only supported with non-contention-based random access procedure");          
+          NS_ASSERT_MSG (mci.haveRachConfigDedicated, "handover is only supported with non-contention-based random access procedure");
           m_cmacSapProvider->StartNonContentionBasedRandomAccessProcedure (m_rnti, mci.rachConfigDedicated.raPreambleIndex, mci.rachConfigDedicated.raPrachMaskIndex);
           m_cphySapProvider->SetRnti (m_rnti);
           m_lastRrcTransactionIdentifier = msg.rrcTransactionIdentifier;
@@ -901,11 +871,11 @@
           // it's in the current stack, so we would corrupt the stack
           // if we did so. Hence we schedule it for later disposal
           m_srb1Old = m_srb1;
-          Simulator::ScheduleNow (&LteUeRrc::DisposeOldSrb1, this);          
+          Simulator::ScheduleNow (&LteUeRrc::DisposeOldSrb1, this);
           m_srb1 = 0; // new instance will be be created within ApplyRadioResourceConfigDedicated
 
           m_drbMap.clear (); // dispose all DRBs
-          ApplyRadioResourceConfigDedicated (msg.radioResourceConfigDedicated);    
+          ApplyRadioResourceConfigDedicated (msg.radioResourceConfigDedicated);
 
           if (msg.haveMeasConfig)
             {
@@ -924,7 +894,7 @@
           if (msg.haveMeasConfig)
             {
               ApplyMeasConfig (msg.measConfig);
-            }          
+            }
           LteRrcSap::RrcConnectionReconfigurationCompleted msg2;
           msg2.rrcTransactionIdentifier = msg.rrcTransactionIdentifier;
           m_rrcSapUser->SendRrcConnectionReconfigurationCompleted (msg2);
@@ -941,13 +911,21 @@
 void 
 LteUeRrc::DoRecvRrcConnectionReestablishment (LteRrcSap::RrcConnectionReestablishment msg)
 {
+  NS_LOG_FUNCTION (this << " RNTI " << m_rnti);
   switch (m_state)
     {
     case CONNECTED_REESTABLISHING:
       {
+        /**
+         * \todo After receiving RRC Connection Re-establishment, stop timer
+         *       T301, fire a new trace source, reply with RRC Connection
+         *       Re-establishment Complete, and finally switch to
+         *       CONNECTED_NORMALLY state. See Section 5.3.7.5 of 3GPP TS
+         *       36.331.
+         */
       }
       break;
-      
+
     default:
       NS_FATAL_ERROR ("method unexpected in state " << ToString (m_state));
       break;
@@ -957,15 +935,19 @@
 void 
 LteUeRrc::DoRecvRrcConnectionReestablishmentReject (LteRrcSap::RrcConnectionReestablishmentReject msg)
 {
-  NS_LOG_FUNCTION (this);
+  NS_LOG_FUNCTION (this << " RNTI " << m_rnti);
   switch (m_state)
     {
     case CONNECTED_REESTABLISHING:
       {
+        /**
+         * \todo After receiving RRC Connection Re-establishment Reject, stop
+         *       timer T301. See Section 5.3.7.8 of 3GPP TS 36.331.
+         */
         LeaveConnectedMode ();
       }
       break;
-      
+
     default:
       NS_FATAL_ERROR ("method unexpected in state " << ToString (m_state));
       break;
@@ -975,7 +957,8 @@
 void 
 LteUeRrc::DoRecvRrcConnectionRelease (LteRrcSap::RrcConnectionRelease msg)
 {
-  NS_LOG_FUNCTION (this);
+  NS_LOG_FUNCTION (this << " RNTI " << m_rnti);
+  /// \todo Currently not implemented, see Section 5.3.8 of 3GPP TS 36.331.
 }
 
 void 
@@ -988,15 +971,125 @@
 
 
 
-void 
-LteUeRrc::ApplyRadioResourceConfigDedicated (LteRrcSap::RadioResourceConfigDedicated rrcd)
+void
+LteUeRrc::SynchronizeToStrongestCell ()
 {
   NS_LOG_FUNCTION (this);
-  const struct LteRrcSap::PhysicalConfigDedicated& pcd = rrcd.physicalConfigDedicated;
-  
-  if (pcd.haveAntennaInfoDedicated)
+  NS_ASSERT (m_state == IDLE_CELL_SEARCH);
+
+  uint16_t maxRsrpCellId = 0;
+  double maxRsrp = -std::numeric_limits<double>::infinity ();
+
+  std::map<uint16_t, MeasValues>::iterator it;
+  for (it = m_storedMeasValues.begin (); it != m_storedMeasValues.end (); it++)
     {
-      m_cphySapProvider->SetTransmissionMode (pcd.antennaInfo.transmissionMode);
+      /*
+       * This block attempts to find a cell with strongest RSRP and has not
+       * yet been identified as "acceptable cell".
+       */
+      if (maxRsrp < it->second.rsrp)
+        {
+          std::set<uint16_t>::const_iterator itCell;
+          itCell = m_acceptableCell.find (it->first);
+          if (itCell == m_acceptableCell.end ())
+            {
+              maxRsrpCellId = it->first;
+              maxRsrp = it->second.rsrp;
+            }
+        }
+    }
+
+  if (maxRsrpCellId == 0)
+    {
+      NS_LOG_WARN (this << " Cell search is unable to detect surrounding cell to attach to");
+    }
+  else
+    {
+      NS_LOG_LOGIC (this << " cell " << maxRsrpCellId
+                         << " is the strongest untried surrounding cell");
+      m_cphySapProvider->SynchronizeWithEnb (maxRsrpCellId, m_dlEarfcn);
+      SwitchToState (IDLE_WAIT_MIB_SIB1);
+    }
+
+} // end of void LteUeRrc::SynchronizeToStrongestCell ()
+
+
+void
+LteUeRrc::EvaluateCellForSelection ()
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT (m_state == IDLE_WAIT_SIB1);
+  NS_ASSERT (m_hasReceivedMib);
+  NS_ASSERT (m_hasReceivedSib1);
+  uint16_t cellId = m_lastSib1.cellAccessRelatedInfo.cellIdentity;
+
+  // Cell selection criteria evaluation
+
+  bool isSuitableCell = false;
+  bool isAcceptableCell = false;
+  std::map<uint16_t, MeasValues>::iterator storedMeasIt = m_storedMeasValues.find (cellId);
+  double qRxLevMeas = storedMeasIt->second.rsrp;
+  double qRxLevMin = EutranMeasurementMapping::IeValue2ActualQRxLevMin (m_lastSib1.cellSelectionInfo.qRxLevMin);
+  NS_LOG_LOGIC (this << " cell selection to cellId=" << cellId
+                     << " qrxlevmeas=" << qRxLevMeas << " dBm"
+                     << " qrxlevmin=" << qRxLevMin << " dBm");
+
+  if (qRxLevMeas - qRxLevMin > 0)
+    {
+      isAcceptableCell = true;
+
+      uint32_t cellCsgId = m_lastSib1.cellAccessRelatedInfo.csgIdentity;
+      bool cellCsgIndication = m_lastSib1.cellAccessRelatedInfo.csgIndication;
+
+      isSuitableCell = (cellCsgIndication == false) || (cellCsgId == m_csgWhiteList);
+
+      NS_LOG_LOGIC (this << " csg(ue/cell/indication)=" << m_csgWhiteList << "/"
+                         << cellCsgId << "/" << cellCsgIndication);
+    }
+
+  // Cell selection decision
+
+  if (isSuitableCell)
+    {
+      m_cellId = cellId;
+      m_cphySapProvider->SynchronizeWithEnb (cellId, m_dlEarfcn);
+      m_cphySapProvider->SetDlBandwidth (m_dlBandwidth);
+      m_initialCellSelectionEndOkTrace (m_imsi, cellId);
+      SwitchToState (IDLE_CAMPED_NORMALLY);
+    }
+  else
+    {
+      // ignore the MIB and SIB1 received from this cell
+      m_hasReceivedMib = false;
+      m_hasReceivedSib1 = false;
+
+      m_initialCellSelectionEndErrorTrace (m_imsi, cellId);
+
+      if (isAcceptableCell)
+        {
+          /*
+           * The cells inserted into this list will not be considered for
+           * subsequent cell search attempt.
+           */
+          m_acceptableCell.insert (cellId);
+        }
+
+      SwitchToState (IDLE_CELL_SEARCH);
+      SynchronizeToStrongestCell (); // retry to a different cell
+    }
+
+} // end of void LteUeRrc::EvaluateCellForSelection ()
+
+
+void 
+LteUeRrc::ApplyRadioResourceConfigDedicated (LteRrcSap::RadioResourceConfigDedicated rrcd)
+{
+  NS_LOG_FUNCTION (this);
+  const struct LteRrcSap::PhysicalConfigDedicated& pcd = rrcd.physicalConfigDedicated;
+  
+  if (pcd.haveAntennaInfoDedicated)
+    {
+      m_cphySapProvider->SetTransmissionMode (pcd.antennaInfo.transmissionMode);
     }
   if (pcd.haveSoundingRsUlConfigDedicated)
     {
@@ -1187,23 +1280,17 @@
               NS_LOG_LOGIC (this << " deleting measId " << (uint32_t) measId << " because referring to measObjectId " << (uint32_t)  measObjectId);
               // note: postfix operator preserves iterator validity
               m_varMeasConfig.measIdList.erase (measIdIt++);
-              std::map<uint8_t, VarMeasReport>::iterator measReportIt = m_varMeasReportList.find (measId);
-              if (measReportIt != m_varMeasReportList.end ())
-                {                  
-                  NS_LOG_LOGIC (this << " deleting existing report for measId " << (uint32_t) measId << " because referring to measObjectId " << (uint32_t)  measObjectId);
-                  measReportIt->second.periodicReportTimer.Cancel ();
-                  m_varMeasReportList.erase (measReportIt);
-                }
+              VarMeasReportListClear (measId);
             }
           else
             {
               ++measIdIt;
             }
-        }    
-      
-    }     
+        }
+
+    }
 
-  // 3GPP TS 36.331 section 5.5.2.5  Measurement object addition/ modification  
+  // 3GPP TS 36.331 section 5.5.2.5  Measurement object addition/ modification
   for (std::list<LteRrcSap::MeasObjectToAddMod>::iterator it = mc.measObjectToAddModList.begin ();
        it !=  mc.measObjectToAddModList.end ();
        ++it)
@@ -1213,39 +1300,33 @@
       NS_ASSERT_MSG (it->measObjectEutra.cellsToAddModList.empty (), "cellsToAddModList not supported");
       NS_ASSERT_MSG (it->measObjectEutra.cellsToRemoveList.empty (), "blackCellsToRemoveList not supported");
       NS_ASSERT_MSG (it->measObjectEutra.blackCellsToAddModList.empty (), "blackCellsToAddModList not supported");
-      NS_ASSERT_MSG (it->measObjectEutra.haveCellForWhichToReportCGI == false , "cellForWhichToReportCGI is not supported");
-      
-                     
-      uint8_t measObjectId = it->measObjectId;         
-      std::map<uint8_t, LteRrcSap::MeasObjectToAddMod>::iterator measObjectIt = m_varMeasConfig.measObjectList.find (measObjectId);      
+      NS_ASSERT_MSG (it->measObjectEutra.haveCellForWhichToReportCGI == false, "cellForWhichToReportCGI is not supported");
+
+      uint8_t measObjectId = it->measObjectId;
+      std::map<uint8_t, LteRrcSap::MeasObjectToAddMod>::iterator measObjectIt = m_varMeasConfig.measObjectList.find (measObjectId);
       if (measObjectIt != m_varMeasConfig.measObjectList.end ())
         {
           NS_LOG_LOGIC ("measObjectId " << (uint32_t) measObjectId << " exists, updating entry");
-          measObjectIt->second = *it;          
+          measObjectIt->second = *it;
           for (std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator measIdIt 
                  = m_varMeasConfig.measIdList.begin ();
                measIdIt != m_varMeasConfig.measIdList.end ();
-               ++measIdIt)               
+               ++measIdIt)
             {
               if (measIdIt->second.measObjectId == measObjectId)
                 {
                   uint8_t measId = measIdIt->second.measId;
                   NS_LOG_LOGIC (this << " found measId " << (uint32_t) measId << " referring to measObjectId " << (uint32_t)  measObjectId);
-                  std::map<uint8_t, VarMeasReport>::iterator measReportIt = m_varMeasReportList.find (measId);
-                  if (measReportIt != m_varMeasReportList.end ())
-                    {
-                      NS_LOG_LOGIC (this << " deleting existing report for measId " << (uint32_t) measId << " because referring to measObjectId " << (uint32_t)  measObjectId);
-                      measReportIt->second.periodicReportTimer.Cancel ();
-                      m_varMeasReportList.erase (measReportIt);
-                    }
+                  VarMeasReportListClear (measId);
                 }
             }
         }
       else
         {
-          NS_LOG_LOGIC ("measObjectId " << (uint32_t) measObjectId << " is new, adding entry");     
+          NS_LOG_LOGIC ("measObjectId " << (uint32_t) measObjectId << " is new, adding entry");
           m_varMeasConfig.measObjectList[measObjectId] = *it;
-        }            
+        }
+
     }
 
   // 3GPP TS 36.331 section 5.5.2.6 Reporting configuration removal
@@ -1266,22 +1347,16 @@
               NS_LOG_LOGIC (this << " deleting measId " << (uint32_t) measId << " because referring to reportConfigId " << (uint32_t)  reportConfigId);
               // note: postfix operator preserves iterator validity
               m_varMeasConfig.measIdList.erase (measIdIt++);
-              std::map<uint8_t, VarMeasReport>::iterator measReportIt = m_varMeasReportList.find (measId);
-              if (measReportIt != m_varMeasReportList.end ())
-                {                  
-                  NS_LOG_LOGIC (this << " deleting existing report for measId" << (uint32_t) measId << " because referring to reportConfigId " << (uint32_t)  reportConfigId);
-                  measReportIt->second.periodicReportTimer.Cancel ();
-                  m_varMeasReportList.erase (measReportIt);
-                }
+              VarMeasReportListClear (measId);
             }
           else
             {
               ++measIdIt;
             }
-        }    
+        }
 
     }
-  
+
   // 3GPP TS 36.331 section 5.5.2.7 Reporting configuration addition/ modification
   for (std::list<LteRrcSap::ReportConfigToAddMod>::iterator it = mc.reportConfigToAddModList.begin ();
        it !=  mc.reportConfigToAddModList.end ();
@@ -1290,75 +1365,54 @@
       // simplifying assumptions
       NS_ASSERT_MSG (it->reportConfigEutra.triggerType == LteRrcSap::ReportConfigEutra::EVENT,
                      "only trigger type EVENT is supported");
-      NS_ASSERT_MSG (it->reportConfigEutra.eventId == LteRrcSap::ReportConfigEutra::EVENT_A2
-                     || it->reportConfigEutra.eventId == LteRrcSap::ReportConfigEutra::EVENT_A4,
-                     "only events A2 and A4 are supported");
-      NS_ASSERT_MSG (it->reportConfigEutra.timeToTrigger == 0, "timeToTrigger > 0 is not supported");
-      
-      uint8_t reportConfigId = it->reportConfigId;         
-      std::map<uint8_t, LteRrcSap::ReportConfigToAddMod>::iterator reportConfigIt = m_varMeasConfig.reportConfigList.find (reportConfigId);      
+
+      uint8_t reportConfigId = it->reportConfigId;
+      std::map<uint8_t, LteRrcSap::ReportConfigToAddMod>::iterator reportConfigIt = m_varMeasConfig.reportConfigList.find (reportConfigId);
       if (reportConfigIt != m_varMeasConfig.reportConfigList.end ())
         {
           NS_LOG_LOGIC ("reportConfigId " << (uint32_t) reportConfigId << " exists, updating entry");
-          m_varMeasConfig.reportConfigList[reportConfigId] = *it;          
+          m_varMeasConfig.reportConfigList[reportConfigId] = *it;
           for (std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator measIdIt 
                  = m_varMeasConfig.measIdList.begin ();
                measIdIt != m_varMeasConfig.measIdList.end ();
-               ++measIdIt)               
+               ++measIdIt)
             {
               if (measIdIt->second.reportConfigId == reportConfigId)
                 {
                   uint8_t measId = measIdIt->second.measId;
                   NS_LOG_LOGIC (this << " found measId " << (uint32_t) measId << " referring to reportConfigId " << (uint32_t)  reportConfigId);
-                  std::map<uint8_t, VarMeasReport>::iterator measReportIt = m_varMeasReportList.find (measId);
-                  if (measReportIt != m_varMeasReportList.end ())
-                    {
-                      NS_LOG_LOGIC (this << " deleting existing report for measId " << (uint32_t) measId << " because referring to reportConfigId " << (uint32_t)  reportConfigId);
-                      measReportIt->second.periodicReportTimer.Cancel ();
-                      m_varMeasReportList.erase (measReportIt);
-                    }
+                  VarMeasReportListClear (measId);
                 }
             }
         }
       else
         {
-          NS_LOG_LOGIC ("reportConfigId " << (uint32_t) reportConfigId << " is new, adding entry");     
+          NS_LOG_LOGIC ("reportConfigId " << (uint32_t) reportConfigId << " is new, adding entry");
           m_varMeasConfig.reportConfigList[reportConfigId] = *it;
-        }            
-    }
+        }
 
+    }
 
   // 3GPP TS 36.331 section 5.5.2.8 Quantity configuration
   if (mc.haveQuantityConfig)
     {
       NS_LOG_LOGIC (this << " setting quantityConfig");
       m_varMeasConfig.quantityConfig = mc.quantityConfig;
-      std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator measIdIt = m_varMeasConfig.measIdList.begin ();
-      while (measIdIt != m_varMeasConfig.measIdList.end ())
-        {
-          uint8_t measId = measIdIt->second.measId;
-          NS_ASSERT (measId == measIdIt->first);
-          NS_LOG_LOGIC (this << " deleting measId " << (uint32_t) measId);
-          // note: postfix operator preserves iterator validity
-          m_varMeasConfig.measIdList.erase (measIdIt++);
-          std::map<uint8_t, VarMeasReport>::iterator measReportIt = m_varMeasReportList.find (measId);
-          if (measReportIt != m_varMeasReportList.end ())
-            {                  
-              NS_LOG_LOGIC (this << " deleting existing report for measId" << (uint32_t) measId);
-              measReportIt->second.periodicReportTimer.Cancel ();
-              m_varMeasReportList.erase (measReportIt);
-            }
-        }
       // we calculate here the coefficient a used for Layer 3 filtering, see 3GPP TS 36.331 section 5.5.3.2
-      m_varMeasConfig.aRsrp = std::pow (0.5,  mc.quantityConfig.filterCoefficientRSRP/4.0);
-      m_varMeasConfig.aRsrq = std::pow (0.5,  mc.quantityConfig.filterCoefficientRSRQ/4.0);
+      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
+             = m_varMeasConfig.measIdList.begin ();
+           measIdIt != m_varMeasConfig.measIdList.end ();
+           ++measIdIt)
+        {
+          VarMeasReportListClear (measIdIt->second.measId);
+        }
     }
 
-
-  // 3GPP TS 36.331 section 5.5.2.2 Measurement identity removal  
+  // 3GPP TS 36.331 section 5.5.2.2 Measurement identity removal
   for (std::list<uint8_t>::iterator it = mc.measIdToRemoveList.begin ();
        it !=  mc.measIdToRemoveList.end ();
        ++it)
@@ -1366,13 +1420,11 @@
       uint8_t measId = *it;
       NS_LOG_LOGIC (this << " deleting measId " << (uint32_t) measId);
       m_varMeasConfig.measIdList.erase (measId);
-      std::map<uint8_t, VarMeasReport>::iterator measReportIt = m_varMeasReportList.find (measId);
-      if (measReportIt != m_varMeasReportList.end ())
-        {
-          NS_LOG_LOGIC (this << " deleting existing report for measId" << (uint32_t) measId);
-          measReportIt->second.periodicReportTimer.Cancel ();
-          m_varMeasReportList.erase (measReportIt);
-        }
+      VarMeasReportListClear (measId);
+
+      // removing time-to-trigger queues
+      m_enteringTriggerQueue.erase (measId);
+      m_leavingTriggerQueue.erase (measId);
     }
 
   // 3GPP TS 36.331 section 5.5.2.3 Measurement identity addition/ modification
@@ -1380,12 +1432,14 @@
        it !=  mc.measIdToAddModList.end ();
        ++it)
     {
-      NS_LOG_LOGIC (this << " measId " << (uint32_t) it->measId << " (measObjectId=" 
-                    << (uint32_t) it->measObjectId << ", reportConfigId=" << (uint32_t) it->reportConfigId << ")");
+      NS_LOG_LOGIC (this << " measId " << (uint32_t) it->measId
+                         << " (measObjectId=" << (uint32_t) it->measObjectId
+                         << ", reportConfigId=" << (uint32_t) it->reportConfigId
+                         << ")");
       NS_ASSERT (m_varMeasConfig.measObjectList.find (it->measObjectId)
                  != m_varMeasConfig.measObjectList.end ());
       NS_ASSERT (m_varMeasConfig.reportConfigList.find (it->reportConfigId)
-                 != m_varMeasConfig.reportConfigList.end ());      
+                 != m_varMeasConfig.reportConfigList.end ());
       m_varMeasConfig.measIdList[it->measId] = *it; // side effect: create new entry if not exists
       std::map<uint8_t, VarMeasReport>::iterator measReportIt = m_varMeasReportList.find (it->measId);
       if (measReportIt != m_varMeasReportList.end ())
@@ -1396,6 +1450,10 @@
       NS_ASSERT (m_varMeasConfig.reportConfigList.find (it->reportConfigId)
                  ->second.reportConfigEutra.triggerType != LteRrcSap::ReportConfigEutra::PERIODICAL);
 
+      // new empty queues for time-to-trigger
+      std::list<PendingTrigger_t> s;
+      m_enteringTriggerQueue[it->measId] = s;
+      m_leavingTriggerQueue[it->measId] = s;
     }
 
   if (mc.haveMeasGapConfig)
@@ -1414,16 +1472,1086 @@
     }
 }
 
+void
+LteUeRrc::SaveUeMeasurements (uint16_t cellId, double rsrp, double rsrq,
+                              bool useLayer3Filtering)
+{
+  NS_LOG_FUNCTION (this << cellId << rsrp << rsrq << useLayer3Filtering);
+
+  std::map<uint16_t, MeasValues>::iterator storedMeasIt = m_storedMeasValues.find (cellId);;
+
+  if (storedMeasIt != m_storedMeasValues.end ())
+    {
+      if (useLayer3Filtering)
+        {
+          // F_n = (1-a) F_{n-1} + a M_n
+          storedMeasIt->second.rsrp = (1 - m_varMeasConfig.aRsrp) * storedMeasIt->second.rsrp
+            + m_varMeasConfig.aRsrp * rsrp;
+
+          if (std::isnan (storedMeasIt->second.rsrq))
+            {
+              // the previous RSRQ measurements provided UE PHY are invalid
+              storedMeasIt->second.rsrq = rsrq; // replace it with unfiltered value
+            }
+          else
+            {
+              storedMeasIt->second.rsrq = (1 - m_varMeasConfig.aRsrq) * storedMeasIt->second.rsrq
+                + m_varMeasConfig.aRsrq * rsrq;
+            }
+        }
+      else
+        {
+          storedMeasIt->second.rsrp = rsrp;
+          storedMeasIt->second.rsrq = rsrq;
+        }
+    }
+  else
+    {
+      // first value is always unfiltered
+      MeasValues v;
+      v.rsrp = rsrp;
+      v.rsrq = rsrq;
+      std::pair<uint16_t, MeasValues> val (cellId, v);
+      std::pair<std::map<uint16_t, MeasValues>::iterator, bool>
+        ret = m_storedMeasValues.insert (val);
+      NS_ASSERT_MSG (ret.second == true, "element already existed");
+      storedMeasIt = ret.first;
+    }
+
+  NS_LOG_DEBUG (this << " IMSI " << m_imsi << " state " << ToString (m_state)
+                     << ", measured cell " << m_cellId
+                     << ", new RSRP " << rsrp << " stored " << storedMeasIt->second.rsrp
+                     << ", new RSRQ " << rsrq << " stored " << storedMeasIt->second.rsrq);
+  storedMeasIt->second.timestamp = Simulator::Now ();
+
+} // end of void SaveUeMeasurements
+
+void
+LteUeRrc::MeasurementReportTriggering (uint8_t measId)
+{
+  NS_LOG_FUNCTION (this << (uint16_t) measId);
+
+  std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator measIdIt =
+    m_varMeasConfig.measIdList.find (measId);
+  NS_ASSERT (measIdIt != m_varMeasConfig.measIdList.end ());
+  NS_ASSERT (measIdIt->first == measIdIt->second.measId);
+
+  std::map<uint8_t, LteRrcSap::ReportConfigToAddMod>::iterator
+    reportConfigIt = m_varMeasConfig.reportConfigList.find (measIdIt->second.reportConfigId);
+  NS_ASSERT (reportConfigIt != m_varMeasConfig.reportConfigList.end ());
+  LteRrcSap::ReportConfigEutra& reportConfigEutra = reportConfigIt->second.reportConfigEutra;
+
+  std::map<uint8_t, LteRrcSap::MeasObjectToAddMod>::iterator
+    measObjectIt = m_varMeasConfig.measObjectList.find (measIdIt->second.measObjectId);
+  NS_ASSERT (measObjectIt != m_varMeasConfig.measObjectList.end ());
+  LteRrcSap::MeasObjectEutra& measObjectEutra = measObjectIt->second.measObjectEutra;
+
+  std::map<uint8_t, VarMeasReport>::iterator
+    measReportIt = m_varMeasReportList.find (measId);
+  bool isMeasIdInReportList = (measReportIt != m_varMeasReportList.end ());
+
+  // we don't check the purpose field, as it is only included for
+  // triggerType == periodical, which is not supported
+  NS_ASSERT_MSG (reportConfigEutra.triggerType
+                 == LteRrcSap::ReportConfigEutra::EVENT,
+                 "only triggerType == event is supported");
+  // only EUTRA is supported, no need to check for it
+
+  NS_LOG_LOGIC (this << " considering measId " << (uint32_t) measId);
+  bool eventEntryCondApplicable = false;
+  bool eventLeavingCondApplicable = false;
+  ConcernedCells_t concernedCellsEntry;
+  ConcernedCells_t concernedCellsLeaving;
+
+  switch (reportConfigEutra.eventId)
+    {
+    case LteRrcSap::ReportConfigEutra::EVENT_A1:
+      {
+        /*
+         * Event A1 (Serving becomes better than threshold)
+         * Please refer to 3GPP TS 36.331 Section 5.5.4.2
+         */
+
+        double ms; // Ms, the measurement result of the serving cell
+        double thresh; // Thresh, the threshold parameter for this event
+        // Hys, the hysteresis parameter for this event.
+        double hys = EutranMeasurementMapping::IeValue2ActualHysteresis (reportConfigEutra.hysteresis);
+
+        switch (reportConfigEutra.triggerQuantity)
+          {
+          case LteRrcSap::ReportConfigEutra::RSRP:
+            ms = m_storedMeasValues[m_cellId].rsrp;
+            NS_ASSERT (reportConfigEutra.threshold1.choice
+                       == LteRrcSap::ThresholdEutra::THRESHOLD_RSRP);
+            thresh = EutranMeasurementMapping::RsrpRange2Dbm (reportConfigEutra.threshold1.range);
+            break;
+          case LteRrcSap::ReportConfigEutra::RSRQ:
+            ms = m_storedMeasValues[m_cellId].rsrq;
+            NS_ASSERT (reportConfigEutra.threshold1.choice
+                       == LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ);
+            thresh = EutranMeasurementMapping::RsrqRange2Db (reportConfigEutra.threshold1.range);
+            break;
+          default:
+            NS_FATAL_ERROR ("unsupported triggerQuantity");
+            break;
+          }
+
+        // Inequality A1-1 (Entering condition): Ms - Hys > Thresh
+        bool entryCond = ms - hys > thresh;
+
+        if (entryCond)
+          {
+            if (!isMeasIdInReportList)
+              {
+                concernedCellsEntry.push_back (m_cellId);
+                eventEntryCondApplicable = true;
+              }
+            else
+              {
+                /*
+                 * This is to check that the triggered cell recorded in the
+                 * VarMeasReportList is the serving cell.
+                 */
+                NS_ASSERT (measReportIt->second.cellsTriggeredList.find (m_cellId)
+                           != measReportIt->second.cellsTriggeredList.end ());
+              }
+          }
+        else if (reportConfigEutra.timeToTrigger > 0)
+          {
+            CancelEnteringTrigger (measId);
+          }
+
+        // Inequality A1-2 (Leaving condition): Ms + Hys < Thresh
+        bool leavingCond = ms + hys < thresh;
+
+        if (leavingCond)
+          {
+            if (isMeasIdInReportList)
+              {
+                /*
+                 * This is to check that the triggered cell recorded in the
+                 * VarMeasReportList is the serving cell.
+                 */
+                NS_ASSERT (measReportIt->second.cellsTriggeredList.find (m_cellId)
+                           != measReportIt->second.cellsTriggeredList.end ());
+                concernedCellsLeaving.push_back (m_cellId);
+                eventLeavingCondApplicable = true;
+              }
+          }
+        else if (reportConfigEutra.timeToTrigger > 0)
+          {
+            CancelLeavingTrigger (measId);
+          }
+
+        NS_LOG_LOGIC (this << " event A1: serving cell " << m_cellId
+                           << " ms=" << ms << " thresh=" << thresh
+                           << " entryCond=" << entryCond
+                           << " leavingCond=" << leavingCond);
+
+      } // end of case LteRrcSap::ReportConfigEutra::EVENT_A1
+
+      break;
+
+    case LteRrcSap::ReportConfigEutra::EVENT_A2:
+      {
+        /*
+         * Event A2 (Serving becomes worse than threshold)
+         * Please refer to 3GPP TS 36.331 Section 5.5.4.3
+         */
+
+        double ms; // Ms, the measurement result of the serving cell
+        double thresh; // Thresh, the threshold parameter for this event
+        // Hys, the hysteresis parameter for this event.
+        double hys = EutranMeasurementMapping::IeValue2ActualHysteresis (reportConfigEutra.hysteresis);
+
+        switch (reportConfigEutra.triggerQuantity)
+          {
+          case LteRrcSap::ReportConfigEutra::RSRP:
+            ms = m_storedMeasValues[m_cellId].rsrp;
+            NS_ASSERT (reportConfigEutra.threshold1.choice
+                       == LteRrcSap::ThresholdEutra::THRESHOLD_RSRP);
+            thresh = EutranMeasurementMapping::RsrpRange2Dbm (reportConfigEutra.threshold1.range);
+            break;
+          case LteRrcSap::ReportConfigEutra::RSRQ:
+            ms = m_storedMeasValues[m_cellId].rsrq;
+            NS_ASSERT (reportConfigEutra.threshold1.choice
+                       == LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ);
+            thresh = EutranMeasurementMapping::RsrqRange2Db (reportConfigEutra.threshold1.range);
+            break;
+          default:
+            NS_FATAL_ERROR ("unsupported triggerQuantity");
+            break;
+          }
+
+        // Inequality A2-1 (Entering condition): Ms + Hys < Thresh
+        bool entryCond = ms + hys < thresh;
+
+        if (entryCond)
+          {
+            if (!isMeasIdInReportList)
+              {
+                concernedCellsEntry.push_back (m_cellId);
+                eventEntryCondApplicable = true;
+              }
+            else
+              {
+                /*
+                 * This is to check that the triggered cell recorded in the
+                 * VarMeasReportList is the serving cell.
+                 */
+                NS_ASSERT (measReportIt->second.cellsTriggeredList.find (m_cellId)
+                           != measReportIt->second.cellsTriggeredList.end ());
+              }
+          }
+        else if (reportConfigEutra.timeToTrigger > 0)
+          {
+            CancelEnteringTrigger (measId);
+          }
+
+        // Inequality A2-2 (Leaving condition): Ms - Hys > Thresh
+        bool leavingCond = ms - hys > thresh;
+
+        if (leavingCond)
+          {
+            if (isMeasIdInReportList)
+              {
+                /*
+                 * This is to check that the triggered cell recorded in the
+                 * VarMeasReportList is the serving cell.
+                 */
+                NS_ASSERT (measReportIt->second.cellsTriggeredList.find (m_cellId)
+                           != measReportIt->second.cellsTriggeredList.end ());
+                concernedCellsLeaving.push_back (m_cellId);
+                eventLeavingCondApplicable = true;
+              }
+          }
+        else if (reportConfigEutra.timeToTrigger > 0)
+          {
+            CancelLeavingTrigger (measId);
+          }
+
+        NS_LOG_LOGIC (this << " event A2: serving cell " << m_cellId
+                           << " ms=" << ms << " thresh=" << thresh
+                           << " entryCond=" << entryCond
+                           << " leavingCond=" << leavingCond);
+
+      } // end of case LteRrcSap::ReportConfigEutra::EVENT_A2
+
+      break;
+
+    case LteRrcSap::ReportConfigEutra::EVENT_A3:
+      {
+        /*
+         * Event A3 (Neighbour becomes offset better than PCell)
+         * Please refer to 3GPP TS 36.331 Section 5.5.4.4
+         */
+
+        double mn; // Mn, the measurement result of the neighbouring cell
+        double ofn = measObjectEutra.offsetFreq; // Ofn, the frequency specific offset of the frequency of the
+        double ocn = 0.0; // Ocn, the cell specific offset of the neighbour cell
+        double mp; // Mp, the measurement result of the PCell
+        double ofp = measObjectEutra.offsetFreq; // Ofp, the frequency specific offset of the primary frequency
+        double ocp = 0.0; // Ocp, the cell specific offset of the PCell
+        // Off, the offset parameter for this event.
+        double off = EutranMeasurementMapping::IeValue2ActualA3Offset (reportConfigEutra.a3Offset);
+        // Hys, the hysteresis parameter for this event.
+        double hys = EutranMeasurementMapping::IeValue2ActualHysteresis (reportConfigEutra.hysteresis);
+
+        switch (reportConfigEutra.triggerQuantity)
+          {
+          case LteRrcSap::ReportConfigEutra::RSRP:
+            mp = m_storedMeasValues[m_cellId].rsrp;
+            NS_ASSERT (reportConfigEutra.threshold1.choice
+                       == LteRrcSap::ThresholdEutra::THRESHOLD_RSRP);
+            break;
+          case LteRrcSap::ReportConfigEutra::RSRQ:
+            mp = m_storedMeasValues[m_cellId].rsrq;
+            NS_ASSERT (reportConfigEutra.threshold1.choice
+                       == LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ);
+            break;
+          default:
+            NS_FATAL_ERROR ("unsupported triggerQuantity");
+            break;
+          }
+
+        for (std::map<uint16_t, MeasValues>::iterator storedMeasIt = m_storedMeasValues.begin ();
+             storedMeasIt != m_storedMeasValues.end ();
+             ++storedMeasIt)
+          {
+            uint16_t cellId = storedMeasIt->first;
+            if (cellId == m_cellId)
+              {
+                continue;
+              }
+
+            switch (reportConfigEutra.triggerQuantity)
+              {
+              case LteRrcSap::ReportConfigEutra::RSRP:
+                mn = storedMeasIt->second.rsrp;
+                break;
+              case LteRrcSap::ReportConfigEutra::RSRQ:
+                mn = storedMeasIt->second.rsrq;
+                break;
+              default:
+                NS_FATAL_ERROR ("unsupported triggerQuantity");
+                break;
+              }
+
+            bool hasTriggered = isMeasIdInReportList
+              && (measReportIt->second.cellsTriggeredList.find (cellId)
+                  != measReportIt->second.cellsTriggeredList.end ());
+
+            // Inequality A3-1 (Entering condition): Mn + Ofn + Ocn - Hys > Mp + Ofp + Ocp + Off
+            bool entryCond = mn + ofn + ocn - hys > mp + ofp + ocp + off;
+
+            if (entryCond)
+              {
+                if (!hasTriggered)
+                  {
+                    concernedCellsEntry.push_back (cellId);
+                    eventEntryCondApplicable = true;
+                  }
+              }
+            else if (reportConfigEutra.timeToTrigger > 0)
+              {
+                CancelEnteringTrigger (measId, cellId);
+              }
+
+            // Inequality A3-2 (Leaving condition): Mn + Ofn + Ocn + Hys < Mp + Ofp + Ocp + Off
+            bool leavingCond = mn + ofn + ocn + hys < mp + ofp + ocp + off;
+
+            if (leavingCond)
+              {
+                if (hasTriggered)
+                  {
+                    concernedCellsLeaving.push_back (cellId);
+                    eventLeavingCondApplicable = true;
+                  }
+              }
+            else if (reportConfigEutra.timeToTrigger > 0)
+              {
+                CancelLeavingTrigger (measId, cellId);
+              }
+
+            NS_LOG_LOGIC (this << " event A3: neighbor cell " << cellId
+                               << " mn=" << mn << " mp=" << mp << " offset=" << off
+                               << " entryCond=" << entryCond
+                               << " leavingCond=" << leavingCond);
+
+          } // end of for (storedMeasIt)
+
+      } // end of case LteRrcSap::ReportConfigEutra::EVENT_A3
+
+      break;
+
+    case LteRrcSap::ReportConfigEutra::EVENT_A4:
+      {
+        /*
+         * Event A4 (Neighbour becomes better than threshold)
+         * Please refer to 3GPP TS 36.331 Section 5.5.4.5
+         */
+
+        double mn; // Mn, the measurement result of the neighbouring cell
+        double ofn = measObjectEutra.offsetFreq; // Ofn, the frequency specific offset of the frequency of the
+        double ocn = 0.0; // Ocn, the cell specific offset of the neighbour cell
+        double thresh; // Thresh, the threshold parameter for this event
+        // Hys, the hysteresis parameter for this event.
+        double hys = EutranMeasurementMapping::IeValue2ActualHysteresis (reportConfigEutra.hysteresis);
+
+        switch (reportConfigEutra.triggerQuantity)
+          {
+          case LteRrcSap::ReportConfigEutra::RSRP:
+            NS_ASSERT (reportConfigEutra.threshold1.choice
+                       == LteRrcSap::ThresholdEutra::THRESHOLD_RSRP);
+            thresh = EutranMeasurementMapping::RsrpRange2Dbm (reportConfigEutra.threshold1.range);
+            break;
+          case LteRrcSap::ReportConfigEutra::RSRQ:
+            NS_ASSERT (reportConfigEutra.threshold1.choice
+                       == LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ);
+            thresh = EutranMeasurementMapping::RsrqRange2Db (reportConfigEutra.threshold1.range);
+            break;
+          default:
+            NS_FATAL_ERROR ("unsupported triggerQuantity");
+            break;
+          }
+
+        for (std::map<uint16_t, MeasValues>::iterator storedMeasIt = m_storedMeasValues.begin ();
+             storedMeasIt != m_storedMeasValues.end ();
+             ++storedMeasIt)
+          {
+            uint16_t cellId = storedMeasIt->first;
+            if (cellId == m_cellId)
+              {
+                continue;
+              }
+
+            switch (reportConfigEutra.triggerQuantity)
+              {
+              case LteRrcSap::ReportConfigEutra::RSRP:
+                mn = storedMeasIt->second.rsrp;
+                break;
+              case LteRrcSap::ReportConfigEutra::RSRQ:
+                mn = storedMeasIt->second.rsrq;
+                break;
+              default:
+                NS_FATAL_ERROR ("unsupported triggerQuantity");
+                break;
+              }
+
+            bool hasTriggered = isMeasIdInReportList
+              && (measReportIt->second.cellsTriggeredList.find (cellId)
+                  != measReportIt->second.cellsTriggeredList.end ());
+
+            // Inequality A4-1 (Entering condition): Mn + Ofn + Ocn - Hys > Thresh
+            bool entryCond = mn + ofn + ocn - hys > thresh;
+
+            if (entryCond)
+              {
+                if (!hasTriggered)
+                  {
+                    concernedCellsEntry.push_back (cellId);
+                    eventEntryCondApplicable = true;
+                  }
+              }
+            else if (reportConfigEutra.timeToTrigger > 0)
+              {
+                CancelEnteringTrigger (measId, cellId);
+              }
+
+            // Inequality A4-2 (Leaving condition): Mn + Ofn + Ocn + Hys < Thresh
+            bool leavingCond = mn + ofn + ocn + hys < thresh;
+
+            if (leavingCond)
+              {
+                if (hasTriggered)
+                  {
+                    concernedCellsLeaving.push_back (cellId);
+                    eventLeavingCondApplicable = true;
+                  }
+              }
+            else if (reportConfigEutra.timeToTrigger > 0)
+              {
+                CancelLeavingTrigger (measId, cellId);
+              }
+
+            NS_LOG_LOGIC (this << " event A4: neighbor cell " << cellId
+                               << " mn=" << mn << " thresh=" << thresh
+                               << " entryCond=" << entryCond
+                               << " leavingCond=" << leavingCond);
+
+          } // end of for (storedMeasIt)
+
+      } // end of case LteRrcSap::ReportConfigEutra::EVENT_A4
+
+      break;
+
+    case LteRrcSap::ReportConfigEutra::EVENT_A5:
+      {
+        /*
+         * Event A5 (PCell becomes worse than threshold1 and neighbour
+         * becomes better than threshold2)
+         * Please refer to 3GPP TS 36.331 Section 5.5.4.6
+         */
+
+        double mp; // Mp, the measurement result of the PCell
+        double mn; // Mn, the measurement result of the neighbouring cell
+        double ofn = measObjectEutra.offsetFreq; // Ofn, the frequency specific offset of the frequency of the
+        double ocn = 0.0; // Ocn, the cell specific offset of the neighbour cell
+        double thresh1; // Thresh1, the threshold parameter for this event
+        double thresh2; // Thresh2, the threshold parameter for this event
+        // Hys, the hysteresis parameter for this event.
+        double hys = EutranMeasurementMapping::IeValue2ActualHysteresis (reportConfigEutra.hysteresis);
+
+        switch (reportConfigEutra.triggerQuantity)
+          {
+          case LteRrcSap::ReportConfigEutra::RSRP:
+            mp = m_storedMeasValues[m_cellId].rsrp;
+            NS_ASSERT (reportConfigEutra.threshold1.choice
+                       == LteRrcSap::ThresholdEutra::THRESHOLD_RSRP);
+            NS_ASSERT (reportConfigEutra.threshold2.choice
+                       == LteRrcSap::ThresholdEutra::THRESHOLD_RSRP);
+            thresh1 = EutranMeasurementMapping::RsrpRange2Dbm (reportConfigEutra.threshold1.range);
+            thresh2 = EutranMeasurementMapping::RsrpRange2Dbm (reportConfigEutra.threshold2.range);
+            break;
+          case LteRrcSap::ReportConfigEutra::RSRQ:
+            mp = m_storedMeasValues[m_cellId].rsrq;
+            NS_ASSERT (reportConfigEutra.threshold1.choice
+                       == LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ);
+            NS_ASSERT (reportConfigEutra.threshold2.choice
+                       == LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ);
+            thresh1 = EutranMeasurementMapping::RsrqRange2Db (reportConfigEutra.threshold1.range);
+            thresh2 = EutranMeasurementMapping::RsrqRange2Db (reportConfigEutra.threshold2.range);
+            break;
+          default:
+            NS_FATAL_ERROR ("unsupported triggerQuantity");
+            break;
+          }
+
+        // Inequality A5-1 (Entering condition 1): Mp + Hys < Thresh1
+        bool entryCond = mp + hys < thresh1;
+
+        if (entryCond)
+          {
+            for (std::map<uint16_t, MeasValues>::iterator storedMeasIt = m_storedMeasValues.begin ();
+                 storedMeasIt != m_storedMeasValues.end ();
+                 ++storedMeasIt)
+              {
+                uint16_t cellId = storedMeasIt->first;
+                if (cellId == m_cellId)
+                  {
+                    continue;
+                  }
+
+                switch (reportConfigEutra.triggerQuantity)
+                  {
+                  case LteRrcSap::ReportConfigEutra::RSRP:
+                    mn = storedMeasIt->second.rsrp;
+                    break;
+                  case LteRrcSap::ReportConfigEutra::RSRQ:
+                    mn = storedMeasIt->second.rsrq;
+                    break;
+                  default:
+                    NS_FATAL_ERROR ("unsupported triggerQuantity");
+                    break;
+                  }
+
+                bool hasTriggered = isMeasIdInReportList
+                  && (measReportIt->second.cellsTriggeredList.find (cellId)
+                      != measReportIt->second.cellsTriggeredList.end ());
+
+                // Inequality A5-2 (Entering condition 2): Mn + Ofn + Ocn - Hys > Thresh2
+
+                entryCond = mn + ofn + ocn - hys > thresh2;
+
+                if (entryCond)
+                  {
+                    if (!hasTriggered)
+                      {
+                        concernedCellsEntry.push_back (cellId);
+                        eventEntryCondApplicable = true;
+                      }
+                  }
+                else if (reportConfigEutra.timeToTrigger > 0)
+                  {
+                    CancelEnteringTrigger (measId, cellId);
+                  }
+
+                NS_LOG_LOGIC (this << " event A5: neighbor cell " << cellId
+                                   << " mn=" << mn << " mp=" << mp
+                                   << " thresh2=" << thresh2
+                                   << " thresh1=" << thresh1
+                                   << " entryCond=" << entryCond);
+
+              } // end of for (storedMeasIt)
+
+          } // end of if (entryCond)
+        else
+          {
+            NS_LOG_LOGIC (this << " event A5: serving cell " << m_cellId
+                               << " mp=" << mp << " thresh1=" << thresh1
+                               << " entryCond=" << entryCond);
+
+            if (reportConfigEutra.timeToTrigger > 0)
+              {
+                CancelEnteringTrigger (measId);
+              }
+          }
+
+        if (isMeasIdInReportList)
+          {
+            // Inequality A5-3 (Leaving condition 1): Mp - Hys > Thresh1
+            bool leavingCond = mp - hys > thresh1;
+
+            if (leavingCond)
+              {
+                if (reportConfigEutra.timeToTrigger == 0)
+                  {
+                    // leaving condition #2 does not have to be checked
+
+                    for (std::map<uint16_t, MeasValues>::iterator storedMeasIt = m_storedMeasValues.begin ();
+                         storedMeasIt != m_storedMeasValues.end ();
+                         ++storedMeasIt)
+                      {
+                        uint16_t cellId = storedMeasIt->first;
+                        if (cellId == m_cellId)
+                          {
+                            continue;
+                          }
+
+                        if (measReportIt->second.cellsTriggeredList.find (cellId)
+                            != measReportIt->second.cellsTriggeredList.end ())
+                          {
+                            concernedCellsLeaving.push_back (cellId);
+                            eventLeavingCondApplicable = true;
+                          }
+                      }
+                  } // end of if (reportConfigEutra.timeToTrigger == 0)
+                else
+                  {
+                    // leaving condition #2 has to be checked to cancel time-to-trigger
+
+                    for (std::map<uint16_t, MeasValues>::iterator storedMeasIt = m_storedMeasValues.begin ();
+                         storedMeasIt != m_storedMeasValues.end ();
+                         ++storedMeasIt)
+                      {
+                        uint16_t cellId = storedMeasIt->first;
+                        if (cellId == m_cellId)
+                          {
+                            continue;
+                          }
+
+                        if (measReportIt->second.cellsTriggeredList.find (cellId)
+                            != measReportIt->second.cellsTriggeredList.end ())
+                          {
+                            switch (reportConfigEutra.triggerQuantity)
+                              {
+                              case LteRrcSap::ReportConfigEutra::RSRP:
+                                mn = storedMeasIt->second.rsrp;
+                                break;
+                              case LteRrcSap::ReportConfigEutra::RSRQ:
+                                mn = storedMeasIt->second.rsrq;
+                                break;
+                              default:
+                                NS_FATAL_ERROR ("unsupported triggerQuantity");
+                                break;
+                              }
+
+                            // Inequality A5-4 (Leaving condition 2): Mn + Ofn + Ocn + Hys < Thresh2
+
+                            leavingCond = mn + ofn + ocn + hys < thresh2;
+
+                            if (!leavingCond)
+                              {
+                                CancelLeavingTrigger (measId, cellId);
+                              }
+
+                            /*
+                             * Whatever the result of leaving condition #2, this
+                             * cell is still "in", because leaving condition #1
+                             * is already true.
+                             */
+                            concernedCellsLeaving.push_back (cellId);
+                            eventLeavingCondApplicable = true;
+
+                            NS_LOG_LOGIC (this << " event A5: neighbor cell " << cellId
+                                               << " mn=" << mn << " mp=" << mp
+                                               << " thresh2=" << thresh2
+                                               << " thresh1=" << thresh1
+                                               << " leavingCond=" << leavingCond);
+
+                          } // end of if (measReportIt->second.cellsTriggeredList.find (cellId)
+                            //            != measReportIt->second.cellsTriggeredList.end ())
+
+                      } // end of for (storedMeasIt)
+
+                  } // end of else of if (reportConfigEutra.timeToTrigger == 0)
+
+                NS_LOG_LOGIC (this << " event A5: serving cell " << m_cellId
+                                   << " mp=" << mp << " thresh1=" << thresh1
+                                   << " leavingCond=" << leavingCond);
+
+              } // end of if (leavingCond)
+            else
+              {
+                if (reportConfigEutra.timeToTrigger > 0)
+                  {
+                    CancelLeavingTrigger (measId);
+                  }
+
+                // check leaving condition #2
+
+                for (std::map<uint16_t, MeasValues>::iterator storedMeasIt = m_storedMeasValues.begin ();
+                     storedMeasIt != m_storedMeasValues.end ();
+                     ++storedMeasIt)
+                  {
+                    uint16_t cellId = storedMeasIt->first;
+                    if (cellId == m_cellId)
+                      {
+                        continue;
+                      }
+
+                    if (measReportIt->second.cellsTriggeredList.find (cellId)
+                        != measReportIt->second.cellsTriggeredList.end ())
+                      {
+                        switch (reportConfigEutra.triggerQuantity)
+                          {
+                          case LteRrcSap::ReportConfigEutra::RSRP:
+                            mn = storedMeasIt->second.rsrp;
+                            break;
+                          case LteRrcSap::ReportConfigEutra::RSRQ:
+                            mn = storedMeasIt->second.rsrq;
+                            break;
+                          default:
+                            NS_FATAL_ERROR ("unsupported triggerQuantity");
+                            break;
+                          }
+
+                        // Inequality A5-4 (Leaving condition 2): Mn + Ofn + Ocn + Hys < Thresh2
+                        leavingCond = mn + ofn + ocn + hys < thresh2;
+
+                        if (leavingCond)
+                          {
+                            concernedCellsLeaving.push_back (cellId);
+                            eventLeavingCondApplicable = true;
+                          }
+
+                        NS_LOG_LOGIC (this << " event A5: neighbor cell " << cellId
+                                           << " mn=" << mn << " mp=" << mp
+                                           << " thresh2=" << thresh2
+                                           << " thresh1=" << thresh1
+                                           << " leavingCond=" << leavingCond);
+
+                      } // end of if (measReportIt->second.cellsTriggeredList.find (cellId)
+                        //            != measReportIt->second.cellsTriggeredList.end ())
+
+                  } // end of for (storedMeasIt)
+
+              } // end of else of if (leavingCond)
+
+          } // end of if (isMeasIdInReportList)
+
+      } // end of case LteRrcSap::ReportConfigEutra::EVENT_A5
+
+      break;
+
+    default:
+      NS_FATAL_ERROR ("unsupported eventId " << reportConfigEutra.eventId);
+      break;
+
+    } // switch (event type)
+
+  NS_LOG_LOGIC (this << " eventEntryCondApplicable=" << eventEntryCondApplicable
+                     << " eventLeavingCondApplicable=" << eventLeavingCondApplicable);
+
+  if (eventEntryCondApplicable)
+    {
+      if (reportConfigEutra.timeToTrigger == 0)
+        {
+          VarMeasReportListAdd (measId, concernedCellsEntry);
+        }
+      else
+        {
+          PendingTrigger_t t;
+          t.measId = measId;
+          t.concernedCells = concernedCellsEntry;
+          t.timer = Simulator::Schedule (MilliSeconds (reportConfigEutra.timeToTrigger),
+                                         &LteUeRrc::VarMeasReportListAdd, this,
+                                         measId, concernedCellsEntry);
+          std::map<uint8_t, std::list<PendingTrigger_t> >::iterator
+            enteringTriggerIt = m_enteringTriggerQueue.find (measId);
+          NS_ASSERT (enteringTriggerIt != m_enteringTriggerQueue.end ());
+          enteringTriggerIt->second.push_back (t);
+        }
+    }
+
+  if (eventLeavingCondApplicable)
+    {
+      // reportOnLeave will only be set when eventId = eventA3
+      bool reportOnLeave = (reportConfigEutra.eventId == LteRrcSap::ReportConfigEutra::EVENT_A3)
+        && reportConfigEutra.reportOnLeave;
+
+      if (reportConfigEutra.timeToTrigger == 0)
+        {
+          VarMeasReportListErase (measId, concernedCellsLeaving, reportOnLeave);
+        }
+      else
+        {
+          PendingTrigger_t t;
+          t.measId = measId;
+          t.concernedCells = concernedCellsLeaving;
+          t.timer = Simulator::Schedule (MilliSeconds (reportConfigEutra.timeToTrigger),
+                                         &LteUeRrc::VarMeasReportListErase, this,
+                                         measId, concernedCellsLeaving, reportOnLeave);
+          std::map<uint8_t, std::list<PendingTrigger_t> >::iterator
+            leavingTriggerIt = m_leavingTriggerQueue.find (measId);
+          NS_ASSERT (leavingTriggerIt != m_leavingTriggerQueue.end ());
+          leavingTriggerIt->second.push_back (t);
+        }
+    }
+
+} // end of void LteUeRrc::MeasurementReportTriggering (uint8_t measId)
+
+void
+LteUeRrc::CancelEnteringTrigger (uint8_t measId)
+{
+  NS_LOG_FUNCTION (this << (uint16_t) measId);
+
+  std::map<uint8_t, std::list<PendingTrigger_t> >::iterator
+    it1 = m_enteringTriggerQueue.find (measId);
+  NS_ASSERT (it1 != m_enteringTriggerQueue.end ());
+
+  if (!it1->second.empty ())
+    {
+      std::list<PendingTrigger_t>::iterator it2;
+      for (it2 = it1->second.begin (); it2 != it1->second.end (); ++it2)
+        {
+          NS_ASSERT (it2->measId == measId);
+          NS_LOG_LOGIC (this << " canceling entering time-to-trigger event at "
+                             << Simulator::GetDelayLeft (it2->timer).GetSeconds ());
+          Simulator::Cancel (it2->timer);
+        }
+
+      it1->second.clear ();
+    }
+}
+
+void
+LteUeRrc::CancelEnteringTrigger (uint8_t measId, uint16_t cellId)
+{
+  NS_LOG_FUNCTION (this << (uint16_t) measId << cellId);
+
+  std::map<uint8_t, std::list<PendingTrigger_t> >::iterator
+    it1 = m_enteringTriggerQueue.find (measId);
+  NS_ASSERT (it1 != m_enteringTriggerQueue.end ());
+
+  std::list<PendingTrigger_t>::iterator it2 = it1->second.begin ();
+  while (it2 != it1->second.end ())
+    {
+      NS_ASSERT (it2->measId == measId);
+
+      ConcernedCells_t::iterator it3;
+      for (it3 = it2->concernedCells.begin ();
+           it3 != it2->concernedCells.end (); ++it3)
+        {
+          if (*it3 == cellId)
+            {
+              it3 = it2->concernedCells.erase (it3);
+            }
+        }
+
+      if (it2->concernedCells.empty ())
+        {
+          NS_LOG_LOGIC (this << " canceling entering time-to-trigger event at "
+                             << Simulator::GetDelayLeft (it2->timer).GetSeconds ());
+          Simulator::Cancel (it2->timer);
+          it2 = it1->second.erase (it2);
+        }
+      else
+        {
+          it2++;
+        }
+    }
+}
+
+void
+LteUeRrc::CancelLeavingTrigger (uint8_t measId)
+{
+  NS_LOG_FUNCTION (this << (uint16_t) measId);
+
+  std::map<uint8_t, std::list<PendingTrigger_t> >::iterator
+    it1 = m_leavingTriggerQueue.find (measId);
+  NS_ASSERT (it1 != m_leavingTriggerQueue.end ());
+
+  if (!it1->second.empty ())
+    {
+      std::list<PendingTrigger_t>::iterator it2;
+      for (it2 = it1->second.begin (); it2 != it1->second.end (); ++it2)
+        {
+          NS_ASSERT (it2->measId == measId);
+          NS_LOG_LOGIC (this << " canceling leaving time-to-trigger event at "
+                             << Simulator::GetDelayLeft (it2->timer).GetSeconds ());
+          Simulator::Cancel (it2->timer);
+        }
+
+      it1->second.clear ();
+    }
+}
+
+void
+LteUeRrc::CancelLeavingTrigger (uint8_t measId, uint16_t cellId)
+{
+  NS_LOG_FUNCTION (this << (uint16_t) measId << cellId);
+
+  std::map<uint8_t, std::list<PendingTrigger_t> >::iterator
+    it1 = m_leavingTriggerQueue.find (measId);
+  NS_ASSERT (it1 != m_leavingTriggerQueue.end ());
+
+  std::list<PendingTrigger_t>::iterator it2 = it1->second.begin ();
+  while (it2 != it1->second.end ())
+    {
+      NS_ASSERT (it2->measId == measId);
+
+      ConcernedCells_t::iterator it3;
+      for (it3 = it2->concernedCells.begin ();
+           it3 != it2->concernedCells.end (); ++it3)
+        {
+          if (*it3 == cellId)
+            {
+              it3 = it2->concernedCells.erase (it3);
+            }
+        }
+
+      if (it2->concernedCells.empty ())
+        {
+          NS_LOG_LOGIC (this << " canceling leaving time-to-trigger event at "
+                             << Simulator::GetDelayLeft (it2->timer).GetSeconds ());
+          Simulator::Cancel (it2->timer);
+          it2 = it1->second.erase (it2);
+        }
+      else
+        {
+          it2++;
+        }
+    }
+}
+
+void
+LteUeRrc::VarMeasReportListAdd (uint8_t measId, ConcernedCells_t enteringCells)
+{
+  NS_LOG_FUNCTION (this << (uint16_t) measId);
+  NS_ASSERT (!enteringCells.empty ());
+
+  std::map<uint8_t, VarMeasReport>::iterator
+    measReportIt = m_varMeasReportList.find (measId);
+
+  if (measReportIt == m_varMeasReportList.end ())
+    {
+      VarMeasReport r;
+      r.measId = measId;
+      std::pair<uint8_t, VarMeasReport> val (measId, r);
+      std::pair<std::map<uint8_t, VarMeasReport>::iterator, bool>
+        ret = m_varMeasReportList.insert (val);
+      NS_ASSERT_MSG (ret.second == true, "element already existed");
+      measReportIt = ret.first;
+    }
+
+  NS_ASSERT (measReportIt != m_varMeasReportList.end ());
+
+  for (ConcernedCells_t::const_iterator it = enteringCells.begin ();
+       it != enteringCells.end ();
+       ++it)
+    {
+      measReportIt->second.cellsTriggeredList.insert (*it);
+    }
+
+  NS_ASSERT (!measReportIt->second.cellsTriggeredList.empty ());
+  measReportIt->second.numberOfReportsSent = 0;
+  measReportIt->second.periodicReportTimer
+    = Simulator::Schedule (UE_MEASUREMENT_REPORT_DELAY,
+                           &LteUeRrc::SendMeasurementReport,
+                           this, measId);
+
+  std::map<uint8_t, std::list<PendingTrigger_t> >::iterator
+    enteringTriggerIt = m_enteringTriggerQueue.find (measId);
+  NS_ASSERT (enteringTriggerIt != m_enteringTriggerQueue.end ());
+  if (!enteringTriggerIt->second.empty ())
+    {
+      /*
+       * Assumptions at this point:
+       *  - the call to this function was delayed by time-to-trigger;
+       *  - the time-to-trigger delay is fixed (not adaptive/dynamic); and
+       *  - the first element in the list is associated with this function call.
+       */
+      enteringTriggerIt->second.pop_front ();
+
+      if (!enteringTriggerIt->second.empty ())
+        {
+          /*
+           * To prevent the same set of cells triggering again in the future,
+           * we clean up the time-to-trigger queue. This case might occur when
+           * time-to-trigger > 200 ms.
+           */
+          for (ConcernedCells_t::const_iterator it = enteringCells.begin ();
+               it != enteringCells.end (); ++it)
+            {
+              CancelEnteringTrigger (measId, *it);
+            }
+        }
+
+    } // end of if (!enteringTriggerIt->second.empty ())
+
+} // end of LteUeRrc::VarMeasReportListAdd
+
+void
+LteUeRrc::VarMeasReportListErase (uint8_t measId, ConcernedCells_t leavingCells,
+                                  bool reportOnLeave)
+{
+  NS_LOG_FUNCTION (this << (uint16_t) measId);
+  NS_ASSERT (!leavingCells.empty ());
+
+  std::map<uint8_t, VarMeasReport>::iterator
+    measReportIt = m_varMeasReportList.find (measId);
+  NS_ASSERT (measReportIt != m_varMeasReportList.end ());
+
+  for (ConcernedCells_t::const_iterator it = leavingCells.begin ();
+       it != leavingCells.end ();
+       ++it)
+    {
+      measReportIt->second.cellsTriggeredList.erase (*it);
+    }
+
+  if (reportOnLeave)
+    {
+      // runs immediately without UE_MEASUREMENT_REPORT_DELAY
+      SendMeasurementReport (measId);
+    }
+
+  if (measReportIt->second.cellsTriggeredList.empty ())
+    {
+      measReportIt->second.periodicReportTimer.Cancel ();
+      m_varMeasReportList.erase (measReportIt);
+    }
+
+  std::map<uint8_t, std::list<PendingTrigger_t> >::iterator
+    leavingTriggerIt = m_leavingTriggerQueue.find (measId);
+  NS_ASSERT (leavingTriggerIt != m_leavingTriggerQueue.end ());
+  if (!leavingTriggerIt->second.empty ())
+    {
+      /*
+       * Assumptions at this point:
+       *  - the call to this function was delayed by time-to-trigger; and
+       *  - the time-to-trigger delay is fixed (not adaptive/dynamic); and
+       *  - the first element in the list is associated with this function call.
+       */
+      leavingTriggerIt->second.pop_front ();
+
+      if (!leavingTriggerIt->second.empty ())
+        {
+          /*
+           * To prevent the same set of cells triggering again in the future,
+           * we clean up the time-to-trigger queue. This case might occur when
+           * time-to-trigger > 200 ms.
+           */
+          for (ConcernedCells_t::const_iterator it = leavingCells.begin ();
+               it != leavingCells.end (); ++it)
+            {
+              CancelLeavingTrigger (measId, *it);
+            }
+        }
+
+    } // end of if (!leavingTriggerIt->second.empty ())
+
+} // end of LteUeRrc::VarMeasReportListErase
+
+void
+LteUeRrc::VarMeasReportListClear (uint8_t measId)
+{
+  NS_LOG_FUNCTION (this << (uint16_t) measId);
+
+  // remove the measurement reporting entry for this measId from the VarMeasReportList
+  std::map<uint8_t, VarMeasReport>::iterator
+    measReportIt = m_varMeasReportList.find (measId);
+  if (measReportIt != m_varMeasReportList.end ())
+    {
+      NS_LOG_LOGIC (this << " deleting existing report for measId " << (uint16_t) measId);
+      measReportIt->second.periodicReportTimer.Cancel ();
+      m_varMeasReportList.erase (measReportIt);
+    }
+
+  CancelEnteringTrigger (measId);
+  CancelLeavingTrigger (measId);
+}
+
 void 
 LteUeRrc::SendMeasurementReport (uint8_t measId)
 {
-  NS_LOG_FUNCTION (this << (uint32_t) measId);
+  NS_LOG_FUNCTION (this << (uint16_t) measId);
   //  3GPP TS 36.331 section 5.5.5 Measurement reporting
 
   std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator 
     measIdIt = m_varMeasConfig.measIdList.find (measId);
   NS_ASSERT (measIdIt != m_varMeasConfig.measIdList.end ());
-  
+
   std::map<uint8_t, LteRrcSap::ReportConfigToAddMod>::iterator 
     reportConfigIt = m_varMeasConfig.reportConfigList.find (measIdIt->second.reportConfigId);
   NS_ASSERT (reportConfigIt != m_varMeasConfig.reportConfigList.end ());
@@ -1432,7 +2560,7 @@
   LteRrcSap::MeasurementReport measurementReport;
   LteRrcSap::MeasResults& measResults = measurementReport.measResults;
   measResults.measId = measId;
-  
+
   std::map<uint16_t, MeasValues>::iterator servingMeasIt = m_storedMeasValues.find (m_cellId);
   NS_ASSERT (servingMeasIt != m_storedMeasValues.end ());
   measResults.rsrpResult = EutranMeasurementMapping::Dbm2RsrpRange (servingMeasIt->second.rsrp);
@@ -1450,9 +2578,7 @@
     {
       if (!(measReportIt->second.cellsTriggeredList.empty ()))
         {
-          measResults.haveMeasResultNeighCells = true;
-          
-          std::multimap<double, uint16_t> sortedNeighCells;         
+          std::multimap<double, uint16_t> sortedNeighCells;
           for (std::set<uint16_t>::iterator cellsTriggeredIt = measReportIt->second.cellsTriggeredList.begin ();
                cellsTriggeredIt != measReportIt->second.cellsTriggeredList.end ();
                ++cellsTriggeredIt)
@@ -1461,7 +2587,7 @@
               if (cellId != m_cellId)
                 {
                   std::map<uint16_t, MeasValues>::iterator neighborMeasIt = m_storedMeasValues.find (cellId);
-                  double triggerValue;             
+                  double triggerValue;
                   switch (reportConfigEutra.triggerQuantity)
                     {
                     case LteRrcSap::ReportConfigEutra::RSRP:
@@ -1473,11 +2599,11 @@
                     default:
                       NS_FATAL_ERROR ("unsupported triggerQuantity");
                       break;
-                    }  
+                    }
                   sortedNeighCells.insert (std::pair<double, uint16_t> (triggerValue, cellId));
                 }
             }
-          
+
           std::multimap<double, uint16_t>::reverse_iterator sortedNeighCellsIt;
           uint32_t count;
           for (sortedNeighCellsIt = sortedNeighCells.rbegin (), count = 0;
@@ -1486,49 +2612,90 @@
             {
               uint16_t cellId = sortedNeighCellsIt->second;
               std::map<uint16_t, MeasValues>::iterator neighborMeasIt = m_storedMeasValues.find (cellId);
-              NS_ASSERT (neighborMeasIt != m_storedMeasValues.end ());            
+              NS_ASSERT (neighborMeasIt != m_storedMeasValues.end ());
               LteRrcSap::MeasResultEutra measResultEutra;
               measResultEutra.physCellId = cellId;
               measResultEutra.haveCgiInfo = false;
               measResultEutra.haveRsrpResult = true;
               measResultEutra.rsrpResult = EutranMeasurementMapping::Dbm2RsrpRange (neighborMeasIt->second.rsrp);
               measResultEutra.haveRsrqResult = true;
-              measResultEutra.rsrqResult = EutranMeasurementMapping::Db2RsrqRange (neighborMeasIt->second.rsrq);           
+              measResultEutra.rsrqResult = EutranMeasurementMapping::Db2RsrqRange (neighborMeasIt->second.rsrq);
               NS_LOG_INFO (this << " reporting neighbor cell " << (uint32_t) measResultEutra.physCellId 
-                           << " RSRP " << (uint32_t) measResultEutra.rsrpResult 
-                           << " (" << neighborMeasIt->second.rsrp << " dBm) "
-                           << " RSRQ " << (uint32_t) measResultEutra.rsrqResult 
-                           << " (" << neighborMeasIt->second.rsrq << " dB)"); 
+                                << " RSRP " << (uint32_t) measResultEutra.rsrpResult
+                                << " (" << neighborMeasIt->second.rsrp << " dBm)"
+                                << " RSRQ " << (uint32_t) measResultEutra.rsrqResult
+                                << " (" << neighborMeasIt->second.rsrq << " dB)");
               measResults.measResultListEutra.push_back (measResultEutra);
+              measResults.haveMeasResultNeighCells = true;
             }
         }
       else
         {
           NS_LOG_WARN (this << " cellsTriggeredList is empty");
         }
+
+      /*
+       * The current LteRrcSap implementation is broken in that it does not
+       * allow for infinite values of reportAmount, which is probably the most
+       * reasonable setting. So we just always assume infinite reportAmount.
+       */
       measReportIt->second.numberOfReportsSent++;
       measReportIt->second.periodicReportTimer.Cancel ();
-            
-      // the current LteRrcSap implementation is broken in that it does not allow for infinite values
-      // which is probably the most reasonable setting. So we just assume infinite reportAmount
-      // if (measReportIt->numberOfReportsSent < reportConfigEutra.reportAmount)
-      uint32_t intervalMs;
+
+      Time reportInterval;
       switch (reportConfigEutra.reportInterval)
         {
+        case LteRrcSap::ReportConfigEutra::MS120:
+          reportInterval = MilliSeconds (120);
+          break;
+        case LteRrcSap::ReportConfigEutra::MS240:
+          reportInterval = MilliSeconds (240);
+          break;
         case LteRrcSap::ReportConfigEutra::MS480:
-          intervalMs = 480;
+          reportInterval = MilliSeconds (480);
+          break;
+        case LteRrcSap::ReportConfigEutra::MS640:
+          reportInterval = MilliSeconds (640);
+          break;
+        case LteRrcSap::ReportConfigEutra::MS1024:
+          reportInterval = MilliSeconds (1024);
+          break;
+        case LteRrcSap::ReportConfigEutra::MS2048:
+          reportInterval = MilliSeconds (2048);
+          break;
+        case LteRrcSap::ReportConfigEutra::MS5120:
+          reportInterval = MilliSeconds (5120);
+          break;
+        case LteRrcSap::ReportConfigEutra::MS10240:
+          reportInterval = MilliSeconds (10240);
+          break;
+        case LteRrcSap::ReportConfigEutra::MIN1:
+          reportInterval = Seconds (60);
+          break;
+        case LteRrcSap::ReportConfigEutra::MIN6:
+          reportInterval = Seconds (360);
+          break;
+        case LteRrcSap::ReportConfigEutra::MIN12:
+          reportInterval = Seconds (720);
+          break;
+        case LteRrcSap::ReportConfigEutra::MIN30:
+          reportInterval = Seconds (1800);
+          break;
+        case LteRrcSap::ReportConfigEutra::MIN60:
+          reportInterval = Seconds (3600);
           break;
-          
         default:
-          NS_FATAL_ERROR ("unsupported reportInterval");
-          break;          
+          NS_FATAL_ERROR ("Unsupported reportInterval " << (uint16_t) reportConfigEutra.reportInterval);
+          break;
         }
+
+      // schedule the next measurement reporting
       measReportIt->second.periodicReportTimer 
-        = Simulator::Schedule (MilliSeconds (intervalMs), 
+        = Simulator::Schedule (reportInterval,
                                &LteUeRrc::SendMeasurementReport,
-                               this,
-                               measId);
+                               this, measId);
 
+      // send the measurement report to eNodeB
       m_rrcSapUser->SendMeasurementReport (measurementReport);
     } 
 }
@@ -1536,9 +2703,11 @@
 void 
 LteUeRrc::StartConnection ()
 {
-  NS_LOG_FUNCTION (this);
-  m_connectionPending = false;
-  SwitchToState (IDLE_RANDOM_ACCESS);        
+  NS_LOG_FUNCTION (this << m_imsi);
+  NS_ASSERT (m_hasReceivedMib);
+  NS_ASSERT (m_hasReceivedSib2);
+  m_connectionPending = false; // reset the flag
+  SwitchToState (IDLE_RANDOM_ACCESS);
   m_cmacSapProvider->StartContentionBasedRandomAccessProcedure ();
 }
 
@@ -1578,49 +2747,55 @@
 void 
 LteUeRrc::SwitchToState (State newState)
 {
-  NS_LOG_FUNCTION (this << newState);
+  NS_LOG_FUNCTION (this << ToString (newState));
   State oldState = m_state;
   m_state = newState;
-  NS_LOG_INFO ("IMSI " << m_imsi << " RNTI " << m_rnti << " UeRrc " << ToString (oldState) << " --> " << ToString (newState));
+  NS_LOG_INFO (this << "IMSI " << m_imsi << " RNTI " << m_rnti << " UeRrc "
+                    << ToString (oldState) << " --> " << ToString (newState));
   m_stateTransitionTrace (m_imsi, m_cellId, m_rnti, oldState, newState);
 
   switch (newState)
     {
-    case IDLE_CELL_SELECTION:
+    case IDLE_START:
+      NS_FATAL_ERROR ("cannot switch to an initial state");
       break;
 
-    case IDLE_WAIT_SYSTEM_INFO:
+    case IDLE_CELL_SEARCH:
+    case IDLE_WAIT_MIB_SIB1:
+    case IDLE_WAIT_MIB:
+    case IDLE_WAIT_SIB1:
       break;
 
     case IDLE_CAMPED_NORMALLY:
       if (m_connectionPending)
         {
-          StartConnection ();
+          SwitchToState (IDLE_WAIT_SIB2);
         }
       break;
 
-    case IDLE_RANDOM_ACCESS:
+    case IDLE_WAIT_SIB2:
+      if (m_hasReceivedSib2)
+        {
+          NS_ASSERT (m_connectionPending);
+          StartConnection ();
+        }
       break;
 
+    case IDLE_RANDOM_ACCESS:
     case IDLE_CONNECTING:
-      break;
- 
     case CONNECTED_NORMALLY:
-      break;
-
-    case CONNECTED_REESTABLISHING:
-      break;
-
     case CONNECTED_HANDOVER:
+    case CONNECTED_PHY_PROBLEM:
+    case CONNECTED_REESTABLISHING:
       break;
  
     default:
       break;
     }
 }
-  
 
-    
-  
+
+
+
 } // namespace ns3
 
diff -Naur ns-3.18.1/src/lte/model/lte-ue-rrc.h ns-3.19/src/lte/model/lte-ue-rrc.h
--- ns-3.18.1/src/lte/model/lte-ue-rrc.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/lte-ue-rrc.h	2013-12-20 09:44:50.000000000 -0800
@@ -16,6 +16,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
+ *         Budiarto Herman <budiarto.herman@magister.fi>
  */
 
 #ifndef LTE_UE_RRC_H
@@ -35,13 +36,32 @@
 
 namespace ns3 {
 
+
+/**
+ * \brief Artificial delay of UE measurements procedure.
+ *
+ * i.e. the period between the time layer-1-filtered measurements from PHY
+ * layer is received and the earliest time the actual measurement report
+ * submission to the serving cell is invoked.
+ *
+ * This delay exists because of racing condition between several UE measurements
+ * functions which happen to be scheduled at the same time. The delay ensures
+ * that:
+ *  - measurements (e.g., layer-3 filtering) are always performed before
+ *    reporting, thus the latter always use the latest measured RSRP and RSRQ;
+ *    and
+ *  - time-to-trigger check is always performed before the reporting, so there
+ *    would still be chance for it to cancel the reporting if necessary.
+ */
+static const Time UE_MEASUREMENT_REPORT_DELAY = MicroSeconds (1);
+
+
 class LteRlc;
 class LteMacSapProvider;
 class LteUeCmacSapUser;
 class LteUeCmacSapProvider;
 class LteDataRadioBearerInfo;
 class LteSignalingRadioBearerInfo;
-class LteEnbRrc;
 
 /**
  *
@@ -64,17 +84,22 @@
    * 
    */
   enum State
-    {
-      IDLE_CELL_SELECTION = 0,
-      IDLE_WAIT_SYSTEM_INFO,
-      IDLE_CAMPED_NORMALLY,
-      IDLE_RANDOM_ACCESS,
-      IDLE_CONNECTING,
-      CONNECTED_NORMALLY,
-      CONNECTED_REESTABLISHING,
-      CONNECTED_HANDOVER,
-      NUM_STATES
-    };
+  {
+    IDLE_START = 0,
+    IDLE_CELL_SEARCH,
+    IDLE_WAIT_MIB_SIB1,
+    IDLE_WAIT_MIB,
+    IDLE_WAIT_SIB1,
+    IDLE_CAMPED_NORMALLY,
+    IDLE_WAIT_SIB2,
+    IDLE_RANDOM_ACCESS,
+    IDLE_CONNECTING,
+    CONNECTED_NORMALLY,
+    CONNECTED_HANDOVER,
+    CONNECTED_PHY_PROBLEM,
+    CONNECTED_REESTABLISHING,
+    NUM_STATES
+  };
 
 
   /**
@@ -174,8 +199,7 @@
    *
    * \return imsi the unique UE identifier
    */
-  uint64_t GetImsi (void);
-
+  uint64_t GetImsi (void) const;
 
   /**
    *
@@ -183,14 +207,12 @@
    */
   uint16_t GetRnti () const;
 
-
   /**
    *
    * \return the CellId of the attached Enb
    */
   uint16_t GetCellId () const;
 
-
   /** 
    * \return the uplink bandwidth in RBs
    */
@@ -201,7 +223,7 @@
    */
   uint8_t GetDlBandwidth () const;
 
-  /** 
+  /**
    * \return the downlink carrier frequency (EARFCN)
    */
   uint16_t GetDlEarfcn () const;
@@ -211,11 +233,11 @@
    */
   uint16_t GetUlEarfcn () const;
 
-  /** 
-   * 
+  /**
+   *
    * \return the current state
    */
-  State GetState ();
+  State GetState () const;
 
   /** 
    * 
@@ -237,31 +259,210 @@
   void DoNotifyRandomAccessFailed ();
  
   // LTE AS SAP methods
-  void DoForceCampedOnEnb (uint16_t cellId, uint16_t earfcn);
+  void DoSetCsgWhiteList (uint32_t csgId);
+  void DoForceCampedOnEnb (uint16_t cellId, uint16_t dlEarfcn);
+  void DoStartCellSelection (uint16_t dlEarfcn);
   void DoConnect ();
   void DoSendData (Ptr<Packet> packet, uint8_t bid);
   void DoDisconnect ();
 
   // CPHY SAP methods
-  void DoRecvMasterInformationBlock (LteRrcSap::MasterInformationBlock msg);
+  void DoRecvMasterInformationBlock (uint16_t cellId,
+                                     LteRrcSap::MasterInformationBlock msg);
+  void DoRecvSystemInformationBlockType1 (uint16_t cellId,
+                                          LteRrcSap::SystemInformationBlockType1 msg);
   void DoReportUeMeasurements (LteUeCphySapUser::UeMeasurementsParameters params);
 
   // RRC SAP methods
+
+  /// Part of the RRC protocol. Implement the LteUeRrcSapProvider::CompleteSetup interface.
   void DoCompleteSetup (LteUeRrcSapProvider::CompleteSetupParameters params);
-  void DoRecvSystemInformationBlockType1 (LteRrcSap::SystemInformationBlockType1 msg);
+  /// Part of the RRC protocol. Implement the LteUeRrcSapProvider::RecvSystemInformation interface.
   void DoRecvSystemInformation (LteRrcSap::SystemInformation msg);
+  /// Part of the RRC protocol. Implement the LteUeRrcSapProvider::RecvRrcConnectionSetup interface.
   void DoRecvRrcConnectionSetup (LteRrcSap::RrcConnectionSetup msg);
+  /// Part of the RRC protocol. Implement the LteUeRrcSapProvider::RecvRrcConnectionReconfiguration interface.
   void DoRecvRrcConnectionReconfiguration (LteRrcSap::RrcConnectionReconfiguration msg);
+  /// Part of the RRC protocol. Implement the LteUeRrcSapProvider::RecvRrcConnectionReestablishment interface.
   void DoRecvRrcConnectionReestablishment (LteRrcSap::RrcConnectionReestablishment msg);
+  /// Part of the RRC protocol. Implement the LteUeRrcSapProvider::RecvRrcConnectionReestablishmentReject interface.
   void DoRecvRrcConnectionReestablishmentReject (LteRrcSap::RrcConnectionReestablishmentReject msg);
+  /// Part of the RRC protocol. Implement the LteUeRrcSapProvider::RecvRrcConnectionRelease interface.
   void DoRecvRrcConnectionRelease (LteRrcSap::RrcConnectionRelease msg);
+  /// Part of the RRC protocol. Implement the LteUeRrcSapProvider::RecvRrcConnectionReject interface.
   void DoRecvRrcConnectionReject (LteRrcSap::RrcConnectionReject msg);
 
  
-  // internal methods
-  void ApplyRadioResourceConfigDedicated (LteRrcSap::RadioResourceConfigDedicated rrcd);
+  // INTERNAL METHODS
+
+  /**
+   * \brief Go through the list of measurement results, choose the one with the
+   *        strongest RSRP, and tell PHY to synchronize to it.
+   *
+   * \warning This function is a part of the *initial cell selection* procedure,
+   *          hence must be only executed during IDLE mode.
+   */
+  void SynchronizeToStrongestCell ();
+
+  /**
+   * \brief Performs cell selection evaluation to the current serving cell.
+   *
+   * \warning This function is a part of the *initial cell selection* procedure,
+   *          hence must be only executed during IDLE mode and specifically
+   *          during the state when the UE just received the first SIB1 message
+   *          from the serving cell.
+   *
+   * This function assumes that the required information for the evaluation
+   * procedure have been readily gathered, such as *measurement results*, MIB,
+   * and SIB1. Please refer to the LTE module's Design Documentation for more
+   * details on the evaluation process.
+   *
+   * If the cell passes the evaluation, the UE will immediately camp to it.
+   * Otherwise, the UE will pick another cell and restart the cell selection
+   * procedure.
+   */
+  void EvaluateCellForSelection ();
+
+  /**
+   * \brief Update the current measurement configuration #m_varMeasConfig.
+   * \param mc measurements to be performed by the UE
+   *
+   * Implements Section 5.5.2 "Measurement configuration" of 3GPP TS 36.331.
+   * The supported subfunctions are:
+   * - Measurement object removal
+   * - Measurement object addition/ modification
+   * - Reporting configuration removal
+   * - Reporting configuration addition/ modification
+   * - Quantity configuration
+   * - Measurement identity removal
+   * - Measurement identity addition/ modification
+   *
+   * The subfunctions that will be invoked are determined by the content of
+   * the given measurement configuration.
+   *
+   * Note the existence of some chain reaction behaviours:
+   * - Removal of measurement object or reporting configuration also removes any
+   *   impacted measurement identities.
+   * - Removal of measurement identity also removes any associated *reporting
+   *   entry* from #m_varMeasReportList.
+   * - Modification to measurement object or reporting configuration also
+   *   removes any reporting entries of the impacted measurement identities
+   *   from #m_varMeasReportList.
+   * - Modification to quantity configuration also removes all existing
+   *   reporting entries from #m_varMeasReportList, regardless of measurement
+   *   identity.
+   *
+   * Some unsupported features:
+   * - List of neighbouring cells
+   * - List of black cells
+   * - CGI reporting
+   * - Periodical reporting configuration
+   * - Measurement gaps
+   * - s-Measure
+   * - Speed-dependent scaling
+   *
+   * \warning There is a possibility that the input argument (of type
+   *          LteRrcSap::MeasConfig) may contain information in fields related
+   *          to the unsupported features. In such case, the function will raise
+   *          an error.
+   *
+   * The measurement configuration given as an argument is typically provided by
+   * the serving eNodeB. It is transmitted through the RRC protocol when the UE
+   * joins the cell, e.g., by connection establishment or by incoming handover.
+   * The information inside the argument can be configured from the eNodeB side,
+   * which would then equally apply to all other UEs attached to the same
+   * eNodeB. See the LTE module's User Documentation for more information on
+   * configuring this.
+   *
+   * \sa LteRrcSap::MeasConfig, LteUeRrc::m_varMeasReportList
+   */
   void ApplyMeasConfig (LteRrcSap::MeasConfig mc);
+
+  /**
+   * \brief Keep the given measurement result as the latest measurement figures,
+   *        to be utilised by UE RRC functions.
+   * \param cellId the cell ID of the measured cell
+   * \param rsrp measured RSRP value to be saved (in dBm)
+   * \param rsrq measured RSRQ value to be saved (in dB)
+   * \param useLayer3Filtering
+   * \todo Remove the useLayer3Filtering argument
+   *
+   * Implements Section 5.5.3.2 "Layer 3 filtering" of 3GPP TS 36.331. *Layer-3
+   * filtering* is applied to the given measurement results before saved to
+   * #m_storedMeasValues. The filtering is however disabled when the UE is in
+   * IDLE mode, i.e., saving unfiltered values.
+   *
+   * Layer-3 filtering is influenced by a filter coefficient, which determines
+   * the strength of the filtering. This coefficient is provided by the active
+   * *quantity configuration* in #m_varMeasConfig, which is configured by the
+   * LteUeRrc::ApplyMeasConfig. Details on how the coefficient works and how to
+   * modify it can be found in LTE module's Design Documentation.
+   *
+   * \sa LteUeRrc::m_storedMeasValues
+   */
+  void SaveUeMeasurements (uint16_t cellId, double rsrp, double rsrq,
+                           bool useLayer3Filtering);
+
+  /**
+   * \brief Evaluate the reporting criteria of a measurement identity and
+   *        invoke some reporting actions based on the result.
+   * \param measId the measurement identity to be evaluated
+   *
+   * Implements Section 5.5.4.1 "Measurement report triggering - General" of
+   * 3GPP TS 36.331. This function take into use the latest measurement results
+   * and evaluate them against the *entering condition* and the *leaving
+   * condition* of the measurement identity's reporting criteria. The evaluation
+   * also take into account other defined criteria, such as *hysteresis* and
+   * *time-to-trigger*.
+   *
+   * The entering and leaving condition to be evaluated are determined by the
+   * *event type* of the measurement identity's reporting criteria. As defined
+   * in LteRrcSap::ReportConfigEutra, there 5 supported events. The gore details
+   * of these events can be found in Section 5.5.4 of 3GPP TS 36.331.
+   *
+   * An applicable entering condition (i.e., the condition evaluates to true)
+   * will insert a new *reporting entry* to #m_varMeasReportList, so
+   * *measurement reports* would be produced and submitted to eNodeB. On the
+   * other hand, an applicable leaving condition will remove the related
+   * reporting entry from #m_varMeasReportList, so submission of related
+   * measurement reports to eNodeB will be suspended.
+   */
+  void MeasurementReportTriggering (uint8_t measId);
+
+  /**
+   * \brief Produce a proper measurement report from the given measurement
+   *        identity's reporting entry in #m_varMeasReportList and then submit
+   *        it to the serving eNodeB.
+   * \param measId the measurement identity which report is to be submitted.
+   *
+   * Implements Section 5.5.5 "Measurement reporting" of 3GPP TS 36.331.
+   * Producing a *measurement report* involves several tasks such as:
+   * - including the measurement results of the serving cell into the report;
+   * - selecting some neighbour cells which triggered the reporting (i.e., those
+   *   in *cellsTriggeredList*) to be included in the report;
+   * - sorting the order of neighbour cells in the report by their RSRP or RSRQ
+   *   measurement results (the highest comes first); and
+   * - ensuring the number of neighbour cells in the report is under the
+   *   *maxReportCells* limit defined by the measurement identity's reporting
+   *   configuration.
+   *
+   * The RSRP and RSRQ measurement results included in the report are expressed
+   * in 3GPP-specified range format. They are converted from dBm and dB units
+   * using EutranMeasurementMapping::Dbm2RsrpRange and
+   * EutranMeasurementMapping::Db2RsrqRange functions.
+   *
+   * Measurement report is submitted to the serving eNodeB through the *RRC
+   * protocol*. The LteUeRrcSapUser::SendMeasurementReport method of the *UE RRC
+   * SAP* facilitates this submission.
+   *
+   * After the submission, the function will repeat itself after a certain
+   * interval. The interval length may vary from 120 ms to 60 minutes and is
+   * determined by the *report interval* parameter specified by the measurement
+   * identity's reporting configuration.
+   */
   void SendMeasurementReport (uint8_t measId);
+
+  void ApplyRadioResourceConfigDedicated (LteRrcSap::RadioResourceConfigDedicated rrcd);
   void StartConnection ();
   void LeaveConnectedMode ();
   void DisposeOldSrb1 ();
@@ -281,7 +482,7 @@
 
   LteMacSapProvider* m_macSapProvider;
   LtePdcpSapUser* m_drbPdcpSapUser;
-  
+
   LteAsSapProvider* m_asSapProvider;
   LteAsSapUser* m_asSapUser;
 
@@ -295,7 +496,7 @@
   Ptr<LteSignalingRadioBearerInfo> m_srb1;
   Ptr<LteSignalingRadioBearerInfo> m_srb1Old;
   std::map <uint8_t, Ptr<LteDataRadioBearerInfo> > m_drbMap;
-  
+
   bool m_useRlcSm;
 
   uint8_t m_lastRrcTransactionIdentifier;
@@ -306,65 +507,296 @@
   uint16_t m_dlEarfcn;  /**< downlink carrier frequency */
   uint16_t m_ulEarfcn;  /**< uplink carrier frequency */
 
-  //             imsi      cellid    rnti   
+  //             imsi      cellId    rnti,     sourceCellId
+  TracedCallback<uint64_t, uint16_t, uint16_t, uint16_t> m_mibReceivedTrace;
+  //             imsi      cellId    rnti,     sourceCellId
+  TracedCallback<uint64_t, uint16_t, uint16_t, uint16_t> m_sib1ReceivedTrace;
+  //             imsi      cellId    rnti
+  TracedCallback<uint64_t, uint16_t, uint16_t> m_sib2ReceivedTrace;
+  //             imsi      cellId    rnti
   TracedCallback<uint64_t, uint16_t, uint16_t, State, State> m_stateTransitionTrace;
-  //             imsi      cellid    rnti   
+  //             imsi      cellId
+  TracedCallback<uint64_t, uint16_t> m_initialCellSelectionEndOkTrace;
+  //             imsi      cellId
+  TracedCallback<uint64_t, uint16_t> m_initialCellSelectionEndErrorTrace;
+  //             imsi      cellId    rnti
   TracedCallback<uint64_t, uint16_t, uint16_t> m_randomAccessSuccessfulTrace;
-  //             imsi      cellid    rnti   
+  //             imsi      cellId    rnti
+  TracedCallback<uint64_t, uint16_t, uint16_t> m_randomAccessErrorTrace;
+  //             imsi      cellId    rnti
   TracedCallback<uint64_t, uint16_t, uint16_t> m_connectionEstablishedTrace;
-  //             imsi      cellid    rnti   
+  //             imsi      cellId    rnti
   TracedCallback<uint64_t, uint16_t, uint16_t> m_connectionReconfigurationTrace;
-  //             imsi      cellid    rnti     targetCellId
+  //             imsi      cellId    rnti      targetCellId
   TracedCallback<uint64_t, uint16_t, uint16_t, uint16_t> m_handoverStartTrace;
-  //             imsi      cellid    rnti    
+  //             imsi      cellId    rnti
   TracedCallback<uint64_t, uint16_t, uint16_t> m_handoverEndOkTrace;
+  //             imsi      cellId    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_receivedMib; /**< true if MIB was received for the current cell  */
-  bool m_receivedSib2; /**< true if SIB2 was received for the current cell  */
+  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  */
+
+  /// Stored content of the last SIB1 received.
+  LteRrcSap::SystemInformationBlockType1 m_lastSib1;
+
+  /// List of cell ID of acceptable cells for cell selection that have been detected.
+  std::set<uint16_t> m_acceptableCell;
 
+  /// List of CSG ID which this UE entity has access to.
+  uint32_t m_csgWhiteList;
+
+
+  // INTERNAL DATA STRUCTURE RELATED TO UE MEASUREMENTS
 
   /**
-   * Includes the accumulated configuration of the measurements to be
-   * performed by the UE, see TS 36.331 section 7.1. Also note that some
-   * optional variables in the specs are omitted.
-   * 
+   * \brief Includes the accumulated configuration of the measurements to be
+   *        performed by the UE.
+   *
+   * Based on 3GPP TS 36.331 section 7.1. Also note that some optional variables
+   * in the specification are omitted.
    */
   struct VarMeasConfig
   {
-    std::map<uint8_t, LteRrcSap::MeasIdToAddMod>   measIdList;
+    std::map<uint8_t, LteRrcSap::MeasIdToAddMod> measIdList;
     std::map<uint8_t, LteRrcSap::MeasObjectToAddMod> measObjectList;
     std::map<uint8_t, LteRrcSap::ReportConfigToAddMod> reportConfigList;
     LteRrcSap::QuantityConfig quantityConfig; 
     double aRsrp;
     double aRsrq;
   };
-  
+
+  /**
+   * \brief Includes the accumulated configuration of the measurements to be
+   *        performed by the UE.
+   *
+   * Based on 3GPP TS 36.331 section 7.1.
+   */
+  VarMeasConfig m_varMeasConfig;
+
+  /**
+   * \brief Represents a single measurement reporting entry., which includes
+   *        information about a measurement for which the triggering conditions
+   *        have been met.
+   *
+   * Based on 3GPP TS 36.331 section 7.1.
+   */
   struct VarMeasReport
   {
     uint8_t measId;
-    std::set<uint16_t> cellsTriggeredList; // note: only EUTRA is
-                                            // supported
+    std::set<uint16_t> cellsTriggeredList; // note: only E-UTRA is supported.
     uint32_t numberOfReportsSent;
     EventId periodicReportTimer;
   };
-  
-  VarMeasConfig m_varMeasConfig;
-  //       measId
+
+  /**
+   * \brief The list of active reporting entries, indexed by the measurement
+   *        identity which triggered the reporting. Includes information about
+   *        measurements for which the triggering conditions have been met.
+   */
   std::map<uint8_t, VarMeasReport> m_varMeasReportList;
-  
+
+  /**
+   * \brief List of cell IDs which are responsible for a certain trigger.
+   */
+  typedef std::list<uint16_t> ConcernedCells_t;
+
+  /**
+   * \brief Compose a new reporting entry of the given measurement identity,
+   *        insert it into #m_varMeasReportList, and set it up for submission
+   *        to eNodeB.
+   * \param measId the measurement identity which the new reporting entry will
+   *               be based upon
+   * \param enteringCells the cells which are responsible for triggering the
+   *                      reporting (i.e., successfully fulfilling the entering
+   *                      condition of the measurement identity) and will be
+   *                      included in the measurement report.
+   *
+   * \note If an existing reporting entry with the same measurement identity has
+   *       already existed in #m_varMeasReportList, the function will update it
+   *       by adding the entering cells into the existing reporting entry.
+   * \note When time-to-trigger is enabled for this measurement identity, the
+   *       function will also remove the related trigger from the
+   *       #m_enteringTriggerQueue.
+   */
+  void VarMeasReportListAdd (uint8_t measId, ConcernedCells_t enteringCells);
+
+  /**
+   * \brief Remove some cells from an existing reporting entry in
+   *        #m_varMeasReportList.
+   * \param measId the measurement identity to be removed from
+   *               #m_varMeasReportList, must already exists there, otherwise
+   *               an error would be raised
+   * \param leavingCells the cells which are about to be removed
+   * \param reportOnLeave when true, will make the function send one last
+   *                      measurement report to eNodeB before removing it
+   *
+   * \note If a given cell is not found in the reporting entry, the function
+   *       will quietly continue.
+   * \note If the removal has removed all the cells in the reporting entry, the
+   *       function will remove the reporting entry as well.
+   * \note When time-to-trigger is enabled for this measurement identity, the
+   *       function will also remove the related trigger from the
+   *       #m_leavingTriggerQueue.
+   */
+  void VarMeasReportListErase (uint8_t measId, ConcernedCells_t leavingCells,
+                               bool reportOnLeave);
+
+  /**
+   * \brief Remove the reporting entry of the given measurement identity from
+   *        #m_varMeasReportList.
+   * \param measId the measurement identity to be removed from
+   *               #m_varMeasReportList, must already exists there, otherwise
+   *               an error would be raised
+   *
+   * Any events or triggers related with this measurement identity will be
+   * canceled as well.
+   */
+  void VarMeasReportListClear (uint8_t measId);
+
+  /**
+   * \brief Represents a measurement result from a certain cell.
+   */
   struct MeasValues
   {
-    double rsrp;
-    double rsrq;
-    Time timestamp;
+    double rsrp; ///< Measured RSRP in dBm.
+    double rsrq; ///< Measured RSRQ in dB.
+    Time timestamp; ///< Not used. \todo Should be removed.
   };
 
-  /////////cellId
+  /**
+   * \brief Internal storage of the latest measurement results from all detected
+   *        detected cells, indexed by the cell ID where the measurement was
+   *        taken from.
+   *
+   * Each *measurement result* comprises of RSRP (in dBm) and RSRQ (in dB).
+   *
+   * In IDLE mode, the measurement results are used by the *initial cell
+   * selection* procedure. While in CONNECTED mode, *layer-3 filtering* is
+   * applied to the measurement results and they are used by *UE measurements*
+   * function (LteUeRrc::MeasurementReportTriggering and
+   * LteUeRrc::SendMeasurementReport).
+   */
   std::map<uint16_t, MeasValues> m_storedMeasValues;
-  
 
-};
+  /**
+   * \brief Represents a single triggered event from a measurement identity
+   *        which reporting criteria have been fulfilled, but delayed by
+   *        time-to-trigger.
+   */
+  struct PendingTrigger_t
+  {
+    uint8_t measId; ///< The measurement identity which raised the trigger.
+    ConcernedCells_t concernedCells; ///< The list of cells responsible for this trigger.
+    EventId timer; ///< The pending reporting event, scheduled at the end of the time-to-trigger.
+  };
+
+  /**
+   * \brief List of triggers that were raised because entering condition have
+   *        been true, but are still delayed from reporting it by
+   *        time-to-trigger.
+   *
+   * The list is indexed by the measurement identity where the trigger
+   * originates from. The enclosed event will run at the end of the
+   * time-to-trigger and insert a *reporting entry* to #m_varMeasReportList.
+   */
+  std::map<uint8_t, std::list<PendingTrigger_t> > m_enteringTriggerQueue;
+
+  /**
+   * \brief List of triggers that were raised because leaving condition have
+   *        been true, but are still delayed from stopping the reporting by
+   *        time-to-trigger.
+   *
+   * The list is indexed by the measurement identity where the trigger
+   * originates from. The enclosed event will run at the end of the
+   * time-to-trigger and remove the associated *reporting entry* from
+   * #m_varMeasReportList.
+   */
+  std::map<uint8_t, std::list<PendingTrigger_t> > m_leavingTriggerQueue;
+
+  /**
+   * \brief Clear all the waiting triggers in #m_enteringTriggerQueue which are
+   *        associated with the given measurement identity.
+   * \param measId the measurement identity to be processed, must already exists
+   *               in #m_enteringTriggerQueue, otherwise an error would be
+   *               raised
+   *
+   * \note The function may conclude that there is nothing to be removed. In
+   *       this case, the function will simply ignore quietly.
+   *
+   * This function is used when the entering condition of the measurement
+   * identity becomes no longer true. Therefore all the waiting triggers for
+   * this measurement identity in #m_enteringTriggerQueue have become invalid
+   * and must be canceled.
+   *
+   * \sa LteUeRrc::m_enteringTriggerQueue
+   */
+  void CancelEnteringTrigger (uint8_t measId);
+
+  /**
+   * \brief Remove a specific cell from the waiting triggers in
+   *        #m_enteringTriggerQueue which belong to the given measurement
+   *        identity.
+   * \param measId the measurement identity to be processed, must already exists
+   *               in #m_enteringTriggerQueue, otherwise an error would be
+   *               raised
+   * \param cellId the cell ID to be removed from the waiting triggers
+   *
+   * \note The function may conclude that there is nothing to be removed. In
+   *       this case, the function will simply ignore quietly.
+   *
+   * This function is used when a specific neighbour cell no longer fulfills
+   * the entering condition of the measurement identity. Thus the cell must be
+   * removed from all the waiting triggers for this measurement identity in
+   * #m_enteringTriggerQueue.
+   *
+   * \sa LteUeRrc::m_enteringTriggerQueue
+   */
+  void CancelEnteringTrigger (uint8_t measId, uint16_t cellId);
+
+  /**
+   * \brief Clear all the waiting triggers in #m_leavingTriggerQueue which are
+   *        associated with the given measurement identity.
+   * \param measId the measurement identity to be processed, must already exists
+   *               in #m_leavingTriggerQueue, otherwise an error would be
+   *               raised
+   *
+   * \note The function may conclude that there is nothing to be removed. In
+   *       this case, the function will simply ignore quietly.
+   *
+   * This function is used when the leaving condition of the measurement
+   * identity becomes no longer true. Therefore all the waiting triggers for
+   * this measurement identity in #m_leavingTriggerQueue have become invalid
+   * and must be canceled.
+   *
+   * \sa LteUeRrc::m_leavingTriggerQueue
+   */
+  void CancelLeavingTrigger (uint8_t measId);
+
+  /**
+   * \brief Remove a specific cell from the waiting triggers in
+   *        #m_leavingTriggerQueue which belong to the given measurement
+   *        identity.
+   * \param measId the measurement identity to be processed, must already exists
+   *               in #m_leavingTriggerQueue, otherwise an error would be
+   *               raised
+   * \param cellId the cell ID to be removed from the waiting triggers
+   *
+   * \note The function may conclude that there is nothing to be removed. In
+   *       this case, the function will simply ignore quietly.
+   *
+   * This function is used when a specific neighbour cell no longer fulfills
+   * the leaving condition of the measurement identity. Thus the cell must be
+   * removed from all the waiting triggers for this measurement identity in
+   * #m_leavingTriggerQueue.
+   *
+   * \sa LteUeRrc::m_leavingTriggerQueue
+   */
+  void CancelLeavingTrigger (uint8_t measId, uint16_t cellId);
+
+}; // end of class LteUeRrc
 
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/lte/model/no-op-handover-algorithm.cc ns-3.19/src/lte/model/no-op-handover-algorithm.cc
--- ns-3.18.1/src/lte/model/no-op-handover-algorithm.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/model/no-op-handover-algorithm.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,98 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Budiarto Herman
+ *
+ * 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: Budiarto Herman <budiarto.herman@magister.fi>
+ *
+ */
+
+#include "no-op-handover-algorithm.h"
+#include <ns3/log.h>
+
+NS_LOG_COMPONENT_DEFINE ("NoOpHandoverAlgorithm");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (NoOpHandoverAlgorithm)
+  ;
+
+
+NoOpHandoverAlgorithm::NoOpHandoverAlgorithm ()
+  : m_handoverManagementSapUser (0)
+{
+  NS_LOG_FUNCTION (this);
+  m_handoverManagementSapProvider = new MemberLteHandoverManagementSapProvider<NoOpHandoverAlgorithm> (this);
+}
+
+
+NoOpHandoverAlgorithm::~NoOpHandoverAlgorithm ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+
+void
+NoOpHandoverAlgorithm::DoDispose ()
+{
+  NS_LOG_FUNCTION (this);
+  delete m_handoverManagementSapProvider;
+}
+
+
+TypeId
+NoOpHandoverAlgorithm::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::NoOpHandoverAlgorithm")
+    .SetParent<LteHandoverAlgorithm> ()
+    .AddConstructor<NoOpHandoverAlgorithm> ()
+  ;
+  return tid;
+}
+
+
+void
+NoOpHandoverAlgorithm::SetLteHandoverManagementSapUser (LteHandoverManagementSapUser* s)
+{
+  NS_LOG_FUNCTION (this << s);
+  m_handoverManagementSapUser = s;
+}
+
+
+LteHandoverManagementSapProvider*
+NoOpHandoverAlgorithm::GetLteHandoverManagementSapProvider ()
+{
+  NS_LOG_FUNCTION (this);
+  return m_handoverManagementSapProvider;
+}
+
+
+void
+NoOpHandoverAlgorithm::DoInitialize ()
+{
+  NS_LOG_FUNCTION (this);
+  LteHandoverAlgorithm::DoInitialize ();
+}
+
+
+void
+NoOpHandoverAlgorithm::DoReportUeMeas (uint16_t rnti,
+                                       LteRrcSap::MeasResults measResults)
+{
+  NS_LOG_FUNCTION (this << rnti << (uint16_t) measResults.measId);
+}
+
+
+} // end of namespace ns3
diff -Naur ns-3.18.1/src/lte/model/no-op-handover-algorithm.h ns-3.19/src/lte/model/no-op-handover-algorithm.h
--- ns-3.18.1/src/lte/model/no-op-handover-algorithm.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/model/no-op-handover-algorithm.h	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,80 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Budiarto Herman
+ *
+ * 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: Budiarto Herman <budiarto.herman@magister.fi>
+ *
+ */
+
+#ifndef NO_OP_HANDOVER_ALGORITHM_H
+#define NO_OP_HANDOVER_ALGORITHM_H
+
+#include <ns3/lte-handover-algorithm.h>
+#include <ns3/lte-handover-management-sap.h>
+#include <ns3/lte-rrc-sap.h>
+
+namespace ns3 {
+
+
+/**
+ * \brief Handover algorithm implementation which simply does nothing.
+ *
+ * Selecting this handover algorithm is equivalent to disabling automatic
+ * triggering of handover. This is the default choice.
+ *
+ * To enable automatic handover, please select another handover algorithm, i.e.,
+ * another child class of LteHandoverAlgorithm.
+ */
+class NoOpHandoverAlgorithm : public LteHandoverAlgorithm
+{
+public:
+  /**
+   * \brief Creates a No-op handover algorithm instance.
+   */
+  NoOpHandoverAlgorithm ();
+
+  virtual ~NoOpHandoverAlgorithm ();
+
+  // inherited from Object
+  static TypeId GetTypeId ();
+
+  // inherited from LteHandoverAlgorithm
+  virtual void SetLteHandoverManagementSapUser (LteHandoverManagementSapUser* s);
+  virtual LteHandoverManagementSapProvider* GetLteHandoverManagementSapProvider ();
+
+  // let the forwarder class access the protected and private members
+  friend class MemberLteHandoverManagementSapProvider<NoOpHandoverAlgorithm>;
+
+protected:
+  // inherited from Object
+  virtual void DoInitialize ();
+  virtual void DoDispose ();
+
+  // inherited from LteHandoverAlgorithm as a Handover Management SAP implementation
+  void DoReportUeMeas (uint16_t rnti, LteRrcSap::MeasResults measResults);
+
+private:
+  // Handover Management SAPs
+  LteHandoverManagementSapUser* m_handoverManagementSapUser;
+  LteHandoverManagementSapProvider* m_handoverManagementSapProvider;
+
+}; // end of class NoOpHandoverAlgorithm
+
+
+} // end of namespace ns3
+
+
+#endif /* NO_OP_HANDOVER_ALGORITHM_H */
diff -Naur ns-3.18.1/src/lte/model/pf-ff-mac-scheduler.cc ns-3.19/src/lte/model/pf-ff-mac-scheduler.cc
--- ns-3.18.1/src/lte/model/pf-ff-mac-scheduler.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/pf-ff-mac-scheduler.cc	2013-12-20 09:44:50.000000000 -0800
@@ -42,7 +42,8 @@
 };  // see table 7.1.6.1-1 of 36.213
 
 
-NS_OBJECT_ENSURE_REGISTERED (PfFfMacScheduler);
+NS_OBJECT_ENSURE_REGISTERED (PfFfMacScheduler)
+  ;
 
 
 
@@ -649,6 +650,14 @@
   rbgMap.resize (m_cschedCellConfig.m_dlBandwidth / rbgSize, false);
   FfMacSchedSapUser::SchedDlConfigIndParameters ret;
 
+  //   update UL HARQ proc id
+  std::map <uint16_t, uint8_t>::iterator itProcId;
+  for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
+    {
+      (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
+    }
+
+
   // RACH Allocation
   m_rachAllocationMap.resize (m_cschedCellConfig.m_ulBandwidth, 0);
   uint16_t rbStart = 0;
@@ -689,7 +698,45 @@
           m_rachAllocationMap.at (i) = (*itRach).m_rnti;
         }
       rbStart = rbStart + rbLen;
-
+      
+      if (m_harqOn == true)
+        {
+          // generate UL-DCI for HARQ retransmissions
+          UlDciListElement_s uldci;
+          uldci.m_rnti = newRar.m_rnti;
+          uldci.m_rbLen = rbLen;
+          uldci.m_rbStart = rbStart;
+          uldci.m_mcs = m_ulGrantMcs;
+          uldci.m_tbSize = tbSizeBits / 8;
+          uldci.m_ndi = 1;
+          uldci.m_cceIndex = 0;
+          uldci.m_aggrLevel = 1;
+          uldci.m_ueTxAntennaSelection = 3; // antenna selection OFF
+          uldci.m_hopping = false;
+          uldci.m_n2Dmrs = 0;
+          uldci.m_tpc = 0; // no power control
+          uldci.m_cqiRequest = false; // only period CQI at this stage
+          uldci.m_ulIndex = 0; // TDD parameter
+          uldci.m_dai = 1; // TDD parameter
+          uldci.m_freqHopping = 0;
+          uldci.m_pdcchPowerOffset = 0; // not used
+
+          uint8_t harqId = 0;
+          std::map <uint16_t, uint8_t>::iterator itProcId;
+          itProcId = m_ulHarqCurrentProcessId.find (uldci.m_rnti);
+          if (itProcId == m_ulHarqCurrentProcessId.end ())
+            {
+              NS_FATAL_ERROR ("No info find in HARQ buffer for UE " << uldci.m_rnti);
+            }
+          harqId = (*itProcId).second;
+          std::map <uint16_t, UlHarqProcessesDciBuffer_t>::iterator itDci = m_ulHarqProcessesDciBuffer.find (uldci.m_rnti);
+          if (itDci == m_ulHarqProcessesDciBuffer.end ())
+            {
+              NS_FATAL_ERROR ("Unable to find RNTI entry in UL DCI HARQ buffer for RNTI " << uldci.m_rnti);
+            }
+          (*itDci).second.at (harqId) = uldci;
+        }
+      
       ret.m_buildRarList.push_back (newRar);
     }
   m_rachList.clear ();
@@ -951,6 +998,16 @@
   m_dlInfoListBuffered.clear ();
   m_dlInfoListBuffered = dlInfoListUntxed;
 
+  if (rbgAllocatedNum == rbgNum)
+    {
+      // all the RBGs are already allocated -> exit
+      if ((ret.m_buildDataList.size () > 0) || (ret.m_buildRarList.size () > 0))
+        {
+          m_schedSapUser->SchedDlConfigInd (ret);
+        }
+      return;
+    }
+
 
 
   for (int i = 0; i < rbgNum; i++)
@@ -1404,12 +1461,6 @@
   if (m_harqOn == true)
     {
       //   Process UL HARQ feedback
-      //   update UL HARQ proc id
-      std::map <uint16_t, uint8_t>::iterator itProcId;
-      for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
-        {
-          (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
-        }
 
       for (uint16_t i = 0; i < params.m_ulInfoList.size (); i++)
         {        
@@ -1417,7 +1468,7 @@
             {
               // retx correspondent block: retrieve the UL-DCI
               uint16_t rnti = params.m_ulInfoList.at (i).m_rnti;
-              itProcId = m_ulHarqCurrentProcessId.find (rnti);
+              std::map <uint16_t, uint8_t>::iterator itProcId = m_ulHarqCurrentProcessId.find (rnti);
               if (itProcId == m_ulHarqCurrentProcessId.end ())
                 {
                   NS_LOG_ERROR ("No info find in HARQ buffer for UE (might change eNB) " << rnti);
diff -Naur ns-3.18.1/src/lte/model/pss-ff-mac-scheduler.cc ns-3.19/src/lte/model/pss-ff-mac-scheduler.cc
--- ns-3.18.1/src/lte/model/pss-ff-mac-scheduler.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/pss-ff-mac-scheduler.cc	2013-12-20 09:44:50.000000000 -0800
@@ -46,7 +46,8 @@
 };  // see table 7.1.6.1-1 of 36.213
 
 
-NS_OBJECT_ENSURE_REGISTERED (PssFfMacScheduler);
+NS_OBJECT_ENSURE_REGISTERED (PssFfMacScheduler)
+  ;
 
 
 
@@ -678,6 +679,13 @@
   rbgMap.resize (m_cschedCellConfig.m_dlBandwidth / rbgSize, false);
   FfMacSchedSapUser::SchedDlConfigIndParameters ret;
 
+  //   update UL HARQ proc id
+  std::map <uint16_t, uint8_t>::iterator itProcId;
+  for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
+    {
+      (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
+    }
+
   // RACH Allocation
   m_rachAllocationMap.resize (m_cschedCellConfig.m_ulBandwidth, 0);
   uint16_t rbStart = 0;
@@ -719,6 +727,44 @@
         }
       rbStart = rbStart + rbLen;
 
+      if (m_harqOn == true)
+        {
+          // generate UL-DCI for HARQ retransmissions
+          UlDciListElement_s uldci;
+          uldci.m_rnti = newRar.m_rnti;
+          uldci.m_rbLen = rbLen;
+          uldci.m_rbStart = rbStart;
+          uldci.m_mcs = m_ulGrantMcs;
+          uldci.m_tbSize = tbSizeBits / 8;
+          uldci.m_ndi = 1;
+          uldci.m_cceIndex = 0;
+          uldci.m_aggrLevel = 1;
+          uldci.m_ueTxAntennaSelection = 3; // antenna selection OFF
+          uldci.m_hopping = false;
+          uldci.m_n2Dmrs = 0;
+          uldci.m_tpc = 0; // no power control
+          uldci.m_cqiRequest = false; // only period CQI at this stage
+          uldci.m_ulIndex = 0; // TDD parameter
+          uldci.m_dai = 1; // TDD parameter
+          uldci.m_freqHopping = 0;
+          uldci.m_pdcchPowerOffset = 0; // not used
+
+          uint8_t harqId = 0;
+          std::map <uint16_t, uint8_t>::iterator itProcId;
+          itProcId = m_ulHarqCurrentProcessId.find (uldci.m_rnti);
+          if (itProcId == m_ulHarqCurrentProcessId.end ())
+            {
+              NS_FATAL_ERROR ("No info find in HARQ buffer for UE " << uldci.m_rnti);
+            }
+          harqId = (*itProcId).second;
+          std::map <uint16_t, UlHarqProcessesDciBuffer_t>::iterator itDci = m_ulHarqProcessesDciBuffer.find (uldci.m_rnti);
+          if (itDci == m_ulHarqProcessesDciBuffer.end ())
+            {
+              NS_FATAL_ERROR ("Unable to find RNTI entry in UL DCI HARQ buffer for RNTI " << uldci.m_rnti);
+            }
+          (*itDci).second.at (harqId) = uldci;
+        }
+
       ret.m_buildRarList.push_back (newRar);
     }
   m_rachList.clear ();
@@ -980,6 +1026,16 @@
   m_dlInfoListBuffered.clear ();
   m_dlInfoListBuffered = dlInfoListUntxed;
 
+  if (rbgAllocatedNum == rbgNum)
+    {
+      // all the RBGs are already allocated -> exit
+      if ((ret.m_buildDataList.size () > 0) || (ret.m_buildRarList.size () > 0))
+        {
+          m_schedSapUser->SchedDlConfigInd (ret);
+        }
+      return;
+    }
+
 
   std::map <uint16_t, pssFlowPerf_t>::iterator it;
   std::map <uint16_t, pssFlowPerf_t> tdUeSet; // the result of TD scheduler
@@ -1711,20 +1767,13 @@
   if (m_harqOn == true)
     {
       //   Process UL HARQ feedback
-      //   update UL HARQ proc id
-      std::map <uint16_t, uint8_t>::iterator itProcId;
-      for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
-        {
-          (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
-        }
-
       for (uint16_t i = 0; i < params.m_ulInfoList.size (); i++)
         {        
           if (params.m_ulInfoList.at (i).m_receptionStatus == UlInfoListElement_s::NotOk)
             {
               // retx correspondent block: retrieve the UL-DCI
               uint16_t rnti = params.m_ulInfoList.at (i).m_rnti;
-              itProcId = m_ulHarqCurrentProcessId.find (rnti);
+              std::map <uint16_t, uint8_t>::iterator itProcId = m_ulHarqCurrentProcessId.find (rnti);
               if (itProcId == m_ulHarqCurrentProcessId.end ())
                 {
                   NS_LOG_ERROR ("No info find in HARQ buffer for UE (might change eNB) " << rnti);
diff -Naur ns-3.18.1/src/lte/model/rem-spectrum-phy.cc ns-3.19/src/lte/model/rem-spectrum-phy.cc
--- ns-3.18.1/src/lte/model/rem-spectrum-phy.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/rem-spectrum-phy.cc	2013-12-20 09:44:50.000000000 -0800
@@ -35,7 +35,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (RemSpectrumPhy);
+NS_OBJECT_ENSURE_REGISTERED (RemSpectrumPhy)
+  ;
 
 RemSpectrumPhy::RemSpectrumPhy ()
   : m_mobility (0),    
diff -Naur ns-3.18.1/src/lte/model/rr-ff-mac-scheduler.cc ns-3.19/src/lte/model/rr-ff-mac-scheduler.cc
--- ns-3.18.1/src/lte/model/rr-ff-mac-scheduler.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/rr-ff-mac-scheduler.cc	2013-12-20 09:44:50.000000000 -0800
@@ -46,7 +46,8 @@
 
 
 
-NS_OBJECT_ENSURE_REGISTERED (RrFfMacScheduler);
+NS_OBJECT_ENSURE_REGISTERED (RrFfMacScheduler)
+  ;
 
 
 class RrSchedulerMemberCschedSapProvider : public FfMacCschedSapProvider
@@ -617,6 +618,13 @@
   std::set <uint16_t> rntiAllocated;
   rbgMap.resize (m_cschedCellConfig.m_dlBandwidth / rbgSize, false);
 
+  //   update UL HARQ proc id
+  std::map <uint16_t, uint8_t>::iterator itProcId;
+  for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
+    {
+      (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
+    }
+
   // RACH Allocation
   m_rachAllocationMap.resize (m_cschedCellConfig.m_ulBandwidth, 0);
   uint16_t rbStart = 0;
@@ -658,6 +666,44 @@
         }
       rbStart = rbStart + rbLen;
 
+      if (m_harqOn == true)
+        {
+          // generate UL-DCI for HARQ retransmissions
+          UlDciListElement_s uldci;
+          uldci.m_rnti = newRar.m_rnti;
+          uldci.m_rbLen = rbLen;
+          uldci.m_rbStart = rbStart;
+          uldci.m_mcs = m_ulGrantMcs;
+          uldci.m_tbSize = tbSizeBits / 8;
+          uldci.m_ndi = 1;
+          uldci.m_cceIndex = 0;
+          uldci.m_aggrLevel = 1;
+          uldci.m_ueTxAntennaSelection = 3; // antenna selection OFF
+          uldci.m_hopping = false;
+          uldci.m_n2Dmrs = 0;
+          uldci.m_tpc = 0; // no power control
+          uldci.m_cqiRequest = false; // only period CQI at this stage
+          uldci.m_ulIndex = 0; // TDD parameter
+          uldci.m_dai = 1; // TDD parameter
+          uldci.m_freqHopping = 0;
+          uldci.m_pdcchPowerOffset = 0; // not used
+
+          uint8_t harqId = 0;
+          std::map <uint16_t, uint8_t>::iterator itProcId;
+          itProcId = m_ulHarqCurrentProcessId.find (uldci.m_rnti);
+          if (itProcId == m_ulHarqCurrentProcessId.end ())
+            {
+              NS_FATAL_ERROR ("No info find in HARQ buffer for UE " << uldci.m_rnti);
+            }
+          harqId = (*itProcId).second;
+          std::map <uint16_t, UlHarqProcessesDciBuffer_t>::iterator itDci = m_ulHarqProcessesDciBuffer.find (uldci.m_rnti);
+          if (itDci == m_ulHarqProcessesDciBuffer.end ())
+            {
+              NS_FATAL_ERROR ("Unable to find RNTI entry in UL DCI HARQ buffer for RNTI " << uldci.m_rnti);
+            }
+          (*itDci).second.at (harqId) = uldci;
+        }
+
       ret.m_buildRarList.push_back (newRar);
     }
   m_rachList.clear ();
@@ -920,6 +966,16 @@
   m_dlInfoListBuffered.clear ();
   m_dlInfoListBuffered = dlInfoListUntxed;
 
+  if (rbgAllocatedNum == rbgNum)
+    {
+      // all the RBGs are already allocated -> exit
+      if ((ret.m_buildDataList.size () > 0) || (ret.m_buildRarList.size () > 0))
+        {
+          m_schedSapUser->SchedDlConfigInd (ret);
+        }
+      return;
+    }
+
   // Get the actual active flows (queue!=0)
   std::list<FfMacSchedSapProvider::SchedDlRlcBufferReqParameters>::iterator it;
   m_rlcBufferReq.sort (SortRlcBufferReq);
@@ -1249,19 +1305,13 @@
   if (m_harqOn == true)
     {
       //   Process UL HARQ feedback
-      //   update UL HARQ proc id
-      std::map <uint16_t, uint8_t>::iterator itProcId;
-      for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
-        {
-          (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
-        }
       for (uint16_t i = 0; i < params.m_ulInfoList.size (); i++)
         {
           if (params.m_ulInfoList.at (i).m_receptionStatus == UlInfoListElement_s::NotOk)
             {
               // retx correspondent block: retrieve the UL-DCI
               uint16_t rnti = params.m_ulInfoList.at (i).m_rnti;
-              itProcId = m_ulHarqCurrentProcessId.find (rnti);
+              std::map <uint16_t, uint8_t>::iterator itProcId = m_ulHarqCurrentProcessId.find (rnti);
               if (itProcId == m_ulHarqCurrentProcessId.end ())
                 {
                   NS_LOG_ERROR ("No info find in HARQ buffer for UE (might change eNB) " << rnti);
diff -Naur ns-3.18.1/src/lte/model/tdbet-ff-mac-scheduler.cc ns-3.19/src/lte/model/tdbet-ff-mac-scheduler.cc
--- ns-3.18.1/src/lte/model/tdbet-ff-mac-scheduler.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/tdbet-ff-mac-scheduler.cc	2013-12-20 09:44:50.000000000 -0800
@@ -43,7 +43,8 @@
 };  // see table 7.1.6.1-1 of 36.213
 
 
-NS_OBJECT_ENSURE_REGISTERED (TdBetFfMacScheduler);
+NS_OBJECT_ENSURE_REGISTERED (TdBetFfMacScheduler)
+  ;
 
 
 
@@ -650,6 +651,13 @@
   rbgMap.resize (m_cschedCellConfig.m_dlBandwidth / rbgSize, false);
   FfMacSchedSapUser::SchedDlConfigIndParameters ret;
 
+  //   update UL HARQ proc id
+  std::map <uint16_t, uint8_t>::iterator itProcId;
+  for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
+    {
+      (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
+    }
+
   // RACH Allocation
   m_rachAllocationMap.resize (m_cschedCellConfig.m_ulBandwidth, 0);
   uint16_t rbStart = 0;
@@ -691,6 +699,44 @@
         }
       rbStart = rbStart + rbLen;
 
+      if (m_harqOn == true)
+        {
+          // generate UL-DCI for HARQ retransmissions
+          UlDciListElement_s uldci;
+          uldci.m_rnti = newRar.m_rnti;
+          uldci.m_rbLen = rbLen;
+          uldci.m_rbStart = rbStart;
+          uldci.m_mcs = m_ulGrantMcs;
+          uldci.m_tbSize = tbSizeBits / 8;
+          uldci.m_ndi = 1;
+          uldci.m_cceIndex = 0;
+          uldci.m_aggrLevel = 1;
+          uldci.m_ueTxAntennaSelection = 3; // antenna selection OFF
+          uldci.m_hopping = false;
+          uldci.m_n2Dmrs = 0;
+          uldci.m_tpc = 0; // no power control
+          uldci.m_cqiRequest = false; // only period CQI at this stage
+          uldci.m_ulIndex = 0; // TDD parameter
+          uldci.m_dai = 1; // TDD parameter
+          uldci.m_freqHopping = 0;
+          uldci.m_pdcchPowerOffset = 0; // not used
+
+          uint8_t harqId = 0;
+          std::map <uint16_t, uint8_t>::iterator itProcId;
+          itProcId = m_ulHarqCurrentProcessId.find (uldci.m_rnti);
+          if (itProcId == m_ulHarqCurrentProcessId.end ())
+            {
+              NS_FATAL_ERROR ("No info find in HARQ buffer for UE " << uldci.m_rnti);
+            }
+          harqId = (*itProcId).second;
+          std::map <uint16_t, UlHarqProcessesDciBuffer_t>::iterator itDci = m_ulHarqProcessesDciBuffer.find (uldci.m_rnti);
+          if (itDci == m_ulHarqProcessesDciBuffer.end ())
+            {
+              NS_FATAL_ERROR ("Unable to find RNTI entry in UL DCI HARQ buffer for RNTI " << uldci.m_rnti);
+            }
+          (*itDci).second.at (harqId) = uldci;
+        }
+
       ret.m_buildRarList.push_back (newRar);
     }
   m_rachList.clear ();
@@ -952,6 +998,16 @@
   m_dlInfoListBuffered.clear ();
   m_dlInfoListBuffered = dlInfoListUntxed;
 
+  if (rbgAllocatedNum == rbgNum)
+    {
+      // all the RBGs are already allocated -> exit
+      if ((ret.m_buildDataList.size () > 0) || (ret.m_buildRarList.size () > 0))
+        {
+          m_schedSapUser->SchedDlConfigInd (ret);
+        }
+      return;
+    }
+
 
   std::map <uint16_t, tdbetsFlowPerf_t>::iterator it;
   std::map <uint16_t, tdbetsFlowPerf_t>::iterator itMax = m_flowStatsDl.end ();
@@ -1304,20 +1360,13 @@
   if (m_harqOn == true)
     {
       //   Process UL HARQ feedback
-      //   update UL HARQ proc id
-      std::map <uint16_t, uint8_t>::iterator itProcId;
-      for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
-        {
-          (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
-        }
-
       for (uint16_t i = 0; i < params.m_ulInfoList.size (); i++)
         {        
           if (params.m_ulInfoList.at (i).m_receptionStatus == UlInfoListElement_s::NotOk)
             {
               // retx correspondent block: retrieve the UL-DCI
               uint16_t rnti = params.m_ulInfoList.at (i).m_rnti;
-              itProcId = m_ulHarqCurrentProcessId.find (rnti);
+              std::map <uint16_t, uint8_t>::iterator itProcId = m_ulHarqCurrentProcessId.find (rnti);
               if (itProcId == m_ulHarqCurrentProcessId.end ())
                 {
                   NS_LOG_ERROR ("No info find in HARQ buffer for UE (might change eNB) " << rnti);
diff -Naur ns-3.18.1/src/lte/model/tdmt-ff-mac-scheduler.cc ns-3.19/src/lte/model/tdmt-ff-mac-scheduler.cc
--- ns-3.18.1/src/lte/model/tdmt-ff-mac-scheduler.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/tdmt-ff-mac-scheduler.cc	2013-12-20 09:44:50.000000000 -0800
@@ -43,7 +43,8 @@
 };  // see table 7.1.6.1-1 of 36.213
 
 
-NS_OBJECT_ENSURE_REGISTERED (TdMtFfMacScheduler);
+NS_OBJECT_ENSURE_REGISTERED (TdMtFfMacScheduler)
+  ;
 
 
 
@@ -639,6 +640,13 @@
   rbgMap.resize (m_cschedCellConfig.m_dlBandwidth / rbgSize, false);
   FfMacSchedSapUser::SchedDlConfigIndParameters ret;
 
+  //   update UL HARQ proc id
+  std::map <uint16_t, uint8_t>::iterator itProcId;
+  for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
+    {
+      (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
+    }
+
   // RACH Allocation
   m_rachAllocationMap.resize (m_cschedCellConfig.m_ulBandwidth, 0);
   uint16_t rbStart = 0;
@@ -680,6 +688,44 @@
         }
       rbStart = rbStart + rbLen;
 
+      if (m_harqOn == true)
+        {
+          // generate UL-DCI for HARQ retransmissions
+          UlDciListElement_s uldci;
+          uldci.m_rnti = newRar.m_rnti;
+          uldci.m_rbLen = rbLen;
+          uldci.m_rbStart = rbStart;
+          uldci.m_mcs = m_ulGrantMcs;
+          uldci.m_tbSize = tbSizeBits / 8;
+          uldci.m_ndi = 1;
+          uldci.m_cceIndex = 0;
+          uldci.m_aggrLevel = 1;
+          uldci.m_ueTxAntennaSelection = 3; // antenna selection OFF
+          uldci.m_hopping = false;
+          uldci.m_n2Dmrs = 0;
+          uldci.m_tpc = 0; // no power control
+          uldci.m_cqiRequest = false; // only period CQI at this stage
+          uldci.m_ulIndex = 0; // TDD parameter
+          uldci.m_dai = 1; // TDD parameter
+          uldci.m_freqHopping = 0;
+          uldci.m_pdcchPowerOffset = 0; // not used
+
+          uint8_t harqId = 0;
+          std::map <uint16_t, uint8_t>::iterator itProcId;
+          itProcId = m_ulHarqCurrentProcessId.find (uldci.m_rnti);
+          if (itProcId == m_ulHarqCurrentProcessId.end ())
+            {
+              NS_FATAL_ERROR ("No info find in HARQ buffer for UE " << uldci.m_rnti);
+            }
+          harqId = (*itProcId).second;
+          std::map <uint16_t, UlHarqProcessesDciBuffer_t>::iterator itDci = m_ulHarqProcessesDciBuffer.find (uldci.m_rnti);
+          if (itDci == m_ulHarqProcessesDciBuffer.end ())
+            {
+              NS_FATAL_ERROR ("Unable to find RNTI entry in UL DCI HARQ buffer for RNTI " << uldci.m_rnti);
+            }
+          (*itDci).second.at (harqId) = uldci;
+        }
+
       ret.m_buildRarList.push_back (newRar);
     }
   m_rachList.clear ();
@@ -941,6 +987,16 @@
   m_dlInfoListBuffered.clear ();
   m_dlInfoListBuffered = dlInfoListUntxed;
 
+  if (rbgAllocatedNum == rbgNum)
+    {
+      // all the RBGs are already allocated -> exit
+      if ((ret.m_buildDataList.size () > 0) || (ret.m_buildRarList.size () > 0))
+        {
+          m_schedSapUser->SchedDlConfigInd (ret);
+        }
+      return;
+    }
+
 
   std::set <uint16_t>::iterator it;
   std::set <uint16_t>::iterator itMax = m_flowStatsDl.end ();
@@ -1301,20 +1357,13 @@
   if (m_harqOn == true)
     {
       //   Process UL HARQ feedback
-      //   update UL HARQ proc id
-      std::map <uint16_t, uint8_t>::iterator itProcId;
-      for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
-        {
-          (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
-        }
-
       for (uint16_t i = 0; i < params.m_ulInfoList.size (); i++)
         {        
           if (params.m_ulInfoList.at (i).m_receptionStatus == UlInfoListElement_s::NotOk)
             {
               // retx correspondent block: retrieve the UL-DCI
               uint16_t rnti = params.m_ulInfoList.at (i).m_rnti;
-              itProcId = m_ulHarqCurrentProcessId.find (rnti);
+              std::map <uint16_t, uint8_t>::iterator itProcId = m_ulHarqCurrentProcessId.find (rnti);
               if (itProcId == m_ulHarqCurrentProcessId.end ())
                 {
                   NS_LOG_ERROR ("No info find in HARQ buffer for UE (might change eNB) " << rnti);
diff -Naur ns-3.18.1/src/lte/model/tdtbfq-ff-mac-scheduler.cc ns-3.19/src/lte/model/tdtbfq-ff-mac-scheduler.cc
--- ns-3.18.1/src/lte/model/tdtbfq-ff-mac-scheduler.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/tdtbfq-ff-mac-scheduler.cc	2013-12-20 09:44:50.000000000 -0800
@@ -44,7 +44,8 @@
 };  // see table 7.1.6.1-1 of 36.213
 
 
-NS_OBJECT_ENSURE_REGISTERED (TdTbfqFfMacScheduler);
+NS_OBJECT_ENSURE_REGISTERED (TdTbfqFfMacScheduler)
+  ;
 
 
 
@@ -694,6 +695,13 @@
   rbgMap.resize (m_cschedCellConfig.m_dlBandwidth / rbgSize, false);
   FfMacSchedSapUser::SchedDlConfigIndParameters ret;
 
+  //   update UL HARQ proc id
+  std::map <uint16_t, uint8_t>::iterator itProcId;
+  for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
+    {
+      (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
+    }
+
   // RACH Allocation
   m_rachAllocationMap.resize (m_cschedCellConfig.m_ulBandwidth, 0);
   uint16_t rbStart = 0;
@@ -735,6 +743,44 @@
         }
       rbStart = rbStart + rbLen;
 
+      if (m_harqOn == true)
+        {
+          // generate UL-DCI for HARQ retransmissions
+          UlDciListElement_s uldci;
+          uldci.m_rnti = newRar.m_rnti;
+          uldci.m_rbLen = rbLen;
+          uldci.m_rbStart = rbStart;
+          uldci.m_mcs = m_ulGrantMcs;
+          uldci.m_tbSize = tbSizeBits / 8;
+          uldci.m_ndi = 1;
+          uldci.m_cceIndex = 0;
+          uldci.m_aggrLevel = 1;
+          uldci.m_ueTxAntennaSelection = 3; // antenna selection OFF
+          uldci.m_hopping = false;
+          uldci.m_n2Dmrs = 0;
+          uldci.m_tpc = 0; // no power control
+          uldci.m_cqiRequest = false; // only period CQI at this stage
+          uldci.m_ulIndex = 0; // TDD parameter
+          uldci.m_dai = 1; // TDD parameter
+          uldci.m_freqHopping = 0;
+          uldci.m_pdcchPowerOffset = 0; // not used
+
+          uint8_t harqId = 0;
+          std::map <uint16_t, uint8_t>::iterator itProcId;
+          itProcId = m_ulHarqCurrentProcessId.find (uldci.m_rnti);
+          if (itProcId == m_ulHarqCurrentProcessId.end ())
+            {
+              NS_FATAL_ERROR ("No info find in HARQ buffer for UE " << uldci.m_rnti);
+            }
+          harqId = (*itProcId).second;
+          std::map <uint16_t, UlHarqProcessesDciBuffer_t>::iterator itDci = m_ulHarqProcessesDciBuffer.find (uldci.m_rnti);
+          if (itDci == m_ulHarqProcessesDciBuffer.end ())
+            {
+              NS_FATAL_ERROR ("Unable to find RNTI entry in UL DCI HARQ buffer for RNTI " << uldci.m_rnti);
+            }
+          (*itDci).second.at (harqId) = uldci;
+        }
+
       ret.m_buildRarList.push_back (newRar);
     }
   m_rachList.clear ();
@@ -996,6 +1042,16 @@
   m_dlInfoListBuffered.clear ();
   m_dlInfoListBuffered = dlInfoListUntxed;
 
+  if (rbgAllocatedNum == rbgNum)
+    {
+      // all the RBGs are already allocated -> exit
+      if ((ret.m_buildDataList.size () > 0) || (ret.m_buildRarList.size () > 0))
+        {
+          m_schedSapUser->SchedDlConfigInd (ret);
+        }
+      return;
+    }
+
 
   // update token pool, counter and bank size
   std::map <uint16_t, tdtbfqsFlowPerf_t>::iterator itStats;
@@ -1398,20 +1454,13 @@
   if (m_harqOn == true)
     {
       //   Process UL HARQ feedback
-      //   update UL HARQ proc id
-      std::map <uint16_t, uint8_t>::iterator itProcId;
-      for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
-        {
-          (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
-        }
-
       for (uint16_t i = 0; i < params.m_ulInfoList.size (); i++)
         {        
           if (params.m_ulInfoList.at (i).m_receptionStatus == UlInfoListElement_s::NotOk)
             {
               // retx correspondent block: retrieve the UL-DCI
               uint16_t rnti = params.m_ulInfoList.at (i).m_rnti;
-              itProcId = m_ulHarqCurrentProcessId.find (rnti);
+              std::map <uint16_t, uint8_t>::iterator itProcId = m_ulHarqCurrentProcessId.find (rnti);
               if (itProcId == m_ulHarqCurrentProcessId.end ())
                 {
                   NS_LOG_ERROR ("No info find in HARQ buffer for UE (might change eNB) " << rnti);
diff -Naur ns-3.18.1/src/lte/model/trace-fading-loss-model.cc ns-3.19/src/lte/model/trace-fading-loss-model.cc
--- ns-3.18.1/src/lte/model/trace-fading-loss-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/trace-fading-loss-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -34,7 +34,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TraceFadingLossModel);
+NS_OBJECT_ENSURE_REGISTERED (TraceFadingLossModel)
+  ;
   
 
 
diff -Naur ns-3.18.1/src/lte/model/trace-fading-loss-model.h ns-3.19/src/lte/model/trace-fading-loss-model.h
--- ns-3.18.1/src/lte/model/trace-fading-loss-model.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/trace-fading-loss-model.h	2013-12-20 09:44:50.000000000 -0800
@@ -69,14 +69,12 @@
   
 private:
   /**
-   * @param txPower set of values vs frequency representing the
-   * transmission power. See SpectrumChannel for details.
-   *
-   * @param a sender mobility
-   * @param b receiver mobility
-   *
-   * @return set of values vs frequency representing the received
-   * power in the same units used for the txPower parameter.
+   * \param txPsd set of values vs frequency representing the
+   *              transmission power. See SpectrumChannel for details.
+   * \param a sender mobility
+   * \param b receiver mobility
+   * \return set of values vs frequency representing the received
+   *         power in the same units used for the txPsd parameter.
    */
   Ptr<SpectrumValue> DoCalcRxPowerSpectralDensity (Ptr<const SpectrumValue> txPsd,
                                                    Ptr<const MobilityModel> a,
diff -Naur ns-3.18.1/src/lte/model/tta-ff-mac-scheduler.cc ns-3.19/src/lte/model/tta-ff-mac-scheduler.cc
--- ns-3.18.1/src/lte/model/tta-ff-mac-scheduler.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/model/tta-ff-mac-scheduler.cc	2013-12-20 09:44:50.000000000 -0800
@@ -43,7 +43,8 @@
 };  // see table 7.1.6.1-1 of 36.213
 
 
-NS_OBJECT_ENSURE_REGISTERED (TtaFfMacScheduler);
+NS_OBJECT_ENSURE_REGISTERED (TtaFfMacScheduler)
+  ;
 
 
 
@@ -639,6 +640,13 @@
   rbgMap.resize (m_cschedCellConfig.m_dlBandwidth / rbgSize, false);
   FfMacSchedSapUser::SchedDlConfigIndParameters ret;
 
+  //   update UL HARQ proc id
+  std::map <uint16_t, uint8_t>::iterator itProcId;
+  for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
+    {
+      (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
+    }
+
   // RACH Allocation
   m_rachAllocationMap.resize (m_cschedCellConfig.m_ulBandwidth, 0);
   uint16_t rbStart = 0;
@@ -680,6 +688,44 @@
         }
       rbStart = rbStart + rbLen;
 
+      if (m_harqOn == true)
+        {
+          // generate UL-DCI for HARQ retransmissions
+          UlDciListElement_s uldci;
+          uldci.m_rnti = newRar.m_rnti;
+          uldci.m_rbLen = rbLen;
+          uldci.m_rbStart = rbStart;
+          uldci.m_mcs = m_ulGrantMcs;
+          uldci.m_tbSize = tbSizeBits / 8;
+          uldci.m_ndi = 1;
+          uldci.m_cceIndex = 0;
+          uldci.m_aggrLevel = 1;
+          uldci.m_ueTxAntennaSelection = 3; // antenna selection OFF
+          uldci.m_hopping = false;
+          uldci.m_n2Dmrs = 0;
+          uldci.m_tpc = 0; // no power control
+          uldci.m_cqiRequest = false; // only period CQI at this stage
+          uldci.m_ulIndex = 0; // TDD parameter
+          uldci.m_dai = 1; // TDD parameter
+          uldci.m_freqHopping = 0;
+          uldci.m_pdcchPowerOffset = 0; // not used
+
+          uint8_t harqId = 0;
+          std::map <uint16_t, uint8_t>::iterator itProcId;
+          itProcId = m_ulHarqCurrentProcessId.find (uldci.m_rnti);
+          if (itProcId == m_ulHarqCurrentProcessId.end ())
+            {
+              NS_FATAL_ERROR ("No info find in HARQ buffer for UE " << uldci.m_rnti);
+            }
+          harqId = (*itProcId).second;
+          std::map <uint16_t, UlHarqProcessesDciBuffer_t>::iterator itDci = m_ulHarqProcessesDciBuffer.find (uldci.m_rnti);
+          if (itDci == m_ulHarqProcessesDciBuffer.end ())
+            {
+              NS_FATAL_ERROR ("Unable to find RNTI entry in UL DCI HARQ buffer for RNTI " << uldci.m_rnti);
+            }
+          (*itDci).second.at (harqId) = uldci;
+        }
+
       ret.m_buildRarList.push_back (newRar);
     }
   m_rachList.clear ();
@@ -941,6 +987,16 @@
   m_dlInfoListBuffered.clear ();
   m_dlInfoListBuffered = dlInfoListUntxed;
 
+  if (rbgAllocatedNum == rbgNum)
+    {
+      // all the RBGs are already allocated -> exit
+      if ((ret.m_buildDataList.size () > 0) || (ret.m_buildRarList.size () > 0))
+        {
+          m_schedSapUser->SchedDlConfigInd (ret);
+        }
+      return;
+    }
+
 
 
   for (int i = 0; i < rbgNum; i++)
@@ -1380,20 +1436,13 @@
   if (m_harqOn == true)
     {
       //   Process UL HARQ feedback
-      //   update UL HARQ proc id
-      std::map <uint16_t, uint8_t>::iterator itProcId;
-      for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
-        {
-          (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
-        }
-
       for (uint16_t i = 0; i < params.m_ulInfoList.size (); i++)
         {        
           if (params.m_ulInfoList.at (i).m_receptionStatus == UlInfoListElement_s::NotOk)
             {
               // retx correspondent block: retrieve the UL-DCI
               uint16_t rnti = params.m_ulInfoList.at (i).m_rnti;
-              itProcId = m_ulHarqCurrentProcessId.find (rnti);
+              std::map <uint16_t, uint8_t>::iterator itProcId = m_ulHarqCurrentProcessId.find (rnti);
               if (itProcId == m_ulHarqCurrentProcessId.end ())
                 {
                   NS_LOG_ERROR ("No info find in HARQ buffer for UE (might change eNB) " << rnti);
diff -Naur ns-3.18.1/src/lte/test/epc-test-s1u-downlink.cc ns-3.19/src/lte/test/epc-test-s1u-downlink.cc
--- ns-3.18.1/src/lte/test/epc-test-s1u-downlink.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/epc-test-s1u-downlink.cc	2013-12-20 09:44:50.000000000 -0800
@@ -23,7 +23,7 @@
 #include "ns3/simulator.h"
 #include "ns3/log.h"
 #include "ns3/test.h"
-#include "ns3/epc-helper.h"
+#include "ns3/point-to-point-epc-helper.h"
 #include "ns3/epc-enb-application.h"
 #include "ns3/packet-sink-helper.h"
 #include "ns3/udp-echo-helper.h"
@@ -44,7 +44,8 @@
 namespace ns3 {
 
 
-NS_LOG_COMPONENT_DEFINE ("EpcTestS1uDownlink");
+NS_LOG_COMPONENT_DEFINE ("EpcTestS1uDownlink")
+  ;
 
 
 
@@ -97,7 +98,7 @@
 void 
 EpcS1uDlTestCase::DoRun ()
 {
-  Ptr<EpcHelper> epcHelper = CreateObject<EpcHelper> ();
+  Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper> ();
   Ptr<Node> pgw = epcHelper->GetPgwNode ();
 
   // allow jumbo packets
diff -Naur ns-3.18.1/src/lte/test/epc-test-s1u-uplink.cc ns-3.19/src/lte/test/epc-test-s1u-uplink.cc
--- ns-3.18.1/src/lte/test/epc-test-s1u-uplink.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/epc-test-s1u-uplink.cc	2013-12-20 09:44:50.000000000 -0800
@@ -27,7 +27,7 @@
 #include "ns3/simulator.h"
 #include "ns3/log.h"
 #include "ns3/test.h"
-#include "ns3/epc-helper.h"
+#include "ns3/point-to-point-epc-helper.h"
 #include "ns3/epc-enb-application.h"
 #include "ns3/packet-sink-helper.h"
 #include "ns3/point-to-point-helper.h"
@@ -52,7 +52,8 @@
 
 
 
-NS_LOG_COMPONENT_DEFINE ("EpcTestS1uUplink");
+NS_LOG_COMPONENT_DEFINE ("EpcTestS1uUplink")
+  ;
 
 /*
  * A Udp client. Sends UDP packet carrying sequence number and time
@@ -293,7 +294,7 @@
 void 
 EpcS1uUlTestCase::DoRun ()
 {
-  Ptr<EpcHelper> epcHelper = CreateObject<EpcHelper> ();
+  Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper> ();
   Ptr<Node> pgw = epcHelper->GetPgwNode ();
 
   // allow jumbo packets
diff -Naur ns-3.18.1/src/lte/test/lte-simple-helper.cc ns-3.19/src/lte/test/lte-simple-helper.cc
--- ns-3.18.1/src/lte/test/lte-simple-helper.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/lte-simple-helper.cc	2013-12-20 09:44:50.000000000 -0800
@@ -35,7 +35,8 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (LteSimpleHelper);
+NS_OBJECT_ENSURE_REGISTERED (LteSimpleHelper)
+  ;
 
 LteSimpleHelper::LteSimpleHelper (void)
 {
diff -Naur ns-3.18.1/src/lte/test/lte-simple-net-device.cc ns-3.19/src/lte/test/lte-simple-net-device.cc
--- ns-3.18.1/src/lte/test/lte-simple-net-device.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/lte-simple-net-device.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (LteSimpleNetDevice);
+NS_OBJECT_ENSURE_REGISTERED (LteSimpleNetDevice)
+  ;
 
 
 TypeId LteSimpleNetDevice::GetTypeId (void)
diff -Naur ns-3.18.1/src/lte/test/lte-test-cell-selection.cc ns-3.19/src/lte/test/lte-test-cell-selection.cc
--- ns-3.18.1/src/lte/test/lte-test-cell-selection.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/test/lte-test-cell-selection.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,431 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Budiarto Herman
+ *
+ * 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: Budiarto Herman <budiarto.herman@magister.fi>
+ *
+ */
+
+#include "lte-test-cell-selection.h"
+
+#include <ns3/simulator.h>
+#include <ns3/log.h>
+#include <ns3/boolean.h>
+#include <ns3/double.h>
+#include <ns3/integer.h>
+
+#include <ns3/mobility-helper.h>
+#include <ns3/lte-helper.h>
+#include <ns3/point-to-point-epc-helper.h>
+#include <ns3/internet-stack-helper.h>
+#include <ns3/point-to-point-helper.h>
+#include <ns3/ipv4-address-helper.h>
+#include <ns3/ipv4-static-routing-helper.h>
+
+#include <ns3/node-container.h>
+#include <ns3/net-device-container.h>
+#include <ns3/ipv4-interface-container.h>
+
+#include <ns3/lte-ue-net-device.h>
+#include <ns3/lte-ue-rrc.h>
+#include <ns3/lte-enb-net-device.h>
+
+NS_LOG_COMPONENT_DEFINE ("LteCellSelectionTest");
+
+namespace ns3 {
+
+
+/*
+ * Test Suite
+ */
+
+
+LteCellSelectionTestSuite::LteCellSelectionTestSuite ()
+  : TestSuite ("lte-cell-selection", SYSTEM)
+{
+  std::vector<LteCellSelectionTestCase::UeSetup_t> w;
+
+  // REAL RRC PROTOCOL
+
+  w.clear ();
+  //                                                x     y    csgMember
+  //                                                checkPoint     cell1, cell2
+  w.push_back (LteCellSelectionTestCase::UeSetup_t (0.0, 0.55, false,
+                                                    MilliSeconds (283), 1, 0));
+  w.push_back (LteCellSelectionTestCase::UeSetup_t (0.0, 0.45, false,
+                                                    MilliSeconds (283), 1, 0));
+  w.push_back (LteCellSelectionTestCase::UeSetup_t (0.5, 0.45, false,
+                                                    MilliSeconds (363), 1, 3));
+  w.push_back (LteCellSelectionTestCase::UeSetup_t (0.5, 0.0,  true,
+                                                    MilliSeconds (283), 2, 4));
+  w.push_back (LteCellSelectionTestCase::UeSetup_t (1.0, 0.55, true,
+                                                    MilliSeconds (283), 3, 0));
+  w.push_back (LteCellSelectionTestCase::UeSetup_t (1.0, 0.45, true,
+                                                    MilliSeconds (283), 4, 0));
+
+  AddTestCase (new LteCellSelectionTestCase ("EPC, real RRC, RngNum=1",
+                                             true, false, 60.0, w, 1),
+               //                                        isd       rngrun
+               TestCase::QUICK);
+
+  // IDEAL RRC PROTOCOL
+
+  w.clear ();
+  //                                                x     y    csgMember
+  //                                                checkPoint     cell1, cell2
+  w.push_back (LteCellSelectionTestCase::UeSetup_t (0.0, 0.55, false,
+                                                    MilliSeconds (266), 1, 0));
+  w.push_back (LteCellSelectionTestCase::UeSetup_t (0.0, 0.45, false,
+                                                    MilliSeconds (266), 1, 0));
+  w.push_back (LteCellSelectionTestCase::UeSetup_t (0.5, 0.45, false,
+                                                    MilliSeconds (346), 1, 3));
+  w.push_back (LteCellSelectionTestCase::UeSetup_t (0.5, 0.0,  true,
+                                                    MilliSeconds (266), 2, 4));
+  w.push_back (LteCellSelectionTestCase::UeSetup_t (1.0, 0.55, true,
+                                                    MilliSeconds (266), 3, 0));
+  w.push_back (LteCellSelectionTestCase::UeSetup_t (1.0, 0.45, true,
+                                                    MilliSeconds (266), 4, 0));
+
+  AddTestCase (new LteCellSelectionTestCase ("EPC, ideal RRC, RngNum=1",
+                                             true, true, 60.0, w, 1),
+               //                                        isd      rngrun
+               TestCase::QUICK);
+
+} // end of LteCellSelectionTestSuite::LteCellSelectionTestSuite ()
+
+
+static LteCellSelectionTestSuite g_lteCellSelectionTestSuite;
+
+
+
+/*
+ * Test Case
+ */
+
+
+LteCellSelectionTestCase::UeSetup_t::UeSetup_t (
+  double relPosX, double relPosY, bool isCsgMember, Time checkPoint,
+  uint16_t expectedCellId1, uint16_t expectedCellId2)
+  : position (Vector (relPosX, relPosY, 0.0)),
+    isCsgMember (isCsgMember),
+    checkPoint (checkPoint),
+    expectedCellId1 (expectedCellId1),
+    expectedCellId2 (expectedCellId2)
+{
+}
+
+
+LteCellSelectionTestCase::LteCellSelectionTestCase (
+  std::string name, bool isEpcMode, bool isIdealRrc,
+  double interSiteDistance,
+  std::vector<UeSetup_t> ueSetupList, int64_t rngRun)
+  : TestCase (name),
+    m_isEpcMode (isEpcMode),
+    m_isIdealRrc (isIdealRrc),
+    m_interSiteDistance (interSiteDistance),
+    m_ueSetupList (ueSetupList),
+    m_rngRun (rngRun)
+{
+  NS_LOG_FUNCTION (this << GetName ());
+  m_lastState.resize (m_ueSetupList.size (), LteUeRrc::NUM_STATES);
+}
+
+
+LteCellSelectionTestCase::~LteCellSelectionTestCase ()
+{
+  NS_LOG_FUNCTION (this << GetName ());
+}
+
+
+void
+LteCellSelectionTestCase::DoRun ()
+{
+  NS_LOG_FUNCTION (this << GetName ());
+
+  Config::SetGlobal ("RngRun", IntegerValue (m_rngRun));
+
+  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
+  lteHelper->SetAttribute ("PathlossModel",
+                           StringValue ("ns3::FriisSpectrumPropagationLossModel"));
+  lteHelper->SetAttribute ("UseIdealRrc", BooleanValue (m_isIdealRrc));
+
+  Ptr<PointToPointEpcHelper> epcHelper;
+
+  if (m_isEpcMode)
+    {
+      epcHelper = CreateObject<PointToPointEpcHelper> ();
+      lteHelper->SetEpcHelper (epcHelper);
+    }
+
+  /*
+   * The topology is the following (the number on the node indicate the cell ID)
+   *
+   *      [1]        [3]
+   *    non-CSG -- non-CSG
+   *       |          |
+   *       |          | 60 m
+   *       |          |
+   *      [2]        [4]
+   *      CSG ------ CSG
+   *           60 m
+   */
+
+  // Create Nodes
+  NodeContainer enbNodes;
+  enbNodes.Create (4);
+  NodeContainer ueNodes;
+  uint16_t nUe = m_ueSetupList.size ();
+  ueNodes.Create (nUe);
+
+  // Assign nodes to position
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  // eNodeB
+  positionAlloc->Add (Vector (                0.0, m_interSiteDistance, 0.0));
+  positionAlloc->Add (Vector (                0.0,                 0.0, 0.0));
+  positionAlloc->Add (Vector (m_interSiteDistance, m_interSiteDistance, 0.0));
+  positionAlloc->Add (Vector (m_interSiteDistance,                 0.0, 0.0));
+  // UE
+  std::vector<UeSetup_t>::const_iterator itSetup;
+  for (itSetup = m_ueSetupList.begin ();
+       itSetup != m_ueSetupList.end (); itSetup++)
+    {
+      Vector uePos (m_interSiteDistance * itSetup->position.x,
+                    m_interSiteDistance * itSetup->position.y,
+                    m_interSiteDistance * itSetup->position.z);
+      NS_LOG_INFO ("UE position " << uePos);
+      positionAlloc->Add (uePos);
+    }
+
+  MobilityHelper mobility;
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.SetPositionAllocator (positionAlloc);
+  mobility.Install (enbNodes);
+  mobility.Install (ueNodes);
+
+  // Create Devices and install them in the Nodes (eNB and UE)
+  int64_t stream = 1;
+  NetDeviceContainer enbDevs;
+
+  // cell ID 1 is a non-CSG cell
+  lteHelper->SetEnbDeviceAttribute ("CsgId", UintegerValue (0));
+  lteHelper->SetEnbDeviceAttribute ("CsgIndication", BooleanValue (false));
+  enbDevs.Add (lteHelper->InstallEnbDevice (enbNodes.Get (0)));
+
+  // cell ID 2 is a CSG cell
+  lteHelper->SetEnbDeviceAttribute ("CsgId", UintegerValue (1));
+  lteHelper->SetEnbDeviceAttribute ("CsgIndication", BooleanValue (true));
+  enbDevs.Add (lteHelper->InstallEnbDevice (enbNodes.Get (1)));
+
+  // cell ID 3 is a non-CSG cell
+  lteHelper->SetEnbDeviceAttribute ("CsgId", UintegerValue (0));
+  lteHelper->SetEnbDeviceAttribute ("CsgIndication", BooleanValue (false));
+  enbDevs.Add (lteHelper->InstallEnbDevice (enbNodes.Get (2)));
+
+  // cell ID 4 is a CSG cell
+  lteHelper->SetEnbDeviceAttribute ("CsgId", UintegerValue (1));
+  lteHelper->SetEnbDeviceAttribute ("CsgIndication", BooleanValue (true));
+  enbDevs.Add (lteHelper->InstallEnbDevice (enbNodes.Get (3)));
+
+  NetDeviceContainer ueDevs;
+  Time lastCheckPoint = MilliSeconds (0);
+  NS_ASSERT (m_ueSetupList.size () == ueNodes.GetN ());
+  NodeContainer::Iterator itNode;
+  for (itSetup = m_ueSetupList.begin (), itNode = ueNodes.Begin ();
+       itSetup != m_ueSetupList.end () || itNode != ueNodes.End ();
+       itSetup++, itNode++)
+    {
+      if (itSetup->isCsgMember)
+        {
+          lteHelper->SetUeDeviceAttribute ("CsgId", UintegerValue (1));
+        }
+      else
+        {
+          lteHelper->SetUeDeviceAttribute ("CsgId", UintegerValue (0));
+        }
+
+      NetDeviceContainer devs = lteHelper->InstallUeDevice (*itNode);
+      Ptr<LteUeNetDevice> ueDev = devs.Get (0)->GetObject<LteUeNetDevice> ();
+      NS_ASSERT (ueDev != 0);
+      ueDevs.Add (devs);
+      Simulator::Schedule (itSetup->checkPoint,
+                           &LteCellSelectionTestCase::CheckPoint,
+                           this, ueDev,
+                           itSetup->expectedCellId1, itSetup->expectedCellId2);
+
+      if (lastCheckPoint < itSetup->checkPoint)
+        {
+          lastCheckPoint = itSetup->checkPoint;
+        }
+    }
+
+  stream += lteHelper->AssignStreams (enbDevs, stream);
+  stream += lteHelper->AssignStreams (ueDevs, stream);
+
+  // Tests
+  NS_ASSERT (m_ueSetupList.size () == ueDevs.GetN ());
+  NetDeviceContainer::Iterator itDev;
+  for (itSetup = m_ueSetupList.begin (), itDev = ueDevs.Begin ();
+       itSetup != m_ueSetupList.end () || itDev != ueDevs.End ();
+       itSetup++, itDev++)
+    {
+      Ptr<LteUeNetDevice> ueDev = (*itDev)->GetObject<LteUeNetDevice> ();
+    }
+
+  if (m_isEpcMode)
+    {
+      // Create P-GW node
+      Ptr<Node> pgw = epcHelper->GetPgwNode ();
+
+      // Create a single RemoteHost
+      NodeContainer remoteHostContainer;
+      remoteHostContainer.Create (1);
+      Ptr<Node> remoteHost = remoteHostContainer.Get (0);
+      InternetStackHelper internet;
+      internet.Install (remoteHostContainer);
+
+      // Create the Internet
+      PointToPointHelper p2ph;
+      p2ph.SetDeviceAttribute ("DataRate", DataRateValue (DataRate ("100Gb/s")));
+      p2ph.SetDeviceAttribute ("Mtu", UintegerValue (1500));
+      p2ph.SetChannelAttribute ("Delay", TimeValue (Seconds (0.010)));
+      NetDeviceContainer internetDevices = p2ph.Install (pgw, remoteHost);
+      Ipv4AddressHelper ipv4h;
+      ipv4h.SetBase ("1.0.0.0", "255.0.0.0");
+      Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign (internetDevices);
+
+      // Routing of the Internet Host (towards the LTE network)
+      Ipv4StaticRoutingHelper ipv4RoutingHelper;
+      Ptr<Ipv4StaticRouting> remoteHostStaticRouting = ipv4RoutingHelper.GetStaticRouting (remoteHost->GetObject<Ipv4> ());
+      remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);
+
+      // Install the IP stack on the UEs
+      internet.Install (ueNodes);
+      Ipv4InterfaceContainer ueIpIfaces;
+      ueIpIfaces = 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);
+        }
+
+    } // end of if (m_isEpcMode)
+  else
+    {
+      NS_FATAL_ERROR ("No support yet for LTE-only simulations");
+    }
+
+  // Connect to trace sources in UEs
+  Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/StateTransition",
+                   MakeCallback (&LteCellSelectionTestCase::StateTransitionCallback,
+                                 this));
+  Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/InitialCellSelectionEndOk",
+                   MakeCallback (&LteCellSelectionTestCase::InitialCellSelectionEndOkCallback,
+                                 this));
+  Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/InitialCellSelectionEndError",
+                   MakeCallback (&LteCellSelectionTestCase::InitialCellSelectionEndErrorCallback,
+                                 this));
+  Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/ConnectionEstablished",
+                   MakeCallback (&LteCellSelectionTestCase::ConnectionEstablishedCallback,
+                                 this));
+
+  // Enable Idle mode cell selection
+  lteHelper->Attach (ueDevs);
+
+  // Run simulation
+  Simulator::Stop (lastCheckPoint);
+  Simulator::Run ();
+
+  NS_LOG_INFO ("Simulation ends");
+  Simulator::Destroy ();
+
+} // end of void LteCellSelectionTestCase::DoRun ()
+
+
+void
+LteCellSelectionTestCase::CheckPoint (Ptr<LteUeNetDevice> ueDev,
+                                      uint16_t expectedCellId1,
+                                      uint16_t expectedCellId2)
+{
+  uint16_t actualCellId = ueDev->GetRrc ()->GetCellId ();
+
+  if (expectedCellId2 == 0)
+    {
+      NS_TEST_ASSERT_MSG_EQ (actualCellId, expectedCellId1,
+                             "IMSI " << ueDev->GetImsi ()
+                                     << " has attached to an unexpected cell");
+    }
+  else
+    {
+      bool pass = (actualCellId == expectedCellId1) ||
+        (actualCellId == expectedCellId2);
+      NS_TEST_ASSERT_MSG_EQ (pass, true,
+                             "IMSI " << ueDev->GetImsi ()
+                                     << " has attached to an unexpected cell"
+                                     << " (actual: " << actualCellId << ","
+                                     << " expected: " << expectedCellId1
+                                     << " or " << expectedCellId2 << ")");
+    }
+
+  if (expectedCellId1 > 0)
+    {
+      NS_TEST_ASSERT_MSG_EQ (m_lastState.at (ueDev->GetImsi () - 1),
+                             LteUeRrc::CONNECTED_NORMALLY,
+                             "UE " << ueDev->GetImsi ()
+                                   << " is not at CONNECTED_NORMALLY state");
+    }
+}
+
+
+void
+LteCellSelectionTestCase::StateTransitionCallback (
+  std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti,
+  LteUeRrc::State oldState, LteUeRrc::State newState)
+{
+  NS_LOG_FUNCTION (this << imsi << cellId << rnti << oldState << newState);
+  m_lastState.at (imsi - 1) = newState;
+}
+
+
+void
+LteCellSelectionTestCase::InitialCellSelectionEndOkCallback (
+  std::string context, uint64_t imsi, uint16_t cellId)
+{
+  NS_LOG_FUNCTION (this << imsi << cellId);
+}
+
+
+void
+LteCellSelectionTestCase::InitialCellSelectionEndErrorCallback (
+  std::string context, uint64_t imsi, uint16_t cellId)
+{
+  NS_LOG_FUNCTION (this << imsi << cellId);
+}
+
+
+void
+LteCellSelectionTestCase::ConnectionEstablishedCallback (
+  std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti)
+{
+  NS_LOG_FUNCTION (this << imsi << cellId << rnti);
+}
+
+
+
+} // end of namespace ns3
diff -Naur ns-3.18.1/src/lte/test/lte-test-cell-selection.h ns-3.19/src/lte/test/lte-test-cell-selection.h
--- ns-3.18.1/src/lte/test/lte-test-cell-selection.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/test/lte-test-cell-selection.h	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,130 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Budiarto Herman
+ *
+ * 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: Budiarto Herman <budiarto.herman@magister.fi>
+ *
+ */
+
+#ifndef LTE_TEST_CELL_SELECTION_H
+#define LTE_TEST_CELL_SELECTION_H
+
+#include <ns3/test.h>
+#include <ns3/nstime.h>
+#include <ns3/node-container.h>
+#include <ns3/vector.h>
+#include <ns3/lte-ue-rrc.h>
+#include <vector>
+
+namespace ns3 {
+
+
+/**
+ * \brief Test suite for executing the cell selection test cases in without-EPC
+ *        and with-EPC scenarios.
+ *
+ * \sa ns3::LteCellSelectionTestCase
+ */
+class LteCellSelectionTestSuite : public TestSuite
+{
+public:
+  LteCellSelectionTestSuite ();
+};
+
+
+
+class LteUeNetDevice;
+
+/**
+ * \brief Testing the initial cell selection procedure by UE at IDLE state in
+ *        the beginning of simulation.
+ */
+class LteCellSelectionTestCase : public TestCase
+{
+public:
+  /**
+   * \brief A set of input parameters for setting up a UE in the simulation.
+   */
+  struct UeSetup_t
+  {
+    Vector position; ///< The position, relative to the inter site distance, where the UE will be spawned in the simulation.
+    bool isCsgMember; ///< Whether UE is allowed access to CSG cell.
+    Time checkPoint; ///< The time in simulation when the UE is verified by the test script.
+    uint16_t expectedCellId1; ///< The cell ID that the UE is expected to attach to (0 means that the UE should not attach to any cell).
+    uint16_t expectedCellId2; ///< An alternative cell ID that the UE is expected to attach to (0 means that this no alternative cell is expected).
+    UeSetup_t (double relPosX, double relPosY, bool isCsgMember, Time checkPoint,
+               uint16_t expectedCellId1, uint16_t expectedCellId2);
+  };
+
+  /**
+   * \brief Creates an instance of the initial cell selection test case.
+   * \param name name of this test
+   * \param isEpcMode set to true for setting up simulation with EPC enabled
+   * \param isIdealRrc if true, simulation uses Ideal RRC protocol, otherwise
+   *                   simulation uses Real RRC protocol
+   * \param interSiteDistance the distance between eNodeB in meters
+   * \param ueSetupList a list of UE configuration to be installed in the
+   *                    simulation
+   * \param rngRun the number of run to be used by the random number generator
+   */
+  LteCellSelectionTestCase (std::string name, bool isEpcMode, bool isIdealRrc,
+                            double interSiteDistance,
+                            std::vector<UeSetup_t> ueSetupList,
+                            int64_t rngRun);
+
+  virtual ~LteCellSelectionTestCase ();
+
+private:
+  /**
+   * \brief Setup the simulation according to the configuration set by the
+   *        class constructor, run it, and verify the result.
+   */
+  virtual void DoRun ();
+
+  /**
+   * \brief Verifies if the given UE is attached to either of the given two
+   *        cells and in a CONNECTED_NORMALLY state.
+   */
+  void CheckPoint (Ptr<LteUeNetDevice> ueDev, uint16_t expectedCellId1,
+                   uint16_t expectedCellId2);
+
+  void StateTransitionCallback (std::string context, uint64_t imsi,
+                                uint16_t cellId, uint16_t rnti,
+                                LteUeRrc::State oldState, LteUeRrc::State newState);
+  void InitialCellSelectionEndOkCallback (std::string context, uint64_t imsi,
+                                          uint16_t cellId);
+  void InitialCellSelectionEndErrorCallback (std::string context, uint64_t imsi,
+                                             uint16_t cellId);
+  void ConnectionEstablishedCallback (std::string context, uint64_t imsi,
+                                      uint16_t cellId, uint16_t rnti);
+
+  bool m_isEpcMode;
+  bool m_isIdealRrc;
+  double m_interSiteDistance;
+  std::vector<UeSetup_t> m_ueSetupList;
+  int64_t m_rngRun;
+
+  /// The current UE RRC state.
+  std::vector<LteUeRrc::State> m_lastState;
+
+}; // end of class LteCellSelectionTestCase
+
+
+
+} // end of namespace ns3
+
+
+#endif /* LTE_TEST_CELL_SELECTION_H */
diff -Naur ns-3.18.1/src/lte/test/lte-test-entities.cc ns-3.19/src/lte/test/lte-test-entities.cc
--- ns-3.18.1/src/lte/test/lte-test-entities.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/lte-test-entities.cc	2013-12-20 09:44:50.000000000 -0800
@@ -608,7 +608,8 @@
 
 
 
-NS_OBJECT_ENSURE_REGISTERED (EpcTestRrc);
+NS_OBJECT_ENSURE_REGISTERED (EpcTestRrc)
+  ;
 
 EpcTestRrc::EpcTestRrc ()
   : m_s1SapProvider (0)
diff -Naur ns-3.18.1/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc ns-3.19/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc
--- ns-3.18.1/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc	2013-12-20 09:44:50.000000000 -0800
@@ -49,7 +49,7 @@
 #include <ns3/boolean.h>
 #include <ns3/enum.h>
 
-#include "ns3/epc-helper.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"
@@ -267,7 +267,7 @@
   Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue (true));
 
   Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
-  Ptr<EpcHelper>  epcHelper = CreateObject<EpcHelper> ();
+  Ptr<PointToPointEpcHelper>  epcHelper = CreateObject<PointToPointEpcHelper> ();
   lteHelper->SetEpcHelper (epcHelper);
 
   //LogComponentEnable ("FdTbfqFfMacScheduler", LOG_DEBUG);
@@ -515,7 +515,7 @@
 
 
   Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
-  Ptr<EpcHelper>  epcHelper = CreateObject<EpcHelper> ();
+  Ptr<PointToPointEpcHelper>  epcHelper = CreateObject<PointToPointEpcHelper> ();
   lteHelper->SetEpcHelper (epcHelper);
 
   Ptr<Node> pgw = epcHelper->GetPgwNode ();
diff -Naur ns-3.18.1/src/lte/test/lte-test-pathloss-model.cc ns-3.19/src/lte/test/lte-test-pathloss-model.cc
--- ns-3.18.1/src/lte/test/lte-test-pathloss-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/lte-test-pathloss-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -78,8 +78,6 @@
 LtePathlossModelTestSuite::LtePathlossModelTestSuite ()
   : TestSuite ("lte-pathloss-model", SYSTEM)
 {
- 
-  
   // LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_ALL);
   // LogComponentEnable ("LteHelper", logLevel);
   // LogComponentEnable ("LtePathlossModelTest", logLevel);
@@ -214,10 +212,10 @@
   lteHelper->EnableRlcTraces ();
   lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::HybridBuildingsPropagationLossModel"));
 
-  // set frequency. This is important because it changes the behavior of the pathloss model
+  // set frequency. This is important because it changes the behavior of the path loss model
   lteHelper->SetEnbDeviceAttribute ("DlEarfcn", UintegerValue (200));
+  lteHelper->SetUeDeviceAttribute ("DlEarfcn", UintegerValue (200));
 
-  
   // remove shadowing component
   lteHelper->SetPathlossModelAttribute ("ShadowSigmaOutdoor", DoubleValue (0.0));
   lteHelper->SetPathlossModelAttribute ("ShadowSigmaIndoor", DoubleValue (0.0));
@@ -263,7 +261,6 @@
   // Attach a UE to a eNB
   lteHelper->Attach (ueDevs, enbDevs.Get (0));
 
-  
   // Activate an EPS bearer
   enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
   EpsBearer bearer (q);
diff -Naur ns-3.18.1/src/lte/test/lte-test-phy-error-model.cc ns-3.19/src/lte/test/lte-test-phy-error-model.cc
--- ns-3.18.1/src/lte/test/lte-test-phy-error-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/lte-test-phy-error-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -46,76 +46,111 @@
 #include <ns3/config.h>
 #include <ns3/boolean.h>
 #include <ns3/enum.h>
+#include <ns3/integer.h>
 #include <ns3/unused.h>
 #include <ns3/ff-mac-scheduler.h>
 #include <ns3/buildings-helper.h>
 
 #include "lte-test-phy-error-model.h"
 
-NS_LOG_COMPONENT_DEFINE ("LenaTestPhyErrorModel");
+NS_LOG_COMPONENT_DEFINE ("LteTestPhyErrorModel");
 
 namespace ns3 {
 
 
-LenaTestPhyErrorModelrSuite::LenaTestPhyErrorModelrSuite ()
+LenaTestPhyErrorModelSuite::LenaTestPhyErrorModelSuite ()
   : TestSuite ("lte-phy-error-model", SYSTEM)
 {
   NS_LOG_INFO ("creating LenaTestPhyErrorModelTestCase");
   
   
-  // Tests on DL Control Channels (PCFICH+PDDCH)
-  // 1 interfering eNB SINR -2.0 BLER 0.007 TB size 217
-  AddTestCase (new LenaDlCtrlPhyErrorModelTestCase (2, 1078, 217, 0.007), TestCase::QUICK);
-  // 2 interfering eNBs SINR -4.0 BLER 0.037 TB size 217
-  AddTestCase (new LenaDlCtrlPhyErrorModelTestCase (3, 1040, 217, 0.045), TestCase::EXTENSIVE);
-  // 3 interfering eNBs SINR -6.0 BLER 0.21 TB size 133
-  AddTestCase (new LenaDlCtrlPhyErrorModelTestCase (4, 1250, 133, 0.206), TestCase::EXTENSIVE);
-  // 4 interfering eNBs SINR -7.0 BLER 0.34 TB size 133
-  AddTestCase (new LenaDlCtrlPhyErrorModelTestCase (5, 1260, 81, 0.343), TestCase::EXTENSIVE);
-
-  // Tests on DL Data channels (PDSCH)
-  // the tolerance is calculated with the following octave code:
-  //
-  // n =  1000;
-  // for p=1-[0.33 0.11 0.2 0.3 0.55 0.14]
-  //    tol = n*p - binoinv(0.005, n, p)
-  // endfor
-
-  // MCS 2 TB size of 256 bits BLER 0.33 SINR -5.51
-  AddTestCase (new LenaDataPhyErrorModelTestCase (4, 1800, 32, 0.33, 39), TestCase::QUICK);
-// MCS 2 TB size of 528 bits BLER 0.11 SINR -5.51
-  AddTestCase (new LenaDataPhyErrorModelTestCase (2, 1800, 66, 0.11, 26), TestCase::EXTENSIVE);
-// MCS 2 TB size of 1088 bits BLER 0.02 SINR -5.51
-  AddTestCase (new LenaDataPhyErrorModelTestCase (1, 1800, 136, 0.02, 33), TestCase::EXTENSIVE);
-  // MCS 12 TB size of 4800 bits  BLER 0.3  SINR 4.43
-  AddTestCase (new LenaDataPhyErrorModelTestCase (1, 600, 600, 0.3, 38), TestCase::EXTENSIVE);
-// MCS 12 TB size of 1632 bits  BLER 0.55  SINR 4.43
-  AddTestCase (new LenaDataPhyErrorModelTestCase (3, 600, 204, 0.55, 40), TestCase::EXTENSIVE);
-// MCS 16 TB size of 7272 bits (3648 x 3584) BLER 0.14 SINR 8.48
-// BLER 0.14 = 1 - ((1-0.075)*(1-0.075))
-  AddTestCase (new LenaDataPhyErrorModelTestCase (1, 470, 781, 0.14, 29), TestCase::EXTENSIVE);
+  for (uint32_t rngRun = 1; rngRun <= 3; ++rngRun)
+    {
+
+      // Tests on DL Control Channels (PCFICH+PDCCH)
+      // the tolerance is calculated with the following octave code:
+      //
+      // n =  1000; # TX packets
+      // for p=1-[0.007 0.045 0.206 0.343]
+      //    tol = n*p - binoinv(0.001, n, p)
+      // endfor
+
+      // 1 interfering eNB SINR -2.0 BLER 0.007 TB size 217
+      AddTestCase (new LenaDlCtrlPhyErrorModelTestCase (2, 1078, 0.007, 9,
+                                                        Seconds (0.04), rngRun),
+                   (rngRun == 1) ? TestCase::QUICK : TestCase::TAKES_FOREVER);
+      // 2 interfering eNBs SINR -4.0 BLER 0.037 TB size 217
+      AddTestCase (new LenaDlCtrlPhyErrorModelTestCase (3, 1040, 0.045, 21,
+                                                        Seconds (0.04), rngRun),
+                   (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
+      // 3 interfering eNBs SINR -6.0 BLER 0.21 TB size 133
+      AddTestCase (new LenaDlCtrlPhyErrorModelTestCase (4, 1250, 0.206, 40,
+                                                        Seconds (0.12), rngRun),
+                   (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
+      // 4 interfering eNBs SINR -7.0 BLER 0.34 TB size 133
+      AddTestCase (new LenaDlCtrlPhyErrorModelTestCase (5, 1260, 0.343, 47,
+                                                        Seconds (0.12), rngRun),
+                   (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
+
+      // Tests on DL Data channels (PDSCH)
+      // the tolerance is calculated with the following octave code:
+      //
+      // n =  1000; # TX packets
+      // for p=1-[0.33 0.11 0.2 0.3 0.55 0.14]
+      //    tol = n*p - binoinv(0.005, n, p)
+      // endfor
+
+      // MCS 2 TB size of 256 bits BLER 0.33 SINR -5.51
+      AddTestCase (new LenaDataPhyErrorModelTestCase (4, 1800, 0.33, 39,
+                                                      Seconds (0.04), rngRun),
+                   (rngRun == 1) ? TestCase::QUICK : TestCase::TAKES_FOREVER);
+      // MCS 2 TB size of 528 bits BLER 0.11 SINR -5.51
+      AddTestCase (new LenaDataPhyErrorModelTestCase (2, 1800, 0.11, 26,
+                                                      Seconds (0.04), rngRun),
+                   (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
+      // MCS 2 TB size of 1088 bits BLER 0.02 SINR -5.51
+      AddTestCase (new LenaDataPhyErrorModelTestCase (1, 1800, 0.02, 33,
+                                                      Seconds (0.04), rngRun),
+                   (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
+      // MCS 12 TB size of 4800 bits  BLER 0.3  SINR 4.43
+      AddTestCase (new LenaDataPhyErrorModelTestCase (1, 600, 0.3, 38,
+                                                      Seconds (0.04), rngRun),
+                   (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
+      // MCS 12 TB size of 1632 bits  BLER 0.55  SINR 4.43
+      AddTestCase (new LenaDataPhyErrorModelTestCase (3, 600, 0.55, 40,
+                                                      Seconds (0.04), rngRun),
+                   (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
+      // MCS 16 TB size of 7272 bits (3648 x 3584) BLER 0.14 SINR 8.48
+      // BLER 0.14 = 1 - ((1-0.075)*(1-0.075))
+      AddTestCase (new LenaDataPhyErrorModelTestCase (1, 470, 0.14, 29,
+                                                      Seconds (0.04), rngRun),
+                   (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
 
- 
+    }
 
 }
 
-static LenaTestPhyErrorModelrSuite lenaTestPhyErrorModelrSuite;
+static LenaTestPhyErrorModelSuite lenaTestPhyErrorModelSuite;
 
 std::string 
-LenaDataPhyErrorModelTestCase::BuildNameString (uint16_t nUser, uint16_t dist)
+LenaDataPhyErrorModelTestCase::BuildNameString (uint16_t nUser, uint16_t dist, uint32_t rngRun)
 {
   std::ostringstream oss;
-  oss << nUser << " UEs, distance " << dist << " m";
+  oss << "DataPhyErrorModel " <<  nUser << " UEs, distance " << dist << " m, RngRun " << rngRun;
   return oss.str ();
 }
 
-LenaDataPhyErrorModelTestCase::LenaDataPhyErrorModelTestCase (uint16_t nUser, uint16_t dist, uint16_t tbSize, double blerRef, uint16_t toleranceRxPackets)
-  : TestCase (BuildNameString (nUser, dist)),              
+LenaDataPhyErrorModelTestCase::LenaDataPhyErrorModelTestCase (
+  uint16_t nUser, uint16_t dist, double blerRef,
+  uint16_t toleranceRxPackets, Time statsStartTime, uint32_t rngRun)
+  : TestCase (BuildNameString (nUser, dist, rngRun)),
     m_nUser (nUser),
     m_dist (dist),
     m_blerRef (blerRef),
-    m_toleranceRxPackets (toleranceRxPackets)
-{  
+    m_toleranceRxPackets (toleranceRxPackets),
+    m_statsStartTime (statsStartTime),
+    m_rngRun (rngRun)
+{
 }
 
 LenaDataPhyErrorModelTestCase::~LenaDataPhyErrorModelTestCase ()
@@ -132,12 +167,13 @@
   Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (false));
   Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (true));
   Config::SetDefault ("ns3::RrFfMacScheduler::HarqEnabled", BooleanValue (false));
+  Config::SetGlobal ("RngRun", IntegerValue (m_rngRun));
 
-
-  /**
+  /*
    * Initialize Simulation Scenario: 1 eNB and m_nUser UEs
    */
 
+  int64_t stream = 1;
   Ptr<LteHelper> lena = CreateObject<LteHelper> ();
   
   // Create Nodes: eNodeB and UE
@@ -168,7 +204,9 @@
   lena->SetSchedulerAttribute ("UlCqiFilter", EnumValue (FfMacScheduler::PUSCH_UL_CQI));
   
   enbDevs = lena->InstallEnbDevice (enbNodes);
+  stream += lena->AssignStreams (enbDevs, stream);
   ueDevs = lena->InstallUeDevice (ueNodes);
+  stream += lena->AssignStreams (ueDevs, stream);
 
   // Attach a UE to a eNB
   lena->Attach (ueDevs, enbDevs.Get (0));
@@ -198,14 +236,13 @@
       uePhy->SetAttribute ("NoiseFigure", DoubleValue (9.0));
     }
     
-  lena->EnableRlcTraces ();
-  Time simulationTime = Seconds (1.000);
-
-  Simulator::Stop (simulationTime);
+  Time statsDuration = Seconds (1.0);
+  Simulator::Stop (m_statsStartTime + statsDuration - Seconds (0.0001));
 
+  lena->EnableRlcTraces ();
   Ptr<RadioBearerStatsCalculator> rlcStats = lena->GetRlcStats ();
-  rlcStats->SetAttribute ("EpochDuration", TimeValue (simulationTime));
-
+  rlcStats->SetAttribute ("StartTime", TimeValue (m_statsStartTime));
+  rlcStats->SetAttribute ("EpochDuration", TimeValue (statsDuration));
 
   Simulator::Run ();
 
@@ -223,23 +260,21 @@
       double expectedDlRxPackets = dlTxPackets -dlTxPackets*m_blerRef;
       NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " DOWNLINK"
                    << " pkts rx " << dlRxPackets << " tx " << dlTxPackets
-                   << " BLER " << dlBler << " Err " << std::fabs (m_blerRef - dlBler) 
-                   << " expected rx " << expectedDlRxPackets 
-                   << " difference " << std::abs (expectedDlRxPackets - dlRxPackets) 
+                   << " BLER " << dlBler << " Err " << std::fabs (m_blerRef - dlBler)
+                   << " expected rx " << expectedDlRxPackets
+                   << " difference " << std::abs (expectedDlRxPackets - dlRxPackets)
                    << " tolerance " << m_toleranceRxPackets);
       NS_UNUSED (dlBler);
 
-      // sanity check for whether the tx packets reported by the stats are correct 
-      // we expect one packet per TTI, excluding the initial RRC connection establishment period
-      double expectedDlMinTxPackets = simulationTime.GetMilliSeconds () - 50;
-      NS_TEST_ASSERT_MSG_GT (dlTxPackets, expectedDlMinTxPackets, " too few DL TX packets reported");
-
-      // the quantiles are evaluated offline according to a Bernoulli 
-      // ditribution with n equal to the number of packet sent and p equal 
-      // to the BLER (see /reference/bernuolliDistribution.m for details)
-      NS_TEST_ASSERT_MSG_EQ_TOL (dlRxPackets, expectedDlRxPackets, m_toleranceRxPackets, " Unexpected DL BLER distribution!");
-
-
+      // sanity check for whether the tx packets reported by the stats are correct
+      // we expect one packet per TTI
+      double expectedDlTxPackets = statsDuration.GetMilliSeconds ();
+      NS_TEST_ASSERT_MSG_EQ_TOL (dlTxPackets, expectedDlTxPackets, expectedDlTxPackets * 0.005, 
+                                 " too different DL TX packets reported");
+
+      // this is the main test condition: check that the RX packets are within the expected range
+      NS_TEST_ASSERT_MSG_EQ_TOL (dlRxPackets, expectedDlRxPackets, m_toleranceRxPackets, 
+                                 " too different DL RX packets reported");
     }
 
 
@@ -250,19 +285,24 @@
 
 
 std::string 
-LenaDlCtrlPhyErrorModelTestCase::BuildNameString (uint16_t nEnb, uint16_t dist)
+LenaDlCtrlPhyErrorModelTestCase::BuildNameString (uint16_t nEnb, uint16_t dist, uint32_t rngRun)
 {
   std::ostringstream oss;
-  oss << nEnb << " eNBs, distance " << dist << " m";
+  oss << "DlCtrlPhyErrorModel " << nEnb << " eNBs, distance " << dist << " m, RngRun " << rngRun;
   return oss.str ();
 }
 
 
-LenaDlCtrlPhyErrorModelTestCase::LenaDlCtrlPhyErrorModelTestCase (uint16_t nEnb, uint16_t dist, uint16_t tbSize, double blerRef)
-: TestCase (BuildNameString (nEnb, dist)),              
-m_nEnb (nEnb),
-m_dist (dist),
-m_blerRef (blerRef)
+LenaDlCtrlPhyErrorModelTestCase::LenaDlCtrlPhyErrorModelTestCase (
+  uint16_t nEnb, uint16_t dist, double blerRef,
+  uint16_t toleranceRxPackets, Time statsStartTime, uint32_t rngRun)
+  : TestCase (BuildNameString (nEnb, dist, rngRun)),
+    m_nEnb (nEnb),
+    m_dist (dist),
+    m_blerRef (blerRef),
+    m_toleranceRxPackets (toleranceRxPackets),
+    m_statsStartTime (statsStartTime),
+    m_rngRun (rngRun)
 {
 }
 
@@ -280,11 +320,13 @@
   Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (true));
   Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (false));
   Config::SetDefault ("ns3::RrFfMacScheduler::HarqEnabled", BooleanValue (false));
-  
-  /**
-  * Initialize Simulation Scenario: 1 eNB and m_nUser UEs
-  */
-  
+  Config::SetGlobal ("RngRun", IntegerValue (m_rngRun));
+
+  /*
+   * Initialize Simulation Scenario: 1 eNB and m_nUser UEs
+   */
+
+  int64_t stream = 1;
   Ptr<LteHelper> lena = CreateObject<LteHelper> ();
   
   // Create Nodes: eNodeB and UE
@@ -315,7 +357,9 @@
   lena->SetSchedulerAttribute ("UlCqiFilter", EnumValue (FfMacScheduler::PUSCH_UL_CQI));
   
   enbDevs = lena->InstallEnbDevice (enbNodes);
+  stream += lena->AssignStreams (enbDevs, stream);
   ueDevs = lena->InstallUeDevice (ueNodes);
+  stream += lena->AssignStreams (ueDevs, stream);
   
   // Attach a UE to one eNB (the others are interfering ones)
   lena->Attach (ueDevs, enbDevs.Get (0));
@@ -345,16 +389,14 @@
   uePhy->SetAttribute ("TxPower", DoubleValue (23.0));
   uePhy->SetAttribute ("NoiseFigure", DoubleValue (9.0));
   
-  
+  Time statsDuration = Seconds (1.0);
+  Simulator::Stop (m_statsStartTime + statsDuration - Seconds (0.0001));
+
   lena->EnableRlcTraces ();
-  Time simulationTime = Seconds (1.000);
-  
-  Simulator::Stop (simulationTime);
-  
   Ptr<RadioBearerStatsCalculator> rlcStats = lena->GetRlcStats ();
-  rlcStats->SetAttribute ("EpochDuration", TimeValue (simulationTime));
-  
-  
+  rlcStats->SetAttribute ("StartTime", TimeValue (m_statsStartTime));
+  rlcStats->SetAttribute ("EpochDuration", TimeValue (statsDuration));
+
   Simulator::Run ();
   
   NS_LOG_INFO ("\tTest downlink control channels (PCFICH+PDCCH)");
@@ -367,19 +409,27 @@
       uint8_t lcId = 3;
       double dlRxPackets = rlcStats->GetDlRxPackets (imsi, lcId);
       double dlTxPackets = rlcStats->GetDlTxPackets (imsi, lcId);
-      double bler = 1.0 - (dlRxPackets/dlTxPackets);
-      NS_LOG_INFO ("\tUser " << i << " imsi " << imsi 
+      double dlBler = 1.0 - (dlRxPackets/dlTxPackets);
+      double expectedDlRxPackets = dlTxPackets -dlTxPackets*m_blerRef;
+      NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " DOWNLINK"
                    << " pkts rx " << dlRxPackets << " tx " << dlTxPackets
-                   << " BLER " << bler << " Err " << fabs (m_blerRef - bler));
-      NS_UNUSED (bler);
+                   << " BLER " << dlBler << " Err " << std::fabs (m_blerRef - dlBler)
+                   << " expected rx " << expectedDlRxPackets
+                   << " difference " << std::abs (expectedDlRxPackets - dlRxPackets)
+                   << " tolerance " << m_toleranceRxPackets);
+      NS_UNUSED (dlBler);
 
-      // sanity check for whether the tx packets reported by the stats are correct 
-      // we expect one packet per TTI, excluding the initial RRC connection establishment period
-      double expectedMinDlTxPackets = simulationTime.GetMilliSeconds () - 50;
-      NS_TEST_ASSERT_MSG_GT (dlTxPackets, expectedMinDlTxPackets, " too few TX packets reported");
+      // sanity check for whether the tx packets reported by the stats are correct
+      // we expect one packet per TTI
+      double expectedDlTxPackets = statsDuration.GetMilliSeconds ();
+      NS_TEST_ASSERT_MSG_EQ_TOL (dlTxPackets, expectedDlTxPackets, expectedDlTxPackets * 0.005, 
+                                 " too different DL TX packets reported");
+
+      // this is the main test condition: check that the RX packets are within the expected range
+      NS_TEST_ASSERT_MSG_EQ_TOL (dlRxPackets, expectedDlRxPackets, m_toleranceRxPackets,
+                                 "too different DL RX packets reported");
 
-      NS_TEST_ASSERT_MSG_EQ_TOL (bler, m_blerRef, 0.1, " Unexpected BLER distribution!");
-    }  
+    }
   
   Simulator::Destroy ();
 }
diff -Naur ns-3.18.1/src/lte/test/lte-test-phy-error-model.h ns-3.19/src/lte/test/lte-test-phy-error-model.h
--- ns-3.18.1/src/lte/test/lte-test-phy-error-model.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/lte-test-phy-error-model.h	2013-12-20 09:44:50.000000000 -0800
@@ -21,8 +21,9 @@
 #ifndef LENA_TEST_PHY_ERROR_MODEL_H
 #define LENA_TEST_PHY_ERROR_MODEL_H
 
-#include "ns3/simulator.h"
-#include "ns3/test.h"
+#include <ns3/simulator.h>
+#include <ns3/test.h>
+#include <ns3/nstime.h>
 
 
 namespace ns3 {
@@ -38,16 +39,20 @@
 class LenaDataPhyErrorModelTestCase : public TestCase
 {
 public:
-  LenaDataPhyErrorModelTestCase (uint16_t nUser, uint16_t dist, uint16_t tbSize, double refBler, uint16_t toleranceRxPackets);
+  LenaDataPhyErrorModelTestCase (uint16_t nUser, uint16_t dist,
+                                 double blerRef, uint16_t toleranceRxPackets,
+                                 Time statsStartTime, uint32_t rngRun);
   virtual ~LenaDataPhyErrorModelTestCase ();
 
 private:
   virtual void DoRun (void);
-  static std::string BuildNameString (uint16_t nUser, uint16_t dist);
+  static std::string BuildNameString (uint16_t nUser, uint16_t dist, uint32_t rngRun);
   uint16_t m_nUser;
   uint16_t m_dist;
   double m_blerRef;
   uint16_t m_toleranceRxPackets;
+  Time m_statsStartTime; ///< Extra time in the beginning of simulation to allow RRC connection establishment + SRS
+  uint32_t m_rngRun;
 
 };
 
@@ -55,25 +60,30 @@
 
 class LenaDlCtrlPhyErrorModelTestCase : public TestCase
 {
-  public:
-    LenaDlCtrlPhyErrorModelTestCase (uint16_t nEnbr, uint16_t dist, uint16_t tbSize, double refBler);
-    virtual ~LenaDlCtrlPhyErrorModelTestCase ();
-    
-  private:
-    virtual void DoRun (void);
-    static std::string BuildNameString (uint16_t nUser, uint16_t dist);
-    uint16_t m_nEnb;
-    uint16_t m_dist;
-    double m_blerRef;
-    
+public:
+  LenaDlCtrlPhyErrorModelTestCase (uint16_t nEnb, uint16_t dist,
+                                   double blerRef, uint16_t toleranceRxPackets,
+                                   Time statsStartTime, uint32_t rngRun);
+  virtual ~LenaDlCtrlPhyErrorModelTestCase ();
+
+private:
+  virtual void DoRun (void);
+  static std::string BuildNameString (uint16_t nUser, uint16_t dist, uint32_t rngRun);
+  uint16_t m_nEnb;
+  uint16_t m_dist;
+  double m_blerRef;
+  uint16_t m_toleranceRxPackets;
+  Time m_statsStartTime; ///< Extra time in the beginning of simulation to allow RRC connection establishment + SRS
+  uint32_t m_rngRun;
+
 };
 
 
 
-class LenaTestPhyErrorModelrSuite : public TestSuite
+class LenaTestPhyErrorModelSuite : public TestSuite
 {
 public:
-  LenaTestPhyErrorModelrSuite ();
+  LenaTestPhyErrorModelSuite ();
 };
 
 
diff -Naur ns-3.18.1/src/lte/test/lte-test-pss-ff-mac-scheduler.cc ns-3.19/src/lte/test/lte-test-pss-ff-mac-scheduler.cc
--- ns-3.18.1/src/lte/test/lte-test-pss-ff-mac-scheduler.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/lte-test-pss-ff-mac-scheduler.cc	2013-12-20 09:44:50.000000000 -0800
@@ -49,7 +49,7 @@
 #include <ns3/boolean.h>
 #include <ns3/enum.h>
 
-#include "ns3/epc-helper.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"
@@ -268,7 +268,7 @@
   Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue (true));
 
   Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
-  Ptr<EpcHelper>  epcHelper = CreateObject<EpcHelper> ();
+  Ptr<PointToPointEpcHelper>  epcHelper = CreateObject<PointToPointEpcHelper> ();
   lteHelper->SetEpcHelper (epcHelper);
 
   //LogComponentEnable ("PssFfMacScheduler", LOG_DEBUG);
@@ -516,7 +516,7 @@
 
 
   Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
-  Ptr<EpcHelper>  epcHelper = CreateObject<EpcHelper> ();
+  Ptr<PointToPointEpcHelper>  epcHelper = CreateObject<PointToPointEpcHelper> ();
   lteHelper->SetEpcHelper (epcHelper);
 
   Ptr<Node> pgw = epcHelper->GetPgwNode ();
diff -Naur ns-3.18.1/src/lte/test/lte-test-rr-ff-mac-scheduler.cc ns-3.19/src/lte/test/lte-test-rr-ff-mac-scheduler.cc
--- ns-3.18.1/src/lte/test/lte-test-rr-ff-mac-scheduler.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/lte-test-rr-ff-mac-scheduler.cc	2013-12-20 09:44:50.000000000 -0800
@@ -60,7 +60,7 @@
 
   bool errorModel = true;
 
-  
+
   // DOWNLINK- DISTANCE 0 -> MCS 28 -> Itbs 26 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 24 PRB at Itbs 26 -> 2196 -> 2196000 bytes/sec
   // 3 users -> 8 PRB at Itbs 26 -> 749 -> 749000 bytes/sec
@@ -184,8 +184,9 @@
       Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (false));
     }
   Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue (false));
-//   LogComponentDisableAll (LOG_LEVEL_ALL);
-  //LogComponentEnable ("LenaTestRrFfMacCheduler", LOG_LEVEL_ALL);
+
+  // This is needed as the RR scheduler does not allocate resources properly for retransmission
+  Config::SetDefault ("ns3::LteRlcAm::TxOpportunityForRetxAlwaysBigEnough", BooleanValue (true));
 
   /**
    * Initialize Simulation Scenario: 1 eNB and m_nUser UEs
diff -Naur ns-3.18.1/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc ns-3.19/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc
--- ns-3.18.1/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc	2013-12-20 09:44:50.000000000 -0800
@@ -49,7 +49,7 @@
 #include <ns3/boolean.h>
 #include <ns3/enum.h>
 
-#include "ns3/epc-helper.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"
@@ -267,7 +267,7 @@
   Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue (true));
 
   Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
-  Ptr<EpcHelper>  epcHelper = CreateObject<EpcHelper> ();
+  Ptr<PointToPointEpcHelper>  epcHelper = CreateObject<PointToPointEpcHelper> ();
   lteHelper->SetEpcHelper (epcHelper);
 
   //LogComponentEnable ("TdTbfqFfMacScheduler", LOG_DEBUG);
@@ -515,7 +515,7 @@
 
 
   Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
-  Ptr<EpcHelper>  epcHelper = CreateObject<EpcHelper> ();
+  Ptr<PointToPointEpcHelper>  epcHelper = CreateObject<PointToPointEpcHelper> ();
   lteHelper->SetEpcHelper (epcHelper);
 
   Ptr<Node> pgw = epcHelper->GetPgwNode ();
diff -Naur ns-3.18.1/src/lte/test/lte-test-ue-measurements.cc ns-3.19/src/lte/test/lte-test-ue-measurements.cc
--- ns-3.18.1/src/lte/test/lte-test-ue-measurements.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/lte-test-ue-measurements.cc	2013-12-20 09:44:50.000000000 -0800
@@ -18,27 +18,39 @@
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
  *         Marco Miozzo <mmiozzo@cttc.es>
+ *         Budiarto Herman <budiarto.herman@magister.fi>
  */
 
-#include "ns3/simulator.h"
-#include "ns3/log.h"
-#include "ns3/string.h"
-#include "ns3/double.h"
+#include <ns3/simulator.h>
+#include <ns3/log.h>
+#include <ns3/callback.h>
+#include <ns3/config.h>
+#include <ns3/string.h>
+#include <ns3/double.h>
 #include <ns3/enum.h>
-#include "ns3/boolean.h"
-#include "ns3/mobility-helper.h"
-#include "ns3/lte-helper.h"
-#include "ns3/ff-mac-scheduler.h"
+#include <ns3/boolean.h>
 
-#include "ns3/lte-enb-phy.h"
-#include "ns3/lte-enb-net-device.h"
-
-#include "ns3/lte-ue-phy.h"
-#include "ns3/lte-ue-net-device.h"
+#include <ns3/mobility-helper.h>
+#include <ns3/lte-helper.h>
+#include <ns3/point-to-point-epc-helper.h>
+#include <ns3/internet-stack-helper.h>
+#include <ns3/point-to-point-helper.h>
+#include <ns3/ipv4-address-helper.h>
+#include <ns3/ipv4-static-routing-helper.h>
+
+#include <ns3/node-container.h>
+#include <ns3/net-device-container.h>
+#include <ns3/ipv4-interface-container.h>
+
+#include <ns3/ff-mac-scheduler.h>
+#include <ns3/lte-enb-net-device.h>
+#include <ns3/lte-enb-phy.h>
 #include <ns3/lte-enb-rrc.h>
+#include <ns3/lte-ue-net-device.h>
+#include <ns3/lte-ue-phy.h>
+#include <ns3/lte-ue-rrc.h>
 
 #include "lte-test-ue-measurements.h"
-
 #include "lte-test-sinr-chunk-processor.h"
 #include <ns3/lte-common.h>
 
@@ -47,23 +59,27 @@
 namespace ns3 {
 
 
+// ===== LTE-UE-MEASUREMENTS TEST SUITE ==================================== //
+
 void
-ReportUeMeasurementsCallback (LteUeMeasurementsTestCase *testcase, std::string path,
-                             uint16_t rnti, uint16_t cellId, double rsrp, double rsrq, bool servingCell)
+ReportUeMeasurementsCallback (LteUeMeasurementsTestCase *testcase,
+                              std::string path, uint16_t rnti, uint16_t cellId,
+                              double rsrp, double rsrq, bool servingCell)
 {
   testcase->ReportUeMeasurements (rnti, cellId, rsrp, rsrq, servingCell);
 }
 
 void
-RecvMeasurementReportCallback (LteUeMeasurementsTestCase *testcase, std::string path,
-                             uint64_t imsi, uint16_t rnti, uint16_t cellId, LteRrcSap::MeasurementReport meas)
+RecvMeasurementReportCallback (LteUeMeasurementsTestCase *testcase,
+                               std::string path, uint64_t imsi, uint16_t cellId,
+                               uint16_t rnti, LteRrcSap::MeasurementReport meas)
 {
-  testcase->RecvMeasurementReport (imsi, rnti, cellId, meas);
+  testcase->RecvMeasurementReport (imsi, cellId, rnti, meas);
 }
 
 
-/**
- * TestSuite
+/*
+ * Test Suite
  */
 
 LteUeMeasurementsTestSuite::LteUeMeasurementsTestSuite ()
@@ -88,18 +104,21 @@
   AddTestCase (new LteUeMeasurementsTestCase ("d1=200000, d2=10000",  200000.000000, 10000.000000, -139.760302, -113.739702, -29.502549, -3.481949), TestCase::EXTENSIVE);
   AddTestCase (new LteUeMeasurementsTestCase ("d1=500000, d2=10000",  500000.000000, 10000.000000, -147.719102, -113.739702, -37.453160, -3.473760), TestCase::EXTENSIVE);
   AddTestCase (new LteUeMeasurementsTestCase ("d1=1000000, d2=10000",  1000000.000000, 10000.000000, -153.739702, -113.739702, -43.472589, -3.472589), TestCase::EXTENSIVE);
-
-
 }
 
 static LteUeMeasurementsTestSuite lteUeMeasurementsTestSuite;
 
 
-/**
- * TestCase
+/*
+ * Test Case
  */
 
-LteUeMeasurementsTestCase::LteUeMeasurementsTestCase (std::string name, double d1, double d2, double rsrpDbmUe1, double rsrpDbmUe2, double rsrqDbUe1, double rsrqDbUe2)
+LteUeMeasurementsTestCase::LteUeMeasurementsTestCase (std::string name,
+                                                      double d1, double d2,
+                                                      double rsrpDbmUe1,
+                                                      double rsrpDbmUe2,
+                                                      double rsrqDbUe1,
+                                                      double rsrqDbUe2)
   : TestCase (name),
     m_d1 (d1),
     m_d2 (d2),
@@ -118,7 +137,7 @@
 void
 LteUeMeasurementsTestCase::DoRun (void)
 {
-  NS_LOG_INFO (this << GetName ());
+  NS_LOG_INFO (this << " " << GetName ());
 
   Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (false));
   Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (false));
@@ -128,8 +147,8 @@
   lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
   lteHelper->SetAttribute ("UseIdealRrc", BooleanValue (false));
 
-  LogComponentEnable ("LteUeMeasurementsTest", LOG_LEVEL_ALL);
-  
+  // LogComponentEnable ("LteUeMeasurementsTest", LOG_LEVEL_ALL);
+
   // Create Nodes: eNodeB and UE
   NodeContainer enbNodes;
   NodeContainer ueNodes1;
@@ -137,7 +156,7 @@
   enbNodes.Create (2);
   ueNodes1.Create (1);
   ueNodes2.Create (1);
-  NodeContainer allNodes = NodeContainer ( enbNodes, ueNodes1, ueNodes2);
+  NodeContainer allNodes = NodeContainer (enbNodes, ueNodes1, ueNodes2);
 
   // the topology is the following:
   //         d2
@@ -167,6 +186,7 @@
   ueDevs1 = lteHelper->InstallUeDevice (ueNodes1);
   ueDevs2 = lteHelper->InstallUeDevice (ueNodes2);
 
+  // Attach UEs to eNodeBs
   lteHelper->Attach (ueDevs1, enbDevs.Get (0));
   lteHelper->Attach (ueDevs2, enbDevs.Get (1));
 
@@ -208,8 +228,7 @@
   Config::Connect ("/NodeList/1/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
                    MakeBoundCallback (&RecvMeasurementReportCallback, this));
 
-  
-// need to allow for RRC connection establishment + SRS
+  // need to allow for RRC connection establishment + SRS
   Simulator::Stop (Seconds (0.800));
   Simulator::Run ();
 
@@ -217,9 +236,10 @@
 
 }
 
-
 void
-LteUeMeasurementsTestCase::ReportUeMeasurements (uint16_t rnti, uint16_t cellId, double rsrp, double rsrq, bool servingCell)
+LteUeMeasurementsTestCase::ReportUeMeasurements (uint16_t rnti, uint16_t cellId,
+                                                 double rsrp, double rsrq,
+                                                 bool servingCell)
 {
   // need to allow for RRC connection establishment + CQI feedback reception + UE measurements filtering (200 ms)
   if (Simulator::Now () > MilliSeconds (400))
@@ -228,38 +248,1692 @@
         {
           NS_LOG_DEBUG ("UE serving cellId " << cellId << " Rxed RSRP " << rsrp << " thr " << m_rsrpDbmUeServingCell << " RSRQ " << rsrq << " thr " << m_rsrqDbUeServingCell);
           NS_TEST_ASSERT_MSG_EQ_TOL (m_rsrpDbmUeServingCell, rsrp, 0.2, "Wrong RSRP UE 1");
-          NS_TEST_ASSERT_MSG_EQ_TOL (m_rsrqDbUeServingCell, rsrq, 0.2 , "Wrong RSRQ UE 1");
+          NS_TEST_ASSERT_MSG_EQ_TOL (m_rsrqDbUeServingCell, rsrq, 0.2, "Wrong RSRQ UE 1");
         }
       else
         {
           NS_LOG_DEBUG ("UE neighbor cellId " << cellId << " Rxed RSRP " << rsrp << " thr " << m_rsrpDbmUeNeighborCell << " RSRQ " << rsrq << " thr " << m_rsrqDbUeNeighborCell);
-          NS_TEST_ASSERT_MSG_EQ_TOL (m_rsrpDbmUeNeighborCell, rsrp, 0.2 , "Wrong RSRP UE 2");
-          NS_TEST_ASSERT_MSG_EQ_TOL (m_rsrqDbUeNeighborCell, rsrq, 0.2 , "Wrong RSRQ UE ");
+          NS_TEST_ASSERT_MSG_EQ_TOL (m_rsrpDbmUeNeighborCell, rsrp, 0.2, "Wrong RSRP UE 2");
+          NS_TEST_ASSERT_MSG_EQ_TOL (m_rsrqDbUeNeighborCell, rsrq, 0.2, "Wrong RSRQ UE ");
         }
     }
 }
 
-
 void
-LteUeMeasurementsTestCase::RecvMeasurementReport (uint64_t imsi, uint16_t cellId, uint16_t rnti, LteRrcSap::MeasurementReport meas)
+LteUeMeasurementsTestCase::RecvMeasurementReport (uint64_t imsi, uint16_t cellId, uint16_t rnti,
+                                                  LteRrcSap::MeasurementReport meas)
 {
   // need to allow for RRC connection establishment + CQI feedback reception + UE measurements filtering (200 ms)
   if (Simulator::Now () > MilliSeconds (400))
     {
       if (cellId == imsi)
         {
-          NS_LOG_DEBUG ("Serving Cell: received IMSI " << imsi << " CellId " << cellId << " RNTI " << rnti  << " thr " << (uint16_t)EutranMeasurementMapping::Dbm2RsrpRange (m_rsrpDbmUeServingCell) << " RSRP " << (uint16_t)meas.measResults.rsrpResult << " RSRQ " << (uint16_t)meas.measResults.rsrqResult << " thr " << (uint16_t)EutranMeasurementMapping::Db2RsrqRange (m_rsrqDbUeServingCell));
-          NS_TEST_ASSERT_MSG_EQ (meas.measResults.rsrpResult, EutranMeasurementMapping::Dbm2RsrpRange (m_rsrpDbmUeServingCell), "Wrong RSRP ");
-          NS_TEST_ASSERT_MSG_EQ (meas.measResults.rsrqResult, EutranMeasurementMapping::Db2RsrqRange (m_rsrqDbUeServingCell), "Wrong RSRQ ");
+          NS_LOG_DEBUG (this << "Serving Cell: received IMSI " << imsi << " CellId " << cellId << " RNTI " << rnti
+                             << " thr " << (uint16_t) EutranMeasurementMapping::Dbm2RsrpRange (m_rsrpDbmUeServingCell)
+                             << " RSRP " << (uint16_t) meas.measResults.rsrpResult
+                             << " RSRQ " << (uint16_t)meas.measResults.rsrqResult
+                             << " thr " << (uint16_t) EutranMeasurementMapping::Db2RsrqRange (m_rsrqDbUeServingCell));
+          NS_TEST_ASSERT_MSG_EQ (meas.measResults.rsrpResult,
+                                 EutranMeasurementMapping::Dbm2RsrpRange (m_rsrpDbmUeServingCell),
+                                 "Wrong RSRP ");
+          NS_TEST_ASSERT_MSG_EQ (meas.measResults.rsrqResult,
+                                 EutranMeasurementMapping::Db2RsrqRange (m_rsrqDbUeServingCell),
+                                 "Wrong RSRQ ");
         }
       else
         {
-          NS_LOG_DEBUG ("Neighbor cell: received IMSI " << imsi << " CellId " << cellId << " RNTI " << rnti  << " thr " << (uint16_t)EutranMeasurementMapping::Dbm2RsrpRange (m_rsrpDbmUeNeighborCell) << " RSRP " << (uint16_t)meas.measResults.rsrpResult << " RSRQ " << (uint16_t)meas.measResults.rsrqResult << " thr " << (uint16_t)EutranMeasurementMapping::Db2RsrqRange (m_rsrqDbUeNeighborCell));
-          NS_TEST_ASSERT_MSG_EQ (meas.measResults.rsrpResult, EutranMeasurementMapping::Dbm2RsrpRange (m_rsrpDbmUeNeighborCell), "Wrong RSRP ");
-          NS_TEST_ASSERT_MSG_EQ (meas.measResults.rsrqResult, EutranMeasurementMapping::Db2RsrqRange (m_rsrqDbUeNeighborCell), "Wrong RSRQ ");
+          NS_LOG_DEBUG (this << "Neighbor cell: received IMSI " << imsi << " CellId " << cellId << " RNTI " << rnti
+                             << " thr " << (uint16_t) EutranMeasurementMapping::Dbm2RsrpRange (m_rsrpDbmUeNeighborCell)
+                             << " RSRP " << (uint16_t) meas.measResults.rsrpResult
+                             << " RSRQ " << (uint16_t)meas.measResults.rsrqResult
+                             << " thr " << (uint16_t) EutranMeasurementMapping::Db2RsrqRange (m_rsrqDbUeNeighborCell));
+          NS_TEST_ASSERT_MSG_EQ (meas.measResults.rsrpResult,
+                                 EutranMeasurementMapping::Dbm2RsrpRange (m_rsrpDbmUeNeighborCell),
+                                 "Wrong RSRP ");
+          NS_TEST_ASSERT_MSG_EQ (meas.measResults.rsrqResult,
+                                 EutranMeasurementMapping::Db2RsrqRange (m_rsrqDbUeNeighborCell),
+                                 "Wrong RSRQ ");
         }
     }
 }
 
+
+// ===== LTE-UE-MEASUREMENTS-PIECEWISE-1 TEST SUITE ======================== //
+
+/*
+ * Overloaded operators, for the convenience of defining test cases
+ */
+
+std::vector<Time>&
+operator<< (std::vector<Time>& v, const uint64_t& ms)
+{
+  /*
+   * Prior attempt to use seconds as unit of choice resulted in precision lost.
+   * Therefore milliseconds are used now instead.
+   */
+  v.push_back (MilliSeconds (ms) + UE_MEASUREMENT_REPORT_DELAY);
+  return v;
+}
+
+std::vector<uint8_t>&
+operator<< (std::vector<uint8_t>& v, const uint8_t& range)
+{
+  v.push_back (range);
+  return v;
+}
+
+
+/*
+ * Test Suite
+ */
+
+LteUeMeasurementsPiecewiseTestSuite1::LteUeMeasurementsPiecewiseTestSuite1 ()
+  : TestSuite ("lte-ue-measurements-piecewise-1", SYSTEM)
+{
+  std::vector<Time> expectedTime;
+  std::vector<uint8_t> expectedRsrp;
+
+  // === Event A1 (serving cell becomes better than threshold) ===
+
+  // With very low threshold
+  LteRrcSap::ReportConfigEutra config;
+  config.triggerType = LteRrcSap::ReportConfigEutra::EVENT;
+  config.eventId = LteRrcSap::ReportConfigEutra::EVENT_A1;
+  config.threshold1.choice = LteRrcSap::ThresholdEutra::THRESHOLD_RSRP;
+  config.threshold1.range = 0;
+  config.triggerQuantity = LteRrcSap::ReportConfigEutra::RSRP;
+  config.reportInterval = LteRrcSap::ReportConfigEutra::MS120;
+  expectedTime.clear ();
+  expectedTime << 200 << 320 << 440 << 560 << 680 << 800 << 920 << 1040 << 1160 << 1280
+               << 1400 << 1520 << 1640 << 1760 << 1880 << 2000 << 2120;
+  expectedRsrp.clear ();
+  expectedRsrp << 67 << 67 << 57 << 57 << 66 << 47 << 47 << 66 << 66 << 57
+               << 51 << 51 << 47 << 47 << 51 << 57 << 57;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase1 ("Piecewise test case 1 - Event A1 with very low threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // With normal threshold
+  config.threshold1.range = 54;
+  expectedTime.clear ();
+  expectedTime << 200 << 320 << 440 << 560 << 680 << 1000 << 1120 << 1240 << 1360 << 2000
+               << 2120;
+  expectedRsrp.clear ();
+  expectedRsrp << 67 << 67 << 57 << 57 << 66 << 66 << 66 << 57 << 57 << 57
+               << 57;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase1 ("Piecewise test case 1 - Event A1 with normal threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // With short time-to-trigger
+  config.timeToTrigger = 64;
+  expectedTime.clear ();
+  expectedTime << 264 << 384 << 504 << 624 << 744 << 1064 << 1184 << 1304 << 1424 << 2064
+               << 2184;
+  expectedRsrp.clear ();
+  expectedRsrp << 67 << 67 << 57 << 66 << 66 << 66 << 66 << 57 << 51 << 57
+               << 57;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase1 ("Piecewise test case 1 - Event A1 with short time-to-trigger",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::QUICK);
+
+  // With long time-to-trigger
+  config.timeToTrigger = 128;
+  expectedTime.clear ();
+  expectedTime << 328 << 448 << 568 << 688 << 808 << 1128 << 1248 << 1368 << 1488 << 2128;
+  expectedRsrp.clear ();
+  expectedRsrp << 67 << 57 << 57 << 66 << 47 << 66 << 57 << 57 << 51 << 57;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase1 ("Piecewise test case 1 - Event A1 with long time-to-trigger",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // With super time-to-trigger
+  config.timeToTrigger = 256;
+  expectedTime.clear ();
+  expectedTime << 456 << 576 << 696 << 816 << 936 << 1056 << 1176 << 1296 << 1416 << 1536;
+  expectedRsrp.clear ();
+  expectedRsrp << 57 << 57 << 66 << 47 << 47 << 66 << 66 << 57 << 51 << 51;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase1 ("Piecewise test case 1 - Event A1 with super time-to-trigger",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // With hysteresis
+  config.hysteresis = 8;
+  config.timeToTrigger = 0;
+  expectedTime.clear ();
+  expectedTime << 200 << 320 << 440 << 560 << 680 << 1000 << 1120 << 1240 << 1360 << 1480
+               << 2200;
+  expectedRsrp.clear ();
+  expectedRsrp << 67 << 67 << 57 << 57 << 66 << 66 << 66 << 57 << 57 << 51
+               << 67;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase1 ("Piecewise test case 1 - Event A1 with hysteresis",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::QUICK);
+
+  // With very high threshold
+  config.threshold1.range = 97;
+  config.hysteresis = 0;
+  expectedTime.clear ();
+  expectedRsrp.clear ();
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase1 ("Piecewise test case 1 - Event A1 with very high threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::TAKES_FOREVER);
+
+  // === Event A2 (serving cell becomes worse than threshold) ===
+
+  // With very low threshold
+  config.eventId = LteRrcSap::ReportConfigEutra::EVENT_A2;
+  config.threshold1.range = 0;
+  expectedTime.clear ();
+  expectedRsrp.clear ();
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase1 ("Piecewise test case 1 - Event A2 with very low threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::TAKES_FOREVER);
+
+  // With normal threshold
+  config.threshold1.range = 54;
+  expectedTime.clear ();
+  expectedTime << 800 << 920 << 1400 << 1520 << 1640 << 1760 << 1880;
+  expectedRsrp.clear ();
+  expectedRsrp << 47 << 47 << 51 << 51 << 47 << 47 << 51;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase1 ("Piecewise test case 1 - Event A2 with normal threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::QUICK);
+
+  // With short time-to-trigger
+  config.timeToTrigger = 64;
+  expectedTime.clear ();
+  expectedTime << 864 << 984 << 1464 << 1584 << 1704 << 1824 << 1944;
+  expectedRsrp.clear ();
+  expectedRsrp << 47 << 47 << 51 << 51 << 47 << 51 << 51;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase1 ("Piecewise test case 1 - Event A2 with short time-to-trigger",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // With long time-to-trigger
+  config.timeToTrigger = 128;
+  expectedTime.clear ();
+  expectedTime << 928 << 1048 << 1528 << 1648 << 1768 << 1888 << 2008;
+  expectedRsrp.clear ();
+  expectedRsrp << 47 << 66 << 51 << 47 << 47 << 51 << 57;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase1 ("Piecewise test case 1 - Event A2 with long time-to-trigger",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::TAKES_FOREVER);
+
+  // With super time-to-trigger
+  config.timeToTrigger = 256;
+  expectedTime.clear ();
+  expectedTime << 1656 << 1776 << 1896 << 2016 << 2136;
+  expectedRsrp.clear ();
+  expectedRsrp << 47 << 47 << 51 << 57 << 57;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase1 ("Piecewise test case 1 - Event A2 with super time-to-trigger",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::QUICK);
+
+  // With hysteresis
+  config.hysteresis = 8;
+  config.timeToTrigger = 0;
+  expectedTime.clear ();
+  expectedTime << 800 << 920 << 1600 << 1720 << 1840 << 1960 << 2080;
+  expectedRsrp.clear ();
+  expectedRsrp << 47 << 47 << 47 << 47 << 51 << 51 << 57;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase1 ("Piecewise test case 1 - Event A2 with hysteresis",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // With very high threshold
+  config.threshold1.range = 97;
+  config.hysteresis = 0;
+  expectedTime.clear ();
+  expectedTime << 200 << 320 << 440 << 560 << 680 << 800 << 920 << 1040 << 1160 << 1280
+               << 1400 << 1520 << 1640 << 1760 << 1880 << 2000 << 2120;
+  expectedRsrp.clear ();
+  expectedRsrp << 67 << 67 << 57 << 57 << 66 << 47 << 47 << 66 << 66 << 57
+               << 51 << 51 << 47 << 47 << 51 << 57 << 57;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase1 ("Piecewise test case 1 - Event A2 with very high threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  /*
+   * Event A3, A4, and A5 are not tested intensively here because they depend on
+   * the existence of at least one neighbouring cell, which is not available in
+   * this configuration. Piecewise configuration #2 includes a neighbouring
+   * cell, hence more thorough tests on these events are performed there.
+   */
+
+  expectedTime.clear ();
+  expectedRsrp.clear ();
+
+  // === Event A3 (neighbour becomes offset better than PCell) ===
+
+  config.eventId = LteRrcSap::ReportConfigEutra::EVENT_A3;
+  config.a3Offset = 0;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase1 ("Piecewise test case 1 - Event A3",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // === Event A4 (neighbour becomes better than threshold) ===
+
+  config.eventId = LteRrcSap::ReportConfigEutra::EVENT_A4;
+  config.threshold1.range = 54;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase1 ("Piecewise test case 1 - Event A4",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // === Event A5 (PCell becomes worse than absolute threshold1 AND neighbour becomes better than another absolute threshold2) ===
+
+  config.eventId = LteRrcSap::ReportConfigEutra::EVENT_A5;
+  config.threshold2.range = 58;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase1 ("Piecewise test case 1 - Event A5",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+} // end of LteUeMeasurementsPiecewiseTestSuite1::LteUeMeasurementsPiecewiseTestSuite1
+
+static LteUeMeasurementsPiecewiseTestSuite1 lteUeMeasurementsPiecewiseTestSuite1;
+
+
+/*
+ * Test Case
+ */
+
+LteUeMeasurementsPiecewiseTestCase1::LteUeMeasurementsPiecewiseTestCase1 (
+  std::string name, LteRrcSap::ReportConfigEutra config,
+  std::vector<Time> expectedTime, std::vector<uint8_t> expectedRsrp)
+  : TestCase (name),
+    m_config (config),
+    m_expectedTime (expectedTime),
+    m_expectedRsrp (expectedRsrp)
+{
+  // input sanity check
+  uint16_t size = m_expectedTime.size ();
+
+  if (size != m_expectedRsrp.size ())
+    {
+      NS_FATAL_ERROR ("Vectors of expected results are not of the same size");
+    }
+
+  m_itExpectedTime = m_expectedTime.begin ();
+  m_itExpectedRsrp = m_expectedRsrp.begin ();
+
+  NS_LOG_INFO (this << " name=" << name);
+}
+
+LteUeMeasurementsPiecewiseTestCase1::~LteUeMeasurementsPiecewiseTestCase1 ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+LteUeMeasurementsPiecewiseTestCase1::DoRun ()
+{
+  NS_LOG_INFO (this << " " << GetName ());
+
+  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
+  lteHelper->SetAttribute ("PathlossModel",
+                           StringValue ("ns3::FriisSpectrumPropagationLossModel"));
+  lteHelper->SetAttribute ("UseIdealRrc", BooleanValue (true));
+
+  // Create Nodes: eNodeB and UE
+  NodeContainer enbNodes;
+  NodeContainer ueNodes;
+  enbNodes.Create (1);
+  ueNodes.Create (1);
+
+  /*
+   * The topology is the following:
+   *
+   * eNodeB     UE
+   *    |       |
+   *    x ----- x --------- x --------------- x ------------------- x
+   *      100 m |   200 m   |      300 m      |        400 m        |
+   *            |           |                 |                     |
+   *         VeryNear      Near              Far                 VeryFar
+   */
+
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  positionAlloc->Add (Vector (0.0, 0.0, 0.0)); // eNodeB
+  positionAlloc->Add (Vector (100.0, 0.0, 0.0)); // UE
+  MobilityHelper mobility;
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.SetPositionAllocator (positionAlloc);
+  mobility.Install (enbNodes);
+  mobility.Install (ueNodes);
+  m_ueMobility = ueNodes.Get (0)->GetObject<MobilityModel> ();
+
+  // Disable layer-3 filtering
+  Config::SetDefault ("ns3::LteEnbRrc::RsrpFilterCoefficient",
+                      UintegerValue (0));
+
+  // Create Devices and install them in the Nodes (eNB and UE)
+  NetDeviceContainer enbDevs;
+  NetDeviceContainer ueDevs;
+  lteHelper->SetSchedulerType ("ns3::RrFfMacScheduler");
+  lteHelper->SetSchedulerAttribute ("UlCqiFilter",
+                                    EnumValue (FfMacScheduler::PUSCH_UL_CQI));
+  enbDevs = lteHelper->InstallEnbDevice (enbNodes);
+  ueDevs = lteHelper->InstallUeDevice (ueNodes);
+
+  // Setup UE measurement configuration
+  Ptr<LteEnbRrc> enbRrc = enbDevs.Get (0)->GetObject<LteEnbNetDevice> ()->GetRrc ();
+  m_expectedMeasId = enbRrc->AddUeMeasReportConfig (m_config);
+
+  // Attach UE to eNodeB
+  lteHelper->Attach (ueDevs.Get (0), enbDevs.Get (0));
+
+  // Activate an EPS bearer
+  enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
+  EpsBearer bearer (q);
+  lteHelper->ActivateDataRadioBearer (ueDevs, bearer);
+
+  // Connect to trace sources
+  Config::Connect ("/NodeList/0/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
+                   MakeCallback (&LteUeMeasurementsPiecewiseTestCase1::RecvMeasurementReportCallback,
+                                 this));
+
+  /*
+   * Schedule "teleports"
+   *          0                   1                   2
+   *          +-------------------+-------------------+---------> time
+   * VeryNear |------  ----    ----                    --------
+   *     Near |                    ----            ----
+   *      Far |                        ----    ----
+   *  VeryFar |      --    ----            ----
+   */
+  Simulator::Schedule (MilliSeconds (301),
+                       &LteUeMeasurementsPiecewiseTestCase1::TeleportVeryFar, this);
+  Simulator::Schedule (MilliSeconds (401),
+                       &LteUeMeasurementsPiecewiseTestCase1::TeleportVeryNear, this);
+  Simulator::Schedule (MilliSeconds (601),
+                       &LteUeMeasurementsPiecewiseTestCase1::TeleportVeryFar, this);
+  Simulator::Schedule (MilliSeconds (801),
+                       &LteUeMeasurementsPiecewiseTestCase1::TeleportVeryNear, this);
+  Simulator::Schedule (MilliSeconds (1001),
+                       &LteUeMeasurementsPiecewiseTestCase1::TeleportNear, this);
+  Simulator::Schedule (MilliSeconds (1201),
+                       &LteUeMeasurementsPiecewiseTestCase1::TeleportFar, this);
+  Simulator::Schedule (MilliSeconds (1401),
+                       &LteUeMeasurementsPiecewiseTestCase1::TeleportVeryFar, this);
+  Simulator::Schedule (MilliSeconds (1601),
+                       &LteUeMeasurementsPiecewiseTestCase1::TeleportFar, this);
+  Simulator::Schedule (MilliSeconds (1801),
+                       &LteUeMeasurementsPiecewiseTestCase1::TeleportNear, this);
+  Simulator::Schedule (MilliSeconds (2001),
+                       &LteUeMeasurementsPiecewiseTestCase1::TeleportVeryNear, this);
+
+  // Run simulation
+  Simulator::Stop (Seconds (2.201));
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+} // end of void LteUeMeasurementsPiecewiseTestCase1::DoRun ()
+
+void
+LteUeMeasurementsPiecewiseTestCase1::DoTeardown ()
+{
+  NS_LOG_FUNCTION (this);
+  bool hasEnded = m_itExpectedTime == m_expectedTime.end ();
+  NS_TEST_ASSERT_MSG_EQ (hasEnded, true,
+                         "Reporting should have occurred at " << m_itExpectedTime->GetSeconds () << "s");
+  hasEnded = m_itExpectedRsrp == m_expectedRsrp.end ();
+  NS_ASSERT (hasEnded);
+}
+
+void
+LteUeMeasurementsPiecewiseTestCase1::RecvMeasurementReportCallback (
+  std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti,
+  LteRrcSap::MeasurementReport report)
+{
+  NS_LOG_FUNCTION (this << context);
+  NS_ASSERT (rnti == 1);
+  NS_ASSERT (cellId == 1);
+
+  if (report.measResults.measId == m_expectedMeasId)
+    {
+      // verifying the report completeness
+      LteRrcSap::MeasResults measResults = report.measResults;
+      NS_LOG_DEBUG (this << " rsrp=" << (uint16_t) measResults.rsrpResult
+                         << " (" << EutranMeasurementMapping::RsrpRange2Dbm (measResults.rsrpResult) << " dBm)"
+                         << " rsrq=" << (uint16_t) measResults.rsrqResult
+                         << " (" << EutranMeasurementMapping::RsrqRange2Db (measResults.rsrqResult) << " dB)");
+      NS_TEST_ASSERT_MSG_EQ (measResults.haveMeasResultNeighCells, false,
+                             "Report should not have neighboring cells information");
+      NS_TEST_ASSERT_MSG_EQ (measResults.measResultListEutra.size (), 0,
+                             "Unexpected report size");
+
+      bool hasEnded = m_itExpectedTime == m_expectedTime.end ();
+      NS_TEST_ASSERT_MSG_EQ (hasEnded, false,
+                             "Reporting should not have occurred at "
+                             << Simulator::Now ().GetSeconds () << "s");
+      if (!hasEnded)
+        {
+          hasEnded = m_itExpectedRsrp == m_expectedRsrp.end ();
+          NS_ASSERT (!hasEnded);
+
+          // using milliseconds to avoid floating-point comparison
+          uint64_t timeNowMs = Simulator::Now ().GetMilliSeconds ();
+          uint64_t timeExpectedMs = m_itExpectedTime->GetMilliSeconds ();
+          m_itExpectedTime++;
+
+          uint16_t observedRsrp = measResults.rsrpResult;
+          uint16_t referenceRsrp = *m_itExpectedRsrp;
+          m_itExpectedRsrp++;
+
+          NS_TEST_ASSERT_MSG_EQ (timeNowMs, timeExpectedMs,
+                                 "Reporting should not have occurred at this time");
+          NS_TEST_ASSERT_MSG_EQ (observedRsrp, referenceRsrp,
+                                 "The RSRP observed differs with the reference RSRP");
+        } // end of if (!hasEnded)
+
+    } // end of if (measResults.measId == m_expectedMeasId)
+
+} // end of LteUeMeasurementsPiecewiseTestCase1::RecvMeasurementReportCallback
+
+void
+LteUeMeasurementsPiecewiseTestCase1::TeleportVeryNear ()
+{
+  NS_LOG_FUNCTION (this);
+  m_ueMobility->SetPosition (Vector (100.0, 0.0, 0.0));
+}
+
+void
+LteUeMeasurementsPiecewiseTestCase1::TeleportNear ()
+{
+  NS_LOG_FUNCTION (this);
+  m_ueMobility->SetPosition (Vector (300.0, 0.0, 0.0));
+}
+
+void
+LteUeMeasurementsPiecewiseTestCase1::TeleportFar ()
+{
+  NS_LOG_FUNCTION (this);
+  m_ueMobility->SetPosition (Vector (600.0, 0.0, 0.0));
+}
+
+void
+LteUeMeasurementsPiecewiseTestCase1::TeleportVeryFar ()
+{
+  NS_LOG_FUNCTION (this);
+  m_ueMobility->SetPosition (Vector (1000.0, 0.0, 0.0));
+}
+
+
+// ===== LTE-UE-MEASUREMENTS-PIECEWISE-2 TEST SUITE ======================== //
+
+/*
+ * Test Suite
+ */
+
+LteUeMeasurementsPiecewiseTestSuite2::LteUeMeasurementsPiecewiseTestSuite2 ()
+  : TestSuite ("lte-ue-measurements-piecewise-2", SYSTEM)
+{
+  std::vector<Time> expectedTime;
+  std::vector<uint8_t> expectedRsrp;
+
+  /*
+   * Higher level of fullness/duration are given to Event A1 and A2 because they
+   * are supposed to be more intensively tested in Piecewise configuration #1.
+   */
+
+  // === Event A1 (serving cell becomes better than threshold) ===
+
+  // With very low threshold
+  LteRrcSap::ReportConfigEutra config;
+  config.triggerType = LteRrcSap::ReportConfigEutra::EVENT;
+  config.eventId = LteRrcSap::ReportConfigEutra::EVENT_A1;
+  config.threshold1.choice = LteRrcSap::ThresholdEutra::THRESHOLD_RSRP;
+  config.threshold1.range = 0;
+  config.triggerQuantity = LteRrcSap::ReportConfigEutra::RSRP;
+  config.reportInterval = LteRrcSap::ReportConfigEutra::MS240;
+  expectedTime.clear ();
+  expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
+  expectedRsrp.clear ();
+  expectedRsrp << 73 << 63 << 72 << 52 << 72 << 56 << 52 << 56 << 59;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A1 with very low threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // With normal threshold
+  config.threshold1.range = 58;
+  expectedTime.clear ();
+  expectedTime << 200 << 440 << 680 << 1000 << 1240 << 2000;
+  expectedRsrp.clear ();
+  expectedRsrp << 73 << 63 << 72 << 72 << 59 << 59;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A1 with normal threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::TAKES_FOREVER);
+
+  // With hysteresis
+  config.hysteresis = 6;
+  expectedTime.clear ();
+  expectedTime << 200 << 440 << 680 << 1000 << 1240 << 1480 << 2200;
+  expectedRsrp.clear ();
+  expectedRsrp << 73 << 63 << 72 << 72 << 59 << 56 << 72;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A1 with hysteresis",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // With very high threshold
+  config.threshold1.range = 97;
+  config.hysteresis = 0;
+  expectedTime.clear ();
+  expectedRsrp.clear ();
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A1 with very high threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::TAKES_FOREVER);
+
+  // === Event A2 (serving cell becomes worse than threshold) ===
+
+  // With very low threshold
+  config.eventId = LteRrcSap::ReportConfigEutra::EVENT_A2;
+  config.threshold1.range = 0;
+  expectedTime.clear ();
+  expectedRsrp.clear ();
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A2 with very low threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::TAKES_FOREVER);
+
+  // With normal threshold
+  config.threshold1.range = 58;
+  expectedTime.clear ();
+  expectedTime << 800 << 1400 << 1640 << 1880;
+  expectedRsrp.clear ();
+  expectedRsrp << 52 << 56 << 52 << 56;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A2 with normal threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::TAKES_FOREVER);
+
+  // With hysteresis
+  config.hysteresis = 6;
+  expectedTime.clear ();
+  expectedTime << 800 << 1600 << 1840 << 2080;
+  expectedRsrp.clear ();
+  expectedRsrp << 52 << 52 << 56 << 59;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A2 with hysteresis",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // With very high threshold
+  config.threshold1.range = 97;
+  config.hysteresis = 0;
+  expectedTime.clear ();
+  expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
+  expectedRsrp.clear ();
+  expectedRsrp << 73 << 63 << 72 << 52 << 72 << 56 << 52 << 56 << 59;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A2 with very high threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::TAKES_FOREVER);
+
+  // === Event A3 (neighbour becomes offset better than PCell) ===
+
+  // With positive offset
+  config.eventId = LteRrcSap::ReportConfigEutra::EVENT_A3;
+  config.threshold1.range = 0;
+  config.a3Offset = 7;
+  expectedTime.clear ();
+  expectedTime << 800 << 1600;
+  expectedRsrp.clear ();
+  expectedRsrp << 52 << 52;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A3 with positive offset",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::QUICK);
+
+  // With zero offset
+  config.a3Offset = 0;
+  expectedTime.clear ();
+  expectedTime << 800 << 1400 << 1640 << 1880;
+  expectedRsrp.clear ();
+  expectedRsrp << 52 << 56 << 52 << 56;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A3 with zero offset",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // With short time-to-trigger
+  config.timeToTrigger = 160;
+  expectedTime.clear ();
+  expectedTime << 960 << 1560 << 1800 << 2040;
+  expectedRsrp.clear ();
+  expectedRsrp << 52 << 56 << 56 << 59;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A3 with short time-to-trigger",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // With super time-to-trigger
+  config.timeToTrigger = 320;
+  expectedTime.clear ();
+  expectedTime << 1720 << 1960 << 2200;
+  expectedRsrp.clear ();
+  expectedRsrp << 52 << 56 << 72;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A3 with super time-to-trigger",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::QUICK);
+
+  // With hysteresis and reportOnLeave
+  config.hysteresis = 6;
+  config.reportOnLeave = true;
+  config.timeToTrigger = 0;
+  expectedTime.clear ();
+  expectedTime << 800 << 1000 << 1600 << 1840 << 2080 << 2200;
+  expectedRsrp.clear ();
+  expectedRsrp << 52 << 72 << 52 << 56 << 59 << 72;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A3 with hysteresis",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::QUICK);
+
+  // With negative offset
+  config.a3Offset = -7;
+  config.hysteresis = 0;
+  config.reportOnLeave = false;
+  expectedTime.clear ();
+  expectedTime << 400 << 800 << 1200 << 1440 << 1680 << 1920 << 2160;
+  expectedRsrp.clear ();
+  expectedRsrp << 63 << 52 << 59 << 56 << 52 << 56 << 59;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A3 with negative offset",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // === Event A4 (neighbour becomes better than threshold) ===
+
+  // With very low threshold
+  config.eventId = LteRrcSap::ReportConfigEutra::EVENT_A4;
+  config.threshold1.range = 0;
+  config.a3Offset = 0;
+  expectedTime.clear ();
+  expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
+  expectedRsrp.clear ();
+  expectedRsrp << 73 << 63 << 72 << 52 << 72 << 56 << 52 << 56 << 59;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A4 with very low threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::QUICK);
+
+  // With normal threshold
+  config.threshold1.range = 58;
+  expectedTime.clear ();
+  expectedTime << 400 << 800 << 1400 << 1640 << 1880;
+  expectedRsrp.clear ();
+  expectedRsrp << 63 << 52 << 56 << 52 << 56;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A4 with normal threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // With short time-to-trigger
+  config.timeToTrigger = 160;
+  expectedTime.clear ();
+  expectedTime << 560 << 960 << 1560 << 1800 << 2040;
+  expectedRsrp.clear ();
+  expectedRsrp << 63 << 52 << 56 << 56 << 59;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A4 with short time-to-trigger",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::QUICK);
+
+  // With super time-to-trigger
+  config.timeToTrigger = 320;
+  expectedTime.clear ();
+  expectedTime << 1720 << 1960 << 2200;
+  expectedRsrp.clear ();
+  expectedRsrp << 52 << 56 << 72;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A4 with super time-to-trigger",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::TAKES_FOREVER);
+
+  // With hysteresis
+  config.hysteresis = 6;
+  config.timeToTrigger = 0;
+  expectedTime.clear ();
+  expectedTime << 400 << 800 << 1600 << 1840 << 2080;
+  expectedRsrp.clear ();
+  expectedRsrp << 63 << 52 << 52 << 56 << 59;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A4 with hysteresis",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::QUICK);
+
+  // With very high threshold
+  config.threshold1.range = 97;
+  config.hysteresis = 0;
+  expectedTime.clear ();
+  expectedRsrp.clear ();
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A4 with very high threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::TAKES_FOREVER);
+
+  // === Event A5 (PCell becomes worse than absolute threshold1 AND neighbour becomes better than another absolute threshold2) ===
+
+  // With low-low threshold
+  config.eventId = LteRrcSap::ReportConfigEutra::EVENT_A5;
+  config.threshold1.range = 0;
+  config.threshold2.range = 0;
+  expectedTime.clear ();
+  expectedRsrp.clear ();
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A5 with low-low threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // With low-normal threshold
+  config.threshold2.range = 58;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A5 with low-normal threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::TAKES_FOREVER);
+
+  // With low-high threshold
+  config.threshold2.range = 97;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A5 with low-high threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::TAKES_FOREVER);
+
+  // With normal-low threshold
+  config.threshold1.range = 58;
+  config.threshold2.range = 0;
+  expectedTime.clear ();
+  expectedTime << 800 << 1400 << 1640 << 1880;
+  expectedRsrp.clear ();
+  expectedRsrp << 52 << 56 << 52 << 56;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A5 with normal-low threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // With normal-normal threshold
+  config.threshold2.range = 58;
+  expectedTime.clear ();
+  expectedTime << 800 << 1400 << 1640 << 1880;
+  expectedRsrp.clear ();
+  expectedRsrp << 52 << 56 << 52 << 56;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A5 with normal-normal threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // With short time-to-trigger
+  config.timeToTrigger = 160;
+  expectedTime.clear ();
+  expectedTime << 960 << 1560 << 1800 << 2040;
+  expectedRsrp.clear ();
+  expectedRsrp << 52 << 56 << 56 << 59;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A5 with short time-to-trigger",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::TAKES_FOREVER);
+
+  // With super time-to-trigger
+  config.timeToTrigger = 320;
+  expectedTime.clear ();
+  expectedTime << 1720 << 1960 << 2200;
+  expectedRsrp.clear ();
+  expectedRsrp << 52 << 56 << 72;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A5 with super time-to-trigger",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::QUICK);
+
+  // With hysteresis
+  config.hysteresis = 6;
+  config.timeToTrigger = 0;
+  expectedTime.clear ();
+  expectedTime << 800 << 1600 << 1840 << 2080;
+  expectedRsrp.clear ();
+  expectedRsrp << 52 << 52 << 56 << 59;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A5 with hysteresis",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::QUICK);
+
+  // With normal-high threshold
+  config.threshold2.range = 97;
+  config.hysteresis = 0;
+  expectedTime.clear ();
+  expectedRsrp.clear ();
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A5 with normal-high threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::TAKES_FOREVER);
+
+  // With high-low threshold
+  config.threshold1.range = 97;
+  config.threshold2.range = 0;
+  expectedTime.clear ();
+  expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
+  expectedRsrp.clear ();
+  expectedRsrp << 73 << 63 << 72 << 52 << 72 << 56 << 52 << 56 << 59;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A5 with high-low threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+  // With high-normal threshold
+  config.threshold2.range = 58;
+  expectedTime.clear ();
+  expectedTime << 400 << 800 << 1400 << 1640 << 1880;
+  expectedRsrp.clear ();
+  expectedRsrp << 63 << 52 << 56 << 52 << 56;
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A5 with high-normal threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::TAKES_FOREVER);
+
+  // With high-high threshold
+  config.threshold2.range = 97;
+  expectedTime.clear ();
+  expectedRsrp.clear ();
+  AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A5 with high-high threshold",
+                                                        config, expectedTime, expectedRsrp),
+               TestCase::EXTENSIVE);
+
+} // end of LteUeMeasurementsPiecewiseTestSuite2::LteUeMeasurementsPiecewiseTestSuite2
+
+static LteUeMeasurementsPiecewiseTestSuite2 lteUeMeasurementsPiecewiseTestSuite2;
+
+
+/*
+ * Test Case
+ */
+
+LteUeMeasurementsPiecewiseTestCase2::LteUeMeasurementsPiecewiseTestCase2 (
+  std::string name, LteRrcSap::ReportConfigEutra config,
+  std::vector<Time> expectedTime, std::vector<uint8_t> expectedRsrp)
+  : TestCase (name),
+    m_config (config),
+    m_expectedTime (expectedTime),
+    m_expectedRsrp (expectedRsrp)
+{
+  // input sanity check
+  uint16_t size = m_expectedTime.size ();
+
+  if (size != m_expectedRsrp.size ())
+    {
+      NS_FATAL_ERROR ("Vectors of expected results are not of the same size");
+    }
+
+  m_itExpectedTime = m_expectedTime.begin ();
+  m_itExpectedRsrp = m_expectedRsrp.begin ();
+
+  NS_LOG_INFO (this << " name=" << name);
+}
+
+LteUeMeasurementsPiecewiseTestCase2::~LteUeMeasurementsPiecewiseTestCase2 ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+LteUeMeasurementsPiecewiseTestCase2::DoRun ()
+{
+  NS_LOG_INFO (this << " " << GetName ());
+
+  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
+  lteHelper->SetAttribute ("PathlossModel",
+                           StringValue ("ns3::FriisSpectrumPropagationLossModel"));
+  lteHelper->SetAttribute ("UseIdealRrc", BooleanValue (true));
+
+  // Create Nodes: eNodeB and UE
+  NodeContainer enbNodes;
+  NodeContainer ueNodes;
+  enbNodes.Create (2);
+  ueNodes.Create (1);
+
+  /*
+   * The topology is the following:
+   *
+   * eNodeB    UE                                                eNodeB
+   *    |      |                                                    |
+   *    x ---- x --------------- x ------- x --------------- x ---- x
+   *      50 m |      200 m      |  100 m  |      200 m      | 50 m
+   *           |                 |         |                 |
+   *        VeryNear            Near      Far             VeryFar
+   */
+
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  positionAlloc->Add (Vector (0.0, 0.0, 0.0)); // Serving eNodeB
+  positionAlloc->Add (Vector (600.0, 0.0, 0.0)); // Neighbour eNodeB
+  positionAlloc->Add (Vector (50.0, 0.0, 0.0)); // UE
+  MobilityHelper mobility;
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.SetPositionAllocator (positionAlloc);
+  mobility.Install (enbNodes);
+  mobility.Install (ueNodes);
+  m_ueMobility = ueNodes.Get (0)->GetObject<MobilityModel> ();
+
+  // Disable layer-3 filtering
+  Config::SetDefault ("ns3::LteEnbRrc::RsrpFilterCoefficient",
+                      UintegerValue (0));
+
+  // Create Devices and install them in the Nodes (eNB and UE)
+  NetDeviceContainer enbDevs;
+  NetDeviceContainer ueDevs;
+  lteHelper->SetSchedulerType ("ns3::RrFfMacScheduler");
+  lteHelper->SetSchedulerAttribute ("UlCqiFilter",
+                                    EnumValue (FfMacScheduler::PUSCH_UL_CQI));
+  enbDevs = lteHelper->InstallEnbDevice (enbNodes);
+  ueDevs = lteHelper->InstallUeDevice (ueNodes);
+
+  // Setup UE measurement configuration in serving cell
+  Ptr<LteEnbRrc> enbRrc1 = enbDevs.Get (0)->GetObject<LteEnbNetDevice> ()->GetRrc ();
+  m_expectedMeasId = enbRrc1->AddUeMeasReportConfig (m_config);
+
+  // Disable handover in neighbour cell
+  Ptr<LteEnbRrc> enbRrc2 = enbDevs.Get (1)->GetObject<LteEnbNetDevice> ()->GetRrc ();
+  enbRrc2->SetAttribute ("AdmitHandoverRequest", BooleanValue (false));
+
+  // Attach UE to serving eNodeB
+  lteHelper->Attach (ueDevs.Get (0), enbDevs.Get (0));
+
+  // Activate an EPS bearer
+  enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
+  EpsBearer bearer (q);
+  lteHelper->ActivateDataRadioBearer (ueDevs, bearer);
+
+  // Connect to trace sources in serving eNodeB
+  Config::Connect ("/NodeList/0/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
+                   MakeCallback (&LteUeMeasurementsPiecewiseTestCase2::RecvMeasurementReportCallback,
+                                 this));
+
+  /*
+   * Schedule "teleports"
+   *          0                   1                   2
+   *          +-------------------+-------------------+---------> time
+   * VeryNear |------  ----    ----                    --------
+   *     Near |                    ----            ----
+   *      Far |                        ----    ----
+   *  VeryFar |      --    ----            ----
+   */
+  Simulator::Schedule (MilliSeconds (301),
+                       &LteUeMeasurementsPiecewiseTestCase2::TeleportVeryFar, this);
+  Simulator::Schedule (MilliSeconds (401),
+                       &LteUeMeasurementsPiecewiseTestCase2::TeleportVeryNear, this);
+  Simulator::Schedule (MilliSeconds (601),
+                       &LteUeMeasurementsPiecewiseTestCase2::TeleportVeryFar, this);
+  Simulator::Schedule (MilliSeconds (801),
+                       &LteUeMeasurementsPiecewiseTestCase2::TeleportVeryNear, this);
+  Simulator::Schedule (MilliSeconds (1001),
+                       &LteUeMeasurementsPiecewiseTestCase2::TeleportNear, this);
+  Simulator::Schedule (MilliSeconds (1201),
+                       &LteUeMeasurementsPiecewiseTestCase2::TeleportFar, this);
+  Simulator::Schedule (MilliSeconds (1401),
+                       &LteUeMeasurementsPiecewiseTestCase2::TeleportVeryFar, this);
+  Simulator::Schedule (MilliSeconds (1601),
+                       &LteUeMeasurementsPiecewiseTestCase2::TeleportFar, this);
+  Simulator::Schedule (MilliSeconds (1801),
+                       &LteUeMeasurementsPiecewiseTestCase2::TeleportNear, this);
+  Simulator::Schedule (MilliSeconds (2001),
+                       &LteUeMeasurementsPiecewiseTestCase2::TeleportVeryNear, this);
+
+  // Run simulation
+  Simulator::Stop (Seconds (2.201));
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+} // end of void LteUeMeasurementsPiecewiseTestCase2::DoRun ()
+
+void
+LteUeMeasurementsPiecewiseTestCase2::DoTeardown ()
+{
+  NS_LOG_FUNCTION (this);
+  bool hasEnded = m_itExpectedTime == m_expectedTime.end ();
+  NS_TEST_ASSERT_MSG_EQ (hasEnded, true,
+                         "Reporting should have occurred at " << m_itExpectedTime->GetSeconds () << "s");
+  hasEnded = m_itExpectedRsrp == m_expectedRsrp.end ();
+  NS_ASSERT (hasEnded);
+}
+
+void
+LteUeMeasurementsPiecewiseTestCase2::RecvMeasurementReportCallback (
+  std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti,
+  LteRrcSap::MeasurementReport report)
+{
+  NS_LOG_FUNCTION (this << context);
+  NS_ASSERT (rnti == 1);
+  NS_ASSERT (cellId == 1);
+
+  if (report.measResults.measId == m_expectedMeasId)
+    {
+      // verifying the report completeness
+      LteRrcSap::MeasResults measResults = report.measResults;
+      NS_LOG_DEBUG (this << " Serving cellId=" << cellId
+                         << " rsrp=" << (uint16_t) measResults.rsrpResult
+                         << " (" << EutranMeasurementMapping::RsrpRange2Dbm (measResults.rsrpResult) << " dBm)"
+                         << " rsrq=" << (uint16_t) measResults.rsrqResult
+                         << " (" << EutranMeasurementMapping::RsrqRange2Db (measResults.rsrqResult) << " dB)");
+
+      // verifying reported best cells
+      if (measResults.measResultListEutra.size () == 0)
+        {
+          NS_TEST_ASSERT_MSG_EQ (measResults.haveMeasResultNeighCells, false,
+                                 "Unexpected report content");
+        }
+      else
+        {
+          NS_TEST_ASSERT_MSG_EQ (measResults.haveMeasResultNeighCells, true,
+                                 "Unexpected report content");
+          std::list<LteRrcSap::MeasResultEutra>::iterator it = measResults.measResultListEutra.begin ();
+          NS_ASSERT (it != measResults.measResultListEutra.end ());
+          NS_ASSERT (it->physCellId == 2);
+          NS_TEST_ASSERT_MSG_EQ (it->haveCgiInfo, false,
+                                 "Report contains cgi-info, which is not supported");
+          NS_TEST_ASSERT_MSG_EQ (it->haveRsrpResult, true,
+                                 "Report does not contain measured RSRP result");
+          NS_TEST_ASSERT_MSG_EQ (it->haveRsrqResult, true,
+                                 "Report does not contain measured RSRQ result");
+          NS_LOG_DEBUG (this << " Neighbour cellId=" << it->physCellId
+                             << " rsrp=" << (uint16_t) it->rsrpResult
+                             << " (" << EutranMeasurementMapping::RsrpRange2Dbm (it->rsrpResult) << " dBm)"
+                             << " rsrq=" << (uint16_t) it->rsrqResult
+                             << " (" << EutranMeasurementMapping::RsrqRange2Db (it->rsrqResult) << " dB)");
+
+        } // end of else of if (measResults.measResultListEutra.size () == 0)
+
+      // verifying the report timing
+      bool hasEnded = m_itExpectedTime == m_expectedTime.end ();
+      NS_TEST_ASSERT_MSG_EQ (hasEnded, false,
+                             "Reporting should not have occurred at "
+                             << Simulator::Now ().GetSeconds () << "s");
+      if (!hasEnded)
+        {
+          hasEnded = m_itExpectedRsrp == m_expectedRsrp.end ();
+          NS_ASSERT (!hasEnded);
+
+          // using milliseconds to avoid floating-point comparison
+          uint64_t timeNowMs = Simulator::Now ().GetMilliSeconds ();
+          uint64_t timeExpectedMs = m_itExpectedTime->GetMilliSeconds ();
+          m_itExpectedTime++;
+
+          uint16_t observedRsrp = measResults.rsrpResult;
+          uint16_t referenceRsrp = *m_itExpectedRsrp;
+          m_itExpectedRsrp++;
+
+          NS_TEST_ASSERT_MSG_EQ (timeNowMs, timeExpectedMs,
+                                 "Reporting should not have occurred at this time");
+          NS_TEST_ASSERT_MSG_EQ (observedRsrp, referenceRsrp,
+                                 "The RSRP observed differs with the reference RSRP");
+
+        } // end of if (!hasEnded)
+
+    } // end of if (report.measResults.measId == m_expectedMeasId)
+
+} // end of void LteUeMeasurementsPiecewiseTestCase2::RecvMeasurementReportCallback
+
+void
+LteUeMeasurementsPiecewiseTestCase2::TeleportVeryNear ()
+{
+  NS_LOG_FUNCTION (this);
+  m_ueMobility->SetPosition (Vector (50.0, 0.0, 0.0));
+}
+
+void
+LteUeMeasurementsPiecewiseTestCase2::TeleportNear ()
+{
+  NS_LOG_FUNCTION (this);
+  m_ueMobility->SetPosition (Vector (250.0, 0.0, 0.0));
+}
+
+void
+LteUeMeasurementsPiecewiseTestCase2::TeleportFar ()
+{
+  NS_LOG_FUNCTION (this);
+  m_ueMobility->SetPosition (Vector (350.0, 0.0, 0.0));
+}
+
+void
+LteUeMeasurementsPiecewiseTestCase2::TeleportVeryFar ()
+{
+  NS_LOG_FUNCTION (this);
+  m_ueMobility->SetPosition (Vector (550.0, 0.0, 0.0));
+}
+
+
+// ===== LTE-UE-MEASUREMENTS-HANDOVER TEST SUITE =========================== //
+
+/*
+ * Test Suite
+ */
+
+LteUeMeasurementsHandoverTestSuite::LteUeMeasurementsHandoverTestSuite ()
+  : TestSuite ("lte-ue-measurements-handover", SYSTEM)
+{
+  std::list<LteRrcSap::ReportConfigEutra> sourceConfigList;
+  std::list<LteRrcSap::ReportConfigEutra> targetConfigList;
+  std::vector<Time> expectedTime;
+  std::vector<uint8_t> expectedRsrp;
+
+  LteRrcSap::ReportConfigEutra sourceConfig;
+  sourceConfig.triggerType = LteRrcSap::ReportConfigEutra::EVENT;
+  sourceConfig.eventId = LteRrcSap::ReportConfigEutra::EVENT_A1;
+  sourceConfig.threshold1.choice = LteRrcSap::ThresholdEutra::THRESHOLD_RSRP;
+  sourceConfig.threshold1.range = 0;
+  sourceConfig.triggerQuantity = LteRrcSap::ReportConfigEutra::RSRP;
+  sourceConfig.reportInterval = LteRrcSap::ReportConfigEutra::MS240;
+  sourceConfigList.push_back (sourceConfig);
+
+  LteRrcSap::ReportConfigEutra targetConfig;
+  targetConfig.triggerType = LteRrcSap::ReportConfigEutra::EVENT;
+  targetConfig.eventId = LteRrcSap::ReportConfigEutra::EVENT_A1;
+  targetConfig.threshold1.choice = LteRrcSap::ThresholdEutra::THRESHOLD_RSRP;
+  targetConfig.threshold1.range = 0;
+  targetConfig.triggerQuantity = LteRrcSap::ReportConfigEutra::RSRP;
+  targetConfig.reportInterval = LteRrcSap::ReportConfigEutra::MS240;
+  targetConfigList.push_back (targetConfig);
+
+  // === Report interval difference ===
+
+  // decreasing report interval
+  sourceConfigList.front ().reportInterval = LteRrcSap::ReportConfigEutra::MS480;
+  targetConfigList.front ().reportInterval = LteRrcSap::ReportConfigEutra::MS240;
+  expectedTime.clear ();
+  expectedTime << 200 << 680 << 1200 << 1440 << 1680 << 1920;
+  expectedRsrp.clear ();
+  expectedRsrp << 55 << 55 << 53 << 53 << 53 << 53;
+  AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - decreasing report interval",
+                                                      sourceConfigList, targetConfigList,
+                                                      expectedTime, expectedRsrp,
+                                                      Seconds (2)),
+               TestCase::TAKES_FOREVER);
+
+  // increasing report interval
+  sourceConfigList.front ().reportInterval = LteRrcSap::ReportConfigEutra::MS120;
+  targetConfigList.front ().reportInterval = LteRrcSap::ReportConfigEutra::MS640;
+  expectedTime.clear ();
+  expectedTime << 200 << 320 << 440 << 560 << 680 << 800 << 920 << 1200 << 1840;
+  expectedRsrp.clear ();
+  expectedRsrp << 55 << 55 << 55 << 55 << 55 << 55 << 55 << 53 << 53;
+  AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - increasing report interval",
+                                                      sourceConfigList, targetConfigList,
+                                                      expectedTime, expectedRsrp,
+                                                      Seconds (2)),
+               TestCase::QUICK);
+
+  // === Event difference ===
+
+  sourceConfigList.front ().reportInterval = LteRrcSap::ReportConfigEutra::MS240;
+  targetConfigList.front ().reportInterval = LteRrcSap::ReportConfigEutra::MS240;
+  sourceConfigList.front ().threshold1.range = 54;
+  sourceConfigList.front ().threshold2.range = 54;
+  sourceConfigList.front ().a3Offset = 1;
+  targetConfigList.front ().threshold1.range = 54;
+  targetConfigList.front ().threshold2.range = 54;
+  targetConfigList.front ().a3Offset = 1;
+
+  // Event A1 to Event A2
+  sourceConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A1;
+  targetConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A2;
+  expectedTime.clear ();
+  expectedTime << 200 << 440 << 680 << 920 << 1200 << 1440 << 1680 << 1920;
+  expectedRsrp.clear ();
+  expectedRsrp << 55 << 55 << 55 << 55 << 53 << 53 << 53 << 53;
+  AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A1 to Event A2",
+                                                      sourceConfigList, targetConfigList,
+                                                      expectedTime, expectedRsrp,
+                                                      Seconds (2)),
+               TestCase::EXTENSIVE);
+
+  // Event A2 to Event A1
+  sourceConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A2;
+  targetConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A1;
+  expectedTime.clear ();
+  expectedRsrp.clear ();
+  AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A2 to Event A1",
+                                                      sourceConfigList, targetConfigList,
+                                                      expectedTime, expectedRsrp,
+                                                      Seconds (2)),
+               TestCase::TAKES_FOREVER);
+
+  // Event A3 to Event A4
+  sourceConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A3;
+  targetConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A4;
+  expectedTime.clear ();
+  expectedTime << 1200 << 1440 << 1680 << 1920;
+  expectedRsrp.clear ();
+  expectedRsrp << 53 << 53 << 53 << 53;
+  AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A3 to Event A4",
+                                                      sourceConfigList, targetConfigList,
+                                                      expectedTime, expectedRsrp,
+                                                      Seconds (2)),
+               TestCase::TAKES_FOREVER);
+
+  // Event A4 to Event A3
+  sourceConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A4;
+  targetConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A3;
+  expectedTime.clear ();
+  expectedTime << 1200 << 1440 << 1680 << 1920;
+  expectedRsrp.clear ();
+  expectedRsrp << 53 << 53 << 53 << 53;
+  AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A4 to Event A3",
+                                                      sourceConfigList, targetConfigList,
+                                                      expectedTime, expectedRsrp,
+                                                      Seconds (2)),
+               TestCase::QUICK);
+
+  // Event A2 to Event A3
+  sourceConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A2;
+  targetConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A3;
+  expectedTime.clear ();
+  expectedTime << 1200 << 1440 << 1680 << 1920;
+  expectedRsrp.clear ();
+  expectedRsrp << 53 << 53 << 53 << 53;
+  AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A2 to Event A3",
+                                                      sourceConfigList, targetConfigList,
+                                                      expectedTime, expectedRsrp,
+                                                      Seconds (2)),
+               TestCase::EXTENSIVE);
+
+  // Event A3 to Event A2
+  sourceConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A3;
+  targetConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A2;
+  expectedTime.clear ();
+  expectedTime << 1200 << 1440 << 1680 << 1920;
+  expectedRsrp.clear ();
+  expectedRsrp << 53 << 53 << 53 << 53;
+  AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A3 to Event A2",
+                                                      sourceConfigList, targetConfigList,
+                                                      expectedTime, expectedRsrp,
+                                                      Seconds (2)),
+               TestCase::TAKES_FOREVER);
+
+  // Event A4 to Event A5
+  sourceConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A4;
+  targetConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A5;
+  expectedTime.clear ();
+  expectedTime << 1200 << 1440 << 1680 << 1920;
+  expectedRsrp.clear ();
+  expectedRsrp << 53 << 53 << 53 << 53;
+  AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A4 to Event A5",
+                                                      sourceConfigList, targetConfigList,
+                                                      expectedTime, expectedRsrp,
+                                                      Seconds (2)),
+               TestCase::TAKES_FOREVER);
+
+  // Event A5 to Event A4
+  sourceConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A5;
+  targetConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A4;
+  expectedTime.clear ();
+  expectedTime << 1200 << 1440 << 1680 << 1920;
+  expectedRsrp.clear ();
+  expectedRsrp << 53 << 53 << 53 << 53;
+  AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A5 to Event A4",
+                                                      sourceConfigList, targetConfigList,
+                                                      expectedTime, expectedRsrp,
+                                                      Seconds (2)),
+               TestCase::EXTENSIVE);
+
+  // === Threshold/offset difference ===
+
+  sourceConfigList.front ().threshold1.range = 52;
+  targetConfigList.front ().threshold1.range = 56;
+
+  // Event A1
+  sourceConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A1;
+  targetConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A1;
+  expectedTime.clear ();
+  expectedTime << 200 << 440 << 680 << 920;
+  expectedRsrp.clear ();
+  expectedRsrp << 55 << 55 << 55 << 55;
+  AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A1 threshold difference",
+                                                      sourceConfigList, targetConfigList,
+                                                      expectedTime, expectedRsrp,
+                                                      Seconds (2)),
+               TestCase::EXTENSIVE);
+
+  // Event A2
+  sourceConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A2;
+  targetConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A2;
+  expectedTime.clear ();
+  expectedTime << 1200 << 1440 << 1680 << 1920;
+  expectedRsrp.clear ();
+  expectedRsrp << 53 << 53 << 53 << 53;
+  AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A2 threshold difference",
+                                                      sourceConfigList, targetConfigList,
+                                                      expectedTime, expectedRsrp,
+                                                      Seconds (2)),
+               TestCase::QUICK);
+
+  // Event A3
+  sourceConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A3;
+  sourceConfigList.front ().a3Offset = -30;
+  targetConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A3;
+  targetConfigList.front ().a3Offset = 30;
+  expectedTime.clear ();
+  expectedTime << 200 << 440 << 680 << 920;
+  expectedRsrp.clear ();
+  expectedRsrp << 55 << 55 << 55 << 55;
+  AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A3 offset difference",
+                                                      sourceConfigList, targetConfigList,
+                                                      expectedTime, expectedRsrp,
+                                                      Seconds (2)),
+               TestCase::QUICK);
+
+  // Event A4
+  sourceConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A4;
+  targetConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A4;
+  expectedTime.clear ();
+  expectedTime << 200 << 440 << 680 << 920;
+  expectedRsrp.clear ();
+  expectedRsrp << 55 << 55 << 55 << 55;
+  AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A4 threshold difference",
+                                                      sourceConfigList, targetConfigList,
+                                                      expectedTime, expectedRsrp,
+                                                      Seconds (2)),
+               TestCase::EXTENSIVE);
+
+  // Event A5
+  sourceConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A5;
+  sourceConfigList.front ().threshold2.range = 52;
+  targetConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A5;
+  targetConfigList.front ().threshold2.range = 56;
+  expectedTime.clear ();
+  expectedRsrp.clear ();
+  AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A5 threshold difference",
+                                                      sourceConfigList, targetConfigList,
+                                                      expectedTime, expectedRsrp,
+                                                      Seconds (2)),
+               TestCase::EXTENSIVE);
+
+  // === Time-to-trigger (TTT) difference ===
+
+  sourceConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A1;
+  sourceConfigList.front ().a3Offset = 1;
+  sourceConfigList.front ().threshold1.range = 0;
+  sourceConfigList.front ().threshold2.range = 0;
+  targetConfigList.front ().eventId = LteRrcSap::ReportConfigEutra::EVENT_A1;
+  targetConfigList.front ().a3Offset = 1;
+  targetConfigList.front ().threshold1.range = 0;
+  targetConfigList.front ().threshold2.range = 0;
+
+  // decreasing time-to-trigger (short duration)
+  sourceConfigList.front ().timeToTrigger = 1024;
+  targetConfigList.front ().timeToTrigger = 100;
+  expectedTime.clear ();
+  expectedTime << 1300 << 1540 << 1780;
+  expectedRsrp.clear ();
+  expectedRsrp << 53 << 53 << 53;
+  AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - decreasing TTT (short)",
+                                                      sourceConfigList, targetConfigList,
+                                                      expectedTime, expectedRsrp,
+                                                      Seconds (2)),
+               TestCase::QUICK);
+
+  // decreasing time-to-trigger (longer duration)
+  sourceConfigList.front ().timeToTrigger = 1024;
+  targetConfigList.front ().timeToTrigger = 640;
+  expectedTime.clear ();
+  expectedTime << 1224 << 1464 << 1704 << 1944 << 2840 << 3080 << 3320 << 3560 << 3800 << 4040;
+  expectedRsrp.clear ();
+  expectedRsrp << 55 << 55 << 55 << 55 << 53 << 53 << 53 << 53 << 53 << 53;
+  AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - decreasing TTT (long)",
+                                                      sourceConfigList, targetConfigList,
+                                                      expectedTime, expectedRsrp,
+                                                      Seconds (4.2)),
+               TestCase::EXTENSIVE);
+
+} // end of LteUeMeasurementsHandoverTestSuite::LteUeMeasurementsHandoverTestSuite
+
+static LteUeMeasurementsHandoverTestSuite lteUeMeasurementsHandoverTestSuite;
+
+
+/*
+ * Test Case
+ */
+
+LteUeMeasurementsHandoverTestCase::LteUeMeasurementsHandoverTestCase (
+  std::string name,
+  std::list<LteRrcSap::ReportConfigEutra> sourceConfigList,
+  std::list<LteRrcSap::ReportConfigEutra> targetConfigList,
+  std::vector<Time> expectedTime, std::vector<uint8_t> expectedRsrp,
+  Time duration)
+  : TestCase (name),
+    m_sourceConfigList (sourceConfigList),
+    m_targetConfigList (targetConfigList),
+    m_expectedTime (expectedTime),
+    m_expectedRsrp (expectedRsrp),
+    m_duration (duration)
+{
+  // input sanity check
+  uint16_t size = m_expectedTime.size ();
+
+  if (size != m_expectedRsrp.size ())
+    {
+      NS_FATAL_ERROR ("Vectors of expected results are not of the same size");
+    }
+
+  m_itExpectedTime = m_expectedTime.begin ();
+  m_itExpectedRsrp = m_expectedRsrp.begin ();
+
+  NS_LOG_INFO (this << " name=" << name);
+}
+
+LteUeMeasurementsHandoverTestCase::~LteUeMeasurementsHandoverTestCase ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+LteUeMeasurementsHandoverTestCase::DoRun ()
+{
+  NS_LOG_INFO (this << " " << GetName ());
+
+  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
+  Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper> ();
+  lteHelper->SetEpcHelper (epcHelper);
+  lteHelper->SetAttribute ("PathlossModel",
+                           StringValue ("ns3::FriisSpectrumPropagationLossModel"));
+  lteHelper->SetAttribute ("UseIdealRrc", BooleanValue (true));
+
+  // Create Nodes: eNodeB and UE
+  NodeContainer enbNodes;
+  NodeContainer ueNodes;
+  enbNodes.Create (2);
+  ueNodes.Create (1);
+
+  /*
+   * The topology is the following:
+   *
+   * eNodeB                   UE                     eNodeB
+   *    |                     |                         |
+   *    x ------------------- x ----------------------- x
+   *             400 m                   500 m
+   */
+
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  positionAlloc->Add (Vector (0.0, 0.0, 0.0)); // Source eNodeB
+  positionAlloc->Add (Vector (900.0, 0.0, 0.0)); // Target eNodeB
+  positionAlloc->Add (Vector (400.0, 0.0, 0.0)); // UE
+  MobilityHelper mobility;
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.SetPositionAllocator (positionAlloc);
+  mobility.Install (enbNodes);
+  mobility.Install (ueNodes);
+
+  // Create P-GW node
+  Ptr<Node> pgw = epcHelper->GetPgwNode ();
+
+  // Create a single RemoteHost
+  NodeContainer remoteHostContainer;
+  remoteHostContainer.Create (1);
+  Ptr<Node> remoteHost = remoteHostContainer.Get (0);
+  InternetStackHelper internet;
+  internet.Install (remoteHostContainer);
+
+  // Create the Internet
+  PointToPointHelper p2ph;
+  p2ph.SetDeviceAttribute ("DataRate", DataRateValue (DataRate ("100Gb/s")));
+  p2ph.SetDeviceAttribute ("Mtu", UintegerValue (1500));
+  p2ph.SetChannelAttribute ("Delay", TimeValue (Seconds (0.010)));
+  NetDeviceContainer internetDevices = p2ph.Install (pgw, remoteHost);
+  Ipv4AddressHelper ipv4h;
+  ipv4h.SetBase ("1.0.0.0", "255.0.0.0");
+  Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign (internetDevices);
+
+  // Routing of the Internet Host (towards the LTE network)
+  Ipv4StaticRoutingHelper ipv4RoutingHelper;
+  Ptr<Ipv4StaticRouting> remoteHostStaticRouting = ipv4RoutingHelper.GetStaticRouting (remoteHost->GetObject<Ipv4> ());
+  remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);
+
+  // Enable layer-3 filtering
+  Config::SetDefault ("ns3::LteEnbRrc::RsrpFilterCoefficient",
+                      UintegerValue (4));
+
+  // Disable control channel error model
+  Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled",
+                      BooleanValue (false));
+
+  // Create Devices and install them in the Nodes (eNB and UE)
+  NetDeviceContainer enbDevs;
+  NetDeviceContainer ueDevs;
+  enbDevs = lteHelper->InstallEnbDevice (enbNodes);
+  ueDevs = lteHelper->InstallUeDevice (ueNodes);
+
+  // Setup UE measurement configuration in eNodeBs
+  uint8_t measId;
+  std::list<LteRrcSap::ReportConfigEutra>::const_iterator itReportConfig;
+  Ptr<LteEnbRrc> enbRrc1 = enbDevs.Get (0)->GetObject<LteEnbNetDevice> ()->GetRrc ();
+  Ptr<LteEnbRrc> enbRrc2 = enbDevs.Get (1)->GetObject<LteEnbNetDevice> ()->GetRrc ();
+
+  for (itReportConfig = m_sourceConfigList.begin ();
+       itReportConfig != m_sourceConfigList.end (); itReportConfig++)
+    {
+      measId = enbRrc1->AddUeMeasReportConfig (*itReportConfig);
+      m_expectedSourceCellMeasId.insert (measId);
+    }
+
+  for (itReportConfig = m_targetConfigList.begin ();
+       itReportConfig != m_targetConfigList.end (); itReportConfig++)
+    {
+      measId = enbRrc2->AddUeMeasReportConfig (*itReportConfig);
+      m_expectedTargetCellMeasId.insert (measId);
+    }
+
+  // Install the IP stack on the UEs
+  internet.Install (ueNodes);
+  Ipv4InterfaceContainer ueIpIfaces;
+  ueIpIfaces = 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 UE to serving eNodeB
+  lteHelper->Attach (ueDevs.Get (0), enbDevs.Get (0));
+
+  // Add X2 interface
+  lteHelper->AddX2Interface (enbNodes);
+
+  // Connect to trace sources in source eNodeB
+  Config::Connect ("/NodeList/1/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
+                   MakeCallback (&LteUeMeasurementsHandoverTestCase::RecvMeasurementReportCallback,
+                                 this));
+
+  // Connect to trace sources in target eNodeB
+  Config::Connect ("/NodeList/2/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
+                   MakeCallback (&LteUeMeasurementsHandoverTestCase::RecvMeasurementReportCallback,
+                                 this));
+
+  // Schedule handover
+  lteHelper->HandoverRequest (MilliSeconds (m_duration.GetMilliSeconds () / 2),
+                              ueDevs.Get (0), enbDevs.Get (0), enbDevs.Get (1));
+
+  // Run simulation
+  Simulator::Stop (m_duration);
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+} // end of void LteUeMeasurementsHandoverTestCase::DoRun ()
+
+void
+LteUeMeasurementsHandoverTestCase::DoTeardown ()
+{
+  NS_LOG_FUNCTION (this);
+  bool hasEnded = m_itExpectedTime == m_expectedTime.end ();
+  NS_TEST_ASSERT_MSG_EQ (hasEnded, true,
+                         "Reporting should have occurred at " << m_itExpectedTime->GetSeconds () << "s");
+  hasEnded = m_itExpectedRsrp == m_expectedRsrp.end ();
+  NS_ASSERT (hasEnded);
+}
+
+void
+LteUeMeasurementsHandoverTestCase::RecvMeasurementReportCallback (
+  std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti,
+  LteRrcSap::MeasurementReport report)
+{
+  uint8_t measId = report.measResults.measId;
+  NS_LOG_FUNCTION (this << context << (uint16_t) measId);
+
+  bool isCorrectMeasId;
+  if (cellId == 1)
+    {
+      std::set<uint8_t>::iterator itMeasId = m_expectedSourceCellMeasId.find (measId);
+      isCorrectMeasId = (itMeasId != m_expectedSourceCellMeasId.end ());
+    }
+  else if (cellId == 2)
+    {
+      std::set<uint8_t>::iterator itMeasId = m_expectedTargetCellMeasId.find (measId);
+      isCorrectMeasId = (itMeasId != m_expectedTargetCellMeasId.end ());
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Invalid cell ID " << cellId);
+    }
+
+  if (isCorrectMeasId)
+    {
+      // verifying the report completeness
+      LteRrcSap::MeasResults measResults = report.measResults;
+      NS_LOG_DEBUG (this << " Serving cellId=" << cellId
+                         << " rsrp=" << (uint16_t) measResults.rsrpResult
+                         << " (" << EutranMeasurementMapping::RsrpRange2Dbm (measResults.rsrpResult) << " dBm)"
+                         << " rsrq=" << (uint16_t) measResults.rsrqResult
+                         << " (" << EutranMeasurementMapping::RsrqRange2Db (measResults.rsrqResult) << " dB)");
+
+      // verifying reported best cells
+      if (measResults.measResultListEutra.size () == 0)
+        {
+          NS_TEST_ASSERT_MSG_EQ (measResults.haveMeasResultNeighCells, false,
+                                 "Unexpected report content");
+        }
+      else
+        {
+          NS_TEST_ASSERT_MSG_EQ (measResults.haveMeasResultNeighCells, true,
+                                 "Unexpected report content");
+          std::list<LteRrcSap::MeasResultEutra>::iterator it = measResults.measResultListEutra.begin ();
+          NS_ASSERT (it != measResults.measResultListEutra.end ());
+          NS_ASSERT (it->physCellId != cellId);
+          NS_ASSERT (it->physCellId <= 2);
+          NS_TEST_ASSERT_MSG_EQ (it->haveCgiInfo, false,
+                                 "Report contains cgi-info, which is not supported");
+          NS_TEST_ASSERT_MSG_EQ (it->haveRsrpResult, true,
+                                 "Report does not contain measured RSRP result");
+          NS_TEST_ASSERT_MSG_EQ (it->haveRsrqResult, true,
+                                 "Report does not contain measured RSRQ result");
+          NS_LOG_DEBUG (this << " Neighbour cellId=" << it->physCellId
+                             << " rsrp=" << (uint16_t) it->rsrpResult
+                             << " (" << EutranMeasurementMapping::RsrpRange2Dbm (it->rsrpResult) << " dBm)"
+                             << " rsrq=" << (uint16_t) it->rsrqResult
+                             << " (" << EutranMeasurementMapping::RsrqRange2Db (it->rsrqResult) << " dB)");
+
+        } // end of else of if (measResults.measResultListEutra.size () == 0)
+
+      // verifying the report timing
+      bool hasEnded = m_itExpectedTime == m_expectedTime.end ();
+      NS_TEST_ASSERT_MSG_EQ (hasEnded, false,
+                             "Reporting should not have occurred at "
+                             << Simulator::Now ().GetSeconds () << "s");
+      if (!hasEnded)
+        {
+          hasEnded = m_itExpectedRsrp == m_expectedRsrp.end ();
+          NS_ASSERT (!hasEnded);
+
+          // using milliseconds to avoid floating-point comparison
+          uint64_t timeNowMs = Simulator::Now ().GetMilliSeconds ();
+          uint64_t timeExpectedMs = m_itExpectedTime->GetMilliSeconds ();
+          m_itExpectedTime++;
+
+          uint16_t observedRsrp = measResults.rsrpResult;
+          uint16_t referenceRsrp = *m_itExpectedRsrp;
+          m_itExpectedRsrp++;
+
+          NS_TEST_ASSERT_MSG_EQ (timeNowMs, timeExpectedMs,
+                                 "Reporting should not have occurred at this time");
+          NS_TEST_ASSERT_MSG_EQ (observedRsrp, referenceRsrp,
+                                 "The RSRP observed differs with the reference RSRP");
+
+        } // end of if (!hasEnded)
+
+    } // end of if (report.measResults.measId == correctMeasId)
+
+} // end of void LteUeMeasurementsHandoverTestCase::RecvMeasurementReportCallback
+
+
 } // namespace ns3
 
diff -Naur ns-3.18.1/src/lte/test/lte-test-ue-measurements.h ns-3.19/src/lte/test/lte-test-ue-measurements.h
--- ns-3.18.1/src/lte/test/lte-test-ue-measurements.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/lte-test-ue-measurements.h	2013-12-20 09:44:50.000000000 -0800
@@ -17,8 +17,9 @@
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
- *         Marco Miozzo <mmiozzo@cttc.es> 
+ *         Marco Miozzo <mmiozzo@cttc.es>
  *              adapt lte-test-interference.cc to lte-ue-measurements.cc
+ *         Budiarto Herman <budiarto.herman@magister.fi>
  */
 
 #ifndef LTE_TEST_UE_MEASUREMENTS_H
@@ -26,13 +27,22 @@
 
 #include <ns3/test.h>
 #include <ns3/lte-rrc-sap.h>
-
+#include <ns3/nstime.h>
+#include <list>
+#include <set>
+#include <vector>
 
 namespace ns3 {
 
 
+class MobilityModel;
+
+
+// ===== LTE-UE-MEASUREMENTS TEST SUITE ==================================== //
+
+
 /**
- * Test that UE Measurements (see 36.214) calculation works fine in a 
+ * Test that UE Measurements (see 36.214) calculation works fine in a
  * multi-cell interference scenario.
  */
 class LteUeMeasurementsTestSuite : public TestSuite
@@ -55,17 +65,346 @@
 private:
   virtual void DoRun (void);
 
-
   double m_d1;
   double m_d2;
   double m_rsrpDbmUeServingCell;
   double m_rsrpDbmUeNeighborCell;
   double m_rsrqDbUeServingCell;
   double m_rsrqDbUeNeighborCell;
-  
+
+};
+
+
+
+// ===== LTE-UE-MEASUREMENTS-PIECEWISE-1 TEST SUITE ======================== //
+
+
+/**
+ * \brief Test suite for generating calls to UE measurements test case
+ *        ns3::LteUeMeasurementsPiecewiseTestCase1.
+ */
+class LteUeMeasurementsPiecewiseTestSuite1 : public TestSuite
+{
+public:
+  LteUeMeasurementsPiecewiseTestSuite1 ();
+};
+
+
+/**
+ * \brief Testing UE measurements in LTE with simulation of 1 eNodeB and 1 UE in
+ *        piecewise configuration and 120 ms report interval.
+ */
+class LteUeMeasurementsPiecewiseTestCase1 : public TestCase
+{
+public:
+  LteUeMeasurementsPiecewiseTestCase1 (std::string name,
+                                       LteRrcSap::ReportConfigEutra config,
+                                       std::vector<Time> expectedTime,
+                                       std::vector<uint8_t> expectedRsrp);
+
+  virtual ~LteUeMeasurementsPiecewiseTestCase1 ();
+
+  /**
+   * \brief Triggers when eNodeB receives measurement report from UE, then
+   *        perform verification on it.
+   *
+   * The trigger is set up beforehand by connecting to the
+   * `LteUeRrc::RecvMeasurementReport` trace source.
+   *
+   * Verification consists of checking whether the report carries the right
+   * value of RSRP or not, and whether it occurs at the expected time or not.
+   */
+  void RecvMeasurementReportCallback (std::string context, uint64_t imsi,
+                                      uint16_t cellId, uint16_t rnti,
+                                      LteRrcSap::MeasurementReport report);
+
+private:
+  /**
+   * \brief Setup the simulation with the intended UE measurement reporting
+   *        configuration, run it, and connect the
+   *        `RecvMeasurementReportCallback` function to the
+   *        `LteUeRrc::RecvMeasurementReport` trace source.
+   */
+  virtual void DoRun ();
+
+  /**
+   * \brief Runs at the end of the simulation, verifying that all expected
+   *        measurement reports have been examined.
+   */
+  virtual void DoTeardown ();
+
+  void TeleportVeryNear ();
+  void TeleportNear ();
+  void TeleportFar ();
+  void TeleportVeryFar ();
+
+  /**
+   * \brief The active report triggering configuration.
+   */
+  LteRrcSap::ReportConfigEutra m_config;
+
+  /**
+   * \brief The list of expected time when measurement reports are received by
+   *        eNodeB.
+   */
+  std::vector<Time> m_expectedTime;
+
+  /**
+   * \brief The list of expected values of RSRP (in 3GPP range unit) from the
+   *        measurement reports received.
+   */
+  std::vector<uint8_t> m_expectedRsrp;
+
+  /**
+   * \brief Pointer to the element of `m_expectedTime` which is expected to
+   *        occur next in the simulation.
+   */
+  std::vector<Time>::iterator m_itExpectedTime;
+
+  /**
+   * \brief Pointer to the element of `m_expectedRsrp` which is expected to
+   *        occur next in the simulation.
+   */
+  std::vector<uint8_t>::iterator m_itExpectedRsrp;
+
+  /**
+   * \brief The measurement identity being tested. Measurement reports with
+   *        different measurement identity (e.g. from handover algorithm) will
+   *        be ignored.
+   */
+  uint8_t m_expectedMeasId;
+
+  Ptr<MobilityModel> m_ueMobility;
+
+}; // end of class LteUeMeasurementsPiecewiseTestCase1
+
+
+
+// ===== LTE-UE-MEASUREMENTS-PIECEWISE-2 TEST SUITE ======================== //
+
+
+/**
+ * \brief Test suite for generating calls to UE measurements test case
+ *        ns3::LteUeMeasurementsPiecewiseTestCase2.
+ */
+class LteUeMeasurementsPiecewiseTestSuite2 : public TestSuite
+{
+public:
+  LteUeMeasurementsPiecewiseTestSuite2 ();
+};
+
+
+/**
+ * \brief Testing UE measurements in LTE with simulation of 2 eNodeB and 1 UE in
+ *        piecewise configuration and 240 ms report interval.
+ */
+class LteUeMeasurementsPiecewiseTestCase2 : public TestCase
+{
+public:
+  LteUeMeasurementsPiecewiseTestCase2 (std::string name,
+                                       LteRrcSap::ReportConfigEutra config,
+                                       std::vector<Time> expectedTime,
+                                       std::vector<uint8_t> expectedRsrp);
+
+  virtual ~LteUeMeasurementsPiecewiseTestCase2 ();
+
+  /**
+   * \brief Triggers when eNodeB receives measurement report from UE, then
+   *        perform verification on it.
+   *
+   * The trigger is set up beforehand by connecting to the
+   * `LteUeRrc::RecvMeasurementReport` trace source.
+   *
+   * Verification consists of checking whether the report carries the right
+   * value of RSRP or not, and whether it occurs at the expected time or not.
+   */
+  void RecvMeasurementReportCallback (std::string context, uint64_t imsi,
+                                      uint16_t cellId, uint16_t rnti,
+                                      LteRrcSap::MeasurementReport report);
+
+private:
+  /**
+   * \brief Setup the simulation with the intended UE measurement reporting
+   *        configuration, run it, and connect the
+   *        `RecvMeasurementReportCallback` function to the
+   *        `LteUeRrc::RecvMeasurementReport` trace source.
+   */
+  virtual void DoRun ();
+
+  /**
+   * \brief Runs at the end of the simulation, verifying that all expected
+   *        measurement reports have been examined.
+   */
+  virtual void DoTeardown ();
+
+  void TeleportVeryNear ();
+  void TeleportNear ();
+  void TeleportFar ();
+  void TeleportVeryFar ();
+
+  /**
+   * \brief The active report triggering configuration.
+   */
+  LteRrcSap::ReportConfigEutra m_config;
+
+  /**
+   * \brief The list of expected time when measurement reports are received by
+   *        eNodeB.
+   */
+  std::vector<Time> m_expectedTime;
+
+  /**
+   * \brief The list of expected values of RSRP (in 3GPP range unit) from the
+   *        measurement reports received.
+   */
+  std::vector<uint8_t> m_expectedRsrp;
+
+  /**
+   * \brief Pointer to the element of `m_expectedTime` which is expected to
+   *        occur next in the simulation.
+   */
+  std::vector<Time>::iterator m_itExpectedTime;
+
+  /**
+   * \brief Pointer to the element of `m_expectedRsrp` which is expected to
+   *        occur next in the simulation.
+   */
+  std::vector<uint8_t>::iterator m_itExpectedRsrp;
+
+  /**
+   * \brief The measurement identity being tested. Measurement reports with
+   *        different measurement identity (e.g. from handover algorithm) will
+   *        be ignored.
+   */
+  uint8_t m_expectedMeasId;
+
+  Ptr<MobilityModel> m_ueMobility;
+
+}; // end of class LteUeMeasurementsPiecewiseTestCase2
+
+
+
+// ===== LTE-UE-MEASUREMENTS-HANDOVER TEST SUITE =========================== //
+
+
+/**
+ * \brief Test suite for generating calls to UE measurements test case
+ *        ns3::LteUeMeasurementsHandoverTestCase.
+ */
+class LteUeMeasurementsHandoverTestSuite : public TestSuite
+{
+public:
+  LteUeMeasurementsHandoverTestSuite ();
 };
 
 
+/**
+ * \brief Testing UE measurements in LTE with simulation of 2 eNodeB and 1 UE in
+ *        a handover configuration.
+ *
+ * The simulation will run for the specified duration, while the handover
+ * command will be issued exactly at the middle of simulation.
+ */
+class LteUeMeasurementsHandoverTestCase : public TestCase
+{
+public:
+  LteUeMeasurementsHandoverTestCase (std::string name,
+                                     std::list<LteRrcSap::ReportConfigEutra> sourceConfigList,
+                                     std::list<LteRrcSap::ReportConfigEutra> targetConfigList,
+                                     std::vector<Time> expectedTime,
+                                     std::vector<uint8_t> expectedRsrp,
+                                     Time duration);
+
+  virtual ~LteUeMeasurementsHandoverTestCase ();
+
+  /**
+   * \brief Triggers when either one of the eNodeBs receives measurement report
+   *        from UE, then perform verification on it.
+   *
+   * The trigger is set up beforehand by connecting to the
+   * `LteUeRrc::RecvMeasurementReport` trace source.
+   *
+   * Verification consists of checking whether the report carries the right
+   * value of RSRP or not, and whether it occurs at the expected time or not.
+   */
+  void RecvMeasurementReportCallback (std::string context, uint64_t imsi,
+                                      uint16_t cellId, uint16_t rnti,
+                                      LteRrcSap::MeasurementReport report);
+
+private:
+  /**
+   * \brief Setup the simulation with the intended UE measurement reporting
+   *        configuration, run it, and connect the
+   *        `RecvMeasurementReportCallback` function to the
+   *        `LteUeRrc::RecvMeasurementReport` trace source.
+   */
+  virtual void DoRun ();
+
+  /**
+   * \brief Runs at the end of the simulation, verifying that all expected
+   *        measurement reports have been examined.
+   */
+  virtual void DoTeardown ();
+
+  /**
+   * \brief The list of active report triggering configuration for the source
+   *        eNodeB.
+   */
+  std::list<LteRrcSap::ReportConfigEutra> m_sourceConfigList;
+
+  /**
+   * \brief The list of active report triggering configuration for the target
+   *        eNodeB.
+   */
+  std::list<LteRrcSap::ReportConfigEutra> m_targetConfigList;
+
+  /**
+   * \brief The list of expected time when measurement reports are received by
+   *        eNodeB.
+   */
+  std::vector<Time> m_expectedTime;
+
+  /**
+   * \brief The list of expected values of RSRP (in 3GPP range unit) from the
+   *        measurement reports received.
+   */
+  std::vector<uint8_t> m_expectedRsrp;
+
+  /**
+   * \brief Pointer to the element of `m_expectedTime` which is expected to
+   *        occur next in the simulation.
+   */
+  std::vector<Time>::iterator m_itExpectedTime;
+
+  /**
+   * \brief Pointer to the element of `m_expectedRsrp` which is expected to
+   *        occur next in the simulation.
+   */
+  std::vector<uint8_t>::iterator m_itExpectedRsrp;
+
+  /**
+   * \brief Duration of simulation.
+   */
+  Time m_duration;
+
+  /**
+   * \brief The list of measurement identities being tested in the source cell.
+   *        Measurement reports with different measurement identity (e.g. from
+   *        handover algorithm and ANR) will be ignored.
+   */
+  std::set<uint8_t> m_expectedSourceCellMeasId;
+
+  /**
+   * \brief The list of measurement identities being tested in the target cell.
+   *        Measurement reports with different measurement identity (e.g. from
+   *        handover algorithm and ANR) will be ignored.
+   */
+  std::set<uint8_t> m_expectedTargetCellMeasId;
+
+}; // end of class LteUeMeasurementsHandoverTestCase
+
+
+
 } // namespace ns3
 
 
diff -Naur ns-3.18.1/src/lte/test/lte-test-ue-phy.cc ns-3.19/src/lte/test/lte-test-ue-phy.cc
--- ns-3.18.1/src/lte/test/lte-test-ue-phy.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/lte-test-ue-phy.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,8 @@
 namespace ns3 {
 
  
-NS_OBJECT_ENSURE_REGISTERED (LteTestUePhy);
+NS_OBJECT_ENSURE_REGISTERED (LteTestUePhy)
+  ;
 
 LteTestUePhy::LteTestUePhy ()
 {
diff -Naur ns-3.18.1/src/lte/test/lte-test-uplink-sinr.cc ns-3.19/src/lte/test/lte-test-uplink-sinr.cc
--- ns-3.18.1/src/lte/test/lte-test-uplink-sinr.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/lte-test-uplink-sinr.cc	2013-12-20 09:44:50.000000000 -0800
@@ -337,7 +337,7 @@
   */
   
   Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
-  lteHelper->EnableLogComponents ();
+  // lteHelper->EnableLogComponents ();
   Ptr<LteSpectrumPhy> dlPhy = CreateObject<LteSpectrumPhy> ();
   Ptr<LteSpectrumPhy> ulPhy = CreateObject<LteSpectrumPhy> ();
   Ptr<LteTestUePhy> uePhy = CreateObject<LteTestUePhy> (dlPhy, ulPhy);
diff -Naur ns-3.18.1/src/lte/test/test-lte-epc-e2e-data.cc ns-3.19/src/lte/test/test-lte-epc-e2e-data.cc
--- ns-3.18.1/src/lte/test/test-lte-epc-e2e-data.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/test-lte-epc-e2e-data.cc	2013-12-20 09:44:50.000000000 -0800
@@ -24,7 +24,7 @@
 #include "ns3/log.h"
 #include "ns3/test.h"
 #include "ns3/lte-helper.h"
-#include "ns3/epc-helper.h"
+#include "ns3/point-to-point-epc-helper.h"
 #include "ns3/packet-sink-helper.h"
 #include "ns3/udp-client-server-helper.h"
 #include "ns3/udp-echo-helper.h"
@@ -47,7 +47,8 @@
 namespace ns3 {
 
 
-NS_LOG_COMPONENT_DEFINE ("LteEpcE2eData");
+NS_LOG_COMPONENT_DEFINE ("LteEpcE2eData")
+  ;
 
 
 
@@ -116,7 +117,7 @@
   Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (false));  
   Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue (true));
   Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
-  Ptr<EpcHelper> epcHelper = CreateObject<EpcHelper> ();
+  Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper> ();
   lteHelper->SetEpcHelper (epcHelper);
 
   lteHelper->SetAttribute("PathlossModel",
@@ -272,16 +273,16 @@
                UintegerValue (2 * 1024 * 1024));
 
 
-  Time simulationTime = Seconds (2.0);
-
-  double statsStartTime = 0.040; // need to allow for RRC connection establishment + SRS 
+  double statsStartTime = 0.040; // need to allow for RRC connection establishment + SRS
+  double statsDuration = 2.0;
+    
   lteHelper->EnablePdcpTraces ();
 
   lteHelper->GetPdcpStats ()->SetAttribute ("StartTime", TimeValue (Seconds (statsStartTime)));
-  lteHelper->GetPdcpStats ()->SetAttribute ("EpochDuration", TimeValue (simulationTime));
+  lteHelper->GetPdcpStats ()->SetAttribute ("EpochDuration", TimeValue (Seconds (statsDuration)));
   
   
-  Simulator::Stop (simulationTime);  
+  Simulator::Stop (Seconds (statsStartTime + statsDuration - 0.0001));  
   Simulator::Run ();
 
   uint64_t imsiCounter = 0;
diff -Naur ns-3.18.1/src/lte/test/test-lte-handover-delay.cc ns-3.19/src/lte/test/test-lte-handover-delay.cc
--- ns-3.18.1/src/lte/test/test-lte-handover-delay.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/test-lte-handover-delay.cc	2013-12-20 09:44:50.000000000 -0800
@@ -32,7 +32,7 @@
 #include <ns3/ipv4-interface-container.h>
 
 #include <ns3/lte-helper.h>
-#include <ns3/epc-helper.h>
+#include <ns3/point-to-point-epc-helper.h>
 #include <ns3/internet-stack-helper.h>
 #include <ns3/point-to-point-helper.h>
 #include <ns3/ipv4-address-helper.h>
@@ -96,7 +96,7 @@
       << " handover time = " << m_handoverTime.GetSeconds () << "-----");
 
   Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
-  Ptr<EpcHelper> epcHelper = CreateObject<EpcHelper> ();
+  Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper> ();
   lteHelper->SetEpcHelper (epcHelper);
   lteHelper->SetAttribute ("UseIdealRrc", BooleanValue(m_useIdealRrc));
 
diff -Naur ns-3.18.1/src/lte/test/test-lte-handover-target.cc ns-3.19/src/lte/test/test-lte-handover-target.cc
--- ns-3.18.1/src/lte/test/test-lte-handover-target.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/lte/test/test-lte-handover-target.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,434 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Budiarto Herman
+ *
+ * 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: Budiarto Herman <budiarto.herman@magister.fi>
+ *
+ */
+
+#include <ns3/test.h>
+
+#include <ns3/log.h>
+#include <ns3/nstime.h>
+#include <ns3/callback.h>
+#include <ns3/config.h>
+#include <ns3/boolean.h>
+#include <ns3/double.h>
+#include <ns3/uinteger.h>
+#include <ns3/simulator.h>
+
+#include <ns3/node-container.h>
+#include <ns3/net-device-container.h>
+#include <ns3/ipv4-interface-container.h>
+
+#include <ns3/lte-helper.h>
+#include <ns3/point-to-point-epc-helper.h>
+#include <ns3/internet-stack-helper.h>
+#include <ns3/point-to-point-helper.h>
+#include <ns3/ipv4-address-helper.h>
+#include <ns3/ipv4-static-routing-helper.h>
+#include <ns3/mobility-helper.h>
+
+#include <ns3/data-rate.h>
+#include <ns3/ipv4-static-routing.h>
+#include <ns3/position-allocator.h>
+#include <ns3/lte-enb-net-device.h>
+#include <ns3/lte-enb-phy.h>
+
+NS_LOG_COMPONENT_DEFINE ("LteHandoverTargetTest");
+
+namespace ns3 {
+
+
+/**
+ * \brief Testing a handover algorithm, verifying that it selects the right
+ *        target cell when more than one options available.
+ *
+ * Part of the `lte-handover-target` test suite.
+ *
+ * The test case will run a 1-second LTE-EPC simulation using the parameters
+ * provided to the constructor function.
+ *
+ * \sa ns3::LteHandoverTargetTestCase
+ */
+class LteHandoverTargetTestCase : public TestCase
+{
+public:
+  /**
+   * \brief Construct a new test case and providing input parameters for the
+   *        simulation.
+   * \param name the name of the test case, to be displayed in the test result
+   * \param uePosition the point in (x, y, z) coordinate where the UE will be
+   *                   placed in the simulation
+   * \param gridSizeX number of eNodeBs in a row
+   * \param gridSizeY number of eNodeBs in a column
+   * \param sourceCellId the cell ID of the eNodeB which the UE will be
+   *                     initially attached to in the beginning of simulation,
+   *                     and also the eNodeB which will "shutdown" in the
+   *                     middle of simulation
+   * \param targetCellId the cell ID of the expected eNodeB where the UE will
+   *                     perform handover to after the "shutdown" of the source
+   *                     cell
+   * \param handoverAlgorithmType the type of handover algorithm to be used in
+   *                              all eNodeBs
+   */
+  LteHandoverTargetTestCase (std::string name, Vector uePosition,
+                             uint8_t gridSizeX, uint8_t gridSizeY,
+                             uint16_t sourceCellId, uint16_t targetCellId,
+                             std::string handoverAlgorithmType);
+
+  virtual ~LteHandoverTargetTestCase ();
+
+  /**
+   * \brief Triggers when an eNodeB starts a handover and then verifies that
+   *        the handover has the right source and target cells.
+   *
+   * The trigger is set up beforehand by connecting to the
+   * `LteEnbRrc::HandoverStart` trace source.
+   */
+  void HandoverStartCallback (std::string context, uint64_t imsi,
+                              uint16_t sourceCellId, uint16_t rnti,
+                              uint16_t targetCellId);
+
+  /**
+   * \brief A trigger that can be scheduled to "shutdown" the cell pointed by
+   *        `m_sourceCellId` by reducing its power to 1 dB.
+   */
+  void CellShutdownCallback ();
+
+private:
+  /**
+   * \brief Run a simulation of a micro-cell network using the parameters
+   *        provided to the constructor function.
+   */
+  virtual void DoRun ();
+
+  /**
+   * \brief Called at the end of simulation and verifies that a handover has
+   *        occurred in the simulation.
+   */
+  virtual void DoTeardown ();
+
+  // simulation parameters
+  Vector m_uePosition;
+  uint8_t m_gridSizeX;
+  uint8_t m_gridSizeY;
+  uint16_t m_sourceCellId;
+  uint16_t m_targetCellId;
+  std::string m_handoverAlgorithmType;
+
+  Ptr<LteEnbNetDevice> m_sourceEnbDev;
+  bool m_hasHandoverOccurred;
+
+}; // end of class LteHandoverTargetTestCase
+
+
+LteHandoverTargetTestCase::LteHandoverTargetTestCase (std::string name, Vector uePosition,
+                                                      uint8_t gridSizeX, uint8_t gridSizeY,
+                                                      uint16_t sourceCellId, uint16_t targetCellId,
+                                                      std::string handoverAlgorithmType)
+  : TestCase (name),
+    m_uePosition (uePosition),
+    m_gridSizeX (gridSizeX),
+    m_gridSizeY (gridSizeY),
+    m_sourceCellId (sourceCellId),
+    m_targetCellId (targetCellId),
+    m_handoverAlgorithmType (handoverAlgorithmType),
+    m_sourceEnbDev (0),
+    m_hasHandoverOccurred (false)
+{
+  NS_LOG_INFO (this << " name=" << name);
+
+  // SANITY CHECK
+
+  uint16_t nEnb = gridSizeX * gridSizeY;
+
+  if (sourceCellId > nEnb)
+    {
+      NS_FATAL_ERROR ("Invalid source cell ID " << sourceCellId);
+    }
+
+  if (targetCellId > nEnb)
+    {
+      NS_FATAL_ERROR ("Invalid target cell ID " << targetCellId);
+    }
+}
+
+
+LteHandoverTargetTestCase::~LteHandoverTargetTestCase ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+
+void
+LteHandoverTargetTestCase::HandoverStartCallback (std::string context, uint64_t imsi,
+                                                  uint16_t sourceCellId, uint16_t rnti,
+                                                  uint16_t targetCellId)
+{
+  NS_LOG_FUNCTION (this << context << imsi << sourceCellId << rnti << targetCellId);
+
+  uint64_t timeNowMs = Simulator::Now ().GetMilliSeconds ();
+  NS_TEST_ASSERT_MSG_GT (timeNowMs, 500,
+                         "Handover occured but too early");
+  NS_TEST_ASSERT_MSG_EQ (sourceCellId, m_sourceCellId,
+                         "Handover occured but with wrong source cell");
+  NS_TEST_ASSERT_MSG_EQ (targetCellId, m_targetCellId,
+                         "Handover occured but with wrong target cell");
+  m_hasHandoverOccurred = true;
+}
+
+
+void
+LteHandoverTargetTestCase::CellShutdownCallback ()
+{
+  NS_LOG_FUNCTION (this);
+
+  if (m_sourceEnbDev != 0)
+    {
+      // set the Tx power to 1 dBm
+      NS_ASSERT (m_sourceEnbDev->GetCellId () == m_sourceCellId);
+      NS_LOG_INFO ("Shutting down cell " << m_sourceCellId);
+      Ptr<LteEnbPhy> phy = m_sourceEnbDev->GetPhy ();
+      phy->SetTxPower (1);
+    }
+}
+
+
+void
+LteHandoverTargetTestCase::DoRun ()
+{
+  NS_LOG_INFO (this << " " << GetName ());
+
+  Config::SetDefault ("ns3::LteEnbPhy::TxPower", DoubleValue (38)); // micro cell
+  Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled",
+                      BooleanValue (false)); // disable control channel error model
+
+  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
+  Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper> ();
+  lteHelper->SetEpcHelper (epcHelper);
+  lteHelper->SetAttribute ("PathlossModel",
+                           StringValue ("ns3::FriisSpectrumPropagationLossModel"));
+  lteHelper->SetAttribute ("UseIdealRrc", BooleanValue (true));
+
+  if (m_handoverAlgorithmType == "ns3::A2A4RsrqHandoverAlgorithm")
+    {
+      lteHelper->SetHandoverAlgorithmType ("ns3::A2A4RsrqHandoverAlgorithm");
+      lteHelper->SetHandoverAlgorithmAttribute ("ServingCellThreshold",
+                                                UintegerValue (30));
+      lteHelper->SetHandoverAlgorithmAttribute ("NeighbourCellOffset",
+                                                UintegerValue (1));
+    }
+  else if (m_handoverAlgorithmType == "ns3::A3RsrpHandoverAlgorithm")
+    {
+      lteHelper->SetHandoverAlgorithmType ("ns3::A3RsrpHandoverAlgorithm");
+      lteHelper->SetHandoverAlgorithmAttribute ("Hysteresis",
+                                                DoubleValue (1.5));
+      lteHelper->SetHandoverAlgorithmAttribute ("TimeToTrigger",
+                                                TimeValue (MilliSeconds (128)));
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Unknown handover algorithm " << m_handoverAlgorithmType);
+    }
+
+  // Create Nodes: eNodeB and UE
+  NodeContainer enbNodes;
+  NodeContainer ueNodes;
+  enbNodes.Create (m_gridSizeX * m_gridSizeY);
+  ueNodes.Create (1);
+
+  /*
+   * The size of the grid is determined by m_gridSizeX and m_gridSizeY. The
+   * following figure is the topology when m_gridSizeX = 4 and m_gridSizeY = 3.
+   *
+   *                  9 -- 10 -- 11 -- 12
+   *                  |     |     |     |
+   *                  |     |     |     |
+   *                  5 --- 6 --- 7 --- 8
+   *                  |     |     |     |
+   *                  |     |     |     |
+   *   (0, 0, 0) ---> 1 --- 2 --- 3 --- 4
+   *
+   * The grid starts at (0, 0, 0) point on the bottom left corner. The distance
+   * between two adjacent eNodeBs is 130 m.
+   */
+
+  // Set up eNodeB position
+  MobilityHelper enbMobility;
+  enbMobility.SetPositionAllocator ("ns3::GridPositionAllocator",
+                                    "MinX", DoubleValue (0.0),
+                                    "MinY", DoubleValue (0.0),
+                                    "DeltaX", DoubleValue (130.0),
+                                    "DeltaY", DoubleValue (130.0),
+                                    "GridWidth", UintegerValue (m_gridSizeX),
+                                    "LayoutType", StringValue ("RowFirst"));
+  enbMobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  enbMobility.Install (enbNodes);
+
+  // Setup UE position
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  positionAlloc->Add (m_uePosition);
+  MobilityHelper ueMobility;
+  ueMobility.SetPositionAllocator (positionAlloc);
+  ueMobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  ueMobility.Install (ueNodes);
+
+  // Create P-GW node
+  Ptr<Node> pgw = epcHelper->GetPgwNode ();
+
+  // Create a single RemoteHost
+  NodeContainer remoteHostContainer;
+  remoteHostContainer.Create (1);
+  Ptr<Node> remoteHost = remoteHostContainer.Get (0);
+  InternetStackHelper internet;
+  internet.Install (remoteHostContainer);
+
+  // Create the Internet
+  PointToPointHelper p2ph;
+  p2ph.SetDeviceAttribute ("DataRate", DataRateValue (DataRate ("100Gb/s")));
+  p2ph.SetDeviceAttribute ("Mtu", UintegerValue (1500));
+  p2ph.SetChannelAttribute ("Delay", TimeValue (Seconds (0.010)));
+  NetDeviceContainer internetDevices = p2ph.Install (pgw, remoteHost);
+  Ipv4AddressHelper ipv4h;
+  ipv4h.SetBase ("1.0.0.0", "255.0.0.0");
+  Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign (internetDevices);
+
+  // Routing of the Internet Host (towards the LTE network)
+  Ipv4StaticRoutingHelper ipv4RoutingHelper;
+  Ptr<Ipv4StaticRouting> remoteHostStaticRouting = ipv4RoutingHelper.GetStaticRouting (remoteHost->GetObject<Ipv4> ());
+  remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);
+
+  // Create Devices and install them in the Nodes (eNB and UE)
+  NetDeviceContainer enbDevs;
+  NetDeviceContainer ueDevs;
+  enbDevs = lteHelper->InstallEnbDevice (enbNodes);
+  ueDevs = lteHelper->InstallUeDevice (ueNodes);
+
+  // Install the IP stack on the UEs
+  internet.Install (ueNodes);
+  Ipv4InterfaceContainer ueIpIfaces;
+  ueIpIfaces = 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);
+    }
+
+  // Add X2 interface
+  lteHelper->AddX2Interface (enbNodes);
+
+  // Connect to trace sources in all eNodeB
+  Config::Connect ("/NodeList/*/DeviceList/*/LteEnbRrc/HandoverStart",
+                   MakeCallback (&LteHandoverTargetTestCase::HandoverStartCallback,
+                                 this));
+
+  // Get the source eNodeB
+  Ptr<NetDevice> sourceEnb = enbDevs.Get (m_sourceCellId - 1);
+  m_sourceEnbDev = sourceEnb->GetObject<LteEnbNetDevice> ();
+  NS_ASSERT (m_sourceEnbDev != 0);
+  NS_ASSERT (m_sourceEnbDev->GetCellId () == m_sourceCellId);
+
+  // Attach UE to the source eNodeB
+  lteHelper->Attach (ueDevs.Get (0), sourceEnb);
+
+  // Schedule a "shutdown" of the source eNodeB
+  Simulator::Schedule (Seconds (0.5),
+                       &LteHandoverTargetTestCase::CellShutdownCallback, this);
+
+  // Run simulation
+  Simulator::Stop (Seconds (1));
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+} // end of void LteX2HandoverTargetTestCase::DoRun ()
+
+
+void
+LteHandoverTargetTestCase::DoTeardown ()
+{
+  NS_LOG_FUNCTION (this);
+  NS_TEST_ASSERT_MSG_EQ (m_hasHandoverOccurred, true, "Handover did not occur");
+}
+
+
+
+/**
+ * \brief Test suite ``lte-handover-target``, verifying that handover
+ *        algorithms are able to select the right target cell.
+ *
+ * Handover algorithm tested in this test suite:
+ * - A2-A4-RSRQ handover algorithm (ns3::A2A4RsrqHandoverAlgorithm)
+ * - Strongest cell handover algorithm (ns3::A3RsrpHandoverAlgorithm)
+ */
+class LteHandoverTargetTestSuite : public TestSuite
+{
+public:
+  LteHandoverTargetTestSuite ();
+};
+
+
+LteHandoverTargetTestSuite::LteHandoverTargetTestSuite ()
+  : TestSuite ("lte-handover-target", SYSTEM)
+{
+  // LogComponentEnable ("LteHandoverTargetTest", LOG_PREFIX_ALL);
+  // LogComponentEnable ("LteHandoverTargetTest", LOG_LEVEL_ALL);
+  // LogComponentEnable ("A2A4RsrqHandoverAlgorithm", LOG_PREFIX_ALL);
+  // LogComponentEnable ("A2A4RsrqHandoverAlgorithm", LOG_LEVEL_ALL);
+  // LogComponentEnable ("A3RsrpHandoverAlgorithm", LOG_PREFIX_ALL);
+  // LogComponentEnable ("A3RsrpHandoverAlgorithm", LOG_LEVEL_ALL);
+
+  /*
+   *    3 --- 4
+   *    |     |
+   *    |o    |
+   *    1 --- 2   o = UE
+   */
+  AddTestCase (new LteHandoverTargetTestCase ("4 cells and A2-A4-RSRQ algorithm",
+                                              Vector (20, 40, 0), 2, 2, 1, 3,
+                                              "ns3::A2A4RsrqHandoverAlgorithm"),
+               TestCase::QUICK);
+  AddTestCase (new LteHandoverTargetTestCase ("4 cells and strongest cell algorithm",
+                                              Vector (20, 40, 0), 2, 2, 1, 3,
+                                              "ns3::A3RsrpHandoverAlgorithm"),
+               TestCase::QUICK);
+
+  /*
+   *    4 --- 5 --- 6
+   *    |     |o    |
+   *    |     |     |
+   *    1 --- 2 --- 3   o = UE
+   */
+  AddTestCase (new LteHandoverTargetTestCase ("6 cells and A2-A4-RSRQ algorithm",
+                                              Vector (150, 90, 0), 3, 2, 5, 2,
+                                              "ns3::A2A4RsrqHandoverAlgorithm"),
+               TestCase::EXTENSIVE);
+  AddTestCase (new LteHandoverTargetTestCase ("6 cells and strongest cell algorithm",
+                                              Vector (150, 90, 0), 3, 2, 5, 2,
+                                              "ns3::A3RsrpHandoverAlgorithm"),
+               TestCase::EXTENSIVE);
+
+} // end of LteHandoverTargetTestSuite ()
+
+
+static LteHandoverTargetTestSuite g_lteHandoverTargetTestSuiteInstance;
+
+
+} // end of namespace ns3
diff -Naur ns-3.18.1/src/lte/test/test-lte-x2-handover.cc ns-3.19/src/lte/test/test-lte-x2-handover.cc
--- ns-3.18.1/src/lte/test/test-lte-x2-handover.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/test-lte-x2-handover.cc	2013-12-20 09:44:50.000000000 -0800
@@ -72,7 +72,7 @@
   bool m_admitHo;
   bool     m_useIdealRrc;
   Ptr<LteHelper> m_lteHelper;
-  Ptr<EpcHelper> m_epcHelper;
+  Ptr<PointToPointEpcHelper> m_epcHelper;
   
   struct BearerData
   {
@@ -156,6 +156,7 @@
   m_lteHelper = CreateObject<LteHelper> ();
   m_lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
   m_lteHelper->SetSchedulerType (m_schedulerType);
+  m_lteHelper->SetHandoverAlgorithmType ("ns3::NoOpHandoverAlgorithm"); // disable automatic handover
   m_lteHelper->SetAttribute ("UseIdealRrc", BooleanValue (m_useIdealRrc));
   
 
@@ -166,7 +167,7 @@
 
   if (m_epc)
     {
-      m_epcHelper = CreateObject<EpcHelper> ();
+      m_epcHelper = CreateObject<PointToPointEpcHelper> ();
       m_lteHelper->SetEpcHelper (m_epcHelper);      
     }
 
@@ -579,39 +580,39 @@
 
   std::string hel1name ("1 fwd");
   std::list<HandoverEvent> hel1;
-  hel1.push_back (ue1fwd);  
+  hel1.push_back (ue1fwd);
 
   std::string hel2name ("1 fwd & bwd");
   std::list<HandoverEvent> hel2;
-  hel2.push_back (ue1fwd);     
-  hel2.push_back (ue1bwd);    
+  hel2.push_back (ue1fwd);
+  hel2.push_back (ue1bwd);
 
   std::string hel3name ("1 fwd & bwd & fwd");
   std::list<HandoverEvent> hel3;
-  hel3.push_back (ue1fwd);     
-  hel3.push_back (ue1bwd);     
-  hel3.push_back (ue1fwdagain);     
+  hel3.push_back (ue1fwd);
+  hel3.push_back (ue1bwd);
+  hel3.push_back (ue1fwdagain);
 
   std::string hel4name ("1+2 fwd");
   std::list<HandoverEvent> hel4;
-  hel4.push_back (ue1fwd);  
+  hel4.push_back (ue1fwd);
   hel4.push_back (ue2fwd);
 
   std::string hel5name ("1+2 fwd & bwd");
   std::list<HandoverEvent> hel5;
-  hel5.push_back (ue1fwd);     
-  hel5.push_back (ue1bwd);    
-  hel5.push_back (ue2fwd);     
-  hel5.push_back (ue2bwd);    
+  hel5.push_back (ue1fwd);
+  hel5.push_back (ue1bwd);
+  hel5.push_back (ue2fwd);
+  hel5.push_back (ue2bwd);
 
   std::string hel6name ("2 fwd");
   std::list<HandoverEvent> hel6;
-  hel6.push_back (ue2fwd);     
+  hel6.push_back (ue2fwd);
 
   std::string hel7name ("2 fwd & bwd");
   std::list<HandoverEvent> hel7;
-  hel7.push_back (ue2fwd);     
-  hel7.push_back (ue2bwd);    
+  hel7.push_back (ue2fwd);
+  hel7.push_back (ue2bwd);
 
   std::vector<std::string> schedulers;
   schedulers.push_back ("ns3::RrFfMacScheduler");
@@ -619,7 +620,7 @@
   for (std::vector<std::string>::iterator schedIt = schedulers.begin (); schedIt != schedulers.end (); ++schedIt)
     {
       for (int32_t useIdealRrc = 1; useIdealRrc >= 0; --useIdealRrc)
-        {          
+        {
           //                                     nUes, nDBearers, helist, name, useUdp, sched, admitHo, idealRrc
           AddTestCase (new LteX2HandoverTestCase (  1,    0,    hel0, hel0name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
           AddTestCase (new LteX2HandoverTestCase (  2,    0,    hel0, hel0name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
diff -Naur ns-3.18.1/src/lte/test/test-lte-x2-handover-measures.cc ns-3.19/src/lte/test/test-lte-x2-handover-measures.cc
--- ns-3.18.1/src/lte/test/test-lte-x2-handover-measures.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/test/test-lte-x2-handover-measures.cc	2013-12-20 09:44:50.000000000 -0800
@@ -46,8 +46,8 @@
       checkInterval (interval),
       ueDeviceIndex (ueIndex),
       enbDeviceIndex (enbIndex)
-    {
-    }
+  {
+  }
 };
 
 
@@ -63,17 +63,26 @@
    * \param checkPointEventList
    * \param checkPointEventListName
    * \param useUdp true if UDP is to be used, false if TCP is to be used
+   * \param schedulerType type of scheduler to be used (e.g. "ns3::PfFfMacScheduler")
+   * \param handoverAlgorithmType type of handover algorithm to be used (e.g. "ns3::A3RsrpHandoverAlgorithm")
+   * \param admitHo
+   * \param useIdealRrc true if ideal RRC is to be used, false if real RRC is to be used
    *
    * \return
    */
   LteX2HandoverMeasuresTestCase (uint32_t nEnbs, uint32_t nUes, uint32_t nDedicatedBearers,
-                                 std::list<CheckPointEvent> checkPointEventList, std::string checkPointEventListName,
-                                 bool useUdp, std::string schedulerType, bool admitHo, bool useIdealRrc);
+                                 std::list<CheckPointEvent> checkPointEventList,
+                                 std::string checkPointEventListName,
+                                 bool useUdp, std::string schedulerType,
+                                 std::string handoverAlgorithmType, bool admitHo,
+                                 bool useIdealRrc);
 
 private:
   static std::string BuildNameString (uint32_t nEnbs, uint32_t nUes, uint32_t nDedicatedBearers,
                                       std::string checkPointEventListName,
-                                      bool useUdp, std::string schedulerType, bool admitHo, bool useIdealRrc);
+                                      bool useUdp, std::string schedulerType,
+                                      std::string handoverAlgorithmType, bool admitHo,
+                                      bool useIdealRrc);
   virtual void DoRun (void);
   void CheckConnected (Ptr<NetDevice> ueDevice, Ptr<NetDevice> enbDevice);
 
@@ -85,10 +94,11 @@
   bool m_epc;
   bool m_useUdp;
   std::string m_schedulerType;
+  std::string m_handoverAlgorithmType;
   bool m_admitHo;
   bool m_useIdealRrc;
   Ptr<LteHelper> m_lteHelper;
-  Ptr<EpcHelper> m_epcHelper;
+  Ptr<PointToPointEpcHelper> m_epcHelper;
 
   struct BearerData
   {
@@ -120,7 +130,9 @@
 std::string
 LteX2HandoverMeasuresTestCase::BuildNameString (uint32_t nEnbs, uint32_t nUes, uint32_t nDedicatedBearers,
                                                 std::string checkPointEventListName,
-                                                bool useUdp, std::string schedulerType, bool admitHo, bool useIdealRrc)
+                                                bool useUdp, std::string schedulerType,
+                                                std::string handoverAlgorithmType, bool admitHo,
+                                                bool useIdealRrc)
 {
   std::ostringstream oss;
   oss << "nEnbs=" << nEnbs
@@ -128,6 +140,7 @@
       << " nDedicatedBearers=" << nDedicatedBearers
       << " udp=" << useUdp
       << " " << schedulerType
+      << " " << handoverAlgorithmType
       << " admitHo=" << admitHo
       << " hoList: " << checkPointEventListName;
   if (useIdealRrc)
@@ -142,9 +155,14 @@
 }
 
 LteX2HandoverMeasuresTestCase::LteX2HandoverMeasuresTestCase (uint32_t nEnbs, uint32_t nUes, uint32_t nDedicatedBearers,
-                                                              std::list<CheckPointEvent> checkPointEventList, std::string checkPointEventListName,
-                                                              bool useUdp, std::string schedulerType, bool admitHo, bool useIdealRrc)
-  : TestCase (BuildNameString (nEnbs, nUes, nDedicatedBearers, checkPointEventListName, useUdp, schedulerType, admitHo, useIdealRrc)),
+                                                              std::list<CheckPointEvent> checkPointEventList,
+                                                              std::string checkPointEventListName,
+                                                              bool useUdp, std::string schedulerType,
+                                                              std::string handoverAlgorithmType, bool admitHo,
+                                                              bool useIdealRrc)
+  : TestCase (BuildNameString (nEnbs, nUes, nDedicatedBearers,
+                               checkPointEventListName, useUdp, schedulerType,
+                               handoverAlgorithmType, admitHo, useIdealRrc)),
     m_nEnbs (nEnbs),
     m_nUes (nUes),
     m_nDedicatedBearers (nDedicatedBearers),
@@ -153,6 +171,7 @@
     m_epc (true),
     m_useUdp (useUdp),
     m_schedulerType (schedulerType),
+    m_handoverAlgorithmType (handoverAlgorithmType),
     m_admitHo (admitHo),
     m_useIdealRrc (useIdealRrc),
     m_maxHoDuration (Seconds (0.1)),
@@ -167,14 +186,14 @@
 {
   NS_LOG_FUNCTION (this << BuildNameString (m_nEnbs, m_nUes, m_nDedicatedBearers,
                                             m_checkPointEventListName,
-                                            m_useUdp, m_schedulerType, m_admitHo, m_useIdealRrc));
+                                            m_useUdp, m_schedulerType,
+                                            m_handoverAlgorithmType, m_admitHo,
+                                            m_useIdealRrc));
 
   Config::Reset ();
   Config::SetDefault ("ns3::UdpClient::Interval", TimeValue (m_udpClientInterval));
   Config::SetDefault ("ns3::UdpClient::MaxPackets", UintegerValue (1000000));
   Config::SetDefault ("ns3::UdpClient::PacketSize", UintegerValue (m_udpClientPktSize));
-  Config::SetDefault ("ns3::LteEnbRrc::ServingCellHandoverThreshold", UintegerValue (30));
-  Config::SetDefault ("ns3::LteEnbRrc::NeighbourCellHandoverOffset", UintegerValue (1));
   Config::SetDefault ("ns3::LteEnbRrc::HandoverJoiningTimeoutDuration", TimeValue (MilliSeconds (200)));
   Config::SetDefault ("ns3::LteEnbPhy::TxPower", DoubleValue (20));
 
@@ -183,9 +202,29 @@
 
   m_lteHelper = CreateObject<LteHelper> ();
   m_lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
-  m_lteHelper->SetSchedulerType (m_schedulerType);
   m_lteHelper->SetAttribute ("UseIdealRrc", BooleanValue (m_useIdealRrc));
+  m_lteHelper->SetSchedulerType (m_schedulerType);
 
+  if (m_handoverAlgorithmType == "ns3::A2A4RsrqHandoverAlgorithm")
+    {
+      m_lteHelper->SetHandoverAlgorithmType ("ns3::A2A4RsrqHandoverAlgorithm");
+      m_lteHelper->SetHandoverAlgorithmAttribute ("ServingCellThreshold",
+                                                  UintegerValue (30));
+      m_lteHelper->SetHandoverAlgorithmAttribute ("NeighbourCellOffset",
+                                                  UintegerValue (1));
+    }
+  else if (m_handoverAlgorithmType == "ns3::A3RsrpHandoverAlgorithm")
+    {
+      m_lteHelper->SetHandoverAlgorithmType ("ns3::A3RsrpHandoverAlgorithm");
+      m_lteHelper->SetHandoverAlgorithmAttribute ("Hysteresis",
+                                                  DoubleValue (1.5));
+      m_lteHelper->SetHandoverAlgorithmAttribute ("TimeToTrigger",
+                                                  TimeValue (MilliSeconds (128)));
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Unknown handover algorithm " << m_handoverAlgorithmType);
+    }
 
   double distance = 1000.0; // m
   double speed = 150;       // m/s
@@ -197,7 +236,7 @@
 
   if (m_epc)
     {
-      m_epcHelper = CreateObject<EpcHelper> ();
+      m_epcHelper = CreateObject<PointToPointEpcHelper> ();
       m_lteHelper->SetEpcHelper (m_epcHelper);
     }
 
@@ -210,18 +249,20 @@
       enbPositionAlloc->Add (enbPosition);
     }
   MobilityHelper enbMobility;
-  enbMobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
-  enbMobility.SetPositionAllocator(enbPositionAlloc);
-  enbMobility.Install(enbNodes);
+  enbMobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  enbMobility.SetPositionAllocator (enbPositionAlloc);
+  enbMobility.Install (enbNodes);
 
   // Install Mobility Model in UE
   // UE moves with a constant speed along the X axis
   MobilityHelper ueMobility;
   ueMobility.SetMobilityModel ("ns3::ConstantVelocityMobilityModel");
-  ueMobility.Install(ueNodes);
-  ueNodes.Get (0)->GetObject<MobilityModel> ()->SetPosition (Vector (0, 0, 0));
-  ueNodes.Get (0)->GetObject<ConstantVelocityMobilityModel> ()->SetVelocity (Vector (speed, 0, 0));
-
+  ueMobility.Install (ueNodes);
+  for (uint16_t i = 0; i < m_nUes; i++)
+    {
+      ueNodes.Get (i)->GetObject<MobilityModel> ()->SetPosition (Vector (0, 0, 0));
+      ueNodes.Get (i)->GetObject<ConstantVelocityMobilityModel> ()->SetVelocity (Vector (speed, 0, 0));
+    }
 
   NetDeviceContainer enbDevices;
   enbDevices = m_lteHelper->InstallEnbDevice (enbNodes);
@@ -604,64 +645,72 @@
   std::string cel1name ("ho: 0 -> 1");
   std::list<CheckPointEvent> cel1;
   cel1.push_back (CheckPointEvent (Seconds (1), Seconds (10.1), checkInterval, 0, 0));
-  cel1.push_back (CheckPointEvent (Seconds (11), Seconds (37), checkInterval, 0, 1));
+  cel1.push_back (CheckPointEvent (Seconds (11), Seconds (17), checkInterval, 0, 1));
 
   std::string cel2name ("ho: 0 -> 1 -> 2");
   std::list<CheckPointEvent> cel2;
-  cel2.push_back (CheckPointEvent (Seconds (1), Seconds (10.1), Seconds (1), 0, 0));
-  cel2.push_back (CheckPointEvent (Seconds (11), Seconds (17.1), Seconds (1), 0, 1));
-  cel2.push_back (CheckPointEvent (Seconds (18), Seconds (37), Seconds (1), 0, 2));
+  cel2.push_back (CheckPointEvent (Seconds (1), Seconds (10.1), checkInterval, 0, 0));
+  cel2.push_back (CheckPointEvent (Seconds (11), Seconds (17.1), checkInterval, 0, 1));
+  cel2.push_back (CheckPointEvent (Seconds (18), Seconds (24), checkInterval, 0, 2));
 
   std::string cel3name ("ho: 0 -> 1 -> 2 -> 3");
   std::list<CheckPointEvent> cel3;
-  cel3.push_back (CheckPointEvent (Seconds (1), Seconds (10.1), Seconds (1),  0, 0));
-  cel3.push_back (CheckPointEvent (Seconds (11), Seconds (17.1), Seconds (1), 0, 1));
-  cel3.push_back (CheckPointEvent (Seconds (18), Seconds (24.1), Seconds (1), 0, 2));
-  cel3.push_back (CheckPointEvent (Seconds (25), Seconds (37), Seconds (1), 0, 3));
+  cel3.push_back (CheckPointEvent (Seconds (1), Seconds (10.1), checkInterval,  0, 0));
+  cel3.push_back (CheckPointEvent (Seconds (11), Seconds (17.1), checkInterval, 0, 1));
+  cel3.push_back (CheckPointEvent (Seconds (18), Seconds (24.1), checkInterval, 0, 2));
+  cel3.push_back (CheckPointEvent (Seconds (25), Seconds (37), checkInterval, 0, 3));
 
 
   int32_t useIdealRrc;
-  std::vector<std::string> schedulers;
-  schedulers.push_back ("ns3::PfFfMacScheduler");
-  for (std::vector<std::string>::iterator schedIt = schedulers.begin (); schedIt != schedulers.end (); ++schedIt)
+  std::string sched = "ns3::PfFfMacScheduler";
+  std::string ho = "ns3::A2A4RsrqHandoverAlgorithm";
+  for (useIdealRrc = 1; useIdealRrc >= 0; --useIdealRrc)
     {
-      for (useIdealRrc = 1; useIdealRrc >= 0; --useIdealRrc)
-        {
-          //                                             nEnbs, nUes, nDBearers, celist, name, useUdp, sched, admitHo, idealRrc
-          AddTestCase (new LteX2HandoverMeasuresTestCase (  2,   1,    0,      cel1, cel1name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
-          AddTestCase (new LteX2HandoverMeasuresTestCase (  2,   1,    1,      cel1, cel1name, true, *schedIt, true,  useIdealRrc), TestCase::QUICK);
-          AddTestCase (new LteX2HandoverMeasuresTestCase (  2,   1,    2,      cel1, cel1name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
-          AddTestCase (new LteX2HandoverMeasuresTestCase (  3,   1,    0,      cel2, cel2name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
-          AddTestCase (new LteX2HandoverMeasuresTestCase (  3,   1,    1,      cel2, cel2name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
-          AddTestCase (new LteX2HandoverMeasuresTestCase (  3,   1,    2,      cel2, cel2name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
-          AddTestCase (new LteX2HandoverMeasuresTestCase (  4,   1,    0,      cel3, cel3name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
-          AddTestCase (new LteX2HandoverMeasuresTestCase (  4,   1,    1,      cel3, cel3name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
-          AddTestCase (new LteX2HandoverMeasuresTestCase (  4,   1,    2,      cel3, cel3name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
-        }
+      //                                          nEnbs, nUes, nDBearers, celist, name, useUdp, sched, ho, admitHo, idealRrc
+      AddTestCase (new LteX2HandoverMeasuresTestCase (2,   1,    0,    cel1, cel1name, true, sched, ho, true, useIdealRrc), TestCase::TAKES_FOREVER);
+      AddTestCase (new LteX2HandoverMeasuresTestCase (2,   1,    1,    cel1, cel1name, true, sched, ho, true, useIdealRrc), TestCase::QUICK);
+      AddTestCase (new LteX2HandoverMeasuresTestCase (2,   1,    2,    cel1, cel1name, true, sched, ho, true, useIdealRrc), TestCase::TAKES_FOREVER);
+      AddTestCase (new LteX2HandoverMeasuresTestCase (3,   1,    0,    cel2, cel2name, true, sched, ho, true, useIdealRrc), TestCase::TAKES_FOREVER);
+      AddTestCase (new LteX2HandoverMeasuresTestCase (3,   1,    1,    cel2, cel2name, true, sched, ho, true, useIdealRrc), TestCase::TAKES_FOREVER);
+      AddTestCase (new LteX2HandoverMeasuresTestCase (3,   1,    2,    cel2, cel2name, true, sched, ho, true, useIdealRrc), TestCase::EXTENSIVE);
+      AddTestCase (new LteX2HandoverMeasuresTestCase (4,   1,    0,    cel3, cel3name, true, sched, ho, true, useIdealRrc), TestCase::EXTENSIVE);
+      AddTestCase (new LteX2HandoverMeasuresTestCase (4,   1,    1,    cel3, cel3name, true, sched, ho, true, useIdealRrc), TestCase::TAKES_FOREVER);
+      AddTestCase (new LteX2HandoverMeasuresTestCase (4,   1,    2,    cel3, cel3name, true, sched, ho, true, useIdealRrc), TestCase::TAKES_FOREVER);
     }
 
-  schedulers.resize (0);
-  schedulers.push_back ("ns3::RrFfMacScheduler");
-  for (std::vector<std::string>::iterator schedIt = schedulers.begin (); schedIt != schedulers.end (); ++schedIt)
+  sched = "ns3::RrFfMacScheduler";
+  for (useIdealRrc = 1; useIdealRrc >= 0; --useIdealRrc)
     {
-      for (useIdealRrc = 1; useIdealRrc >= 0; --useIdealRrc)
-        {
-          //                                             nEnbs, nUes, nDBearers, celist, name, useUdp, sched, admitHo, idealRrc
-          AddTestCase (new LteX2HandoverMeasuresTestCase (  2,   1,    0,      cel1, cel1name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
-//           AddTestCase (new LteX2HandoverMeasuresTestCase (  2,   1,    1,      cel1b, cel1bname, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
-//           AddTestCase (new LteX2HandoverMeasuresTestCase (  2,   1,    2,      cel1, cel1name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
-          AddTestCase (new LteX2HandoverMeasuresTestCase (  3,   1,    0,      cel2, cel2name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
-//           AddTestCase (new LteX2HandoverMeasuresTestCase (  3,   1,    1,      cel2, cel2name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
-//           AddTestCase (new LteX2HandoverMeasuresTestCase (  3,   1,    2,      cel2, cel2name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
-          AddTestCase (new LteX2HandoverMeasuresTestCase (  4,   1,    0,      cel3, cel3name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
-//           AddTestCase (new LteX2HandoverMeasuresTestCase (  4,   1,    1,      cel3, cel3name, true, *schedIt, true,  useIdealRrc), TestCase::QUICK);
-//           AddTestCase (new LteX2HandoverMeasuresTestCase (  4,   1,    2,      cel3, cel3name, true, *schedIt, true,  useIdealRrc), TestCase::QUICK);
-        }
+      //                                          nEnbs, nUes, nDBearers, celist, name, useUdp, sched, admitHo, idealRrc
+      AddTestCase (new LteX2HandoverMeasuresTestCase (2,   1,    0,    cel1, cel1name, true, sched, ho, true, useIdealRrc), TestCase::EXTENSIVE);
+      AddTestCase (new LteX2HandoverMeasuresTestCase (3,   1,    0,    cel2, cel2name, true, sched, ho, true, useIdealRrc), TestCase::TAKES_FOREVER);
+      AddTestCase (new LteX2HandoverMeasuresTestCase (4,   1,    0,    cel3, cel3name, true, sched, ho, true, useIdealRrc), TestCase::TAKES_FOREVER);
     }
 
-}
+  ho = "ns3::A3RsrpHandoverAlgorithm";
+  sched = "ns3::PfFfMacScheduler";
+  for (useIdealRrc = 1; useIdealRrc >= 0; --useIdealRrc)
+    {
+      //                                          nEnbs, nUes, nDBearers, celist, name, useUdp, sched, admitHo, idealRrc
+      AddTestCase (new LteX2HandoverMeasuresTestCase (2,   1,    0,    cel1, cel1name, true, sched, ho, true, useIdealRrc), TestCase::EXTENSIVE);
+      AddTestCase (new LteX2HandoverMeasuresTestCase (3,   1,    0,    cel2, cel2name, true, sched, ho, true, useIdealRrc), TestCase::TAKES_FOREVER);
+      AddTestCase (new LteX2HandoverMeasuresTestCase (4,   1,    0,    cel3, cel3name, true, sched, ho, true, useIdealRrc), TestCase::TAKES_FOREVER);
+    }
+
+  sched = "ns3::RrFfMacScheduler";
+  for (useIdealRrc = 1; useIdealRrc >= 0; --useIdealRrc)
+    {
+      //                                          nEnbs, nUes, nDBearers, celist, name, useUdp, sched, admitHo, idealRrc
+      AddTestCase (new LteX2HandoverMeasuresTestCase (2,   1,    0,    cel1, cel1name, true, sched, ho, true, useIdealRrc), TestCase::QUICK);
+      AddTestCase (new LteX2HandoverMeasuresTestCase (3,   1,    0,    cel2, cel2name, true, sched, ho, true, useIdealRrc), TestCase::TAKES_FOREVER);
+      AddTestCase (new LteX2HandoverMeasuresTestCase (4,   1,    0,    cel3, cel3name, true, sched, ho, true, useIdealRrc), TestCase::EXTENSIVE);
+    }
+
+} // end of LteX2HandoverMeasuresTestSuite ()
 
 static LteX2HandoverMeasuresTestSuite g_lteX2HandoverMeasuresTestSuiteInstance;
 
 
+
 } // namespace ns3
+
diff -Naur ns-3.18.1/src/lte/wscript ns-3.19/src/lte/wscript
--- ns-3.18.1/src/lte/wscript	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/lte/wscript	2013-12-20 09:44:50.000000000 -0800
@@ -40,6 +40,7 @@
         'helper/lte-helper.cc',
         'helper/lte-stats-calculator.cc',
         'helper/epc-helper.cc',
+        'helper/point-to-point-epc-helper.cc',
         'helper/radio-bearer-stats-calculator.cc',
         'helper/radio-bearer-stats-connector.cc',
         'helper/phy-stats-calculator.cc',
@@ -98,6 +99,13 @@
         'model/epc-mme.cc',
         'model/lte-asn1-header.cc',
         'model/lte-rrc-header.cc',
+        'model/lte-handover-management-sap.cc',
+        'model/lte-handover-algorithm.cc',
+        'model/a2-a4-rsrq-handover-algorithm.cc',
+        'model/a3-rsrp-handover-algorithm.cc',
+        'model/no-op-handover-algorithm.cc',
+        'model/lte-anr-sap.cc',
+        'model/lte-anr.cc',
         ]
 
     module_test = bld.create_ns3_module_test_library('lte')
@@ -142,7 +150,9 @@
         'test/test-lte-x2-handover-measures.cc',
         'test/test-asn1-encoding.cc',
         'test/lte-test-ue-measurements.cc',
+        'test/lte-test-cell-selection.cc',
         'test/test-lte-handover-delay.cc',
+        'test/test-lte-handover-target.cc',
         ]
 
     headers = bld(features='ns3header')
@@ -184,6 +194,7 @@
         'helper/lte-helper.h',
         'helper/lte-stats-calculator.h',
         'helper/epc-helper.h',
+        'helper/point-to-point-epc-helper.h',
         'helper/phy-stats-calculator.h',
         'helper/mac-stats-calculator.h',
         'helper/phy-tx-stats-calculator.h',
@@ -242,6 +253,13 @@
         'model/epc-mme.h',
         'model/lte-asn1-header.h',
         'model/lte-rrc-header.h',
+        'model/lte-handover-management-sap.h',
+        'model/lte-handover-algorithm.h',
+        'model/a2-a4-rsrq-handover-algorithm.h',
+        'model/a3-rsrp-handover-algorithm.h',
+        'model/no-op-handover-algorithm.h',
+        'model/lte-anr-sap.h',
+        'model/lte-anr.h',
         ]
 
     if (bld.env['ENABLE_EXAMPLES']):
diff -Naur ns-3.18.1/src/mesh/bindings/modulegen__gcc_ILP32.py ns-3.19/src/mesh/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/mesh/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mesh/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -33,7 +33,7 @@
     ## qos-utils.h (module 'wifi'): ns3::AcIndex [enumeration]
     module.add_enum('AcIndex', ['AC_BE', 'AC_BK', 'AC_VI', 'AC_VO', 'AC_BE_NQOS', 'AC_UNDEF'], import_from_module='ns.wifi')
     ## edca-txop-n.h (module 'wifi'): ns3::TypeOfStation [enumeration]
-    module.add_enum('TypeOfStation', ['STA', 'AP', 'ADHOC_STA', 'MESH', 'HT_STA', 'HT_AP', 'HT_ADHOC_STA'], import_from_module='ns.wifi')
+    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')
     ## address.h (module 'network'): ns3::Address [class]
@@ -157,7 +157,7 @@
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation [struct]
     module.add_class('TraceSourceInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
     ## wifi-helper.h (module 'wifi'): ns3::WifiHelper [class]
-    module.add_class('WifiHelper', import_from_module='ns.wifi')
+    module.add_class('WifiHelper', allow_subclassing=True, import_from_module='ns.wifi')
     ## wifi-helper.h (module 'wifi'): ns3::WifiMacHelper [class]
     module.add_class('WifiMacHelper', allow_subclassing=True, import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiMode [class]
@@ -237,7 +237,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -247,7 +247,7 @@
     ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader [class]
     module.add_class('WifiActionHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
     ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::CategoryValue [enumeration]
-    module.add_enum('CategoryValue', ['BLOCK_ACK', 'MESH_PEERING_MGT', 'MESH_LINK_METRIC', 'MESH_PATH_SELECTION', 'MESH_INTERWORKING', 'MESH_RESOURCE_COORDINATION', 'MESH_PROXY_FORWARDING'], outer_class=root_module['ns3::WifiActionHeader'], import_from_module='ns.wifi')
+    module.add_enum('CategoryValue', ['BLOCK_ACK', 'MESH_PEERING_MGT', 'MESH_LINK_METRIC', 'MESH_PATH_SELECTION', 'MESH_INTERWORKING', 'MESH_RESOURCE_COORDINATION', 'MESH_PROXY_FORWARDING', 'VENDOR_SPECIFIC_ACTION'], outer_class=root_module['ns3::WifiActionHeader'], import_from_module='ns.wifi')
     ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::PeerLinkMgtActionValue [enumeration]
     module.add_enum('PeerLinkMgtActionValue', ['PEER_LINK_OPEN', 'PEER_LINK_CONFIRM', 'PEER_LINK_CLOSE'], outer_class=root_module['ns3::WifiActionHeader'], import_from_module='ns.wifi')
     ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::LinkMetricActionValue [enumeration]
@@ -1988,10 +1988,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -3326,17 +3327,17 @@
     cls.add_method('Install', 
                    'ns3::NetDeviceContainer', 
                    [param('ns3::WifiPhyHelper const &', 'phy'), param('ns3::WifiMacHelper const &', 'mac'), param('ns3::NodeContainer', 'c')], 
-                   is_const=True)
+                   is_const=True, is_virtual=True)
     ## wifi-helper.h (module 'wifi'): ns3::NetDeviceContainer ns3::WifiHelper::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_const=True, is_virtual=True)
     ## wifi-helper.h (module 'wifi'): ns3::NetDeviceContainer ns3::WifiHelper::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_const=True, is_virtual=True)
     ## wifi-helper.h (module 'wifi'): void ns3::WifiHelper::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', 
@@ -3344,7 +3345,8 @@
     ## wifi-helper.h (module 'wifi'): void ns3::WifiHelper::SetStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('SetStandard', 
                    'void', 
-                   [param('ns3::WifiPhyStandard', 'standard')])
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   is_virtual=True)
     return
 
 def register_Ns3WifiMacHelper_methods(root_module, cls):
@@ -3540,8 +3542,8 @@
     cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
     cls.add_constructor([])
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode m, uint8_t l, uint8_t r, bool sg, uint8_t ns, uint8_t ne, bool Stbc) [constructor]
-    cls.add_constructor([param('ns3::WifiMode', 'm'), param('uint8_t', 'l'), param('uint8_t', 'r'), param('bool', 'sg'), param('uint8_t', 'ns'), param('uint8_t', 'ne'), param('bool', 'Stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode mode, uint8_t powerLevel, uint8_t retries, bool shortGuardInterval, uint8_t nss, uint8_t ness, bool stbc) [constructor]
+    cls.add_constructor([param('ns3::WifiMode', 'mode'), param('uint8_t', 'powerLevel'), param('uint8_t', 'retries'), param('bool', 'shortGuardInterval'), param('uint8_t', 'nss'), param('uint8_t', 'ness'), param('bool', 'stbc')])
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
@@ -3597,10 +3599,10 @@
     cls.add_method('SetShortGuardInterval', 
                    'void', 
                    [param('bool', 'guardinterval')])
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbcsatuts) [member function]
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbc) [member function]
     cls.add_method('SetStbc', 
                    'void', 
-                   [param('bool', 'stbcsatuts')])
+                   [param('bool', 'stbc')])
     ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetTxPowerLevel(uint8_t powerlevel) [member function]
     cls.add_method('SetTxPowerLevel', 
                    'void', 
@@ -4670,6 +4672,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -4680,6 +4687,11 @@
                    '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', 
@@ -4695,6 +4707,11 @@
                    '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', 
@@ -4720,6 +4737,11 @@
                    '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', 
@@ -5616,10 +5638,10 @@
     cls.add_method('SetProbeResp', 
                    'void', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAckPolicy(ns3::WifiMacHeader::QosAckPolicy arg0) [member function]
+    ## 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', 'arg0')])
+                   [param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAmsdu() [member function]
     cls.add_method('SetQosAmsdu', 
                    'void', 
@@ -6295,15 +6317,15 @@
                    'void', 
                    [param('bool', 'greenfield')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool GuardInterval) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool guardInterval) [member function]
     cls.add_method('SetGuardInterval', 
                    'void', 
-                   [param('bool', 'GuardInterval')], 
+                   [param('bool', 'guardInterval')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool Ldpc) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool ldpc) [member function]
     cls.add_method('SetLdpc', 
                    'void', 
-                   [param('bool', 'Ldpc')], 
+                   [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', 
@@ -7205,10 +7227,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetHtImmediateAck(bool immeadiateAck) [member function]
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetHtImmediateAck(bool immediateAck) [member function]
     cls.add_method('SetHtImmediateAck', 
                    'void', 
-                   [param('bool', 'immeadiateAck')])
+                   [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', 
@@ -8924,6 +8946,31 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::DcaTxop> ns3::RegularWifiMac::GetDcaTxop() const [member function]
+    cls.add_method('GetDcaTxop', 
+                   'ns3::Ptr< ns3::DcaTxop >', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::EdcaTxopN> ns3::RegularWifiMac::GetVOQueue() const [member function]
+    cls.add_method('GetVOQueue', 
+                   'ns3::Ptr< ns3::EdcaTxopN >', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::EdcaTxopN> ns3::RegularWifiMac::GetVIQueue() const [member function]
+    cls.add_method('GetVIQueue', 
+                   'ns3::Ptr< ns3::EdcaTxopN >', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::EdcaTxopN> ns3::RegularWifiMac::GetBEQueue() const [member function]
+    cls.add_method('GetBEQueue', 
+                   'ns3::Ptr< ns3::EdcaTxopN >', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::EdcaTxopN> ns3::RegularWifiMac::GetBKQueue() const [member function]
+    cls.add_method('GetBKQueue', 
+                   'ns3::Ptr< ns3::EdcaTxopN >', 
+                   [], 
+                   is_const=True, visibility='protected')
     ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('FinishConfigureStandard', 
                    'void', 
diff -Naur ns-3.18.1/src/mesh/bindings/modulegen__gcc_LP64.py ns-3.19/src/mesh/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/mesh/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mesh/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -33,7 +33,7 @@
     ## qos-utils.h (module 'wifi'): ns3::AcIndex [enumeration]
     module.add_enum('AcIndex', ['AC_BE', 'AC_BK', 'AC_VI', 'AC_VO', 'AC_BE_NQOS', 'AC_UNDEF'], import_from_module='ns.wifi')
     ## edca-txop-n.h (module 'wifi'): ns3::TypeOfStation [enumeration]
-    module.add_enum('TypeOfStation', ['STA', 'AP', 'ADHOC_STA', 'MESH', 'HT_STA', 'HT_AP', 'HT_ADHOC_STA'], import_from_module='ns.wifi')
+    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')
     ## address.h (module 'network'): ns3::Address [class]
@@ -157,7 +157,7 @@
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation [struct]
     module.add_class('TraceSourceInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
     ## wifi-helper.h (module 'wifi'): ns3::WifiHelper [class]
-    module.add_class('WifiHelper', import_from_module='ns.wifi')
+    module.add_class('WifiHelper', allow_subclassing=True, import_from_module='ns.wifi')
     ## wifi-helper.h (module 'wifi'): ns3::WifiMacHelper [class]
     module.add_class('WifiMacHelper', allow_subclassing=True, import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiMode [class]
@@ -237,7 +237,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -247,7 +247,7 @@
     ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader [class]
     module.add_class('WifiActionHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
     ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::CategoryValue [enumeration]
-    module.add_enum('CategoryValue', ['BLOCK_ACK', 'MESH_PEERING_MGT', 'MESH_LINK_METRIC', 'MESH_PATH_SELECTION', 'MESH_INTERWORKING', 'MESH_RESOURCE_COORDINATION', 'MESH_PROXY_FORWARDING'], outer_class=root_module['ns3::WifiActionHeader'], import_from_module='ns.wifi')
+    module.add_enum('CategoryValue', ['BLOCK_ACK', 'MESH_PEERING_MGT', 'MESH_LINK_METRIC', 'MESH_PATH_SELECTION', 'MESH_INTERWORKING', 'MESH_RESOURCE_COORDINATION', 'MESH_PROXY_FORWARDING', 'VENDOR_SPECIFIC_ACTION'], outer_class=root_module['ns3::WifiActionHeader'], import_from_module='ns.wifi')
     ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::PeerLinkMgtActionValue [enumeration]
     module.add_enum('PeerLinkMgtActionValue', ['PEER_LINK_OPEN', 'PEER_LINK_CONFIRM', 'PEER_LINK_CLOSE'], outer_class=root_module['ns3::WifiActionHeader'], import_from_module='ns.wifi')
     ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::LinkMetricActionValue [enumeration]
@@ -1988,10 +1988,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -3326,17 +3327,17 @@
     cls.add_method('Install', 
                    'ns3::NetDeviceContainer', 
                    [param('ns3::WifiPhyHelper const &', 'phy'), param('ns3::WifiMacHelper const &', 'mac'), param('ns3::NodeContainer', 'c')], 
-                   is_const=True)
+                   is_const=True, is_virtual=True)
     ## wifi-helper.h (module 'wifi'): ns3::NetDeviceContainer ns3::WifiHelper::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_const=True, is_virtual=True)
     ## wifi-helper.h (module 'wifi'): ns3::NetDeviceContainer ns3::WifiHelper::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_const=True, is_virtual=True)
     ## wifi-helper.h (module 'wifi'): void ns3::WifiHelper::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', 
@@ -3344,7 +3345,8 @@
     ## wifi-helper.h (module 'wifi'): void ns3::WifiHelper::SetStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('SetStandard', 
                    'void', 
-                   [param('ns3::WifiPhyStandard', 'standard')])
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   is_virtual=True)
     return
 
 def register_Ns3WifiMacHelper_methods(root_module, cls):
@@ -3540,8 +3542,8 @@
     cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
     cls.add_constructor([])
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode m, uint8_t l, uint8_t r, bool sg, uint8_t ns, uint8_t ne, bool Stbc) [constructor]
-    cls.add_constructor([param('ns3::WifiMode', 'm'), param('uint8_t', 'l'), param('uint8_t', 'r'), param('bool', 'sg'), param('uint8_t', 'ns'), param('uint8_t', 'ne'), param('bool', 'Stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode mode, uint8_t powerLevel, uint8_t retries, bool shortGuardInterval, uint8_t nss, uint8_t ness, bool stbc) [constructor]
+    cls.add_constructor([param('ns3::WifiMode', 'mode'), param('uint8_t', 'powerLevel'), param('uint8_t', 'retries'), param('bool', 'shortGuardInterval'), param('uint8_t', 'nss'), param('uint8_t', 'ness'), param('bool', 'stbc')])
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
@@ -3597,10 +3599,10 @@
     cls.add_method('SetShortGuardInterval', 
                    'void', 
                    [param('bool', 'guardinterval')])
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbcsatuts) [member function]
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbc) [member function]
     cls.add_method('SetStbc', 
                    'void', 
-                   [param('bool', 'stbcsatuts')])
+                   [param('bool', 'stbc')])
     ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetTxPowerLevel(uint8_t powerlevel) [member function]
     cls.add_method('SetTxPowerLevel', 
                    'void', 
@@ -4670,6 +4672,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -4680,6 +4687,11 @@
                    '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', 
@@ -4695,6 +4707,11 @@
                    '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', 
@@ -4720,6 +4737,11 @@
                    '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', 
@@ -5616,10 +5638,10 @@
     cls.add_method('SetProbeResp', 
                    'void', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAckPolicy(ns3::WifiMacHeader::QosAckPolicy arg0) [member function]
+    ## 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', 'arg0')])
+                   [param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAmsdu() [member function]
     cls.add_method('SetQosAmsdu', 
                    'void', 
@@ -6295,15 +6317,15 @@
                    'void', 
                    [param('bool', 'greenfield')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool GuardInterval) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool guardInterval) [member function]
     cls.add_method('SetGuardInterval', 
                    'void', 
-                   [param('bool', 'GuardInterval')], 
+                   [param('bool', 'guardInterval')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool Ldpc) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool ldpc) [member function]
     cls.add_method('SetLdpc', 
                    'void', 
-                   [param('bool', 'Ldpc')], 
+                   [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', 
@@ -7205,10 +7227,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetHtImmediateAck(bool immeadiateAck) [member function]
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetHtImmediateAck(bool immediateAck) [member function]
     cls.add_method('SetHtImmediateAck', 
                    'void', 
-                   [param('bool', 'immeadiateAck')])
+                   [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', 
@@ -8924,6 +8946,31 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::DcaTxop> ns3::RegularWifiMac::GetDcaTxop() const [member function]
+    cls.add_method('GetDcaTxop', 
+                   'ns3::Ptr< ns3::DcaTxop >', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::EdcaTxopN> ns3::RegularWifiMac::GetVOQueue() const [member function]
+    cls.add_method('GetVOQueue', 
+                   'ns3::Ptr< ns3::EdcaTxopN >', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::EdcaTxopN> ns3::RegularWifiMac::GetVIQueue() const [member function]
+    cls.add_method('GetVIQueue', 
+                   'ns3::Ptr< ns3::EdcaTxopN >', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::EdcaTxopN> ns3::RegularWifiMac::GetBEQueue() const [member function]
+    cls.add_method('GetBEQueue', 
+                   'ns3::Ptr< ns3::EdcaTxopN >', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::EdcaTxopN> ns3::RegularWifiMac::GetBKQueue() const [member function]
+    cls.add_method('GetBKQueue', 
+                   'ns3::Ptr< ns3::EdcaTxopN >', 
+                   [], 
+                   is_const=True, visibility='protected')
     ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('FinishConfigureStandard', 
                    'void', 
diff -Naur ns-3.18.1/src/mesh/helper/dot11s/dot11s-installer.cc ns-3.19/src/mesh/helper/dot11s/dot11s-installer.cc
--- ns-3.18.1/src/mesh/helper/dot11s/dot11s-installer.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mesh/helper/dot11s/dot11s-installer.cc	2013-12-20 09:44:50.000000000 -0800
@@ -25,7 +25,9 @@
 
 namespace ns3 {
 using namespace dot11s;
-NS_OBJECT_ENSURE_REGISTERED (Dot11sStack);
+NS_OBJECT_ENSURE_REGISTERED (Dot11sStack)
+  ;
+  
 TypeId
 Dot11sStack::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/mesh/helper/flame/flame-installer.cc ns-3.19/src/mesh/helper/flame/flame-installer.cc
--- ns-3.18.1/src/mesh/helper/flame/flame-installer.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mesh/helper/flame/flame-installer.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,9 @@
 namespace ns3
 {
 using namespace flame;
-NS_OBJECT_ENSURE_REGISTERED (FlameStack);
+NS_OBJECT_ENSURE_REGISTERED (FlameStack)
+  ;
+  
 TypeId
 FlameStack::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/mesh/model/dot11s/airtime-metric.cc ns-3.19/src/mesh/model/dot11s/airtime-metric.cc
--- ns-3.18.1/src/mesh/model/dot11s/airtime-metric.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mesh/model/dot11s/airtime-metric.cc	2013-12-20 09:44:50.000000000 -0800
@@ -25,7 +25,9 @@
 
 namespace ns3 {
 namespace dot11s {
-NS_OBJECT_ENSURE_REGISTERED (AirtimeLinkMetricCalculator);
+NS_OBJECT_ENSURE_REGISTERED (AirtimeLinkMetricCalculator)
+  ;
+  
 TypeId
 AirtimeLinkMetricCalculator::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/mesh/model/dot11s/hwmp-protocol.cc ns-3.19/src/mesh/model/dot11s/hwmp-protocol.cc
--- ns-3.18.1/src/mesh/model/dot11s/hwmp-protocol.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mesh/model/dot11s/hwmp-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -41,7 +41,9 @@
 namespace ns3 {
 namespace dot11s {
 
-NS_OBJECT_ENSURE_REGISTERED (HwmpProtocol);
+NS_OBJECT_ENSURE_REGISTERED (HwmpProtocol)
+  ;
+  
 TypeId
 HwmpProtocol::GetTypeId ()
 {
diff -Naur ns-3.18.1/src/mesh/model/dot11s/hwmp-rtable.cc ns-3.19/src/mesh/model/dot11s/hwmp-rtable.cc
--- ns-3.18.1/src/mesh/model/dot11s/hwmp-rtable.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mesh/model/dot11s/hwmp-rtable.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 NS_LOG_COMPONENT_DEFINE ("HwmpRtable");
 
-NS_OBJECT_ENSURE_REGISTERED (HwmpRtable);
+NS_OBJECT_ENSURE_REGISTERED (HwmpRtable)
+  ;
 
 TypeId
 HwmpRtable::GetTypeId ()
diff -Naur ns-3.18.1/src/mesh/model/dot11s/hwmp-tag.cc ns-3.19/src/mesh/model/dot11s/hwmp-tag.cc
--- ns-3.18.1/src/mesh/model/dot11s/hwmp-tag.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mesh/model/dot11s/hwmp-tag.cc	2013-12-20 09:44:50.000000000 -0800
@@ -23,7 +23,9 @@
 namespace ns3 {
 namespace dot11s {
 
-NS_OBJECT_ENSURE_REGISTERED (HwmpTag);
+NS_OBJECT_ENSURE_REGISTERED (HwmpTag)
+  ;
+  
 //Class HwmpTag:
 HwmpTag::HwmpTag () :
   m_address (Mac48Address::GetBroadcast ()), m_ttl (0), m_metric (0), m_seqno (0)
diff -Naur ns-3.18.1/src/mesh/model/dot11s/peer-link.cc ns-3.19/src/mesh/model/dot11s/peer-link.cc
--- ns-3.18.1/src/mesh/model/dot11s/peer-link.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mesh/model/dot11s/peer-link.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 namespace ns3 {
 namespace dot11s {
 
-NS_OBJECT_ENSURE_REGISTERED ( PeerLink);
+NS_OBJECT_ENSURE_REGISTERED ( PeerLink)
+  ;
 
 TypeId
 PeerLink::GetTypeId ()
diff -Naur ns-3.18.1/src/mesh/model/dot11s/peer-link-frame.cc ns-3.19/src/mesh/model/dot11s/peer-link-frame.cc
--- ns-3.18.1/src/mesh/model/dot11s/peer-link-frame.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mesh/model/dot11s/peer-link-frame.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,8 @@
 
 namespace ns3 {
 namespace dot11s {
-NS_OBJECT_ENSURE_REGISTERED (PeerLinkFrameStart);
+NS_OBJECT_ENSURE_REGISTERED (PeerLinkFrameStart)
+  ;
 
 PeerLinkFrameStart::PeerLinkFrameStart () :
   m_subtype (255), m_capability (0), m_aid (0), m_rates (SupportedRates ()), m_meshId (),
diff -Naur ns-3.18.1/src/mesh/model/dot11s/peer-management-protocol.cc ns-3.19/src/mesh/model/dot11s/peer-management-protocol.cc
--- ns-3.18.1/src/mesh/model/dot11s/peer-management-protocol.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mesh/model/dot11s/peer-management-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -39,7 +39,8 @@
 /***************************************************
  * PeerManager
  ***************************************************/
-NS_OBJECT_ENSURE_REGISTERED (PeerManagementProtocol);
+NS_OBJECT_ENSURE_REGISTERED (PeerManagementProtocol)
+  ;
 
 TypeId
 PeerManagementProtocol::GetTypeId (void)
diff -Naur ns-3.18.1/src/mesh/model/flame/flame-header.cc ns-3.19/src/mesh/model/flame/flame-header.cc
--- ns-3.18.1/src/mesh/model/flame/flame-header.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mesh/model/flame/flame-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,8 @@
 namespace ns3 {
 namespace flame {
 
-NS_OBJECT_ENSURE_REGISTERED (FlameHeader);
+NS_OBJECT_ENSURE_REGISTERED (FlameHeader)
+  ;
 
 FlameHeader::FlameHeader () :
   m_cost (0), m_seqno (0), m_origDst (Mac48Address ()), m_origSrc (Mac48Address ())
diff -Naur ns-3.18.1/src/mesh/model/flame/flame-protocol.cc ns-3.19/src/mesh/model/flame/flame-protocol.cc
--- ns-3.18.1/src/mesh/model/flame/flame-protocol.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mesh/model/flame/flame-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -38,8 +38,10 @@
 //-----------------------------------------------------------------------------
 // FlameTag
 //-----------------------------------------------------------------------------
-NS_OBJECT_ENSURE_REGISTERED (FlameTag);
-NS_OBJECT_ENSURE_REGISTERED (FlameProtocol);
+NS_OBJECT_ENSURE_REGISTERED (FlameTag)
+  ;
+NS_OBJECT_ENSURE_REGISTERED (FlameProtocol)
+  ;
 
 TypeId
 FlameTag::GetTypeId ()
diff -Naur ns-3.18.1/src/mesh/model/flame/flame-rtable.cc ns-3.19/src/mesh/model/flame/flame-rtable.cc
--- ns-3.18.1/src/mesh/model/flame/flame-rtable.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mesh/model/flame/flame-rtable.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 
 NS_LOG_COMPONENT_DEFINE ("FlameRtable");
 
-NS_OBJECT_ENSURE_REGISTERED (FlameRtable);
+NS_OBJECT_ENSURE_REGISTERED (FlameRtable)
+  ;
 
 TypeId
 FlameRtable::GetTypeId ()
diff -Naur ns-3.18.1/src/mesh/model/mesh-l2-routing-protocol.cc ns-3.19/src/mesh/model/mesh-l2-routing-protocol.cc
--- ns-3.18.1/src/mesh/model/mesh-l2-routing-protocol.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mesh/model/mesh-l2-routing-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -27,7 +27,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (MeshL2RoutingProtocol);
+NS_OBJECT_ENSURE_REGISTERED (MeshL2RoutingProtocol)
+  ;
 
 TypeId
 MeshL2RoutingProtocol::GetTypeId (void)
diff -Naur ns-3.18.1/src/mesh/model/mesh-point-device.cc ns-3.19/src/mesh/model/mesh-point-device.cc
--- ns-3.18.1/src/mesh/model/mesh-point-device.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mesh/model/mesh-point-device.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (MeshPointDevice);
+NS_OBJECT_ENSURE_REGISTERED (MeshPointDevice)
+  ;
 
 TypeId
 MeshPointDevice::GetTypeId ()
diff -Naur ns-3.18.1/src/mesh/model/mesh-wifi-interface-mac.cc ns-3.19/src/mesh/model/mesh-wifi-interface-mac.cc
--- ns-3.18.1/src/mesh/model/mesh-wifi-interface-mac.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mesh/model/mesh-wifi-interface-mac.cc	2013-12-20 09:44:50.000000000 -0800
@@ -40,7 +40,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (MeshWifiInterfaceMac);
+NS_OBJECT_ENSURE_REGISTERED (MeshWifiInterfaceMac)
+  ;
 
 TypeId
 MeshWifiInterfaceMac::GetTypeId ()
diff -Naur ns-3.18.1/src/mobility/bindings/modulegen__gcc_ILP32.py ns-3.19/src/mobility/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/mobility/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mobility/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -125,7 +125,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1009,10 +1009,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -2303,6 +2304,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -2313,6 +2319,11 @@
                    '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', 
@@ -2328,6 +2339,11 @@
                    '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', 
@@ -2353,6 +2369,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/mobility/bindings/modulegen__gcc_LP64.py ns-3.19/src/mobility/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/mobility/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mobility/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -125,7 +125,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1009,10 +1009,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -2303,6 +2304,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -2313,6 +2319,11 @@
                    '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', 
@@ -2328,6 +2339,11 @@
                    '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', 
@@ -2353,6 +2369,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/mobility/doc/mobility.rst ns-3.19/src/mobility/doc/mobility.rst
--- ns-3.18.1/src/mobility/doc/mobility.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mobility/doc/mobility.rst	2013-12-20 09:44:50.000000000 -0800
@@ -140,7 +140,9 @@
 The |ns2| mobility format is a widely used mobility trace format.  The
 documentation is available at: http://www.isi.edu/nsnam/ns/doc/node172.html
 
-Valid trace files use the following ns2 statements: ::
+Valid trace files use the following ns2 statements:
+
+.. sourcecode:: bash
 
    $node set X_ x1
    $node set Y_ y1
@@ -166,14 +168,14 @@
 
 Some examples of external tools that can export in this format include:
 
-- BonnMotion http://net.cs.uni-bonn.de/wg/cs/applications/bonnmotion/
+- `BonnMotion <http://net.cs.uni-bonn.de/wg/cs/applications/bonnmotion/>`_
 
-  - Some installation instructions for BonnMotion can be found here:  http://www.nsnam.org/wiki/HOWTO_use_ns-3_with_BonnMotion_mobility_generator_and_analysis_tool
-  - Documentation on using BonnMotion with |ns3| is posted here: http://www.ida.liu.se/~rikno/files/mobility_generation.pdf  
+  - `Installation instructions <http://www.nsnam.org/wiki/HOWTO_use_ns-3_with_BonnMotion_mobility_generator_and_analysis_tool>`_ and
+  - `Documentation <http://www.ida.liu.se/~rikno/files/mobility_generation.pdf>`_ for using BonnMotion with |ns3|
 
-- SUMO http://sourceforge.net/apps/mediawiki/sumo/index.php?title=Main_Page
-- TraNS http://trans.epfl.ch/
-- the ``setdest`` utility in |ns2|, documented here: http://www.winlab.rutgers.edu/~zhibinwu/html/ns2_wireless_scene.htm
+- `SUMO <http://sourceforge.net/apps/mediawiki/sumo/index.php?title=Main_Page>`_
+- `TraNS <http://trans.epfl.ch/>`_
+- |ns2| `setdest <http://www.winlab.rutgers.edu/~zhibinwu/html/ns2_wireless_scene.htm>`_ utility
 
 A special Ns2MobilityHelper object can be used to parse these files
 and convert the statements into |ns3| mobility events.  The underlying
@@ -208,7 +210,7 @@
 First, the user instantiates a ``MobilityHelper`` object and sets some
 ``Attributes`` controlling the "position allocator" functionality.
 
-::
+.. sourcecode:: cpp
 
   MobilityHelper mobility;
 
@@ -227,14 +229,14 @@
 
 Next, the user typically sets the MobilityModel subclass; e.g.:
 
-::
+.. sourcecode:: cpp
 
   mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",
     "Bounds", RectangleValue (Rectangle (-50, 50, -50, 50)));
 
 Once the helper is configured, it is typically passed a container, such as:
 
-::
+.. sourcecode:: cpp
 
   mobility.Install (wifiStaNodes);
 
@@ -270,13 +272,17 @@
 
 Example usage:
 
-::
+.. sourcecode:: bash
 
-  ./waf --run "ns2-mobility-trace --traceFile=src/mobility/examples/default.ns_movements --nodeNum=2 --duration=100.0 --logFile=ns2-mob.log"
+  $ ./waf --run "ns2-mobility-trace \
+  --traceFile=src/mobility/examples/default.ns_movements \
+  --nodeNum=2 \
+  --duration=100.0 \
+  --logFile=ns2-mob.log"
 
 Sample log file output:
 
-::
+.. sourcecode:: text
 
   +0.0ns POS: x=150, y=93.986, z=0; VEL:0, y=50.4038, z=0
   +0.0ns POS: x=195.418, y=150, z=0; VEL:50.1186, y=0, z=0
@@ -299,7 +305,7 @@
 
 The program ``bonnmotion-ns2-example.cc`` will output the following to stdout:
 
-::
+.. sourcecode:: text
 
   At 0.00 node 0: Position(329.82, 66.06, 0.00);   Speed(0.53, -0.22, 0.00)
   At 100.00 node 0: Position(378.38, 45.59, 0.00);   Speed(0.00, 0.00, 0.00)
@@ -322,7 +328,7 @@
 The output of the |ns2| ``bonnmotion-example.tcl`` program is shown below
 for comparison (file ``bonnmotion-example.tr``):
 
-::
+.. sourcecode:: text
 
   M 0.00000 0 (329.82, 66.06, 0.00), (378.38, 45.59), 0.57
   M 100.00000 0 (378.38, 45.59, 0.00), (378.38, 45.59), 0.57
@@ -362,7 +368,7 @@
 Class ``MobilityModel`` and class ``PositionAllocator`` both have public
 API to assign streams to underlying random variables:
 
-::
+.. sourcecode:: cpp
 
   /**
    * Assign a fixed random variable stream number to the random variables
@@ -377,7 +383,7 @@
 The class ``MobilityHelper`` also provides this API.  The typical usage 
 pattern when using the helper is:
 
-::
+.. sourcecode:: cpp
 
   int64_t streamIndex = /*some positive integer */  
   MobilityHelper mobility;
diff -Naur ns-3.18.1/src/mobility/helper/mobility-helper.cc ns-3.19/src/mobility/helper/mobility-helper.cc
--- ns-3.18.1/src/mobility/helper/mobility-helper.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mobility/helper/mobility-helper.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("MobilityHelper");
+NS_LOG_COMPONENT_DEFINE ("MobilityHelper")
+  ;
 
 MobilityHelper::MobilityHelper ()
 {
diff -Naur ns-3.18.1/src/mobility/model/constant-acceleration-mobility-model.cc ns-3.19/src/mobility/model/constant-acceleration-mobility-model.cc
--- ns-3.18.1/src/mobility/model/constant-acceleration-mobility-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mobility/model/constant-acceleration-mobility-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -20,7 +20,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ConstantAccelerationMobilityModel);
+NS_OBJECT_ENSURE_REGISTERED (ConstantAccelerationMobilityModel)
+  ;
 
 TypeId ConstantAccelerationMobilityModel::GetTypeId (void)
 {
diff -Naur ns-3.18.1/src/mobility/model/constant-position-mobility-model.cc ns-3.19/src/mobility/model/constant-position-mobility-model.cc
--- ns-3.18.1/src/mobility/model/constant-position-mobility-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mobility/model/constant-position-mobility-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -21,7 +21,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ConstantPositionMobilityModel);
+NS_OBJECT_ENSURE_REGISTERED (ConstantPositionMobilityModel)
+  ;
 
 TypeId
 ConstantPositionMobilityModel::GetTypeId (void)
diff -Naur ns-3.18.1/src/mobility/model/constant-velocity-mobility-model.cc ns-3.19/src/mobility/model/constant-velocity-mobility-model.cc
--- ns-3.18.1/src/mobility/model/constant-velocity-mobility-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mobility/model/constant-velocity-mobility-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -22,7 +22,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ConstantVelocityMobilityModel);
+NS_OBJECT_ENSURE_REGISTERED (ConstantVelocityMobilityModel)
+  ;
 
 TypeId ConstantVelocityMobilityModel::GetTypeId (void)
 {
diff -Naur ns-3.18.1/src/mobility/model/gauss-markov-mobility-model.cc ns-3.19/src/mobility/model/gauss-markov-mobility-model.cc
--- ns-3.18.1/src/mobility/model/gauss-markov-mobility-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mobility/model/gauss-markov-mobility-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -27,7 +27,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (GaussMarkovMobilityModel);
+NS_OBJECT_ENSURE_REGISTERED (GaussMarkovMobilityModel)
+  ;
 
 TypeId
 GaussMarkovMobilityModel::GetTypeId (void)
diff -Naur ns-3.18.1/src/mobility/model/hierarchical-mobility-model.cc ns-3.19/src/mobility/model/hierarchical-mobility-model.cc
--- ns-3.18.1/src/mobility/model/hierarchical-mobility-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mobility/model/hierarchical-mobility-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -22,7 +22,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (HierarchicalMobilityModel);
+NS_OBJECT_ENSURE_REGISTERED (HierarchicalMobilityModel)
+  ;
 
 TypeId 
 HierarchicalMobilityModel::GetTypeId (void)
diff -Naur ns-3.18.1/src/mobility/model/mobility-model.cc ns-3.19/src/mobility/model/mobility-model.cc
--- ns-3.18.1/src/mobility/model/mobility-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mobility/model/mobility-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -25,7 +25,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (MobilityModel);
+NS_OBJECT_ENSURE_REGISTERED (MobilityModel)
+  ;
 
 TypeId 
 MobilityModel::GetTypeId (void)
diff -Naur ns-3.18.1/src/mobility/model/position-allocator.cc ns-3.19/src/mobility/model/position-allocator.cc
--- ns-3.18.1/src/mobility/model/position-allocator.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mobility/model/position-allocator.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (PositionAllocator);
+NS_OBJECT_ENSURE_REGISTERED (PositionAllocator)
+  ;
 
 TypeId 
 PositionAllocator::GetTypeId (void)
@@ -48,7 +49,8 @@
 {
 }
 
-NS_OBJECT_ENSURE_REGISTERED (ListPositionAllocator);
+NS_OBJECT_ENSURE_REGISTERED (ListPositionAllocator)
+  ;
 
 TypeId
 ListPositionAllocator::GetTypeId (void)
@@ -85,7 +87,8 @@
   return 0;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (GridPositionAllocator);
+NS_OBJECT_ENSURE_REGISTERED (GridPositionAllocator)
+  ;
 
 TypeId 
 GridPositionAllocator::GetTypeId (void)
@@ -213,7 +216,8 @@
   return 0;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (RandomRectanglePositionAllocator);
+NS_OBJECT_ENSURE_REGISTERED (RandomRectanglePositionAllocator)
+  ;
 
 TypeId
 RandomRectanglePositionAllocator::GetTypeId (void)
@@ -269,7 +273,8 @@
   return 2;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (RandomBoxPositionAllocator);
+NS_OBJECT_ENSURE_REGISTERED (RandomBoxPositionAllocator)
+  ;
 
 TypeId
 RandomBoxPositionAllocator::GetTypeId (void)
@@ -337,7 +342,8 @@
   return 3;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (RandomDiscPositionAllocator);
+NS_OBJECT_ENSURE_REGISTERED (RandomDiscPositionAllocator)
+  ;
 
 TypeId
 RandomDiscPositionAllocator::GetTypeId (void)
@@ -418,7 +424,8 @@
 
 
 
-NS_OBJECT_ENSURE_REGISTERED (UniformDiscPositionAllocator);
+NS_OBJECT_ENSURE_REGISTERED (UniformDiscPositionAllocator)
+  ;
 
 TypeId
 UniformDiscPositionAllocator::GetTypeId (void)
diff -Naur ns-3.18.1/src/mobility/model/random-direction-2d-mobility-model.cc ns-3.19/src/mobility/model/random-direction-2d-mobility-model.cc
--- ns-3.18.1/src/mobility/model/random-direction-2d-mobility-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mobility/model/random-direction-2d-mobility-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 const double RandomDirection2dMobilityModel::PI = 3.14159265358979323846;
 
-NS_OBJECT_ENSURE_REGISTERED (RandomDirection2dMobilityModel);
+NS_OBJECT_ENSURE_REGISTERED (RandomDirection2dMobilityModel)
+  ;
 
 
 TypeId
diff -Naur ns-3.18.1/src/mobility/model/random-walk-2d-mobility-model.cc ns-3.19/src/mobility/model/random-walk-2d-mobility-model.cc
--- ns-3.18.1/src/mobility/model/random-walk-2d-mobility-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/mobility/model/random-walk-2d-mobility-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (RandomWalk2dMobilityModel);
+NS_OBJECT_ENSURE_REGISTERED (RandomWalk2dMobilityModel)
+  ;
 
 TypeId
 RandomWalk2dMobilityModel::GetTypeId (void)
diff -Naur ns-3.18.1/src/mobility/model/random-waypoint-mobility-model.cc ns-3.19/src/mobility/model/random-waypoint-mobility-model.cc
--- ns-3.18.1/src/mobility/model/random-waypoint-mobility-model.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/mobility/model/random-waypoint-mobility-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -27,7 +27,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (RandomWaypointMobilityModel);
+NS_OBJECT_ENSURE_REGISTERED (RandomWaypointMobilityModel)
+  ;
 
 TypeId
 RandomWaypointMobilityModel::GetTypeId (void)
diff -Naur ns-3.18.1/src/mobility/model/steady-state-random-waypoint-mobility-model.cc ns-3.19/src/mobility/model/steady-state-random-waypoint-mobility-model.cc
--- ns-3.18.1/src/mobility/model/steady-state-random-waypoint-mobility-model.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/mobility/model/steady-state-random-waypoint-mobility-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -25,7 +25,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (SteadyStateRandomWaypointMobilityModel);
+NS_OBJECT_ENSURE_REGISTERED (SteadyStateRandomWaypointMobilityModel)
+  ;
 
 TypeId
 SteadyStateRandomWaypointMobilityModel::GetTypeId (void)
diff -Naur ns-3.18.1/src/mobility/model/waypoint-mobility-model.cc ns-3.19/src/mobility/model/waypoint-mobility-model.cc
--- ns-3.18.1/src/mobility/model/waypoint-mobility-model.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/mobility/model/waypoint-mobility-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (WaypointMobilityModel);
+NS_OBJECT_ENSURE_REGISTERED (WaypointMobilityModel)
+  ;
 
 
 TypeId
diff -Naur ns-3.18.1/src/mpi/bindings/modulegen__gcc_ILP32.py ns-3.19/src/mpi/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/mpi/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/mpi/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -40,20 +40,14 @@
     module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList::Iterator'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
-    ## event-id.h (module 'core'): ns3::EventId [class]
-    module.add_class('EventId', import_from_module='ns.core')
     ## hash.h (module 'core'): ns3::Hasher [class]
     module.add_class('Hasher', import_from_module='ns.core')
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::LbtsMessage [class]
-    module.add_class('LbtsMessage')
     ## mpi-interface.h (module 'mpi'): ns3::MpiInterface [class]
     module.add_class('MpiInterface')
     ## 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]
@@ -72,8 +66,8 @@
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
     module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
-    ## mpi-interface.h (module 'mpi'): ns3::SentBuffer [class]
-    module.add_class('SentBuffer')
+    ## parallel-communication-interface.h (module 'mpi'): ns3::ParallelCommunicationInterface [class]
+    module.add_class('ParallelCommunicationInterface', allow_subclassing=True)
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## tag.h (module 'network'): ns3::Tag [class]
@@ -100,12 +94,6 @@
     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'])
-    ## scheduler.h (module 'core'): ns3::Scheduler [class]
-    module.add_class('Scheduler', import_from_module='ns.core', parent=root_module['ns3::Object'])
-    ## scheduler.h (module 'core'): ns3::Scheduler::Event [struct]
-    module.add_class('Event', import_from_module='ns.core', outer_class=root_module['ns3::Scheduler'])
-    ## scheduler.h (module 'core'): ns3::Scheduler::EventKey [struct]
-    module.add_class('EventKey', import_from_module='ns.core', outer_class=root_module['ns3::Scheduler'])
     ## 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]
@@ -114,8 +102,6 @@
     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]
@@ -124,12 +110,10 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Packet', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Packet>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simulator-impl.h (module 'core'): ns3::SimulatorImpl [class]
-    module.add_class('SimulatorImpl', import_from_module='ns.core', parent=root_module['ns3::Object'])
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -148,20 +132,12 @@
     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'])
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::DistributedSimulatorImpl [class]
-    module.add_class('DistributedSimulatorImpl', parent=root_module['ns3::SimulatorImpl'])
     ## 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> >'])
     ## mpi-receiver.h (module 'mpi'): ns3::MpiReceiver [class]
     module.add_class('MpiReceiver', parent=root_module['ns3::Object'])
     ## nix-vector.h (module 'network'): ns3::NixVector [class]
     module.add_class('NixVector', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker [class]
-    module.add_class('ObjectFactoryChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue [class]
-    module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
@@ -228,13 +204,10 @@
     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_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
     register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
-    register_Ns3LbtsMessage_methods(root_module, root_module['ns3::LbtsMessage'])
     register_Ns3MpiInterface_methods(root_module, root_module['ns3::MpiInterface'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     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'])
@@ -242,7 +215,7 @@
     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_Ns3SentBuffer_methods(root_module, root_module['ns3::SentBuffer'])
+    register_Ns3ParallelCommunicationInterface_methods(root_module, root_module['ns3::ParallelCommunicationInterface'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
@@ -255,19 +228,14 @@
     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_Ns3Scheduler_methods(root_module, root_module['ns3::Scheduler'])
-    register_Ns3SchedulerEvent_methods(root_module, root_module['ns3::Scheduler::Event'])
-    register_Ns3SchedulerEventKey_methods(root_module, root_module['ns3::Scheduler::EventKey'])
     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__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_Ns3SimulatorImpl_methods(root_module, root_module['ns3::SimulatorImpl'])
     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'])
@@ -277,13 +245,9 @@
     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_Ns3DistributedSimulatorImpl_methods(root_module, root_module['ns3::DistributedSimulatorImpl'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
-    register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3MpiReceiver_methods(root_module, root_module['ns3::MpiReceiver'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
-    register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
-    register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
@@ -703,51 +667,6 @@
                    is_static=True, visibility='protected')
     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')])
@@ -777,35 +696,6 @@
                    [])
     return
 
-def register_Ns3LbtsMessage_methods(root_module, cls):
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::LbtsMessage::LbtsMessage(ns3::LbtsMessage const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::LbtsMessage const &', 'arg0')])
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::LbtsMessage::LbtsMessage() [constructor]
-    cls.add_constructor([])
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::LbtsMessage::LbtsMessage(uint32_t rxc, uint32_t txc, uint32_t id, bool isFinished, ns3::Time const & t) [constructor]
-    cls.add_constructor([param('uint32_t', 'rxc'), param('uint32_t', 'txc'), param('uint32_t', 'id'), param('bool', 'isFinished'), param('ns3::Time const &', 't')])
-    ## distributed-simulator-impl.h (module 'mpi'): uint32_t ns3::LbtsMessage::GetMyId() [member function]
-    cls.add_method('GetMyId', 
-                   'uint32_t', 
-                   [])
-    ## distributed-simulator-impl.h (module 'mpi'): uint32_t ns3::LbtsMessage::GetRxCount() [member function]
-    cls.add_method('GetRxCount', 
-                   'uint32_t', 
-                   [])
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::Time ns3::LbtsMessage::GetSmallestTime() [member function]
-    cls.add_method('GetSmallestTime', 
-                   'ns3::Time', 
-                   [])
-    ## distributed-simulator-impl.h (module 'mpi'): uint32_t ns3::LbtsMessage::GetTxCount() [member function]
-    cls.add_method('GetTxCount', 
-                   'uint32_t', 
-                   [])
-    ## distributed-simulator-impl.h (module 'mpi'): bool ns3::LbtsMessage::IsFinished() [member function]
-    cls.add_method('IsFinished', 
-                   'bool', 
-                   [])
-    return
-
 def register_Ns3MpiInterface_methods(root_module, cls):
     ## mpi-interface.h (module 'mpi'): ns3::MpiInterface::MpiInterface() [constructor]
     cls.add_constructor([])
@@ -826,11 +716,6 @@
                    'void', 
                    [param('int *', 'pargc'), param('char * * *', 'pargv')], 
                    is_static=True)
-    ## mpi-interface.h (module 'mpi'): static uint32_t ns3::MpiInterface::GetRxCount() [member function]
-    cls.add_method('GetRxCount', 
-                   'uint32_t', 
-                   [], 
-                   is_static=True)
     ## mpi-interface.h (module 'mpi'): static uint32_t ns3::MpiInterface::GetSize() [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -841,31 +726,16 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
-    ## mpi-interface.h (module 'mpi'): static uint32_t ns3::MpiInterface::GetTxCount() [member function]
-    cls.add_method('GetTxCount', 
-                   'uint32_t', 
-                   [], 
-                   is_static=True)
     ## mpi-interface.h (module 'mpi'): static bool ns3::MpiInterface::IsEnabled() [member function]
     cls.add_method('IsEnabled', 
                    'bool', 
                    [], 
                    is_static=True)
-    ## mpi-interface.h (module 'mpi'): static void ns3::MpiInterface::ReceiveMessages() [member function]
-    cls.add_method('ReceiveMessages', 
-                   'void', 
-                   [], 
-                   is_static=True)
     ## mpi-interface.h (module 'mpi'): static void ns3::MpiInterface::SendPacket(ns3::Ptr<ns3::Packet> p, ns3::Time const & rxTime, uint32_t node, uint32_t dev) [member function]
     cls.add_method('SendPacket', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Time const &', 'rxTime'), param('uint32_t', 'node'), param('uint32_t', 'dev')], 
                    is_static=True)
-    ## mpi-interface.h (module 'mpi'): static void ns3::MpiInterface::TestSendComplete() [member function]
-    cls.add_method('TestSendComplete', 
-                   'void', 
-                   [], 
-                   is_static=True)
     return
 
 def register_Ns3ObjectBase_methods(root_module, cls):
@@ -941,42 +811,6 @@
                    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')])
@@ -1168,23 +1002,46 @@
     cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
     return
 
-def register_Ns3SentBuffer_methods(root_module, cls):
-    ## mpi-interface.h (module 'mpi'): ns3::SentBuffer::SentBuffer(ns3::SentBuffer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::SentBuffer const &', 'arg0')])
-    ## mpi-interface.h (module 'mpi'): ns3::SentBuffer::SentBuffer() [constructor]
-    cls.add_constructor([])
-    ## mpi-interface.h (module 'mpi'): uint8_t * ns3::SentBuffer::GetBuffer() [member function]
-    cls.add_method('GetBuffer', 
-                   'uint8_t *', 
-                   [])
-    ## mpi-interface.h (module 'mpi'): MPI_Request * ns3::SentBuffer::GetRequest() [member function]
-    cls.add_method('GetRequest', 
-                   'MPI_Request *', 
-                   [])
-    ## mpi-interface.h (module 'mpi'): void ns3::SentBuffer::SetBuffer(uint8_t * buffer) [member function]
-    cls.add_method('SetBuffer', 
+def register_Ns3ParallelCommunicationInterface_methods(root_module, cls):
+    ## parallel-communication-interface.h (module 'mpi'): ns3::ParallelCommunicationInterface::ParallelCommunicationInterface() [constructor]
+    cls.add_constructor([])
+    ## parallel-communication-interface.h (module 'mpi'): ns3::ParallelCommunicationInterface::ParallelCommunicationInterface(ns3::ParallelCommunicationInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ParallelCommunicationInterface const &', 'arg0')])
+    ## parallel-communication-interface.h (module 'mpi'): void ns3::ParallelCommunicationInterface::Destroy() [member function]
+    cls.add_method('Destroy', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## parallel-communication-interface.h (module 'mpi'): void ns3::ParallelCommunicationInterface::Disable() [member function]
+    cls.add_method('Disable', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## parallel-communication-interface.h (module 'mpi'): void ns3::ParallelCommunicationInterface::Enable(int * pargc, char * * * pargv) [member function]
+    cls.add_method('Enable', 
+                   'void', 
+                   [param('int *', 'pargc'), param('char * * *', 'pargv')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## parallel-communication-interface.h (module 'mpi'): uint32_t ns3::ParallelCommunicationInterface::GetSize() [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## parallel-communication-interface.h (module 'mpi'): uint32_t ns3::ParallelCommunicationInterface::GetSystemId() [member function]
+    cls.add_method('GetSystemId', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## parallel-communication-interface.h (module 'mpi'): bool ns3::ParallelCommunicationInterface::IsEnabled() [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## parallel-communication-interface.h (module 'mpi'): void ns3::ParallelCommunicationInterface::SendPacket(ns3::Ptr<ns3::Packet> p, ns3::Time const & rxTime, uint32_t node, uint32_t dev) [member function]
+    cls.add_method('SendPacket', 
                    'void', 
-                   [param('uint8_t *', 'buffer')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Time const &', 'rxTime'), param('uint32_t', 'node'), param('uint32_t', 'dev')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, cls):
@@ -1718,71 +1575,6 @@
                    [])
     return
 
-def register_Ns3Scheduler_methods(root_module, cls):
-    ## scheduler.h (module 'core'): ns3::Scheduler::Scheduler() [constructor]
-    cls.add_constructor([])
-    ## scheduler.h (module 'core'): ns3::Scheduler::Scheduler(ns3::Scheduler const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Scheduler const &', 'arg0')])
-    ## scheduler.h (module 'core'): static ns3::TypeId ns3::Scheduler::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## scheduler.h (module 'core'): void ns3::Scheduler::Insert(ns3::Scheduler::Event const & ev) [member function]
-    cls.add_method('Insert', 
-                   'void', 
-                   [param('ns3::Scheduler::Event const &', 'ev')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## scheduler.h (module 'core'): bool ns3::Scheduler::IsEmpty() const [member function]
-    cls.add_method('IsEmpty', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## scheduler.h (module 'core'): ns3::Scheduler::Event ns3::Scheduler::PeekNext() const [member function]
-    cls.add_method('PeekNext', 
-                   'ns3::Scheduler::Event', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## scheduler.h (module 'core'): void ns3::Scheduler::Remove(ns3::Scheduler::Event const & ev) [member function]
-    cls.add_method('Remove', 
-                   'void', 
-                   [param('ns3::Scheduler::Event const &', 'ev')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## scheduler.h (module 'core'): ns3::Scheduler::Event ns3::Scheduler::RemoveNext() [member function]
-    cls.add_method('RemoveNext', 
-                   'ns3::Scheduler::Event', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    return
-
-def register_Ns3SchedulerEvent_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    ## scheduler.h (module 'core'): ns3::Scheduler::Event::Event() [constructor]
-    cls.add_constructor([])
-    ## scheduler.h (module 'core'): ns3::Scheduler::Event::Event(ns3::Scheduler::Event const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Scheduler::Event const &', 'arg0')])
-    ## scheduler.h (module 'core'): ns3::Scheduler::Event::impl [variable]
-    cls.add_instance_attribute('impl', 'ns3::EventImpl *', is_const=False)
-    ## scheduler.h (module 'core'): ns3::Scheduler::Event::key [variable]
-    cls.add_instance_attribute('key', 'ns3::Scheduler::EventKey', is_const=False)
-    return
-
-def register_Ns3SchedulerEventKey_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('>')
-    cls.add_binary_comparison_operator('!=')
-    ## scheduler.h (module 'core'): ns3::Scheduler::EventKey::EventKey() [constructor]
-    cls.add_constructor([])
-    ## scheduler.h (module 'core'): ns3::Scheduler::EventKey::EventKey(ns3::Scheduler::EventKey const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Scheduler::EventKey const &', 'arg0')])
-    ## scheduler.h (module 'core'): ns3::Scheduler::EventKey::m_context [variable]
-    cls.add_instance_attribute('m_context', 'uint32_t', is_const=False)
-    ## scheduler.h (module 'core'): ns3::Scheduler::EventKey::m_ts [variable]
-    cls.add_instance_attribute('m_ts', 'uint64_t', is_const=False)
-    ## scheduler.h (module 'core'): ns3::Scheduler::EventKey::m_uid [variable]
-    cls.add_instance_attribute('m_uid', 'uint32_t', is_const=False)
-    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([])
@@ -1831,18 +1623,6 @@
                    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([])
@@ -1891,108 +1671,6 @@
                    is_static=True)
     return
 
-def register_Ns3SimulatorImpl_methods(root_module, cls):
-    ## simulator-impl.h (module 'core'): ns3::SimulatorImpl::SimulatorImpl() [constructor]
-    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]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [param('ns3::EventId const &', 'ev')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Destroy() [member function]
-    cls.add_method('Destroy', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): uint32_t ns3::SimulatorImpl::GetContext() const [member function]
-    cls.add_method('GetContext', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): ns3::Time ns3::SimulatorImpl::GetDelayLeft(ns3::EventId const & id) const [member function]
-    cls.add_method('GetDelayLeft', 
-                   'ns3::Time', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): ns3::Time ns3::SimulatorImpl::GetMaximumSimulationTime() const [member function]
-    cls.add_method('GetMaximumSimulationTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): uint32_t ns3::SimulatorImpl::GetSystemId() const [member function]
-    cls.add_method('GetSystemId', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): static ns3::TypeId ns3::SimulatorImpl::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## simulator-impl.h (module 'core'): bool ns3::SimulatorImpl::IsExpired(ns3::EventId const & ev) const [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [param('ns3::EventId const &', 'ev')], 
-                   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', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): ns3::Time ns3::SimulatorImpl::Now() const [member function]
-    cls.add_method('Now', 
-                   '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]
-    cls.add_method('Remove', 
-                   'void', 
-                   [param('ns3::EventId const &', 'ev')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Run() [member function]
-    cls.add_method('Run', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): ns3::EventId ns3::SimulatorImpl::Schedule(ns3::Time const & time, ns3::EventImpl * event) [member function]
-    cls.add_method('Schedule', 
-                   'ns3::EventId', 
-                   [param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): ns3::EventId ns3::SimulatorImpl::ScheduleDestroy(ns3::EventImpl * event) [member function]
-    cls.add_method('ScheduleDestroy', 
-                   'ns3::EventId', 
-                   [param('ns3::EventImpl *', 'event')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): ns3::EventId ns3::SimulatorImpl::ScheduleNow(ns3::EventImpl * event) [member function]
-    cls.add_method('ScheduleNow', 
-                   'ns3::EventId', 
-                   [param('ns3::EventImpl *', 'event')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::ScheduleWithContext(uint32_t context, ns3::Time const & time, ns3::EventImpl * event) [member function]
-    cls.add_method('ScheduleWithContext', 
-                   'void', 
-                   [param('uint32_t', 'context'), param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::SetScheduler(ns3::ObjectFactory schedulerFactory) [member function]
-    cls.add_method('SetScheduler', 
-                   'void', 
-                   [param('ns3::ObjectFactory', 'schedulerFactory')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Stop() [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Stop(ns3::Time const & time) [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [param('ns3::Time const &', 'time')], 
-                   is_pure_virtual=True, is_virtual=True)
-    return
-
 def register_Ns3Time_methods(root_module, cls):
     cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
     cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
@@ -2052,6 +1730,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -2062,6 +1745,11 @@
                    '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', 
@@ -2077,6 +1765,11 @@
                    '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', 
@@ -2102,6 +1795,11 @@
                    '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', 
@@ -2362,113 +2060,6 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
-def register_Ns3DistributedSimulatorImpl_methods(root_module, cls):
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::DistributedSimulatorImpl::DistributedSimulatorImpl(ns3::DistributedSimulatorImpl const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DistributedSimulatorImpl const &', 'arg0')])
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::DistributedSimulatorImpl::DistributedSimulatorImpl() [constructor]
-    cls.add_constructor([])
-    ## distributed-simulator-impl.h (module 'mpi'): void ns3::DistributedSimulatorImpl::Cancel(ns3::EventId const & ev) [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [param('ns3::EventId const &', 'ev')], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): void ns3::DistributedSimulatorImpl::Destroy() [member function]
-    cls.add_method('Destroy', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): uint32_t ns3::DistributedSimulatorImpl::GetContext() const [member function]
-    cls.add_method('GetContext', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::Time ns3::DistributedSimulatorImpl::GetDelayLeft(ns3::EventId const & id) const [member function]
-    cls.add_method('GetDelayLeft', 
-                   'ns3::Time', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_const=True, is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::Time ns3::DistributedSimulatorImpl::GetMaximumSimulationTime() const [member function]
-    cls.add_method('GetMaximumSimulationTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): uint32_t ns3::DistributedSimulatorImpl::GetSystemId() const [member function]
-    cls.add_method('GetSystemId', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): static ns3::TypeId ns3::DistributedSimulatorImpl::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## distributed-simulator-impl.h (module 'mpi'): bool ns3::DistributedSimulatorImpl::IsExpired(ns3::EventId const & ev) const [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [param('ns3::EventId const &', 'ev')], 
-                   is_const=True, is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): bool ns3::DistributedSimulatorImpl::IsFinished() const [member function]
-    cls.add_method('IsFinished', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::Time ns3::DistributedSimulatorImpl::Now() const [member function]
-    cls.add_method('Now', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): void ns3::DistributedSimulatorImpl::Remove(ns3::EventId const & ev) [member function]
-    cls.add_method('Remove', 
-                   'void', 
-                   [param('ns3::EventId const &', 'ev')], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): void ns3::DistributedSimulatorImpl::Run() [member function]
-    cls.add_method('Run', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::EventId ns3::DistributedSimulatorImpl::Schedule(ns3::Time const & time, ns3::EventImpl * event) [member function]
-    cls.add_method('Schedule', 
-                   'ns3::EventId', 
-                   [param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::EventId ns3::DistributedSimulatorImpl::ScheduleDestroy(ns3::EventImpl * event) [member function]
-    cls.add_method('ScheduleDestroy', 
-                   'ns3::EventId', 
-                   [param('ns3::EventImpl *', 'event')], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::EventId ns3::DistributedSimulatorImpl::ScheduleNow(ns3::EventImpl * event) [member function]
-    cls.add_method('ScheduleNow', 
-                   'ns3::EventId', 
-                   [param('ns3::EventImpl *', 'event')], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): void ns3::DistributedSimulatorImpl::ScheduleWithContext(uint32_t context, ns3::Time const & time, ns3::EventImpl * event) [member function]
-    cls.add_method('ScheduleWithContext', 
-                   'void', 
-                   [param('uint32_t', 'context'), param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): void ns3::DistributedSimulatorImpl::SetScheduler(ns3::ObjectFactory schedulerFactory) [member function]
-    cls.add_method('SetScheduler', 
-                   'void', 
-                   [param('ns3::ObjectFactory', 'schedulerFactory')], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): void ns3::DistributedSimulatorImpl::Stop() [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): void ns3::DistributedSimulatorImpl::Stop(ns3::Time const & time) [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [param('ns3::Time const &', 'time')], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): void ns3::DistributedSimulatorImpl::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   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')])
@@ -2491,30 +2082,6 @@
                    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_Ns3MpiReceiver_methods(root_module, cls):
     ## mpi-receiver.h (module 'mpi'): ns3::MpiReceiver::MpiReceiver() [constructor]
     cls.add_constructor([])
@@ -2584,46 +2151,6 @@
                    is_const=True)
     return
 
-def register_Ns3ObjectFactoryChecker_methods(root_module, cls):
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker() [constructor]
-    cls.add_constructor([])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker(ns3::ObjectFactoryChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectFactoryChecker const &', 'arg0')])
-    return
-
-def register_Ns3ObjectFactoryValue_methods(root_module, cls):
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue() [constructor]
-    cls.add_constructor([])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactoryValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectFactoryValue const &', 'arg0')])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactory const & value) [constructor]
-    cls.add_constructor([param('ns3::ObjectFactory const &', 'value')])
-    ## object-factory.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::ObjectFactoryValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## object-factory.h (module 'core'): bool ns3::ObjectFactoryValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_virtual=True)
-    ## object-factory.h (module 'core'): ns3::ObjectFactory ns3::ObjectFactoryValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::ObjectFactory', 
-                   [], 
-                   is_const=True)
-    ## object-factory.h (module 'core'): std::string ns3::ObjectFactoryValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_const=True, is_virtual=True)
-    ## object-factory.h (module 'core'): void ns3::ObjectFactoryValue::Set(ns3::ObjectFactory const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::ObjectFactory const &', 'value')])
-    return
-
 def register_Ns3Packet_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## packet.h (module 'network'): ns3::Packet::Packet() [constructor]
diff -Naur ns-3.18.1/src/mpi/bindings/modulegen__gcc_LP64.py ns-3.19/src/mpi/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/mpi/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/mpi/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -40,20 +40,14 @@
     module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList::Iterator'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
-    ## event-id.h (module 'core'): ns3::EventId [class]
-    module.add_class('EventId', import_from_module='ns.core')
     ## hash.h (module 'core'): ns3::Hasher [class]
     module.add_class('Hasher', import_from_module='ns.core')
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::LbtsMessage [class]
-    module.add_class('LbtsMessage')
     ## mpi-interface.h (module 'mpi'): ns3::MpiInterface [class]
     module.add_class('MpiInterface')
     ## 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]
@@ -72,8 +66,8 @@
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
     module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
-    ## mpi-interface.h (module 'mpi'): ns3::SentBuffer [class]
-    module.add_class('SentBuffer')
+    ## parallel-communication-interface.h (module 'mpi'): ns3::ParallelCommunicationInterface [class]
+    module.add_class('ParallelCommunicationInterface', allow_subclassing=True)
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## tag.h (module 'network'): ns3::Tag [class]
@@ -100,12 +94,6 @@
     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'])
-    ## scheduler.h (module 'core'): ns3::Scheduler [class]
-    module.add_class('Scheduler', import_from_module='ns.core', parent=root_module['ns3::Object'])
-    ## scheduler.h (module 'core'): ns3::Scheduler::Event [struct]
-    module.add_class('Event', import_from_module='ns.core', outer_class=root_module['ns3::Scheduler'])
-    ## scheduler.h (module 'core'): ns3::Scheduler::EventKey [struct]
-    module.add_class('EventKey', import_from_module='ns.core', outer_class=root_module['ns3::Scheduler'])
     ## 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]
@@ -114,8 +102,6 @@
     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]
@@ -124,12 +110,10 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Packet', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Packet>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simulator-impl.h (module 'core'): ns3::SimulatorImpl [class]
-    module.add_class('SimulatorImpl', import_from_module='ns.core', parent=root_module['ns3::Object'])
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -148,20 +132,12 @@
     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'])
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::DistributedSimulatorImpl [class]
-    module.add_class('DistributedSimulatorImpl', parent=root_module['ns3::SimulatorImpl'])
     ## 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> >'])
     ## mpi-receiver.h (module 'mpi'): ns3::MpiReceiver [class]
     module.add_class('MpiReceiver', parent=root_module['ns3::Object'])
     ## nix-vector.h (module 'network'): ns3::NixVector [class]
     module.add_class('NixVector', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker [class]
-    module.add_class('ObjectFactoryChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue [class]
-    module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
@@ -228,13 +204,10 @@
     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_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
     register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
-    register_Ns3LbtsMessage_methods(root_module, root_module['ns3::LbtsMessage'])
     register_Ns3MpiInterface_methods(root_module, root_module['ns3::MpiInterface'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     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'])
@@ -242,7 +215,7 @@
     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_Ns3SentBuffer_methods(root_module, root_module['ns3::SentBuffer'])
+    register_Ns3ParallelCommunicationInterface_methods(root_module, root_module['ns3::ParallelCommunicationInterface'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
@@ -255,19 +228,14 @@
     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_Ns3Scheduler_methods(root_module, root_module['ns3::Scheduler'])
-    register_Ns3SchedulerEvent_methods(root_module, root_module['ns3::Scheduler::Event'])
-    register_Ns3SchedulerEventKey_methods(root_module, root_module['ns3::Scheduler::EventKey'])
     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__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_Ns3SimulatorImpl_methods(root_module, root_module['ns3::SimulatorImpl'])
     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'])
@@ -277,13 +245,9 @@
     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_Ns3DistributedSimulatorImpl_methods(root_module, root_module['ns3::DistributedSimulatorImpl'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
-    register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3MpiReceiver_methods(root_module, root_module['ns3::MpiReceiver'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
-    register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
-    register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
@@ -703,51 +667,6 @@
                    is_static=True, visibility='protected')
     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')])
@@ -777,35 +696,6 @@
                    [])
     return
 
-def register_Ns3LbtsMessage_methods(root_module, cls):
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::LbtsMessage::LbtsMessage(ns3::LbtsMessage const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::LbtsMessage const &', 'arg0')])
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::LbtsMessage::LbtsMessage() [constructor]
-    cls.add_constructor([])
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::LbtsMessage::LbtsMessage(uint32_t rxc, uint32_t txc, uint32_t id, bool isFinished, ns3::Time const & t) [constructor]
-    cls.add_constructor([param('uint32_t', 'rxc'), param('uint32_t', 'txc'), param('uint32_t', 'id'), param('bool', 'isFinished'), param('ns3::Time const &', 't')])
-    ## distributed-simulator-impl.h (module 'mpi'): uint32_t ns3::LbtsMessage::GetMyId() [member function]
-    cls.add_method('GetMyId', 
-                   'uint32_t', 
-                   [])
-    ## distributed-simulator-impl.h (module 'mpi'): uint32_t ns3::LbtsMessage::GetRxCount() [member function]
-    cls.add_method('GetRxCount', 
-                   'uint32_t', 
-                   [])
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::Time ns3::LbtsMessage::GetSmallestTime() [member function]
-    cls.add_method('GetSmallestTime', 
-                   'ns3::Time', 
-                   [])
-    ## distributed-simulator-impl.h (module 'mpi'): uint32_t ns3::LbtsMessage::GetTxCount() [member function]
-    cls.add_method('GetTxCount', 
-                   'uint32_t', 
-                   [])
-    ## distributed-simulator-impl.h (module 'mpi'): bool ns3::LbtsMessage::IsFinished() [member function]
-    cls.add_method('IsFinished', 
-                   'bool', 
-                   [])
-    return
-
 def register_Ns3MpiInterface_methods(root_module, cls):
     ## mpi-interface.h (module 'mpi'): ns3::MpiInterface::MpiInterface() [constructor]
     cls.add_constructor([])
@@ -826,11 +716,6 @@
                    'void', 
                    [param('int *', 'pargc'), param('char * * *', 'pargv')], 
                    is_static=True)
-    ## mpi-interface.h (module 'mpi'): static uint32_t ns3::MpiInterface::GetRxCount() [member function]
-    cls.add_method('GetRxCount', 
-                   'uint32_t', 
-                   [], 
-                   is_static=True)
     ## mpi-interface.h (module 'mpi'): static uint32_t ns3::MpiInterface::GetSize() [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
@@ -841,31 +726,16 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
-    ## mpi-interface.h (module 'mpi'): static uint32_t ns3::MpiInterface::GetTxCount() [member function]
-    cls.add_method('GetTxCount', 
-                   'uint32_t', 
-                   [], 
-                   is_static=True)
     ## mpi-interface.h (module 'mpi'): static bool ns3::MpiInterface::IsEnabled() [member function]
     cls.add_method('IsEnabled', 
                    'bool', 
                    [], 
                    is_static=True)
-    ## mpi-interface.h (module 'mpi'): static void ns3::MpiInterface::ReceiveMessages() [member function]
-    cls.add_method('ReceiveMessages', 
-                   'void', 
-                   [], 
-                   is_static=True)
     ## mpi-interface.h (module 'mpi'): static void ns3::MpiInterface::SendPacket(ns3::Ptr<ns3::Packet> p, ns3::Time const & rxTime, uint32_t node, uint32_t dev) [member function]
     cls.add_method('SendPacket', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Time const &', 'rxTime'), param('uint32_t', 'node'), param('uint32_t', 'dev')], 
                    is_static=True)
-    ## mpi-interface.h (module 'mpi'): static void ns3::MpiInterface::TestSendComplete() [member function]
-    cls.add_method('TestSendComplete', 
-                   'void', 
-                   [], 
-                   is_static=True)
     return
 
 def register_Ns3ObjectBase_methods(root_module, cls):
@@ -941,42 +811,6 @@
                    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')])
@@ -1168,23 +1002,46 @@
     cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
     return
 
-def register_Ns3SentBuffer_methods(root_module, cls):
-    ## mpi-interface.h (module 'mpi'): ns3::SentBuffer::SentBuffer(ns3::SentBuffer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::SentBuffer const &', 'arg0')])
-    ## mpi-interface.h (module 'mpi'): ns3::SentBuffer::SentBuffer() [constructor]
-    cls.add_constructor([])
-    ## mpi-interface.h (module 'mpi'): uint8_t * ns3::SentBuffer::GetBuffer() [member function]
-    cls.add_method('GetBuffer', 
-                   'uint8_t *', 
-                   [])
-    ## mpi-interface.h (module 'mpi'): MPI_Request * ns3::SentBuffer::GetRequest() [member function]
-    cls.add_method('GetRequest', 
-                   'MPI_Request *', 
-                   [])
-    ## mpi-interface.h (module 'mpi'): void ns3::SentBuffer::SetBuffer(uint8_t * buffer) [member function]
-    cls.add_method('SetBuffer', 
+def register_Ns3ParallelCommunicationInterface_methods(root_module, cls):
+    ## parallel-communication-interface.h (module 'mpi'): ns3::ParallelCommunicationInterface::ParallelCommunicationInterface() [constructor]
+    cls.add_constructor([])
+    ## parallel-communication-interface.h (module 'mpi'): ns3::ParallelCommunicationInterface::ParallelCommunicationInterface(ns3::ParallelCommunicationInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ParallelCommunicationInterface const &', 'arg0')])
+    ## parallel-communication-interface.h (module 'mpi'): void ns3::ParallelCommunicationInterface::Destroy() [member function]
+    cls.add_method('Destroy', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## parallel-communication-interface.h (module 'mpi'): void ns3::ParallelCommunicationInterface::Disable() [member function]
+    cls.add_method('Disable', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## parallel-communication-interface.h (module 'mpi'): void ns3::ParallelCommunicationInterface::Enable(int * pargc, char * * * pargv) [member function]
+    cls.add_method('Enable', 
+                   'void', 
+                   [param('int *', 'pargc'), param('char * * *', 'pargv')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## parallel-communication-interface.h (module 'mpi'): uint32_t ns3::ParallelCommunicationInterface::GetSize() [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## parallel-communication-interface.h (module 'mpi'): uint32_t ns3::ParallelCommunicationInterface::GetSystemId() [member function]
+    cls.add_method('GetSystemId', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## parallel-communication-interface.h (module 'mpi'): bool ns3::ParallelCommunicationInterface::IsEnabled() [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## parallel-communication-interface.h (module 'mpi'): void ns3::ParallelCommunicationInterface::SendPacket(ns3::Ptr<ns3::Packet> p, ns3::Time const & rxTime, uint32_t node, uint32_t dev) [member function]
+    cls.add_method('SendPacket', 
                    'void', 
-                   [param('uint8_t *', 'buffer')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Time const &', 'rxTime'), param('uint32_t', 'node'), param('uint32_t', 'dev')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, cls):
@@ -1718,71 +1575,6 @@
                    [])
     return
 
-def register_Ns3Scheduler_methods(root_module, cls):
-    ## scheduler.h (module 'core'): ns3::Scheduler::Scheduler() [constructor]
-    cls.add_constructor([])
-    ## scheduler.h (module 'core'): ns3::Scheduler::Scheduler(ns3::Scheduler const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Scheduler const &', 'arg0')])
-    ## scheduler.h (module 'core'): static ns3::TypeId ns3::Scheduler::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## scheduler.h (module 'core'): void ns3::Scheduler::Insert(ns3::Scheduler::Event const & ev) [member function]
-    cls.add_method('Insert', 
-                   'void', 
-                   [param('ns3::Scheduler::Event const &', 'ev')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## scheduler.h (module 'core'): bool ns3::Scheduler::IsEmpty() const [member function]
-    cls.add_method('IsEmpty', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## scheduler.h (module 'core'): ns3::Scheduler::Event ns3::Scheduler::PeekNext() const [member function]
-    cls.add_method('PeekNext', 
-                   'ns3::Scheduler::Event', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## scheduler.h (module 'core'): void ns3::Scheduler::Remove(ns3::Scheduler::Event const & ev) [member function]
-    cls.add_method('Remove', 
-                   'void', 
-                   [param('ns3::Scheduler::Event const &', 'ev')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## scheduler.h (module 'core'): ns3::Scheduler::Event ns3::Scheduler::RemoveNext() [member function]
-    cls.add_method('RemoveNext', 
-                   'ns3::Scheduler::Event', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    return
-
-def register_Ns3SchedulerEvent_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    ## scheduler.h (module 'core'): ns3::Scheduler::Event::Event() [constructor]
-    cls.add_constructor([])
-    ## scheduler.h (module 'core'): ns3::Scheduler::Event::Event(ns3::Scheduler::Event const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Scheduler::Event const &', 'arg0')])
-    ## scheduler.h (module 'core'): ns3::Scheduler::Event::impl [variable]
-    cls.add_instance_attribute('impl', 'ns3::EventImpl *', is_const=False)
-    ## scheduler.h (module 'core'): ns3::Scheduler::Event::key [variable]
-    cls.add_instance_attribute('key', 'ns3::Scheduler::EventKey', is_const=False)
-    return
-
-def register_Ns3SchedulerEventKey_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('>')
-    cls.add_binary_comparison_operator('!=')
-    ## scheduler.h (module 'core'): ns3::Scheduler::EventKey::EventKey() [constructor]
-    cls.add_constructor([])
-    ## scheduler.h (module 'core'): ns3::Scheduler::EventKey::EventKey(ns3::Scheduler::EventKey const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Scheduler::EventKey const &', 'arg0')])
-    ## scheduler.h (module 'core'): ns3::Scheduler::EventKey::m_context [variable]
-    cls.add_instance_attribute('m_context', 'uint32_t', is_const=False)
-    ## scheduler.h (module 'core'): ns3::Scheduler::EventKey::m_ts [variable]
-    cls.add_instance_attribute('m_ts', 'uint64_t', is_const=False)
-    ## scheduler.h (module 'core'): ns3::Scheduler::EventKey::m_uid [variable]
-    cls.add_instance_attribute('m_uid', 'uint32_t', is_const=False)
-    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([])
@@ -1831,18 +1623,6 @@
                    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([])
@@ -1891,108 +1671,6 @@
                    is_static=True)
     return
 
-def register_Ns3SimulatorImpl_methods(root_module, cls):
-    ## simulator-impl.h (module 'core'): ns3::SimulatorImpl::SimulatorImpl() [constructor]
-    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]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [param('ns3::EventId const &', 'ev')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Destroy() [member function]
-    cls.add_method('Destroy', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): uint32_t ns3::SimulatorImpl::GetContext() const [member function]
-    cls.add_method('GetContext', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): ns3::Time ns3::SimulatorImpl::GetDelayLeft(ns3::EventId const & id) const [member function]
-    cls.add_method('GetDelayLeft', 
-                   'ns3::Time', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): ns3::Time ns3::SimulatorImpl::GetMaximumSimulationTime() const [member function]
-    cls.add_method('GetMaximumSimulationTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): uint32_t ns3::SimulatorImpl::GetSystemId() const [member function]
-    cls.add_method('GetSystemId', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): static ns3::TypeId ns3::SimulatorImpl::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## simulator-impl.h (module 'core'): bool ns3::SimulatorImpl::IsExpired(ns3::EventId const & ev) const [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [param('ns3::EventId const &', 'ev')], 
-                   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', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): ns3::Time ns3::SimulatorImpl::Now() const [member function]
-    cls.add_method('Now', 
-                   '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]
-    cls.add_method('Remove', 
-                   'void', 
-                   [param('ns3::EventId const &', 'ev')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Run() [member function]
-    cls.add_method('Run', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): ns3::EventId ns3::SimulatorImpl::Schedule(ns3::Time const & time, ns3::EventImpl * event) [member function]
-    cls.add_method('Schedule', 
-                   'ns3::EventId', 
-                   [param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): ns3::EventId ns3::SimulatorImpl::ScheduleDestroy(ns3::EventImpl * event) [member function]
-    cls.add_method('ScheduleDestroy', 
-                   'ns3::EventId', 
-                   [param('ns3::EventImpl *', 'event')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): ns3::EventId ns3::SimulatorImpl::ScheduleNow(ns3::EventImpl * event) [member function]
-    cls.add_method('ScheduleNow', 
-                   'ns3::EventId', 
-                   [param('ns3::EventImpl *', 'event')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::ScheduleWithContext(uint32_t context, ns3::Time const & time, ns3::EventImpl * event) [member function]
-    cls.add_method('ScheduleWithContext', 
-                   'void', 
-                   [param('uint32_t', 'context'), param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::SetScheduler(ns3::ObjectFactory schedulerFactory) [member function]
-    cls.add_method('SetScheduler', 
-                   'void', 
-                   [param('ns3::ObjectFactory', 'schedulerFactory')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Stop() [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Stop(ns3::Time const & time) [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [param('ns3::Time const &', 'time')], 
-                   is_pure_virtual=True, is_virtual=True)
-    return
-
 def register_Ns3Time_methods(root_module, cls):
     cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
     cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
@@ -2052,6 +1730,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -2062,6 +1745,11 @@
                    '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', 
@@ -2077,6 +1765,11 @@
                    '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', 
@@ -2102,6 +1795,11 @@
                    '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', 
@@ -2362,113 +2060,6 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
-def register_Ns3DistributedSimulatorImpl_methods(root_module, cls):
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::DistributedSimulatorImpl::DistributedSimulatorImpl(ns3::DistributedSimulatorImpl const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DistributedSimulatorImpl const &', 'arg0')])
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::DistributedSimulatorImpl::DistributedSimulatorImpl() [constructor]
-    cls.add_constructor([])
-    ## distributed-simulator-impl.h (module 'mpi'): void ns3::DistributedSimulatorImpl::Cancel(ns3::EventId const & ev) [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [param('ns3::EventId const &', 'ev')], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): void ns3::DistributedSimulatorImpl::Destroy() [member function]
-    cls.add_method('Destroy', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): uint32_t ns3::DistributedSimulatorImpl::GetContext() const [member function]
-    cls.add_method('GetContext', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::Time ns3::DistributedSimulatorImpl::GetDelayLeft(ns3::EventId const & id) const [member function]
-    cls.add_method('GetDelayLeft', 
-                   'ns3::Time', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_const=True, is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::Time ns3::DistributedSimulatorImpl::GetMaximumSimulationTime() const [member function]
-    cls.add_method('GetMaximumSimulationTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): uint32_t ns3::DistributedSimulatorImpl::GetSystemId() const [member function]
-    cls.add_method('GetSystemId', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): static ns3::TypeId ns3::DistributedSimulatorImpl::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## distributed-simulator-impl.h (module 'mpi'): bool ns3::DistributedSimulatorImpl::IsExpired(ns3::EventId const & ev) const [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [param('ns3::EventId const &', 'ev')], 
-                   is_const=True, is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): bool ns3::DistributedSimulatorImpl::IsFinished() const [member function]
-    cls.add_method('IsFinished', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::Time ns3::DistributedSimulatorImpl::Now() const [member function]
-    cls.add_method('Now', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): void ns3::DistributedSimulatorImpl::Remove(ns3::EventId const & ev) [member function]
-    cls.add_method('Remove', 
-                   'void', 
-                   [param('ns3::EventId const &', 'ev')], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): void ns3::DistributedSimulatorImpl::Run() [member function]
-    cls.add_method('Run', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::EventId ns3::DistributedSimulatorImpl::Schedule(ns3::Time const & time, ns3::EventImpl * event) [member function]
-    cls.add_method('Schedule', 
-                   'ns3::EventId', 
-                   [param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::EventId ns3::DistributedSimulatorImpl::ScheduleDestroy(ns3::EventImpl * event) [member function]
-    cls.add_method('ScheduleDestroy', 
-                   'ns3::EventId', 
-                   [param('ns3::EventImpl *', 'event')], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::EventId ns3::DistributedSimulatorImpl::ScheduleNow(ns3::EventImpl * event) [member function]
-    cls.add_method('ScheduleNow', 
-                   'ns3::EventId', 
-                   [param('ns3::EventImpl *', 'event')], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): void ns3::DistributedSimulatorImpl::ScheduleWithContext(uint32_t context, ns3::Time const & time, ns3::EventImpl * event) [member function]
-    cls.add_method('ScheduleWithContext', 
-                   'void', 
-                   [param('uint32_t', 'context'), param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): void ns3::DistributedSimulatorImpl::SetScheduler(ns3::ObjectFactory schedulerFactory) [member function]
-    cls.add_method('SetScheduler', 
-                   'void', 
-                   [param('ns3::ObjectFactory', 'schedulerFactory')], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): void ns3::DistributedSimulatorImpl::Stop() [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): void ns3::DistributedSimulatorImpl::Stop(ns3::Time const & time) [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [param('ns3::Time const &', 'time')], 
-                   is_virtual=True)
-    ## distributed-simulator-impl.h (module 'mpi'): void ns3::DistributedSimulatorImpl::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   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')])
@@ -2491,30 +2082,6 @@
                    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_Ns3MpiReceiver_methods(root_module, cls):
     ## mpi-receiver.h (module 'mpi'): ns3::MpiReceiver::MpiReceiver() [constructor]
     cls.add_constructor([])
@@ -2584,46 +2151,6 @@
                    is_const=True)
     return
 
-def register_Ns3ObjectFactoryChecker_methods(root_module, cls):
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker() [constructor]
-    cls.add_constructor([])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker(ns3::ObjectFactoryChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectFactoryChecker const &', 'arg0')])
-    return
-
-def register_Ns3ObjectFactoryValue_methods(root_module, cls):
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue() [constructor]
-    cls.add_constructor([])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactoryValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectFactoryValue const &', 'arg0')])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactory const & value) [constructor]
-    cls.add_constructor([param('ns3::ObjectFactory const &', 'value')])
-    ## object-factory.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::ObjectFactoryValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## object-factory.h (module 'core'): bool ns3::ObjectFactoryValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_virtual=True)
-    ## object-factory.h (module 'core'): ns3::ObjectFactory ns3::ObjectFactoryValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::ObjectFactory', 
-                   [], 
-                   is_const=True)
-    ## object-factory.h (module 'core'): std::string ns3::ObjectFactoryValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_const=True, is_virtual=True)
-    ## object-factory.h (module 'core'): void ns3::ObjectFactoryValue::Set(ns3::ObjectFactory const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::ObjectFactory const &', 'value')])
-    return
-
 def register_Ns3Packet_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## packet.h (module 'network'): ns3::Packet::Packet() [constructor]
diff -Naur ns-3.18.1/src/mpi/doc/distributed.rst ns-3.19/src/mpi/doc/distributed.rst
--- ns-3.18.1/src/mpi/doc/distributed.rst	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/mpi/doc/distributed.rst	2013-12-20 09:44:50.000000000 -0800
@@ -32,10 +32,39 @@
 events in time-stamped order to ensure proper simulation execution. If a LP
 receives a message containing an event from the past, clearly this is an issue,
 since this event could change other events which have already been executed. To
-address this problem, a conservative synchronization algorithm with lookahead is
+address this problem, two conservative synchronization algorithm with lookahead are
 used in |ns3|. For more information on different synchronization approaches and
 parallel and distributed simulation in general, please refer to "Parallel and
-Distributed Simulation Systems" by Richard Fujimoto.
+Distributed Simulation Systems" by Richard Fujimoto.   
+
+The default parallel synchronization strategy implemented in the
+DistributedSimulatorImpl class is based on a globally synchronized
+algorithm using an MPI collective operation to synchronize simulation
+time across all LPs.  A second synchronization strategy based on local
+communication and null messages is implemented in the
+NullMessageSimulatorImpl class, For the null message strategy the
+global all to all gather is not required; LPs only need to
+communication with LPs that have shared point-to-point links.  The
+algorithm to use is controlled by which the |ns3| global value
+SimulatorImplementationType.
+
+The best algorithm to use is dependent on the communication and event
+scheduling pattern for the application.  In general, null message
+synchronization algorithms will scale better due to local
+communication scaling better than a global all-to-all gather that is
+required by DistributedSimulatorImpl.  There are two known cases where
+the global synchronization performs better.  The first is when most
+LPs have point-to-point link with most other LPs, in other words the
+LPs are nearly fully connected.  In this case the null message
+algorithm will generate more message passing traffic than the
+all-to-all gather.  A second case where the global all-to-all gather
+is more efficient is when there are long periods of simulation time
+when no events are occurring.  The all-to-all gather algorithm is able
+to quickly determine then next event time globally.  The nearest
+neighbor behavior of the null message algorithm will require more
+communications to propagate that knowledge; each LP is only aware of
+neighbor next event times.
+
 
 Remote point-to-point links
 +++++++++++++++++++++++++++
@@ -68,6 +97,7 @@
 
 Prerequisites
 +++++++++++++
+.. highlight:: bash
 
 Ensure that MPI is installed, as well as mpic++. In Ubuntu repositories, 
 these are openmpi-bin, openmpi-common, openmpi-doc, libopenmpi-dev. In 
@@ -78,31 +108,33 @@
 There is a conflict on some Fedora systems between libotf and openmpi. A 
 possible "quick-fix" is to yum remove libotf before installing openmpi. 
 This will remove conflict, but it will also remove emacs. Alternatively, 
-these steps could be followed to resolve the conflict:::
+these steps could be followed to resolve the conflict:
 
-    1) Rename the tiny otfdump which emacs says it needs:
+    1) Rename the tiny otfdump which emacs says it needs::
 
-         mv /usr/bin/otfdump /usr/bin/otfdump.emacs-version
+         $ mv /usr/bin/otfdump /usr/bin/otfdump.emacs-version
 
-    2) Manually resolve openmpi dependencies:
+    2) Manually resolve openmpi dependencies::
 
-         sudo yum install libgfortran libtorque numactl
+         $ sudo yum install libgfortran libtorque numactl
 
     3) Download rpm packages: 
 
+       .. sourcecode:: text
+
          openmpi-1.3.1-1.fc11.i586.rpm
          openmpi-devel-1.3.1-1.fc11.i586.rpm
          openmpi-libs-1.3.1-1.fc11.i586.rpm
          openmpi-vt-1.3.1-1.fc11.i586.rpm
 
-         from
+       from http://mirrors.kernel.org/fedora/releases/11/Everything/i386/os/Packages/
 
-         http://mirrors.kernel.org/fedora/releases/11/Everything/i386/os/Packages/
+    4) Force the packages in::
 
-    4) Force the packages in:
-
-         sudo rpm -ivh --force openmpi-1.3.1-1.fc11.i586.rpm
-         openmpi-libs-1.3.1-1.fc11.i586.rpm openmpi-devel-1.3.1-1.fc11.i586.rpm
+         $ sudo rpm -ivh --force \
+         openmpi-1.3.1-1.fc11.i586.rpm \
+         openmpi-libs-1.3.1-1.fc11.i586.rpm \
+         openmpi-devel-1.3.1-1.fc11.i586.rpm \
          openmpi-vt-1.3.1-1.fc11.i586.rpm
 
 Also, it may be necessary to add the openmpi bin directory to PATH in order to
@@ -111,17 +143,17 @@
 to open shared libraries, such as libmpi_cxx.so.0, it may be necessary to add
 the openmpi lib directory to LD_LIBRARY_PATH.
 
-Here is an example of setting up PATH and LD_LIBRARY_PATH using a bash shell:::
+Here is an example of setting up PATH and LD_LIBRARY_PATH using a bash shell:
 
-     For a 32-bit Linux distribution:
+    * For a 32-bit Linux distribution::
          
-          export PATH=$PATH:/usr/lib/openmpi/bin
-          export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/openmpi/lib      
+         $ export PATH=$PATH:/usr/lib/openmpi/bin
+         $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/openmpi/lib      
     
-     For a 64-bit Linux distribution:
+     For a 64-bit Linux distribution::
      
-          export PATH=$PATH:/usr/lib64/openmpi/bin
-          export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/openmpi/lib          
+         $ export PATH=$PATH:/usr/lib64/openmpi/bin
+         $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/openmpi/lib          
 
 These lines can be added into ~/.bash_profile or ~/.bashrc to avoid having to
 retype them when a new shell is opened.
@@ -129,30 +161,37 @@
 Building and Running Examples
 +++++++++++++++++++++++++++++
 
-If you already built |ns3| without MPI enabled, you must re-build:::
+If you already built |ns3| without MPI enabled, you must re-build::
 
-    ./waf distclean
+    $ ./waf distclean
 
-Configure |ns3| with the --enable-mpi option:::
+Configure |ns3| with the --enable-mpi option::
 
-    ./waf -d debug configure --enable-examples --enable-tests --enable-mpi
+    $ ./waf -d debug configure --enable-examples --enable-tests --enable-mpi
 
 Ensure that MPI is enabled by checking the optional features shown from the
 output of configure.
 
-Next, build |ns3|:::
+Next, build |ns3|::
 
-    ./waf
+    $ ./waf
 
-After building |ns3| with mpi enabled, the example programs are now ready to run
-with mpirun. Here are a few examples (from the root |ns3| directory):::
+After building |ns3| with mpi enabled, the example programs are now
+ready to run with mpirun. Here are a few examples (from the root |ns3|
+directory)::
 
-    mpirun -np 2 ./waf --run simple-distributed
-    mpirun -np 4 -machinefile mpihosts ./waf --run 'nms-udp-nix --LAN=2 --CN=4 --nix=1'
+    $ mpirun -np 2 ./waf --run simple-distributed
+    $ mpirun -np 4 -machinefile mpihosts ./waf --run 'nms-udp-nix --LAN=2 --CN=4 --nix=1'
             
+An examle using the null message synchronization algorithm::
+
+    $ mpirun -np 2 ./waf --run simple-distributed --nullmsg
+
 The np switch is the number of logical processors to use. The machinefile switch
 is which machines to use. In order to use machinefile, the target file must
-exist (in this case mpihosts). This can simply contain something like:::
+exist (in this case mpihosts). This can simply contain something like:
+
+.. sourcecode:: text
 
     localhost
     localhost
@@ -162,14 +201,42 @@
 Or if you have a cluster of machines, you can name them.
 
 NOTE: Some users have experienced issues using mpirun and waf together. An
-alternative way to run distributed examples is shown below:::
+alternative way to run distributed examples is shown below::
+
+    $ ./waf shell
+    $ cd build/debug
+    $ mpirun -np 2 src/mpi/examples/simple-distributed
+
+Setting synchronization algorithm to use
+++++++++++++++++++++++++++++++++++++++++
+
+The global value SimulatorImplementationType is used to set the
+synchronization algorithm to use.  This value must be set before the
+MpiInterface::Enable method is invoked if the default
+DistributedSimulatorImpl is not used.  Here is an example code snippet
+showing how to add a command line argument to control the
+synchronization algorithm choice:::
+
+  cmd.AddValue ("nullmsg", "Enable the use of null-message synchronization", nullmsg);
+  if(nullmsg) 
+    {
+      GlobalValue::Bind ("SimulatorImplementationType",
+                         StringValue ("ns3::NullMessageSimulatorImpl"));
+    } 
+  else 
+    {
+      GlobalValue::Bind ("SimulatorImplementationType",
+                         StringValue ("ns3::DistributedSimulatorImpl"));
+    }
+
+  // Enable parallel simulator with the command line arguments
+  MpiInterface::Enable (&argc, &argv);
+
 
-    ./waf shell
-    cd build/debug
-    mpirun -np 2 src/mpi/examples/simple-distributed
 
 Creating custom topologies
 ++++++++++++++++++++++++++
+.. highlight:: cpp
 
 The example programs in src/mpi/examples give a good idea of how to create different
 topologies for distributed simulation. The main points are assigning system ids
@@ -178,14 +245,14 @@
 target node.
 
 Assigning system ids to nodes is simple and can be handled two different ways.
-First, a NodeContainer can be used to create the nodes and assign system ids:::
+First, a NodeContainer can be used to create the nodes and assign system ids::
 
     NodeContainer nodes;
     nodes.Create (5, 1); // Creates 5 nodes with system id 1.
 
 Alternatively, nodes can be created individually, assigned system ids, and added
 to a NodeContainer. This is useful if a NodeContainer holds nodes with different
-system ids:::
+system ids::
 
     NodeContainer nodes;
     Ptr<Node> node1 = CreateObject<Node> (0); // Create node1 with system id 0
@@ -213,7 +280,7 @@
 keep track of different traces is to just name the trace files or pcaps
 differently, based on the system id of the simulator. For example, something
 like this should work well, assuming all of these local variables were
-previously defined:::
+previously defined::
 
     if (MpiInterface::GetSystemId () == 0)
       {
diff -Naur ns-3.18.1/src/mpi/examples/nms-p2p-nix-distributed.cc ns-3.19/src/mpi/examples/nms-p2p-nix-distributed.cc
--- ns-3.18.1/src/mpi/examples/nms-p2p-nix-distributed.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/mpi/examples/nms-p2p-nix-distributed.cc	2013-12-20 09:44:50.000000000 -0800
@@ -37,6 +37,7 @@
 #include <cstdlib>
 #include <sys/time.h>
 #include <fstream>
+#include <vector>
 
 #include "ns3/core-module.h"
 #include "ns3/internet-module.h"
@@ -49,10 +50,6 @@
 #include "ns3/ipv4-list-routing-helper.h"
 #include "ns3/ipv4-nix-vector-helper.h"
 
-#ifdef NS3_MPI
-#include <mpi.h>
-#endif
-
 using namespace ns3;
 
 typedef struct timeval TIMER_TYPE;
@@ -62,16 +59,23 @@
 
 NS_LOG_COMPONENT_DEFINE ("CampusNetworkModelDistributed");
 
-  /**
-   *  \internal
-   *  \c #defines for \c nCN and \c nLANClients are a temporary fix,
-   *  see \bugid{1560}
-   */
 int
 main (int argc, char *argv[])
 {
 #ifdef NS3_MPI
-  // Enable MPI with the command line arguments
+
+  typedef std::vector<NodeContainer> vectorOfNodeContainer;
+  typedef std::vector<vectorOfNodeContainer> vectorOfVectorOfNodeContainer;
+  typedef std::vector<vectorOfVectorOfNodeContainer> vectorOfVectorOfVectorOfNodeContainer;  
+
+  typedef std::vector<Ipv4InterfaceContainer> vectorOfIpv4InterfaceContainer;
+  typedef std::vector<vectorOfIpv4InterfaceContainer> vectorOfVectorOfIpv4InterfaceContainer;
+  typedef std::vector<vectorOfVectorOfIpv4InterfaceContainer> vectorOfVectorOfVectorOfIpv4InterfaceContainer;
+ 
+  typedef std::vector<NetDeviceContainer> vectorOfNetDeviceContainer;
+  typedef std::vector<vectorOfNetDeviceContainer> vectorOfVectorOfNetDeviceContainer;
+
+  // Enable parallel simulator with the command line arguments
   MpiInterface::Enable (&argc, &argv);
 
   TIMER_TYPE t0, t1, t2;
@@ -84,17 +88,14 @@
   uint32_t systemId = MpiInterface::GetSystemId ();
   uint32_t systemCount = MpiInterface::GetSize ();
 
-  //temporary fix see bug 1560
-  #define nCN (2)
-  #define nLANClients (42)
-  //uint32_t nCN = 2, nLANClients = 42;
+  uint32_t nCN = 2, nLANClients = 42;
   int32_t single = 0;
   int nBytes = 500000; // Bytes for each on/off app
   bool nix = true;
 
   CommandLine cmd;
-  //cmd.AddValue ("CN", "Number of total CNs [2]", nCN);
-  //cmd.AddValue ("LAN", "Number of nodes per LAN [42]", nLANClients);
+  cmd.AddValue ("CN", "Number of total CNs [2]", nCN);
+  cmd.AddValue ("LAN", "Number of nodes per LAN [42]", nLANClients);
   cmd.AddValue ("single", "1 if use single flow", single);
   cmd.AddValue ("nBytes", "Number of bytes for each on/off app", nBytes);
   cmd.AddValue ("nix", "Toggle the use of nix-vector or global routing", nix);
@@ -114,15 +115,30 @@
     }
 
   std::cout << "Number of CNs: " << nCN << ", LAN nodes: " << nLANClients << std::endl;
+  
+
 
-  NodeContainer nodes_net0[nCN][3], nodes_net1[nCN][6], nodes_netLR[nCN],
-                nodes_net2[nCN][14], nodes_net2LAN[nCN][7][nLANClients],
-                nodes_net3[nCN][9], nodes_net3LAN[nCN][5][nLANClients];
+  vectorOfNodeContainer nodes_netLR(nCN);
+  vectorOfVectorOfNodeContainer nodes_net0(nCN,vectorOfNodeContainer(3));
+  vectorOfVectorOfNodeContainer nodes_net1(nCN,vectorOfNodeContainer(6));
+  vectorOfVectorOfNodeContainer nodes_net2(nCN,vectorOfNodeContainer(14));
+  vectorOfVectorOfNodeContainer nodes_net3(nCN,vectorOfNodeContainer(9));
+     
+  vectorOfVectorOfVectorOfNodeContainer nodes_net2LAN(nCN,vectorOfVectorOfNodeContainer(7,vectorOfNodeContainer(nLANClients)));
+  vectorOfVectorOfVectorOfNodeContainer nodes_net3LAN(nCN,vectorOfVectorOfNodeContainer(5,vectorOfNodeContainer(nLANClients)));
+  
   PointToPointHelper p2p_2gb200ms, p2p_1gb5ms, p2p_100mb1ms;
   InternetStackHelper stack;
-  Ipv4InterfaceContainer ifs, ifs0[nCN][3], ifs1[nCN][6], ifs2[nCN][14],
-                         ifs3[nCN][9], ifs2LAN[nCN][7][nLANClients],
-                         ifs3LAN[nCN][5][nLANClients];
+  
+  Ipv4InterfaceContainer ifs;  
+
+  vectorOfVectorOfIpv4InterfaceContainer ifs0(nCN,vectorOfIpv4InterfaceContainer(3));
+  vectorOfVectorOfIpv4InterfaceContainer ifs1(nCN,vectorOfIpv4InterfaceContainer(6));
+  vectorOfVectorOfIpv4InterfaceContainer ifs2(nCN,vectorOfIpv4InterfaceContainer(14));
+  vectorOfVectorOfIpv4InterfaceContainer ifs3(nCN,vectorOfIpv4InterfaceContainer(9));
+  vectorOfVectorOfVectorOfIpv4InterfaceContainer ifs2LAN(nCN,vectorOfVectorOfIpv4InterfaceContainer(7,vectorOfIpv4InterfaceContainer(nLANClients)));
+  vectorOfVectorOfVectorOfIpv4InterfaceContainer ifs3LAN(nCN,vectorOfVectorOfIpv4InterfaceContainer(5,vectorOfIpv4InterfaceContainer(nLANClients)));
+  
   Ipv4AddressHelper address;
   std::ostringstream oss;
   p2p_1gb5ms.SetDeviceAttribute ("DataRate", StringValue ("1Gbps"));
@@ -223,7 +239,7 @@
         {
           ndc2[i] = p2p_1gb5ms.Install (nodes_net2[z][i]);
         }
-      NetDeviceContainer ndc2LAN[7][nLANClients];
+      vectorOfVectorOfNetDeviceContainer ndc2LAN(7, vectorOfNetDeviceContainer(nLANClients));
       for (int i = 0; i < 7; ++i)
         {
           oss.str ("");
@@ -261,7 +277,7 @@
         {
           ndc3[i] = p2p_1gb5ms.Install (nodes_net3[z][i]);
         }
-      NetDeviceContainer ndc3LAN[5][nLANClients];
+      vectorOfVectorOfNetDeviceContainer ndc3LAN(5, vectorOfNetDeviceContainer(nLANClients));
       for (int i = 0; i < 5; ++i)
         {
           oss.str ("");
@@ -374,7 +390,7 @@
   if (nCN > 1)
     {
       std::cout << "Forming Ring Topology..." << std::endl;
-      NodeContainer nodes_ring[nCN];
+      vectorOfNodeContainer nodes_ring(nCN);
       for (uint32_t z = 0; z < nCN - 1; ++z)
         {
           nodes_ring[z].Add (nodes_net0[z][0].Get (0));
@@ -382,7 +398,7 @@
         }
       nodes_ring[nCN - 1].Add (nodes_net0[nCN - 1][0].Get (0));
       nodes_ring[nCN - 1].Add (nodes_net0[0][0].Get (0));
-      NetDeviceContainer ndc_ring[nCN];
+      vectorOfNetDeviceContainer ndc_ring(nCN);
       for (uint32_t z = 0; z < nCN; ++z)
         {
           ndc_ring[z] = p2p_2gb200ms.Install (nodes_ring[z]);
@@ -608,7 +624,7 @@
   TIMER_NOW (t2);
   std::cout << "Simulator finished." << std::endl;
   Simulator::Destroy ();
-  // Exit the MPI execution environment
+  // Exit the parallel execution environment
   MpiInterface::Disable ();
   double d1 = TIMER_DIFF (t1, t0), d2 = TIMER_DIFF (t2, t1);
   std::cout << "-----" << std::endl << "Runtime Stats:" << std::endl;
diff -Naur ns-3.18.1/src/mpi/examples/simple-distributed.cc ns-3.19/src/mpi/examples/simple-distributed.cc
--- ns-3.18.1/src/mpi/examples/simple-distributed.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/mpi/examples/simple-distributed.cc	2013-12-20 09:44:50.000000000 -0800
@@ -66,10 +66,32 @@
 main (int argc, char *argv[])
 {
 #ifdef NS3_MPI
-  // Distributed simulation setup
+
+  bool nix = true;
+  bool nullmsg = false;
+  bool tracing = false;
+
+  // Parse command line
+  CommandLine cmd;
+  cmd.AddValue ("nix", "Enable the use of nix-vector or global routing", nix);
+  cmd.AddValue ("nullmsg", "Enable the use of null-message synchronization", nullmsg);
+  cmd.AddValue ("tracing", "Enable pcap tracing", tracing);
+  cmd.Parse (argc, argv);
+
+  // Distributed simulation setup; by default use granted time window algorithm.
+  if(nullmsg) 
+    {
+      GlobalValue::Bind ("SimulatorImplementationType",
+                         StringValue ("ns3::NullMessageSimulatorImpl"));
+    } 
+  else 
+    {
+      GlobalValue::Bind ("SimulatorImplementationType",
+                         StringValue ("ns3::DistributedSimulatorImpl"));
+    }
+
+  // Enable parallel simulator with the command line arguments
   MpiInterface::Enable (&argc, &argv);
-  GlobalValue::Bind ("SimulatorImplementationType",
-                     StringValue ("ns3::DistributedSimulatorImpl"));
 
   LogComponentEnable ("PacketSink", LOG_LEVEL_INFO);
 
@@ -88,12 +110,6 @@
   Config::SetDefault ("ns3::OnOffApplication::PacketSize", UintegerValue (512));
   Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue ("1Mbps"));
   Config::SetDefault ("ns3::OnOffApplication::MaxBytes", UintegerValue (512));
-  bool nix = true;
-
-  // Parse command line
-  CommandLine cmd;
-  cmd.AddValue ("nix", "Enable the use of nix-vector or global routing", nix);
-  cmd.Parse (argc, argv);
 
   // Create leaf nodes on left with system id 0
   NodeContainer leftLeafNodes;
@@ -206,6 +222,21 @@
       Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
     }
 
+  if (tracing == true)
+    {
+      if (systemId == 0)
+        {
+          routerLink.EnablePcap("router-left", routerDevices, true);
+          leafLink.EnablePcap("leaf-left", leftLeafDevices, true);
+        }
+      
+      if (systemId == 1)
+        {
+          routerLink.EnablePcap("router-right", routerDevices, true);
+          leafLink.EnablePcap("leaf-right", rightLeafDevices, true);
+        }
+    }
+
   // Create a packet sink on the right leafs to receive packets from left leafs
   uint16_t port = 50000;
   if (systemId == 1)
diff -Naur ns-3.18.1/src/mpi/examples/simple-distributed-empty-node.cc ns-3.19/src/mpi/examples/simple-distributed-empty-node.cc
--- ns-3.18.1/src/mpi/examples/simple-distributed-empty-node.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/mpi/examples/simple-distributed-empty-node.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,309 @@
+/* -*- 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
+ *
+ *
+ * This test is equivalent to simple-distributed but tests boundary cases
+ * when one of the ranks has no Nodes on it.   When run on two tasks
+ * rank 0 will have all the Nodes and rank 1 will be empty:
+ * 
+ *                 -------   -------
+ *                  RANK 0    RANK 0
+ *                 ------- | -------
+ *                         |
+ * n0 ---------|           |           |---------- n6
+ *             |           |           |
+ * n1 -------\ |           |           | /------- n7
+ *            n4 ----------|---------- n5
+ * n2 -------/ |           |           | \------- n8
+ *             |           |           |
+ * n3 ---------|           |           |---------- n9
+ *
+ *
+ * When run on three tasks rank 1 has the left half of the Nodes and rank 2
+ * will be empty.
+ *
+ *                 -------   -------
+ *                  RANK 0    RANK 1
+ *                 ------- | -------
+ *                         |
+ * n0 ---------|           |           |---------- n6
+ *             |           |           |
+ * n1 -------\ |           |           | /------- n7
+ *            n4 ----------|---------- n5
+ * n2 -------/ |           |           | \------- n8
+ *             |           |           |
+ * n3 ---------|           |           |---------- n9
+ *
+ * OnOff clients are placed on each left leaf node. Each right leaf node
+ * is a packet sink for a left leaf node.  As a packet travels from one
+ * logical processor to another (the link between n4 and n5), MPI messages
+ * are passed containing the serialized packet. The message is then
+ * deserialized into a new packet and sent on as normal.
+ *
+ * One packet is sent from each left leaf node.  The packet sinks on the
+ * right leaf nodes output logging information when they receive the packet.
+ */
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/mpi-interface.h"
+#include "ns3/ipv4-global-routing-helper.h"
+#include "ns3/ipv4-static-routing-helper.h"
+#include "ns3/ipv4-list-routing-helper.h"
+#include "ns3/point-to-point-helper.h"
+#include "ns3/internet-stack-helper.h"
+#include "ns3/ipv4-nix-vector-helper.h"
+#include "ns3/ipv4-address-helper.h"
+#include "ns3/on-off-helper.h"
+#include "ns3/packet-sink-helper.h"
+
+#ifdef NS3_MPI
+#include <mpi.h>
+#endif
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("SimpleDistributed");
+
+int
+main (int argc, char *argv[])
+{
+#ifdef NS3_MPI
+
+  bool nix = true;
+  bool nullmsg = false;
+  bool tracing = false;
+
+  // Parse command line
+  CommandLine cmd;
+  cmd.AddValue ("nix", "Enable the use of nix-vector or global routing", nix);
+  cmd.AddValue ("nullmsg", "Enable the use of null-message synchronization", nullmsg);
+  cmd.AddValue ("tracing", "Enable pcap tracing", tracing);
+  cmd.Parse (argc, argv);
+
+  // Distributed simulation setup; by default use granted time window algorithm.
+  if(nullmsg) 
+    {
+      GlobalValue::Bind ("SimulatorImplementationType",
+                         StringValue ("ns3::NullMessageSimulatorImpl"));
+    } 
+  else 
+    {
+      GlobalValue::Bind ("SimulatorImplementationType",
+                         StringValue ("ns3::DistributedSimulatorImpl"));
+    }
+
+  MpiInterface::Enable (&argc, &argv);
+
+  LogComponentEnable ("PacketSink", LOG_LEVEL_INFO);
+
+  uint32_t systemId = MpiInterface::GetSystemId ();
+  uint32_t systemCount = MpiInterface::GetSize ();
+
+  uint32_t rightHalfSystemId = 777;
+
+  // Check for valid distributed parameters.
+  // Must have 2 or 3 tasks.
+  if (systemCount == 2)
+    {
+      rightHalfSystemId = 0;
+    }
+  else if (systemCount == 3)
+    {
+      rightHalfSystemId = 1;
+    }
+  else
+    {
+      std::cout << "This simulation requires 2 or 3 logical processors." << std::endl;
+      return 1;
+    }
+    
+  // Some default values
+  Config::SetDefault ("ns3::OnOffApplication::PacketSize", UintegerValue (512));
+  Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue ("1Mbps"));
+  Config::SetDefault ("ns3::OnOffApplication::MaxBytes", UintegerValue (512));
+
+  // Create leaf nodes on left with system id 0
+  NodeContainer leftLeafNodes;
+  leftLeafNodes.Create (4, 0);
+
+  // Create router nodes.  Left router with system id 0, right router
+  // with system id dependent on number of processors using
+  // rightHalfSystemId
+  NodeContainer routerNodes;
+  Ptr<Node> routerNode1 = CreateObject<Node> (0);
+  Ptr<Node> routerNode2 = CreateObject<Node> (rightHalfSystemId);
+  routerNodes.Add (routerNode1);
+  routerNodes.Add (routerNode2);
+
+  // Create leaf nodes on left with system id rightHalfSystemId
+  NodeContainer rightLeafNodes;
+  rightLeafNodes.Create (4, rightHalfSystemId);
+
+  PointToPointHelper routerLink;
+  routerLink.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
+  routerLink.SetChannelAttribute ("Delay", StringValue ("5ms"));
+
+  PointToPointHelper leafLink;
+  leafLink.SetDeviceAttribute ("DataRate", StringValue ("1Mbps"));
+  leafLink.SetChannelAttribute ("Delay", StringValue ("2ms"));
+
+  // Add link connecting routers
+  NetDeviceContainer routerDevices;
+  routerDevices = routerLink.Install (routerNodes);
+
+  // Add links for left side leaf nodes to left router
+  NetDeviceContainer leftRouterDevices;
+  NetDeviceContainer leftLeafDevices;
+  for (uint32_t i = 0; i < 4; ++i)
+    {
+      NetDeviceContainer temp = leafLink.Install (leftLeafNodes.Get (i), routerNodes.Get (0));
+      leftLeafDevices.Add (temp.Get (0));
+      leftRouterDevices.Add (temp.Get (1));
+    }
+
+  // Add links for right side leaf nodes to right router
+  NetDeviceContainer rightRouterDevices;
+  NetDeviceContainer rightLeafDevices;
+  for (uint32_t i = 0; i < 4; ++i)
+    {
+      NetDeviceContainer temp = leafLink.Install (rightLeafNodes.Get (i), routerNodes.Get (1));
+      rightLeafDevices.Add (temp.Get (0));
+      rightRouterDevices.Add (temp.Get (1));
+    }
+
+  InternetStackHelper stack;
+  Ipv4NixVectorHelper nixRouting;
+  Ipv4StaticRoutingHelper staticRouting;
+
+  Ipv4ListRoutingHelper list;
+  list.Add (staticRouting, 0);
+  list.Add (nixRouting, 10);
+
+  if (nix)
+    {
+      stack.SetRoutingHelper (list); // has effect on the next Install ()
+    }
+
+  stack.InstallAll ();
+
+  Ipv4InterfaceContainer routerInterfaces;
+  Ipv4InterfaceContainer leftLeafInterfaces;
+  Ipv4InterfaceContainer leftRouterInterfaces;
+  Ipv4InterfaceContainer rightLeafInterfaces;
+  Ipv4InterfaceContainer rightRouterInterfaces;
+
+  Ipv4AddressHelper leftAddress;
+  leftAddress.SetBase ("10.1.1.0", "255.255.255.0");
+
+  Ipv4AddressHelper routerAddress;
+  routerAddress.SetBase ("10.2.1.0", "255.255.255.0");
+
+  Ipv4AddressHelper rightAddress;
+  rightAddress.SetBase ("10.3.1.0", "255.255.255.0");
+
+  // Router-to-Router interfaces
+  routerInterfaces = routerAddress.Assign (routerDevices);
+
+  // Left interfaces
+  for (uint32_t i = 0; i < 4; ++i)
+    {
+      NetDeviceContainer ndc;
+      ndc.Add (leftLeafDevices.Get (i));
+      ndc.Add (leftRouterDevices.Get (i));
+      Ipv4InterfaceContainer ifc = leftAddress.Assign (ndc);
+      leftLeafInterfaces.Add (ifc.Get (0));
+      leftRouterInterfaces.Add (ifc.Get (1));
+      leftAddress.NewNetwork ();
+    }
+
+  // Right interfaces
+  for (uint32_t i = 0; i < 4; ++i)
+    {
+      NetDeviceContainer ndc;
+      ndc.Add (rightLeafDevices.Get (i));
+      ndc.Add (rightRouterDevices.Get (i));
+      Ipv4InterfaceContainer ifc = rightAddress.Assign (ndc);
+      rightLeafInterfaces.Add (ifc.Get (0));
+      rightRouterInterfaces.Add (ifc.Get (1));
+      rightAddress.NewNetwork ();
+    }
+
+  if (!nix)
+    {
+      Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+    }
+
+  if (tracing == true)
+    {
+      if (systemId == 0)
+        {
+          routerLink.EnablePcap("router-left", routerDevices, true);
+          leafLink.EnablePcap("leaf-left", leftLeafDevices, true);
+        }
+      
+      if (systemId == rightHalfSystemId)
+        {
+          routerLink.EnablePcap("router-right", routerDevices, true);
+          leafLink.EnablePcap("leaf-right", rightLeafDevices, true);
+        }
+    }
+
+  // Create a packet sink on the right leafs to receive packets from left leafs
+  uint16_t port = 50000;
+  if (systemId == rightHalfSystemId)
+    {
+      Address sinkLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
+      PacketSinkHelper sinkHelper ("ns3::UdpSocketFactory", sinkLocalAddress);
+      ApplicationContainer sinkApp;
+      for (uint32_t i = 0; i < 4; ++i)
+        {
+          sinkApp.Add (sinkHelper.Install (rightLeafNodes.Get (i)));
+        }
+      sinkApp.Start (Seconds (1.0));
+      sinkApp.Stop (Seconds (5));
+    }
+
+  // Create the OnOff applications to send
+  if (systemId == 0)
+    {
+      OnOffHelper clientHelper ("ns3::UdpSocketFactory", Address ());
+      clientHelper.SetAttribute
+        ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+      clientHelper.SetAttribute
+        ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+
+      ApplicationContainer clientApps;
+      for (uint32_t i = 0; i < 4; ++i)
+        {
+          AddressValue remoteAddress
+            (InetSocketAddress (rightLeafInterfaces.GetAddress (i), port));
+          clientHelper.SetAttribute ("Remote", remoteAddress);
+          clientApps.Add (clientHelper.Install (leftLeafNodes.Get (i)));
+        }
+      clientApps.Start (Seconds (1.0));
+      clientApps.Stop (Seconds (5));
+    }
+
+  Simulator::Stop (Seconds (5));
+  Simulator::Run ();
+  Simulator::Destroy ();
+  // Exit the MPI execution environment
+  MpiInterface::Disable ();
+  return 0;
+#else
+  NS_FATAL_ERROR ("Can't use distributed simulator without MPI compiled in");
+#endif
+}
diff -Naur ns-3.18.1/src/mpi/examples/third-distributed.cc ns-3.19/src/mpi/examples/third-distributed.cc
--- ns-3.18.1/src/mpi/examples/third-distributed.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/mpi/examples/third-distributed.cc	2013-12-20 09:44:50.000000000 -0800
@@ -55,31 +55,18 @@
 main (int argc, char *argv[])
 {
 #ifdef NS3_MPI
-  // Distributed simulation setup
-  MpiInterface::Enable (&argc, &argv);
-  GlobalValue::Bind ("SimulatorImplementationType",
-                     StringValue ("ns3::DistributedSimulatorImpl"));
-
-  uint32_t systemId = MpiInterface::GetSystemId ();
-  uint32_t systemCount = MpiInterface::GetSize ();
-
-  // Check for valid distributed parameters.
-  // Must have 2 and only 2 Logical Processors (LPs)
-  if (systemCount != 2)
-    {
-      std::cout << "This simulation requires 2 and only 2 logical processors." << std::endl;
-      return 1;
-    }
 
   bool verbose = true;
   uint32_t nCsma = 3;
   uint32_t nWifi = 3;
+  bool nullmsg = false;
   bool tracing = false;
 
   CommandLine cmd;
   cmd.AddValue ("nCsma", "Number of \"extra\" CSMA nodes/devices", nCsma);
   cmd.AddValue ("nWifi", "Number of wifi STA devices", nWifi);
   cmd.AddValue ("verbose", "Tell echo applications to log if true", verbose);
+  cmd.AddValue ("nullmsg", "Enable the use of null-message synchronization", nullmsg);
   cmd.AddValue ("tracing", "Enable pcap tracing", tracing);
   cmd.Parse (argc,argv);
 
@@ -98,6 +85,32 @@
       LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
     }
 
+  // Distributed simulation setup; by default use granted time window algorithm.
+  if(nullmsg) 
+    {
+      GlobalValue::Bind ("SimulatorImplementationType",
+                         StringValue ("ns3::NullMessageSimulatorImpl"));
+    } 
+  else 
+    {
+      GlobalValue::Bind ("SimulatorImplementationType",
+                         StringValue ("ns3::DistributedSimulatorImpl"));
+    }
+
+  MpiInterface::Enable (&argc, &argv);
+
+  uint32_t systemId = MpiInterface::GetSystemId ();
+  uint32_t systemCount = MpiInterface::GetSize ();
+
+  // Check for valid distributed parameters.
+  // Must have 2 and only 2 Logical Processors (LPs)
+  if (systemCount != 2)
+    {
+      std::cout << "This simulation requires 2 and only 2 logical processors." << std::endl;
+      return 1;
+    }
+
+
   NodeContainer p2pNodes;
   Ptr<Node> p2pNode1 = CreateObject<Node> (0); // Create node with rank 0
   Ptr<Node> p2pNode2 = CreateObject<Node> (1); // Create node with rank 1
diff -Naur ns-3.18.1/src/mpi/examples/wscript ns-3.19/src/mpi/examples/wscript
--- ns-3.18.1/src/mpi/examples/wscript	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/mpi/examples/wscript	2013-12-20 09:44:50.000000000 -0800
@@ -12,3 +12,7 @@
     obj = bld.create_ns3_program('nms-p2p-nix-distributed',
                                  ['point-to-point', 'internet', 'nix-vector-routing', 'applications'])
     obj.source = 'nms-p2p-nix-distributed.cc'
+
+    obj = bld.create_ns3_program('simple-distributed-empty-node',
+                                 ['point-to-point', 'internet', 'nix-vector-routing', 'applications'])
+    obj.source = 'simple-distributed-empty-node.cc'
diff -Naur ns-3.18.1/src/mpi/model/distributed-simulator-impl.cc ns-3.19/src/mpi/model/distributed-simulator-impl.cc
--- ns-3.18.1/src/mpi/model/distributed-simulator-impl.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/mpi/model/distributed-simulator-impl.cc	2013-12-20 09:44:50.000000000 -0800
@@ -14,9 +14,11 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Author: George Riley <riley@ece.gatech.edu>
+ *
  */
 
 #include "distributed-simulator-impl.h"
+#include "granted-time-window-mpi-interface.h"
 #include "mpi-interface.h"
 
 #include "ns3/simulator.h"
@@ -39,7 +41,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (DistributedSimulatorImpl);
+NS_OBJECT_ENSURE_REGISTERED (DistributedSimulatorImpl)
+  ;
 
 LbtsMessage::~LbtsMessage ()
 {
@@ -88,6 +91,8 @@
 
 DistributedSimulatorImpl::DistributedSimulatorImpl ()
 {
+  NS_LOG_FUNCTION (this);
+
 #ifdef NS3_MPI
   m_myId = MpiInterface::GetSystemId ();
   m_systemCount = MpiInterface::GetSize ();
@@ -101,6 +106,7 @@
 #endif
 
   m_stop = false;
+  m_globalFinished = false;
   // uids are allocated from 4.
   // uid 0 is "invalid" events
   // uid 1 is "now" events
@@ -116,11 +122,14 @@
 
 DistributedSimulatorImpl::~DistributedSimulatorImpl ()
 {
+  NS_LOG_FUNCTION (this);
 }
 
 void
 DistributedSimulatorImpl::DoDispose (void)
 {
+  NS_LOG_FUNCTION (this);
+
   while (!m_events->IsEmpty ())
     {
       Scheduler::Event next = m_events->RemoveNext ();
@@ -134,6 +143,8 @@
 void
 DistributedSimulatorImpl::Destroy ()
 {
+  NS_LOG_FUNCTION (this);
+
   while (!m_destroyEvents.empty ())
     {
       Ptr<EventImpl> ev = m_destroyEvents.front ().PeekEventImpl ();
@@ -152,6 +163,8 @@
 void
 DistributedSimulatorImpl::CalculateLookAhead (void)
 {
+  NS_LOG_FUNCTION (this);
+
 #ifdef NS3_MPI
   if (MpiInterface::GetSize () <= 1)
     {
@@ -161,6 +174,7 @@
   else
     {
       DistributedSimulatorImpl::m_lookAhead = GetMaximumSimulationTime ();
+
       m_grantedTime = GetMaximumSimulationTime ();
 
       NodeContainer c = NodeContainer::GetGlobal ();
@@ -236,7 +250,7 @@
   long recvbuf;
 
   /* Tasks with no inter-task links do not contribute to max */
-  if (m_lookAhead == GetMaximumSimulationTime ()) 
+  if (m_lookAhead == GetMaximumSimulationTime ())
     {
       sendbuf = 0;
     }
@@ -253,7 +267,7 @@
    * will proceed without synchronization until a single AllGather
    * occurs when all tasks have finished.
    */
-  if (m_lookAhead == GetMaximumSimulationTime () && recvbuf != 0) 
+  if (m_lookAhead == GetMaximumSimulationTime () && recvbuf != 0)
     {
       m_lookAhead = Time (recvbuf);
       m_grantedTime = m_lookAhead;
@@ -267,6 +281,8 @@
 void
 DistributedSimulatorImpl::SetScheduler (ObjectFactory schedulerFactory)
 {
+  NS_LOG_FUNCTION (this << schedulerFactory);
+
   Ptr<Scheduler> scheduler = schedulerFactory.Create<Scheduler> ();
 
   if (m_events != 0)
@@ -283,6 +299,8 @@
 void
 DistributedSimulatorImpl::ProcessOneEvent (void)
 {
+  NS_LOG_FUNCTION (this);
+
   Scheduler::Event next = m_events->RemoveNext ();
 
   NS_ASSERT (next.key.m_ts >= m_currentTs);
@@ -311,11 +329,14 @@
 uint64_t
 DistributedSimulatorImpl::NextTs (void) const
 {
-  // If local MPI task is has no more events or stop was called 
+  // If local MPI task is has no more events or stop was called
   // next event time is infinity.
-  if (IsLocalFinished ()) {
+  if (IsLocalFinished ())
+    {
       return GetMaximumSimulationTime ().GetTimeStep ();
-    } else  {
+    }
+  else
+    {
       Scheduler::Event ev = m_events->PeekNext ();
       return ev.key.m_ts;
     }
@@ -330,6 +351,8 @@
 void
 DistributedSimulatorImpl::Run (void)
 {
+  NS_LOG_FUNCTION (this);
+
 #ifdef NS3_MPI
   CalculateLookAhead ();
   m_stop = false;
@@ -343,17 +366,17 @@
       // synchronizations with other tasks until all tasks have
       // completed.
       if (nextTime > m_grantedTime || IsLocalFinished () )
-        { 
-
+        {
           // Can't process next event, calculate a new LBTS
           // First receive any pending messages
-          MpiInterface::ReceiveMessages ();
+          GrantedTimeWindowMpiInterface::ReceiveMessages ();
           // reset next time
           nextTime = Next ();
           // And check for send completes
-          MpiInterface::TestSendComplete ();
+          GrantedTimeWindowMpiInterface::TestSendComplete ();
           // Finally calculate the lbts
-          LbtsMessage lMsg (MpiInterface::GetRxCount (), MpiInterface::GetTxCount (), m_myId, IsLocalFinished (), nextTime);
+          LbtsMessage lMsg (GrantedTimeWindowMpiInterface::GetRxCount (), GrantedTimeWindowMpiInterface::GetTxCount (), 
+                            m_myId, IsLocalFinished (), nextTime);
           m_pLBTS[m_myId] = lMsg;
           MPI_Allgather (&lMsg, sizeof (LbtsMessage), MPI_BYTE, m_pLBTS,
                          sizeof (LbtsMessage), MPI_BYTE, MPI_COMM_WORLD);
@@ -378,7 +401,7 @@
           if (totRx == totTx)
             {
               // If lookahead is infinite then granted time should be as well.
-              // Covers the edge case if all the tasks have no inter tasks 
+              // Covers the edge case if all the tasks have no inter tasks
               // links, prevents overflow of granted time.
               if (m_lookAhead == GetMaximumSimulationTime ())
                 {
@@ -416,12 +439,16 @@
 void
 DistributedSimulatorImpl::Stop (void)
 {
+  NS_LOG_FUNCTION (this);
+
   m_stop = true;
 }
 
 void
 DistributedSimulatorImpl::Stop (Time const &time)
 {
+  NS_LOG_FUNCTION (this << time.GetTimeStep ());
+
   Simulator::Schedule (time, &Simulator::Stop);
 }
 
@@ -431,6 +458,8 @@
 EventId
 DistributedSimulatorImpl::Schedule (Time const &time, EventImpl *event)
 {
+  NS_LOG_FUNCTION (this << time.GetTimeStep () << event);
+
   Time tAbsolute = time + TimeStep (m_currentTs);
 
   NS_ASSERT (tAbsolute.IsPositive ());
@@ -464,6 +493,8 @@
 EventId
 DistributedSimulatorImpl::ScheduleNow (EventImpl *event)
 {
+  NS_LOG_FUNCTION (this << event);
+
   Scheduler::Event ev;
   ev.impl = event;
   ev.key.m_ts = m_currentTs;
@@ -478,6 +509,8 @@
 EventId
 DistributedSimulatorImpl::ScheduleDestroy (EventImpl *event)
 {
+  NS_LOG_FUNCTION (this << event);
+
   EventId id (Ptr<EventImpl> (event, false), m_currentTs, 0xffffffff, 2);
   m_destroyEvents.push_back (id);
   m_uid++;
diff -Naur ns-3.18.1/src/mpi/model/distributed-simulator-impl.h ns-3.19/src/mpi/model/distributed-simulator-impl.h
--- ns-3.18.1/src/mpi/model/distributed-simulator-impl.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/mpi/model/distributed-simulator-impl.h	2013-12-20 09:44:50.000000000 -0800
@@ -14,10 +14,11 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Author: George Riley <riley@ece.gatech.edu>
+ *
  */
 
-#ifndef DISTRIBUTED_SIMULATOR_IMPL_H
-#define DISTRIBUTED_SIMULATOR_IMPL_H
+#ifndef NS3_DISTRIBUTED_SIMULATOR_IMPL_H
+#define NS3_DISTRIBUTED_SIMULATOR_IMPL_H
 
 #include "ns3/simulator-impl.h"
 #include "ns3/scheduler.h"
@@ -48,6 +49,7 @@
    * \param rxc received count
    * \param txc transmitted count
    * \param id mpi rank
+   * \param isFinished whether message is finished
    * \param t smallest time
    */
   LbtsMessage (uint32_t rxc, uint32_t txc, uint32_t id, bool isFinished, const Time& t)
@@ -70,14 +72,16 @@
    */
   uint32_t GetTxCount ();
   /**
-   * \return receieved count
+   * \return received count
    */
   uint32_t GetRxCount ();
   /**
    * \return id which corresponds to mpi rank
    */
   uint32_t GetMyId ();
-
+  /**
+   * \return true if system is finished
+   */
   bool IsFinished ();
 
 private:
@@ -92,7 +96,7 @@
  * \ingroup simulator
  * \ingroup mpi
  *
- * \brief distributed simulator implementation using lookahead
+ * \brief Distributed simulator implementation using lookahead
  */
 class DistributedSimulatorImpl : public SimulatorImpl
 {
@@ -154,4 +158,4 @@
 
 } // namespace ns3
 
-#endif /* DISTRIBUTED_SIMULATOR_IMPL_H */
+#endif /* NS3_DISTRIBUTED_SIMULATOR_IMPL_H */
diff -Naur ns-3.18.1/src/mpi/model/granted-time-window-mpi-interface.cc ns-3.19/src/mpi/model/granted-time-window-mpi-interface.cc
--- ns-3.18.1/src/mpi/model/granted-time-window-mpi-interface.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/mpi/model/granted-time-window-mpi-interface.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,337 @@
+/* -*- 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: George Riley <riley@ece.gatech.edu>
+ *
+ */
+
+// This object contains static methods that provide an easy interface
+// to the necessary MPI information.
+
+#include <iostream>
+#include <iomanip>
+#include <list>
+
+#include "granted-time-window-mpi-interface.h"
+#include "mpi-receiver.h"
+#include "mpi-interface.h"
+
+#include "ns3/node.h"
+#include "ns3/node-list.h"
+#include "ns3/net-device.h"
+#include "ns3/simulator.h"
+#include "ns3/simulator-impl.h"
+#include "ns3/nstime.h"
+#include "ns3/log.h"
+
+#ifdef NS3_MPI
+#include <mpi.h>
+#endif
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("GrantedTimeWindowMpiInterface");
+
+
+SentBuffer::SentBuffer ()
+{
+  m_buffer = 0;
+  m_request = 0;
+}
+
+SentBuffer::~SentBuffer ()
+{
+  delete [] m_buffer;
+}
+
+uint8_t*
+SentBuffer::GetBuffer ()
+{
+  return m_buffer;
+}
+
+void
+SentBuffer::SetBuffer (uint8_t* buffer)
+{
+  m_buffer = buffer;
+}
+
+#ifdef NS3_MPI
+MPI_Request*
+SentBuffer::GetRequest ()
+{
+  return &m_request;
+}
+#endif
+
+uint32_t              GrantedTimeWindowMpiInterface::m_sid = 0;
+uint32_t              GrantedTimeWindowMpiInterface::m_size = 1;
+bool                  GrantedTimeWindowMpiInterface::m_initialized = false;
+bool                  GrantedTimeWindowMpiInterface::m_enabled = false;
+uint32_t              GrantedTimeWindowMpiInterface::m_rxCount = 0;
+uint32_t              GrantedTimeWindowMpiInterface::m_txCount = 0;
+std::list<SentBuffer> GrantedTimeWindowMpiInterface::m_pendingTx;
+
+#ifdef NS3_MPI
+MPI_Request* GrantedTimeWindowMpiInterface::m_requests;
+char**       GrantedTimeWindowMpiInterface::m_pRxBuffers;
+#endif
+
+TypeId 
+GrantedTimeWindowMpiInterface::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::GrantedTimeWindowMpiInterface")
+    .SetParent<Object> ()
+  ;
+  return tid;
+}
+
+void
+GrantedTimeWindowMpiInterface::Destroy ()
+{
+  NS_LOG_FUNCTION (this);
+
+#ifdef NS3_MPI
+  for (uint32_t i = 0; i < GetSize (); ++i)
+    {
+      delete [] m_pRxBuffers[i];
+    }
+  delete [] m_pRxBuffers;
+  delete [] m_requests;
+
+  m_pendingTx.clear ();
+#endif
+}
+
+uint32_t
+GrantedTimeWindowMpiInterface::GetRxCount ()
+{
+  return m_rxCount;
+}
+
+uint32_t
+GrantedTimeWindowMpiInterface::GetTxCount ()
+{
+  return m_txCount;
+}
+
+uint32_t
+GrantedTimeWindowMpiInterface::GetSystemId ()
+{
+  if (!m_initialized)
+    {
+      Simulator::GetImplementation ();
+      m_initialized = true;
+    }
+  return m_sid;
+}
+
+uint32_t
+GrantedTimeWindowMpiInterface::GetSize ()
+{
+  if (!m_initialized)
+    {
+      Simulator::GetImplementation ();
+      m_initialized = true;
+    }
+  return m_size;
+}
+
+bool
+GrantedTimeWindowMpiInterface::IsEnabled ()
+{
+  if (!m_initialized)
+    {
+      Simulator::GetImplementation ();
+      m_initialized = true;
+    }
+  return m_enabled;
+}
+
+void
+GrantedTimeWindowMpiInterface::Enable (int* pargc, char*** pargv)
+{
+  NS_LOG_FUNCTION (this << pargc << pargv); 
+
+#ifdef NS3_MPI
+  // Initialize the MPI interface
+  MPI_Init (pargc, pargv);
+  MPI_Barrier (MPI_COMM_WORLD);
+  MPI_Comm_rank (MPI_COMM_WORLD, reinterpret_cast <int *> (&m_sid));
+  MPI_Comm_size (MPI_COMM_WORLD, reinterpret_cast <int *> (&m_size));
+  m_enabled = true;
+  m_initialized = true;
+  // Post a non-blocking receive for all peers
+  m_pRxBuffers = new char*[m_size];
+  m_requests = new MPI_Request[m_size];
+  for (uint32_t i = 0; i < GetSize (); ++i)
+    {
+      m_pRxBuffers[i] = new char[MAX_MPI_MSG_SIZE];
+      MPI_Irecv (m_pRxBuffers[i], MAX_MPI_MSG_SIZE, MPI_CHAR, MPI_ANY_SOURCE, 0,
+                 MPI_COMM_WORLD, &m_requests[i]);
+    }
+#else
+  NS_FATAL_ERROR ("Can't use distributed simulator without MPI compiled in");
+#endif
+}
+
+void
+GrantedTimeWindowMpiInterface::SendPacket (Ptr<Packet> p, const Time& rxTime, uint32_t node, uint32_t dev)
+{
+  NS_LOG_FUNCTION (this << p << rxTime.GetTimeStep () << node << dev);
+
+#ifdef NS3_MPI
+  SentBuffer sendBuf;
+  m_pendingTx.push_back (sendBuf);
+  std::list<SentBuffer>::reverse_iterator i = m_pendingTx.rbegin (); // Points to the last element
+
+  uint32_t serializedSize = p->GetSerializedSize ();
+  uint8_t* buffer =  new uint8_t[serializedSize + 16];
+  i->SetBuffer (buffer);
+  // Add the time, dest node and dest device
+  uint64_t t = rxTime.GetInteger ();
+  uint64_t* pTime = reinterpret_cast <uint64_t *> (buffer);
+  *pTime++ = t;
+  uint32_t* pData = reinterpret_cast<uint32_t *> (pTime);
+  *pData++ = node;
+  *pData++ = dev;
+  // Serialize the packet
+  p->Serialize (reinterpret_cast<uint8_t *> (pData), serializedSize);
+
+  // Find the system id for the destination node
+  Ptr<Node> destNode = NodeList::GetNode (node);
+  uint32_t nodeSysId = destNode->GetSystemId ();
+
+  MPI_Isend (reinterpret_cast<void *> (i->GetBuffer ()), serializedSize + 16, MPI_CHAR, nodeSysId,
+             0, MPI_COMM_WORLD, (i->GetRequest ()));
+  m_txCount++;
+#else
+  NS_FATAL_ERROR ("Can't use distributed simulator without MPI compiled in");
+#endif
+}
+
+void
+GrantedTimeWindowMpiInterface::ReceiveMessages ()
+{ 
+  NS_LOG_FUNCTION_NOARGS ();
+
+#ifdef NS3_MPI
+  // Poll the non-block reads to see if data arrived
+  while (true)
+    {
+      int flag = 0;
+      int index = 0;
+      MPI_Status status;
+
+      MPI_Testany (MpiInterface::GetSize (), m_requests, &index, &flag, &status);
+      if (!flag)
+        {
+          break;        // No more messages
+        }
+      int count;
+      MPI_Get_count (&status, MPI_CHAR, &count);
+      m_rxCount++; // Count this receive
+
+      // Get the meta data first
+      uint64_t* pTime = reinterpret_cast<uint64_t *> (m_pRxBuffers[index]);
+      uint64_t time = *pTime++;
+      uint32_t* pData = reinterpret_cast<uint32_t *> (pTime);
+      uint32_t node = *pData++;
+      uint32_t dev  = *pData++;
+
+      Time rxTime (time);
+
+      count -= sizeof (time) + sizeof (node) + sizeof (dev);
+
+      Ptr<Packet> p = Create<Packet> (reinterpret_cast<uint8_t *> (pData), count, true);
+
+      // Find the correct node/device to schedule receive event
+      Ptr<Node> pNode = NodeList::GetNode (node);
+      Ptr<MpiReceiver> pMpiRec = 0;
+      uint32_t nDevices = pNode->GetNDevices ();
+      for (uint32_t i = 0; i < nDevices; ++i)
+        {
+          Ptr<NetDevice> pThisDev = pNode->GetDevice (i);
+          if (pThisDev->GetIfIndex () == dev)
+            {
+              pMpiRec = pThisDev->GetObject<MpiReceiver> ();
+              break;
+            }
+        }
+
+      NS_ASSERT (pNode && pMpiRec);
+
+      // Schedule the rx event
+      Simulator::ScheduleWithContext (pNode->GetId (), rxTime - Simulator::Now (),
+                                      &MpiReceiver::Receive, pMpiRec, p);
+
+      // Re-queue the next read
+      MPI_Irecv (m_pRxBuffers[index], MAX_MPI_MSG_SIZE, MPI_CHAR, MPI_ANY_SOURCE, 0,
+                 MPI_COMM_WORLD, &m_requests[index]);
+    }
+#else
+  NS_FATAL_ERROR ("Can't use distributed simulator without MPI compiled in");
+#endif
+}
+
+void
+GrantedTimeWindowMpiInterface::TestSendComplete ()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+
+#ifdef NS3_MPI
+  std::list<SentBuffer>::iterator i = m_pendingTx.begin ();
+  while (i != m_pendingTx.end ())
+    {
+      MPI_Status status;
+      int flag = 0;
+      MPI_Test (i->GetRequest (), &flag, &status);
+      std::list<SentBuffer>::iterator current = i; // Save current for erasing
+      i++;                                    // Advance to next
+      if (flag)
+        { // This message is complete
+          m_pendingTx.erase (current);
+        }
+    }
+#else
+  NS_FATAL_ERROR ("Can't use distributed simulator without MPI compiled in");
+#endif
+}
+
+void
+GrantedTimeWindowMpiInterface::Disable ()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+
+#ifdef NS3_MPI
+  int flag = 0;
+  MPI_Initialized (&flag);
+  if (flag)
+    {
+      MPI_Finalize ();
+      m_enabled = false;
+      m_initialized = false;
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Cannot disable MPI environment without Initializing it first");
+    }
+#else
+  NS_FATAL_ERROR ("Can't use distributed simulator without MPI compiled in");
+#endif
+}
+
+
+} // namespace ns3
diff -Naur ns-3.18.1/src/mpi/model/granted-time-window-mpi-interface.h ns-3.19/src/mpi/model/granted-time-window-mpi-interface.h
--- ns-3.18.1/src/mpi/model/granted-time-window-mpi-interface.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/mpi/model/granted-time-window-mpi-interface.h	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,175 @@
+/* -*- 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: George Riley <riley@ece.gatech.edu>
+ *
+ */
+
+// This object contains static methods that provide an easy interface
+// to the necessary MPI information.
+
+#ifndef NS3_GRANTED_TIME_WINDOW_MPI_INTERFACE_H
+#define NS3_GRANTED_TIME_WINDOW_MPI_INTERFACE_H
+
+#include <stdint.h>
+#include <list>
+
+#include "ns3/nstime.h"
+#include "ns3/buffer.h"
+
+#include "parallel-communication-interface.h"
+
+#ifdef NS3_MPI
+#include "mpi.h"
+#else
+typedef void* MPI_Request;
+#endif
+
+namespace ns3 {
+
+/**
+ * maximum MPI message size for easy
+ * buffer creation
+ */
+const uint32_t MAX_MPI_MSG_SIZE = 2000;
+
+/**
+ * \ingroup mpi
+ *
+ * \brief Tracks non-blocking sends
+ *
+ * This class is used to keep track of the asynchronous non-blocking
+ * sends that have been posted.
+ */
+class SentBuffer
+{
+public:
+  SentBuffer ();
+  ~SentBuffer ();
+
+  /**
+   * \return pointer to sent buffer
+   */
+  uint8_t* GetBuffer ();
+  /**
+   * \param buffer pointer to sent buffer
+   */
+  void SetBuffer (uint8_t* buffer);
+  /**
+   * \return MPI request
+   */
+  MPI_Request* GetRequest ();
+
+private:
+  uint8_t* m_buffer;
+  MPI_Request m_request;
+};
+
+class Packet;
+
+/**
+ * \ingroup mpi
+ *
+ * \brief Interface between ns-3 and MPI
+ *
+ * Implements the interface used by the singleton parallel controller
+ * to interface between NS3 and the communications layer being
+ * used for inter-task packet transfers.
+ */
+class GrantedTimeWindowMpiInterface : public ParallelCommunicationInterface, Object
+{
+public:
+  static TypeId GetTypeId (void);
+
+  /**
+   * Delete all buffers
+   */
+  virtual void Destroy ();
+  /**
+   * \return MPI rank
+   */
+  virtual uint32_t GetSystemId ();
+  /**
+   * \return MPI size (number of systems)
+   */
+  virtual uint32_t GetSize ();
+  /**
+   * \return true if using MPI
+   */
+  virtual bool IsEnabled ();
+  /**
+   * \param pargc number of command line arguments
+   * \param pargv command line arguments
+   *
+   * Sets up MPI interface
+   */
+  virtual void Enable (int* pargc, char*** pargv);
+  /**
+   * Terminates the MPI environment by calling MPI_Finalize
+   * This function must be called after Destroy ()
+   * It also resets m_initialized, m_enabled
+   */
+  virtual void Disable ();
+  /**
+   * \param p packet to send
+   * \param rxTime received time at destination node
+   * \param node destination node
+   * \param dev destination device
+   *
+   * Serialize and send a packet to the specified node and net device
+   */
+  virtual void SendPacket (Ptr<Packet> p, const Time &rxTime, uint32_t node, uint32_t dev);
+  /**
+   * Check for received messages complete
+   */
+  static void ReceiveMessages ();
+  /**
+   * Check for completed sends
+   */
+  static void TestSendComplete ();
+  /**
+   * \return received count in packets
+   */
+  static uint32_t GetRxCount ();
+  /**
+   * \return transmitted count in packets
+   */
+  static uint32_t GetTxCount ();
+
+private:
+  static uint32_t m_sid;
+  static uint32_t m_size;
+
+  // Total packets received
+  static uint32_t m_rxCount;
+
+  // Total packets sent
+  static uint32_t m_txCount;
+  static bool     m_initialized;
+  static bool     m_enabled;
+
+  // Pending non-blocking receives
+  static MPI_Request* m_requests;
+
+  // Data buffers for non-blocking reads
+  static char**   m_pRxBuffers;
+
+  // List of pending non-blocking sends
+  static std::list<SentBuffer> m_pendingTx;
+};
+
+} // namespace ns3
+
+#endif /* NS3_GRANTED_TIME_WINDOW_MPI_INTERFACE_H */
diff -Naur ns-3.18.1/src/mpi/model/mpi-interface.cc ns-3.19/src/mpi/model/mpi-interface.cc
--- ns-3.18.1/src/mpi/model/mpi-interface.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/mpi/model/mpi-interface.cc	2013-12-20 09:44:50.000000000 -0800
@@ -1,5 +1,7 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
+ *  Copyright 2013. Lawrence Livermore National Security, LLC.
+ *
  * 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;
@@ -13,296 +15,114 @@
  * 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>
+ * Author: Steven Smith <smith84@llnl.gov>
+ *
  */
 
-// This object contains static methods that provide an easy interface
-// to the necessary MPI information.
-
-#include <iostream>
-#include <iomanip>
-#include <list>
-
 #include "mpi-interface.h"
-#include "mpi-receiver.h"
 
-#include "ns3/node.h"
-#include "ns3/node-list.h"
-#include "ns3/net-device.h"
-#include "ns3/simulator.h"
-#include "ns3/simulator-impl.h"
-#include "ns3/nstime.h"
-
-#ifdef NS3_MPI
-#include <mpi.h>
-#endif
-
-namespace ns3 {
-
-SentBuffer::SentBuffer ()
-{
-  m_buffer = 0;
-  m_request = 0;
-}
+#include <ns3/global-value.h>
+#include <ns3/string.h>
+#include <ns3/log.h>
 
-SentBuffer::~SentBuffer ()
-{
-  delete [] m_buffer;
-}
+#include "null-message-mpi-interface.h"
+#include "granted-time-window-mpi-interface.h"
 
-uint8_t*
-SentBuffer::GetBuffer ()
-{
-  return m_buffer;
-}
+NS_LOG_COMPONENT_DEFINE ("MpiInterface");
 
-void
-SentBuffer::SetBuffer (uint8_t* buffer)
-{
-  m_buffer = buffer;
-}
-
-#ifdef NS3_MPI
-MPI_Request*
-SentBuffer::GetRequest ()
-{
-  return &m_request;
-}
-#endif
+namespace ns3 {
 
-uint32_t              MpiInterface::m_sid = 0;
-uint32_t              MpiInterface::m_size = 1;
-bool                  MpiInterface::m_initialized = false;
-bool                  MpiInterface::m_enabled = false;
-uint32_t              MpiInterface::m_rxCount = 0;
-uint32_t              MpiInterface::m_txCount = 0;
-std::list<SentBuffer> MpiInterface::m_pendingTx;
-
-#ifdef NS3_MPI
-MPI_Request* MpiInterface::m_requests;
-char**       MpiInterface::m_pRxBuffers;
-#endif
+ParallelCommunicationInterface* MpiInterface::g_parallelCommunicationInterface = 0;
 
 void
 MpiInterface::Destroy ()
 {
-#ifdef NS3_MPI
-  for (uint32_t i = 0; i < GetSize (); ++i)
-    {
-      delete [] m_pRxBuffers[i];
-    }
-  delete [] m_pRxBuffers;
-  delete [] m_requests;
-
-  m_pendingTx.clear ();
-#endif
-}
-
-uint32_t
-MpiInterface::GetRxCount ()
-{
-  return m_rxCount;
-}
-
-uint32_t
-MpiInterface::GetTxCount ()
-{
-  return m_txCount;
+  NS_ASSERT (g_parallelCommunicationInterface);
+  g_parallelCommunicationInterface->Destroy ();
 }
 
 uint32_t
 MpiInterface::GetSystemId ()
 {
-  if (!m_initialized)
-    {
-      Simulator::GetImplementation ();
-      m_initialized = true;
-    }
-  return m_sid;
+  if ( g_parallelCommunicationInterface )
+    return g_parallelCommunicationInterface->GetSystemId ();
+  else
+    return 0;
 }
 
 uint32_t
 MpiInterface::GetSize ()
 {
-  if (!m_initialized)
-    {
-      Simulator::GetImplementation ();
-      m_initialized = true;
-    }
-  return m_size;
+  if ( g_parallelCommunicationInterface )
+    return g_parallelCommunicationInterface->GetSize ();
+  else
+    return 1;
 }
 
 bool
 MpiInterface::IsEnabled ()
 {
-  if (!m_initialized)
+  if (g_parallelCommunicationInterface)
     {
-      Simulator::GetImplementation ();
-      m_initialized = true;
+      return g_parallelCommunicationInterface->IsEnabled ();
     }
-  return m_enabled;
-}
-
-void
-MpiInterface::Enable (int* pargc, char*** pargv)
-{
-#ifdef NS3_MPI
-  // Initialize the MPI interface
-  MPI_Init (pargc, pargv);
-  MPI_Barrier (MPI_COMM_WORLD);
-  MPI_Comm_rank (MPI_COMM_WORLD, reinterpret_cast <int *> (&m_sid));
-  MPI_Comm_size (MPI_COMM_WORLD, reinterpret_cast <int *> (&m_size));
-  m_enabled = true;
-  m_initialized = true;
-  // Post a non-blocking receive for all peers
-  m_pRxBuffers = new char*[m_size];
-  m_requests = new MPI_Request[m_size];
-  for (uint32_t i = 0; i < GetSize (); ++i)
+  else
     {
-      m_pRxBuffers[i] = new char[MAX_MPI_MSG_SIZE];
-      MPI_Irecv (m_pRxBuffers[i], MAX_MPI_MSG_SIZE, MPI_CHAR, MPI_ANY_SOURCE, 0,
-                 MPI_COMM_WORLD, &m_requests[i]);
+      return false;
     }
-#else
-  NS_FATAL_ERROR ("Can't use distributed simulator without MPI compiled in");
-#endif
 }
 
 void
-MpiInterface::SendPacket (Ptr<Packet> p, const Time& rxTime, uint32_t node, uint32_t dev)
+MpiInterface::Enable (int* pargc, char*** pargv)
 {
-#ifdef NS3_MPI
-  SentBuffer sendBuf;
-  m_pendingTx.push_back (sendBuf);
-  std::list<SentBuffer>::reverse_iterator i = m_pendingTx.rbegin (); // Points to the last element
-
-  uint32_t serializedSize = p->GetSerializedSize ();
-  uint8_t* buffer =  new uint8_t[serializedSize + 16];
-  i->SetBuffer (buffer);
-  // Add the time, dest node and dest device
-  uint64_t t = rxTime.GetNanoSeconds ();
-  uint64_t* pTime = reinterpret_cast <uint64_t *> (buffer);
-  *pTime++ = t;
-  uint32_t* pData = reinterpret_cast<uint32_t *> (pTime);
-  *pData++ = node;
-  *pData++ = dev;
-  // Serialize the packet
-  p->Serialize (reinterpret_cast<uint8_t *> (pData), serializedSize);
-
-  // Find the system id for the destination node
-  Ptr<Node> destNode = NodeList::GetNode (node);
-  uint32_t nodeSysId = destNode->GetSystemId ();
-
-  MPI_Isend (reinterpret_cast<void *> (i->GetBuffer ()), serializedSize + 16, MPI_CHAR, nodeSysId,
-             0, MPI_COMM_WORLD, (i->GetRequest ()));
-  m_txCount++;
-#else
-  NS_FATAL_ERROR ("Can't use distributed simulator without MPI compiled in");
-#endif
-}
+  StringValue simulationTypeValue;
+  bool useDefault = true;
 
-void
-MpiInterface::ReceiveMessages ()
-{ // Poll the non-block reads to see if data arrived
-#ifdef NS3_MPI
-  while (true)
+  if (GlobalValue::GetValueByNameFailSafe ("SimulatorImplementationType", simulationTypeValue))
     {
-      int flag = 0;
-      int index = 0;
-      MPI_Status status;
+      std::string simulationType = simulationTypeValue.Get ();
 
-      MPI_Testany (GetSize (), m_requests, &index, &flag, &status);
-      if (!flag)
+      // Set communication interface based on the simulation type being used.
+      // Defaults to synchronous.
+      if (simulationType.compare ("ns3::NullMessageSimulatorImpl") == 0)
         {
-          break;        // No more messages
+          g_parallelCommunicationInterface = new NullMessageMpiInterface ();
+          useDefault = false;
         }
-      int count;
-      MPI_Get_count (&status, MPI_CHAR, &count);
-      m_rxCount++; // Count this receive
-
-      // Get the meta data first
-      uint64_t* pTime = reinterpret_cast<uint64_t *> (m_pRxBuffers[index]);
-      uint64_t nanoSeconds = *pTime++;
-      uint32_t* pData = reinterpret_cast<uint32_t *> (pTime);
-      uint32_t node = *pData++;
-      uint32_t dev  = *pData++;
-
-      Time rxTime = NanoSeconds (nanoSeconds);
-
-      count -= sizeof (nanoSeconds) + sizeof (node) + sizeof (dev);
-
-      Ptr<Packet> p = Create<Packet> (reinterpret_cast<uint8_t *> (pData), count, true);
-
-      // Find the correct node/device to schedule receive event
-      Ptr<Node> pNode = NodeList::GetNode (node);
-      Ptr<MpiReceiver> pMpiRec = 0;
-      uint32_t nDevices = pNode->GetNDevices ();
-      for (uint32_t i = 0; i < nDevices; ++i)
+      else if (simulationType.compare ("ns3::DistributedSimulatorImpl") == 0)
         {
-          Ptr<NetDevice> pThisDev = pNode->GetDevice (i);
-          if (pThisDev->GetIfIndex () == dev)
-            {
-              pMpiRec = pThisDev->GetObject<MpiReceiver> ();
-              break;
-            }
+          g_parallelCommunicationInterface = new GrantedTimeWindowMpiInterface ();
+          useDefault = false;
         }
+    }
 
-      NS_ASSERT (pNode && pMpiRec);
-
-      // Schedule the rx event
-      Simulator::ScheduleWithContext (pNode->GetId (), rxTime - Simulator::Now (),
-                                      &MpiReceiver::Receive, pMpiRec, p);
-
-      // Re-queue the next read
-      MPI_Irecv (m_pRxBuffers[index], MAX_MPI_MSG_SIZE, MPI_CHAR, MPI_ANY_SOURCE, 0,
-                 MPI_COMM_WORLD, &m_requests[index]);
+  // User did not specify a valid parallel simulator; use the default.
+  if (useDefault)
+    {
+      g_parallelCommunicationInterface = new GrantedTimeWindowMpiInterface ();
+      GlobalValue::Bind ("SimulatorImplementationType",
+                         StringValue ("ns3::DistributedSimulatorImpl"));
+      NS_LOG_WARN ("SimulatorImplementationType was set to non-parallel simulator; setting type to ns3::DistributedSimulatorImp");
     }
-#else
-  NS_FATAL_ERROR ("Can't use distributed simulator without MPI compiled in");
-#endif
+
+  g_parallelCommunicationInterface->Enable (pargc, pargv);
 }
 
 void
-MpiInterface::TestSendComplete ()
+MpiInterface::SendPacket (Ptr<Packet> p, const Time& rxTime, uint32_t node, uint32_t dev)
 {
-#ifdef NS3_MPI
-  std::list<SentBuffer>::iterator i = m_pendingTx.begin ();
-  while (i != m_pendingTx.end ())
-    {
-      MPI_Status status;
-      int flag = 0;
-      MPI_Test (i->GetRequest (), &flag, &status);
-      std::list<SentBuffer>::iterator current = i; // Save current for erasing
-      i++;                                    // Advance to next
-      if (flag)
-        { // This message is complete
-          m_pendingTx.erase (current);
-        }
-    }
-#else
-  NS_FATAL_ERROR ("Can't use distributed simulator without MPI compiled in");
-#endif
+  NS_ASSERT (g_parallelCommunicationInterface);
+  g_parallelCommunicationInterface->SendPacket (p, rxTime, node, dev);
 }
 
-void 
+
+void
 MpiInterface::Disable ()
 {
-#ifdef NS3_MPI
-  int flag = 0;
-  MPI_Initialized (&flag);
-  if (flag)
-    {
-      MPI_Finalize ();
-      m_enabled = false;
-      m_initialized = false;
-    }
-  else
-    {
-      NS_FATAL_ERROR ("Cannot disable MPI environment without Initializing it first");
-    }
-#else
-  NS_FATAL_ERROR ("Can't use distributed simulator without MPI compiled in");
-#endif
+  NS_ASSERT (g_parallelCommunicationInterface);
+  g_parallelCommunicationInterface->Disable ();
+  delete g_parallelCommunicationInterface;
+  g_parallelCommunicationInterface = 0;
 }
 
 
diff -Naur ns-3.18.1/src/mpi/model/mpi-interface.h ns-3.19/src/mpi/model/mpi-interface.h
--- ns-3.18.1/src/mpi/model/mpi-interface.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/mpi/model/mpi-interface.h	2013-12-20 09:44:50.000000000 -0800
@@ -1,5 +1,7 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
+ *  Copyright 2013. Lawrence Livermore National Security, LLC.
+ *
  * 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;
@@ -13,109 +15,74 @@
  * 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>
+ * Author: Steven Smith <smith84@llnl.gov>
+ *
  */
 
-// This object contains static methods that provide an easy interface
-// to the necessary MPI information.
-
 #ifndef NS3_MPI_INTERFACE_H
 #define NS3_MPI_INTERFACE_H
 
-#include <stdint.h>
-#include <list>
-
-#include "ns3/nstime.h"
-#include "ns3/buffer.h"
-
-#if defined(NS3_OPENMPI)
-struct ompi_request_t;
-typedef struct ompi_request_t* MPI_Request;
-#elif defined(NS3_MPICH)
-typedef int MPI_Request;
-#else
-typedef void* MPI_Request;
-#endif
+#include <ns3/nstime.h>
+#include <ns3/packet.h>
 
 namespace ns3 {
-
 /**
  * \defgroup mpi MPI Distributed Simulation
  *
  */
 
-/**
- * maximum MPI message size for easy
- * buffer creation
- */
-const uint32_t MAX_MPI_MSG_SIZE = 2000;
+class ParallelCommunicationInterface;
 
 /**
  * \ingroup mpi
  *
- * Define a class for tracking the non-block sends
- */
-class SentBuffer
-{
-public:
-  SentBuffer ();
-  ~SentBuffer ();
-
-  /**
-   * \return pointer to sent buffer
-   */
-  uint8_t* GetBuffer ();
-  /**
-   * \param buffer pointer to sent buffer
-   */
-  void SetBuffer (uint8_t* buffer);
-  /**
-   * \return MPI request
-   */
-  MPI_Request* GetRequest ();
-
-private:
-  uint8_t* m_buffer;
-  MPI_Request m_request;
-};
-
-class Packet;
-
-/**
- * \ingroup mpi
+ * \brief Singleton used to interface to the communications infrastructure
+ * when running NS3 in parallel.  
  *
- * Interface between ns-3 and MPI
+ * Delegates the implementation to the specific parallel
+ * infrastructure being used.  Implementation is defined in the
+ * ParallelCommunicationInterface virtual base class; this API mirrors
+ * that interface.  This singleton is responsible for instantiating an
+ * instance of the communication interface based on
+ * SimulatorImplementationType attribute in ns3::GlobalValues.  The
+ * attribute must be set before Enable is invoked.
  */
 class MpiInterface
 {
 public:
   /**
-   * Delete all buffers
+   * Deletes storage used by the parallel environment.
    */
   static void Destroy ();
   /**
-   * \return MPI rank
+   * \return system identification
+   *
+   * When running a sequential simulation this will return a systemID of 0.
    */
   static uint32_t GetSystemId ();
   /**
-   * \return MPI size (number of systems)
+   * \return number of parallel tasks
+   *
+   * When running a sequential simulation this will return a size of 1.
    */
   static uint32_t GetSize ();
   /**
-   * \return true if using MPI
+   * \return true if parallel communication is enabled
    */
   static bool IsEnabled ();
   /**
    * \param pargc number of command line arguments
    * \param pargv command line arguments
    *
-   * Sets up MPI interface
+   * \brief Sets up parallel communication interface.
+   *
+   * SimulatorImplementationType attribute in ns3::GlobalValues must be set before
+   * Enable is invoked.
    */
   static void Enable (int* pargc, char*** pargv);
   /**
-   * Terminates the MPI environment by calling MPI_Finalize
+   * Terminates the parallel environment.
    * This function must be called after Destroy ()
-   * It also resets m_initialized, m_enabled
    */
   static void Disable ();
   /**
@@ -127,43 +94,12 @@
    * Serialize and send a packet to the specified node and net device
    */
   static void SendPacket (Ptr<Packet> p, const Time &rxTime, uint32_t node, uint32_t dev);
-  /**
-   * Check for received messages complete
-   */
-  static void ReceiveMessages ();
-  /**
-   * Check for completed sends
-   */
-  static void TestSendComplete ();
-  /**
-   * \return received count in packets
-   */
-  static uint32_t GetRxCount ();
-  /**
-   * \return transmitted count in packets
-   */
-  static uint32_t GetTxCount ();
-
 private:
-  static uint32_t m_sid;
-  static uint32_t m_size;
-
-  // Total packets received
-  static uint32_t m_rxCount;
 
-  // Total packets sent
-  static uint32_t m_txCount;
-  static bool     m_initialized;
-  static bool     m_enabled;
-
-  // Pending non-blocking receives
-  static MPI_Request* m_requests;
-
-  // Data buffers for non-blocking reads
-  static char**   m_pRxBuffers;
-
-  // List of pending non-blocking sends
-  static std::list<SentBuffer> m_pendingTx;
+  /**
+   * Static instance of the instantiated parallel controller.
+   */
+  static ParallelCommunicationInterface* g_parallelCommunicationInterface;
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/mpi/model/mpi-receiver.cc ns-3.19/src/mpi/model/mpi-receiver.cc
--- ns-3.18.1/src/mpi/model/mpi-receiver.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/mpi/model/mpi-receiver.cc	2013-12-20 09:44:50.000000000 -0800
@@ -33,13 +33,13 @@
 {
 }
 
-void 
+void
 MpiReceiver::SetReceiveCallback (Callback<void, Ptr<Packet> > callback)
 {
   m_rxCallback = callback;
 }
 
-void 
+void
 MpiReceiver::Receive (Ptr<Packet> p)
 {
   NS_ASSERT (!m_rxCallback.IsNull ());
diff -Naur ns-3.18.1/src/mpi/model/mpi-receiver.h ns-3.19/src/mpi/model/mpi-receiver.h
--- ns-3.18.1/src/mpi/model/mpi-receiver.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/mpi/model/mpi-receiver.h	2013-12-20 09:44:50.000000000 -0800
@@ -16,7 +16,7 @@
  * Author: George Riley <riley@ece.gatech.edu>
  */
 
-// Provides an interface to aggregate to MPI-compatible NetDevices 
+// Provides an interface to aggregate to MPI-compatible NetDevices
 
 #ifndef NS3_MPI_RECEIVER_H
 #define NS3_MPI_RECEIVER_H
@@ -29,8 +29,8 @@
 /**
  * \ingroup mpi
  *
- * Class to aggregate to a NetDevice if it supports MPI capability
- * 
+ * \brief Class to aggregate to a NetDevice if it supports MPI capability
+ *
  * MpiInterface::ReceiveMessages () needs to send packets to a NetDevice
  * Receive() method.  Since each NetDevice's Receive() method is specific
  * to the derived class, and since we do not know whether such a NetDevice
diff -Naur ns-3.18.1/src/mpi/model/null-message-mpi-interface.cc ns-3.19/src/mpi/model/null-message-mpi-interface.cc
--- ns-3.18.1/src/mpi/model/null-message-mpi-interface.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/mpi/model/null-message-mpi-interface.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,460 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ *  Copyright 2013. Lawrence Livermore National Security, LLC.
+ *
+ * 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: Steven Smith <smith84@llnl.gov>
+ *
+ */
+
+#include "null-message-mpi-interface.h"
+
+#include "null-message-simulator-impl.h"
+#include "remote-channel-bundle-manager.h"
+#include "remote-channel-bundle.h"
+
+#include "ns3/mpi-receiver.h"
+#include "ns3/node.h"
+#include "ns3/node-list.h"
+#include "ns3/net-device.h"
+#include "ns3/nstime.h"
+#include "ns3/simulator.h"
+#include "ns3/log.h"
+
+#ifdef NS3_MPI
+#include <mpi.h>
+#endif
+
+#include <iostream>
+#include <iomanip>
+#include <list>
+
+NS_LOG_COMPONENT_DEFINE ("NullMessageMpiInterface");
+
+namespace ns3 {
+
+/**
+ * maximum MPI message size for easy
+ * buffer creation
+ */
+const uint32_t NULL_MESSAGE_MAX_MPI_MSG_SIZE = 2000;
+
+
+NullMessageSentBuffer::NullMessageSentBuffer ()
+{
+  m_buffer = 0;
+  m_request = 0;
+}
+
+NullMessageSentBuffer::~NullMessageSentBuffer ()
+{
+  delete [] m_buffer;
+}
+
+uint8_t*
+NullMessageSentBuffer::GetBuffer ()
+{
+  return m_buffer;
+}
+
+void
+NullMessageSentBuffer::SetBuffer (uint8_t* buffer)
+{
+  m_buffer = buffer;
+}
+
+MPI_Request*
+NullMessageSentBuffer::GetRequest ()
+{
+  return &m_request;
+}
+
+uint32_t              NullMessageMpiInterface::g_sid = 0;
+uint32_t              NullMessageMpiInterface::g_size = 1;
+uint32_t              NullMessageMpiInterface::g_numNeighbors = 0;
+bool                  NullMessageMpiInterface::g_initialized = false;
+bool                  NullMessageMpiInterface::g_enabled = false;
+std::list<NullMessageSentBuffer> NullMessageMpiInterface::g_pendingTx;
+
+MPI_Request* NullMessageMpiInterface::g_requests;
+char**       NullMessageMpiInterface::g_pRxBuffers;
+
+NullMessageMpiInterface::NullMessageMpiInterface ()
+{
+  NS_LOG_FUNCTION (this);
+
+#ifndef NS3_MPI
+  /*
+   * This class can only be constructed if MPI is available.  Fail if an 
+   * attempt is made to instantiate this class without MPI.
+   */
+  NS_FATAL_ERROR ("Must compile with MPI if Null Message simulator is used, see --enable-mpi option for waf");
+#endif
+}
+
+NullMessageMpiInterface::~NullMessageMpiInterface ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+NullMessageMpiInterface::Destroy ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+uint32_t
+NullMessageMpiInterface::GetSystemId ()
+{
+  NS_ASSERT (g_enabled);
+  return g_sid;
+}
+
+uint32_t
+NullMessageMpiInterface::GetSize ()
+{
+  NS_ASSERT (g_enabled);
+  return g_size;
+}
+
+bool
+NullMessageMpiInterface::IsEnabled ()
+{
+  if (!g_initialized)
+    {
+      Simulator::GetImplementation ();
+      g_initialized = true;
+    }
+  return g_enabled;
+}
+
+void
+NullMessageMpiInterface::Enable (int* pargc, char*** pargv)
+{
+  NS_LOG_FUNCTION (this << *pargc);
+#ifdef NS3_MPI
+
+  // Initialize the MPI interface
+  MPI_Init (pargc, pargv);
+  MPI_Barrier (MPI_COMM_WORLD);
+
+  // SystemId and Size are unit32_t in interface but MPI uses int so convert.
+  int mpiSystemId;
+  int mpiSize;
+  MPI_Comm_rank (MPI_COMM_WORLD, &mpiSystemId);
+  MPI_Comm_size (MPI_COMM_WORLD, &mpiSize);
+
+  g_sid = mpiSystemId;
+  g_size = mpiSize;
+
+  g_enabled = true;
+  g_initialized = true;
+
+#endif
+}
+
+void 
+NullMessageMpiInterface::InitializeSendReceiveBuffers(void)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+#ifdef NS3_MPI
+  NS_ASSERT (g_enabled);
+
+  g_numNeighbors = RemoteChannelBundleManager::Size();
+
+  // Post a non-blocking receive for all peers
+  g_requests = new MPI_Request[g_numNeighbors];
+  g_pRxBuffers = new char*[g_numNeighbors];
+  int index = 0;
+  for (uint32_t rank = 0; rank < g_size; ++rank)
+    {
+      Ptr<RemoteChannelBundle> bundle = RemoteChannelBundleManager::Find(rank);
+      if (bundle) 
+        {
+          g_pRxBuffers[index] = new char[NULL_MESSAGE_MAX_MPI_MSG_SIZE];
+          MPI_Irecv (g_pRxBuffers[index], NULL_MESSAGE_MAX_MPI_MSG_SIZE, MPI_CHAR, rank, 0,
+                     MPI_COMM_WORLD, &g_requests[index]);
+          ++index;
+        }
+    }
+#endif
+}
+
+void
+NullMessageMpiInterface::SendPacket (Ptr<Packet> p, const Time& rxTime, uint32_t node, uint32_t dev)
+{
+  NS_LOG_FUNCTION (this << p << rxTime.GetTimeStep () << node << dev);
+
+  NS_ASSERT (g_enabled);
+
+#ifdef NS3_MPI
+
+  // Find the system id for the destination node
+  Ptr<Node> destNode = NodeList::GetNode (node);
+  uint32_t nodeSysId = destNode->GetSystemId ();
+
+  NullMessageSentBuffer sendBuf;
+  g_pendingTx.push_back (sendBuf);
+  std::list<NullMessageSentBuffer>::reverse_iterator iter = g_pendingTx.rbegin (); // Points to the last element
+
+  uint32_t serializedSize = p->GetSerializedSize ();
+  uint32_t bufferSize = serializedSize + ( 2 * sizeof (uint64_t) ) + ( 2 * sizeof (uint32_t) );
+  uint8_t* buffer =  new uint8_t[bufferSize];
+  iter->SetBuffer (buffer);
+  // Add the time, dest node and dest device
+  uint64_t t = rxTime.GetInteger ();
+  uint64_t* pTime = reinterpret_cast <uint64_t *> (buffer);
+  *pTime++ = t;
+
+  Time guarantee_update = NullMessageSimulatorImpl::GetInstance ()->CalculateGuaranteeTime (nodeSysId);
+  *pTime++ = guarantee_update.GetTimeStep ();
+
+  uint32_t* pData = reinterpret_cast<uint32_t *> (pTime);
+  *pData++ = node;
+  *pData++ = dev;
+  // Serialize the packet
+  p->Serialize (reinterpret_cast<uint8_t *> (pData), serializedSize);
+
+  MPI_Isend (reinterpret_cast<void *> (iter->GetBuffer ()), bufferSize, MPI_CHAR, nodeSysId,
+             0, MPI_COMM_WORLD, (iter->GetRequest ()));
+
+  NullMessageSimulatorImpl::GetInstance ()->RescheduleNullMessageEvent (nodeSysId);
+
+#endif
+}
+
+void
+NullMessageMpiInterface::SendNullMessage (const Time& guarantee_update, Ptr<RemoteChannelBundle> bundle)
+{
+  NS_LOG_FUNCTION (guarantee_update.GetTimeStep () << bundle);
+
+  NS_ASSERT (g_enabled);
+
+#ifdef NS3_MPI
+
+  NullMessageSentBuffer sendBuf;
+  g_pendingTx.push_back (sendBuf);
+  std::list<NullMessageSentBuffer>::reverse_iterator iter = g_pendingTx.rbegin (); // Points to the last element
+
+  uint32_t bufferSize = 2 * sizeof (uint64_t) + 2 * sizeof (uint32_t);
+  uint8_t* buffer =  new uint8_t[bufferSize];
+  iter->SetBuffer (buffer);
+  // Add the time, dest node and dest device
+  uint64_t* pTime = reinterpret_cast <uint64_t *> (buffer);
+  *pTime++ = 0;
+  *pTime++ = guarantee_update.GetInteger ();
+  uint32_t* pData = reinterpret_cast<uint32_t *> (pTime);
+  *pData++ = 0;
+  *pData++ = 0;
+
+  // Find the system id for the destination MPI rank
+  uint32_t nodeSysId = bundle->GetSystemId ();
+
+  MPI_Isend (reinterpret_cast<void *> (iter->GetBuffer ()), bufferSize, MPI_CHAR, nodeSysId,
+             0, MPI_COMM_WORLD, (iter->GetRequest ()));
+#endif
+}
+
+void
+NullMessageMpiInterface::ReceiveMessagesBlocking ()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+
+  ReceiveMessages(true);
+}
+
+
+void
+NullMessageMpiInterface::ReceiveMessagesNonBlocking ()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+
+  ReceiveMessages(false);
+}
+
+
+void
+NullMessageMpiInterface::ReceiveMessages (bool blocking)
+{
+  NS_LOG_FUNCTION (blocking);
+
+  NS_ASSERT (g_enabled);
+
+#ifdef NS3_MPI
+
+  // stop flag set to true when no more messages are found to
+  // process.
+  bool stop = false;
+
+
+  if (!g_numNeighbors) {
+    // Not communicating with anyone.
+    return;
+  }
+
+  do
+    {
+      int messageReceived = 0;
+      int index = 0;
+      MPI_Status status;
+
+      if (blocking)
+        {
+          MPI_Waitany (g_numNeighbors, g_requests, &index, &status);
+          messageReceived = 1; /* Wait always implies message was received */
+          stop = true;
+        }
+      else
+        {
+          MPI_Testany (g_numNeighbors, g_requests, &index, &messageReceived, &status);
+        }
+
+      if (messageReceived)
+        {
+          int count;
+          MPI_Get_count (&status, MPI_CHAR, &count);
+
+          // Get the meta data first
+          uint64_t* pTime = reinterpret_cast<uint64_t *> (g_pRxBuffers[index]);
+          uint64_t time = *pTime++;
+          uint64_t guaranteeUpdate = *pTime++;
+
+          uint32_t* pData = reinterpret_cast<uint32_t *> (pTime);
+          uint32_t node = *pData++;
+          uint32_t dev  = *pData++;
+
+          Time rxTime (time);
+
+          // rxtime == 0 means this is a Null Message
+          if (rxTime > 0)
+            {
+              count -= sizeof (time) + sizeof (guaranteeUpdate) + sizeof (node) + sizeof (dev);
+
+              Ptr<Packet> p = Create<Packet> (reinterpret_cast<uint8_t *> (pData), count, true);
+
+              // Find the correct node/device to schedule receive event
+              Ptr<Node> pNode = NodeList::GetNode (node);
+              Ptr<MpiReceiver> pMpiRec = 0;
+              uint32_t nDevices = pNode->GetNDevices ();
+              for (uint32_t i = 0; i < nDevices; ++i)
+                {
+                  Ptr<NetDevice> pThisDev = pNode->GetDevice (i);
+                  if (pThisDev->GetIfIndex () == dev)
+                    {
+                      pMpiRec = pThisDev->GetObject<MpiReceiver> ();
+                      break;
+                    }
+                }
+              NS_ASSERT (pNode && pMpiRec);
+
+              // Schedule the rx event
+              Simulator::ScheduleWithContext (pNode->GetId (), rxTime - Simulator::Now (),
+                                              &MpiReceiver::Receive, pMpiRec, p);
+
+            }
+
+          // Update guarantee time for both packet receives and Null Messages.
+          Ptr<RemoteChannelBundle> bundle = RemoteChannelBundleManager::Find (status.MPI_SOURCE);
+          NS_ASSERT (bundle);
+
+          bundle->SetGuaranteeTime (Time (guaranteeUpdate));
+
+          // Re-queue the next read
+          MPI_Irecv (g_pRxBuffers[index], NULL_MESSAGE_MAX_MPI_MSG_SIZE, MPI_CHAR, status.MPI_SOURCE, 0,
+                     MPI_COMM_WORLD, &g_requests[index]);
+
+        }
+      else
+        {
+          // if non-blocking and no message received in testany then stop message loop
+          stop = true;
+        }
+    }
+  while (!stop);
+#endif
+}
+
+void
+NullMessageMpiInterface::TestSendComplete ()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+
+  NS_ASSERT (g_enabled);
+
+#ifdef NS3_MPI
+  std::list<NullMessageSentBuffer>::iterator iter = g_pendingTx.begin ();
+  while (iter != g_pendingTx.end ())
+    {
+      MPI_Status status;
+      int flag = 0;
+      MPI_Test (iter->GetRequest (), &flag, &status);
+      std::list<NullMessageSentBuffer>::iterator current = iter; // Save current for erasing
+      ++iter; // Advance to next
+      if (flag)
+        { // This message is complete
+          g_pendingTx.erase (current);
+        }
+    }
+#endif
+}
+
+void
+NullMessageMpiInterface::Disable ()
+{
+  NS_LOG_FUNCTION (this);
+
+#ifdef NS3_MPI
+  int flag = 0;
+  MPI_Initialized (&flag);
+  if (flag)
+    {
+
+      for (std::list<NullMessageSentBuffer>::iterator iter = g_pendingTx.begin ();
+           iter != g_pendingTx.end ();
+           ++iter)
+        {
+          MPI_Cancel (iter->GetRequest ());
+          MPI_Request_free (iter->GetRequest ());
+        }
+
+      for (uint32_t i = 0; i < g_numNeighbors; ++i)
+        {
+          MPI_Cancel (&g_requests[i]);
+          MPI_Request_free (&g_requests[i]);
+        }
+
+      MPI_Finalize ();
+
+      for (uint32_t i = 0; i < g_numNeighbors; ++i)
+        {
+          delete [] g_pRxBuffers[i];
+        }
+      delete [] g_pRxBuffers;
+      delete [] g_requests;
+
+      g_pendingTx.clear ();
+
+      g_enabled = false;
+      g_initialized = false;
+
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Cannot disable MPI environment without Initializing it first");
+    }
+#endif
+}
+
+} // namespace ns3
diff -Naur ns-3.18.1/src/mpi/model/null-message-mpi-interface.h ns-3.19/src/mpi/model/null-message-mpi-interface.h
--- ns-3.18.1/src/mpi/model/null-message-mpi-interface.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/mpi/model/null-message-mpi-interface.h	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,228 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ *  Copyright 2013. Lawrence Livermore National Security, LLC.
+ *
+ * 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: Steven Smith <smith84@llnl.gov>
+ *
+ */
+
+#ifndef NS3_NULLMESSAGE_MPI_INTERFACE_H
+#define NS3_NULLMESSAGE_MPI_INTERFACE_H
+
+#include "parallel-communication-interface.h"
+
+#include <ns3/nstime.h>
+#include <ns3/buffer.h>
+
+#ifdef NS3_MPI
+#include "mpi.h"
+#else
+typedef void* MPI_Request;
+#endif
+
+#include <list>
+
+namespace ns3 {
+
+class RemoteChannelBundle;
+class Packet;
+
+/**
+ * \ingroup mpi
+ *
+ * \brief Non-blocking send buffers for Null Message implementation.
+ * 
+ * One buffer is allocated for each non-blocking send.
+ */
+class NullMessageSentBuffer
+{
+public:
+  NullMessageSentBuffer ();
+  ~NullMessageSentBuffer ();
+
+  /**
+   * \return pointer to sent buffer
+   */
+  uint8_t* GetBuffer ();
+  /**
+   * \param buffer pointer to sent buffer
+   */
+  void SetBuffer (uint8_t* buffer);
+  /**
+   * \return MPI request
+   */
+  MPI_Request* GetRequest ();
+
+private:
+
+  /**
+   * Buffer for send.
+   */
+  uint8_t* m_buffer;
+
+  /**
+   * MPI request posted for the send.
+   */
+  MPI_Request m_request;
+};
+
+/**
+ * \ingroup mpi
+ *
+ * \brief Interface between ns-3 and MPI for the Null Message
+ * distributed simulation implementation.
+ */
+class NullMessageMpiInterface : public ParallelCommunicationInterface
+{
+public:
+
+  NullMessageMpiInterface ();
+  ~NullMessageMpiInterface ();
+
+  /**
+   * Delete all buffers
+   */
+  virtual void Destroy ();
+  /**
+   * \return system id (MPI rank)
+   */
+  virtual uint32_t GetSystemId ();
+  /**
+   * \return number of systems (MPI size)
+   */
+  virtual uint32_t GetSize ();
+  /**
+   * \return true if interface is enabled
+   */
+  virtual bool IsEnabled ();
+  /**
+   * \param pargc number of command line arguments
+   * \param pargv command line arguments
+   *
+   * Sets up interface.   Calls MPI Init and 
+   * posts receives.
+   */
+  virtual void Enable (int* pargc, char*** pargv);
+  /**
+   * Terminates the MPI environment by calling MPI_Finalize This
+   * function must be called after Destroy ().  Resets m_initialized
+   * and m_enabled.
+   */
+  virtual void Disable ();
+  /**
+   * \param p packet to send
+   * \param rxTime received time at destination node
+   * \param node destination node
+   * \param dev destination device
+   *
+   * Serialize and send a packet to the specified node and net device.
+   *
+   * \internal
+   * The MPI buffer format packs a delivery information and the serialized packet.
+   *
+   * uint64_t time the packed should be delivered
+   * uint64_t guarantee time for the Null Message algorithm.
+   * uint32_t node id of destination
+   * unit32_t dev id on destination
+   * uint8_t[] serialized packet
+   * \endinternal
+   */
+  virtual void SendPacket (Ptr<Packet> p, const Time &rxTime, uint32_t node, uint32_t dev);
+  /**
+   * \param guaranteeUpdate guarantee update time for the Null Message
+   * \bundle the destination bundle for the Null Message.
+   *
+   * \brief Send a Null Message to across the specified bundle.  
+   *
+   * Guarantee update time is the lower bound time on the next
+   * possible event from this MPI task to the remote MPI task across
+   * the bundle.  Remote task may execute events up to time.
+   *
+   * Null Messages are sent when a packet has not been sent across
+   * this bundle in order to allow time advancement on the remote
+   * MPI task.
+   *
+   * \internal
+   * The Null Message MPI buffer format is based on the format for sending a packet with
+   * several fields set to 0 to signal that it is a Null Message.  Overloading the normal packet
+   * format simplifies receive logic.
+   *
+   * uint64_t 0 must be zero for Null Message
+   * uint64_t guarantee time
+   * uint32_t 0 must be zero for Null Message
+   * uint32_t 0 must be zero for Null Message
+   * \endinternal
+   */
+  static void SendNullMessage (const Time& guaranteeUpdate, Ptr<RemoteChannelBundle> bundle);
+  /**
+   * Non-blocking check for received messages complete.  Will
+   * receive all messages that are queued up locally.
+   */
+  static void ReceiveMessagesNonBlocking ();
+  /**
+   * Blocking message receive.  Will block until at least one message
+   * has been received.
+   */
+  static void ReceiveMessagesBlocking ();
+  /**
+   * Check for completed sends
+   */
+  static void TestSendComplete ();
+
+  /**
+   * \brief Initialize send and receive buffers.
+   *
+   * This method should be called after all links have been added to the RemoteChannelBundle
+   * manager to setup any required send and receive buffers.
+   */
+  static void InitializeSendReceiveBuffers (void);
+
+private:
+
+  /**
+   * Check for received messages complete.  Will block until message
+   * has been received if blocking flag is true.  When blocking will
+   * return after the first message is received.   Non-blocking mode will
+   * Non-blocking check for received messages complete.  Will
+   * receive all messages that are queued up locally.
+   */
+  static void ReceiveMessages (bool blocking = false);
+
+  // System ID (rank) for this task
+  static uint32_t g_sid;
+
+  // Size of the MPI COM_WORLD group.
+  static uint32_t g_size;
+
+  // Number of neighbor tasks, tasks that this task shares a link with.
+  static uint32_t g_numNeighbors;
+
+  static bool     g_initialized;
+  static bool     g_enabled;
+
+  // Pending non-blocking receives
+  static MPI_Request* g_requests;
+
+  // Data buffers for non-blocking receives
+  static char**   g_pRxBuffers;
+
+  // List of pending non-blocking sends
+  static std::list<NullMessageSentBuffer> g_pendingTx;
+};
+
+} // namespace ns3
+
+#endif /* NS3_NULL_MESSAGE_MPI_INTERFACE_H */
diff -Naur ns-3.18.1/src/mpi/model/null-message-simulator-impl.cc ns-3.19/src/mpi/model/null-message-simulator-impl.cc
--- ns-3.18.1/src/mpi/model/null-message-simulator-impl.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/mpi/model/null-message-simulator-impl.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,603 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ *  Copyright 2013. Lawrence Livermore National Security, LLC.
+ *
+ * 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: Steven Smith <smith84@llnl.gov>
+ *
+ */
+
+#include "null-message-simulator-impl.h"
+
+#include "null-message-mpi-interface.h"
+#include "remote-channel-bundle-manager.h"
+#include "remote-channel-bundle.h"
+#include "mpi-interface.h"
+
+#include <ns3/simulator.h>
+#include <ns3/scheduler.h>
+#include <ns3/event-impl.h>
+#include <ns3/channel.h>
+#include <ns3/node-container.h>
+#include <ns3/double.h>
+#include <ns3/ptr.h>
+#include <ns3/pointer.h>
+#include <ns3/assert.h>
+#include <ns3/log.h>
+
+#include <cmath>
+#include <iostream>
+#include <fstream>
+#include <iomanip>
+
+NS_LOG_COMPONENT_DEFINE ("NullMessageSimulatorImpl");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (NullMessageSimulatorImpl);
+
+NullMessageSimulatorImpl* NullMessageSimulatorImpl::g_instance = 0;
+
+TypeId
+NullMessageSimulatorImpl::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::NullMessageSimulatorImpl")
+    .SetParent<Object> ()
+    .AddConstructor<NullMessageSimulatorImpl> ()
+    .AddAttribute ("SchedulerTune", "Null Message scheduler tuning parameter",
+                   DoubleValue (1.0),
+                   MakeDoubleAccessor (&NullMessageSimulatorImpl::m_schedulerTune),
+                   MakeDoubleChecker<double> (0.01,1.0))
+  ;
+  return tid;
+}
+
+NullMessageSimulatorImpl::NullMessageSimulatorImpl ()
+{
+#ifdef NS3_MPI
+  NS_LOG_FUNCTION (this);
+
+  m_myId = MpiInterface::GetSystemId ();
+  m_systemCount = MpiInterface::GetSize ();
+
+  m_stop = false;
+  // uids are allocated from 4.
+  // uid 0 is "invalid" events
+  // uid 1 is "now" events
+  // uid 2 is "destroy" events
+  m_uid = 4;
+  // before ::Run is entered, the m_currentUid will be zero
+  m_currentUid = 0;
+  m_currentTs = 0;
+  m_currentContext = 0xffffffff;
+  m_unscheduledEvents = 0;
+  m_events = 0;
+
+  m_safeTime = Seconds (0);
+
+  NS_ASSERT (g_instance == 0);
+  g_instance = this;
+
+#else
+  NS_FATAL_ERROR ("Can't use Null Message simulator without MPI compiled in");
+#endif
+}
+
+NullMessageSimulatorImpl::~NullMessageSimulatorImpl ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+NullMessageSimulatorImpl::DoDispose (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  while (!m_events->IsEmpty ())
+    {
+      Scheduler::Event next = m_events->RemoveNext ();
+      next.impl->Unref ();
+    }
+  m_events = 0;
+  SimulatorImpl::DoDispose ();
+}
+
+void
+NullMessageSimulatorImpl::Destroy ()
+{
+  NS_LOG_FUNCTION (this);
+
+  while (!m_destroyEvents.empty ())
+    {
+      Ptr<EventImpl> ev = m_destroyEvents.front ().PeekEventImpl ();
+      m_destroyEvents.pop_front ();
+      NS_LOG_LOGIC ("handle destroy " << ev);
+      if (!ev->IsCancelled ())
+        {
+          ev->Invoke ();
+        }
+    }
+
+  RemoteChannelBundleManager::Destroy();
+  MpiInterface::Destroy ();
+}
+
+void
+NullMessageSimulatorImpl::CalculateLookAhead (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  int num_local_nodes = 0;
+
+  if (MpiInterface::GetSize () > 1)
+    {
+      NodeContainer c = NodeContainer::GetGlobal ();
+      for (NodeContainer::Iterator iter = c.Begin (); iter != c.End (); ++iter)
+        {
+          if ((*iter)->GetSystemId () != MpiInterface::GetSystemId ())
+            {
+              continue;
+            }
+
+          num_local_nodes++;
+
+          for (uint32_t i = 0; i < (*iter)->GetNDevices (); ++i)
+            {
+              Ptr<NetDevice> localNetDevice = (*iter)->GetDevice (i);
+              // only works for p2p links currently
+              if (!localNetDevice->IsPointToPoint ())
+                {
+                  continue;
+                }
+              Ptr<Channel> channel = localNetDevice->GetChannel ();
+              if (channel == 0)
+                {
+                  continue;
+                }
+
+              // grab the adjacent node
+              Ptr<Node> remoteNode;
+              if (channel->GetDevice (0) == localNetDevice)
+                {
+                  remoteNode = (channel->GetDevice (1))->GetNode ();
+                }
+              else
+                {
+                  remoteNode = (channel->GetDevice (0))->GetNode ();
+                }
+
+              // if it's not remote, don't consider it
+              if (remoteNode->GetSystemId () == MpiInterface::GetSystemId ())
+                {
+                  continue;
+                }
+
+              /**
+               * Add this channel to the remote channel bundle from this task to MPI task on other side of the channel.
+               */
+              Ptr<RemoteChannelBundle> remoteChannelBundle = RemoteChannelBundleManager::Find (remoteNode->GetSystemId ());
+              if (!remoteChannelBundle)
+                {
+                  remoteChannelBundle = RemoteChannelBundleManager::Add (remoteNode->GetSystemId ());
+                }
+
+              TimeValue delay;
+              channel->GetAttribute ("Delay", delay);
+              remoteChannelBundle->AddChannel (channel, delay.Get () );
+            }
+        }
+    }
+
+  // Completed setup of remote channel bundles.  Setup send and receive buffers.
+  NullMessageMpiInterface::InitializeSendReceiveBuffers ();
+
+  // Initialized to 0 as we don't have a simulation start time.
+  m_safeTime = Time (0);
+}
+
+void
+NullMessageSimulatorImpl::SetScheduler (ObjectFactory schedulerFactory)
+{
+  NS_LOG_FUNCTION (this << schedulerFactory);
+
+  Ptr<Scheduler> scheduler = schedulerFactory.Create<Scheduler> ();
+
+  if (m_events != 0)
+    {
+      while (!m_events->IsEmpty ())
+        {
+          Scheduler::Event next = m_events->RemoveNext ();
+          scheduler->Insert (next);
+        }
+    }
+  m_events = scheduler;
+}
+
+void
+NullMessageSimulatorImpl::ProcessOneEvent (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  Scheduler::Event next = m_events->RemoveNext ();
+
+  NS_ASSERT (next.key.m_ts >= m_currentTs);
+  m_unscheduledEvents--;
+
+  NS_LOG_LOGIC ("handle " << next.key.m_ts);
+  m_currentTs = next.key.m_ts;
+  m_currentContext = next.key.m_context;
+  m_currentUid = next.key.m_uid;
+  next.impl->Invoke ();
+  next.impl->Unref ();
+}
+
+bool
+NullMessageSimulatorImpl::IsFinished (void) const
+{
+  return m_events->IsEmpty () || m_stop;
+}
+
+Time
+NullMessageSimulatorImpl::Next (void) const
+{
+  NS_LOG_FUNCTION (this);
+
+  NS_ASSERT (!m_events->IsEmpty ());
+
+  Scheduler::Event ev = m_events->PeekNext ();
+  return TimeStep (ev.key.m_ts);
+}
+
+void
+NullMessageSimulatorImpl::ScheduleNullMessageEvent (Ptr<RemoteChannelBundle> bundle)
+{
+  NS_LOG_FUNCTION (this << bundle);
+
+  Time time (m_schedulerTune * bundle->GetDelay ().GetTimeStep ());
+
+  bundle->SetEventId (Simulator::Schedule (time, &NullMessageSimulatorImpl::NullMessageEventHandler, 
+                                           this, PeekPointer(bundle)));
+}
+
+void
+NullMessageSimulatorImpl::RescheduleNullMessageEvent (Ptr<RemoteChannelBundle> bundle)
+{
+  NS_LOG_FUNCTION (this << bundle);
+
+  Simulator::Cancel (bundle->GetEventId ());
+
+  Time time (m_schedulerTune * bundle->GetDelay ().GetTimeStep ());
+
+  bundle->SetEventId (Simulator::Schedule (time, &NullMessageSimulatorImpl::NullMessageEventHandler, 
+                                           this, PeekPointer(bundle)));
+}
+
+void
+NullMessageSimulatorImpl::RescheduleNullMessageEvent (uint32_t nodeSysId)
+{
+  NS_LOG_FUNCTION (this << nodeSysId);
+
+  Ptr<RemoteChannelBundle> bundle = RemoteChannelBundleManager::Find (nodeSysId);
+  NS_ASSERT (bundle);
+
+  RescheduleNullMessageEvent (bundle);
+}
+
+void
+NullMessageSimulatorImpl::Run (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  CalculateLookAhead ();
+
+  RemoteChannelBundleManager::InitializeNullMessageEvents ();
+
+  // Stop will be set if stop is called by simulation.
+  m_stop = false;
+  while (!IsFinished ())
+    {
+      Time nextTime = Next ();
+
+      if ( nextTime <= GetSafeTime () )
+        {
+          ProcessOneEvent ();
+          HandleArrivingMessagesNonBlocking ();
+        }
+      else
+        {
+          // Block until packet or Null Message has been received.
+          HandleArrivingMessagesBlocking ();
+        }
+    }
+}
+
+void
+NullMessageSimulatorImpl::HandleArrivingMessagesNonBlocking (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  NullMessageMpiInterface::ReceiveMessagesNonBlocking ();
+
+  CalculateSafeTime ();
+
+  // Check for send completes
+  NullMessageMpiInterface::TestSendComplete ();
+}
+
+void
+NullMessageSimulatorImpl::HandleArrivingMessagesBlocking (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  NullMessageMpiInterface::ReceiveMessagesBlocking ();
+
+  CalculateSafeTime ();
+
+  // Check for send completes
+  NullMessageMpiInterface::TestSendComplete ();
+}
+
+void
+NullMessageSimulatorImpl::CalculateSafeTime ()
+{
+  NS_LOG_FUNCTION (this);
+
+  m_safeTime = RemoteChannelBundleManager::GetSafeTime ();
+  NS_ASSERT (m_safeTime >= m_currentTs);
+}
+
+Time
+NullMessageSimulatorImpl::GetSafeTime ()
+{
+  return m_safeTime;
+}
+
+
+uint32_t
+NullMessageSimulatorImpl::GetSystemId () const
+{
+  return m_myId;
+}
+
+void
+NullMessageSimulatorImpl::RunOneEvent (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  ProcessOneEvent ();
+}
+
+void
+NullMessageSimulatorImpl::Stop (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  m_stop = true;
+}
+
+void
+NullMessageSimulatorImpl::Stop (Time const &time)
+{
+  NS_LOG_FUNCTION (this << time.GetTimeStep ());
+
+  Simulator::Schedule (time, &Simulator::Stop);
+}
+
+//
+// Schedule an event for a _relative_ time in the future.
+//
+EventId
+NullMessageSimulatorImpl::Schedule (Time const &time, EventImpl *event)
+{
+  NS_LOG_FUNCTION (this << time.GetTimeStep () << event);
+
+  Time tAbsolute = time + TimeStep (m_currentTs);
+
+  NS_ASSERT (tAbsolute.IsPositive ());
+  NS_ASSERT (tAbsolute >= TimeStep (m_currentTs));
+  Scheduler::Event ev;
+  ev.impl = event;
+  ev.key.m_ts = static_cast<uint64_t> (tAbsolute.GetTimeStep ());
+  ev.key.m_context = GetContext ();
+  ev.key.m_uid = m_uid;
+  m_uid++;
+  m_unscheduledEvents++;
+  m_events->Insert (ev);
+  return EventId (event, ev.key.m_ts, ev.key.m_context, ev.key.m_uid);
+}
+
+void
+NullMessageSimulatorImpl::ScheduleWithContext (uint32_t context, Time const &time, EventImpl *event)
+{
+  NS_LOG_FUNCTION (this << context << time.GetTimeStep () << m_currentTs << event);
+
+  Time tAbsolute(m_currentTs + time.GetTimeStep ());
+
+  NS_ASSERT (tAbsolute.IsPositive ());
+  NS_ASSERT (tAbsolute >= TimeStep (m_currentTs));
+
+  Scheduler::Event ev;
+  ev.impl = event;
+  ev.key.m_ts = tAbsolute.GetTimeStep ();
+  ev.key.m_context = context;
+  ev.key.m_uid = m_uid;
+  m_uid++;
+  m_unscheduledEvents++;
+  m_events->Insert (ev);
+}
+
+EventId
+NullMessageSimulatorImpl::ScheduleNow (EventImpl *event)
+{
+  NS_LOG_FUNCTION (this << event);
+
+  Scheduler::Event ev;
+  ev.impl = event;
+  ev.key.m_ts = m_currentTs;
+  ev.key.m_context = GetContext ();
+  ev.key.m_uid = m_uid;
+  m_uid++;
+  m_unscheduledEvents++;
+  m_events->Insert (ev);
+  return EventId (event, ev.key.m_ts, ev.key.m_context, ev.key.m_uid);
+}
+
+EventId
+NullMessageSimulatorImpl::ScheduleDestroy (EventImpl *event)
+{
+  NS_LOG_FUNCTION (this << event);
+
+  EventId id (Ptr<EventImpl> (event, false), m_currentTs, 0xffffffff, 2);
+  m_destroyEvents.push_back (id);
+  m_uid++;
+  return id;
+}
+
+Time
+NullMessageSimulatorImpl::Now (void) const
+{
+  return TimeStep (m_currentTs);
+}
+
+Time
+NullMessageSimulatorImpl::GetDelayLeft (const EventId &id) const
+{
+  if (IsExpired (id))
+    {
+      return TimeStep (0);
+    }
+  else
+    {
+      return TimeStep (id.GetTs () - m_currentTs);
+    }
+}
+
+void
+NullMessageSimulatorImpl::Remove (const EventId &id)
+{
+  if (id.GetUid () == 2)
+    {
+      // destroy events.
+      for (DestroyEvents::iterator i = m_destroyEvents.begin (); i != m_destroyEvents.end (); i++)
+        {
+          if (*i == id)
+            {
+              m_destroyEvents.erase (i);
+              break;
+            }
+        }
+      return;
+    }
+  if (IsExpired (id))
+    {
+      return;
+    }
+  Scheduler::Event event;
+  event.impl = id.PeekEventImpl ();
+  event.key.m_ts = id.GetTs ();
+  event.key.m_context = id.GetContext ();
+  event.key.m_uid = id.GetUid ();
+  m_events->Remove (event);
+  event.impl->Cancel ();
+  // whenever we remove an event from the event list, we have to unref it.
+  event.impl->Unref ();
+
+  m_unscheduledEvents--;
+}
+
+void
+NullMessageSimulatorImpl::Cancel (const EventId &id)
+{
+  if (!IsExpired (id))
+    {
+      id.PeekEventImpl ()->Cancel ();
+    }
+}
+
+bool
+NullMessageSimulatorImpl::IsExpired (const EventId &ev) const
+{
+  if (ev.GetUid () == 2)
+    {
+      if (ev.PeekEventImpl () == 0
+          || ev.PeekEventImpl ()->IsCancelled ())
+        {
+          return true;
+        }
+      // destroy events.
+      for (DestroyEvents::const_iterator i = m_destroyEvents.begin (); i != m_destroyEvents.end (); i++)
+        {
+          if (*i == ev)
+            {
+              return false;
+            }
+        }
+      return true;
+    }
+  if (ev.PeekEventImpl () == 0
+      || ev.GetTs () < m_currentTs
+      || (ev.GetTs () == m_currentTs
+          && ev.GetUid () <= m_currentUid)
+      || ev.PeekEventImpl ()->IsCancelled ())
+    {
+      return true;
+    }
+  else
+    {
+      return false;
+    }
+}
+
+Time
+NullMessageSimulatorImpl::GetMaximumSimulationTime (void) const
+{
+  // XXX: I am fairly certain other compilers use other non-standard
+  // post-fixes to indicate 64 bit constants.
+  return TimeStep (0x7fffffffffffffffLL);
+}
+
+uint32_t
+NullMessageSimulatorImpl::GetContext (void) const
+{
+  return m_currentContext;
+}
+
+Time NullMessageSimulatorImpl::CalculateGuaranteeTime (uint32_t nodeSysId)
+{
+  Ptr<RemoteChannelBundle> bundle = RemoteChannelBundleManager::Find (nodeSysId);
+  NS_ASSERT (bundle);
+
+  return Min (NullMessageSimulatorImpl::GetInstance ()->Next (), GetSafeTime ()) + bundle->GetDelay ();
+}
+
+void NullMessageSimulatorImpl::NullMessageEventHandler(RemoteChannelBundle* bundle)
+{
+  NS_LOG_FUNCTION (this << bundle);
+
+  Time time = Min (Next (), GetSafeTime ()) + bundle->GetDelay ();
+  NullMessageMpiInterface::SendNullMessage (time, bundle);
+
+  ScheduleNullMessageEvent (bundle);
+}
+
+
+NullMessageSimulatorImpl*
+NullMessageSimulatorImpl::GetInstance (void)
+{
+  NS_ASSERT (g_instance != 0);
+  return g_instance;
+}
+} // namespace ns3
+
diff -Naur ns-3.18.1/src/mpi/model/null-message-simulator-impl.h ns-3.19/src/mpi/model/null-message-simulator-impl.h
--- ns-3.18.1/src/mpi/model/null-message-simulator-impl.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/mpi/model/null-message-simulator-impl.h	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,212 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ *  Copyright 2013. Lawrence Livermore National Security, LLC.
+ *
+ * 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: Steven Smith <smith84@llnl.gov>
+ *
+ */
+
+#ifndef NULLMESSAGE_SIMULATOR_IMPL_H
+#define NULLMESSAGE_SIMULATOR_IMPL_H
+
+#include <ns3/simulator-impl.h>
+#include <ns3/scheduler.h>
+#include <ns3/event-impl.h>
+#include <ns3/ptr.h>
+
+#include <list>
+#include <iostream>
+#include <fstream>
+
+namespace ns3 {
+
+class NullMessageEvent;
+class NullMessageMpiInterface;
+class RemoteChannelBundle;
+
+/**
+ * \ingroup mpi
+ *
+ * \brief Simulator implementation using MPI and a Null Message algorithm.
+ */
+class NullMessageSimulatorImpl : public SimulatorImpl
+{
+public:
+  static TypeId GetTypeId (void);
+
+  NullMessageSimulatorImpl ();
+
+  ~NullMessageSimulatorImpl ();
+
+  // virtual from SimulatorImpl
+  virtual void Destroy ();
+  virtual bool IsFinished (void) const;
+  virtual void Stop (void);
+  virtual void Stop (Time const &time);
+  virtual EventId Schedule (Time const &time, EventImpl *event);
+  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 Run (void);
+  virtual void RunOneEvent (void);
+  virtual Time Now (void) const;
+  virtual Time GetDelayLeft (const EventId &id) const;
+  virtual Time GetMaximumSimulationTime (void) const;
+  virtual void SetScheduler (ObjectFactory schedulerFactory);
+  virtual uint32_t GetSystemId (void) const;
+  virtual uint32_t GetContext (void) const;
+
+  /**
+   * \return singleton instance
+   *
+   * Singleton accessor.
+   */
+  static NullMessageSimulatorImpl * GetInstance (void);
+
+private:
+  friend class NullMessageEvent;
+  friend class NullMessageMpiInterface;
+  friend class RemoteChannelBundleManager;
+
+  /**
+   * Non blocking receive of pending messages.  
+   */
+  void HandleArrivingMessagesNonBlocking (void);
+
+  /**
+   * Blocking receive of arriving messages.
+   */
+  void HandleArrivingMessagesBlocking (void);
+
+  virtual void DoDispose (void);
+
+  /**
+   * Calculate the look ahead allowable for this MPI task.   Basically
+   * the minimum latency on links to neighbor MPI tasks.
+   */
+  void CalculateLookAhead (void);
+
+  /**
+   * Process the next event on the queue.
+   */
+  void ProcessOneEvent (void);
+
+  /**
+   * \return next local event time.
+   */
+  Time Next (void) const;
+
+  /**
+   * Calculate the SafeTime. Should be called after message receives.
+   */
+  void CalculateSafeTime (void);
+
+  /**
+   * Get the current SafeTime; the maximum time that events can
+   * be processed based on information received from neighboring
+   * MPI tasks.
+   */
+  Time GetSafeTime (void);
+
+  /**
+   * \param bundle Bundle to schedule Null Message event for
+   *
+   * Schedule Null Message event for the specified RemoteChannelBundle.
+   */
+  void ScheduleNullMessageEvent (Ptr<RemoteChannelBundle> bundle);
+
+  /**
+   * \param bundle Bundle to reschedule Null Message event for
+   *
+   * Reschedule Null Message event for the specified
+   * RemoteChannelBundel.  Existing event will be canceled.
+   */
+  void RescheduleNullMessageEvent (Ptr<RemoteChannelBundle> bundle);
+
+  /**
+   * \param nodeSysId SystemID to reschedule null event for
+   *
+   * Reschedule Null Message event for the RemoteChannelBundel to the
+   * task nodeSysId.  Existing event will be canceled.
+   */
+  void RescheduleNullMessageEvent (uint32_t nodeSysId);
+
+  /**
+   * \param systemId SystemID to compute guarentee time for
+   *
+   * \return Guarentee time
+   *
+   * Calculate the guarantee time for incoming RemoteChannelBundel
+   * from task nodeSysId.  No message should arrive from task
+   * nodeSysId with a receive time less than the guarantee time.
+   */
+  Time CalculateGuaranteeTime (uint32_t systemId);
+
+  /**
+   * \param bundle remote channel bundle to schedule an event for.
+   *
+   * Null message event handler.   Scheduled to send a null message
+   * for the specified bundle at regular intervals.   Will canceled
+   * and rescheduled when packets are sent.
+   */
+  void NullMessageEventHandler(RemoteChannelBundle* bundle);
+
+  typedef std::list<EventId> DestroyEvents;
+
+  DestroyEvents m_destroyEvents;
+  bool m_stop;
+  Ptr<Scheduler> m_events;
+  uint32_t m_uid;
+  uint32_t m_currentUid;
+  uint64_t m_currentTs;
+  uint32_t m_currentContext;
+  // number of events that have been inserted but not yet scheduled,
+  // not counting the "destroy" events; this is used for validation
+  int m_unscheduledEvents;
+
+  uint32_t     m_myId;        // MPI Rank
+  uint32_t     m_systemCount; // MPI Size
+
+  /*
+   * The time for which it is safe for this task to execute events
+   * without danger of out-of-order events.
+   */
+  Time m_safeTime;
+
+  /*
+   * Null Message performance tuning parameter.  Controls when Null
+   * messages are sent.  When value is 1 the minimum number of Null
+   * messages are sent conserving bandwidth.  The delay in arrival of
+   * lookahead information is the greatest resulting in maximum
+   * unnecessary blocking of the receiver.  When the value is near 0
+   * Null Messages are sent with high frequency, costing more
+   * bandwidth and Null Message processing time, but there is minimum
+   * unnecessary block of the receiver.
+   */
+  double m_schedulerTune;
+
+  /*
+   * Singleton instance.
+   */
+  static NullMessageSimulatorImpl* g_instance;
+};
+
+} // namespace ns3
+
+#endif /* NULLMESSAGE_SIMULATOR_IMPL_H */
diff -Naur ns-3.18.1/src/mpi/model/parallel-communication-interface.h ns-3.19/src/mpi/model/parallel-communication-interface.h
--- ns-3.18.1/src/mpi/model/parallel-communication-interface.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/mpi/model/parallel-communication-interface.h	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,99 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ *  Copyright 2013. Lawrence Livermore National Security, LLC.
+ *
+ * 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: Steven Smith <smith84@llnl.gov>
+ *
+ */
+
+#ifndef NS3_PARALLEL_COMMUNICATION_INTERFACE_H
+#define NS3_PARALLEL_COMMUNICATION_INTERFACE_H
+
+#include <stdint.h>
+#include <list>
+
+#include <ns3/object.h>
+#include <ns3/nstime.h>
+#include <ns3/buffer.h>
+#include <ns3/packet.h>
+
+#if defined(NS3_MPI)
+#include "mpi.h"
+#endif
+
+namespace ns3 {
+
+/**
+ * \ingroup mpi
+ *
+ * \brief Pure virtual base class for the interface between ns-3 and
+ * the parallel communication layer being used.
+ *
+ * Each type of parallel communication layer is required to implement
+ * this interface.  This interface is called through the
+ * MpiInterface.
+ */
+  class ParallelCommunicationInterface
+{
+public:
+  /**
+    * Destructor
+    */
+  virtual ~ParallelCommunicationInterface() {}
+  /**
+   * Deletes storage used by the parallel environment.
+   */
+  virtual void Destroy () = 0;
+  /**
+   * \return system identification
+   */
+  virtual uint32_t GetSystemId () = 0;
+  /**
+   * \return number of parallel tasks
+   */
+  virtual uint32_t GetSize () = 0;
+  /**
+   * \return true if parallel communication is enabled
+   */
+  virtual bool IsEnabled () = 0;
+  /**
+   * \param pargc number of command line arguments
+   * \param pargv command line arguments
+   *
+   * Sets up parallel communication interface
+   */
+  virtual void Enable (int* pargc, char*** pargv) = 0;
+  /**
+   * Terminates the parallel environment.
+   * This function must be called after Destroy ()
+   */
+  virtual void Disable () = 0;
+  /**
+   * \param p packet to send
+   * \param rxTime received time at destination node
+   * \param node destination node
+   * \param dev destination device
+   *
+   * Serialize and send a packet to the specified node and net device
+   */
+  virtual void SendPacket (Ptr<Packet> p, const Time &rxTime, uint32_t node, uint32_t dev) = 0;
+
+private:
+};
+
+} // namespace ns3
+
+#endif /* NS3_PARALLEL_COMMUNICATION_INTERFACE_H */
diff -Naur ns-3.18.1/src/mpi/model/remote-channel-bundle.cc ns-3.19/src/mpi/model/remote-channel-bundle.cc
--- ns-3.18.1/src/mpi/model/remote-channel-bundle.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/mpi/model/remote-channel-bundle.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,130 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ *  Copyright 2013. Lawrence Livermore National Security, LLC.
+ *
+ * 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: Steven Smith <smith84@llnl.gov>
+ *
+ */
+
+#include "remote-channel-bundle.h"
+
+#include "null-message-mpi-interface.h"
+#include "null-message-simulator-impl.h"
+
+#include <ns3/simulator.h>
+
+namespace ns3 {
+
+#define NS_TIME_INFINITY ns3::Time (0x7fffffffffffffffLL)
+
+TypeId RemoteChannelBundle::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::RemoteChannelBundle")
+    .SetParent<Object> ()
+    .AddConstructor <RemoteChannelBundle> ();
+  return tid;
+}
+
+RemoteChannelBundle::RemoteChannelBundle ()
+  : m_remoteSystemId (-1),
+    m_guaranteeTime (0),
+    m_delay (NS_TIME_INFINITY)
+{
+}
+
+RemoteChannelBundle::RemoteChannelBundle (const uint32_t remoteSystemId)
+  : m_remoteSystemId (remoteSystemId),
+    m_guaranteeTime (0),
+    m_delay (NS_TIME_INFINITY)
+{
+}
+
+void
+RemoteChannelBundle::AddChannel (Ptr<Channel> channel, Time delay)
+{
+  m_channels[channel->GetId ()] = channel;
+  m_delay = ns3::Min (m_delay, delay);
+}
+
+uint32_t
+RemoteChannelBundle::GetSystemId () const
+{
+  return m_remoteSystemId;
+}
+
+Time
+RemoteChannelBundle::GetGuaranteeTime (void) const
+{
+  return m_guaranteeTime;
+}
+
+void
+RemoteChannelBundle::SetGuaranteeTime (Time time)
+{
+  NS_ASSERT (time >= Simulator::Now ());
+
+  m_guaranteeTime = time;
+}
+
+Time
+RemoteChannelBundle::GetDelay (void) const
+{
+  return m_delay;
+}
+
+void
+RemoteChannelBundle::SetEventId (EventId id)
+{
+  m_nullEventId = id;
+}
+
+EventId
+RemoteChannelBundle::GetEventId (void) const
+{
+  return m_nullEventId;
+}
+
+int
+RemoteChannelBundle::GetSize (void) const
+{
+  return m_channels.size ();
+}
+
+void 
+RemoteChannelBundle::Send(Time time)
+{
+  NullMessageMpiInterface::SendNullMessage (time, this);  
+}
+
+std::ostream& operator<< (std::ostream& out, ns3::RemoteChannelBundle& bundle )
+{
+  out << "RemoteChannelBundle Rank = " << bundle.m_remoteSystemId
+      << ", GuaranteeTime = "  << bundle.m_guaranteeTime
+      << ", Delay = " << bundle.m_delay << std::endl;
+  
+  for (std::map < uint32_t, Ptr < Channel > > ::const_iterator pair = bundle.m_channels.begin ();
+       pair != bundle.m_channels.end ();
+       ++pair)
+    {
+      out << "\t" << (*pair).second << std::endl;
+    }
+  
+  return out;
+}
+
+
+} // namespace ns3
+
diff -Naur ns-3.18.1/src/mpi/model/remote-channel-bundle.h ns-3.19/src/mpi/model/remote-channel-bundle.h
--- ns-3.18.1/src/mpi/model/remote-channel-bundle.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/mpi/model/remote-channel-bundle.h	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,151 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ *  Copyright 2013. Lawrence Livermore National Security, LLC.
+ *
+ * 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: Steven Smith <smith84@llnl.gov>
+ *
+ */
+
+#ifndef NS3_REMOTE_CHANNEL_BUNDLE
+#define NS3_REMOTE_CHANNEL_BUNDLE
+
+#include "null-message-simulator-impl.h"
+
+#include <ns3/channel.h>
+#include <ns3/ptr.h>
+#include <ns3/pointer.h>
+
+#include <map>
+
+namespace ns3 {
+
+/**
+ * \ingroup mpi
+ * 
+ * \brief Collection of NS3 channels between local and remote nodes.
+ * 
+ * An instance exists for each remote system that the local system is
+ * in communication with.  These are created and managed by the
+ * RemoteChannelBundleManager class.  Stores time information for each
+ * bundle.
+ */
+class RemoteChannelBundle : public Object
+{
+public:
+  static TypeId GetTypeId (void);
+
+  RemoteChannelBundle ();
+
+  RemoteChannelBundle (const uint32_t remoteSystemId);
+
+  ~RemoteChannelBundle ()
+  {
+  }
+
+  /**
+   * \param channel to add to the bundle
+   * \param delay time for the channel (usually the latency)
+   */
+  void AddChannel (Ptr<Channel> channel, Time delay);
+
+  /**
+   * \return SystemID for remote side of this bundle
+   */
+  uint32_t GetSystemId () const;
+
+  /**
+   * \return guarantee time
+   */
+  Time GetGuaranteeTime (void) const;
+
+  /**
+   * \param guarantee time
+   *
+   * Set the guarantee time for the bundle.  This should be called
+   * after a packet or Null Message received.
+   */
+  void SetGuaranteeTime (Time time);
+
+  /**
+   * \return the minimum delay along any channel in this bundle
+   */
+  Time GetDelay (void) const;
+
+  /**
+   * Set the event ID of the Null Message send event current scheduled
+   * for this channel.
+   */
+  void SetEventId (EventId id);
+
+  /**
+   * \return the event ID of the Null Message send event for this bundle
+   */
+  EventId GetEventId (void) const;
+
+  /**
+   * \return number of NS3 channels in this bundle
+   */
+  int GetSize (void) const;
+
+  /**
+   * \param time 
+   *
+   * Send Null Message to the remote task associated with this bundle.
+   * Message will be delivered at current simulation time + the time
+   * passed in.
+   */
+  void Send(Time time);
+
+  /**
+   * Output for debugging purposes.
+   */
+  friend std::ostream& operator<< (std::ostream& out, ns3::RemoteChannelBundle& bundle );
+
+private:
+  /*
+   * Remote rank.
+   */
+  uint32_t m_remoteSystemId;
+
+  /*
+   * NS3 Channels that are connected from nodes in this MPI task to remote_rank.
+   *
+   * Would be more efficient to use unordered_map when C++11 is adopted by NS3.
+   */
+  std::map < uint32_t, Ptr < Channel > > m_channels;
+
+  /*
+   * Guarentee time for the incoming Channels from MPI task remote_rank.
+   * No PacketMessage will ever arrive on any incoming channel in this bundle with a
+   * ReceiveTime less than this.  Intialized to StartTime.
+   */
+  Time m_guaranteeTime;
+
+  /*
+   * Delay for this Channel bundle.   min link delay over all incoming channels;
+   */
+  Time m_delay;
+
+  /*
+   * Event scheduled to send Null Message for this bundle.
+   */
+  EventId m_nullEventId;
+
+};
+
+}
+
+#endif
diff -Naur ns-3.18.1/src/mpi/model/remote-channel-bundle-manager.cc ns-3.19/src/mpi/model/remote-channel-bundle-manager.cc
--- ns-3.18.1/src/mpi/model/remote-channel-bundle-manager.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/mpi/model/remote-channel-bundle-manager.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,112 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ *  Copyright 2013. Lawrence Livermore National Security, LLC.
+ *
+ * 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: Steven Smith <smith84@llnl.gov>
+ *
+ */
+
+#include "remote-channel-bundle-manager.h"
+
+#include "remote-channel-bundle.h"
+#include "null-message-simulator-impl.h"
+
+#include "ns3/simulator.h"
+
+namespace ns3 {
+
+bool ns3::RemoteChannelBundleManager::g_initialized = false;
+ns3::RemoteChannelBundleManager::RemoteChannelMap ns3::RemoteChannelBundleManager::g_remoteChannelBundles;
+
+Ptr<RemoteChannelBundle>
+RemoteChannelBundleManager::Find (uint32_t systemId)
+{
+  ns3::RemoteChannelBundleManager::RemoteChannelMap::iterator kv = g_remoteChannelBundles.find (systemId);
+
+  if ( kv == g_remoteChannelBundles.end ())
+    {
+      return 0;
+    }
+  else
+    {
+      return kv->second;
+    }
+}
+
+Ptr<RemoteChannelBundle>
+RemoteChannelBundleManager::Add (uint32_t systemId)
+{
+  NS_ASSERT (!g_initialized);
+  NS_ASSERT (g_remoteChannelBundles.find (systemId) == g_remoteChannelBundles.end ());
+
+  Ptr<RemoteChannelBundle> remoteChannelBundle = Create<RemoteChannelBundle> (systemId);
+
+  g_remoteChannelBundles[systemId] = remoteChannelBundle;
+
+  return remoteChannelBundle;
+}
+
+uint32_t 
+RemoteChannelBundleManager::Size (void) 
+{
+  return g_remoteChannelBundles.size();
+}
+
+void
+RemoteChannelBundleManager::InitializeNullMessageEvents (void)
+{
+  NS_ASSERT (!g_initialized);
+
+  for ( RemoteChannelMap::const_iterator iter = g_remoteChannelBundles.begin ();
+        iter != g_remoteChannelBundles.end ();
+        ++iter )
+    {
+      Ptr<RemoteChannelBundle> bundle = iter->second;
+      bundle->Send (bundle->GetDelay ());
+
+      NullMessageSimulatorImpl::GetInstance ()->ScheduleNullMessageEvent (bundle);
+    }
+
+  g_initialized = true;
+}
+
+Time
+RemoteChannelBundleManager::GetSafeTime (void)
+{
+  NS_ASSERT (g_initialized);
+
+  Time safeTime = Simulator::GetMaximumSimulationTime ();
+
+  for (RemoteChannelMap::const_iterator kv = g_remoteChannelBundles.begin ();
+       kv != g_remoteChannelBundles.end ();
+       ++kv)
+    {
+      safeTime = Min (safeTime, kv->second->GetGuaranteeTime ());
+    }
+
+  return safeTime;
+}
+
+void
+RemoteChannelBundleManager::Destroy (void)
+{
+  NS_ASSERT (g_initialized);
+
+  g_remoteChannelBundles.clear();
+  g_initialized = false;
+}
+
+} // namespace ns3
diff -Naur ns-3.18.1/src/mpi/model/remote-channel-bundle-manager.h ns-3.19/src/mpi/model/remote-channel-bundle-manager.h
--- ns-3.18.1/src/mpi/model/remote-channel-bundle-manager.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/mpi/model/remote-channel-bundle-manager.h	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,107 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ *  Copyright 2013. Lawrence Livermore National Security, LLC.
+ *
+ * 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: Steven Smith <smith84@llnl.gov>
+ *
+ */
+
+#ifndef NS3_REMOTE_CHANNEL_BUNDLE_MANAGER
+#define NS3_REMOTE_CHANNEL_BUNDLE_MANAGER
+
+#include <ns3/nstime.h>
+#include <ns3/ptr.h>
+#include <map>
+
+namespace ns3 {
+
+class RemoteChannelBundle;
+
+/*
+ * \ingroup mpi
+ * 
+ * \brief Singleton for managing the RemoteChannelBundles for each process.
+ *
+ * Manages collective tasks associated with the bundle collection.
+ */
+class RemoteChannelBundleManager
+{
+
+public:
+  /**
+   * \return remote channel bundle for specified SystemId.
+   */
+  static Ptr<RemoteChannelBundle> Find (uint32_t systemId);
+
+  /**
+   * Add RemoteChannelBundle from this task to MPI task on other side of the link.
+   * Can not be invoked after InitializeNullMessageEvents has been invoked.
+   */
+  static Ptr<RemoteChannelBundle> Add (uint32_t systemId);
+
+  /**
+   * \return number of remote channel bundles
+   * 
+   */
+  static uint32_t Size (void);
+
+  /**
+   * Setup initial Null Message events for every RemoteChannelBundle.
+   * All RemoteChannelBundles should be added before this method is invoked.
+   */
+  static void InitializeNullMessageEvents (void);
+
+  /**
+   * \return safe time across all remote channels.
+   */
+  static Time GetSafeTime (void);
+
+  /**
+   * Destroy the singleton.
+   */
+  static void Destroy (void);
+
+private:
+
+  /**
+   * Private ctor to prevent creation outside of singleton pattern.
+   */
+  RemoteChannelBundleManager ()
+  {
+  }
+
+  ~RemoteChannelBundleManager ()
+  {
+  }
+
+  /*
+   * Container for all remote channel bundles for this task.
+   *
+   * Would be more efficient to use unordered_map when C++11 is adopted for NS3.
+   */
+  typedef std::map<uint32_t, Ptr<RemoteChannelBundle> > RemoteChannelMap;
+  static RemoteChannelMap g_remoteChannelBundles;
+
+  /*
+   * Protect manager class from being initialized twice or incorrect
+   * ordering of method calls.
+   */
+  static bool g_initialized;
+};
+
+} // namespace ns3
+
+#endif
diff -Naur ns-3.18.1/src/mpi/wscript ns-3.19/src/mpi/wscript
--- ns-3.18.1/src/mpi/wscript	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/mpi/wscript	2013-12-20 09:44:50.000000000 -0800
@@ -36,16 +36,21 @@
     sim = bld.create_ns3_module('mpi', ['core', 'network'])
     sim.source = [
         'model/distributed-simulator-impl.cc',
-        'model/mpi-interface.cc',
+        'model/granted-time-window-mpi-interface.cc',
         'model/mpi-receiver.cc',
+        'model/null-message-simulator-impl.cc',
+        'model/null-message-mpi-interface.cc',
+        'model/remote-channel-bundle.cc',
+        'model/remote-channel-bundle-manager.cc',
+        'model/mpi-interface.cc', 
         ]
 
     headers = bld(features='ns3header')
     headers.module = 'mpi'
     headers.source = [
-        'model/distributed-simulator-impl.h',
-        'model/mpi-interface.h',
         'model/mpi-receiver.h',
+        'model/mpi-interface.h',
+        'model/parallel-communication-interface.h', 
         ]
 
     if env['ENABLE_MPI']:
diff -Naur ns-3.18.1/src/netanim/doc/animation.rst ns-3.19/src/netanim/doc/animation.rst
--- ns-3.18.1/src/netanim/doc/animation.rst	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/netanim/doc/animation.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. toctree::
 
 Animation
 ---------
@@ -62,9 +63,11 @@
 If NetAnim is not already available in the |ns3| package you downloaded, you can do the following:
 
 Please ensure that you have installed mercurial.
-The latest version of NetAnim can be downloaded using mercurial with the following command::
+The latest version of NetAnim can be downloaded using mercurial with the following command:
 
-  hg clone http://code.nsnam.org/netanim
+.. sourcecode:: bash
+
+  $ hg clone http://code.nsnam.org/netanim
 
 Building NetAnim
 ================
@@ -72,35 +75,41 @@
 ~~~~~~~~~~~~~
 Qt4 (4.7 and over) is required to build NetAnim. This can be obtained using the following ways:
 
-For Debian/Ubuntu Linux distributions::
+For Debian/Ubuntu Linux distributions:
+
+.. sourcecode:: bash
 
-  apt-get install qt4-dev-tools
+  $ apt-get install qt4-dev-tools
 
-For Red Hat/Fedora based distribution::
+For Red Hat/Fedora based distribution:
 
-  yum install qt4
-  yum install qt4-devel
+.. sourcecode:: bash
 
-For Mac/OSX::
+  $ yum install qt4
+  $ yum install qt4-devel
 
-  http://qt.nokia.com/downloads/
+For Mac/OSX, see http://qt.nokia.com/downloads/
 
 Build steps
 ~~~~~~~~~~~
 
-To build NetAnim use the following commands::
+To build NetAnim use the following commands:
+
+.. sourcecode:: bash
 
-  cd netanim
-  make clean
-  qmake NetAnim.pro  (For MAC Users: qmake -spec macx-g++ NetAnim.pro)
-  make
+  $ cd netanim
+  $ make clean
+  $ qmake NetAnim.pro  (For MAC Users: qmake -spec macx-g++ NetAnim.pro)
+  $ make
 
 
 Note: qmake could be "qmake-qt4" in some systems
 
-This should create an executable named "NetAnim" in the same directory::
+This should create an executable named "NetAnim" in the same directory:
 
- john@john-VirtualBox:~/netanim$ ls -l NetAnim
+.. sourcecode:: bash
+
+  $ ls -l NetAnim
  -rwxr-xr-x 1 john john 390395 2012-05-22 08:32 NetAnim
 
 Usage
@@ -117,10 +126,12 @@
 to construct a timestamped ASCII file in XML format.
 
 Examples are found under src/netanim/examples
-Example::
+Example:
 
-  ./waf -d debug configure --enable-examples
-  ./waf --run "dumbbell-animation"
+.. sourcecode:: bash
+
+  $ ./waf -d debug configure --enable-examples
+  $ ./waf --run "dumbbell-animation"
 
 The above will create an XML file dumbbell-animation.xml
 
@@ -131,19 +142,22 @@
 2. Include the header [#include "ns3/netanim-module.h"] in your test program
 3. Add the statement
 
-::
+.. sourcecode:: cpp
 
-  AnimationInterface anim ("animation.xml"); 
-  where "animation.xml" is any arbitrary filename
+  AnimationInterface anim ("animation.xml");  // where "animation.xml" is any arbitrary filename
 
 [for versions before ns-3.13 you also have to use the line "anim.SetXMLOutput() to set the XML mode and also use anim.StartAnimation();]
 
 
 Optional
 ########
+
+.. highlight:: cpp
+
 The following are optional but useful steps::
 
-  1.anim.SetMobilityPollInterval (Seconds (1));
+  // Step 1
+  anim.SetMobilityPollInterval (Seconds (1));
 
 AnimationInterface records the position of all nodes every 250 ms by default. The statement above sets 
 the periodic interval at which AnimationInterface records the position of all nodes. If the nodes are 
@@ -151,31 +165,35 @@
 
 ::
 
-  2. anim.SetConstantPosition (Ptr< Node > n, double x, double y);
+  // Step 2
+  anim.SetConstantPosition (Ptr< Node > n, double x, double y);
 
 AnimationInterface requires that the position of all nodes be set. In |ns3| this is done by setting an associated MobilityModel. "SetConstantPosition" is a quick way to set the x-y coordinates of a node which is stationary.
 
 ::
 
-  3. anim.SetStartTime (Seconds(150)); and anim.SetStopTime (Seconds(150));
+  // Step 3
+  anim.SetStartTime (Seconds(150)); and anim.SetStopTime (Seconds(150));
 
 AnimationInterface can generate large XML files. The above statements restricts the window between which AnimationInterface does tracing. Restricting the window serves to focus only on relevant portions of the simulation and creating manageably small XML files
 
 ::
 
-  4. AnimationInterface anim ("animation.xml", 50000);
+  // Step 4
+  AnimationInterface anim ("animation.xml", 50000);
 
 Using the above constructor ensures that each animation XML trace file has only 50000 packets. For example, if AnimationInterface captures 150000 packets, using the above constructor splits the capture into 3 files
 
-animation.xml - containing the packet range 1-50000
+* animation.xml - containing the packet range 1-50000
 
-animation.xml-1 - containing the packet range 50001-100000 
+* animation.xml-1 - containing the packet range 50001-100000 
 
-animation.xml-2 - containing the packet range 100001-150000 
+* animation.xml-2 - containing the packet range 100001-150000 
 
 ::
 
-  5. anim.EnablePacketMetadata (true);
+  // Step 5
+  anim.EnablePacketMetadata (true);
 
 With the above statement, AnimationInterface records the meta-data of each packet in the xml trace file. Metadata can be used by NetAnim to provide better statistics and filter, along with providing some brief information about the packet such as TCP sequence number or source & destination IP address during packet animation.
 
@@ -229,16 +247,20 @@
 
 XML tags
 ~~~~~~~~
+.. highlight:: xml
+
 Nodes are identified by their unique Node id. The XML begins with the "information" element describing the rest of the elements
 
-1. <anim> element
+<anim> Element
+##############
 
 This is the XML root element. All other elements fall within this element.
   Attributes are::
 
     lp = Logical Processor Id (Used for distributed simulations only)
 
-2. <topology> element
+<topology> Element
+##################
 
 This elements contains the Node and Link elements.It describes, the co-ordinates of the canvas used for animation.
    Attributes are::
@@ -250,9 +272,10 @@
 
 Example::
 
- <topology minX = "-6.42025" minY = "-6.48444" maxX = "186.187" maxY = "188.049">
+  <topology minX = "-6.42025" minY = "-6.48444" maxX = "186.187" maxY = "188.049">
 
-3. <node> element
+<node> Element
+##############
 
 This element describes each Node's Id and X,Y co-ordinate (position).
   Attributes are::
@@ -265,7 +288,8 @@
 
   <node id = "8" locX = "107.599" locY = "96.9366" />
 
-4. <link> element
+<link> Element
+##############
 
 This element describes wired links between two nodes.
  Attributes are::
@@ -277,7 +301,8 @@
 
   <link fromId="0" toId="1"/>
 
-5. <p> element
+<p> Element
+###########
 
 This element describes a packet over wired links being transmitted at some node and received at another. 
 
@@ -298,7 +323,8 @@
 A packet over wired-links from Node 1 was received at Node 0. The first bit of the packet was transmitted at  the 1st second, the last bit was transmitted at the 1.000067199th second of the simulation Node 0 received the first bit of the packet at the 1.002th second and the last bit of the packet at the 1.002067199th second of the simulation
 NOTE: A packet with fromId == toId is a dummy packet used internally by the AnimationInterface. Please ignore this packet
 
-7. <wp> element
+<wp> Element
+############
 
 This element describes a packet over wireless links being transmitted at some node and received at another. 
 
diff -Naur ns-3.18.1/src/netanim/examples/uan-animation.cc ns-3.19/src/netanim/examples/uan-animation.cc
--- ns-3.18.1/src/netanim/examples/uan-animation.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/netanim/examples/uan-animation.cc	2013-12-20 09:44:50.000000000 -0800
@@ -47,7 +47,8 @@
 
 using namespace ns3;
 
-NS_LOG_COMPONENT_DEFINE ("UanCwExample");
+NS_LOG_COMPONENT_DEFINE ("UanCwExample")
+  ;
 
 NetAnimExperiment::NetAnimExperiment () 
   : m_numNodes (15),
diff -Naur ns-3.18.1/src/netanim/examples/wireless-animation.cc ns-3.19/src/netanim/examples/wireless-animation.cc
--- ns-3.18.1/src/netanim/examples/wireless-animation.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/netanim/examples/wireless-animation.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,6 +26,8 @@
 #include "ns3/mobility-module.h"
 #include "ns3/internet-module.h"
 #include "ns3/netanim-module.h"
+#include "ns3/basic-energy-source.h"
+#include "ns3/simple-device-energy-model.h"
 
 
 
@@ -115,6 +117,17 @@
   AnimationInterface::SetConstantPosition (p2pNodes.Get (1), 10, 30); 
   AnimationInterface::SetConstantPosition (csmaNodes.Get (1), 10, 33); 
 
+  Ptr<BasicEnergySource> energySource = CreateObject<BasicEnergySource>();
+  Ptr<SimpleDeviceEnergyModel> energyModel = CreateObject<SimpleDeviceEnergyModel>();
+
+  energySource->SetInitialEnergy (300);
+  energyModel->SetEnergySource (energySource);
+  energySource->AppendDeviceEnergyModel (energyModel);
+  energyModel->SetCurrentA (20);
+
+  // aggregate energy source to node
+  wifiApNode.Get (0)->AggregateObject (energySource);
+
   // Install internet stack
 
   InternetStackHelper stack;
@@ -152,7 +165,7 @@
   Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
   Simulator::Stop (Seconds (15.0));
   AnimationInterface::SetNodeDescription (wifiApNode, "AP"); // Optional
-  AnimationInterface::SetNodeDescription (wifiStaNodes, "STA"); // Optional
+  AnimationInterface::SetNodeDescription (wifiStaNodes, "STA"); //b Optional
   AnimationInterface::SetNodeDescription (csmaNodes, "CSMA"); // Optional
   AnimationInterface::SetNodeColor (wifiApNode, 0, 255, 0); // Optional
   AnimationInterface::SetNodeColor (wifiStaNodes, 255, 0, 0); // Optional
@@ -162,7 +175,7 @@
   AnimationInterface anim ("wireless-animation.xml"); // Mandatory
 
   anim.EnablePacketMetadata (true); // Optional
-  anim.EnableIpv4RouteTracking ("routingtable-wireless.xml", Seconds(0), Seconds(5), Seconds(0.25)); //Optional
+  anim.EnableIpv4RouteTracking ("routingtable-wireless.xml", Seconds (0), Seconds (5), Seconds (0.25)); //Optional
   Simulator::Run ();
   Simulator::Destroy ();
   return 0;
diff -Naur ns-3.18.1/src/netanim/model/animation-interface.cc ns-3.19/src/netanim/model/animation-interface.cc
--- ns-3.18.1/src/netanim/model/animation-interface.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/netanim/model/animation-interface.cc	2013-12-20 09:44:50.000000000 -0800
@@ -15,6 +15,7 @@
  *
  * Author: George F. Riley<riley@ece.gatech.edu>
  * Modified by: John Abraham <john.abraham@gatech.edu>
+ * Contributions: Eugene Kalishenko <ydginster@gmail.com> (Open Source and Linux Laboratory http://dev.osll.ru/)
  */
 
 // Interface between ns3 and the network animator
@@ -39,7 +40,8 @@
 #include "ns3/uan-net-device.h"
 #include "ns3/uan-mac.h"
 #include "ns3/ipv4.h"
-#include "ns3/ipv4-routing-protocol.h" 
+#include "ns3/ipv4-routing-protocol.h"
+#include "ns3/energy-source-container.h"
 
 #include <cstdio>
 #include <unistd.h>
@@ -63,11 +65,11 @@
 
 
 AnimationInterface::AnimationInterface (const std::string fn, uint64_t maxPktsPerFile, bool usingXML)
-  : m_routingF (0), m_xml (usingXML), m_mobilityPollInterval (Seconds(0.25)), 
+  : m_routingF (0), m_xml (usingXML), m_mobilityPollInterval (Seconds (0.25)), 
     m_outputFileName (fn),
     m_outputFileSet (false), gAnimUid (0), m_randomPosition (true),
     m_writeCallback (0), m_started (false), 
-    m_enablePacketMetadata (false), m_startTime (Seconds(0)), m_stopTime (Seconds(3600 * 1000)),
+    m_enablePacketMetadata (false), m_startTime (Seconds (0)), m_stopTime (Seconds (3600 * 1000)),
     m_maxPktsPerFile (maxPktsPerFile), m_originalFileName (fn),
     m_routingStopTime (Seconds (0)), m_routingFileName (""),
     m_routingPollInterval (Seconds (5))
@@ -116,7 +118,7 @@
   std::stringstream stream;
   Ptr<OutputStreamWrapper> routingstream = Create<OutputStreamWrapper> (&stream);
   ipv4->GetRoutingProtocol ()->PrintRoutingTable (routingstream);
-  return stream.str();
+  return stream.str ();
 
 }
 
@@ -315,7 +317,7 @@
 
 std::string AnimationInterface::GetNetAnimVersion ()
 {
-  return "netanim-3.103";
+  return "netanim-3.104";
 }
 
 void AnimationInterface::SetStartTime (Time t)
@@ -468,9 +470,9 @@
 Vector AnimationInterface::GetPosition (Ptr <Node> n)
 {
   #ifdef NS_LOG
-  if (m_nodeLocation.find (n->GetId()) == m_nodeLocation.end ())
+  if (m_nodeLocation.find (n->GetId ()) == m_nodeLocation.end ())
     {
-      NS_FATAL_ERROR ("Node:" <<n->GetId() << " not found in Location table");
+      NS_FATAL_ERROR ("Node:" <<n->GetId () << " not found in Location table");
     }  
   #endif
   return m_nodeLocation[n->GetId ()];
@@ -586,7 +588,7 @@
 
 std::string AnimationInterface::GetMacAddress (Ptr <NetDevice> nd)
 {
-  Address nodeAddr = nd->GetAddress();
+  Address nodeAddr = nd->GetAddress ();
   std::ostringstream oss;
   oss << nodeAddr;
   return oss.str ().substr (6); // Skip the first 6 chars to get the Mac
@@ -796,7 +798,7 @@
       uint32_t nDevices = n->GetNDevices ();
       for (uint32_t devIndex = 0; devIndex < nDevices; ++devIndex)
         {
-          Ptr <NetDevice> nd = n->GetDevice(devIndex);
+          Ptr <NetDevice> nd = n->GetDevice (devIndex);
           if (!nd)
             continue;
           Ptr<LteUeNetDevice> lteUeNetDevice = DynamicCast<LteUeNetDevice> (nd);
@@ -844,6 +846,8 @@
                    MakeCallback (&AnimationInterface::UanPhyGenTxTrace, this));
   Config::Connect ("/NodeList/*/DeviceList/*/$ns3::UanNetDevice/Phy/PhyRxBegin",
                    MakeCallback (&AnimationInterface::UanPhyGenRxTrace, this));
+  Config::Connect ("/NodeList/*/$ns3::BasicEnergySource/RemainingEnergy",
+                   MakeCallback (&AnimationInterface::RemainingEnergyTrace, this));
 
   ConnectLte ();
 
@@ -1016,6 +1020,19 @@
 }
 
 
+Ptr <Node>
+AnimationInterface::GetNodeFromContext (const std::string& context) const
+{
+  // Use "NodeList/*/ as reference
+  // where element [1] is the Node Id
+
+  std::vector <std::string> elements = GetElementsFromContext (context);
+  Ptr <Node> n = NodeList::GetNode (atoi (elements.at (1).c_str ()));
+  NS_ASSERT (n);
+
+  return n;
+}
+
 Ptr <NetDevice>
 AnimationInterface::GetNetDeviceFromContext (std::string context)
 {
@@ -1024,9 +1041,9 @@
   // element [2] is the NetDevice Id
 
   std::vector <std::string> elements = GetElementsFromContext (context);
-  Ptr <Node> n = NodeList::GetNode (atoi (elements[1].c_str ()));
-  NS_ASSERT (n);
-  return n->GetDevice (atoi (elements[3].c_str ()));
+  Ptr <Node> n = GetNodeFromContext (context);
+
+  return n->GetDevice (atoi (elements.at (3).c_str ()));
 }
 
 void AnimationInterface::AddPendingUanPacket (uint64_t AnimUid, AnimPacketInfo &pktinfo)
@@ -1123,6 +1140,27 @@
 
 }
 
+void AnimationInterface::RemainingEnergyTrace (std::string context, double previousEnergy, double currentEnergy)
+{
+  if (!m_started || !IsInTimeWindow ())
+    return;
+
+  const Ptr <const Node> node = GetNodeFromContext (context);
+  const uint32_t nodeId = node->GetId ();
+
+  NS_LOG_INFO ("Remaining energy on one of sources on node " << nodeId << ": " << currentEnergy);
+
+  const Ptr<EnergySource> energySource = node->GetObject<EnergySource> ();
+
+  NS_ASSERT (energySource);
+  // Don't call GetEnergyFraction () because of recursion
+  const double energyFraction = currentEnergy / energySource->GetInitialEnergy ();
+
+  NS_LOG_INFO ("Total energy fraction on node " << nodeId << ": " << energyFraction);
+
+  m_nodeEnergyFraction[nodeId] = energyFraction;
+  WriteNodeUpdate (nodeId);
+}
 
 void AnimationInterface::WifiPhyTxBeginTrace (std::string context,
                                           Ptr<const Packet> p)
@@ -1142,7 +1180,7 @@
   AnimPacketInfo pktinfo (ndev, Simulator::Now (), Simulator::Now (), UpdatePosition (n));
   AddPendingWifiPacket (gAnimUid, pktinfo);
   Ptr<WifiNetDevice> netDevice = DynamicCast<WifiNetDevice> (ndev);
-  Mac48Address nodeAddr = netDevice->GetMac()->GetAddress();
+  Mac48Address nodeAddr = netDevice->GetMac ()->GetAddress ();
   std::ostringstream oss; 
   oss << nodeAddr;
   m_macToNodeIdMap[oss.str ()] = n->GetId ();
@@ -1185,7 +1223,7 @@
       NS_LOG_WARN ("WifiPhyRxBeginTrace: unknown Uid");
       std::ostringstream oss;
       WifiMacHeader hdr;
-      if(!p->PeekHeader (hdr))
+      if (!p->PeekHeader (hdr))
       { 
         NS_LOG_WARN ("WifiMacHeader not present");
         return;
@@ -1589,6 +1627,14 @@
   return m_currentPktCount;
 }
 
+double AnimationInterface::GetNodeEnergyFraction (Ptr <const Node> node) const
+{
+  const EnergyFractionMap::const_iterator fractionIter = m_nodeEnergyFraction.find (node->GetId ());
+
+  NS_ASSERT (fractionIter != m_nodeEnergyFraction.end ());
+  return fractionIter->second;
+}
+
 int64_t
 AnimationInterface::AssignStreams (int64_t stream)
 {
@@ -1637,6 +1683,7 @@
     * g = Green component\n\
     * b = Blue component\n\
     * visible = Node visibility\n\
+    * rc = Residual energy (between 0 and 1)\n\
     p\n\
     * fId = From Node Id\n\
     * fbTx = First bit transmit time\n\
@@ -1736,10 +1783,7 @@
 {
   NS_ASSERT (NodeList::GetNode (nodeId));
   NS_LOG_INFO ("Setting node visibility for Node Id:" << nodeId); 
-  std::ostringstream oss;
-  oss << GetXMLOpenClose_nodeupdate (nodeId, show);
-  WriteN (oss.str (), m_f);
-
+  WriteNodeUpdate (nodeId);
 }
 
 void AnimationInterface::ShowNode (Ptr <Node> n, bool show)
@@ -1747,6 +1791,13 @@
   ShowNode (n, show);
 }
 
+void AnimationInterface::WriteNodeUpdate (uint32_t nodeId)
+{
+  std::ostringstream oss;
+  oss << GetXMLOpenClose_nodeupdate (nodeId);
+  WriteN (oss.str (), m_f);
+}
+
 void AnimationInterface::UpdateNodeColor (Ptr <Node> n, uint8_t r, uint8_t g, uint8_t b)
 {
   UpdateNodeColor (n->GetId (), r, g, b);
@@ -1758,9 +1809,7 @@
   NS_LOG_INFO ("Setting node color for Node Id:" << nodeId); 
   struct Rgb rgb = {r, g, b};
   nodeColors[nodeId] = rgb;
-  std::ostringstream oss;
-  oss << GetXMLOpenClose_nodeupdate (nodeId);
-  WriteN (oss.str (), m_f);
+  WriteNodeUpdate (nodeId);
 }
 
 
@@ -1808,7 +1857,7 @@
   /* DEBUG */
   /*
   for (std::map <P2pLinkNodeIdPair, LinkProperties>::const_iterator i = linkProperties.begin ();
-	i != linkProperties.end(); ++i)
+	i != linkProperties.end (); ++i)
    {
     P2pLinkNodeIdPair ppair = i->first;
     LinkProperties l = i->second;
@@ -1893,10 +1942,6 @@
 
 std::string AnimationInterface::GetXMLOpenClose_nodeupdate (uint32_t id, bool visible)
 {
-  struct Rgb rgb = nodeColors[id];
-  uint8_t r = rgb.r;
-  uint8_t g = rgb.g;
-  uint8_t b = rgb.b;
   std::ostringstream oss;
   oss << "<nodeupdate id=\"" << id << "\"";
   oss << " t=\"" << Simulator::Now ().GetSeconds () << "\"";
@@ -1904,16 +1949,12 @@
     oss << " visible=\"" << 1 << "\"";
   else
     oss << " visible=\"" << 0 << "\"";
-  if (nodeDescriptions.find (id) != nodeDescriptions.end ())
-    {
-      oss << " descr=\""<< nodeDescriptions[id] << "\"";
-    }
-  else
-    {
-      oss << " descr=\"\"";
-    }
-  oss << " r=\"" << (uint32_t)r << "\" "
-      << " g=\"" << (uint32_t)g << "\" b=\"" << (uint32_t)b <<"\"/>\n";
+  AppendXMLNodeDescription (oss, id);
+  AppendXMLNodeColor (oss, nodeColors[id]);
+  AppendXMLRemainingEnergy (oss, id);
+
+  oss  <<"/>\n";
+
   return oss.str ();
 
 }
@@ -1922,35 +1963,26 @@
 {
   std::ostringstream oss;
   oss <<"<node id=\"" << id << "\""; 
-  if (nodeDescriptions.find (id) != nodeDescriptions.end ())
-    {
-      oss << " descr=\""<< nodeDescriptions[id] << "\"";
-    }
-  else
-    {
-      oss << " descr=\"\"";
-    }
-  oss << " locX = \"" << locX << "\" " << "locY = \"" << locY << "\" />\n";
+  AppendXMLNodeDescription (oss, id);
+  oss << " locX = \"" << locX << "\" " << "locY = \"" << locY << "\"";
+  AppendXMLRemainingEnergy (oss, id);
+
+  oss  <<"/>\n";
+
   return oss.str ();
 }
 
 std::string AnimationInterface::GetXMLOpenClose_node (uint32_t lp, uint32_t id, double locX, double locY, struct Rgb rgb)
 {
-  uint8_t r = rgb.r;
-  uint8_t g = rgb.g;
-  uint8_t b = rgb.b;
   std::ostringstream oss;
   oss <<"<node id = \"" << id << "\"";
-  if (nodeDescriptions.find (id) != nodeDescriptions.end ())
-    {
-      oss << " descr=\""<< nodeDescriptions[id] << "\"";
-    }
-  else
-    {
-      oss << " descr=\"\"";
-    }
-  oss << " locX=\"" << locX << "\" " << "locY=\"" << locY << "\"" << " r=\"" << (uint32_t)r << "\" " 
-    << " g=\"" << (uint32_t)g << "\" b=\"" << (uint32_t)b <<"\"/>\n";
+  AppendXMLNodeDescription (oss, id);
+  oss << " locX=\"" << locX << "\" " << "locY=\"" << locY << "\"";
+  AppendXMLNodeColor (oss, rgb);
+  AppendXMLRemainingEnergy (oss, id);
+
+  oss  <<"/>\n";
+
   return oss.str ();
 }
 
@@ -1982,11 +2014,11 @@
 
   P2pLinkNodeIdPair p1 = { fromId, toId };
   P2pLinkNodeIdPair p2 = { toId, fromId };
-  if (linkProperties.find (p1) != linkProperties.end())
+  if (linkProperties.find (p1) != linkProperties.end ())
     {
       lprop = linkProperties[p1];
     }
-  else if (linkProperties.find (p2) != linkProperties.end())
+  else if (linkProperties.find (p2) != linkProperties.end ())
     {
       lprop = linkProperties[p2];
     }
@@ -2006,7 +2038,7 @@
   oss << "<p fId=\"" << fromId
       << "\" fbTx=\"" << fbTx
       << "\" lbTx=\"" << lbTx
-      << (auxInfo.empty()?"":"\" aux=\"") << auxInfo.c_str () << "\">";
+      << (auxInfo.empty ()?"":"\" aux=\"") << auxInfo.c_str () << "\">";
   return oss.str ();
 }
 
@@ -2105,7 +2137,7 @@
 }
 
 
-std::vector<std::string> AnimationInterface::GetElementsFromContext (std::string context)
+const std::vector<std::string> AnimationInterface::GetElementsFromContext (const std::string& context) const
 {
   std::vector <std::string> elements;
   size_t pos1=0, pos2;
@@ -2120,6 +2152,39 @@
   return elements;
 }
 
+void AnimationInterface::AppendXMLNodeDescription (std::ostream& ostream, uint32_t id) const
+{
+  if (nodeDescriptions.find (id) != nodeDescriptions.end ())
+    {
+      ostream << " descr=\""<< nodeDescriptions[id] << "\"";
+    }
+  else
+    {
+      ostream << " descr=\"\"";
+    }
+}
+
+void AnimationInterface::AppendXMLNodeColor (std::ostream& ostream, const Rgb& color) const
+{
+  const uint8_t r = color.r;
+  const uint8_t g = color.g;
+  const uint8_t b = color.b;
+
+  ostream << " r=\"" << (uint32_t)r << "\" "
+          << " g=\"" << (uint32_t)g << "\" "
+          << " b=\"" << (uint32_t)b <<"\" ";
+}
+
+void AnimationInterface::AppendXMLRemainingEnergy (std::ostream& ostream, uint32_t id) const
+{
+  const EnergyFractionMap::const_iterator fractionIter = m_nodeEnergyFraction.find (id);
+
+  if (fractionIter != m_nodeEnergyFraction.end ())
+    ostream << "rc = \"" << fractionIter->second <<"\" ";
+  else if (NodeList::GetNode (id)->GetObject<EnergySource>())
+    ostream << "rc = \"1\" ";
+}
+
 TypeId
 AnimByteTag::GetTypeId (void)
 {
diff -Naur ns-3.18.1/src/netanim/model/animation-interface.h ns-3.19/src/netanim/model/animation-interface.h
--- ns-3.18.1/src/netanim/model/animation-interface.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/netanim/model/animation-interface.h	2013-12-20 09:44:50.000000000 -0800
@@ -14,6 +14,7 @@
  *
  * Author: George F. Riley<riley@ece.gatech.edu>
  * Author: John Abraham <john.abraham@gatech.edu>
+ * Contributions: Eugene Kalishenko <ydginster@gmail.com> (Open Source and Linux Laboratory http://dev.osll.ru/)
  */
 
 // Interface between ns3 and the network animator
@@ -89,7 +90,7 @@
 } Ipv4RoutePathElement;
 
 /**
- * \defgroup netanim Netanim
+ * \defgroup netanim Network Animation
  *
  * This section documents the API of the ns-3 netanim module. For a generic functional description, please refer to the ns-3 manual.
  */
@@ -137,7 +138,7 @@
    *
    * \returns reference to this AnimationInterface object
    */
-  AnimationInterface & EnableIpv4RouteTracking (std::string fileName, Time startTime, Time stopTime, Time pollInterval = Seconds(5));
+  AnimationInterface & EnableIpv4RouteTracking (std::string fileName, Time startTime, Time stopTime, Time pollInterval = Seconds (5));
 
   /**
    * \brief Enable tracking of the Ipv4 routing table for a set of Nodes
@@ -151,7 +152,7 @@
    *
    * \returns reference to this AnimationInterface object
    */
-  AnimationInterface & EnableIpv4RouteTracking (std::string fileName, Time startTime, Time stopTime, NodeContainer nc, Time pollInterval = Seconds(5));
+  AnimationInterface & EnableIpv4RouteTracking (std::string fileName, Time startTime, Time stopTime, NodeContainer nc, Time pollInterval = Seconds (5));
 
   /**
    * \brief Check if AnimationInterface is initialized
@@ -233,7 +234,7 @@
    * \param minX X value of the lower left corner
    * \param minY Y value of the lower left corner
    * \param maxX X value of the upper right corner
-   * \param maxX Y value of the upper right corner
+   * \param maxY Y value of the upper right corner
    *
    */
   static void SetBoundary (double minX, double minY, double maxX, double maxY);
@@ -320,7 +321,7 @@
 
   /**
    * \brief Helper function to set the color of nodes in a container
-   * \param n Ptr to the node
+   * \param nc A Node Container of Nodes 
    * \param r Red component value (0-255)
    * \param g Green component value (0-255)
    * \param b Blue component value (0-255)
@@ -410,6 +411,15 @@
    */
   uint64_t GetTracePktCount ();
 
+  /**
+   *
+   * \brief Get node's energy fraction (This used only for testing)
+   *
+   * returns current node's remaining energy (between [0, 1])
+   *
+   */
+  double GetNodeEnergyFraction (Ptr <const Node> node) const;
+
  /**
   * Assign a fixed random variable stream number to the random variables
   * used by this model.  Return the number of streams (possibly zero) that
@@ -542,6 +552,8 @@
   void UanPhyGenRxTrace (std::string context,
                          Ptr<const Packet>);
 
+  void RemainingEnergyTrace (std::string context, double previousEnergy, double currentEnergy);
+
   void MobilityCourseChangeTrace (Ptr <const MobilityModel> mob);
 
   // Write a string to the specified handle;
@@ -606,20 +618,26 @@
   bool IsInTimeWindow ();
 
   // Path helper
-  std::vector<std::string> GetElementsFromContext (std::string context);
+  const std::vector<std::string> GetElementsFromContext (const std::string& context) const;
+  Ptr <Node> GetNodeFromContext (const std::string& context) const;
   Ptr <NetDevice> GetNetDeviceFromContext (std::string context);
 
+  typedef std::map <uint32_t, double> EnergyFractionMap;
+
   static std::map <uint32_t, Rgb> nodeColors;
   static std::map <uint32_t, std::string> nodeDescriptions;
   static std::map <P2pLinkNodeIdPair, LinkProperties, LinkPairCompare> linkProperties;
+  EnergyFractionMap m_nodeEnergyFraction;
   uint64_t m_currentPktCount;
 
-  void StartNewTraceFile();
+  void StartNewTraceFile ();
 
   std::string GetMacAddress (Ptr <NetDevice> nd);
   std::string GetIpv4Address (Ptr <NetDevice> nd);
   void WriteNonP2pLinkProperties (uint32_t id, std::string ipv4Address, std::string channelType);
 
+  void WriteNodeUpdate (uint32_t nodeId);
+
   std::string GetNetAnimVersion ();
 
   // XML helpers
@@ -651,7 +669,9 @@
   std::string GetXMLOpenClose_routing (uint32_t id, std::string routingInfo);
   std::string GetXMLOpenClose_rp (uint32_t nodeId, std::string destination, Ipv4RoutePathElements rpElements);
 
-
+  void AppendXMLNodeDescription (std::ostream& ostream, uint32_t id) const;
+  void AppendXMLNodeColor (std::ostream& ostream, const Rgb& color) const;
+  void AppendXMLRemainingEnergy (std::ostream& ostream, uint32_t id) const;
 
   /// Provides uniform random variables.
   Ptr<UniformRandomVariable> m_uniformRandomVariable;  
diff -Naur ns-3.18.1/src/netanim/test/netanim-test.cc ns-3.19/src/netanim/test/netanim-test.cc
--- ns-3.18.1/src/netanim/test/netanim-test.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/netanim/test/netanim-test.cc	2013-12-20 09:44:50.000000000 -0800
@@ -14,6 +14,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Author: John Abraham <john.abraham@gatech.edu>
+ * Contributions: Eugene Kalishenko <ydginster@gmail.com> (Open Source and Linux Laboratory http://dev.osll.ru/)
  */
 
 #include <iostream>
@@ -26,21 +27,23 @@
 #include "ns3/netanim-module.h"
 #include "ns3/applications-module.h"
 #include "ns3/point-to-point-layout-module.h"
+#include "ns3/basic-energy-source.h"
+#include "ns3/simple-device-energy-model.h"
 
 namespace ns3 {
 
-class AnimationInterfaceTestCase : public TestCase
+class AbstractAnimationInterfaceTestCase : public TestCase
 {
 public:
   /**
    * \brief Constructor.
    */
-  AnimationInterfaceTestCase ();
+  AbstractAnimationInterfaceTestCase (std::string name);
   /**
    * \brief Destructor.
    */
   virtual
-  ~AnimationInterfaceTestCase ();
+  ~AbstractAnimationInterfaceTestCase ();
   /**
    * \brief Run unit tests for this class.
    * \return false if all tests have passed, false otherwise
@@ -48,33 +51,96 @@
   virtual void
   DoRun (void);
 
+protected:
+
+  NodeContainer m_nodes;
+  AnimationInterface* m_anim;
+
+private:
+
+  virtual void
+  PrepareNetwork () = 0;
+
+  virtual void
+  CheckLogic () = 0;
+
+  virtual void
+  CheckFileExistence ();
+
+  const char* m_traceFileName;
 };
 
-AnimationInterfaceTestCase::AnimationInterfaceTestCase () :
-  TestCase ("Verify AnimationInterface")
+AbstractAnimationInterfaceTestCase::AbstractAnimationInterfaceTestCase (std::string name) :
+  TestCase (name), m_anim (NULL), m_traceFileName ("netanim-test.xml")
 {
 }
 
-AnimationInterfaceTestCase::~AnimationInterfaceTestCase ()
+AbstractAnimationInterfaceTestCase::~AbstractAnimationInterfaceTestCase ()
+{
+  delete m_anim;
+}
+
+void
+AbstractAnimationInterfaceTestCase::DoRun (void)
+{
+  PrepareNetwork ();
+
+  m_anim = new AnimationInterface (m_traceFileName);
+
+  Simulator::Run ();
+  CheckLogic ();
+  CheckFileExistence ();
+  Simulator::Destroy ();
+}
+
+void
+AbstractAnimationInterfaceTestCase::CheckFileExistence ()
+{
+  FILE * fp = fopen (m_traceFileName, "r");
+  NS_TEST_ASSERT_MSG_NE (fp, 0, "Trace file was not created");
+  fclose (fp);
+  unlink (m_traceFileName);
+}
+
+class AnimationInterfaceTestCase : public AbstractAnimationInterfaceTestCase
+{
+public:
+  /**
+   * \brief Constructor.
+   */
+  AnimationInterfaceTestCase ();
+
+private:
+
+  virtual void
+  PrepareNetwork ();
+
+  virtual void
+  CheckLogic ();
+
+};
+
+AnimationInterfaceTestCase::AnimationInterfaceTestCase () :
+  AbstractAnimationInterfaceTestCase ("Verify AnimationInterface")
 {
 }
+
 void
-AnimationInterfaceTestCase::DoRun (void)
+AnimationInterfaceTestCase::PrepareNetwork (void)
 {
-  NodeContainer nodes;
-  nodes.Create (2);
-  AnimationInterface::SetConstantPosition (nodes.Get (0), 0 , 10);
-  AnimationInterface::SetConstantPosition (nodes.Get (1), 1 , 10);
+  m_nodes.Create (2);
+  AnimationInterface::SetConstantPosition (m_nodes.Get (0), 0 , 10);
+  AnimationInterface::SetConstantPosition (m_nodes.Get (1), 1 , 10);
 
   PointToPointHelper pointToPoint;
   pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
   pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
 
   NetDeviceContainer devices;
-  devices = pointToPoint.Install (nodes);
+  devices = pointToPoint.Install (m_nodes);
 
   InternetStackHelper stack;
-  stack.Install (nodes);
+  stack.Install (m_nodes);
 
   Ipv4AddressHelper address;
   address.SetBase ("10.1.1.0", "255.255.255.0");
@@ -83,7 +149,7 @@
 
   UdpEchoServerHelper echoServer (9);
 
-  ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));
+  ApplicationContainer serverApps = echoServer.Install (m_nodes.Get (1));
   serverApps.Start (Seconds (1.0));
   serverApps.Stop (Seconds (10.0));
 
@@ -92,18 +158,74 @@
   echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
   echoClient.SetAttribute ("PacketSize", UintegerValue (1024));
 
-  ApplicationContainer clientApps = echoClient.Install (nodes.Get (0));
+  ApplicationContainer clientApps = echoClient.Install (m_nodes.Get (0));
   clientApps.Start (Seconds (2.0));
   clientApps.Stop (Seconds (10.0));
-  std::string traceFileName = "netanim-test.xml";
-  AnimationInterface anim(traceFileName.c_str ());
-  Simulator::Run ();
-  NS_TEST_ASSERT_MSG_EQ (anim.GetTracePktCount (), 32, "Expected 32 packets traced");
-  FILE * fp = fopen (traceFileName.c_str (), "r");
-  NS_TEST_ASSERT_MSG_NE (fp, 0, "Trace file was not created");
-  fclose (fp);
-  unlink (traceFileName.c_str ());
-  Simulator::Destroy ();
+}
+
+void
+AnimationInterfaceTestCase::CheckLogic (void)
+{
+  NS_TEST_ASSERT_MSG_EQ (m_anim->GetTracePktCount (), 32, "Expected 32 packets traced");
+}
+
+class AnimationRemainingEnergyTestCase : public AbstractAnimationInterfaceTestCase
+{
+public:
+  /**
+   * \brief Constructor.
+   */
+  AnimationRemainingEnergyTestCase ();
+
+private:
+
+  virtual void
+  PrepareNetwork ();
+
+  virtual void
+  CheckLogic ();
+
+  Ptr<BasicEnergySource> m_energySource;
+  Ptr<SimpleDeviceEnergyModel> m_energyModel;
+  const double m_initialEnergy;
+};
+
+AnimationRemainingEnergyTestCase::AnimationRemainingEnergyTestCase () :
+  AbstractAnimationInterfaceTestCase ("Verify Remaining energy tracing"),
+  m_initialEnergy (100)
+{
+}
+
+void
+AnimationRemainingEnergyTestCase::PrepareNetwork (void)
+{
+  m_energySource = CreateObject<BasicEnergySource>();
+  m_energyModel = CreateObject<SimpleDeviceEnergyModel>();
+
+  m_energySource->SetInitialEnergy (m_initialEnergy);
+  m_energyModel->SetEnergySource (m_energySource);
+  m_energySource->AppendDeviceEnergyModel (m_energyModel);
+  m_energyModel->SetCurrentA (20);
+
+  m_nodes.Create (1);
+  AnimationInterface::SetConstantPosition (m_nodes.Get (0), 0 , 10);
+
+  // aggregate energy source to node
+  m_nodes.Get (0)->AggregateObject (m_energySource);
+  // once node's energy will be depleted according to the model
+  Simulator::Stop (Seconds (2));
+}
+
+void
+AnimationRemainingEnergyTestCase::CheckLogic (void)
+{
+  const double remainingEnergy = m_energySource->GetRemainingEnergy ();
+
+  NS_TEST_ASSERT_MSG_EQ ((remainingEnergy < m_initialEnergy), true, "Energy hasn't depleted!");
+  NS_TEST_ASSERT_MSG_EQ_TOL (m_anim->GetNodeEnergyFraction (m_nodes.Get (0)),
+                            remainingEnergy / m_initialEnergy,
+                            1.0e-13,
+                            "Wrong remaining energy value was traced");
 }
 
 static class AnimationInterfaceTestSuite : public TestSuite
@@ -113,6 +235,7 @@
     TestSuite ("animation-interface", UNIT)
   {
     AddTestCase (new AnimationInterfaceTestCase (), TestCase::QUICK);
+    AddTestCase (new AnimationRemainingEnergyTestCase (), TestCase::QUICK);
   }
 } g_animationInterfaceTestSuite;
 
diff -Naur ns-3.18.1/src/netanim/wscript ns-3.19/src/netanim/wscript
--- ns-3.18.1/src/netanim/wscript	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/netanim/wscript	2013-12-20 09:44:50.000000000 -0800
@@ -3,11 +3,11 @@
 import wutils
 
 # Required NetAnim version
-NETANIM_RELEASE_NAME = "netanim-3.103"
+NETANIM_RELEASE_NAME = "netanim-3.104"
 
 
 def build (bld) :
-	module = bld.create_ns3_module ('netanim', ['internet', 'mobility', 'wimax', 'wifi', 'csma', 'lte', 'uan'])
+	module = bld.create_ns3_module ('netanim', ['internet', 'mobility', 'wimax', 'wifi', 'csma', 'lte', 'uan', 'energy'])
 	module.includes = '.'
 	module.source = [
 			  'model/animation-interface.cc',
diff -Naur ns-3.18.1/src/network/bindings/modulegen__gcc_ILP32.py ns-3.19/src/network/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/network/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -267,7 +267,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1985,10 +1985,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -5402,6 +5403,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -5412,6 +5418,11 @@
                    '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', 
@@ -5427,6 +5438,11 @@
                    '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', 
@@ -5452,6 +5468,11 @@
                    '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', 
@@ -9074,7 +9095,8 @@
     ## simple-channel.h (module 'network'): void ns3::SimpleChannel::Add(ns3::Ptr<ns3::SimpleNetDevice> device) [member function]
     cls.add_method('Add', 
                    'void', 
-                   [param('ns3::Ptr< ns3::SimpleNetDevice >', 'device')])
+                   [param('ns3::Ptr< ns3::SimpleNetDevice >', 'device')], 
+                   is_virtual=True)
     ## simple-channel.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::SimpleChannel::GetDevice(uint32_t i) const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
@@ -9093,7 +9115,8 @@
     ## simple-channel.h (module 'network'): void ns3::SimpleChannel::Send(ns3::Ptr<ns3::Packet> p, uint16_t protocol, ns3::Mac48Address to, ns3::Mac48Address from, ns3::Ptr<ns3::SimpleNetDevice> sender) [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint16_t', 'protocol'), param('ns3::Mac48Address', 'to'), param('ns3::Mac48Address', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'sender')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint16_t', 'protocol'), param('ns3::Mac48Address', 'to'), param('ns3::Mac48Address', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'sender')], 
+                   is_virtual=True)
     return
 
 def register_Ns3SimpleNetDevice_methods(root_module, cls):
@@ -9414,14 +9437,14 @@
     cls.add_method('SetBurstRate', 
                    'void', 
                    [param('double', 'rate')])
-    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomBurstSize(ns3::Ptr<ns3::RandomVariableStream> arg0) [member function]
+    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomBurstSize(ns3::Ptr<ns3::RandomVariableStream> burstSz) [member function]
     cls.add_method('SetRandomBurstSize', 
                    'void', 
-                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'arg0')])
-    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomVariable(ns3::Ptr<ns3::RandomVariableStream> arg0) [member function]
+                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'burstSz')])
+    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomVariable(ns3::Ptr<ns3::RandomVariableStream> ranVar) [member function]
     cls.add_method('SetRandomVariable', 
                    'void', 
-                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'arg0')])
+                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'ranVar')])
     ## error-model.h (module 'network'): bool ns3::BurstErrorModel::DoCorrupt(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('DoCorrupt', 
                    'bool', 
@@ -9666,6 +9689,10 @@
 
 def register_functions(root_module):
     module = root_module
+    ## crc32.h (module 'network'): extern uint32_t ns3::CRC32Calculate(uint8_t const * data, int length) [free function]
+    module.add_function('CRC32Calculate', 
+                        'uint32_t', 
+                        [param('uint8_t const *', 'data'), param('int', 'length')])
     ## address.h (module 'network'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeAddressChecker() [free function]
     module.add_function('MakeAddressChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
diff -Naur ns-3.18.1/src/network/bindings/modulegen__gcc_LP64.py ns-3.19/src/network/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/network/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -267,7 +267,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1985,10 +1985,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -5402,6 +5403,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -5412,6 +5418,11 @@
                    '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', 
@@ -5427,6 +5438,11 @@
                    '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', 
@@ -5452,6 +5468,11 @@
                    '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', 
@@ -9074,7 +9095,8 @@
     ## simple-channel.h (module 'network'): void ns3::SimpleChannel::Add(ns3::Ptr<ns3::SimpleNetDevice> device) [member function]
     cls.add_method('Add', 
                    'void', 
-                   [param('ns3::Ptr< ns3::SimpleNetDevice >', 'device')])
+                   [param('ns3::Ptr< ns3::SimpleNetDevice >', 'device')], 
+                   is_virtual=True)
     ## simple-channel.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::SimpleChannel::GetDevice(uint32_t i) const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
@@ -9093,7 +9115,8 @@
     ## simple-channel.h (module 'network'): void ns3::SimpleChannel::Send(ns3::Ptr<ns3::Packet> p, uint16_t protocol, ns3::Mac48Address to, ns3::Mac48Address from, ns3::Ptr<ns3::SimpleNetDevice> sender) [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint16_t', 'protocol'), param('ns3::Mac48Address', 'to'), param('ns3::Mac48Address', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'sender')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint16_t', 'protocol'), param('ns3::Mac48Address', 'to'), param('ns3::Mac48Address', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'sender')], 
+                   is_virtual=True)
     return
 
 def register_Ns3SimpleNetDevice_methods(root_module, cls):
@@ -9414,14 +9437,14 @@
     cls.add_method('SetBurstRate', 
                    'void', 
                    [param('double', 'rate')])
-    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomBurstSize(ns3::Ptr<ns3::RandomVariableStream> arg0) [member function]
+    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomBurstSize(ns3::Ptr<ns3::RandomVariableStream> burstSz) [member function]
     cls.add_method('SetRandomBurstSize', 
                    'void', 
-                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'arg0')])
-    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomVariable(ns3::Ptr<ns3::RandomVariableStream> arg0) [member function]
+                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'burstSz')])
+    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomVariable(ns3::Ptr<ns3::RandomVariableStream> ranVar) [member function]
     cls.add_method('SetRandomVariable', 
                    'void', 
-                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'arg0')])
+                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'ranVar')])
     ## error-model.h (module 'network'): bool ns3::BurstErrorModel::DoCorrupt(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('DoCorrupt', 
                    'bool', 
@@ -9666,6 +9689,10 @@
 
 def register_functions(root_module):
     module = root_module
+    ## crc32.h (module 'network'): extern uint32_t ns3::CRC32Calculate(uint8_t const * data, int length) [free function]
+    module.add_function('CRC32Calculate', 
+                        'uint32_t', 
+                        [param('uint8_t const *', 'data'), param('int', 'length')])
     ## address.h (module 'network'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeAddressChecker() [free function]
     module.add_function('MakeAddressChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
diff -Naur ns-3.18.1/src/network/doc/packets.rst ns-3.19/src/network/doc/packets.rst
--- ns-3.18.1/src/network/doc/packets.rst	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/doc/packets.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 Packets
 -------
@@ -161,7 +162,7 @@
   Ptr<Packet> pkt = Create<Packet> ();
 
 What is the Uid (unique Id)?  It is an internal id that the system uses to
-identify packets.  It can be fetched via the following method:::
+identify packets.  It can be fetched via the following method::
 
   uint32_t uid = pkt->GetUid ();
 
@@ -179,14 +180,14 @@
 behave, when delays such as serialization or transmission delays are computed,
 to have a certain number of payload bytes, but the bytes will only be allocated
 on-demand when needed).  The command to do this is, when the packet is
-created:::
+created::
 
   Ptr<Packet> pkt = Create<Packet> (N);
 
 where N is a positive integer.  
 
 The packet now has a size of N bytes, which can be verified by the GetSize()
-method:::
+method::
 
   /**
    * \returns the size in bytes of the packet (including the zero-filled
@@ -196,11 +197,11 @@
 
 You can also initialize a packet with a character buffer. The input
 data is copied and the input buffer is untouched. The constructor
-applied is:::
+applied is::
 
   Packet (uint8_t const *buffer, uint32_t size);
 
-Here is an example:::
+Here is an example::
 
   Ptr<Packet> pkt1 = Create<Packet> (reinterpret_cast<const uint8_t*> ("hello"), 5);
 
@@ -421,14 +422,14 @@
   PacketTagIterator GetPacketTagIterator (void) const;
 
 Here is a simple example illustrating the use of tags from the
-code in ``src/internet/model/udp-socket-impl.cc``:::
+code in ``src/internet/model/udp-socket-impl.cc``::
 
   Ptr<Packet> p;  // pointer to a pre-existing packet
   SocketIpTtlTag tag
   tag.SetTtl (m_ipMulticastTtl); // Convey the TTL from UDP layer to IP layer
   p->AddPacketTag (tag);
 
-This tag is read at the IP layer, then stripped (``src/internet/model/ipv4-l3-protocol.cc``):::
+This tag is read at the IP layer, then stripped (``src/internet/model/ipv4-l3-protocol.cc``)::
 
   uint8_t ttl = m_defaultTtl;
   SocketIpTtlTag tag;
@@ -443,7 +444,7 @@
 
 Packets may be fragmented or merged together.  For example, to fragment a packet
 ``p`` of 90 bytes into two packets, one containing the first 10 bytes and the
-other containing the remaining 80, one may call the following code:::
+other containing the remaining 80, one may call the following code::
 
   Ptr<Packet> frag0 = p->CreateFragment (0, 10);
   Ptr<Packet> frag1 = p->CreateFragment (10, 90);
@@ -451,7 +452,7 @@
 As discussed above, the packet tags from ``p`` will follow to both packet
 fragments, and the byte tags will follow the byte ranges as needed.
 
-Now, to put them back together:::
+Now, to put them back together::
 
   frag0->AddAtEnd (frag1);
 
@@ -480,7 +481,7 @@
 the program.
 
 To enable this operation, users will typically insert one or both of these
-statements at the beginning of their programs:::
+statements at the beginning of their programs::
 
   Packet::EnablePrinting ();
   Packet::EnableChecking ();
@@ -496,7 +497,7 @@
 Private member variables
 ++++++++++++++++++++++++
 
-A Packet object's interface provides access to some private data:::
+A Packet object's interface provides access to some private data::
 
   Buffer m_buffer;
   ByteTagList m_byteTagList;
@@ -601,7 +602,7 @@
 Tags are found by the unique mapping between the Tag type and
 its underlying id. This is why at most one instance of any Tag
 can be stored in a packet. The mapping between Tag type and 
-underlying id is performed by a registration as follows:::
+underlying id is performed by a registration as follows::
 
     /* A sample Tag implementation
      */
diff -Naur ns-3.18.1/src/network/doc/queue.rst ns-3.19/src/network/doc/queue.rst
--- ns-3.18.1/src/network/doc/queue.rst	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/doc/queue.rst	2013-12-20 09:44:50.000000000 -0800
@@ -85,7 +85,7 @@
 the queue type and attributes from the helper, such as this example
 from ``src/network/examples/red-tests.cc``:
 
-:: 
+.. sourcecode:: cpp
 
   PointToPointHelper p2p;
 
@@ -134,7 +134,7 @@
 the Enqueue, Dequeue, and Drop traces of these queues and print out 
 trace statements, such as the following from ``examples/udp/udp-echo.cc``:
 
-::
+.. sourcecode:: text
 
   + 2 /NodeList/0/DeviceList/1/$ns3::CsmaNetDevice/TxQueue/Enqueue ns3::EthernetHeader 
   ( length/type=0x806, source=00:00:00:00:00:01, destination=ff:ff:ff:ff:ff:ff) 
diff -Naur ns-3.18.1/src/network/doc/sockets-api.rst ns-3.19/src/network/doc/sockets-api.rst
--- ns-3.18.1/src/network/doc/sockets-api.rst	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/doc/sockets-api.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 .. _Sockets-APIs:
 
@@ -104,14 +105,14 @@
 =============
 
 Below is a typical sequence of socket calls for a TCP client in a
-real implementation:
+real implementation::
 
-* ``sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);``
-* ``bind(sock, ...);``
-* ``connect(sock, ...);``
-* ``send(sock, ...);``
-* ``recv(sock, ...);``
-* ``close(sock);``
+    sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
+    bind(sock, ...);
+    connect(sock, ...);
+    send(sock, ...);
+    recv(sock, ...);
+    close(sock);
 
 There are analogs to all of these calls in ns-3, but we will focus on  
 two aspects here.  First, most usage of sockets in real systems 
@@ -127,16 +128,16 @@
 :cpp:func:`ns3::Socket::SetSendCallback` callback is invoked.  
 An application can also ask the socket how much space is available 
 by calling :cpp:func:`ns3::Socket::GetTxAvailable`.  A typical sequence 
-of events for sending data (ignoring connection setup) might be:::
+of events for sending data (ignoring connection setup) might be::
 
-    * ``SetSendCallback (MakeCallback(&HandleSendCallback));``
-    * ``Send ();``
-    * ``Send ();``
-    * ...
-    * Send fails because buffer is full
-    * wait until :cpp:func:`HandleSendCallback` is called
-    * :cpp:func:`HandleSendCallback` is called by socket, since space now available
-    * ``Send (); // Start sending again``
+    SetSendCallback (MakeCallback(&HandleSendCallback));
+    Send ();
+    Send ();
+    ...
+    // Send fails because buffer is full
+    // Wait until HandleSendCallback is called
+    // HandleSendCallback is called by socket, since space now available
+    Send (); // Start sending again
 
 Similarly, on the receive side, the socket user does not block on
 a call to ``recv()``.  Instead, the application sets a callback
diff -Naur ns-3.18.1/src/network/helper/trace-helper.h ns-3.19/src/network/helper/trace-helper.h
--- ns-3.18.1/src/network/helper/trace-helper.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/helper/trace-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -67,23 +67,42 @@
   /**
    * @brief Let the pcap helper figure out a reasonable filename to use for a
    * pcap file associated with a device.
+   * 
+   * @param prefix prefix string
+   * @param device NetDevice
+   * @param useObjectNames use node and device names instead of indexes
    */
   std::string GetFilenameFromDevice (std::string prefix, Ptr<NetDevice> device, bool useObjectNames = true);
 
   /**
    * @brief Let the pcap helper figure out a reasonable filename to use for the
    * pcap file associated with a node.
+   * 
+   * @param prefix prefix string
+   * @param object interface (such as Ipv4Interface or Ipv6Interface)
+   * @param interface interface id
+   * @param useObjectNames use node and device names instead of indexes
    */
   std::string GetFilenameFromInterfacePair (std::string prefix, Ptr<Object> object, 
                                             uint32_t interface, bool useObjectNames = true);
 
   /**
    * @brief Create and initialize a pcap file.
+   * 
+   * @param filename file name
+   * @param filemode file mode
+   * @param dataLinkType data link type of packet data
+   * @param snapLen maximum length of packet data stored in records
+   * @param tzCorrection time zone correction to be applied to timestamps of packets
    */
   Ptr<PcapFileWrapper> CreateFile (std::string filename, std::ios::openmode filemode,
                                    uint32_t dataLinkType,  uint32_t snapLen = 65535, int32_t tzCorrection = 0);
   /**
    * @brief Hook a trace source to the default trace sink
+   * 
+   * @param object object
+   * @param traceName trace source name
+   * @param file file wrapper
    */
   template <typename T> void HookDefaultSink (Ptr<T> object, std::string traceName, Ptr<PcapFileWrapper> file);
 
@@ -122,12 +141,21 @@
   /**
    * @brief Let the ascii trace helper figure out a reasonable filename to use
    * for an ascii trace file associated with a device.
+   * 
+   * @param prefix prefix string
+   * @param device NetDevice
+   * @param useObjectNames use node and device names instead of indexes
    */
   std::string GetFilenameFromDevice (std::string prefix, Ptr<NetDevice> device, bool useObjectNames = true);
 
   /**
    * @brief Let the ascii trace helper figure out a reasonable filename to use
    * for an ascii trace file associated with a node.
+   * 
+   * @param prefix prefix string
+   * @param object interface (such as Ipv4Interface or Ipv6Interface)
+   * @param interface interface id
+   * @param useObjectNames use node and device names instead of indexes
    */
   std::string GetFilenameFromInterfacePair (std::string prefix, Ptr<Object> object, 
                                             uint32_t interface, bool useObjectNames = true);
@@ -151,6 +179,9 @@
    * run into object lifetime issues.  Ns-3 has a nice reference counted object
    * that can solve the problem so we use one of those to carry the stream
    * around and deal with the lifetime issues.
+   * 
+   * @param filename file name
+   * @param filemode file mode
    */
   Ptr<OutputStreamWrapper> CreateFileStream (std::string filename, 
                                              std::ios::openmode filemode = std::ios::out);
@@ -158,6 +189,10 @@
   /**
    * @brief Hook a trace source to the default enqueue operation trace sink that
    * does not accept nor log a trace context.
+   * 
+   * @param object object
+   * @param traceName trace source name
+   * @param stream output stream wrapper
    */
   template <typename T> 
   void HookDefaultEnqueueSinkWithoutContext (Ptr<T> object, std::string traceName, Ptr<OutputStreamWrapper> stream);
@@ -165,6 +200,11 @@
   /**
    * @brief Hook a trace source to the default enqueue operation trace sink that
    * does accept and log a trace context.
+   * 
+   * @param object object
+   * @param context context string
+   * @param traceName trace source name
+   * @param stream output stream wrapper
    */
   template <typename T> 
   void HookDefaultEnqueueSinkWithContext (Ptr<T> object, 
@@ -173,6 +213,10 @@
   /**
    * @brief Hook a trace source to the default drop operation trace sink that 
    * does not accept nor log a trace context.
+   * 
+   * @param object object
+   * @param traceName trace source name
+   * @param stream output stream wrapper
    */
   template <typename T> 
   void HookDefaultDropSinkWithoutContext (Ptr<T> object, std::string traceName, Ptr<OutputStreamWrapper> stream);
@@ -180,6 +224,11 @@
   /**
    * @brief Hook a trace source to the default drop operation trace sink that 
    * does accept and log a trace context.
+   * 
+   * @param object object
+   * @param context context string
+   * @param traceName trace source name
+   * @param stream output stream wrapper
    */
   template <typename T> 
   void HookDefaultDropSinkWithContext (Ptr<T> object, 
@@ -188,6 +237,10 @@
   /**
    * @brief Hook a trace source to the default dequeue operation trace sink
    * that does not accept nor log a trace context.
+   * 
+   * @param object object
+   * @param traceName trace source name
+   * @param stream output stream wrapper
    */
   template <typename T> 
   void HookDefaultDequeueSinkWithoutContext (Ptr<T> object, std::string traceName, Ptr<OutputStreamWrapper> stream);
@@ -195,6 +248,11 @@
   /**
    * @brief Hook a trace source to the default dequeue operation trace sink
    * that does accept and log a trace context.
+   * 
+   * @param object object
+   * @param context context string
+   * @param traceName trace source name
+   * @param stream output stream wrapper
    */
   template <typename T> 
   void HookDefaultDequeueSinkWithContext (Ptr<T> object, 
@@ -203,6 +261,10 @@
   /**
    * @brief Hook a trace source to the default receive operation trace sink
    * that does not accept nor log a trace context.
+   * 
+   * @param object object
+   * @param traceName trace source name
+   * @param stream output stream wrapper
    */
   template <typename T> 
   void HookDefaultReceiveSinkWithoutContext (Ptr<T> object, std::string traceName, Ptr<OutputStreamWrapper> stream);
@@ -210,6 +272,11 @@
   /**
    * @brief Hook a trace source to the default receive operation trace sink
    * that does accept and log a trace context.
+   * 
+   * @param object object
+   * @param context context string
+   * @param traceName trace source name
+   * @param stream output stream wrapper
    */
   template <typename T> 
   void HookDefaultReceiveSinkWithContext (Ptr<T> object, 
diff -Naur ns-3.18.1/src/network/model/address.cc ns-3.19/src/network/model/address.cc
--- ns-3.18.1/src/network/model/address.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/address.cc	2013-12-20 09:44:50.000000000 -0800
@@ -169,7 +169,7 @@
   buffer.Read (m_data, m_len);
 }
 
-ATTRIBUTE_HELPER_CPP (Address);
+ATTRIBUTE_HELPER_CPP (Address);   /// Macro to make help make class an ns-3 attribute
 
 
 bool operator == (const Address &a, const Address &b)
diff -Naur ns-3.18.1/src/network/model/address.h ns-3.19/src/network/model/address.h
--- ns-3.18.1/src/network/model/address.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/address.h	2013-12-20 09:44:50.000000000 -0800
@@ -224,7 +224,7 @@
  * \brief hold objects of type ns3::Address
  */
 
-ATTRIBUTE_HELPER_HEADER (Address);
+ATTRIBUTE_HELPER_HEADER (Address);  /// Macro to make help make class an ns-3 attribute
 
 bool operator == (const Address &a, const Address &b);
 bool operator != (const Address &a, const Address &b);
diff -Naur ns-3.18.1/src/network/model/application.cc ns-3.19/src/network/model/application.cc
--- ns-3.18.1/src/network/model/application.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/application.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Application);
+NS_OBJECT_ENSURE_REGISTERED (Application)
+  ;
 
 // Application Methods
 
diff -Naur ns-3.18.1/src/network/model/application.h ns-3.19/src/network/model/application.h
--- ns-3.18.1/src/network/model/application.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/application.h	2013-12-20 09:44:50.000000000 -0800
@@ -123,11 +123,11 @@
   virtual void DoDispose (void);
   virtual void DoInitialize (void);
 
-  Ptr<Node>       m_node;
-  Time m_startTime;
-  Time m_stopTime;
-  EventId m_startEvent;
-  EventId m_stopEvent;
+  Ptr<Node>       m_node;   /// The node that this application is installed on
+  Time m_startTime;         /// The simulation time that the appliacation will start
+  Time m_stopTime;          /// The simulation time that the appliacation will end
+  EventId m_startEvent;     /// The event that will fire at m_startTime to start the application
+  EventId m_stopEvent;      /// The event that will fire at m_stopTime to end the application
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/network/model/byte-tag-list.h ns-3.19/src/network/model/byte-tag-list.h
--- ns-3.18.1/src/network/model/byte-tag-list.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/byte-tag-list.h	2013-12-20 09:44:50.000000000 -0800
@@ -68,24 +68,53 @@
 class ByteTagList
 {
 public:
-
+  /*
+   * \brief An iterator for iterating through a byte tag list
+   *
+   * An iterator for iterating through a byte tag list
+   *
+   */
   class Iterator
   {
 public:
+    /*
+     * \brief An item specifies an individual tag within a byte buffer
+     *
+     * An item specifies an individual tag within a byte buffer
+     *
+     */
     struct Item 
     {
-      TypeId tid;
-      uint32_t size;
-      int32_t start;
-      int32_t end;
-      TagBuffer buf;
-      Item (TagBuffer buf);
+      TypeId tid;             /// type of the tag
+      uint32_t size;          /// size of tag data
+      int32_t start;          /// offset to the start of the tag from the virtual byte buffer 
+      int32_t end;            /// offset to the end of the tag from the virtual byte buffer
+      TagBuffer buf;          /// the data for the tag as generated by Tag::Serialize
+      Item (TagBuffer buf);   /// constructs an item with the given TagBuffer
 private:
       friend class ByteTagList;
       friend class ByteTagList::Iterator;
     };
+    
+    /*
+     * \brief Used to determine if the iterator is at the end of the byteTagList
+     *
+     * \returns true if there are more Items in the list
+     */
     bool HasNext (void) const;
+
+    /*
+     * \brief Returns the next Item from the ByteTagList
+     *
+     * \returns the next Item in the ByteTagList
+     */        
     struct ByteTagList::Iterator::Item Next (void);
+    
+    /*
+     * \brief Returns the offset from the start of the virtual byte buffer to the ByteTagList
+     *
+     * \returns offset to the start of this ByteTagList
+     */     
     uint32_t GetOffsetStart (void) const;
 private:
     friend class ByteTagList;
@@ -102,7 +131,26 @@
   };
 
   ByteTagList ();
+  
+  /**
+   * 
+   * Copy constructor, copies the data and increases reference count
+   *
+   * \param o The ByteTagList to copy
+   * \returns The newly created ByteTagList
+   *
+   */
   ByteTagList (const ByteTagList &o);
+  
+  /**
+   *
+   * Assignment operator, deallocates current data and assigns
+   * value of passed in ByteTagList.  Also increases reference count
+   *
+   * \param o reference to the ByteTagList to copy
+   * \returns reference to the assignee
+   *
+   */
   ByteTagList &operator = (const ByteTagList &o);
   ~ByteTagList ();
 
@@ -125,6 +173,10 @@
    */
   void Add (const ByteTagList &o);
 
+  /**
+   * 
+   * Removes all of the tags from the ByteTagList
+   */ 
   void RemoveAll (void);
 
   /**
@@ -144,12 +196,20 @@
    * Adjust the offsets stored internally by the adjustment delta and
    * make sure that all offsets are smaller than appendOffset which represents
    * the location where new bytes have been added to the byte buffer.
+   * 
+   * \param adjustment value to change stored offsets by
+   * \param appendOffset maximum offset value
+   *
    */
   void AddAtEnd (int32_t adjustment, int32_t appendOffset);
   /**
    * Adjust the offsets stored internally by the adjustment delta and
    * make sure that all offsets are bigger than prependOffset which represents
    * the location where new bytes have been added to the byte buffer.
+   *
+   * \param adjustment value to change stored offsets byte
+   * \param prependOffset minimum offset value
+   *
    */
   void AddAtStart (int32_t adjustment, int32_t prependOffset);
 
diff -Naur ns-3.18.1/src/network/model/channel.cc ns-3.19/src/network/model/channel.cc
--- ns-3.18.1/src/network/model/channel.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/channel.cc	2013-12-20 09:44:50.000000000 -0800
@@ -27,7 +27,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Channel);
+NS_OBJECT_ENSURE_REGISTERED (Channel)
+  ;
 
 TypeId 
 Channel::GetTypeId (void)
diff -Naur ns-3.18.1/src/network/model/channel-list.cc ns-3.19/src/network/model/channel-list.cc
--- ns-3.18.1/src/network/model/channel-list.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/channel-list.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("ChannelList");
+NS_LOG_COMPONENT_DEFINE ("ChannelList")
+  ;
 
 /**
  * \brief private implementation detail of the ChannelList API.
@@ -55,7 +56,8 @@
   std::vector<Ptr<Channel> > m_channels;
 };
 
-NS_OBJECT_ENSURE_REGISTERED (ChannelListPriv);
+NS_OBJECT_ENSURE_REGISTERED (ChannelListPriv)
+  ;
 
 TypeId 
 ChannelListPriv::GetTypeId (void)
diff -Naur ns-3.18.1/src/network/model/chunk.cc ns-3.19/src/network/model/chunk.cc
--- ns-3.18.1/src/network/model/chunk.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/chunk.cc	2013-12-20 09:44:50.000000000 -0800
@@ -2,7 +2,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Chunk);
+NS_OBJECT_ENSURE_REGISTERED (Chunk)
+  ;
 
 TypeId 
 Chunk::GetTypeId (void)
diff -Naur ns-3.18.1/src/network/model/header.cc ns-3.19/src/network/model/header.cc
--- ns-3.18.1/src/network/model/header.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -5,7 +5,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Header);
+NS_OBJECT_ENSURE_REGISTERED (Header)
+  ;
 
 Header::~Header ()
 {
diff -Naur ns-3.18.1/src/network/model/net-device.cc ns-3.19/src/network/model/net-device.cc
--- ns-3.18.1/src/network/model/net-device.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/net-device.cc	2013-12-20 09:44:50.000000000 -0800
@@ -27,7 +27,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (NetDevice);
+NS_OBJECT_ENSURE_REGISTERED (NetDevice)
+  ;
 
 TypeId NetDevice::GetTypeId (void)
 {
diff -Naur ns-3.18.1/src/network/model/net-device.h ns-3.19/src/network/model/net-device.h
--- ns-3.18.1/src/network/model/net-device.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/net-device.h	2013-12-20 09:44:50.000000000 -0800
@@ -38,7 +38,7 @@
 
 /**
  * \ingroup network
- * \defgroup netdevice NetDevice
+ * \defgroup netdevice Network Device
  */
 /**
  * \ingroup netdevice
diff -Naur ns-3.18.1/src/network/model/nix-vector.cc ns-3.19/src/network/model/nix-vector.cc
--- ns-3.18.1/src/network/model/nix-vector.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/nix-vector.cc	2013-12-20 09:44:50.000000000 -0800
@@ -27,7 +27,7 @@
 
 namespace ns3 {
 
-typedef std::vector<uint32_t> NixBits_t;
+typedef std::vector<uint32_t> NixBits_t;  ///typedef for the nixVector
 
 NixVector::NixVector ()
   : m_nixVector (0),
@@ -77,6 +77,7 @@
   return Ptr<NixVector> (new NixVector (*this), false);
 }
 
+/* For printing the nix vector */
 std::ostream & operator << (std::ostream &os, const NixVector &nix)
 {
   nix.DumpNixVector (os); 
diff -Naur ns-3.18.1/src/network/model/nix-vector.h ns-3.19/src/network/model/nix-vector.h
--- ns-3.18.1/src/network/model/nix-vector.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/nix-vector.h	2013-12-20 09:44:50.000000000 -0800
@@ -75,6 +75,8 @@
    */
   NixVector (const NixVector &o);
   /**
+   * \return a reference to the assignee
+   *
    * \param o the NixVector to copy to a new NixVector using the
    *          equals operator
    */
diff -Naur ns-3.18.1/src/network/model/node.cc ns-3.19/src/network/model/node.cc
--- ns-3.18.1/src/network/model/node.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/node.cc	2013-12-20 09:44:50.000000000 -0800
@@ -36,7 +36,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Node);
+NS_OBJECT_ENSURE_REGISTERED (Node)
+  ;
 
 GlobalValue g_checksumEnabled  = GlobalValue ("ChecksumEnabled",
                                               "A global switch to enable all checksums for all protocols",
diff -Naur ns-3.18.1/src/network/model/node-list.cc ns-3.19/src/network/model/node-list.cc
--- ns-3.18.1/src/network/model/node-list.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/node-list.cc	2013-12-20 09:44:50.000000000 -0800
@@ -29,7 +29,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("NodeList");
+NS_LOG_COMPONENT_DEFINE ("NodeList")
+  ;
 
 /**
  * \brief private implementation detail of the NodeList API.
@@ -56,7 +57,8 @@
   std::vector<Ptr<Node> > m_nodes;
 };
 
-NS_OBJECT_ENSURE_REGISTERED (NodeListPriv);
+NS_OBJECT_ENSURE_REGISTERED (NodeListPriv)
+  ;
 
 TypeId 
 NodeListPriv::GetTypeId (void)
diff -Naur ns-3.18.1/src/network/model/packet-tag-list.cc ns-3.19/src/network/model/packet-tag-list.cc
--- ns-3.18.1/src/network/model/packet-tag-list.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/packet-tag-list.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,8 @@
 #include "ns3/log.h"
 #include <cstring>
 
-NS_LOG_COMPONENT_DEFINE ("PacketTagList");
+NS_LOG_COMPONENT_DEFINE ("PacketTagList")
+  ;
 
 namespace ns3 {
 
diff -Naur ns-3.18.1/src/network/model/packet-tag-list.h ns-3.19/src/network/model/packet-tag-list.h
--- ns-3.18.1/src/network/model/packet-tag-list.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/packet-tag-list.h	2013-12-20 09:44:50.000000000 -0800
@@ -177,7 +177,7 @@
    * \param [in] o The PacketTagList to copy.
    *
    * This makes a light-weight copy by #RemoveAll, then
-   * pointing to the same #struct TagData as \pname{o}.
+   * pointing to the same \ref TagData as \pname{o}.
    */
   inline PacketTagList (PacketTagList const &o);
   /**
@@ -186,7 +186,7 @@
    * \param [in] o The PacketTagList to copy.
    *
    * This makes a light-weight copy by #RemoveAll, then
-   * pointing to the same #struct TagData as \pname{o}.
+   * pointing to the same \ref TagData as \pname{o}.
    */
   inline PacketTagList &operator = (PacketTagList const &o);
   /**
@@ -287,7 +287,7 @@
   bool ReplaceWriter (Tag & tag, bool preMerge, struct TagData * cur, struct TagData ** prevNext);
 
   /**
-   * Pointer to first #struct TagData on the list
+   * Pointer to first \ref TagData on the list
    */
   struct TagData *m_next;
 };
diff -Naur ns-3.18.1/src/network/model/socket.cc ns-3.19/src/network/model/socket.cc
--- ns-3.18.1/src/network/model/socket.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/socket.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Socket);
+NS_OBJECT_ENSURE_REGISTERED (Socket)
+  ;
 
 TypeId
 Socket::GetTypeId (void)
@@ -532,7 +533,8 @@
   return m_address;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (SocketAddressTag);
+NS_OBJECT_ENSURE_REGISTERED (SocketAddressTag)
+  ;
 
 TypeId
 SocketAddressTag::GetTypeId (void)
@@ -592,7 +594,8 @@
   return m_ttl;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (SocketIpTtlTag);
+NS_OBJECT_ENSURE_REGISTERED (SocketIpTtlTag)
+  ;
 
 TypeId
 SocketIpTtlTag::GetTypeId (void)
@@ -650,7 +653,8 @@
   return m_hopLimit;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (SocketIpv6HopLimitTag);
+NS_OBJECT_ENSURE_REGISTERED (SocketIpv6HopLimitTag)
+  ;
 
 TypeId
 SocketIpv6HopLimitTag::GetTypeId (void)
@@ -711,7 +715,8 @@
   return m_dontFragment;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (SocketSetDontFragmentTag);
+NS_OBJECT_ENSURE_REGISTERED (SocketSetDontFragmentTag)
+  ;
 
 TypeId 
 SocketSetDontFragmentTag::GetTypeId (void)
diff -Naur ns-3.18.1/src/network/model/socket-factory.cc ns-3.19/src/network/model/socket-factory.cc
--- ns-3.18.1/src/network/model/socket-factory.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/socket-factory.cc	2013-12-20 09:44:50.000000000 -0800
@@ -24,7 +24,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (SocketFactory);
+NS_OBJECT_ENSURE_REGISTERED (SocketFactory)
+  ;
 
 TypeId SocketFactory::GetTypeId (void)
 {
diff -Naur ns-3.18.1/src/network/model/socket.h ns-3.19/src/network/model/socket.h
--- ns-3.18.1/src/network/model/socket.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/socket.h	2013-12-20 09:44:50.000000000 -0800
@@ -66,11 +66,19 @@
 class Socket : public Object
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   Socket (void);
   virtual ~Socket (void);
 
+  /**
+   * \enum SocketErrno
+   * \brief Enumeration of the possible errors returned by a socket.
+   */
   enum SocketErrno {
     ERROR_NOTERROR,
     ERROR_ISCONN,
@@ -89,6 +97,10 @@
     SOCKET_ERRNO_LAST
   };
 
+  /**
+   * \enum SocketType
+   * \brief Enumeration of the possible socket types.
+   */
   enum SocketType {
     NS3_SOCK_STREAM,
     NS3_SOCK_SEQPACKET,
@@ -107,6 +119,8 @@
    */
   static Ptr<Socket> CreateSocket (Ptr<Node> node, TypeId tid);
   /**
+   * \brief Get last error number.
+   *
    * \return the errno associated to the last call which failed in this
    *         socket. Each socket's errno is initialized to zero
    *         when the socket is created.
@@ -117,7 +131,8 @@
     */
   virtual enum Socket::SocketType GetSocketType (void) const = 0;
   /**
-   * \returns the node this socket is associated with.
+   * \brief Return the node this socket is associated with.
+   * \returns the node
    */
   virtual Ptr<Node> GetNode (void) const = 0;
   /**
@@ -253,6 +268,7 @@
   /**
    * \brief Initiate a connection to a remote host
    * \param address Address of remote.
+   * \returns 0 on success, -1 on error (in which case errno is set).
    */
   virtual int Connect (const Address &address) = 0;
 
@@ -271,6 +287,8 @@
    *
    * For stream sockets, this returns the available space in bytes
    * left in the transmit buffer.
+   *
+   * \returns The number of bytes which can be sent in a single Send call.
    */
   virtual uint32_t GetTxAvailable (void) const = 0;
  
@@ -341,6 +359,9 @@
    * Return number of bytes which can be returned from one or 
    * multiple calls to Recv.
    * Must be possible to call this method from the Recv callback.
+   *
+   * \returns the number of bytes which can be returned from one or
+   *          multiple Recv calls.
    */
   virtual uint32_t GetRxAvailable (void) const = 0;
 
@@ -446,6 +467,8 @@
    * second parameter
    * \param size the number of bytes to copy from the buffer
    * \param flags Socket control flags
+   * \returns the number of bytes accepted for transmission if no error
+   *          occurs, and -1 otherwise.
    */
   int Send (const uint8_t* buf, uint32_t size, uint32_t flags);
 
@@ -531,6 +554,7 @@
   int RecvFrom (uint8_t* buf, uint32_t size, uint32_t flags,
                 Address &fromAddress);
   /**
+   * \brief Get socket address.
    * \param address the address name this socket is associated with.
    * \returns 0 if success, -1 otherwise
    */
@@ -613,7 +637,7 @@
    */
   bool IsRecvPktInfo () const;
 
-  /*
+  /**
    * \brief Manually set IP Type of Service field
    * 
    * This method corresponds to using setsockopt () IP_TOS of
@@ -626,7 +650,7 @@
    */
   void SetIpTos (uint8_t ipTos);
 
-  /*
+  /**
    * \brief Query the value of IP Type of Service of this socket
    *
    * This method corresponds to using getsockopt () IP_TOS of real network
@@ -655,11 +679,11 @@
    * This method corresponds to using getsockopt () IP_RECVTOS of real
    * network or BSD sockets.
    *
-   * \return Wheter the IP_RECVTOS is set
+   * \return Whether the IP_RECVTOS is set
    */
   bool IsIpRecvTos (void) const;
 
-  /*
+  /**
    * \brief Manually set IPv6 Traffic Class field
    * 
    * This method corresponds to using setsockopt () IPV6_TCLASS of
@@ -671,7 +695,7 @@
    */
   void SetIpv6Tclass (int ipTclass);
 
-  /*
+  /**
    * \brief Query the value of IPv6 Traffic Class field of this socket
    *
    * This method corresponds to using getsockopt () IPV6_TCLASS of real network
@@ -700,11 +724,11 @@
    * This method corresponds to using getsockopt () IPV6_RECVTCLASS of real
    * network or BSD sockets.
    *
-   * \return Wheter the IPV6_RECVTCLASS is set
+   * \return Whether the IPV6_RECVTCLASS is set
    */
   bool IsIpv6RecvTclass (void) const;
 
-  /*
+  /**
    * \brief Manually set IP Time to Live field
    * 
    * This method corresponds to using setsockopt () IP_TTL of
@@ -714,7 +738,7 @@
    */
   virtual void SetIpTtl (uint8_t ipTtl);
 
-  /*
+  /**
    * \brief Query the value of IP Time to Live field of this socket
    *
    * This method corresponds to using getsockopt () IP_TTL of real network
@@ -743,11 +767,11 @@
    * This method corresponds to using getsockopt () IP_RECVTTL of real
    * network or BSD sockets.
    *
-   * \return Wheter the IP_RECVTTL is set
+   * \return Whether the IP_RECVTTL is set
    */
   bool IsIpRecvTtl (void) const;
 
-  /*
+  /**
    * \brief Manually set IPv6 Hop Limit
    * 
    * This method corresponds to using setsockopt () IPV6_HOPLIMIT of
@@ -757,7 +781,7 @@
    */
   virtual void SetIpv6HopLimit (uint8_t ipHopLimit);
 
-  /*
+  /**
    * \brief Query the value of IP Hop Limit field of this socket
    *
    * This method corresponds to using getsockopt () IPV6_HOPLIMIT of real network
@@ -786,58 +810,135 @@
    * This method corresponds to using getsockopt () IPV6_RECVHOPLIMIT of real
    * network or BSD sockets.
    *
-   * \return Wheter the IPV6_RECVHOPLIMIT is set
+   * \return Whether the IPV6_RECVHOPLIMIT is set
    */
   bool IsIpv6RecvHopLimit (void) const;
  
 protected:
+  /**
+   * \brief Notify through the callback (if set) that the connection has been
+   *        established.
+   */
   void NotifyConnectionSucceeded (void);
+
+  /**
+   * \brief Notify through the callback (if set) that the connection has not been
+   *        established due to an error.
+   */
   void NotifyConnectionFailed (void);
+
+  /**
+   * \brief Notify through the callback (if set) that the connection has been
+   *        closed.
+   */
   void NotifyNormalClose (void);
+
+  /**
+   * \brief Notify through the callback (if set) that the connection has been
+   *        closed due to an error.
+   */
   void NotifyErrorClose (void);
+
+  /**
+   * \brief Notify through the callback (if set) that an incoming connection
+   *        is being requested by a remote host.
+   *
+   * This function returns true by default (i.e., accept all the incoming connections).
+   * The callback (if set) might restrict this behaviour by returning zero for a
+   * connection that should be refused.
+   *
+   * \param from the address the connection is incoming from
+   * \returns true if the connection must be accepted, false otherwise.
+   */
   bool NotifyConnectionRequest (const Address &from);
+
+  /**
+   * \brief Notify through the callback (if set) that a new connection has been
+   *        created.
+   */
   void NotifyNewConnectionCreated (Ptr<Socket> socket, const Address &from);
+
+  /**
+   * \brief Notify through the callback (if set) that some data have been sent.
+   *
+   * \param size number of sent bytes.
+   */
   void NotifyDataSent (uint32_t size);
+
+  /**
+   * \brief Notify through the callback (if set) that some data have been sent.
+   *
+   * \param spaceAvailable the number of bytes available in the transmission buffer.
+   */
   void NotifySend (uint32_t spaceAvailable);
+
+  /**
+   * \brief Notify through the callback (if set) that some data have been received.
+   */
   void NotifyDataRecv (void);
+
+  // inherited function, no doc necessary
   virtual void DoDispose (void);
 
+  /**
+   * \brief Checks if the socket has a specific IPv4 ToS set
+   *
+   * \returns true if the socket has a IPv4 ToS set, false otherwise.
+   */
   bool IsManualIpTos (void) const;
+
+  /**
+   * \brief Checks if the socket has a specific IPv6 Tclass set
+   *
+   * \returns true if the socket has a IPv6 Tclass set, false otherwise.
+   */
   bool IsManualIpv6Tclass (void) const;
+
+  /**
+   * \brief Checks if the socket has a specific IPv4 TTL set
+   *
+   * \returns true if the socket has a IPv4 TTL set, false otherwise.
+   */
   bool IsManualIpTtl (void) const;
+
+  /**
+   * \brief Checks if the socket has a specific IPv6 Hop Limit set
+   *
+   * \returns true if the socket has a IPv6 Hop Limit set, false otherwise.
+   */
   bool IsManualIpv6HopLimit (void) const;
 
-  Ptr<NetDevice> m_boundnetdevice;
-  bool m_recvPktInfo;
+  Ptr<NetDevice> m_boundnetdevice; //!< the device this socket is bound to (might be null).
+  bool m_recvPktInfo; //!< if the socket should add packet info tags to the packet forwarded to L4.
 
 private:
-  Callback<void, Ptr<Socket> >                   m_connectionSucceeded;
-  Callback<void, Ptr<Socket> >                   m_connectionFailed;
-  Callback<void, Ptr<Socket> >                   m_normalClose;
-  Callback<void, Ptr<Socket> >                   m_errorClose;
-  Callback<bool, Ptr<Socket>, const Address &>   m_connectionRequest;
-  Callback<void, Ptr<Socket>, const Address&>    m_newConnectionCreated;
-  Callback<void, Ptr<Socket>, uint32_t>          m_dataSent;
-  Callback<void, Ptr<Socket>, uint32_t >         m_sendCb;
-  Callback<void, Ptr<Socket> >                   m_receivedData;
+  Callback<void, Ptr<Socket> >                   m_connectionSucceeded;  //!< connection succeeded callback
+  Callback<void, Ptr<Socket> >                   m_connectionFailed;     //!< connection failed callback
+  Callback<void, Ptr<Socket> >                   m_normalClose;          //!< connection closed callback
+  Callback<void, Ptr<Socket> >                   m_errorClose;           //!< connection closed due to errors callback
+  Callback<bool, Ptr<Socket>, const Address &>   m_connectionRequest;    //!< connection request callback
+  Callback<void, Ptr<Socket>, const Address&>    m_newConnectionCreated; //!< connection created callback
+  Callback<void, Ptr<Socket>, uint32_t>          m_dataSent;             //!< data sent callback
+  Callback<void, Ptr<Socket>, uint32_t >         m_sendCb;               //!< packet sent callback
+  Callback<void, Ptr<Socket> >                   m_receivedData;         //!< data received callback
 
   //IPv4 options
-  bool m_manualIpTos;
-  bool m_manualIpTtl;
-  bool m_ipRecvTos;
-  bool m_ipRecvTtl;
+  bool m_manualIpTos; //!< socket has IPv4 TOS set
+  bool m_manualIpTtl; //!< socket has IPv4 TTL set
+  bool m_ipRecvTos;   //!< socket forwards IPv4 TOS tag to L4
+  bool m_ipRecvTtl;   //!< socket forwards IPv4 TTL tag to L4
 
-  uint8_t m_ipTos;
-  uint8_t m_ipTtl;
+  uint8_t m_ipTos; //!< the socket IPv4 TOS
+  uint8_t m_ipTtl; //!< the socket IPv4 TTL
 
   //IPv6 options
-  bool m_manualIpv6Tclass;
-  bool m_manualIpv6HopLimit;
-  bool m_ipv6RecvTclass;
-  bool m_ipv6RecvHopLimit;
+  bool m_manualIpv6Tclass;    //!< socket has IPv6 Tclass set
+  bool m_manualIpv6HopLimit;  //!< socket has IPv6 Hop Limit set
+  bool m_ipv6RecvTclass;      //!< socket forwards IPv6 Tclass tag to L4
+  bool m_ipv6RecvHopLimit;    //!< socket forwards IPv6 Hop Limit tag to L4
 
-  uint8_t m_ipv6Tclass;
-  uint8_t m_ipv6HopLimit;
+  uint8_t m_ipv6Tclass;     //!< the socket IPv6 Tclass
+  uint8_t m_ipv6HopLimit;   //!< the socket IPv6 Hop Limit
 };
 
 /**
@@ -848,18 +949,44 @@
 {
 public:
   SocketAddressTag ();
+
+  /**
+   * \brief Set the tag's address
+   *
+   * \param addr the address
+   */
   void SetAddress (Address addr);
+
+  /**
+   * \brief Get the tag's address
+   *
+   * \returns the address
+   */
   Address GetAddress (void) const;
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
+
+  // inherited function, no need to doc.
   virtual TypeId GetInstanceTypeId (void) const;
+
+  // inherited function, no need to doc.
   virtual uint32_t GetSerializedSize (void) const;
+
+  // inherited function, no need to doc.
   virtual void Serialize (TagBuffer i) const;
+
+  // inherited function, no need to doc.
   virtual void Deserialize (TagBuffer i);
+
+  // inherited function, no need to doc.
   virtual void Print (std::ostream &os) const;
 
 private:
-  Address m_address;
+  Address m_address; //!< the address carried by the tag
 };
 
 /**
@@ -870,18 +997,44 @@
 {
 public:
   SocketIpTtlTag ();
+
+  /**
+   * \brief Set the tag's TTL
+   *
+   * \param ttl the TTL
+   */
   void SetTtl (uint8_t ttl);
+
+  /**
+   * \brief Get the tag's TTL
+   *
+   * \returns the TTL
+   */
   uint8_t GetTtl (void) const;
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
+
+  // inherited function, no need to doc.
   virtual TypeId GetInstanceTypeId (void) const;
+
+  // inherited function, no need to doc.
   virtual uint32_t GetSerializedSize (void) const;
+
+  // inherited function, no need to doc.
   virtual void Serialize (TagBuffer i) const;
+
+  // inherited function, no need to doc.
   virtual void Deserialize (TagBuffer i);
+
+  // inherited function, no need to doc.
   virtual void Print (std::ostream &os) const;
 
 private:
-  uint8_t m_ttl;
+  uint8_t m_ttl; //!< the ttl carried by the tag
 };
 
 /**
@@ -892,82 +1045,188 @@
 {
 public:
   SocketIpv6HopLimitTag ();
+
+  /**
+   * \brief Set the tag's Hop Limit
+   *
+   * \param hopLimit the Hop Limit
+   */
   void SetHopLimit (uint8_t hopLimit);
+
+  /**
+   * \brief Get the tag's Hop Limit
+   *
+   * \returns the Hop Limit
+   */
   uint8_t GetHopLimit (void) const;
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
+
+  // inherited function, no need to doc.
   virtual TypeId GetInstanceTypeId (void) const;
+
+  // inherited function, no need to doc.
   virtual uint32_t GetSerializedSize (void) const;
+
+  // inherited function, no need to doc.
   virtual void Serialize (TagBuffer i) const;
+
+  // inherited function, no need to doc.
   virtual void Deserialize (TagBuffer i);
+
+  // inherited function, no need to doc.
   virtual void Print (std::ostream &os) const;
 
 private:
-  uint8_t m_hopLimit;
+  uint8_t m_hopLimit; //!< the Hop Limit carried by the tag
 };
 
 /**
- * \brief indicated whether packets should be sent out with
- * the DF flag set.
+ * \brief indicates whether packets should be sent out with
+ * the DF (Don't Fragment) flag set.
  */
 class SocketSetDontFragmentTag : public Tag
 {
 public:
   SocketSetDontFragmentTag ();
+
+  /**
+   * \brief Enables the DF (Don't Fragment) flag
+   */
   void Enable (void);
+
+  /**
+   * \brief Disables the DF (Don't Fragment) flag
+   */
   void Disable (void);
+
+  /**
+   * \brief Checks if the DF (Don't Fragment) flag is set
+   *
+   * \returns true if DF is set.
+   */
   bool IsEnabled (void) const;
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
+
+  // inherited function, no need to doc.
   virtual TypeId GetInstanceTypeId (void) const;
+
+  // inherited function, no need to doc.
   virtual uint32_t GetSerializedSize (void) const;
+
+  // inherited function, no need to doc.
   virtual void Serialize (TagBuffer i) const;
+
+  // inherited function, no need to doc.
   virtual void Deserialize (TagBuffer i);
+
+  // inherited function, no need to doc.
   virtual void Print (std::ostream &os) const;
 private:
-  bool m_dontFragment;
+  bool m_dontFragment; //!< DF bit value for outgoing packets.
 };
 
-/*
- * \brief indicated whether the socket has IP_TOS set.
+/**
+ * \brief indicates whether the socket has IP_TOS set.
  * This tag is for IPv4 socket.
  */
 class SocketIpTosTag : public Tag
 {
 public:
   SocketIpTosTag ();
+
+  /**
+   * \brief Set the tag's TOS
+   *
+   * \param tos the TOS
+   */
   void SetTos (uint8_t tos);
+
+  /**
+   * \brief Get the tag's TOS
+   *
+   * \returns the TOS
+   */
   uint8_t GetTos (void) const;
   
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
+
+  // inherited function, no need to doc.
   virtual TypeId GetInstanceTypeId (void) const;
+
+  // inherited function, no need to doc.
   virtual uint32_t GetSerializedSize (void) const;
+
+  // inherited function, no need to doc.
   virtual void Serialize (TagBuffer i) const;
+
+  // inherited function, no need to doc.
   virtual void Deserialize (TagBuffer i);
+
+  // inherited function, no need to doc.
   virtual void Print (std::ostream &os) const;
 private:
-  uint8_t m_ipTos;
+  uint8_t m_ipTos;  //!< the TOS carried by the tag
 };
 
-/*
- * \brief indicated whether the socket has IPV6_TCLASS set.
+/**
+ * \brief indicates whether the socket has IPV6_TCLASS set.
  * This tag is for IPv6 socket.
  */
 class SocketIpv6TclassTag : public Tag
 {
 public:
   SocketIpv6TclassTag ();
+
+  /**
+   * \brief Set the tag's Tclass
+   *
+   * \param tclass the Tclass
+   */
   void SetTclass (uint8_t tclass);
+
+  /**
+   * \brief Get the tag's Tclass
+   *
+   * \returns the Tclass
+   */
   uint8_t GetTclass (void) const;
   
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
+
+  // inherited function, no need to doc.
   virtual TypeId GetInstanceTypeId (void) const;
+
+  // inherited function, no need to doc.
   virtual uint32_t GetSerializedSize (void) const;
+
+  // inherited function, no need to doc.
   virtual void Serialize (TagBuffer i) const;
+
+  // inherited function, no need to doc.
   virtual void Deserialize (TagBuffer i);
+
+  // inherited function, no need to doc.
   virtual void Print (std::ostream &os) const;
 private:
-  uint8_t m_ipv6Tclass;
+  uint8_t m_ipv6Tclass; //!< the Tclass carried by the tag
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/network/model/tag.cc ns-3.19/src/network/model/tag.cc
--- ns-3.18.1/src/network/model/tag.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/tag.cc	2013-12-20 09:44:50.000000000 -0800
@@ -21,7 +21,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Tag);
+NS_OBJECT_ENSURE_REGISTERED (Tag)
+  ;
 
 TypeId 
 Tag::GetTypeId (void)
diff -Naur ns-3.18.1/src/network/model/trailer.cc ns-3.19/src/network/model/trailer.cc
--- ns-3.18.1/src/network/model/trailer.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/model/trailer.cc	2013-12-20 09:44:50.000000000 -0800
@@ -5,7 +5,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Trailer);
+NS_OBJECT_ENSURE_REGISTERED (Trailer)
+  ;
 
 Trailer::~Trailer ()
 {
diff -Naur ns-3.18.1/src/network/utils/address-utils.h ns-3.19/src/network/utils/address-utils.h
--- ns-3.18.1/src/network/utils/address-utils.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/address-utils.h	2013-12-20 09:44:50.000000000 -0800
@@ -30,18 +30,90 @@
 
 namespace ns3 {
 
+/**
+ * \brief Write an Ipv4Address to a Buffer
+ * \param i a reference to the buffer to write to
+ * \param ad the Ipv4Address
+ */
 void WriteTo (Buffer::Iterator &i, Ipv4Address ad);
+
+/**
+ * \brief Write an Ipv4Address to a Buffer
+ * \param i a reference to the buffer to write to
+ * \param ad the Ipv6Address
+ */
 void WriteTo (Buffer::Iterator &i, Ipv6Address ad);
+
+/**
+ * \brief Write an Address to a Buffer
+ * \param i a reference to the buffer to write to
+ * \param ad the Address
+ */
 void WriteTo (Buffer::Iterator &i, const Address &ad);
+
+/**
+ * \brief Write an Mac64Address to a Buffer
+ * \param i a reference to the buffer to write to
+ * \param ad the Mac64Address
+ */
 void WriteTo (Buffer::Iterator &i, Mac64Address ad);
+
+/**
+ * \brief Write an Mac48Address to a Buffer
+ * \param i a reference to the buffer to write to
+ * \param ad the Mac48Address
+ */
 void WriteTo (Buffer::Iterator &i, Mac48Address ad);
+
+/**
+ * \brief Write an Mac16Address to a Buffer
+ * \param i a reference to the buffer to write to
+ * \param ad the Mac16Address
+ */
 void WriteTo (Buffer::Iterator &i, Mac16Address ad);
 
+
+/**
+ * \brief Read an Ipv4Address from a Buffer
+ * \param i a reference to the buffer to read from
+ * \param ad a reference to the Ipv4Address to be read
+ */
 void ReadFrom (Buffer::Iterator &i, Ipv4Address &ad);
+
+/**
+ * \brief Read an Ipv6Address from a Buffer
+ * \param i a reference to the buffer to read from
+ * \param ad a reference to the Ipv6Address to be read
+ */
 void ReadFrom (Buffer::Iterator &i, Ipv6Address &ad);
+
+/**
+ * \brief Read an Address from a Buffer
+ * \param i a reference to the buffer to read from
+ * \param ad a reference to the Address to be read
+ * \param len the length of the Address
+ */
 void ReadFrom (Buffer::Iterator &i, Address &ad, uint32_t len);
+
+/**
+ * \brief Read a Mac64Address from a Buffer
+ * \param i a reference to the buffer to read from
+ * \param ad a reference to the Mac64Address to be read
+ */
 void ReadFrom (Buffer::Iterator &i, Mac64Address &ad);
+
+/**
+ * \brief Read a Mac48Address from a Buffer
+ * \param i a reference to the buffer to read from
+ * \param ad a reference to the Mac48Address to be read
+ */
 void ReadFrom (Buffer::Iterator &i, Mac48Address &ad);
+
+/**
+ * \brief Read a Mac16Address from a Buffer
+ * \param i a reference to the buffer to read from
+ * \param ad a reference to the Mac16Address to be read
+ */
 void ReadFrom (Buffer::Iterator &i, Mac16Address &ad);
 
 namespace addressUtils {
diff -Naur ns-3.18.1/src/network/utils/ascii-file.h ns-3.19/src/network/utils/ascii-file.h
--- ns-3.18.1/src/network/utils/ascii-file.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/ascii-file.h	2013-12-20 09:44:50.000000000 -0800
@@ -30,10 +30,11 @@
 namespace ns3 {
 
 
-/*
- * A class representing an ascii file.
+/**
+ * \brief A class representing an ascii file.
+ *
+ * This class represents an ascii file
  */
-
 class AsciiFile
 {
 public:
@@ -77,7 +78,7 @@
    * 
    * \param  f1         First ASCII file name
    * \param  f2         Second ASCII file name
-   * \param  lineNumbe   [out] Line number of first different line.
+   * \param  lineNumber   [out] Line number of first different line.
    */
   static bool Diff (std::string const & f1,
 		    std::string const & f2, 
diff -Naur ns-3.18.1/src/network/utils/crc32.cc ns-3.19/src/network/utils/crc32.cc
--- ns-3.18.1/src/network/utils/crc32.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/network/utils/crc32.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,80 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 PIOTR JURKIEWICZ
+ *
+ * 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: Piotr Jurkiewicz <piotr.jerzy.jurkiewicz@gmail.com>
+ */
+/*
+ * Note:  CRC tables such as below are found in many projects;
+ * below is the oldest reference (and copyright) to original work 
+ * of this nature that we could find.
+ *
+ * COPYRIGHT (C) 1986 Gary S. Brown.  You may use this program, or
+ * code or tables extracted from it, as desired without restriction.
+ */
+#include <stdint.h>
+
+namespace ns3 {
+
+static uint32_t crc32table[256] = {
+0x00000000,0x77073096,0xEE0E612C,0x990951BA,0x076DC419,0x706AF48F,0xE963A535,0x9E6495A3,
+0x0EDB8832,0x79DCB8A4,0xE0D5E91E,0x97D2D988,0x09B64C2B,0x7EB17CBD,0xE7B82D07,0x90BF1D91,
+0x1DB71064,0x6AB020F2,0xF3B97148,0x84BE41DE,0x1ADAD47D,0x6DDDE4EB,0xF4D4B551,0x83D385C7,
+0x136C9856,0x646BA8C0,0xFD62F97A,0x8A65C9EC,0x14015C4F,0x63066CD9,0xFA0F3D63,0x8D080DF5,
+0x3B6E20C8,0x4C69105E,0xD56041E4,0xA2677172,0x3C03E4D1,0x4B04D447,0xD20D85FD,0xA50AB56B,
+0x35B5A8FA,0x42B2986C,0xDBBBC9D6,0xACBCF940,0x32D86CE3,0x45DF5C75,0xDCD60DCF,0xABD13D59,
+0x26D930AC,0x51DE003A,0xC8D75180,0xBFD06116,0x21B4F4B5,0x56B3C423,0xCFBA9599,0xB8BDA50F,
+0x2802B89E,0x5F058808,0xC60CD9B2,0xB10BE924,0x2F6F7C87,0x58684C11,0xC1611DAB,0xB6662D3D,
+0x76DC4190,0x01DB7106,0x98D220BC,0xEFD5102A,0x71B18589,0x06B6B51F,0x9FBFE4A5,0xE8B8D433,
+0x7807C9A2,0x0F00F934,0x9609A88E,0xE10E9818,0x7F6A0DBB,0x086D3D2D,0x91646C97,0xE6635C01,
+0x6B6B51F4,0x1C6C6162,0x856530D8,0xF262004E,0x6C0695ED,0x1B01A57B,0x8208F4C1,0xF50FC457,
+0x65B0D9C6,0x12B7E950,0x8BBEB8EA,0xFCB9887C,0x62DD1DDF,0x15DA2D49,0x8CD37CF3,0xFBD44C65,
+0x4DB26158,0x3AB551CE,0xA3BC0074,0xD4BB30E2,0x4ADFA541,0x3DD895D7,0xA4D1C46D,0xD3D6F4FB,
+0x4369E96A,0x346ED9FC,0xAD678846,0xDA60B8D0,0x44042D73,0x33031DE5,0xAA0A4C5F,0xDD0D7CC9,
+0x5005713C,0x270241AA,0xBE0B1010,0xC90C2086,0x5768B525,0x206F85B3,0xB966D409,0xCE61E49F,
+0x5EDEF90E,0x29D9C998,0xB0D09822,0xC7D7A8B4,0x59B33D17,0x2EB40D81,0xB7BD5C3B,0xC0BA6CAD,
+0xEDB88320,0x9ABFB3B6,0x03B6E20C,0x74B1D29A,0xEAD54739,0x9DD277AF,0x04DB2615,0x73DC1683,
+0xE3630B12,0x94643B84,0x0D6D6A3E,0x7A6A5AA8,0xE40ECF0B,0x9309FF9D,0x0A00AE27,0x7D079EB1,
+0xF00F9344,0x8708A3D2,0x1E01F268,0x6906C2FE,0xF762575D,0x806567CB,0x196C3671,0x6E6B06E7,
+0xFED41B76,0x89D32BE0,0x10DA7A5A,0x67DD4ACC,0xF9B9DF6F,0x8EBEEFF9,0x17B7BE43,0x60B08ED5,
+0xD6D6A3E8,0xA1D1937E,0x38D8C2C4,0x4FDFF252,0xD1BB67F1,0xA6BC5767,0x3FB506DD,0x48B2364B,
+0xD80D2BDA,0xAF0A1B4C,0x36034AF6,0x41047A60,0xDF60EFC3,0xA867DF55,0x316E8EEF,0x4669BE79,
+0xCB61B38C,0xBC66831A,0x256FD2A0,0x5268E236,0xCC0C7795,0xBB0B4703,0x220216B9,0x5505262F,
+0xC5BA3BBE,0xB2BD0B28,0x2BB45A92,0x5CB36A04,0xC2D7FFA7,0xB5D0CF31,0x2CD99E8B,0x5BDEAE1D,
+0x9B64C2B0,0xEC63F226,0x756AA39C,0x026D930A,0x9C0906A9,0xEB0E363F,0x72076785,0x05005713,
+0x95BF4A82,0xE2B87A14,0x7BB12BAE,0x0CB61B38,0x92D28E9B,0xE5D5BE0D,0x7CDCEFB7,0x0BDBDF21,
+0x86D3D2D4,0xF1D4E242,0x68DDB3F8,0x1FDA836E,0x81BE16CD,0xF6B9265B,0x6FB077E1,0x18B74777,
+0x88085AE6,0xFF0F6A70,0x66063BCA,0x11010B5C,0x8F659EFF,0xF862AE69,0x616BFFD3,0x166CCF45,
+0xA00AE278,0xD70DD2EE,0x4E048354,0x3903B3C2,0xA7672661,0xD06016F7,0x4969474D,0x3E6E77DB,
+0xAED16A4A,0xD9D65ADC,0x40DF0B66,0x37D83BF0,0xA9BCAE53,0xDEBB9EC5,0x47B2CF7F,0x30B5FFE9,
+0xBDBDF21C,0xCABAC28A,0x53B39330,0x24B4A3A6,0xBAD03605,0xCDD70693,0x54DE5729,0x23D967BF,
+0xB3667A2E,0xC4614AB8,0x5D681B02,0x2A6F2B94,0xB40BBE37,0xC30C8EA1,0x5A05DF1B,0x2D02EF8D 
+};
+
+uint32_t
+CRC32Calculate (const uint8_t *data, int length)
+{
+  uint32_t crc = 0xffffffff;
+
+  while (length--)
+    {
+      crc = (crc >> 8) ^ crc32table[(crc & 0xFF) ^ *data++];
+    }
+  return ~crc;
+}
+
+} // namespace ns3
+
diff -Naur ns-3.18.1/src/network/utils/crc32.h ns-3.19/src/network/utils/crc32.h
--- ns-3.18.1/src/network/utils/crc32.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/network/utils/crc32.h	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,36 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 PIOTR JURKIEWICZ
+ *
+ * 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: Piotr Jurkiewicz <piotr.jerzy.jurkiewicz@gmail.com>
+ */
+#ifndef CRC32_H
+#define CRC32_H
+#include <stdint.h>
+
+namespace ns3 {
+
+/**
+ * \param data buffer to calculate the checksum for
+ * \param length the length of the buffer (bytes)
+ * \returns the computed crc.
+ *
+ */
+uint32_t CRC32Calculate (const uint8_t *data, int length);
+
+} // namespace ns3
+
+#endif
diff -Naur ns-3.18.1/src/network/utils/data-rate.cc ns-3.19/src/network/utils/data-rate.cc
--- ns-3.18.1/src/network/utils/data-rate.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/data-rate.cc	2013-12-20 09:44:50.000000000 -0800
@@ -182,7 +182,7 @@
 
 namespace ns3 {
 
-ATTRIBUTE_HELPER_CPP (DataRate);
+ATTRIBUTE_HELPER_CPP (DataRate);  /// Macro to make help make data-rate an ns-3 attribute
 
 DataRate::DataRate ()
   : m_bps (0)
@@ -248,11 +248,13 @@
     }
 }
 
+/* For printing of data rate */
 std::ostream &operator << (std::ostream &os, const DataRate &rate)
 {
   os << rate.GetBitRate () << "bps";
   return os;
 }
+/* Initialize a data rate from an input stream */
 std::istream &operator >> (std::istream &is, DataRate &rate)
 {
   std::string value;
@@ -267,13 +269,26 @@
   return is;
 }
 
-
-
+/**
+  * \brief Multiply datarate by a time value
+  *
+  * Calculates the number of bits that have been transmitted over a period of time
+  * \param lhs rate
+  * \param rhs time
+  * \return the number of bits over the period of time
+  */
 double operator* (const DataRate& lhs, const Time& rhs)
 {
   return rhs.GetSeconds ()*lhs.GetBitRate ();
 }
-
+/**
+  * \brief Multiply time value by a data rate
+  *
+  * Calculates the number of bits that have been transmitted over a period of time
+  * \param lhs time
+  * \param rhs rate
+  * \return the number of bits over the period of time
+  */
 double operator* (const Time& lhs, const DataRate& rhs)
 {
   return lhs.GetSeconds ()*rhs.GetBitRate ();
diff -Naur ns-3.18.1/src/network/utils/data-rate.h ns-3.19/src/network/utils/data-rate.h
--- ns-3.18.1/src/network/utils/data-rate.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/data-rate.h	2013-12-20 09:44:50.000000000 -0800
@@ -81,13 +81,66 @@
    * \param bps bit/s value
    */
   DataRate (uint64_t bps);
+  /**
+   * \brief String constructor
+   *
+   * Construct a data rate from a string.  Many different unit strings are supported
+   * 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
+   * 
+   * 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 
+   *
+   * \param rate string representing the desired rate
+   */
   DataRate (std::string rate);
 
+  /**
+   * \return true if this rate is less than rhs
+   *
+   * \param rhs the datarate to compare to this datarate
+   */  
   bool operator <  (const DataRate& rhs) const;
+
+  /**
+   * \return true if this rate is less than or equal to rhs
+   *
+   * \param rhs the datarate to compare to this datarate
+   */ 
   bool operator <= (const DataRate& rhs) const;
+  
+  /**
+   * \return true if this rate is greater than rhs
+   *
+   * \param rhs the datarate to compare to this datarate
+   */   
   bool operator >  (const DataRate& rhs) const;
+  
+  /**
+   * \return true if this rate is greather than or equal to rhs
+   *
+   * \param rhs the datarate to compare to this datarate
+   */   
   bool operator >= (const DataRate& rhs) const;
+  
+  /**
+   * \return true if this rate is equal to rhs
+   *
+   * \param rhs the datarate to compare to this datarate
+   */   
   bool operator == (const DataRate& rhs) const;
+  
+  /**
+   * \return true if this rate is not equal to rhs
+   *
+   * \param rhs the datarate to compare to this datarate
+   */   
   bool operator != (const DataRate& rhs) const;
 
   /**
@@ -118,7 +171,8 @@
  * \brief hold objects of type ns3::DataRate
  */
 
-ATTRIBUTE_HELPER_HEADER (DataRate);
+
+ATTRIBUTE_HELPER_HEADER (DataRate);   /// Macro to make help make data-rate an ns-3 attribute
 
 /**
  * \param lhs
diff -Naur ns-3.18.1/src/network/utils/drop-tail-queue.cc ns-3.19/src/network/utils/drop-tail-queue.cc
--- ns-3.18.1/src/network/utils/drop-tail-queue.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/drop-tail-queue.cc	2013-12-20 09:44:50.000000000 -0800
@@ -25,7 +25,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (DropTailQueue);
+NS_OBJECT_ENSURE_REGISTERED (DropTailQueue)
+  ;
 
 TypeId DropTailQueue::GetTypeId (void) 
 {
diff -Naur ns-3.18.1/src/network/utils/error-model.cc ns-3.19/src/network/utils/error-model.cc
--- ns-3.18.1/src/network/utils/error-model.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/error-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -77,7 +77,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ErrorModel);
+NS_OBJECT_ENSURE_REGISTERED (ErrorModel)
+  ;
 
 TypeId ErrorModel::GetTypeId (void)
 { 
@@ -145,7 +146,8 @@
 // RateErrorModel
 //
 
-NS_OBJECT_ENSURE_REGISTERED (RateErrorModel);
+NS_OBJECT_ENSURE_REGISTERED (RateErrorModel)
+  ;
 
 TypeId RateErrorModel::GetTypeId (void)
 { 
@@ -284,7 +286,8 @@
 // BurstErrorModel
 //
 
-NS_OBJECT_ENSURE_REGISTERED (BurstErrorModel);
+NS_OBJECT_ENSURE_REGISTERED (BurstErrorModel)
+  ;
 
 TypeId BurstErrorModel::GetTypeId (void)
 {
@@ -412,7 +415,8 @@
 // ListErrorModel
 //
 
-NS_OBJECT_ENSURE_REGISTERED (ListErrorModel);
+NS_OBJECT_ENSURE_REGISTERED (ListErrorModel)
+  ;
 
 TypeId ListErrorModel::GetTypeId (void)
 { 
@@ -481,7 +485,8 @@
 // ReceiveListErrorModel
 //
 
-NS_OBJECT_ENSURE_REGISTERED (ReceiveListErrorModel);
+NS_OBJECT_ENSURE_REGISTERED (ReceiveListErrorModel)
+  ;
 
 TypeId ReceiveListErrorModel::GetTypeId (void)
 { 
diff -Naur ns-3.18.1/src/network/utils/error-model.h ns-3.19/src/network/utils/error-model.h
--- ns-3.18.1/src/network/utils/error-model.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/error-model.h	2013-12-20 09:44:50.000000000 -0800
@@ -277,19 +277,19 @@
    */
   double GetBurstRate (void) const;
   /**
-   * \param burstRate the error rate to be used by the model
+   * \param rate the error rate to be used by the model
    */
   void SetBurstRate (double rate);
 
   /**
-   * \param ranVariable A random variable distribution to generate random variates
+   * \param ranVar A random variable distribution to generate random variates
    */
-  void SetRandomVariable (Ptr<RandomVariableStream>);
+  void SetRandomVariable (Ptr<RandomVariableStream> ranVar);
 
   /**
-   * \param burstSize A random variable distribution to generate random burst size
+   * \param burstSz A random variable distribution to generate random burst size
    */
-  void SetRandomBurstSize (Ptr<RandomVariableStream>);
+  void SetRandomBurstSize (Ptr<RandomVariableStream> burstSz);
 
   /**
     * Assign a fixed random variable stream number to the random variables
diff -Naur ns-3.18.1/src/network/utils/ethernet-header.cc ns-3.19/src/network/utils/ethernet-header.cc
--- ns-3.18.1/src/network/utils/ethernet-header.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/ethernet-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (EthernetHeader);
+NS_OBJECT_ENSURE_REGISTERED (EthernetHeader)
+  ;
 
 EthernetHeader::EthernetHeader (bool hasPreamble)
   : m_enPreambleSfd (hasPreamble),
diff -Naur ns-3.18.1/src/network/utils/ethernet-trailer.cc ns-3.19/src/network/utils/ethernet-trailer.cc
--- ns-3.18.1/src/network/utils/ethernet-trailer.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/ethernet-trailer.cc	2013-12-20 09:44:50.000000000 -0800
@@ -22,12 +22,14 @@
 #include "ns3/log.h"
 #include "ns3/trailer.h"
 #include "ethernet-trailer.h"
+#include "crc32.h"
 
 NS_LOG_COMPONENT_DEFINE ("EthernetTrailer");
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (EthernetTrailer);
+NS_OBJECT_ENSURE_REGISTERED (EthernetTrailer)
+  ;
 
 EthernetTrailer::EthernetTrailer ()
   : m_calcFcs (false),
@@ -58,7 +60,7 @@
 
   buffer = new uint8_t[len];
   p->CopyData (buffer, len);
-  crc = DoCalcFcs (buffer, len);
+  crc = CRC32Calculate (buffer, len);
   delete[] buffer;
   return (m_fcs == crc);
 }
@@ -77,7 +79,7 @@
 
   buffer = new uint8_t[len];
   p->CopyData (buffer, len);
-  m_fcs = DoCalcFcs (buffer, len);
+  m_fcs = CRC32Calculate (buffer, len);
   delete[] buffer;
 }
 
@@ -151,24 +153,4 @@
   return size;
 }
 
-// This code is copied from /lib/crc32.c in the linux kernel.
-// It assumes little endian ordering.
-uint32_t
-EthernetTrailer::DoCalcFcs (uint8_t const *buffer, size_t len) const
-{
-  NS_LOG_FUNCTION (this << &buffer << len);
-  uint32_t crc = 0xffffffff;
-  int i;
-
-  while (len--)
-    {
-      crc ^= *buffer++;
-      for (i = 0; i < 8; i++)
-        {
-          crc = (crc >> 1) ^ ((crc & 1) ? 0xedb88320 : 0);
-        }
-    }
-  return ~crc;
-}
-
 } // namespace ns3
diff -Naur ns-3.18.1/src/network/utils/ethernet-trailer.h ns-3.19/src/network/utils/ethernet-trailer.h
--- ns-3.18.1/src/network/utils/ethernet-trailer.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/ethernet-trailer.h	2013-12-20 09:44:50.000000000 -0800
@@ -104,8 +104,6 @@
   bool m_calcFcs;
   uint32_t m_fcs; /// Value of the fcs contained in the trailer
 
-  uint32_t DoCalcFcs (uint8_t const *buffer, size_t len) const;
-
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/network/utils/flow-id-tag.cc ns-3.19/src/network/utils/flow-id-tag.cc
--- ns-3.18.1/src/network/utils/flow-id-tag.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/flow-id-tag.cc	2013-12-20 09:44:50.000000000 -0800
@@ -24,7 +24,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (FlowIdTag);
+NS_OBJECT_ENSURE_REGISTERED (FlowIdTag)
+  ;
 
 TypeId 
 FlowIdTag::GetTypeId (void)
diff -Naur ns-3.18.1/src/network/utils/flow-id-tag.h ns-3.19/src/network/utils/flow-id-tag.h
--- ns-3.18.1/src/network/utils/flow-id-tag.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/flow-id-tag.h	2013-12-20 09:44:50.000000000 -0800
@@ -34,9 +34,27 @@
   virtual void Deserialize (TagBuffer buf);
   virtual void Print (std::ostream &os) const;
   FlowIdTag ();
+  
+  /**
+   *  Constructs a FlowIdTag with the given flow id
+   *
+   *  \param flowId Id to use for the tag
+   */
   FlowIdTag (uint32_t flowId);
+  /**
+   *  Sets the flow id for the tag
+   *  \param flowId Id to assign to the tag
+   */
   void SetFlowId (uint32_t flowId);
+  /**
+   *  Gets the flow id for the tag
+   *  \returns current flow id for this tag
+   */
   uint32_t GetFlowId (void) const;
+  /**
+   *  Uses a static variable to generate sequential flow id
+   *  \returns flow id allocated
+   */
   static uint32_t AllocateFlowId (void);
 private:
   uint32_t m_flowId;
diff -Naur ns-3.18.1/src/network/utils/ipv4-address.cc ns-3.19/src/network/utils/ipv4-address.cc
--- ns-3.18.1/src/network/utils/ipv4-address.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/ipv4-address.cc	2013-12-20 09:44:50.000000000 -0800
@@ -417,7 +417,7 @@
   return !a.IsEqual (b);
 }
 
-ATTRIBUTE_HELPER_CPP (Ipv4Address);
-ATTRIBUTE_HELPER_CPP (Ipv4Mask);
+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
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/network/utils/ipv4-address.h ns-3.19/src/network/utils/ipv4-address.h
--- ns-3.18.1/src/network/utils/ipv4-address.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/ipv4-address.h	2013-12-20 09:44:50.000000000 -0800
@@ -286,8 +286,8 @@
  * \brief hold objects of type ns3::Ipv4Mask
  */
 
-ATTRIBUTE_HELPER_HEADER (Ipv4Address);
-ATTRIBUTE_HELPER_HEADER (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
 
 std::ostream& operator<< (std::ostream& os, Ipv4Address const& address);
 std::ostream& operator<< (std::ostream& os, Ipv4Mask const& mask);
diff -Naur ns-3.18.1/src/network/utils/ipv6-address.cc ns-3.19/src/network/utils/ipv6-address.cc
--- ns-3.18.1/src/network/utils/ipv6-address.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/ipv6-address.cc	2013-12-20 09:44:50.000000000 -0800
@@ -18,6 +18,29 @@
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
 
+// Part of the Ipv6Address::Print function has been adapted from inet_ntop6 Linux function.
+// See http://www.net-snmp.org/dev/agent/inet__ntop_8c_source.html
+// Author: Paul Vixie, 1996.
+// The inet_ntop6 function was under the copyright below, which is
+// compatible with GPLv2, see http://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses.
+
+/* Copyright (c) 1996 by Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
+ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
+ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ */
+
+
 #include <iomanip>
 #include <memory.h>
 
@@ -115,7 +138,12 @@
 
 /**
  * \brief Convert an IPv6 C-string into a 128-bit representation.
+ *
+ * \param address pointer to the char buffer with the address ascii representation
+ * \param addr the buffer to store the IPv6 address
+ *
  * \return true if success, false otherwise (bad format, ...)
+ *
  * \note This function is strongly inspired by inet_pton6() from Paul Vixie.
  * \todo Handle IPv6 address with decimal value for last four bytes.
  */
@@ -473,23 +501,96 @@
 void Ipv6Address::Print (std::ostream& os) const
 {
   NS_LOG_FUNCTION (this << &os);
-  os << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_address[0]
-     << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_address[1] << ":"
-     << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_address[2]
-     << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_address[3] << ":"
-     << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_address[4]
-     << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_address[5] << ":"
-     << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_address[6]
-     << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_address[7] << ":"
-     << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_address[8]
-     << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_address[9] << ":"
-     << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_address[10]
-     << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_address[11] << ":"
-     << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_address[12]
-     << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_address[13] << ":"
-     << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_address[14]
-     << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_address[15]
-     << std::dec << std::setfill (' ');
+
+  // note: part of this function has been adapted from inet_ntop6 Linux function.
+  // See http://www.net-snmp.org/dev/agent/inet__ntop_8c_source.html
+  // Author: Paul Vixie, 1996.
+
+  if (IsIpv4MappedAddress ())
+    {
+      os << "::ffff:"
+         << (unsigned int) m_address[12] << "."
+         << (unsigned int) m_address[13] << "."
+         << (unsigned int) m_address[14] << "."
+         << (unsigned int) m_address[15];
+      return;
+    }
+
+  uint16_t address[8];
+  uint8_t i;
+
+  for (i=0; i<8; i++)
+    {
+      address[i] = (uint16_t(m_address[2*i]) << 8) | uint16_t(m_address[2*i+1]);
+    }
+
+  int8_t bestBase = -1;
+  int8_t bestLen = 0;
+  int8_t curBase = -1;
+  int8_t curLen = 0;
+
+  for (i=0; i<8; i++)
+    {
+      if (address[i] == 0)
+        {
+          if (curBase == -1)
+            {
+              curBase = i;
+              curLen = 1;
+            }
+          else
+            {
+              curLen++;
+            }
+        }
+      else
+        {
+          if (curBase != -1)
+            {
+              if (bestBase == -1 || curLen > bestLen)
+                {
+                  bestBase = curBase;
+                  bestLen = curLen;
+                }
+              curBase = -1;
+            }
+        }
+    }
+  if (curBase != -1)
+    {
+      if (bestBase == -1 || curLen > bestLen)
+        {
+          bestBase = curBase;
+          bestLen = curLen;
+        }
+    }
+  if (bestBase != -1 && bestLen < 2)
+    {
+      bestBase = -1;
+    }
+
+  for (i = 0; i < 8;) {
+      // Are we inside the best run of 0x00's?
+      if (i == bestBase)
+        {
+          os << ':';
+          i += bestLen;
+          continue;
+        }
+      // Are we following an initial run of 0x00s or any real hex?
+      if (i != 0)
+        {
+          os << ':';
+        }
+      os << std::hex << (unsigned int) address[i];
+      i++;
+  }
+  // Was it a trailing run of 0x00's?
+  if (bestBase != -1 && (bestBase + bestLen) == 8)
+    {
+      os << ':';
+    }
+  os << std::dec;
 }
 
 bool Ipv6Address::IsLocalhost () const
@@ -519,7 +620,7 @@
   return false;
 }
 
-bool Ipv6Address::IsIpv4MappedAddress ()
+bool Ipv6Address::IsIpv4MappedAddress () const
 {
   NS_LOG_FUNCTION (this);
   uint8_t v4MappedPrefix[12] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -827,22 +928,8 @@
 void Ipv6Prefix::Print (std::ostream &os) const
 {
   NS_LOG_FUNCTION (this << &os);
-  os << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[0]
-  << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[1] << ":"
-  << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[2]
-  << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[3] << ":"
-  << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[4]
-  << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[5] << ":"
-  << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[6]
-  << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[7] << ":"
-  << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[8]
-  << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[9] << ":"
-  << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[10]
-  << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[11] << ":"
-  << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[12]
-  << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[13] << ":"
-  << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[14]
-  << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[15];
+
+  os << "/" << (unsigned int) GetPrefixLength();
 }
 
 Ipv6Prefix Ipv6Prefix::GetLoopback ()
@@ -915,16 +1002,6 @@
   return is;
 }
 
-bool operator == (Ipv6Prefix const &a, Ipv6Prefix const &b)
-{
-  return a.IsEqual (b);
-}
-
-bool operator != (Ipv6Prefix const &a, Ipv6Prefix const &b)
-{
-  return !a.IsEqual (b);
-}
-
 size_t Ipv6AddressHash::operator () (Ipv6Address const &x) const
 {
   uint8_t buf[16];
@@ -934,8 +1011,8 @@
   return lookuphash (buf, sizeof (buf), 0);
 }
 
-ATTRIBUTE_HELPER_CPP (Ipv6Address);
-ATTRIBUTE_HELPER_CPP (Ipv6Prefix);
+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
 
 } /* namespace ns3 */
 
diff -Naur ns-3.18.1/src/network/utils/ipv6-address.h ns-3.19/src/network/utils/ipv6-address.h
--- ns-3.18.1/src/network/utils/ipv6-address.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/ipv6-address.h	2013-12-20 09:44:50.000000000 -0800
@@ -269,7 +269,7 @@
    * \brief If the address is an IPv4-mapped address
    * \return true if address is an IPv4-mapped address, otherwise false.
    */
-  bool IsIpv4MappedAddress();
+  bool IsIpv4MappedAddress() const;
 
   /**
    * \brief Convert to Address object
@@ -350,8 +350,31 @@
    */
   uint8_t m_address[16];
 
+  /**
+   * \brief Equal to operator.
+   *
+   * \param a the first operand
+   * \param b the first operand
+   * \returns true if the operands are equal
+   */
   friend bool operator == (Ipv6Address const &a, Ipv6Address const &b);
+
+  /**
+   * \brief Not equal to operator.
+   *
+   * \param a the first operand
+   * \param b the first operand
+   * \returns true if the operands are not equal
+   */
   friend bool operator != (Ipv6Address const &a, Ipv6Address const &b);
+
+  /**
+   * \brief Less than to operator.
+   *
+   * \param a the first operand
+   * \param b the first operand
+   * \returns true if the first operand is less than the second
+   */
   friend bool operator < (Ipv6Address const &a, Ipv6Address const &b);
 };
 
@@ -463,23 +486,72 @@
    * \brief The prefix representation.
    */
   uint8_t m_prefix[16];
+
+  /**
+   * \brief Equal to operator.
+   *
+   * \param a the first operand
+   * \param b the first operand
+   * \returns true if the operands are equal
+   */
+  friend bool operator == (Ipv6Prefix const &a, Ipv6Prefix const &b);
+
+  /**
+   * \brief Not equal to operator.
+   *
+   * \param a the first operand
+   * \param b the first operand
+   * \returns true if the operands are not equal
+   */
+  friend bool operator != (Ipv6Prefix const &a, Ipv6Prefix const &b);
 };
 
 /**
  * \class ns3::Ipv6AddressValue
  * \brief Hold objects of type ns3::Ipv6Address
  */
-ATTRIBUTE_HELPER_HEADER (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);
+ATTRIBUTE_HELPER_HEADER (Ipv6Prefix);   /// Macro to make help make class an ns-3 attribute
 
-std::ostream& operator << (std::ostream& os, Ipv6Address const& address);
-std::ostream& operator<< (std::ostream& os, Ipv6Prefix const& prefix);
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param address the Ipv6Address
+ * \returns the reference to the output stream
+ */
+std::ostream & operator << (std::ostream& os, Ipv6Address const& address);
+
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param prefix the Ipv6Prefix
+ * \returns the reference to the output stream
+ */
+std::ostream & operator << (std::ostream& os, Ipv6Prefix const& prefix);
+
+/**
+ * \brief Stream extraction operator.
+ *
+ * \param is the reference to the input stream
+ * \param address the Ipv6Address
+ * \returns the reference to the input stream
+ */
 std::istream & operator >> (std::istream &is, Ipv6Address &address);
+
+/**
+ * \brief Stream extraction operator.
+ *
+ * \param is the reference to the input stream
+ * \param prefix the Ipv6Preofix
+ * \returns the reference to the input stream
+ */
 std::istream & operator >> (std::istream &is, Ipv6Prefix &prefix);
 
 inline bool operator == (const Ipv6Address& a, const Ipv6Address& b)
@@ -497,6 +569,16 @@
   return (std::memcmp (a.m_address, b.m_address, 16) < 0);
 }
 
+inline bool operator == (const Ipv6Prefix& a, const Ipv6Prefix& b)
+{
+  return (!std::memcmp (a.m_prefix, b.m_prefix, 16));
+}
+
+inline bool operator != (const Ipv6Prefix& a, const Ipv6Prefix& b)
+{
+  return std::memcmp (a.m_prefix, b.m_prefix, 16);
+}
+
 /**
  * \class Ipv6AddressHash
  * \brief Hash function class for IPv6 addresses.
@@ -507,13 +589,11 @@
   /**
    * \brief Unary operator to hash IPv6 address.
    * \param x IPv6 address to hash
+   * \returns the hash of the address
    */
   size_t operator () (Ipv6Address const &x) const;
 };
 
-bool operator == (Ipv6Prefix const &a, Ipv6Prefix const &b);
-bool operator != (Ipv6Prefix const &a, Ipv6Prefix const &b);
-
 } /* namespace ns3 */
 
 #endif /* IPV6_ADDRESS_H */
diff -Naur ns-3.18.1/src/network/utils/llc-snap-header.cc ns-3.19/src/network/utils/llc-snap-header.cc
--- ns-3.18.1/src/network/utils/llc-snap-header.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/llc-snap-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -27,7 +27,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LlcSnapHeader);
+NS_OBJECT_ENSURE_REGISTERED (LlcSnapHeader)
+  ;
 
 LlcSnapHeader::LlcSnapHeader ()
 {
diff -Naur ns-3.18.1/src/network/utils/mac16-address.cc ns-3.19/src/network/utils/mac16-address.cc
--- ns-3.18.1/src/network/utils/mac16-address.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/mac16-address.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,7 @@
 
 namespace ns3 {
 
-ATTRIBUTE_HELPER_CPP (Mac16Address);
+ATTRIBUTE_HELPER_CPP (Mac16Address);  /// Macro to make help make class an ns-3 attribute
 
 #define ASCII_a (0x41)
 #define ASCII_z (0x5a)
diff -Naur ns-3.18.1/src/network/utils/mac16-address.h ns-3.19/src/network/utils/mac16-address.h
--- ns-3.18.1/src/network/utils/mac16-address.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/mac16-address.h	2013-12-20 09:44:50.000000000 -0800
@@ -80,6 +80,7 @@
   static bool IsMatchingType (const Address &address);
   /**
    * Allocate a new Mac16Address.
+   * \returns newly allocated mac16Address
    */
   static Mac16Address Allocate (void);
 
@@ -104,7 +105,7 @@
  * \brief hold objects of type ns3::Mac16Address
  */
 
-ATTRIBUTE_HELPER_HEADER (Mac16Address);
+ATTRIBUTE_HELPER_HEADER (Mac16Address); /// Macro to make help make class an ns-3 attribute
 
 inline bool operator == (const Mac16Address &a, const Mac16Address &b)
 {
diff -Naur ns-3.18.1/src/network/utils/mac48-address.cc ns-3.19/src/network/utils/mac48-address.cc
--- ns-3.18.1/src/network/utils/mac48-address.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/mac48-address.cc	2013-12-20 09:44:50.000000000 -0800
@@ -29,7 +29,7 @@
 
 namespace ns3 {
 
-ATTRIBUTE_HELPER_CPP (Mac48Address);
+ATTRIBUTE_HELPER_CPP (Mac48Address);  /// Macro to make help make class an ns-3 attribute
 
 #define ASCII_a (0x41)
 #define ASCII_z (0x5a)
diff -Naur ns-3.18.1/src/network/utils/mac48-address.h ns-3.19/src/network/utils/mac48-address.h
--- ns-3.18.1/src/network/utils/mac48-address.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/mac48-address.h	2013-12-20 09:44:50.000000000 -0800
@@ -84,6 +84,7 @@
   static bool IsMatchingType (const Address &address);
   /**
    * Allocate a new Mac48Address.
+   * \returns newly allocated mac48Address
    */
   static Mac48Address Allocate (void);
 
@@ -146,7 +147,7 @@
  * \brief hold objects of type ns3::Mac48Address
  */
 
-ATTRIBUTE_HELPER_HEADER (Mac48Address);
+ATTRIBUTE_HELPER_HEADER (Mac48Address); /// Macro to make help make class an ns-3 attribute
 
 inline bool operator == (const Mac48Address &a, const Mac48Address &b)
 {
diff -Naur ns-3.18.1/src/network/utils/mac64-address.cc ns-3.19/src/network/utils/mac64-address.cc
--- ns-3.18.1/src/network/utils/mac64-address.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/mac64-address.cc	2013-12-20 09:44:50.000000000 -0800
@@ -29,7 +29,7 @@
 
 namespace ns3 {
 
-ATTRIBUTE_HELPER_CPP (Mac64Address);
+ATTRIBUTE_HELPER_CPP (Mac64Address);  /// Macro to make help make class an ns-3 attribute
 
 #define ASCII_a (0x41)
 #define ASCII_z (0x5a)
diff -Naur ns-3.18.1/src/network/utils/mac64-address.h ns-3.19/src/network/utils/mac64-address.h
--- ns-3.18.1/src/network/utils/mac64-address.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/mac64-address.h	2013-12-20 09:44:50.000000000 -0800
@@ -83,6 +83,7 @@
   static bool IsMatchingType (const Address &address);
   /**
    * Allocate a new Mac64Address.
+   * \returns newly allocated mac64Address   
    */
   static Mac64Address Allocate (void);
 private:
@@ -106,7 +107,7 @@
  * \brief hold objects of type ns3::Mac64Address
  */
 
-ATTRIBUTE_HELPER_HEADER (Mac64Address);
+ATTRIBUTE_HELPER_HEADER (Mac64Address); /// Macro to make help make class an ns-3 attribute
 
 inline bool operator == (const Mac64Address &a, const Mac64Address &b)
 {
diff -Naur ns-3.18.1/src/network/utils/packetbb.cc ns-3.19/src/network/utils/packetbb.cc
--- ns-3.18.1/src/network/utils/packetbb.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/packetbb.cc	2013-12-20 09:44:50.000000000 -0800
@@ -58,7 +58,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (PbbPacket);
+NS_OBJECT_ENSURE_REGISTERED (PbbPacket)
+  ;
 
 PbbTlvBlock::PbbTlvBlock (void)
 {
diff -Naur ns-3.18.1/src/network/utils/packetbb.h ns-3.19/src/network/utils/packetbb.h
--- ns-3.18.1/src/network/utils/packetbb.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/packetbb.h	2013-12-20 09:44:50.000000000 -0800
@@ -55,8 +55,8 @@
 class PbbTlvBlock
 {
 public:
-  typedef std::list< Ptr<PbbTlv> >::iterator Iterator;
-  typedef std::list< Ptr<PbbTlv> >::const_iterator ConstIterator;
+  typedef std::list< Ptr<PbbTlv> >::iterator Iterator;              /// this is an iterator
+  typedef std::list< Ptr<PbbTlv> >::const_iterator ConstIterator;   /// this is a const iterator
 
   PbbTlvBlock (void);
   ~PbbTlvBlock (void);
@@ -192,7 +192,17 @@
    */
   void Print (std::ostream &os, int level) const;
 
+  /**
+   * \brief Equality operator for PbbTlvBlock
+   * \param other PbbTlvBlock to compare this one to
+   * \returns true if the blocks are equal
+   */
   bool operator== (const PbbTlvBlock &other) const;
+  /**
+   * \brief Inequality operator for PbbTlvBlock
+   * \param other PbbTlvBlock to compare this one to
+   * \returns true if the blocks are not equal
+   */  
   bool operator!= (const PbbTlvBlock &other) const;
 
 private:
@@ -207,8 +217,8 @@
 class PbbAddressTlvBlock
 {
 public:
-  typedef std::list< Ptr<PbbAddressTlv> >::iterator Iterator;
-  typedef std::list< Ptr<PbbAddressTlv> >::const_iterator ConstIterator;
+  typedef std::list< Ptr<PbbAddressTlv> >::iterator Iterator;               /// This is a PbbAddressTlv iterator for PbbAddressTlvBlock
+  typedef std::list< Ptr<PbbAddressTlv> >::const_iterator ConstIterator;    /// This is a const PbbAddressTlv iterator for PbbAddressTlvBlock
 
   PbbAddressTlvBlock (void);
   ~PbbAddressTlvBlock (void);
@@ -346,7 +356,18 @@
    */
   void Print (std::ostream &os, int level) const;
 
+  /**
+   * \brief Equality operator for PbbAddressTlvBlock
+   * \param other PbbAddressTlvBlock to compare to this one
+   * \returns true if PbbAddressTlvBlock are equal
+   */
   bool operator== (const PbbAddressTlvBlock &other) const;
+
+  /**
+   * \brief Inequality operator for PbbAddressTlvBlock
+   * \param other PbbAddressTlvBlock to compare to this one
+   * \returns true if PbbAddressTlvBlock are not equal
+   */  
   bool operator!= (const PbbAddressTlvBlock &other) const;
 
 private:
@@ -364,10 +385,10 @@
 class PbbPacket : public SimpleRefCount<PbbPacket,Header>
 {
 public:
-  typedef std::list< Ptr<PbbTlv> >::iterator TlvIterator;
-  typedef std::list< Ptr<PbbTlv> >::const_iterator ConstTlvIterator;
-  typedef std::list< Ptr<PbbMessage> >::iterator MessageIterator;
-  typedef std::list< Ptr<PbbMessage> >::const_iterator ConstMessageIterator;
+  typedef std::list< Ptr<PbbTlv> >::iterator TlvIterator;                       /// This is a PbbTlv iterator for PbbPacket
+  typedef std::list< Ptr<PbbTlv> >::const_iterator ConstTlvIterator;            /// This is a const PbbTlv iterator for PbbPacket
+  typedef std::list< Ptr<PbbMessage> >::iterator MessageIterator;               /// This is a PbbMessageIterator for PbbPacket
+  typedef std::list< Ptr<PbbMessage> >::const_iterator ConstMessageIterator;    /// This is a const PbbMessageIterator for PbbPacket
 
   PbbPacket (void);
   ~PbbPacket (void);
@@ -627,7 +648,18 @@
    */
   virtual void Print (std::ostream &os) const;
 
+  /**
+   * \brief Equality operator for PbbPacket
+   * \param other PbbPacket to compare to this one
+   * \returns true if PbbPacket are equal
+   */
   bool operator== (const PbbPacket &other) const;
+  
+  /**
+   * \brief Inequality operator for PbbPacket
+   * \param other PbbPacket to compare to this one
+   * \returns true if PbbPacket are not equal
+   */
   bool operator!= (const PbbPacket &other) const;
 
 protected:
@@ -652,10 +684,10 @@
 class PbbMessage : public SimpleRefCount<PbbMessage>
 {
 public:
-  typedef std::list< Ptr<PbbTlv> >::iterator TlvIterator;
-  typedef std::list< Ptr<PbbTlv> >::const_iterator ConstTlvIterator;
-  typedef std::list< Ptr<PbbAddressBlock> >::iterator AddressBlockIterator;
-  typedef std::list< Ptr<PbbAddressBlock> >::const_iterator ConstAddressBlockIterator;
+  typedef std::list< Ptr<PbbTlv> >::iterator TlvIterator;                                 /// This is a PbbTlv iterator for PbbMessage
+  typedef std::list< Ptr<PbbTlv> >::const_iterator ConstTlvIterator;                      /// This is a const PbbTlv iterator for PbbMessage
+  typedef std::list< Ptr<PbbAddressBlock> >::iterator AddressBlockIterator;               /// This is a PbbAddressBlock iterator for PbbMessage
+  typedef std::list< Ptr<PbbAddressBlock> >::const_iterator ConstAddressBlockIterator;    /// This is a const PbbAddressBlock iterator for PbbMessage
 
   PbbMessage ();
   virtual ~PbbMessage ();
@@ -1004,13 +1036,27 @@
    */
   void Print (std::ostream &os, int level) const;
 
+  /**
+   * \brief Equality operator for PbbMessage
+   * \param other PbbMessage to compare to this one
+   * \returns true if PbbMessages are equal
+   */
   bool operator== (const PbbMessage &other) const;
+  /**
+   * \brief Inequality operator for PbbMessage
+   * \param other PbbMessage to compare to this one
+   * \returns true if PbbMessages are not equal
+   */
   bool operator!= (const PbbMessage &other) const;
 
-protected:
-  /* PbbMessage size in bytes - 1.
+protected:  
+  /**
+   * \brief Returns address length (IPV4 3 or IPV6 15)
    *
-   * IPv4 = 4 - 1 = 3, IPv6 = 16 - 1 = 15
+   *  Returns message size in bytes - 1
+   *  IPv4 = 4 - 1 = 3, IPv6 = 16 - 1 = 15
+   *
+   * \returns Address length (IPV4 3 or IPV6 15)
    */
   virtual PbbAddressLength GetAddressLength (void) const = 0;
 
@@ -1051,6 +1097,14 @@
   virtual ~PbbMessageIpv4 ();
 
 protected:
+  /**
+   * \brief Returns address length (IPV4 3 or IPV6 15)
+   *
+   *  Returns message size in bytes - 1
+   *  IPv4 = 4 - 1 = 3, IPv6 = 16 - 1 = 15
+   *
+   * \returns Address length (IPV4 3 or IPV6 15)
+   */
   virtual PbbAddressLength GetAddressLength (void) const;
 
   virtual void SerializeOriginatorAddress (Buffer::Iterator &start) const;
@@ -1071,6 +1125,14 @@
   virtual ~PbbMessageIpv6 ();
 
 protected:
+  /**
+   * \brief Returns address length (IPV4 3 or IPV6 15)
+   *
+   *  Returns message size in bytes - 1
+   *  IPv4 = 4 - 1 = 3, IPv6 = 16 - 1 = 15
+   *
+   * \returns Address length (IPV4 3 or IPV6 15)
+   */
   virtual PbbAddressLength GetAddressLength (void) const;
 
   virtual void SerializeOriginatorAddress (Buffer::Iterator &start) const;
@@ -1089,14 +1151,14 @@
 class PbbAddressBlock : public SimpleRefCount<PbbAddressBlock>
 {
 public:
-  typedef std::list< Address >::iterator AddressIterator;
-  typedef std::list< Address >::const_iterator ConstAddressIterator;
+  typedef std::list< Address >::iterator AddressIterator;             /// this is an address iterator for PbbAddressBlock
+  typedef std::list< Address >::const_iterator ConstAddressIterator;  /// this is an const address iterator for PbbAddressBlock
 
-  typedef std::list<uint8_t>::iterator PrefixIterator;
-  typedef std::list<uint8_t>::const_iterator ConstPrefixIterator;
+  typedef std::list<uint8_t>::iterator PrefixIterator;                /// this is a prefix iterator for PbbAddressBlock
+  typedef std::list<uint8_t>::const_iterator ConstPrefixIterator;     /// this is a const prefix iterator for PbbAddressBlock
 
-  typedef PbbAddressTlvBlock::Iterator TlvIterator;
-  typedef PbbAddressTlvBlock::ConstIterator ConstTlvIterator;
+  typedef PbbAddressTlvBlock::Iterator TlvIterator;                   /// this is a tlvblock iterator for PbbAddressBlock
+  typedef PbbAddressTlvBlock::ConstIterator ConstTlvIterator;         /// this is a const tlvblock iterator for PbbAddressBlock
 
   PbbAddressBlock ();
   virtual ~PbbAddressBlock ();
@@ -1440,12 +1502,26 @@
    */
   void Print (std::ostream &os, int level) const;
 
+  /**
+   * \brief Equality operator for PbbAddressBlock
+   * \param other PbbAddressBlock to compare to this one
+   * \returns true if PbbMessages are equal
+   */
   bool operator== (const PbbAddressBlock &other) const;
+  
+  /**
+   * \brief Inequality operator for PbbAddressBlock
+   * \param other PbbAddressBlock to compare to this one
+   * \returns true if PbbAddressBlock are not equal
+   */  
   bool operator!= (const PbbAddressBlock &other) const;
 
 protected:
+  /**
+   * \brief Returns address length
+   * \returns Address length
+   */
   virtual uint8_t GetAddressLength (void) const = 0;
-
   virtual void SerializeAddress (uint8_t *buffer, ConstAddressIterator iter) const = 0;
   virtual Address DeserializeAddress (uint8_t *buffer) const = 0;
   virtual void PrintAddress (std::ostream &os, ConstAddressIterator iter) const = 0;
@@ -1473,8 +1549,11 @@
   virtual ~PbbAddressBlockIpv4 ();
 
 protected:
+  /**
+   * \brief Returns address length
+   * \returns Address length
+   */
   virtual uint8_t GetAddressLength (void) const;
-
   virtual void SerializeAddress (uint8_t *buffer, ConstAddressIterator iter) const;
   virtual Address DeserializeAddress (uint8_t *buffer) const;
   virtual void PrintAddress (std::ostream &os, ConstAddressIterator iter) const;
@@ -1492,8 +1571,11 @@
   virtual ~PbbAddressBlockIpv6 ();
 
 protected:
+  /**
+   * \brief Returns address length
+   * \returns Address length
+   */
   virtual uint8_t GetAddressLength (void) const;
-
   virtual void SerializeAddress (uint8_t *buffer, ConstAddressIterator iter) const;
   virtual Address DeserializeAddress (uint8_t *buffer) const;
   virtual void PrintAddress (std::ostream &os, ConstAddressIterator iter) const;
@@ -1620,7 +1702,18 @@
    */
   void Print (std::ostream &os, int level) const;
 
+  /**
+   * \brief Equality operator for PbbTlv
+   * \param other PbbTlv to compare to this one
+   * \returns true if PbbTlv are equal
+   */
   bool operator== (const PbbTlv &other) const;
+
+  /**
+   * \brief Inequality operator for PbbTlv
+   * \param other PbbTlv to compare to this one
+   * \returns true if PbbTlv are not equal
+   */
   bool operator!= (const PbbTlv &other) const;
 
 protected:
diff -Naur ns-3.18.1/src/network/utils/packet-burst.cc ns-3.19/src/network/utils/packet-burst.cc
--- ns-3.18.1/src/network/utils/packet-burst.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/packet-burst.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (PacketBurst);
+NS_OBJECT_ENSURE_REGISTERED (PacketBurst)
+  ;
 
 TypeId
 PacketBurst::GetTypeId (void)
diff -Naur ns-3.18.1/src/network/utils/packet-data-calculators.h ns-3.19/src/network/utils/packet-data-calculators.h
--- ns-3.18.1/src/network/utils/packet-data-calculators.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/packet-data-calculators.h	2013-12-20 09:44:50.000000000 -0800
@@ -31,13 +31,30 @@
 /**
  * \ingroup stats
  *
+ *  A stat for counting packets
+ *
  */
 class PacketCounterCalculator : public CounterCalculator<uint32_t> {
 public:
   PacketCounterCalculator();
   virtual ~PacketCounterCalculator();
 
+  /**
+   * Increments the packet counter by one
+   *
+   * \param path not used in this method
+   * \param packet not used in this method
+   */
   void PacketUpdate (std::string path, Ptr<const Packet> packet);
+
+  /**
+   * Increments the packet counter by one
+   *
+   * \param path not used in this method
+   * \param packet not used in this method
+   * \param realto not used in this method
+   */
+
   void FrameUpdate (std::string path, Ptr<const Packet> packet,
                     Mac48Address realto);
 
@@ -51,14 +68,30 @@
 /**
  * \ingroup stats
  *
+ * A stat for collecting packet size statistics: min, max and average
+ *
  */
 class PacketSizeMinMaxAvgTotalCalculator :
   public MinMaxAvgTotalCalculator<uint32_t> {
 public:
   PacketSizeMinMaxAvgTotalCalculator();
   virtual ~PacketSizeMinMaxAvgTotalCalculator();
-
+  
+  /**
+   * Increments the packet stats by the size of the packet
+   *
+   * \param path not used in this method
+   * \param packet packet size used to update stats
+   */
   void PacketUpdate (std::string path, Ptr<const Packet> packet);
+  
+  /**
+   * Increments the packet stats by the size of the packet
+   *
+   * \param path not used in this method
+   * \param packet packet size used to update stats
+   * \param realto not used in this method
+   */  
   void FrameUpdate (std::string path, Ptr<const Packet> packet,
                     Mac48Address realto);
 
diff -Naur ns-3.18.1/src/network/utils/packet-probe.cc ns-3.19/src/network/utils/packet-probe.cc
--- ns-3.18.1/src/network/utils/packet-probe.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/packet-probe.cc	2013-12-20 09:44:50.000000000 -0800
@@ -32,7 +32,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (PacketProbe);
+NS_OBJECT_ENSURE_REGISTERED (PacketProbe)
+  ;
 
 TypeId
 PacketProbe::GetTypeId ()
diff -Naur ns-3.18.1/src/network/utils/packet-socket.cc ns-3.19/src/network/utils/packet-socket.cc
--- ns-3.18.1/src/network/utils/packet-socket.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/packet-socket.cc	2013-12-20 09:44:50.000000000 -0800
@@ -33,7 +33,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (PacketSocket);
+NS_OBJECT_ENSURE_REGISTERED (PacketSocket)
+  ;
 
 TypeId
 PacketSocket::GetTypeId (void)
@@ -536,7 +537,8 @@
   return m_destAddr;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (PacketSocketTag);
+NS_OBJECT_ENSURE_REGISTERED (PacketSocketTag)
+  ;
 
 TypeId
 PacketSocketTag::GetTypeId (void)
@@ -599,7 +601,8 @@
   return m_deviceName;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DeviceNameTag);
+NS_OBJECT_ENSURE_REGISTERED (DeviceNameTag)
+  ;
 
 TypeId
 DeviceNameTag::GetTypeId (void)
diff -Naur ns-3.18.1/src/network/utils/packet-socket-factory.cc ns-3.19/src/network/utils/packet-socket-factory.cc
--- ns-3.18.1/src/network/utils/packet-socket-factory.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/packet-socket-factory.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (PacketSocketFactory);
+NS_OBJECT_ENSURE_REGISTERED (PacketSocketFactory)
+  ;
 
 TypeId 
 PacketSocketFactory::GetTypeId (void)
diff -Naur ns-3.18.1/src/network/utils/pcap-file.cc ns-3.19/src/network/utils/pcap-file.cc
--- ns-3.18.1/src/network/utils/pcap-file.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/pcap-file.cc	2013-12-20 09:44:50.000000000 -0800
@@ -45,7 +45,6 @@
 
 const uint16_t VERSION_MAJOR = 2;             /**< Major version of supported pcap file format */
 const uint16_t VERSION_MINOR = 4;             /**< Minor version of supported pcap file format */
-const int32_t  SIGFIGS_DEFAULT = 0;           /**< Significant figures for timestamps (libpcap doesn't even bother) */
 
 PcapFile::PcapFile ()
   : m_file (),
diff -Naur ns-3.18.1/src/network/utils/pcap-file.h ns-3.19/src/network/utils/pcap-file.h
--- ns-3.18.1/src/network/utils/pcap-file.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/pcap-file.h	2013-12-20 09:44:50.000000000 -0800
@@ -31,12 +31,14 @@
 class Packet;
 class Header;
 
-/*
+
+/**
+ * \brief A class representing a pcap file
+ * 
  * A class representing a pcap file.  This allows easy creation, writing and 
  * reading of files composed of stored packets; which may be viewed using
  * standard tools.
  */
-
 class PcapFile
 {
 public:
diff -Naur ns-3.18.1/src/network/utils/pcap-file-wrapper.cc ns-3.19/src/network/utils/pcap-file-wrapper.cc
--- ns-3.18.1/src/network/utils/pcap-file-wrapper.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/pcap-file-wrapper.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (PcapFileWrapper);
+NS_OBJECT_ENSURE_REGISTERED (PcapFileWrapper)
+  ;
 
 TypeId 
 PcapFileWrapper::GetTypeId (void)
diff -Naur ns-3.18.1/src/network/utils/queue.cc ns-3.19/src/network/utils/queue.cc
--- ns-3.18.1/src/network/utils/queue.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/queue.cc	2013-12-20 09:44:50.000000000 -0800
@@ -24,7 +24,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Queue);
+NS_OBJECT_ENSURE_REGISTERED (Queue)
+  ;
 
 TypeId 
 Queue::GetTypeId (void)
diff -Naur ns-3.18.1/src/network/utils/queue.h ns-3.19/src/network/utils/queue.h
--- ns-3.18.1/src/network/utils/queue.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/queue.h	2013-12-20 09:44:50.000000000 -0800
@@ -156,7 +156,11 @@
   virtual Ptr<const Packet> DoPeek (void) const = 0;
 
 protected:
-  // called by subclasses to notify parent of packet drops.
+  /**
+   *  \brief Drop a packet 
+   *  \param packet packet that was dropped
+   *  This method is called by subclasses to notify parent (this class) of packet drops.
+   */
   void Drop (Ptr<Packet> packet);
 
 private:
diff -Naur ns-3.18.1/src/network/utils/radiotap-header.cc ns-3.19/src/network/utils/radiotap-header.cc
--- ns-3.18.1/src/network/utils/radiotap-header.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/radiotap-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -27,7 +27,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (RadiotapHeader);
+NS_OBJECT_ENSURE_REGISTERED (RadiotapHeader)
+  ;
  
 RadiotapHeader::RadiotapHeader()
   : m_length (8),
diff -Naur ns-3.18.1/src/network/utils/red-queue.cc ns-3.19/src/network/utils/red-queue.cc
--- ns-3.18.1/src/network/utils/red-queue.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/red-queue.cc	2013-12-20 09:44:50.000000000 -0800
@@ -69,7 +69,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (RedQueue);
+NS_OBJECT_ENSURE_REGISTERED (RedQueue)
+  ;
 
 TypeId RedQueue::GetTypeId (void)
 {
diff -Naur ns-3.18.1/src/network/utils/red-queue.h ns-3.19/src/network/utils/red-queue.h
--- ns-3.18.1/src/network/utils/red-queue.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/red-queue.h	2013-12-20 09:44:50.000000000 -0800
@@ -83,46 +83,43 @@
 {
 public:
   static TypeId GetTypeId (void);
-  /*
+  /**
    * \brief RedQueue Constructor
    *
    * Create a RED queue
    */
   RedQueue ();
 
-  /*
+  /**
    * \brief Destructor
    *
    * Destructor
    */ 
   virtual ~RedQueue ();
 
-  /*
+  /**
    * \brief Stats
    *
    */
   typedef struct
-  {
-    // Early probability drops
-    uint32_t unforcedDrop;
-    // Forced drops, qavg > max threshold
-    uint32_t forcedDrop;
-    // Drops due to queue limits
-    uint32_t qLimDrop;
+  {   
+    uint32_t unforcedDrop;  /// Early probability drops 
+    uint32_t forcedDrop;    /// Forced drops, qavg > max threshold
+    uint32_t qLimDrop;      /// Drops due to queue limits
   } Stats;
 
-  /* 
+  /** 
    * \brief Drop types
    *
    */
   enum
   {
-    DTYPE_NONE,        // Ok, no drop
-    DTYPE_FORCED,      // A "forced" drop
-    DTYPE_UNFORCED,    // An "unforced" (random) drop
+    DTYPE_NONE,        /// Ok, no drop
+    DTYPE_FORCED,      /// A "forced" drop
+    DTYPE_UNFORCED,    /// An "unforced" (random) drop
   };
 
-  /*
+  /**
    * \brief Set the operating mode of this queue.
    *  Set operating mode
    *
@@ -130,7 +127,7 @@
    */
   void SetMode (RedQueue::QueueMode mode);
 
-  /*
+  /**
    * \brief Get the encapsulation mode of this queue.
    * Get the encapsulation mode of this queue
    *
@@ -138,29 +135,29 @@
    */
   RedQueue::QueueMode GetMode (void);
 
-  /*
+  /**
    * \brief Get the current value of the queue in bytes or packets.
    *
    * \returns The queue size in bytes or packets.
    */
   uint32_t GetQueueSize (void);
 
-  /*
+  /**
    * \brief Set the limit of the queue.
    *
    * \param lim The limit in bytes or packets.
    */
   void SetQueueLimit (uint32_t lim);
 
-  /*
+  /**
    * \brief Set the thresh limits of RED.
    *
-   * \param min Minimum thresh in bytes or packets.
-   * \param max Maximum thresh in bytes or packets.
+   * \param minTh Minimum thresh in bytes or packets.
+   * \param maxTh Maximum thresh in bytes or packets.
    */
   void SetTh (double minTh, double maxTh);
 
-  /*
+  /**
    * \brief Get the RED statistics after running.
    *
    * \returns The drop statistics.
diff -Naur ns-3.18.1/src/network/utils/sequence-number.h ns-3.19/src/network/utils/sequence-number.h
--- ns-3.18.1/src/network/utils/sequence-number.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/sequence-number.h	2013-12-20 09:44:50.000000000 -0800
@@ -64,19 +64,30 @@
     : m_value (value)
   {}
 
-  // copy contructor
+  /**
+   * \brief Constructs a SequenceNumber from a copy
+   * \param value sequence number to copy
+   */
   SequenceNumber (SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> const &value)
     : m_value (value.m_value)
   {}
 
-  // assignment from a plain number
+  /**
+   * \brief Constructs a SequenceNumber from an assignment of given value
+   * \param value sequence number to copy
+   * \returns reference to the assignee
+   */
   SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE>& operator= (NUMERIC_TYPE value)
   {
     m_value = value;
     return *this;
   }
 
-  // assignment from a sequence number
+  /**
+   * \brief Constructs a SequenceNumber from an assignment of another sequence number
+   * \param value sequence number to copy
+   * \returns reference to the assignee
+   */
   SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE>& operator= (SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> const &value)
   {
     m_value = value.m_value;
@@ -100,14 +111,20 @@
     return m_value;
   }
 
-  // prefix ++
+  /**
+   * \brief Prefix increment operator
+   * \returns incremented sequence number
+   */ 
   SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> operator++ ()
   {
     m_value++;
     return *this;
   }
 
-  // postfix ++
+  /**
+   * \brief Postfix increment operator
+   * \returns incremented sequence number
+   */ 
   SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> operator++ (int)
   {
     SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> retval (m_value);
@@ -115,14 +132,20 @@
     return retval;
   }
 
-  // prefix --
+  /**
+   * \brief Prefix decrement operator
+   * \returns decremented sequence number
+   */ 
   SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> operator-- ()
   {
     m_value--;
     return *this;
   }
 
-  // postfix --
+   /**
+   * \brief Postfix decrement operator
+   * \returns incremented sequence number
+   */ 
   SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> operator-- (int)
   {
     SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> retval (m_value);
@@ -130,33 +153,63 @@
     return retval;
   }
 
+  /**
+   * \brief Plus equals operator
+   * \param value value to add to sequence number
+   * \returns incremented sequence number
+   */ 
   SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE>& operator+= (SIGNED_TYPE value)
   {
     m_value += value;
     return *this;
   }
-
+  
+  /**
+   * \brief Minus equals operator
+   * \param value value to subtract from sequence number
+   * \returns decremented sequence number
+   */ 
   SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE>& operator-= (SIGNED_TYPE value)
   {
     m_value -= value;
     return *this;
   }
 
+  /**
+   * \brief Operator defining addition of two sequence numbers
+   * \param other sequence number added to this
+   * \returns sequence number representing sum
+   */
   SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> operator + (const SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> &other) const
   {
     return SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> (m_value + other.m_value);
   }
 
+  /**
+   * \brief Addition operator for adding numeric value to sequence number
+   * \param delta value to add to sequence number
+   * \returns sequence number representing sum
+   */
   SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> operator + (SIGNED_TYPE delta) const
   {
     return SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> (m_value + delta);
   }
 
+  /**
+   * \brief Subtraction operator for subtracting numeric value from sequence number
+   * \param delta value to subtract from sequence number
+   * \returns sequence number representing difference
+   */
   SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> operator - (SIGNED_TYPE delta) const
   {
     return SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> (m_value - delta);
   }
 
+  /**
+   * \brief Subtraction operator for subtracting sequence number from sequence number
+   * \param other sequence number to subtract from this sequence number
+   * \returns numeric value representing the difference
+   */
   SIGNED_TYPE operator - (const SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> &other) const
   {
     static const NUMERIC_TYPE maxValue = std::numeric_limits<NUMERIC_TYPE>::max ();
@@ -199,16 +252,18 @@
       }
   }
 
-
-  // Here is the critical part, how the comparison is made taking into
-  // account wrap-around.  From RFC 3626:
-  //
-  //   The sequence number S1 is said to be "greater than" the sequence
-  //    number S2 if:
-  //
-  //           S1 > S2 AND S1 - S2 <= MAXVALUE/2 OR
-  //
-  //           S2 > S1 AND S2 - S1 > MAXVALUE/2
+  /**
+   * Here is the critical part, how the comparison is made taking into
+   * account wrap-around.  From RFC 3626:
+   *
+   * The sequence number S1 is said to be "greater than" the sequence
+   * number S2 if:
+   *      S1 > S2 AND S1 - S2 <= MAXVALUE/2 OR
+   *      S2 > S1 AND S2 - S1 > MAXVALUE/2
+   *
+   * \param other sequence number to compare to this one
+   * \returns true if this sequence number is greater than other
+   */
   bool operator > (const SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> &other) const
   {
     static const NUMERIC_TYPE halfMaxValue = std::numeric_limits<NUMERIC_TYPE>::max () / 2;
@@ -217,35 +272,71 @@
             || ((other.m_value > m_value) && (other.m_value - m_value) > halfMaxValue));
   }
 
+  /**
+   * \brief Equality operator for comparing sequence number
+   * \param other sequence number to compare to this sequence number
+   * \returns true if the sequence numbers are equal
+   */
   bool operator == (const SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> &other) const
   {
     return (m_value == other.m_value);
   }
 
+  /**
+   * \brief Inequality operator for comparing sequence numbers
+   * \param other sequence number to compare to this sequence number
+   * \returns true if the sequence numbers are not equal
+   */
   bool operator != (const SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> &other) const
   {
     return (m_value != other.m_value);
   }
 
+  /**
+   * \brief Less than or equal operator for comparing sequence numbers
+   * \param other sequence number to compare to this sequence number
+   * \returns true if this sequence number is less than or equal to other
+   */
   bool operator <= (const SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> &other) const
   {
     return (!this->operator> (other));
   }
 
+  /**
+   * \brief Greater than or equal operator for comparing sequence numbers
+   * \param other sequence number to compare to this sequence number
+   * \returns true if this sequence number is greater than or equal to other
+   */
   bool operator >= (const SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> &other) const
   {
     return (this->operator> (other) || this->operator== (other));
   }
 
+  /**
+   * \brief Less than operator for comparing sequence numbers
+   * \param other sequence number to compare to this sequence number
+   * \returns true if this sequence number is less than other
+   */
   bool operator < (const SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> &other) const
   {
     return !this->operator> (other) && m_value != other.m_value;
   }
 
-
+  /**
+   * \brief For printing sequence number
+   * \param os output stream
+   * \param val sequence number to display
+   * \returns output stream os
+   */
   template<typename NUMERIC_TYPE2, typename SIGNED_TYPE2>
   friend std::ostream & operator<< (std::ostream& os, const SequenceNumber<NUMERIC_TYPE2, SIGNED_TYPE2> &val);
 
+  /**
+   * \brief For loading sequence number from input streams
+   * \param is input stream
+   * \param val sequence number to load
+   * \returns input stream is
+   */
   template<typename NUMERIC_TYPE2, typename SIGNED_TYPE2>
   friend std::istream & operator >> (std::istream &is, const SequenceNumber<NUMERIC_TYPE2, SIGNED_TYPE2> &val);
 
@@ -271,7 +362,6 @@
   NUMERIC_TYPE m_value;
 };
 
-
 template<typename NUMERIC_TYPE, typename SIGNED_TYPE>
 std::ostream &
 operator<< (std::ostream& os, const SequenceNumber<NUMERIC_TYPE, SIGNED_TYPE> &val)
diff -Naur ns-3.18.1/src/network/utils/simple-channel.cc ns-3.19/src/network/utils/simple-channel.cc
--- ns-3.18.1/src/network/utils/simple-channel.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/simple-channel.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (SimpleChannel);
+NS_OBJECT_ENSURE_REGISTERED (SimpleChannel)
+  ;
 
 TypeId 
 SimpleChannel::GetTypeId (void)
diff -Naur ns-3.18.1/src/network/utils/simple-channel.h ns-3.19/src/network/utils/simple-channel.h
--- ns-3.18.1/src/network/utils/simple-channel.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/simple-channel.h	2013-12-20 09:44:50.000000000 -0800
@@ -39,10 +39,27 @@
   static TypeId GetTypeId (void);
   SimpleChannel ();
 
-  void Send (Ptr<Packet> p, uint16_t protocol, Mac48Address to, Mac48Address from,
-             Ptr<SimpleNetDevice> sender);
+  /**
+   * A packet is sent by a net device.  A receive event will be 
+   * scheduled for all net device connected to the channel other 
+   * than the net device who sent the packet
+   *
+   * \param p packet to be sent
+   * \param protocol protocol number
+   * \param to address to send packet to
+   * \param from address the packet is coming from
+   * \param sender netdevice who sent the packet
+   *
+   */
+  virtual void Send (Ptr<Packet> p, uint16_t protocol, Mac48Address to, Mac48Address from,
+                     Ptr<SimpleNetDevice> sender);
 
-  void Add (Ptr<SimpleNetDevice> device);
+  /**
+   * Attached a net device to the channel.
+   *
+   * \param device the device to attach to the channel
+   */ 
+  virtual void Add (Ptr<SimpleNetDevice> device);
 
   // inherited from ns3::Channel
   virtual uint32_t GetNDevices (void) const;
diff -Naur ns-3.18.1/src/network/utils/simple-net-device.cc ns-3.19/src/network/utils/simple-net-device.cc
--- ns-3.18.1/src/network/utils/simple-net-device.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/simple-net-device.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (SimpleNetDevice);
+NS_OBJECT_ENSURE_REGISTERED (SimpleNetDevice)
+  ;
 
 TypeId 
 SimpleNetDevice::GetTypeId (void)
diff -Naur ns-3.18.1/src/network/utils/simple-net-device.h ns-3.19/src/network/utils/simple-net-device.h
--- ns-3.18.1/src/network/utils/simple-net-device.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/utils/simple-net-device.h	2013-12-20 09:44:50.000000000 -0800
@@ -48,7 +48,26 @@
   static TypeId GetTypeId (void);
   SimpleNetDevice ();
 
+  /**
+   * Receive a packet from a connected SimpleChannel.  The 
+   * SimpleNetDevice receives packets from its connected channel
+   * and then forwards them by calling its rx callback method
+   *
+   * \param packet Packet received on the channel
+   * \param protocol protocol number
+   * \param to address packet should be sent to
+   * \param from address packet was sent from
+   */
   void Receive (Ptr<Packet> packet, uint16_t protocol, Mac48Address to, Mac48Address from);
+  
+  /**
+   *
+   * Attach a channel to this net device.  This will be the 
+   * channel the net device sends on
+   * 
+   * \param channel channel to assign to this net device
+   *
+   */
   void SetChannel (Ptr<SimpleChannel> channel);
 
   /**
diff -Naur ns-3.18.1/src/network/wscript ns-3.19/src/network/wscript
--- ns-3.18.1/src/network/wscript	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/network/wscript	2013-12-20 09:44:50.000000000 -0800
@@ -25,6 +25,7 @@
         'model/trailer.cc',
         'utils/address-utils.cc',
         'utils/ascii-file.cc',
+        'utils/crc32.cc',
         'utils/data-rate.cc',
         'utils/drop-tail-queue.cc',
         'utils/error-model.cc',
@@ -102,6 +103,7 @@
         'utils/address-utils.h',
         'utils/ascii-file.h',
         'utils/ascii-test.h',
+        'utils/crc32.h',
         'utils/data-rate.h',
         'utils/drop-tail-queue.h',
         'utils/error-model.h',
diff -Naur ns-3.18.1/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py ns-3.19/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -235,7 +235,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1574,10 +1574,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -4092,6 +4093,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -4102,6 +4108,11 @@
                    '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', 
@@ -4117,6 +4128,11 @@
                    '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', 
@@ -4142,6 +4158,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py ns-3.19/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -235,7 +235,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1574,10 +1574,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -4092,6 +4093,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -4102,6 +4108,11 @@
                    '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', 
@@ -4117,6 +4128,11 @@
                    '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', 
@@ -4142,6 +4158,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/nix-vector-routing/doc/nix-vector-routing.h ns-3.19/src/nix-vector-routing/doc/nix-vector-routing.h
--- ns-3.18.1/src/nix-vector-routing/doc/nix-vector-routing.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/nix-vector-routing/doc/nix-vector-routing.h	2013-12-20 09:44:50.000000000 -0800
@@ -19,7 +19,7 @@
  */
 
 /**
- * \defgroup nixvectorrouting Nix-Vector Routing
+ * \defgroup nix-vector-routing Nix-Vector Routing
  *
  * \section model Model
  *
diff -Naur ns-3.18.1/src/nix-vector-routing/model/ipv4-nix-vector-routing.cc ns-3.19/src/nix-vector-routing/model/ipv4-nix-vector-routing.cc
--- ns-3.18.1/src/nix-vector-routing/model/ipv4-nix-vector-routing.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/nix-vector-routing/model/ipv4-nix-vector-routing.cc	2013-12-20 09:44:50.000000000 -0800
@@ -32,7 +32,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4NixVectorRouting);
+NS_OBJECT_ENSURE_REGISTERED (Ipv4NixVectorRouting)
+  ;
 
 TypeId 
 Ipv4NixVectorRouting::GetTypeId (void)
diff -Naur ns-3.18.1/src/nix-vector-routing/model/ipv4-nix-vector-routing.h ns-3.19/src/nix-vector-routing/model/ipv4-nix-vector-routing.h
--- ns-3.18.1/src/nix-vector-routing/model/ipv4-nix-vector-routing.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/nix-vector-routing/model/ipv4-nix-vector-routing.h	2013-12-20 09:44:50.000000000 -0800
@@ -35,15 +35,18 @@
 namespace ns3 {
 
 /**
+ * \ingroup nix-vector-routing
  * Map of Ipv4Address to NixVector
  */
 typedef std::map<Ipv4Address, Ptr<NixVector> > NixMap_t;
 /**
+ * \ingroup nix-vector-routing
  * Map of Ipv4Address to Ipv4Route
  */
 typedef std::map<Ipv4Address, Ptr<Ipv4Route> > Ipv4RouteMap_t;
 
 /**
+ * \ingroup nix-vector-routing
  * Nix-vector routing protocol
  */
 class Ipv4NixVectorRouting : public Ipv4RoutingProtocol
diff -Naur ns-3.18.1/src/olsr/bindings/modulegen__gcc_ILP32.py ns-3.19/src/olsr/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/olsr/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/olsr/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -237,7 +237,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1729,10 +1729,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -4451,6 +4452,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -4461,6 +4467,11 @@
                    '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', 
@@ -4476,6 +4487,11 @@
                    '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', 
@@ -4501,6 +4517,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/olsr/bindings/modulegen__gcc_LP64.py ns-3.19/src/olsr/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/olsr/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/olsr/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -237,7 +237,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1729,10 +1729,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -4451,6 +4452,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -4461,6 +4467,11 @@
                    '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', 
@@ -4476,6 +4487,11 @@
                    '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', 
@@ -4501,6 +4517,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/olsr/doc/olsr.rst ns-3.19/src/olsr/doc/olsr.rst
--- ns-3.18.1/src/olsr/doc/olsr.rst	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/olsr/doc/olsr.rst	2013-12-20 09:44:50.000000000 -0800
@@ -22,10 +22,10 @@
 
 The model is for IPv4 only.  
 
-* Mostly compliant with OLSR as documented in [rfc3626]_, 
+* Mostly compliant with OLSR as documented in :rfc:`3626`, 
 * The use of multiple interfaces was not supported by the NS-2 version, but is supported in NS-3;
 * OLSR does not respond to the routing event notifications corresponding to dynamic interface up and down (``ns3::RoutingProtocol::NotifyInterfaceUp`` and ``ns3::RoutingProtocol::NotifyInterfaceDown``) or address insertion/removal ``ns3::RoutingProtocol::NotifyAddAddress`` and ``ns3::RoutingProtocol::NotifyRemoveAddress``).
-* Unlike the NS-2 version, does not yet support MAC layer feedback as described in RFC 3626;
+* Unlike the NS-2 version, does not yet support MAC layer feedback as described in :rfc:`3626`;
 
 Host Network Association (HNA) is supported in this implementation
 of OLSR. Refer to ``examples/olsr-hna.cc`` to see how the API
@@ -34,7 +34,7 @@
 References
 ++++++++++
 
-.. [rfc3626] RFC 3626 *Optimized Link State Routing*
+.. [rfc3626] :rfc:`3626` *Optimized Link State Routing*
 
 Usage
 *****
diff -Naur ns-3.18.1/src/olsr/model/olsr-header.cc ns-3.19/src/olsr/model/olsr-header.cc
--- ns-3.18.1/src/olsr/model/olsr-header.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/olsr/model/olsr-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -96,7 +96,8 @@
 
 // ---------------- OLSR Packet -------------------------------
 
-NS_OBJECT_ENSURE_REGISTERED (PacketHeader);
+NS_OBJECT_ENSURE_REGISTERED (PacketHeader)
+  ;
 
 PacketHeader::PacketHeader ()
 {
@@ -153,7 +154,8 @@
 
 // ---------------- OLSR Message -------------------------------
 
-NS_OBJECT_ENSURE_REGISTERED (MessageHeader);
+NS_OBJECT_ENSURE_REGISTERED (MessageHeader)
+  ;
 
 MessageHeader::MessageHeader ()
   : m_messageType (MessageHeader::MessageType (0))
diff -Naur ns-3.18.1/src/olsr/model/olsr-routing-protocol.cc ns-3.19/src/olsr/model/olsr-routing-protocol.cc
--- ns-3.18.1/src/olsr/model/olsr-routing-protocol.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/olsr/model/olsr-routing-protocol.cc	2013-12-20 09:44:50.000000000 -0800
@@ -146,7 +146,8 @@
 
 /********** OLSR class **********/
 
-NS_OBJECT_ENSURE_REGISTERED (RoutingProtocol);
+NS_OBJECT_ENSURE_REGISTERED (RoutingProtocol)
+  ;
 
 TypeId 
 RoutingProtocol::GetTypeId (void)
diff -Naur ns-3.18.1/src/openflow/doc/openflow-switch.rst ns-3.19/src/openflow/doc/openflow-switch.rst
--- ns-3.18.1/src/openflow/doc/openflow-switch.rst	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/openflow/doc/openflow-switch.rst	2013-12-20 09:44:51.000000000 -0800
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: bash
 
 OpenFlow switch support
 -----------------------
@@ -62,14 +63,18 @@
 The OpenFlow switch device behaves somewhat according to the diagram setup as a classical OFSID
 switch, with a few modifications made for a proper simulation environment.
 
-Normal OF-enabled Switch:::
+Normal OF-enabled Switch:
+
+.. sourcecode:: text
   
   | Secure Channel                  | <--OF Protocol--> | Controller is external |
   | Hardware or Software Flow Table |
  
 
-ns-3 OF-enabled Switch (module):::
+ns-3 OF-enabled Switch (module):
 
+.. sourcecode:: text
+  
   | m_controller->ReceiveFromSwitch() | <--OF Protocol--> | Controller is internal |
   | Software Flow Table, virtual TCAM |
 
@@ -132,42 +137,45 @@
 OFSID (OpenFlow Software Implementation Distribution) to ns-3.
 To do this:
 
-#1 Obtain the OFSID code. An ns-3 specific OFSID branch is provided to ensure
-operation with ns-3. Use mercurial to download this branch and waf to build 
-the library::: 
+1. Obtain the OFSID code.
+   An ns-3 specific OFSID branch is provided to ensure
+   operation with ns-3. Use mercurial to download this branch and waf to build 
+   the library::
 
-  $ hg clone http://code.nsnam.org/openflow
-  $ cd openflow
+     $ hg clone http://code.nsnam.org/openflow
+     $ cd openflow
 
-From the "openflow" directory, run:::
+   From the "openflow" directory, run::
      
-  $ ./waf configure
-  $ ./waf build
+     $ ./waf configure
+     $ ./waf build
 
-#2 Your OFSID is now built into a libopenflow.a library!   To
-link to an ns-3 build with this OpenFlow switch module, run from the ns-3-dev
-(or whatever you have named your distribution):::
+2. Your OFSID is now built into a libopenflow.a library!
+   To link to an ns-3 build with this OpenFlow switch module, run from the ns-3-dev
+   (or whatever you have named your distribution)::
 
-  $ ./waf configure --enable-examples --enable-tests --with-openflow=path/to/openflow
+     $ ./waf configure --enable-examples --enable-tests --with-openflow=path/to/openflow
 
-#3 Under ``---- Summary of optional NS-3 features:`` you should see:::
+3. Under ``---- Summary of optional NS-3 features:`` you should see:
 
-   "NS-3 OpenFlow Integration     : enabled"
+   .. sourcecode:: text
+  
+     "NS-3 OpenFlow Integration     : enabled"
 
-indicating the library has been linked to ns-3. Run:::
+   indicating the library has been linked to ns-3. Run::
 
-   $ ./waf build
+     $ ./waf build
 
 to build ns-3 and activate the OpenFlowSwitch module in ns-3.
 
 Examples
 ========
 For an example demonstrating its use in a simple learning controller/switch, 
-run:::
+run::
 
   $ ./waf --run openflow-switch
 
-To see it in detailed logging, run:::
+To see it in detailed logging, run::
 
   $ ./waf --run "openflow-switch -v"
 
@@ -219,7 +227,7 @@
 Validation
 **********
 
-This model has one test suite which can be run as follows:::
+This model has one test suite which can be run as follows::
 
   $ ./test.py --suite=openflow
 
diff -Naur ns-3.18.1/src/openflow/model/openflow-switch-net-device.cc ns-3.19/src/openflow/model/openflow-switch-net-device.cc
--- ns-3.18.1/src/openflow/model/openflow-switch-net-device.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/openflow/model/openflow-switch-net-device.cc	2013-12-20 09:44:51.000000000 -0800
@@ -23,7 +23,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (OpenFlowSwitchNetDevice);
+NS_OBJECT_ENSURE_REGISTERED (OpenFlowSwitchNetDevice)
+  ;
 
 const char *
 OpenFlowSwitchNetDevice::GetManufacturerDescription ()
diff -Naur ns-3.18.1/src/point-to-point/bindings/modulegen__gcc_ILP32.py ns-3.19/src/point-to-point/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/point-to-point/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/point-to-point/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:51.000000000 -0800
@@ -171,7 +171,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1445,10 +1445,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -3352,6 +3353,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -3362,6 +3368,11 @@
                    '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', 
@@ -3377,6 +3388,11 @@
                    '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', 
@@ -3402,6 +3418,11 @@
                    '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', 
@@ -5544,14 +5565,14 @@
     cls.add_method('SetBurstRate', 
                    'void', 
                    [param('double', 'rate')])
-    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomBurstSize(ns3::Ptr<ns3::RandomVariableStream> arg0) [member function]
+    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomBurstSize(ns3::Ptr<ns3::RandomVariableStream> burstSz) [member function]
     cls.add_method('SetRandomBurstSize', 
                    'void', 
-                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'arg0')])
-    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomVariable(ns3::Ptr<ns3::RandomVariableStream> arg0) [member function]
+                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'burstSz')])
+    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomVariable(ns3::Ptr<ns3::RandomVariableStream> ranVar) [member function]
     cls.add_method('SetRandomVariable', 
                    'void', 
-                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'arg0')])
+                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'ranVar')])
     ## error-model.h (module 'network'): bool ns3::BurstErrorModel::DoCorrupt(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('DoCorrupt', 
                    'bool', 
diff -Naur ns-3.18.1/src/point-to-point/bindings/modulegen__gcc_LP64.py ns-3.19/src/point-to-point/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/point-to-point/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/point-to-point/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:51.000000000 -0800
@@ -171,7 +171,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1445,10 +1445,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -3352,6 +3353,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -3362,6 +3368,11 @@
                    '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', 
@@ -3377,6 +3388,11 @@
                    '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', 
@@ -3402,6 +3418,11 @@
                    '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', 
@@ -5544,14 +5565,14 @@
     cls.add_method('SetBurstRate', 
                    'void', 
                    [param('double', 'rate')])
-    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomBurstSize(ns3::Ptr<ns3::RandomVariableStream> arg0) [member function]
+    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomBurstSize(ns3::Ptr<ns3::RandomVariableStream> burstSz) [member function]
     cls.add_method('SetRandomBurstSize', 
                    'void', 
-                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'arg0')])
-    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomVariable(ns3::Ptr<ns3::RandomVariableStream> arg0) [member function]
+                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'burstSz')])
+    ## error-model.h (module 'network'): void ns3::BurstErrorModel::SetRandomVariable(ns3::Ptr<ns3::RandomVariableStream> ranVar) [member function]
     cls.add_method('SetRandomVariable', 
                    'void', 
-                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'arg0')])
+                   [param('ns3::Ptr< ns3::RandomVariableStream >', 'ranVar')])
     ## error-model.h (module 'network'): bool ns3::BurstErrorModel::DoCorrupt(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('DoCorrupt', 
                    'bool', 
diff -Naur ns-3.18.1/src/point-to-point/doc/point-to-point.rst ns-3.19/src/point-to-point/doc/point-to-point.rst
--- ns-3.18.1/src/point-to-point/doc/point-to-point.rst	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/point-to-point/doc/point-to-point.rst	2013-12-20 09:44:51.000000000 -0800
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 PointToPoint NetDevice
 ----------------------
@@ -76,7 +77,7 @@
 The conceptual model of interest is that of a bare computer "husk" into which
 you plug net devices. The bare computers are created using a ``NodeContainer``
 helper. You just ask this helper to create as many computers (we call them
-``Nodes``) as you need on your network:::
+``Nodes``) as you need on your network::
 
   NodeContainer nodes;
   nodes.Create (2);
@@ -119,7 +120,7 @@
 When a packet is sent to the Point-to-Point net device for transmission it
 always passes through the transmit queue. The transmit queue in the
 PointToPointNetDevice inherits from Queue, and therefore inherits three trace
-sources:::
+sources:
 
 * An Enqueue operation source (see ns3::Queue::m_traceEnqueue);
 * A Dequeue operation source (see ns3::Queue::m_traceDequeue);
diff -Naur ns-3.18.1/src/point-to-point/helper/point-to-point-helper.cc ns-3.19/src/point-to-point/helper/point-to-point-helper.cc
--- ns-3.18.1/src/point-to-point/helper/point-to-point-helper.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/point-to-point/helper/point-to-point-helper.cc	2013-12-20 09:44:51.000000000 -0800
@@ -241,6 +241,7 @@
   //use a normal p2p channel, otherwise use a remote channel
   bool useNormalChannel = true;
   Ptr<PointToPointChannel> channel = 0;
+
   if (MpiInterface::IsEnabled ())
     {
       uint32_t n1SystemId = a->GetSystemId ();
diff -Naur ns-3.18.1/src/point-to-point/model/point-to-point-channel.cc ns-3.19/src/point-to-point/model/point-to-point-channel.cc
--- ns-3.18.1/src/point-to-point/model/point-to-point-channel.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/point-to-point/model/point-to-point-channel.cc	2013-12-20 09:44:51.000000000 -0800
@@ -27,7 +27,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (PointToPointChannel);
+NS_OBJECT_ENSURE_REGISTERED (PointToPointChannel)
+  ;
 
 TypeId 
 PointToPointChannel::GetTypeId (void)
diff -Naur ns-3.18.1/src/point-to-point/model/point-to-point-net-device.cc ns-3.19/src/point-to-point/model/point-to-point-net-device.cc
--- ns-3.18.1/src/point-to-point/model/point-to-point-net-device.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/point-to-point/model/point-to-point-net-device.cc	2013-12-20 09:44:51.000000000 -0800
@@ -25,7 +25,6 @@
 #include "ns3/trace-source-accessor.h"
 #include "ns3/uinteger.h"
 #include "ns3/pointer.h"
-#include "ns3/mpi-interface.h"
 #include "point-to-point-net-device.h"
 #include "point-to-point-channel.h"
 #include "ppp-header.h"
@@ -34,7 +33,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (PointToPointNetDevice);
+NS_OBJECT_ENSURE_REGISTERED (PointToPointNetDevice)
+  ;
 
 TypeId 
 PointToPointNetDevice::GetTypeId (void)
diff -Naur ns-3.18.1/src/point-to-point/model/point-to-point-net-device.h ns-3.19/src/point-to-point/model/point-to-point-net-device.h
--- ns-3.18.1/src/point-to-point/model/point-to-point-net-device.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/point-to-point/model/point-to-point-net-device.h	2013-12-20 09:44:51.000000000 -0800
@@ -38,7 +38,7 @@
 class ErrorModel;
 
 /**
- * \defgroup point-to-point PointToPointNetDevice
+ * \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.
  */
 
diff -Naur ns-3.18.1/src/point-to-point/model/point-to-point-remote-channel.cc ns-3.19/src/point-to-point/model/point-to-point-remote-channel.cc
--- ns-3.18.1/src/point-to-point/model/point-to-point-remote-channel.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/point-to-point/model/point-to-point-remote-channel.cc	2013-12-20 09:44:51.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (PointToPointRemoteChannel);
+NS_OBJECT_ENSURE_REGISTERED (PointToPointRemoteChannel)
+  ;
 
 TypeId
 PointToPointRemoteChannel::GetTypeId (void)
diff -Naur ns-3.18.1/src/point-to-point/model/ppp-header.cc ns-3.19/src/point-to-point/model/ppp-header.cc
--- ns-3.18.1/src/point-to-point/model/ppp-header.cc	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/point-to-point/model/ppp-header.cc	2013-12-20 09:44:51.000000000 -0800
@@ -27,7 +27,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (PppHeader);
+NS_OBJECT_ENSURE_REGISTERED (PppHeader)
+  ;
 
 PppHeader::PppHeader ()
 {
diff -Naur ns-3.18.1/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py ns-3.19/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:51.000000000 -0800
@@ -265,7 +265,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1888,10 +1888,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -4997,6 +4998,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -5007,6 +5013,11 @@
                    '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', 
@@ -5022,6 +5033,11 @@
                    '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', 
@@ -5047,6 +5063,11 @@
                    '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', 
@@ -6475,10 +6496,10 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
-    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    ## 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', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   [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', 
diff -Naur ns-3.18.1/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py ns-3.19/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:51.000000000 -0800
@@ -265,7 +265,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1888,10 +1888,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -4997,6 +4998,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -5007,6 +5013,11 @@
                    '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', 
@@ -5022,6 +5033,11 @@
                    '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', 
@@ -5047,6 +5063,11 @@
                    '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', 
@@ -6475,10 +6496,10 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
-    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    ## 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', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   [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', 
diff -Naur ns-3.18.1/src/point-to-point-layout/model/point-to-point-dumbbell.h ns-3.19/src/point-to-point-layout/model/point-to-point-dumbbell.h
--- ns-3.18.1/src/point-to-point-layout/model/point-to-point-dumbbell.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/point-to-point-layout/model/point-to-point-dumbbell.h	2013-12-20 09:44:51.000000000 -0800
@@ -33,7 +33,7 @@
 namespace ns3 {
 
 /**
- * \ingroup pointtopointlayout
+ * \ingroup point-to-point-layout
  *
  * \brief A helper to make it easier to create a dumbbell topology
  * with p2p links
diff -Naur ns-3.18.1/src/point-to-point-layout/model/point-to-point-grid.h ns-3.19/src/point-to-point-layout/model/point-to-point-grid.h
--- ns-3.18.1/src/point-to-point-layout/model/point-to-point-grid.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/point-to-point-layout/model/point-to-point-grid.h	2013-12-20 09:44:51.000000000 -0800
@@ -32,7 +32,7 @@
 namespace ns3 {
 
 /**
- * \ingroup pointtopointlayout
+ * \ingroup point-to-point-layout
  *
  * \brief A helper to make it easier to create a grid topology
  * with p2p links
diff -Naur ns-3.18.1/src/point-to-point-layout/model/point-to-point-star.h ns-3.19/src/point-to-point-layout/model/point-to-point-star.h
--- ns-3.18.1/src/point-to-point-layout/model/point-to-point-star.h	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/point-to-point-layout/model/point-to-point-star.h	2013-12-20 09:44:51.000000000 -0800
@@ -31,12 +31,12 @@
 namespace ns3 {
 
 /**
- * \defgroup pointtopointlayout Point-to-Point Layout Helpers
+ * \defgroup point-to-point-layout Point-to-Point Layout Helpers
  *
  */
 
 /**
- * \ingroup pointtopointlayout
+ * \ingroup point-to-point-layout
  *
  * \brief A helper to make it easier to create a star topology
  * with PointToPoint links
diff -Naur ns-3.18.1/src/propagation/bindings/modulegen__gcc_ILP32.py ns-3.19/src/propagation/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/propagation/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:32.000000000 -0800
+++ ns-3.19/src/propagation/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:51.000000000 -0800
@@ -91,7 +91,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1273,6 +1273,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -1283,6 +1288,11 @@
                    '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', 
@@ -1298,6 +1308,11 @@
                    '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', 
@@ -1323,6 +1338,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/propagation/bindings/modulegen__gcc_LP64.py ns-3.19/src/propagation/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/propagation/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/propagation/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:51.000000000 -0800
@@ -91,7 +91,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1273,6 +1273,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -1283,6 +1288,11 @@
                    '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', 
@@ -1298,6 +1308,11 @@
                    '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', 
@@ -1323,6 +1338,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/propagation/doc/propagation.rst ns-3.19/src/propagation/doc/propagation.rst
--- ns-3.18.1/src/propagation/doc/propagation.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/propagation/doc/propagation.rst	2013-12-20 09:44:51.000000000 -0800
@@ -111,6 +111,7 @@
 and for large cities
 
 .. math::
+
   C_\mathrm{H} = \left\{\begin{array}{ll} 8.29 (\log{(1.54h_M)})^2 -1.1 & \mbox{if } 150\leq f\leq 200 \\ 3.2(\log{(11.75h_M)})^2 -4.97 & \mbox{if } 200<f\leq 1500\end{array} \right.
 
 There extension for the standard OH in suburban is
diff -Naur ns-3.18.1/src/propagation/model/cost231-propagation-loss-model.cc ns-3.19/src/propagation/model/cost231-propagation-loss-model.cc
--- ns-3.18.1/src/propagation/model/cost231-propagation-loss-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/propagation/model/cost231-propagation-loss-model.cc	2013-12-20 09:44:51.000000000 -0800
@@ -29,8 +29,10 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Cost231PropagationLossModel");
-NS_OBJECT_ENSURE_REGISTERED (Cost231PropagationLossModel);
+NS_LOG_COMPONENT_DEFINE ("Cost231PropagationLossModel")
+  ;
+NS_OBJECT_ENSURE_REGISTERED (Cost231PropagationLossModel)
+  ;
 
 TypeId
 Cost231PropagationLossModel::GetTypeId (void)
diff -Naur ns-3.18.1/src/propagation/model/itu-r-1411-los-propagation-loss-model.cc ns-3.19/src/propagation/model/itu-r-1411-los-propagation-loss-model.cc
--- ns-3.18.1/src/propagation/model/itu-r-1411-los-propagation-loss-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/propagation/model/itu-r-1411-los-propagation-loss-model.cc	2013-12-20 09:44:51.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ItuR1411LosPropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (ItuR1411LosPropagationLossModel)
+  ;
 
 TypeId
 ItuR1411LosPropagationLossModel::GetTypeId (void)
diff -Naur ns-3.18.1/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.cc ns-3.19/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.cc
--- ns-3.18.1/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.cc	2013-12-20 09:44:51.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ItuR1411NlosOverRooftopPropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (ItuR1411NlosOverRooftopPropagationLossModel)
+  ;
 
 
 TypeId
diff -Naur ns-3.18.1/src/propagation/model/jakes-process.cc ns-3.19/src/propagation/model/jakes-process.cc
--- ns-3.18.1/src/propagation/model/jakes-process.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/propagation/model/jakes-process.cc	2013-12-20 09:44:51.000000000 -0800
@@ -43,7 +43,8 @@
   return (m_amplitude * std::cos (at.GetSeconds () * m_omega + m_phase));
 }
 
-NS_OBJECT_ENSURE_REGISTERED (JakesProcess);
+NS_OBJECT_ENSURE_REGISTERED (JakesProcess)
+  ;
 
 TypeId
 JakesProcess::GetTypeId ()
diff -Naur ns-3.18.1/src/propagation/model/jakes-propagation-loss-model.cc ns-3.19/src/propagation/model/jakes-propagation-loss-model.cc
--- ns-3.18.1/src/propagation/model/jakes-propagation-loss-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/propagation/model/jakes-propagation-loss-model.cc	2013-12-20 09:44:51.000000000 -0800
@@ -26,7 +26,8 @@
 
 namespace ns3
 {
-NS_OBJECT_ENSURE_REGISTERED (JakesPropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (JakesPropagationLossModel)
+  ;
 
 
 const double JakesPropagationLossModel::PI = 3.14159265358979323846;
diff -Naur ns-3.18.1/src/propagation/model/kun-2600-mhz-propagation-loss-model.cc ns-3.19/src/propagation/model/kun-2600-mhz-propagation-loss-model.cc
--- ns-3.18.1/src/propagation/model/kun-2600-mhz-propagation-loss-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/propagation/model/kun-2600-mhz-propagation-loss-model.cc	2013-12-20 09:44:51.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Kun2600MhzPropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (Kun2600MhzPropagationLossModel)
+  ;
 
 
 TypeId
diff -Naur ns-3.18.1/src/propagation/model/okumura-hata-propagation-loss-model.cc ns-3.19/src/propagation/model/okumura-hata-propagation-loss-model.cc
--- ns-3.18.1/src/propagation/model/okumura-hata-propagation-loss-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/propagation/model/okumura-hata-propagation-loss-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (OkumuraHataPropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (OkumuraHataPropagationLossModel)
+  ;
 
 
 TypeId
diff -Naur ns-3.18.1/src/propagation/model/propagation-delay-model.cc ns-3.19/src/propagation/model/propagation-delay-model.cc
--- ns-3.18.1/src/propagation/model/propagation-delay-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/propagation/model/propagation-delay-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -25,7 +25,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (PropagationDelayModel);
+NS_OBJECT_ENSURE_REGISTERED (PropagationDelayModel)
+  ;
 
 TypeId 
 PropagationDelayModel::GetTypeId (void)
@@ -48,7 +49,8 @@
 
 // ------------------------------------------------------------------------- //
 
-NS_OBJECT_ENSURE_REGISTERED (RandomPropagationDelayModel);
+NS_OBJECT_ENSURE_REGISTERED (RandomPropagationDelayModel)
+  ;
 
 TypeId
 RandomPropagationDelayModel::GetTypeId (void)
@@ -84,7 +86,8 @@
   return 1;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (ConstantSpeedPropagationDelayModel);
+NS_OBJECT_ENSURE_REGISTERED (ConstantSpeedPropagationDelayModel)
+  ;
 
 TypeId
 ConstantSpeedPropagationDelayModel::GetTypeId (void)
diff -Naur ns-3.18.1/src/propagation/model/propagation-loss-model.cc ns-3.19/src/propagation/model/propagation-loss-model.cc
--- ns-3.18.1/src/propagation/model/propagation-loss-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/propagation/model/propagation-loss-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -36,7 +36,8 @@
 
 // ------------------------------------------------------------------------- //
 
-NS_OBJECT_ENSURE_REGISTERED (PropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (PropagationLossModel)
+  ;
 
 TypeId 
 PropagationLossModel::GetTypeId (void)
@@ -95,7 +96,8 @@
 
 // ------------------------------------------------------------------------- //
 
-NS_OBJECT_ENSURE_REGISTERED (RandomPropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (RandomPropagationLossModel)
+  ;
 
 TypeId 
 RandomPropagationLossModel::GetTypeId (void)
@@ -138,7 +140,8 @@
 
 // ------------------------------------------------------------------------- //
 
-NS_OBJECT_ENSURE_REGISTERED (FriisPropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (FriisPropagationLossModel)
+  ;
 
 const double FriisPropagationLossModel::PI = 3.14159265358979323846;
 
@@ -275,7 +278,8 @@
 // ------------------------------------------------------------------------- //
 // -- Two-Ray Ground Model ported from NS-2 -- tomhewer@mac.com -- Nov09 //
 
-NS_OBJECT_ENSURE_REGISTERED (TwoRayGroundPropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (TwoRayGroundPropagationLossModel)
+  ;
 
 const double TwoRayGroundPropagationLossModel::PI = 3.14159265358979323846;
 
@@ -449,7 +453,8 @@
 
 // ------------------------------------------------------------------------- //
 
-NS_OBJECT_ENSURE_REGISTERED (LogDistancePropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (LogDistancePropagationLossModel)
+  ;
 
 TypeId
 LogDistancePropagationLossModel::GetTypeId (void)
@@ -537,7 +542,8 @@
 
 // ------------------------------------------------------------------------- //
 
-NS_OBJECT_ENSURE_REGISTERED (ThreeLogDistancePropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (ThreeLogDistancePropagationLossModel)
+  ;
 
 TypeId
 ThreeLogDistancePropagationLossModel::GetTypeId (void)
@@ -638,7 +644,8 @@
 
 // ------------------------------------------------------------------------- //
 
-NS_OBJECT_ENSURE_REGISTERED (NakagamiPropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (NakagamiPropagationLossModel)
+  ;
 
 TypeId
 NakagamiPropagationLossModel::GetTypeId (void)
@@ -752,7 +759,8 @@
 
 // ------------------------------------------------------------------------- //
 
-NS_OBJECT_ENSURE_REGISTERED (FixedRssLossModel);
+NS_OBJECT_ENSURE_REGISTERED (FixedRssLossModel)
+  ;
 
 TypeId 
 FixedRssLossModel::GetTypeId (void)
@@ -798,7 +806,8 @@
 
 // ------------------------------------------------------------------------- //
 
-NS_OBJECT_ENSURE_REGISTERED (MatrixPropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (MatrixPropagationLossModel)
+  ;
 
 TypeId 
 MatrixPropagationLossModel::GetTypeId (void)
@@ -877,7 +886,8 @@
 
 // ------------------------------------------------------------------------- //
 
-NS_OBJECT_ENSURE_REGISTERED (RangePropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (RangePropagationLossModel)
+  ;
 
 TypeId
 RangePropagationLossModel::GetTypeId (void)
diff -Naur ns-3.18.1/src/propagation/test/itu-r-1411-los-test-suite.cc ns-3.19/src/propagation/test/itu-r-1411-los-test-suite.cc
--- ns-3.18.1/src/propagation/test/itu-r-1411-los-test-suite.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/propagation/test/itu-r-1411-los-test-suite.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("ItuR1411LosPropagationLossModelTest");
+NS_LOG_COMPONENT_DEFINE ("ItuR1411LosPropagationLossModelTest")
+  ;
 
 
 class ItuR1411LosPropagationLossModelTestCase : public TestCase
diff -Naur ns-3.18.1/src/propagation/test/itu-r-1411-nlos-over-rooftop-test-suite.cc ns-3.19/src/propagation/test/itu-r-1411-nlos-over-rooftop-test-suite.cc
--- ns-3.18.1/src/propagation/test/itu-r-1411-nlos-over-rooftop-test-suite.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/propagation/test/itu-r-1411-nlos-over-rooftop-test-suite.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("ItuR1411NlosOverRooftopPropagationLossModelTest");
+NS_LOG_COMPONENT_DEFINE ("ItuR1411NlosOverRooftopPropagationLossModelTest")
+  ;
 
 
 class ItuR1411NlosOverRooftopPropagationLossModelTestCase : public TestCase
diff -Naur ns-3.18.1/src/propagation/test/kun-2600-mhz-test-suite.cc ns-3.19/src/propagation/test/kun-2600-mhz-test-suite.cc
--- ns-3.18.1/src/propagation/test/kun-2600-mhz-test-suite.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/propagation/test/kun-2600-mhz-test-suite.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Kun2600MhzPropagationLossModelTest");
+NS_LOG_COMPONENT_DEFINE ("Kun2600MhzPropagationLossModelTest")
+  ;
 
 
 class Kun2600MhzPropagationLossModelTestCase : public TestCase
diff -Naur ns-3.18.1/src/propagation/test/okumura-hata-test-suite.cc ns-3.19/src/propagation/test/okumura-hata-test-suite.cc
--- ns-3.18.1/src/propagation/test/okumura-hata-test-suite.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/propagation/test/okumura-hata-test-suite.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("OkumuraHataPropagationLossModelTest");
+NS_LOG_COMPONENT_DEFINE ("OkumuraHataPropagationLossModelTest")
+  ;
 
 
 class OkumuraHataPropagationLossModelTestCase : public TestCase
diff -Naur ns-3.18.1/src/sixlowpan/bindings/callbacks_list.py ns-3.19/src/sixlowpan/bindings/callbacks_list.py
--- ns-3.18.1/src/sixlowpan/bindings/callbacks_list.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/sixlowpan/bindings/callbacks_list.py	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,4 @@
+callback_classes = [
+    ['bool', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['bool', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+]
diff -Naur ns-3.18.1/src/sixlowpan/bindings/modulegen__gcc_ILP32.py ns-3.19/src/sixlowpan/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/sixlowpan/bindings/modulegen__gcc_ILP32.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/sixlowpan/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,5163 @@
+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.sixlowpan', 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')
+    ## 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')
+    ## 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')
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer [class]
+    module.add_class('NetDeviceContainer', 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')
+    ## 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'))
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanDispatch [class]
+    module.add_class('SixLowPanDispatch')
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanDispatch::Dispatch_e [enumeration]
+    module.add_enum('Dispatch_e', ['LOWPAN_NALP', 'LOWPAN_NALP_N', 'LOWPAN_NOTCOMPRESSED', 'LOWPAN_HC1', 'LOWPAN_BC0', 'LOWPAN_IPHC', 'LOWPAN_IPHC_N', 'LOWPAN_MESH', 'LOWPAN_MESH_N', 'LOWPAN_FRAG1', 'LOWPAN_FRAG1_N', 'LOWPAN_FRAGN', 'LOWPAN_FRAGN_N', 'LOWPAN_UNSUPPORTED'], outer_class=root_module['ns3::SixLowPanDispatch'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanDispatch::NhcDispatch_e [enumeration]
+    module.add_enum('NhcDispatch_e', ['LOWPAN_NHC', 'LOWPAN_NHC_N', 'LOWPAN_UDPNHC', 'LOWPAN_UDPNHC_N', 'LOWPAN_NHCUNSUPPORTED'], outer_class=root_module['ns3::SixLowPanDispatch'])
+    ## sixlowpan-helper.h (module 'sixlowpan'): ns3::SixLowPanHelper [class]
+    module.add_class('SixLowPanHelper')
+    ## tag.h (module 'network'): ns3::Tag [class]
+    module.add_class('Tag', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
+    ## tag-buffer.h (module 'network'): ns3::TagBuffer [class]
+    module.add_class('TagBuffer', import_from_module='ns.network')
+    ## type-id.h (module 'core'): ns3::TypeId [class]
+    module.add_class('TypeId', import_from_module='ns.core')
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
+    module.add_enum('AttributeFlag', ['ATTR_GET', 'ATTR_SET', 'ATTR_CONSTRUCT', 'ATTR_SGC'], outer_class=root_module['ns3::TypeId'], import_from_module='ns.core')
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation [struct]
+    module.add_class('AttributeInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation [struct]
+    module.add_class('TraceSourceInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
+    ## empty.h (module 'core'): ns3::empty [class]
+    module.add_class('empty', import_from_module='ns.core')
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
+    module.add_class('int64x64_t', import_from_module='ns.core')
+    ## chunk.h (module 'network'): ns3::Chunk [class]
+    module.add_class('Chunk', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
+    ## header.h (module 'network'): ns3::Header [class]
+    module.add_class('Header', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
+    ## 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')
+    ## 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'])
+    ## 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]
+    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::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Packet', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Packet>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanFrag1 [class]
+    module.add_class('SixLowPanFrag1', parent=root_module['ns3::Header'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanFragN [class]
+    module.add_class('SixLowPanFragN', parent=root_module['ns3::Header'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanHc1 [class]
+    module.add_class('SixLowPanHc1', parent=root_module['ns3::Header'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanHc1::LowPanHc1Addr_e [enumeration]
+    module.add_enum('LowPanHc1Addr_e', ['HC1_PIII', 'HC1_PIIC', 'HC1_PCII', 'HC1_PCIC'], outer_class=root_module['ns3::SixLowPanHc1'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanHc1::LowPanHc1NextHeader_e [enumeration]
+    module.add_enum('LowPanHc1NextHeader_e', ['HC1_NC', 'HC1_UDP', 'HC1_ICMP', 'HC1_TCP'], outer_class=root_module['ns3::SixLowPanHc1'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc [class]
+    module.add_class('SixLowPanIphc', parent=root_module['ns3::Header'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::TrafficClassFlowLabel_e [enumeration]
+    module.add_enum('TrafficClassFlowLabel_e', ['TF_FULL', 'TF_DSCP_ELIDED', 'TF_FL_ELIDED', 'TF_ELIDED'], outer_class=root_module['ns3::SixLowPanIphc'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::Hlim_e [enumeration]
+    module.add_enum('Hlim_e', ['HLIM_INLINE', 'HLIM_COMPR_1', 'HLIM_COMPR_64', 'HLIM_COMPR_255'], outer_class=root_module['ns3::SixLowPanIphc'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::HeaderCompression_e [enumeration]
+    module.add_enum('HeaderCompression_e', ['HC_INLINE', 'HC_COMPR_64', 'HC_COMPR_16', 'HC_COMPR_0'], outer_class=root_module['ns3::SixLowPanIphc'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanNhcExtension [class]
+    module.add_class('SixLowPanNhcExtension', parent=root_module['ns3::Header'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanNhcExtension::Eid_e [enumeration]
+    module.add_enum('Eid_e', ['EID_HOPBYHOP_OPTIONS_H', 'EID_ROUTING_H', 'EID_FRAGMENTATION_H', 'EID_DESTINATION_OPTIONS_H', 'EID_MOBILITY_H', 'EID_IPv6_H'], outer_class=root_module['ns3::SixLowPanNhcExtension'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanUdpNhcExtension [class]
+    module.add_class('SixLowPanUdpNhcExtension', parent=root_module['ns3::Header'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanUdpNhcExtension::Ports_e [enumeration]
+    module.add_enum('Ports_e', ['PORTS_INLINE', 'PORTS_ALL_SRC_LAST_DST', 'PORTS_LAST_SRC_ALL_DST', 'PORTS_LAST_SRC_LAST_DST'], outer_class=root_module['ns3::SixLowPanUdpNhcExtension'])
+    ## 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'])
+    ## 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'])
+    ## random-variable-stream.h (module 'core'): ns3::WeibullRandomVariable [class]
+    module.add_class('WeibullRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## 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'])
+    ## 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'])
+    ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable [class]
+    module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## 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]
+    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'])
+    ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable [class]
+    module.add_class('GammaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## 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'])
+    ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
+    module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## 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> >'])
+    ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable [class]
+    module.add_class('NormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker [class]
+    module.add_class('ObjectFactoryChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue [class]
+    module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## packet.h (module 'network'): ns3::Packet [class]
+    module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+    ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
+    module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::SixLowPanNetDevice [class]
+    module.add_class('SixLowPanNetDevice', parent=root_module['ns3::NetDevice'])
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::SixLowPanNetDevice::DropReason [enumeration]
+    module.add_enum('DropReason', ['DROP_FRAGMENT_TIMEOUT', 'DROP_FRAGMENT_BUFFER_FULL', 'DROP_UNKNOWN_EXTENSION'], outer_class=root_module['ns3::SixLowPanNetDevice'])
+    ## 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'])
+    
+    ## 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('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
+def register_methods(root_module):
+    register_Ns3Address_methods(root_module, root_module['ns3::Address'])
+    register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
+    register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
+    register_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_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_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
+    register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
+    register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
+    register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
+    register_Ns3PacketMetadata_methods(root_module, root_module['ns3::PacketMetadata'])
+    register_Ns3PacketMetadataItem_methods(root_module, root_module['ns3::PacketMetadata::Item'])
+    register_Ns3PacketMetadataItemIterator_methods(root_module, root_module['ns3::PacketMetadata::ItemIterator'])
+    register_Ns3PacketTagIterator_methods(root_module, root_module['ns3::PacketTagIterator'])
+    register_Ns3PacketTagIteratorItem_methods(root_module, root_module['ns3::PacketTagIterator::Item'])
+    register_Ns3PacketTagList_methods(root_module, root_module['ns3::PacketTagList'])
+    register_Ns3PacketTagListTagData_methods(root_module, root_module['ns3::PacketTagList::TagData'])
+    register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
+    register_Ns3SixLowPanDispatch_methods(root_module, root_module['ns3::SixLowPanDispatch'])
+    register_Ns3SixLowPanHelper_methods(root_module, root_module['ns3::SixLowPanHelper'])
+    register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
+    register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
+    register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
+    register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
+    register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
+    register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
+    register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
+    register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
+    register_Ns3Header_methods(root_module, root_module['ns3::Header'])
+    register_Ns3Ipv6Header_methods(root_module, root_module['ns3::Ipv6Header'])
+    register_Ns3Object_methods(root_module, root_module['ns3::Object'])
+    register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
+    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__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
+    register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+    register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
+    register_Ns3SixLowPanFrag1_methods(root_module, root_module['ns3::SixLowPanFrag1'])
+    register_Ns3SixLowPanFragN_methods(root_module, root_module['ns3::SixLowPanFragN'])
+    register_Ns3SixLowPanHc1_methods(root_module, root_module['ns3::SixLowPanHc1'])
+    register_Ns3SixLowPanIphc_methods(root_module, root_module['ns3::SixLowPanIphc'])
+    register_Ns3SixLowPanNhcExtension_methods(root_module, root_module['ns3::SixLowPanNhcExtension'])
+    register_Ns3SixLowPanUdpNhcExtension_methods(root_module, root_module['ns3::SixLowPanUdpNhcExtension'])
+    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_Ns3WeibullRandomVariable_methods(root_module, root_module['ns3::WeibullRandomVariable'])
+    register_Ns3ZetaRandomVariable_methods(root_module, root_module['ns3::ZetaRandomVariable'])
+    register_Ns3ZipfRandomVariable_methods(root_module, root_module['ns3::ZipfRandomVariable'])
+    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_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
+    register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
+    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_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
+    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_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
+    register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
+    register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
+    register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
+    register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
+    register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
+    register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3SixLowPanNetDevice_methods(root_module, root_module['ns3::SixLowPanNetDevice'])
+    register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
+    register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
+    register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
+    register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
+    return
+
+def register_Ns3Address_methods(root_module, cls):
+    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_Ns3AttributeConstructionList_methods(root_module, cls):
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::AttributeConstructionList(ns3::AttributeConstructionList const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AttributeConstructionList const &', 'arg0')])
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::AttributeConstructionList() [constructor]
+    cls.add_constructor([])
+    ## attribute-construction-list.h (module 'core'): void ns3::AttributeConstructionList::Add(std::string name, ns3::Ptr<ns3::AttributeChecker const> checker, ns3::Ptr<ns3::AttributeValue> value) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker'), param('ns3::Ptr< ns3::AttributeValue >', 'value')])
+    ## attribute-construction-list.h (module 'core'): std::_List_const_iterator<ns3::AttributeConstructionList::Item> ns3::AttributeConstructionList::Begin() const [member function]
+    cls.add_method('Begin', 
+                   'std::_List_const_iterator< ns3::AttributeConstructionList::Item >', 
+                   [], 
+                   is_const=True)
+    ## attribute-construction-list.h (module 'core'): std::_List_const_iterator<ns3::AttributeConstructionList::Item> ns3::AttributeConstructionList::End() const [member function]
+    cls.add_method('End', 
+                   'std::_List_const_iterator< ns3::AttributeConstructionList::Item >', 
+                   [], 
+                   is_const=True)
+    ## attribute-construction-list.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeConstructionList::Find(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('Find', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True)
+    return
+
+def register_Ns3AttributeConstructionListItem_methods(root_module, cls):
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::Item() [constructor]
+    cls.add_constructor([])
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::Item(ns3::AttributeConstructionList::Item const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AttributeConstructionList::Item const &', 'arg0')])
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::checker [variable]
+    cls.add_instance_attribute('checker', 'ns3::Ptr< ns3::AttributeChecker const >', is_const=False)
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::name [variable]
+    cls.add_instance_attribute('name', 'std::string', is_const=False)
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::value [variable]
+    cls.add_instance_attribute('value', 'ns3::Ptr< ns3::AttributeValue >', is_const=False)
+    return
+
+def register_Ns3Buffer_methods(root_module, cls):
+    ## buffer.h (module 'network'): ns3::Buffer::Buffer() [constructor]
+    cls.add_constructor([])
+    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize) [constructor]
+    cls.add_constructor([param('uint32_t', 'dataSize')])
+    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize, bool initialize) [constructor]
+    cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
+    ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
+    cls.add_constructor([param('ns3::Buffer const &', 'o')])
+    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    cls.add_method('AddAtEnd', 
+                   'bool', 
+                   [param('uint32_t', 'end')])
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
+    cls.add_method('AddAtEnd', 
+                   'void', 
+                   [param('ns3::Buffer const &', 'o')])
+    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    cls.add_method('AddAtStart', 
+                   'bool', 
+                   [param('uint32_t', 'start')])
+    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   'ns3::Buffer::Iterator', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): void ns3::Buffer::CopyData(std::ostream * os, uint32_t size) const [member function]
+    cls.add_method('CopyData', 
+                   'void', 
+                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::CopyData(uint8_t * buffer, uint32_t size) const [member function]
+    cls.add_method('CopyData', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
+                   is_const=True)
+    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFragment(uint32_t start, uint32_t length) const [member function]
+    cls.add_method('CreateFragment', 
+                   'ns3::Buffer', 
+                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
+                   is_const=True)
+    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
+    cls.add_method('CreateFullCopy', 
+                   'ns3::Buffer', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::End() const [member function]
+    cls.add_method('End', 
+                   'ns3::Buffer::Iterator', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
+    cls.add_method('GetCurrentEndOffset', 
+                   'int32_t', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
+    cls.add_method('GetCurrentStartOffset', 
+                   'int32_t', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint8_t const * ns3::Buffer::PeekData() const [member function]
+    cls.add_method('PeekData', 
+                   'uint8_t const *', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtEnd(uint32_t end) [member function]
+    cls.add_method('RemoveAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'end')])
+    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtStart(uint32_t start) [member function]
+    cls.add_method('RemoveAtStart', 
+                   'void', 
+                   [param('uint32_t', 'start')])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
+    cls.add_method('Serialize', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
+                   is_const=True)
+    return
+
+def register_Ns3BufferIterator_methods(root_module, cls):
+    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator(ns3::Buffer::Iterator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Buffer::Iterator const &', 'arg0')])
+    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator() [constructor]
+    cls.add_constructor([])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size) [member function]
+    cls.add_method('CalculateIpChecksum', 
+                   'uint16_t', 
+                   [param('uint16_t', 'size')])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size, uint32_t initialChecksum) [member function]
+    cls.add_method('CalculateIpChecksum', 
+                   'uint16_t', 
+                   [param('uint16_t', 'size'), param('uint32_t', 'initialChecksum')])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetDistanceFrom(ns3::Buffer::Iterator const & o) const [member function]
+    cls.add_method('GetDistanceFrom', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator const &', 'o')], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsEnd() const [member function]
+    cls.add_method('IsEnd', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsStart() const [member function]
+    cls.add_method('IsStart', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next() [member function]
+    cls.add_method('Next', 
+                   'void', 
+                   [])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next(uint32_t delta) [member function]
+    cls.add_method('Next', 
+                   'void', 
+                   [param('uint32_t', 'delta')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev() [member function]
+    cls.add_method('Prev', 
+                   'void', 
+                   [])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev(uint32_t delta) [member function]
+    cls.add_method('Prev', 
+                   'void', 
+                   [param('uint32_t', 'delta')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Read(uint8_t * buffer, uint32_t size) [member function]
+    cls.add_method('Read', 
+                   'void', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadLsbtohU16() [member function]
+    cls.add_method('ReadLsbtohU16', 
+                   'uint16_t', 
+                   [])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadLsbtohU32() [member function]
+    cls.add_method('ReadLsbtohU32', 
+                   'uint32_t', 
+                   [])
+    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadLsbtohU64() [member function]
+    cls.add_method('ReadLsbtohU64', 
+                   'uint64_t', 
+                   [])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadNtohU16() [member function]
+    cls.add_method('ReadNtohU16', 
+                   'uint16_t', 
+                   [])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadNtohU32() [member function]
+    cls.add_method('ReadNtohU32', 
+                   'uint32_t', 
+                   [])
+    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadNtohU64() [member function]
+    cls.add_method('ReadNtohU64', 
+                   'uint64_t', 
+                   [])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadU16() [member function]
+    cls.add_method('ReadU16', 
+                   'uint16_t', 
+                   [])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadU32() [member function]
+    cls.add_method('ReadU32', 
+                   'uint32_t', 
+                   [])
+    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadU64() [member function]
+    cls.add_method('ReadU64', 
+                   'uint64_t', 
+                   [])
+    ## buffer.h (module 'network'): uint8_t ns3::Buffer::Iterator::ReadU8() [member function]
+    cls.add_method('ReadU8', 
+                   'uint8_t', 
+                   [])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(uint8_t const * buffer, uint32_t size) [member function]
+    cls.add_method('Write', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(ns3::Buffer::Iterator start, ns3::Buffer::Iterator end) [member function]
+    cls.add_method('Write', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('ns3::Buffer::Iterator', 'end')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU16(uint16_t data) [member function]
+    cls.add_method('WriteHtolsbU16', 
+                   'void', 
+                   [param('uint16_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU32(uint32_t data) [member function]
+    cls.add_method('WriteHtolsbU32', 
+                   'void', 
+                   [param('uint32_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU64(uint64_t data) [member function]
+    cls.add_method('WriteHtolsbU64', 
+                   'void', 
+                   [param('uint64_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU16(uint16_t data) [member function]
+    cls.add_method('WriteHtonU16', 
+                   'void', 
+                   [param('uint16_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU32(uint32_t data) [member function]
+    cls.add_method('WriteHtonU32', 
+                   'void', 
+                   [param('uint32_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU64(uint64_t data) [member function]
+    cls.add_method('WriteHtonU64', 
+                   'void', 
+                   [param('uint64_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU16(uint16_t data) [member function]
+    cls.add_method('WriteU16', 
+                   'void', 
+                   [param('uint16_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU32(uint32_t data) [member function]
+    cls.add_method('WriteU32', 
+                   'void', 
+                   [param('uint32_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU64(uint64_t data) [member function]
+    cls.add_method('WriteU64', 
+                   'void', 
+                   [param('uint64_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data) [member function]
+    cls.add_method('WriteU8', 
+                   'void', 
+                   [param('uint8_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data, uint32_t len) [member function]
+    cls.add_method('WriteU8', 
+                   'void', 
+                   [param('uint8_t', 'data'), param('uint32_t', 'len')])
+    return
+
+def register_Ns3ByteTagIterator_methods(root_module, cls):
+    ## packet.h (module 'network'): ns3::ByteTagIterator::ByteTagIterator(ns3::ByteTagIterator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagIterator const &', 'arg0')])
+    ## packet.h (module 'network'): bool ns3::ByteTagIterator::HasNext() const [member function]
+    cls.add_method('HasNext', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::ByteTagIterator::Item ns3::ByteTagIterator::Next() [member function]
+    cls.add_method('Next', 
+                   'ns3::ByteTagIterator::Item', 
+                   [])
+    return
+
+def register_Ns3ByteTagIteratorItem_methods(root_module, cls):
+    ## packet.h (module 'network'): ns3::ByteTagIterator::Item::Item(ns3::ByteTagIterator::Item const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagIterator::Item const &', 'arg0')])
+    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetEnd() const [member function]
+    cls.add_method('GetEnd', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetStart() const [member function]
+    cls.add_method('GetStart', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::ByteTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
+    cls.add_method('GetTag', 
+                   'void', 
+                   [param('ns3::Tag &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::TypeId ns3::ByteTagIterator::Item::GetTypeId() const [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3ByteTagList_methods(root_module, cls):
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList() [constructor]
+    cls.add_constructor([])
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList(ns3::ByteTagList const & o) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagList const &', 'o')])
+    ## byte-tag-list.h (module 'network'): ns3::TagBuffer ns3::ByteTagList::Add(ns3::TypeId tid, uint32_t bufferSize, int32_t start, int32_t end) [member function]
+    cls.add_method('Add', 
+                   'ns3::TagBuffer', 
+                   [param('ns3::TypeId', 'tid'), param('uint32_t', 'bufferSize'), param('int32_t', 'start'), param('int32_t', 'end')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Add(ns3::ByteTagList const & o) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::ByteTagList const &', 'o')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    cls.add_method('AddAtEnd', 
+                   'void', 
+                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+    cls.add_method('AddAtStart', 
+                   'void', 
+                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
+    cls.add_method('Begin', 
+                   'ns3::ByteTagList::Iterator', 
+                   [param('int32_t', 'offsetStart'), param('int32_t', 'offsetEnd')], 
+                   is_const=True)
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::RemoveAll() [member function]
+    cls.add_method('RemoveAll', 
+                   'void', 
+                   [])
+    return
+
+def register_Ns3ByteTagListIterator_methods(root_module, cls):
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Iterator(ns3::ByteTagList::Iterator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagList::Iterator const &', 'arg0')])
+    ## byte-tag-list.h (module 'network'): uint32_t ns3::ByteTagList::Iterator::GetOffsetStart() const [member function]
+    cls.add_method('GetOffsetStart', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## byte-tag-list.h (module 'network'): bool ns3::ByteTagList::Iterator::HasNext() const [member function]
+    cls.add_method('HasNext', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item ns3::ByteTagList::Iterator::Next() [member function]
+    cls.add_method('Next', 
+                   'ns3::ByteTagList::Iterator::Item', 
+                   [])
+    return
+
+def register_Ns3ByteTagListIteratorItem_methods(root_module, cls):
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::ByteTagList::Iterator::Item const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagList::Iterator::Item const &', 'arg0')])
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::TagBuffer buf) [constructor]
+    cls.add_constructor([param('ns3::TagBuffer', 'buf')])
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::buf [variable]
+    cls.add_instance_attribute('buf', 'ns3::TagBuffer', is_const=False)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::end [variable]
+    cls.add_instance_attribute('end', 'int32_t', is_const=False)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::size [variable]
+    cls.add_instance_attribute('size', 'uint32_t', is_const=False)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::start [variable]
+    cls.add_instance_attribute('start', 'int32_t', is_const=False)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::tid [variable]
+    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
+    return
+
+def register_Ns3CallbackBase_methods(root_module, cls):
+    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::CallbackBase const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CallbackBase const &', 'arg0')])
+    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase() [constructor]
+    cls.add_constructor([])
+    ## callback.h (module 'core'): ns3::Ptr<ns3::CallbackImplBase> ns3::CallbackBase::GetImpl() const [member function]
+    cls.add_method('GetImpl', 
+                   'ns3::Ptr< ns3::CallbackImplBase >', 
+                   [], 
+                   is_const=True)
+    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
+                        visibility='protected')
+    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
+    return
+
+def register_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_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_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_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_Ns3SixLowPanDispatch_methods(root_module, cls):
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanDispatch::SixLowPanDispatch(ns3::SixLowPanDispatch const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SixLowPanDispatch const &', 'arg0')])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanDispatch::SixLowPanDispatch() [constructor]
+    cls.add_constructor([])
+    ## sixlowpan-header.h (module 'sixlowpan'): static ns3::SixLowPanDispatch::Dispatch_e ns3::SixLowPanDispatch::GetDispatchType(uint8_t dispatch) [member function]
+    cls.add_method('GetDispatchType', 
+                   'ns3::SixLowPanDispatch::Dispatch_e', 
+                   [param('uint8_t', 'dispatch')], 
+                   is_static=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): static ns3::SixLowPanDispatch::NhcDispatch_e ns3::SixLowPanDispatch::GetNhcDispatchType(uint8_t dispatch) [member function]
+    cls.add_method('GetNhcDispatchType', 
+                   'ns3::SixLowPanDispatch::NhcDispatch_e', 
+                   [param('uint8_t', 'dispatch')], 
+                   is_static=True)
+    return
+
+def register_Ns3SixLowPanHelper_methods(root_module, cls):
+    ## sixlowpan-helper.h (module 'sixlowpan'): ns3::SixLowPanHelper::SixLowPanHelper(ns3::SixLowPanHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SixLowPanHelper const &', 'arg0')])
+    ## sixlowpan-helper.h (module 'sixlowpan'): ns3::SixLowPanHelper::SixLowPanHelper() [constructor]
+    cls.add_constructor([])
+    ## sixlowpan-helper.h (module 'sixlowpan'): int64_t ns3::SixLowPanHelper::AssignStreams(ns3::NetDeviceContainer c, int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('ns3::NetDeviceContainer', 'c'), param('int64_t', 'stream')])
+    ## sixlowpan-helper.h (module 'sixlowpan'): ns3::NetDeviceContainer ns3::SixLowPanHelper::Install(ns3::NetDeviceContainer c) [member function]
+    cls.add_method('Install', 
+                   'ns3::NetDeviceContainer', 
+                   [param('ns3::NetDeviceContainer', 'c')])
+    ## sixlowpan-helper.h (module 'sixlowpan'): void ns3::SixLowPanHelper::SetDeviceAttribute(std::string n1, ns3::AttributeValue const & v1) [member function]
+    cls.add_method('SetDeviceAttribute', 
+                   'void', 
+                   [param('std::string', 'n1'), param('ns3::AttributeValue const &', 'v1')])
+    return
+
+def register_Ns3Tag_methods(root_module, cls):
+    ## tag.h (module 'network'): ns3::Tag::Tag() [constructor]
+    cls.add_constructor([])
+    ## tag.h (module 'network'): ns3::Tag::Tag(ns3::Tag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Tag const &', 'arg0')])
+    ## tag.h (module 'network'): void ns3::Tag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## tag.h (module 'network'): uint32_t ns3::Tag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## tag.h (module 'network'): static ns3::TypeId ns3::Tag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tag.h (module 'network'): void ns3::Tag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## tag.h (module 'network'): void ns3::Tag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_Ns3TagBuffer_methods(root_module, cls):
+    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(ns3::TagBuffer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TagBuffer const &', 'arg0')])
+    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(uint8_t * start, uint8_t * end) [constructor]
+    cls.add_constructor([param('uint8_t *', 'start'), param('uint8_t *', 'end')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::CopyFrom(ns3::TagBuffer o) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'o')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::Read(uint8_t * buffer, uint32_t size) [member function]
+    cls.add_method('Read', 
+                   'void', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
+    ## tag-buffer.h (module 'network'): double ns3::TagBuffer::ReadDouble() [member function]
+    cls.add_method('ReadDouble', 
+                   'double', 
+                   [])
+    ## tag-buffer.h (module 'network'): uint16_t ns3::TagBuffer::ReadU16() [member function]
+    cls.add_method('ReadU16', 
+                   'uint16_t', 
+                   [])
+    ## tag-buffer.h (module 'network'): uint32_t ns3::TagBuffer::ReadU32() [member function]
+    cls.add_method('ReadU32', 
+                   'uint32_t', 
+                   [])
+    ## tag-buffer.h (module 'network'): uint64_t ns3::TagBuffer::ReadU64() [member function]
+    cls.add_method('ReadU64', 
+                   'uint64_t', 
+                   [])
+    ## tag-buffer.h (module 'network'): uint8_t ns3::TagBuffer::ReadU8() [member function]
+    cls.add_method('ReadU8', 
+                   'uint8_t', 
+                   [])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::TrimAtEnd(uint32_t trim) [member function]
+    cls.add_method('TrimAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'trim')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::Write(uint8_t const * buffer, uint32_t size) [member function]
+    cls.add_method('Write', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteDouble(double v) [member function]
+    cls.add_method('WriteDouble', 
+                   'void', 
+                   [param('double', 'v')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU16(uint16_t data) [member function]
+    cls.add_method('WriteU16', 
+                   'void', 
+                   [param('uint16_t', 'data')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU32(uint32_t data) [member function]
+    cls.add_method('WriteU32', 
+                   'void', 
+                   [param('uint32_t', 'data')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU64(uint64_t v) [member function]
+    cls.add_method('WriteU64', 
+                   'void', 
+                   [param('uint64_t', 'v')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU8(uint8_t v) [member function]
+    cls.add_method('WriteU8', 
+                   'void', 
+                   [param('uint8_t', 'v')])
+    return
+
+def register_Ns3TypeId_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## type-id.h (module 'core'): ns3::TypeId::TypeId(char const * name) [constructor]
+    cls.add_constructor([param('char const *', 'name')])
+    ## type-id.h (module 'core'): ns3::TypeId::TypeId() [constructor]
+    cls.add_constructor([])
+    ## type-id.h (module 'core'): ns3::TypeId::TypeId(ns3::TypeId const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TypeId const &', 'o')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddAttribute(std::string name, std::string help, ns3::AttributeValue const & initialValue, ns3::Ptr<ns3::AttributeAccessor const> accessor, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('AddAttribute', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::AttributeValue const &', 'initialValue'), param('ns3::Ptr< ns3::AttributeAccessor const >', 'accessor'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddAttribute(std::string name, std::string help, uint32_t flags, ns3::AttributeValue const & initialValue, ns3::Ptr<ns3::AttributeAccessor const> accessor, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('AddAttribute', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('uint32_t', 'flags'), param('ns3::AttributeValue const &', 'initialValue'), param('ns3::Ptr< ns3::AttributeAccessor const >', 'accessor'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')])
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
+    cls.add_method('GetAttribute', 
+                   'ns3::TypeId::AttributeInformation', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## type-id.h (module 'core'): std::string ns3::TypeId::GetAttributeFullName(uint32_t i) const [member function]
+    cls.add_method('GetAttributeFullName', 
+                   'std::string', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetAttributeN() const [member function]
+    cls.add_method('GetAttributeN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): ns3::Callback<ns3::ObjectBase*,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ns3::TypeId::GetConstructor() const [member function]
+    cls.add_method('GetConstructor', 
+                   'ns3::Callback< ns3::ObjectBase *, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): std::string ns3::TypeId::GetGroupName() const [member function]
+    cls.add_method('GetGroupName', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): 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('long long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
+    cls.add_unary_numeric_operator('-')
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('>')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', 'right'))
+    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', 'right'))
+    cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', 'right'))
+    cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', 'right'))
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('<=')
+    cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('>=')
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
+    cls.add_constructor([])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(double v) [constructor]
+    cls.add_constructor([param('double', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(int v) [constructor]
+    cls.add_constructor([param('int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long int v) [constructor]
+    cls.add_constructor([param('long int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long int v) [constructor]
+    cls.add_constructor([param('long long int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(unsigned int v) [constructor]
+    cls.add_constructor([param('unsigned int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long unsigned int v) [constructor]
+    cls.add_constructor([param('long unsigned int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long unsigned int v) [constructor]
+    cls.add_constructor([param('long long unsigned int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(int64_t hi, uint64_t lo) [constructor]
+    cls.add_constructor([param('int64_t', 'hi'), param('uint64_t', 'lo')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(ns3::int64x64_t const & o) [copy constructor]
+    cls.add_constructor([param('ns3::int64x64_t const &', 'o')])
+    ## int64x64-double.h (module 'core'): double ns3::int64x64_t::GetDouble() const [member function]
+    cls.add_method('GetDouble', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## int64x64-double.h (module 'core'): int64_t ns3::int64x64_t::GetHigh() const [member function]
+    cls.add_method('GetHigh', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## int64x64-double.h (module 'core'): uint64_t ns3::int64x64_t::GetLow() const [member function]
+    cls.add_method('GetLow', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## int64x64-double.h (module 'core'): static ns3::int64x64_t ns3::int64x64_t::Invert(uint64_t v) [member function]
+    cls.add_method('Invert', 
+                   'ns3::int64x64_t', 
+                   [param('uint64_t', 'v')], 
+                   is_static=True)
+    ## int64x64-double.h (module 'core'): void ns3::int64x64_t::MulByInvert(ns3::int64x64_t const & o) [member function]
+    cls.add_method('MulByInvert', 
+                   'void', 
+                   [param('ns3::int64x64_t const &', 'o')])
+    return
+
+def register_Ns3Chunk_methods(root_module, cls):
+    ## chunk.h (module 'network'): ns3::Chunk::Chunk() [constructor]
+    cls.add_constructor([])
+    ## chunk.h (module 'network'): ns3::Chunk::Chunk(ns3::Chunk const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Chunk const &', 'arg0')])
+    ## chunk.h (module 'network'): uint32_t ns3::Chunk::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## chunk.h (module 'network'): static ns3::TypeId ns3::Chunk::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## chunk.h (module 'network'): void ns3::Chunk::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_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_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_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_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([])
+    ## 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__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter< ns3::Packet > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount(ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter< ns3::TraceSourceAccessor > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SixLowPanFrag1_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanFrag1::SixLowPanFrag1(ns3::SixLowPanFrag1 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SixLowPanFrag1 const &', 'arg0')])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanFrag1::SixLowPanFrag1() [constructor]
+    cls.add_constructor([])
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanFrag1::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint16_t ns3::SixLowPanFrag1::GetDatagramSize() const [member function]
+    cls.add_method('GetDatagramSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint16_t ns3::SixLowPanFrag1::GetDatagramTag() const [member function]
+    cls.add_method('GetDatagramTag', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::TypeId ns3::SixLowPanFrag1::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanFrag1::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): static ns3::TypeId ns3::SixLowPanFrag1::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanFrag1::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanFrag1::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanFrag1::SetDatagramSize(uint16_t datagramSize) [member function]
+    cls.add_method('SetDatagramSize', 
+                   'void', 
+                   [param('uint16_t', 'datagramSize')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanFrag1::SetDatagramTag(uint16_t datagramTag) [member function]
+    cls.add_method('SetDatagramTag', 
+                   'void', 
+                   [param('uint16_t', 'datagramTag')])
+    return
+
+def register_Ns3SixLowPanFragN_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanFragN::SixLowPanFragN(ns3::SixLowPanFragN const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SixLowPanFragN const &', 'arg0')])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanFragN::SixLowPanFragN() [constructor]
+    cls.add_constructor([])
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanFragN::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanFragN::GetDatagramOffset() const [member function]
+    cls.add_method('GetDatagramOffset', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint16_t ns3::SixLowPanFragN::GetDatagramSize() const [member function]
+    cls.add_method('GetDatagramSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint16_t ns3::SixLowPanFragN::GetDatagramTag() const [member function]
+    cls.add_method('GetDatagramTag', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::TypeId ns3::SixLowPanFragN::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanFragN::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): static ns3::TypeId ns3::SixLowPanFragN::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanFragN::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanFragN::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanFragN::SetDatagramOffset(uint8_t datagramOffset) [member function]
+    cls.add_method('SetDatagramOffset', 
+                   'void', 
+                   [param('uint8_t', 'datagramOffset')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanFragN::SetDatagramSize(uint16_t datagramSize) [member function]
+    cls.add_method('SetDatagramSize', 
+                   'void', 
+                   [param('uint16_t', 'datagramSize')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanFragN::SetDatagramTag(uint16_t datagramTag) [member function]
+    cls.add_method('SetDatagramTag', 
+                   'void', 
+                   [param('uint16_t', 'datagramTag')])
+    return
+
+def register_Ns3SixLowPanHc1_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanHc1::SixLowPanHc1(ns3::SixLowPanHc1 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SixLowPanHc1 const &', 'arg0')])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanHc1::SixLowPanHc1() [constructor]
+    cls.add_constructor([])
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanHc1::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanHc1::LowPanHc1Addr_e ns3::SixLowPanHc1::GetDstCompression() const [member function]
+    cls.add_method('GetDstCompression', 
+                   'ns3::SixLowPanHc1::LowPanHc1Addr_e', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t const * ns3::SixLowPanHc1::GetDstInterface() const [member function]
+    cls.add_method('GetDstInterface', 
+                   'uint8_t const *', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t const * ns3::SixLowPanHc1::GetDstPrefix() const [member function]
+    cls.add_method('GetDstPrefix', 
+                   'uint8_t const *', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanHc1::GetFlowLabel() const [member function]
+    cls.add_method('GetFlowLabel', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanHc1::GetHopLimit() const [member function]
+    cls.add_method('GetHopLimit', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::TypeId ns3::SixLowPanHc1::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanHc1::GetNextHeader() const [member function]
+    cls.add_method('GetNextHeader', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanHc1::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanHc1::LowPanHc1Addr_e ns3::SixLowPanHc1::GetSrcCompression() const [member function]
+    cls.add_method('GetSrcCompression', 
+                   'ns3::SixLowPanHc1::LowPanHc1Addr_e', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t const * ns3::SixLowPanHc1::GetSrcInterface() const [member function]
+    cls.add_method('GetSrcInterface', 
+                   'uint8_t const *', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t const * ns3::SixLowPanHc1::GetSrcPrefix() const [member function]
+    cls.add_method('GetSrcPrefix', 
+                   'uint8_t const *', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanHc1::GetTrafficClass() const [member function]
+    cls.add_method('GetTrafficClass', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): static ns3::TypeId ns3::SixLowPanHc1::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): bool ns3::SixLowPanHc1::IsHc2HeaderPresent() const [member function]
+    cls.add_method('IsHc2HeaderPresent', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): bool ns3::SixLowPanHc1::IsTcflCompression() const [member function]
+    cls.add_method('IsTcflCompression', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetDstCompression(ns3::SixLowPanHc1::LowPanHc1Addr_e dstCompression) [member function]
+    cls.add_method('SetDstCompression', 
+                   'void', 
+                   [param('ns3::SixLowPanHc1::LowPanHc1Addr_e', 'dstCompression')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetDstInterface(uint8_t const * dstInterface) [member function]
+    cls.add_method('SetDstInterface', 
+                   'void', 
+                   [param('uint8_t const *', 'dstInterface')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetDstPrefix(uint8_t const * dstPrefix) [member function]
+    cls.add_method('SetDstPrefix', 
+                   'void', 
+                   [param('uint8_t const *', 'dstPrefix')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetFlowLabel(uint32_t flowLabel) [member function]
+    cls.add_method('SetFlowLabel', 
+                   'void', 
+                   [param('uint32_t', 'flowLabel')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetHc2HeaderPresent(bool hc2HeaderPresent) [member function]
+    cls.add_method('SetHc2HeaderPresent', 
+                   'void', 
+                   [param('bool', 'hc2HeaderPresent')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetHopLimit(uint8_t limit) [member function]
+    cls.add_method('SetHopLimit', 
+                   'void', 
+                   [param('uint8_t', 'limit')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetNextHeader(uint8_t nextHeader) [member function]
+    cls.add_method('SetNextHeader', 
+                   'void', 
+                   [param('uint8_t', 'nextHeader')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetSrcCompression(ns3::SixLowPanHc1::LowPanHc1Addr_e srcCompression) [member function]
+    cls.add_method('SetSrcCompression', 
+                   'void', 
+                   [param('ns3::SixLowPanHc1::LowPanHc1Addr_e', 'srcCompression')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetSrcInterface(uint8_t const * srcInterface) [member function]
+    cls.add_method('SetSrcInterface', 
+                   'void', 
+                   [param('uint8_t const *', 'srcInterface')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetSrcPrefix(uint8_t const * srcPrefix) [member function]
+    cls.add_method('SetSrcPrefix', 
+                   'void', 
+                   [param('uint8_t const *', 'srcPrefix')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetTcflCompression(bool tcflCompression) [member function]
+    cls.add_method('SetTcflCompression', 
+                   'void', 
+                   [param('bool', 'tcflCompression')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetTrafficClass(uint8_t trafficClass) [member function]
+    cls.add_method('SetTrafficClass', 
+                   'void', 
+                   [param('uint8_t', 'trafficClass')])
+    return
+
+def register_Ns3SixLowPanIphc_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::SixLowPanIphc(ns3::SixLowPanIphc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SixLowPanIphc const &', 'arg0')])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::SixLowPanIphc() [constructor]
+    cls.add_constructor([])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::SixLowPanIphc(uint8_t dispatch) [constructor]
+    cls.add_constructor([param('uint8_t', 'dispatch')])
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanIphc::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): bool ns3::SixLowPanIphc::GetCid() const [member function]
+    cls.add_method('GetCid', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): bool ns3::SixLowPanIphc::GetDac() const [member function]
+    cls.add_method('GetDac', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::HeaderCompression_e ns3::SixLowPanIphc::GetDam() const [member function]
+    cls.add_method('GetDam', 
+                   'ns3::SixLowPanIphc::HeaderCompression_e', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanIphc::GetDscp() const [member function]
+    cls.add_method('GetDscp', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::Ipv6Address ns3::SixLowPanIphc::GetDstAddress() const [member function]
+    cls.add_method('GetDstAddress', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanIphc::GetDstContextId() const [member function]
+    cls.add_method('GetDstContextId', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanIphc::GetEcn() const [member function]
+    cls.add_method('GetEcn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanIphc::GetFlowLabel() const [member function]
+    cls.add_method('GetFlowLabel', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::Hlim_e ns3::SixLowPanIphc::GetHlim() const [member function]
+    cls.add_method('GetHlim', 
+                   'ns3::SixLowPanIphc::Hlim_e', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanIphc::GetHopLimit() const [member function]
+    cls.add_method('GetHopLimit', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::TypeId ns3::SixLowPanIphc::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): bool ns3::SixLowPanIphc::GetM() const [member function]
+    cls.add_method('GetM', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanIphc::GetNextHeader() const [member function]
+    cls.add_method('GetNextHeader', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): bool ns3::SixLowPanIphc::GetNh() const [member function]
+    cls.add_method('GetNh', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): bool ns3::SixLowPanIphc::GetSac() const [member function]
+    cls.add_method('GetSac', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::HeaderCompression_e ns3::SixLowPanIphc::GetSam() const [member function]
+    cls.add_method('GetSam', 
+                   'ns3::SixLowPanIphc::HeaderCompression_e', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanIphc::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::Ipv6Address ns3::SixLowPanIphc::GetSrcAddress() const [member function]
+    cls.add_method('GetSrcAddress', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanIphc::GetSrcContextId() const [member function]
+    cls.add_method('GetSrcContextId', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::TrafficClassFlowLabel_e ns3::SixLowPanIphc::GetTf() const [member function]
+    cls.add_method('GetTf', 
+                   'ns3::SixLowPanIphc::TrafficClassFlowLabel_e', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): static ns3::TypeId ns3::SixLowPanIphc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetCid(bool cidField) [member function]
+    cls.add_method('SetCid', 
+                   'void', 
+                   [param('bool', 'cidField')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetDac(bool dacField) [member function]
+    cls.add_method('SetDac', 
+                   'void', 
+                   [param('bool', 'dacField')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetDam(ns3::SixLowPanIphc::HeaderCompression_e damField) [member function]
+    cls.add_method('SetDam', 
+                   'void', 
+                   [param('ns3::SixLowPanIphc::HeaderCompression_e', 'damField')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetDscp(uint8_t dscp) [member function]
+    cls.add_method('SetDscp', 
+                   'void', 
+                   [param('uint8_t', 'dscp')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetDstAddress(ns3::Ipv6Address dstAddress) [member function]
+    cls.add_method('SetDstAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dstAddress')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetDstContextId(uint8_t dstContextId) [member function]
+    cls.add_method('SetDstContextId', 
+                   'void', 
+                   [param('uint8_t', 'dstContextId')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetEcn(uint8_t ecn) [member function]
+    cls.add_method('SetEcn', 
+                   'void', 
+                   [param('uint8_t', 'ecn')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetFlowLabel(uint32_t flowLabel) [member function]
+    cls.add_method('SetFlowLabel', 
+                   'void', 
+                   [param('uint32_t', 'flowLabel')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetHlim(ns3::SixLowPanIphc::Hlim_e hlimField) [member function]
+    cls.add_method('SetHlim', 
+                   'void', 
+                   [param('ns3::SixLowPanIphc::Hlim_e', 'hlimField')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetHopLimit(uint8_t hopLimit) [member function]
+    cls.add_method('SetHopLimit', 
+                   'void', 
+                   [param('uint8_t', 'hopLimit')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetM(bool mField) [member function]
+    cls.add_method('SetM', 
+                   'void', 
+                   [param('bool', 'mField')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetNextHeader(uint8_t nextHeader) [member function]
+    cls.add_method('SetNextHeader', 
+                   'void', 
+                   [param('uint8_t', 'nextHeader')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetNh(bool nhField) [member function]
+    cls.add_method('SetNh', 
+                   'void', 
+                   [param('bool', 'nhField')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetSac(bool sacField) [member function]
+    cls.add_method('SetSac', 
+                   'void', 
+                   [param('bool', 'sacField')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetSam(ns3::SixLowPanIphc::HeaderCompression_e samField) [member function]
+    cls.add_method('SetSam', 
+                   'void', 
+                   [param('ns3::SixLowPanIphc::HeaderCompression_e', 'samField')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetSrcAddress(ns3::Ipv6Address srcAddress) [member function]
+    cls.add_method('SetSrcAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'srcAddress')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetSrcContextId(uint8_t srcContextId) [member function]
+    cls.add_method('SetSrcContextId', 
+                   'void', 
+                   [param('uint8_t', 'srcContextId')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetTf(ns3::SixLowPanIphc::TrafficClassFlowLabel_e tfField) [member function]
+    cls.add_method('SetTf', 
+                   'void', 
+                   [param('ns3::SixLowPanIphc::TrafficClassFlowLabel_e', 'tfField')])
+    return
+
+def register_Ns3SixLowPanNhcExtension_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanNhcExtension::SixLowPanNhcExtension(ns3::SixLowPanNhcExtension const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SixLowPanNhcExtension const &', 'arg0')])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanNhcExtension::SixLowPanNhcExtension() [constructor]
+    cls.add_constructor([])
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanNhcExtension::CopyBlob(uint8_t * blob, uint32_t size) const [member function]
+    cls.add_method('CopyBlob', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'blob'), param('uint32_t', 'size')], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanNhcExtension::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanNhcExtension::Eid_e ns3::SixLowPanNhcExtension::GetEid() const [member function]
+    cls.add_method('GetEid', 
+                   'ns3::SixLowPanNhcExtension::Eid_e', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::TypeId ns3::SixLowPanNhcExtension::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanNhcExtension::GetNextHeader() const [member function]
+    cls.add_method('GetNextHeader', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): bool ns3::SixLowPanNhcExtension::GetNh() const [member function]
+    cls.add_method('GetNh', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanDispatch::NhcDispatch_e ns3::SixLowPanNhcExtension::GetNhcDispatchType() const [member function]
+    cls.add_method('GetNhcDispatchType', 
+                   'ns3::SixLowPanDispatch::NhcDispatch_e', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanNhcExtension::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): static ns3::TypeId ns3::SixLowPanNhcExtension::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanNhcExtension::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanNhcExtension::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanNhcExtension::SetBlob(uint8_t const * blob, uint32_t size) [member function]
+    cls.add_method('SetBlob', 
+                   'void', 
+                   [param('uint8_t const *', 'blob'), param('uint32_t', 'size')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanNhcExtension::SetEid(ns3::SixLowPanNhcExtension::Eid_e extensionHeaderType) [member function]
+    cls.add_method('SetEid', 
+                   'void', 
+                   [param('ns3::SixLowPanNhcExtension::Eid_e', 'extensionHeaderType')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanNhcExtension::SetNextHeader(uint8_t nextHeader) [member function]
+    cls.add_method('SetNextHeader', 
+                   'void', 
+                   [param('uint8_t', 'nextHeader')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanNhcExtension::SetNh(bool nhField) [member function]
+    cls.add_method('SetNh', 
+                   'void', 
+                   [param('bool', 'nhField')])
+    return
+
+def register_Ns3SixLowPanUdpNhcExtension_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanUdpNhcExtension::SixLowPanUdpNhcExtension(ns3::SixLowPanUdpNhcExtension const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SixLowPanUdpNhcExtension const &', 'arg0')])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanUdpNhcExtension::SixLowPanUdpNhcExtension() [constructor]
+    cls.add_constructor([])
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanUdpNhcExtension::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): bool ns3::SixLowPanUdpNhcExtension::GetC() const [member function]
+    cls.add_method('GetC', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint16_t ns3::SixLowPanUdpNhcExtension::GetChecksum() const [member function]
+    cls.add_method('GetChecksum', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint16_t ns3::SixLowPanUdpNhcExtension::GetDstPort() const [member function]
+    cls.add_method('GetDstPort', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::TypeId ns3::SixLowPanUdpNhcExtension::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanDispatch::NhcDispatch_e ns3::SixLowPanUdpNhcExtension::GetNhcDispatchType() const [member function]
+    cls.add_method('GetNhcDispatchType', 
+                   'ns3::SixLowPanDispatch::NhcDispatch_e', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanUdpNhcExtension::Ports_e ns3::SixLowPanUdpNhcExtension::GetPorts() const [member function]
+    cls.add_method('GetPorts', 
+                   'ns3::SixLowPanUdpNhcExtension::Ports_e', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanUdpNhcExtension::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint16_t ns3::SixLowPanUdpNhcExtension::GetSrcPort() const [member function]
+    cls.add_method('GetSrcPort', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): static ns3::TypeId ns3::SixLowPanUdpNhcExtension::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanUdpNhcExtension::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanUdpNhcExtension::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanUdpNhcExtension::SetC(bool cField) [member function]
+    cls.add_method('SetC', 
+                   'void', 
+                   [param('bool', 'cField')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanUdpNhcExtension::SetChecksum(uint16_t checksum) [member function]
+    cls.add_method('SetChecksum', 
+                   'void', 
+                   [param('uint16_t', 'checksum')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanUdpNhcExtension::SetDstPort(uint16_t port) [member function]
+    cls.add_method('SetDstPort', 
+                   'void', 
+                   [param('uint16_t', 'port')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanUdpNhcExtension::SetPorts(ns3::SixLowPanUdpNhcExtension::Ports_e port) [member function]
+    cls.add_method('SetPorts', 
+                   'void', 
+                   [param('ns3::SixLowPanUdpNhcExtension::Ports_e', 'port')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanUdpNhcExtension::SetSrcPort(uint16_t port) [member function]
+    cls.add_method('SetSrcPort', 
+                   'void', 
+                   [param('uint16_t', 'port')])
+    return
+
+def register_Ns3Time_methods(root_module, cls):
+    cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('>')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', 'right'))
+    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', 'right'))
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('<=')
+    cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('>=')
+    ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
+    cls.add_constructor([])
+    ## nstime.h (module 'core'): ns3::Time::Time(ns3::Time const & o) [copy constructor]
+    cls.add_constructor([param('ns3::Time const &', 'o')])
+    ## nstime.h (module 'core'): ns3::Time::Time(double v) [constructor]
+    cls.add_constructor([param('double', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(int v) [constructor]
+    cls.add_constructor([param('int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(long int v) [constructor]
+    cls.add_constructor([param('long int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(long long int v) [constructor]
+    cls.add_constructor([param('long long int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(unsigned int v) [constructor]
+    cls.add_constructor([param('unsigned int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(long unsigned int v) [constructor]
+    cls.add_constructor([param('long unsigned int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(long long unsigned int v) [constructor]
+    cls.add_constructor([param('long long unsigned int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(std::string const & s) [constructor]
+    cls.add_constructor([param('std::string const &', 's')])
+    ## nstime.h (module 'core'): ns3::Time::Time(ns3::int64x64_t const & value) [constructor]
+    cls.add_constructor([param('ns3::int64x64_t const &', 'value')])
+    ## nstime.h (module 'core'): int ns3::Time::Compare(ns3::Time const & o) const [member function]
+    cls.add_method('Compare', 
+                   'int', 
+                   [param('ns3::Time const &', 'o')], 
+                   is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::From(ns3::int64x64_t const & from, ns3::Time::Unit timeUnit) [member function]
+    cls.add_method('From', 
+                   'ns3::Time', 
+                   [param('ns3::int64x64_t const &', 'from'), param('ns3::Time::Unit', 'timeUnit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::From(ns3::int64x64_t const & value) [member function]
+    cls.add_method('From', 
+                   'ns3::Time', 
+                   [param('ns3::int64x64_t const &', 'value')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit timeUnit) [member function]
+    cls.add_method('FromDouble', 
+                   'ns3::Time', 
+                   [param('double', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit timeUnit) [member function]
+    cls.add_method('FromInteger', 
+                   'ns3::Time', 
+                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): double ns3::Time::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 timeUnit) const [member function]
+    cls.add_method('To', 
+                   'ns3::int64x64_t', 
+                   [param('ns3::Time::Unit', 'timeUnit')], 
+                   is_const=True)
+    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit timeUnit) const [member function]
+    cls.add_method('ToDouble', 
+                   'double', 
+                   [param('ns3::Time::Unit', 'timeUnit')], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit timeUnit) const [member function]
+    cls.add_method('ToInteger', 
+                   'int64_t', 
+                   [param('ns3::Time::Unit', 'timeUnit')], 
+                   is_const=True)
+    return
+
+def register_Ns3TraceSourceAccessor_methods(root_module, cls):
+    ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor::TraceSourceAccessor(ns3::TraceSourceAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TraceSourceAccessor const &', 'arg0')])
+    ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor::TraceSourceAccessor() [constructor]
+    cls.add_constructor([])
+    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::Connect(ns3::ObjectBase * obj, std::string context, ns3::CallbackBase const & cb) const [member function]
+    cls.add_method('Connect', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::ConnectWithoutContext(ns3::ObjectBase * obj, ns3::CallbackBase const & cb) const [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('ns3::CallbackBase const &', 'cb')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::Disconnect(ns3::ObjectBase * obj, std::string context, ns3::CallbackBase const & cb) const [member function]
+    cls.add_method('Disconnect', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::DisconnectWithoutContext(ns3::ObjectBase * obj, ns3::CallbackBase const & cb) const [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('ns3::CallbackBase const &', 'cb')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_Ns3Trailer_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## trailer.h (module 'network'): ns3::Trailer::Trailer() [constructor]
+    cls.add_constructor([])
+    ## trailer.h (module 'network'): ns3::Trailer::Trailer(ns3::Trailer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Trailer const &', 'arg0')])
+    ## trailer.h (module 'network'): uint32_t ns3::Trailer::Deserialize(ns3::Buffer::Iterator end) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'end')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## trailer.h (module 'network'): uint32_t ns3::Trailer::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## trailer.h (module 'network'): static ns3::TypeId ns3::Trailer::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## trailer.h (module 'network'): void ns3::Trailer::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## trailer.h (module 'network'): void ns3::Trailer::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_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)
+    ## 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)
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetMin() const [member function]
+    cls.add_method('GetMin', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetMax() const [member function]
+    cls.add_method('GetMax', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## 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_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::TriangularRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   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_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)
+    ## random-variable-stream.h (module 'core'): double ns3::UniformRandomVariable::GetMax() const [member function]
+    cls.add_method('GetMax', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## 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_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::UniformRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+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([])
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetScale() const [member function]
+    cls.add_method('GetScale', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetShape() const [member function]
+    cls.add_method('GetShape', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## 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', 
+                   [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_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::WeibullRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   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)
+    ## 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_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_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZetaRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   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_static=True)
+    ## 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_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ZipfRandomVariable::GetAlpha() const [member function]
+    cls.add_method('GetAlpha', 
+                   'double', 
+                   [], 
+                   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_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZipfRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   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_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)
+    ## 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_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_Ns3EmpiricalRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable::EmpiricalRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## 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_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_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_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_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)
+    ## random-variable-stream.h (module 'core'): double ns3::ErlangRandomVariable::GetLambda() const [member function]
+    cls.add_method('GetLambda', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## 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_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)
+    ## 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)
+    ## random-variable-stream.h (module 'core'): double ns3::ExponentialRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## 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_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_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([])
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetAlpha() const [member function]
+    cls.add_method('GetAlpha', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetBeta() const [member function]
+    cls.add_method('GetBeta', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## 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_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_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_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_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_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_Ns3ObjectFactoryChecker_methods(root_module, cls):
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker() [constructor]
+    cls.add_constructor([])
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker(ns3::ObjectFactoryChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ObjectFactoryChecker const &', 'arg0')])
+    return
+
+def register_Ns3ObjectFactoryValue_methods(root_module, cls):
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue() [constructor]
+    cls.add_constructor([])
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactoryValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ObjectFactoryValue const &', 'arg0')])
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactory const & value) [constructor]
+    cls.add_constructor([param('ns3::ObjectFactory const &', 'value')])
+    ## object-factory.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::ObjectFactoryValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## object-factory.h (module 'core'): bool ns3::ObjectFactoryValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## object-factory.h (module 'core'): ns3::ObjectFactory ns3::ObjectFactoryValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::ObjectFactory', 
+                   [], 
+                   is_const=True)
+    ## object-factory.h (module 'core'): std::string ns3::ObjectFactoryValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## object-factory.h (module 'core'): void ns3::ObjectFactoryValue::Set(ns3::ObjectFactory const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::ObjectFactory const &', 'value')])
+    return
+
+def register_Ns3Packet_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## packet.h (module 'network'): ns3::Packet::Packet() [constructor]
+    cls.add_constructor([])
+    ## packet.h (module 'network'): ns3::Packet::Packet(ns3::Packet const & o) [copy constructor]
+    cls.add_constructor([param('ns3::Packet const &', 'o')])
+    ## packet.h (module 'network'): ns3::Packet::Packet(uint32_t size) [constructor]
+    cls.add_constructor([param('uint32_t', 'size')])
+    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size, bool magic) [constructor]
+    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size'), param('bool', 'magic')])
+    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size) [constructor]
+    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
+    cls.add_method('AddAtEnd', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## packet.h (module 'network'): void ns3::Packet::AddByteTag(ns3::Tag const & tag) const [member function]
+    cls.add_method('AddByteTag', 
+                   'void', 
+                   [param('ns3::Tag const &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::AddHeader(ns3::Header const & header) [member function]
+    cls.add_method('AddHeader', 
+                   'void', 
+                   [param('ns3::Header const &', 'header')])
+    ## packet.h (module 'network'): void ns3::Packet::AddPacketTag(ns3::Tag const & tag) const [member function]
+    cls.add_method('AddPacketTag', 
+                   'void', 
+                   [param('ns3::Tag const &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::AddPaddingAtEnd(uint32_t size) [member function]
+    cls.add_method('AddPaddingAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'size')])
+    ## packet.h (module 'network'): void ns3::Packet::AddTrailer(ns3::Trailer const & trailer) [member function]
+    cls.add_method('AddTrailer', 
+                   'void', 
+                   [param('ns3::Trailer const &', 'trailer')])
+    ## packet.h (module 'network'): ns3::PacketMetadata::ItemIterator ns3::Packet::BeginItem() const [member function]
+    cls.add_method('BeginItem', 
+                   'ns3::PacketMetadata::ItemIterator', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::CopyData(uint8_t * buffer, uint32_t size) const [member function]
+    cls.add_method('CopyData', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::CopyData(std::ostream * os, uint32_t size) const [member function]
+    cls.add_method('CopyData', 
+                   'void', 
+                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::CreateFragment(uint32_t start, uint32_t length) const [member function]
+    cls.add_method('CreateFragment', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
+                   is_const=True)
+    ## packet.h (module 'network'): static void ns3::Packet::EnableChecking() [member function]
+    cls.add_method('EnableChecking', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## packet.h (module 'network'): static void ns3::Packet::EnablePrinting() [member function]
+    cls.add_method('EnablePrinting', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## packet.h (module 'network'): bool ns3::Packet::FindFirstMatchingByteTag(ns3::Tag & tag) const [member function]
+    cls.add_method('FindFirstMatchingByteTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::ByteTagIterator ns3::Packet::GetByteTagIterator() const [member function]
+    cls.add_method('GetByteTagIterator', 
+                   'ns3::ByteTagIterator', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::Ptr<ns3::NixVector> ns3::Packet::GetNixVector() const [member function]
+    cls.add_method('GetNixVector', 
+                   'ns3::Ptr< ns3::NixVector >', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::PacketTagIterator ns3::Packet::GetPacketTagIterator() const [member function]
+    cls.add_method('GetPacketTagIterator', 
+                   'ns3::PacketTagIterator', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint64_t ns3::Packet::GetUid() const [member function]
+    cls.add_method('GetUid', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint8_t const * ns3::Packet::PeekData() const [member function]
+    cls.add_method('PeekData', 
+                   'uint8_t const *', 
+                   [], 
+                   deprecated=True, is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekHeader(ns3::Header & header) const [member function]
+    cls.add_method('PeekHeader', 
+                   'uint32_t', 
+                   [param('ns3::Header &', 'header')], 
+                   is_const=True)
+    ## packet.h (module 'network'): bool ns3::Packet::PeekPacketTag(ns3::Tag & tag) const [member function]
+    cls.add_method('PeekPacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekTrailer(ns3::Trailer & trailer) [member function]
+    cls.add_method('PeekTrailer', 
+                   'uint32_t', 
+                   [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): void ns3::Packet::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::PrintByteTags(std::ostream & os) const [member function]
+    cls.add_method('PrintByteTags', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::PrintPacketTags(std::ostream & os) const [member function]
+    cls.add_method('PrintPacketTags', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::RemoveAllByteTags() [member function]
+    cls.add_method('RemoveAllByteTags', 
+                   'void', 
+                   [])
+    ## packet.h (module 'network'): void ns3::Packet::RemoveAllPacketTags() [member function]
+    cls.add_method('RemoveAllPacketTags', 
+                   'void', 
+                   [])
+    ## packet.h (module 'network'): void ns3::Packet::RemoveAtEnd(uint32_t size) [member function]
+    cls.add_method('RemoveAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'size')])
+    ## packet.h (module 'network'): void ns3::Packet::RemoveAtStart(uint32_t size) [member function]
+    cls.add_method('RemoveAtStart', 
+                   'void', 
+                   [param('uint32_t', 'size')])
+    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveHeader(ns3::Header & header) [member function]
+    cls.add_method('RemoveHeader', 
+                   'uint32_t', 
+                   [param('ns3::Header &', 'header')])
+    ## packet.h (module 'network'): bool ns3::Packet::RemovePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('RemovePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
+    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveTrailer(ns3::Trailer & trailer) [member function]
+    cls.add_method('RemoveTrailer', 
+                   'uint32_t', 
+                   [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): 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> arg0) [member function]
+    cls.add_method('SetNixVector', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
+    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_Ns3SixLowPanNetDevice_methods(root_module, cls):
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::SixLowPanNetDevice::SixLowPanNetDevice() [constructor]
+    cls.add_constructor([])
+    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::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)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): int64_t ns3::SixLowPanNetDevice::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::Address ns3::SixLowPanNetDevice::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::Address ns3::SixLowPanNetDevice::GetBroadcast() const [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::Ptr<ns3::Channel> ns3::SixLowPanNetDevice::GetChannel() const [member function]
+    cls.add_method('GetChannel', 
+                   'ns3::Ptr< ns3::Channel >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): uint32_t ns3::SixLowPanNetDevice::GetIfIndex() const [member function]
+    cls.add_method('GetIfIndex', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): uint16_t ns3::SixLowPanNetDevice::GetMtu() const [member function]
+    cls.add_method('GetMtu', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::Address ns3::SixLowPanNetDevice::GetMulticast(ns3::Ipv4Address multicastGroup) const [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Address', 
+                   [param('ns3::Ipv4Address', 'multicastGroup')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::Address ns3::SixLowPanNetDevice::GetMulticast(ns3::Ipv6Address addr) const [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Address', 
+                   [param('ns3::Ipv6Address', 'addr')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::Ptr<ns3::NetDevice> ns3::SixLowPanNetDevice::GetNetDevice() const [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::Ptr<ns3::Node> ns3::SixLowPanNetDevice::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): static ns3::TypeId ns3::SixLowPanNetDevice::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::IsBridge() const [member function]
+    cls.add_method('IsBridge', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::IsLinkUp() const [member function]
+    cls.add_method('IsLinkUp', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::IsMulticast() const [member function]
+    cls.add_method('IsMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::IsPointToPoint() const [member function]
+    cls.add_method('IsPointToPoint', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::NeedsArp() const [member function]
+    cls.add_method('NeedsArp', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::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)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::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)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::SetAddress(ns3::Address address) [member function]
+    cls.add_method('SetAddress', 
+                   'void', 
+                   [param('ns3::Address', 'address')], 
+                   is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::SetIfIndex(uint32_t const index) [member function]
+    cls.add_method('SetIfIndex', 
+                   'void', 
+                   [param('uint32_t const', 'index')], 
+                   is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::SetMtu(uint16_t const mtu) [member function]
+    cls.add_method('SetMtu', 
+                   'bool', 
+                   [param('uint16_t const', 'mtu')], 
+                   is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::SetNetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetNetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::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)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::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)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::SupportsSendFrom() const [member function]
+    cls.add_method('SupportsSendFrom', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    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_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.18.1/src/sixlowpan/bindings/modulegen__gcc_LP64.py ns-3.19/src/sixlowpan/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/sixlowpan/bindings/modulegen__gcc_LP64.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/sixlowpan/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,5163 @@
+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.sixlowpan', 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')
+    ## 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')
+    ## 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')
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer [class]
+    module.add_class('NetDeviceContainer', 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')
+    ## 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'))
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanDispatch [class]
+    module.add_class('SixLowPanDispatch')
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanDispatch::Dispatch_e [enumeration]
+    module.add_enum('Dispatch_e', ['LOWPAN_NALP', 'LOWPAN_NALP_N', 'LOWPAN_NOTCOMPRESSED', 'LOWPAN_HC1', 'LOWPAN_BC0', 'LOWPAN_IPHC', 'LOWPAN_IPHC_N', 'LOWPAN_MESH', 'LOWPAN_MESH_N', 'LOWPAN_FRAG1', 'LOWPAN_FRAG1_N', 'LOWPAN_FRAGN', 'LOWPAN_FRAGN_N', 'LOWPAN_UNSUPPORTED'], outer_class=root_module['ns3::SixLowPanDispatch'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanDispatch::NhcDispatch_e [enumeration]
+    module.add_enum('NhcDispatch_e', ['LOWPAN_NHC', 'LOWPAN_NHC_N', 'LOWPAN_UDPNHC', 'LOWPAN_UDPNHC_N', 'LOWPAN_NHCUNSUPPORTED'], outer_class=root_module['ns3::SixLowPanDispatch'])
+    ## sixlowpan-helper.h (module 'sixlowpan'): ns3::SixLowPanHelper [class]
+    module.add_class('SixLowPanHelper')
+    ## tag.h (module 'network'): ns3::Tag [class]
+    module.add_class('Tag', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
+    ## tag-buffer.h (module 'network'): ns3::TagBuffer [class]
+    module.add_class('TagBuffer', import_from_module='ns.network')
+    ## type-id.h (module 'core'): ns3::TypeId [class]
+    module.add_class('TypeId', import_from_module='ns.core')
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
+    module.add_enum('AttributeFlag', ['ATTR_GET', 'ATTR_SET', 'ATTR_CONSTRUCT', 'ATTR_SGC'], outer_class=root_module['ns3::TypeId'], import_from_module='ns.core')
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation [struct]
+    module.add_class('AttributeInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation [struct]
+    module.add_class('TraceSourceInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
+    ## empty.h (module 'core'): ns3::empty [class]
+    module.add_class('empty', import_from_module='ns.core')
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
+    module.add_class('int64x64_t', import_from_module='ns.core')
+    ## chunk.h (module 'network'): ns3::Chunk [class]
+    module.add_class('Chunk', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
+    ## header.h (module 'network'): ns3::Header [class]
+    module.add_class('Header', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
+    ## 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')
+    ## 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'])
+    ## 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]
+    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::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Packet', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Packet>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanFrag1 [class]
+    module.add_class('SixLowPanFrag1', parent=root_module['ns3::Header'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanFragN [class]
+    module.add_class('SixLowPanFragN', parent=root_module['ns3::Header'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanHc1 [class]
+    module.add_class('SixLowPanHc1', parent=root_module['ns3::Header'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanHc1::LowPanHc1Addr_e [enumeration]
+    module.add_enum('LowPanHc1Addr_e', ['HC1_PIII', 'HC1_PIIC', 'HC1_PCII', 'HC1_PCIC'], outer_class=root_module['ns3::SixLowPanHc1'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanHc1::LowPanHc1NextHeader_e [enumeration]
+    module.add_enum('LowPanHc1NextHeader_e', ['HC1_NC', 'HC1_UDP', 'HC1_ICMP', 'HC1_TCP'], outer_class=root_module['ns3::SixLowPanHc1'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc [class]
+    module.add_class('SixLowPanIphc', parent=root_module['ns3::Header'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::TrafficClassFlowLabel_e [enumeration]
+    module.add_enum('TrafficClassFlowLabel_e', ['TF_FULL', 'TF_DSCP_ELIDED', 'TF_FL_ELIDED', 'TF_ELIDED'], outer_class=root_module['ns3::SixLowPanIphc'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::Hlim_e [enumeration]
+    module.add_enum('Hlim_e', ['HLIM_INLINE', 'HLIM_COMPR_1', 'HLIM_COMPR_64', 'HLIM_COMPR_255'], outer_class=root_module['ns3::SixLowPanIphc'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::HeaderCompression_e [enumeration]
+    module.add_enum('HeaderCompression_e', ['HC_INLINE', 'HC_COMPR_64', 'HC_COMPR_16', 'HC_COMPR_0'], outer_class=root_module['ns3::SixLowPanIphc'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanNhcExtension [class]
+    module.add_class('SixLowPanNhcExtension', parent=root_module['ns3::Header'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanNhcExtension::Eid_e [enumeration]
+    module.add_enum('Eid_e', ['EID_HOPBYHOP_OPTIONS_H', 'EID_ROUTING_H', 'EID_FRAGMENTATION_H', 'EID_DESTINATION_OPTIONS_H', 'EID_MOBILITY_H', 'EID_IPv6_H'], outer_class=root_module['ns3::SixLowPanNhcExtension'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanUdpNhcExtension [class]
+    module.add_class('SixLowPanUdpNhcExtension', parent=root_module['ns3::Header'])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanUdpNhcExtension::Ports_e [enumeration]
+    module.add_enum('Ports_e', ['PORTS_INLINE', 'PORTS_ALL_SRC_LAST_DST', 'PORTS_LAST_SRC_ALL_DST', 'PORTS_LAST_SRC_LAST_DST'], outer_class=root_module['ns3::SixLowPanUdpNhcExtension'])
+    ## 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'])
+    ## 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'])
+    ## random-variable-stream.h (module 'core'): ns3::WeibullRandomVariable [class]
+    module.add_class('WeibullRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## 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'])
+    ## 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'])
+    ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable [class]
+    module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## 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]
+    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'])
+    ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable [class]
+    module.add_class('GammaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## 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'])
+    ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
+    module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## 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> >'])
+    ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable [class]
+    module.add_class('NormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker [class]
+    module.add_class('ObjectFactoryChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue [class]
+    module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## packet.h (module 'network'): ns3::Packet [class]
+    module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+    ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
+    module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::SixLowPanNetDevice [class]
+    module.add_class('SixLowPanNetDevice', parent=root_module['ns3::NetDevice'])
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::SixLowPanNetDevice::DropReason [enumeration]
+    module.add_enum('DropReason', ['DROP_FRAGMENT_TIMEOUT', 'DROP_FRAGMENT_BUFFER_FULL', 'DROP_UNKNOWN_EXTENSION'], outer_class=root_module['ns3::SixLowPanNetDevice'])
+    ## 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'])
+    
+    ## 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('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
+def register_methods(root_module):
+    register_Ns3Address_methods(root_module, root_module['ns3::Address'])
+    register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
+    register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
+    register_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_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_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
+    register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
+    register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
+    register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
+    register_Ns3PacketMetadata_methods(root_module, root_module['ns3::PacketMetadata'])
+    register_Ns3PacketMetadataItem_methods(root_module, root_module['ns3::PacketMetadata::Item'])
+    register_Ns3PacketMetadataItemIterator_methods(root_module, root_module['ns3::PacketMetadata::ItemIterator'])
+    register_Ns3PacketTagIterator_methods(root_module, root_module['ns3::PacketTagIterator'])
+    register_Ns3PacketTagIteratorItem_methods(root_module, root_module['ns3::PacketTagIterator::Item'])
+    register_Ns3PacketTagList_methods(root_module, root_module['ns3::PacketTagList'])
+    register_Ns3PacketTagListTagData_methods(root_module, root_module['ns3::PacketTagList::TagData'])
+    register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
+    register_Ns3SixLowPanDispatch_methods(root_module, root_module['ns3::SixLowPanDispatch'])
+    register_Ns3SixLowPanHelper_methods(root_module, root_module['ns3::SixLowPanHelper'])
+    register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
+    register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
+    register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
+    register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
+    register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
+    register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
+    register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
+    register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
+    register_Ns3Header_methods(root_module, root_module['ns3::Header'])
+    register_Ns3Ipv6Header_methods(root_module, root_module['ns3::Ipv6Header'])
+    register_Ns3Object_methods(root_module, root_module['ns3::Object'])
+    register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
+    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__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
+    register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+    register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
+    register_Ns3SixLowPanFrag1_methods(root_module, root_module['ns3::SixLowPanFrag1'])
+    register_Ns3SixLowPanFragN_methods(root_module, root_module['ns3::SixLowPanFragN'])
+    register_Ns3SixLowPanHc1_methods(root_module, root_module['ns3::SixLowPanHc1'])
+    register_Ns3SixLowPanIphc_methods(root_module, root_module['ns3::SixLowPanIphc'])
+    register_Ns3SixLowPanNhcExtension_methods(root_module, root_module['ns3::SixLowPanNhcExtension'])
+    register_Ns3SixLowPanUdpNhcExtension_methods(root_module, root_module['ns3::SixLowPanUdpNhcExtension'])
+    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_Ns3WeibullRandomVariable_methods(root_module, root_module['ns3::WeibullRandomVariable'])
+    register_Ns3ZetaRandomVariable_methods(root_module, root_module['ns3::ZetaRandomVariable'])
+    register_Ns3ZipfRandomVariable_methods(root_module, root_module['ns3::ZipfRandomVariable'])
+    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_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
+    register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
+    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_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
+    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_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
+    register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
+    register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
+    register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
+    register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
+    register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
+    register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3SixLowPanNetDevice_methods(root_module, root_module['ns3::SixLowPanNetDevice'])
+    register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
+    register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
+    register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
+    register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
+    return
+
+def register_Ns3Address_methods(root_module, cls):
+    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_Ns3AttributeConstructionList_methods(root_module, cls):
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::AttributeConstructionList(ns3::AttributeConstructionList const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AttributeConstructionList const &', 'arg0')])
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::AttributeConstructionList() [constructor]
+    cls.add_constructor([])
+    ## attribute-construction-list.h (module 'core'): void ns3::AttributeConstructionList::Add(std::string name, ns3::Ptr<ns3::AttributeChecker const> checker, ns3::Ptr<ns3::AttributeValue> value) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker'), param('ns3::Ptr< ns3::AttributeValue >', 'value')])
+    ## attribute-construction-list.h (module 'core'): std::_List_const_iterator<ns3::AttributeConstructionList::Item> ns3::AttributeConstructionList::Begin() const [member function]
+    cls.add_method('Begin', 
+                   'std::_List_const_iterator< ns3::AttributeConstructionList::Item >', 
+                   [], 
+                   is_const=True)
+    ## attribute-construction-list.h (module 'core'): std::_List_const_iterator<ns3::AttributeConstructionList::Item> ns3::AttributeConstructionList::End() const [member function]
+    cls.add_method('End', 
+                   'std::_List_const_iterator< ns3::AttributeConstructionList::Item >', 
+                   [], 
+                   is_const=True)
+    ## attribute-construction-list.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeConstructionList::Find(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('Find', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True)
+    return
+
+def register_Ns3AttributeConstructionListItem_methods(root_module, cls):
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::Item() [constructor]
+    cls.add_constructor([])
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::Item(ns3::AttributeConstructionList::Item const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AttributeConstructionList::Item const &', 'arg0')])
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::checker [variable]
+    cls.add_instance_attribute('checker', 'ns3::Ptr< ns3::AttributeChecker const >', is_const=False)
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::name [variable]
+    cls.add_instance_attribute('name', 'std::string', is_const=False)
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::value [variable]
+    cls.add_instance_attribute('value', 'ns3::Ptr< ns3::AttributeValue >', is_const=False)
+    return
+
+def register_Ns3Buffer_methods(root_module, cls):
+    ## buffer.h (module 'network'): ns3::Buffer::Buffer() [constructor]
+    cls.add_constructor([])
+    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize) [constructor]
+    cls.add_constructor([param('uint32_t', 'dataSize')])
+    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize, bool initialize) [constructor]
+    cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
+    ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
+    cls.add_constructor([param('ns3::Buffer const &', 'o')])
+    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    cls.add_method('AddAtEnd', 
+                   'bool', 
+                   [param('uint32_t', 'end')])
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
+    cls.add_method('AddAtEnd', 
+                   'void', 
+                   [param('ns3::Buffer const &', 'o')])
+    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    cls.add_method('AddAtStart', 
+                   'bool', 
+                   [param('uint32_t', 'start')])
+    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   'ns3::Buffer::Iterator', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): void ns3::Buffer::CopyData(std::ostream * os, uint32_t size) const [member function]
+    cls.add_method('CopyData', 
+                   'void', 
+                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::CopyData(uint8_t * buffer, uint32_t size) const [member function]
+    cls.add_method('CopyData', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
+                   is_const=True)
+    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFragment(uint32_t start, uint32_t length) const [member function]
+    cls.add_method('CreateFragment', 
+                   'ns3::Buffer', 
+                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
+                   is_const=True)
+    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
+    cls.add_method('CreateFullCopy', 
+                   'ns3::Buffer', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::End() const [member function]
+    cls.add_method('End', 
+                   'ns3::Buffer::Iterator', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
+    cls.add_method('GetCurrentEndOffset', 
+                   'int32_t', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
+    cls.add_method('GetCurrentStartOffset', 
+                   'int32_t', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint8_t const * ns3::Buffer::PeekData() const [member function]
+    cls.add_method('PeekData', 
+                   'uint8_t const *', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtEnd(uint32_t end) [member function]
+    cls.add_method('RemoveAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'end')])
+    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtStart(uint32_t start) [member function]
+    cls.add_method('RemoveAtStart', 
+                   'void', 
+                   [param('uint32_t', 'start')])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
+    cls.add_method('Serialize', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
+                   is_const=True)
+    return
+
+def register_Ns3BufferIterator_methods(root_module, cls):
+    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator(ns3::Buffer::Iterator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Buffer::Iterator const &', 'arg0')])
+    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator() [constructor]
+    cls.add_constructor([])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size) [member function]
+    cls.add_method('CalculateIpChecksum', 
+                   'uint16_t', 
+                   [param('uint16_t', 'size')])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size, uint32_t initialChecksum) [member function]
+    cls.add_method('CalculateIpChecksum', 
+                   'uint16_t', 
+                   [param('uint16_t', 'size'), param('uint32_t', 'initialChecksum')])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetDistanceFrom(ns3::Buffer::Iterator const & o) const [member function]
+    cls.add_method('GetDistanceFrom', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator const &', 'o')], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsEnd() const [member function]
+    cls.add_method('IsEnd', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsStart() const [member function]
+    cls.add_method('IsStart', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next() [member function]
+    cls.add_method('Next', 
+                   'void', 
+                   [])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next(uint32_t delta) [member function]
+    cls.add_method('Next', 
+                   'void', 
+                   [param('uint32_t', 'delta')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev() [member function]
+    cls.add_method('Prev', 
+                   'void', 
+                   [])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev(uint32_t delta) [member function]
+    cls.add_method('Prev', 
+                   'void', 
+                   [param('uint32_t', 'delta')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Read(uint8_t * buffer, uint32_t size) [member function]
+    cls.add_method('Read', 
+                   'void', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadLsbtohU16() [member function]
+    cls.add_method('ReadLsbtohU16', 
+                   'uint16_t', 
+                   [])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadLsbtohU32() [member function]
+    cls.add_method('ReadLsbtohU32', 
+                   'uint32_t', 
+                   [])
+    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadLsbtohU64() [member function]
+    cls.add_method('ReadLsbtohU64', 
+                   'uint64_t', 
+                   [])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadNtohU16() [member function]
+    cls.add_method('ReadNtohU16', 
+                   'uint16_t', 
+                   [])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadNtohU32() [member function]
+    cls.add_method('ReadNtohU32', 
+                   'uint32_t', 
+                   [])
+    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadNtohU64() [member function]
+    cls.add_method('ReadNtohU64', 
+                   'uint64_t', 
+                   [])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadU16() [member function]
+    cls.add_method('ReadU16', 
+                   'uint16_t', 
+                   [])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadU32() [member function]
+    cls.add_method('ReadU32', 
+                   'uint32_t', 
+                   [])
+    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadU64() [member function]
+    cls.add_method('ReadU64', 
+                   'uint64_t', 
+                   [])
+    ## buffer.h (module 'network'): uint8_t ns3::Buffer::Iterator::ReadU8() [member function]
+    cls.add_method('ReadU8', 
+                   'uint8_t', 
+                   [])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(uint8_t const * buffer, uint32_t size) [member function]
+    cls.add_method('Write', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(ns3::Buffer::Iterator start, ns3::Buffer::Iterator end) [member function]
+    cls.add_method('Write', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('ns3::Buffer::Iterator', 'end')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU16(uint16_t data) [member function]
+    cls.add_method('WriteHtolsbU16', 
+                   'void', 
+                   [param('uint16_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU32(uint32_t data) [member function]
+    cls.add_method('WriteHtolsbU32', 
+                   'void', 
+                   [param('uint32_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU64(uint64_t data) [member function]
+    cls.add_method('WriteHtolsbU64', 
+                   'void', 
+                   [param('uint64_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU16(uint16_t data) [member function]
+    cls.add_method('WriteHtonU16', 
+                   'void', 
+                   [param('uint16_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU32(uint32_t data) [member function]
+    cls.add_method('WriteHtonU32', 
+                   'void', 
+                   [param('uint32_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU64(uint64_t data) [member function]
+    cls.add_method('WriteHtonU64', 
+                   'void', 
+                   [param('uint64_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU16(uint16_t data) [member function]
+    cls.add_method('WriteU16', 
+                   'void', 
+                   [param('uint16_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU32(uint32_t data) [member function]
+    cls.add_method('WriteU32', 
+                   'void', 
+                   [param('uint32_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU64(uint64_t data) [member function]
+    cls.add_method('WriteU64', 
+                   'void', 
+                   [param('uint64_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data) [member function]
+    cls.add_method('WriteU8', 
+                   'void', 
+                   [param('uint8_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data, uint32_t len) [member function]
+    cls.add_method('WriteU8', 
+                   'void', 
+                   [param('uint8_t', 'data'), param('uint32_t', 'len')])
+    return
+
+def register_Ns3ByteTagIterator_methods(root_module, cls):
+    ## packet.h (module 'network'): ns3::ByteTagIterator::ByteTagIterator(ns3::ByteTagIterator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagIterator const &', 'arg0')])
+    ## packet.h (module 'network'): bool ns3::ByteTagIterator::HasNext() const [member function]
+    cls.add_method('HasNext', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::ByteTagIterator::Item ns3::ByteTagIterator::Next() [member function]
+    cls.add_method('Next', 
+                   'ns3::ByteTagIterator::Item', 
+                   [])
+    return
+
+def register_Ns3ByteTagIteratorItem_methods(root_module, cls):
+    ## packet.h (module 'network'): ns3::ByteTagIterator::Item::Item(ns3::ByteTagIterator::Item const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagIterator::Item const &', 'arg0')])
+    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetEnd() const [member function]
+    cls.add_method('GetEnd', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetStart() const [member function]
+    cls.add_method('GetStart', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::ByteTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
+    cls.add_method('GetTag', 
+                   'void', 
+                   [param('ns3::Tag &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::TypeId ns3::ByteTagIterator::Item::GetTypeId() const [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3ByteTagList_methods(root_module, cls):
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList() [constructor]
+    cls.add_constructor([])
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList(ns3::ByteTagList const & o) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagList const &', 'o')])
+    ## byte-tag-list.h (module 'network'): ns3::TagBuffer ns3::ByteTagList::Add(ns3::TypeId tid, uint32_t bufferSize, int32_t start, int32_t end) [member function]
+    cls.add_method('Add', 
+                   'ns3::TagBuffer', 
+                   [param('ns3::TypeId', 'tid'), param('uint32_t', 'bufferSize'), param('int32_t', 'start'), param('int32_t', 'end')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Add(ns3::ByteTagList const & o) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::ByteTagList const &', 'o')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    cls.add_method('AddAtEnd', 
+                   'void', 
+                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+    cls.add_method('AddAtStart', 
+                   'void', 
+                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
+    cls.add_method('Begin', 
+                   'ns3::ByteTagList::Iterator', 
+                   [param('int32_t', 'offsetStart'), param('int32_t', 'offsetEnd')], 
+                   is_const=True)
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::RemoveAll() [member function]
+    cls.add_method('RemoveAll', 
+                   'void', 
+                   [])
+    return
+
+def register_Ns3ByteTagListIterator_methods(root_module, cls):
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Iterator(ns3::ByteTagList::Iterator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagList::Iterator const &', 'arg0')])
+    ## byte-tag-list.h (module 'network'): uint32_t ns3::ByteTagList::Iterator::GetOffsetStart() const [member function]
+    cls.add_method('GetOffsetStart', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## byte-tag-list.h (module 'network'): bool ns3::ByteTagList::Iterator::HasNext() const [member function]
+    cls.add_method('HasNext', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item ns3::ByteTagList::Iterator::Next() [member function]
+    cls.add_method('Next', 
+                   'ns3::ByteTagList::Iterator::Item', 
+                   [])
+    return
+
+def register_Ns3ByteTagListIteratorItem_methods(root_module, cls):
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::ByteTagList::Iterator::Item const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagList::Iterator::Item const &', 'arg0')])
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::TagBuffer buf) [constructor]
+    cls.add_constructor([param('ns3::TagBuffer', 'buf')])
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::buf [variable]
+    cls.add_instance_attribute('buf', 'ns3::TagBuffer', is_const=False)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::end [variable]
+    cls.add_instance_attribute('end', 'int32_t', is_const=False)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::size [variable]
+    cls.add_instance_attribute('size', 'uint32_t', is_const=False)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::start [variable]
+    cls.add_instance_attribute('start', 'int32_t', is_const=False)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::tid [variable]
+    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
+    return
+
+def register_Ns3CallbackBase_methods(root_module, cls):
+    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::CallbackBase const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CallbackBase const &', 'arg0')])
+    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase() [constructor]
+    cls.add_constructor([])
+    ## callback.h (module 'core'): ns3::Ptr<ns3::CallbackImplBase> ns3::CallbackBase::GetImpl() const [member function]
+    cls.add_method('GetImpl', 
+                   'ns3::Ptr< ns3::CallbackImplBase >', 
+                   [], 
+                   is_const=True)
+    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
+                        visibility='protected')
+    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
+    return
+
+def register_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_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_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_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_Ns3SixLowPanDispatch_methods(root_module, cls):
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanDispatch::SixLowPanDispatch(ns3::SixLowPanDispatch const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SixLowPanDispatch const &', 'arg0')])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanDispatch::SixLowPanDispatch() [constructor]
+    cls.add_constructor([])
+    ## sixlowpan-header.h (module 'sixlowpan'): static ns3::SixLowPanDispatch::Dispatch_e ns3::SixLowPanDispatch::GetDispatchType(uint8_t dispatch) [member function]
+    cls.add_method('GetDispatchType', 
+                   'ns3::SixLowPanDispatch::Dispatch_e', 
+                   [param('uint8_t', 'dispatch')], 
+                   is_static=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): static ns3::SixLowPanDispatch::NhcDispatch_e ns3::SixLowPanDispatch::GetNhcDispatchType(uint8_t dispatch) [member function]
+    cls.add_method('GetNhcDispatchType', 
+                   'ns3::SixLowPanDispatch::NhcDispatch_e', 
+                   [param('uint8_t', 'dispatch')], 
+                   is_static=True)
+    return
+
+def register_Ns3SixLowPanHelper_methods(root_module, cls):
+    ## sixlowpan-helper.h (module 'sixlowpan'): ns3::SixLowPanHelper::SixLowPanHelper(ns3::SixLowPanHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SixLowPanHelper const &', 'arg0')])
+    ## sixlowpan-helper.h (module 'sixlowpan'): ns3::SixLowPanHelper::SixLowPanHelper() [constructor]
+    cls.add_constructor([])
+    ## sixlowpan-helper.h (module 'sixlowpan'): int64_t ns3::SixLowPanHelper::AssignStreams(ns3::NetDeviceContainer c, int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('ns3::NetDeviceContainer', 'c'), param('int64_t', 'stream')])
+    ## sixlowpan-helper.h (module 'sixlowpan'): ns3::NetDeviceContainer ns3::SixLowPanHelper::Install(ns3::NetDeviceContainer c) [member function]
+    cls.add_method('Install', 
+                   'ns3::NetDeviceContainer', 
+                   [param('ns3::NetDeviceContainer', 'c')])
+    ## sixlowpan-helper.h (module 'sixlowpan'): void ns3::SixLowPanHelper::SetDeviceAttribute(std::string n1, ns3::AttributeValue const & v1) [member function]
+    cls.add_method('SetDeviceAttribute', 
+                   'void', 
+                   [param('std::string', 'n1'), param('ns3::AttributeValue const &', 'v1')])
+    return
+
+def register_Ns3Tag_methods(root_module, cls):
+    ## tag.h (module 'network'): ns3::Tag::Tag() [constructor]
+    cls.add_constructor([])
+    ## tag.h (module 'network'): ns3::Tag::Tag(ns3::Tag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Tag const &', 'arg0')])
+    ## tag.h (module 'network'): void ns3::Tag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## tag.h (module 'network'): uint32_t ns3::Tag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## tag.h (module 'network'): static ns3::TypeId ns3::Tag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tag.h (module 'network'): void ns3::Tag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## tag.h (module 'network'): void ns3::Tag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_Ns3TagBuffer_methods(root_module, cls):
+    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(ns3::TagBuffer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TagBuffer const &', 'arg0')])
+    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(uint8_t * start, uint8_t * end) [constructor]
+    cls.add_constructor([param('uint8_t *', 'start'), param('uint8_t *', 'end')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::CopyFrom(ns3::TagBuffer o) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'o')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::Read(uint8_t * buffer, uint32_t size) [member function]
+    cls.add_method('Read', 
+                   'void', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
+    ## tag-buffer.h (module 'network'): double ns3::TagBuffer::ReadDouble() [member function]
+    cls.add_method('ReadDouble', 
+                   'double', 
+                   [])
+    ## tag-buffer.h (module 'network'): uint16_t ns3::TagBuffer::ReadU16() [member function]
+    cls.add_method('ReadU16', 
+                   'uint16_t', 
+                   [])
+    ## tag-buffer.h (module 'network'): uint32_t ns3::TagBuffer::ReadU32() [member function]
+    cls.add_method('ReadU32', 
+                   'uint32_t', 
+                   [])
+    ## tag-buffer.h (module 'network'): uint64_t ns3::TagBuffer::ReadU64() [member function]
+    cls.add_method('ReadU64', 
+                   'uint64_t', 
+                   [])
+    ## tag-buffer.h (module 'network'): uint8_t ns3::TagBuffer::ReadU8() [member function]
+    cls.add_method('ReadU8', 
+                   'uint8_t', 
+                   [])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::TrimAtEnd(uint32_t trim) [member function]
+    cls.add_method('TrimAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'trim')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::Write(uint8_t const * buffer, uint32_t size) [member function]
+    cls.add_method('Write', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteDouble(double v) [member function]
+    cls.add_method('WriteDouble', 
+                   'void', 
+                   [param('double', 'v')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU16(uint16_t data) [member function]
+    cls.add_method('WriteU16', 
+                   'void', 
+                   [param('uint16_t', 'data')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU32(uint32_t data) [member function]
+    cls.add_method('WriteU32', 
+                   'void', 
+                   [param('uint32_t', 'data')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU64(uint64_t v) [member function]
+    cls.add_method('WriteU64', 
+                   'void', 
+                   [param('uint64_t', 'v')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU8(uint8_t v) [member function]
+    cls.add_method('WriteU8', 
+                   'void', 
+                   [param('uint8_t', 'v')])
+    return
+
+def register_Ns3TypeId_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## type-id.h (module 'core'): ns3::TypeId::TypeId(char const * name) [constructor]
+    cls.add_constructor([param('char const *', 'name')])
+    ## type-id.h (module 'core'): ns3::TypeId::TypeId() [constructor]
+    cls.add_constructor([])
+    ## type-id.h (module 'core'): ns3::TypeId::TypeId(ns3::TypeId const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TypeId const &', 'o')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddAttribute(std::string name, std::string help, ns3::AttributeValue const & initialValue, ns3::Ptr<ns3::AttributeAccessor const> accessor, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('AddAttribute', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::AttributeValue const &', 'initialValue'), param('ns3::Ptr< ns3::AttributeAccessor const >', 'accessor'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddAttribute(std::string name, std::string help, uint32_t flags, ns3::AttributeValue const & initialValue, ns3::Ptr<ns3::AttributeAccessor const> accessor, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('AddAttribute', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('uint32_t', 'flags'), param('ns3::AttributeValue const &', 'initialValue'), param('ns3::Ptr< ns3::AttributeAccessor const >', 'accessor'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')])
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
+    cls.add_method('GetAttribute', 
+                   'ns3::TypeId::AttributeInformation', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## type-id.h (module 'core'): std::string ns3::TypeId::GetAttributeFullName(uint32_t i) const [member function]
+    cls.add_method('GetAttributeFullName', 
+                   'std::string', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetAttributeN() const [member function]
+    cls.add_method('GetAttributeN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): ns3::Callback<ns3::ObjectBase*,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ns3::TypeId::GetConstructor() const [member function]
+    cls.add_method('GetConstructor', 
+                   'ns3::Callback< ns3::ObjectBase *, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): std::string ns3::TypeId::GetGroupName() const [member function]
+    cls.add_method('GetGroupName', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): 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('long long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
+    cls.add_unary_numeric_operator('-')
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('>')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', 'right'))
+    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', 'right'))
+    cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', 'right'))
+    cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', 'right'))
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('<=')
+    cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('>=')
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
+    cls.add_constructor([])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(double v) [constructor]
+    cls.add_constructor([param('double', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(int v) [constructor]
+    cls.add_constructor([param('int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long int v) [constructor]
+    cls.add_constructor([param('long int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long int v) [constructor]
+    cls.add_constructor([param('long long int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(unsigned int v) [constructor]
+    cls.add_constructor([param('unsigned int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long unsigned int v) [constructor]
+    cls.add_constructor([param('long unsigned int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long unsigned int v) [constructor]
+    cls.add_constructor([param('long long unsigned int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(int64_t hi, uint64_t lo) [constructor]
+    cls.add_constructor([param('int64_t', 'hi'), param('uint64_t', 'lo')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(ns3::int64x64_t const & o) [copy constructor]
+    cls.add_constructor([param('ns3::int64x64_t const &', 'o')])
+    ## int64x64-double.h (module 'core'): double ns3::int64x64_t::GetDouble() const [member function]
+    cls.add_method('GetDouble', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## int64x64-double.h (module 'core'): int64_t ns3::int64x64_t::GetHigh() const [member function]
+    cls.add_method('GetHigh', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## int64x64-double.h (module 'core'): uint64_t ns3::int64x64_t::GetLow() const [member function]
+    cls.add_method('GetLow', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## int64x64-double.h (module 'core'): static ns3::int64x64_t ns3::int64x64_t::Invert(uint64_t v) [member function]
+    cls.add_method('Invert', 
+                   'ns3::int64x64_t', 
+                   [param('uint64_t', 'v')], 
+                   is_static=True)
+    ## int64x64-double.h (module 'core'): void ns3::int64x64_t::MulByInvert(ns3::int64x64_t const & o) [member function]
+    cls.add_method('MulByInvert', 
+                   'void', 
+                   [param('ns3::int64x64_t const &', 'o')])
+    return
+
+def register_Ns3Chunk_methods(root_module, cls):
+    ## chunk.h (module 'network'): ns3::Chunk::Chunk() [constructor]
+    cls.add_constructor([])
+    ## chunk.h (module 'network'): ns3::Chunk::Chunk(ns3::Chunk const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Chunk const &', 'arg0')])
+    ## chunk.h (module 'network'): uint32_t ns3::Chunk::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## chunk.h (module 'network'): static ns3::TypeId ns3::Chunk::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## chunk.h (module 'network'): void ns3::Chunk::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_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_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_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_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([])
+    ## 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__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter< ns3::Packet > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount(ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter< ns3::TraceSourceAccessor > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SixLowPanFrag1_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanFrag1::SixLowPanFrag1(ns3::SixLowPanFrag1 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SixLowPanFrag1 const &', 'arg0')])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanFrag1::SixLowPanFrag1() [constructor]
+    cls.add_constructor([])
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanFrag1::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint16_t ns3::SixLowPanFrag1::GetDatagramSize() const [member function]
+    cls.add_method('GetDatagramSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint16_t ns3::SixLowPanFrag1::GetDatagramTag() const [member function]
+    cls.add_method('GetDatagramTag', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::TypeId ns3::SixLowPanFrag1::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanFrag1::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): static ns3::TypeId ns3::SixLowPanFrag1::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanFrag1::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanFrag1::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanFrag1::SetDatagramSize(uint16_t datagramSize) [member function]
+    cls.add_method('SetDatagramSize', 
+                   'void', 
+                   [param('uint16_t', 'datagramSize')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanFrag1::SetDatagramTag(uint16_t datagramTag) [member function]
+    cls.add_method('SetDatagramTag', 
+                   'void', 
+                   [param('uint16_t', 'datagramTag')])
+    return
+
+def register_Ns3SixLowPanFragN_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanFragN::SixLowPanFragN(ns3::SixLowPanFragN const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SixLowPanFragN const &', 'arg0')])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanFragN::SixLowPanFragN() [constructor]
+    cls.add_constructor([])
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanFragN::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanFragN::GetDatagramOffset() const [member function]
+    cls.add_method('GetDatagramOffset', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint16_t ns3::SixLowPanFragN::GetDatagramSize() const [member function]
+    cls.add_method('GetDatagramSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint16_t ns3::SixLowPanFragN::GetDatagramTag() const [member function]
+    cls.add_method('GetDatagramTag', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::TypeId ns3::SixLowPanFragN::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanFragN::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): static ns3::TypeId ns3::SixLowPanFragN::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanFragN::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanFragN::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanFragN::SetDatagramOffset(uint8_t datagramOffset) [member function]
+    cls.add_method('SetDatagramOffset', 
+                   'void', 
+                   [param('uint8_t', 'datagramOffset')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanFragN::SetDatagramSize(uint16_t datagramSize) [member function]
+    cls.add_method('SetDatagramSize', 
+                   'void', 
+                   [param('uint16_t', 'datagramSize')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanFragN::SetDatagramTag(uint16_t datagramTag) [member function]
+    cls.add_method('SetDatagramTag', 
+                   'void', 
+                   [param('uint16_t', 'datagramTag')])
+    return
+
+def register_Ns3SixLowPanHc1_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanHc1::SixLowPanHc1(ns3::SixLowPanHc1 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SixLowPanHc1 const &', 'arg0')])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanHc1::SixLowPanHc1() [constructor]
+    cls.add_constructor([])
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanHc1::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanHc1::LowPanHc1Addr_e ns3::SixLowPanHc1::GetDstCompression() const [member function]
+    cls.add_method('GetDstCompression', 
+                   'ns3::SixLowPanHc1::LowPanHc1Addr_e', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t const * ns3::SixLowPanHc1::GetDstInterface() const [member function]
+    cls.add_method('GetDstInterface', 
+                   'uint8_t const *', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t const * ns3::SixLowPanHc1::GetDstPrefix() const [member function]
+    cls.add_method('GetDstPrefix', 
+                   'uint8_t const *', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanHc1::GetFlowLabel() const [member function]
+    cls.add_method('GetFlowLabel', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanHc1::GetHopLimit() const [member function]
+    cls.add_method('GetHopLimit', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::TypeId ns3::SixLowPanHc1::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanHc1::GetNextHeader() const [member function]
+    cls.add_method('GetNextHeader', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanHc1::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanHc1::LowPanHc1Addr_e ns3::SixLowPanHc1::GetSrcCompression() const [member function]
+    cls.add_method('GetSrcCompression', 
+                   'ns3::SixLowPanHc1::LowPanHc1Addr_e', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t const * ns3::SixLowPanHc1::GetSrcInterface() const [member function]
+    cls.add_method('GetSrcInterface', 
+                   'uint8_t const *', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t const * ns3::SixLowPanHc1::GetSrcPrefix() const [member function]
+    cls.add_method('GetSrcPrefix', 
+                   'uint8_t const *', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanHc1::GetTrafficClass() const [member function]
+    cls.add_method('GetTrafficClass', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): static ns3::TypeId ns3::SixLowPanHc1::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): bool ns3::SixLowPanHc1::IsHc2HeaderPresent() const [member function]
+    cls.add_method('IsHc2HeaderPresent', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): bool ns3::SixLowPanHc1::IsTcflCompression() const [member function]
+    cls.add_method('IsTcflCompression', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetDstCompression(ns3::SixLowPanHc1::LowPanHc1Addr_e dstCompression) [member function]
+    cls.add_method('SetDstCompression', 
+                   'void', 
+                   [param('ns3::SixLowPanHc1::LowPanHc1Addr_e', 'dstCompression')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetDstInterface(uint8_t const * dstInterface) [member function]
+    cls.add_method('SetDstInterface', 
+                   'void', 
+                   [param('uint8_t const *', 'dstInterface')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetDstPrefix(uint8_t const * dstPrefix) [member function]
+    cls.add_method('SetDstPrefix', 
+                   'void', 
+                   [param('uint8_t const *', 'dstPrefix')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetFlowLabel(uint32_t flowLabel) [member function]
+    cls.add_method('SetFlowLabel', 
+                   'void', 
+                   [param('uint32_t', 'flowLabel')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetHc2HeaderPresent(bool hc2HeaderPresent) [member function]
+    cls.add_method('SetHc2HeaderPresent', 
+                   'void', 
+                   [param('bool', 'hc2HeaderPresent')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetHopLimit(uint8_t limit) [member function]
+    cls.add_method('SetHopLimit', 
+                   'void', 
+                   [param('uint8_t', 'limit')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetNextHeader(uint8_t nextHeader) [member function]
+    cls.add_method('SetNextHeader', 
+                   'void', 
+                   [param('uint8_t', 'nextHeader')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetSrcCompression(ns3::SixLowPanHc1::LowPanHc1Addr_e srcCompression) [member function]
+    cls.add_method('SetSrcCompression', 
+                   'void', 
+                   [param('ns3::SixLowPanHc1::LowPanHc1Addr_e', 'srcCompression')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetSrcInterface(uint8_t const * srcInterface) [member function]
+    cls.add_method('SetSrcInterface', 
+                   'void', 
+                   [param('uint8_t const *', 'srcInterface')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetSrcPrefix(uint8_t const * srcPrefix) [member function]
+    cls.add_method('SetSrcPrefix', 
+                   'void', 
+                   [param('uint8_t const *', 'srcPrefix')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetTcflCompression(bool tcflCompression) [member function]
+    cls.add_method('SetTcflCompression', 
+                   'void', 
+                   [param('bool', 'tcflCompression')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanHc1::SetTrafficClass(uint8_t trafficClass) [member function]
+    cls.add_method('SetTrafficClass', 
+                   'void', 
+                   [param('uint8_t', 'trafficClass')])
+    return
+
+def register_Ns3SixLowPanIphc_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::SixLowPanIphc(ns3::SixLowPanIphc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SixLowPanIphc const &', 'arg0')])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::SixLowPanIphc() [constructor]
+    cls.add_constructor([])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::SixLowPanIphc(uint8_t dispatch) [constructor]
+    cls.add_constructor([param('uint8_t', 'dispatch')])
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanIphc::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): bool ns3::SixLowPanIphc::GetCid() const [member function]
+    cls.add_method('GetCid', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): bool ns3::SixLowPanIphc::GetDac() const [member function]
+    cls.add_method('GetDac', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::HeaderCompression_e ns3::SixLowPanIphc::GetDam() const [member function]
+    cls.add_method('GetDam', 
+                   'ns3::SixLowPanIphc::HeaderCompression_e', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanIphc::GetDscp() const [member function]
+    cls.add_method('GetDscp', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::Ipv6Address ns3::SixLowPanIphc::GetDstAddress() const [member function]
+    cls.add_method('GetDstAddress', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanIphc::GetDstContextId() const [member function]
+    cls.add_method('GetDstContextId', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanIphc::GetEcn() const [member function]
+    cls.add_method('GetEcn', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanIphc::GetFlowLabel() const [member function]
+    cls.add_method('GetFlowLabel', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::Hlim_e ns3::SixLowPanIphc::GetHlim() const [member function]
+    cls.add_method('GetHlim', 
+                   'ns3::SixLowPanIphc::Hlim_e', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanIphc::GetHopLimit() const [member function]
+    cls.add_method('GetHopLimit', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::TypeId ns3::SixLowPanIphc::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): bool ns3::SixLowPanIphc::GetM() const [member function]
+    cls.add_method('GetM', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanIphc::GetNextHeader() const [member function]
+    cls.add_method('GetNextHeader', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): bool ns3::SixLowPanIphc::GetNh() const [member function]
+    cls.add_method('GetNh', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): bool ns3::SixLowPanIphc::GetSac() const [member function]
+    cls.add_method('GetSac', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::HeaderCompression_e ns3::SixLowPanIphc::GetSam() const [member function]
+    cls.add_method('GetSam', 
+                   'ns3::SixLowPanIphc::HeaderCompression_e', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanIphc::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::Ipv6Address ns3::SixLowPanIphc::GetSrcAddress() const [member function]
+    cls.add_method('GetSrcAddress', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanIphc::GetSrcContextId() const [member function]
+    cls.add_method('GetSrcContextId', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanIphc::TrafficClassFlowLabel_e ns3::SixLowPanIphc::GetTf() const [member function]
+    cls.add_method('GetTf', 
+                   'ns3::SixLowPanIphc::TrafficClassFlowLabel_e', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): static ns3::TypeId ns3::SixLowPanIphc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetCid(bool cidField) [member function]
+    cls.add_method('SetCid', 
+                   'void', 
+                   [param('bool', 'cidField')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetDac(bool dacField) [member function]
+    cls.add_method('SetDac', 
+                   'void', 
+                   [param('bool', 'dacField')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetDam(ns3::SixLowPanIphc::HeaderCompression_e damField) [member function]
+    cls.add_method('SetDam', 
+                   'void', 
+                   [param('ns3::SixLowPanIphc::HeaderCompression_e', 'damField')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetDscp(uint8_t dscp) [member function]
+    cls.add_method('SetDscp', 
+                   'void', 
+                   [param('uint8_t', 'dscp')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetDstAddress(ns3::Ipv6Address dstAddress) [member function]
+    cls.add_method('SetDstAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dstAddress')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetDstContextId(uint8_t dstContextId) [member function]
+    cls.add_method('SetDstContextId', 
+                   'void', 
+                   [param('uint8_t', 'dstContextId')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetEcn(uint8_t ecn) [member function]
+    cls.add_method('SetEcn', 
+                   'void', 
+                   [param('uint8_t', 'ecn')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetFlowLabel(uint32_t flowLabel) [member function]
+    cls.add_method('SetFlowLabel', 
+                   'void', 
+                   [param('uint32_t', 'flowLabel')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetHlim(ns3::SixLowPanIphc::Hlim_e hlimField) [member function]
+    cls.add_method('SetHlim', 
+                   'void', 
+                   [param('ns3::SixLowPanIphc::Hlim_e', 'hlimField')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetHopLimit(uint8_t hopLimit) [member function]
+    cls.add_method('SetHopLimit', 
+                   'void', 
+                   [param('uint8_t', 'hopLimit')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetM(bool mField) [member function]
+    cls.add_method('SetM', 
+                   'void', 
+                   [param('bool', 'mField')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetNextHeader(uint8_t nextHeader) [member function]
+    cls.add_method('SetNextHeader', 
+                   'void', 
+                   [param('uint8_t', 'nextHeader')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetNh(bool nhField) [member function]
+    cls.add_method('SetNh', 
+                   'void', 
+                   [param('bool', 'nhField')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetSac(bool sacField) [member function]
+    cls.add_method('SetSac', 
+                   'void', 
+                   [param('bool', 'sacField')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetSam(ns3::SixLowPanIphc::HeaderCompression_e samField) [member function]
+    cls.add_method('SetSam', 
+                   'void', 
+                   [param('ns3::SixLowPanIphc::HeaderCompression_e', 'samField')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetSrcAddress(ns3::Ipv6Address srcAddress) [member function]
+    cls.add_method('SetSrcAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'srcAddress')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetSrcContextId(uint8_t srcContextId) [member function]
+    cls.add_method('SetSrcContextId', 
+                   'void', 
+                   [param('uint8_t', 'srcContextId')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanIphc::SetTf(ns3::SixLowPanIphc::TrafficClassFlowLabel_e tfField) [member function]
+    cls.add_method('SetTf', 
+                   'void', 
+                   [param('ns3::SixLowPanIphc::TrafficClassFlowLabel_e', 'tfField')])
+    return
+
+def register_Ns3SixLowPanNhcExtension_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanNhcExtension::SixLowPanNhcExtension(ns3::SixLowPanNhcExtension const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SixLowPanNhcExtension const &', 'arg0')])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanNhcExtension::SixLowPanNhcExtension() [constructor]
+    cls.add_constructor([])
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanNhcExtension::CopyBlob(uint8_t * blob, uint32_t size) const [member function]
+    cls.add_method('CopyBlob', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'blob'), param('uint32_t', 'size')], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanNhcExtension::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanNhcExtension::Eid_e ns3::SixLowPanNhcExtension::GetEid() const [member function]
+    cls.add_method('GetEid', 
+                   'ns3::SixLowPanNhcExtension::Eid_e', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::TypeId ns3::SixLowPanNhcExtension::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint8_t ns3::SixLowPanNhcExtension::GetNextHeader() const [member function]
+    cls.add_method('GetNextHeader', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): bool ns3::SixLowPanNhcExtension::GetNh() const [member function]
+    cls.add_method('GetNh', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanDispatch::NhcDispatch_e ns3::SixLowPanNhcExtension::GetNhcDispatchType() const [member function]
+    cls.add_method('GetNhcDispatchType', 
+                   'ns3::SixLowPanDispatch::NhcDispatch_e', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanNhcExtension::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): static ns3::TypeId ns3::SixLowPanNhcExtension::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanNhcExtension::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanNhcExtension::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanNhcExtension::SetBlob(uint8_t const * blob, uint32_t size) [member function]
+    cls.add_method('SetBlob', 
+                   'void', 
+                   [param('uint8_t const *', 'blob'), param('uint32_t', 'size')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanNhcExtension::SetEid(ns3::SixLowPanNhcExtension::Eid_e extensionHeaderType) [member function]
+    cls.add_method('SetEid', 
+                   'void', 
+                   [param('ns3::SixLowPanNhcExtension::Eid_e', 'extensionHeaderType')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanNhcExtension::SetNextHeader(uint8_t nextHeader) [member function]
+    cls.add_method('SetNextHeader', 
+                   'void', 
+                   [param('uint8_t', 'nextHeader')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanNhcExtension::SetNh(bool nhField) [member function]
+    cls.add_method('SetNh', 
+                   'void', 
+                   [param('bool', 'nhField')])
+    return
+
+def register_Ns3SixLowPanUdpNhcExtension_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanUdpNhcExtension::SixLowPanUdpNhcExtension(ns3::SixLowPanUdpNhcExtension const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SixLowPanUdpNhcExtension const &', 'arg0')])
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanUdpNhcExtension::SixLowPanUdpNhcExtension() [constructor]
+    cls.add_constructor([])
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanUdpNhcExtension::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): bool ns3::SixLowPanUdpNhcExtension::GetC() const [member function]
+    cls.add_method('GetC', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint16_t ns3::SixLowPanUdpNhcExtension::GetChecksum() const [member function]
+    cls.add_method('GetChecksum', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint16_t ns3::SixLowPanUdpNhcExtension::GetDstPort() const [member function]
+    cls.add_method('GetDstPort', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::TypeId ns3::SixLowPanUdpNhcExtension::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanDispatch::NhcDispatch_e ns3::SixLowPanUdpNhcExtension::GetNhcDispatchType() const [member function]
+    cls.add_method('GetNhcDispatchType', 
+                   'ns3::SixLowPanDispatch::NhcDispatch_e', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanUdpNhcExtension::Ports_e ns3::SixLowPanUdpNhcExtension::GetPorts() const [member function]
+    cls.add_method('GetPorts', 
+                   'ns3::SixLowPanUdpNhcExtension::Ports_e', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint32_t ns3::SixLowPanUdpNhcExtension::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): uint16_t ns3::SixLowPanUdpNhcExtension::GetSrcPort() const [member function]
+    cls.add_method('GetSrcPort', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): static ns3::TypeId ns3::SixLowPanUdpNhcExtension::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanUdpNhcExtension::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanUdpNhcExtension::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanUdpNhcExtension::SetC(bool cField) [member function]
+    cls.add_method('SetC', 
+                   'void', 
+                   [param('bool', 'cField')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanUdpNhcExtension::SetChecksum(uint16_t checksum) [member function]
+    cls.add_method('SetChecksum', 
+                   'void', 
+                   [param('uint16_t', 'checksum')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanUdpNhcExtension::SetDstPort(uint16_t port) [member function]
+    cls.add_method('SetDstPort', 
+                   'void', 
+                   [param('uint16_t', 'port')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanUdpNhcExtension::SetPorts(ns3::SixLowPanUdpNhcExtension::Ports_e port) [member function]
+    cls.add_method('SetPorts', 
+                   'void', 
+                   [param('ns3::SixLowPanUdpNhcExtension::Ports_e', 'port')])
+    ## sixlowpan-header.h (module 'sixlowpan'): void ns3::SixLowPanUdpNhcExtension::SetSrcPort(uint16_t port) [member function]
+    cls.add_method('SetSrcPort', 
+                   'void', 
+                   [param('uint16_t', 'port')])
+    return
+
+def register_Ns3Time_methods(root_module, cls):
+    cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('>')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', 'right'))
+    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', 'right'))
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('<=')
+    cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('>=')
+    ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
+    cls.add_constructor([])
+    ## nstime.h (module 'core'): ns3::Time::Time(ns3::Time const & o) [copy constructor]
+    cls.add_constructor([param('ns3::Time const &', 'o')])
+    ## nstime.h (module 'core'): ns3::Time::Time(double v) [constructor]
+    cls.add_constructor([param('double', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(int v) [constructor]
+    cls.add_constructor([param('int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(long int v) [constructor]
+    cls.add_constructor([param('long int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(long long int v) [constructor]
+    cls.add_constructor([param('long long int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(unsigned int v) [constructor]
+    cls.add_constructor([param('unsigned int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(long unsigned int v) [constructor]
+    cls.add_constructor([param('long unsigned int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(long long unsigned int v) [constructor]
+    cls.add_constructor([param('long long unsigned int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(std::string const & s) [constructor]
+    cls.add_constructor([param('std::string const &', 's')])
+    ## nstime.h (module 'core'): ns3::Time::Time(ns3::int64x64_t const & value) [constructor]
+    cls.add_constructor([param('ns3::int64x64_t const &', 'value')])
+    ## nstime.h (module 'core'): int ns3::Time::Compare(ns3::Time const & o) const [member function]
+    cls.add_method('Compare', 
+                   'int', 
+                   [param('ns3::Time const &', 'o')], 
+                   is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::From(ns3::int64x64_t const & from, ns3::Time::Unit timeUnit) [member function]
+    cls.add_method('From', 
+                   'ns3::Time', 
+                   [param('ns3::int64x64_t const &', 'from'), param('ns3::Time::Unit', 'timeUnit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::From(ns3::int64x64_t const & value) [member function]
+    cls.add_method('From', 
+                   'ns3::Time', 
+                   [param('ns3::int64x64_t const &', 'value')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit timeUnit) [member function]
+    cls.add_method('FromDouble', 
+                   'ns3::Time', 
+                   [param('double', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit timeUnit) [member function]
+    cls.add_method('FromInteger', 
+                   'ns3::Time', 
+                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): double ns3::Time::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 timeUnit) const [member function]
+    cls.add_method('To', 
+                   'ns3::int64x64_t', 
+                   [param('ns3::Time::Unit', 'timeUnit')], 
+                   is_const=True)
+    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit timeUnit) const [member function]
+    cls.add_method('ToDouble', 
+                   'double', 
+                   [param('ns3::Time::Unit', 'timeUnit')], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit timeUnit) const [member function]
+    cls.add_method('ToInteger', 
+                   'int64_t', 
+                   [param('ns3::Time::Unit', 'timeUnit')], 
+                   is_const=True)
+    return
+
+def register_Ns3TraceSourceAccessor_methods(root_module, cls):
+    ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor::TraceSourceAccessor(ns3::TraceSourceAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TraceSourceAccessor const &', 'arg0')])
+    ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor::TraceSourceAccessor() [constructor]
+    cls.add_constructor([])
+    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::Connect(ns3::ObjectBase * obj, std::string context, ns3::CallbackBase const & cb) const [member function]
+    cls.add_method('Connect', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::ConnectWithoutContext(ns3::ObjectBase * obj, ns3::CallbackBase const & cb) const [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('ns3::CallbackBase const &', 'cb')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::Disconnect(ns3::ObjectBase * obj, std::string context, ns3::CallbackBase const & cb) const [member function]
+    cls.add_method('Disconnect', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::DisconnectWithoutContext(ns3::ObjectBase * obj, ns3::CallbackBase const & cb) const [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('ns3::CallbackBase const &', 'cb')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_Ns3Trailer_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## trailer.h (module 'network'): ns3::Trailer::Trailer() [constructor]
+    cls.add_constructor([])
+    ## trailer.h (module 'network'): ns3::Trailer::Trailer(ns3::Trailer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Trailer const &', 'arg0')])
+    ## trailer.h (module 'network'): uint32_t ns3::Trailer::Deserialize(ns3::Buffer::Iterator end) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'end')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## trailer.h (module 'network'): uint32_t ns3::Trailer::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## trailer.h (module 'network'): static ns3::TypeId ns3::Trailer::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## trailer.h (module 'network'): void ns3::Trailer::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## trailer.h (module 'network'): void ns3::Trailer::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_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)
+    ## 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)
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetMin() const [member function]
+    cls.add_method('GetMin', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetMax() const [member function]
+    cls.add_method('GetMax', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## 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_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::TriangularRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   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_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)
+    ## random-variable-stream.h (module 'core'): double ns3::UniformRandomVariable::GetMax() const [member function]
+    cls.add_method('GetMax', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## 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_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::UniformRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+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([])
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetScale() const [member function]
+    cls.add_method('GetScale', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetShape() const [member function]
+    cls.add_method('GetShape', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## 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', 
+                   [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_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::WeibullRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   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)
+    ## 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_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_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZetaRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   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_static=True)
+    ## 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_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ZipfRandomVariable::GetAlpha() const [member function]
+    cls.add_method('GetAlpha', 
+                   'double', 
+                   [], 
+                   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_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZipfRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   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_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)
+    ## 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_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_Ns3EmpiricalRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable::EmpiricalRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## 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_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_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_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_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)
+    ## random-variable-stream.h (module 'core'): double ns3::ErlangRandomVariable::GetLambda() const [member function]
+    cls.add_method('GetLambda', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## 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_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)
+    ## 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)
+    ## random-variable-stream.h (module 'core'): double ns3::ExponentialRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## 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_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_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([])
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetAlpha() const [member function]
+    cls.add_method('GetAlpha', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetBeta() const [member function]
+    cls.add_method('GetBeta', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## 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_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_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_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_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_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_Ns3ObjectFactoryChecker_methods(root_module, cls):
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker() [constructor]
+    cls.add_constructor([])
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker(ns3::ObjectFactoryChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ObjectFactoryChecker const &', 'arg0')])
+    return
+
+def register_Ns3ObjectFactoryValue_methods(root_module, cls):
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue() [constructor]
+    cls.add_constructor([])
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactoryValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ObjectFactoryValue const &', 'arg0')])
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactory const & value) [constructor]
+    cls.add_constructor([param('ns3::ObjectFactory const &', 'value')])
+    ## object-factory.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::ObjectFactoryValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## object-factory.h (module 'core'): bool ns3::ObjectFactoryValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## object-factory.h (module 'core'): ns3::ObjectFactory ns3::ObjectFactoryValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::ObjectFactory', 
+                   [], 
+                   is_const=True)
+    ## object-factory.h (module 'core'): std::string ns3::ObjectFactoryValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## object-factory.h (module 'core'): void ns3::ObjectFactoryValue::Set(ns3::ObjectFactory const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::ObjectFactory const &', 'value')])
+    return
+
+def register_Ns3Packet_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## packet.h (module 'network'): ns3::Packet::Packet() [constructor]
+    cls.add_constructor([])
+    ## packet.h (module 'network'): ns3::Packet::Packet(ns3::Packet const & o) [copy constructor]
+    cls.add_constructor([param('ns3::Packet const &', 'o')])
+    ## packet.h (module 'network'): ns3::Packet::Packet(uint32_t size) [constructor]
+    cls.add_constructor([param('uint32_t', 'size')])
+    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size, bool magic) [constructor]
+    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size'), param('bool', 'magic')])
+    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size) [constructor]
+    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
+    cls.add_method('AddAtEnd', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## packet.h (module 'network'): void ns3::Packet::AddByteTag(ns3::Tag const & tag) const [member function]
+    cls.add_method('AddByteTag', 
+                   'void', 
+                   [param('ns3::Tag const &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::AddHeader(ns3::Header const & header) [member function]
+    cls.add_method('AddHeader', 
+                   'void', 
+                   [param('ns3::Header const &', 'header')])
+    ## packet.h (module 'network'): void ns3::Packet::AddPacketTag(ns3::Tag const & tag) const [member function]
+    cls.add_method('AddPacketTag', 
+                   'void', 
+                   [param('ns3::Tag const &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::AddPaddingAtEnd(uint32_t size) [member function]
+    cls.add_method('AddPaddingAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'size')])
+    ## packet.h (module 'network'): void ns3::Packet::AddTrailer(ns3::Trailer const & trailer) [member function]
+    cls.add_method('AddTrailer', 
+                   'void', 
+                   [param('ns3::Trailer const &', 'trailer')])
+    ## packet.h (module 'network'): ns3::PacketMetadata::ItemIterator ns3::Packet::BeginItem() const [member function]
+    cls.add_method('BeginItem', 
+                   'ns3::PacketMetadata::ItemIterator', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::CopyData(uint8_t * buffer, uint32_t size) const [member function]
+    cls.add_method('CopyData', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::CopyData(std::ostream * os, uint32_t size) const [member function]
+    cls.add_method('CopyData', 
+                   'void', 
+                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::CreateFragment(uint32_t start, uint32_t length) const [member function]
+    cls.add_method('CreateFragment', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
+                   is_const=True)
+    ## packet.h (module 'network'): static void ns3::Packet::EnableChecking() [member function]
+    cls.add_method('EnableChecking', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## packet.h (module 'network'): static void ns3::Packet::EnablePrinting() [member function]
+    cls.add_method('EnablePrinting', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## packet.h (module 'network'): bool ns3::Packet::FindFirstMatchingByteTag(ns3::Tag & tag) const [member function]
+    cls.add_method('FindFirstMatchingByteTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::ByteTagIterator ns3::Packet::GetByteTagIterator() const [member function]
+    cls.add_method('GetByteTagIterator', 
+                   'ns3::ByteTagIterator', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::Ptr<ns3::NixVector> ns3::Packet::GetNixVector() const [member function]
+    cls.add_method('GetNixVector', 
+                   'ns3::Ptr< ns3::NixVector >', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::PacketTagIterator ns3::Packet::GetPacketTagIterator() const [member function]
+    cls.add_method('GetPacketTagIterator', 
+                   'ns3::PacketTagIterator', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint64_t ns3::Packet::GetUid() const [member function]
+    cls.add_method('GetUid', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint8_t const * ns3::Packet::PeekData() const [member function]
+    cls.add_method('PeekData', 
+                   'uint8_t const *', 
+                   [], 
+                   deprecated=True, is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekHeader(ns3::Header & header) const [member function]
+    cls.add_method('PeekHeader', 
+                   'uint32_t', 
+                   [param('ns3::Header &', 'header')], 
+                   is_const=True)
+    ## packet.h (module 'network'): bool ns3::Packet::PeekPacketTag(ns3::Tag & tag) const [member function]
+    cls.add_method('PeekPacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekTrailer(ns3::Trailer & trailer) [member function]
+    cls.add_method('PeekTrailer', 
+                   'uint32_t', 
+                   [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): void ns3::Packet::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::PrintByteTags(std::ostream & os) const [member function]
+    cls.add_method('PrintByteTags', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::PrintPacketTags(std::ostream & os) const [member function]
+    cls.add_method('PrintPacketTags', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::RemoveAllByteTags() [member function]
+    cls.add_method('RemoveAllByteTags', 
+                   'void', 
+                   [])
+    ## packet.h (module 'network'): void ns3::Packet::RemoveAllPacketTags() [member function]
+    cls.add_method('RemoveAllPacketTags', 
+                   'void', 
+                   [])
+    ## packet.h (module 'network'): void ns3::Packet::RemoveAtEnd(uint32_t size) [member function]
+    cls.add_method('RemoveAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'size')])
+    ## packet.h (module 'network'): void ns3::Packet::RemoveAtStart(uint32_t size) [member function]
+    cls.add_method('RemoveAtStart', 
+                   'void', 
+                   [param('uint32_t', 'size')])
+    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveHeader(ns3::Header & header) [member function]
+    cls.add_method('RemoveHeader', 
+                   'uint32_t', 
+                   [param('ns3::Header &', 'header')])
+    ## packet.h (module 'network'): bool ns3::Packet::RemovePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('RemovePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
+    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveTrailer(ns3::Trailer & trailer) [member function]
+    cls.add_method('RemoveTrailer', 
+                   'uint32_t', 
+                   [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): 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> arg0) [member function]
+    cls.add_method('SetNixVector', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
+    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_Ns3SixLowPanNetDevice_methods(root_module, cls):
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::SixLowPanNetDevice::SixLowPanNetDevice() [constructor]
+    cls.add_constructor([])
+    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::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)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): int64_t ns3::SixLowPanNetDevice::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::Address ns3::SixLowPanNetDevice::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::Address ns3::SixLowPanNetDevice::GetBroadcast() const [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::Ptr<ns3::Channel> ns3::SixLowPanNetDevice::GetChannel() const [member function]
+    cls.add_method('GetChannel', 
+                   'ns3::Ptr< ns3::Channel >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): uint32_t ns3::SixLowPanNetDevice::GetIfIndex() const [member function]
+    cls.add_method('GetIfIndex', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): uint16_t ns3::SixLowPanNetDevice::GetMtu() const [member function]
+    cls.add_method('GetMtu', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::Address ns3::SixLowPanNetDevice::GetMulticast(ns3::Ipv4Address multicastGroup) const [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Address', 
+                   [param('ns3::Ipv4Address', 'multicastGroup')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::Address ns3::SixLowPanNetDevice::GetMulticast(ns3::Ipv6Address addr) const [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Address', 
+                   [param('ns3::Ipv6Address', 'addr')], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::Ptr<ns3::NetDevice> ns3::SixLowPanNetDevice::GetNetDevice() const [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::Ptr<ns3::Node> ns3::SixLowPanNetDevice::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): static ns3::TypeId ns3::SixLowPanNetDevice::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::IsBridge() const [member function]
+    cls.add_method('IsBridge', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::IsLinkUp() const [member function]
+    cls.add_method('IsLinkUp', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::IsMulticast() const [member function]
+    cls.add_method('IsMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::IsPointToPoint() const [member function]
+    cls.add_method('IsPointToPoint', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::NeedsArp() const [member function]
+    cls.add_method('NeedsArp', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::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)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::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)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::SetAddress(ns3::Address address) [member function]
+    cls.add_method('SetAddress', 
+                   'void', 
+                   [param('ns3::Address', 'address')], 
+                   is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::SetIfIndex(uint32_t const index) [member function]
+    cls.add_method('SetIfIndex', 
+                   'void', 
+                   [param('uint32_t const', 'index')], 
+                   is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::SetMtu(uint16_t const mtu) [member function]
+    cls.add_method('SetMtu', 
+                   'bool', 
+                   [param('uint16_t const', 'mtu')], 
+                   is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::SetNetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetNetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::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)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::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)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): bool ns3::SixLowPanNetDevice::SupportsSendFrom() const [member function]
+    cls.add_method('SupportsSendFrom', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    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_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.18.1/src/sixlowpan/doc/sixlowpan.rst ns-3.19/src/sixlowpan/doc/sixlowpan.rst
--- ns-3.18.1/src/sixlowpan/doc/sixlowpan.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/sixlowpan/doc/sixlowpan.rst	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,153 @@
+.. include:: replace.txt
+.. highlight:: cpp
+
+
+6LoWPAN: Transmission of IPv6 Packets over IEEE 802.15.4 Networks
+-----------------------------------------------------------------
+
+This chapter describes the implementation of |ns3| model for the
+compression of IPv6 packets over IEEE 802.15.4-Based Networks 
+as specified by :rfc:`4944` and :rfc:`6282`.
+
+Model Description
+*****************
+
+The source code for the sixlowpan module lives in the directory ``src/sixlowpan``.
+
+Design
+======
+
+The model design does not follow strictly the standard from an architectural 
+standpoint, as it does extend it beyond the original scope by supporting also
+other kinds of networks.
+
+Other than that, the module strictly follows :rfc:`4944` and :rfc:`6282`, with the 
+following exceptions:
+
+* MESH and LOWPAN_BC0 dispatch types are not supported
+* HC2 encoding is not supported
+* IPHC's SAC and DAC are not supported
+
+The MESH and LOWPAN_BC0 are not supported as they do apply only to mesh-under
+architecture, which is not one of the goals of the module development.
+
+The HC2 encoding is not supported, as it has been superseded by IPHC and NHC
+compression type (\ :rfc:`6282`).
+
+IPHC SAC and DAC are not yet supported, as they do require :rfc:`6775` for full 
+compliance. It is planned to support them in the future. 
+
+NetDevice
+#########
+
+The whole module is developed as a transparent NetDevice, which can act as a
+proxy between IPv6 and any NetDevice (the module has been successfully tested 
+with PointToPointNedevice, CsmaNetDevice and LrWpanNetDevice).
+
+For this reason, the module implements a virtual NetDevice, and all the calls are passed
+without modifications to the underlying NetDevice. The only important difference is in
+GetMtu behaviour. It will always return *at least* 1280 bytes, as is the minumum IPv6 MTU.
+
+The module does provide some attributes and some tracesources.
+The attributes are:
+
+* Rfc6282 (boolean, default true), used to activate HC1 (:rfc:`4944`) or IPHC (:rfc:`6282`) compression.
+* OmitUdpChecksum (boolean, default true), used to activate UDP checksum compression in IPHC.
+* FragmentReassemblyListSize (integer, default 0), indicating the number of packets that can be reassembled at the same time. If the limit is reached, the oldest packet is discarded. Zero means infinite.
+* FragmentExpirationTimeout (Time, default 60 seconds), being the timeout to wait for further fragments before discarding a partial packet.
+* ForceEtherType (boolean, default false), and
+* EtherType (unsigned 16 bits integer, default 0xFFFF), to force a particular L2 EtherType.
+
+The last two attributes are needed to use the module with a NetDevice other than 802.15.4, as
+neither IANA or IEEE did reserve an EtherType for 6LoWPAN. As a consequence there might be a
+conflict with the L2 multiplexer/demultiplexer which is based on EtherType. The default 
+value is 0xFFFF, which is reserved by IEEE (see [IANA802]_ and [Ethertype]_).
+The default module behaviour is to not change the EtherType, however this would not work with
+any NetDevice actually understanding and using the EtherType.
+
+Note that the `ForceEtherType` parameter have also a direct effect on the MAC address kind the
+module is expecting to handle:
+* ForceEtherType true: Mac48Address (Ethernet, WiFi, etc.).
+* ForceEtherType false: Mac16Address or Mac64Address (IEEE 802.15.4).
+
+Note that using 6LoWPAN over any NetDevice other than 802.15.4 will produce valid .pcap files,
+but they will not be correctly dissected by Wireshark.
+The reason lies on the fact that 6LoWPAN was really meant to be used only over 802.15.4, so
+Wireshark dissectors will not even try to decode 6LoWPAN headers on top of protocols other than
+802.15.4.
+
+The Trace sources are:
+
+* Tx - exposing packet (including 6LoWPAN header), SixLoWPanNetDevice Ptr, interface index.
+* Rx - exposing packet (including 6LoWPAN header), SixLoWPanNetDevice Ptr, interface index.
+* Drop - exposing DropReason, packet (including 6LoWPAN header), SixLoWPanNetDevice Ptr, interface index.
+
+The Tx and Rx traces are called as soon as a packet is received or sent. The Drop trace is
+invoked when a packet (or a fragment) is discarded.
+
+
+Scope and Limitations
+=====================
+
+Future versions of this module will support :rfc:`6775`, however no timeframe is guaranteed.
+
+Using 6LoWPAN with IPv4 (or other L3 protocols)
+###############################################
+
+As the name implies, 6LoWPAN can handle only IPv6 packets. Any other protocol will be discarded.
+Moreover, 6LoWPAN assumes that the network is uniform, as is all the devices connected by the
+same same channel are using 6LoWPAN. Mixed environments are not supported by the standard.
+The reason is simple: 802.15.4 frame doesn't have a "protocol" field. As a consequence,
+there is no demultiplexing at MAC layer and the protocol carried by L2 frames must be known
+in advance.
+
+In the |ns3| implementation it is possible, but not advisable, to violate this requirement
+if the underlying NetDevice is capable of discriminating different protocols. As an example,
+CsmaNetDevice can carry IPv4 and 6LoWPAN at the same time. However, this configuration has 
+not been tested.
+
+References
+==========
+
+.. [RFC4944] :rfc:`4944`, "Transmission of IPv6 Packets over IEEE 802.15.4 Networks"
+.. [RFC6282] :rfc:`6282`, "Compression Format for IPv6 Datagrams over IEEE 802.15.4-Based Networks"
+.. [RFC6775] :rfc:`6775`, "Neighbor Discovery Optimization for IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs)"
+.. [IANA802] IANA, assigned IEEE 802 numbers: http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xml
+.. [Ethertype] IEEE Ethertype numbers: http://standards.ieee.org/develop/regauth/ethertype/eth.txt
+
+Usage
+*****
+
+Enabling sixlowpan
+==================
+
+Add ``sixlowpan`` to the list of modules built with |ns3|.
+
+Helper
+======
+
+The helper is patterned after other device helpers. 
+
+Examples
+========
+
+The following example can be found in ``src/sixlowpan/examples/``:
+
+* ``example-sixlowpan.cc``:  A simple example showing end-to-end data transfer.
+
+In particular, the example enables a very simplified end-to-end data
+transfer scenario, with a CSMA network forced to carry 6LoWPAN compressed packets.
+
+
+Tests
+=====
+
+The test provided checks the connection between two UDP clients and the correctness of the received packets.
+
+Validation
+**********
+
+The model has been validated against WireShark, checking whatever the packets are correctly
+interpreted and validated.
+
+
diff -Naur ns-3.18.1/src/sixlowpan/examples/example-sixlowpan.cc ns-3.19/src/sixlowpan/examples/example-sixlowpan.cc
--- ns-3.18.1/src/sixlowpan/examples/example-sixlowpan.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/sixlowpan/examples/example-sixlowpan.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,139 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Universita' di Firenze, Italy
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+
+// Network topology
+//
+//      n0                                      n1
+//  +---------+                             +--------+
+//  | UDP     |             r               | UDP    |
+//  +---------+    +---------+--------+     +--------+
+//  | IPv6    |    | IPv6    | IPv6   |     | IPv6   |
+//  +---------+    +---------+        |     |        |
+//  | 6LoWPAN |    | 6LoWPAN |        |     |        |
+//  +---------+    +---------+--------+     +--------+
+//  | CSMA    |    | CSMA    | CSMA   |     | CSMA   |
+//  +---------+    +---------+--------+     +--------+
+//       |              |        |               |
+//       ================        =================
+//
+// - Tracing of queues and packet receptions to file "example-sixlowpan.tr"
+// Note that the Pcap packet dissection will not be very meaningful.
+// See the module's documentation for a discussion about this.
+
+#include <fstream>
+#include "ns3/core-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/csma-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/ipv6-static-routing-helper.h"
+
+#include "ns3/ipv6-routing-table-entry.h"
+#include "ns3/sixlowpan-module.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("ExampleSixlowpan")
+  ;
+
+int main (int argc, char** argv)
+{
+  bool verbose = false;
+
+  CommandLine cmd;
+  cmd.AddValue ("verbose", "turn on some relevant log components", verbose);
+  cmd.Parse (argc, argv);
+
+  if (verbose)
+    {
+      LogComponentEnable ("SixLowPanNetDevice", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ping6Application", LOG_LEVEL_ALL);
+    }
+
+  Packet::EnablePrinting ();
+  Packet::EnableChecking ();
+
+  NS_LOG_INFO ("Create nodes.");
+  Ptr<Node> n0 = CreateObject<Node> ();
+  Ptr<Node> r = CreateObject<Node> ();
+  Ptr<Node> n1 = CreateObject<Node> ();
+
+
+  NodeContainer net1 (n0, r);
+  NodeContainer net2 (r, n1);
+  NodeContainer all (n0, r, n1);
+
+  NS_LOG_INFO ("Create IPv6 Internet Stack");
+  InternetStackHelper internetv6;
+  internetv6.Install (all);
+
+  NS_LOG_INFO ("Create channels.");
+  CsmaHelper csma;
+  csma.SetChannelAttribute ("DataRate", DataRateValue (5000000));
+  csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2)));
+  NetDeviceContainer d2 = csma.Install (net2);
+  csma.SetDeviceAttribute ("Mtu", UintegerValue (150));
+  NetDeviceContainer d1 = csma.Install (net1);
+
+  SixLowPanHelper sixlowpan;
+  sixlowpan.SetDeviceAttribute ("ForceEtherType", BooleanValue (true) );
+  NetDeviceContainer six1 = sixlowpan.Install (d1);
+
+  NS_LOG_INFO ("Create networks and assign IPv6 Addresses.");
+  Ipv6AddressHelper ipv6;
+  ipv6.SetBase (Ipv6Address ("2001:1::"), Ipv6Prefix (64));
+  Ipv6InterfaceContainer i1 = ipv6.Assign (six1);
+  i1.SetForwarding (1, true);
+  i1.SetDefaultRouteInAllNodes (1);
+
+  ipv6.SetBase (Ipv6Address ("2001:2::"), Ipv6Prefix (64));
+  Ipv6InterfaceContainer i2 = ipv6.Assign (d2);
+  i2.SetForwarding (0, true);
+  i2.SetDefaultRouteInAllNodes (0);
+
+  /* Create a Ping6 application to send ICMPv6 echo request from n0 to n1 via r */
+  uint32_t packetSize = 200;
+  uint32_t maxPacketCount = 50;
+  Time interPacketInterval = Seconds (1.);
+  Ping6Helper ping6;
+
+  ping6.SetLocal (i1.GetAddress (0, 1));
+  ping6.SetRemote (i2.GetAddress (1, 1));
+
+  ping6.SetAttribute ("MaxPackets", UintegerValue (maxPacketCount));
+  ping6.SetAttribute ("Interval", TimeValue (interPacketInterval));
+  ping6.SetAttribute ("PacketSize", UintegerValue (packetSize));
+  ApplicationContainer apps = ping6.Install (net1.Get (0));
+
+  apps.Start (Seconds (5.0));
+  apps.Stop (Seconds (15.0));
+
+
+  AsciiTraceHelper ascii;
+  csma.EnableAsciiAll (ascii.CreateFileStream ("example-sixlowpan.tr"));
+  csma.EnablePcapAll (std::string ("example-sixlowpan"), true);
+
+  Simulator::Stop (Seconds (100));
+  NS_LOG_INFO ("Run Simulation.");
+  Simulator::Run ();
+  Simulator::Destroy ();
+  NS_LOG_INFO ("Done.");
+}
+
diff -Naur ns-3.18.1/src/sixlowpan/examples/wscript ns-3.19/src/sixlowpan/examples/wscript
--- ns-3.18.1/src/sixlowpan/examples/wscript	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/sixlowpan/examples/wscript	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,9 @@
+## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+
+def build(bld):
+    if not bld.env['ENABLE_EXAMPLES']:
+        return;
+
+    obj = bld.create_ns3_program('example-sixlowpan',
+                                 ['network', 'sixlowpan', 'internet', 'csma'])
+    obj.source = 'example-sixlowpan.cc'
diff -Naur ns-3.18.1/src/sixlowpan/helper/sixlowpan-helper.cc ns-3.19/src/sixlowpan/helper/sixlowpan-helper.cc
--- ns-3.18.1/src/sixlowpan/helper/sixlowpan-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/sixlowpan/helper/sixlowpan-helper.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,83 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Universita' di Firenze, Italy
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#include "sixlowpan-helper.h"
+#include "ns3/log.h"
+#include "ns3/sixlowpan-net-device.h"
+#include "ns3/node.h"
+#include "ns3/names.h"
+
+NS_LOG_COMPONENT_DEFINE ("SixLowPanHelper")
+  ;
+
+namespace ns3 {
+
+SixLowPanHelper::SixLowPanHelper ()
+{
+  NS_LOG_FUNCTION (this);
+  m_deviceFactory.SetTypeId ("ns3::SixLowPanNetDevice");
+}
+
+void SixLowPanHelper::SetDeviceAttribute (std::string n1,
+                                          const AttributeValue &v1)
+{
+  NS_LOG_FUNCTION (this);
+  m_deviceFactory.Set (n1, v1);
+}
+
+NetDeviceContainer SixLowPanHelper::Install (const NetDeviceContainer c)
+{
+  NS_LOG_FUNCTION (this);
+
+  NetDeviceContainer devs;
+
+  for (uint32_t i = 0; i < c.GetN (); ++i)
+    {
+      Ptr<NetDevice> device = c.Get (i);
+      NS_ASSERT_MSG (device != 0, "No NetDevice found in the node " << int(i) );
+
+      Ptr<Node> node = device->GetNode ();
+      NS_LOG_LOGIC ("**** Install 6LoWPAN on node " << node->GetId ());
+
+      Ptr<SixLowPanNetDevice> dev = m_deviceFactory.Create<SixLowPanNetDevice> ();
+      devs.Add (dev);
+      node->AddDevice (dev);
+      dev->SetNetDevice (device);
+    }
+  return devs;
+}
+
+int64_t SixLowPanHelper::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<SixLowPanNetDevice> dev = DynamicCast<SixLowPanNetDevice> (netDevice);
+      if (dev)
+        {
+          currentStream += dev->AssignStreams (currentStream);
+        }
+    }
+  return (currentStream - stream);
+}
+
+} // namespace ns3
diff -Naur ns-3.18.1/src/sixlowpan/helper/sixlowpan-helper.h ns-3.19/src/sixlowpan/helper/sixlowpan-helper.h
--- ns-3.18.1/src/sixlowpan/helper/sixlowpan-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/sixlowpan/helper/sixlowpan-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,102 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Universita' di Firenze, Italy
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#ifndef SIXLOWPAN_HELPER_H
+#define SIXLOWPAN_HELPER_H
+
+#include "ns3/net-device-container.h"
+#include "ns3/object-factory.h"
+#include <string>
+
+namespace ns3 {
+
+class Node;
+class AttributeValue;
+
+/**
+ * \ingroup sixlowpan
+ *
+ * \brief Setup a sixlowpan stack to be used as a shim between IPv6 and a generic NetDevice.
+ */
+class SixLowPanHelper
+{
+public:
+  /*
+   * Construct a SixlowpanHelper
+   */
+  SixLowPanHelper ();
+  /**
+   * Set an attribute on each ns3::SixlowpanNetDevice created by
+   * SixlowpanHelper::Install.
+   *
+   * \param n1 the name of the attribute to set
+   * \param v1 the value of the attribute to set
+   */
+  void SetDeviceAttribute (std::string n1,
+                           const AttributeValue &v1);
+
+  /**
+   * \brief Install the SixLoWPAN stack on top of an existing NetDevice.
+   *
+   * This function requires a set of properly configured NetDevices
+   * passed in as the parameter "c". The new NetDevices will have to
+   * be used instead of the original ones. In this way these
+   * SixLoWPAN devices will behave as shims between the NetDevices
+   * passed in and IPv6.
+   *
+   * Note that only IPv6 (and related protocols, such as ICMPv6) can
+   * be transmitted over a 6LoWPAN interface.
+   * Any other protocol (e.g., IPv4) will be discarded by 6LoWPAN.
+   *
+   * Other protocols (e.g., IPv4) could be used on the original NetDevices
+   * with some limitations.
+   * See the manual for a complete discussion.
+   *
+   * \note IPv6 stack must be installed \a after SixLoWPAN,
+   * using the SixLoWPAN NetDevices. See the example in the
+   * examples directory.
+   *
+   *
+   * \param c the NetDevice container
+   * \return a container with the newly created SixLowPanNetDevices
+   */
+  NetDeviceContainer Install (NetDeviceContainer c);
+
+  /**
+  * 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
+  *          SixLowPanNetDevice 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
+  */
+  int64_t AssignStreams (NetDeviceContainer c, int64_t stream);
+
+private:
+  ObjectFactory m_deviceFactory; //!< Object factory
+};
+
+} // namespace ns3
+
+
+#endif /* SIXLOWPAN_HELPER_H */
diff -Naur ns-3.18.1/src/sixlowpan/model/sixlowpan-header.cc ns-3.19/src/sixlowpan/model/sixlowpan-header.cc
--- ns-3.18.1/src/sixlowpan/model/sixlowpan-header.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/sixlowpan/model/sixlowpan-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,1747 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Universita' di Firenze, Italy
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ *         Michele Muccio <michelemuccio@virgilio.it>
+ */
+
+#include "ns3/assert.h"
+#include "ns3/log.h"
+#include "ns3/abort.h"
+#include "ns3/address-utils.h"
+#include "sixlowpan-header.h"
+
+
+namespace ns3 {
+
+/*
+ * SixLowPanDispatch
+ */
+
+
+SixLowPanDispatch::SixLowPanDispatch ()
+{
+}
+
+
+SixLowPanDispatch::Dispatch_e
+SixLowPanDispatch::GetDispatchType (uint8_t dispatch)
+{
+  if (dispatch <= LOWPAN_NALP_N)
+    {
+      return LOWPAN_NALP;
+    }
+  else if (dispatch == LOWPAN_NOTCOMPRESSED)
+    {
+      return LOWPAN_NOTCOMPRESSED;
+    }
+  else if (dispatch == LOWPAN_HC1)
+    {
+      return LOWPAN_HC1;
+    }
+  else if (dispatch == LOWPAN_BC0)
+    {
+      return LOWPAN_BC0;
+    }
+  else if ((dispatch >= LOWPAN_IPHC) && (dispatch <= LOWPAN_IPHC_N))
+    {
+      return LOWPAN_IPHC;
+    }
+  else if ((dispatch >= LOWPAN_MESH) && (dispatch <= LOWPAN_MESH_N))
+    {
+      return LOWPAN_MESH;
+    }
+  else if ((dispatch >= LOWPAN_FRAG1) && (dispatch <= LOWPAN_FRAG1_N))
+    {
+      return LOWPAN_FRAG1;
+    }
+  else if ((dispatch >= LOWPAN_FRAGN) && (dispatch <= LOWPAN_FRAGN_N))
+    {
+      return LOWPAN_FRAGN;
+    }
+  return LOWPAN_UNSUPPORTED;
+}
+
+SixLowPanDispatch::NhcDispatch_e
+SixLowPanDispatch::GetNhcDispatchType (uint8_t dispatch)
+{
+  if ((dispatch >= LOWPAN_NHC) && (dispatch <= LOWPAN_NHC_N))
+    {
+      return LOWPAN_NHC;
+    }
+  else if ((dispatch >= LOWPAN_UDPNHC) && (dispatch <= LOWPAN_UDPNHC_N))
+    {
+      return LOWPAN_UDPNHC;
+    }
+  return LOWPAN_NHCUNSUPPORTED;
+}
+
+
+/*
+ * SixLowPanHc1
+ */
+NS_OBJECT_ENSURE_REGISTERED (SixLowPanHc1)
+  ;
+
+SixLowPanHc1::SixLowPanHc1 ()
+  : m_hopLimit (0)
+{
+}
+
+TypeId SixLowPanHc1::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::SixLowPanHc1").SetParent<Header> ().AddConstructor<SixLowPanHc1> ();
+  return tid;
+}
+
+TypeId SixLowPanHc1::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+void SixLowPanHc1::Print (std::ostream & os) const
+{
+  uint8_t encoding;
+  encoding = m_srcCompression;
+  encoding <<= 2;
+  encoding |= m_dstCompression;
+  encoding <<= 1;
+  encoding |= m_tcflCompression;
+  encoding <<= 2;
+  encoding |= m_nextHeaderCompression;
+  encoding <<= 1;
+  encoding |= m_hc2HeaderPresent;
+
+  os << "encoding " << int(encoding) << ", hopLimit " << int(m_hopLimit);
+}
+
+uint32_t SixLowPanHc1::GetSerializedSize () const
+{
+  uint32_t serializedSize = 3;
+
+  switch (m_srcCompression)
+    {
+    case HC1_PIII:
+      serializedSize += 16;
+      break;
+    case HC1_PIIC:
+      serializedSize += 8;
+      break;
+    case HC1_PCII:
+      serializedSize += 8;
+      break;
+    case HC1_PCIC:
+      break;
+    }
+  switch (m_dstCompression)
+    {
+    case HC1_PIII:
+      serializedSize += 16;
+      break;
+    case HC1_PIIC:
+      serializedSize += 8;
+      break;
+    case HC1_PCII:
+      serializedSize += 8;
+      break;
+    case HC1_PCIC:
+      break;
+    }
+
+  if (m_tcflCompression == false )
+    {
+      serializedSize += 4;
+    }
+
+  if (m_nextHeaderCompression == HC1_NC )
+    {
+      serializedSize++;
+    }
+
+  return serializedSize;
+}
+
+void SixLowPanHc1::Serialize (Buffer::Iterator start) const
+{
+  Buffer::Iterator i = start;
+  uint8_t encoding;
+  encoding = m_srcCompression;
+  encoding <<= 2;
+  encoding |= m_dstCompression;
+  encoding <<= 1;
+  encoding |= m_tcflCompression;
+  encoding <<= 2;
+  encoding |= m_nextHeaderCompression;
+  encoding <<= 1;
+  encoding |= m_hc2HeaderPresent;
+
+  i.WriteU8 (SixLowPanDispatch::LOWPAN_HC1);
+  i.WriteU8 (encoding);
+  i.WriteU8 (m_hopLimit);
+  switch (m_srcCompression)
+    {
+    case HC1_PIII:
+      for ( int j = 0; j < 8; j++ )
+        {
+          i.WriteU8 (m_srcPrefix[j]);
+        }
+      for ( int j = 0; j < 8; j++ )
+        {
+          i.WriteU8 (m_srcInterface[j]);
+        }
+      break;
+    case HC1_PIIC:
+      for ( int j = 0; j < 8; j++ )
+        {
+          i.WriteU8 (m_srcPrefix[j]);
+        }
+      break;
+    case HC1_PCII:
+      for ( int j = 0; j < 8; j++ )
+        {
+          i.WriteU8 (m_srcInterface[j]);
+        }
+      break;
+    case HC1_PCIC:
+      break;
+    }
+  switch (m_dstCompression)
+    {
+    case HC1_PIII:
+      for ( int j = 0; j < 8; j++ )
+        {
+          i.WriteU8 (m_dstPrefix[j]);
+        }
+      for ( int j = 0; j < 8; j++ )
+        {
+          i.WriteU8 (m_dstInterface[j]);
+        }
+      break;
+    case HC1_PIIC:
+      for ( int j = 0; j < 8; j++ )
+        {
+          i.WriteU8 (m_dstPrefix[j]);
+        }
+      break;
+    case HC1_PCII:
+      for ( int j = 0; j < 8; j++ )
+        {
+          i.WriteU8 (m_dstInterface[j]);
+        }
+      break;
+    case HC1_PCIC:
+      break;
+    }
+
+  if ( m_tcflCompression == false )
+    {
+      i.WriteU8 (m_trafficClass);
+      uint8_t temp[3];
+      temp[0] = uint8_t (m_flowLabel & 0xff);
+      temp[1] = uint8_t ((m_flowLabel >> 8) & 0xff);
+      temp[2] = uint8_t ((m_flowLabel >> 16) & 0xff);
+      i.Write (temp, 3);
+    }
+
+  if (m_nextHeaderCompression == HC1_NC )
+    {
+      i.WriteU8 (m_nextHeader);
+    }
+
+  // TODO: HC2 is not yet supported. Should be.
+  NS_ASSERT_MSG ( m_hc2HeaderPresent != true, "Can not compress HC2, exiting. Very sorry." );
+}
+
+uint32_t SixLowPanHc1::Deserialize (Buffer::Iterator start)
+{
+  Buffer::Iterator i = start;
+  uint32_t serializedSize = 3;
+
+  uint8_t dispatch = i.ReadU8 ();
+  if (dispatch != SixLowPanDispatch::LOWPAN_HC1)
+    {
+      return 0;
+    }
+
+  uint8_t encoding = i.ReadU8 ();
+  m_hopLimit = i.ReadU8 ();
+
+  m_srcCompression = LowPanHc1Addr_e (encoding >> 6);
+  m_dstCompression = LowPanHc1Addr_e ( (encoding >> 4) & 0x3);
+  m_tcflCompression = (encoding >> 3) & 0x1;
+  m_nextHeaderCompression = LowPanHc1NextHeader_e ( (encoding >> 1) & 0x3);
+  m_hc2HeaderPresent = encoding & 0x1;
+
+  switch (m_srcCompression)
+    {
+    case HC1_PIII:
+      for ( int j = 0; j < 8; j++)
+        {
+          m_srcPrefix[j] = i.ReadU8 ();
+        }
+      for ( int j = 0; j < 8; j++)
+        {
+          m_srcInterface[j] = i.ReadU8 ();
+        }
+      serializedSize += 16;
+      break;
+    case HC1_PIIC:
+      for ( int j = 0; j < 8; j++)
+        {
+          m_srcPrefix[j] = i.ReadU8 ();
+        }
+      serializedSize += 8;
+      break;
+    case HC1_PCII:
+      for ( int j = 0; j < 8; j++)
+        {
+          m_srcInterface[j] = i.ReadU8 ();
+        }
+      serializedSize += 8;
+      break;
+    case HC1_PCIC:
+      break;
+    }
+  switch (m_dstCompression)
+    {
+    case HC1_PIII:
+      for ( int j = 0; j < 8; j++)
+        {
+          m_dstPrefix[j] = i.ReadU8 ();
+        }
+      for ( int j = 0; j < 8; j++)
+        {
+          m_dstInterface[j] = i.ReadU8 ();
+        }
+      serializedSize += 16;
+      break;
+    case HC1_PIIC:
+      for ( int j = 0; j < 8; j++)
+        {
+          m_dstPrefix[j] = i.ReadU8 ();
+        }
+      serializedSize += 8;
+      break;
+    case HC1_PCII:
+      for ( int j = 0; j < 8; j++)
+        {
+          m_dstInterface[j] = i.ReadU8 ();
+        }
+      serializedSize += 8;
+      break;
+    case HC1_PCIC:
+      break;
+    }
+
+  if ( m_tcflCompression == false )
+    {
+      m_trafficClass = i.ReadU8 ();
+      uint8_t temp[3];
+      i.Read (temp, 3);
+      m_flowLabel = temp[2];
+      m_flowLabel = (m_flowLabel << 8) | temp[1];
+      m_flowLabel = (m_flowLabel << 8) | temp[0];
+      serializedSize += 4;
+    }
+
+  switch ( m_nextHeaderCompression )
+    {
+    case HC1_NC:
+      m_nextHeader = i.ReadU8 ();
+      serializedSize++;
+      break;
+    case HC1_TCP:
+      m_nextHeader = Ipv6Header::IPV6_TCP;
+      break;
+    case HC1_UDP:
+      m_nextHeader = Ipv6Header::IPV6_UDP;
+      break;
+    case HC1_ICMP:
+      m_nextHeader = Ipv6Header::IPV6_ICMPV6;
+      break;
+    }
+
+  NS_ASSERT_MSG ( m_hc2HeaderPresent != true, "Can not compress HC2, exiting. Very sorry." );
+
+  return GetSerializedSize ();
+}
+
+void SixLowPanHc1::SetHopLimit (uint8_t limit)
+{
+  m_hopLimit = limit;
+}
+
+uint8_t SixLowPanHc1::GetHopLimit () const
+{
+  return m_hopLimit;
+}
+
+SixLowPanHc1::LowPanHc1Addr_e SixLowPanHc1::GetDstCompression () const
+{
+  return m_dstCompression;
+}
+
+const uint8_t* SixLowPanHc1::GetDstInterface () const
+{
+  return m_dstInterface;
+}
+
+const uint8_t* SixLowPanHc1::GetDstPrefix () const
+{
+  return m_dstPrefix;
+}
+
+uint32_t SixLowPanHc1::GetFlowLabel () const
+{
+  return m_flowLabel;
+}
+
+uint8_t SixLowPanHc1::GetNextHeader () const
+{
+  return m_nextHeader;
+}
+
+SixLowPanHc1::LowPanHc1Addr_e SixLowPanHc1::GetSrcCompression () const
+{
+  return m_srcCompression;
+}
+
+const uint8_t* SixLowPanHc1::GetSrcInterface () const
+{
+  return m_srcInterface;
+}
+
+const uint8_t* SixLowPanHc1::GetSrcPrefix () const
+{
+  return m_srcPrefix;
+}
+
+uint8_t SixLowPanHc1::GetTrafficClass () const
+{
+  return m_trafficClass;
+}
+
+bool SixLowPanHc1::IsTcflCompression () const
+{
+  return m_tcflCompression;
+}
+
+bool SixLowPanHc1::IsHc2HeaderPresent () const
+{
+  return m_hc2HeaderPresent;
+}
+
+void SixLowPanHc1::SetDstCompression (LowPanHc1Addr_e dstCompression)
+{
+  m_dstCompression = dstCompression;
+}
+
+void SixLowPanHc1::SetDstInterface (const uint8_t* dstInterface)
+{
+  for ( int i = 0; i < 8; i++)
+    {
+      m_dstInterface[i] = dstInterface[i];
+    }
+}
+
+void SixLowPanHc1::SetDstPrefix (const uint8_t* dstPrefix)
+{
+  for ( int i = 0; i < 8; i++)
+    {
+      m_dstPrefix[i] = dstPrefix[i];
+    }
+}
+
+void SixLowPanHc1::SetFlowLabel (uint32_t flowLabel)
+{
+  m_flowLabel = flowLabel;
+}
+
+void SixLowPanHc1::SetNextHeader (uint8_t nextHeader)
+{
+  m_nextHeader = nextHeader;
+
+  switch (m_nextHeader)
+    {
+    case Ipv6Header::IPV6_UDP:
+      m_nextHeaderCompression = HC1_UDP;
+      break;
+    case Ipv6Header::IPV6_TCP:
+      m_nextHeaderCompression = HC1_TCP;
+      break;
+    case Ipv6Header::IPV6_ICMPV6:
+      m_nextHeaderCompression = HC1_ICMP;
+      break;
+    default:
+      m_nextHeaderCompression = HC1_NC;
+      break;
+    }
+}
+
+void SixLowPanHc1::SetSrcCompression (LowPanHc1Addr_e srcCompression)
+{
+  m_srcCompression = srcCompression;
+}
+
+void SixLowPanHc1::SetSrcInterface (const uint8_t* srcInterface)
+{
+  for ( int i = 0; i < 8; i++)
+    {
+      m_srcInterface[i] = srcInterface[i];
+    }
+}
+
+void SixLowPanHc1::SetSrcPrefix (const uint8_t* srcPrefix)
+{
+  for ( int i = 0; i < 8; i++)
+    {
+      m_srcPrefix[i] = srcPrefix[i];
+    }
+}
+
+void SixLowPanHc1::SetTcflCompression (bool tcflCompression)
+{
+  m_tcflCompression = tcflCompression;
+}
+
+void SixLowPanHc1::SetTrafficClass (uint8_t trafficClass)
+{
+  m_trafficClass = trafficClass;
+}
+
+
+void SixLowPanHc1::SetHc2HeaderPresent (bool hc2HeaderPresent)
+{
+  m_hc2HeaderPresent = hc2HeaderPresent;
+}
+
+
+std::ostream & operator << (std::ostream & os, const SixLowPanHc1 & h)
+{
+  h.Print (os);
+  return os;
+}
+
+/*
+ * SixLowPanFrag1
+ */
+NS_OBJECT_ENSURE_REGISTERED (SixLowPanFrag1)
+  ;
+
+SixLowPanFrag1::SixLowPanFrag1 ()
+  : m_datagramSize (0),
+    m_datagramTag (0)
+{
+}
+
+TypeId SixLowPanFrag1::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::SixLowPanFrag1").SetParent<Header> ().AddConstructor<SixLowPanFrag1> ();
+  return tid;
+}
+
+TypeId SixLowPanFrag1::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+void SixLowPanFrag1::Print (std::ostream & os) const
+{
+  os << "datagram size " << m_datagramSize << " tag " << m_datagramTag;
+}
+
+uint32_t SixLowPanFrag1::GetSerializedSize () const
+{
+  return 4;
+}
+
+void SixLowPanFrag1::Serialize (Buffer::Iterator start) const
+{
+  Buffer::Iterator i = start;
+
+  uint16_t temp = m_datagramSize | ( uint16_t (SixLowPanDispatch::LOWPAN_FRAG1) << 8 );
+
+  i.WriteU8 (uint8_t (temp >> 8));
+  i.WriteU8 (uint8_t (temp & 0xff));
+
+  i.WriteU16 (m_datagramTag);
+}
+
+uint32_t SixLowPanFrag1::Deserialize (Buffer::Iterator start)
+{
+  Buffer::Iterator i = start;
+
+  uint8_t temp = i.ReadU8 ();
+  m_datagramSize = (uint16_t (temp) << 8) | i.ReadU8 ();
+  m_datagramSize &= 0x7FF;
+
+  m_datagramTag = i.ReadU16 ();
+  return GetSerializedSize ();
+}
+
+void SixLowPanFrag1::SetDatagramSize (uint16_t datagramSize)
+{
+  m_datagramSize = datagramSize & 0x7FF;
+}
+
+uint16_t SixLowPanFrag1::GetDatagramSize () const
+{
+  return m_datagramSize & 0x7FF;
+}
+
+void SixLowPanFrag1::SetDatagramTag (uint16_t datagramTag)
+{
+  m_datagramTag = datagramTag;
+}
+
+uint16_t SixLowPanFrag1::GetDatagramTag () const
+{
+  return m_datagramTag;
+}
+
+std::ostream & operator << (std::ostream & os, const SixLowPanFrag1 & h)
+{
+  h.Print (os);
+  return os;
+}
+
+
+/*
+ * SixLowPanFragN
+ */
+
+NS_OBJECT_ENSURE_REGISTERED (SixLowPanFragN)
+  ;
+
+SixLowPanFragN::SixLowPanFragN ()
+  : m_datagramSize (0),
+    m_datagramTag (0),
+    m_datagramOffset (0)
+{
+}
+/*
+ * SixLowPanFragmentOffset
+ */
+TypeId SixLowPanFragN::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::SixLowPanFragN").SetParent<Header> ().AddConstructor<SixLowPanFragN> ();
+  return tid;
+}
+
+TypeId SixLowPanFragN::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+void SixLowPanFragN::Print (std::ostream & os) const
+{
+  os << "datagram size " << m_datagramSize << " tag " << m_datagramTag << " offset " << int(m_datagramOffset);
+}
+
+uint32_t SixLowPanFragN::GetSerializedSize () const
+{
+  return 5;
+}
+
+void SixLowPanFragN::Serialize (Buffer::Iterator start) const
+{
+  Buffer::Iterator i = start;
+
+  uint16_t temp = m_datagramSize | ( uint16_t (SixLowPanDispatch::LOWPAN_FRAGN) << 8 );
+
+  i.WriteU8 (uint8_t (temp >> 8));
+  i.WriteU8 (uint8_t (temp & 0xff));
+
+  i.WriteU16 (m_datagramTag);
+  i.WriteU8 (m_datagramOffset);
+}
+
+uint32_t SixLowPanFragN::Deserialize (Buffer::Iterator start)
+{
+  Buffer::Iterator i = start;
+
+  uint8_t temp = i.ReadU8 ();
+  m_datagramSize = (uint16_t (temp) << 8) | i.ReadU8 ();
+  m_datagramSize &= 0x7FF;
+
+  m_datagramTag = i.ReadU16 ();
+  m_datagramOffset = i.ReadU8 ();
+
+  return GetSerializedSize ();
+}
+
+void SixLowPanFragN::SetDatagramSize (uint16_t datagramSize)
+{
+  m_datagramSize = datagramSize & 0x7FF;
+}
+
+uint16_t SixLowPanFragN::GetDatagramSize () const
+{
+  return m_datagramSize & 0x7FF;
+}
+
+void SixLowPanFragN::SetDatagramTag (uint16_t datagramTag)
+{
+  m_datagramTag = datagramTag;
+}
+
+uint16_t SixLowPanFragN::GetDatagramTag () const
+{
+  return m_datagramTag;
+}
+
+void SixLowPanFragN::SetDatagramOffset (uint8_t datagramOffset)
+{
+  m_datagramOffset = datagramOffset;
+}
+
+uint8_t SixLowPanFragN::GetDatagramOffset () const
+{
+  return m_datagramOffset;
+}
+
+std::ostream & operator << (std::ostream & os, const SixLowPanFragN & h)
+{
+  h.Print (os);
+  return os;
+}
+
+/*
+ * SixLowPanIphcHeader
+ */
+NS_OBJECT_ENSURE_REGISTERED (SixLowPanIphc)
+  ;
+
+SixLowPanIphc::SixLowPanIphc ()
+{
+  // 011x xxxx xxxx xxxx
+  m_baseFormat = 0x6000;
+}
+
+SixLowPanIphc::SixLowPanIphc (uint8_t dispatch)
+{
+  // 011x xxxx xxxx xxxx
+  m_baseFormat = dispatch;
+  m_baseFormat <<= 8;
+}
+
+TypeId SixLowPanIphc::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::SixLowPanIphc").SetParent<Header> ().AddConstructor<SixLowPanIphc> ();
+  return tid;
+}
+
+TypeId SixLowPanIphc::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+void SixLowPanIphc::Print (std::ostream & os) const
+{
+  os << "Compression kind: " << m_baseFormat;
+}
+
+uint32_t SixLowPanIphc::GetSerializedSize () const
+{
+  uint32_t serializedSize = 2;
+
+  if ( GetCid () )
+    {
+      serializedSize++;
+    }
+  switch ( GetTf () )
+    {
+    case TF_FULL:
+      serializedSize += 4;
+      break;
+    case TF_DSCP_ELIDED:
+      serializedSize += 3;
+      break;
+    case TF_FL_ELIDED:
+      serializedSize++;
+      break;
+    default:
+      break;
+    }
+  if ( GetNh () == false )
+    {
+      serializedSize++;
+    }
+  if ( GetHlim () == HLIM_INLINE)
+    {
+      serializedSize++;
+    }
+  switch (GetSam () )
+    {
+    case HC_INLINE:
+      if ( GetSac () == false )
+        {
+          serializedSize += 16;
+        }
+      break;
+    case HC_COMPR_64:
+      serializedSize += 8;
+      break;
+    case HC_COMPR_16:
+      serializedSize += 2;
+      break;
+    case HC_COMPR_0:
+    default:
+      break;
+    }
+  if ( GetM () == false)
+    {
+      switch (GetDam () )
+        {
+        case HC_INLINE:
+          if ( GetDac () == false )
+            {
+              serializedSize += 16;
+            }
+          break;
+        case HC_COMPR_64:
+          serializedSize += 8;
+          break;
+        case HC_COMPR_16:
+          serializedSize += 2;
+          break;
+        case HC_COMPR_0:
+        default:
+          break;
+        }
+    }
+  else
+    {
+      switch (GetDam () )
+        {
+        case HC_INLINE:
+          if ( GetDac () == false )
+            {
+              serializedSize += 16;
+            }
+          else
+            {
+              serializedSize += 6;
+            }
+          break;
+        case HC_COMPR_64:
+          if ( GetDac () == false )
+            {
+              serializedSize += 6;
+            }
+          break;
+        case HC_COMPR_16:
+          if ( GetDac () == false )
+            {
+              serializedSize += 4;
+            }
+          break;
+        case HC_COMPR_0:
+        default:
+          if ( GetDac () == false )
+            {
+              serializedSize++;
+            }
+          break;
+        }
+    }
+
+
+
+  return serializedSize;
+}
+
+void SixLowPanIphc::Serialize (Buffer::Iterator start) const
+{
+  Buffer::Iterator i = start;
+
+  i.WriteHtonU16 (m_baseFormat);
+
+  if ( GetCid () )
+    {
+      i.WriteU8 (m_srcdstContextId);
+    }
+  // Traffic Class and Flow Label
+  switch ( GetTf () )
+    {
+      uint8_t temp;
+    case TF_FULL:
+      temp = (m_ecn << 6) | m_dscp;
+      i.WriteU8 (temp);
+      temp = m_flowLabel >> 16;
+      i.WriteU8 (temp);
+      temp = (m_flowLabel >> 8) & 0xff;
+      i.WriteU8 (temp);
+      temp = m_flowLabel & 0xff;
+      i.WriteU8 (temp);
+      break;
+    case TF_DSCP_ELIDED:
+      temp = (m_ecn << 6) | (m_flowLabel >> 16 );
+      i.WriteU8 (temp);
+      temp = (m_flowLabel >> 8) & 0xff;
+      i.WriteU8 (temp);
+      temp = m_flowLabel & 0xff;
+      i.WriteU8 (temp);
+      break;
+    case TF_FL_ELIDED:
+      temp = (m_ecn << 6) | m_dscp;
+      i.WriteU8 (temp);
+      break;
+    default:
+      break;
+    }
+  // Next Header
+  if ( GetNh () == false )
+    {
+      i.WriteU8 (m_nextHeader);
+    }
+  // Hop Limit
+  if ( GetHlim () == HLIM_INLINE )
+    {
+      i.WriteU8 (m_hopLimit);
+    }
+  // Source Address
+  switch (GetSam () )
+    {
+      uint8_t temp[16];
+    case HC_INLINE:
+      if ( GetSac () == false )
+        {
+          uint8_t temp[16];
+          m_srcAddress.Serialize (temp);
+          i.Write (temp, 16);
+        }
+      break;
+    case HC_COMPR_64:
+      m_srcAddress.Serialize (temp);
+      i.Write (temp + 8, 8);
+      break;
+    case HC_COMPR_16:
+      m_srcAddress.Serialize (temp);
+      i.Write (temp + 14, 2);
+      break;
+    case HC_COMPR_0:
+    default:
+      break;
+    }
+  // Destination Address
+  if ( GetM () == false)
+    {
+      uint8_t temp[16];
+      switch (GetDam () )
+        {
+        case HC_INLINE:
+          if ( GetDac () == false )
+            {
+              m_dstAddress.Serialize (temp);
+              i.Write (temp, 16);
+            }
+          break;
+        case HC_COMPR_64:
+          m_dstAddress.Serialize (temp);
+          i.Write (temp + 8, 8);
+          break;
+        case HC_COMPR_16:
+          m_dstAddress.Serialize (temp);
+          i.Write (temp + 14, 2);
+          break;
+        case HC_COMPR_0:
+        default:
+          break;
+        }
+    }
+  else
+    {
+      switch (GetDam () )
+        {
+          uint8_t temp[16];
+        case HC_INLINE:
+          if ( GetDac () == false )
+            {
+              m_dstAddress.Serialize (temp);
+              i.Write (temp, 16);
+            }
+          else
+            {
+              m_dstAddress.Serialize (temp);
+              i.Write (temp + 1, 2);
+              i.Write (temp + 12, 4);
+            }
+          break;
+        case HC_COMPR_64:
+          if ( GetDac () == false )
+            {
+              m_dstAddress.Serialize (temp);
+              i.Write (temp + 1, 1);
+              i.Write (temp + 11, 5);
+            }
+          break;
+        case HC_COMPR_16:
+          if ( GetDac () == false )
+            {
+              m_dstAddress.Serialize (temp);
+              i.Write (temp + 1, 1);
+              i.Write (temp + 13, 3);
+            }
+          break;
+        case HC_COMPR_0:
+        default:
+          if ( GetDac () == false )
+            {
+              m_dstAddress.Serialize (temp);
+              i.WriteU8 (temp[15]);
+            }
+          break;
+        }
+    }
+}
+
+uint32_t SixLowPanIphc::Deserialize (Buffer::Iterator start)
+{
+  Buffer::Iterator i = start;
+
+  m_baseFormat = i.ReadNtohU16 ();
+
+  if ( GetCid () )
+    {
+      m_srcdstContextId = i.ReadU8 ();
+    }
+  // Traffic Class and Flow Label
+  switch ( GetTf () )
+    {
+      uint8_t temp;
+    case TF_FULL:
+      temp = i.ReadU8 ();
+      m_ecn = temp >> 6;
+      m_dscp = temp & 0x3F;
+      temp = i.ReadU8 ();
+      m_flowLabel = temp;
+      temp = i.ReadU8 ();
+      m_flowLabel = (m_flowLabel << 8) | temp;
+      temp = i.ReadU8 ();
+      m_flowLabel = (m_flowLabel << 8) | temp;
+      break;
+    case TF_DSCP_ELIDED:
+      temp = i.ReadU8 ();
+      m_ecn = temp >> 6;
+      m_flowLabel = temp & 0x3F;
+      temp = i.ReadU8 ();
+      m_flowLabel = (m_flowLabel << 8) | temp;
+      temp = i.ReadU8 ();
+      m_flowLabel = (m_flowLabel << 8) | temp;
+      break;
+    case TF_FL_ELIDED:
+      temp = i.ReadU8 ();
+      m_ecn = temp >> 6;
+      m_dscp = temp & 0x3F;
+      break;
+    default:
+      break;
+    }
+  // Next Header
+  if ( GetNh () == false )
+    {
+      m_nextHeader = i.ReadU8 ();
+    }
+  // Hop Limit
+  switch ( GetHlim () )
+    {
+    case HLIM_INLINE:
+      m_hopLimit = i.ReadU8 ();
+      break;
+    case HLIM_COMPR_1:
+      m_hopLimit = 1;
+      break;
+    case HLIM_COMPR_64:
+      m_hopLimit = 64;
+      break;
+    case HLIM_COMPR_255:
+    default:
+      m_hopLimit = 255;
+      break;
+
+    }
+  // Source Address
+  switch (GetSam () )
+    {
+      uint8_t temp[16];
+    case HC_INLINE:
+      if ( GetSac () == false )
+        {
+          i.Read (temp, 16);
+          m_srcAddress = Ipv6Address::Deserialize (temp);
+        }
+      break;
+    case HC_COMPR_64:
+      memset (temp, 0x00, sizeof (temp));
+      i.Read (temp + 8, 8);
+      temp[0] = 0xfe;
+      temp[1] = 0x80;
+      m_srcAddress = Ipv6Address::Deserialize (temp);
+      break;
+    case HC_COMPR_16:
+      memset (temp, 0x00, sizeof (temp));
+      i.Read (temp + 14, 2);
+      temp[0] = 0xfe;
+      temp[1] = 0x80;
+      temp[11] = 0xff;
+      temp[12] = 0xfe;
+      m_srcAddress = Ipv6Address::Deserialize (temp);
+      break;
+    case HC_COMPR_0:
+    default:
+      break;
+    }
+  if ( GetSac () == true )
+    {
+      PostProcessSac ();
+    }
+  // Destination Address
+  if ( GetM () == false)
+    {
+      uint8_t temp[16];
+      switch (GetDam () )
+        {
+        case HC_INLINE:
+          if ( GetDac () == false )
+            {
+              i.Read (temp, 16);
+              m_dstAddress = Ipv6Address::Deserialize (temp);
+            }
+          break;
+        case HC_COMPR_64:
+          memset (temp, 0x00, sizeof (temp));
+          i.Read (temp + 8, 8);
+          temp[0] = 0xfe;
+          temp[1] = 0x80;
+          m_dstAddress = Ipv6Address::Deserialize (temp);
+          break;
+        case HC_COMPR_16:
+          memset (temp, 0x00, sizeof (temp));
+          i.Read (temp + 14, 2);
+          temp[0] = 0xfe;
+          temp[1] = 0x80;
+          temp[11] = 0xff;
+          temp[12] = 0xfe;
+          m_dstAddress = Ipv6Address::Deserialize (temp);
+          break;
+        case HC_COMPR_0:
+        default:
+          break;
+        }
+    }
+  else
+    {
+      switch (GetDam () )
+        {
+          uint8_t temp[16];
+        case HC_INLINE:
+          if ( GetDac () == false )
+            {
+              i.Read (temp, 16);
+              m_dstAddress = Ipv6Address::Deserialize (temp);
+            }
+          else
+            {
+              memset (temp, 0x00, sizeof (temp));
+              i.Read (temp + 1, 2);
+              i.Read (temp + 12, 4);
+              temp[0] = 0xff;
+              m_dstAddress = Ipv6Address::Deserialize (temp);
+            }
+          break;
+        case HC_COMPR_64:
+          if ( GetDac () == false )
+            {
+              memset (temp, 0x00, sizeof (temp));
+              i.Read (temp + 1, 1);
+              i.Read (temp + 11, 5);
+              temp[0] = 0xff;
+              m_dstAddress = Ipv6Address::Deserialize (temp);
+            }
+          break;
+        case HC_COMPR_16:
+          if ( GetDac () == false )
+            {
+              memset (temp, 0x00, sizeof (temp));
+              i.Read (temp + 1, 1);
+              i.Read (temp + 13, 3);
+              temp[0] = 0xff;
+              m_dstAddress = Ipv6Address::Deserialize (temp);
+            }
+          break;
+        case HC_COMPR_0:
+        default:
+          if ( GetDac () == false )
+            {
+              memset (temp, 0x00, sizeof (temp));
+              temp[15] = i.ReadU8 ();
+              temp[0] = 0xff;
+              temp[1] = 0x02;
+              m_dstAddress = Ipv6Address::Deserialize (temp);
+            }
+          break;
+        }
+    }
+  if ( GetDac () == true )
+    {
+      PostProcessDac ();
+    }
+  return GetSerializedSize ();
+}
+
+void SixLowPanIphc::SetTf (TrafficClassFlowLabel_e tfField)
+{
+  uint16_t field = tfField;
+  m_baseFormat |= (field << 11);
+}
+
+SixLowPanIphc::TrafficClassFlowLabel_e SixLowPanIphc::GetTf (void) const
+{
+  return TrafficClassFlowLabel_e ((m_baseFormat >> 11) & 0x3);
+}
+
+void SixLowPanIphc::SetNh (bool nhField)
+{
+  uint16_t field = nhField;
+  m_baseFormat |= (field << 10);
+}
+
+bool SixLowPanIphc::GetNh (void) const
+{
+  return ((m_baseFormat >> 10) & 0x1);
+}
+
+void SixLowPanIphc::SetHlim (Hlim_e hlimField)
+{
+  uint16_t field = hlimField;
+  m_baseFormat |= (field << 8);
+}
+
+SixLowPanIphc::Hlim_e SixLowPanIphc::GetHlim (void) const
+{
+  return Hlim_e ((m_baseFormat >> 8) & 0x3);
+}
+
+void SixLowPanIphc::SetCid (bool cidField)
+{
+  uint16_t field = cidField;
+  m_baseFormat |= (field << 7);
+}
+
+bool SixLowPanIphc::GetCid (void) const
+{
+  return ((m_baseFormat >> 7) & 0x1);
+}
+
+void SixLowPanIphc::SetSac (bool sacField)
+{
+  uint16_t field = sacField;
+  m_baseFormat |= (field << 6);
+}
+
+bool SixLowPanIphc::GetSac (void) const
+{
+  return ((m_baseFormat >> 6) & 0x1);
+}
+
+void SixLowPanIphc::SetSam (HeaderCompression_e samField)
+{
+  uint16_t field = samField;
+  m_baseFormat |= (field << 4);
+}
+
+SixLowPanIphc::HeaderCompression_e SixLowPanIphc::GetSam (void) const
+{
+  return HeaderCompression_e ((m_baseFormat >> 4) & 0x3);
+}
+
+void SixLowPanIphc::SetM (bool mField)
+{
+  uint16_t field = mField;
+  m_baseFormat |= (field << 3);
+}
+
+bool SixLowPanIphc::GetM (void) const
+{
+  return ((m_baseFormat >> 3) & 0x1);
+}
+
+void SixLowPanIphc::SetDac (bool dacField)
+{
+  uint16_t field = dacField;
+  m_baseFormat |= (field << 2);
+}
+
+bool SixLowPanIphc::GetDac (void) const
+{
+  return ((m_baseFormat >> 2) & 0x1);
+}
+
+void SixLowPanIphc::SetDam (HeaderCompression_e damField)
+{
+  uint16_t field = damField;
+  m_baseFormat |= field;
+}
+
+SixLowPanIphc::HeaderCompression_e SixLowPanIphc::GetDam (void) const
+{
+  return HeaderCompression_e (m_baseFormat & 0x3);
+}
+
+void SixLowPanIphc::SetSrcContextId (uint8_t srcContextId)
+{
+  NS_ASSERT_MSG (srcContextId < 16,  "Src Context ID too large");
+  m_srcdstContextId |= srcContextId << 4;
+}
+
+uint8_t SixLowPanIphc::GetSrcContextId (void) const
+{
+  return ( m_srcdstContextId >> 4);
+}
+
+void SixLowPanIphc::SetDstContextId (uint8_t dstContextId)
+{
+  NS_ASSERT_MSG (dstContextId < 16,  "Dst Context ID too large");
+  m_srcdstContextId |= (dstContextId & 0xF);
+}
+
+uint8_t SixLowPanIphc::GetDstContextId (void) const
+{
+  return (m_srcdstContextId & 0xF);
+}
+
+void SixLowPanIphc::SetEcn (uint8_t ecn)
+{
+  NS_ASSERT_MSG (ecn < 4,  "ECN too large");
+  m_ecn = ecn;
+}
+
+uint8_t SixLowPanIphc::GetEcn (void) const
+{
+  return m_ecn;
+}
+
+void SixLowPanIphc::SetDscp (uint8_t dscp)
+{
+  NS_ASSERT_MSG (dscp < 64,  "DSCP too large");
+  m_dscp = dscp;
+}
+
+uint8_t SixLowPanIphc::GetDscp (void) const
+{
+  return m_dscp;
+}
+
+void SixLowPanIphc::SetFlowLabel (uint32_t flowLabel)
+{
+  NS_ASSERT_MSG (flowLabel < 0x100000,  "Flow Label too large");
+  m_flowLabel = flowLabel;
+}
+
+uint32_t SixLowPanIphc::GetFlowLabel (void) const
+{
+  return m_flowLabel;
+}
+
+void SixLowPanIphc::SetNextHeader (uint8_t nextHeader)
+{
+  m_nextHeader = nextHeader;
+}
+
+uint8_t SixLowPanIphc::GetNextHeader (void) const
+{
+  return m_nextHeader;
+}
+
+void SixLowPanIphc::SetHopLimit (uint8_t hopLimit)
+{
+  m_hopLimit = hopLimit;
+}
+
+uint8_t SixLowPanIphc::GetHopLimit (void) const
+{
+  return m_hopLimit;
+}
+
+void SixLowPanIphc::SetSrcAddress (Ipv6Address srcAddress)
+{
+  m_srcAddress = srcAddress;
+}
+
+Ipv6Address SixLowPanIphc::GetSrcAddress () const
+{
+  return m_srcAddress;
+}
+
+void SixLowPanIphc::SetDstAddress (Ipv6Address dstAddress)
+{
+  m_dstAddress = dstAddress;
+}
+
+Ipv6Address SixLowPanIphc::GetDstAddress () const
+{
+  return m_dstAddress;
+}
+
+void SixLowPanIphc::PostProcessSac ()
+{
+  NS_ABORT_MSG ("Unsupported; Context destination is not implemented");
+  return;
+}
+
+void SixLowPanIphc::PostProcessDac ()
+{
+  NS_ABORT_MSG ("Unsupported; Context destination is not implemented");
+  return;
+}
+
+std::ostream & operator << (std::ostream & os, const SixLowPanIphc & h)
+{
+  h.Print (os);
+  return os;
+}
+
+/*
+ * SixLowPanNhcExtensionHeader
+ */
+NS_OBJECT_ENSURE_REGISTERED (SixLowPanNhcExtension)
+  ;
+
+SixLowPanNhcExtension::SixLowPanNhcExtension ()
+{
+  // 1110 xxxx
+  m_nhcExtensionHeader = 0xE0;
+  m_nhcNextHeader = 0;
+  m_nhcBlobLength = 0;
+}
+
+TypeId SixLowPanNhcExtension::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::SixLowPanNhcExtension")
+    .SetParent<Header> ()
+    .AddConstructor<SixLowPanNhcExtension> ();
+  return tid;
+}
+
+TypeId SixLowPanNhcExtension::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+void SixLowPanNhcExtension::Print (std::ostream & os) const
+{
+  os << "Compression kind: " << int (m_nhcExtensionHeader) << " Size: " << int(GetSerializedSize ());
+}
+
+uint32_t SixLowPanNhcExtension::GetSerializedSize () const
+{
+  uint32_t serializedSize = 2;
+  if ( GetNh () == false )
+    {
+      serializedSize++;
+    }
+  return serializedSize + m_nhcBlobLength;
+}
+
+void SixLowPanNhcExtension::Serialize (Buffer::Iterator start) const
+{
+  Buffer::Iterator i = start;
+  i.WriteU8 (m_nhcExtensionHeader);
+  if ( GetNh () == false )
+    {
+      i.WriteU8 (m_nhcNextHeader);
+    }
+  i.WriteU8 (m_nhcBlobLength);
+  i.Write (m_nhcBlob, m_nhcBlobLength);
+}
+
+uint32_t SixLowPanNhcExtension::Deserialize (Buffer::Iterator start)
+{
+  Buffer::Iterator i = start;
+  m_nhcExtensionHeader = i.ReadU8 ();
+  if ( GetNh () == false )
+    {
+      m_nhcNextHeader = i.ReadU8 ();
+    }
+  m_nhcBlobLength = i.ReadU8 ();
+  i.Read (m_nhcBlob, m_nhcBlobLength);
+
+  return GetSerializedSize ();
+}
+
+SixLowPanDispatch::NhcDispatch_e
+SixLowPanNhcExtension::GetNhcDispatchType (void) const
+{
+  return SixLowPanDispatch::LOWPAN_NHC;
+}
+
+void SixLowPanNhcExtension::SetEid (Eid_e extensionHeaderType)
+{
+  uint8_t field = extensionHeaderType;
+  m_nhcExtensionHeader |= (field << 1);
+}
+
+SixLowPanNhcExtension::Eid_e SixLowPanNhcExtension::GetEid (void) const
+{
+  return Eid_e ((m_nhcExtensionHeader >> 1) & 0x7);
+}
+
+void SixLowPanNhcExtension::SetNextHeader (uint8_t nextHeader)
+{
+  m_nhcNextHeader = nextHeader;
+}
+
+uint8_t SixLowPanNhcExtension::GetNextHeader (void) const
+{
+  return m_nhcNextHeader;
+}
+
+void SixLowPanNhcExtension::SetNh (bool nhField)
+{
+  uint8_t field = nhField;
+  m_nhcExtensionHeader |= field;
+}
+
+bool SixLowPanNhcExtension::GetNh (void) const
+{
+  return m_nhcExtensionHeader & 0x01;
+}
+
+void SixLowPanNhcExtension::SetBlob (const uint8_t* blob, uint32_t size)
+{
+  NS_ASSERT_MSG ( size < 255, "Buffer too long" );
+
+  m_nhcBlobLength = size;
+  std::memcpy (m_nhcBlob, blob, size);
+}
+
+uint32_t SixLowPanNhcExtension::CopyBlob (uint8_t* blob, uint32_t size) const
+{
+  NS_ASSERT_MSG ( size > m_nhcBlobLength, "Buffer too short" );
+
+  std::memcpy (blob, m_nhcBlob, m_nhcBlobLength);
+  return m_nhcBlobLength;
+}
+
+std::ostream & operator << (std::ostream & os, const SixLowPanNhcExtension & h)
+{
+  h.Print (os);
+  return os;
+}
+
+/*
+ * SixLowPanUdpNhcExtension
+ */
+NS_OBJECT_ENSURE_REGISTERED (SixLowPanUdpNhcExtension)
+  ;
+
+SixLowPanUdpNhcExtension::SixLowPanUdpNhcExtension ()
+{
+  // 1111 0xxx
+  m_baseFormat = 0xF0;
+  m_checksum = 0;
+  m_srcPort = 0;
+  m_dstPort = 0;
+}
+
+TypeId SixLowPanUdpNhcExtension::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::SixLowPanUdpNhcExtension")
+    .SetParent<Header> ()
+    .AddConstructor<SixLowPanUdpNhcExtension> ();
+  return tid;
+}
+
+TypeId SixLowPanUdpNhcExtension::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+void SixLowPanUdpNhcExtension::Print (std::ostream & os) const
+{
+  os << "Compression kind: " << uint8_t (m_baseFormat);
+}
+
+uint32_t SixLowPanUdpNhcExtension::GetSerializedSize () const
+{
+  uint32_t serializedSize = 1;
+  if ( !GetC () )
+    {
+      serializedSize += 2;
+    }
+  switch (GetPorts ())
+    {
+    case PORTS_INLINE:
+      serializedSize += 4;
+      break;
+    case PORTS_ALL_SRC_LAST_DST:
+    case PORTS_LAST_SRC_ALL_DST:
+      serializedSize += 3;
+      break;
+    case PORTS_LAST_SRC_LAST_DST:
+      serializedSize += 1;
+      break;
+    default:
+      break;
+    }
+  return serializedSize;
+}
+
+void SixLowPanUdpNhcExtension::Serialize (Buffer::Iterator start) const
+{
+  Buffer::Iterator i = start;
+  i.WriteU8 (m_baseFormat);
+  uint8_t temp;
+
+  // Ports
+  switch ( GetPorts () )
+    {
+    case PORTS_INLINE:
+      i.WriteHtonU16 (m_srcPort);
+      i.WriteHtonU16 (m_dstPort);
+      break;
+    case PORTS_ALL_SRC_LAST_DST:
+      i.WriteHtonU16 (m_srcPort);
+      i.WriteU8 (m_dstPort & 0xff);
+      break;
+    case PORTS_LAST_SRC_ALL_DST:
+      i.WriteU8 (m_srcPort & 0xff);
+      i.WriteHtonU16 (m_dstPort);
+      break;
+    case PORTS_LAST_SRC_LAST_DST:
+      temp = ((m_srcPort & 0xf) << 4) | (m_dstPort & 0xf);
+      i.WriteU8 (temp);
+      break;
+    default:
+      break;
+    }
+
+  // Checksum
+  if ( !GetC () )
+    {
+      i.WriteU16 (m_checksum);
+    }
+
+}
+
+uint32_t SixLowPanUdpNhcExtension::Deserialize (Buffer::Iterator start)
+{
+  Buffer::Iterator i = start;
+  m_baseFormat = i.ReadU8 ();
+  uint8_t temp;
+
+  // Ports
+  switch ( GetPorts () )
+    {
+    case PORTS_INLINE:
+      m_srcPort = i.ReadNtohU16 ();
+      m_dstPort = i.ReadNtohU16 ();
+      break;
+    case PORTS_ALL_SRC_LAST_DST:
+      m_srcPort = i.ReadNtohU16 ();
+      m_dstPort = i.ReadU8 ();
+      break;
+    case PORTS_LAST_SRC_ALL_DST:
+      m_srcPort = i.ReadU8 ();
+      m_dstPort = i.ReadNtohU16 ();
+      break;
+    case PORTS_LAST_SRC_LAST_DST:
+      temp = i.ReadU8 ();
+      m_srcPort = temp >> 4;
+      m_dstPort = temp & 0xf;
+      break;
+    default:
+      break;
+    }
+
+  // Checksum
+  if ( !GetC () )
+    {
+      m_checksum = i.ReadU16 ();
+    }
+
+  return GetSerializedSize ();
+}
+
+SixLowPanDispatch::NhcDispatch_e
+SixLowPanUdpNhcExtension::GetNhcDispatchType (void) const
+{
+  return SixLowPanDispatch::LOWPAN_UDPNHC;
+}
+
+void SixLowPanUdpNhcExtension::SetPorts (Ports_e ports)
+{
+  uint16_t field = ports;
+  m_baseFormat |= field;
+}
+
+SixLowPanUdpNhcExtension::Ports_e SixLowPanUdpNhcExtension::GetPorts (void) const
+{
+  return Ports_e (m_baseFormat & 0x3);
+}
+
+void SixLowPanUdpNhcExtension::SetSrcPort (uint16_t srcport)
+{
+  m_srcPort = srcport;
+}
+
+uint16_t SixLowPanUdpNhcExtension::GetSrcPort (void) const
+{
+  return m_srcPort;
+}
+
+void SixLowPanUdpNhcExtension::SetDstPort (uint16_t dstport)
+{
+  m_dstPort = dstport;
+}
+
+uint16_t SixLowPanUdpNhcExtension::GetDstPort (void) const
+{
+  return m_dstPort;
+}
+
+void SixLowPanUdpNhcExtension::SetC (bool cField)
+{
+  uint16_t field = cField;
+  m_baseFormat |= (field << 2);
+}
+
+bool SixLowPanUdpNhcExtension::GetC (void) const
+{
+  return ((m_baseFormat >> 2) & 0x1);
+}
+
+void SixLowPanUdpNhcExtension::SetChecksum (uint16_t checksum)
+{
+  m_checksum = checksum;
+}
+
+uint16_t SixLowPanUdpNhcExtension::GetChecksum (void) const
+{
+  return m_checksum;
+}
+
+std::ostream & operator << (std::ostream & os, const SixLowPanUdpNhcExtension & h)
+{
+  h.Print (os);
+  return os;
+}
+
+
+}
+
diff -Naur ns-3.18.1/src/sixlowpan/model/sixlowpan-header.h ns-3.19/src/sixlowpan/model/sixlowpan-header.h
--- ns-3.18.1/src/sixlowpan/model/sixlowpan-header.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/sixlowpan/model/sixlowpan-header.h	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,1214 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Universita' di Firenze, Italy
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ *         Michele Muccio <michelemuccio@virgilio.it>
+ */
+
+#ifndef SIXLOWPANHEADER_H_
+#define SIXLOWPANHEADER_H_
+
+#include "ns3/header.h"
+#include "ns3/ipv6-address.h"
+#include "ns3/packet.h"
+#include "ns3/ipv6-header.h"
+
+namespace ns3 {
+
+/**
+* \ingroup sixlowpan
+* \brief   Dispatch header helper. This class only purpose is to interpret
+* the Dispatch header into its correct type.
+*
+* The dispatch type is defined by a zero bit as the first bit and a one
+*  bit as the second bit.
+  \verbatim
+                        1                   2                   3
+    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |0 1| Dispatch  |  type-specific header
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+  \endverbatim
+*/
+class SixLowPanDispatch
+{
+public:
+  /**
+   *  \brief Dispatch values, as defined in RFC4944 and RFC6282
+  \verbatim
+     Pattern    Header Type
+   +------------+------------------------------------------------+
+   | 00  xxxxxx | NALP        - Not a LoWPAN frame               |
+   | 01  000000 | ESC         - Additional Dispatch byte follows |
+   | 01  000001 | IPv6        - Uncompressed IPv6 Addresses      |
+   | 01  000010 | LOWPAN_HC1  - LOWPAN_HC1 compressed IPv6       |
+   | 01  000011 | reserved    - Reserved for future use          |
+   |   ...      | reserved    - Reserved for future use          |
+   | 01  001111 | reserved    - Reserved for future use          |
+   | 01  010000 | LOWPAN_BC0  - LOWPAN_BC0 broadcast             |
+   | 01  010001 | reserved    - Reserved for future use          |
+   |   ...      | reserved    - Reserved for future use          |
+   | 01  1xxxxx | LOWPAN_IPHC - LOWPAN_IPHC compressed IPv6      |
+   | 10  xxxxxx | MESH        - Mesh Header                      |
+   | 11  000xxx | FRAG1       - Fragmentation Header (first)     |
+   | 11  001000 | reserved    - Reserved for future use          |
+   |   ...      | reserved    - Reserved for future use          |
+   | 11  011111 | reserved    - Reserved for future use          |
+   | 11  100xxx | FRAGN       - Fragmentation Header (subsequent)|
+   | 11  101000 | reserved    - Reserved for future use          |
+   |   ...      | reserved    - Reserved for future use          |
+   | 11  111111 | reserved    - Reserved for future use          |
+   +------------+------------------------------------------------+
+   \endverbatim
+   */
+  enum Dispatch_e
+  {
+    LOWPAN_NALP = 0x0,
+    LOWPAN_NALP_N = 0x3F,
+    LOWPAN_NOTCOMPRESSED = 0x41,
+    LOWPAN_HC1 = 0x42,
+    LOWPAN_BC0 = 0x50,
+    LOWPAN_IPHC = 0x60,
+    LOWPAN_IPHC_N = 0x7F,
+    LOWPAN_MESH = 0x80,
+    LOWPAN_MESH_N = 0xBF,
+    LOWPAN_FRAG1 = 0xC0,
+    LOWPAN_FRAG1_N = 0xC7,
+    LOWPAN_FRAGN = 0xE0,
+    LOWPAN_FRAGN_N = 0xE7,
+    LOWPAN_UNSUPPORTED = 0xFF
+  };
+
+  /**
+   *  \brief Dispatch values for Next Header compression.
+   *
+   *  The dispatch values reflect the dispatch use, since
+   *  some dispatch bits carry actual header compression bits.
+   */
+  enum NhcDispatch_e
+  {
+    LOWPAN_NHC = 0xE0,
+    LOWPAN_NHC_N = 0xEF,
+    LOWPAN_UDPNHC = 0xF0,
+    LOWPAN_UDPNHC_N = 0xF7,
+    LOWPAN_NHCUNSUPPORTED = 0xFF
+  };
+
+  SixLowPanDispatch (void);
+
+  /**
+   * \brief Get the Dispatch type.
+   * \param dispatch the dispatch value
+   * \return the Dispatch type
+   */
+  static Dispatch_e GetDispatchType (uint8_t dispatch);
+
+  /**
+   * \brief Get the NhcDispatch type.
+   * \param dispatch the dispatch value
+   * \return the NhcDispatch type
+   */
+  static NhcDispatch_e GetNhcDispatchType (uint8_t dispatch);
+
+};
+
+/**
+ * \ingroup sixlowpan
+ * \brief 6LoWPAN HC1 header - see RFC 4944
+ */
+class SixLowPanHc1 : public Header
+{
+public:
+  /**
+   * \brief Kind of address compression.
+   *
+   * The address compression is handled in 4 bits and might mean:
+   * PI: Prefix inline, PC: Prefix Compressed,
+   * II: Interface Identifier, Inline, IC: Interface Identifier Compressed
+   */
+  enum LowPanHc1Addr_e
+  {
+    HC1_PIII = 0x00,
+    HC1_PIIC = 0x01,
+    HC1_PCII = 0x02,
+    HC1_PCIC = 0x03
+  };
+
+  /**
+   * \brief Next header information.
+   *
+   * The Next header compression is handled in 4 bits and might mean:
+   * NC: Not Compressed, UDP, ICMP or TCP.
+   */
+  enum LowPanHc1NextHeader_e
+  {
+    HC1_NC = 0x00,
+    HC1_UDP = 0x01,
+    HC1_ICMP = 0x02,
+    HC1_TCP = 0x03
+  };
+
+  SixLowPanHc1 (void);
+
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * \brief Return the instance type identifier.
+   * \return instance type ID
+   */
+
+  virtual TypeId GetInstanceTypeId (void) const;
+
+  virtual void Print (std::ostream& os) const;
+
+  /**
+   * \brief Get the serialized size of the packet.
+   * \return size
+   */
+  virtual uint32_t GetSerializedSize (void) const;
+
+  /**
+   * \brief Serialize the packet.
+   * \param start Buffer iterator
+   */
+  virtual void Serialize (Buffer::Iterator start) const;
+
+  /**
+   * \brief Deserialize the packet.
+   * \param start Buffer iterator
+   * \return size of the packet
+   */
+  virtual uint32_t Deserialize (Buffer::Iterator start);
+
+  /**
+   * \brief Get the Dispatch type.
+   * \return the Dispatch type
+   */
+  // virtual Dispatch_e GetDispatchType (void) const;
+
+  /**
+   * \brief Set the "Hop limit" field (TTL).
+   * \param limit the hop limit value
+   */
+  void SetHopLimit (uint8_t limit);
+
+  /**
+   * \brief Get the "Hop limit" field (TTL).
+   * \return the hop limit value
+   */
+  uint8_t GetHopLimit (void) const;
+
+  /**
+   * \brief Get Destination Compression type
+   * \returns the kind of address compression
+   */
+  LowPanHc1Addr_e GetDstCompression () const;
+
+  /**
+   * \brief Get the destination interface
+   * \returns the destination interface
+   */
+  const uint8_t* GetDstInterface () const;
+
+  /**
+   * \brief Get the destination prefix
+   * \returns the destination prefix
+   */
+  const uint8_t* GetDstPrefix () const;
+
+  /**
+   * \brief Get the Flow Label value
+   * \returns the Flow Label
+   */
+  uint32_t GetFlowLabel () const;
+
+  /**
+   * \brief Get the Next Header value
+   * \returns the Next Header value
+   */
+  uint8_t GetNextHeader () const;
+
+  /**
+   * \brief Get Source Compression type
+   * \returns the kind of address compression
+   */
+  LowPanHc1Addr_e GetSrcCompression () const;
+
+  /**
+   * \brief Get the source interface
+   * \returns the source interface
+   */
+  const uint8_t* GetSrcInterface () const;
+
+  /**
+   * \brief Get the source prefix
+   * \returns the source prefix
+   */
+  const uint8_t* GetSrcPrefix () const;
+
+  /**
+   * \brief Get the Traffic Class value
+   * \returns the Traffic Class value
+   */
+  uint8_t GetTrafficClass () const;
+
+  /**
+   * \brief Check if the Traffic Class and Flow Labels are compressed
+   * \returns true if TC and FL are compressed
+   */
+  bool IsTcflCompression () const;
+
+  /**
+   * \brief Check if there is a HC2 compressed header
+   * \returns true if next header is HC2 copressed
+   */
+  bool IsHc2HeaderPresent () const;
+
+  /**
+   * \brief Set Destination Compression type
+   * \param dstCompression the kind of address compression
+   */
+  void SetDstCompression (LowPanHc1Addr_e dstCompression);
+
+  /**
+   * \brief Set the destination interface
+   * \param dstInterface the destination interface
+   */
+  void SetDstInterface (const uint8_t* dstInterface);
+
+  /**
+   * \brief Set the destination prefix
+   * \param dstPrefix the destination prefix
+   */
+  void SetDstPrefix (const uint8_t* dstPrefix);
+
+  /**
+   * \brief Set the Flow Label value
+   * \param flowLabel the Flow Label
+   */
+  void SetFlowLabel (uint32_t flowLabel);
+
+  /**
+   * \brief Set the Next Header value
+   * \param nextHeader the Next Header value
+   */
+  void SetNextHeader (uint8_t nextHeader);
+
+  /**
+   * \brief Set Source Compression type
+   * \param srcCompression the kind of address compression
+   */
+  void SetSrcCompression (LowPanHc1Addr_e srcCompression);
+
+  /**
+   * \brief Set the source interface
+   * \param srcInterface the source interface
+   */
+  void SetSrcInterface (const uint8_t* srcInterface);
+
+  /**
+   * \brief Set the source prefix
+   * \param srcPrefix the source prefix
+   */
+  void SetSrcPrefix (const uint8_t* srcPrefix);
+
+  /**
+   * \brief Set the Traffic Class and Flow Labels as compressed
+   * \param tcflCompression true if TC and FL are compressed
+   */
+  void SetTcflCompression (bool tcflCompression);
+
+  /**
+   * \brief Set the next header a HC2 compressed header
+   * \param hc2HeaderPresent true if next header is HC2 compressed
+   */
+  void SetHc2HeaderPresent (bool hc2HeaderPresent);
+
+  /**
+   * \brief Set the Traffic Class value
+   * \param trafficClass the Traffic Class value
+   */
+  void SetTrafficClass (uint8_t trafficClass);
+
+private:
+  uint8_t m_hopLimit;           //!< Hop Limit
+  uint8_t m_srcPrefix[8];       //!< Source prefix
+  uint8_t m_srcInterface[8];    //!< Source interface
+  uint8_t m_dstPrefix[8];       //!< Destinaiton prefix
+  uint8_t m_dstInterface[8];    //!< Destination interface
+  uint8_t m_trafficClass;       //!< Traffic Class
+  uint32_t m_flowLabel;         //!< Flow Label
+  uint8_t m_nextHeader;         //!< Next header
+  LowPanHc1Addr_e m_srcCompression; //!< Source compresison type
+  LowPanHc1Addr_e m_dstCompression; //!< Destination compresison type
+  bool m_tcflCompression;       //!< is TC and FL compressed
+  LowPanHc1NextHeader_e m_nextHeaderCompression; //!< next header compression
+  bool m_hc2HeaderPresent;      //!< is next header HC2 compressed
+};
+
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param header the HC1 Header
+ * \returns the reference to the output stream
+ */
+std::ostream & operator<< (std::ostream & os, SixLowPanHc1 const &header);
+
+/**
+ * \ingroup sixlowpan
+ * \brief 6LoWPAN FRAG1 header - see RFC 4944
+ */
+class SixLowPanFrag1 : public Header
+{
+public:
+  SixLowPanFrag1 (void);
+
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * \brief Return the instance type identifier.
+   * \return instance type ID
+   */
+  virtual TypeId GetInstanceTypeId (void) const;
+
+  virtual void Print (std::ostream& os) const;
+
+  /**
+   * \brief Get the serialized size of the packet.
+   * \return size
+   */
+  virtual uint32_t GetSerializedSize (void) const;
+
+  /**
+   * \brief Serialize the packet.
+   * \param start Buffer iterator
+   */
+  virtual void Serialize (Buffer::Iterator start) const;
+
+  /**
+   * \brief Deserialize the packet.
+   * \param start Buffer iterator
+   * \return size of the packet
+   */
+  virtual uint32_t Deserialize (Buffer::Iterator start);
+
+  /**
+   * \brief Get the Dispatch type.
+   * \return the Dispatch type
+   */
+  // virtual Dispatch_e GetDispatchType (void) const;
+
+  /**
+   * \brief Set the datagram size
+   * \param datagramSize the datagram size
+   */
+  void SetDatagramSize (uint16_t datagramSize);
+
+  /**
+   * \brief Get the datagram size
+   * \returns the datagram size
+   */
+  uint16_t GetDatagramSize (void) const;
+
+  /**
+   * \brief Set the datagram tag
+   * \param datagramTag the datagram tag
+   */
+  void SetDatagramTag (uint16_t datagramTag);
+
+  /**
+   * \brief Get the datagram tag
+   * \returns the datagram tag
+   */
+  uint16_t GetDatagramTag (void) const;
+
+private:
+  uint16_t m_datagramSize; //!< datagram size
+  uint16_t m_datagramTag;  //!< datagram tag
+
+};
+
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param header the Frag1 Header
+ * \returns the reference to the output stream
+ */
+std::ostream & operator<< (std::ostream & os, SixLowPanFrag1 const & header);
+
+/**
+ * \ingroup sixlowpan
+ * \brief 6LoWPAN FRAGN header - see RFC 4944
+ */
+class SixLowPanFragN : public Header
+{
+public:
+  SixLowPanFragN (void);
+
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * \brief Return the instance type identifier.
+   * \return instance type ID
+   */
+  virtual TypeId GetInstanceTypeId (void) const;
+
+  virtual void Print (std::ostream& os) const;
+
+  /**
+   * \brief Get the serialized size of the packet.
+   * \return size
+   */
+  virtual uint32_t GetSerializedSize (void) const;
+
+  /**
+   * \brief Serialize the packet.
+   * \param start Buffer iterator
+   */
+  virtual void Serialize (Buffer::Iterator start) const;
+
+  /**
+   * \brief Deserialize the packet.
+   * \param start Buffer iterator
+   * \return size of the packet
+   */
+  virtual uint32_t Deserialize (Buffer::Iterator start);
+
+  /**
+   * \brief Get the Dispatch type.
+   * \return the Dispatch type
+   */
+  // virtual Dispatch_e GetDispatchType (void) const;
+
+  /**
+   * \brief Set the datagram size
+   * \param datagramSize the datagram size
+   */
+  void SetDatagramSize (uint16_t datagramSize);
+
+  /**
+   * \brief Get the datagram size
+   * \returns the datagram size
+   */
+  uint16_t GetDatagramSize (void) const;
+
+  /**
+   * \brief Set the datagram tag
+   * \param datagramTag the datagram tag
+   */
+  void SetDatagramTag (uint16_t datagramTag);
+
+  /**
+   * \brief Get the datagram tag
+   * \returns the datagram tag
+   */
+  uint16_t GetDatagramTag (void) const;
+
+  /**
+   * \brief Set the datagram offset
+   * \param datagramOffset the datagram offset
+   */
+  void SetDatagramOffset (uint8_t datagramOffset);
+
+  /**
+   * \brief Get the datagram offset
+   * \returns the datagram offset
+   */
+  uint8_t GetDatagramOffset (void) const;
+
+private:
+  uint16_t m_datagramSize;  //!< datagram size
+  uint16_t m_datagramTag;   //!< datagram tag
+  uint8_t m_datagramOffset; //!< datagram offset
+
+};
+
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param header the FragN Header
+ * \returns the reference to the output stream
+ */
+std::ostream & operator<< (std::ostream & os, SixLowPanFragN const &header);
+
+/**
+* \ingroup sixlowpan
+* \brief   LOWPAN_IPHC base Encoding - see RFC 6282
+  \verbatim
+       0                                       1
+       0   1   2   3   4   5   6   7   8   9   0   1   2   3   4   5
+     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
+     | 0 | 1 | 1 |  TF   |NH | HLIM  |CID|SAC|  SAM  | M |DAC|  DAM  |
+     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
+  \endverbatim
+*/
+class SixLowPanIphc : public Header
+{
+public:
+  /**
+   *  \brief TF: Traffic Class, Flow Label
+   *
+   *  00:  ECN + DSCP + 4-bit Pad + Flow Label (4 bytes)
+   *  01:  ECN + 2-bit Pad + Flow Label (3 bytes), DSCP is elided.
+   *  10:  ECN + DSCP (1 byte), Flow Label is elided.
+   *  11:  Traffic Class and Flow Label are elided.
+   *
+   */
+  enum TrafficClassFlowLabel_e
+  {
+    TF_FULL = 0,
+    TF_DSCP_ELIDED,
+    TF_FL_ELIDED,
+    TF_ELIDED
+  };
+
+  /**
+   *  \brief HLIM: Hop Limit
+   *
+   *  00:  The Hop Limit field is carried in-line.
+   *  01:  The Hop Limit field is compressed and the hop limit is 1.
+   *  10:  The Hop Limit field is compressed and the hop limit is 64.
+   *  11:  The Hop Limit field is compressed and the hop limit is 255.
+   */
+  enum Hlim_e
+  {
+    HLIM_INLINE = 0,
+    HLIM_COMPR_1,
+    HLIM_COMPR_64,
+    HLIM_COMPR_255
+  };
+
+  /**
+   *  \brief Source or Destination Address Mode
+   *
+   *  00:  128 bits.
+   *  01:  64 bits (or 48 bits if multicast).
+   *  10:  16 bits (or 32 bits if multicast).
+   *  11:  Fully elided (or 8 bits if multicast).
+   */
+  enum HeaderCompression_e
+  {
+    HC_INLINE = 0,
+    HC_COMPR_64,
+    HC_COMPR_16,
+    HC_COMPR_0
+  };
+
+  SixLowPanIphc (void);
+  /**
+   * \brief Constructor
+   * \param dispatch dispatch value
+   */
+  SixLowPanIphc (uint8_t dispatch);
+
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * \brief Return the instance type identifier.
+   * \return instance type ID
+   */
+  virtual TypeId GetInstanceTypeId (void) const;
+
+  virtual void Print (std::ostream& os) const;
+
+  /**
+   * \brief Get the serialized size of the packet.
+   * \return size
+   */
+  virtual uint32_t GetSerializedSize (void) const;
+
+  /**
+   * \brief Serialize the packet.
+   * \param start Buffer iterator
+   */
+  virtual void Serialize (Buffer::Iterator start) const;
+
+  /**
+   * \brief Deserialize the packet.
+   * \param start Buffer iterator
+   * \return size of the packet
+   */
+  virtual uint32_t Deserialize (Buffer::Iterator start);
+
+  /**
+   * \brief Get the Dispatch type.
+   * \return the Dispatch type
+   */
+  // virtual Dispatch_e GetDispatchType (void) const;
+
+  /**
+   * \brief Set the TF (Traffic Class, Flow Label) compression.
+   * \param tfField ECN, DSCP, Flow Label compression type
+   */
+  void SetTf (TrafficClassFlowLabel_e tfField);
+
+  /**
+   * \brief Get the TF (Traffic Class, Flow Label) compression.
+   * \return the ECN, DSCP, Flow Label compression type
+   */
+  TrafficClassFlowLabel_e GetTf (void) const;
+
+  /**
+   * \brief Set the NH (Next Header) compression.
+   * \param nhField false (Next Header carried in-line), true (compressed NH)
+   */
+  void SetNh (bool nhField);
+
+  /**
+   * \brief Get the NH (Next Header) compression.
+   * \return false (Next Header carried in-line), true (compressed NH)
+   */
+  bool GetNh (void) const;
+
+  /**
+   * \brief Set the HLIM (Hop Limit) compression.
+   * \param hlimField Hop Limit compression type
+   */
+  void SetHlim (Hlim_e hlimField);
+
+  /**
+   * \brief Get the HLIM (Hop Limit) compression.
+   * \return Hop Limit compression type
+   */
+  Hlim_e GetHlim (void) const;
+
+  /**
+   * \brief Set the CID (Context Identifier Extension) compression.
+   * \param cidField false (no CID present), true (CID follows)
+   */
+  void SetCid (bool cidField);
+
+  /**
+   * \brief Get the CID (Context Identifier Extension) compression.
+   * \return false (no CID present), true (CID follows)
+   */
+  bool GetCid (void) const;
+
+  /**
+   * \brief Set the SAC (Source Address Compression) compression.
+   * \param sacField false (stateless), true (stateful)
+   */
+  void SetSac (bool sacField);
+
+  /**
+   * \brief Get the SAC (Source Address Compression) compression.
+   * \return false (stateless), true (stateful)
+   */
+  bool GetSac (void) const;
+
+  /**
+   * \brief Set the SAM (Source Address Mode) compression.
+   * \param samField - depends on the SAC
+   */
+  void SetSam (HeaderCompression_e samField);
+
+  /**
+   * \brief Get the SAM (Source Address Mode) compression.
+   * \return depends on the SAC field
+   */
+  HeaderCompression_e GetSam (void) const;
+
+  /**
+   * \brief Set the M (Multicast) compression.
+   * \param mField true if destination is multicast
+   */
+  void SetM (bool mField);
+
+  /**
+   * \brief Get the M (Multicast) compression.
+   * \return true if destination is multicast
+   */
+  bool GetM (void) const;
+
+  /**
+   * \brief Set the DAC (Destination Address Compression) compression.
+   * \param dacField false (stateless), true (stateful)
+   */
+  void SetDac (bool dacField);
+
+  /**
+   * \brief Get the DAC (Destination Address Compression) compression.
+   * \return false (stateless), true (stateful)
+   */
+  bool GetDac (void) const;
+
+  /**
+   * \brief Set the DAM (Destination Address Mode) compression.
+   * \param damField - depends on the DAC and M fields
+   */
+  void SetDam (HeaderCompression_e damField);
+
+  /**
+   * \brief Get the DAM (Destination Address Mode) compression.
+   * \return depends on the DAC and M fields
+   */
+  HeaderCompression_e GetDam (void) const;
+
+  /**
+   * \brief Set the SrcContextId.
+   * \param srcContextId - valid values are [0:15]
+   */
+  void SetSrcContextId (uint8_t srcContextId);
+
+  /**
+   * \brief Get the SrcContextId.
+   * \return the SrcContextId
+   */
+  uint8_t GetSrcContextId (void) const;
+
+  /**
+   * \brief Set the DstContextId.
+   * \param dstContextId - valid values are [0:15]
+   */
+  void SetDstContextId (uint8_t dstContextId);
+
+  /**
+   * \brief Get the DstContextId.
+   * \return the DstContextId
+   */
+  uint8_t GetDstContextId (void) const;
+
+  /**
+   * \brief Set the ECN (2bits).
+   * \param ecn - valid values are [0:3]
+   */
+  void SetEcn (uint8_t ecn);
+
+  /**
+   * \brief Get the ECN.
+   * \return the ECN
+   */
+  uint8_t GetEcn (void) const;
+
+  /**
+   * \brief Set the DSCP (6bits).
+   * \param dscp - valid values are [0:63]
+   */
+  void SetDscp (uint8_t dscp);
+
+  /**
+   * \brief Get the DSCP.
+   * \return the DSCP
+   */
+  uint8_t GetDscp (void) const;
+
+  /**
+   * \brief Set the Flow Label (20bits).
+   * \param flowLabel - valid values are 20 bits long.
+   */
+  void SetFlowLabel (uint32_t flowLabel);
+
+  /**
+   * \brief Get the Flow Label.
+   * \return the Flow Label
+   */
+  uint32_t GetFlowLabel (void) const;
+
+  /**
+   * \brief Set the Next Header field.
+   * \param nextHeader Next Header field.
+   */
+  void SetNextHeader (uint8_t nextHeader);
+
+  /**
+   * \brief Get the Next Header field.
+   * \return the Next Header field.
+   */
+  uint8_t GetNextHeader (void) const;
+
+  /**
+   * \brief Set the Hop Limit field.
+   * \param hopLimit Hop Limit field.
+   */
+  void SetHopLimit (uint8_t hopLimit);
+
+  /**
+   * \brief Get the Hop Limit field.
+   * \return the Hop Limit field.
+   */
+  uint8_t GetHopLimit (void) const;
+
+  /**
+   * \brief Set the Source Address.
+   * \param srcAddress the Source Address.
+   */
+  void SetSrcAddress (Ipv6Address srcAddress);
+
+  /**
+   * \brief Get the Source Address.
+   * \return the Source Address.
+   */
+  Ipv6Address GetSrcAddress () const;
+
+  /**
+   * \brief Set the Destination Address.
+   * \param dstAddress the Destination Address.
+   */
+  void SetDstAddress (Ipv6Address dstAddress);
+
+  /**
+   * \brief Get the Destination Address.
+   * \return the Destination Address.
+   */
+  Ipv6Address GetDstAddress () const;
+
+private:
+  uint16_t m_baseFormat;      //!< Dispatch + encoding fields
+  uint8_t m_srcdstContextId;  //!< Src and Dst Context ID
+  uint8_t m_ecn : 2;          //!< ECN bits
+  uint8_t m_dscp : 6;         //!< DSCP bits
+  uint32_t m_flowLabel : 20;  //!< Flow Label bits
+  uint8_t m_nextHeader;       //!< Next header
+  uint8_t m_hopLimit;         //!< Hop Limit
+  Ipv6Address m_srcAddress;   //!< Src address
+  Ipv6Address m_dstAddress;   //!< Dst address
+
+  /**
+   * \brief Post-process the Source address stateful compression
+   * \note currently unsupported
+   */
+  void PostProcessSac ();
+  /**
+   * \brief Post-process the Destination address stateful compression
+   * \note currently unsupported
+   */
+  void PostProcessDac ();
+
+};
+
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param header the IPHC Header
+ * \returns the reference to the output stream
+ */
+std::ostream & operator<< (std::ostream & os, SixLowPanIphc const &header);
+
+/**
+* \ingroup sixlowpan
+* \brief   LOWPAN_NHC Extension Header Encoding - see RFC 6282
+  \verbatim
+     0   1   2   3   4   5   6   7
+   +---+---+---+---+---+---+---+---+
+   | 1 | 1 | 1 | 0 |    EID    |NH |
+   +---+---+---+---+---+---+---+---+
+  \endverbatim
+*/
+class SixLowPanNhcExtension : public Header
+{
+public:
+  /**
+   *  \brief EID: IPv6 Extension Header ID
+   *
+   *   EID: IPv6 Extension Header ID:
+   *      0: IPv6 Hop-by-Hop Options Header [RFC2460]
+   *      1: IPv6 Routing Header [RFC2460]
+   *      2: IPv6 Fragment Header [RFC2460]
+   *      3: IPv6 Destination Options Header [RFC2460]
+   *      4: IPv6 Mobility Header [RFC6275]
+   *      5: Reserved
+   *      6: Reserved
+   *      7: IPv6 Header
+   */
+  enum Eid_e
+  {
+    EID_HOPBYHOP_OPTIONS_H = 0,
+    EID_ROUTING_H,
+    EID_FRAGMENTATION_H,
+    EID_DESTINATION_OPTIONS_H,
+    EID_MOBILITY_H,
+    EID_IPv6_H = 7
+  };
+
+  SixLowPanNhcExtension (void);
+
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * \brief Return the instance type identifier.
+   * \return instance type ID
+   */
+  virtual TypeId GetInstanceTypeId (void) const;
+
+  virtual void Print (std::ostream& os) const;
+
+  /**
+   * \brief Get the serialized size of the packet.
+   * \return size
+   */
+  virtual uint32_t GetSerializedSize (void) const;
+
+  /**
+   * \brief Serialize the packet.
+   * \param start Buffer iterator
+   */
+  virtual void Serialize (Buffer::Iterator start) const;
+
+  /**
+   * \brief Deserialize the packet.
+   * \param start Buffer iterator
+   * \return size of the packet
+   */
+  virtual uint32_t Deserialize (Buffer::Iterator start);
+
+  /**
+   * \brief Get the NhcDispatch type.
+   * \return the NhcDispatch type
+   */
+  virtual SixLowPanDispatch::NhcDispatch_e GetNhcDispatchType (void) const;
+
+  /**
+   * \brief Set the Extension Header Type.
+   * \param extensionHeaderType the Extension Header Type
+   */
+  void SetEid (Eid_e extensionHeaderType);
+
+  /**
+   * \brief Get the Extension Header Type.
+   * \return the Extension Header Type
+   */
+  Eid_e GetEid (void) const;
+
+  /**
+   * \brief Set the Next Header field values.
+   * \param nextHeader the Next Header field value
+   */
+  void SetNextHeader (uint8_t nextHeader);
+
+  /**
+   * \brief Get the Next Header field value.
+   * \return the Next Header field value
+   */
+  uint8_t GetNextHeader (void) const;
+
+  /**
+   * \brief Set the NH field values.
+   * \param nhField the NH field value
+   */
+  void SetNh (bool nhField);
+
+  /**
+   * \brief Get the Next Header field value.
+   * \return the NH field value
+   */
+  bool GetNh (void) const;
+
+  /**
+   * \brief Set the option header data blob.
+   * \param blob a buffer holding the blob data
+   * \param size the data blob size
+   */
+  void SetBlob (const uint8_t* blob, uint32_t size);
+
+  /**
+   * \brief Get the option header data blob.
+   * \param blob a buffer to copy the blob data into
+   * \param size the size of the buffer
+   * \return the length of the copied data
+   */
+  uint32_t CopyBlob (uint8_t* blob, uint32_t size) const;
+
+private:
+  uint8_t m_nhcExtensionHeader; //!< NHC extension header type
+  uint8_t m_nhcNextHeader;      //!< Next header
+  uint8_t m_nhcBlobLength;      //!< Length of the NHC compressed header
+  uint8_t m_nhcBlob[256];       //!< NHC compressed header
+};
+
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param header the NHC Extension Header
+ * \returns the reference to the output stream
+ */
+std::ostream & operator<< (std::ostream & os, SixLowPanNhcExtension const &header);
+
+
+/**
+* \ingroup sixlowpan
+* \brief   UDP LOWPAN_NHC Extension Header Encoding - see RFC 6282
+  \verbatim
+     0   1   2   3   4   5   6   7
+   +---+---+---+---+---+---+---+---+
+   | 1 | 1 | 1 | 1 | 0 | C |   P   |
+   +---+---+---+---+---+---+---+---+
+  \endverbatim
+*/
+class SixLowPanUdpNhcExtension : public Header
+{
+public:
+  /**
+   *  \brief Ports:
+   *
+   *  00: 16 bits for both Source Port and Destination Port
+   *  01: 16 bits for Source Port. Last 8 bits for Destination Port
+   *  10: Last 8 bits for Source Port. All 16 bits for Destination Port
+   *  11: Last 4 bits of both Source Port and Destination Port
+   */
+  enum Ports_e
+  {
+    PORTS_INLINE = 0,
+    PORTS_ALL_SRC_LAST_DST,
+    PORTS_LAST_SRC_ALL_DST,
+    PORTS_LAST_SRC_LAST_DST
+  };
+
+  SixLowPanUdpNhcExtension (void);
+
+  /**
+   * \brief Return the instance type identifier.
+   * \return instance type ID
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * \brief Return the instance type identifier.
+   * \return instance type ID
+   */
+  virtual TypeId GetInstanceTypeId (void) const;
+
+  virtual void Print (std::ostream& os) const;
+
+  /**
+   * \brief Get the serialized size of the packet.
+   * \return size
+   */
+  virtual uint32_t GetSerializedSize (void) const;
+
+  /**
+   * \brief Serialize the packet.
+   * \param start Buffer iterator
+   */
+  virtual void Serialize (Buffer::Iterator start) const;
+
+  /**
+   * \brief Deserialize the packet.
+   * \param start Buffer iterator
+   * \return size of the packet
+   */
+  virtual uint32_t Deserialize (Buffer::Iterator start);
+
+  /**
+   * \brief Get the NhcDispatch type.
+   * \return the NhcDispatch type
+   */
+  virtual SixLowPanDispatch::NhcDispatch_e GetNhcDispatchType (void) const;
+
+  /**
+   * \brief Set the compressed Src and Dst Ports.
+   * \param port Src and Dst the Ports
+   */
+  void SetPorts (Ports_e port);
+
+  /**
+   * \brief Get the compressed Src and Dst Ports.
+   * \return the Src and Dst Ports
+   */
+  Ports_e GetPorts (void) const;
+
+  /**
+   * \brief Set the Destination Port.
+   * \param port the Destination Port.
+   */
+  void SetSrcPort (uint16_t port);
+
+  /**
+   * \brief Get the Destination Port.
+   * \return the Destination Port.
+   */
+  uint16_t GetSrcPort () const;
+
+  /**
+   * \brief Set the Destination Port.
+   * \param port the Destination Port.
+   */
+  void SetDstPort (uint16_t port);
+
+  /**
+   * \brief Get the Destination Port.
+   * \return the Destination Port.
+   */
+  uint16_t GetDstPort () const;
+
+  /**
+   * \brief Set the C (Checksum).
+   * \param cField false (All checksum carried in-line), true (Checksum elided)
+   */
+  void SetC (bool cField);
+
+  /**
+   * \brief Get the C (Checksum).
+   * \return false (All checksum carried in-line), true (Checksum elided)
+   */
+  bool GetC (void) const;
+
+  /**
+   * \brief Set the Checksum field values.
+   * \param checksum the Checksum field value
+   */
+  void SetChecksum (uint16_t checksum);
+
+  /**
+   * \brief Get the Checksum field value.
+   * \return the Checksum field value
+   */
+  uint16_t GetChecksum (void) const;
+
+private:
+  uint8_t m_baseFormat; //!< Dispatch + encoding fields
+  uint16_t m_checksum;  //!< Checksum
+  uint16_t m_srcPort;   //!< Source port
+  uint16_t m_dstPort;   //!< Destination port
+};
+
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param header the UDP NHC Extension Header
+ * \returns the reference to the output stream
+ */
+std::ostream & operator<< (std::ostream & os, SixLowPanUdpNhcExtension const &header);
+
+}
+
+#endif /* SIXLOWPANHEADER_H_ */
diff -Naur ns-3.18.1/src/sixlowpan/model/sixlowpan-net-device.cc ns-3.19/src/sixlowpan/model/sixlowpan-net-device.cc
--- ns-3.18.1/src/sixlowpan/model/sixlowpan-net-device.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/sixlowpan/model/sixlowpan-net-device.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,2118 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Universita' di Firenze, Italy
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ *         Michele Muccio <michelemuccio@virgilio.it>
+ */
+
+#include "ns3/node.h"
+#include "ns3/channel.h"
+#include "ns3/packet.h"
+#include "ns3/log.h"
+#include "ns3/boolean.h"
+#include "ns3/abort.h"
+#include "ns3/simulator.h"
+#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"
+#include "ns3/unused.h"
+#include "ns3/ipv6-l3-protocol.h"
+#include "ns3/ipv6-extension-header.h"
+#include "ns3/udp-header.h"
+#include "ns3/udp-l4-protocol.h"
+#include "sixlowpan-net-device.h"
+#include "sixlowpan-header.h"
+
+NS_LOG_COMPONENT_DEFINE ("SixLowPanNetDevice")
+  ;
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (SixLowPanNetDevice)
+  ;
+
+TypeId SixLowPanNetDevice::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::SixLowPanNetDevice")
+    .SetParent<NetDevice> ()
+    .AddConstructor<SixLowPanNetDevice> ()
+    .AddAttribute ("Rfc6282", "Use RFC6282 (IPHC) if true, RFC4944 (HC1) otherwise.",
+                   BooleanValue (true),
+                   MakeBooleanAccessor (&SixLowPanNetDevice::m_useIphc),
+                   MakeBooleanChecker ())
+    .AddAttribute ("OmitUdpChecksum",
+                   "Omit the UDP checksum in IPHC compression.",
+                   BooleanValue (true),
+                   MakeBooleanAccessor (&SixLowPanNetDevice::m_omitUdpChecksum),
+                   MakeBooleanChecker ())
+    .AddAttribute ("FragmentReassemblyListSize", "The maximum size of the reassembly buffer (in packets). Zero meaning infinite.",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&SixLowPanNetDevice::m_fragmentReassemblyListSize),
+                   MakeUintegerChecker<uint16_t> ())
+    .AddAttribute ("FragmentExpirationTimeout",
+                   "When this timeout expires, the fragments will be cleared from the buffer.",
+                   TimeValue (Seconds (60)),
+                   MakeTimeAccessor (&SixLowPanNetDevice::m_fragmentExpirationTimeout),
+                   MakeTimeChecker ())
+    .AddAttribute ("ForceEtherType",
+                   "Force a specific EtherType in L2 frames.",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&SixLowPanNetDevice::m_forceEtherType),
+                   MakeBooleanChecker ())
+    .AddAttribute ("EtherType",
+                   "The specific EtherType to be used in L2 frames.",
+                   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))
+  ;
+  return tid;
+}
+
+SixLowPanNetDevice::SixLowPanNetDevice ()
+  : m_node (0),
+    m_netDevice (0),
+    m_ifIndex (0)
+{
+  NS_LOG_FUNCTION (this);
+  m_netDevice = 0;
+  m_rng = CreateObject<UniformRandomVariable> ();
+}
+
+Ptr<NetDevice> SixLowPanNetDevice::GetNetDevice () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_netDevice;
+}
+
+void SixLowPanNetDevice::SetNetDevice (Ptr<NetDevice> device)
+{
+  NS_LOG_FUNCTION (this << device);
+  m_netDevice = device;
+
+  NS_LOG_DEBUG ("RegisterProtocolHandler for " << device->GetInstanceTypeId ().GetName ());
+
+  uint16_t protocolType = 0;
+  if ( m_forceEtherType )
+    {
+      protocolType = m_etherType;
+    }
+  m_node->RegisterProtocolHandler (MakeCallback (&SixLowPanNetDevice::ReceiveFromDevice,
+                                                 this),
+                                   protocolType, device, false);
+}
+
+int64_t SixLowPanNetDevice::AssignStreams (int64_t stream)
+{
+  NS_LOG_FUNCTION (this << stream);
+  m_rng->SetStream (stream);
+  return 1;
+}
+
+void SixLowPanNetDevice::DoDispose ()
+{
+  NS_LOG_FUNCTION (this);
+
+  m_netDevice = 0;
+  m_node = 0;
+
+  for (MapFragmentsTimersI_t iter = m_fragmentsTimers.begin (); iter != m_fragmentsTimers.end (); iter++)
+    {
+      iter->second.Cancel ();
+    }
+  m_fragmentsTimers.clear ();
+
+  for (MapFragmentsI_t iter = m_fragments.begin (); iter != m_fragments.end (); iter++)
+    {
+      iter->second = 0;
+    }
+  m_fragments.clear ();
+
+  NetDevice::DoDispose ();
+}
+
+void SixLowPanNetDevice::ReceiveFromDevice (Ptr<NetDevice> incomingPort,
+                                            Ptr<const Packet> packet,
+                                            uint16_t protocol,
+                                            Address const &src,
+                                            Address const &dst,
+                                            PacketType packetType)
+{
+  NS_LOG_FUNCTION (this << incomingPort << packet << protocol << src << dst);
+  NS_LOG_DEBUG ("UID is " << packet->GetUid ());
+
+  uint8_t dispatchRawVal = 0;
+  SixLowPanDispatch::Dispatch_e dispatchVal;
+  Ptr<Packet> copyPkt = packet->Copy ();
+
+  m_rxTrace (copyPkt, m_node->GetObject<SixLowPanNetDevice> (), GetIfIndex ());
+
+  copyPkt->CopyData (&dispatchRawVal, sizeof(dispatchRawVal));
+  dispatchVal = SixLowPanDispatch::GetDispatchType (dispatchRawVal);
+  bool isPktDecompressed = false;
+  bool fragmented = false;
+
+  NS_LOG_DEBUG ( "Packet received: " << *copyPkt );
+  NS_LOG_DEBUG ( "Packet length: " << copyPkt->GetSize () );
+  NS_LOG_DEBUG ( "Dispatches: " << int(dispatchRawVal) << " - " << int(dispatchVal) );
+
+  if ( dispatchVal == SixLowPanDispatch::LOWPAN_FRAG1 )
+    {
+      isPktDecompressed = ProcessFragment (copyPkt, src, dst, true);
+      fragmented = true;
+    }
+  else if ( dispatchVal == SixLowPanDispatch::LOWPAN_FRAGN )
+    {
+      isPktDecompressed = ProcessFragment (copyPkt, src, dst, false);
+      fragmented = true;
+    }
+  if ( fragmented )
+    {
+      if ( !isPktDecompressed )
+        {
+          return;
+        }
+      else
+        {
+          copyPkt->CopyData (&dispatchRawVal, sizeof(dispatchRawVal));
+          dispatchVal = SixLowPanDispatch::GetDispatchType (dispatchRawVal);
+        }
+    }
+
+  switch ( dispatchVal )
+    {
+    case SixLowPanDispatch::LOWPAN_MESH:
+      NS_LOG_DEBUG ("Unsupported 6LoWPAN encoding: MESH, dropping.");
+      m_dropTrace (DROP_UNKNOWN_EXTENSION, copyPkt, m_node->GetObject<SixLowPanNetDevice> (), GetIfIndex ());
+      break;
+    case SixLowPanDispatch::LOWPAN_BC0:
+      NS_LOG_DEBUG ("Unsupported 6LoWPAN encoding: BC0, dropping.");
+      m_dropTrace (DROP_UNKNOWN_EXTENSION, copyPkt, m_node->GetObject<SixLowPanNetDevice> (), GetIfIndex ());
+      break;
+    case SixLowPanDispatch::LOWPAN_NOTCOMPRESSED:
+      NS_LOG_DEBUG ( "Packet without compression:" << *copyPkt );
+      NS_LOG_DEBUG ( "Packet length:" << copyPkt->GetSize () );
+      m_dropTrace (DROP_UNKNOWN_EXTENSION, copyPkt, m_node->GetObject<SixLowPanNetDevice> (), GetIfIndex ());
+      break;
+    case SixLowPanDispatch::LOWPAN_HC1:
+      DecompressLowPanHc1 (copyPkt, src, dst);
+      isPktDecompressed = true;
+      break;
+    case SixLowPanDispatch::LOWPAN_IPHC:
+      DecompressLowPanIphc (copyPkt, src, dst);
+      isPktDecompressed = true;
+      break;
+    default:
+      NS_LOG_DEBUG ("Unsupported 6LoWPAN encoding: dropping.");
+      m_dropTrace (DROP_UNKNOWN_EXTENSION, copyPkt, m_node->GetObject<SixLowPanNetDevice> (), GetIfIndex ());
+      break;
+    }
+
+  if ( !isPktDecompressed )
+    {
+      return;
+    }
+
+  NS_LOG_DEBUG ( "Packet decompressed length: " << copyPkt->GetSize () );
+  NS_LOG_DEBUG ( "Packet decompressed received: " << *copyPkt );
+
+  if (!m_promiscRxCallback.IsNull ())
+    {
+      m_promiscRxCallback (this, copyPkt, Ipv6L3Protocol::PROT_NUMBER, src, dst, packetType);
+    }
+
+  m_rxCallback (this, copyPkt, Ipv6L3Protocol::PROT_NUMBER, src);
+
+  return;
+}
+
+void SixLowPanNetDevice::SetIfIndex (const uint32_t index)
+{
+  NS_LOG_FUNCTION (this << index);
+  // NS_ASSERT_MSG ( m_port != 0, "Sixlowpan: can't find any lower-layer protocol " << m_port );
+  m_ifIndex = index;
+}
+
+uint32_t SixLowPanNetDevice::GetIfIndex (void) const
+{
+  NS_LOG_FUNCTION (this);
+  // NS_ASSERT_MSG ( m_port != 0, "Sixlowpan: can't find any lower-layer protocol " << m_port );
+  return m_netDevice->GetIfIndex ();
+}
+
+Ptr<Channel> SixLowPanNetDevice::GetChannel (void) const
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT_MSG ( m_netDevice != 0, "Sixlowpan: can't find any lower-layer protocol " << m_netDevice );
+
+  return m_netDevice->GetChannel ();
+}
+
+void SixLowPanNetDevice::SetAddress (Address address)
+{
+  NS_LOG_FUNCTION (this << address);
+  NS_ASSERT_MSG ( m_netDevice != 0, "Sixlowpan: can't find any lower-layer protocol " << m_netDevice );
+
+  m_netDevice->SetAddress (address);
+}
+
+Address SixLowPanNetDevice::GetAddress (void) const
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT_MSG ( m_netDevice != 0, "Sixlowpan: can't find any lower-layer protocol " << m_netDevice );
+
+  return m_netDevice->GetAddress ();
+}
+
+bool SixLowPanNetDevice::SetMtu (const uint16_t mtu)
+{
+  NS_LOG_FUNCTION (this << mtu);
+  NS_ASSERT_MSG ( m_netDevice != 0, "Sixlowpan: can't find any lower-layer protocol " << m_netDevice );
+
+  return m_netDevice->SetMtu (mtu);
+}
+
+uint16_t SixLowPanNetDevice::GetMtu (void) const
+{
+  NS_LOG_FUNCTION (this);
+
+  uint16_t mtu = m_netDevice->GetMtu ();
+
+  // RFC 4944, section 4.
+  if (mtu < 1280)
+    {
+      mtu = 1280;
+    }
+  return mtu;
+}
+
+bool SixLowPanNetDevice::IsLinkUp (void) const
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT_MSG ( m_netDevice != 0, "Sixlowpan: can't find any lower-layer protocol " << m_netDevice );
+
+  return m_netDevice->IsLinkUp ();
+}
+
+void SixLowPanNetDevice::AddLinkChangeCallback (Callback<void> callback)
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT_MSG ( m_netDevice != 0, "Sixlowpan: can't find any lower-layer protocol " << m_netDevice );
+
+  return m_netDevice->AddLinkChangeCallback (callback);
+}
+
+bool SixLowPanNetDevice::IsBroadcast (void) const
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT_MSG ( m_netDevice != 0, "Sixlowpan: can't find any lower-layer protocol " << m_netDevice );
+
+  return m_netDevice->IsBroadcast ();
+}
+
+Address SixLowPanNetDevice::GetBroadcast (void) const
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT_MSG ( m_netDevice != 0, "Sixlowpan: can't find any lower-layer protocol " << m_netDevice );
+
+  return m_netDevice->GetBroadcast ();
+}
+
+bool SixLowPanNetDevice::IsMulticast (void) const
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT_MSG ( m_netDevice != 0, "Sixlowpan: can't find any lower-layer protocol " << m_netDevice );
+
+  return m_netDevice->IsMulticast ();
+}
+
+Address SixLowPanNetDevice::GetMulticast (Ipv4Address multicastGroup) const
+{
+  NS_LOG_FUNCTION (this << multicastGroup);
+  NS_ASSERT_MSG ( m_netDevice != 0, "Sixlowpan: can't find any lower-layer protocol " << m_netDevice );
+
+  return m_netDevice->GetMulticast (multicastGroup);
+}
+
+Address SixLowPanNetDevice::GetMulticast (Ipv6Address addr) const
+{
+  NS_LOG_FUNCTION (this << addr);
+  NS_ASSERT_MSG ( m_netDevice != 0, "Sixlowpan: can't find any lower-layer protocol " << m_netDevice );
+
+  return m_netDevice->GetMulticast (addr);
+}
+
+bool SixLowPanNetDevice::IsPointToPoint (void) const
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT_MSG ( m_netDevice != 0, "Sixlowpan: can't find any lower-layer protocol " << m_netDevice );
+
+  return m_netDevice->IsPointToPoint ();
+}
+
+bool SixLowPanNetDevice::IsBridge (void) const
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT_MSG ( m_netDevice != 0, "Sixlowpan: can't find any lower-layer protocol " << m_netDevice );
+
+  return m_netDevice->IsBridge ();
+}
+
+bool SixLowPanNetDevice::Send (Ptr<Packet> packet,
+                               const Address& dest,
+                               uint16_t protocolNumber)
+{
+  NS_LOG_FUNCTION (this << *packet << dest << protocolNumber);
+  NS_ASSERT_MSG ( m_netDevice != 0, "Sixlowpan: can't find any lower-layer protocol " << m_netDevice );
+
+  uint32_t origHdrSize = 0;
+  uint32_t origPacketSize = packet->GetSize ();
+  bool ret = false;
+
+  if (m_forceEtherType)
+    {
+      protocolNumber = m_etherType;
+    }
+
+  if (m_useIphc)
+    {
+      origHdrSize += CompressLowPanIphc (packet, m_netDevice->GetAddress (), dest);
+    }
+  else
+    {
+      origHdrSize += CompressLowPanHc1 (packet, m_netDevice->GetAddress (), dest);
+    }
+
+  if ( packet->GetSize () > m_netDevice->GetMtu () )
+    {
+      NS_LOG_LOGIC ("Fragmentation: Packet size " << packet->GetSize () << " - Mtu " << m_netDevice->GetMtu () );
+      // fragment
+      std::list<Ptr<Packet> > fragmentList;
+      DoFragmentation (packet, origPacketSize, origHdrSize, fragmentList);
+      std::list<Ptr<Packet> >::iterator it;
+      bool success = true;
+      for ( it = fragmentList.begin (); it != fragmentList.end (); it++ )
+        {
+          NS_LOG_DEBUG ( "SixLowPanNetDevice::Send (Fragment) " << **it );
+          m_txTrace (*it, m_node->GetObject<SixLowPanNetDevice> (), GetIfIndex ());
+          success &= m_netDevice->Send (*it, dest, protocolNumber);
+        }
+      ret = success;
+    }
+  else
+    {
+      NS_LOG_DEBUG ( "SixLowPanNetDevice::Send " << m_node->GetId () << " " << *packet );
+      m_txTrace (packet, m_node->GetObject<SixLowPanNetDevice> (), GetIfIndex ());
+      ret = m_netDevice->Send (packet, dest, protocolNumber);
+    }
+
+  return ret;
+}
+
+bool SixLowPanNetDevice::SendFrom (Ptr<Packet> packet,
+                                   const Address& src,
+                                   const Address& dest,
+                                   uint16_t protocolNumber)
+{
+  NS_LOG_FUNCTION (this << packet << src << dest << protocolNumber);
+  NS_ASSERT_MSG ( m_netDevice != 0, "Sixlowpan: can't find any lower-layer protocol " << m_netDevice );
+
+  uint32_t origHdrSize = 0;
+  uint32_t origPacketSize = packet->GetSize ();
+  bool ret = false;
+
+  if (m_forceEtherType)
+    {
+      protocolNumber = m_etherType;
+    }
+
+  if (m_useIphc)
+    {
+      origHdrSize += CompressLowPanIphc (packet, m_netDevice->GetAddress (), dest);
+    }
+  else
+    {
+      origHdrSize += CompressLowPanHc1 (packet, m_netDevice->GetAddress (), dest);
+    }
+
+  if ( packet->GetSize () > m_netDevice->GetMtu () )
+    {
+      // fragment
+      std::list<Ptr<Packet> > fragmentList;
+      DoFragmentation (packet, origPacketSize, origHdrSize, fragmentList);
+      std::list<Ptr<Packet> >::iterator it;
+      bool err = false;
+      for ( it = fragmentList.begin (); it != fragmentList.end (); it++ )
+        {
+          NS_LOG_DEBUG ( "SixLowPanNetDevice::SendFrom (Fragment) " << **it );
+          m_txTrace (*it, m_node->GetObject<SixLowPanNetDevice> (), GetIfIndex ());
+          err |= !(m_netDevice->SendFrom (*it, src, dest, protocolNumber));
+        }
+      ret = !err;
+    }
+  else
+    {
+      NS_LOG_DEBUG ( "SixLowPanNetDevice::SendFrom " << *packet );
+      m_txTrace (packet, m_node->GetObject<SixLowPanNetDevice> (), GetIfIndex ());
+      ret = m_netDevice->SendFrom (packet, src, dest, protocolNumber);
+    }
+
+  return ret;
+}
+
+Ptr<Node> SixLowPanNetDevice::GetNode (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_node;
+}
+
+void SixLowPanNetDevice::SetNode (Ptr<Node> node)
+{
+  NS_LOG_FUNCTION (this << node);
+  m_node = node;
+}
+
+bool SixLowPanNetDevice::NeedsArp (void) const
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT_MSG ( m_netDevice != 0, "Sixlowpan: can't find any lower-layer protocol " << m_netDevice );
+
+  return m_netDevice->NeedsArp ();
+}
+
+void SixLowPanNetDevice::SetReceiveCallback (NetDevice::ReceiveCallback cb)
+{
+  NS_LOG_FUNCTION (this << &cb);
+  m_rxCallback = cb;
+}
+
+void SixLowPanNetDevice::SetPromiscReceiveCallback (NetDevice::PromiscReceiveCallback cb)
+{
+  NS_LOG_FUNCTION (this << &cb);
+  m_promiscRxCallback = cb;
+}
+
+bool SixLowPanNetDevice::SupportsSendFrom () const
+{
+  NS_LOG_FUNCTION (this);
+  return true;
+}
+
+uint32_t
+SixLowPanNetDevice::CompressLowPanHc1 (Ptr<Packet> packet, Address const &src, Address const &dst)
+{
+  NS_LOG_FUNCTION (this << *packet << src << dst);
+
+  Ipv6Header ipHeader;
+  SixLowPanHc1 hc1Header;
+  uint32_t size = 0;
+
+  if ( packet->PeekHeader (ipHeader) != 0 )
+    {
+      packet->RemoveHeader (ipHeader);
+      size += ipHeader.GetSerializedSize ();
+
+      hc1Header.SetHopLimit (ipHeader.GetHopLimit ());
+
+      uint8_t bufOne[16];
+      uint8_t bufTwo[16];
+      Ipv6Address srcAddr = ipHeader.GetSourceAddress ();
+      srcAddr.GetBytes (bufOne);
+      Ipv6Address mySrcAddr = MakeLinkLocalAddressFromMac (src);
+
+      NS_LOG_LOGIC ("Checking source compression: " << mySrcAddr << " - " << srcAddr );
+
+      mySrcAddr.GetBytes (bufTwo);
+      bool isSrcSrc = (memcmp (bufOne + 8, bufTwo + 8, 8) == 0);
+
+      if (srcAddr.IsLinkLocal () && isSrcSrc )
+        {
+          hc1Header.SetSrcCompression (SixLowPanHc1::HC1_PCIC);
+        }
+      else if (srcAddr.IsLinkLocal () )
+        {
+          hc1Header.SetSrcCompression (SixLowPanHc1::HC1_PCII);
+          hc1Header.SetSrcInterface (bufOne + 8);
+        }
+      else if ( isSrcSrc )
+        {
+          hc1Header.SetSrcCompression (SixLowPanHc1::HC1_PIIC);
+          hc1Header.SetSrcPrefix (bufOne);
+        }
+      else
+        {
+          hc1Header.SetSrcCompression (SixLowPanHc1::HC1_PIII);
+          hc1Header.SetSrcInterface (bufOne + 8);
+          hc1Header.SetSrcPrefix (bufOne);
+        }
+
+      Ipv6Address dstAddr = ipHeader.GetDestinationAddress ();
+      dstAddr.GetBytes (bufOne);
+      Ipv6Address myDstAddr = MakeLinkLocalAddressFromMac (dst);
+
+      NS_LOG_LOGIC ("Checking destination compression: " << myDstAddr << " - " << dstAddr );
+
+      myDstAddr.GetBytes (bufTwo);
+      bool isDstDst = (memcmp (bufOne + 8, bufTwo + 8, 8) == 0);
+
+      if (dstAddr.IsLinkLocal () && isDstDst )
+        {
+          hc1Header.SetDstCompression (SixLowPanHc1::HC1_PCIC);
+        }
+      else if (dstAddr.IsLinkLocal () )
+        {
+          hc1Header.SetDstCompression (SixLowPanHc1::HC1_PCII);
+          hc1Header.SetDstInterface (bufOne + 8);
+        }
+      else if ( isDstDst )
+        {
+          hc1Header.SetDstCompression (SixLowPanHc1::HC1_PIIC);
+          hc1Header.SetDstPrefix (bufOne);
+        }
+      else
+        {
+          hc1Header.SetDstCompression (SixLowPanHc1::HC1_PIII);
+          hc1Header.SetDstInterface (bufOne + 8);
+          hc1Header.SetDstPrefix (bufOne);
+        }
+
+      if ( (ipHeader.GetFlowLabel () == 0) && (ipHeader.GetTrafficClass () == 0) )
+        {
+          hc1Header.SetTcflCompression (true);
+        }
+      else
+        {
+          hc1Header.SetTcflCompression (false);
+          hc1Header.SetTrafficClass (ipHeader.GetTrafficClass ());
+          hc1Header.SetFlowLabel (ipHeader.GetFlowLabel ());
+        }
+
+      uint8_t nextHeader = ipHeader.GetNextHeader ();
+      hc1Header.SetNextHeader (nextHeader);
+
+      // \todo implement HC2 compression
+      hc1Header.SetHc2HeaderPresent (false);
+
+      NS_LOG_DEBUG ("HC1 Compression - HC1 header size = " << hc1Header.GetSerializedSize () );
+      NS_LOG_DEBUG ("HC1 Compression - packet size = " << packet->GetSize () );
+
+      packet->AddHeader (hc1Header);
+
+      return size;
+    }
+
+  return 0;
+}
+
+void
+SixLowPanNetDevice::DecompressLowPanHc1 (Ptr<Packet> packet, Address const &src, Address const &dst)
+{
+  NS_LOG_FUNCTION (this << *packet << src << dst);
+
+  Ipv6Header ipHeader;
+  SixLowPanHc1 encoding;
+
+  uint32_t ret = packet->RemoveHeader (encoding);
+  NS_LOG_DEBUG ("removed " << ret << " bytes - pkt is " << *packet);
+  NS_UNUSED (ret);
+
+  ipHeader.SetHopLimit (encoding.GetHopLimit ());
+
+  switch (encoding.GetSrcCompression ())
+    {
+      const uint8_t* interface;
+      const uint8_t* prefix;
+      uint8_t address[16];
+
+    case SixLowPanHc1::HC1_PIII:
+      prefix = encoding.GetSrcPrefix ();
+      interface = encoding.GetSrcInterface ();
+      for (int j = 0; j < 8; j++)
+        {
+          address[j + 8] = interface[j];
+          address[j] = prefix[j];
+        }
+      ipHeader.SetSourceAddress ( Ipv6Address (address) );
+      break;
+    case SixLowPanHc1::HC1_PIIC:
+      prefix = encoding.GetSrcPrefix ();
+      for (int j = 0; j < 8; j++)
+        {
+          address[j + 8] = 0;
+          address[j] = prefix[j];
+        }
+      ipHeader.SetSourceAddress ( MakeGlobalAddressFromMac (src, Ipv6Address (address)));
+      break;
+    case SixLowPanHc1::HC1_PCII:
+      interface = encoding.GetSrcInterface ();
+      address[0] = 0xfe;
+      address[1] = 0x80;
+      for (int j = 0; j < 8; j++)
+        {
+          address[j + 8] = interface[j];
+        }
+      ipHeader.SetSourceAddress ( Ipv6Address (address) );
+      break;
+    case SixLowPanHc1::HC1_PCIC:
+      ipHeader.SetSourceAddress (MakeLinkLocalAddressFromMac (src));
+      break;
+    }
+
+  switch (encoding.GetDstCompression ())
+    {
+      const uint8_t* interface;
+      const uint8_t* prefix;
+      uint8_t address[16];
+
+    case SixLowPanHc1::HC1_PIII:
+      prefix = encoding.GetDstPrefix ();
+      interface = encoding.GetDstInterface ();
+      for (int j = 0; j < 8; j++)
+        {
+          address[j + 8] = interface[j];
+          address[j] = prefix[j];
+        }
+      ipHeader.SetDestinationAddress ( Ipv6Address (address) );
+      break;
+    case SixLowPanHc1::HC1_PIIC:
+      prefix = encoding.GetDstPrefix ();
+      for (int j = 0; j < 8; j++)
+        {
+          address[j + 8] = 0;
+          address[j] = prefix[j];
+        }
+      ipHeader.SetDestinationAddress ( MakeGlobalAddressFromMac (dst, Ipv6Address (address)));
+      break;
+    case SixLowPanHc1::HC1_PCII:
+      interface = encoding.GetDstInterface ();
+      address[0] = 0xfe;
+      address[1] = 0x80;
+      for (int j = 0; j < 8; j++)
+        {
+          address[j + 8] = interface[j];
+        }
+      ipHeader.SetDestinationAddress ( Ipv6Address (address) );
+      break;
+    case SixLowPanHc1::HC1_PCIC:
+      ipHeader.SetDestinationAddress (MakeLinkLocalAddressFromMac (dst));
+      break;
+    }
+
+  if ( !encoding.IsTcflCompression () )
+    {
+      ipHeader.SetFlowLabel (encoding.GetFlowLabel ());
+      ipHeader.SetTrafficClass (encoding.GetTrafficClass ());
+    }
+  else
+    {
+      ipHeader.SetFlowLabel (0);
+      ipHeader.SetTrafficClass (0);
+    }
+
+  ipHeader.SetNextHeader (encoding.GetNextHeader ());
+
+  ipHeader.SetPayloadLength (packet->GetSize ());
+
+  NS_ASSERT_MSG (encoding.IsHc2HeaderPresent () == false,
+                 "6LoWPAN: error in decompressing HC1 encoding, unsupported L4 compressed header present.");
+
+  packet->AddHeader (ipHeader);
+
+  NS_LOG_DEBUG ( "Rebuilt packet: " << *packet << " Size " << packet->GetSize () );
+}
+
+uint32_t
+SixLowPanNetDevice::CompressLowPanIphc (Ptr<Packet> packet, Address const &src, Address const &dst)
+{
+  NS_LOG_FUNCTION (this << *packet << src << dst);
+
+  Ipv6Header ipHeader;
+  SixLowPanIphc iphcHeader;
+  uint32_t size = 0;
+
+
+  if ( packet->PeekHeader (ipHeader) != 0 )
+    {
+      packet->RemoveHeader (ipHeader);
+      size += ipHeader.GetSerializedSize ();
+
+      // Set the TF field
+      if ( (ipHeader.GetFlowLabel () == 0) && (ipHeader.GetTrafficClass () == 0) )
+        {
+          iphcHeader.SetTf (SixLowPanIphc::TF_ELIDED);
+        }
+      else if ( (ipHeader.GetFlowLabel () != 0) && (ipHeader.GetTrafficClass () != 0) )
+        {
+          iphcHeader.SetTf (SixLowPanIphc::TF_FULL);
+          iphcHeader.SetEcn ( (ipHeader.GetTrafficClass () & 0xC0) >> 6);
+          iphcHeader.SetDscp ( ipHeader.GetTrafficClass () & 0x3F );
+          iphcHeader.SetFlowLabel (ipHeader.GetFlowLabel ());
+        }
+      else if ( (ipHeader.GetFlowLabel () == 0) && (ipHeader.GetTrafficClass () != 0) )
+        {
+          iphcHeader.SetTf (SixLowPanIphc::TF_FL_ELIDED);
+          iphcHeader.SetEcn ( (ipHeader.GetTrafficClass () & 0xC0) >> 6);
+          iphcHeader.SetDscp ( ipHeader.GetTrafficClass () & 0x3F );
+        }
+      else
+        {
+          iphcHeader.SetTf (SixLowPanIphc::TF_DSCP_ELIDED);
+          iphcHeader.SetEcn ( (ipHeader.GetTrafficClass () & 0xC0) >> 6);
+          iphcHeader.SetFlowLabel (ipHeader.GetFlowLabel ());
+        }
+
+      // Set the NH field and NextHeader
+
+      uint8_t nextHeader = ipHeader.GetNextHeader ();
+      if (CanCompressLowPanNhc (nextHeader))
+        {
+          if (nextHeader == Ipv6Header::IPV6_UDP)
+            {
+              iphcHeader.SetNh (true);
+              size += CompressLowPanUdpNhc (packet, m_omitUdpChecksum);
+            }
+          else if (nextHeader == Ipv6Header::IPV6_IPV6)
+            {
+              iphcHeader.SetNh (true);
+              size += CompressLowPanIphc (packet, src, dst);
+            }
+          else
+            {
+              uint32_t sizeNhc = CompressLowPanNhc (packet, nextHeader, src, dst);
+              // the compression might fail due to Extension header size.
+              if (sizeNhc)
+                {
+                  iphcHeader.SetNh (true);
+                  size += sizeNhc;
+                }
+              else
+                {
+                  iphcHeader.SetNh (false);
+                  iphcHeader.SetNextHeader (nextHeader);
+                }
+            }
+        }
+      else
+        {
+          iphcHeader.SetNh (false);
+          iphcHeader.SetNextHeader (nextHeader);
+        }
+
+
+      // Set the HLIM field
+      if (ipHeader.GetHopLimit () == 1)
+        {
+          iphcHeader.SetHlim (SixLowPanIphc::HLIM_COMPR_1);
+        }
+      else if (ipHeader.GetHopLimit () == 0x40)
+        {
+          iphcHeader.SetHlim (SixLowPanIphc::HLIM_COMPR_64);
+        }
+      else if (ipHeader.GetHopLimit () == 0xFF)
+        {
+          iphcHeader.SetHlim (SixLowPanIphc::HLIM_COMPR_255);
+        }
+      else
+        {
+          iphcHeader.SetHlim (SixLowPanIphc::HLIM_INLINE);
+          // Set the HopLimit
+          iphcHeader.SetHopLimit (ipHeader.GetHopLimit ());
+        }
+
+      // \todo Add the check of CID if there is context-based compression
+      // Set the CID field
+      iphcHeader.SetCid (false);
+
+      // \todo Add the check of SAC if there is context-based compression
+      // Set the SAC field
+      iphcHeader.SetSac (false);
+
+      uint8_t addressBuf[16];
+      uint8_t unicastAddrCheckerBuf[16];
+      Ipv6Address srcAddr = ipHeader.GetSourceAddress ();
+      srcAddr.GetBytes (addressBuf);
+
+      Ipv6Address checker = Ipv6Address ("fe80:0000:0000:0000:0000:00ff:fe00:1");
+      checker.GetBytes (unicastAddrCheckerBuf);
+
+      // \todo Add the check of SAC if there is context-based compression
+      // Set the Source Address
+      iphcHeader.SetSrcAddress (srcAddr);
+
+      Ipv6Address mySrcAddr = MakeLinkLocalAddressFromMac (src);
+      NS_LOG_LOGIC ("Checking source compression: " << mySrcAddr << " - " << srcAddr );
+
+      if ( mySrcAddr == srcAddr )
+        {
+          iphcHeader.SetSam (SixLowPanIphc::HC_COMPR_0);
+        }
+      else if (memcmp (addressBuf, unicastAddrCheckerBuf, 14) == 0)
+        {
+          iphcHeader.SetSam (SixLowPanIphc::HC_COMPR_16);
+        }
+      else if ( srcAddr.IsLinkLocal () )
+        {
+          iphcHeader.SetSam (SixLowPanIphc::HC_COMPR_64);
+        }
+      else
+        {
+          iphcHeader.SetSam (SixLowPanIphc::HC_INLINE);
+        }
+
+      // Set the M field
+      if (ipHeader.GetDestinationAddress ().IsMulticast ())
+        {
+          iphcHeader.SetM (true);
+        }
+      else
+        {
+          iphcHeader.SetM (false);
+        }
+
+      // \todo Add the check of DAC if there is context-based compression
+      // Set the DAC field
+      iphcHeader.SetDac (false);
+
+      Ipv6Address dstAddr = ipHeader.GetDestinationAddress ();
+      dstAddr.GetBytes (addressBuf);
+
+      // \todo Add the check of DAC if there is context-based compression
+      // Set the Destination Address
+      iphcHeader.SetDstAddress (dstAddr);
+
+      Ipv6Address myDstAddr = MakeLinkLocalAddressFromMac (dst);
+      NS_LOG_LOGIC ("Checking destination compression: " << myDstAddr << " - " << dstAddr );
+
+      if ( !iphcHeader.GetM () )
+      // Unicast address
+        {
+          if ( myDstAddr == dstAddr )
+            {
+              iphcHeader.SetDam (SixLowPanIphc::HC_COMPR_0);
+            }
+          else if (memcmp (addressBuf, unicastAddrCheckerBuf, 14) == 0)
+            {
+              iphcHeader.SetDam (SixLowPanIphc::HC_COMPR_16);
+            }
+          else if ( dstAddr.IsLinkLocal () )
+            {
+              iphcHeader.SetDam (SixLowPanIphc::HC_COMPR_64);
+            }
+          else
+            {
+              iphcHeader.SetDam (SixLowPanIphc::HC_INLINE);
+            }
+        }
+      else
+        {
+          // Multicast address
+          uint8_t multicastAddrCheckerBuf[16];
+          Ipv6Address multicastCheckAddress = Ipv6Address ("ff02::1");
+          multicastCheckAddress.GetBytes (multicastAddrCheckerBuf);
+
+          // The address takes the form ff02::00XX.
+          if ( memcmp (addressBuf, multicastAddrCheckerBuf, 15) == 0 )
+            {
+              iphcHeader.SetDam (SixLowPanIphc::HC_COMPR_0);
+            }
+          // The address takes the form ffXX::00XX:XXXX.
+          //                            ffXX:0000:0000:0000:0000:0000:00XX:XXXX.
+          else if ( (addressBuf[0] == multicastAddrCheckerBuf[0])
+                    && (memcmp (addressBuf + 2, multicastAddrCheckerBuf + 2, 11) ) )
+            {
+              iphcHeader.SetDam (SixLowPanIphc::HC_COMPR_16);
+            }
+          // The address takes the form ffXX::00XX:XXXX:XXXX.
+          //                            ffXX:0000:0000:0000:0000:00XX:XXXX:XXXX.
+          else if ( (addressBuf[0] == multicastAddrCheckerBuf[0])
+                    && (memcmp (addressBuf + 2, multicastAddrCheckerBuf + 2, 9) ) )
+            {
+              iphcHeader.SetDam (SixLowPanIphc::HC_COMPR_64);
+            }
+          else
+            {
+              iphcHeader.SetDam (SixLowPanIphc::HC_INLINE);
+            }
+        }
+
+      NS_LOG_DEBUG ("IPHC Compression - IPHC header size = " << iphcHeader.GetSerializedSize () );
+      NS_LOG_DEBUG ("IPHC Compression - packet size = " << packet->GetSize () );
+
+      packet->AddHeader (iphcHeader);
+
+      NS_LOG_DEBUG ("Packet after IPHC compression: " << *packet);
+
+      return size;
+    }
+
+  return 0;
+}
+
+bool
+SixLowPanNetDevice::CanCompressLowPanNhc (uint8_t nextHeader)
+{
+  bool ret = false;
+
+  switch (nextHeader)
+    {
+    case Ipv6Header::IPV6_UDP:
+    case Ipv6Header::IPV6_EXT_HOP_BY_HOP:
+    case Ipv6Header::IPV6_EXT_ROUTING:
+    case Ipv6Header::IPV6_EXT_FRAGMENTATION:
+    case Ipv6Header::IPV6_IPV6:
+      ret = true;
+      break;
+    case Ipv6Header::IPV6_EXT_MOBILITY:
+    default:
+      ret = false;
+    }
+  return ret;
+}
+
+void
+SixLowPanNetDevice::DecompressLowPanIphc (Ptr<Packet> packet, Address const &src, Address const &dst)
+{
+  NS_LOG_FUNCTION (this << *packet << src << dst);
+
+  Ipv6Header ipHeader;
+  SixLowPanIphc encoding;
+
+  uint32_t ret = packet->RemoveHeader (encoding);
+  NS_LOG_DEBUG ("removed " << ret << " bytes - pkt is " << *packet);
+  NS_UNUSED (ret);
+
+  // Hop Limit
+  ipHeader.SetHopLimit (encoding.GetHopLimit ());
+
+  // Source address
+  if ( encoding.GetSac () )
+    {
+      if ( encoding.GetSam () == SixLowPanIphc::HC_INLINE )
+        {
+          ipHeader.SetSourceAddress ( Ipv6Address::GetAny () );
+        }
+      else
+        {
+          NS_ABORT_MSG ("SAC option not yet implemented");
+        }
+    }
+  else
+    {
+      if ( encoding.GetSam () == SixLowPanIphc::HC_COMPR_0 )
+        {
+          ipHeader.SetSourceAddress (MakeLinkLocalAddressFromMac (src));
+        }
+      else
+        {
+          ipHeader.SetSourceAddress ( encoding.GetSrcAddress () );
+        }
+    }
+  // Destination address
+  if ( encoding.GetDac () )
+    {
+      if ((encoding.GetDam () == SixLowPanIphc::HC_INLINE  && !encoding.GetM ())
+          || (encoding.GetDam () == SixLowPanIphc::HC_COMPR_64  && encoding.GetM ())
+          || (encoding.GetDam () == SixLowPanIphc::HC_COMPR_16  && encoding.GetM ())
+          || (encoding.GetDam () == SixLowPanIphc::HC_COMPR_0  && encoding.GetM ()) )
+        {
+          NS_ABORT_MSG ("Reserved code found");
+        }
+      else
+        {
+          NS_ABORT_MSG ("DAC option not yet implemented");
+        }
+    }
+  else
+    {
+      if ( !encoding.GetM () && encoding.GetDam () == SixLowPanIphc::HC_COMPR_0 )
+        {
+          ipHeader.SetDestinationAddress (MakeLinkLocalAddressFromMac (dst));
+        }
+      else
+        {
+          ipHeader.SetDestinationAddress ( encoding.GetDstAddress () );
+        }
+    }
+
+  // Traffic class and Flow Label
+  uint8_t traf = 0x00;
+  switch (encoding.GetTf ())
+    {
+    case SixLowPanIphc::TF_FULL:
+      traf |= encoding.GetEcn ();
+      traf = ( traf << 6 ) | encoding.GetDscp ();
+      ipHeader.SetTrafficClass (traf);
+      ipHeader.SetFlowLabel ( encoding.GetFlowLabel () & 0xfff ); //Add 4-bit pad
+      break;
+    case SixLowPanIphc::TF_DSCP_ELIDED:
+      traf |= encoding.GetEcn ();
+      traf <<= 2;   // Add 2-bit pad
+      ipHeader.SetTrafficClass (traf);
+      ipHeader.SetFlowLabel (encoding.GetFlowLabel ());
+      break;
+    case SixLowPanIphc::TF_FL_ELIDED:
+      traf |= encoding.GetEcn ();
+      traf = ( traf << 6 ) | encoding.GetDscp ();
+      ipHeader.SetTrafficClass (traf);
+      ipHeader.SetFlowLabel (0);
+      break;
+    case SixLowPanIphc::TF_ELIDED:
+      ipHeader.SetFlowLabel (0);
+      ipHeader.SetTrafficClass (0);
+      break;
+    }
+
+  if ( encoding.GetNh () )
+    {
+      // Next Header
+      uint8_t dispatchRawVal = 0;
+      SixLowPanDispatch::NhcDispatch_e dispatchVal;
+
+      packet->CopyData (&dispatchRawVal, sizeof(dispatchRawVal));
+      dispatchVal = SixLowPanDispatch::GetNhcDispatchType (dispatchRawVal);
+
+      if (dispatchVal == SixLowPanDispatch::LOWPAN_UDPNHC)
+        {
+          ipHeader.SetNextHeader (Ipv6Header::IPV6_UDP);
+          DecompressLowPanUdpNhc (packet, ipHeader.GetSourceAddress (), ipHeader.GetDestinationAddress ());
+        }
+      else
+        {
+          ipHeader.SetNextHeader (DecompressLowPanNhc (packet, src, dst, ipHeader.GetSourceAddress (), ipHeader.GetDestinationAddress ()));
+        }
+    }
+  else
+    {
+      ipHeader.SetNextHeader (encoding.GetNextHeader ());
+    }
+
+  ipHeader.SetPayloadLength (packet->GetSize ());
+
+  packet->AddHeader (ipHeader);
+
+  NS_LOG_DEBUG ( "Rebuilt packet: " << *packet << " Size " << packet->GetSize () );
+
+}
+
+uint32_t
+SixLowPanNetDevice::CompressLowPanNhc (Ptr<Packet> packet, uint8_t headerType, Address const &src, Address const &dst)
+{
+  NS_LOG_FUNCTION (this << *packet << int(headerType));
+
+  SixLowPanNhcExtension nhcHeader;
+  uint32_t size = 0;
+  Buffer blob;
+
+  if (headerType == Ipv6Header::IPV6_EXT_HOP_BY_HOP)
+    {
+      Ipv6ExtensionHopByHopHeader hopHeader;
+      packet->PeekHeader (hopHeader);
+      if (hopHeader.GetLength () >= 0xff)
+        {
+          NS_LOG_DEBUG ("LOWPAN_NHC MUST NOT be used to encode IPv6 Extension Headers "
+                        "that have more than 255 octets following the Length field after compression. "
+                        "Packet uncompressed.");
+          return 0;
+        }
+
+      size += packet->RemoveHeader (hopHeader);
+      nhcHeader.SetEid (SixLowPanNhcExtension::EID_HOPBYHOP_OPTIONS_H);
+
+      // recursively compress other headers
+      uint8_t nextHeader = hopHeader.GetNextHeader ();
+      if (CanCompressLowPanNhc (nextHeader))
+        {
+          if (nextHeader == Ipv6Header::IPV6_UDP)
+            {
+              nhcHeader.SetNh (true);
+              size += CompressLowPanUdpNhc (packet, m_omitUdpChecksum);
+            }
+          else if (nextHeader == Ipv6Header::IPV6_IPV6)
+            {
+              nhcHeader.SetNh (true);
+              size += CompressLowPanIphc (packet, src, dst);
+            }
+          else
+            {
+              uint32_t sizeNhc = CompressLowPanNhc (packet, nextHeader, src, dst);
+              // the compression might fail due to Extension header size.
+              if (sizeNhc)
+                {
+                  nhcHeader.SetNh (true);
+                  size += sizeNhc;
+                }
+              else
+                {
+                  nhcHeader.SetNh (false);
+                  nhcHeader.SetNextHeader (nextHeader);
+                }
+            }
+        }
+      else
+        {
+          nhcHeader.SetNh (false);
+          nhcHeader.SetNextHeader (nextHeader);
+        }
+
+      uint32_t blobSize = hopHeader.GetSerializedSize ();
+      blob.AddAtStart (blobSize);
+      hopHeader.Serialize (blob.Begin ());
+      blob.RemoveAtStart (2);
+      blobSize = blob.GetSize ();
+      nhcHeader.SetBlob (blob.PeekData (), blobSize);
+    }
+  else if (headerType == Ipv6Header::IPV6_EXT_ROUTING)
+    {
+      Ipv6ExtensionRoutingHeader routingHeader;
+      packet->PeekHeader (routingHeader);
+      if (routingHeader.GetLength () >= 0xff)
+        {
+          NS_LOG_DEBUG ("LOWPAN_NHC MUST NOT be used to encode IPv6 Extension Headers "
+                        "that have more than 255 octets following the Length field after compression. "
+                        "Packet uncompressed.");
+          return 0;
+        }
+
+      size += packet->RemoveHeader (routingHeader);
+      nhcHeader.SetEid (SixLowPanNhcExtension::EID_ROUTING_H);
+
+      // recursively compress other headers
+      uint8_t nextHeader = routingHeader.GetNextHeader ();
+      if (CanCompressLowPanNhc (nextHeader))
+        {
+          if (nextHeader == Ipv6Header::IPV6_UDP)
+            {
+              nhcHeader.SetNh (true);
+              size += CompressLowPanUdpNhc (packet, m_omitUdpChecksum);
+            }
+          else if (nextHeader == Ipv6Header::IPV6_IPV6)
+            {
+              nhcHeader.SetNh (true);
+              size += CompressLowPanIphc (packet, src, dst);
+            }
+          else
+            {
+              uint32_t sizeNhc = CompressLowPanNhc (packet, nextHeader, src, dst);
+              // the compression might fail due to Extension header size.
+              if (sizeNhc)
+                {
+                  nhcHeader.SetNh (true);
+                  size += sizeNhc;
+                }
+              else
+                {
+                  nhcHeader.SetNh (false);
+                  nhcHeader.SetNextHeader (nextHeader);
+                }
+            }
+        }
+      else
+        {
+          nhcHeader.SetNh (false);
+          nhcHeader.SetNextHeader (nextHeader);
+        }
+
+      uint32_t blobSize = routingHeader.GetSerializedSize ();
+      blob.AddAtStart (blobSize);
+      routingHeader.Serialize (blob.Begin ());
+      blob.RemoveAtStart (2);
+      blobSize = blob.GetSize ();
+      nhcHeader.SetBlob (blob.PeekData (), blobSize);
+    }
+  else if (headerType == Ipv6Header::IPV6_EXT_FRAGMENTATION)
+    {
+      Ipv6ExtensionFragmentHeader fragHeader;
+      packet->PeekHeader (fragHeader);
+      if (fragHeader.GetLength () >= 0xff)
+        {
+          NS_LOG_DEBUG ("LOWPAN_NHC MUST NOT be used to encode IPv6 Extension Headers "
+                        "that have more than 255 octets following the Length field after compression. "
+                        "Packet uncompressed.");
+          return 0;
+        }
+      size += packet->RemoveHeader (fragHeader);
+      nhcHeader.SetEid (SixLowPanNhcExtension::EID_FRAGMENTATION_H);
+
+      // recursively compress other headers
+      uint8_t nextHeader = fragHeader.GetNextHeader ();
+      if (CanCompressLowPanNhc (nextHeader))
+        {
+          if (nextHeader == Ipv6Header::IPV6_UDP)
+            {
+              nhcHeader.SetNh (true);
+              size += CompressLowPanUdpNhc (packet, m_omitUdpChecksum);
+            }
+          else if (nextHeader == Ipv6Header::IPV6_IPV6)
+            {
+              nhcHeader.SetNh (true);
+              size += CompressLowPanIphc (packet, src, dst);
+            }
+          else
+            {
+              uint32_t sizeNhc = CompressLowPanNhc (packet, nextHeader, src, dst);
+              // the compression might fail due to Extension header size.
+              if (sizeNhc)
+                {
+                  nhcHeader.SetNh (true);
+                  size += sizeNhc;
+                }
+              else
+                {
+                  nhcHeader.SetNh (false);
+                  nhcHeader.SetNextHeader (nextHeader);
+                }
+            }
+        }
+      else
+        {
+          nhcHeader.SetNh (false);
+          nhcHeader.SetNextHeader (nextHeader);
+        }
+
+      uint32_t blobSize = fragHeader.GetSerializedSize ();
+      blob.AddAtStart (blobSize);
+      fragHeader.Serialize (blob.Begin ());
+      blob.RemoveAtStart (2);
+      blobSize = blob.GetSize ();
+      nhcHeader.SetBlob (blob.PeekData (), blobSize);
+    }
+  else if (headerType == Ipv6Header::IPV6_EXT_DESTINATION)
+    {
+      Ipv6ExtensionDestinationHeader destHeader;
+      packet->PeekHeader (destHeader);
+      if (destHeader.GetLength () >= 0xff)
+        {
+          NS_LOG_DEBUG ("LOWPAN_NHC MUST NOT be used to encode IPv6 Extension Headers "
+                        "that have more than 255 octets following the Length field after compression. "
+                        "Packet uncompressed.");
+          return 0;
+        }
+      size += packet->RemoveHeader (destHeader);
+      nhcHeader.SetEid (SixLowPanNhcExtension::EID_DESTINATION_OPTIONS_H);
+
+      // recursively compress other headers
+      uint8_t nextHeader = destHeader.GetNextHeader ();
+      if (CanCompressLowPanNhc (nextHeader))
+        {
+          if (nextHeader == Ipv6Header::IPV6_UDP)
+            {
+              nhcHeader.SetNh (true);
+              size += CompressLowPanUdpNhc (packet, m_omitUdpChecksum);
+            }
+          else if (nextHeader == Ipv6Header::IPV6_IPV6)
+            {
+              nhcHeader.SetNh (true);
+              size += CompressLowPanIphc (packet, src, dst);
+            }
+          else
+            {
+              uint32_t sizeNhc = CompressLowPanNhc (packet, nextHeader, src, dst);
+              // the compression might fail due to Extension header size.
+              if (sizeNhc)
+                {
+                  nhcHeader.SetNh (true);
+                  size += sizeNhc;
+                }
+              else
+                {
+                  nhcHeader.SetNh (false);
+                  nhcHeader.SetNextHeader (nextHeader);
+                }
+            }
+        }
+      else
+        {
+          nhcHeader.SetNh (false);
+          nhcHeader.SetNextHeader (nextHeader);
+        }
+
+      uint32_t blobSize = destHeader.GetSerializedSize ();
+      blob.AddAtStart (blobSize);
+      destHeader.Serialize (blob.Begin ());
+      blob.RemoveAtStart (2);
+      blobSize = blob.GetSize ();
+      nhcHeader.SetBlob (blob.PeekData (), blobSize);
+    }
+  else if (headerType == Ipv6Header::IPV6_EXT_MOBILITY)
+    {
+      // \todo: IPv6 Mobility Header is not supported in ns-3
+      NS_ABORT_MSG ("IPv6 Mobility Header is not supported in ns-3 yet");
+      return 0;
+    }
+  else
+    {
+      NS_ABORT_MSG ("Unexpected Extension Header");
+    }
+
+  NS_LOG_DEBUG ("NHC Compression - NHC header size = " << nhcHeader.GetSerializedSize () );
+  NS_LOG_DEBUG ("NHC Compression - packet size = " << packet->GetSize () );
+
+  packet->AddHeader (nhcHeader);
+
+  NS_LOG_DEBUG ("Packet after NHC compression: " << *packet);
+  return size;
+}
+
+uint8_t
+SixLowPanNetDevice::DecompressLowPanNhc (Ptr<Packet> packet, Address const &src, Address const &dst, Ipv6Address srcAddress, Ipv6Address dstAddress)
+{
+  NS_LOG_FUNCTION (this << *packet);
+
+  SixLowPanNhcExtension encoding;
+
+  uint32_t ret = packet->RemoveHeader (encoding);
+  NS_LOG_DEBUG ("removed " << ret << " bytes - pkt is " << *packet);
+  NS_UNUSED (ret);
+
+  Ipv6ExtensionHopByHopHeader hopHeader;
+  Ipv6ExtensionRoutingHeader routingHeader;
+  Ipv6ExtensionFragmentHeader fragHeader;
+  Ipv6ExtensionDestinationHeader destHeader;
+
+  uint32_t blobSize;
+  uint8_t blobData[260];
+  blobSize = encoding.CopyBlob (blobData + 2, 260);
+  uint8_t paddingSize = 0;
+
+  uint8_t actualEncodedHeaderType = encoding.GetEid ();
+  uint8_t actualHeaderType;
+  Buffer blob;
+
+  switch (actualEncodedHeaderType)
+    {
+    case SixLowPanNhcExtension::EID_HOPBYHOP_OPTIONS_H:
+      actualHeaderType = Ipv6Header::IPV6_EXT_HOP_BY_HOP;
+      if ( encoding.GetNh () )
+        {
+          // Next Header
+          uint8_t dispatchRawVal = 0;
+          SixLowPanDispatch::NhcDispatch_e dispatchVal;
+
+          packet->CopyData (&dispatchRawVal, sizeof(dispatchRawVal));
+          dispatchVal = SixLowPanDispatch::GetNhcDispatchType (dispatchRawVal);
+
+          if (dispatchVal == SixLowPanDispatch::LOWPAN_UDPNHC)
+            {
+              blobData [0] = Ipv6Header::IPV6_UDP;
+              DecompressLowPanUdpNhc (packet, srcAddress, dstAddress);
+            }
+          else
+            {
+              blobData [0] = DecompressLowPanNhc (packet, src, dst, srcAddress, dstAddress);
+            }
+        }
+      else
+        {
+          blobData [0] = encoding.GetNextHeader ();
+        }
+
+      // manually add some padding if needed
+      if ((blobSize + 2) % 8 > 0)
+        {
+          paddingSize = 8 - (blobSize + 2) % 8;
+        }
+      if (paddingSize == 1)
+        {
+          blobData[blobSize + 2] = 0;
+        }
+      else if (paddingSize > 1)
+        {
+          blobData[blobSize + 2] = 1;
+          blobData[blobSize + 2 + 1] = paddingSize - 2;
+          for (uint8_t i = 0; i < paddingSize - 2; i++)
+            {
+              blobData[blobSize + 2 + 2 + i] = 0;
+            }
+        }
+      blobData [1] = ((blobSize + 2 + paddingSize) >> 3) - 1;
+      blob.AddAtStart (blobSize + 2 + paddingSize);
+      blob.Begin ().Write (blobData, blobSize + 2 + paddingSize);
+      hopHeader.Deserialize (blob.Begin ());
+
+      packet->AddHeader (hopHeader);
+      break;
+
+    case SixLowPanNhcExtension::EID_ROUTING_H:
+      actualHeaderType = Ipv6Header::IPV6_EXT_ROUTING;
+      if ( encoding.GetNh () )
+        {
+          // Next Header
+          uint8_t dispatchRawVal = 0;
+          SixLowPanDispatch::NhcDispatch_e dispatchVal;
+
+          packet->CopyData (&dispatchRawVal, sizeof(dispatchRawVal));
+          dispatchVal = SixLowPanDispatch::GetNhcDispatchType (dispatchRawVal);
+
+          if (dispatchVal == SixLowPanDispatch::LOWPAN_UDPNHC)
+            {
+              blobData [0] = Ipv6Header::IPV6_UDP;
+              DecompressLowPanUdpNhc (packet, srcAddress, dstAddress);
+            }
+          else
+            {
+              blobData [0] = DecompressLowPanNhc (packet, src, dst, srcAddress, dstAddress);
+            }
+        }
+      else
+        {
+          blobData [0] = encoding.GetNextHeader ();
+        }
+      blobData [1] = ((blobSize + 2) >> 3) - 1;
+      blob.AddAtStart (blobSize + 2);
+      blob.Begin ().Write (blobData, blobSize + 2);
+      routingHeader.Deserialize (blob.Begin ());
+      packet->AddHeader (routingHeader);
+      break;
+
+    case SixLowPanNhcExtension::EID_FRAGMENTATION_H:
+      actualHeaderType = Ipv6Header::IPV6_EXT_FRAGMENTATION;
+      if ( encoding.GetNh () )
+        {
+          // Next Header
+          uint8_t dispatchRawVal = 0;
+          SixLowPanDispatch::NhcDispatch_e dispatchVal;
+
+          packet->CopyData (&dispatchRawVal, sizeof(dispatchRawVal));
+          dispatchVal = SixLowPanDispatch::GetNhcDispatchType (dispatchRawVal);
+
+          if (dispatchVal == SixLowPanDispatch::LOWPAN_UDPNHC)
+            {
+              blobData [0] = Ipv6Header::IPV6_UDP;
+              DecompressLowPanUdpNhc (packet, srcAddress, dstAddress);
+            }
+          else
+            {
+              blobData [0] = DecompressLowPanNhc (packet, src, dst, srcAddress, dstAddress);
+            }
+        }
+      else
+        {
+          blobData [0] = encoding.GetNextHeader ();
+        }
+      blobData [1] = 0;
+      fragHeader.Deserialize (blob.Begin ());
+      packet->AddHeader (fragHeader);
+      break;
+
+    case SixLowPanNhcExtension::EID_DESTINATION_OPTIONS_H:
+      actualHeaderType = Ipv6Header::IPV6_EXT_DESTINATION;
+      if ( encoding.GetNh () )
+        {
+          // Next Header
+          uint8_t dispatchRawVal = 0;
+          SixLowPanDispatch::NhcDispatch_e dispatchVal;
+
+          packet->CopyData (&dispatchRawVal, sizeof(dispatchRawVal));
+          dispatchVal = SixLowPanDispatch::GetNhcDispatchType (dispatchRawVal);
+
+          if (dispatchVal == SixLowPanDispatch::LOWPAN_UDPNHC)
+            {
+              blobData [0] = Ipv6Header::IPV6_UDP;
+              DecompressLowPanUdpNhc (packet, srcAddress, dstAddress);
+            }
+          else
+            {
+              blobData [0] = DecompressLowPanNhc (packet, src, dst, srcAddress, dstAddress);
+            }
+        }
+      else
+        {
+          blobData [0] = encoding.GetNextHeader ();
+        }
+
+      // manually add some padding if needed
+      if ((blobSize + 2) % 8 > 0)
+        {
+          paddingSize = 8 - (blobSize + 2) % 8;
+        }
+      if (paddingSize == 1)
+        {
+          blobData[blobSize + 2] = 0;
+        }
+      else if (paddingSize > 1)
+        {
+          blobData[blobSize + 2] = 1;
+          blobData[blobSize + 2 + 1] = paddingSize - 2;
+          for (uint8_t i = 0; i < paddingSize - 2; i++)
+            {
+              blobData[blobSize + 2 + 2 + i] = 0;
+            }
+        }
+      blobData [1] = ((blobSize + 2 + paddingSize) >> 3) - 1;
+      blob.AddAtStart (blobSize + 2 + paddingSize);
+      blob.Begin ().Write (blobData, blobSize + 2 + paddingSize);
+      destHeader.Deserialize (blob.Begin ());
+
+      packet->AddHeader (destHeader);
+      break;
+    case SixLowPanNhcExtension::EID_MOBILITY_H:
+      // \todo: IPv6 Mobility Header is not supported in ns-3
+      NS_ABORT_MSG ("IPv6 Mobility Header is not supported in ns-3 yet");
+      break;
+    case SixLowPanNhcExtension::EID_IPv6_H:
+      actualHeaderType = Ipv6Header::IPV6_IPV6;
+      DecompressLowPanIphc (packet, src, dst);
+      break;
+    default:
+      NS_ABORT_MSG ("Trying to decode unknown Extension Header");
+      break;
+    }
+
+  NS_LOG_DEBUG ( "Rebuilt packet: " << *packet << " Size " << packet->GetSize () );
+  return actualHeaderType;
+}
+
+uint32_t
+SixLowPanNetDevice::CompressLowPanUdpNhc (Ptr<Packet> packet, bool omitChecksum)
+{
+  NS_LOG_FUNCTION (this << *packet << int(omitChecksum));
+
+  UdpHeader udpHeader;
+  SixLowPanUdpNhcExtension udpNhcHeader;
+  uint32_t size = 0;
+
+  NS_ASSERT_MSG (packet->PeekHeader (udpHeader) != 0, "UDP header not found, abort");
+
+  size += packet->RemoveHeader (udpHeader);
+
+  // Set the C field and checksum
+  udpNhcHeader.SetC (false);
+  uint16_t checksum = udpHeader.GetChecksum ();
+  udpNhcHeader.SetChecksum (checksum);
+
+  if (omitChecksum && udpHeader.IsChecksumOk ())
+    {
+      udpNhcHeader.SetC (true);
+    }
+
+  // Set the value of the ports
+  udpNhcHeader.SetSrcPort (udpHeader.GetSourcePort ());
+  udpNhcHeader.SetDstPort (udpHeader.GetDestinationPort ());
+
+  //Set the P field
+  if ( (udpHeader.GetSourcePort () >> 4 ) == 0xf0b && (udpHeader.GetDestinationPort () >> 4 ) == 0xf0b )
+    {
+      udpNhcHeader.SetPorts (SixLowPanUdpNhcExtension::PORTS_LAST_SRC_LAST_DST);
+    }
+  else if ( (udpHeader.GetSourcePort () >> 8 ) == 0xf0 && (udpHeader.GetDestinationPort () >> 8 ) != 0xf0 )
+    {
+      udpNhcHeader.SetPorts (SixLowPanUdpNhcExtension::PORTS_LAST_SRC_ALL_DST);
+    }
+  else if ( (udpHeader.GetSourcePort () >> 8 ) != 0xf0 && (udpHeader.GetDestinationPort () >> 8 ) == 0xf0 )
+    {
+      udpNhcHeader.SetPorts (SixLowPanUdpNhcExtension::PORTS_ALL_SRC_LAST_DST);
+    }
+  else
+    {
+      udpNhcHeader.SetPorts (SixLowPanUdpNhcExtension::PORTS_INLINE);
+    }
+
+  NS_LOG_DEBUG ("UDP_NHC Compression - UDP_NHC header size = " << udpNhcHeader.GetSerializedSize () );
+  NS_LOG_DEBUG ("UDP_NHC Compression - packet size = " << packet->GetSize () );
+
+  packet->AddHeader (udpNhcHeader);
+
+  NS_LOG_DEBUG ("Packet after UDP_NHC compression: " << *packet);
+
+  return size;
+}
+
+void
+SixLowPanNetDevice::DecompressLowPanUdpNhc (Ptr<Packet> packet, Ipv6Address saddr, Ipv6Address daddr)
+{
+  NS_LOG_FUNCTION (this << *packet);
+
+  UdpHeader udpHeader;
+  SixLowPanUdpNhcExtension encoding;
+
+  uint32_t ret = packet->RemoveHeader (encoding);
+  NS_LOG_DEBUG ("removed " << ret << " bytes - pkt is " << *packet);
+  NS_UNUSED (ret);
+
+  // Set the value of the ports
+  switch ( encoding.GetPorts () )
+    {
+      uint16_t temp;
+    case SixLowPanUdpNhcExtension::PORTS_INLINE:
+      udpHeader.SetSourcePort (encoding.GetSrcPort ());
+      udpHeader.SetDestinationPort (encoding.GetDstPort ());
+      break;
+    case SixLowPanUdpNhcExtension::PORTS_ALL_SRC_LAST_DST:
+      udpHeader.SetSourcePort (encoding.GetSrcPort ());
+      temp = 0xf0;
+      temp |= (temp << 8) | encoding.GetDstPort ();
+      udpHeader.SetDestinationPort (temp);
+      break;
+    case SixLowPanUdpNhcExtension::PORTS_LAST_SRC_ALL_DST:
+      temp = 0xf0;
+      temp |= (temp << 8) | encoding.GetSrcPort ();
+      udpHeader.SetSourcePort (temp);
+      udpHeader.SetDestinationPort (encoding.GetDstPort ());
+      break;
+    case SixLowPanUdpNhcExtension::PORTS_LAST_SRC_LAST_DST:
+      temp = 0xf0b;
+      temp |= (temp << 4) | encoding.GetSrcPort ();
+      udpHeader.SetSourcePort (temp);
+      temp = 0xf0b;
+      temp |= (temp << 4) | encoding.GetDstPort ();
+      udpHeader.SetDestinationPort (temp);
+      break;
+    }
+
+  // Get the C field and checksum
+  if (Node::ChecksumEnabled ())
+    {
+      if ( encoding.GetC () )
+        {
+          NS_LOG_LOGIC ("Recalculating UDP Checksum");
+          udpHeader.EnableChecksums ();
+          udpHeader.InitializeChecksum (saddr,
+                                        daddr,
+                                        UdpL4Protocol::PROT_NUMBER);
+          packet->AddHeader (udpHeader);
+        }
+      else
+        {
+          NS_LOG_LOGIC ("Forcing UDP Checksum to " << encoding.GetChecksum ());
+          udpHeader.ForceChecksum (encoding.GetChecksum ());
+          packet->AddHeader (udpHeader);
+          NS_LOG_LOGIC ("UDP checksum is ok ? " << udpHeader.IsChecksumOk ());
+        }
+    }
+  else
+    {
+      packet->AddHeader (udpHeader);
+    }
+
+  NS_LOG_DEBUG ( "Rebuilt packet: " << *packet << " Size " << packet->GetSize () );
+}
+
+void SixLowPanNetDevice::DoFragmentation (Ptr<Packet> packet,
+                                          uint32_t origPacketSize,
+                                          uint32_t origHdrSize,
+                                          std::list<Ptr<Packet> >& listFragments)
+{
+  NS_LOG_FUNCTION (this << *packet);
+
+  Ptr<Packet> p = packet->Copy ();
+
+  uint16_t offsetData = 0;
+  uint16_t offset = 0;
+  uint16_t l2Mtu = m_netDevice->GetMtu ();
+  uint32_t packetSize = packet->GetSize ();
+  uint32_t compressedHeaderSize = packetSize - (origPacketSize - origHdrSize);
+
+  uint16_t tag = uint16_t (m_rng->GetValue (0, 65535));
+  NS_LOG_LOGIC ("random tag " << tag << " - test " << packetSize );
+
+  // first fragment
+  SixLowPanFrag1 frag1Hdr;
+  frag1Hdr.SetDatagramTag (tag);
+
+  uint32_t size;
+  NS_ASSERT_MSG ( l2Mtu > frag1Hdr.GetSerializedSize (),
+                  "6LoWPAN: can not fragment, 6LoWPAN headers are bigger than MTU");
+
+  size = l2Mtu - frag1Hdr.GetSerializedSize () - compressedHeaderSize;
+  size -= size % 8;
+  size += compressedHeaderSize;
+
+  frag1Hdr.SetDatagramSize (origPacketSize);
+
+  Ptr<Packet> fragment1 = p->CreateFragment (offsetData, size);
+  offset += size + origHdrSize - compressedHeaderSize;
+  offsetData += size;
+
+  fragment1->AddHeader (frag1Hdr);
+  listFragments.push_back (fragment1);
+
+  bool moreFrag = true;
+  do
+    {
+      SixLowPanFragN fragNHdr;
+      fragNHdr.SetDatagramTag (tag);
+      fragNHdr.SetDatagramSize (origPacketSize);
+      fragNHdr.SetDatagramOffset ((offset) >> 3);
+
+      size = l2Mtu - fragNHdr.GetSerializedSize ();
+      size -= size % 8;
+
+      if ( (offsetData + size) > packetSize )
+        {
+          size = packetSize - offsetData;
+          moreFrag = false;
+        }
+
+      NS_LOG_LOGIC ("Fragment creation - " << offset << ", " << offset );
+      Ptr<Packet> fragment = p->CreateFragment (offsetData, size);
+      NS_LOG_LOGIC ("Fragment created - " << offset << ", " << fragment->GetSize () );
+
+      offset += size;
+      offsetData += size;
+
+      fragment->AddHeader (fragNHdr);
+      listFragments.push_back (fragment);
+
+    }
+  while (moreFrag);
+
+  return;
+}
+
+bool SixLowPanNetDevice::ProcessFragment (Ptr<Packet>& packet, Address const &src, Address const &dst, bool isFirst)
+{
+  NS_LOG_FUNCTION ( this << *packet );
+  SixLowPanFrag1 frag1Header;
+  SixLowPanFragN fragNHeader;
+  FragmentKey key;
+  uint16_t packetSize;
+  key.first = std::pair<Address, Address> (src, dst);
+
+  Ptr<Packet> p = packet->Copy ();
+  uint16_t offset = 0;
+
+  /* Implementation note:
+   *
+   * The fragment offset is relative to the *uncompressed* packet.
+   * On the other hand, the packet can not be uncompressed correctly without all
+   * its fragments, as the UDP checksum can not be computed otherwise.
+   *
+   * As a consequence we must uncompress the packet twice, and save its first
+   * fragment for the final one.
+   */
+
+  if ( isFirst )
+    {
+      uint8_t dispatchRawValFrag1 = 0;
+      SixLowPanDispatch::Dispatch_e dispatchValFrag1;
+
+      p->RemoveHeader (frag1Header);
+      packetSize = frag1Header.GetDatagramSize ();
+      p->CopyData (&dispatchRawValFrag1, sizeof(dispatchRawValFrag1));
+      dispatchValFrag1 = SixLowPanDispatch::GetDispatchType (dispatchRawValFrag1);
+      NS_LOG_DEBUG ( "Dispatches: " << int(dispatchRawValFrag1) << " - " << int(dispatchValFrag1) );
+      NS_LOG_DEBUG ( "Packet: " << *p );
+
+      switch ( dispatchValFrag1 )
+        {
+        case SixLowPanDispatch::LOWPAN_NOTCOMPRESSED:
+          NS_LOG_DEBUG ( "Packet without compression:" << *p );
+          NS_LOG_DEBUG ( "Packet length:" << p->GetSize () );
+          break;
+        case SixLowPanDispatch::LOWPAN_HC1:
+          DecompressLowPanHc1 (p, src, dst);
+          break;
+        case SixLowPanDispatch::LOWPAN_IPHC:
+          DecompressLowPanIphc (p, src, dst);
+          break;
+        default:
+          NS_FATAL_ERROR ("Unsupported 6LoWPAN encoding, exiting.");
+          break;
+        }
+
+      key.second = std::pair<uint16_t, uint16_t> (frag1Header.GetDatagramSize (), frag1Header.GetDatagramTag ());
+    }
+  else
+    {
+      p->RemoveHeader (fragNHeader);
+      packetSize = fragNHeader.GetDatagramSize ();
+      offset = fragNHeader.GetDatagramOffset () << 3;
+      key.second = std::pair<uint16_t, uint16_t> (fragNHeader.GetDatagramSize (), fragNHeader.GetDatagramTag ());
+    }
+
+  Ptr<Fragments> fragments;
+
+  MapFragments_t::iterator it = m_fragments.find (key);
+  if (it == m_fragments.end ())
+    {
+      // erase the oldest packet.
+      if ( m_fragmentReassemblyListSize && (m_fragments.size () >= m_fragmentReassemblyListSize) )
+        {
+          MapFragmentsTimers_t::iterator iter;
+          MapFragmentsTimers_t::iterator iterFound = m_fragmentsTimers.begin ();
+          for ( iter = m_fragmentsTimers.begin (); iter != m_fragmentsTimers.end (); iter++)
+            {
+              if ( iter->second.GetTs () < iterFound->second.GetTs () )
+                {
+                  iterFound = iter;
+                }
+            }
+          FragmentKey oldestKey = iterFound->first;
+
+          std::list< Ptr<Packet> > storedFragments = m_fragments[oldestKey]->GetFraments ();
+          for (std::list< Ptr<Packet> >::iterator fragIter = storedFragments.begin ();
+               fragIter != storedFragments.end (); fragIter++)
+            {
+              m_dropTrace (DROP_FRAGMENT_BUFFER_FULL, *fragIter, m_node->GetObject<SixLowPanNetDevice> (), GetIfIndex ());
+            }
+
+          m_fragmentsTimers[oldestKey].Cancel ();
+          m_fragmentsTimers.erase (oldestKey);
+          m_fragments[oldestKey] = 0;
+          m_fragments.erase (oldestKey);
+
+        }
+      fragments = Create<Fragments> ();
+      fragments->SetPacketSize (packetSize);
+      m_fragments.insert (std::make_pair (key, fragments));
+      uint32_t ifIndex = GetIfIndex ();
+      m_fragmentsTimers[key] = Simulator::Schedule (m_fragmentExpirationTimeout,
+                                                    &SixLowPanNetDevice::HandleFragmentsTimeout, this,
+                                                    key, ifIndex);
+    }
+  else
+    {
+      fragments = it->second;
+    }
+
+  fragments->AddFragment (p, offset);
+
+  // add the very first fragment so we can correctly decode the packet once is rebuilt.
+  // this is needed because otherwise the UDP header length and checksum can not be calculated.
+  if ( isFirst )
+    {
+      fragments->AddFirstFragment (packet);
+    }
+
+  if ( fragments->IsEntire () )
+    {
+      packet = fragments->GetPacket ();
+      NS_LOG_LOGIC ("Reconstructed packet: " << *packet);
+
+      SixLowPanFrag1 frag1Header;
+      packet->RemoveHeader (frag1Header);
+
+      NS_LOG_LOGIC ("Rebuilt packet. Size " << packet->GetSize () << " - " << *packet);
+      fragments = 0;
+      m_fragments.erase (key);
+      if (m_fragmentsTimers[key].IsRunning ())
+        {
+          NS_LOG_LOGIC ("Stopping 6LoWPAN WaitFragmentsTimer at " << Simulator::Now ().GetSeconds () << " due to complete packet");
+          m_fragmentsTimers[key].Cancel ();
+        }
+      m_fragmentsTimers.erase (key);
+      return true;
+    }
+
+  return false;
+}
+
+SixLowPanNetDevice::Fragments::Fragments ()
+{
+  NS_LOG_FUNCTION (this);
+  m_packetSize = 0;
+}
+
+SixLowPanNetDevice::Fragments::~Fragments ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void SixLowPanNetDevice::Fragments::AddFragment (Ptr<Packet> fragment, uint16_t fragmentOffset)
+{
+  NS_LOG_FUNCTION (this << fragmentOffset << *fragment);
+
+  std::list<std::pair<Ptr<Packet>, uint16_t> >::iterator it;
+  bool duplicate = false;
+
+  for (it = m_fragments.begin (); it != m_fragments.end (); it++)
+    {
+      if (it->second > fragmentOffset)
+        {
+          break;
+        }
+      if (it->second == fragmentOffset)
+        {
+          duplicate = true;
+          NS_ASSERT_MSG (fragment->GetSize () == it->first->GetSize (), "Duplicate fragment size differs. Aborting.");
+          break;
+        }
+    }
+  if (!duplicate)
+    {
+      m_fragments.insert (it, std::make_pair (fragment, fragmentOffset));
+    }
+}
+
+void SixLowPanNetDevice::Fragments::AddFirstFragment (Ptr<Packet> fragment)
+{
+  NS_LOG_FUNCTION (this << *fragment);
+
+  m_firstFragment = fragment;
+}
+
+bool SixLowPanNetDevice::Fragments::IsEntire () const
+{
+  NS_LOG_FUNCTION (this);
+
+  bool ret = m_fragments.size () > 0;
+  uint16_t lastEndOffset = 0;
+
+  if (ret)
+    {
+      for (std::list<std::pair<Ptr<Packet>, uint16_t> >::const_iterator it = m_fragments.begin (); it != m_fragments.end (); it++)
+        {
+          // overlapping fragments should not exist
+          NS_LOG_LOGIC ("Checking overlaps " << lastEndOffset << " - " << it->second );
+
+          if (lastEndOffset < it->second)
+            {
+              ret = false;
+              break;
+            }
+          // fragments might overlap in strange ways
+          uint16_t fragmentEnd = it->first->GetSize () + it->second;
+          lastEndOffset = std::max ( lastEndOffset, fragmentEnd );
+        }
+    }
+
+  if ( ret && (lastEndOffset == m_packetSize))
+    {
+      return true;
+    }
+  return false;
+}
+
+Ptr<Packet> SixLowPanNetDevice::Fragments::GetPacket () const
+{
+  NS_LOG_FUNCTION (this);
+
+  std::list<std::pair<Ptr<Packet>, uint16_t> >::const_iterator it = m_fragments.begin ();
+
+  Ptr<Packet> p = Create<Packet> ();
+  uint16_t lastEndOffset = 0;
+
+  p->AddAtEnd (m_firstFragment);
+  it = m_fragments.begin ();
+  lastEndOffset = it->first->GetSize ();
+
+  for ( it++; it != m_fragments.end (); it++)
+    {
+      if ( lastEndOffset > it->second )
+        {
+          NS_ABORT_MSG ("Overlapping fragments found, forbidden condition");
+        }
+      else
+        {
+          NS_LOG_LOGIC ("Adding: " << *(it->first) );
+          p->AddAtEnd (it->first);
+        }
+      lastEndOffset += it->first->GetSize ();
+    }
+
+  return p;
+}
+
+void SixLowPanNetDevice::Fragments::SetPacketSize (uint32_t packetSize)
+{
+  NS_LOG_FUNCTION (this << packetSize);
+  m_packetSize = packetSize;
+}
+
+std::list< Ptr<Packet> > SixLowPanNetDevice::Fragments::GetFraments () const
+{
+  std::list< Ptr<Packet> > fragments;
+  std::list<std::pair<Ptr<Packet>, uint16_t> >::const_iterator iter;
+  for ( iter = m_fragments.begin (); iter != m_fragments.end (); iter ++)
+    {
+      fragments.push_back (iter->first);
+    }
+  return fragments;
+}
+
+void SixLowPanNetDevice::HandleFragmentsTimeout (FragmentKey key, uint32_t iif)
+{
+  NS_LOG_FUNCTION (this);
+
+  MapFragments_t::iterator it = m_fragments.find (key);
+  std::list< Ptr<Packet> > storedFragments = it->second->GetFraments ();
+  for (std::list< Ptr<Packet> >::iterator fragIter = storedFragments.begin ();
+       fragIter != storedFragments.end (); fragIter++)
+    {
+      m_dropTrace (DROP_FRAGMENT_TIMEOUT, *fragIter, m_node->GetObject<SixLowPanNetDevice> (), iif);
+    }
+  // clear the buffers
+  it->second = 0;
+
+  m_fragments.erase (key);
+  m_fragmentsTimers.erase (key);
+}
+
+Ipv6Address SixLowPanNetDevice::MakeLinkLocalAddressFromMac (Address const &addr)
+{
+  Ipv6Address ipv6Addr = Ipv6Address::GetAny ();
+
+  if (m_forceEtherType && Mac48Address::IsMatchingType (addr))
+    {
+      ipv6Addr = Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac48Address::ConvertFrom (addr));
+    }
+  else
+    {
+      if (Mac64Address::IsMatchingType (addr))
+        {
+          ipv6Addr = Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac64Address::ConvertFrom (addr));
+        }
+      else if (Mac16Address::IsMatchingType (addr))
+        {
+          ipv6Addr = Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac16Address::ConvertFrom (addr));
+        }
+    }
+  if (ipv6Addr.IsAny ())
+    {
+      NS_ABORT_MSG ("Unknown address type");
+    }
+  return ipv6Addr;
+}
+
+Ipv6Address SixLowPanNetDevice::MakeGlobalAddressFromMac (Address const &addr, Ipv6Address prefix)
+{
+  Ipv6Address ipv6Addr = Ipv6Address::GetAny ();
+
+  if (m_forceEtherType && Mac48Address::IsMatchingType (addr))
+    {
+      ipv6Addr = Ipv6Address::MakeAutoconfiguredAddress (Mac48Address::ConvertFrom (addr), Ipv6Address (prefix) );
+    }
+  else
+    {
+      if (Mac64Address::IsMatchingType (addr))
+        {
+          ipv6Addr = Ipv6Address::MakeAutoconfiguredAddress (Mac64Address::ConvertFrom (addr), Ipv6Address (prefix));
+        }
+      else if (Mac16Address::IsMatchingType (addr))
+        {
+          ipv6Addr = Ipv6Address::MakeAutoconfiguredAddress (Mac16Address::ConvertFrom (addr), Ipv6Address (prefix) );
+        }
+    }
+  if (ipv6Addr.IsAny ())
+    {
+      NS_ABORT_MSG ("Unknown address type");
+    }
+  return ipv6Addr;
+}
+
+}
+
+// namespace ns3
diff -Naur ns-3.18.1/src/sixlowpan/model/sixlowpan-net-device.h ns-3.19/src/sixlowpan/model/sixlowpan-net-device.h
--- ns-3.18.1/src/sixlowpan/model/sixlowpan-net-device.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/sixlowpan/model/sixlowpan-net-device.h	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,468 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Universita' di Firenze, Italy
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ *         Michele Muccio <michelemuccio@virgilio.it>
+ */
+
+#ifndef SIXLOWPAN_NET_DEVICE_H
+#define SIXLOWPAN_NET_DEVICE_H
+
+#include <stdint.h>
+#include <string>
+#include <map>
+#include "ns3/traced-callback.h"
+#include "ns3/event-id.h"
+#include "ns3/nstime.h"
+#include "ns3/net-device.h"
+#include "ns3/packet.h"
+#include "sixlowpan-header.h"
+#include "ns3/random-variable-stream.h"
+
+namespace ns3 {
+
+class Node;
+
+/**
+ * \defgroup sixlowpan 6LoWPAN
+ * \brief Performs 6LoWPAN compression of IPv6 packets as specified by RFC 4944 and RFC 6282
+ *
+ * This module acts as a shim between IPv6 and a generic NetDevice.
+ *
+ * The module implements RFCs 4944 and 6282, with the following exceptions:
+ * <ul>
+ * <li> MESH and LOWPAN_BC0 dispatch types are not supported </li>
+ * <li> HC2 encoding is not supported </li>
+ * <li> IPHC's SAC and DAC are not supported </li>
+ *</ul>
+ */
+
+/**
+ * \ingroup sixlowpan
+ *
+ * \brief Shim performing 6LoWPAN compression, decompression and fragmentation.
+ *
+ * This class implements the shim between IPv6 and a generic NetDevice,
+ * performing packet compression, decompression and fragmentation in a transparent way.
+ * To this end, the class pretend to be a normal NetDevice, masquerading some functions
+ * of the underlying NetDevice.
+ */
+class SixLowPanNetDevice : public NetDevice
+{
+public:
+  /**
+   * Enumeration of the dropping reasons in SixLoWPAN.
+   */
+  enum DropReason
+  {
+    DROP_FRAGMENT_TIMEOUT = 1, /**< Fragment timeout exceeded */
+    DROP_FRAGMENT_BUFFER_FULL, /**< Fragment buffer size exceeded */
+    DROP_UNKNOWN_EXTENSION /**< Unsupported compression kind */
+  };
+
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * Constructor for the SixLowPanNetDevice.
+   */
+  SixLowPanNetDevice ();
+
+  // 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);
+
+  /**
+   * \brief Returns the link-layer MTU for this interface.
+   * If the link-layer MTU is smaller than IPv6's minimum MTU (RFC 4944),
+   * 1280 will be returned.
+   *
+   * \return the link-level MTU in bytes for this interface.
+   */
+  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 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 (NetDevice::PromiscReceiveCallback cb);
+  virtual bool SupportsSendFrom () const;
+  virtual Address GetMulticast (Ipv6Address addr) const;
+
+  /**
+   * \brief Returns a smart pointer to the underlying NetDevice.
+   *
+   * \return a smart pointer to the underlying NetDevice.
+   */
+  Ptr<NetDevice> GetNetDevice () const;
+
+  /**
+   * \brief Setup SixLowPan to be a proxy for the specified NetDevice.
+   * All the packets incoming and outgoing from the NetDevice will be
+   * processed by SixLowPanNetDevice.
+   *
+   * \param device a smart pointer to the NetDevice to be proxied.
+   */
+  void SetNetDevice (Ptr<NetDevice> device);
+
+  /**
+   * Assign a fixed random variable stream number to the random variables
+   * used by this model.  Return the number of streams (possibly zero) that
+   * have been assigned.
+   *
+   * \param stream first stream index to use
+   * \return the number of stream indices assigned by this model
+   */
+  int64_t AssignStreams (int64_t stream);
+
+protected:
+  virtual void DoDispose (void);
+
+private:
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  SixLowPanNetDevice (SixLowPanNetDevice const &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  SixLowPanNetDevice& operator= (SixLowPanNetDevice const &);
+  /**
+   * \brief receives all the packets from a NetDevice for further processing.
+   * \param device the NetDevice the packet ws received from
+   * \param packet the received packet
+   * \param protocol the protocol (if known)
+   * \param source the source address
+   * \param destination the destination address
+   * \param packetType the packet kind (e.g., HOST, BROADCAST, etc.)
+   * \return the IPv6 link-local address
+   */
+  void ReceiveFromDevice (Ptr<NetDevice> device, Ptr<const Packet> packet, uint16_t protocol,
+                          Address const &source, Address const &destination, PacketType packetType);
+
+  /**
+   * 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;
+
+  /**
+   * \brief Callback to trace TX (transmission) packets.
+   *
+   * Data passed:
+   * \li Packet received (including 6LoWPAN header)
+   * \li Ptr to SixLowPanNetDevice
+   * \li interface index
+   */
+  TracedCallback<Ptr<const Packet>, Ptr<SixLowPanNetDevice>, uint32_t> m_txTrace;
+
+  /**
+   * \brief Callback to trace RX (reception) packets.
+   *
+   * Data passed:
+   * \li Packet received (including 6LoWPAN header)
+   * \li Ptr to SixLowPanNetDevice
+   * \li interface index
+   */
+  TracedCallback<Ptr<const Packet>, Ptr<SixLowPanNetDevice>, uint32_t> m_rxTrace;
+
+  /**
+   * \brief Callback to trace drop packets.
+   *
+   * Data passed:
+   * \li DropReason
+   * \li Packet dropped (including 6LoWPAN header)
+   * \li Ptr to SixLowPanNetDevice
+   * \li interface index
+   */
+  TracedCallback<DropReason, Ptr<const Packet>, Ptr<SixLowPanNetDevice>, uint32_t> m_dropTrace;
+
+  /**
+   * \brief make a link-local address from a MAC address.
+   * \param addr the MAC address
+   * \return the IPv6 link-local address
+   */
+  Ipv6Address MakeLinkLocalAddressFromMac (Address const &addr);
+
+  /**
+   * \brief make a global address from a MAC address.
+   * \param addr the MAC address
+   * \param prefix the address prefix
+   * \return the IPv6 address
+   */
+  Ipv6Address MakeGlobalAddressFromMac (Address const &addr, Ipv6Address prefix);
+
+  /**
+   * \brief Compress the headers according to HC1 compression.
+   * \param packet the packet to be compressed
+   * \param src the MAC source address
+   * \param dst the MAC destination address
+   * \return the size of the removed headers
+   */
+  uint32_t CompressLowPanHc1 (Ptr<Packet> packet, Address const &src, Address const &dst);
+
+  /**
+   * \brief Decompress the headers according to HC1 compression.
+   * \param packet the packet to be compressed
+   * \param src the MAC source address
+   * \param dst the MAC destination address
+   */
+  void DecompressLowPanHc1 (Ptr<Packet> packet, Address const &src, Address const &dst);
+
+  /**
+   * \brief Compress the headers according to IPHC compression.
+   * \param packet the packet to be compressed
+   * \param src the MAC source address
+   * \param dst the MAC destination address
+   * \return the size of the removed headers
+   */
+  uint32_t CompressLowPanIphc (Ptr<Packet> packet, Address const &src, Address const &dst);
+
+  /**
+   * \brief Checks if the next header can be compressed using NHC.
+   * \param headerType the header kind to be compressed
+   * \return true if the header can be compressed
+   */
+  bool CanCompressLowPanNhc (uint8_t headerType);
+
+  /**
+   * \brief Decompress the headers according to IPHC compression.
+   * \param packet the packet to be compressed
+   * \param src the MAC source address
+   * \param dst the MAC destination address
+   */
+  void DecompressLowPanIphc (Ptr<Packet> packet, Address const &src, Address const &dst);
+
+  /**
+   * \brief Compress the headers according to NHC compression.
+   * \param packet the packet to be compressed
+   * \param headerType the header type
+   * \param src the MAC source address
+   * \param dst the MAC destination address
+   * \return the size of the removed headers
+   */
+  uint32_t CompressLowPanNhc (Ptr<Packet> packet, uint8_t headerType, Address const &src, Address const &dst);
+
+  /**
+   * \brief Decompress the headers according to NHC compression.
+   * \param packet the packet to be compressed
+   * \param src the MAC source address
+   * \param dst the MAC destination address
+   * \param srcAddress the IPv6 source address
+   * \param dstAddress the IPv6 destination address
+   * \return the decompressed header type
+   */
+  uint8_t DecompressLowPanNhc (Ptr<Packet> packet, Address const &src, Address const &dst, Ipv6Address srcAddress, Ipv6Address dstAddress);
+
+  /**
+   * \brief Compress the headers according to NHC compression.
+   * \param packet the packet to be compressed
+   * \param omitChecksum omit UDP checksum (if true)
+   * \return the size of the removed headers
+   */
+  uint32_t CompressLowPanUdpNhc (Ptr<Packet> packet, bool omitChecksum);
+
+  /**
+   * \brief Decompress the headers according to NHC compression.
+   * \param packet the packet to be compressed
+   * \param saddr the IPv6 source address
+   * \param daddr the IPv6 destination address
+   */
+  void DecompressLowPanUdpNhc (Ptr<Packet> packet, Ipv6Address saddr, Ipv6Address daddr);
+
+  /**
+   * Fragment identifier type: src/dst address src/dst port
+   */
+  typedef std::pair< std::pair<Address, Address>, std::pair<uint16_t, uint16_t> > FragmentKey;
+
+  /**
+   * \class Fragments
+   * \brief A Set of Fragment
+   */
+  class Fragments : public SimpleRefCount<Fragments>
+  {
+public:
+    /**
+     * \brief Constructor.
+     */
+    Fragments ();
+
+    /**
+     * \brief Destructor.
+     */
+    ~Fragments ();
+
+    /**
+     * \brief Add a fragment to the pool.
+     * \param fragment the fragment
+     * \param fragmentOffset the offset of the fragment
+     */
+    void AddFragment (Ptr<Packet> fragment, uint16_t fragmentOffset);
+
+    /**
+     * \brief Add the first packet fragment. The first fragment is needed to
+     * allow the post-defragmentation decompression.
+     * \param fragment the fragment
+     */
+    void AddFirstFragment (Ptr<Packet> fragment);
+
+    /**
+     * \brief If all fragments have been added.
+     * \returns true if the packet is entire
+     */
+    bool IsEntire () const;
+
+    /**
+     * \brief Get the entire packet.
+     * \return the entire packet
+     */
+    Ptr<Packet> GetPacket () const;
+
+    /**
+     * \brief Set the packet-to-be-defragmented size.
+     * \param packetSize the packet size (bytes)
+     */
+    void SetPacketSize (uint32_t packetSize);
+
+    /**
+     * \brief Get a list of the current stored fragments.
+     */
+    std::list< Ptr<Packet> > GetFraments () const;
+
+private:
+    /**
+     * \brief The size of the reconstructed packet (bytes).
+     */
+    uint32_t m_packetSize;
+
+    /**
+     * \brief The current fragments.
+     */
+    std::list<std::pair<Ptr<Packet>, uint16_t> > m_fragments;
+
+    /**
+     * \brief The very first fragment
+     */
+    Ptr<Packet> m_firstFragment;
+
+  };
+
+  /**
+   * \brief Return the instance type identifier.
+   * \param packet the packet to be fragmented (with headers already compressed with 6LoWPAN)
+   * \param origPacketSize the size of the IP packet before the 6LoWPAN header compression, including the IP/L4 headers
+   * \param origHdrSize the size of the IP header before the 6LoWPAN header compression
+   * \param listFragments a reference to the list of the resulting packets, all with the proper headers in place
+   */
+  void DoFragmentation (Ptr<Packet> packet, uint32_t origPacketSize, uint32_t origHdrSize,
+                        std::list<Ptr<Packet> >& listFragments);
+
+  /**
+   * \brief Process a packet fragment
+   * \param packet the packet
+   * \param src the source MAC address
+   * \param dst the destination MAC address
+   * \param isFirst true if it is the first fragment, false otherwise
+   * \return true is the fragment completed the packet
+   */
+  bool ProcessFragment (Ptr<Packet>& packet, Address const &src, Address const &dst, bool isFirst);
+
+  /**
+   * \brief Process the timeout for packet fragments
+   * \param key representing the packet fragments
+   * \param iif Input Interface
+   */
+  void HandleFragmentsTimeout ( FragmentKey key, uint32_t iif);
+
+  /**
+   * \brief Drops the oldest fragment set
+   */
+  void DropOldestFragmentSet ();
+
+  /**
+   * Container for fragment key -> fragments
+   */
+  typedef std::map< FragmentKey, Ptr<Fragments> > MapFragments_t;
+  /**
+   * Container Iterator for fragment key -> fragments
+   */
+  typedef std::map< FragmentKey, Ptr<Fragments> >::iterator MapFragmentsI_t;
+  /**
+   * Container for fragment key -> exiration event
+   */
+  typedef std::map< FragmentKey, EventId > MapFragmentsTimers_t;
+  /**
+   * Container Iterator for fragment key -> exiration event
+   */
+  typedef std::map< FragmentKey, EventId >::iterator MapFragmentsTimersI_t;
+
+  MapFragments_t       m_fragments; /**< Fragments hold to be rebuilt */
+  MapFragmentsTimers_t m_fragmentsTimers; /**< Timers related to fragment rebuilding */
+  Time                 m_fragmentExpirationTimeout; /**< Time limit for fragment rebuilding */
+
+  /**
+   * \brief How many packets can be rebuilt at the same time.
+   * Some real implementation do limit this. Zero means no limit.
+   */
+  uint16_t             m_fragmentReassemblyListSize;
+
+  bool m_useIphc; /**< Use IPHC or HC1 */
+
+  Ptr<Node> m_node; /**< Smart pointer to the Node */
+  Ptr<NetDevice> m_netDevice; /**< Smart pointer to the underlying NetDevice */
+  uint32_t m_ifIndex; /**< Interface index */
+
+  /**
+   * \brief Force the EtherType number.
+   * Also implying that the underlying NetDevice is using 48-bit Addresses, e.g., Ethernet, WiFi, etc.
+   */
+  bool m_forceEtherType;
+
+  uint16_t m_etherType; /**< EtherType number (used only if m_forceEtherType is true) */
+  bool m_omitUdpChecksum; /**< Omit UDP checksum in NC1 encoding */
+
+  Ptr<UniformRandomVariable> m_rng; //!< Rng for the fragments tag.
+};
+
+} // namespace ns3
+
+#endif /* SIXLOWPAN_NET_DEVICE_H */
diff -Naur ns-3.18.1/src/sixlowpan/test/error-channel-sixlow.cc ns-3.19/src/sixlowpan/test/error-channel-sixlow.cc
--- ns-3.18.1/src/sixlowpan/test/error-channel-sixlow.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/sixlowpan/test/error-channel-sixlow.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,196 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Universita' di Firenze, Italy
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+#include "error-channel-sixlow.h"
+#include "ns3/simple-net-device.h"
+#include "ns3/simulator.h"
+#include "ns3/packet.h"
+#include "ns3/node.h"
+#include "ns3/log.h"
+
+NS_LOG_COMPONENT_DEFINE ("ErrorChannelSixlow")
+  ;
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (ErrorChannelSixlow)
+  ;
+
+TypeId
+ErrorChannelSixlow::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::ErrorChannelSixlow")
+    .SetParent<Channel> ()
+    .AddConstructor<ErrorChannelSixlow> ()
+  ;
+  return tid;
+}
+
+ErrorChannelSixlow::ErrorChannelSixlow ()
+{
+  m_jumpingTime = Seconds (0.5);
+  m_jumping = false;
+  m_jumpingState = 0;
+  m_duplicateTime = Seconds (0.1);
+  m_duplicate = false;
+}
+
+void
+ErrorChannelSixlow::SetJumpingTime (Time delay)
+{
+  m_jumpingTime = delay;
+}
+
+void
+ErrorChannelSixlow::SetJumpingMode (bool mode)
+{
+  m_jumping = mode;
+  m_jumpingState = 0;
+}
+
+void
+ErrorChannelSixlow::SetDuplicateTime (Time delay)
+{
+  m_duplicateTime = delay;
+}
+
+void
+ErrorChannelSixlow::SetDuplicateMode (bool mode)
+{
+  m_duplicate = mode;
+  m_duplicateState = 0;
+}
+
+
+void
+ErrorChannelSixlow::Send (Ptr<Packet> p, uint16_t protocol,
+                          Mac48Address to, Mac48Address from,
+                          Ptr<SimpleNetDevice> sender)
+{
+  NS_LOG_FUNCTION (p << protocol << to << from << sender);
+  for (std::vector<Ptr<SimpleNetDevice> >::const_iterator i = m_devices.begin (); i != m_devices.end (); ++i)
+    {
+      Ptr<SimpleNetDevice> tmp = *i;
+      if (tmp == sender)
+        {
+          continue;
+        }
+      if (m_jumping)
+        {
+          if (m_jumpingState % 2)
+            {
+              Simulator::ScheduleWithContext (tmp->GetNode ()->GetId (), Seconds (0),
+                                              &SimpleNetDevice::Receive, tmp, p->Copy (), protocol, to, from);
+            }
+          else
+            {
+              Simulator::ScheduleWithContext (tmp->GetNode ()->GetId (), m_jumpingTime,
+                                              &SimpleNetDevice::Receive, tmp, p->Copy (), protocol, to, from);
+            }
+          m_jumpingState++;
+        }
+      else if (m_duplicate)
+        {
+          if (m_duplicateState % 2)
+            {
+              Simulator::ScheduleWithContext (tmp->GetNode ()->GetId (), Seconds (0),
+                                              &SimpleNetDevice::Receive, tmp, p->Copy (), protocol, to, from);
+            }
+          else
+            {
+              Simulator::ScheduleWithContext (tmp->GetNode ()->GetId (), Seconds (0),
+                                              &SimpleNetDevice::Receive, tmp, p->Copy (), protocol, to, from);
+              Simulator::ScheduleWithContext (tmp->GetNode ()->GetId (), m_duplicateTime,
+                                              &SimpleNetDevice::Receive, tmp, p->Copy (), protocol, to, from);
+            }
+          m_duplicateState++;
+        }
+      else
+        {
+          Simulator::ScheduleWithContext (tmp->GetNode ()->GetId (), Seconds (0),
+                                          &SimpleNetDevice::Receive, tmp, p->Copy (), protocol, to, from);
+        }
+    }
+}
+
+void
+ErrorChannelSixlow::Add (Ptr<SimpleNetDevice> device)
+{
+  m_devices.push_back (device);
+}
+
+uint32_t
+ErrorChannelSixlow::GetNDevices (void) const
+{
+  return m_devices.size ();
+}
+Ptr<NetDevice>
+ErrorChannelSixlow::GetDevice (uint32_t i) const
+{
+  return m_devices[i];
+}
+
+NS_OBJECT_ENSURE_REGISTERED (BinaryErrorSixlowModel)
+  ;
+
+TypeId BinaryErrorSixlowModel::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::BinaryErrorSixlowModel")
+    .SetParent<ErrorModel> ()
+    .AddConstructor<BinaryErrorSixlowModel> ()
+  ;
+  return tid;
+}
+
+BinaryErrorSixlowModel::BinaryErrorSixlowModel ()
+{
+  m_counter = 0;
+}
+
+BinaryErrorSixlowModel::~BinaryErrorSixlowModel ()
+{
+}
+
+
+bool
+BinaryErrorSixlowModel::DoCorrupt (Ptr<Packet> p)
+{
+  if (!IsEnabled ())
+    {
+      return false;
+    }
+  bool ret = m_counter % 2;
+  m_counter++;
+  return ret;
+}
+
+void
+BinaryErrorSixlowModel::Reset (void)
+{
+  DoReset ();
+}
+
+void
+BinaryErrorSixlowModel::DoReset (void)
+{
+  m_counter = 0;
+}
+
+
+} // namespace ns3
diff -Naur ns-3.18.1/src/sixlowpan/test/error-channel-sixlow.h ns-3.19/src/sixlowpan/test/error-channel-sixlow.h
--- ns-3.18.1/src/sixlowpan/test/error-channel-sixlow.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/sixlowpan/test/error-channel-sixlow.h	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,107 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Universita' di Firenze, Italy
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+#ifndef ERROR_CHANNEL_SIXLOW_H
+#define ERROR_CHANNEL_SIXLOW_H
+
+#include "ns3/channel.h"
+#include "ns3/simple-channel.h"
+#include "ns3/error-model.h"
+#include "ns3/mac48-address.h"
+#include "ns3/nstime.h"
+#include <vector>
+
+namespace ns3 {
+
+class SimpleNetDevice;
+class Packet;
+
+/**
+ * \ingroup channel
+ * \brief A Error channel, introducing deterministic delays on even/odd packets. Used for testing
+ */
+class ErrorChannelSixlow : public SimpleChannel
+{
+public:
+  static TypeId GetTypeId (void);
+  ErrorChannelSixlow ();
+
+  virtual void Send (Ptr<Packet> p, uint16_t protocol, Mac48Address to, Mac48Address from,
+                     Ptr<SimpleNetDevice> sender);
+
+  virtual void Add (Ptr<SimpleNetDevice> device);
+
+  // inherited from ns3::Channel
+  virtual uint32_t GetNDevices (void) const;
+  virtual Ptr<NetDevice> GetDevice (uint32_t i) const;
+
+  /**
+   * \brief Set the delay for the odd packets (even ones are not delayed)
+   * \param delay Delay for the odd packets.
+   */
+  void SetJumpingTime (Time delay);
+
+  /**
+   * \brief Set if the odd packets are delayed (even ones are not delayed ever)
+   * \param mode true if the odd packets should be delayed.
+   */
+  void SetJumpingMode (bool mode);
+
+  /**
+   * \brief Set the delay for the odd duplicate packets (even ones are not duplicated)
+   * \param delay Delay for the odd packets.
+   */
+  void SetDuplicateTime (Time delay);
+
+  /**
+   * \brief Set if the odd packets are duplicated (even ones are not duplicated ever)
+   * \param mode true if the odd packets should be duplicated.
+   */
+  void SetDuplicateMode (bool mode);
+
+private:
+  std::vector<Ptr<SimpleNetDevice> > m_devices;
+  Time m_jumpingTime;
+  uint8_t m_jumpingState;
+  bool m_jumping;
+  Time m_duplicateTime;
+  bool m_duplicate;
+  uint8_t m_duplicateState;
+};
+
+class BinaryErrorSixlowModel : public ErrorModel
+{
+public:
+  static TypeId GetTypeId (void);
+
+  BinaryErrorSixlowModel ();
+  virtual ~BinaryErrorSixlowModel ();
+  void Reset (void);
+
+private:
+  virtual bool DoCorrupt (Ptr<Packet> p);
+  virtual void DoReset (void);
+
+  uint8_t m_counter;
+
+};
+
+} // namespace ns3
+
+#endif /* ERROR_CHANNEL_SIXLOW_H */
diff -Naur ns-3.18.1/src/sixlowpan/test/sixlowpan-fragmentation-test.cc ns-3.19/src/sixlowpan/test/sixlowpan-fragmentation-test.cc
--- ns-3.18.1/src/sixlowpan/test/sixlowpan-fragmentation-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/sixlowpan/test/sixlowpan-fragmentation-test.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,463 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Universita' di Firenze, Italy
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+#define NS3_LOG_ENABLE 1
+
+#include "ns3/test.h"
+#include "ns3/config.h"
+#include "ns3/uinteger.h"
+#include "ns3/socket-factory.h"
+#include "ns3/ipv6-raw-socket-factory.h"
+#include "ns3/udp-socket-factory.h"
+#include "ns3/simulator.h"
+#include "error-channel-sixlow.h"
+#include "ns3/simple-net-device.h"
+#include "ns3/drop-tail-queue.h"
+#include "ns3/socket.h"
+#include "ns3/udp-socket.h"
+
+#include "ns3/log.h"
+#include "ns3/node.h"
+#include "ns3/inet-socket-address.h"
+#include "ns3/boolean.h"
+
+#include "ns3/ipv6-static-routing.h"
+#include "ns3/ipv6-list-routing.h"
+#include "ns3/inet6-socket-address.h"
+#include "ns3/sixlowpan-net-device.h"
+
+#include "ns3/udp-l4-protocol.h"
+
+#include "ns3/ipv6-l3-protocol.h"
+#include "ns3/icmpv6-l4-protocol.h"
+
+#include <string>
+#include <limits>
+#include <netinet/in.h>
+
+using namespace ns3;
+
+class UdpSocketImpl;
+
+static void
+AddInternetStack (Ptr<Node> node)
+{
+  //IPV6
+  Ptr<Ipv6L3Protocol> ipv6 = CreateObject<Ipv6L3Protocol> ();
+
+  //Routing for Ipv6
+  Ptr<Ipv6ListRouting> ipv6Routing = CreateObject<Ipv6ListRouting> ();
+  ipv6->SetRoutingProtocol (ipv6Routing);
+  Ptr<Ipv6StaticRouting> ipv6staticRouting = CreateObject<Ipv6StaticRouting> ();
+  ipv6Routing->AddRoutingProtocol (ipv6staticRouting, 0);
+  node->AggregateObject (ipv6);
+
+  //ICMPv6
+  Ptr<Icmpv6L4Protocol> icmp6 = CreateObject<Icmpv6L4Protocol> ();
+  node->AggregateObject (icmp6);
+
+  //Ipv6 Extensions
+  ipv6->RegisterExtensions ();
+  ipv6->RegisterOptions ();
+
+  //UDP
+  Ptr<UdpL4Protocol> udp = CreateObject<UdpL4Protocol> ();
+  node->AggregateObject (udp);
+}
+
+
+class SixlowpanFragmentationTest : public TestCase
+{
+  Ptr<Packet> m_sentPacketClient;
+  Ptr<Packet> m_receivedPacketClient;
+  Ptr<Packet> m_receivedPacketServer;
+
+
+  Ptr<Socket> m_socketServer;
+  Ptr<Socket> m_socketClient;
+  uint32_t m_dataSize;
+  uint8_t *m_data;
+  uint32_t m_size;
+  uint8_t m_icmpType;
+  uint8_t m_icmpCode;
+
+public:
+  virtual void DoRun (void);
+  SixlowpanFragmentationTest ();
+  ~SixlowpanFragmentationTest ();
+
+  // server part
+  void StartServer (Ptr<Node> ServerNode);
+  void HandleReadServer (Ptr<Socket> socket);
+
+  // client part
+  void StartClient (Ptr<Node> ClientNode);
+  void HandleReadClient (Ptr<Socket> socket);
+  void HandleReadIcmpClient (Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType,
+                             uint8_t icmpCode,uint32_t icmpInfo);
+
+  void SetFill (uint8_t *fill, uint32_t fillSize, uint32_t dataSize);
+  Ptr<Packet> SendClient (void);
+
+};
+
+
+SixlowpanFragmentationTest::SixlowpanFragmentationTest ()
+  : TestCase ("Verify the 6LoWPAN protocol fragmentation and reassembly")
+{
+  m_socketServer = 0;
+  m_data = 0;
+  m_dataSize = 0;
+}
+
+SixlowpanFragmentationTest::~SixlowpanFragmentationTest ()
+{
+  if ( m_data )
+    {
+      delete[] m_data;
+    }
+  m_data = 0;
+  m_dataSize = 0;
+}
+
+
+void
+SixlowpanFragmentationTest::StartServer (Ptr<Node> ServerNode)
+{
+
+  if (m_socketServer == 0)
+    {
+      TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
+      m_socketServer = Socket::CreateSocket (ServerNode, tid);
+      Inet6SocketAddress local = Inet6SocketAddress (Ipv6Address ("2001:0100::1"), 9);
+      m_socketServer->Bind (local);
+      Ptr<UdpSocket> udpSocket = DynamicCast<UdpSocket> (m_socketServer);
+    }
+
+  m_socketServer->SetRecvCallback (MakeCallback (&SixlowpanFragmentationTest::HandleReadServer, this));
+}
+
+void
+SixlowpanFragmentationTest::HandleReadServer (Ptr<Socket> socket)
+{
+  Ptr<Packet> packet;
+  Address from;
+  while ((packet = socket->RecvFrom (from)))
+    {
+      if (Inet6SocketAddress::IsMatchingType (from))
+        {
+          packet->RemoveAllPacketTags ();
+          packet->RemoveAllByteTags ();
+
+          m_receivedPacketServer = packet->Copy ();
+        }
+    }
+}
+
+void
+SixlowpanFragmentationTest::StartClient (Ptr<Node> ClientNode)
+{
+
+  if (m_socketClient == 0)
+    {
+      TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
+      m_socketClient = Socket::CreateSocket (ClientNode, tid);
+      m_socketClient->Bind (Inet6SocketAddress (Ipv6Address::GetAny (), 9));
+      m_socketClient->Connect (Inet6SocketAddress (Ipv6Address ("2001:0100::1"), 9));
+      CallbackValue cbValue = MakeCallback (&SixlowpanFragmentationTest::HandleReadIcmpClient, this);
+      m_socketClient->SetAttribute ("IcmpCallback6", cbValue);
+    }
+
+  m_socketClient->SetRecvCallback (MakeCallback (&SixlowpanFragmentationTest::HandleReadClient, this));
+}
+
+void
+SixlowpanFragmentationTest::HandleReadClient (Ptr<Socket> socket)
+{
+  Ptr<Packet> packet;
+  Address from;
+  while ((packet = socket->RecvFrom (from)))
+    {
+      if (Inet6SocketAddress::IsMatchingType (from))
+        {
+          m_receivedPacketClient = packet->Copy ();
+        }
+    }
+}
+
+void
+SixlowpanFragmentationTest::HandleReadIcmpClient (Ipv6Address icmpSource,
+                                                  uint8_t icmpTtl, uint8_t icmpType,
+                                                  uint8_t icmpCode, uint32_t icmpInfo)
+{
+  m_icmpType = icmpType;
+  m_icmpCode = icmpCode;
+}
+
+void
+SixlowpanFragmentationTest::SetFill (uint8_t *fill, uint32_t fillSize, uint32_t dataSize)
+{
+  if (dataSize != m_dataSize)
+    {
+      delete [] m_data;
+      m_data = new uint8_t [dataSize];
+      m_dataSize = dataSize;
+    }
+
+  if (fillSize >= dataSize)
+    {
+      memcpy (m_data, fill, dataSize);
+      return;
+    }
+
+  uint32_t filled = 0;
+  while (filled + fillSize < dataSize)
+    {
+      memcpy (&m_data[filled], fill, fillSize);
+      filled += fillSize;
+    }
+
+  memcpy (&m_data[filled], fill, dataSize - filled);
+
+  m_size = dataSize;
+}
+
+Ptr<Packet> SixlowpanFragmentationTest::SendClient (void)
+{
+  Ptr<Packet> p;
+  if (m_dataSize)
+    {
+      p = Create<Packet> (m_data, m_dataSize);
+    }
+  else
+    {
+      p = Create<Packet> (m_size);
+    }
+  m_socketClient->Send (p);
+
+  return p;
+}
+
+void
+SixlowpanFragmentationTest::DoRun (void)
+{
+  // Create topology
+
+  // Receiver Node
+  Ptr<Node> serverNode = CreateObject<Node> ();
+  AddInternetStack (serverNode);
+  Ptr<SimpleNetDevice> serverDev;
+  Ptr<BinaryErrorSixlowModel> serverDevErrorModel = CreateObject<BinaryErrorSixlowModel> ();
+  {
+    serverDev = CreateObject<SimpleNetDevice> ();
+    serverDev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
+    serverDev->SetMtu (1500);
+    serverDev->SetReceiveErrorModel (serverDevErrorModel);
+    serverDevErrorModel->Disable ();
+    serverNode->AddDevice (serverDev);
+
+    Ptr<SixLowPanNetDevice> serverSix = CreateObject<SixLowPanNetDevice> ();
+    serverSix->SetAttribute ("ForceEtherType", BooleanValue (true) );
+    serverNode->AddDevice (serverSix);
+    serverSix->SetNetDevice (serverDev);
+
+    Ptr<Ipv6> ipv6 = serverNode->GetObject<Ipv6> ();
+    ipv6->AddInterface (serverDev);
+    uint32_t netdev_idx = ipv6->AddInterface (serverSix);
+    Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:0100::1"), Ipv6Prefix (64));
+    ipv6->AddAddress (netdev_idx, ipv6Addr);
+    ipv6->SetUp (netdev_idx);
+
+    Ptr<Icmpv6L4Protocol> icmpv6l4 = serverNode->GetObject<Icmpv6L4Protocol> ();
+    icmpv6l4->SetAttribute ("DAD", BooleanValue (false));
+  }
+  StartServer (serverNode);
+
+  // Sender Node
+  Ptr<Node> clientNode = CreateObject<Node> ();
+  AddInternetStack (clientNode);
+  Ptr<SimpleNetDevice> clientDev;
+  Ptr<BinaryErrorSixlowModel> clientDevErrorModel = CreateObject<BinaryErrorSixlowModel> ();
+  {
+    clientDev = CreateObject<SimpleNetDevice> ();
+    clientDev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
+    clientDev->SetMtu (150);
+    clientDev->SetReceiveErrorModel (clientDevErrorModel);
+    clientDevErrorModel->Disable ();
+    clientNode->AddDevice (clientDev);
+
+    Ptr<SixLowPanNetDevice> clientSix = CreateObject<SixLowPanNetDevice> ();
+    clientSix->SetAttribute ("ForceEtherType", BooleanValue (true) );
+    serverNode->AddDevice (clientSix);
+    clientSix->SetNetDevice (clientDev);
+
+    Ptr<Ipv6> ipv6 = clientNode->GetObject<Ipv6> ();
+    ipv6->AddInterface (clientDev);
+    uint32_t netdev_idx = ipv6->AddInterface (clientSix);
+    Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:0100::2"), Ipv6Prefix (64));
+    ipv6->AddAddress (netdev_idx, ipv6Addr);
+    ipv6->SetUp (netdev_idx);
+
+    Ptr<Icmpv6L4Protocol> icmpv6l4 = clientNode->GetObject<Icmpv6L4Protocol> ();
+    icmpv6l4->SetAttribute ("DAD", BooleanValue (false));
+  }
+  StartClient (clientNode);
+
+  // link the two nodes
+  Ptr<ErrorChannelSixlow> channel = CreateObject<ErrorChannelSixlow> ();
+  serverDev->SetChannel (channel);
+  clientDev->SetChannel (channel);
+
+
+  // some small packets, some rather big ones
+  uint32_t packetSizes[5] = {200, 300, 400, 500, 600};
+
+  // using the alphabet
+  uint8_t fillData[78];
+  for ( uint32_t k = 48; k <= 125; k++ )
+    {
+      fillData[k - 48] = k;
+    }
+
+  // First test: normal channel, no errors, no delays
+  for ( int i = 0; i < 5; i++)
+    {
+      uint32_t packetSize = packetSizes[i];
+
+      SetFill (fillData, 78, packetSize);
+
+      m_receivedPacketServer = Create<Packet> ();
+      Simulator::ScheduleWithContext (m_socketClient->GetNode ()->GetId (), Seconds (0),
+                                      &SixlowpanFragmentationTest::SendClient, this);
+      Simulator::Run ();
+
+      uint8_t recvBuffer[65000];
+
+      uint16_t recvSize = m_receivedPacketServer->GetSize ();
+
+      NS_TEST_EXPECT_MSG_EQ (recvSize, packetSizes[i],
+                             "Packet size not correct: recvSize: " << recvSize << " packetSizes[" << i << "]: " << packetSizes[i] );
+
+      m_receivedPacketServer->CopyData (recvBuffer, 65000);
+      NS_TEST_EXPECT_MSG_EQ (memcmp (m_data, recvBuffer, m_receivedPacketServer->GetSize ()),
+                             0, "Packet content differs");
+    }
+
+  // Second test: normal channel, no errors, delays each 2 packets.
+  // Each other fragment will arrive out-of-order.
+  // The packets should be received correctly since reassembly will reorder the fragments.
+  channel->SetJumpingMode (true);
+  for ( int i = 0; i < 5; i++)
+    {
+      uint32_t packetSize = packetSizes[i];
+
+      SetFill (fillData, 78, packetSize);
+
+      m_receivedPacketServer = Create<Packet> ();
+      Simulator::ScheduleWithContext (m_socketClient->GetNode ()->GetId (), Seconds (0),
+                                      &SixlowpanFragmentationTest::SendClient, this);
+      Simulator::Run ();
+
+      uint8_t recvBuffer[65000];
+
+      uint16_t recvSize = m_receivedPacketServer->GetSize ();
+
+      NS_TEST_EXPECT_MSG_EQ (recvSize, packetSizes[i],
+                             "Packet size not correct: recvSize: " << recvSize << " packetSizes[" << i << "]: " << packetSizes[i] );
+
+      m_receivedPacketServer->CopyData (recvBuffer, 65000);
+      NS_TEST_EXPECT_MSG_EQ (memcmp (m_data, recvBuffer, m_receivedPacketServer->GetSize ()),
+                             0, "Packet content differs");
+    }
+  channel->SetJumpingMode (false);
+
+
+  // Third test: normal channel, some packets are duplicate.
+  // The duplicate fragments should be discarded, so no error should be fired.
+  channel->SetDuplicateMode (true);
+  for ( int i = 1; i < 5; i++)
+    {
+      uint32_t packetSize = packetSizes[i];
+
+      SetFill (fillData, 78, packetSize);
+
+      // reset the model, we want to receive the very first fragment.
+      serverDevErrorModel->Reset ();
+
+      m_receivedPacketServer = Create<Packet> ();
+      m_icmpType = 0;
+      m_icmpCode = 0;
+      Simulator::ScheduleWithContext (m_socketClient->GetNode ()->GetId (), Seconds (0),
+                                      &SixlowpanFragmentationTest::SendClient, this);
+      Simulator::Run ();
+
+      uint8_t recvBuffer[65000];
+
+      uint16_t recvSize = m_receivedPacketServer->GetSize ();
+
+      NS_TEST_EXPECT_MSG_EQ (recvSize, packetSizes[i],
+                             "Packet size not correct: recvSize: " << recvSize << " packetSizes[" << i << "]: " << packetSizes[i] );
+
+      m_receivedPacketServer->CopyData (recvBuffer, 65000);
+      NS_TEST_EXPECT_MSG_EQ (memcmp (m_data, recvBuffer, m_receivedPacketServer->GetSize ()),
+                             0, "Packet content differs");
+    }
+  channel->SetDuplicateMode (false);
+
+  // Fourth test: normal channel, some errors, no delays.
+  // The reassembly procedure does NOT fire any ICMP, so we do not expect any reply from the server.
+  // Client -> Server : errors enabled
+  // Server -> Client : errors disabled
+  clientDevErrorModel->Disable ();
+  serverDevErrorModel->Enable ();
+  for ( int i = 1; i < 5; i++)
+    {
+      uint32_t packetSize = packetSizes[i];
+
+      SetFill (fillData, 78, packetSize);
+
+      // reset the model, we want to receive the very first fragment.
+      serverDevErrorModel->Reset ();
+
+      m_receivedPacketServer = Create<Packet> ();
+      m_icmpType = 0;
+      m_icmpCode = 0;
+      Simulator::ScheduleWithContext (m_socketClient->GetNode ()->GetId (), Seconds (0),
+                                      &SixlowpanFragmentationTest::SendClient, this);
+      Simulator::Run ();
+
+      uint16_t recvSize = m_receivedPacketServer->GetSize ();
+
+      NS_TEST_EXPECT_MSG_EQ ((recvSize == 0), true, "Server got a packet, something wrong");
+      // Note that a 6LoWPAN fragment timeout does NOT send any ICMPv6.
+    }
+
+
+
+  Simulator::Destroy ();
+}
+//-----------------------------------------------------------------------------
+class SixlowpanFragmentationTestSuite : public TestSuite
+{
+public:
+  SixlowpanFragmentationTestSuite () : TestSuite ("sixlowpan-fragmentation", UNIT)
+  {
+    AddTestCase (new SixlowpanFragmentationTest, TestCase::QUICK);
+  }
+} g_sixlowpanFragmentationTestSuite;
diff -Naur ns-3.18.1/src/sixlowpan/test/sixlowpan-hc1-test.cc ns-3.19/src/sixlowpan/test/sixlowpan-hc1-test.cc
--- ns-3.18.1/src/sixlowpan/test/sixlowpan-hc1-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/sixlowpan/test/sixlowpan-hc1-test.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,216 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Universita' di Firenze, Italy
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#include "ns3/test.h"
+#include "ns3/socket-factory.h"
+#include "ns3/udp-socket-factory.h"
+#include "ns3/simulator.h"
+#include "ns3/simple-channel.h"
+#include "ns3/simple-net-device.h"
+#include "ns3/drop-tail-queue.h"
+#include "ns3/socket.h"
+#include "ns3/boolean.h"
+
+#include "ns3/log.h"
+#include "ns3/node.h"
+#include "ns3/inet6-socket-address.h"
+
+#include "ns3/ipv6-l3-protocol.h"
+#include "ns3/icmpv6-l4-protocol.h"
+#include "ns3/udp-l4-protocol.h"
+#include "ns3/ipv6-list-routing.h"
+#include "ns3/ipv6-static-routing.h"
+
+#include "ns3/sixlowpan-net-device.h"
+
+#include <string>
+#include <limits>
+
+using namespace ns3;
+
+static void
+AddInternetStack6 (Ptr<Node> node)
+{
+  //IPV6
+  Ptr<Ipv6L3Protocol> ipv6 = CreateObject<Ipv6L3Protocol> ();
+  //Routing for Ipv6
+  Ptr<Ipv6ListRouting> ipv6Routing = CreateObject<Ipv6ListRouting> ();
+  ipv6->SetRoutingProtocol (ipv6Routing);
+  Ptr<Ipv6StaticRouting> ipv6staticRouting = CreateObject<Ipv6StaticRouting> ();
+  ipv6Routing->AddRoutingProtocol (ipv6staticRouting, 0);
+  node->AggregateObject (ipv6);
+  //ICMP
+  Ptr<Icmpv6L4Protocol> icmp = CreateObject<Icmpv6L4Protocol> ();
+  node->AggregateObject (icmp);
+  //Ipv6 Extensions
+  ipv6->RegisterExtensions ();
+  ipv6->RegisterOptions ();
+  //UDP
+  Ptr<UdpL4Protocol> udp = CreateObject<UdpL4Protocol> ();
+  node->AggregateObject (udp);
+}
+
+
+class SixlowpanHc1ImplTest : public TestCase
+{
+  Ptr<Packet> m_receivedPacket;
+  void DoSendData (Ptr<Socket> socket, std::string to);
+  void SendData (Ptr<Socket> socket, std::string to);
+
+public:
+  virtual void DoRun (void);
+  SixlowpanHc1ImplTest ();
+
+  void ReceivePacket (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from);
+  void ReceivePkt (Ptr<Socket> socket);
+};
+
+SixlowpanHc1ImplTest::SixlowpanHc1ImplTest ()
+  : TestCase ("Sixlowpan implementation")
+{
+}
+
+void SixlowpanHc1ImplTest::ReceivePacket (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from)
+{
+  m_receivedPacket = packet;
+}
+
+void SixlowpanHc1ImplTest::ReceivePkt (Ptr<Socket> socket)
+{
+  uint32_t availableData;
+  availableData = socket->GetRxAvailable ();
+  m_receivedPacket = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
+  NS_ASSERT (availableData == m_receivedPacket->GetSize ());
+  //cast availableData to void, to suppress 'availableData' set but not used
+  //compiler warning
+  (void) availableData;
+}
+
+void
+SixlowpanHc1ImplTest::DoSendData (Ptr<Socket> socket, std::string to)
+{
+  Address realTo = Inet6SocketAddress (Ipv6Address (to.c_str ()), 1234);
+  uint8_t buffer [] = "\"Can you tell me where my country lies?\" \\ said the unifaun to his true love's eyes. \\ \"It lies with me!\" cried the Queen of Maybe \\ - for her merchandise, he traded in his prize.";
+
+  Ptr<Packet> packet = Create<Packet> (buffer, 180);
+  NS_TEST_EXPECT_MSG_EQ (socket->SendTo (packet, 0, realTo),
+                         180, "200");
+}
+
+void
+SixlowpanHc1ImplTest::SendData (Ptr<Socket> socket, std::string to)
+{
+  m_receivedPacket = Create<Packet> ();
+  Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0),
+                                  &SixlowpanHc1ImplTest::DoSendData, this, socket, to);
+  Simulator::Run ();
+}
+
+void
+SixlowpanHc1ImplTest::DoRun (void)
+{
+  // Create topology
+
+  // Receiver Node
+  Ptr<Node> rxNode = CreateObject<Node> ();
+  AddInternetStack6 (rxNode);
+  Ptr<SimpleNetDevice> rxDev;
+  { // first interface
+    rxDev = CreateObject<SimpleNetDevice> ();
+    rxDev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
+    rxNode->AddDevice (rxDev);
+
+    Ptr<SixLowPanNetDevice> rxSix = CreateObject<SixLowPanNetDevice> ();
+    rxSix->SetAttribute ("ForceEtherType", BooleanValue (true) );
+    rxSix->SetAttribute ("Rfc6282", BooleanValue (false) );
+    rxNode->AddDevice (rxSix);
+    rxSix->SetNetDevice (rxDev);
+
+    Ptr<Ipv6> ipv6 = rxNode->GetObject<Ipv6> ();
+    ipv6->AddInterface (rxDev);
+    uint32_t netdev_idx = ipv6->AddInterface (rxSix);
+    Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:0100::1"), Ipv6Prefix (64));
+    ipv6->AddAddress (netdev_idx, ipv6Addr);
+    ipv6->SetUp (netdev_idx);
+  }
+
+  // Sender Node
+  Ptr<Node> txNode = CreateObject<Node> ();
+  AddInternetStack6 (txNode);
+  Ptr<SimpleNetDevice> txDev;
+  {
+    txDev = CreateObject<SimpleNetDevice> ();
+    txDev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
+    txNode->AddDevice (txDev);
+
+    Ptr<SixLowPanNetDevice> txSix = CreateObject<SixLowPanNetDevice> ();
+    txSix->SetAttribute ("ForceEtherType", BooleanValue (true) );
+    txSix->SetAttribute ("Rfc6282", BooleanValue (false) );
+    txNode->AddDevice (txSix);
+    txSix->SetNetDevice (txDev);
+
+    Ptr<Ipv6> ipv6 = txNode->GetObject<Ipv6> ();
+    ipv6->AddInterface (txDev);
+    uint32_t netdev_idx = ipv6->AddInterface (txSix);
+    Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:0100::2"), Ipv6Prefix (64));
+    ipv6->AddAddress (netdev_idx, ipv6Addr);
+    ipv6->SetUp (netdev_idx);
+  }
+
+  // link the two nodes
+  Ptr<SimpleChannel> channel1 = CreateObject<SimpleChannel> ();
+  rxDev->SetChannel (channel1);
+  txDev->SetChannel (channel1);
+
+  // Create the UDP sockets
+  Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> ();
+  Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket ();
+  NS_TEST_EXPECT_MSG_EQ (rxSocket->Bind (Inet6SocketAddress (Ipv6Address ("2001:0100::1"), 1234)), 0, "trivial");
+  rxSocket->SetRecvCallback (MakeCallback (&SixlowpanHc1ImplTest::ReceivePkt, this));
+
+  Ptr<SocketFactory> txSocketFactory = txNode->GetObject<UdpSocketFactory> ();
+  Ptr<Socket> txSocket = txSocketFactory->CreateSocket ();
+  txSocket->SetAllowBroadcast (true);
+  // ------ Now the tests ------------
+
+  // Unicast test
+  SendData (txSocket, "2001:0100::1");
+  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 180, "trivial");
+  uint8_t rxBuffer [180];
+  uint8_t txBuffer [180] = "\"Can you tell me where my country lies?\" \\ said the unifaun to his true love's eyes. \\ \"It lies with me!\" cried the Queen of Maybe \\ - for her merchandise, he traded in his prize.";
+  m_receivedPacket->CopyData (rxBuffer, 180);
+  NS_TEST_EXPECT_MSG_EQ (memcmp (rxBuffer, txBuffer, 180), 0, "trivial");
+
+  m_receivedPacket->RemoveAllByteTags ();
+
+  Simulator::Destroy ();
+
+}
+
+
+//-----------------------------------------------------------------------------
+class SixlowpanHc1TestSuite : public TestSuite
+{
+public:
+  SixlowpanHc1TestSuite () : TestSuite ("sixlowpan-hc1", UNIT)
+  {
+    AddTestCase (new SixlowpanHc1ImplTest, TestCase::QUICK);
+  }
+} g_sixlowpanHc1TestSuite;
diff -Naur ns-3.18.1/src/sixlowpan/test/sixlowpan-iphc-test.cc ns-3.19/src/sixlowpan/test/sixlowpan-iphc-test.cc
--- ns-3.18.1/src/sixlowpan/test/sixlowpan-iphc-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/sixlowpan/test/sixlowpan-iphc-test.cc	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,214 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Universita' di Firenze, Italy
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#include "ns3/test.h"
+#include "ns3/socket-factory.h"
+#include "ns3/udp-socket-factory.h"
+#include "ns3/simulator.h"
+#include "ns3/simple-channel.h"
+#include "ns3/simple-net-device.h"
+#include "ns3/drop-tail-queue.h"
+#include "ns3/socket.h"
+#include "ns3/boolean.h"
+
+#include "ns3/log.h"
+#include "ns3/node.h"
+#include "ns3/inet6-socket-address.h"
+
+#include "ns3/ipv6-l3-protocol.h"
+#include "ns3/icmpv6-l4-protocol.h"
+#include "ns3/udp-l4-protocol.h"
+#include "ns3/ipv6-list-routing.h"
+#include "ns3/ipv6-static-routing.h"
+
+#include "ns3/sixlowpan-net-device.h"
+
+#include <string>
+#include <limits>
+
+using namespace ns3;
+
+static void
+AddInternetStack6 (Ptr<Node> node)
+{
+  //IPV6
+  Ptr<Ipv6L3Protocol> ipv6 = CreateObject<Ipv6L3Protocol> ();
+  //Routing for Ipv6
+  Ptr<Ipv6ListRouting> ipv6Routing = CreateObject<Ipv6ListRouting> ();
+  ipv6->SetRoutingProtocol (ipv6Routing);
+  Ptr<Ipv6StaticRouting> ipv6staticRouting = CreateObject<Ipv6StaticRouting> ();
+  ipv6Routing->AddRoutingProtocol (ipv6staticRouting, 0);
+  node->AggregateObject (ipv6);
+  //ICMP
+  Ptr<Icmpv6L4Protocol> icmp = CreateObject<Icmpv6L4Protocol> ();
+  node->AggregateObject (icmp);
+  //Ipv6 Extensions
+  ipv6->RegisterExtensions ();
+  ipv6->RegisterOptions ();
+  //UDP
+  Ptr<UdpL4Protocol> udp = CreateObject<UdpL4Protocol> ();
+  node->AggregateObject (udp);
+}
+
+
+class SixlowpanIphcImplTest : public TestCase
+{
+  Ptr<Packet> m_receivedPacket;
+  void DoSendData (Ptr<Socket> socket, std::string to);
+  void SendData (Ptr<Socket> socket, std::string to);
+
+public:
+  virtual void DoRun (void);
+  SixlowpanIphcImplTest ();
+
+  void ReceivePacket (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from);
+  void ReceivePkt (Ptr<Socket> socket);
+};
+
+SixlowpanIphcImplTest::SixlowpanIphcImplTest ()
+  : TestCase ("Sixlowpan implementation")
+{
+}
+
+void SixlowpanIphcImplTest::ReceivePacket (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from)
+{
+  m_receivedPacket = packet;
+}
+
+void SixlowpanIphcImplTest::ReceivePkt (Ptr<Socket> socket)
+{
+  uint32_t availableData;
+  availableData = socket->GetRxAvailable ();
+  m_receivedPacket = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
+  NS_ASSERT (availableData == m_receivedPacket->GetSize ());
+  //cast availableData to void, to suppress 'availableData' set but not used
+  //compiler warning
+  (void) availableData;
+}
+
+void
+SixlowpanIphcImplTest::DoSendData (Ptr<Socket> socket, std::string to)
+{
+  Address realTo = Inet6SocketAddress (Ipv6Address (to.c_str ()), 1234);
+  uint8_t buffer [] = "\"Can you tell me where my country lies?\" \\ said the unifaun to his true love's eyes. \\ \"It lies with me!\" cried the Queen of Maybe \\ - for her merchandise, he traded in his prize.";
+
+  Ptr<Packet> packet = Create<Packet> (buffer, 180);
+  NS_TEST_EXPECT_MSG_EQ (socket->SendTo (packet, 0, realTo),
+                         180, "200");
+}
+
+void
+SixlowpanIphcImplTest::SendData (Ptr<Socket> socket, std::string to)
+{
+  m_receivedPacket = Create<Packet> ();
+  Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0),
+                                  &SixlowpanIphcImplTest::DoSendData, this, socket, to);
+  Simulator::Run ();
+}
+
+void
+SixlowpanIphcImplTest::DoRun (void)
+{
+  // Create topology
+
+  // Receiver Node
+  Ptr<Node> rxNode = CreateObject<Node> ();
+  AddInternetStack6 (rxNode);
+  Ptr<SimpleNetDevice> rxDev;
+  { // first interface
+    rxDev = CreateObject<SimpleNetDevice> ();
+    rxDev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
+    rxNode->AddDevice (rxDev);
+
+    Ptr<SixLowPanNetDevice> rxSix = CreateObject<SixLowPanNetDevice> ();
+    rxSix->SetAttribute ("ForceEtherType", BooleanValue (true) );
+    rxNode->AddDevice (rxSix);
+    rxSix->SetNetDevice (rxDev);
+
+    Ptr<Ipv6> ipv6 = rxNode->GetObject<Ipv6> ();
+    ipv6->AddInterface (rxDev);
+    uint32_t netdev_idx = ipv6->AddInterface (rxSix);
+    Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:0100::1"), Ipv6Prefix (64));
+    ipv6->AddAddress (netdev_idx, ipv6Addr);
+    ipv6->SetUp (netdev_idx);
+  }
+
+  // Sender Node
+  Ptr<Node> txNode = CreateObject<Node> ();
+  AddInternetStack6 (txNode);
+  Ptr<SimpleNetDevice> txDev;
+  {
+    txDev = CreateObject<SimpleNetDevice> ();
+    txDev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
+    txNode->AddDevice (txDev);
+
+    Ptr<SixLowPanNetDevice> txSix = CreateObject<SixLowPanNetDevice> ();
+    txSix->SetAttribute ("ForceEtherType", BooleanValue (true) );
+    txNode->AddDevice (txSix);
+    txSix->SetNetDevice (txDev);
+
+    Ptr<Ipv6> ipv6 = txNode->GetObject<Ipv6> ();
+    ipv6->AddInterface (txDev);
+    uint32_t netdev_idx = ipv6->AddInterface (txSix);
+    Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:0100::2"), Ipv6Prefix (64));
+    ipv6->AddAddress (netdev_idx, ipv6Addr);
+    ipv6->SetUp (netdev_idx);
+  }
+
+  // link the two nodes
+  Ptr<SimpleChannel> channel1 = CreateObject<SimpleChannel> ();
+  rxDev->SetChannel (channel1);
+  txDev->SetChannel (channel1);
+
+  // Create the UDP sockets
+  Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> ();
+  Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket ();
+  NS_TEST_EXPECT_MSG_EQ (rxSocket->Bind (Inet6SocketAddress (Ipv6Address ("2001:0100::1"), 1234)), 0, "trivial");
+  rxSocket->SetRecvCallback (MakeCallback (&SixlowpanIphcImplTest::ReceivePkt, this));
+
+  Ptr<SocketFactory> txSocketFactory = txNode->GetObject<UdpSocketFactory> ();
+  Ptr<Socket> txSocket = txSocketFactory->CreateSocket ();
+  txSocket->SetAllowBroadcast (true);
+  // ------ Now the tests ------------
+
+  // Unicast test
+  SendData (txSocket, "2001:0100::1");
+  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 180, "trivial");
+  uint8_t rxBuffer [180];
+  uint8_t txBuffer [180] = "\"Can you tell me where my country lies?\" \\ said the unifaun to his true love's eyes. \\ \"It lies with me!\" cried the Queen of Maybe \\ - for her merchandise, he traded in his prize.";
+  m_receivedPacket->CopyData (rxBuffer, 180);
+  NS_TEST_EXPECT_MSG_EQ (memcmp (rxBuffer, txBuffer, 180), 0, "trivial");
+
+  m_receivedPacket->RemoveAllByteTags ();
+
+  Simulator::Destroy ();
+
+}
+
+
+//-----------------------------------------------------------------------------
+class SixlowpanIphcTestSuite : public TestSuite
+{
+public:
+  SixlowpanIphcTestSuite () : TestSuite ("sixlowpan-iphc", UNIT)
+  {
+    AddTestCase (new SixlowpanIphcImplTest, TestCase::QUICK);
+  }
+} g_sixlowpanIphcTestSuite;
diff -Naur ns-3.18.1/src/sixlowpan/wscript ns-3.19/src/sixlowpan/wscript
--- ns-3.18.1/src/sixlowpan/wscript	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/sixlowpan/wscript	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,33 @@
+## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+
+def build(bld):
+    module = bld.create_ns3_module('sixlowpan', ['internet', 'network', 'core'])
+    module.includes = '.'
+    module.source = [
+        'model/sixlowpan-net-device.cc',
+        'model/sixlowpan-header.cc',
+        'helper/sixlowpan-helper.cc',
+        ]
+
+    module_test = bld.create_ns3_module_test_library('sixlowpan')
+    module_test.source = [
+        'test/sixlowpan-hc1-test.cc',
+        'test/sixlowpan-iphc-test.cc',
+        'test/error-channel-sixlow.cc',
+        'test/sixlowpan-fragmentation-test.cc',
+        
+        ]
+
+    headers = bld(features=['ns3header'])
+    headers.module = 'sixlowpan'
+    headers.source = [
+        'model/sixlowpan-net-device.h',
+        'model/sixlowpan-header.h',
+        'helper/sixlowpan-helper.h',
+        ]
+
+
+    if (bld.env['ENABLE_EXAMPLES']):
+        bld.recurse('examples')
+   
+    bld.ns3_python_bindings()
\ No newline at end of file
diff -Naur ns-3.18.1/src/spectrum/bindings/modulegen__gcc_ILP32.py ns-3.19/src/spectrum/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/spectrum/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/spectrum/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -221,7 +221,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1584,10 +1584,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -3606,6 +3607,11 @@
                    'void', 
                    [param('ns3::SpectrumValue const &', 'sinr'), param('ns3::Time', 'duration')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## spectrum-error-model.h (module 'spectrum'): static ns3::TypeId ns3::SpectrumErrorModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## spectrum-error-model.h (module 'spectrum'): bool ns3::SpectrumErrorModel::IsRxCorrect() [member function]
     cls.add_method('IsRxCorrect', 
                    'bool', 
@@ -3934,6 +3940,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -3944,6 +3955,11 @@
                    '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', 
@@ -3959,6 +3975,11 @@
                    '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', 
@@ -3984,6 +4005,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/spectrum/bindings/modulegen__gcc_LP64.py ns-3.19/src/spectrum/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/spectrum/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/spectrum/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -221,7 +221,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1584,10 +1584,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -3606,6 +3607,11 @@
                    'void', 
                    [param('ns3::SpectrumValue const &', 'sinr'), param('ns3::Time', 'duration')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## spectrum-error-model.h (module 'spectrum'): static ns3::TypeId ns3::SpectrumErrorModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## spectrum-error-model.h (module 'spectrum'): bool ns3::SpectrumErrorModel::IsRxCorrect() [member function]
     cls.add_method('IsRxCorrect', 
                    'bool', 
@@ -3934,6 +3940,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -3944,6 +3955,11 @@
                    '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', 
@@ -3959,6 +3975,11 @@
                    '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', 
@@ -3984,6 +4005,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/spectrum/doc/spectrum.rst ns-3.19/src/spectrum/doc/spectrum.rst
--- ns-3.18.1/src/spectrum/doc/spectrum.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/spectrum/doc/spectrum.rst	2013-12-20 09:44:50.000000000 -0800
@@ -9,6 +9,6 @@
 
 The model is described in [Baldo2009]_. 
 
-.. [Baldo2009] N. Baldo and M. Miozzo, "Spectrum-aware Channel and PHY layer modeling for ns3", 
-   Proceedings of ICST NSTools 2009, Pisa, Italy. 
+..
+  Reference Baldo2009 is defined in lte/doc/lte-references.rst
 
diff -Naur ns-3.18.1/src/spectrum/model/aloha-noack-mac-header.cc ns-3.19/src/spectrum/model/aloha-noack-mac-header.cc
--- ns-3.18.1/src/spectrum/model/aloha-noack-mac-header.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/spectrum/model/aloha-noack-mac-header.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (AlohaNoackMacHeader);
+NS_OBJECT_ENSURE_REGISTERED (AlohaNoackMacHeader)
+  ;
 
 TypeId
 AlohaNoackMacHeader::GetTypeId (void)
diff -Naur ns-3.18.1/src/spectrum/model/aloha-noack-net-device.cc ns-3.19/src/spectrum/model/aloha-noack-net-device.cc
--- ns-3.18.1/src/spectrum/model/aloha-noack-net-device.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/spectrum/model/aloha-noack-net-device.cc	2013-12-20 09:44:50.000000000 -0800
@@ -55,7 +55,8 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (AlohaNoackNetDevice);
+NS_OBJECT_ENSURE_REGISTERED (AlohaNoackNetDevice)
+  ;
 
 TypeId
 AlohaNoackNetDevice::GetTypeId (void)
diff -Naur ns-3.18.1/src/spectrum/model/constant-spectrum-propagation-loss.cc ns-3.19/src/spectrum/model/constant-spectrum-propagation-loss.cc
--- ns-3.18.1/src/spectrum/model/constant-spectrum-propagation-loss.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/spectrum/model/constant-spectrum-propagation-loss.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (ConstantSpectrumPropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (ConstantSpectrumPropagationLossModel)
+  ;
 
 ConstantSpectrumPropagationLossModel::ConstantSpectrumPropagationLossModel ()
 {
diff -Naur ns-3.18.1/src/spectrum/model/friis-spectrum-propagation-loss.cc ns-3.19/src/spectrum/model/friis-spectrum-propagation-loss.cc
--- ns-3.18.1/src/spectrum/model/friis-spectrum-propagation-loss.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/spectrum/model/friis-spectrum-propagation-loss.cc	2013-12-20 09:44:50.000000000 -0800
@@ -25,7 +25,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (FriisSpectrumPropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (FriisSpectrumPropagationLossModel)
+  ;
 
 
 FriisSpectrumPropagationLossModel::FriisSpectrumPropagationLossModel ()
diff -Naur ns-3.18.1/src/spectrum/model/half-duplex-ideal-phy.cc ns-3.19/src/spectrum/model/half-duplex-ideal-phy.cc
--- ns-3.18.1/src/spectrum/model/half-duplex-ideal-phy.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/spectrum/model/half-duplex-ideal-phy.cc	2013-12-20 09:44:50.000000000 -0800
@@ -36,7 +36,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (HalfDuplexIdealPhy);
+NS_OBJECT_ENSURE_REGISTERED (HalfDuplexIdealPhy)
+  ;
 
 HalfDuplexIdealPhy::HalfDuplexIdealPhy ()
   : m_mobility (0),
diff -Naur ns-3.18.1/src/spectrum/model/multi-model-spectrum-channel.cc ns-3.19/src/spectrum/model/multi-model-spectrum-channel.cc
--- ns-3.18.1/src/spectrum/model/multi-model-spectrum-channel.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/spectrum/model/multi-model-spectrum-channel.cc	2013-12-20 09:44:50.000000000 -0800
@@ -45,7 +45,8 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (MultiModelSpectrumChannel);
+NS_OBJECT_ENSURE_REGISTERED (MultiModelSpectrumChannel)
+  ;
 
 
 std::ostream& operator<< (std::ostream& lhs, TxSpectrumModelInfoMap_t& rhs)
diff -Naur ns-3.18.1/src/spectrum/model/non-communicating-net-device.cc ns-3.19/src/spectrum/model/non-communicating-net-device.cc
--- ns-3.18.1/src/spectrum/model/non-communicating-net-device.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/spectrum/model/non-communicating-net-device.cc	2013-12-20 09:44:50.000000000 -0800
@@ -36,7 +36,8 @@
 
 
 
-NS_OBJECT_ENSURE_REGISTERED (NonCommunicatingNetDevice);
+NS_OBJECT_ENSURE_REGISTERED (NonCommunicatingNetDevice)
+  ;
 
 TypeId
 NonCommunicatingNetDevice::GetTypeId (void)
diff -Naur ns-3.18.1/src/spectrum/model/single-model-spectrum-channel.cc ns-3.19/src/spectrum/model/single-model-spectrum-channel.cc
--- ns-3.18.1/src/spectrum/model/single-model-spectrum-channel.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/spectrum/model/single-model-spectrum-channel.cc	2013-12-20 09:44:50.000000000 -0800
@@ -44,7 +44,8 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (SingleModelSpectrumChannel);
+NS_OBJECT_ENSURE_REGISTERED (SingleModelSpectrumChannel)
+  ;
 
 SingleModelSpectrumChannel::SingleModelSpectrumChannel ()
 {
diff -Naur ns-3.18.1/src/spectrum/model/spectrum-analyzer.cc ns-3.19/src/spectrum/model/spectrum-analyzer.cc
--- ns-3.18.1/src/spectrum/model/spectrum-analyzer.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/spectrum/model/spectrum-analyzer.cc	2013-12-20 09:44:50.000000000 -0800
@@ -32,7 +32,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (SpectrumAnalyzer);
+NS_OBJECT_ENSURE_REGISTERED (SpectrumAnalyzer)
+  ;
 
 SpectrumAnalyzer::SpectrumAnalyzer ()
   : m_mobility (0),
diff -Naur ns-3.18.1/src/spectrum/model/spectrum-channel.cc ns-3.19/src/spectrum/model/spectrum-channel.cc
--- ns-3.18.1/src/spectrum/model/spectrum-channel.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/spectrum/model/spectrum-channel.cc	2013-12-20 09:44:50.000000000 -0800
@@ -24,7 +24,8 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (SpectrumChannel);
+NS_OBJECT_ENSURE_REGISTERED (SpectrumChannel)
+  ;
 
 TypeId
 SpectrumChannel::GetTypeId (void)
diff -Naur ns-3.18.1/src/spectrum/model/spectrum-error-model.cc ns-3.19/src/spectrum/model/spectrum-error-model.cc
--- ns-3.18.1/src/spectrum/model/spectrum-error-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/spectrum/model/spectrum-error-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -27,6 +27,17 @@
 
 namespace ns3 {
 
+NS_OBJECT_ENSURE_REGISTERED (SpectrumErrorModel);
+
+TypeId
+SpectrumErrorModel::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::SpectrumErrorModel")
+    .SetParent<Object> ()
+    ;
+  return tid;
+}
+
 SpectrumErrorModel::~SpectrumErrorModel ()
 {
 }
diff -Naur ns-3.18.1/src/spectrum/model/spectrum-error-model.h ns-3.19/src/spectrum/model/spectrum-error-model.h
--- ns-3.18.1/src/spectrum/model/spectrum-error-model.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/spectrum/model/spectrum-error-model.h	2013-12-20 09:44:50.000000000 -0800
@@ -39,6 +39,8 @@
 class SpectrumErrorModel :  public Object
 {
 public:
+
+  static TypeId GetTypeId ();
   virtual ~SpectrumErrorModel ();
   virtual void StartRx (Ptr<const Packet> p) = 0;
   virtual void EvaluateChunk (const SpectrumValue& sinr, Time duration) = 0;
@@ -72,31 +74,6 @@
 };
 
 
-// class EffectiveSnrSpectrumErrorModel
-// {
-// public:
-
-//   enum ModulationAndCoding {
-//     BPSK_1_2,
-//     BPSK_1_3,
-//     QPSK_1_2,
-//     QPSK_1_3,
-//     QAM16_1_2,
-//     QAM64_1_2
-//   };
-
-//   void StartRx (uint32_t bytes);
-//   void EvaluateChunk (const SpectrumValue& sinr, Time duration);
-//   bool IsRxCorrect ();
-
-// protected:
-//   uint32_t m_bytes;
-//   uint32_t m_deliverableBytes;
-
-// };
-
-
-
 } // namespace ns3
 
 
diff -Naur ns-3.18.1/src/spectrum/model/spectrum-phy.cc ns-3.19/src/spectrum/model/spectrum-phy.cc
--- ns-3.18.1/src/spectrum/model/spectrum-phy.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/spectrum/model/spectrum-phy.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (SpectrumPhy);
+NS_OBJECT_ENSURE_REGISTERED (SpectrumPhy)
+  ;
 
 
 TypeId
diff -Naur ns-3.18.1/src/spectrum/model/spectrum-propagation-loss-model.cc ns-3.19/src/spectrum/model/spectrum-propagation-loss-model.cc
--- ns-3.18.1/src/spectrum/model/spectrum-propagation-loss-model.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/spectrum/model/spectrum-propagation-loss-model.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,7 +26,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (SpectrumPropagationLossModel);
+NS_OBJECT_ENSURE_REGISTERED (SpectrumPropagationLossModel)
+  ;
 
 SpectrumPropagationLossModel::SpectrumPropagationLossModel ()
   : m_next (0)
diff -Naur ns-3.18.1/src/spectrum/model/waveform-generator.cc ns-3.19/src/spectrum/model/waveform-generator.cc
--- ns-3.18.1/src/spectrum/model/waveform-generator.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/spectrum/model/waveform-generator.cc	2013-12-20 09:44:50.000000000 -0800
@@ -32,7 +32,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (WaveformGenerator);
+NS_OBJECT_ENSURE_REGISTERED (WaveformGenerator)
+  ;
 
 WaveformGenerator::WaveformGenerator ()
   : m_mobility (0),
diff -Naur ns-3.18.1/src/stats/bindings/modulegen__gcc_ILP32.py ns-3.19/src/stats/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/stats/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -109,7 +109,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1749,6 +1749,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -1759,6 +1764,11 @@
                    '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', 
@@ -1774,6 +1784,11 @@
                    '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', 
@@ -1799,6 +1814,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/stats/bindings/modulegen__gcc_LP64.py ns-3.19/src/stats/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/stats/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -109,7 +109,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1749,6 +1749,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -1759,6 +1764,11 @@
                    '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', 
@@ -1774,6 +1784,11 @@
                    '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', 
@@ -1799,6 +1814,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/stats/doc/aggregator.rst ns-3.19/src/stats/doc/aggregator.rst
--- ns-3.18.1/src/stats/doc/aggregator.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/doc/aggregator.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 .. heading hierarchy:
    ************* Section (#.#)
diff -Naur ns-3.18.1/src/stats/doc/data-collection-helpers.rst ns-3.19/src/stats/doc/data-collection-helpers.rst
--- ns-3.18.1/src/stats/doc/data-collection-helpers.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/doc/data-collection-helpers.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 .. heading hierarchy:
    ************* Section (#.#)
@@ -162,26 +163,26 @@
 
 It has the following arguments:
 
-+--------------------------------+------------------------------+
-| Argument                       | Description                  |
-+================================+==============================+
-| outputFileNameWithoutExtension | Name of gnuplot related files|
-|                                | to write with no extension.  |
-+--------------------------------+------------------------------+
-| title                          | Plot title string to use for |
-|                                | this plot.                   |
-+--------------------------------+------------------------------+
-| xLegend                        | The legend for the x         |
-|                                | horizontal axis.             |
-+--------------------------------+------------------------------+
-| yLegend                        | The legend for the y         |
-|                                | vertical axis.               |
-+--------------------------------+------------------------------+
-| terminalType                   | Terminal type setting string |
-|                                | for output.  The default     |
-|                                | terminal type is "png".      |
-+--------------------------------+------------------------------+
-
+  +--------------------------------+------------------------------+
+  | Argument                       | Description                  |
+  +================================+==============================+
+  | outputFileNameWithoutExtension | Name of gnuplot related files|
+  |                                | to write with no extension.  |
+  +--------------------------------+------------------------------+
+  | title                          | Plot title string to use for |
+  |                                | this plot.                   |
+  +--------------------------------+------------------------------+
+  | xLegend                        | The legend for the x         |
+  |                                | horizontal axis.             |
+  +--------------------------------+------------------------------+
+  | yLegend                        | The legend for the y         |
+  |                                | vertical axis.               |
+  +--------------------------------+------------------------------+
+  | terminalType                   | Terminal type setting string |
+  |                                | for output.  The default     |
+  |                                | terminal type is "png".      |
+  +--------------------------------+------------------------------+
+  
 The GnuplotHelper's ``ConfigurePlot()`` function configures plot 
 related parameters for this gnuplot helper so
 that it will create a space separated gnuplot data file named
@@ -219,26 +220,26 @@
 
 It has the following arguments:
 
-+------------------+------------------------------+
-| Argument         | Description                  |
-+==================+==============================+
-| typeId           | The type ID for the probe    |
-|                  | used when it is created.     |
-+------------------+------------------------------+
-| path             | Config path to access the    |
-|                  | probe.                       |
-+------------------+------------------------------+
-| probeTraceSource | The probe trace source to    |
-|                  | access.                      |
-+------------------+------------------------------+
-| title            | The title to be associated   |
-|                  | to this dataset              |
-+------------------+------------------------------+
-| keyLocation      | The location of the key in   |
-|                  | the plot.  The default       |
-|                  | location is inside.          |
-+------------------+------------------------------+
-
+  +------------------+------------------------------+
+  | Argument         | Description                  |
+  +==================+==============================+
+  | typeId           | The type ID for the probe    |
+  |                  | used when it is created.     |
+  +------------------+------------------------------+
+  | path             | Config path to access the    |
+  |                  | probe.                       |
+  +------------------+------------------------------+
+  | probeTraceSource | The probe trace source to    |
+  |                  | access.                      |
+  +------------------+------------------------------+
+  | title            | The title to be associated   |
+  |                  | to this dataset              |
+  +------------------+------------------------------+
+  | keyLocation      | The location of the key in   |
+  |                  | the plot.  The default       |
+  |                  | location is inside.          |
+  +------------------+------------------------------+
+  
 The GnuplotHelper's ``PlotProbe()`` function 
 plots a dataset generated by hooking the |ns3| trace source with a
 probe, and then plotting the values from the probeTraceSource. 
@@ -365,7 +366,7 @@
 code that was added to the original |ns3| Tutorial example's code.  
 Only the first 10 lines of this file are shown here for brevity.
 
-::
+.. sourcecode:: text
 
   Time (Seconds) = 1.000e+00	Packet Byte Count = 40
   Time (Seconds) = 1.004e+00	Packet Byte Count = 40
@@ -386,7 +387,7 @@
 |ns3| Tutorial example's code.  Only the first 10 lines of this 
 file are shown here for brevity.
 
-::
+.. sourcecode:: text
 
   Time (Seconds) = 1.002e+00	Packet Byte Count = 40
   Time (Seconds) = 1.007e+00	Packet Byte Count = 40
@@ -445,17 +446,17 @@
 
 It has the following arguments:
 
-+--------------------------------+------------------------------+
-| Argument                       | Description                  |
-+================================+==============================+
-| outputFileNameWithoutExtension | Name of output file to write |
-|                                | with no extension.           |
-+--------------------------------+------------------------------+
-| fileType                       | Type of file to write.  The  | 
-|                                | default type of file is space| 
-|                                | separated.                   |
-+--------------------------------+------------------------------+
-
+  +--------------------------------+------------------------------+
+  | Argument                       | Description                  |
+  +================================+==============================+
+  | outputFileNameWithoutExtension | Name of output file to write |
+  |                                | with no extension.           |
+  +--------------------------------+------------------------------+
+  | fileType                       | Type of file to write.  The  | 
+  |                                | default type of file is space| 
+  |                                | separated.                   |
+  +--------------------------------+------------------------------+
+  
 The FileHelper's ``ConfigureFile()`` function configures text file 
 related parameters for the file helper so that
 it will create a file named outputFileNameWithoutExtension plus
@@ -487,19 +488,19 @@
 
 It has the following arguments:
 
-+------------------+------------------------------+
-| Argument         | Description                  |
-+==================+==============================+
-| typeId           | The type ID for the probe    |
-|                  | used when it is created.     |
-+------------------+------------------------------+
-| path             | Config path to access the    |
-|                  | probe.                       |
-+------------------+------------------------------+
-| probeTraceSource | The probe trace source to    |
-|                  | access.                      |
-+------------------+------------------------------+
-
+  +------------------+------------------------------+
+  | Argument         | Description                  |
+  +==================+==============================+
+  | typeId           | The type ID for the probe    |
+  |                  | used when it is created.     |
+  +------------------+------------------------------+
+  | path             | Config path to access the    |
+  |                  | probe.                       |
+  +------------------+------------------------------+
+  | probeTraceSource | The probe trace source to    |
+  |                  | access.                      |
+  +------------------+------------------------------+
+  
 The FileHelper's ``WriteProbe()`` function
 creates output text files generated by hooking the ns-3 trace source
 with a probe, and then writing the values from the
@@ -544,7 +545,7 @@
 ``file-helper-example.txt`` was created using the example.  
 Only the first 10 lines of this file are shown here for brevity.
 
-::
+.. sourcecode:: text
 
   Time (Seconds) = 4.995e-01	Count = 1
   Time (Seconds) = 1.463e+00	Count = 2
diff -Naur ns-3.18.1/src/stats/doc/data-collection.rst ns-3.19/src/stats/doc/data-collection.rst
--- ns-3.18.1/src/stats/doc/data-collection.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/doc/data-collection.rst	2013-12-20 09:44:50.000000000 -0800
@@ -32,5 +32,6 @@
    collector.rst
    aggregator.rst
    adaptor.rst
+   statistics.rst
    scope-and-limitations.rst
 
diff -Naur ns-3.18.1/src/stats/doc/probe.rst ns-3.19/src/stats/doc/probe.rst
--- ns-3.18.1/src/stats/doc/probe.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/doc/probe.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 .. heading hierarchy:
    ************* Section (#.#)
@@ -46,13 +47,17 @@
 * Probes register a name in the ns3::Config namespace (using
   ``Names::Add ()``) so that other objects may refer to them.
 * Probes provide a static method that allows one to manipulate a Probe
-  by name, such as what is done in ns2measure [Cic06]_ ::
+  by name, such as what is done in ns2measure [Cic06]_
 
-   Stat::put ("my_metric", ID, sample);
+  ::
 
-  The ns-3 equivalent of the above ns2measure code is, e.g.::
+    Stat::put ("my_metric", ID, sample);
 
-  DoubleProbe::SetValueByPath ("/path/to/probe", sample);
+  The ns-3 equivalent of the above ns2measure code is, e.g.
+
+  ::
+
+    DoubleProbe::SetValueByPath ("/path/to/probe", sample);
 
 Creation
 ########
@@ -245,23 +250,23 @@
 
 1. through a traced variable hooked to one Probe: 
 
-::
+   ::
   
-    TracedValue<double> m_counter;  // normally this would be integer type
+     TracedValue<double> m_counter;  // normally this would be integer type
   
 2. through a counter whose value is posted to a second Probe, referenced by its name in the Config system:
 
-::
+  ::
 
-  void
-  Emitter::Count (void)
-  {
-    NS_LOG_FUNCTION (this);
-    NS_LOG_DEBUG ("Counting at " << Simulator::Now ().GetSeconds ());
-    m_counter += 1.0;
-    DoubleProbe::SetValueByPath ("/Names/StaticallyAccessedProbe", m_counter);
-    Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Count, this);
-  }
+    void
+    Emitter::Count (void)
+    {
+      NS_LOG_FUNCTION (this);
+      NS_LOG_DEBUG ("Counting at " << Simulator::Now ().GetSeconds ());
+      m_counter += 1.0;
+      DoubleProbe::SetValueByPath ("/Names/StaticallyAccessedProbe", m_counter);
+      Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Count, this);
+    }
 
 Let's look at the Probe more carefully.  Probes can receive their values
 in a multiple ways:
@@ -303,7 +308,7 @@
 
 Case 0):
 
-::
+  ::
 
     // The below shows typical functionality without a probe
     // (connect a sink function to a trace source)
@@ -314,7 +319,7 @@
 
 case 1):
 
-::
+  ::
 
     // 
     // Probe1 will be hooked directly to the Emitter trace source object
@@ -331,7 +336,7 @@
 
 case 2):
 
-::
+  ::
 
     // 
     // Probe2 will be hooked to the Emitter trace source object by 
@@ -347,7 +352,7 @@
   
 case 4) (case 3 is not shown in this example):
 
-::
+  ::
 
     // 
     // Probe3 will be called by the emitter directly through the 
@@ -361,12 +366,14 @@
 And finally, the example shows how the probes can be hooked to
 generate output:
 
-::
+  ::
 
     // The probe itself should generate output.  The context that we provide
     // to this probe (in this case, the probe name) will help to disambiguate
     // the source of the trace
-    connected = probe3->TraceConnect ("Output", "/Names/Probes/StaticallyAccessedProbe/Output", MakeCallback (&NotifyViaProbe));
+    connected = probe3->TraceConnect ("Output",
+                                      "/Names/Probes/StaticallyAccessedProbe/Output",
+                                      MakeCallback (&NotifyViaProbe));
     NS_ASSERT_MSG (connected, "Trace source not .. connected to probe3 Output");
   
 The following callback is hooked to the Probe in this example for 
@@ -390,21 +397,18 @@
 Tutorial.  It can be found in 
 ``src/stats/examples/ipv4-packet-plot-example.cc``.
 
-::
-
-    // ===========================================================================
-    //
-    //         node 0                 node 1
-    //   +----------------+    +----------------+
-    //   |    ns-3 TCP    |    |    ns-3 TCP    |
-    //   +----------------+    +----------------+
-    //   |    10.1.1.1    |    |    10.1.1.2    |
-    //   +----------------+    +----------------+
-    //   | point-to-point |    | point-to-point |
-    //   +----------------+    +----------------+
-    //           |                     |
-    //           +---------------------+
+.. sourcecode:: text
 
+          node 0                 node 1
+    +----------------+    +----------------+
+    |    ns-3 TCP    |    |    ns-3 TCP    |
+    +----------------+    +----------------+
+    |    10.1.1.1    |    |    10.1.1.2    |
+    +----------------+    +----------------+
+    | point-to-point |    | point-to-point |
+    +----------------+    +----------------+
+            |                     |
+            +---------------------+
 
 
 We'll just look at the Probe, as it illustrates that Probes may also
diff -Naur ns-3.18.1/src/stats/doc/statistics.rst ns-3.19/src/stats/doc/statistics.rst
--- ns-3.18.1/src/stats/doc/statistics.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/doc/statistics.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 Statistical Framework
 ---------------------
@@ -35,8 +36,8 @@
 
 * The core framework and two basic data collectors: A counter, and a min/max/avg/total observer.
 * Extensions of those to easily work with times and packets.
-* Plaintext output formatted for omnetpp.
-* Database output using sqlite3, a standalone, lightweight, high performance SQL engine.
+* Plaintext output formatted for `OMNet++`_.
+* Database output using SQLite_, a standalone, lightweight, high performance SQL engine.
 * Mandatory and open ended metadata for describing and working with runs.
 * An example based on the notional experiment of examining the properties of NS-3's default ad hoc WiFi performance.  It incorporates the following:
 
@@ -47,6 +48,9 @@
   * An example of using packet tags to track end-to-end delay.
   * A simple control script which runs a number of trials of the experiment at varying distances and queries the resulting database to produce a graph using GNUPlot.
 
+.. _OMNet++: http://www.omnetpp.org
+.. _SQLite:  http://www.sqlite.org
+
 To-Do
 *****
 
@@ -98,17 +102,18 @@
 
   ::
 
+    double distance = 50.0;
+    string format ("OMNet++");
+    string experiment ("wifi-distance-test");
+    string strategy ("wifi-default");
+    string runID;
+
     CommandLine cmd;
-    cmd.AddValue("distance", "Distance apart to place nodes (in meters).",
-                 distance);
-    cmd.AddValue("format", "Format to use for data output.",
-                 format);
-    cmd.AddValue("experiment", "Identifier for experiment.",
-                 experiment);
-    cmd.AddValue("strategy", "Identifier for strategy.",
-                 strategy);
-    cmd.AddValue("run", "Identifier for run.",
-                 runID);
+    cmd.AddValue("distance",   "Distance apart to place nodes (in meters).", distance);
+    cmd.AddValue("format",     "Format to use for data output.",             format);
+    cmd.AddValue("experiment", "Identifier for experiment.",                 experiment);
+    cmd.AddValue("strategy",   "Identifier for strategy.",                   strategy);
+    cmd.AddValue("run",        "Identifier for run.",                        runID);
     cmd.Parse (argc, argv);
 
 * Creating nodes and network stacks using ``ns3::NodeContainer``, ``ns3::WiFiHelper``, and ``ns3::InternetStackHelper``.
@@ -170,30 +175,24 @@
   ::
 
     DataCollector data;
-    data.DescribeRun(experiment,
-                     strategy,
-                     input,
-                     runID);
+    data.DescribeRun(experiment, strategy, input, runID);
     data.AddMetadata("author", "tjkopena");
 
   Actual observation and calculating is done by ``ns3::DataCalculator`` objects, of which several different types exist.  These are created by the simulation program, attached to reporting or sampling code, and then registered with the ``ns3::DataCollector`` so they will be queried later for their output.  One easy observation mechanism is to use existing trace sources, for example to instrument objects in the ns-3 core without changing their code.  Here a counter is attached directly to a trace signal in the WiFi MAC layer on the target node.
 
   ::
 
-    Ptr<PacketCounterCalculator> totalRx =
-      CreateObject<PacketCounterCalculator>();
+    Ptr<PacketCounterCalculator> totalRx = CreateObject<PacketCounterCalculator>();
     totalRx->SetKey("wifi-rx-frames");
     Config::Connect("/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Rx",
-                    MakeCallback(&PacketCounterCalculator::FrameUpdate,
-                                      totalRx));
+                    MakeCallback(&PacketCounterCalculator::FrameUpdate, totalRx));
     data.AddDataCalculator(totalRx);
 
   Calculators may also be manipulated directly.  In this example, a counter is created and passed to the traffic sink application to be updated when packets are received.
 
   ::
 
-    Ptr<CounterCalculator<> > appRx =
-      CreateObject<CounterCalculator<> >();
+    Ptr<CounterCalculator<> > appRx = CreateObject<CounterCalculator<> >();
     appRx->SetKey("receiver-rx-packets");
     receiver->SetCounter(appRx);
     data.AddDataCalculator(appRx);
@@ -212,23 +211,24 @@
 
     Simulator::Run();    
 
-* Generating either omnetpp or sqlite output, depending on the command line arguments.  To do this a ``ns3::DataOutputInterface`` object is created and configured.  The specific type of this will determine the output format.  This object is then given the ``ns3::DataCollector`` object which it interrogates to produce the output.
+* Generating either `OMNet++`_ or SQLite_ output, depending on the command line arguments.  To do this a ``ns3::DataOutputInterface`` object is created and configured.  The specific type of this will determine the output format.  This object is then given the ``ns3::DataCollector`` object which it interrogates to produce the output.
 
-  ::
+  .. sourcecode:: cpp
 
     Ptr<DataOutputInterface> output;
-    if (format == "omnet") {
-      NS_LOG_INFO("Creating omnet formatted data output.");
+    if (format == "OMNet++") {
+      NS_LOG_INFO("Creating OMNet++ formatted data output.");
       output = CreateObject<OmnetDataOutput>();
     } else {
-      #ifdef STAT_USE_DB
-        NS_LOG_INFO("Creating sqlite formatted data output.");
+    #   ifdef STAT_USE_DB
+        NS_LOG_INFO("Creating SQLite formatted data output.");
         output = CreateObject<SqliteDataOutput>();
-      #endif
+    #   endif
     }
 
     output->Output(data);
 
+
 * Freeing any memory used by the simulation.  This should come at the end of the main function for the example.
 
   ::
@@ -240,18 +240,18 @@
 
 To see what the example program, applications, and stat framework are doing in detail, set the ``NS_LOG`` variable appropriately.  The following will provide copious output from all three.
   
-::
+.. sourcecode:: bash
 
-  export NS_LOG=StatFramework:WiFiDistanceExperiment:WiFiDistanceApps
+  $ export NS_LOG=WiFiDistanceExperiment:WiFiDistanceApps
 
 Note that this slows down the simulation extraordinarily.
 
 Sample Output
 =============
 
-Compiling and simply running the test program will append omnet++ formatted output such as the following to ``data.sca``.
+Compiling and simply running the test program will append `OMNet++`_ formatted output such as the following to ``data.sca``.
 
-::
+.. sourcecode:: text
  
   run run-1212239121
   
@@ -280,9 +280,11 @@
 Control Script
 ++++++++++++++
 
-In order to automate data collection at a variety of inputs (distances), a simple Bash script is used to execute a series of simulations.  It can be found at ``examples/stats/wifi-example-db.sh``.  The script runs through a set of distances, collecting the results into an sqlite3 database.  At each distance five trials are conducted to give a better picture of expected performance.  The entire experiment takes only a few dozen seconds to run on a low end machine as there is no output during the simulation and little traffic is generated.
+In order to automate data collection at a variety of inputs (distances), a simple Bash script is used to execute a series of simulations.  It can be found at ``examples/stats/wifi-example-db.sh``.  The script is meant to be run from the ``examples/stats/`` directory.
+
+The script runs through a set of distances, collecting the results into an SQLite_ database.  At each distance five trials are conducted to give a better picture of expected performance.  The entire experiment takes only a few dozen seconds to run on a low end machine as there is no output during the simulation and little traffic is generated.
   
-::
+.. sourcecode:: bash
 
   #!/bin/sh
   
@@ -314,9 +316,9 @@
 Analysis and Conclusion
 +++++++++++++++++++++++
 
-Once all trials have been conducted, the script executes a simple SQL query over the database using the sqlite3 command line program.  The query computes average packet loss in each set of trials associated with each distance.  It does not take into account different strategies, but the information is present in the database to make some simple extensions and do so.  The collected data is then passed to GNUPlot for graphing.
+Once all trials have been conducted, the script executes a simple SQL query over the database using the SQLite_ command line program.  The query computes average packet loss in each set of trials associated with each distance.  It does not take into account different strategies, but the information is present in the database to make some simple extensions and do so.  The collected data is then passed to GNUPlot for graphing.
   
-::
+.. sourcecode:: sql
 
   CMD="select exp.input,avg(100-((rx.value*100)/tx.value)) \
       from Singletons rx, Singletons tx, Experiments exp \
@@ -333,7 +335,7 @@
 
 The GNUPlot script found at ``examples/stats/wifi-example.gnuplot`` simply defines the output format and some basic formatting for the graph.
   
-::
+.. sourcecode:: bash
 
   set terminal postscript portrait enhanced lw 2 "Helvetica" 14
   
diff -Naur ns-3.18.1/src/stats/examples/double-probe-example.cc ns-3.19/src/stats/examples/double-probe-example.cc
--- ns-3.18.1/src/stats/examples/double-probe-example.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/examples/double-probe-example.cc	2013-12-20 09:44:50.000000000 -0800
@@ -50,7 +50,8 @@
 
 };
 
-NS_OBJECT_ENSURE_REGISTERED (Emitter);
+NS_OBJECT_ENSURE_REGISTERED (Emitter)
+  ;
 
 TypeId
 Emitter::GetTypeId (void)
diff -Naur ns-3.18.1/src/stats/examples/file-helper-example.cc ns-3.19/src/stats/examples/file-helper-example.cc
--- ns-3.18.1/src/stats/examples/file-helper-example.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/examples/file-helper-example.cc	2013-12-20 09:44:50.000000000 -0800
@@ -53,7 +53,8 @@
 
 };
 
-NS_OBJECT_ENSURE_REGISTERED (Emitter);
+NS_OBJECT_ENSURE_REGISTERED (Emitter)
+  ;
 
 TypeId
 Emitter::GetTypeId (void)
diff -Naur ns-3.18.1/src/stats/examples/gnuplot-helper-example.cc ns-3.19/src/stats/examples/gnuplot-helper-example.cc
--- ns-3.18.1/src/stats/examples/gnuplot-helper-example.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/examples/gnuplot-helper-example.cc	2013-12-20 09:44:50.000000000 -0800
@@ -53,7 +53,8 @@
 
 };
 
-NS_OBJECT_ENSURE_REGISTERED (Emitter);
+NS_OBJECT_ENSURE_REGISTERED (Emitter)
+  ;
 
 TypeId
 Emitter::GetTypeId (void)
diff -Naur ns-3.18.1/src/stats/helper/file-helper.cc ns-3.19/src/stats/helper/file-helper.cc
--- ns-3.18.1/src/stats/helper/file-helper.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/helper/file-helper.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,7 +30,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("FileHelper");
+NS_LOG_COMPONENT_DEFINE ("FileHelper")
+  ;
 
 FileHelper::FileHelper ()
   : m_aggregator                     (0),
diff -Naur ns-3.18.1/src/stats/helper/file-helper.h ns-3.19/src/stats/helper/file-helper.h
--- ns-3.18.1/src/stats/helper/file-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/helper/file-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -32,6 +32,7 @@
 namespace ns3 {
 
 /**
+ * \ingroup stats
  * \brief Helper class used to put data values into a file.
  **/
 class FileHelper
@@ -133,12 +134,13 @@
 
   /**
    * \param probeName the probe's name.
-   *
+   * \return Ptr to the probe
    * \brief Gets the specified probe.
    */
   Ptr<Probe> GetProbe (std::string probeName) const;
 
   /**
+   * \return Ptr to a FileAggregator object
    * \brief Gets the single aggregator that is always constructed.
    *
    * This function is non-const because an aggregator may be lazily
@@ -149,7 +151,7 @@
   /**
    * \param aggregatorName name for aggregator.
    * \param outputFileName name of output file to write.
-   *
+   * \return Ptr to a FileAggregator object
    * \brief Gets one of the multiple aggregators from the map.
    *
    * This function is non-const because an aggregator may be lazily
@@ -303,17 +305,16 @@
   /// Heading line for the outputfile.
   std::string m_heading;
 
-  /// Format strings for C-style sprintf() function.
-  std::string m_1dFormat;
-  std::string m_2dFormat;
-  std::string m_3dFormat;
-  std::string m_4dFormat;
-  std::string m_5dFormat;
-  std::string m_6dFormat;
-  std::string m_7dFormat;
-  std::string m_8dFormat;
-  std::string m_9dFormat;
-  std::string m_10dFormat;
+  std::string m_1dFormat;  //!< Format string for 1D format C-style sprintf() function.
+  std::string m_2dFormat;  //!< Format string for 2D format C-style sprintf() function.
+  std::string m_3dFormat;  //!< Format string for 3D format C-style sprintf() function.
+  std::string m_4dFormat;  //!< Format string for 4D format C-style sprintf() function.
+  std::string m_5dFormat;  //!< Format string for 5D format C-style sprintf() function.
+  std::string m_6dFormat;  //!< Format string for 6D format C-style sprintf() function.
+  std::string m_7dFormat;  //!< Format string for 7D format C-style sprintf() function.
+  std::string m_8dFormat;  //!< Format string for 8D format C-style sprintf() function.
+  std::string m_9dFormat;  //!< Format string for 9D format C-style sprintf() function.
+  std::string m_10dFormat; //!< Format string for 10D format C-style sprintf() function.
 
 }; // class FileHelper
 
diff -Naur ns-3.18.1/src/stats/helper/gnuplot-helper.cc ns-3.19/src/stats/helper/gnuplot-helper.cc
--- ns-3.18.1/src/stats/helper/gnuplot-helper.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/helper/gnuplot-helper.cc	2013-12-20 09:44:50.000000000 -0800
@@ -32,7 +32,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("GnuplotHelper");
+NS_LOG_COMPONENT_DEFINE ("GnuplotHelper")
+  ;
 
 GnuplotHelper::GnuplotHelper ()
   : m_aggregator                     (0),
diff -Naur ns-3.18.1/src/stats/helper/gnuplot-helper.h ns-3.19/src/stats/helper/gnuplot-helper.h
--- ns-3.18.1/src/stats/helper/gnuplot-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/helper/gnuplot-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -33,6 +33,7 @@
 namespace ns3 {
 
 /**
+ * \ingroup gnuplot
  * \brief Helper class used to make gnuplot plots.
  **/
 class GnuplotHelper
@@ -139,12 +140,13 @@
 
   /**
    * \param probeName the probe's name.
-   *
+   * \return Ptr to probe
    * \brief Gets the specified probe.
    */
   Ptr<Probe> GetProbe (std::string probeName) const;
 
   /**
+   * \return Ptr to GnuplotAggregator object
    * \brief Gets the aggregator.
    *
    * This function is non-const because an aggregator may be lazily
diff -Naur ns-3.18.1/src/stats/model/average.h ns-3.19/src/stats/model/average.h
--- ns-3.18.1/src/stats/model/average.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/average.h	2013-12-20 09:44:50.000000000 -0800
@@ -30,12 +30,7 @@
 namespace ns3 {
 
 /**
- * \defgroup tools Tools
- *
- */
-
-/**
- * \ingroup tools
+ * \ingroup stats
  *
  * Simple average, min, max and std. deviation calculator
  *
@@ -106,9 +101,10 @@
   //\}
 
 private:
-  uint32_t m_size;
-  T      m_min, m_max;
-  MinMaxAvgTotalCalculator<double> m_varianceCalculator;
+  uint32_t m_size; //!< Number of sampled data.
+  T m_min; //!< Minimum value observed.
+  T m_max; //!< Maximum value observed.
+  MinMaxAvgTotalCalculator<double> m_varianceCalculator; //!< Variance calculator.
 };
 
 /// Print avg (err) [min, max]
diff -Naur ns-3.18.1/src/stats/model/basic-data-calculators.h ns-3.19/src/stats/model/basic-data-calculators.h
--- ns-3.18.1/src/stats/model/basic-data-calculators.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/basic-data-calculators.h	2013-12-20 09:44:50.000000000 -0800
@@ -27,10 +27,11 @@
 namespace ns3 {
 
 /**
- * \defgroup stats Statistics
+ * \ingroup stats
+ * \class MinMaxAvgTotalCalculator
+ * \brief Template class MinMaxAvgTotalCalculator
  *
  */
-
 //------------------------------------------------------------
 //--------------------------------------------
 template <typename T  = uint32_t>
@@ -40,36 +41,75 @@
   MinMaxAvgTotalCalculator();
   virtual ~MinMaxAvgTotalCalculator();
 
+  /**
+   * Updates all variables of MinMaxAvgTotalCalculator
+   * \param i value of type T to use for updating the calculator
+   */
   void Update (const T i);
+  /**
+   * Reinitializes all variables of MinMaxAvgTotalCalculator
+   */
   void Reset ();
 
   virtual void Output (DataOutputCallback &callback) const;
 
+  /**
+   * Returns the count
+   * \return Count
+   */
   long getCount () const { return m_count; }
+  /**
+   * Returns the sum
+   * \return Total
+   */
   double getSum () const { return m_total; }
+  /**
+   * Returns the minimum value
+   * \return Min
+   */
   double getMin () const { return m_min; }
+  /**
+   * Returns the maximum value
+   * \return Max
+   */
   double getMax () const { return m_max; }
+  /**
+   * Returns the mean value
+   * \return Mean
+   */
   double getMean () const { return m_meanCurr; }
+  /**
+   * Returns the standard deviation
+   * \return Standard deviation
+   */
   double getStddev () const { return std::sqrt (m_varianceCurr); }
+  /**
+   * Returns the current variance
+   * \return Variance
+   */
   double getVariance () const { return m_varianceCurr; }
+  /**
+   * Returns the sum of squares
+   * \return Sum of squares
+   */
   double getSqrSum () const { return m_squareTotal; }
 
 protected:
   virtual void DoDispose (void);
 
-  uint32_t m_count;
+  uint32_t m_count;      //!< Count value of MinMaxAvgTotalCalculator
 
-  T m_total;
-  T m_squareTotal;
-  T m_min;
-  T m_max;
-
-  double m_meanCurr;
-  double m_sCurr;
-  double m_varianceCurr;
+  T m_total;             //!< Total value of MinMaxAvgTotalCalculator
+  T m_squareTotal;       //!< Sum of squares value of MinMaxAvgTotalCalculator
+  T m_min;               //!< Minimum value of MinMaxAvgTotalCalculator
+  T m_max;               //!< Maximum value of MinMaxAvgTotalCalculator
+
+  double m_meanCurr;     //!< Current mean of MinMaxAvgTotalCalculator
+  double m_sCurr;        //!< Current s of MinMaxAvgTotalCalculator
+  double m_varianceCurr; //!< Current variance of MinMaxAvgTotalCalculator
 
-  double m_meanPrev;
-  double m_sPrev;
+  double m_meanPrev;     //!< Previous mean of MinMaxAvgTotalCalculator
+  double m_sPrev;        //!< Previous s of MinMaxAvgTotalCalculator
 
   // end MinMaxAvgTotalCalculator
 };
@@ -197,6 +237,8 @@
 
 /**
  * \ingroup stats
+ * \class CounterCalculator
+ * \brief Template class CounterCalculator
  *
  */
 //------------------------------------------------------------
@@ -207,17 +249,32 @@
   CounterCalculator();
   virtual ~CounterCalculator();
 
+  /**
+   * Increments count by 1
+   */
   void Update ();
+  /**
+   * Increments count by i
+   * \param i value of type T to increment count
+   */
   void Update (const T i);
 
+  /**
+   * Returns the count of the CounterCalculator
+   * \return Count as a value of type T
+   */
   T GetCount () const;
 
+  /**
+   * Outputs the data based on the provided callback
+   * \param callback
+   */
   virtual void Output (DataOutputCallback &callback) const;
 
 protected:
   virtual void DoDispose (void);
 
-  T m_count;
+  T m_count; //!< Count value of CounterCalculator
 
   // end CounterCalculator
 };
diff -Naur ns-3.18.1/src/stats/model/boolean-probe.cc ns-3.19/src/stats/model/boolean-probe.cc
--- ns-3.18.1/src/stats/model/boolean-probe.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/boolean-probe.cc	2013-12-20 09:44:50.000000000 -0800
@@ -32,7 +32,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (BooleanProbe);
+NS_OBJECT_ENSURE_REGISTERED (BooleanProbe)
+  ;
 
 TypeId
 BooleanProbe::GetTypeId ()
diff -Naur ns-3.18.1/src/stats/model/boolean-probe.h ns-3.19/src/stats/model/boolean-probe.h
--- ns-3.18.1/src/stats/model/boolean-probe.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/boolean-probe.h	2013-12-20 09:44:50.000000000 -0800
@@ -34,6 +34,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup probes
+ *
  * This class is designed to probe an underlying ns3 TraceSource exporting
  * a bool.  This probe exports a trace source "Output" of type bool.
  * The Output trace source emits a value when either the trace source
@@ -45,6 +47,10 @@
 class BooleanProbe : public Probe
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId ();
   BooleanProbe ();
   virtual ~BooleanProbe ();
@@ -97,7 +103,7 @@
    */
   void TraceSink (bool oldData, bool newData);
 
-  TracedValue<bool> m_output;
+  TracedValue<bool> m_output; //!< Output trace source.
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/stats/model/data-calculator.h ns-3.19/src/stats/model/data-calculator.h
--- ns-3.18.1/src/stats/model/data-calculator.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/data-calculator.h	2013-12-20 09:44:50.000000000 -0800
@@ -26,11 +26,23 @@
 #include "ns3/simulator.h"
 
 namespace ns3 {
-extern const double NaN;
+extern const double NaN; //!< Stored representation of NaN
+
+/**
+ * \brief true if x is NaN
+ * \param x
+ * \return whether x is NaN
+ */
 inline bool isNaN (double x) { return x != x; }
 
 class DataOutputCallback;
 
+/**
+ * \ingroup stats
+ * \class StatisticalSummary
+ * \brief Abstract class for calculating statistical data 
+ *
+ */
 class StatisticalSummary {
 public:
   /**
@@ -40,81 +52,130 @@
   {
   }
   /**
-   * Returns the number of the observations.
+   * Returns the number of observations.
+   * \return Number of observations
    */
   virtual long getCount () const = 0;
 
   /**
-   * Returns the sum of the values.
+   * \return Sum of values
    * @see getWeightedSum()
    */
   virtual double getSum () const = 0;
 
   /**
-   * Returns the sum of the squared values.
+   * \return Sum of squared values
    * @see getWeightedSqrSum()
    */
   virtual double getSqrSum () const = 0;
 
   /**
    * Returns the minimum of the values.
+   * \return Minimum of values
    */
   virtual double getMin () const = 0;
 
   /**
    * Returns the maximum of the values.
+   * \return Maximum of values
    */
   virtual double getMax () const = 0;
 
   /**
    * Returns the mean of the (weighted) observations.
+   * \return Mean of (weighted) observations
    */
   virtual double getMean () const = 0;
 
   /**
    * Returns the standard deviation of the (weighted) observations.
+   * \return Standard deviation of (weighted) observations
    */
   virtual double getStddev () const = 0;
 
   /**
    * Returns the variance of the (weighted) observations.
+   * \return Variance of (weighted) observations
    */
   virtual double getVariance () const = 0;
 };
 
 //------------------------------------------------------------
 //--------------------------------------------
+/**
+ * \ingroup stats
+ * \class DataCalculator
+ * \brief Calculates data during a simulation
+ *
+ */
 class DataCalculator : public Object {
 public:
   DataCalculator();
   virtual ~DataCalculator();
 
+  /**
+   * Returns whether the DataCalculator is enabled
+   * \return true if DataCalculator is enabled
+   */
   bool GetEnabled () const;
+  /**
+   * Enables DataCalculator when simulation starts
+   */
   void Enable ();
+  /**
+   * Disables DataCalculator when simulation stops
+   */
   void Disable ();
-
+  /**
+   * Sets the DataCalculator key to the provided key
+   * \param key Key value as a string
+   */
   void SetKey (const std::string key);
+  /**
+   * Gets the DataCalculator key
+   * \return Key value as a string
+   */
   std::string GetKey () const;
 
+  /**
+   * Sets the DataCalculator context to the provided context
+   * \param context Context value as a string
+   */
   void SetContext (const std::string context);
+  /**
+   * Gets the DataCalculator context
+   * \return Context value as a string
+   */
   std::string GetContext () const;
 
+  /**
+   * Starts DataCalculator at a given time in the simulation
+   * \param startTime
+   */
   virtual void Start (const Time& startTime);
+  /**
+   * Stops DataCalculator at a given time in the simulation
+   * \param stopTime
+   */
   virtual void Stop (const Time& stopTime);
 
+  /**
+   * Outputs data based on the provided callback
+   * \param callback
+   */
   virtual void Output (DataOutputCallback &callback) const = 0;
 
 protected:
-  bool m_enabled;    // Descendant classes *must* check & respect m_enabled!
+  bool m_enabled;    //!< Descendant classes *must* check & respect m_enabled!
 
-  std::string m_key;
-  std::string m_context;
+  std::string m_key;      //!< Key value
+  std::string m_context;  //!< Context value
 
   virtual void DoDispose (void);
 
 private:
-  EventId m_startEvent;
-  EventId m_stopEvent;
+  EventId m_startEvent; //!< Start event
+  EventId m_stopEvent;  //!< Stop event
 
   // end class DataCalculator
 };
diff -Naur ns-3.18.1/src/stats/model/data-collection-object.cc ns-3.19/src/stats/model/data-collection-object.cc
--- ns-3.18.1/src/stats/model/data-collection-object.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/data-collection-object.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (DataCollectionObject);
+NS_OBJECT_ENSURE_REGISTERED (DataCollectionObject)
+  ;
 
 TypeId
 DataCollectionObject::GetTypeId (void)
diff -Naur ns-3.18.1/src/stats/model/data-collection-object.h ns-3.19/src/stats/model/data-collection-object.h
--- ns-3.18.1/src/stats/model/data-collection-object.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/data-collection-object.h	2013-12-20 09:44:50.000000000 -0800
@@ -27,6 +27,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup aggregator
+ *
  * Base class for data collection framework objects.
  *
  * All data collection objects have 1) a string name, and 2) enabled
@@ -35,6 +37,10 @@
 class DataCollectionObject : public Object
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId ();
 
   DataCollectionObject ();
@@ -42,6 +48,7 @@
 
   /// Set the status of an individual object.
   void Enable (void);
+  /// Unset the status of an individual object.
   void Disable (void);
 
   /// Check the status of an individual object.
diff -Naur ns-3.18.1/src/stats/model/data-collector.h ns-3.19/src/stats/model/data-collector.h
--- ns-3.18.1/src/stats/model/data-collector.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/data-collector.h	2013-12-20 09:44:50.000000000 -0800
@@ -28,60 +28,126 @@
 
 namespace ns3 {
 
-/**
- * \ingroup stats
- *
- */
 class DataCalculator;
 
 //------------------------------------------------------------
 //--------------------------------------------
+/**
+ * List of Ptrs to DataCalculator objects
+ */
 typedef std::list<Ptr<DataCalculator> > DataCalculatorList;
+/**
+ * List of pairs of strings representing metadata
+ */
 typedef std::list<std::pair<std::string, std::string> > MetadataList;
 
 /**
- * \ingroup stats
- *
+ * \ingroup dataoutput
+ * \class DataCollector
+ * \brief Collects data 
  */
 class DataCollector : public Object {
 public:
   DataCollector();
   virtual ~DataCollector();
 
+  /**
+   * Provide specific parameters to the DataCollector
+   * \param experiment Label for the experiment
+   * \param strategy Label for the strategy
+   * \param input Label for the input
+   * \param runID Label for the runID
+   * \param description Description
+   */
   void DescribeRun (std::string experiment,
                     std::string strategy,
                     std::string input,
                     std::string runID,
                     std::string description = "");
 
+  /**
+   * Return the experiment label
+   * \return Experiment label
+   */
   std::string GetExperimentLabel () const { return m_experimentLabel; }
+  /**
+   * Return the strategy label
+   * \return Strategy label
+   */
   std::string GetStrategyLabel () const { return m_strategyLabel; }
+  /**
+   * Return the input label
+   * \return Input label
+   */
   std::string GetInputLabel () const { return m_inputLabel; }
+  /**
+   * Return the runID label
+   * \return Run label
+   */
   std::string GetRunLabel () const { return m_runLabel; }
+  /**
+   * Return the description label
+   * \return Description label
+   */
   std::string GetDescription () const { return m_description; }
 
+  /**
+   * Add the key and the value as a pair of strings to the metadata list
+   * \param key Key value to include
+   * \param value Value to include of type string
+   */
   void AddMetadata (std::string key, std::string value);
+  /**
+   * Add the key and the value as a pair of strings to the metadata list
+   * \param key Key value to include
+   * \param value Value to include of type double
+   */
   void AddMetadata (std::string key, double value);
+  /**
+   * Add the key and the value as a pair of strings to the metadata list
+   * \param key Key value to include
+   * \param value Value to include of type uint32_t
+   */
   void AddMetadata (std::string key, uint32_t value);
+  /**
+   * Returns an iterator to the beginning of the metadata list
+   * \return Iterator pointing to the first value of the metadata list
+   */
   MetadataList::iterator MetadataBegin ();
+  /**
+   * Returns an iterator to the past-the-end of the metadata list
+   * \return Iterator pointing to the past-the-end element of the metadata list
+   */
   MetadataList::iterator MetadataEnd ();
 
+  /**
+   * Add a DataCalculator object to the DataCollector
+   * \param datac DataCalculator object to be added
+   */
   void AddDataCalculator (Ptr<DataCalculator> datac);
+  /**
+   * Returns an iterator to the beginning of the DataCalculator list
+   * \return Iterator pointing to the first value of the DataCalculator list
+   */
   DataCalculatorList::iterator DataCalculatorBegin ();
+  /**
+   * Returns an iterator to the past-the-end of the DataCalculator list
+   * \return Iterator pointing to the past-the-end element of the DataCalculator list
+   */
   DataCalculatorList::iterator DataCalculatorEnd ();
 
 protected:
   virtual void DoDispose ();
 
 private:
-  std::string m_experimentLabel;
-  std::string m_strategyLabel;
-  std::string m_inputLabel;
-  std::string m_runLabel;
-  std::string m_description;
+  std::string m_experimentLabel; //!< Experiment label
+  std::string m_strategyLabel;   //!< Strategy label
+  std::string m_inputLabel;      //!< Input label
+  std::string m_runLabel;        //!< Run label
+  std::string m_description;     //!< Description label
 
-  MetadataList m_metadata;
-  DataCalculatorList m_calcList;
+  MetadataList m_metadata;       //!< List of experiment metadata
+  DataCalculatorList m_calcList; //!< List of data calculators
 
   // end class DataCollector
 };
diff -Naur ns-3.18.1/src/stats/model/data-output-interface.h ns-3.19/src/stats/model/data-output-interface.h
--- ns-3.18.1/src/stats/model/data-output-interface.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/data-output-interface.h	2013-12-20 09:44:50.000000000 -0800
@@ -32,55 +32,109 @@
 //------------------------------------------------------------
 //--------------------------------------------
 /**
- * \ingroup stats
+ * \ingroup dataoutput
  *
- */
+ * \brief Abstract Data Output Interface class
+s */
 class DataOutputInterface : public Object {
 public:
   DataOutputInterface();
   virtual ~DataOutputInterface();
 
+  /**
+   * Outputs information from the provided DataCollector
+   * \param dc DataCollector object
+   */
   virtual void Output (DataCollector &dc) = 0;
 
+  /**
+   * Sets the DataOutputInterface prefix to the provided prefix
+   * \param prefix prefix as a string
+   */
   void SetFilePrefix (const std::string prefix);
+  /**
+   * Gets the file prefix of the DataOutputInterface
+   * \return File prefix as a string
+   */
   std::string GetFilePrefix () const;
 
 protected:
   virtual void DoDispose ();
 
-  std::string m_filePrefix;
+  std::string m_filePrefix; //!< File prefix for the DataOutputInterface
 
   // end class DataOutputInterface
 };
 
 /**
- * \ingroup stats
+ * \ingroup dataoutput
+ *
+ * \brief Callback class for the DataOutput classes
  *
  */
 class DataOutputCallback {
 public:
+  /**
+   * Destructor
+   */
   virtual ~DataOutputCallback() {}
 
+  /**
+   * Outputs the data from the specified StatisticalSummary
+   * \param key Key value of a DataCalculator
+   * \param variable Name of the variable for which statistics are being provided
+   * \param statSum Pointer to a StatisticalSummary object
+   */
   virtual void OutputStatistic (std::string key,
                                 std::string variable,
                                 const StatisticalSummary *statSum) = 0;
 
+  /**
+   * Associates the integer value with the variable name for a specific output format
+   * \param key Key value of a DataCalculator
+   * \param variable Name of the variable for which statistics are being provided
+   * \param val Value to be stored
+   */
   virtual void OutputSingleton (std::string key,
                                 std::string variable,
                                 int val) = 0;
 
+  /**
+   * Associates the uint32_t value with the variable name for a specific output format
+   * \param key Key value of a DataCalculator
+   * \param variable Name of the variable for which statistics are being provided
+   * \param val Value to be stored
+   */
   virtual void OutputSingleton (std::string key,
                                 std::string variable,
                                 uint32_t val) = 0;
 
+  /**
+   * Associates the double value with the variable name for a specific output format
+   * \param key Key value of a DataCalculator
+   * \param variable Name of the variable for which statistics are being provided
+   * \param val Value to be stored
+   */
   virtual void OutputSingleton (std::string key,
                                 std::string variable,
                                 double val) = 0;
 
+  /**
+   * Associates the string value with the variable name for a specific output format
+   * \param key Key value of a DataCalculator
+   * \param variable Name of the variable for which statistics are being provided
+   * \param val Value to be stored
+   */
   virtual void OutputSingleton (std::string key,
                                 std::string variable,
                                 std::string val) = 0;
 
+  /**
+   * Associates the Time value with the variable name for a specific output format
+   * \param key Key value of a DataCalculator
+   * \param variable Name of the variable for which statistics are being provided
+   * \param val Value to be stored
+   */
   virtual void OutputSingleton (std::string key,
                                 std::string variable,
                                 Time val) = 0;
diff -Naur ns-3.18.1/src/stats/model/double-probe.cc ns-3.19/src/stats/model/double-probe.cc
--- ns-3.18.1/src/stats/model/double-probe.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/double-probe.cc	2013-12-20 09:44:50.000000000 -0800
@@ -32,7 +32,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (DoubleProbe);
+NS_OBJECT_ENSURE_REGISTERED (DoubleProbe)
+  ;
 
 TypeId
 DoubleProbe::GetTypeId ()
diff -Naur ns-3.18.1/src/stats/model/double-probe.h ns-3.19/src/stats/model/double-probe.h
--- ns-3.18.1/src/stats/model/double-probe.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/double-probe.h	2013-12-20 09:44:50.000000000 -0800
@@ -34,6 +34,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup probes
+ *
  * This class is designed to probe an underlying ns3 TraceSource exporting
  * a double.  This probe exports a trace source "Output" of type double.
  * The Output trace source emits a value when either the trace source
@@ -45,6 +47,10 @@
 class DoubleProbe : public Probe
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId ();
   DoubleProbe ();
   virtual ~DoubleProbe ();
@@ -92,12 +98,10 @@
    *
    * \param oldData previous value of the double
    * \param newData new value of the double
-   *
-   * \internal
    */
   void TraceSink (double oldData, double newData);
 
-  TracedValue<double> m_output;
+  TracedValue<double> m_output; //!< Output trace source.
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/stats/model/file-aggregator.cc ns-3.19/src/stats/model/file-aggregator.cc
--- ns-3.18.1/src/stats/model/file-aggregator.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/file-aggregator.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,9 +28,11 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("FileAggregator");
+NS_LOG_COMPONENT_DEFINE ("FileAggregator")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (FileAggregator);
+NS_OBJECT_ENSURE_REGISTERED (FileAggregator)
+  ;
 
 TypeId
 FileAggregator::GetTypeId ()
diff -Naur ns-3.18.1/src/stats/model/file-aggregator.h ns-3.19/src/stats/model/file-aggregator.h
--- ns-3.18.1/src/stats/model/file-aggregator.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/file-aggregator.h	2013-12-20 09:44:50.000000000 -0800
@@ -32,6 +32,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup aggregator
+ *
  * This aggregator sends values it receives to a file.
  **/
 class FileAggregator : public DataCollectionObject
@@ -46,6 +48,10 @@
     TAB_SEPARATED
   };
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId ();
 
   /**
@@ -364,17 +370,16 @@
   /// Heading line for the outputfile.
   std::string m_heading;
 
-  /// Format strings for C-style sprintf() function.
-  std::string m_1dFormat;
-  std::string m_2dFormat;
-  std::string m_3dFormat;
-  std::string m_4dFormat;
-  std::string m_5dFormat;
-  std::string m_6dFormat;
-  std::string m_7dFormat;
-  std::string m_8dFormat;
-  std::string m_9dFormat;
-  std::string m_10dFormat;
+  std::string m_1dFormat;  //!< Format string for 1D C-style sprintf() function.
+  std::string m_2dFormat;  //!< Format string for 2D C-style sprintf() function.
+  std::string m_3dFormat;  //!< Format string for 3D C-style sprintf() function.
+  std::string m_4dFormat;  //!< Format string for 4D C-style sprintf() function.
+  std::string m_5dFormat;  //!< Format string for 5D C-style sprintf() function.
+  std::string m_6dFormat;  //!< Format string for 6D C-style sprintf() function.
+  std::string m_7dFormat;  //!< Format string for 7D C-style sprintf() function.
+  std::string m_8dFormat;  //!< Format string for 8D C-style sprintf() function.
+  std::string m_9dFormat;  //!< Format string for 9D C-style sprintf() function.
+  std::string m_10dFormat; //!< Format string for 10D C-style sprintf() function.
 
 }; // class FileAggregator
 
diff -Naur ns-3.18.1/src/stats/model/get-wildcard-matches.h ns-3.19/src/stats/model/get-wildcard-matches.h
--- ns-3.18.1/src/stats/model/get-wildcard-matches.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/get-wildcard-matches.h	2013-12-20 09:44:50.000000000 -0800
@@ -30,6 +30,7 @@
  * \param matchedPath the path that matched the Config path.
  * \param wildcardSeparator the text to put betwen the wildcard
  * matches.  By default, a space is used.
+ * \return String value of text matches
  *
  * \brief Returns the text matches from the matched path for each of
  * the wildcards in the Config path, separated by the wild card
diff -Naur ns-3.18.1/src/stats/model/gnuplot-aggregator.cc ns-3.19/src/stats/model/gnuplot-aggregator.cc
--- ns-3.18.1/src/stats/model/gnuplot-aggregator.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/gnuplot-aggregator.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,8 +28,10 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("GnuplotAggregator");
-NS_OBJECT_ENSURE_REGISTERED (GnuplotAggregator);
+NS_LOG_COMPONENT_DEFINE ("GnuplotAggregator")
+  ;
+NS_OBJECT_ENSURE_REGISTERED (GnuplotAggregator)
+  ;
 
 TypeId
 GnuplotAggregator::GetTypeId ()
diff -Naur ns-3.18.1/src/stats/model/gnuplot-aggregator.h ns-3.19/src/stats/model/gnuplot-aggregator.h
--- ns-3.18.1/src/stats/model/gnuplot-aggregator.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/gnuplot-aggregator.h	2013-12-20 09:44:50.000000000 -0800
@@ -32,6 +32,7 @@
 namespace ns3 {
 
 /**
+ * \ingroup aggregator
  * This aggregator produces output used to make gnuplot plots.
  **/
 class GnuplotAggregator : public DataCollectionObject
@@ -46,6 +47,10 @@
     KEY_BELOW
   };
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId ();
 
   /**
diff -Naur ns-3.18.1/src/stats/model/gnuplot.cc ns-3.19/src/stats/model/gnuplot.cc
--- ns-3.18.1/src/stats/model/gnuplot.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/gnuplot.cc	2013-12-20 09:44:50.000000000 -0800
@@ -27,17 +27,24 @@
 
 // --- GnuplotDataset::Data ------------------------------------------------ //
 
+/**
+ * \ingroup gnuplot
+ *
+ * Structure storing the data to plot.
+ * Derived classes subclass this struct and add their own data fields.
+ */
 struct GnuplotDataset::Data
 {
   // *** Data Variables ***
 
-  unsigned int m_references;
+  unsigned int m_references; //!< ref/unref counter for garbage collection
 
-  std::string m_title;
-  std::string m_extra;
+  std::string m_title; //!< Dataset title
+  std::string m_extra; //!< Extra parameters for the plot
 
   /**
    * Initializes the reference counter to 1 and sets m_title and m_extra.
+   * \param title Dataset title
    */
   Data(const std::string& title);
 
@@ -45,7 +52,8 @@
   virtual ~Data();
 
   /**
-   * Returns "plot" or "splot".
+   * \brief Returns the plot type ("plot" or "splot").
+   * \returns the plot type ("plot" or "splot").
    */
   virtual std::string GetCommand () const = 0;
 
@@ -57,6 +65,11 @@
    * If more than one output file is being generated, i.e. separate
    * data and control files, then the index for the current dataset
    * and the name for the data file are also included.
+   *
+   * \param os Output stream
+   * \param generateOneOutputFile If true, generate only one output file.
+   * \param dataFileDatasetIndex Dataset Index
+   * \param dataFileName Dataset file name
    */
   virtual void PrintExpression (std::ostream &os,
                                 bool generateOneOutputFile,
@@ -66,6 +79,9 @@
   /**
    * Print the inline data file contents trailing the plot command. Empty for
    * functions.
+   *
+   * \param os Output stream
+   * \param generateOneOutputFile If true, generate only one output file.
    */
   virtual void PrintDataFile (std::ostream &os, bool generateOneOutputFile) const = 0;
 
@@ -140,17 +156,23 @@
 
 // --- Gnuplot2dDataset::Data2d -------------------------------------------- //
 
+/**
+ * \ingroup gnuplot
+ *
+ * Structure storing the data to for a 2D plot.
+ */
 struct Gnuplot2dDataset::Data2d : public GnuplotDataset::Data
 {
   // *** Data Variables ***
 
-  enum Style  m_style;
-  enum ErrorBars m_errorBars;
+  enum Style  m_style; //!< The plotting style to use for this dataset.
+  enum ErrorBars m_errorBars; //!< Whether errorbars should be used for this dataset.
 
-  PointSet    m_pointset;
+  PointSet    m_pointset; //!< The set of points in this data set
 
   /**
    * Initializes with the values from m_defaultStyle and m_defaultErrorBars.
+   * \param title Dataset title
    */
   Data2d(const std::string& title);
 
@@ -386,14 +408,22 @@
 
 // --- Gnuplot2dFunction::Function2d --------------------------------------- //
 
+/**
+ * \ingroup gnuplot
+ *
+ * Structure storing the function to be used for a 2D plot.
+ */
 struct Gnuplot2dFunction::Function2d : public GnuplotDataset::Data
 {
   // *** Data Variables ***
 
-  std::string m_function;
+  std::string m_function; //!< Function to use
 
   /**
    * Initializes with the function and title.
+   *
+   * \param title Title of the plot
+   * \param function Function to plot
    */
   Function2d(const std::string& title, const std::string& function);
 
@@ -459,16 +489,22 @@
 
 // --- Gnuplot3dDataset::Data3d -------------------------------------------- //
 
+/**
+ * \ingroup gnuplot
+ *
+ * Structure storing the data for a 3D plot.
+ */
 struct Gnuplot3dDataset::Data3d : public GnuplotDataset::Data
 {
   // *** Data Variables ***
 
-  std::string   m_style;
+  std::string   m_style; //!< The plotting style to use for this dataset.
 
-  PointSet      m_pointset;
+  PointSet      m_pointset; //!< The set of points in this data set
 
   /**
    * Initializes with value from m_defaultStyle.
+   * \param title Dataset title
    */
   Data3d(const std::string& title);
 
@@ -574,14 +610,22 @@
 
 // --- Gnuplot3dFunction::Function3d --------------------------------------- //
 
+/**
+ * \ingroup gnuplot
+ *
+ * Structure storing the function to be used for a 3D plot.
+ */
 struct Gnuplot3dFunction::Function3d : public GnuplotDataset::Data
 {
   // *** Data Variables ***
 
-  std::string m_function;
+  std::string m_function; //!< Function to use
 
   /**
    * Initializes with the function and title.
+   *
+   * \param title Title of the plot
+   * \param function Function to plot
    */
   Function3d(const std::string& title, const std::string& function);
 
diff -Naur ns-3.18.1/src/stats/model/gnuplot.h ns-3.19/src/stats/model/gnuplot.h
--- ns-3.18.1/src/stats/model/gnuplot.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/gnuplot.h	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,7 @@
 namespace ns3 {
 
 /**
- * \ingroup tools
+ * \ingroup gnuplot
  *
  * \brief Abstract class to store a plot line to be used by ns3::Gnuplot.
  *
@@ -41,6 +41,7 @@
 
   /**
    * Reference-counting copy constructor.
+   * \param original Original GnuPlotDataset
    */
   GnuplotDataset (const GnuplotDataset& original);
 
@@ -51,6 +52,8 @@
 
   /**
    * Reference-counting assignment operator.
+   * \param original Right-hand side of assignment operator
+   * \return Copy of original GnuplotDataset
    */
   GnuplotDataset& operator= (const GnuplotDataset& original);
 
@@ -101,6 +104,9 @@
 };
 
 /**
+ * \ingroup gnuplot
+ *
+ * \class Gnuplot2dDataset
  * \brief Class to represent a 2D points plot. Set the line or points style
  * using SetStyle() and set points using Add().
  */
@@ -201,24 +207,30 @@
 
 private:
 
+  /**
+   * A point in a 2D plot
+   */
   struct Point {
-    bool empty;
-    double x;
-    double y;
-    double dx;
-    double dy;
+    bool empty; //!< the point is empty
+    double x; //!< X coordinate
+    double y; //!< Y coordinate
+    double dx; //!< X error delta
+    double dy; //!< Y error delta
   };
 
+  /// The set of points in the dataset
   typedef std::vector<struct Point> PointSet;
 
-  static enum Style m_defaultStyle;
-  static enum ErrorBars m_defaultErrorBars;
+  static enum Style m_defaultStyle; //!< default plot style
+  static enum ErrorBars m_defaultErrorBars;  //!< default error bars type
 
   /// Forward declaration of the internal data class.
   struct Data2d;
 };
 
 /**
+ * \ingroup gnuplot
+ *
  * \brief Class to represent a 2D function expression plot.
  *
  * Since the function expression is not escaped, styles and extras could just
@@ -248,6 +260,8 @@
 };
 
 /**
+ * \ingroup gnuplot
+ *
  * \brief Class to represent a 3D points plot. Set the line or points style
  * using SetStyle() and set points using Add().
  */
@@ -290,20 +304,28 @@
 
 private:
 
+  /**
+   * A point in a 3D plot
+   */
   struct Point {
-    bool empty;
-    double x, y, z;
+    bool empty; //!< the point is empty
+    double x; //!< X coordinate
+    double y; //!< Y coordinate
+    double z; //!< Z coordinate
   };
 
+  /// The set of points in the dataset
   typedef std::vector<struct Point> PointSet;
 
-  static std::string m_defaultStyle;
+  static std::string m_defaultStyle; //!< default plot style
 
   /// Forward declaration of the internal data class.
   struct Data3d;
 };
 
 /**
+ * \ingroup gnuplot
+ *
  * \brief Class to represent a 3D function expression plot.
  *
  * Since the function expression is not escaped, styles and extras could just as
@@ -334,6 +356,8 @@
 };
 
 /**
+ * \ingroup gnuplot
+ *
  * \brief a simple class to generate gnuplot-ready plotting commands
  *        from a set of datasets.
  *
@@ -361,7 +385,8 @@
   /**
    * Crude attempt to auto-detect the correct terminal setting by inspecting
    * the filename's extension.
-   * \param filename output file name
+   * \param filename output filename
+   * \return File extension of the provided filename
    */
   static std::string DetectTerminal (const std::string& filename);
 
@@ -431,24 +456,27 @@
   void SetDataFileDatasetIndex (unsigned int index);
 
 private:
+  /// Type for Datasets to be used in plots
   typedef std::vector<GnuplotDataset> Datasets;
 
-  std::string m_outputFilename;
-  std::string m_terminal;
+  std::string m_outputFilename; //!< Output file name
+  std::string m_terminal; //!< Gnuplot "terminal" to use
 
-  Datasets m_datasets;
+  Datasets m_datasets; //!< Data sets
 
-  std::string m_title;
-  std::string m_xLegend;
-  std::string m_yLegend;
-  std::string m_extra;
+  std::string m_title; //!< Plot title
+  std::string m_xLegend; //!< X axis legend
+  std::string m_yLegend; //!< Y axis legend
+  std::string m_extra; //!< extra parameters for the plot
 
-  bool m_generateOneOutputFile;
+  bool m_generateOneOutputFile; //!< true if only one plot will be generated
 
-  unsigned int m_dataFileDatasetIndex;
+  unsigned int m_dataFileDatasetIndex; //!< Data set index to plot
 };
 
 /**
+ * \ingroup gnuplot
+ *
  * \brief a simple class to group together multiple gnuplots into one file,
  * e.g. for PDF multi-page output terminals.
  */
@@ -500,12 +528,13 @@
                        std::string dataFileName);
 
 private:
+  /// Type of the Gnuplot collection
   typedef std::vector<Gnuplot> Plots;
 
-  std::string m_outputFilename;
-  std::string m_terminal;
+  std::string m_outputFilename; //!< Output file name
+  std::string m_terminal; //!< Gnuplot "terminal" to use
 
-  Plots       m_plots;
+  Plots       m_plots; //!< Plots in the collection
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/stats/model/omnet-data-output.h ns-3.19/src/stats/model/omnet-data-output.h
--- ns-3.18.1/src/stats/model/omnet-data-output.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/omnet-data-output.h	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,9 @@
 //------------------------------------------------------------
 //--------------------------------------------
 /**
- * \ingroup stats
+ * \ingroup dataoutput
+ * \class OmnetDataOutput
+ * \brief Outputs data in a format compatible with OMNeT library and framework
  *
  */
 class OmnetDataOutput : public DataOutputInterface {
@@ -45,36 +47,81 @@
   virtual void DoDispose ();
 
 private:
+  /**
+   * \ingroup dataoutput
+   *
+   * \brief Class to generate OMNeT output
+   */
   class OmnetOutputCallback : public DataOutputCallback {
 public:
+    /**
+     * Constructor
+     * \param scalar the output stream
+     */
     OmnetOutputCallback(std::ostream *scalar);
 
+    /**
+     * \brief Generates data statistics
+     * \param context the output context
+     * \param name the output name
+     * \param statSum the stats to print
+     */
     void OutputStatistic (std::string context,
                           std::string name,
                           const StatisticalSummary *statSum);
 
+    /**
+     * \brief Generates a single data output
+     * \param context the output context
+     * \param name the output name
+     * \param val the value
+     */
     void OutputSingleton (std::string context,
                           std::string name,
                           int val);
 
+    /**
+     * \brief Generates a single data output
+     * \param context the output context
+     * \param name the output name
+     * \param val the value
+     */
     void OutputSingleton (std::string context,
                           std::string name,
                           uint32_t val);
 
+    /**
+     * \brief Generates a single data output
+     * \param context the output context
+     * \param name the output name
+     * \param val the value
+     */
     void OutputSingleton (std::string context,
                           std::string name,
                           double val);
 
+    /**
+     * \brief Generates a single data output
+     * \param context the output context
+     * \param name the output name
+     * \param val the value
+     */
     void OutputSingleton (std::string context,
                           std::string name,
                           std::string val);
 
+    /**
+     * \brief Generates a single data output
+     * \param context the output context
+     * \param name the output name
+     * \param val the value
+     */
     void OutputSingleton (std::string context,
                           std::string name,
                           Time val);
 
 private:
-    std::ostream *m_scalar;
+    std::ostream *m_scalar; //!< output stream
     // end class OmnetOutputCallback
   };
 
diff -Naur ns-3.18.1/src/stats/model/probe.cc ns-3.19/src/stats/model/probe.cc
--- ns-3.18.1/src/stats/model/probe.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/probe.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,7 +28,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Probe);
+NS_OBJECT_ENSURE_REGISTERED (Probe)
+  ;
 
 TypeId
 Probe::GetTypeId ()
diff -Naur ns-3.18.1/src/stats/model/probe.h ns-3.19/src/stats/model/probe.h
--- ns-3.18.1/src/stats/model/probe.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/probe.h	2013-12-20 09:44:50.000000000 -0800
@@ -28,6 +28,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup probes
+ *
  * Base class for probes.
  *
  * This class provides general functionality to control each
@@ -37,6 +39,10 @@
 class Probe : public DataCollectionObject
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId ();
   Probe ();
   virtual ~Probe ();
diff -Naur ns-3.18.1/src/stats/model/sqlite-data-output.h ns-3.19/src/stats/model/sqlite-data-output.h
--- ns-3.18.1/src/stats/model/sqlite-data-output.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/sqlite-data-output.h	2013-12-20 09:44:50.000000000 -0800
@@ -34,8 +34,9 @@
 //------------------------------------------------------------
 //--------------------------------------------
 /**
- * \ingroup stats
- *
+ * \ingroup dataoutput
+ * \class SqliteDataOutput
+ * \brief Outputs data in a format compatible with SQLite
  */
 class SqliteDataOutput : public DataOutputInterface {
 public:
@@ -48,43 +49,95 @@
   virtual void DoDispose ();
 
 private:
+  /**
+   * \ingroup dataoutput
+   *
+   * \brief Class to generate OMNeT output
+   */
   class SqliteOutputCallback : public DataOutputCallback {
 public:
+    /**
+     * Constructor
+     * \param owner pointer to the instance this object belongs to
+     * \param run experiment descriptor
+     */
     SqliteOutputCallback(Ptr<SqliteDataOutput> owner, std::string run);
 
+    /**
+     * \brief Generates data statistics
+     * \param key the SQL key to use
+     * \param variable the variable name
+     * \param statSum the stats to print
+     */
     void OutputStatistic (std::string key,
                           std::string variable,
                           const StatisticalSummary *statSum);
 
+    /**
+     * \brief Generates a single data output
+     * \param key the SQL key to use
+     * \param variable the variable name
+     * \param val the value
+     */
     void OutputSingleton (std::string key,
                           std::string variable,
                           int val);
 
+    /**
+     * \brief Generates a single data output
+     * \param key the SQL key to use
+     * \param variable the variable name
+     * \param val the value
+     */
     void OutputSingleton (std::string key,
                           std::string variable,
                           uint32_t val);
 
+    /**
+     * \brief Generates a single data output
+     * \param key the SQL key to use
+     * \param variable the variable name
+     * \param val the value
+     */
     void OutputSingleton (std::string key,
                           std::string variable,
                           double val);
 
+    /**
+     * \brief Generates a single data output
+     * \param key the SQL key to use
+     * \param variable the variable name
+     * \param val the value
+     */
     void OutputSingleton (std::string key,
                           std::string variable,
                           std::string val);
 
+    /**
+     * \brief Generates a single data output
+     * \param key the SQL key to use
+     * \param variable the variable name
+     * \param val the value
+     */
     void OutputSingleton (std::string key,
                           std::string variable,
                           Time val);
 
 private:
-    Ptr<SqliteDataOutput> m_owner;
-    std::string m_runLabel;
+    Ptr<SqliteDataOutput> m_owner; //!< the instance this object belongs to
+    std::string m_runLabel; //!< Run label
 
     // end class SqliteOutputCallback
   };
 
 
-  sqlite3 *m_db;
+  sqlite3 *m_db; //!< pointer to the SQL database
+
+  /**
+   * \brief Execute a sqlite3 query
+   * \param exe the query to execute
+   * \return sqlite return code.
+   */
   int Exec (std::string exe);
 
   // end class SqliteDataOutput
diff -Naur ns-3.18.1/src/stats/model/stats.h ns-3.19/src/stats/model/stats.h
--- ns-3.18.1/src/stats/model/stats.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.19/src/stats/model/stats.h	2013-12-20 09:44:50.000000000 -0800
@@ -0,0 +1,78 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Universita' di Firenze
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#ifndef STATS_H
+#define STATS_H
+
+// Header file used only to define the stats group in Doxygen
+
+/**
+ * \defgroup stats Statistics
+ *
+ * The statistics module includes some useful features to ease data collection from experiments.
+ * In particular the following features are included:
+ * <ul>
+ * <li> The core framework and two basic data collectors: A counter, and a min/max/avg/total observer.</li>
+ * <li> Extensions of those to easily work with times and packets.</li>
+ * <li> Plaintext output formatted for OMNet++.</li>
+ * <li> Database output using SQLite, a standalone, lightweight, high performance SQL engine.</li>
+ * <li> Mandatory and open ended metadata for describing and working with runs.</li>
+ * </ul>
+ *
+ * See the manual for a complete documentation.
+ */
+
+/**
+ * \ingroup stats
+ * \defgroup aggregator Data Aggregators
+ *
+ * Data aggregators are classes used to collect data and produce output
+ * specialized for various purpose, e.g., Gnuplot, file output, etc.
+ */
+
+/**
+ * \ingroup stats
+ * \defgroup probes Probes
+ *
+ * Probes are used to probe an underlying ns3 TraceSource exporting
+ * its value.  This probe usually exports a trace source "Output".
+ * The Output trace source emits a value when either the trace source
+ * emits a new value, or when SetValue () is called.
+ *
+ * Probes are a special kind of Trace Source.
+ */
+
+/**
+ * \ingroup stats
+ * \defgroup gnuplot Gnuplot
+ *
+ * Classes in Gnuplot group are used to collect and prepare and output data
+ * for subsequent processing by Gnuplot.
+ */
+
+/**
+ * \ingroup stats
+ * \defgroup dataoutput Data Output
+ *
+ * Classes in Data Output group are used to collect and prepare and output data
+ * for subsequent ouput in a specific format, e.g., Omnet++, SQLite, etc.
+ */
+
+#endif /* STATS_H */
diff -Naur ns-3.18.1/src/stats/model/time-data-calculators.h ns-3.19/src/stats/model/time-data-calculators.h
--- ns-3.18.1/src/stats/model/time-data-calculators.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/time-data-calculators.h	2013-12-20 09:44:50.000000000 -0800
@@ -44,15 +44,25 @@
   TimeMinMaxAvgTotalCalculator();
   virtual ~TimeMinMaxAvgTotalCalculator();
 
+  /**
+   * Updates all variables of TimeMinMaxAvgTotalCalculator
+   * \param i value of type Time to use for updating the calculator
+   */
   void Update (const Time i);
 
+  /**
+   * Outputs data based on the provided callback
+   * \param callback
+   */
   virtual void Output (DataOutputCallback &callback) const;
 
 protected:
   virtual void DoDispose (void);
 
-  uint32_t m_count;
-  Time m_total, m_min, m_max;
+  uint32_t m_count; //!< Count value of TimeMinMaxAvgTotalCalculator
+  Time m_total;     //!< Total value of TimeMinMaxAvgTotalCalculator
+  Time m_min;       //!< Minimum value of TimeMinMaxAvgTotalCalculator
+  Time m_max;       //!< Maximum value of TimeMinMaxAvgTotalCalculator
 
   // end class TimeMinMaxAvgTotalCalculator
 };
diff -Naur ns-3.18.1/src/stats/model/time-series-adaptor.cc ns-3.19/src/stats/model/time-series-adaptor.cc
--- ns-3.18.1/src/stats/model/time-series-adaptor.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/time-series-adaptor.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TimeSeriesAdaptor);
+NS_OBJECT_ENSURE_REGISTERED (TimeSeriesAdaptor)
+  ;
 
 TypeId
 TimeSeriesAdaptor::GetTypeId (void)
diff -Naur ns-3.18.1/src/stats/model/time-series-adaptor.h ns-3.19/src/stats/model/time-series-adaptor.h
--- ns-3.18.1/src/stats/model/time-series-adaptor.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/time-series-adaptor.h	2013-12-20 09:44:50.000000000 -0800
@@ -29,6 +29,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup aggregator
+ *
  * \brief Takes probed values of different types and outputs the
  * current time plus the value with both converted to doubles.
  *
@@ -46,6 +48,10 @@
 class TimeSeriesAdaptor : public DataCollectionObject
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   TimeSeriesAdaptor ();
@@ -107,7 +113,7 @@
   void TraceSinkUinteger32 (uint32_t oldData, uint32_t newData);
 
 private:
-  TracedCallback<double, double> m_output;
+  TracedCallback<double, double> m_output; //!< output trace
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/stats/model/uinteger-16-probe.cc ns-3.19/src/stats/model/uinteger-16-probe.cc
--- ns-3.18.1/src/stats/model/uinteger-16-probe.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/uinteger-16-probe.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Uinteger16Probe);
+NS_OBJECT_ENSURE_REGISTERED (Uinteger16Probe)
+  ;
 
 TypeId
 Uinteger16Probe::GetTypeId ()
diff -Naur ns-3.18.1/src/stats/model/uinteger-16-probe.h ns-3.19/src/stats/model/uinteger-16-probe.h
--- ns-3.18.1/src/stats/model/uinteger-16-probe.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/uinteger-16-probe.h	2013-12-20 09:44:50.000000000 -0800
@@ -31,6 +31,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup probes
+ *
  * This class is designed to probe an underlying ns3 TraceSource exporting
  * an uint16_t.  This probe exports a trace source "Output" of type uint16_t.
  * The Output trace source emits a value when either the trace source
@@ -41,6 +43,10 @@
 class Uinteger16Probe : public Probe
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId ();
   Uinteger16Probe ();
   virtual ~Uinteger16Probe ();
@@ -88,12 +94,10 @@
    *
    * \param oldData previous value of the uint16_t
    * \param newData new value of the uint16_t
-   *
-   * \internal
    */
   void TraceSink (uint16_t oldData, uint16_t newData);
 
-  TracedValue<uint16_t> m_output;
+  TracedValue<uint16_t> m_output; //!< Output trace source.
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/stats/model/uinteger-32-probe.cc ns-3.19/src/stats/model/uinteger-32-probe.cc
--- ns-3.18.1/src/stats/model/uinteger-32-probe.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/uinteger-32-probe.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Uinteger32Probe);
+NS_OBJECT_ENSURE_REGISTERED (Uinteger32Probe)
+  ;
 
 TypeId
 Uinteger32Probe::GetTypeId ()
diff -Naur ns-3.18.1/src/stats/model/uinteger-32-probe.h ns-3.19/src/stats/model/uinteger-32-probe.h
--- ns-3.18.1/src/stats/model/uinteger-32-probe.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/uinteger-32-probe.h	2013-12-20 09:44:50.000000000 -0800
@@ -31,6 +31,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup probes
+ *
  * This class is designed to probe an underlying ns3 TraceSource exporting
  * an uint32_t.  This probe exports a trace source "Output" of type uint32_t.
  * The Output trace source emits a value when either the trace source
@@ -41,6 +43,10 @@
 class Uinteger32Probe : public Probe
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId ();
   Uinteger32Probe ();
   virtual ~Uinteger32Probe ();
@@ -88,12 +94,10 @@
    *
    * \param oldData previous value of the uint32_t
    * \param newData new value of the uint32_t
-   *
-   * \internal
    */
   void TraceSink (uint32_t oldData, uint32_t newData);
 
-  TracedValue<uint32_t> m_output;
+  TracedValue<uint32_t> m_output; //!< Output trace source.
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/stats/model/uinteger-8-probe.cc ns-3.19/src/stats/model/uinteger-8-probe.cc
--- ns-3.18.1/src/stats/model/uinteger-8-probe.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/uinteger-8-probe.cc	2013-12-20 09:44:50.000000000 -0800
@@ -31,7 +31,8 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Uinteger8Probe);
+NS_OBJECT_ENSURE_REGISTERED (Uinteger8Probe)
+  ;
 
 TypeId
 Uinteger8Probe::GetTypeId ()
diff -Naur ns-3.18.1/src/stats/model/uinteger-8-probe.h ns-3.19/src/stats/model/uinteger-8-probe.h
--- ns-3.18.1/src/stats/model/uinteger-8-probe.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/stats/model/uinteger-8-probe.h	2013-12-20 09:44:50.000000000 -0800
@@ -31,6 +31,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup probes
+ *
  * This class is designed to probe an underlying ns3 TraceSource exporting
  * an uint8_t.  This probe exports a trace source "Output" of type uint8_t.
  * The Output trace source emits a value when either the trace source
@@ -41,6 +43,10 @@
 class Uinteger8Probe : public Probe
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId ();
   Uinteger8Probe ();
   virtual ~Uinteger8Probe ();
@@ -88,12 +94,10 @@
    *
    * \param oldData previous value of the uint8_t
    * \param newData new value of the uint8_t
-   *
-   * \internal
    */
   void TraceSink (uint8_t oldData, uint8_t newData);
 
-  TracedValue<uint8_t> m_output;
+  TracedValue<uint8_t> m_output; //!< Output trace source.
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/tap-bridge/bindings/callbacks_list.py ns-3.19/src/tap-bridge/bindings/callbacks_list.py
--- ns-3.18.1/src/tap-bridge/bindings/callbacks_list.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/tap-bridge/bindings/callbacks_list.py	2013-12-20 09:44:50.000000000 -0800
@@ -1,7 +1,7 @@
 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::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'unsigned char*', 'long', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.18.1/src/tap-bridge/bindings/modulegen__gcc_ILP32.py ns-3.19/src/tap-bridge/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/tap-bridge/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/tap-bridge/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -147,7 +147,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1228,10 +1228,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -2577,6 +2578,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -2587,6 +2593,11 @@
                    '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', 
@@ -2602,6 +2613,11 @@
                    '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', 
@@ -2627,6 +2643,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/tap-bridge/bindings/modulegen__gcc_LP64.py ns-3.19/src/tap-bridge/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/tap-bridge/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/tap-bridge/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -147,7 +147,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1228,10 +1228,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -2577,6 +2578,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -2587,6 +2593,11 @@
                    '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', 
@@ -2602,6 +2613,11 @@
                    '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', 
@@ -2627,6 +2643,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/tap-bridge/doc/tap.h ns-3.19/src/tap-bridge/doc/tap.h
--- ns-3.18.1/src/tap-bridge/doc/tap.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/tap-bridge/doc/tap.h	2013-12-20 09:44:50.000000000 -0800
@@ -1,5 +1,5 @@
 /**
- * \defgroup tap-bridge Tap Bridge Device
+ * \defgroup tap-bridge Tap Bridge Network Device
  *
  * This section documents the API of the ns-3 tap-bridge module. For a
  * generic functional description, please refer to the ns-3 manual.
diff -Naur ns-3.18.1/src/tap-bridge/doc/tap.rst ns-3.19/src/tap-bridge/doc/tap.rst
--- ns-3.18.1/src/tap-bridge/doc/tap.rst	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/tap-bridge/doc/tap.rst	2013-12-20 09:44:50.000000000 -0800
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: text
 
 Tap NetDevice
 -------------
@@ -49,6 +50,7 @@
 
 This is illustrated below: ::
 
+
     +--------+
     |  Linux |
     |  host  |                    +----------+
@@ -99,7 +101,9 @@
 going to "Use" an existing tap device previously created and configured
 by the user.  This mode is particularly useful when a virtualization 
 scheme automatically creates tap devices and ns-3 is used to provide 
-simulated networks for those devices. ::
+simulated networks for those devices.
+
+::
 
     +--------+
     |  Linux |
@@ -139,11 +143,13 @@
 incompatible with UseLocal mode.
 
 In UseLocal mode, the user is expected to create and configure a tap device
-completely outside the scope of the ns-3 simulation using something like: ::
+completely outside the scope of the ns-3 simulation using something like:
+
+.. sourcecode:: bash
 
-  sudo tunctl -t tap0
-  sudo ifconfig tap0 hw ether 08:00:2e:00:00:01
-  sudo ifconfig tap0 10.1.1.1 netmask 255.255.255.0 up
+  $ sudo tunctl -t tap0
+  $ sudo ifconfig tap0 hw ether 08:00:2e:00:00:01
+  $ sudo ifconfig tap0 10.1.1.1 netmask 255.255.255.0 up
 
 To tell the TapBridge what is going on, the user will set either directly
 into the TapBridge or via the TapBridgeHelper, the "DeviceName" attribute.
@@ -163,7 +169,9 @@
 an existing configuration.  In this case, the TapBridge is going to logically
 extend a Linux bridge into ns-3.  
 
-This is illustrated below: ::
+This is illustrated below:
+
+::
 
     +---------+
     |  Linux  |                             +----------+
@@ -203,15 +211,17 @@
 for use in UseBridge mode.
 
 It is expected that the user will do something like the following to
-configure the bridge and tap completely outside ns-3: ::
+configure the bridge and tap completely outside ns-3:
+
+.. sourcecode:: bash
 
-  sudo brctl addbr mybridge
-  sudo tunctl -t mytap
-  sudo ifconfig mytap hw ether 00:00:00:00:00:01
-  sudo ifconfig mytap 0.0.0.0 up
-  sudo brctl addif mybridge mytap
-  sudo brctl addif mybridge ...
-  sudo ifconfig mybridge 10.1.1.1 netmask 255.255.255.0 up
+  $ sudo brctl addbr mybridge
+  $ sudo tunctl -t mytap
+  $ sudo ifconfig mytap hw ether 00:00:00:00:00:01
+  $ sudo ifconfig mytap 0.0.0.0 up
+  $ sudo brctl addif mybridge mytap
+  $ sudo brctl addif mybridge ...
+  $ sudo ifconfig mybridge 10.1.1.1 netmask 255.255.255.0 up
 
 To tell the TapBridge what is going on, the user will set either directly
 into the TapBridge or via the TapBridgeHelper, the "DeviceName" attribute.
diff -Naur ns-3.18.1/src/tap-bridge/model/tap-bridge.cc ns-3.19/src/tap-bridge/model/tap-bridge.cc
--- ns-3.18.1/src/tap-bridge/model/tap-bridge.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/tap-bridge/model/tap-bridge.cc	2013-12-20 09:44:50.000000000 -0800
@@ -39,29 +39,13 @@
 #include <sys/stat.h>
 #include <sys/socket.h>
 #include <sys/un.h>
+#include <sys/ioctl.h>
+#include <net/if.h>
 #include <cerrno>
 #include <limits>
 #include <cstdlib>
 #include <unistd.h>
 
-//
-// Sometimes having a tap-creator is actually more trouble than solution.  In 
-// these cases you can uncomment the define of TAP_CREATOR below and the 
-// simulation will just use a device you have preconfigured.  This is useful
-// if you are running in an environment where you have got to run as root,
-// such as ORBIT or CORE.
-//
-
-
-// #define NO_CREATOR
-
-#ifdef NO_CREATOR
-#include <fcntl.h>
-#include <net/if.h>
-#include <linux/if_tun.h>
-#include <sys/ioctl.h>
-#endif
-
 NS_LOG_COMPONENT_DEFINE ("TapBridge");
 
 namespace ns3 {
@@ -89,7 +73,8 @@
 
 #define TAP_MAGIC 95549
 
-NS_OBJECT_ENSURE_REGISTERED (TapBridge);
+NS_OBJECT_ENSURE_REGISTERED (TapBridge)
+  ;
 
 TypeId
 TapBridge::GetTypeId (void)
@@ -236,6 +221,9 @@
   //
   CreateTap ();
 
+  // Declare the link up
+  NotifyLinkUp ();
+
   //
   // Now spin up a read thread to read packets from the tap device.
   //
@@ -630,7 +618,7 @@
                   int *rawSocket = (int*)CMSG_DATA (cmsg);
                   NS_LOG_INFO ("Got the socket from the socket creator = " << *rawSocket);
                   m_sock = *rawSocket;
-                  return;
+                  break;
                 }
               else
                 {
@@ -638,8 +626,40 @@
                 }
             }
         }
-      NS_FATAL_ERROR ("Did not get the raw socket from the socket creator");
+      if (cmsg == NULL)
+        {
+          NS_FATAL_ERROR ("Did not get the raw socket from the socket creator");
+        }
+
+      if (m_mode == USE_LOCAL || m_mode == USE_BRIDGE)
+        {
+          //
+          // Set the ns-3 device's mac address to the overlying container's
+          // mac address
+          //
+          struct ifreq s;
+          strncpy (s.ifr_name, m_tapDeviceName.c_str (), sizeof (s.ifr_name));
+
+          NS_LOG_INFO ("Trying to get MacAddr of " << m_tapDeviceName);
+          int ioctlResult = ioctl (sock, SIOCGIFHWADDR, &s);
+          if (ioctlResult == 0)
+            {
+              Mac48Address learnedMac;
+              learnedMac.CopyFrom ((uint8_t *)s.ifr_hwaddr.sa_data);
+              NS_LOG_INFO ("Learned Tap device MacAddr is " << learnedMac << ": setting ns-3 device to use this address");
+              m_bridgedDevice->SetAddress (learnedMac);
+              m_ns3AddressRewritten = true;
+            }
+
+          if (!m_ns3AddressRewritten)
+            {
+              NS_LOG_INFO ("Cannot get MacAddr of Tap device: " << m_tapDeviceName << " while in USE_LOCAL/USE_BRIDGE mode: " << std::strerror (errno));
+              NS_LOG_INFO ("Underlying ns-3 device will continue to use default address, what can lead to connectivity errors");
+            }
+        }
     }
+
+  close (sock);
 }
 
 void
@@ -1039,18 +1059,29 @@
   return m_mtu;
 }
 
+void
+TapBridge::NotifyLinkUp (void)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  if (!m_linkUp)
+    {
+      m_linkUp = true;
+      m_linkChangeCallbacks ();
+    }
+}
 
 bool 
 TapBridge::IsLinkUp (void) const
 {
   NS_LOG_FUNCTION_NOARGS ();
-  return true;
+  return m_linkUp;
 }
 
 void 
 TapBridge::AddLinkChangeCallback (Callback<void> callback)
 {
   NS_LOG_FUNCTION_NOARGS ();
+  m_linkChangeCallbacks.ConnectWithoutContext (callback);
 }
 
 bool 
diff -Naur ns-3.18.1/src/tap-bridge/model/tap-bridge.h ns-3.19/src/tap-bridge/model/tap-bridge.h
--- ns-3.18.1/src/tap-bridge/model/tap-bridge.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/tap-bridge/model/tap-bridge.h	2013-12-20 09:44:50.000000000 -0800
@@ -291,6 +291,8 @@
    */
   Ptr<Packet> Filter (Ptr<Packet> packet, Address *src, Address *dst, uint16_t *type);
 
+  void NotifyLinkUp (void);
+
   /**
    * \internal
    *
@@ -448,7 +450,7 @@
    * \internal
    *
    * Whether the MAC address of the underlying ns-3 device has already been
-   * rewritten is stored in this variable (for UseLocal mode only).
+   * rewritten is stored in this variable (for UseLocal/UseBridge mode only).
    */
   bool m_ns3AddressRewritten;
 
@@ -463,6 +465,22 @@
    * multithreaded apps is not a good thing.
    */
   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.
+   */
+  bool m_linkUp;
+
+  /**
+   * \internal
+   *
+   * Callbacks to fire if the link changes state (up or down).
+   */
+  TracedCallback<> m_linkChangeCallbacks;
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/test/ns3tcp/ns3tcp.h ns-3.19/src/test/ns3tcp/ns3tcp.h
--- ns-3.18.1/src/test/ns3tcp/ns3tcp.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/test/ns3tcp/ns3tcp.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,9 +0,0 @@
-/**
- * \ingroup tests
- * \defgroup Ns3TcpTests ns-3 TCP Implementation Tests
- *
- * \section Ns3TcpTestsOverview ns-3 Tcp Implementation Tests Overview
- *
- * Includes tests of ns-3 TCP as well as tests involving the mix
- * of ns-3 and Network Simulation Cradle (nsc) TCP models.
- */
diff -Naur ns-3.18.1/src/test/ns3wifi/ns3wifi.h ns-3.19/src/test/ns3wifi/ns3wifi.h
--- ns-3.18.1/src/test/ns3wifi/ns3wifi.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/test/ns3wifi/ns3wifi.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,8 +0,0 @@
-/**
- * \ingroup tests
- * \defgroup Ns3WifiTests ns-3 Wifi Implementation Tests
- *
- * \section Ns3WifiTestsOverview ns-3 Wifi Implementation Tests Overview
- *
- * ns-3 has a Wifi implementation and we test it a little.
- */
diff -Naur ns-3.18.1/src/topology-read/bindings/modulegen__gcc_ILP32.py ns-3.19/src/topology-read/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/topology-read/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/topology-read/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -87,7 +87,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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'])
     ## topology-reader.h (module 'topology-read'): ns3::TopologyReader [class]
@@ -694,10 +694,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -1577,6 +1578,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -1587,6 +1593,11 @@
                    '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', 
@@ -1602,6 +1613,11 @@
                    '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', 
@@ -1627,6 +1643,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/topology-read/bindings/modulegen__gcc_LP64.py ns-3.19/src/topology-read/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/topology-read/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/topology-read/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -87,7 +87,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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'])
     ## topology-reader.h (module 'topology-read'): ns3::TopologyReader [class]
@@ -694,10 +694,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -1577,6 +1578,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -1587,6 +1593,11 @@
                    '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', 
@@ -1602,6 +1613,11 @@
                    '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', 
@@ -1627,6 +1643,11 @@
                    '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', 
diff -Naur ns-3.18.1/src/topology-read/helper/topology-reader-helper.cc ns-3.19/src/topology-read/helper/topology-reader-helper.cc
--- ns-3.18.1/src/topology-read/helper/topology-reader-helper.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/topology-read/helper/topology-reader-helper.cc	2013-12-20 09:44:50.000000000 -0800
@@ -28,11 +28,12 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("TopologyReaderHelper");
+NS_LOG_COMPONENT_DEFINE ("TopologyReaderHelper")
+  ;
 
 TopologyReaderHelper::TopologyReaderHelper ()
 {
-  m_inFile = 0;
+  m_inputModel = 0;
 }
 
 void
@@ -51,7 +52,7 @@
 Ptr<TopologyReader>
 TopologyReaderHelper::GetTopologyReader ()
 {
-  if (!m_inFile)
+  if (!m_inputModel)
     {
       NS_ASSERT_MSG (!m_fileType.empty (), "Missing File Type");
       NS_ASSERT_MSG (!m_fileName.empty (), "Missing File Name");
@@ -59,26 +60,26 @@
       if (m_fileType == "Orbis")
         {
           NS_LOG_INFO ("Creating Orbis formatted data input.");
-          m_inFile = CreateObject<OrbisTopologyReader> ();
+          m_inputModel = CreateObject<OrbisTopologyReader> ();
         }
       else if (m_fileType == "Inet")
         {
           NS_LOG_INFO ("Creating Inet formatted data input.");
-          m_inFile = CreateObject<InetTopologyReader> ();
+          m_inputModel = CreateObject<InetTopologyReader> ();
         }
       else if (m_fileType == "Rocketfuel")
         {
           NS_LOG_INFO ("Creating Rocketfuel formatted data input.");
-          m_inFile = CreateObject<RocketfuelTopologyReader> ();
+          m_inputModel = CreateObject<RocketfuelTopologyReader> ();
         }
       else
         {
           NS_ASSERT_MSG (false, "Wrong (unknown) File Type");
         }
 
-      m_inFile->SetFileName (m_fileName);
+      m_inputModel->SetFileName (m_fileName);
     }
-  return m_inFile;
+  return m_inputModel;
 }
 
 
diff -Naur ns-3.18.1/src/topology-read/helper/topology-reader-helper.h ns-3.19/src/topology-read/helper/topology-reader-helper.h
--- ns-3.18.1/src/topology-read/helper/topology-reader-helper.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/topology-read/helper/topology-reader-helper.h	2013-12-20 09:44:50.000000000 -0800
@@ -56,9 +56,9 @@
   Ptr<TopologyReader> GetTopologyReader ();
 
 private:
-  Ptr<TopologyReader> m_inFile;
-  std::string m_fileName;
-  std::string m_fileType;
+  Ptr<TopologyReader> m_inputModel;  //!< Smart pointer to the actual topology model
+  std::string m_fileName;  //!< Name of the input file
+  std::string m_fileType;  //!< Type of the input file (e.g., "Inet", "Orbis", etc.).
 };
 
 } // namespace ns3
diff -Naur ns-3.18.1/src/topology-read/model/inet-topology-reader.cc ns-3.19/src/topology-read/model/inet-topology-reader.cc
--- ns-3.18.1/src/topology-read/model/inet-topology-reader.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/topology-read/model/inet-topology-reader.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,9 +30,11 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("InetTopologyReader");
+NS_LOG_COMPONENT_DEFINE ("InetTopologyReader")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (InetTopologyReader);
+NS_OBJECT_ENSURE_REGISTERED (InetTopologyReader)
+  ;
 
 TypeId InetTopologyReader::GetTypeId (void)
 {
diff -Naur ns-3.18.1/src/topology-read/model/inet-topology-reader.h ns-3.19/src/topology-read/model/inet-topology-reader.h
--- ns-3.18.1/src/topology-read/model/inet-topology-reader.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/topology-read/model/inet-topology-reader.h	2013-12-20 09:44:50.000000000 -0800
@@ -47,6 +47,10 @@
 class InetTopologyReader : public TopologyReader
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   InetTopologyReader ();
@@ -67,7 +71,18 @@
   virtual NodeContainer Read (void);
 
 private:
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
   InetTopologyReader (const InetTopologyReader&);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
   InetTopologyReader& operator= (const InetTopologyReader&);
 
   // end class InetTopologyReader
diff -Naur ns-3.18.1/src/topology-read/model/orbis-topology-reader.cc ns-3.19/src/topology-read/model/orbis-topology-reader.cc
--- ns-3.18.1/src/topology-read/model/orbis-topology-reader.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/topology-read/model/orbis-topology-reader.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,9 +30,11 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("OrbisTopologyReader");
+NS_LOG_COMPONENT_DEFINE ("OrbisTopologyReader")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (OrbisTopologyReader);
+NS_OBJECT_ENSURE_REGISTERED (OrbisTopologyReader)
+  ;
 
 TypeId OrbisTopologyReader::GetTypeId (void)
 {
diff -Naur ns-3.18.1/src/topology-read/model/orbis-topology-reader.h ns-3.19/src/topology-read/model/orbis-topology-reader.h
--- ns-3.18.1/src/topology-read/model/orbis-topology-reader.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/topology-read/model/orbis-topology-reader.h	2013-12-20 09:44:50.000000000 -0800
@@ -44,6 +44,10 @@
 class OrbisTopologyReader : public TopologyReader
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   OrbisTopologyReader ();
@@ -62,7 +66,19 @@
   virtual NodeContainer Read (void);
 
 private:
+private:
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
   OrbisTopologyReader (const OrbisTopologyReader&);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
   OrbisTopologyReader& operator= (const OrbisTopologyReader&);
 
   // end class OrbisTopologyReader
diff -Naur ns-3.18.1/src/topology-read/model/rocketfuel-topology-reader.cc ns-3.19/src/topology-read/model/rocketfuel-topology-reader.cc
--- ns-3.18.1/src/topology-read/model/rocketfuel-topology-reader.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/topology-read/model/rocketfuel-topology-reader.cc	2013-12-20 09:44:50.000000000 -0800
@@ -30,9 +30,11 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("RocketfuelTopologyReader");
+NS_LOG_COMPONENT_DEFINE ("RocketfuelTopologyReader")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (RocketfuelTopologyReader);
+NS_OBJECT_ENSURE_REGISTERED (RocketfuelTopologyReader)
+  ;
 
 TypeId RocketfuelTopologyReader::GetTypeId (void)
 {
@@ -44,6 +46,8 @@
 
 RocketfuelTopologyReader::RocketfuelTopologyReader ()
 {
+  m_linksNumber = 0;
+  m_nodesNumber = 0;
   NS_LOG_FUNCTION (this);
 }
 
@@ -54,6 +58,7 @@
 
 /* uid @loc [+] [bb] (num_neigh) [&ext] -> <nuid-1> <nuid-2> ... {-euid} ... =name[!] rn */
 
+
 #define REGMATCH_MAX 16
 
 #define START "^"
@@ -73,10 +78,16 @@
 #define ROCKETFUEL_WEIGHTS_LINE \
   START "([^ \t]+)" SPACE "([^ \t]+)" SPACE "([0-9.]+)" MAYSPACE END
 
-int linksNumber = 0;
-int nodesNumber = 0;
-std::map<std::string, Ptr<Node> > nodeMap;
-
+/**
+ * \brief Print node info
+ * \param uid node ID
+ * \param loc node location
+ * \param dns is a DNS node ?
+ * \param bb is a BB node ?
+ * \param neighListSize size of neighbor list
+ * \param name node name
+ * \param radius node radius
+ */
 static inline void
 PrintNodeInfo (std::string & uid, std::string & loc, bool dns, bool bb,
                std::vector <std::string>::size_type neighListSize,
@@ -148,7 +159,7 @@
   /* externs */
   if (argv[7])
     {
-      //      euid = argv[7];
+      // euid = argv[7];
     }
 
   /* name */
@@ -168,12 +179,12 @@
   // Create node and link
   if (!uid.empty ())
     {
-      if (nodeMap[uid] == 0)
+      if (m_nodeMap[uid] == 0)
         {
           Ptr<Node> tmpNode = CreateObject<Node> ();
-          nodeMap[uid] = tmpNode;
+          m_nodeMap[uid] = tmpNode;
           nodes.Add (tmpNode);
-          nodesNumber++;
+          m_nodesNumber++;
         }
 
       for (uint32_t i = 0; i < neigh_list.size (); ++i)
@@ -185,19 +196,22 @@
               return nodes;
             }
 
-          if (nodeMap[nuid] == 0)
+          if (m_nodeMap[nuid] == 0)
             {
               Ptr<Node> tmpNode = CreateObject<Node> ();
-              nodeMap[nuid] = tmpNode;
+              m_nodeMap[nuid] = tmpNode;
               nodes.Add (tmpNode);
-              nodesNumber++;
+              m_nodesNumber++;
             }
-          NS_LOG_INFO (linksNumber << ":" << nodesNumber << " From: " << uid << " to: " << nuid);
-          Link link (nodeMap[uid], uid, nodeMap[nuid], nuid);
+          NS_LOG_INFO (m_linksNumber << ":" << m_nodesNumber << " From: " << uid << " to: " << nuid);
+          Link link (m_nodeMap[uid], uid, m_nodeMap[nuid], nuid);
           AddLink (link);
-          linksNumber++;
+          m_linksNumber++;
         }
     }
+
+  NS_LOG_INFO ("Rocketfuel topology created with " << m_nodesNumber << " nodes and " << m_linksNumber << " links");
+
   return nodes;
 }
 
@@ -223,28 +237,28 @@
   // Create node and link
   if (!sname.empty () && !tname.empty ())
     {
-      if (nodeMap[sname] == 0)
+      if (m_nodeMap[sname] == 0)
         {
           Ptr<Node> tmpNode = CreateObject<Node> ();
-          nodeMap[sname] = tmpNode;
+          m_nodeMap[sname] = tmpNode;
           nodes.Add (tmpNode);
-          nodesNumber++;
+          m_nodesNumber++;
         }
 
-      if (nodeMap[tname] == 0)
+      if (m_nodeMap[tname] == 0)
         {
           Ptr<Node> tmpNode = CreateObject<Node> ();
-          nodeMap[tname] = tmpNode;
+          m_nodeMap[tname] = tmpNode;
           nodes.Add (tmpNode);
-          nodesNumber++;
+          m_nodesNumber++;
         }
-      NS_LOG_INFO (linksNumber << ":" << nodesNumber << " From: " << sname << " to: " << tname);
+      NS_LOG_INFO (m_linksNumber << ":" << m_nodesNumber << " From: " << sname << " to: " << tname);
       TopologyReader::ConstLinksIterator iter;
       bool found = false;
       for (iter = LinksBegin (); iter != LinksEnd (); iter++)
         {
-          if ((iter->GetFromNode () == nodeMap[tname])
-              && (iter->GetToNode () == nodeMap[sname]))
+          if ((iter->GetFromNode () == m_nodeMap[tname])
+              && (iter->GetToNode () == m_nodeMap[sname]))
             {
               found = true;
               break;
@@ -253,11 +267,14 @@
 
       if (!found)
         {
-          Link link (nodeMap[sname], sname, nodeMap[tname], tname);
+          Link link (m_nodeMap[sname], sname, m_nodeMap[tname], tname);
           AddLink (link);
-          linksNumber++;
+          m_linksNumber++;
         }
     }
+
+  NS_LOG_INFO ("Rocketfuel topology created with " << m_nodesNumber << " nodes and " << m_linksNumber << " links");
+
   return nodes;
 }
 
@@ -423,7 +440,6 @@
 
   topgen.close ();
 
-  NS_LOG_INFO ("Rocketfuel topology created with " << nodesNumber << " nodes and " << linksNumber << " links");
   return nodes;
 }
 
diff -Naur ns-3.18.1/src/topology-read/model/rocketfuel-topology-reader.h ns-3.19/src/topology-read/model/rocketfuel-topology-reader.h
--- ns-3.18.1/src/topology-read/model/rocketfuel-topology-reader.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/topology-read/model/rocketfuel-topology-reader.h	2013-12-20 09:44:50.000000000 -0800
@@ -43,6 +43,10 @@
 class RocketfuelTopologyReader : public TopologyReader
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   RocketfuelTopologyReader ();
@@ -61,23 +65,68 @@
   virtual NodeContainer Read (void);
 
 private:
-  RocketfuelTopologyReader (const RocketfuelTopologyReader&);
-  RocketfuelTopologyReader& operator= (const RocketfuelTopologyReader&);
-  // Parser for the *.cch file available at:
-  // http://www.cs.washington.edu/research/networking/rocketfuel/maps/rocketfuel_maps_cch.tar.gz
+  /**
+   * \brief Topology read function from a file containing the nodes map.
+   *
+   * Parser for the *.cch file available at:
+   * http://www.cs.washington.edu/research/networking/rocketfuel/maps/rocketfuel_maps_cch.tar.gz
+   *
+   * \param argc argument counter
+   * \param argv argument vector
+   * \return the container of the nodes created (or empty container if there was an error)
+   */
   NodeContainer GenerateFromMapsFile (int argc, char *argv[]);
-  // Parser for the weights.* file available at:
-  // http://www.cs.washington.edu/research/networking/rocketfuel/maps/weights-dist.tar.gz
+
+  /**
+   * \brief Topology read function from a file containing the nodes weights.
+   *
+   * Parser for the weights.* file available at:
+   * http://www.cs.washington.edu/research/networking/rocketfuel/maps/weights-dist.tar.gz
+   *
+   * \param argc argument counter
+   * \param argv argument vector
+   * \return the container of the nodes created (or empty container if there was an error)
+   */
   NodeContainer GenerateFromWeightsFile (int argc, char *argv[]);
 
+  /**
+   * \brief Enum of the possible file types.
+   */
   enum RF_FileType
   {
     RF_MAPS,
     RF_WEIGHTS,
     RF_UNKNOWN
   };
+
+
+  /**
+   * \brief Classifies the file type according to its content.
+   *
+   * \return the file type (RF_MAPS, RF_WEIGHTS, or RF_UNKNOWN)
+   */
   enum RF_FileType GetFileType (const char *);
 
+  int m_linksNumber; //!< number of links
+  int m_nodesNumber; //!< number of nodes
+  std::map<std::string, Ptr<Node> > m_nodeMap; //!< map of the nodes (name, node)
+
+private:
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  RocketfuelTopologyReader (const RocketfuelTopologyReader&);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  RocketfuelTopologyReader& operator= (const RocketfuelTopologyReader&);
+
+
   // end class RocketfuelTopologyReader
 };
 
diff -Naur ns-3.18.1/src/topology-read/model/topology-reader.cc ns-3.19/src/topology-read/model/topology-reader.cc
--- ns-3.18.1/src/topology-read/model/topology-reader.cc	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/topology-read/model/topology-reader.cc	2013-12-20 09:44:50.000000000 -0800
@@ -26,9 +26,11 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("TopologyReader");
+NS_LOG_COMPONENT_DEFINE ("TopologyReader")
+  ;
 
-NS_OBJECT_ENSURE_REGISTERED (TopologyReader);
+NS_OBJECT_ENSURE_REGISTERED (TopologyReader)
+  ;
 
 TypeId TopologyReader::GetTypeId (void)
 {
diff -Naur ns-3.18.1/src/topology-read/model/topology-reader.h ns-3.19/src/topology-read/model/topology-reader.h
--- ns-3.18.1/src/topology-read/model/topology-reader.h	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/topology-read/model/topology-reader.h	2013-12-20 09:44:50.000000000 -0800
@@ -54,9 +54,9 @@
   class Link
   {
 public:
-  /**
-   * \brief Constant iterator to scan the map of link attributes.
-   */
+    /**
+     * \brief Constant iterator to scan the map of link attributes.
+     */
     typedef std::map<std::string, std::string>::const_iterator ConstAttributesIterator;
 
     /**
@@ -123,11 +123,11 @@
 
 private:
     Link ();
-    std::string m_fromName;
-    Ptr< Node > m_fromPtr;
-    std::string m_toName;
-    Ptr< Node > m_toPtr;
-    std::map<std::string, std::string> m_linkAttr;
+    std::string m_fromName; //!< Name of the node the links originates from
+    Ptr< Node > m_fromPtr;  //!< The node the links originates from
+    std::string m_toName;   //!< Name of the node the links is directed to
+    Ptr< Node > m_toPtr;    //!< The node the links is directed to
+    std::map<std::string, std::string> m_linkAttr;  ///< Container of the link attributes (if any)
   };
 
   /**
@@ -135,6 +135,10 @@
    */
   typedef std::list< Link >::const_iterator ConstLinksIterator;
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   TopologyReader ();
@@ -196,10 +200,29 @@
   void AddLink (Link link);
 
 private:
+
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
   TopologyReader (const TopologyReader&);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
   TopologyReader& operator= (const TopologyReader&);
 
+  /**
+   * the name of the input file
+   */
   std::string m_fileName;
+
+  /**
+   * the container of the links between the nodes
+   */
   std::list<Link> m_linksList;
 
   // end class TopologyReader
diff -Naur ns-3.18.1/src/uan/bindings/modulegen__gcc_ILP32.py ns-3.19/src/uan/bindings/modulegen__gcc_ILP32.py
--- ns-3.18.1/src/uan/bindings/modulegen__gcc_ILP32.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/uan/bindings/modulegen__gcc_ILP32.py	2013-12-20 09:44:50.000000000 -0800
@@ -179,7 +179,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1569,10 +1569,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -3497,6 +3498,11 @@
                    'ns3::Time', 
                    [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
                    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', 
@@ -3507,6 +3513,11 @@
                    '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', 
@@ -3522,6 +3533,11 @@
                    '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', 
@@ -3547,6 +3563,11 @@
                    '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', 
@@ -4748,11 +4769,6 @@
                    'double', 
                    [param('double', 'db')], 
                    is_const=True)
-    ## uan-phy.h (module 'uan'): void ns3::UanPhyCalcSinr::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
     ## uan-phy.h (module 'uan'): static ns3::TypeId ns3::UanPhyCalcSinr::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -4763,6 +4779,11 @@
                    'double', 
                    [param('double', 'kp')], 
                    is_const=True)
+    ## uan-phy.h (module 'uan'): void ns3::UanPhyCalcSinr::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3UanPhyCalcSinrDefault_methods(root_module, cls):
@@ -5135,14 +5156,14 @@
                    'void', 
                    [param('double', 'txpwr')], 
                    is_virtual=True)
-    ## uan-phy-dual.h (module 'uan'): void ns3::UanPhyDual::SetTxPowerDbPhy1(double arg0) [member function]
+    ## uan-phy-dual.h (module 'uan'): void ns3::UanPhyDual::SetTxPowerDbPhy1(double txpwr) [member function]
     cls.add_method('SetTxPowerDbPhy1', 
                    'void', 
-                   [param('double', 'arg0')])
-    ## uan-phy-dual.h (module 'uan'): void ns3::UanPhyDual::SetTxPowerDbPhy2(double arg0) [member function]
+                   [param('double', 'txpwr')])
+    ## uan-phy-dual.h (module 'uan'): void ns3::UanPhyDual::SetTxPowerDbPhy2(double txpwr) [member function]
     cls.add_method('SetTxPowerDbPhy2', 
                    'void', 
-                   [param('double', 'arg0')])
+                   [param('double', 'txpwr')])
     ## uan-phy-dual.h (module 'uan'): void ns3::UanPhyDual::StartRxPacket(ns3::Ptr<ns3::Packet> pkt, double rxPowerDb, ns3::UanTxMode txMode, ns3::UanPdp pdp) [member function]
     cls.add_method('StartRxPacket', 
                    'void', 
@@ -5372,16 +5393,16 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## uan-phy.h (module 'uan'): void ns3::UanPhyPer::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
     ## uan-phy.h (module 'uan'): static ns3::TypeId ns3::UanPhyPer::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## uan-phy.h (module 'uan'): void ns3::UanPhyPer::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3UanPhyPerGenDefault_methods(root_module, cls):
diff -Naur ns-3.18.1/src/uan/bindings/modulegen__gcc_LP64.py ns-3.19/src/uan/bindings/modulegen__gcc_LP64.py
--- ns-3.18.1/src/uan/bindings/modulegen__gcc_LP64.py	2013-11-15 13:50:31.000000000 -0800
+++ ns-3.19/src/uan/bindings/modulegen__gcc_LP64.py	2013-12-20 09:44:50.000000000 -0800
@@ -179,7 +179,7 @@
     ## nstime.h (module 'core'): ns3::Time [class]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    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]
@@ -1569,10 +1569,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## 