Merge remote-tracking branch 'git.irl/car2car'
diff --git a/.gitignore b/.gitignore
index cfc58f9..070f0ea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,7 +3,8 @@
in-progress/
waf
*~
-*#
+.DS_Store
+*\#
*.txt
*.pdf
*.dot
\ No newline at end of file
diff --git a/apps/ccnx-app.cc b/apps/ccnx-app.cc
index cc5e9b2..5093cf7 100644
--- a/apps/ccnx-app.cc
+++ b/apps/ccnx-app.cc
@@ -84,14 +84,14 @@
}
void
-CcnxApp::OnInterest (const Ptr<const CcnxInterestHeader> &interest)
+CcnxApp::OnInterest (const Ptr<const CcnxInterestHeader> &interest, Ptr<Packet> packet)
{
NS_LOG_FUNCTION (this << interest);
m_receivedInterests (interest, this, m_face);
}
void
-CcnxApp::OnNack (const Ptr<const CcnxInterestHeader> &interest)
+CcnxApp::OnNack (const Ptr<const CcnxInterestHeader> &interest, Ptr<Packet> packet)
{
NS_LOG_FUNCTION (this << interest);
m_receivedNacks (interest, this, m_face);
@@ -99,7 +99,7 @@
void
CcnxApp::OnContentObject (const Ptr<const CcnxContentObjectHeader> &contentObject,
- const Ptr<const Packet> &payload)
+ Ptr<Packet> payload)
{
NS_LOG_FUNCTION (this << contentObject << payload);
m_receivedContentObjects (contentObject, payload, this, m_face);
diff --git a/apps/ccnx-app.h b/apps/ccnx-app.h
index ae52048..80a789c 100644
--- a/apps/ccnx-app.h
+++ b/apps/ccnx-app.h
@@ -65,25 +65,27 @@
/**
* @brief Method that will be called every time new Interest arrives
* @param interest Interest header
+ * @param packet "Payload" of the interests packet. The actual payload should be zero, but packet itself
+ * may be useful to get packet tags
*/
virtual void
- OnInterest (const Ptr<const CcnxInterestHeader> &interest);
+ OnInterest (const Ptr<const CcnxInterestHeader> &interest, Ptr<Packet> packet);
/**
* @brief Method that will be called every time new NACK arrives
* @param interest Interest header
*/
virtual void
- OnNack (const Ptr<const CcnxInterestHeader> &interest);
+ OnNack (const Ptr<const CcnxInterestHeader> &interest, Ptr<Packet> packet);
/**
* @brief Method that will be called every time new ContentObject arrives
* @param contentObject ContentObject header
- * @param payload payload (potentially virtual) of the ContentObject packet
+ * @param payload payload (potentially virtual) of the ContentObject packet (may include packet tags of original packet)
*/
virtual void
OnContentObject (const Ptr<const CcnxContentObjectHeader> &contentObject,
- const Ptr<const Packet> &payload);
+ Ptr<Packet> payload);
protected:
virtual void
diff --git a/apps/ccnx-consumer-batches.cc b/apps/ccnx-consumer-batches.cc
new file mode 100644
index 0000000..2a86817
--- /dev/null
+++ b/apps/ccnx-consumer-batches.cc
@@ -0,0 +1,90 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * 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: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#include "ccnx-consumer-batches.h"
+#include "ns3/ptr.h"
+#include "ns3/log.h"
+#include "ns3/simulator.h"
+#include "ns3/packet.h"
+#include "ns3/callback.h"
+#include "ns3/string.h"
+#include "ns3/uinteger.h"
+#include "ns3/double.h"
+#include "ns3/batches.h"
+
+NS_LOG_COMPONENT_DEFINE ("CcnxConsumerBatches");
+
+namespace ns3
+{
+
+NS_OBJECT_ENSURE_REGISTERED (CcnxConsumerBatches);
+
+TypeId
+CcnxConsumerBatches::GetTypeId (void)
+{
+ static TypeId tid = TypeId ("ns3::CcnxConsumerBatches")
+ .SetParent<CcnxConsumer> ()
+ .AddConstructor<CcnxConsumerBatches> ()
+
+ .AddAttribute ("Batches", "Batches to schedule. Should be vector, containing pairs of time and amount",
+ // TypeId::ATTR_SET,
+ StringValue (""),
+ MakeBatchesAccessor (&CcnxConsumerBatches::GetBatch, &CcnxConsumerBatches::SetBatch),
+ MakeBatchesChecker ())
+ ;
+
+ return tid;
+}
+
+CcnxConsumerBatches::CcnxConsumerBatches ()
+{
+}
+
+void
+CcnxConsumerBatches::SetBatch (const Batches &batches)
+{
+ // std::cout << "Batches: " << batches << "\n";
+ for (Batches::const_iterator i = batches.begin (); i != batches.end (); i++)
+ {
+ Simulator::Schedule (i->get<0> (), &CcnxConsumerBatches::AddBatch, this, i->get<1> ());
+ }
+}
+
+void
+CcnxConsumerBatches::AddBatch (uint32_t amount)
+{
+ // std::cout << Simulator::Now () << " adding batch of " << amount << "\n";
+ m_seqMax += amount;
+ m_rtt->ClearSent (); // this is important, otherwise RTT estimation for the new batch will be affected by previous batch history
+ ScheduleNextPacket ();
+}
+
+void
+CcnxConsumerBatches::ScheduleNextPacket ()
+{
+ if (!m_sendEvent.IsRunning ())
+ m_sendEvent = Simulator::Schedule (Seconds (m_rtt->RetransmitTimeout ().ToDouble (Time::S) * 0.1), &CcnxConsumer::SendPacket, this);
+}
+
+///////////////////////////////////////////////////
+// Process incoming packets //
+///////////////////////////////////////////////////
+
+} // namespace ns3
diff --git a/apps/ccnx-consumer-batches.h b/apps/ccnx-consumer-batches.h
new file mode 100644
index 0000000..36d7643
--- /dev/null
+++ b/apps/ccnx-consumer-batches.h
@@ -0,0 +1,78 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * 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: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#ifndef CCNX_CONSUMER_BATCHES_H
+#define CCNX_CONSUMER_BATCHES_H
+
+#include "ccnx-consumer.h"
+#include "ns3/traced-value.h"
+#include "ns3/batches.h"
+
+namespace ns3
+{
+
+/**
+ * @ingroup ccnx
+ * \brief CCNx application for sending out Interest packets in batches
+ */
+class CcnxConsumerBatches: public CcnxConsumer
+{
+public:
+ static TypeId GetTypeId ();
+
+ /**
+ * \brief Default constructor
+ */
+ CcnxConsumerBatches ();
+
+ // From CcnxApp
+ // virtual void
+ // OnInterest (const Ptr<const CcnxInterestHeader> &interest);
+
+ // virtual void
+ // OnNack (const Ptr<const CcnxInterestHeader> &interest);
+
+ // virtual void
+ // OnContentObject (const Ptr<const CcnxContentObjectHeader> &contentObject,
+ // const Ptr<const Packet> &payload);
+
+ // virtual void
+ // OnTimeout (uint32_t sequenceNumber);
+
+private:
+ Batches
+ GetBatch () const { return Batches(); }
+
+ void
+ SetBatch (const Batches &batch);
+
+ void
+ AddBatch (uint32_t amount);
+protected:
+ /**
+ * \brief Constructs the Interest packet and sends it using a callback to the underlying CCNx protocol
+ */
+ virtual void
+ ScheduleNextPacket ();
+};
+
+} // namespace ns3
+
+#endif
diff --git a/apps/ccnx-consumer-cbr.cc b/apps/ccnx-consumer-cbr.cc
new file mode 100644
index 0000000..1727bcd
--- /dev/null
+++ b/apps/ccnx-consumer-cbr.cc
@@ -0,0 +1,97 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * 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: Ilya Moiseenko <iliamo@cs.ucla.edu>
+ */
+
+#include "ccnx-consumer-cbr.h"
+#include "ns3/ptr.h"
+#include "ns3/log.h"
+#include "ns3/simulator.h"
+#include "ns3/packet.h"
+#include "ns3/callback.h"
+#include "ns3/string.h"
+#include "ns3/boolean.h"
+#include "ns3/uinteger.h"
+#include "ns3/double.h"
+
+#include "ns3/ccnx.h"
+#include "../model/ccnx-local-face.h"
+#include "ns3/ccnx-interest-header.h"
+#include "ns3/ccnx-content-object-header.h"
+
+NS_LOG_COMPONENT_DEFINE ("CcnxConsumerCbr");
+
+namespace ns3
+{
+
+NS_OBJECT_ENSURE_REGISTERED (CcnxConsumerCbr);
+
+TypeId
+CcnxConsumerCbr::GetTypeId (void)
+{
+ static TypeId tid = TypeId ("ns3::CcnxConsumerCbr")
+ .SetParent<CcnxConsumer> ()
+ .AddConstructor<CcnxConsumerCbr> ()
+
+ .AddAttribute ("Frequency", "Frequency of interest packets",
+ StringValue ("1.0"),
+ MakeDoubleAccessor (&CcnxConsumerCbr::m_frequency),
+ MakeDoubleChecker<double> ())
+ ;
+
+ return tid;
+}
+
+CcnxConsumerCbr::CcnxConsumerCbr ()
+ : m_frequency (1.0)
+{
+ NS_LOG_FUNCTION_NOARGS ();
+ m_seqMax = std::numeric_limits<uint32_t>::max ();
+}
+
+void
+CcnxConsumerCbr::ScheduleNextPacket ()
+{
+ // double mean = 8.0 * m_payloadSize / m_desiredRate.GetBitRate ();
+ // std::cout << "next: " << Simulator::Now().ToDouble(Time::S) + mean << "s\n";
+
+ if (!m_sendEvent.IsRunning ())
+ m_sendEvent = Simulator::Schedule (
+ // Seconds(m_randExp.GetValue ()),
+ Seconds(1.0 / m_frequency),
+ &CcnxConsumer::SendPacket, this);
+}
+
+///////////////////////////////////////////////////
+// Process incoming packets //
+///////////////////////////////////////////////////
+
+// void
+// CcnxConsumer::OnContentObject (const Ptr<const CcnxContentObjectHeader> &contentObject,
+// const Ptr<const Packet> &payload)
+// {
+// CcnxConsumer::OnContentObject (contentObject, payload); // tracing inside
+// }
+
+// void
+// CcnxConsumer::OnNack (const Ptr<const CcnxInterestHeader> &interest)
+// {
+// CcnxConsumer::OnNack (interest); // tracing inside
+// }
+
+} // namespace ns3
diff --git a/apps/ccnx-consumer-cbr.h b/apps/ccnx-consumer-cbr.h
new file mode 100644
index 0000000..03558ed
--- /dev/null
+++ b/apps/ccnx-consumer-cbr.h
@@ -0,0 +1,83 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * 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: Ilya Moiseenko <iliamo@cs.ucla.edu>
+ * Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#ifndef CCNX_CONSUMER_CBR_H
+#define CCNX_CONSUMER_CBR_H
+
+#include "ccnx-consumer.h"
+
+namespace ns3
+{
+
+/**
+ * @ingroup ccnx
+ * \brief CCNx application for sending out Interest packets at a "constant" rate (Poisson process)
+ */
+class CcnxConsumerCbr: public CcnxConsumer
+{
+public:
+ static TypeId GetTypeId ();
+
+ /**
+ * \brief Default constructor
+ * Sets up randomizer function and packet sequence number
+ */
+ CcnxConsumerCbr ();
+
+ // From CcnxApp
+ // virtual void
+ // OnInterest (const Ptr<const CcnxInterestHeader> &interest);
+
+ // virtual void
+ // OnNack (const Ptr<const CcnxInterestHeader> &interest);
+
+ // virtual void
+ // OnContentObject (const Ptr<const CcnxContentObjectHeader> &contentObject,
+ // const Ptr<const Packet> &payload);
+
+protected:
+ /**
+ * \brief Constructs the Interest packet and sends it using a callback to the underlying CCNx protocol
+ */
+ virtual void
+ ScheduleNextPacket ();
+
+private:
+ // void
+ // UpdateMean ();
+
+ // virtual void
+ // SetPayloadSize (uint32_t payload);
+
+ // void
+ // SetDesiredRate (DataRate rate);
+
+ // DataRate
+ // GetDesiredRate () const;
+
+protected:
+ ExponentialVariable m_randExp; // packet inter-arrival time generation (Poisson process)
+ double m_frequency; // Frequency of interest packets (in hertz)
+};
+
+} // namespace ns3
+
+#endif
diff --git a/apps/ccnx-consumer-window.cc b/apps/ccnx-consumer-window.cc
new file mode 100644
index 0000000..3d6f515
--- /dev/null
+++ b/apps/ccnx-consumer-window.cc
@@ -0,0 +1,179 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * 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: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#include "ccnx-consumer-window.h"
+#include "ns3/ptr.h"
+#include "ns3/log.h"
+#include "ns3/simulator.h"
+#include "ns3/packet.h"
+#include "ns3/callback.h"
+#include "ns3/string.h"
+#include "ns3/uinteger.h"
+#include "ns3/double.h"
+
+NS_LOG_COMPONENT_DEFINE ("CcnxConsumerWindow");
+
+namespace ns3
+{
+
+NS_OBJECT_ENSURE_REGISTERED (CcnxConsumerWindow);
+
+TypeId
+CcnxConsumerWindow::GetTypeId (void)
+{
+ static TypeId tid = TypeId ("ns3::CcnxConsumerWindow")
+ .SetParent<CcnxConsumer> ()
+ .AddConstructor<CcnxConsumerWindow> ()
+
+ .AddAttribute ("Window", "Initial size of the window",
+ StringValue ("1"),
+ MakeUintegerAccessor (&CcnxConsumerWindow::GetWindow, &CcnxConsumerWindow::SetWindow),
+ MakeUintegerChecker<uint32_t> ())
+
+ .AddAttribute ("PayloadSize", "Average size of content object size (to calculate interest generation rate)",
+ UintegerValue (1040),
+ MakeUintegerAccessor (&CcnxConsumerWindow::GetPayloadSize, &CcnxConsumerWindow::SetPayloadSize),
+ MakeUintegerChecker<uint32_t>())
+ .AddAttribute ("Size", "Amount of data in megabytes to request (relies on PayloadSize parameter)",
+ DoubleValue (-1), // don't impose limit by default
+ MakeDoubleAccessor (&CcnxConsumerWindow::GetMaxSize, &CcnxConsumerWindow::SetMaxSize),
+ MakeDoubleChecker<double> ())
+
+ .AddTraceSource ("WindowTrace",
+ "Window that controls how many outstanding interests are allowed",
+ MakeTraceSourceAccessor (&CcnxConsumerWindow::m_window))
+ .AddTraceSource ("InFlight",
+ "Current number of outstanding interests",
+ MakeTraceSourceAccessor (&CcnxConsumerWindow::m_window))
+ ;
+
+ return tid;
+}
+
+CcnxConsumerWindow::CcnxConsumerWindow ()
+ : m_payloadSize (1040)
+ , m_inFlight (0)
+{
+}
+
+void
+CcnxConsumerWindow::SetWindow (uint32_t window)
+{
+ m_window = window;
+}
+
+uint32_t
+CcnxConsumerWindow::GetWindow () const
+{
+ return m_window;
+}
+
+uint32_t
+CcnxConsumerWindow::GetPayloadSize () const
+{
+ return m_payloadSize;
+}
+
+void
+CcnxConsumerWindow::SetPayloadSize (uint32_t payload)
+{
+ m_payloadSize = payload;
+}
+
+double
+CcnxConsumerWindow::GetMaxSize () const
+{
+ if (m_seqMax == 0)
+ return -1.0;
+
+ return m_maxSize;
+}
+
+void
+CcnxConsumerWindow::SetMaxSize (double size)
+{
+ m_maxSize = size;
+ if (m_maxSize < 0)
+ {
+ m_seqMax = 0;
+ return;
+ }
+
+ m_seqMax = floor(1.0 + m_maxSize * 1024.0 * 1024.0 / m_payloadSize);
+ NS_LOG_DEBUG ("MaxSeqNo: " << m_seqMax);
+ // std::cout << "MaxSeqNo: " << m_seqMax << "\n";
+}
+
+
+void
+CcnxConsumerWindow::ScheduleNextPacket ()
+{
+ if (m_window == static_cast<uint32_t> (0) || m_inFlight >= m_window)
+ {
+ if (!m_sendEvent.IsRunning ())
+ m_sendEvent = Simulator::Schedule (Seconds (m_rtt->RetransmitTimeout ().ToDouble (Time::S) * 0.1), &CcnxConsumer::SendPacket, this);
+ return;
+ }
+
+ // std::cout << "Window: " << m_window << ", InFlight: " << m_inFlight << "\n";
+ if (!m_sendEvent.IsRunning ())
+ {
+ m_inFlight++;
+ m_sendEvent = Simulator::ScheduleNow (&CcnxConsumer::SendPacket, this);
+ }
+}
+
+///////////////////////////////////////////////////
+// Process incoming packets //
+///////////////////////////////////////////////////
+
+void
+CcnxConsumerWindow::OnContentObject (const Ptr<const CcnxContentObjectHeader> &contentObject,
+ Ptr<Packet> payload)
+{
+ CcnxConsumer::OnContentObject (contentObject, payload);
+
+ m_window = m_window + 1;
+
+ if (m_inFlight > static_cast<uint32_t> (0)) m_inFlight--;
+ ScheduleNextPacket ();
+}
+
+void
+CcnxConsumerWindow::OnNack (const Ptr<const CcnxInterestHeader> &interest, Ptr<Packet> payload)
+{
+ CcnxConsumer::OnNack (interest, payload);
+ if (m_inFlight > static_cast<uint32_t> (0)) m_inFlight--;
+
+ if (m_window > static_cast<uint32_t> (0))
+ {
+ // m_window = 0.5 * m_window;//m_window - 1;
+ m_window = m_window - 1;
+ }
+}
+
+void
+CcnxConsumerWindow::OnTimeout (uint32_t sequenceNumber)
+{
+ if (m_inFlight > static_cast<uint32_t> (0)) m_inFlight--;
+ CcnxConsumer::OnTimeout (sequenceNumber);
+}
+
+} // namespace ns3
diff --git a/apps/ccnx-consumer-window.h b/apps/ccnx-consumer-window.h
new file mode 100644
index 0000000..21a9759
--- /dev/null
+++ b/apps/ccnx-consumer-window.h
@@ -0,0 +1,95 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * 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: Ilya Moiseenko <iliamo@cs.ucla.edu>
+ * Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#ifndef CCNX_CONSUMER_WINDOW_H
+#define CCNX_CONSUMER_WINDOW_H
+
+#include "ccnx-consumer.h"
+#include "ns3/traced-value.h"
+
+namespace ns3
+{
+
+/**
+ * @ingroup ccnx
+ * \brief CCNx application for sending out Interest packets (window-based)
+ */
+class CcnxConsumerWindow: public CcnxConsumer
+{
+public:
+ static TypeId GetTypeId ();
+
+ /**
+ * \brief Default constructor
+ */
+ CcnxConsumerWindow ();
+
+ // From CcnxApp
+ // virtual void
+ // OnInterest (const Ptr<const CcnxInterestHeader> &interest);
+
+ virtual void
+ OnNack (const Ptr<const CcnxInterestHeader> &interest, Ptr<Packet> payload);
+
+ virtual void
+ OnContentObject (const Ptr<const CcnxContentObjectHeader> &contentObject,
+ Ptr<Packet> payload);
+
+ virtual void
+ OnTimeout (uint32_t sequenceNumber);
+
+protected:
+ /**
+ * \brief Constructs the Interest packet and sends it using a callback to the underlying CCNx protocol
+ */
+ virtual void
+ ScheduleNextPacket ();
+
+private:
+ virtual void
+ SetWindow (uint32_t window);
+
+ uint32_t
+ GetWindow () const;
+
+ virtual void
+ SetPayloadSize (uint32_t payload);
+
+ uint32_t
+ GetPayloadSize () const;
+
+ double
+ GetMaxSize () const;
+
+ void
+ SetMaxSize (double size);
+
+protected:
+ uint32_t m_payloadSize; // expected payload size
+ double m_maxSize; // max size to request
+
+ TracedValue<uint32_t> m_window;
+ TracedValue<uint32_t> m_inFlight;
+};
+
+} // namespace ns3
+
+#endif
diff --git a/apps/ccnx-consumer.cc b/apps/ccnx-consumer.cc
index cf5d131..eafa77d 100644
--- a/apps/ccnx-consumer.cc
+++ b/apps/ccnx-consumer.cc
@@ -33,12 +33,15 @@
#include "../model/ccnx-local-face.h"
#include "ns3/ccnx-interest-header.h"
#include "ns3/ccnx-content-object-header.h"
+#include "ns3/ccnx-path-stretch-tag.h"
#include <boost/ref.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
+#include "ns3/names.h"
+
namespace ll = boost::lambda;
NS_LOG_COMPONENT_DEFINE ("CcnxConsumer");
@@ -53,28 +56,11 @@
{
static TypeId tid = TypeId ("ns3::CcnxConsumer")
.SetParent<CcnxApp> ()
- .AddConstructor<CcnxConsumer> ()
.AddAttribute ("StartSeq", "Initial sequence number",
IntegerValue (0),
MakeIntegerAccessor(&CcnxConsumer::m_seq),
MakeIntegerChecker<int32_t>())
- .AddAttribute ("Size", "Amount of data in megabytes to request (relies on PayloadSize parameter)",
- DoubleValue (-1), // don't impose limit by default
- MakeDoubleAccessor (&CcnxConsumer::GetMaxSize, &CcnxConsumer::SetMaxSize),
- MakeDoubleChecker<double> ())
-
- ///////
- .AddAttribute ("PayloadSize", "Average size of content object size (to calculate interest generation rate)",
- UintegerValue (1040),
- MakeUintegerAccessor (&CcnxConsumer::GetPayloadSize, &CcnxConsumer::SetPayloadSize),
- MakeUintegerChecker<uint32_t>())
- .AddAttribute ("MeanRate", "Mean data packet rate (relies on the PayloadSize parameter)",
- StringValue ("100Kbps"),
- MakeDataRateAccessor (&CcnxConsumer::GetDesiredRate, &CcnxConsumer::SetDesiredRate),
- MakeDataRateChecker ())
- ///////
-
.AddAttribute ("Prefix","CcnxName of the Interest",
StringValue ("/"),
MakeCcnxNameComponentsAccessor (&CcnxConsumer::m_interestName),
@@ -100,19 +86,17 @@
MakeCcnxNameComponentsAccessor (&CcnxConsumer::m_exclude),
MakeCcnxNameComponentsChecker ())
- .AddAttribute ("RTO",
- "Initial retransmission timeout",
- StringValue ("1s"),
- MakeTimeAccessor (&CcnxConsumer::m_rto),
- MakeTimeChecker ())
.AddAttribute ("RetxTimer",
"Timeout defining how frequent retransmission timeouts should be checked",
- StringValue ("1s"),
+ StringValue ("50ms"),
MakeTimeAccessor (&CcnxConsumer::GetRetxTimer, &CcnxConsumer::SetRetxTimer),
MakeTimeChecker ())
.AddTraceSource ("TransmittedInterests", "TransmittedInterests",
MakeTraceSourceAccessor (&CcnxConsumer::m_transmittedInterests))
+
+ .AddTraceSource ("PathWeightsTrace", "PathWeightsTrace",
+ MakeTraceSourceAccessor (&CcnxConsumer::m_pathWeightsTrace))
;
return tid;
@@ -120,13 +104,12 @@
CcnxConsumer::CcnxConsumer ()
: m_rand (0, std::numeric_limits<uint32_t>::max ())
- , m_desiredRate ("10Kbps")
- , m_payloadSize (1040)
, m_seq (0)
+ , m_seqMax (0) // don't request anything
{
NS_LOG_FUNCTION_NOARGS ();
- UpdateMean (); // not necessary (will be called by ns3 object system anyways), but doesn't hurt
+ m_rtt = CreateObject<RttMeanDeviation> ();
}
void
@@ -152,96 +135,26 @@
{
Time now = Simulator::Now ();
- boost::mutex::scoped_lock (m_seqTimeoutsGuard);
+ Time rto = m_rtt->RetransmitTimeout ();
while (!m_seqTimeouts.empty ())
{
SeqTimeoutsContainer::index<i_timestamp>::type::iterator entry =
m_seqTimeouts.get<i_timestamp> ().begin ();
- if (entry->time + m_rto <= now) // timeout expired?
+ if (entry->time + rto <= now) // timeout expired?
{
- m_retxSeqs.insert (entry->seq);
- m_seqTimeouts.get<i_timestamp> ().modify (entry,
- ll::bind(&SeqTimeout::time, ll::_1) = now);
+ uint32_t seqNo = entry->seq;
+ m_seqTimeouts.get<i_timestamp> ().erase (entry);
+ OnTimeout (seqNo);
}
else
break; // nothing else to do. All later packets need not be retransmitted
}
- if (m_retxSeqs.size () > 0)
- {
- ScheduleNextPacket ();
- }
-
m_retxEvent = Simulator::Schedule (m_retxTimer,
&CcnxConsumer::CheckRetxTimeout, this);
}
-void
-CcnxConsumer::UpdateMean ()
-{
- double mean = 8.0 * m_payloadSize / m_desiredRate.GetBitRate ();
- m_randExp = ExponentialVariable (mean, 10000 * mean); // set upper limit to inter-arrival time
-}
-
-void
-CcnxConsumer::SetPayloadSize (uint32_t payload)
-{
- m_payloadSize = payload;
- UpdateMean ();
-}
-
-uint32_t
-CcnxConsumer::GetPayloadSize () const
-{
- return m_payloadSize;
-}
-
-void
-CcnxConsumer::SetDesiredRate (DataRate rate)
-{
- m_desiredRate = rate;
- UpdateMean ();
-}
-
-DataRate
-CcnxConsumer::GetDesiredRate () const
-{
- return m_desiredRate;
-}
-
-double
-CcnxConsumer::GetMaxSize () const
-{
- if (m_seqMax == 0)
- return -1.0;
-
- return m_seqMax * m_payloadSize / 1024.0 / 1024.0;
-}
-
-void
-CcnxConsumer::SetMaxSize (double size)
-{
- if (size < 0)
- {
- m_seqMax = 0;
- return;
- }
-
- m_seqMax = floor(1.0 + size * 1024.0 * 1024.0 / m_payloadSize);
- NS_LOG_DEBUG ("MaxSeqNo: " << m_seqMax);
-}
-
-
-void
-CcnxConsumer::ScheduleNextPacket ()
-{
- if (!m_sendEvent.IsRunning ())
- m_sendEvent = Simulator::Schedule (
- Seconds(m_randExp.GetValue ()),
- &CcnxConsumer::SendPacket, this);
-}
-
// Application Methods
void
CcnxConsumer::StartApplication () // Called at time specified by Start
@@ -273,20 +186,29 @@
NS_LOG_FUNCTION_NOARGS ();
- boost::mutex::scoped_lock (m_seqTimeoutsGuard);
+ uint32_t seq=std::numeric_limits<uint32_t>::max (); //invalid
- uint32_t seq;
+ // std::cout << Simulator::Now ().ToDouble (Time::S) << "s max -> " << m_seqMax << "\n";
- if (m_retxSeqs.size () != 0)
+ while (m_retxSeqs.size ())
{
seq = *m_retxSeqs.begin ();
- NS_LOG_INFO ("Before: " << m_retxSeqs.size ());
m_retxSeqs.erase (m_retxSeqs.begin ());
- NS_LOG_INFO ("After: " << m_retxSeqs.size ());
+
+ // NS_ASSERT (m_seqLifetimes.find (seq) != m_seqLifetimes.end ());
+ // if (m_seqLifetimes.find (seq)->time <= Simulator::Now ())
+ // {
+
+ // NS_LOG_DEBUG ("Expire " << seq);
+ // m_seqLifetimes.erase (seq); // lifetime expired. Trying to find another unexpired sequence number
+ // continue;
+ // }
+ break;
}
- else
+
+ if (seq == std::numeric_limits<uint32_t>::max ())
{
- if (m_seqMax > 0)
+ if (m_seqMax != std::numeric_limits<uint32_t>::max ())
{
if (m_seq >= m_seqMax)
{
@@ -297,6 +219,8 @@
seq = m_seq++;
}
+ // std::cout << Simulator::Now ().ToDouble (Time::S) << "s -> " << seq << "\n";
+
//
Ptr<CcnxNameComponents> nameWithSequence = Create<CcnxNameComponents> (m_interestName);
(*nameWithSequence) (seq);
@@ -315,7 +239,7 @@
interestHeader.SetMinSuffixComponents (m_minSuffixComponents);
// NS_LOG_INFO ("Requesting Interest: \n" << interestHeader);
- NS_LOG_DEBUG ("node("<< GetNode()->GetId() <<") sending Interest for sequence " << seq);
+ NS_LOG_INFO ("> Interest for " << seq);
Ptr<Packet> packet = Create<Packet> ();
packet->AddHeader (interestHeader);
@@ -324,15 +248,11 @@
NS_LOG_DEBUG ("Trying to add " << seq << " with " << Simulator::Now () << ". already " << m_seqTimeouts.size () << " items");
- std::pair<SeqTimeoutsContainer::iterator, bool>
- res = m_seqTimeouts.insert (SeqTimeout (seq, Simulator::Now ()));
-
- if (!res.second)
- m_seqTimeouts.modify (res.first,
- ll::bind(&SeqTimeout::time, ll::_1) = Simulator::Now ());
-
+ m_seqTimeouts.insert (SeqTimeout (seq, Simulator::Now ()));
+ m_seqLifetimes.insert (SeqTimeout (seq, Simulator::Now () + m_interestLifeTime)); // only one insert will work. if entry exists, nothing will happen... nothing should happen
m_transmittedInterests (&interestHeader, this, m_face);
+ m_rtt->SentSeq (SequenceNumber32 (seq), 1);
ScheduleNextPacket ();
}
@@ -343,7 +263,7 @@
void
CcnxConsumer::OnContentObject (const Ptr<const CcnxContentObjectHeader> &contentObject,
- const Ptr<const Packet> &payload)
+ Ptr<Packet> payload)
{
if (!m_active) return;
@@ -354,10 +274,8 @@
// NS_LOG_INFO ("Received content object: " << boost::cref(*contentObject));
uint32_t seq = boost::lexical_cast<uint32_t> (contentObject->GetName ().GetComponents ().back ());
- NS_LOG_INFO ("node("<< GetNode()->GetId() <<") get DATA for sequence " << seq);
+ NS_LOG_INFO ("< DATA for " << seq);
- boost::mutex::scoped_lock (m_seqTimeoutsGuard);
-
// SeqTimeoutsContainer::iterator entry = m_seqTimeouts.find (seq);
// NS_ASSERT_MSG (entry != m_seqTimeouts.end (),
@@ -366,32 +284,56 @@
// if (entry != m_seqTimeouts.end ())
// m_seqTimeouts.erase (entry);
+ m_seqLifetimes.erase (seq);
m_seqTimeouts.erase (seq);
m_retxSeqs.erase (seq);
+
+ m_rtt->AckSeq (SequenceNumber32 (seq));
+
+ Ptr<const WeightsPathStretchTag> tag = payload->RemovePacketTag<WeightsPathStretchTag> ();
+ if (tag != 0)
+ {
+ // Notify trace about path weights vector (e.g., for path-stretch calculation)
+ m_pathWeightsTrace (GetNode (), tag->GetSourceNode (), seq, tag->GetTotalWeight ());
+ // if (Names::FindName (GetNode ()) == "36")// || Names::FindName (GetNode ()) == "40"|| Names::FindName (GetNode ()) == "5")
+ // std::cout << Simulator::Now () << "\t" << boost::cref(*tag) << " = " << tag->GetTotalWeight () << "\n";
+}
}
void
-CcnxConsumer::OnNack (const Ptr<const CcnxInterestHeader> &interest)
+CcnxConsumer::OnNack (const Ptr<const CcnxInterestHeader> &interest, Ptr<Packet> origPacket)
{
if (!m_active) return;
- CcnxApp::OnNack (interest); // tracing inside
+ CcnxApp::OnNack (interest, origPacket); // tracing inside
NS_LOG_DEBUG ("Nack type: " << interest->GetNack ());
- boost::mutex::scoped_lock (m_seqTimeoutsGuard);
NS_LOG_FUNCTION (this << interest);
// NS_LOG_INFO ("Received NACK: " << boost::cref(*interest));
uint32_t seq = boost::lexical_cast<uint32_t> (interest->GetName ().GetComponents ().back ());
- NS_LOG_DEBUG ("node("<< GetNode()->GetId() <<") < NACK for " << seq);
+ NS_LOG_INFO ("< NACK for " << seq);
+ // std::cout << Simulator::Now ().ToDouble (Time::S) << "s -> " << "NACK for " << seq << "\n";
// put in the queue of interests to be retransmitted
NS_LOG_INFO ("Before: " << m_retxSeqs.size ());
m_retxSeqs.insert (seq);
NS_LOG_INFO ("After: " << m_retxSeqs.size ());
+ // m_rtt->IncreaseMultiplier (); // Double the next RTO ??
ScheduleNextPacket ();
}
+void
+CcnxConsumer::OnTimeout (uint32_t sequenceNumber)
+{
+ // std::cout << Simulator::Now () << ", TO: " << sequenceNumber << ", current RTO: " << m_rtt->RetransmitTimeout ().ToDouble (Time::S) << "s\n";
+
+ // m_rtt->IncreaseMultiplier (); // Double the next RTO
+ m_rtt->SentSeq (SequenceNumber32 (sequenceNumber), 1); // make sure to disable RTT calculation for this sample
+ m_retxSeqs.insert (sequenceNumber);
+ ScheduleNextPacket ();
+}
+
} // namespace ns3
diff --git a/apps/ccnx-consumer.h b/apps/ccnx-consumer.h
index 9b28a2c..0709a40 100644
--- a/apps/ccnx-consumer.h
+++ b/apps/ccnx-consumer.h
@@ -27,6 +27,8 @@
#include "ns3/ccnx-name-components.h"
#include "ns3/nstime.h"
#include "ns3/data-rate.h"
+#include "../../internet/model/rtt-estimator.h"
+//#include "ns3/internet-module.h"
#include <set>
@@ -35,8 +37,6 @@
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/member.hpp>
-#include <boost/thread/mutex.hpp>
-
namespace ns3
{
@@ -60,12 +60,19 @@
// OnInterest (const Ptr<const CcnxInterestHeader> &interest);
virtual void
- OnNack (const Ptr<const CcnxInterestHeader> &interest);
+ OnNack (const Ptr<const CcnxInterestHeader> &interest, Ptr<Packet> packet);
virtual void
OnContentObject (const Ptr<const CcnxContentObjectHeader> &contentObject,
- const Ptr<const Packet> &payload);
+ Ptr<Packet> payload);
+ virtual void
+ OnTimeout (uint32_t sequenceNumber);
+
+ // Simulator::Schedule doesn't work with protected members???
+ void
+ SendPacket ();
+
protected:
// from CcnxApp
virtual void
@@ -74,31 +81,12 @@
virtual void
StopApplication ();
-private:
/**
* \brief Constructs the Interest packet and sends it using a callback to the underlying CCNx protocol
*/
- void
- ScheduleNextPacket ();
-
- void
- UpdateMean ();
-
- void
- SetPayloadSize (uint32_t payload);
-
- uint32_t
- GetPayloadSize () const;
-
- void
- SetDesiredRate (DataRate rate);
-
- DataRate
- GetDesiredRate () const;
+ virtual void
+ ScheduleNextPacket () = 0;
- void
- SendPacket ();
-
/**
* \brief Checks if the packet need to be retransmitted becuase of retransmission timer expiration
*/
@@ -119,28 +107,16 @@
Time
GetRetxTimer () const;
- double
- GetMaxSize () const;
-
- void
- SetMaxSize (double size);
-
protected:
UniformVariable m_rand; // nonce generator
- ExponentialVariable m_randExp; // packet inter-arrival time generation (Poisson process)
- DataRate m_desiredRate; // Desired data packet rate
- uint32_t m_payloadSize; // expected payload size
-
uint32_t m_seq;
uint32_t m_seqMax; // maximum number of sequence number
EventId m_sendEvent; // Eventid of pending "send packet" event
Time m_retxTimer;
EventId m_retxEvent; // Event to check whether or not retransmission should be performed
- Time m_rto; ///< \brief Retransmission timeout
- Time m_rttVar; ///< \brief RTT variance
- Time m_sRtt; ///< \brief smoothed RTT
+ Ptr<RttEstimator> m_rtt;
Time m_offTime; ///< \brief Time interval between packets
CcnxNameComponents m_interestName; ///< \brief CcnxName of the Interest (use CcnxNameComponents)
@@ -191,13 +167,15 @@
> { } ;
SeqTimeoutsContainer m_seqTimeouts; ///< \brief multi-index for the set of SeqTimeout structs
- boost::mutex m_seqTimeoutsGuard; ///< \brief mutex for safe work with the m_seqTimeouts
+ SeqTimeoutsContainer m_seqLifetimes;
/**
* \brief A trace that is called after each transmitted Interest packet
*/
TracedCallback<Ptr<const CcnxInterestHeader>,
Ptr<CcnxApp>, Ptr<CcnxFace> > m_transmittedInterests;
+
+ TracedCallback<Ptr<Node>, Ptr<Node>, uint32_t, uint32_t > m_pathWeightsTrace;
};
} // namespace ns3
diff --git a/apps/ccnx-producer.cc b/apps/ccnx-producer.cc
index 9a41c82..37209b3 100644
--- a/apps/ccnx-producer.cc
+++ b/apps/ccnx-producer.cc
@@ -23,6 +23,7 @@
#include "ns3/log.h"
#include "ns3/ccnx-interest-header.h"
#include "ns3/ccnx-content-object-header.h"
+// #include "ns3/ccnx-path-stretch-tag.h"
#include "ns3/string.h"
#include "ns3/uinteger.h"
#include "ns3/packet.h"
@@ -31,6 +32,9 @@
#include "ns3/ccnx-fib.h"
#include <boost/ref.hpp>
+#include <boost/lambda/lambda.hpp>
+#include <boost/lambda/bind.hpp>
+namespace ll = boost::lambda;
NS_LOG_COMPONENT_DEFINE ("CcnxProducer");
@@ -75,7 +79,13 @@
CcnxApp::StartApplication ();
- GetNode ()->GetObject<CcnxFib> ()->Add (m_prefix, m_face, 0);
+ Ptr<CcnxFib> fib = GetNode ()->GetObject<CcnxFib> ();
+ CcnxFibEntryContainer::type::iterator fibEntry = fib->Add (m_prefix, m_face, 0);
+
+ // make face green, so it will be used primarily
+ fib->m_fib.modify (fibEntry,
+ ll::bind (&CcnxFibEntry::UpdateStatus,
+ ll::_1, m_face, CcnxFibFaceMetric::NDN_FIB_GREEN));
}
void
@@ -89,9 +99,9 @@
void
-CcnxProducer::OnInterest (const Ptr<const CcnxInterestHeader> &interest)
+CcnxProducer::OnInterest (const Ptr<const CcnxInterestHeader> &interest, Ptr<Packet> origPacket)
{
- CcnxApp::OnInterest (interest); // tracing inside
+ CcnxApp::OnInterest (interest, origPacket); // tracing inside
NS_LOG_FUNCTION (this << interest);
@@ -104,7 +114,19 @@
NS_LOG_INFO ("node("<< GetNode()->GetId() <<") respodning with ContentObject:\n" << boost::cref(*header));
Ptr<Packet> packet = Create<Packet> (m_virtualPayloadSize);
+ // Ptr<const WeightsPathStretchTag> tag = origPacket->RemovePacketTag<WeightsPathStretchTag> ();
+ // if (tag != 0)
+ // {
+ // // std::cout << Simulator::Now () << ", " << m_app->GetInstanceTypeId ().GetName () << "\n";
+ // // echo back WeightsPathStretchTag
+ // packet->AddPacketTag (CreateObject<WeightsPathStretchTag> (*tag));
+
+ // // \todo
+ // // packet->AddPacketTag should actually accept Ptr<const WeightsPathStretchTag> instead of
+ // // Ptr<WeightsPathStretchTag>. Echoing will be simplified after change is done
+ // }
+
m_transmittedContentObjects (header, packet, this, m_face);
packet->AddHeader (*header);
diff --git a/apps/ccnx-producer.h b/apps/ccnx-producer.h
index a239d84..45794b2 100644
--- a/apps/ccnx-producer.h
+++ b/apps/ccnx-producer.h
@@ -39,7 +39,7 @@
CcnxProducer ();
// inherited from CcnxApp
- void OnInterest (const Ptr<const CcnxInterestHeader> &interest);
+ void OnInterest (const Ptr<const CcnxInterestHeader> &interest, Ptr<Packet> packet);
protected:
// inherited from Application base class.
diff --git a/apps/stupid-interest-generator.cc b/apps/stupid-interest-generator.cc
deleted file mode 100644
index 8606117..0000000
--- a/apps/stupid-interest-generator.cc
+++ /dev/null
@@ -1,177 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-//
-// ndn_stupidinterestgenerator.cpp
-// Abstraction
-//
-// Created by Ilya Moiseenko on 05.08.11.
-// Copyright 2011 UCLA. All rights reserved.
-//
-
-#include "stupid-interest-generator.h"
-
-#include "ns3/socket-factory.h"
-#include "ns3/simulator.h"
-
-#include "ns3/ccnx-interest-header.h"
-#include "ns3/ccnx-content-object-header.h"
-
-NS_LOG_COMPONENT_DEFINE ("StupidInterestGenerator");
-
-namespace ns3
-{
-
-NS_OBJECT_ENSURE_REGISTERED (StupidInterestGenerator);
-
-TypeId
-StupidInterestGenerator::GetTypeId (void)
-{
- static TypeId tid = TypeId ("ns3::StupidInterestGenerator")
- .SetParent<Application> ()
- .AddConstructor<StupidInterestGenerator> ()
- .AddAttribute ("Remote", "The address of the destination",
- AddressValue (),
- MakeAddressAccessor (&StupidInterestGenerator::m_peer),
- MakeAddressChecker ())
- .AddAttribute ("OffTime", "Time interval between packets",
- TimeValue (Seconds (0.1)),
- MakeTimeAccessor (&StupidInterestGenerator::m_offTime),
- MakeTimeChecker ())
- .AddAttribute ("Protocol", "The type of protocol to use.",
- TypeIdValue (UdpSocketFactory::GetTypeId ()),
- MakeTypeIdAccessor (&StupidInterestGenerator::m_tid),
- MakeTypeIdChecker ())
- ;
- return tid;
-}
-
-StupidInterestGenerator::StupidInterestGenerator ()
-{
- NS_LOG_FUNCTION_NOARGS ();
- m_socket = 0;
- //m_connected = false;
- //m_residualBits = 0;
- //m_lastStartTime = Seconds (0);
- //m_totBytes = 0;
-}
-
-StupidInterestGenerator::~StupidInterestGenerator()
-{
- NS_LOG_FUNCTION_NOARGS ();
-}
-
-void
-StupidInterestGenerator::DoDispose (void)
-{
- NS_LOG_FUNCTION_NOARGS ();
-
- m_socket = 0;
- // chain up
- Application::DoDispose ();
-}
-
-// Application Methods
-void StupidInterestGenerator::StartApplication () // Called at time specified by Start
-{
- NS_LOG_FUNCTION_NOARGS ();
-
- // Create the socket if not already
- if (!m_socket)
- {
- m_socket = Socket::CreateSocket (GetNode (), m_tid);
- m_socket->Bind ();
- m_socket->Connect (m_peer);
- m_socket->SetAllowBroadcast (true);
- m_socket->ShutdownRecv ();
- }
- // Insure no pending event
- CancelEvents ();
- // If we are not yet connected, there is nothing to do here
- // The ConnectionComplete upcall will start timers at that time
- //if (!m_connected) return;
- ScheduleStartEvent ();
-}
-
-void StupidInterestGenerator::StopApplication () // Called at time specified by Stop
-{
- NS_LOG_FUNCTION_NOARGS ();
-
- CancelEvents ();
- if(m_socket != 0)
- {
- m_socket->Close ();
- }
- else
- {
- NS_LOG_WARN ("OnOffApplication found null socket to close in StopApplication");
- }
-}
-
-void StupidInterestGenerator::CancelEvents ()
-{
- NS_LOG_FUNCTION_NOARGS ();
-
- Simulator::Cancel (m_sendEvent);
- Simulator::Cancel (m_startStopEvent);
-}
-
-void StupidInterestGenerator::ScheduleStartEvent ()
-{ // Schedules the event to start sending data (switch to the "On" state)
- NS_LOG_FUNCTION_NOARGS ();
-
- Time offInterval = Seconds (m_offTime);
- NS_LOG_LOGIC ("start at " << offInterval);
- m_startStopEvent = Simulator::Schedule (offInterval, &StupidInterestGenerator::StartSending, this);
-}
-
-// Event handlers
-void StupidInterestGenerator::StartSending ()
-{
- NS_LOG_FUNCTION_NOARGS ();
- //m_lastStartTime = Simulator::Now ();
- ScheduleNextTx (); // Schedule the send packet event
- //ScheduleStopEvent ();
-}
-
-void StupidInterestGenerator::StopSending ()
-{
- NS_LOG_FUNCTION_NOARGS ();
- CancelEvents ();
-
- ScheduleStartEvent ();
-}
-
-// Private helpers
-void StupidInterestGenerator::ScheduleNextTx ()
-{
- NS_LOG_FUNCTION_NOARGS ();
-
-
- Time nextTime = Seconds(0.); //send now
- m_sendEvent = Simulator::Schedule (nextTime,
- &StupidInterestGenerator::SendPacket, this);
-}
-
-
-void StupidInterestGenerator::SendPacket ()
-{
- // NS_LOG_FUNCTION_NOARGS ();
- // NS_LOG_LOGIC ("sending packet at " << Simulator::Now ());
- // NS_ASSERT (m_sendEvent.IsExpired ());
-
- // NameBuilder name;
- // name("prefix1")("prefix2")("filename");
- CcnxInterestHeader ();
-
- CcnxContentObjectHeader ();
-
- // const ccn_charbuf *output = name.GetName();
- // Ptr<InterestPacket> packet = Create<InterestPacket>(name,(uint32_t)output->length);
- // packet->AddTimeout(4000);
- // UniformVariable var;
- // packet->AddNonce(var.GetInteger(1,10000));
- // m_socket->Send(packet);
-
- // ScheduleStartEvent();
-}
-
-}
diff --git a/apps/stupid-interest-generator.h b/apps/stupid-interest-generator.h
deleted file mode 100644
index f4fb287..0000000
--- a/apps/stupid-interest-generator.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-//
-// ndn_stupidinterestgenerator.h
-// Abstraction
-//
-// Created by Ilya Moiseenko on 05.08.11.
-// Copyright 2011 UCLA. All rights reserved.
-//
-
-#include "ns3/application.h"
-#include "ns3/log.h"
-#include "ns3/address.h"
-#include "ns3/random-variable.h"
-#include "ns3/nstime.h"
-#include "ns3/event-id.h"
-#include "ns3/ptr.h"
-#include "ns3/udp-socket-factory.h"
-#include "ns3/socket.h"
-
-namespace ns3
-{
-
-//namespace NDNabstraction
-//{
- class Socket; //dynamic linking works in a somehow strange way
-
- class StupidInterestGenerator: public Application
- {
- public:
- static TypeId GetTypeId (void);
-
- StupidInterestGenerator ();
-
- virtual ~StupidInterestGenerator();
-
-
- protected:
- virtual void DoDispose (void);
- private:
- // inherited from Application base class.
- virtual void StartApplication (void); // Called at time specified by Start
- virtual void StopApplication (void); // Called at time specified by Stop
-
- //Time m_onTime;
- Time m_offTime;
-
- Address m_peer; // Peer address
- Ptr<Socket> m_socket;
- EventId m_startStopEvent; // Event id for next start or stop event
- EventId m_sendEvent; // Eventid of pending "send packet" event
- TypeId m_tid;
-
- //helpers
- void CancelEvents ();
-
- void Construct (Ptr<Node> n,
- const Address &remote,
- std::string tid,
- const RandomVariable& ontime,
- const RandomVariable& offtime,
- uint32_t size);
-
- // Event handlers
- void StartSending ();
- void StopSending ();
- void SendPacket ();
-
- private:
- void ScheduleNextTx ();
- void ScheduleStartEvent ();
- void ScheduleStopEvent ();
- void ConnectionSucceeded (Ptr<Socket>);
- void ConnectionFailed (Ptr<Socket>);
- void Ignore (Ptr<Socket>);
-
- };
-//}
-}
diff --git a/apps/stupid-interest-sink.cc b/apps/stupid-interest-sink.cc
deleted file mode 100644
index c9b166e..0000000
--- a/apps/stupid-interest-sink.cc
+++ /dev/null
@@ -1,189 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-//
-// stupid-interest-sink.cpp
-// Abstraction
-//
-// Created by Ilya Moiseenko on 10.08.11.
-// Copyright 2011 UCLA. All rights reserved.
-//
-
-#include "stupid-interest-sink.h"
-
-#include "ns3/address.h"
-#include "ns3/address-utils.h"
-#include "ns3/log.h"
-#include "ns3/inet-socket-address.h"
-#include "ns3/node.h"
-#include "ns3/socket.h"
-#include "ns3/udp-socket.h"
-#include "ns3/simulator.h"
-#include "ns3/socket-factory.h"
-#include "ns3/packet.h"
-#include "ns3/trace-source-accessor.h"
-#include "ns3/udp-socket-factory.h"
-
-using namespace std;
-
-namespace ns3 {
-
- NS_LOG_COMPONENT_DEFINE ("StupidInterestSink");
- NS_OBJECT_ENSURE_REGISTERED (StupidInterestSink);
-
- TypeId
- StupidInterestSink::GetTypeId (void)
- {
- static TypeId tid = TypeId ("ns3::StupidInterestSink")
- .SetParent<Application> ()
- .AddConstructor<StupidInterestSink> ()
- .AddAttribute ("Local", "The Address on which to Bind the rx socket.",
- AddressValue (),
- MakeAddressAccessor (&StupidInterestSink::m_local),
- MakeAddressChecker ())
- .AddAttribute ("Protocol", "The type id of the protocol to use for the rx socket.",
- TypeIdValue (UdpSocketFactory::GetTypeId ()),
- MakeTypeIdAccessor (&StupidInterestSink::m_tid),
- MakeTypeIdChecker ())
- .AddTraceSource ("Rx", "A packet has been received",
- MakeTraceSourceAccessor (&StupidInterestSink::m_rxTrace))
- ;
- return tid;
- }
-
- StupidInterestSink::StupidInterestSink ()
- {
- NS_LOG_FUNCTION (this);
- m_socket = 0;
- m_totalRx = 0;
- }
-
- StupidInterestSink::~StupidInterestSink()
- {
- NS_LOG_FUNCTION (this);
- }
-
- uint32_t StupidInterestSink::GetTotalRx () const
- {
- return m_totalRx;
- }
-
- Ptr<Socket>
- StupidInterestSink::GetListeningSocket (void) const
- {
- NS_LOG_FUNCTION (this);
- return m_socket;
- }
-
- std::list<Ptr<Socket> >
- StupidInterestSink::GetAcceptedSockets (void) const
- {
- NS_LOG_FUNCTION (this);
- return m_socketList;
- }
-
- void StupidInterestSink::DoDispose (void)
- {
- NS_LOG_FUNCTION (this);
- m_socket = 0;
- m_socketList.clear ();
-
- // chain up
- Application::DoDispose ();
- }
-
-
- // Application Methods
- void StupidInterestSink::StartApplication () // Called at time specified by Start
- {
- NS_LOG_FUNCTION (this);
- // Create the socket if not already
- if (!m_socket)
- {
- m_socket = Socket::CreateSocket (GetNode (), m_tid);
- m_socket->Bind (m_local);
- m_socket->Listen ();
- m_socket->ShutdownSend ();
- if (addressUtils::IsMulticast (m_local))
- {
- Ptr<UdpSocket> udpSocket = DynamicCast<UdpSocket> (m_socket);
- if (udpSocket)
- {
- // equivalent to setsockopt (MCAST_JOIN_GROUP)
- udpSocket->MulticastJoinGroup (0, m_local);
- }
- else
- {
- NS_FATAL_ERROR ("Error: joining multicast on a non-UDP socket");
- }
- }
- }
-
- m_socket->SetRecvCallback (MakeCallback (&StupidInterestSink::HandleRead, this));
- m_socket->SetAcceptCallback (
- MakeNullCallback<bool, Ptr<Socket>, const Address &> (),
- MakeCallback (&StupidInterestSink::HandleAccept, this));
- m_socket->SetCloseCallbacks (
- MakeCallback (&StupidInterestSink::HandlePeerClose, this),
- MakeCallback (&StupidInterestSink::HandlePeerError, this));
- }
-
- void StupidInterestSink::StopApplication () // Called at time specified by Stop
- {
- NS_LOG_FUNCTION (this);
- while(!m_socketList.empty ()) //these are accepted sockets, close them
- {
- Ptr<Socket> acceptedSocket = m_socketList.front ();
- m_socketList.pop_front ();
- acceptedSocket->Close ();
- }
- if (m_socket)
- {
- m_socket->Close ();
- m_socket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> > ());
- }
- }
-
- void StupidInterestSink::HandleRead (Ptr<Socket> socket)
- {
- NS_LOG_FUNCTION (this << socket);
- Ptr<Packet> packet;
- Address from;
- while (packet = socket->RecvFrom (from))
- {
- if (packet->GetSize () == 0)
- { //EOF
- break;
- }
- if (InetSocketAddress::IsMatchingType (from))
- {
- m_totalRx += packet->GetSize ();
- InetSocketAddress address = InetSocketAddress::ConvertFrom (from);
- NS_LOG_INFO ("Received " << packet->GetSize () << " bytes from " <<
- address.GetIpv4 () << " [" << address << "]"
- << " total Rx " << m_totalRx);
- //cast address to void , to suppress 'address' set but not used
- //compiler warning in optimized builds
- (void) address;
- }
- m_rxTrace (packet, from);
- }
- }
-
- void StupidInterestSink::HandlePeerClose (Ptr<Socket> socket)
- {
- NS_LOG_INFO ("PktSink, peerClose");
- }
-
- void StupidInterestSink::HandlePeerError (Ptr<Socket> socket)
- {
- NS_LOG_INFO ("PktSink, peerError");
- }
-
-
- void StupidInterestSink::HandleAccept (Ptr<Socket> s, const Address& from)
- {
- NS_LOG_FUNCTION (this << s << from);
- s->SetRecvCallback (MakeCallback (&StupidInterestSink::HandleRead, this));
- m_socketList.push_back (s);
- }
-
-} // Namespace ns3
diff --git a/apps/stupid-interest-sink.h b/apps/stupid-interest-sink.h
deleted file mode 100644
index b750907..0000000
--- a/apps/stupid-interest-sink.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-//
-// stupid-interest-sink.h
-// Abstraction
-//
-// Created by Ilya Moiseenko on 10.08.11.
-// Copyright 2011 UCLA. All rights reserved.
-//
-
-#include "ns3/application.h"
-#include "ns3/event-id.h"
-#include "ns3/ptr.h"
-#include "ns3/traced-callback.h"
-#include "ns3/address.h"
-
-namespace ns3
-{
-
- class Address;
- class Socket;
- class Packet;
-
- class StupidInterestSink : public Application
- {
- public:
- static TypeId GetTypeId (void);
- StupidInterestSink ();
-
- virtual ~StupidInterestSink ();
-
- /**
- * \return the total bytes received in this sink app
- */
- uint32_t GetTotalRx () const;
-
- /**
- * \return pointer to listening socket
- */
- Ptr<Socket> GetListeningSocket (void) const;
-
- /**
- * \return list of pointers to accepted sockets
- */
- std::list<Ptr<Socket> > GetAcceptedSockets (void) const;
-
- protected:
- virtual void DoDispose (void);
- private:
- // inherited from Application base class.
- virtual void StartApplication (void); // Called at time specified by Start
- virtual void StopApplication (void); // Called at time specified by Stop
-
- void HandleRead (Ptr<Socket>);
- void HandleAccept (Ptr<Socket>, const Address& from);
- void HandlePeerClose (Ptr<Socket>);
- void HandlePeerError (Ptr<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
- TracedCallback<Ptr<const Packet>, const Address &> m_rxTrace;
- };
-}
diff --git a/bindings/callbacks_list.py b/bindings/callbacks_list.py
index 01ba5ff..73e61b2 100644
--- a/bindings/callbacks_list.py
+++ b/bindings/callbacks_list.py
@@ -1,4 +1,8 @@
callback_classes = [
+ ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+ ['void', 'ns3::Ptr<ns3::Socket>', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+ ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+ ['bool', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
['void', 'ns3::Ptr<ns3::CcnxFace> const&', 'ns3::Ptr<ns3::Packet const> const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
['bool', 'ns3::Ptr<ns3::Packet const> const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
['void', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
diff --git a/bindings/modulegen__gcc_ILP32.py b/bindings/modulegen__gcc_ILP32.py
index 2030e69..0b0cd40 100644
--- a/bindings/modulegen__gcc_ILP32.py
+++ b/bindings/modulegen__gcc_ILP32.py
@@ -76,6 +76,10 @@
module.add_class('Ipv4Address', import_from_module='ns.network')
## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
root_module['ns3::Ipv4Address'].implicitly_converts_to(root_module['ns3::Address'])
+ ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress [class]
+ module.add_class('Ipv4InterfaceAddress', import_from_module='ns.internet')
+ ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e [enumeration]
+ module.add_enum('InterfaceAddressScope_e', ['HOST', 'LINK', 'GLOBAL'], outer_class=root_module['ns3::Ipv4InterfaceAddress'], import_from_module='ns.internet')
## ipv4-address.h (module 'network'): ns3::Ipv4Mask [class]
module.add_class('Ipv4Mask', import_from_module='ns.network')
## ipv6-address.h (module 'network'): ns3::Ipv6Address [class]
@@ -102,14 +106,6 @@
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'])
## random-variable.h (module 'core'): ns3::RandomVariable [class]
module.add_class('RandomVariable', import_from_module='ns.core')
## random-variable.h (module 'core'): ns3::SeedManager [class]
@@ -120,10 +116,10 @@
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Chunk', 'ns3::ObjectBase', 'ns3::DefaultDeleter<ns3::Chunk>'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+ ## simulator.h (module 'core'): ns3::Simulator [class]
+ module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
## spring-mobility-helper.h (module 'NDNabstraction'): ns3::SpringMobilityHelper [class]
module.add_class('SpringMobilityHelper')
- ## 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')
## random-variable.h (module 'core'): ns3::TriangularVariable [class]
@@ -170,6 +166,12 @@
module.add_class('Header', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
## random-variable.h (module 'core'): ns3::IntEmpiricalVariable [class]
module.add_class('IntEmpiricalVariable', import_from_module='ns.core', parent=root_module['ns3::EmpiricalVariable'])
+ ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
+ module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
+ ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
+ module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+ ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
+ module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
## random-variable.h (module 'core'): ns3::LogNormalVariable [class]
module.add_class('LogNormalVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariable'])
## random-variable.h (module 'core'): ns3::NormalVariable [class]
@@ -198,16 +200,38 @@
module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::CcnxL3Tracer', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CcnxL3Tracer>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxNameComponents, ns3::empty, ns3::DefaultDeleter<ns3::CcnxNameComponents> > [class]
module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::CcnxNameComponents', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CcnxNameComponents>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxPathWeightTracer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPathWeightTracer> > [class]
+ module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::CcnxPathWeightTracer', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CcnxPathWeightTracer>'], parent=root_module['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::Ipv4AppTracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4AppTracer> > [class]
+ module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::Ipv4AppTracer', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4AppTracer>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4L3Tracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4L3Tracer> > [class]
+ module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::Ipv4L3Tracer', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4L3Tracer>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
+ module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
+ module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4Route', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4Route>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
+ module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::OutputStreamWrapper', 'ns3::empty', 'ns3::DefaultDeleter<ns3::OutputStreamWrapper>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Packet', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Packet>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> > [class]
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TopologyReader', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TopologyReader>'], parent=root_module['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'))
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::WindowTracer, ns3::empty, ns3::DefaultDeleter<ns3::WindowTracer> > [class]
+ module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::WindowTracer', 'ns3::empty', 'ns3::DefaultDeleter<ns3::WindowTracer>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+ ## socket.h (module 'network'): ns3::Socket [class]
+ module.add_class('Socket', import_from_module='ns.network', parent=root_module['ns3::Object'])
+ ## socket.h (module 'network'): ns3::Socket::SocketErrno [enumeration]
+ module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+ ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
+ module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+ ## tag.h (module 'network'): ns3::Tag [class]
+ module.add_class('Tag', import_from_module='ns.network', 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]
@@ -222,6 +246,12 @@
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'])
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::WeightsPathStretchTag [class]
+ module.add_class('WeightsPathStretchTag', parent=root_module['ns3::Tag'])
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::WeightsPathStretchTag::NodeWeightPair [struct]
+ module.add_class('NodeWeightPair', outer_class=root_module['ns3::WeightsPathStretchTag'])
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): ns3::WindowTracer [class]
+ module.add_class('WindowTracer', parent=root_module['ns3::SimpleRefCount< ns3::WindowTracer, ns3::empty, ns3::DefaultDeleter<ns3::WindowTracer> >'])
## annotated-topology-reader.h (module 'NDNabstraction'): ns3::AnnotatedTopologyReader [class]
module.add_class('AnnotatedTopologyReader', parent=root_module['ns3::TopologyReader'])
## application.h (module 'network'): ns3::Application [class]
@@ -232,6 +262,10 @@
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> >'])
+ ## batches.h (module 'NDNabstraction'): ns3::BatchesChecker [class]
+ module.add_class('BatchesChecker', parent=root_module['ns3::AttributeChecker'])
+ ## batches.h (module 'NDNabstraction'): ns3::BatchesValue [class]
+ module.add_class('BatchesValue', parent=root_module['ns3::AttributeValue'])
## callback.h (module 'core'): ns3::CallbackChecker [class]
module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
## callback.h (module 'core'): ns3::CallbackImplBase [class]
@@ -246,6 +280,8 @@
module.add_class('CcnxApp', parent=root_module['ns3::Application'])
## ccnx-app-tracer.h (module 'NDNabstraction'): ns3::CcnxAppTracer [class]
module.add_class('CcnxAppTracer', parent=root_module['ns3::SimpleRefCount< ns3::CcnxAppTracer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxAppTracer> >'])
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): ns3::CcnxConsumerWindowTracer [class]
+ module.add_class('CcnxConsumerWindowTracer', parent=root_module['ns3::WindowTracer'])
## ccnx-content-object-header.h (module 'NDNabstraction'): ns3::CcnxContentObjectHeader [class]
module.add_class('CcnxContentObjectHeader', parent=root_module['ns3::Header'])
## ccnx-content-object-header.h (module 'NDNabstraction'): ns3::CcnxContentObjectTail [class]
@@ -272,20 +308,42 @@
module.add_class('CcnxNameComponentsChecker', parent=root_module['ns3::AttributeChecker'])
## ccnx-name-components.h (module 'NDNabstraction'): ns3::CcnxNameComponentsValue [class]
module.add_class('CcnxNameComponentsValue', parent=root_module['ns3::AttributeValue'])
+ ## ccnx-path-weight-tracer.h (module 'NDNabstraction'): ns3::CcnxPathWeightTracer [class]
+ module.add_class('CcnxPathWeightTracer', parent=root_module['ns3::SimpleRefCount< ns3::CcnxPathWeightTracer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPathWeightTracer> >'])
## 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> >'])
## integer.h (module 'core'): ns3::IntegerValue [class]
module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+ ## ipv4.h (module 'internet'): ns3::Ipv4 [class]
+ module.add_class('Ipv4', import_from_module='ns.internet', parent=root_module['ns3::Object'])
## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
module.add_class('Ipv4AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue [class]
module.add_class('Ipv4AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+ ## ipv4-app-tracer.h (module 'NDNabstraction'): ns3::Ipv4AppTracer [class]
+ module.add_class('Ipv4AppTracer', parent=root_module['ns3::SimpleRefCount< ns3::Ipv4AppTracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4AppTracer> >'])
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol [class]
+ module.add_class('Ipv4L3Protocol', import_from_module='ns.internet', parent=root_module['ns3::Ipv4'])
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::DropReason [enumeration]
+ module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_BAD_CHECKSUM', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_FRAGMENT_TIMEOUT'], outer_class=root_module['ns3::Ipv4L3Protocol'], import_from_module='ns.internet')
+ ## ipv4-l3-tracer.h (module 'NDNabstraction'): ns3::Ipv4L3Tracer [class]
+ module.add_class('Ipv4L3Tracer', parent=root_module['ns3::SimpleRefCount< ns3::Ipv4L3Tracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4L3Tracer> >'])
+ ## ipv4-l4-protocol.h (module 'internet'): ns3::Ipv4L4Protocol [class]
+ module.add_class('Ipv4L4Protocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
+ ## ipv4-l4-protocol.h (module 'internet'): ns3::Ipv4L4Protocol::RxStatus [enumeration]
+ module.add_enum('RxStatus', ['RX_OK', 'RX_CSUM_FAILED', 'RX_ENDPOINT_CLOSED', 'RX_ENDPOINT_UNREACH'], outer_class=root_module['ns3::Ipv4L4Protocol'], import_from_module='ns.internet')
## ipv4-address.h (module 'network'): ns3::Ipv4MaskChecker [class]
module.add_class('Ipv4MaskChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
## ipv4-address.h (module 'network'): ns3::Ipv4MaskValue [class]
module.add_class('Ipv4MaskValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute [class]
+ module.add_class('Ipv4MulticastRoute', import_from_module='ns.internet', parent=root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4Route [class]
+ module.add_class('Ipv4Route', import_from_module='ns.internet', parent=root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
+ ## ipv4-routing-protocol.h (module 'internet'): ns3::Ipv4RoutingProtocol [class]
+ module.add_class('Ipv4RoutingProtocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
## ipv6-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]
@@ -308,6 +366,8 @@
module.add_class('ObjectFactoryChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
## object-factory.h (module 'core'): ns3::ObjectFactoryValue [class]
module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+ ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper [class]
+ module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
## packet.h (module 'network'): ns3::Packet [class]
module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
## random-variable.h (module 'core'): ns3::RandomVariableChecker [class]
@@ -318,8 +378,16 @@
module.add_class('RocketfuelWeightsReader', parent=root_module['ns3::AnnotatedTopologyReader'])
## rocketfuel-weights-reader.h (module 'NDNabstraction'): ns3::RocketfuelWeightsReader [enumeration]
module.add_enum('', ['WEIGHTS', 'LATENCIES', 'POSITIONS'], outer_class=root_module['ns3::RocketfuelWeightsReader'])
+ ## socket.h (module 'network'): ns3::SocketAddressTag [class]
+ module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
+ ## socket.h (module 'network'): ns3::SocketIpTtlTag [class]
+ module.add_class('SocketIpTtlTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
+ ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag [class]
+ module.add_class('SocketSetDontFragmentTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
## spring-mobility-model.h (module 'NDNabstraction'): ns3::SpringMobilityModel [class]
module.add_class('SpringMobilityModel', parent=root_module['ns3::MobilityModel'])
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): ns3::TcpCongestionWindowTracer [class]
+ module.add_class('TcpCongestionWindowTracer', parent=root_module['ns3::WindowTracer'])
## nstime.h (module 'core'): ns3::TimeChecker [class]
module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
## nstime.h (module 'core'): ns3::TimeValue [class]
@@ -341,8 +409,11 @@
## address.h (module 'network'): ns3::AddressValue [class]
module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
module.add_container('std::map< std::string, std::string >', ('std::string', 'std::string'), container_type='map')
+ module.add_container('std::list< ns3::WeightsPathStretchTag::NodeWeightPair >', 'ns3::WeightsPathStretchTag::NodeWeightPair', container_type='list')
+ module.add_container('std::list< ns3::TopologyReader::Link >', 'ns3::TopologyReader::Link', container_type='list')
module.add_container('std::list< boost::reference_wrapper< std::string const > >', 'boost::reference_wrapper< std::basic_string< char, std::char_traits< char >, std::allocator< char > > const >', container_type='list')
module.add_container('std::list< std::string >', 'std::string', container_type='list')
+ module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
typehandlers.add_type_alias('ns3::Vector3DChecker', 'ns3::VectorChecker')
typehandlers.add_type_alias('ns3::Vector3DChecker*', 'ns3::VectorChecker*')
typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
@@ -401,6 +472,7 @@
register_Ns3CcnxUnknownHeaderException_methods(root_module, root_module['ns3::CcnxUnknownHeaderException'])
register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
+ register_Ns3Ipv4InterfaceAddress_methods(root_module, root_module['ns3::Ipv4InterfaceAddress'])
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'])
@@ -412,17 +484,13 @@
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_Ns3RandomVariable_methods(root_module, root_module['ns3::RandomVariable'])
register_Ns3SeedManager_methods(root_module, root_module['ns3::SeedManager'])
register_Ns3SequentialVariable_methods(root_module, root_module['ns3::SequentialVariable'])
register_Ns3SimpleRefCount__Ns3Chunk_Ns3ObjectBase_Ns3DefaultDeleter__lt__ns3Chunk__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Chunk, ns3::ObjectBase, ns3::DefaultDeleter<ns3::Chunk> >'])
register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
+ register_Ns3Simulator_methods(root_module, root_module['ns3::Simulator'])
register_Ns3SpringMobilityHelper_methods(root_module, root_module['ns3::SpringMobilityHelper'])
- register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
register_Ns3TriangularVariable_methods(root_module, root_module['ns3::TriangularVariable'])
register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
@@ -445,6 +513,7 @@
register_Ns3GammaVariable_methods(root_module, root_module['ns3::GammaVariable'])
register_Ns3Header_methods(root_module, root_module['ns3::Header'])
register_Ns3IntEmpiricalVariable_methods(root_module, root_module['ns3::IntEmpiricalVariable'])
+ register_Ns3Ipv4Header_methods(root_module, root_module['ns3::Ipv4Header'])
register_Ns3LogNormalVariable_methods(root_module, root_module['ns3::LogNormalVariable'])
register_Ns3NormalVariable_methods(root_module, root_module['ns3::NormalVariable'])
register_Ns3Object_methods(root_module, root_module['ns3::Object'])
@@ -459,27 +528,42 @@
register_Ns3SimpleRefCount__Ns3CcnxFibEntry_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxFibEntry__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxFibEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFibEntry> >'])
register_Ns3SimpleRefCount__Ns3CcnxL3Tracer_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxL3Tracer__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxL3Tracer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxL3Tracer> >'])
register_Ns3SimpleRefCount__Ns3CcnxNameComponents_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxNameComponents__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxNameComponents, ns3::empty, ns3::DefaultDeleter<ns3::CcnxNameComponents> >'])
+ register_Ns3SimpleRefCount__Ns3CcnxPathWeightTracer_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxPathWeightTracer__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxPathWeightTracer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPathWeightTracer> >'])
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__Ns3Ipv4AppTracer_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4AppTracer__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4AppTracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4AppTracer> >'])
+ register_Ns3SimpleRefCount__Ns3Ipv4L3Tracer_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4L3Tracer__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4L3Tracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4L3Tracer> >'])
+ register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
+ register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
+ register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
register_Ns3SimpleRefCount__Ns3TopologyReader_Ns3Empty_Ns3DefaultDeleter__lt__ns3TopologyReader__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> >'])
register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
+ register_Ns3SimpleRefCount__Ns3WindowTracer_Ns3Empty_Ns3DefaultDeleter__lt__ns3WindowTracer__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::WindowTracer, ns3::empty, ns3::DefaultDeleter<ns3::WindowTracer> >'])
+ register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
+ register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
register_Ns3Time_methods(root_module, root_module['ns3::Time'])
register_Ns3TopologyReader_methods(root_module, root_module['ns3::TopologyReader'])
register_Ns3TopologyReaderLink_methods(root_module, root_module['ns3::TopologyReader::Link'])
register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
+ register_Ns3WeightsPathStretchTag_methods(root_module, root_module['ns3::WeightsPathStretchTag'])
+ register_Ns3WeightsPathStretchTagNodeWeightPair_methods(root_module, root_module['ns3::WeightsPathStretchTag::NodeWeightPair'])
+ register_Ns3WindowTracer_methods(root_module, root_module['ns3::WindowTracer'])
register_Ns3AnnotatedTopologyReader_methods(root_module, root_module['ns3::AnnotatedTopologyReader'])
register_Ns3Application_methods(root_module, root_module['ns3::Application'])
register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
+ register_Ns3BatchesChecker_methods(root_module, root_module['ns3::BatchesChecker'])
+ register_Ns3BatchesValue_methods(root_module, root_module['ns3::BatchesValue'])
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_Ns3Ccnx_methods(root_module, root_module['ns3::Ccnx'])
register_Ns3CcnxApp_methods(root_module, root_module['ns3::CcnxApp'])
register_Ns3CcnxAppTracer_methods(root_module, root_module['ns3::CcnxAppTracer'])
+ register_Ns3CcnxConsumerWindowTracer_methods(root_module, root_module['ns3::CcnxConsumerWindowTracer'])
register_Ns3CcnxContentObjectHeader_methods(root_module, root_module['ns3::CcnxContentObjectHeader'])
register_Ns3CcnxContentObjectTail_methods(root_module, root_module['ns3::CcnxContentObjectTail'])
register_Ns3CcnxFace_methods(root_module, root_module['ns3::CcnxFace'])
@@ -492,13 +576,22 @@
register_Ns3CcnxNameComponents_methods(root_module, root_module['ns3::CcnxNameComponents'])
register_Ns3CcnxNameComponentsChecker_methods(root_module, root_module['ns3::CcnxNameComponentsChecker'])
register_Ns3CcnxNameComponentsValue_methods(root_module, root_module['ns3::CcnxNameComponentsValue'])
+ register_Ns3CcnxPathWeightTracer_methods(root_module, root_module['ns3::CcnxPathWeightTracer'])
register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
+ register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
+ register_Ns3Ipv4AppTracer_methods(root_module, root_module['ns3::Ipv4AppTracer'])
+ register_Ns3Ipv4L3Protocol_methods(root_module, root_module['ns3::Ipv4L3Protocol'])
+ register_Ns3Ipv4L3Tracer_methods(root_module, root_module['ns3::Ipv4L3Tracer'])
+ register_Ns3Ipv4L4Protocol_methods(root_module, root_module['ns3::Ipv4L4Protocol'])
register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
register_Ns3Ipv4MaskValue_methods(root_module, root_module['ns3::Ipv4MaskValue'])
+ register_Ns3Ipv4MulticastRoute_methods(root_module, root_module['ns3::Ipv4MulticastRoute'])
+ register_Ns3Ipv4Route_methods(root_module, root_module['ns3::Ipv4Route'])
+ register_Ns3Ipv4RoutingProtocol_methods(root_module, root_module['ns3::Ipv4RoutingProtocol'])
register_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'])
@@ -509,11 +602,16 @@
register_Ns3Node_methods(root_module, root_module['ns3::Node'])
register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
+ register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
register_Ns3RandomVariableChecker_methods(root_module, root_module['ns3::RandomVariableChecker'])
register_Ns3RandomVariableValue_methods(root_module, root_module['ns3::RandomVariableValue'])
register_Ns3RocketfuelWeightsReader_methods(root_module, root_module['ns3::RocketfuelWeightsReader'])
+ register_Ns3SocketAddressTag_methods(root_module, root_module['ns3::SocketAddressTag'])
+ register_Ns3SocketIpTtlTag_methods(root_module, root_module['ns3::SocketIpTtlTag'])
+ register_Ns3SocketSetDontFragmentTag_methods(root_module, root_module['ns3::SocketSetDontFragmentTag'])
register_Ns3SpringMobilityModel_methods(root_module, root_module['ns3::SpringMobilityModel'])
+ register_Ns3TcpCongestionWindowTracer_methods(root_module, root_module['ns3::TcpCongestionWindowTracer'])
register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
@@ -1109,8 +1207,8 @@
cls.add_binary_comparison_operator('<')
## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibFaceMetric::CcnxFibFaceMetric(ns3::CcnxFibFaceMetric const & arg0) [copy constructor]
cls.add_constructor([param('ns3::CcnxFibFaceMetric const &', 'arg0')])
- ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibFaceMetric::CcnxFibFaceMetric(ns3::Ptr<ns3::CcnxFace> face, int cost) [constructor]
- cls.add_constructor([param('ns3::Ptr< ns3::CcnxFace >', 'face'), param('int', 'cost')])
+ ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibFaceMetric::CcnxFibFaceMetric(ns3::Ptr<ns3::CcnxFace> face, int32_t cost) [constructor]
+ cls.add_constructor([param('ns3::Ptr< ns3::CcnxFace >', 'face'), param('int32_t', 'cost')])
## ccnx-fib.h (module 'NDNabstraction'): ns3::Ptr<ns3::CcnxFace> ns3::CcnxFibFaceMetric::GetFace() const [member function]
cls.add_method('GetFace',
'ns3::Ptr< ns3::CcnxFace >',
@@ -1189,32 +1287,45 @@
'ns3::Ptr< ns3::CcnxFaceContainer >',
[],
is_const=True)
- ## ccnx-stack-helper.h (module 'NDNabstraction'): void ns3::CcnxStackHelper::AddRoute(std::string nodeName, std::string prefix, uint32_t faceId, int32_t metric) const [member function]
+ ## ccnx-stack-helper.h (module 'NDNabstraction'): static void ns3::CcnxStackHelper::AddRoute(std::string nodeName, std::string prefix, uint32_t faceId, int32_t metric) [member function]
cls.add_method('AddRoute',
'void',
[param('std::string', 'nodeName'), param('std::string', 'prefix'), param('uint32_t', 'faceId'), param('int32_t', 'metric')],
- is_const=True)
- ## ccnx-stack-helper.h (module 'NDNabstraction'): void ns3::CcnxStackHelper::AddRoute(ns3::Ptr<ns3::Node> node, std::string prefix, ns3::Ptr<ns3::CcnxFace> face, int32_t metric) const [member function]
+ is_static=True)
+ ## ccnx-stack-helper.h (module 'NDNabstraction'): static void ns3::CcnxStackHelper::AddRoute(ns3::Ptr<ns3::Node> node, std::string prefix, ns3::Ptr<ns3::CcnxFace> face, int32_t metric) [member function]
cls.add_method('AddRoute',
'void',
[param('ns3::Ptr< ns3::Node >', 'node'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::CcnxFace >', 'face'), param('int32_t', 'metric')],
- is_const=True)
+ is_static=True)
## ccnx-stack-helper.h (module 'NDNabstraction'): void ns3::CcnxStackHelper::SetDefaultRoutes(bool needSet) [member function]
cls.add_method('SetDefaultRoutes',
'void',
[param('bool', 'needSet')])
- ## ccnx-stack-helper.h (module 'NDNabstraction'): void ns3::CcnxStackHelper::InstallFakeGlobalRoutes() [member function]
+ ## ccnx-stack-helper.h (module 'NDNabstraction'): static void ns3::CcnxStackHelper::InstallFakeGlobalRoutes() [member function]
cls.add_method('InstallFakeGlobalRoutes',
'void',
- [])
- ## ccnx-stack-helper.h (module 'NDNabstraction'): void ns3::CcnxStackHelper::InstallRouteTo(ns3::Ptr<ns3::Node> node) [member function]
+ [],
+ is_static=True)
+ ## ccnx-stack-helper.h (module 'NDNabstraction'): static void ns3::CcnxStackHelper::InstallFakeGlobalRoutesImpl() [member function]
+ cls.add_method('InstallFakeGlobalRoutesImpl',
+ 'void',
+ [],
+ is_static=True)
+ ## ccnx-stack-helper.h (module 'NDNabstraction'): static void ns3::CcnxStackHelper::InstallRouteTo(ns3::Ptr<ns3::Node> node) [member function]
cls.add_method('InstallRouteTo',
'void',
- [param('ns3::Ptr< ns3::Node >', 'node')])
- ## ccnx-stack-helper.h (module 'NDNabstraction'): void ns3::CcnxStackHelper::InstallRoutesToAll() [member function]
+ [param('ns3::Ptr< ns3::Node >', 'node')],
+ is_static=True)
+ ## ccnx-stack-helper.h (module 'NDNabstraction'): static void ns3::CcnxStackHelper::InstallRouteTo(std::string const & prefix, ns3::Ptr<ns3::Node> node) [member function]
+ cls.add_method('InstallRouteTo',
+ 'void',
+ [param('std::string const &', 'prefix'), param('ns3::Ptr< ns3::Node >', 'node')],
+ is_static=True)
+ ## ccnx-stack-helper.h (module 'NDNabstraction'): static void ns3::CcnxStackHelper::InstallRoutesToAll() [member function]
cls.add_method('InstallRoutesToAll',
'void',
- [])
+ [],
+ is_static=True)
return
def register_Ns3CcnxTraceHelper_methods(root_module, cls):
@@ -1230,10 +1341,34 @@
cls.add_method('EnableAggregateL3All',
'void',
[])
+ ## ccnx-trace-helper.h (module 'NDNabstraction'): void ns3::CcnxTraceHelper::EnableIpv4RateL3All(std::string const & ipv4RateTrace="ipv4-rate.log") [member function]
+ cls.add_method('EnableIpv4RateL3All',
+ 'void',
+ [param('std::string const &', 'ipv4RateTrace', default_value='"ipv4-rate.log"')])
+ ## ccnx-trace-helper.h (module 'NDNabstraction'): void ns3::CcnxTraceHelper::EnableIpv4SeqsAppAll(std::string const & appSeqsTrace="app-seqs.log") [member function]
+ cls.add_method('EnableIpv4SeqsAppAll',
+ 'void',
+ [param('std::string const &', 'appSeqsTrace', default_value='"app-seqs.log"')])
+ ## ccnx-trace-helper.h (module 'NDNabstraction'): void ns3::CcnxTraceHelper::EnablePathWeights(std::string const & pathWeights) [member function]
+ cls.add_method('EnablePathWeights',
+ 'void',
+ [param('std::string const &', 'pathWeights')])
## ccnx-trace-helper.h (module 'NDNabstraction'): void ns3::CcnxTraceHelper::EnableRateL3All(std::string const & l3RateTrace="l3-rate.log") [member function]
cls.add_method('EnableRateL3All',
'void',
[param('std::string const &', 'l3RateTrace', default_value='"l3-rate.log"')])
+ ## ccnx-trace-helper.h (module 'NDNabstraction'): void ns3::CcnxTraceHelper::EnableSeqsAppAll(std::string const & app, std::string const & appSeqsTrace="app-seqs.log") [member function]
+ cls.add_method('EnableSeqsAppAll',
+ 'void',
+ [param('std::string const &', 'app'), param('std::string const &', 'appSeqsTrace', default_value='"app-seqs.log"')])
+ ## ccnx-trace-helper.h (module 'NDNabstraction'): void ns3::CcnxTraceHelper::EnableWindowsAll(std::string const & windowTrace="windows.log") [member function]
+ cls.add_method('EnableWindowsAll',
+ 'void',
+ [param('std::string const &', 'windowTrace', default_value='"windows.log"')])
+ ## ccnx-trace-helper.h (module 'NDNabstraction'): void ns3::CcnxTraceHelper::EnableWindowsTcpAll(std::string const & windowTrace) [member function]
+ cls.add_method('EnableWindowsTcpAll',
+ 'void',
+ [param('std::string const &', 'windowTrace')])
## ccnx-trace-helper.h (module 'NDNabstraction'): void ns3::CcnxTraceHelper::SetAppTraceFile(std::string const & appTrace="apps.log") [member function]
cls.add_method('SetAppTraceFile',
'void',
@@ -1242,6 +1377,10 @@
cls.add_method('SetL3TraceFile',
'void',
[param('std::string const &', 'l3Trace', default_value='"l3.log"')])
+ ## ccnx-trace-helper.h (module 'NDNabstraction'): void ns3::CcnxTraceHelper::TcpConnect(ns3::Ptr<ns3::Node> node) [member function]
+ cls.add_method('TcpConnect',
+ 'void',
+ [param('ns3::Ptr< ns3::Node >', 'node')])
return
def register_Ns3CcnxUnknownHeaderException_methods(root_module, cls):
@@ -1404,6 +1543,67 @@
[param('char const *', 'address')])
return
+def register_Ns3Ipv4InterfaceAddress_methods(root_module, cls):
+ cls.add_binary_comparison_operator('!=')
+ cls.add_output_stream_operator()
+ cls.add_binary_comparison_operator('==')
+ ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::Ipv4InterfaceAddress() [constructor]
+ cls.add_constructor([])
+ ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::Ipv4InterfaceAddress(ns3::Ipv4Address local, ns3::Ipv4Mask mask) [constructor]
+ cls.add_constructor([param('ns3::Ipv4Address', 'local'), param('ns3::Ipv4Mask', 'mask')])
+ ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::Ipv4InterfaceAddress(ns3::Ipv4InterfaceAddress const & o) [copy constructor]
+ cls.add_constructor([param('ns3::Ipv4InterfaceAddress const &', 'o')])
+ ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4InterfaceAddress::GetBroadcast() const [member function]
+ cls.add_method('GetBroadcast',
+ 'ns3::Ipv4Address',
+ [],
+ is_const=True)
+ ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4InterfaceAddress::GetLocal() const [member function]
+ cls.add_method('GetLocal',
+ 'ns3::Ipv4Address',
+ [],
+ is_const=True)
+ ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4Mask ns3::Ipv4InterfaceAddress::GetMask() const [member function]
+ cls.add_method('GetMask',
+ 'ns3::Ipv4Mask',
+ [],
+ is_const=True)
+ ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e ns3::Ipv4InterfaceAddress::GetScope() const [member function]
+ cls.add_method('GetScope',
+ 'ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e',
+ [],
+ is_const=True)
+ ## ipv4-interface-address.h (module 'internet'): bool ns3::Ipv4InterfaceAddress::IsSecondary() const [member function]
+ cls.add_method('IsSecondary',
+ 'bool',
+ [],
+ is_const=True)
+ ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetBroadcast(ns3::Ipv4Address broadcast) [member function]
+ cls.add_method('SetBroadcast',
+ 'void',
+ [param('ns3::Ipv4Address', 'broadcast')])
+ ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetLocal(ns3::Ipv4Address local) [member function]
+ cls.add_method('SetLocal',
+ 'void',
+ [param('ns3::Ipv4Address', 'local')])
+ ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetMask(ns3::Ipv4Mask mask) [member function]
+ cls.add_method('SetMask',
+ 'void',
+ [param('ns3::Ipv4Mask', 'mask')])
+ ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetPrimary() [member function]
+ cls.add_method('SetPrimary',
+ 'void',
+ [])
+ ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetScope(ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
+ cls.add_method('SetScope',
+ 'void',
+ [param('ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e', 'scope')])
+ ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetSecondary() [member function]
+ cls.add_method('SetSecondary',
+ 'void',
+ [])
+ return
+
def register_Ns3Ipv4Mask_methods(root_module, cls):
cls.add_binary_comparison_operator('!=')
cls.add_output_stream_operator()
@@ -2025,80 +2225,6 @@
[])
return
-def register_Ns3PacketTagIterator_methods(root_module, cls):
- ## packet.h (module 'network'): ns3::PacketTagIterator::PacketTagIterator(ns3::PacketTagIterator const & arg0) [copy constructor]
- cls.add_constructor([param('ns3::PacketTagIterator const &', 'arg0')])
- ## packet.h (module 'network'): bool ns3::PacketTagIterator::HasNext() const [member function]
- cls.add_method('HasNext',
- 'bool',
- [],
- is_const=True)
- ## packet.h (module 'network'): ns3::PacketTagIterator::Item ns3::PacketTagIterator::Next() [member function]
- cls.add_method('Next',
- 'ns3::PacketTagIterator::Item',
- [])
- return
-
-def register_Ns3PacketTagIteratorItem_methods(root_module, cls):
- ## packet.h (module 'network'): ns3::PacketTagIterator::Item::Item(ns3::PacketTagIterator::Item const & arg0) [copy constructor]
- cls.add_constructor([param('ns3::PacketTagIterator::Item const &', 'arg0')])
- ## packet.h (module 'network'): void ns3::PacketTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
- cls.add_method('GetTag',
- 'void',
- [param('ns3::Tag &', 'tag')],
- is_const=True)
- ## packet.h (module 'network'): ns3::TypeId ns3::PacketTagIterator::Item::GetTypeId() const [member function]
- cls.add_method('GetTypeId',
- 'ns3::TypeId',
- [],
- is_const=True)
- return
-
-def register_Ns3PacketTagList_methods(root_module, cls):
- ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList() [constructor]
- cls.add_constructor([])
- ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList(ns3::PacketTagList const & o) [copy constructor]
- cls.add_constructor([param('ns3::PacketTagList const &', 'o')])
- ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::Add(ns3::Tag const & tag) const [member function]
- cls.add_method('Add',
- 'void',
- [param('ns3::Tag const &', 'tag')],
- is_const=True)
- ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData const * ns3::PacketTagList::Head() const [member function]
- cls.add_method('Head',
- 'ns3::PacketTagList::TagData const *',
- [],
- is_const=True)
- ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Peek(ns3::Tag & tag) const [member function]
- cls.add_method('Peek',
- 'bool',
- [param('ns3::Tag &', 'tag')],
- is_const=True)
- ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Remove(ns3::Tag & tag) [member function]
- cls.add_method('Remove',
- 'bool',
- [param('ns3::Tag &', 'tag')])
- ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::RemoveAll() [member function]
- cls.add_method('RemoveAll',
- 'void',
- [])
- return
-
-def register_Ns3PacketTagListTagData_methods(root_module, cls):
- ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData() [constructor]
- cls.add_constructor([])
- ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData(ns3::PacketTagList::TagData const & arg0) [copy constructor]
- cls.add_constructor([param('ns3::PacketTagList::TagData const &', 'arg0')])
- ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
- cls.add_instance_attribute('count', 'uint32_t', is_const=False)
- ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
- cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
- ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
- cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
- ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
- cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
- return
-
def register_Ns3RandomVariable_methods(root_module, cls):
cls.add_output_stream_operator()
## random-variable.h (module 'core'): ns3::RandomVariable::RandomVariable() [constructor]
@@ -2182,6 +2308,96 @@
is_static=True)
return
+def register_Ns3Simulator_methods(root_module, cls):
+ ## simulator.h (module 'core'): ns3::Simulator::Simulator(ns3::Simulator const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Simulator const &', 'arg0')])
+ ## simulator.h (module 'core'): static void ns3::Simulator::Cancel(ns3::EventId const & id) [member function]
+ cls.add_method('Cancel',
+ 'void',
+ [param('ns3::EventId const &', 'id')],
+ is_static=True)
+ ## simulator.h (module 'core'): static void ns3::Simulator::Destroy() [member function]
+ cls.add_method('Destroy',
+ 'void',
+ [],
+ is_static=True)
+ ## simulator.h (module 'core'): static uint32_t ns3::Simulator::GetContext() [member function]
+ cls.add_method('GetContext',
+ 'uint32_t',
+ [],
+ is_static=True)
+ ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::GetDelayLeft(ns3::EventId const & id) [member function]
+ cls.add_method('GetDelayLeft',
+ 'ns3::Time',
+ [param('ns3::EventId const &', 'id')],
+ is_static=True)
+ ## simulator.h (module 'core'): static ns3::Ptr<ns3::SimulatorImpl> ns3::Simulator::GetImplementation() [member function]
+ cls.add_method('GetImplementation',
+ 'ns3::Ptr< ns3::SimulatorImpl >',
+ [],
+ is_static=True)
+ ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::GetMaximumSimulationTime() [member function]
+ cls.add_method('GetMaximumSimulationTime',
+ 'ns3::Time',
+ [],
+ is_static=True)
+ ## simulator.h (module 'core'): static uint32_t ns3::Simulator::GetSystemId() [member function]
+ cls.add_method('GetSystemId',
+ 'uint32_t',
+ [],
+ is_static=True)
+ ## simulator.h (module 'core'): static bool ns3::Simulator::IsExpired(ns3::EventId const & id) [member function]
+ cls.add_method('IsExpired',
+ 'bool',
+ [param('ns3::EventId const &', 'id')],
+ is_static=True)
+ ## simulator.h (module 'core'): static bool ns3::Simulator::IsFinished() [member function]
+ cls.add_method('IsFinished',
+ 'bool',
+ [],
+ is_static=True)
+ ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::Next() [member function]
+ cls.add_method('Next',
+ 'ns3::Time',
+ [],
+ is_static=True, deprecated=True)
+ ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::Now() [member function]
+ cls.add_method('Now',
+ 'ns3::Time',
+ [],
+ is_static=True)
+ ## simulator.h (module 'core'): static void ns3::Simulator::Remove(ns3::EventId const & id) [member function]
+ cls.add_method('Remove',
+ 'void',
+ [param('ns3::EventId const &', 'id')],
+ is_static=True)
+ ## simulator.h (module 'core'): static void ns3::Simulator::RunOneEvent() [member function]
+ cls.add_method('RunOneEvent',
+ 'void',
+ [],
+ is_static=True, deprecated=True)
+ ## simulator.h (module 'core'): static void ns3::Simulator::SetImplementation(ns3::Ptr<ns3::SimulatorImpl> impl) [member function]
+ cls.add_method('SetImplementation',
+ 'void',
+ [param('ns3::Ptr< ns3::SimulatorImpl >', 'impl')],
+ is_static=True)
+ ## simulator.h (module 'core'): static void ns3::Simulator::SetScheduler(ns3::ObjectFactory schedulerFactory) [member function]
+ cls.add_method('SetScheduler',
+ 'void',
+ [param('ns3::ObjectFactory', 'schedulerFactory')],
+ is_static=True)
+ ## simulator.h (module 'core'): static void ns3::Simulator::Stop() [member function]
+ cls.add_method('Stop',
+ 'void',
+ [],
+ is_static=True)
+ ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+ cls.add_method('Stop',
+ 'void',
+ [param('ns3::Time const &', 'time')],
+ is_static=True)
+ return
+
def register_Ns3SpringMobilityHelper_methods(root_module, cls):
## spring-mobility-helper.h (module 'NDNabstraction'): ns3::SpringMobilityHelper::SpringMobilityHelper() [constructor]
cls.add_constructor([])
@@ -2199,38 +2415,6 @@
is_static=True)
return
-def register_Ns3Tag_methods(root_module, cls):
- ## tag.h (module 'network'): ns3::Tag::Tag() [constructor]
- cls.add_constructor([])
- ## tag.h (module 'network'): ns3::Tag::Tag(ns3::Tag const & arg0) [copy constructor]
- cls.add_constructor([param('ns3::Tag const &', 'arg0')])
- ## tag.h (module 'network'): void ns3::Tag::Deserialize(ns3::TagBuffer i) [member function]
- cls.add_method('Deserialize',
- 'void',
- [param('ns3::TagBuffer', 'i')],
- is_pure_virtual=True, is_virtual=True)
- ## tag.h (module 'network'): uint32_t ns3::Tag::GetSerializedSize() const [member function]
- cls.add_method('GetSerializedSize',
- 'uint32_t',
- [],
- is_pure_virtual=True, is_const=True, is_virtual=True)
- ## tag.h (module 'network'): static ns3::TypeId ns3::Tag::GetTypeId() [member function]
- cls.add_method('GetTypeId',
- 'ns3::TypeId',
- [],
- is_static=True)
- ## tag.h (module 'network'): void ns3::Tag::Print(std::ostream & os) const [member function]
- cls.add_method('Print',
- 'void',
- [param('std::ostream &', 'os')],
- is_pure_virtual=True, is_const=True, is_virtual=True)
- ## tag.h (module 'network'): void ns3::Tag::Serialize(ns3::TagBuffer i) const [member function]
- cls.add_method('Serialize',
- 'void',
- [param('ns3::TagBuffer', 'i')],
- is_pure_virtual=True, is_const=True, is_virtual=True)
- return
-
def register_Ns3TagBuffer_methods(root_module, cls):
## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(ns3::TagBuffer const & arg0) [copy constructor]
cls.add_constructor([param('ns3::TagBuffer const &', 'arg0')])
@@ -2832,6 +3016,178 @@
cls.add_constructor([])
return
+def register_Ns3Ipv4Header_methods(root_module, cls):
+ ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::Ipv4Header(ns3::Ipv4Header const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Ipv4Header const &', 'arg0')])
+ ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::Ipv4Header() [constructor]
+ cls.add_constructor([])
+ ## ipv4-header.h (module 'internet'): uint32_t ns3::Ipv4Header::Deserialize(ns3::Buffer::Iterator start) [member function]
+ cls.add_method('Deserialize',
+ 'uint32_t',
+ [param('ns3::Buffer::Iterator', 'start')],
+ is_virtual=True)
+ ## ipv4-header.h (module 'internet'): std::string ns3::Ipv4Header::DscpTypeToString(ns3::Ipv4Header::DscpType dscp) const [member function]
+ cls.add_method('DscpTypeToString',
+ 'std::string',
+ [param('ns3::Ipv4Header::DscpType', 'dscp')],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): std::string ns3::Ipv4Header::EcnTypeToString(ns3::Ipv4Header::EcnType ecn) const [member function]
+ cls.add_method('EcnTypeToString',
+ 'std::string',
+ [param('ns3::Ipv4Header::EcnType', 'ecn')],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::EnableChecksum() [member function]
+ cls.add_method('EnableChecksum',
+ 'void',
+ [])
+ ## ipv4-header.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Header::GetDestination() const [member function]
+ cls.add_method('GetDestination',
+ 'ns3::Ipv4Address',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType ns3::Ipv4Header::GetDscp() const [member function]
+ cls.add_method('GetDscp',
+ 'ns3::Ipv4Header::DscpType',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType ns3::Ipv4Header::GetEcn() const [member function]
+ cls.add_method('GetEcn',
+ 'ns3::Ipv4Header::EcnType',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): uint16_t ns3::Ipv4Header::GetFragmentOffset() const [member function]
+ cls.add_method('GetFragmentOffset',
+ 'uint16_t',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): uint16_t ns3::Ipv4Header::GetIdentification() const [member function]
+ cls.add_method('GetIdentification',
+ 'uint16_t',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): ns3::TypeId ns3::Ipv4Header::GetInstanceTypeId() const [member function]
+ cls.add_method('GetInstanceTypeId',
+ 'ns3::TypeId',
+ [],
+ is_const=True, is_virtual=True)
+ ## ipv4-header.h (module 'internet'): uint16_t ns3::Ipv4Header::GetPayloadSize() const [member function]
+ cls.add_method('GetPayloadSize',
+ 'uint16_t',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): uint8_t ns3::Ipv4Header::GetProtocol() const [member function]
+ cls.add_method('GetProtocol',
+ 'uint8_t',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): uint32_t ns3::Ipv4Header::GetSerializedSize() const [member function]
+ cls.add_method('GetSerializedSize',
+ 'uint32_t',
+ [],
+ is_const=True, is_virtual=True)
+ ## ipv4-header.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Header::GetSource() const [member function]
+ cls.add_method('GetSource',
+ 'ns3::Ipv4Address',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): uint8_t ns3::Ipv4Header::GetTos() const [member function]
+ cls.add_method('GetTos',
+ 'uint8_t',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): uint8_t ns3::Ipv4Header::GetTtl() const [member function]
+ cls.add_method('GetTtl',
+ 'uint8_t',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): static ns3::TypeId ns3::Ipv4Header::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## ipv4-header.h (module 'internet'): bool ns3::Ipv4Header::IsChecksumOk() const [member function]
+ cls.add_method('IsChecksumOk',
+ 'bool',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): bool ns3::Ipv4Header::IsDontFragment() const [member function]
+ cls.add_method('IsDontFragment',
+ 'bool',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): bool ns3::Ipv4Header::IsLastFragment() const [member function]
+ cls.add_method('IsLastFragment',
+ 'bool',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::Print(std::ostream & os) const [member function]
+ cls.add_method('Print',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_const=True, is_virtual=True)
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::Serialize(ns3::Buffer::Iterator start) const [member function]
+ cls.add_method('Serialize',
+ 'void',
+ [param('ns3::Buffer::Iterator', 'start')],
+ is_const=True, is_virtual=True)
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetDestination(ns3::Ipv4Address destination) [member function]
+ cls.add_method('SetDestination',
+ 'void',
+ [param('ns3::Ipv4Address', 'destination')])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetDontFragment() [member function]
+ cls.add_method('SetDontFragment',
+ 'void',
+ [])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetDscp(ns3::Ipv4Header::DscpType dscp) [member function]
+ cls.add_method('SetDscp',
+ 'void',
+ [param('ns3::Ipv4Header::DscpType', 'dscp')])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetEcn(ns3::Ipv4Header::EcnType ecn) [member function]
+ cls.add_method('SetEcn',
+ 'void',
+ [param('ns3::Ipv4Header::EcnType', 'ecn')])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetFragmentOffset(uint16_t offsetBytes) [member function]
+ cls.add_method('SetFragmentOffset',
+ 'void',
+ [param('uint16_t', 'offsetBytes')])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetIdentification(uint16_t identification) [member function]
+ cls.add_method('SetIdentification',
+ 'void',
+ [param('uint16_t', 'identification')])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetLastFragment() [member function]
+ cls.add_method('SetLastFragment',
+ 'void',
+ [])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetMayFragment() [member function]
+ cls.add_method('SetMayFragment',
+ 'void',
+ [])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetMoreFragments() [member function]
+ cls.add_method('SetMoreFragments',
+ 'void',
+ [])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetPayloadSize(uint16_t size) [member function]
+ cls.add_method('SetPayloadSize',
+ 'void',
+ [param('uint16_t', 'size')])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetProtocol(uint8_t num) [member function]
+ cls.add_method('SetProtocol',
+ 'void',
+ [param('uint8_t', 'num')])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetSource(ns3::Ipv4Address source) [member function]
+ cls.add_method('SetSource',
+ 'void',
+ [param('ns3::Ipv4Address', 'source')])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetTos(uint8_t tos) [member function]
+ cls.add_method('SetTos',
+ 'void',
+ [param('uint8_t', 'tos')])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetTtl(uint8_t ttl) [member function]
+ cls.add_method('SetTtl',
+ 'void',
+ [param('uint8_t', 'ttl')])
+ return
+
def register_Ns3LogNormalVariable_methods(root_module, cls):
## random-variable.h (module 'core'): ns3::LogNormalVariable::LogNormalVariable(ns3::LogNormalVariable const & arg0) [copy constructor]
cls.add_constructor([param('ns3::LogNormalVariable const &', 'arg0')])
@@ -3041,6 +3397,18 @@
is_static=True)
return
+def register_Ns3SimpleRefCount__Ns3CcnxPathWeightTracer_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxPathWeightTracer__gt___methods(root_module, cls):
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxPathWeightTracer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPathWeightTracer> >::SimpleRefCount() [constructor]
+ cls.add_constructor([])
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxPathWeightTracer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPathWeightTracer> >::SimpleRefCount(ns3::SimpleRefCount<ns3::CcnxPathWeightTracer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPathWeightTracer> > const & o) [copy constructor]
+ cls.add_constructor([param('ns3::SimpleRefCount< ns3::CcnxPathWeightTracer, ns3::empty, ns3::DefaultDeleter< ns3::CcnxPathWeightTracer > > const &', 'o')])
+ ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::CcnxPathWeightTracer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPathWeightTracer> >::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([])
@@ -3053,6 +3421,54 @@
is_static=True)
return
+def register_Ns3SimpleRefCount__Ns3Ipv4AppTracer_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4AppTracer__gt___methods(root_module, cls):
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4AppTracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4AppTracer> >::SimpleRefCount() [constructor]
+ cls.add_constructor([])
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4AppTracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4AppTracer> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Ipv4AppTracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4AppTracer> > const & o) [copy constructor]
+ cls.add_constructor([param('ns3::SimpleRefCount< ns3::Ipv4AppTracer, ns3::empty, ns3::DefaultDeleter< ns3::Ipv4AppTracer > > const &', 'o')])
+ ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Ipv4AppTracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4AppTracer> >::Cleanup() [member function]
+ cls.add_method('Cleanup',
+ 'void',
+ [],
+ is_static=True)
+ return
+
+def register_Ns3SimpleRefCount__Ns3Ipv4L3Tracer_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4L3Tracer__gt___methods(root_module, cls):
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4L3Tracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4L3Tracer> >::SimpleRefCount() [constructor]
+ cls.add_constructor([])
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4L3Tracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4L3Tracer> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Ipv4L3Tracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4L3Tracer> > const & o) [copy constructor]
+ cls.add_constructor([param('ns3::SimpleRefCount< ns3::Ipv4L3Tracer, ns3::empty, ns3::DefaultDeleter< ns3::Ipv4L3Tracer > > const &', 'o')])
+ ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Ipv4L3Tracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4L3Tracer> >::Cleanup() [member function]
+ cls.add_method('Cleanup',
+ 'void',
+ [],
+ is_static=True)
+ return
+
+def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
+ cls.add_constructor([])
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > const & o) [copy constructor]
+ cls.add_constructor([param('ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter< ns3::Ipv4MulticastRoute > > const &', 'o')])
+ ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::Cleanup() [member function]
+ cls.add_method('Cleanup',
+ 'void',
+ [],
+ is_static=True)
+ return
+
+def register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, cls):
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >::SimpleRefCount() [constructor]
+ cls.add_constructor([])
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > const & o) [copy constructor]
+ cls.add_constructor([param('ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter< ns3::Ipv4Route > > const &', 'o')])
+ ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >::Cleanup() [member function]
+ cls.add_method('Cleanup',
+ 'void',
+ [],
+ is_static=True)
+ return
+
def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
cls.add_constructor([])
@@ -3065,6 +3481,18 @@
is_static=True)
return
+def register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, cls):
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::SimpleRefCount() [constructor]
+ cls.add_constructor([])
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::SimpleRefCount(ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > const & o) [copy constructor]
+ cls.add_constructor([param('ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter< ns3::OutputStreamWrapper > > const &', 'o')])
+ ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::Cleanup() [member function]
+ cls.add_method('Cleanup',
+ 'void',
+ [],
+ is_static=True)
+ return
+
def register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, cls):
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount() [constructor]
cls.add_constructor([])
@@ -3101,6 +3529,278 @@
is_static=True)
return
+def register_Ns3SimpleRefCount__Ns3WindowTracer_Ns3Empty_Ns3DefaultDeleter__lt__ns3WindowTracer__gt___methods(root_module, cls):
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::WindowTracer, ns3::empty, ns3::DefaultDeleter<ns3::WindowTracer> >::SimpleRefCount() [constructor]
+ cls.add_constructor([])
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::WindowTracer, ns3::empty, ns3::DefaultDeleter<ns3::WindowTracer> >::SimpleRefCount(ns3::SimpleRefCount<ns3::WindowTracer, ns3::empty, ns3::DefaultDeleter<ns3::WindowTracer> > const & o) [copy constructor]
+ cls.add_constructor([param('ns3::SimpleRefCount< ns3::WindowTracer, ns3::empty, ns3::DefaultDeleter< ns3::WindowTracer > > const &', 'o')])
+ ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::WindowTracer, ns3::empty, ns3::DefaultDeleter<ns3::WindowTracer> >::Cleanup() [member function]
+ cls.add_method('Cleanup',
+ 'void',
+ [],
+ is_static=True)
+ return
+
+def register_Ns3Socket_methods(root_module, cls):
+ ## socket.h (module 'network'): ns3::Socket::Socket(ns3::Socket const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Socket const &', 'arg0')])
+ ## socket.h (module 'network'): ns3::Socket::Socket() [constructor]
+ cls.add_constructor([])
+ ## socket.h (module 'network'): int ns3::Socket::Bind(ns3::Address const & address) [member function]
+ cls.add_method('Bind',
+ 'int',
+ [param('ns3::Address const &', 'address')],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): int ns3::Socket::Bind() [member function]
+ cls.add_method('Bind',
+ 'int',
+ [],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): void ns3::Socket::BindToNetDevice(ns3::Ptr<ns3::NetDevice> netdevice) [member function]
+ cls.add_method('BindToNetDevice',
+ 'void',
+ [param('ns3::Ptr< ns3::NetDevice >', 'netdevice')],
+ is_virtual=True)
+ ## socket.h (module 'network'): int ns3::Socket::Close() [member function]
+ cls.add_method('Close',
+ 'int',
+ [],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): int ns3::Socket::Connect(ns3::Address const & address) [member function]
+ cls.add_method('Connect',
+ 'int',
+ [param('ns3::Address const &', 'address')],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): static ns3::Ptr<ns3::Socket> ns3::Socket::CreateSocket(ns3::Ptr<ns3::Node> node, ns3::TypeId tid) [member function]
+ cls.add_method('CreateSocket',
+ 'ns3::Ptr< ns3::Socket >',
+ [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::TypeId', 'tid')],
+ is_static=True)
+ ## socket.h (module 'network'): bool ns3::Socket::GetAllowBroadcast() const [member function]
+ cls.add_method('GetAllowBroadcast',
+ 'bool',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::Socket::GetBoundNetDevice() [member function]
+ cls.add_method('GetBoundNetDevice',
+ 'ns3::Ptr< ns3::NetDevice >',
+ [])
+ ## socket.h (module 'network'): ns3::Socket::SocketErrno ns3::Socket::GetErrno() const [member function]
+ cls.add_method('GetErrno',
+ 'ns3::Socket::SocketErrno',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): ns3::Ptr<ns3::Node> ns3::Socket::GetNode() const [member function]
+ cls.add_method('GetNode',
+ 'ns3::Ptr< ns3::Node >',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
+ cls.add_method('GetRxAvailable',
+ 'uint32_t',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): int ns3::Socket::GetSockName(ns3::Address & address) const [member function]
+ cls.add_method('GetSockName',
+ 'int',
+ [param('ns3::Address &', 'address')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): ns3::Socket::SocketType ns3::Socket::GetSocketType() const [member function]
+ cls.add_method('GetSocketType',
+ 'ns3::Socket::SocketType',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): uint32_t ns3::Socket::GetTxAvailable() const [member function]
+ cls.add_method('GetTxAvailable',
+ 'uint32_t',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): bool ns3::Socket::IsRecvPktInfo() const [member function]
+ cls.add_method('IsRecvPktInfo',
+ 'bool',
+ [],
+ is_const=True)
+ ## socket.h (module 'network'): int ns3::Socket::Listen() [member function]
+ cls.add_method('Listen',
+ 'int',
+ [],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::Recv(uint32_t maxSize, uint32_t flags) [member function]
+ cls.add_method('Recv',
+ 'ns3::Ptr< ns3::Packet >',
+ [param('uint32_t', 'maxSize'), param('uint32_t', 'flags')],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::Recv() [member function]
+ cls.add_method('Recv',
+ 'ns3::Ptr< ns3::Packet >',
+ [])
+ ## socket.h (module 'network'): int ns3::Socket::Recv(uint8_t * buf, uint32_t size, uint32_t flags) [member function]
+ cls.add_method('Recv',
+ 'int',
+ [param('uint8_t *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags')])
+ ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::RecvFrom(uint32_t maxSize, uint32_t flags, ns3::Address & fromAddress) [member function]
+ cls.add_method('RecvFrom',
+ 'ns3::Ptr< ns3::Packet >',
+ [param('uint32_t', 'maxSize'), param('uint32_t', 'flags'), param('ns3::Address &', 'fromAddress')],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::RecvFrom(ns3::Address & fromAddress) [member function]
+ cls.add_method('RecvFrom',
+ 'ns3::Ptr< ns3::Packet >',
+ [param('ns3::Address &', 'fromAddress')])
+ ## socket.h (module 'network'): int ns3::Socket::RecvFrom(uint8_t * buf, uint32_t size, uint32_t flags, ns3::Address & fromAddress) [member function]
+ cls.add_method('RecvFrom',
+ 'int',
+ [param('uint8_t *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags'), param('ns3::Address &', 'fromAddress')])
+ ## socket.h (module 'network'): int ns3::Socket::Send(ns3::Ptr<ns3::Packet> p, uint32_t flags) [member function]
+ cls.add_method('Send',
+ 'int',
+ [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint32_t', 'flags')],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): int ns3::Socket::Send(ns3::Ptr<ns3::Packet> p) [member function]
+ cls.add_method('Send',
+ 'int',
+ [param('ns3::Ptr< ns3::Packet >', 'p')])
+ ## socket.h (module 'network'): int ns3::Socket::Send(uint8_t const * buf, uint32_t size, uint32_t flags) [member function]
+ cls.add_method('Send',
+ 'int',
+ [param('uint8_t const *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags')])
+ ## socket.h (module 'network'): int ns3::Socket::SendTo(ns3::Ptr<ns3::Packet> p, uint32_t flags, ns3::Address const & toAddress) [member function]
+ cls.add_method('SendTo',
+ 'int',
+ [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint32_t', 'flags'), param('ns3::Address const &', 'toAddress')],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): int ns3::Socket::SendTo(uint8_t const * buf, uint32_t size, uint32_t flags, ns3::Address const & address) [member function]
+ cls.add_method('SendTo',
+ 'int',
+ [param('uint8_t const *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags'), param('ns3::Address const &', 'address')])
+ ## socket.h (module 'network'): void ns3::Socket::SetAcceptCallback(ns3::Callback<bool, ns3::Ptr<ns3::Socket>, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> connectionRequest, ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> newConnectionCreated) [member function]
+ cls.add_method('SetAcceptCallback',
+ 'void',
+ [param('ns3::Callback< bool, ns3::Ptr< ns3::Socket >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'connectionRequest'), param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'newConnectionCreated')])
+ ## socket.h (module 'network'): bool ns3::Socket::SetAllowBroadcast(bool allowBroadcast) [member function]
+ cls.add_method('SetAllowBroadcast',
+ 'bool',
+ [param('bool', 'allowBroadcast')],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): void ns3::Socket::SetCloseCallbacks(ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> normalClose, ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> errorClose) [member function]
+ cls.add_method('SetCloseCallbacks',
+ 'void',
+ [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'normalClose'), param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'errorClose')])
+ ## socket.h (module 'network'): void ns3::Socket::SetConnectCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> connectionSucceeded, ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> connectionFailed) [member function]
+ cls.add_method('SetConnectCallback',
+ 'void',
+ [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'connectionSucceeded'), param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'connectionFailed')])
+ ## socket.h (module 'network'): void ns3::Socket::SetDataSentCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> dataSent) [member function]
+ cls.add_method('SetDataSentCallback',
+ 'void',
+ [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'dataSent')])
+ ## socket.h (module 'network'): void ns3::Socket::SetRecvCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> arg0) [member function]
+ cls.add_method('SetRecvCallback',
+ 'void',
+ [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'arg0')])
+ ## socket.h (module 'network'): void ns3::Socket::SetRecvPktInfo(bool flag) [member function]
+ cls.add_method('SetRecvPktInfo',
+ 'void',
+ [param('bool', 'flag')])
+ ## socket.h (module 'network'): void ns3::Socket::SetSendCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> sendCb) [member function]
+ cls.add_method('SetSendCallback',
+ 'void',
+ [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'sendCb')])
+ ## socket.h (module 'network'): int ns3::Socket::ShutdownRecv() [member function]
+ cls.add_method('ShutdownRecv',
+ 'int',
+ [],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): int ns3::Socket::ShutdownSend() [member function]
+ cls.add_method('ShutdownSend',
+ 'int',
+ [],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): void ns3::Socket::DoDispose() [member function]
+ cls.add_method('DoDispose',
+ 'void',
+ [],
+ visibility='protected', is_virtual=True)
+ ## socket.h (module 'network'): void ns3::Socket::NotifyConnectionFailed() [member function]
+ cls.add_method('NotifyConnectionFailed',
+ 'void',
+ [],
+ visibility='protected')
+ ## socket.h (module 'network'): bool ns3::Socket::NotifyConnectionRequest(ns3::Address const & from) [member function]
+ cls.add_method('NotifyConnectionRequest',
+ 'bool',
+ [param('ns3::Address const &', 'from')],
+ visibility='protected')
+ ## socket.h (module 'network'): void ns3::Socket::NotifyConnectionSucceeded() [member function]
+ cls.add_method('NotifyConnectionSucceeded',
+ 'void',
+ [],
+ visibility='protected')
+ ## socket.h (module 'network'): void ns3::Socket::NotifyDataRecv() [member function]
+ cls.add_method('NotifyDataRecv',
+ 'void',
+ [],
+ visibility='protected')
+ ## socket.h (module 'network'): void ns3::Socket::NotifyDataSent(uint32_t size) [member function]
+ cls.add_method('NotifyDataSent',
+ 'void',
+ [param('uint32_t', 'size')],
+ visibility='protected')
+ ## socket.h (module 'network'): void ns3::Socket::NotifyErrorClose() [member function]
+ cls.add_method('NotifyErrorClose',
+ 'void',
+ [],
+ visibility='protected')
+ ## socket.h (module 'network'): void ns3::Socket::NotifyNewConnectionCreated(ns3::Ptr<ns3::Socket> socket, ns3::Address const & from) [member function]
+ cls.add_method('NotifyNewConnectionCreated',
+ 'void',
+ [param('ns3::Ptr< ns3::Socket >', 'socket'), param('ns3::Address const &', 'from')],
+ visibility='protected')
+ ## socket.h (module 'network'): void ns3::Socket::NotifyNormalClose() [member function]
+ cls.add_method('NotifyNormalClose',
+ 'void',
+ [],
+ visibility='protected')
+ ## socket.h (module 'network'): void ns3::Socket::NotifySend(uint32_t spaceAvailable) [member function]
+ cls.add_method('NotifySend',
+ 'void',
+ [param('uint32_t', 'spaceAvailable')],
+ visibility='protected')
+ return
+
+def register_Ns3Tag_methods(root_module, cls):
+ cls.add_output_stream_operator()
+ ## 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_Ns3Time_methods(root_module, cls):
cls.add_binary_comparison_operator('!=')
cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', 'right'))
@@ -3303,6 +4003,8 @@
def register_Ns3TopologyReaderLink_methods(root_module, cls):
## topology-reader.h (module 'topology-read'): ns3::TopologyReader::Link::Link(ns3::TopologyReader::Link const & arg0) [copy constructor]
cls.add_constructor([param('ns3::TopologyReader::Link const &', 'arg0')])
+ ## topology-reader.h (module 'topology-read'): ns3::TopologyReader::Link::Link() [constructor]
+ cls.add_constructor([])
## topology-reader.h (module 'topology-read'): ns3::TopologyReader::Link::Link(ns3::Ptr<ns3::Node> fromPtr, std::string const & fromName, ns3::Ptr<ns3::Node> toPtr, std::string const & toName) [constructor]
cls.add_constructor([param('ns3::Ptr< ns3::Node >', 'fromPtr'), param('std::string const &', 'fromName'), param('ns3::Ptr< ns3::Node >', 'toPtr'), param('std::string const &', 'toName')])
## topology-reader.h (module 'topology-read'): std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > ns3::TopologyReader::Link::AttributesBegin() [member function]
@@ -3423,6 +4125,92 @@
is_pure_virtual=True, is_const=True, is_virtual=True)
return
+def register_Ns3WeightsPathStretchTag_methods(root_module, cls):
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::WeightsPathStretchTag::WeightsPathStretchTag(ns3::WeightsPathStretchTag const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::WeightsPathStretchTag const &', 'arg0')])
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::WeightsPathStretchTag::WeightsPathStretchTag() [constructor]
+ cls.add_constructor([])
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): void ns3::WeightsPathStretchTag::AddPathInfo(ns3::Ptr<ns3::Node> node, uint32_t weight) [member function]
+ cls.add_method('AddPathInfo',
+ 'void',
+ [param('ns3::Ptr< ns3::Node >', 'node'), param('uint32_t', 'weight')])
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): void ns3::WeightsPathStretchTag::Deserialize(ns3::TagBuffer i) [member function]
+ cls.add_method('Deserialize',
+ 'void',
+ [param('ns3::TagBuffer', 'i')],
+ is_virtual=True)
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::Ptr<ns3::Node> ns3::WeightsPathStretchTag::GetDestinationNode() const [member function]
+ cls.add_method('GetDestinationNode',
+ 'ns3::Ptr< ns3::Node >',
+ [],
+ is_const=True)
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): std::list<ns3::WeightsPathStretchTag::NodeWeightPair, std::allocator<ns3::WeightsPathStretchTag::NodeWeightPair> > const & ns3::WeightsPathStretchTag::GetInfos() const [member function]
+ cls.add_method('GetInfos',
+ 'std::list< ns3::WeightsPathStretchTag::NodeWeightPair > const &',
+ [],
+ is_const=True)
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): uint32_t ns3::WeightsPathStretchTag::GetSerializedSize() const [member function]
+ cls.add_method('GetSerializedSize',
+ 'uint32_t',
+ [],
+ is_const=True, is_virtual=True)
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::Ptr<ns3::Node> ns3::WeightsPathStretchTag::GetSourceNode() const [member function]
+ cls.add_method('GetSourceNode',
+ 'ns3::Ptr< ns3::Node >',
+ [],
+ is_const=True)
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): uint64_t ns3::WeightsPathStretchTag::GetTotalWeight() const [member function]
+ cls.add_method('GetTotalWeight',
+ 'uint64_t',
+ [],
+ is_const=True)
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): static ns3::TypeId ns3::WeightsPathStretchTag::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): void ns3::WeightsPathStretchTag::Print(std::ostream & os) const [member function]
+ cls.add_method('Print',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_const=True, is_virtual=True)
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): void ns3::WeightsPathStretchTag::Serialize(ns3::TagBuffer i) const [member function]
+ cls.add_method('Serialize',
+ 'void',
+ [param('ns3::TagBuffer', 'i')],
+ is_const=True, is_virtual=True)
+ return
+
+def register_Ns3WeightsPathStretchTagNodeWeightPair_methods(root_module, cls):
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::WeightsPathStretchTag::NodeWeightPair::NodeWeightPair(ns3::WeightsPathStretchTag::NodeWeightPair const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::WeightsPathStretchTag::NodeWeightPair const &', 'arg0')])
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::WeightsPathStretchTag::NodeWeightPair::NodeWeightPair() [constructor]
+ cls.add_constructor([])
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::WeightsPathStretchTag::NodeWeightPair::NodeWeightPair(ns3::Ptr<ns3::Node> _node, uint32_t _weight) [constructor]
+ cls.add_constructor([param('ns3::Ptr< ns3::Node >', '_node'), param('uint32_t', '_weight')])
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::WeightsPathStretchTag::NodeWeightPair::node [variable]
+ cls.add_instance_attribute('node', 'ns3::Ptr< ns3::Node >', is_const=False)
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::WeightsPathStretchTag::NodeWeightPair::weight [variable]
+ cls.add_instance_attribute('weight', 'uint32_t', is_const=False)
+ return
+
+def register_Ns3WindowTracer_methods(root_module, cls):
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): ns3::WindowTracer::WindowTracer(ns3::WindowTracer const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::WindowTracer const &', 'arg0')])
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): ns3::WindowTracer::WindowTracer(std::ostream & os, ns3::Ptr<ns3::Node> node, std::string const & appId="*") [constructor]
+ cls.add_constructor([param('std::ostream &', 'os'), param('ns3::Ptr< ns3::Node >', 'node'), param('std::string const &', 'appId', default_value='"*"')])
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): static void ns3::WindowTracer::PrintHeader(std::ostream & os) [member function]
+ cls.add_method('PrintHeader',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_static=True)
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): void ns3::WindowTracer::OnWindowChange(std::string context, uint32_t oldValue, uint32_t newValue) [member function]
+ cls.add_method('OnWindowChange',
+ 'void',
+ [param('std::string', 'context'), param('uint32_t', 'oldValue'), param('uint32_t', 'newValue')],
+ is_virtual=True)
+ return
+
def register_Ns3AnnotatedTopologyReader_methods(root_module, cls):
## annotated-topology-reader.h (module 'NDNabstraction'): ns3::AnnotatedTopologyReader::AnnotatedTopologyReader(std::string const & path="", double scale=1.0e+0) [constructor]
cls.add_constructor([param('std::string const &', 'path', default_value='""'), param('double', 'scale', default_value='1.0e+0')])
@@ -3436,6 +4224,11 @@
'ns3::NodeContainer',
[],
is_const=True)
+ ## annotated-topology-reader.h (module 'NDNabstraction'): std::list<ns3::TopologyReader::Link, std::allocator<ns3::TopologyReader::Link> > const & ns3::AnnotatedTopologyReader::GetLinks() const [member function]
+ cls.add_method('GetLinks',
+ 'std::list< ns3::TopologyReader::Link > const &',
+ [],
+ is_const=True)
## annotated-topology-reader.h (module 'NDNabstraction'): void ns3::AnnotatedTopologyReader::AssignIpv4Addresses(ns3::Ipv4Address base) [member function]
cls.add_method('AssignIpv4Addresses',
'void',
@@ -3448,6 +4241,15 @@
cls.add_method('SetMobilityModel',
'void',
[param('std::string const &', 'model')])
+ ## annotated-topology-reader.h (module 'NDNabstraction'): void ns3::AnnotatedTopologyReader::ApplyOspfMetric() [member function]
+ cls.add_method('ApplyOspfMetric',
+ 'void',
+ [])
+ ## annotated-topology-reader.h (module 'NDNabstraction'): void ns3::AnnotatedTopologyReader::SavePositions(std::string const & file) const [member function]
+ cls.add_method('SavePositions',
+ 'void',
+ [param('std::string const &', 'file')],
+ is_const=True)
## annotated-topology-reader.h (module 'NDNabstraction'): ns3::Ptr<ns3::Node> ns3::AnnotatedTopologyReader::CreateNode(std::string const name) [member function]
cls.add_method('CreateNode',
'ns3::Ptr< ns3::Node >',
@@ -3463,11 +4265,6 @@
'void',
[],
visibility='protected')
- ## annotated-topology-reader.h (module 'NDNabstraction'): void ns3::AnnotatedTopologyReader::ApplyOspfMetric() [member function]
- cls.add_method('ApplyOspfMetric',
- 'void',
- [],
- visibility='protected')
return
def register_Ns3Application_methods(root_module, cls):
@@ -3610,6 +4407,46 @@
is_pure_virtual=True, is_const=True, is_virtual=True)
return
+def register_Ns3BatchesChecker_methods(root_module, cls):
+ ## batches.h (module 'NDNabstraction'): ns3::BatchesChecker::BatchesChecker() [constructor]
+ cls.add_constructor([])
+ ## batches.h (module 'NDNabstraction'): ns3::BatchesChecker::BatchesChecker(ns3::BatchesChecker const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::BatchesChecker const &', 'arg0')])
+ return
+
+def register_Ns3BatchesValue_methods(root_module, cls):
+ ## batches.h (module 'NDNabstraction'): ns3::BatchesValue::BatchesValue() [constructor]
+ cls.add_constructor([])
+ ## batches.h (module 'NDNabstraction'): ns3::BatchesValue::BatchesValue(ns3::BatchesValue const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::BatchesValue const &', 'arg0')])
+ ## batches.h (module 'NDNabstraction'): ns3::BatchesValue::BatchesValue(ns3::Batches const & value) [constructor]
+ cls.add_constructor([param('ns3::Batches const &', 'value')])
+ ## batches.h (module 'NDNabstraction'): ns3::Ptr<ns3::AttributeValue> ns3::BatchesValue::Copy() const [member function]
+ cls.add_method('Copy',
+ 'ns3::Ptr< ns3::AttributeValue >',
+ [],
+ is_const=True, is_virtual=True)
+ ## batches.h (module 'NDNabstraction'): bool ns3::BatchesValue::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)
+ ## batches.h (module 'NDNabstraction'): ns3::Batches ns3::BatchesValue::Get() const [member function]
+ cls.add_method('Get',
+ 'ns3::Batches',
+ [],
+ is_const=True)
+ ## batches.h (module 'NDNabstraction'): std::string ns3::BatchesValue::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)
+ ## batches.h (module 'NDNabstraction'): void ns3::BatchesValue::Set(ns3::Batches const & value) [member function]
+ cls.add_method('Set',
+ 'void',
+ [param('ns3::Batches const &', 'value')])
+ return
+
def register_Ns3CallbackChecker_methods(root_module, cls):
## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
cls.add_constructor([])
@@ -3714,20 +4551,20 @@
'ns3::TypeId',
[],
is_static=True)
- ## ccnx-app.h (module 'NDNabstraction'): void ns3::CcnxApp::OnContentObject(ns3::Ptr<const ns3::CcnxContentObjectHeader> const & contentObject, ns3::Ptr<const ns3::Packet> const & payload) [member function]
+ ## ccnx-app.h (module 'NDNabstraction'): void ns3::CcnxApp::OnContentObject(ns3::Ptr<const ns3::CcnxContentObjectHeader> const & contentObject, ns3::Ptr<ns3::Packet> payload) [member function]
cls.add_method('OnContentObject',
'void',
- [param('ns3::Ptr< ns3::CcnxContentObjectHeader const > const &', 'contentObject'), param('ns3::Ptr< ns3::Packet const > const &', 'payload')],
+ [param('ns3::Ptr< ns3::CcnxContentObjectHeader const > const &', 'contentObject'), param('ns3::Ptr< ns3::Packet >', 'payload')],
is_virtual=True)
- ## ccnx-app.h (module 'NDNabstraction'): void ns3::CcnxApp::OnInterest(ns3::Ptr<const ns3::CcnxInterestHeader> const & interest) [member function]
+ ## ccnx-app.h (module 'NDNabstraction'): void ns3::CcnxApp::OnInterest(ns3::Ptr<const ns3::CcnxInterestHeader> const & interest, ns3::Ptr<ns3::Packet> packet) [member function]
cls.add_method('OnInterest',
'void',
- [param('ns3::Ptr< ns3::CcnxInterestHeader const > const &', 'interest')],
+ [param('ns3::Ptr< ns3::CcnxInterestHeader const > const &', 'interest'), param('ns3::Ptr< ns3::Packet >', 'packet')],
is_virtual=True)
- ## ccnx-app.h (module 'NDNabstraction'): void ns3::CcnxApp::OnNack(ns3::Ptr<const ns3::CcnxInterestHeader> const & interest) [member function]
+ ## ccnx-app.h (module 'NDNabstraction'): void ns3::CcnxApp::OnNack(ns3::Ptr<const ns3::CcnxInterestHeader> const & interest, ns3::Ptr<ns3::Packet> packet) [member function]
cls.add_method('OnNack',
'void',
- [param('ns3::Ptr< ns3::CcnxInterestHeader const > const &', 'interest')],
+ [param('ns3::Ptr< ns3::CcnxInterestHeader const > const &', 'interest'), param('ns3::Ptr< ns3::Packet >', 'packet')],
is_virtual=True)
## ccnx-app.h (module 'NDNabstraction'): void ns3::CcnxApp::RegisterProtocolHandler(ns3::Callback<bool, ns3::Ptr<ns3::Packet const> const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> handler) [member function]
cls.add_method('RegisterProtocolHandler',
@@ -3799,6 +4636,17 @@
is_pure_virtual=True, is_const=True, is_virtual=True)
return
+def register_Ns3CcnxConsumerWindowTracer_methods(root_module, cls):
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): ns3::CcnxConsumerWindowTracer::CcnxConsumerWindowTracer(ns3::CcnxConsumerWindowTracer const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::CcnxConsumerWindowTracer const &', 'arg0')])
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): ns3::CcnxConsumerWindowTracer::CcnxConsumerWindowTracer(std::ostream & os, ns3::Ptr<ns3::Node> node, std::string const & appId="*") [constructor]
+ cls.add_constructor([param('std::ostream &', 'os'), param('ns3::Ptr< ns3::Node >', 'node'), param('std::string const &', 'appId', default_value='"*"')])
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): void ns3::CcnxConsumerWindowTracer::Connect() [member function]
+ cls.add_method('Connect',
+ 'void',
+ [])
+ return
+
def register_Ns3CcnxContentObjectHeader_methods(root_module, cls):
## ccnx-content-object-header.h (module 'NDNabstraction'): ns3::CcnxContentObjectHeader::CcnxContentObjectHeader(ns3::CcnxContentObjectHeader const & arg0) [copy constructor]
cls.add_constructor([param('ns3::CcnxContentObjectHeader const &', 'arg0')])
@@ -3893,6 +4741,16 @@
'uint32_t',
[],
is_const=True)
+ ## ccnx-face.h (module 'NDNabstraction'): uint16_t ns3::CcnxFace::GetMetric() const [member function]
+ cls.add_method('GetMetric',
+ 'uint16_t',
+ [],
+ is_const=True, is_virtual=True)
+ ## ccnx-face.h (module 'NDNabstraction'): ns3::Ptr<ns3::Node> ns3::CcnxFace::GetNode() const [member function]
+ cls.add_method('GetNode',
+ 'ns3::Ptr< ns3::Node >',
+ [],
+ is_const=True)
## ccnx-face.h (module 'NDNabstraction'): static ns3::TypeId ns3::CcnxFace::GetTypeId() [member function]
cls.add_method('GetTypeId',
'ns3::TypeId',
@@ -3941,6 +4799,11 @@
cls.add_method('SetId',
'void',
[param('uint32_t', 'id')])
+ ## ccnx-face.h (module 'NDNabstraction'): void ns3::CcnxFace::SetMetric(uint16_t metric) [member function]
+ cls.add_method('SetMetric',
+ 'void',
+ [param('uint16_t', 'metric')],
+ is_virtual=True)
## ccnx-face.h (module 'NDNabstraction'): void ns3::CcnxFace::SetUp(bool up=true) [member function]
cls.add_method('SetUp',
'void',
@@ -4304,6 +5167,11 @@
'std::list< std::string > const &',
[],
is_const=True)
+ ## ccnx-name-components.h (module 'NDNabstraction'): std::string ns3::CcnxNameComponents::GetLastComponent() const [member function]
+ cls.add_method('GetLastComponent',
+ 'std::string',
+ [],
+ is_const=True)
## ccnx-name-components.h (module 'NDNabstraction'): std::list<boost::reference_wrapper<std::string const>, std::allocator<boost::reference_wrapper<std::string const> > > ns3::CcnxNameComponents::GetSubComponents(size_t num) const [member function]
cls.add_method('GetSubComponents',
'std::list< boost::reference_wrapper< std::string const > >',
@@ -4361,6 +5229,27 @@
[param('ns3::CcnxNameComponents const &', 'value')])
return
+def register_Ns3CcnxPathWeightTracer_methods(root_module, cls):
+ ## ccnx-path-weight-tracer.h (module 'NDNabstraction'): ns3::CcnxPathWeightTracer::CcnxPathWeightTracer(ns3::CcnxPathWeightTracer const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::CcnxPathWeightTracer const &', 'arg0')])
+ ## ccnx-path-weight-tracer.h (module 'NDNabstraction'): ns3::CcnxPathWeightTracer::CcnxPathWeightTracer(std::ostream & os, ns3::Ptr<ns3::Node> node) [constructor]
+ cls.add_constructor([param('std::ostream &', 'os'), param('ns3::Ptr< ns3::Node >', 'node')])
+ ## ccnx-path-weight-tracer.h (module 'NDNabstraction'): void ns3::CcnxPathWeightTracer::Connect() [member function]
+ cls.add_method('Connect',
+ 'void',
+ [])
+ ## ccnx-path-weight-tracer.h (module 'NDNabstraction'): static void ns3::CcnxPathWeightTracer::PrintHeader(std::ostream & os) [member function]
+ cls.add_method('PrintHeader',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_static=True)
+ ## ccnx-path-weight-tracer.h (module 'NDNabstraction'): void ns3::CcnxPathWeightTracer::InLocalFace(std::string context, ns3::Ptr<ns3::Node> src, ns3::Ptr<ns3::Node> dst, uint32_t seqno, uint32_t weight) [member function]
+ cls.add_method('InLocalFace',
+ 'void',
+ [param('std::string', 'context'), param('ns3::Ptr< ns3::Node >', 'src'), param('ns3::Ptr< ns3::Node >', 'dst'), param('uint32_t', 'seqno'), param('uint32_t', 'weight')],
+ 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')])
@@ -4440,6 +5329,160 @@
[param('int64_t const &', 'value')])
return
+def register_Ns3Ipv4_methods(root_module, cls):
+ ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4(ns3::Ipv4 const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Ipv4 const &', 'arg0')])
+ ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4() [constructor]
+ cls.add_constructor([])
+ ## ipv4.h (module 'internet'): bool ns3::Ipv4::AddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+ cls.add_method('AddAddress',
+ 'bool',
+ [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): uint32_t ns3::Ipv4::AddInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
+ cls.add_method('AddInterface',
+ 'uint32_t',
+ [param('ns3::Ptr< ns3::NetDevice >', 'device')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): ns3::Ipv4InterfaceAddress ns3::Ipv4::GetAddress(uint32_t interface, uint32_t addressIndex) const [member function]
+ cls.add_method('GetAddress',
+ 'ns3::Ipv4InterfaceAddress',
+ [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): int32_t ns3::Ipv4::GetInterfaceForAddress(ns3::Ipv4Address address) const [member function]
+ cls.add_method('GetInterfaceForAddress',
+ 'int32_t',
+ [param('ns3::Ipv4Address', 'address')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): int32_t ns3::Ipv4::GetInterfaceForDevice(ns3::Ptr<const ns3::NetDevice> device) const [member function]
+ cls.add_method('GetInterfaceForDevice',
+ 'int32_t',
+ [param('ns3::Ptr< ns3::NetDevice const >', 'device')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): int32_t ns3::Ipv4::GetInterfaceForPrefix(ns3::Ipv4Address address, ns3::Ipv4Mask mask) const [member function]
+ cls.add_method('GetInterfaceForPrefix',
+ 'int32_t',
+ [param('ns3::Ipv4Address', 'address'), param('ns3::Ipv4Mask', 'mask')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): uint16_t ns3::Ipv4::GetMetric(uint32_t interface) const [member function]
+ cls.add_method('GetMetric',
+ 'uint16_t',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): uint16_t ns3::Ipv4::GetMtu(uint32_t interface) const [member function]
+ cls.add_method('GetMtu',
+ 'uint16_t',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): uint32_t ns3::Ipv4::GetNAddresses(uint32_t interface) const [member function]
+ cls.add_method('GetNAddresses',
+ 'uint32_t',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): uint32_t ns3::Ipv4::GetNInterfaces() const [member function]
+ cls.add_method('GetNInterfaces',
+ 'uint32_t',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv4::GetNetDevice(uint32_t interface) [member function]
+ cls.add_method('GetNetDevice',
+ 'ns3::Ptr< ns3::NetDevice >',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
+ cls.add_method('GetRoutingProtocol',
+ 'ns3::Ptr< ns3::Ipv4RoutingProtocol >',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): static ns3::TypeId ns3::Ipv4::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::Ipv4L4Protocol> protocol) [member function]
+ cls.add_method('Insert',
+ 'void',
+ [param('ns3::Ptr< ns3::Ipv4L4Protocol >', 'protocol')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
+ cls.add_method('IsDestinationAddress',
+ 'bool',
+ [param('ns3::Ipv4Address', 'address'), param('uint32_t', 'iif')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsForwarding(uint32_t interface) const [member function]
+ cls.add_method('IsForwarding',
+ 'bool',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsUp(uint32_t interface) const [member function]
+ cls.add_method('IsUp',
+ 'bool',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
+ cls.add_method('RemoveAddress',
+ 'bool',
+ [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
+ cls.add_method('SelectSourceAddress',
+ 'ns3::Ipv4Address',
+ [param('ns3::Ptr< ns3::NetDevice const >', 'device'), param('ns3::Ipv4Address', 'dst'), param('ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e', 'scope')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): void ns3::Ipv4::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+ cls.add_method('Send',
+ 'void',
+ [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): void ns3::Ipv4::SetDown(uint32_t interface) [member function]
+ cls.add_method('SetDown',
+ 'void',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): void ns3::Ipv4::SetForwarding(uint32_t interface, bool val) [member function]
+ cls.add_method('SetForwarding',
+ 'void',
+ [param('uint32_t', 'interface'), param('bool', 'val')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): void ns3::Ipv4::SetMetric(uint32_t interface, uint16_t metric) [member function]
+ cls.add_method('SetMetric',
+ 'void',
+ [param('uint32_t', 'interface'), param('uint16_t', 'metric')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): void ns3::Ipv4::SetRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol) [member function]
+ cls.add_method('SetRoutingProtocol',
+ 'void',
+ [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): void ns3::Ipv4::SetUp(uint32_t interface) [member function]
+ cls.add_method('SetUp',
+ 'void',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
+ cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
+ ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
+ cls.add_method('GetIpForward',
+ 'bool',
+ [],
+ is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+ ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetWeakEsModel() const [member function]
+ cls.add_method('GetWeakEsModel',
+ 'bool',
+ [],
+ is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+ ## ipv4.h (module 'internet'): void ns3::Ipv4::SetIpForward(bool forward) [member function]
+ cls.add_method('SetIpForward',
+ 'void',
+ [param('bool', 'forward')],
+ is_pure_virtual=True, visibility='private', is_virtual=True)
+ ## ipv4.h (module 'internet'): void ns3::Ipv4::SetWeakEsModel(bool model) [member function]
+ cls.add_method('SetWeakEsModel',
+ 'void',
+ [param('bool', 'model')],
+ is_pure_virtual=True, visibility='private', is_virtual=True)
+ return
+
def register_Ns3Ipv4AddressChecker_methods(root_module, cls):
## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker::Ipv4AddressChecker() [constructor]
cls.add_constructor([])
@@ -4480,6 +5523,312 @@
[param('ns3::Ipv4Address const &', 'value')])
return
+def register_Ns3Ipv4AppTracer_methods(root_module, cls):
+ cls.add_output_stream_operator()
+ ## ipv4-app-tracer.h (module 'NDNabstraction'): ns3::Ipv4AppTracer::Ipv4AppTracer(ns3::Ipv4AppTracer const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Ipv4AppTracer const &', 'arg0')])
+ ## ipv4-app-tracer.h (module 'NDNabstraction'): ns3::Ipv4AppTracer::Ipv4AppTracer(ns3::Ptr<ns3::Node> node, std::string const & appId="*") [constructor]
+ cls.add_constructor([param('ns3::Ptr< ns3::Node >', 'node'), param('std::string const &', 'appId', default_value='"*"')])
+ ## ipv4-app-tracer.h (module 'NDNabstraction'): void ns3::Ipv4AppTracer::Connect() [member function]
+ cls.add_method('Connect',
+ 'void',
+ [])
+ ## ipv4-app-tracer.h (module 'NDNabstraction'): void ns3::Ipv4AppTracer::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)
+ ## ipv4-app-tracer.h (module 'NDNabstraction'): void ns3::Ipv4AppTracer::PrintHeader(std::ostream & os) const [member function]
+ cls.add_method('PrintHeader',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4-app-tracer.h (module 'NDNabstraction'): void ns3::Ipv4AppTracer::Rx(std::string context, ns3::Ipv4Header const & arg1, ns3::Ptr<const ns3::Packet> arg2, uint32_t arg3) [member function]
+ cls.add_method('Rx',
+ 'void',
+ [param('std::string', 'context'), param('ns3::Ipv4Header const &', 'arg1'), param('ns3::Ptr< ns3::Packet const >', 'arg2'), param('uint32_t', 'arg3')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-app-tracer.h (module 'NDNabstraction'): void ns3::Ipv4AppTracer::Tx(std::string context, ns3::Ipv4Header const & arg1, ns3::Ptr<const ns3::Packet> arg2, uint32_t arg3) [member function]
+ cls.add_method('Tx',
+ 'void',
+ [param('std::string', 'context'), param('ns3::Ipv4Header const &', 'arg1'), param('ns3::Ptr< ns3::Packet const >', 'arg2'), param('uint32_t', 'arg3')],
+ is_pure_virtual=True, is_virtual=True)
+ return
+
+def register_Ns3Ipv4L3Protocol_methods(root_module, cls):
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::Ipv4L3Protocol() [constructor]
+ cls.add_constructor([])
+ ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::AddAddress(uint32_t i, ns3::Ipv4InterfaceAddress address) [member function]
+ cls.add_method('AddAddress',
+ 'bool',
+ [param('uint32_t', 'i'), param('ns3::Ipv4InterfaceAddress', 'address')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv4L3Protocol::AddInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
+ cls.add_method('AddInterface',
+ 'uint32_t',
+ [param('ns3::Ptr< ns3::NetDevice >', 'device')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::Ipv4L3Protocol::CreateRawSocket() [member function]
+ cls.add_method('CreateRawSocket',
+ 'ns3::Ptr< ns3::Socket >',
+ [])
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DeleteRawSocket(ns3::Ptr<ns3::Socket> socket) [member function]
+ cls.add_method('DeleteRawSocket',
+ 'void',
+ [param('ns3::Ptr< ns3::Socket >', 'socket')])
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4InterfaceAddress ns3::Ipv4L3Protocol::GetAddress(uint32_t interfaceIndex, uint32_t addressIndex) const [member function]
+ cls.add_method('GetAddress',
+ 'ns3::Ipv4InterfaceAddress',
+ [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4Interface> ns3::Ipv4L3Protocol::GetInterface(uint32_t i) const [member function]
+ cls.add_method('GetInterface',
+ 'ns3::Ptr< ns3::Ipv4Interface >',
+ [param('uint32_t', 'i')],
+ is_const=True)
+ ## ipv4-l3-protocol.h (module 'internet'): int32_t ns3::Ipv4L3Protocol::GetInterfaceForAddress(ns3::Ipv4Address addr) const [member function]
+ cls.add_method('GetInterfaceForAddress',
+ 'int32_t',
+ [param('ns3::Ipv4Address', 'addr')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): int32_t ns3::Ipv4L3Protocol::GetInterfaceForDevice(ns3::Ptr<const ns3::NetDevice> device) const [member function]
+ cls.add_method('GetInterfaceForDevice',
+ 'int32_t',
+ [param('ns3::Ptr< ns3::NetDevice const >', 'device')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): int32_t ns3::Ipv4L3Protocol::GetInterfaceForPrefix(ns3::Ipv4Address addr, ns3::Ipv4Mask mask) const [member function]
+ cls.add_method('GetInterfaceForPrefix',
+ 'int32_t',
+ [param('ns3::Ipv4Address', 'addr'), param('ns3::Ipv4Mask', 'mask')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): uint16_t ns3::Ipv4L3Protocol::GetMetric(uint32_t i) const [member function]
+ cls.add_method('GetMetric',
+ 'uint16_t',
+ [param('uint32_t', 'i')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): uint16_t ns3::Ipv4L3Protocol::GetMtu(uint32_t i) const [member function]
+ cls.add_method('GetMtu',
+ 'uint16_t',
+ [param('uint32_t', 'i')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv4L3Protocol::GetNAddresses(uint32_t interface) const [member function]
+ cls.add_method('GetNAddresses',
+ 'uint32_t',
+ [param('uint32_t', 'interface')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv4L3Protocol::GetNInterfaces() const [member function]
+ cls.add_method('GetNInterfaces',
+ 'uint32_t',
+ [],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv4L3Protocol::GetNetDevice(uint32_t i) [member function]
+ cls.add_method('GetNetDevice',
+ 'ns3::Ptr< ns3::NetDevice >',
+ [param('uint32_t', 'i')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4L4Protocol> ns3::Ipv4L3Protocol::GetProtocol(int protocolNumber) const [member function]
+ cls.add_method('GetProtocol',
+ 'ns3::Ptr< ns3::Ipv4L4Protocol >',
+ [param('int', 'protocolNumber')],
+ is_const=True)
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4L3Protocol::GetRoutingProtocol() const [member function]
+ cls.add_method('GetRoutingProtocol',
+ 'ns3::Ptr< ns3::Ipv4RoutingProtocol >',
+ [],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): static ns3::TypeId ns3::Ipv4L3Protocol::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Insert(ns3::Ptr<ns3::Ipv4L4Protocol> protocol) [member function]
+ cls.add_method('Insert',
+ 'void',
+ [param('ns3::Ptr< ns3::Ipv4L4Protocol >', 'protocol')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
+ cls.add_method('IsDestinationAddress',
+ 'bool',
+ [param('ns3::Ipv4Address', 'address'), param('uint32_t', 'iif')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsForwarding(uint32_t i) const [member function]
+ cls.add_method('IsForwarding',
+ 'bool',
+ [param('uint32_t', 'i')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsUp(uint32_t i) const [member function]
+ cls.add_method('IsUp',
+ 'bool',
+ [param('uint32_t', 'i')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<const ns3::Packet> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
+ cls.add_method('Receive',
+ 'void',
+ [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Packet const >', 'p'), param('uint16_t', 'protocol'), param('ns3::Address const &', 'from'), param('ns3::Address const &', 'to'), param('ns3::NetDevice::PacketType', 'packetType')])
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::Ipv4L4Protocol> protocol) [member function]
+ cls.add_method('Remove',
+ 'void',
+ [param('ns3::Ptr< ns3::Ipv4L4Protocol >', 'protocol')])
+ ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
+ cls.add_method('RemoveAddress',
+ 'bool',
+ [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
+ cls.add_method('SelectSourceAddress',
+ 'ns3::Ipv4Address',
+ [param('ns3::Ptr< ns3::NetDevice const >', 'device'), param('ns3::Ipv4Address', 'dst'), param('ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e', 'scope')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+ cls.add_method('Send',
+ 'void',
+ [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SendWithHeader(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Header ipHeader, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+ cls.add_method('SendWithHeader',
+ 'void',
+ [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Header', 'ipHeader'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetDefaultTtl(uint8_t ttl) [member function]
+ cls.add_method('SetDefaultTtl',
+ 'void',
+ [param('uint8_t', 'ttl')])
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetDown(uint32_t i) [member function]
+ cls.add_method('SetDown',
+ 'void',
+ [param('uint32_t', 'i')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetForwarding(uint32_t i, bool val) [member function]
+ cls.add_method('SetForwarding',
+ 'void',
+ [param('uint32_t', 'i'), param('bool', 'val')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetMetric(uint32_t i, uint16_t metric) [member function]
+ cls.add_method('SetMetric',
+ 'void',
+ [param('uint32_t', 'i'), param('uint16_t', 'metric')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+ cls.add_method('SetNode',
+ 'void',
+ [param('ns3::Ptr< ns3::Node >', 'node')])
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol) [member function]
+ cls.add_method('SetRoutingProtocol',
+ 'void',
+ [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetUp(uint32_t i) [member function]
+ cls.add_method('SetUp',
+ 'void',
+ [param('uint32_t', 'i')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::PROT_NUMBER [variable]
+ cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DoDispose() [member function]
+ cls.add_method('DoDispose',
+ 'void',
+ [],
+ visibility='protected', is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::NotifyNewAggregate() [member function]
+ cls.add_method('NotifyNewAggregate',
+ 'void',
+ [],
+ visibility='protected', is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::GetIpForward() const [member function]
+ cls.add_method('GetIpForward',
+ 'bool',
+ [],
+ is_const=True, visibility='private', is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::GetWeakEsModel() const [member function]
+ cls.add_method('GetWeakEsModel',
+ 'bool',
+ [],
+ is_const=True, visibility='private', is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetIpForward(bool forward) [member function]
+ cls.add_method('SetIpForward',
+ 'void',
+ [param('bool', 'forward')],
+ visibility='private', is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetWeakEsModel(bool model) [member function]
+ cls.add_method('SetWeakEsModel',
+ 'void',
+ [param('bool', 'model')],
+ visibility='private', is_virtual=True)
+ return
+
+def register_Ns3Ipv4L3Tracer_methods(root_module, cls):
+ cls.add_output_stream_operator()
+ ## ipv4-l3-tracer.h (module 'NDNabstraction'): ns3::Ipv4L3Tracer::Ipv4L3Tracer(ns3::Ipv4L3Tracer const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Ipv4L3Tracer const &', 'arg0')])
+ ## ipv4-l3-tracer.h (module 'NDNabstraction'): ns3::Ipv4L3Tracer::Ipv4L3Tracer(ns3::Ptr<ns3::Node> node) [constructor]
+ cls.add_constructor([param('ns3::Ptr< ns3::Node >', 'node')])
+ ## ipv4-l3-tracer.h (module 'NDNabstraction'): void ns3::Ipv4L3Tracer::Connect() [member function]
+ cls.add_method('Connect',
+ 'void',
+ [])
+ ## ipv4-l3-tracer.h (module 'NDNabstraction'): void ns3::Ipv4L3Tracer::Drop(std::string context, ns3::Ipv4Header const & arg1, ns3::Ptr<const ns3::Packet> arg2, ns3::Ipv4L3Protocol::DropReason arg3, ns3::Ptr<ns3::Ipv4> arg4, uint32_t arg5) [member function]
+ cls.add_method('Drop',
+ 'void',
+ [param('std::string', 'context'), param('ns3::Ipv4Header const &', 'arg1'), param('ns3::Ptr< ns3::Packet const >', 'arg2'), param('ns3::Ipv4L3Protocol::DropReason', 'arg3'), param('ns3::Ptr< ns3::Ipv4 >', 'arg4'), param('uint32_t', 'arg5')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-l3-tracer.h (module 'NDNabstraction'): void ns3::Ipv4L3Tracer::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)
+ ## ipv4-l3-tracer.h (module 'NDNabstraction'): void ns3::Ipv4L3Tracer::PrintHeader(std::ostream & os) const [member function]
+ cls.add_method('PrintHeader',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4-l3-tracer.h (module 'NDNabstraction'): void ns3::Ipv4L3Tracer::Rx(std::string context, ns3::Ptr<const ns3::Packet> arg1, ns3::Ptr<ns3::Ipv4> arg2, uint32_t arg3) [member function]
+ cls.add_method('Rx',
+ 'void',
+ [param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'arg1'), param('ns3::Ptr< ns3::Ipv4 >', 'arg2'), param('uint32_t', 'arg3')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-l3-tracer.h (module 'NDNabstraction'): void ns3::Ipv4L3Tracer::Tx(std::string context, ns3::Ptr<const ns3::Packet> arg1, ns3::Ptr<ns3::Ipv4> arg2, uint32_t arg3) [member function]
+ cls.add_method('Tx',
+ 'void',
+ [param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'arg1'), param('ns3::Ptr< ns3::Ipv4 >', 'arg2'), param('uint32_t', 'arg3')],
+ is_pure_virtual=True, is_virtual=True)
+ return
+
+def register_Ns3Ipv4L4Protocol_methods(root_module, cls):
+ ## ipv4-l4-protocol.h (module 'internet'): ns3::Ipv4L4Protocol::Ipv4L4Protocol() [constructor]
+ cls.add_constructor([])
+ ## ipv4-l4-protocol.h (module 'internet'): ns3::Ipv4L4Protocol::Ipv4L4Protocol(ns3::Ipv4L4Protocol const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Ipv4L4Protocol const &', 'arg0')])
+ ## ipv4-l4-protocol.h (module 'internet'): ns3::Callback<void,ns3::Ptr<ns3::Packet>,ns3::Ipv4Address,ns3::Ipv4Address,unsigned char,ns3::Ptr<ns3::Ipv4Route>,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ns3::Ipv4L4Protocol::GetDownTarget() const [member function]
+ cls.add_method('GetDownTarget',
+ 'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Ipv4Address, ns3::Ipv4Address, unsigned char, ns3::Ptr< ns3::Ipv4Route >, ns3::empty, ns3::empty, ns3::empty, ns3::empty >',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4-l4-protocol.h (module 'internet'): int ns3::Ipv4L4Protocol::GetProtocolNumber() const [member function]
+ cls.add_method('GetProtocolNumber',
+ 'int',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4-l4-protocol.h (module 'internet'): static ns3::TypeId ns3::Ipv4L4Protocol::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## ipv4-l4-protocol.h (module 'internet'): ns3::Ipv4L4Protocol::RxStatus ns3::Ipv4L4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
+ cls.add_method('Receive',
+ 'ns3::Ipv4L4Protocol::RxStatus',
+ [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-l4-protocol.h (module 'internet'): void ns3::Ipv4L4Protocol::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',
+ 'void',
+ [param('ns3::Ipv4Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv4Address', 'payloadSource'), param('ns3::Ipv4Address', 'payloadDestination'), param('uint8_t const *', 'payload')],
+ is_virtual=True)
+ ## ipv4-l4-protocol.h (module 'internet'): void ns3::Ipv4L4Protocol::SetDownTarget(ns3::Callback<void,ns3::Ptr<ns3::Packet>,ns3::Ipv4Address,ns3::Ipv4Address,unsigned char,ns3::Ptr<ns3::Ipv4Route>,ns3::empty,ns3::empty,ns3::empty,ns3::empty> cb) [member function]
+ cls.add_method('SetDownTarget',
+ 'void',
+ [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Ipv4Address, ns3::Ipv4Address, unsigned char, ns3::Ptr< ns3::Ipv4Route >, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')],
+ is_pure_virtual=True, is_virtual=True)
+ return
+
def register_Ns3Ipv4MaskChecker_methods(root_module, cls):
## ipv4-address.h (module 'network'): ns3::Ipv4MaskChecker::Ipv4MaskChecker() [constructor]
cls.add_constructor([])
@@ -4520,6 +5869,154 @@
[param('ns3::Ipv4Mask const &', 'value')])
return
+def register_Ns3Ipv4MulticastRoute_methods(root_module, cls):
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute::Ipv4MulticastRoute(ns3::Ipv4MulticastRoute const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Ipv4MulticastRoute const &', 'arg0')])
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute::Ipv4MulticastRoute() [constructor]
+ cls.add_constructor([])
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4MulticastRoute::GetGroup() const [member function]
+ cls.add_method('GetGroup',
+ 'ns3::Ipv4Address',
+ [],
+ is_const=True)
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4MulticastRoute::GetOrigin() const [member function]
+ cls.add_method('GetOrigin',
+ 'ns3::Ipv4Address',
+ [],
+ is_const=True)
+ ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
+ cls.add_method('GetOutputTtl',
+ 'uint32_t',
+ [param('uint32_t', 'oif')],
+ deprecated=True)
+ ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
+ cls.add_method('GetOutputTtlMap',
+ 'std::map< unsigned int, unsigned int >',
+ [],
+ is_const=True)
+ ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetParent() const [member function]
+ cls.add_method('GetParent',
+ 'uint32_t',
+ [],
+ is_const=True)
+ ## ipv4-route.h (module 'internet'): void ns3::Ipv4MulticastRoute::SetGroup(ns3::Ipv4Address const group) [member function]
+ cls.add_method('SetGroup',
+ 'void',
+ [param('ns3::Ipv4Address const', 'group')])
+ ## ipv4-route.h (module 'internet'): void ns3::Ipv4MulticastRoute::SetOrigin(ns3::Ipv4Address const origin) [member function]
+ cls.add_method('SetOrigin',
+ 'void',
+ [param('ns3::Ipv4Address const', 'origin')])
+ ## ipv4-route.h (module 'internet'): void ns3::Ipv4MulticastRoute::SetOutputTtl(uint32_t oif, uint32_t ttl) [member function]
+ cls.add_method('SetOutputTtl',
+ 'void',
+ [param('uint32_t', 'oif'), param('uint32_t', 'ttl')])
+ ## ipv4-route.h (module 'internet'): void ns3::Ipv4MulticastRoute::SetParent(uint32_t iif) [member function]
+ cls.add_method('SetParent',
+ 'void',
+ [param('uint32_t', 'iif')])
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute::MAX_INTERFACES [variable]
+ cls.add_static_attribute('MAX_INTERFACES', 'uint32_t const', is_const=True)
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute::MAX_TTL [variable]
+ cls.add_static_attribute('MAX_TTL', 'uint32_t const', is_const=True)
+ return
+
+def register_Ns3Ipv4Route_methods(root_module, cls):
+ cls.add_output_stream_operator()
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4Route::Ipv4Route(ns3::Ipv4Route const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Ipv4Route const &', 'arg0')])
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4Route::Ipv4Route() [constructor]
+ cls.add_constructor([])
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Route::GetDestination() const [member function]
+ cls.add_method('GetDestination',
+ 'ns3::Ipv4Address',
+ [],
+ is_const=True)
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Route::GetGateway() const [member function]
+ cls.add_method('GetGateway',
+ 'ns3::Ipv4Address',
+ [],
+ is_const=True)
+ ## ipv4-route.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv4Route::GetOutputDevice() const [member function]
+ cls.add_method('GetOutputDevice',
+ 'ns3::Ptr< ns3::NetDevice >',
+ [],
+ is_const=True)
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Route::GetSource() const [member function]
+ cls.add_method('GetSource',
+ 'ns3::Ipv4Address',
+ [],
+ is_const=True)
+ ## ipv4-route.h (module 'internet'): void ns3::Ipv4Route::SetDestination(ns3::Ipv4Address dest) [member function]
+ cls.add_method('SetDestination',
+ 'void',
+ [param('ns3::Ipv4Address', 'dest')])
+ ## ipv4-route.h (module 'internet'): void ns3::Ipv4Route::SetGateway(ns3::Ipv4Address gw) [member function]
+ cls.add_method('SetGateway',
+ 'void',
+ [param('ns3::Ipv4Address', 'gw')])
+ ## ipv4-route.h (module 'internet'): void ns3::Ipv4Route::SetOutputDevice(ns3::Ptr<ns3::NetDevice> outputDevice) [member function]
+ cls.add_method('SetOutputDevice',
+ 'void',
+ [param('ns3::Ptr< ns3::NetDevice >', 'outputDevice')])
+ ## ipv4-route.h (module 'internet'): void ns3::Ipv4Route::SetSource(ns3::Ipv4Address src) [member function]
+ cls.add_method('SetSource',
+ 'void',
+ [param('ns3::Ipv4Address', 'src')])
+ return
+
+def register_Ns3Ipv4RoutingProtocol_methods(root_module, cls):
+ ## ipv4-routing-protocol.h (module 'internet'): ns3::Ipv4RoutingProtocol::Ipv4RoutingProtocol() [constructor]
+ cls.add_constructor([])
+ ## ipv4-routing-protocol.h (module 'internet'): ns3::Ipv4RoutingProtocol::Ipv4RoutingProtocol(ns3::Ipv4RoutingProtocol const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Ipv4RoutingProtocol const &', 'arg0')])
+ ## ipv4-routing-protocol.h (module 'internet'): static ns3::TypeId ns3::Ipv4RoutingProtocol::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::NotifyAddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+ cls.add_method('NotifyAddAddress',
+ 'void',
+ [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::NotifyInterfaceDown(uint32_t interface) [member function]
+ cls.add_method('NotifyInterfaceDown',
+ 'void',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::NotifyInterfaceUp(uint32_t interface) [member function]
+ cls.add_method('NotifyInterfaceUp',
+ 'void',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::NotifyRemoveAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+ cls.add_method('NotifyRemoveAddress',
+ 'void',
+ [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::PrintRoutingTable(ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+ cls.add_method('PrintRoutingTable',
+ 'void',
+ [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4-routing-protocol.h (module 'internet'): bool ns3::Ipv4RoutingProtocol::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+ cls.add_method('RouteInput',
+ 'bool',
+ [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-routing-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4RoutingProtocol::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
+ cls.add_method('RouteOutput',
+ 'ns3::Ptr< ns3::Ipv4Route >',
+ [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice >', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::SetIpv4(ns3::Ptr<ns3::Ipv4> ipv4) [member function]
+ cls.add_method('SetIpv4',
+ 'void',
+ [param('ns3::Ptr< ns3::Ipv4 >', 'ipv4')],
+ is_pure_virtual=True, is_virtual=True)
+ return
+
def register_Ns3Ipv6AddressChecker_methods(root_module, cls):
## ipv6-address.h (module 'network'): ns3::Ipv6AddressChecker::Ipv6AddressChecker() [constructor]
cls.add_constructor([])
@@ -4955,6 +6452,19 @@
[param('ns3::ObjectFactory const &', 'value')])
return
+def register_Ns3OutputStreamWrapper_methods(root_module, cls):
+ ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(ns3::OutputStreamWrapper const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::OutputStreamWrapper const &', 'arg0')])
+ ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(std::string filename, std::_Ios_Openmode filemode) [constructor]
+ cls.add_constructor([param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode')])
+ ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(std::ostream * os) [constructor]
+ cls.add_constructor([param('std::ostream *', 'os')])
+ ## output-stream-wrapper.h (module 'network'): std::ostream * ns3::OutputStreamWrapper::GetStream() [member function]
+ cls.add_method('GetStream',
+ 'std::ostream *',
+ [])
+ return
+
def register_Ns3Packet_methods(root_module, cls):
cls.add_output_stream_operator()
## packet.h (module 'network'): ns3::Packet::Packet() [constructor]
@@ -4980,11 +6490,10 @@
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]
+ ## packet.h (module 'network'): void ns3::Packet::AddPacketTag(ns3::Ptr<const ns3::Tag> tag) [member function]
cls.add_method('AddPacketTag',
'void',
- [param('ns3::Tag const &', 'tag')],
- is_const=True)
+ [param('ns3::Ptr< ns3::Tag const >', 'tag')])
## packet.h (module 'network'): void ns3::Packet::AddPaddingAtEnd(uint32_t size) [member function]
cls.add_method('AddPaddingAtEnd',
'void',
@@ -5043,11 +6552,6 @@
'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',
@@ -5073,10 +6577,10 @@
'uint32_t',
[param('ns3::Header &', 'header')],
is_const=True)
- ## packet.h (module 'network'): bool ns3::Packet::PeekPacketTag(ns3::Tag & tag) const [member function]
+ ## packet.h (module 'network'): ns3::Ptr<const ns3::Tag> ns3::Packet::PeekPacketTag(ns3::TypeId tagType) const [member function]
cls.add_method('PeekPacketTag',
- 'bool',
- [param('ns3::Tag &', 'tag')],
+ 'ns3::Ptr< ns3::Tag const >',
+ [param('ns3::TypeId', 'tagType')],
is_const=True)
## packet.h (module 'network'): uint32_t ns3::Packet::PeekTrailer(ns3::Trailer & trailer) [member function]
cls.add_method('PeekTrailer',
@@ -5117,10 +6621,10 @@
cls.add_method('RemoveHeader',
'uint32_t',
[param('ns3::Header &', 'header')])
- ## packet.h (module 'network'): bool ns3::Packet::RemovePacketTag(ns3::Tag & tag) [member function]
+ ## packet.h (module 'network'): ns3::Ptr<const ns3::Tag> ns3::Packet::RemovePacketTag(ns3::TypeId tagType) [member function]
cls.add_method('RemovePacketTag',
- 'bool',
- [param('ns3::Tag &', 'tag')])
+ 'ns3::Ptr< ns3::Tag const >',
+ [param('ns3::TypeId', 'tagType')])
## packet.h (module 'network'): uint32_t ns3::Packet::RemoveTrailer(ns3::Trailer & trailer) [member function]
cls.add_method('RemoveTrailer',
'uint32_t',
@@ -5192,11 +6696,148 @@
cls.add_method('Commit',
'void',
[])
- ## rocketfuel-weights-reader.h (module 'NDNabstraction'): void ns3::RocketfuelWeightsReader::SavePositions(std::string const & file) const [member function]
- cls.add_method('SavePositions',
+ return
+
+def register_Ns3SocketAddressTag_methods(root_module, cls):
+ ## socket.h (module 'network'): ns3::SocketAddressTag::SocketAddressTag(ns3::SocketAddressTag const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::SocketAddressTag const &', 'arg0')])
+ ## socket.h (module 'network'): ns3::SocketAddressTag::SocketAddressTag() [constructor]
+ cls.add_constructor([])
+ ## socket.h (module 'network'): void ns3::SocketAddressTag::Deserialize(ns3::TagBuffer i) [member function]
+ cls.add_method('Deserialize',
'void',
- [param('std::string const &', 'file')],
+ [param('ns3::TagBuffer', 'i')],
+ is_virtual=True)
+ ## socket.h (module 'network'): ns3::Address ns3::SocketAddressTag::GetAddress() const [member function]
+ cls.add_method('GetAddress',
+ 'ns3::Address',
+ [],
is_const=True)
+ ## socket.h (module 'network'): ns3::TypeId ns3::SocketAddressTag::GetInstanceTypeId() const [member function]
+ cls.add_method('GetInstanceTypeId',
+ 'ns3::TypeId',
+ [],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): uint32_t ns3::SocketAddressTag::GetSerializedSize() const [member function]
+ cls.add_method('GetSerializedSize',
+ 'uint32_t',
+ [],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): static ns3::TypeId ns3::SocketAddressTag::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## socket.h (module 'network'): void ns3::SocketAddressTag::Print(std::ostream & os) const [member function]
+ cls.add_method('Print',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): void ns3::SocketAddressTag::Serialize(ns3::TagBuffer i) const [member function]
+ cls.add_method('Serialize',
+ 'void',
+ [param('ns3::TagBuffer', 'i')],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): void ns3::SocketAddressTag::SetAddress(ns3::Address addr) [member function]
+ cls.add_method('SetAddress',
+ 'void',
+ [param('ns3::Address', 'addr')])
+ return
+
+def register_Ns3SocketIpTtlTag_methods(root_module, cls):
+ ## socket.h (module 'network'): ns3::SocketIpTtlTag::SocketIpTtlTag(ns3::SocketIpTtlTag const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::SocketIpTtlTag const &', 'arg0')])
+ ## socket.h (module 'network'): ns3::SocketIpTtlTag::SocketIpTtlTag() [constructor]
+ cls.add_constructor([])
+ ## socket.h (module 'network'): void ns3::SocketIpTtlTag::Deserialize(ns3::TagBuffer i) [member function]
+ cls.add_method('Deserialize',
+ 'void',
+ [param('ns3::TagBuffer', 'i')],
+ is_virtual=True)
+ ## socket.h (module 'network'): ns3::TypeId ns3::SocketIpTtlTag::GetInstanceTypeId() const [member function]
+ cls.add_method('GetInstanceTypeId',
+ 'ns3::TypeId',
+ [],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): uint32_t ns3::SocketIpTtlTag::GetSerializedSize() const [member function]
+ cls.add_method('GetSerializedSize',
+ 'uint32_t',
+ [],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): uint8_t ns3::SocketIpTtlTag::GetTtl() const [member function]
+ cls.add_method('GetTtl',
+ 'uint8_t',
+ [],
+ is_const=True)
+ ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpTtlTag::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## socket.h (module 'network'): void ns3::SocketIpTtlTag::Print(std::ostream & os) const [member function]
+ cls.add_method('Print',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): void ns3::SocketIpTtlTag::Serialize(ns3::TagBuffer i) const [member function]
+ cls.add_method('Serialize',
+ 'void',
+ [param('ns3::TagBuffer', 'i')],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): void ns3::SocketIpTtlTag::SetTtl(uint8_t ttl) [member function]
+ cls.add_method('SetTtl',
+ 'void',
+ [param('uint8_t', 'ttl')])
+ return
+
+def register_Ns3SocketSetDontFragmentTag_methods(root_module, cls):
+ ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag::SocketSetDontFragmentTag(ns3::SocketSetDontFragmentTag const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::SocketSetDontFragmentTag const &', 'arg0')])
+ ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag::SocketSetDontFragmentTag() [constructor]
+ cls.add_constructor([])
+ ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Deserialize(ns3::TagBuffer i) [member function]
+ cls.add_method('Deserialize',
+ 'void',
+ [param('ns3::TagBuffer', 'i')],
+ is_virtual=True)
+ ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Disable() [member function]
+ cls.add_method('Disable',
+ 'void',
+ [])
+ ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Enable() [member function]
+ cls.add_method('Enable',
+ 'void',
+ [])
+ ## socket.h (module 'network'): ns3::TypeId ns3::SocketSetDontFragmentTag::GetInstanceTypeId() const [member function]
+ cls.add_method('GetInstanceTypeId',
+ 'ns3::TypeId',
+ [],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): uint32_t ns3::SocketSetDontFragmentTag::GetSerializedSize() const [member function]
+ cls.add_method('GetSerializedSize',
+ 'uint32_t',
+ [],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): static ns3::TypeId ns3::SocketSetDontFragmentTag::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## socket.h (module 'network'): bool ns3::SocketSetDontFragmentTag::IsEnabled() const [member function]
+ cls.add_method('IsEnabled',
+ 'bool',
+ [],
+ is_const=True)
+ ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Print(std::ostream & os) const [member function]
+ cls.add_method('Print',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Serialize(ns3::TagBuffer i) const [member function]
+ cls.add_method('Serialize',
+ 'void',
+ [param('ns3::TagBuffer', 'i')],
+ is_const=True, is_virtual=True)
return
def register_Ns3SpringMobilityModel_methods(root_module, cls):
@@ -5235,6 +6876,17 @@
visibility='private', is_virtual=True)
return
+def register_Ns3TcpCongestionWindowTracer_methods(root_module, cls):
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): ns3::TcpCongestionWindowTracer::TcpCongestionWindowTracer(ns3::TcpCongestionWindowTracer const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::TcpCongestionWindowTracer const &', 'arg0')])
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): ns3::TcpCongestionWindowTracer::TcpCongestionWindowTracer(std::ostream & os, ns3::Ptr<ns3::Node> node, std::string const & appId="*") [constructor]
+ cls.add_constructor([param('std::ostream &', 'os'), param('ns3::Ptr< ns3::Node >', 'node'), param('std::string const &', 'appId', default_value='"*"')])
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): void ns3::TcpCongestionWindowTracer::Connect() [member function]
+ cls.add_method('Connect',
+ 'void',
+ [])
+ return
+
def register_Ns3TimeChecker_methods(root_module, cls):
## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
cls.add_constructor([])
@@ -5437,6 +7089,10 @@
def register_functions(root_module):
module = root_module
+ ## batches.h (module 'NDNabstraction'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeBatchesChecker() [free function]
+ module.add_function('MakeBatchesChecker',
+ 'ns3::Ptr< ns3::AttributeChecker const >',
+ [])
## ccnx-name-components.h (module 'NDNabstraction'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeCcnxNameComponentsChecker() [free function]
module.add_function('MakeCcnxNameComponentsChecker',
'ns3::Ptr< ns3::AttributeChecker const >',
diff --git a/bindings/modulegen__gcc_LP64.py b/bindings/modulegen__gcc_LP64.py
index 2030e69..0b0cd40 100644
--- a/bindings/modulegen__gcc_LP64.py
+++ b/bindings/modulegen__gcc_LP64.py
@@ -76,6 +76,10 @@
module.add_class('Ipv4Address', import_from_module='ns.network')
## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
root_module['ns3::Ipv4Address'].implicitly_converts_to(root_module['ns3::Address'])
+ ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress [class]
+ module.add_class('Ipv4InterfaceAddress', import_from_module='ns.internet')
+ ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e [enumeration]
+ module.add_enum('InterfaceAddressScope_e', ['HOST', 'LINK', 'GLOBAL'], outer_class=root_module['ns3::Ipv4InterfaceAddress'], import_from_module='ns.internet')
## ipv4-address.h (module 'network'): ns3::Ipv4Mask [class]
module.add_class('Ipv4Mask', import_from_module='ns.network')
## ipv6-address.h (module 'network'): ns3::Ipv6Address [class]
@@ -102,14 +106,6 @@
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'])
## random-variable.h (module 'core'): ns3::RandomVariable [class]
module.add_class('RandomVariable', import_from_module='ns.core')
## random-variable.h (module 'core'): ns3::SeedManager [class]
@@ -120,10 +116,10 @@
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Chunk', 'ns3::ObjectBase', 'ns3::DefaultDeleter<ns3::Chunk>'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+ ## simulator.h (module 'core'): ns3::Simulator [class]
+ module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
## spring-mobility-helper.h (module 'NDNabstraction'): ns3::SpringMobilityHelper [class]
module.add_class('SpringMobilityHelper')
- ## 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')
## random-variable.h (module 'core'): ns3::TriangularVariable [class]
@@ -170,6 +166,12 @@
module.add_class('Header', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
## random-variable.h (module 'core'): ns3::IntEmpiricalVariable [class]
module.add_class('IntEmpiricalVariable', import_from_module='ns.core', parent=root_module['ns3::EmpiricalVariable'])
+ ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
+ module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
+ ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
+ module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+ ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
+ module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
## random-variable.h (module 'core'): ns3::LogNormalVariable [class]
module.add_class('LogNormalVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariable'])
## random-variable.h (module 'core'): ns3::NormalVariable [class]
@@ -198,16 +200,38 @@
module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::CcnxL3Tracer', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CcnxL3Tracer>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxNameComponents, ns3::empty, ns3::DefaultDeleter<ns3::CcnxNameComponents> > [class]
module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::CcnxNameComponents', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CcnxNameComponents>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxPathWeightTracer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPathWeightTracer> > [class]
+ module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::CcnxPathWeightTracer', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CcnxPathWeightTracer>'], parent=root_module['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::Ipv4AppTracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4AppTracer> > [class]
+ module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::Ipv4AppTracer', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4AppTracer>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4L3Tracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4L3Tracer> > [class]
+ module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::Ipv4L3Tracer', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4L3Tracer>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
+ module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
+ module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4Route', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4Route>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
+ module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::OutputStreamWrapper', 'ns3::empty', 'ns3::DefaultDeleter<ns3::OutputStreamWrapper>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Packet', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Packet>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> > [class]
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TopologyReader', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TopologyReader>'], parent=root_module['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'))
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::WindowTracer, ns3::empty, ns3::DefaultDeleter<ns3::WindowTracer> > [class]
+ module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::WindowTracer', 'ns3::empty', 'ns3::DefaultDeleter<ns3::WindowTracer>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+ ## socket.h (module 'network'): ns3::Socket [class]
+ module.add_class('Socket', import_from_module='ns.network', parent=root_module['ns3::Object'])
+ ## socket.h (module 'network'): ns3::Socket::SocketErrno [enumeration]
+ module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+ ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
+ module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+ ## tag.h (module 'network'): ns3::Tag [class]
+ module.add_class('Tag', import_from_module='ns.network', 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]
@@ -222,6 +246,12 @@
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'])
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::WeightsPathStretchTag [class]
+ module.add_class('WeightsPathStretchTag', parent=root_module['ns3::Tag'])
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::WeightsPathStretchTag::NodeWeightPair [struct]
+ module.add_class('NodeWeightPair', outer_class=root_module['ns3::WeightsPathStretchTag'])
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): ns3::WindowTracer [class]
+ module.add_class('WindowTracer', parent=root_module['ns3::SimpleRefCount< ns3::WindowTracer, ns3::empty, ns3::DefaultDeleter<ns3::WindowTracer> >'])
## annotated-topology-reader.h (module 'NDNabstraction'): ns3::AnnotatedTopologyReader [class]
module.add_class('AnnotatedTopologyReader', parent=root_module['ns3::TopologyReader'])
## application.h (module 'network'): ns3::Application [class]
@@ -232,6 +262,10 @@
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> >'])
+ ## batches.h (module 'NDNabstraction'): ns3::BatchesChecker [class]
+ module.add_class('BatchesChecker', parent=root_module['ns3::AttributeChecker'])
+ ## batches.h (module 'NDNabstraction'): ns3::BatchesValue [class]
+ module.add_class('BatchesValue', parent=root_module['ns3::AttributeValue'])
## callback.h (module 'core'): ns3::CallbackChecker [class]
module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
## callback.h (module 'core'): ns3::CallbackImplBase [class]
@@ -246,6 +280,8 @@
module.add_class('CcnxApp', parent=root_module['ns3::Application'])
## ccnx-app-tracer.h (module 'NDNabstraction'): ns3::CcnxAppTracer [class]
module.add_class('CcnxAppTracer', parent=root_module['ns3::SimpleRefCount< ns3::CcnxAppTracer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxAppTracer> >'])
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): ns3::CcnxConsumerWindowTracer [class]
+ module.add_class('CcnxConsumerWindowTracer', parent=root_module['ns3::WindowTracer'])
## ccnx-content-object-header.h (module 'NDNabstraction'): ns3::CcnxContentObjectHeader [class]
module.add_class('CcnxContentObjectHeader', parent=root_module['ns3::Header'])
## ccnx-content-object-header.h (module 'NDNabstraction'): ns3::CcnxContentObjectTail [class]
@@ -272,20 +308,42 @@
module.add_class('CcnxNameComponentsChecker', parent=root_module['ns3::AttributeChecker'])
## ccnx-name-components.h (module 'NDNabstraction'): ns3::CcnxNameComponentsValue [class]
module.add_class('CcnxNameComponentsValue', parent=root_module['ns3::AttributeValue'])
+ ## ccnx-path-weight-tracer.h (module 'NDNabstraction'): ns3::CcnxPathWeightTracer [class]
+ module.add_class('CcnxPathWeightTracer', parent=root_module['ns3::SimpleRefCount< ns3::CcnxPathWeightTracer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPathWeightTracer> >'])
## 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> >'])
## integer.h (module 'core'): ns3::IntegerValue [class]
module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+ ## ipv4.h (module 'internet'): ns3::Ipv4 [class]
+ module.add_class('Ipv4', import_from_module='ns.internet', parent=root_module['ns3::Object'])
## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
module.add_class('Ipv4AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue [class]
module.add_class('Ipv4AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+ ## ipv4-app-tracer.h (module 'NDNabstraction'): ns3::Ipv4AppTracer [class]
+ module.add_class('Ipv4AppTracer', parent=root_module['ns3::SimpleRefCount< ns3::Ipv4AppTracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4AppTracer> >'])
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol [class]
+ module.add_class('Ipv4L3Protocol', import_from_module='ns.internet', parent=root_module['ns3::Ipv4'])
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::DropReason [enumeration]
+ module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_BAD_CHECKSUM', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_FRAGMENT_TIMEOUT'], outer_class=root_module['ns3::Ipv4L3Protocol'], import_from_module='ns.internet')
+ ## ipv4-l3-tracer.h (module 'NDNabstraction'): ns3::Ipv4L3Tracer [class]
+ module.add_class('Ipv4L3Tracer', parent=root_module['ns3::SimpleRefCount< ns3::Ipv4L3Tracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4L3Tracer> >'])
+ ## ipv4-l4-protocol.h (module 'internet'): ns3::Ipv4L4Protocol [class]
+ module.add_class('Ipv4L4Protocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
+ ## ipv4-l4-protocol.h (module 'internet'): ns3::Ipv4L4Protocol::RxStatus [enumeration]
+ module.add_enum('RxStatus', ['RX_OK', 'RX_CSUM_FAILED', 'RX_ENDPOINT_CLOSED', 'RX_ENDPOINT_UNREACH'], outer_class=root_module['ns3::Ipv4L4Protocol'], import_from_module='ns.internet')
## ipv4-address.h (module 'network'): ns3::Ipv4MaskChecker [class]
module.add_class('Ipv4MaskChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
## ipv4-address.h (module 'network'): ns3::Ipv4MaskValue [class]
module.add_class('Ipv4MaskValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute [class]
+ module.add_class('Ipv4MulticastRoute', import_from_module='ns.internet', parent=root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4Route [class]
+ module.add_class('Ipv4Route', import_from_module='ns.internet', parent=root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
+ ## ipv4-routing-protocol.h (module 'internet'): ns3::Ipv4RoutingProtocol [class]
+ module.add_class('Ipv4RoutingProtocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
## ipv6-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]
@@ -308,6 +366,8 @@
module.add_class('ObjectFactoryChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
## object-factory.h (module 'core'): ns3::ObjectFactoryValue [class]
module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+ ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper [class]
+ module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
## packet.h (module 'network'): ns3::Packet [class]
module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
## random-variable.h (module 'core'): ns3::RandomVariableChecker [class]
@@ -318,8 +378,16 @@
module.add_class('RocketfuelWeightsReader', parent=root_module['ns3::AnnotatedTopologyReader'])
## rocketfuel-weights-reader.h (module 'NDNabstraction'): ns3::RocketfuelWeightsReader [enumeration]
module.add_enum('', ['WEIGHTS', 'LATENCIES', 'POSITIONS'], outer_class=root_module['ns3::RocketfuelWeightsReader'])
+ ## socket.h (module 'network'): ns3::SocketAddressTag [class]
+ module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
+ ## socket.h (module 'network'): ns3::SocketIpTtlTag [class]
+ module.add_class('SocketIpTtlTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
+ ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag [class]
+ module.add_class('SocketSetDontFragmentTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
## spring-mobility-model.h (module 'NDNabstraction'): ns3::SpringMobilityModel [class]
module.add_class('SpringMobilityModel', parent=root_module['ns3::MobilityModel'])
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): ns3::TcpCongestionWindowTracer [class]
+ module.add_class('TcpCongestionWindowTracer', parent=root_module['ns3::WindowTracer'])
## nstime.h (module 'core'): ns3::TimeChecker [class]
module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
## nstime.h (module 'core'): ns3::TimeValue [class]
@@ -341,8 +409,11 @@
## address.h (module 'network'): ns3::AddressValue [class]
module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
module.add_container('std::map< std::string, std::string >', ('std::string', 'std::string'), container_type='map')
+ module.add_container('std::list< ns3::WeightsPathStretchTag::NodeWeightPair >', 'ns3::WeightsPathStretchTag::NodeWeightPair', container_type='list')
+ module.add_container('std::list< ns3::TopologyReader::Link >', 'ns3::TopologyReader::Link', container_type='list')
module.add_container('std::list< boost::reference_wrapper< std::string const > >', 'boost::reference_wrapper< std::basic_string< char, std::char_traits< char >, std::allocator< char > > const >', container_type='list')
module.add_container('std::list< std::string >', 'std::string', container_type='list')
+ module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
typehandlers.add_type_alias('ns3::Vector3DChecker', 'ns3::VectorChecker')
typehandlers.add_type_alias('ns3::Vector3DChecker*', 'ns3::VectorChecker*')
typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
@@ -401,6 +472,7 @@
register_Ns3CcnxUnknownHeaderException_methods(root_module, root_module['ns3::CcnxUnknownHeaderException'])
register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
+ register_Ns3Ipv4InterfaceAddress_methods(root_module, root_module['ns3::Ipv4InterfaceAddress'])
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'])
@@ -412,17 +484,13 @@
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_Ns3RandomVariable_methods(root_module, root_module['ns3::RandomVariable'])
register_Ns3SeedManager_methods(root_module, root_module['ns3::SeedManager'])
register_Ns3SequentialVariable_methods(root_module, root_module['ns3::SequentialVariable'])
register_Ns3SimpleRefCount__Ns3Chunk_Ns3ObjectBase_Ns3DefaultDeleter__lt__ns3Chunk__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Chunk, ns3::ObjectBase, ns3::DefaultDeleter<ns3::Chunk> >'])
register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
+ register_Ns3Simulator_methods(root_module, root_module['ns3::Simulator'])
register_Ns3SpringMobilityHelper_methods(root_module, root_module['ns3::SpringMobilityHelper'])
- register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
register_Ns3TriangularVariable_methods(root_module, root_module['ns3::TriangularVariable'])
register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
@@ -445,6 +513,7 @@
register_Ns3GammaVariable_methods(root_module, root_module['ns3::GammaVariable'])
register_Ns3Header_methods(root_module, root_module['ns3::Header'])
register_Ns3IntEmpiricalVariable_methods(root_module, root_module['ns3::IntEmpiricalVariable'])
+ register_Ns3Ipv4Header_methods(root_module, root_module['ns3::Ipv4Header'])
register_Ns3LogNormalVariable_methods(root_module, root_module['ns3::LogNormalVariable'])
register_Ns3NormalVariable_methods(root_module, root_module['ns3::NormalVariable'])
register_Ns3Object_methods(root_module, root_module['ns3::Object'])
@@ -459,27 +528,42 @@
register_Ns3SimpleRefCount__Ns3CcnxFibEntry_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxFibEntry__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxFibEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFibEntry> >'])
register_Ns3SimpleRefCount__Ns3CcnxL3Tracer_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxL3Tracer__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxL3Tracer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxL3Tracer> >'])
register_Ns3SimpleRefCount__Ns3CcnxNameComponents_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxNameComponents__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxNameComponents, ns3::empty, ns3::DefaultDeleter<ns3::CcnxNameComponents> >'])
+ register_Ns3SimpleRefCount__Ns3CcnxPathWeightTracer_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxPathWeightTracer__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxPathWeightTracer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPathWeightTracer> >'])
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__Ns3Ipv4AppTracer_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4AppTracer__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4AppTracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4AppTracer> >'])
+ register_Ns3SimpleRefCount__Ns3Ipv4L3Tracer_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4L3Tracer__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4L3Tracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4L3Tracer> >'])
+ register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
+ register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
+ register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
register_Ns3SimpleRefCount__Ns3TopologyReader_Ns3Empty_Ns3DefaultDeleter__lt__ns3TopologyReader__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> >'])
register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
+ register_Ns3SimpleRefCount__Ns3WindowTracer_Ns3Empty_Ns3DefaultDeleter__lt__ns3WindowTracer__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::WindowTracer, ns3::empty, ns3::DefaultDeleter<ns3::WindowTracer> >'])
+ register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
+ register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
register_Ns3Time_methods(root_module, root_module['ns3::Time'])
register_Ns3TopologyReader_methods(root_module, root_module['ns3::TopologyReader'])
register_Ns3TopologyReaderLink_methods(root_module, root_module['ns3::TopologyReader::Link'])
register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
+ register_Ns3WeightsPathStretchTag_methods(root_module, root_module['ns3::WeightsPathStretchTag'])
+ register_Ns3WeightsPathStretchTagNodeWeightPair_methods(root_module, root_module['ns3::WeightsPathStretchTag::NodeWeightPair'])
+ register_Ns3WindowTracer_methods(root_module, root_module['ns3::WindowTracer'])
register_Ns3AnnotatedTopologyReader_methods(root_module, root_module['ns3::AnnotatedTopologyReader'])
register_Ns3Application_methods(root_module, root_module['ns3::Application'])
register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
+ register_Ns3BatchesChecker_methods(root_module, root_module['ns3::BatchesChecker'])
+ register_Ns3BatchesValue_methods(root_module, root_module['ns3::BatchesValue'])
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_Ns3Ccnx_methods(root_module, root_module['ns3::Ccnx'])
register_Ns3CcnxApp_methods(root_module, root_module['ns3::CcnxApp'])
register_Ns3CcnxAppTracer_methods(root_module, root_module['ns3::CcnxAppTracer'])
+ register_Ns3CcnxConsumerWindowTracer_methods(root_module, root_module['ns3::CcnxConsumerWindowTracer'])
register_Ns3CcnxContentObjectHeader_methods(root_module, root_module['ns3::CcnxContentObjectHeader'])
register_Ns3CcnxContentObjectTail_methods(root_module, root_module['ns3::CcnxContentObjectTail'])
register_Ns3CcnxFace_methods(root_module, root_module['ns3::CcnxFace'])
@@ -492,13 +576,22 @@
register_Ns3CcnxNameComponents_methods(root_module, root_module['ns3::CcnxNameComponents'])
register_Ns3CcnxNameComponentsChecker_methods(root_module, root_module['ns3::CcnxNameComponentsChecker'])
register_Ns3CcnxNameComponentsValue_methods(root_module, root_module['ns3::CcnxNameComponentsValue'])
+ register_Ns3CcnxPathWeightTracer_methods(root_module, root_module['ns3::CcnxPathWeightTracer'])
register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
+ register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
+ register_Ns3Ipv4AppTracer_methods(root_module, root_module['ns3::Ipv4AppTracer'])
+ register_Ns3Ipv4L3Protocol_methods(root_module, root_module['ns3::Ipv4L3Protocol'])
+ register_Ns3Ipv4L3Tracer_methods(root_module, root_module['ns3::Ipv4L3Tracer'])
+ register_Ns3Ipv4L4Protocol_methods(root_module, root_module['ns3::Ipv4L4Protocol'])
register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
register_Ns3Ipv4MaskValue_methods(root_module, root_module['ns3::Ipv4MaskValue'])
+ register_Ns3Ipv4MulticastRoute_methods(root_module, root_module['ns3::Ipv4MulticastRoute'])
+ register_Ns3Ipv4Route_methods(root_module, root_module['ns3::Ipv4Route'])
+ register_Ns3Ipv4RoutingProtocol_methods(root_module, root_module['ns3::Ipv4RoutingProtocol'])
register_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'])
@@ -509,11 +602,16 @@
register_Ns3Node_methods(root_module, root_module['ns3::Node'])
register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
+ register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
register_Ns3RandomVariableChecker_methods(root_module, root_module['ns3::RandomVariableChecker'])
register_Ns3RandomVariableValue_methods(root_module, root_module['ns3::RandomVariableValue'])
register_Ns3RocketfuelWeightsReader_methods(root_module, root_module['ns3::RocketfuelWeightsReader'])
+ register_Ns3SocketAddressTag_methods(root_module, root_module['ns3::SocketAddressTag'])
+ register_Ns3SocketIpTtlTag_methods(root_module, root_module['ns3::SocketIpTtlTag'])
+ register_Ns3SocketSetDontFragmentTag_methods(root_module, root_module['ns3::SocketSetDontFragmentTag'])
register_Ns3SpringMobilityModel_methods(root_module, root_module['ns3::SpringMobilityModel'])
+ register_Ns3TcpCongestionWindowTracer_methods(root_module, root_module['ns3::TcpCongestionWindowTracer'])
register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
@@ -1109,8 +1207,8 @@
cls.add_binary_comparison_operator('<')
## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibFaceMetric::CcnxFibFaceMetric(ns3::CcnxFibFaceMetric const & arg0) [copy constructor]
cls.add_constructor([param('ns3::CcnxFibFaceMetric const &', 'arg0')])
- ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibFaceMetric::CcnxFibFaceMetric(ns3::Ptr<ns3::CcnxFace> face, int cost) [constructor]
- cls.add_constructor([param('ns3::Ptr< ns3::CcnxFace >', 'face'), param('int', 'cost')])
+ ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibFaceMetric::CcnxFibFaceMetric(ns3::Ptr<ns3::CcnxFace> face, int32_t cost) [constructor]
+ cls.add_constructor([param('ns3::Ptr< ns3::CcnxFace >', 'face'), param('int32_t', 'cost')])
## ccnx-fib.h (module 'NDNabstraction'): ns3::Ptr<ns3::CcnxFace> ns3::CcnxFibFaceMetric::GetFace() const [member function]
cls.add_method('GetFace',
'ns3::Ptr< ns3::CcnxFace >',
@@ -1189,32 +1287,45 @@
'ns3::Ptr< ns3::CcnxFaceContainer >',
[],
is_const=True)
- ## ccnx-stack-helper.h (module 'NDNabstraction'): void ns3::CcnxStackHelper::AddRoute(std::string nodeName, std::string prefix, uint32_t faceId, int32_t metric) const [member function]
+ ## ccnx-stack-helper.h (module 'NDNabstraction'): static void ns3::CcnxStackHelper::AddRoute(std::string nodeName, std::string prefix, uint32_t faceId, int32_t metric) [member function]
cls.add_method('AddRoute',
'void',
[param('std::string', 'nodeName'), param('std::string', 'prefix'), param('uint32_t', 'faceId'), param('int32_t', 'metric')],
- is_const=True)
- ## ccnx-stack-helper.h (module 'NDNabstraction'): void ns3::CcnxStackHelper::AddRoute(ns3::Ptr<ns3::Node> node, std::string prefix, ns3::Ptr<ns3::CcnxFace> face, int32_t metric) const [member function]
+ is_static=True)
+ ## ccnx-stack-helper.h (module 'NDNabstraction'): static void ns3::CcnxStackHelper::AddRoute(ns3::Ptr<ns3::Node> node, std::string prefix, ns3::Ptr<ns3::CcnxFace> face, int32_t metric) [member function]
cls.add_method('AddRoute',
'void',
[param('ns3::Ptr< ns3::Node >', 'node'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::CcnxFace >', 'face'), param('int32_t', 'metric')],
- is_const=True)
+ is_static=True)
## ccnx-stack-helper.h (module 'NDNabstraction'): void ns3::CcnxStackHelper::SetDefaultRoutes(bool needSet) [member function]
cls.add_method('SetDefaultRoutes',
'void',
[param('bool', 'needSet')])
- ## ccnx-stack-helper.h (module 'NDNabstraction'): void ns3::CcnxStackHelper::InstallFakeGlobalRoutes() [member function]
+ ## ccnx-stack-helper.h (module 'NDNabstraction'): static void ns3::CcnxStackHelper::InstallFakeGlobalRoutes() [member function]
cls.add_method('InstallFakeGlobalRoutes',
'void',
- [])
- ## ccnx-stack-helper.h (module 'NDNabstraction'): void ns3::CcnxStackHelper::InstallRouteTo(ns3::Ptr<ns3::Node> node) [member function]
+ [],
+ is_static=True)
+ ## ccnx-stack-helper.h (module 'NDNabstraction'): static void ns3::CcnxStackHelper::InstallFakeGlobalRoutesImpl() [member function]
+ cls.add_method('InstallFakeGlobalRoutesImpl',
+ 'void',
+ [],
+ is_static=True)
+ ## ccnx-stack-helper.h (module 'NDNabstraction'): static void ns3::CcnxStackHelper::InstallRouteTo(ns3::Ptr<ns3::Node> node) [member function]
cls.add_method('InstallRouteTo',
'void',
- [param('ns3::Ptr< ns3::Node >', 'node')])
- ## ccnx-stack-helper.h (module 'NDNabstraction'): void ns3::CcnxStackHelper::InstallRoutesToAll() [member function]
+ [param('ns3::Ptr< ns3::Node >', 'node')],
+ is_static=True)
+ ## ccnx-stack-helper.h (module 'NDNabstraction'): static void ns3::CcnxStackHelper::InstallRouteTo(std::string const & prefix, ns3::Ptr<ns3::Node> node) [member function]
+ cls.add_method('InstallRouteTo',
+ 'void',
+ [param('std::string const &', 'prefix'), param('ns3::Ptr< ns3::Node >', 'node')],
+ is_static=True)
+ ## ccnx-stack-helper.h (module 'NDNabstraction'): static void ns3::CcnxStackHelper::InstallRoutesToAll() [member function]
cls.add_method('InstallRoutesToAll',
'void',
- [])
+ [],
+ is_static=True)
return
def register_Ns3CcnxTraceHelper_methods(root_module, cls):
@@ -1230,10 +1341,34 @@
cls.add_method('EnableAggregateL3All',
'void',
[])
+ ## ccnx-trace-helper.h (module 'NDNabstraction'): void ns3::CcnxTraceHelper::EnableIpv4RateL3All(std::string const & ipv4RateTrace="ipv4-rate.log") [member function]
+ cls.add_method('EnableIpv4RateL3All',
+ 'void',
+ [param('std::string const &', 'ipv4RateTrace', default_value='"ipv4-rate.log"')])
+ ## ccnx-trace-helper.h (module 'NDNabstraction'): void ns3::CcnxTraceHelper::EnableIpv4SeqsAppAll(std::string const & appSeqsTrace="app-seqs.log") [member function]
+ cls.add_method('EnableIpv4SeqsAppAll',
+ 'void',
+ [param('std::string const &', 'appSeqsTrace', default_value='"app-seqs.log"')])
+ ## ccnx-trace-helper.h (module 'NDNabstraction'): void ns3::CcnxTraceHelper::EnablePathWeights(std::string const & pathWeights) [member function]
+ cls.add_method('EnablePathWeights',
+ 'void',
+ [param('std::string const &', 'pathWeights')])
## ccnx-trace-helper.h (module 'NDNabstraction'): void ns3::CcnxTraceHelper::EnableRateL3All(std::string const & l3RateTrace="l3-rate.log") [member function]
cls.add_method('EnableRateL3All',
'void',
[param('std::string const &', 'l3RateTrace', default_value='"l3-rate.log"')])
+ ## ccnx-trace-helper.h (module 'NDNabstraction'): void ns3::CcnxTraceHelper::EnableSeqsAppAll(std::string const & app, std::string const & appSeqsTrace="app-seqs.log") [member function]
+ cls.add_method('EnableSeqsAppAll',
+ 'void',
+ [param('std::string const &', 'app'), param('std::string const &', 'appSeqsTrace', default_value='"app-seqs.log"')])
+ ## ccnx-trace-helper.h (module 'NDNabstraction'): void ns3::CcnxTraceHelper::EnableWindowsAll(std::string const & windowTrace="windows.log") [member function]
+ cls.add_method('EnableWindowsAll',
+ 'void',
+ [param('std::string const &', 'windowTrace', default_value='"windows.log"')])
+ ## ccnx-trace-helper.h (module 'NDNabstraction'): void ns3::CcnxTraceHelper::EnableWindowsTcpAll(std::string const & windowTrace) [member function]
+ cls.add_method('EnableWindowsTcpAll',
+ 'void',
+ [param('std::string const &', 'windowTrace')])
## ccnx-trace-helper.h (module 'NDNabstraction'): void ns3::CcnxTraceHelper::SetAppTraceFile(std::string const & appTrace="apps.log") [member function]
cls.add_method('SetAppTraceFile',
'void',
@@ -1242,6 +1377,10 @@
cls.add_method('SetL3TraceFile',
'void',
[param('std::string const &', 'l3Trace', default_value='"l3.log"')])
+ ## ccnx-trace-helper.h (module 'NDNabstraction'): void ns3::CcnxTraceHelper::TcpConnect(ns3::Ptr<ns3::Node> node) [member function]
+ cls.add_method('TcpConnect',
+ 'void',
+ [param('ns3::Ptr< ns3::Node >', 'node')])
return
def register_Ns3CcnxUnknownHeaderException_methods(root_module, cls):
@@ -1404,6 +1543,67 @@
[param('char const *', 'address')])
return
+def register_Ns3Ipv4InterfaceAddress_methods(root_module, cls):
+ cls.add_binary_comparison_operator('!=')
+ cls.add_output_stream_operator()
+ cls.add_binary_comparison_operator('==')
+ ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::Ipv4InterfaceAddress() [constructor]
+ cls.add_constructor([])
+ ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::Ipv4InterfaceAddress(ns3::Ipv4Address local, ns3::Ipv4Mask mask) [constructor]
+ cls.add_constructor([param('ns3::Ipv4Address', 'local'), param('ns3::Ipv4Mask', 'mask')])
+ ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::Ipv4InterfaceAddress(ns3::Ipv4InterfaceAddress const & o) [copy constructor]
+ cls.add_constructor([param('ns3::Ipv4InterfaceAddress const &', 'o')])
+ ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4InterfaceAddress::GetBroadcast() const [member function]
+ cls.add_method('GetBroadcast',
+ 'ns3::Ipv4Address',
+ [],
+ is_const=True)
+ ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4InterfaceAddress::GetLocal() const [member function]
+ cls.add_method('GetLocal',
+ 'ns3::Ipv4Address',
+ [],
+ is_const=True)
+ ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4Mask ns3::Ipv4InterfaceAddress::GetMask() const [member function]
+ cls.add_method('GetMask',
+ 'ns3::Ipv4Mask',
+ [],
+ is_const=True)
+ ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e ns3::Ipv4InterfaceAddress::GetScope() const [member function]
+ cls.add_method('GetScope',
+ 'ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e',
+ [],
+ is_const=True)
+ ## ipv4-interface-address.h (module 'internet'): bool ns3::Ipv4InterfaceAddress::IsSecondary() const [member function]
+ cls.add_method('IsSecondary',
+ 'bool',
+ [],
+ is_const=True)
+ ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetBroadcast(ns3::Ipv4Address broadcast) [member function]
+ cls.add_method('SetBroadcast',
+ 'void',
+ [param('ns3::Ipv4Address', 'broadcast')])
+ ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetLocal(ns3::Ipv4Address local) [member function]
+ cls.add_method('SetLocal',
+ 'void',
+ [param('ns3::Ipv4Address', 'local')])
+ ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetMask(ns3::Ipv4Mask mask) [member function]
+ cls.add_method('SetMask',
+ 'void',
+ [param('ns3::Ipv4Mask', 'mask')])
+ ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetPrimary() [member function]
+ cls.add_method('SetPrimary',
+ 'void',
+ [])
+ ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetScope(ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
+ cls.add_method('SetScope',
+ 'void',
+ [param('ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e', 'scope')])
+ ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetSecondary() [member function]
+ cls.add_method('SetSecondary',
+ 'void',
+ [])
+ return
+
def register_Ns3Ipv4Mask_methods(root_module, cls):
cls.add_binary_comparison_operator('!=')
cls.add_output_stream_operator()
@@ -2025,80 +2225,6 @@
[])
return
-def register_Ns3PacketTagIterator_methods(root_module, cls):
- ## packet.h (module 'network'): ns3::PacketTagIterator::PacketTagIterator(ns3::PacketTagIterator const & arg0) [copy constructor]
- cls.add_constructor([param('ns3::PacketTagIterator const &', 'arg0')])
- ## packet.h (module 'network'): bool ns3::PacketTagIterator::HasNext() const [member function]
- cls.add_method('HasNext',
- 'bool',
- [],
- is_const=True)
- ## packet.h (module 'network'): ns3::PacketTagIterator::Item ns3::PacketTagIterator::Next() [member function]
- cls.add_method('Next',
- 'ns3::PacketTagIterator::Item',
- [])
- return
-
-def register_Ns3PacketTagIteratorItem_methods(root_module, cls):
- ## packet.h (module 'network'): ns3::PacketTagIterator::Item::Item(ns3::PacketTagIterator::Item const & arg0) [copy constructor]
- cls.add_constructor([param('ns3::PacketTagIterator::Item const &', 'arg0')])
- ## packet.h (module 'network'): void ns3::PacketTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
- cls.add_method('GetTag',
- 'void',
- [param('ns3::Tag &', 'tag')],
- is_const=True)
- ## packet.h (module 'network'): ns3::TypeId ns3::PacketTagIterator::Item::GetTypeId() const [member function]
- cls.add_method('GetTypeId',
- 'ns3::TypeId',
- [],
- is_const=True)
- return
-
-def register_Ns3PacketTagList_methods(root_module, cls):
- ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList() [constructor]
- cls.add_constructor([])
- ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList(ns3::PacketTagList const & o) [copy constructor]
- cls.add_constructor([param('ns3::PacketTagList const &', 'o')])
- ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::Add(ns3::Tag const & tag) const [member function]
- cls.add_method('Add',
- 'void',
- [param('ns3::Tag const &', 'tag')],
- is_const=True)
- ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData const * ns3::PacketTagList::Head() const [member function]
- cls.add_method('Head',
- 'ns3::PacketTagList::TagData const *',
- [],
- is_const=True)
- ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Peek(ns3::Tag & tag) const [member function]
- cls.add_method('Peek',
- 'bool',
- [param('ns3::Tag &', 'tag')],
- is_const=True)
- ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Remove(ns3::Tag & tag) [member function]
- cls.add_method('Remove',
- 'bool',
- [param('ns3::Tag &', 'tag')])
- ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::RemoveAll() [member function]
- cls.add_method('RemoveAll',
- 'void',
- [])
- return
-
-def register_Ns3PacketTagListTagData_methods(root_module, cls):
- ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData() [constructor]
- cls.add_constructor([])
- ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData(ns3::PacketTagList::TagData const & arg0) [copy constructor]
- cls.add_constructor([param('ns3::PacketTagList::TagData const &', 'arg0')])
- ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
- cls.add_instance_attribute('count', 'uint32_t', is_const=False)
- ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
- cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
- ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
- cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
- ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
- cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
- return
-
def register_Ns3RandomVariable_methods(root_module, cls):
cls.add_output_stream_operator()
## random-variable.h (module 'core'): ns3::RandomVariable::RandomVariable() [constructor]
@@ -2182,6 +2308,96 @@
is_static=True)
return
+def register_Ns3Simulator_methods(root_module, cls):
+ ## simulator.h (module 'core'): ns3::Simulator::Simulator(ns3::Simulator const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Simulator const &', 'arg0')])
+ ## simulator.h (module 'core'): static void ns3::Simulator::Cancel(ns3::EventId const & id) [member function]
+ cls.add_method('Cancel',
+ 'void',
+ [param('ns3::EventId const &', 'id')],
+ is_static=True)
+ ## simulator.h (module 'core'): static void ns3::Simulator::Destroy() [member function]
+ cls.add_method('Destroy',
+ 'void',
+ [],
+ is_static=True)
+ ## simulator.h (module 'core'): static uint32_t ns3::Simulator::GetContext() [member function]
+ cls.add_method('GetContext',
+ 'uint32_t',
+ [],
+ is_static=True)
+ ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::GetDelayLeft(ns3::EventId const & id) [member function]
+ cls.add_method('GetDelayLeft',
+ 'ns3::Time',
+ [param('ns3::EventId const &', 'id')],
+ is_static=True)
+ ## simulator.h (module 'core'): static ns3::Ptr<ns3::SimulatorImpl> ns3::Simulator::GetImplementation() [member function]
+ cls.add_method('GetImplementation',
+ 'ns3::Ptr< ns3::SimulatorImpl >',
+ [],
+ is_static=True)
+ ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::GetMaximumSimulationTime() [member function]
+ cls.add_method('GetMaximumSimulationTime',
+ 'ns3::Time',
+ [],
+ is_static=True)
+ ## simulator.h (module 'core'): static uint32_t ns3::Simulator::GetSystemId() [member function]
+ cls.add_method('GetSystemId',
+ 'uint32_t',
+ [],
+ is_static=True)
+ ## simulator.h (module 'core'): static bool ns3::Simulator::IsExpired(ns3::EventId const & id) [member function]
+ cls.add_method('IsExpired',
+ 'bool',
+ [param('ns3::EventId const &', 'id')],
+ is_static=True)
+ ## simulator.h (module 'core'): static bool ns3::Simulator::IsFinished() [member function]
+ cls.add_method('IsFinished',
+ 'bool',
+ [],
+ is_static=True)
+ ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::Next() [member function]
+ cls.add_method('Next',
+ 'ns3::Time',
+ [],
+ is_static=True, deprecated=True)
+ ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::Now() [member function]
+ cls.add_method('Now',
+ 'ns3::Time',
+ [],
+ is_static=True)
+ ## simulator.h (module 'core'): static void ns3::Simulator::Remove(ns3::EventId const & id) [member function]
+ cls.add_method('Remove',
+ 'void',
+ [param('ns3::EventId const &', 'id')],
+ is_static=True)
+ ## simulator.h (module 'core'): static void ns3::Simulator::RunOneEvent() [member function]
+ cls.add_method('RunOneEvent',
+ 'void',
+ [],
+ is_static=True, deprecated=True)
+ ## simulator.h (module 'core'): static void ns3::Simulator::SetImplementation(ns3::Ptr<ns3::SimulatorImpl> impl) [member function]
+ cls.add_method('SetImplementation',
+ 'void',
+ [param('ns3::Ptr< ns3::SimulatorImpl >', 'impl')],
+ is_static=True)
+ ## simulator.h (module 'core'): static void ns3::Simulator::SetScheduler(ns3::ObjectFactory schedulerFactory) [member function]
+ cls.add_method('SetScheduler',
+ 'void',
+ [param('ns3::ObjectFactory', 'schedulerFactory')],
+ is_static=True)
+ ## simulator.h (module 'core'): static void ns3::Simulator::Stop() [member function]
+ cls.add_method('Stop',
+ 'void',
+ [],
+ is_static=True)
+ ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+ cls.add_method('Stop',
+ 'void',
+ [param('ns3::Time const &', 'time')],
+ is_static=True)
+ return
+
def register_Ns3SpringMobilityHelper_methods(root_module, cls):
## spring-mobility-helper.h (module 'NDNabstraction'): ns3::SpringMobilityHelper::SpringMobilityHelper() [constructor]
cls.add_constructor([])
@@ -2199,38 +2415,6 @@
is_static=True)
return
-def register_Ns3Tag_methods(root_module, cls):
- ## tag.h (module 'network'): ns3::Tag::Tag() [constructor]
- cls.add_constructor([])
- ## tag.h (module 'network'): ns3::Tag::Tag(ns3::Tag const & arg0) [copy constructor]
- cls.add_constructor([param('ns3::Tag const &', 'arg0')])
- ## tag.h (module 'network'): void ns3::Tag::Deserialize(ns3::TagBuffer i) [member function]
- cls.add_method('Deserialize',
- 'void',
- [param('ns3::TagBuffer', 'i')],
- is_pure_virtual=True, is_virtual=True)
- ## tag.h (module 'network'): uint32_t ns3::Tag::GetSerializedSize() const [member function]
- cls.add_method('GetSerializedSize',
- 'uint32_t',
- [],
- is_pure_virtual=True, is_const=True, is_virtual=True)
- ## tag.h (module 'network'): static ns3::TypeId ns3::Tag::GetTypeId() [member function]
- cls.add_method('GetTypeId',
- 'ns3::TypeId',
- [],
- is_static=True)
- ## tag.h (module 'network'): void ns3::Tag::Print(std::ostream & os) const [member function]
- cls.add_method('Print',
- 'void',
- [param('std::ostream &', 'os')],
- is_pure_virtual=True, is_const=True, is_virtual=True)
- ## tag.h (module 'network'): void ns3::Tag::Serialize(ns3::TagBuffer i) const [member function]
- cls.add_method('Serialize',
- 'void',
- [param('ns3::TagBuffer', 'i')],
- is_pure_virtual=True, is_const=True, is_virtual=True)
- return
-
def register_Ns3TagBuffer_methods(root_module, cls):
## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(ns3::TagBuffer const & arg0) [copy constructor]
cls.add_constructor([param('ns3::TagBuffer const &', 'arg0')])
@@ -2832,6 +3016,178 @@
cls.add_constructor([])
return
+def register_Ns3Ipv4Header_methods(root_module, cls):
+ ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::Ipv4Header(ns3::Ipv4Header const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Ipv4Header const &', 'arg0')])
+ ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::Ipv4Header() [constructor]
+ cls.add_constructor([])
+ ## ipv4-header.h (module 'internet'): uint32_t ns3::Ipv4Header::Deserialize(ns3::Buffer::Iterator start) [member function]
+ cls.add_method('Deserialize',
+ 'uint32_t',
+ [param('ns3::Buffer::Iterator', 'start')],
+ is_virtual=True)
+ ## ipv4-header.h (module 'internet'): std::string ns3::Ipv4Header::DscpTypeToString(ns3::Ipv4Header::DscpType dscp) const [member function]
+ cls.add_method('DscpTypeToString',
+ 'std::string',
+ [param('ns3::Ipv4Header::DscpType', 'dscp')],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): std::string ns3::Ipv4Header::EcnTypeToString(ns3::Ipv4Header::EcnType ecn) const [member function]
+ cls.add_method('EcnTypeToString',
+ 'std::string',
+ [param('ns3::Ipv4Header::EcnType', 'ecn')],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::EnableChecksum() [member function]
+ cls.add_method('EnableChecksum',
+ 'void',
+ [])
+ ## ipv4-header.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Header::GetDestination() const [member function]
+ cls.add_method('GetDestination',
+ 'ns3::Ipv4Address',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType ns3::Ipv4Header::GetDscp() const [member function]
+ cls.add_method('GetDscp',
+ 'ns3::Ipv4Header::DscpType',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType ns3::Ipv4Header::GetEcn() const [member function]
+ cls.add_method('GetEcn',
+ 'ns3::Ipv4Header::EcnType',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): uint16_t ns3::Ipv4Header::GetFragmentOffset() const [member function]
+ cls.add_method('GetFragmentOffset',
+ 'uint16_t',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): uint16_t ns3::Ipv4Header::GetIdentification() const [member function]
+ cls.add_method('GetIdentification',
+ 'uint16_t',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): ns3::TypeId ns3::Ipv4Header::GetInstanceTypeId() const [member function]
+ cls.add_method('GetInstanceTypeId',
+ 'ns3::TypeId',
+ [],
+ is_const=True, is_virtual=True)
+ ## ipv4-header.h (module 'internet'): uint16_t ns3::Ipv4Header::GetPayloadSize() const [member function]
+ cls.add_method('GetPayloadSize',
+ 'uint16_t',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): uint8_t ns3::Ipv4Header::GetProtocol() const [member function]
+ cls.add_method('GetProtocol',
+ 'uint8_t',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): uint32_t ns3::Ipv4Header::GetSerializedSize() const [member function]
+ cls.add_method('GetSerializedSize',
+ 'uint32_t',
+ [],
+ is_const=True, is_virtual=True)
+ ## ipv4-header.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Header::GetSource() const [member function]
+ cls.add_method('GetSource',
+ 'ns3::Ipv4Address',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): uint8_t ns3::Ipv4Header::GetTos() const [member function]
+ cls.add_method('GetTos',
+ 'uint8_t',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): uint8_t ns3::Ipv4Header::GetTtl() const [member function]
+ cls.add_method('GetTtl',
+ 'uint8_t',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): static ns3::TypeId ns3::Ipv4Header::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## ipv4-header.h (module 'internet'): bool ns3::Ipv4Header::IsChecksumOk() const [member function]
+ cls.add_method('IsChecksumOk',
+ 'bool',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): bool ns3::Ipv4Header::IsDontFragment() const [member function]
+ cls.add_method('IsDontFragment',
+ 'bool',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): bool ns3::Ipv4Header::IsLastFragment() const [member function]
+ cls.add_method('IsLastFragment',
+ 'bool',
+ [],
+ is_const=True)
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::Print(std::ostream & os) const [member function]
+ cls.add_method('Print',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_const=True, is_virtual=True)
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::Serialize(ns3::Buffer::Iterator start) const [member function]
+ cls.add_method('Serialize',
+ 'void',
+ [param('ns3::Buffer::Iterator', 'start')],
+ is_const=True, is_virtual=True)
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetDestination(ns3::Ipv4Address destination) [member function]
+ cls.add_method('SetDestination',
+ 'void',
+ [param('ns3::Ipv4Address', 'destination')])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetDontFragment() [member function]
+ cls.add_method('SetDontFragment',
+ 'void',
+ [])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetDscp(ns3::Ipv4Header::DscpType dscp) [member function]
+ cls.add_method('SetDscp',
+ 'void',
+ [param('ns3::Ipv4Header::DscpType', 'dscp')])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetEcn(ns3::Ipv4Header::EcnType ecn) [member function]
+ cls.add_method('SetEcn',
+ 'void',
+ [param('ns3::Ipv4Header::EcnType', 'ecn')])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetFragmentOffset(uint16_t offsetBytes) [member function]
+ cls.add_method('SetFragmentOffset',
+ 'void',
+ [param('uint16_t', 'offsetBytes')])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetIdentification(uint16_t identification) [member function]
+ cls.add_method('SetIdentification',
+ 'void',
+ [param('uint16_t', 'identification')])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetLastFragment() [member function]
+ cls.add_method('SetLastFragment',
+ 'void',
+ [])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetMayFragment() [member function]
+ cls.add_method('SetMayFragment',
+ 'void',
+ [])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetMoreFragments() [member function]
+ cls.add_method('SetMoreFragments',
+ 'void',
+ [])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetPayloadSize(uint16_t size) [member function]
+ cls.add_method('SetPayloadSize',
+ 'void',
+ [param('uint16_t', 'size')])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetProtocol(uint8_t num) [member function]
+ cls.add_method('SetProtocol',
+ 'void',
+ [param('uint8_t', 'num')])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetSource(ns3::Ipv4Address source) [member function]
+ cls.add_method('SetSource',
+ 'void',
+ [param('ns3::Ipv4Address', 'source')])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetTos(uint8_t tos) [member function]
+ cls.add_method('SetTos',
+ 'void',
+ [param('uint8_t', 'tos')])
+ ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetTtl(uint8_t ttl) [member function]
+ cls.add_method('SetTtl',
+ 'void',
+ [param('uint8_t', 'ttl')])
+ return
+
def register_Ns3LogNormalVariable_methods(root_module, cls):
## random-variable.h (module 'core'): ns3::LogNormalVariable::LogNormalVariable(ns3::LogNormalVariable const & arg0) [copy constructor]
cls.add_constructor([param('ns3::LogNormalVariable const &', 'arg0')])
@@ -3041,6 +3397,18 @@
is_static=True)
return
+def register_Ns3SimpleRefCount__Ns3CcnxPathWeightTracer_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxPathWeightTracer__gt___methods(root_module, cls):
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxPathWeightTracer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPathWeightTracer> >::SimpleRefCount() [constructor]
+ cls.add_constructor([])
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxPathWeightTracer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPathWeightTracer> >::SimpleRefCount(ns3::SimpleRefCount<ns3::CcnxPathWeightTracer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPathWeightTracer> > const & o) [copy constructor]
+ cls.add_constructor([param('ns3::SimpleRefCount< ns3::CcnxPathWeightTracer, ns3::empty, ns3::DefaultDeleter< ns3::CcnxPathWeightTracer > > const &', 'o')])
+ ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::CcnxPathWeightTracer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPathWeightTracer> >::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([])
@@ -3053,6 +3421,54 @@
is_static=True)
return
+def register_Ns3SimpleRefCount__Ns3Ipv4AppTracer_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4AppTracer__gt___methods(root_module, cls):
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4AppTracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4AppTracer> >::SimpleRefCount() [constructor]
+ cls.add_constructor([])
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4AppTracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4AppTracer> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Ipv4AppTracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4AppTracer> > const & o) [copy constructor]
+ cls.add_constructor([param('ns3::SimpleRefCount< ns3::Ipv4AppTracer, ns3::empty, ns3::DefaultDeleter< ns3::Ipv4AppTracer > > const &', 'o')])
+ ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Ipv4AppTracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4AppTracer> >::Cleanup() [member function]
+ cls.add_method('Cleanup',
+ 'void',
+ [],
+ is_static=True)
+ return
+
+def register_Ns3SimpleRefCount__Ns3Ipv4L3Tracer_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4L3Tracer__gt___methods(root_module, cls):
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4L3Tracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4L3Tracer> >::SimpleRefCount() [constructor]
+ cls.add_constructor([])
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4L3Tracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4L3Tracer> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Ipv4L3Tracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4L3Tracer> > const & o) [copy constructor]
+ cls.add_constructor([param('ns3::SimpleRefCount< ns3::Ipv4L3Tracer, ns3::empty, ns3::DefaultDeleter< ns3::Ipv4L3Tracer > > const &', 'o')])
+ ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Ipv4L3Tracer, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4L3Tracer> >::Cleanup() [member function]
+ cls.add_method('Cleanup',
+ 'void',
+ [],
+ is_static=True)
+ return
+
+def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
+ cls.add_constructor([])
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > const & o) [copy constructor]
+ cls.add_constructor([param('ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter< ns3::Ipv4MulticastRoute > > const &', 'o')])
+ ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::Cleanup() [member function]
+ cls.add_method('Cleanup',
+ 'void',
+ [],
+ is_static=True)
+ return
+
+def register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, cls):
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >::SimpleRefCount() [constructor]
+ cls.add_constructor([])
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > const & o) [copy constructor]
+ cls.add_constructor([param('ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter< ns3::Ipv4Route > > const &', 'o')])
+ ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >::Cleanup() [member function]
+ cls.add_method('Cleanup',
+ 'void',
+ [],
+ is_static=True)
+ return
+
def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
cls.add_constructor([])
@@ -3065,6 +3481,18 @@
is_static=True)
return
+def register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, cls):
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::SimpleRefCount() [constructor]
+ cls.add_constructor([])
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::SimpleRefCount(ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > const & o) [copy constructor]
+ cls.add_constructor([param('ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter< ns3::OutputStreamWrapper > > const &', 'o')])
+ ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::Cleanup() [member function]
+ cls.add_method('Cleanup',
+ 'void',
+ [],
+ is_static=True)
+ return
+
def register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, cls):
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount() [constructor]
cls.add_constructor([])
@@ -3101,6 +3529,278 @@
is_static=True)
return
+def register_Ns3SimpleRefCount__Ns3WindowTracer_Ns3Empty_Ns3DefaultDeleter__lt__ns3WindowTracer__gt___methods(root_module, cls):
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::WindowTracer, ns3::empty, ns3::DefaultDeleter<ns3::WindowTracer> >::SimpleRefCount() [constructor]
+ cls.add_constructor([])
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::WindowTracer, ns3::empty, ns3::DefaultDeleter<ns3::WindowTracer> >::SimpleRefCount(ns3::SimpleRefCount<ns3::WindowTracer, ns3::empty, ns3::DefaultDeleter<ns3::WindowTracer> > const & o) [copy constructor]
+ cls.add_constructor([param('ns3::SimpleRefCount< ns3::WindowTracer, ns3::empty, ns3::DefaultDeleter< ns3::WindowTracer > > const &', 'o')])
+ ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::WindowTracer, ns3::empty, ns3::DefaultDeleter<ns3::WindowTracer> >::Cleanup() [member function]
+ cls.add_method('Cleanup',
+ 'void',
+ [],
+ is_static=True)
+ return
+
+def register_Ns3Socket_methods(root_module, cls):
+ ## socket.h (module 'network'): ns3::Socket::Socket(ns3::Socket const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Socket const &', 'arg0')])
+ ## socket.h (module 'network'): ns3::Socket::Socket() [constructor]
+ cls.add_constructor([])
+ ## socket.h (module 'network'): int ns3::Socket::Bind(ns3::Address const & address) [member function]
+ cls.add_method('Bind',
+ 'int',
+ [param('ns3::Address const &', 'address')],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): int ns3::Socket::Bind() [member function]
+ cls.add_method('Bind',
+ 'int',
+ [],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): void ns3::Socket::BindToNetDevice(ns3::Ptr<ns3::NetDevice> netdevice) [member function]
+ cls.add_method('BindToNetDevice',
+ 'void',
+ [param('ns3::Ptr< ns3::NetDevice >', 'netdevice')],
+ is_virtual=True)
+ ## socket.h (module 'network'): int ns3::Socket::Close() [member function]
+ cls.add_method('Close',
+ 'int',
+ [],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): int ns3::Socket::Connect(ns3::Address const & address) [member function]
+ cls.add_method('Connect',
+ 'int',
+ [param('ns3::Address const &', 'address')],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): static ns3::Ptr<ns3::Socket> ns3::Socket::CreateSocket(ns3::Ptr<ns3::Node> node, ns3::TypeId tid) [member function]
+ cls.add_method('CreateSocket',
+ 'ns3::Ptr< ns3::Socket >',
+ [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::TypeId', 'tid')],
+ is_static=True)
+ ## socket.h (module 'network'): bool ns3::Socket::GetAllowBroadcast() const [member function]
+ cls.add_method('GetAllowBroadcast',
+ 'bool',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::Socket::GetBoundNetDevice() [member function]
+ cls.add_method('GetBoundNetDevice',
+ 'ns3::Ptr< ns3::NetDevice >',
+ [])
+ ## socket.h (module 'network'): ns3::Socket::SocketErrno ns3::Socket::GetErrno() const [member function]
+ cls.add_method('GetErrno',
+ 'ns3::Socket::SocketErrno',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): ns3::Ptr<ns3::Node> ns3::Socket::GetNode() const [member function]
+ cls.add_method('GetNode',
+ 'ns3::Ptr< ns3::Node >',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
+ cls.add_method('GetRxAvailable',
+ 'uint32_t',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): int ns3::Socket::GetSockName(ns3::Address & address) const [member function]
+ cls.add_method('GetSockName',
+ 'int',
+ [param('ns3::Address &', 'address')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): ns3::Socket::SocketType ns3::Socket::GetSocketType() const [member function]
+ cls.add_method('GetSocketType',
+ 'ns3::Socket::SocketType',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): uint32_t ns3::Socket::GetTxAvailable() const [member function]
+ cls.add_method('GetTxAvailable',
+ 'uint32_t',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): bool ns3::Socket::IsRecvPktInfo() const [member function]
+ cls.add_method('IsRecvPktInfo',
+ 'bool',
+ [],
+ is_const=True)
+ ## socket.h (module 'network'): int ns3::Socket::Listen() [member function]
+ cls.add_method('Listen',
+ 'int',
+ [],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::Recv(uint32_t maxSize, uint32_t flags) [member function]
+ cls.add_method('Recv',
+ 'ns3::Ptr< ns3::Packet >',
+ [param('uint32_t', 'maxSize'), param('uint32_t', 'flags')],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::Recv() [member function]
+ cls.add_method('Recv',
+ 'ns3::Ptr< ns3::Packet >',
+ [])
+ ## socket.h (module 'network'): int ns3::Socket::Recv(uint8_t * buf, uint32_t size, uint32_t flags) [member function]
+ cls.add_method('Recv',
+ 'int',
+ [param('uint8_t *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags')])
+ ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::RecvFrom(uint32_t maxSize, uint32_t flags, ns3::Address & fromAddress) [member function]
+ cls.add_method('RecvFrom',
+ 'ns3::Ptr< ns3::Packet >',
+ [param('uint32_t', 'maxSize'), param('uint32_t', 'flags'), param('ns3::Address &', 'fromAddress')],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::RecvFrom(ns3::Address & fromAddress) [member function]
+ cls.add_method('RecvFrom',
+ 'ns3::Ptr< ns3::Packet >',
+ [param('ns3::Address &', 'fromAddress')])
+ ## socket.h (module 'network'): int ns3::Socket::RecvFrom(uint8_t * buf, uint32_t size, uint32_t flags, ns3::Address & fromAddress) [member function]
+ cls.add_method('RecvFrom',
+ 'int',
+ [param('uint8_t *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags'), param('ns3::Address &', 'fromAddress')])
+ ## socket.h (module 'network'): int ns3::Socket::Send(ns3::Ptr<ns3::Packet> p, uint32_t flags) [member function]
+ cls.add_method('Send',
+ 'int',
+ [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint32_t', 'flags')],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): int ns3::Socket::Send(ns3::Ptr<ns3::Packet> p) [member function]
+ cls.add_method('Send',
+ 'int',
+ [param('ns3::Ptr< ns3::Packet >', 'p')])
+ ## socket.h (module 'network'): int ns3::Socket::Send(uint8_t const * buf, uint32_t size, uint32_t flags) [member function]
+ cls.add_method('Send',
+ 'int',
+ [param('uint8_t const *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags')])
+ ## socket.h (module 'network'): int ns3::Socket::SendTo(ns3::Ptr<ns3::Packet> p, uint32_t flags, ns3::Address const & toAddress) [member function]
+ cls.add_method('SendTo',
+ 'int',
+ [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint32_t', 'flags'), param('ns3::Address const &', 'toAddress')],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): int ns3::Socket::SendTo(uint8_t const * buf, uint32_t size, uint32_t flags, ns3::Address const & address) [member function]
+ cls.add_method('SendTo',
+ 'int',
+ [param('uint8_t const *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags'), param('ns3::Address const &', 'address')])
+ ## socket.h (module 'network'): void ns3::Socket::SetAcceptCallback(ns3::Callback<bool, ns3::Ptr<ns3::Socket>, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> connectionRequest, ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> newConnectionCreated) [member function]
+ cls.add_method('SetAcceptCallback',
+ 'void',
+ [param('ns3::Callback< bool, ns3::Ptr< ns3::Socket >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'connectionRequest'), param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'newConnectionCreated')])
+ ## socket.h (module 'network'): bool ns3::Socket::SetAllowBroadcast(bool allowBroadcast) [member function]
+ cls.add_method('SetAllowBroadcast',
+ 'bool',
+ [param('bool', 'allowBroadcast')],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): void ns3::Socket::SetCloseCallbacks(ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> normalClose, ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> errorClose) [member function]
+ cls.add_method('SetCloseCallbacks',
+ 'void',
+ [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'normalClose'), param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'errorClose')])
+ ## socket.h (module 'network'): void ns3::Socket::SetConnectCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> connectionSucceeded, ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> connectionFailed) [member function]
+ cls.add_method('SetConnectCallback',
+ 'void',
+ [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'connectionSucceeded'), param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'connectionFailed')])
+ ## socket.h (module 'network'): void ns3::Socket::SetDataSentCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> dataSent) [member function]
+ cls.add_method('SetDataSentCallback',
+ 'void',
+ [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'dataSent')])
+ ## socket.h (module 'network'): void ns3::Socket::SetRecvCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> arg0) [member function]
+ cls.add_method('SetRecvCallback',
+ 'void',
+ [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'arg0')])
+ ## socket.h (module 'network'): void ns3::Socket::SetRecvPktInfo(bool flag) [member function]
+ cls.add_method('SetRecvPktInfo',
+ 'void',
+ [param('bool', 'flag')])
+ ## socket.h (module 'network'): void ns3::Socket::SetSendCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> sendCb) [member function]
+ cls.add_method('SetSendCallback',
+ 'void',
+ [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'sendCb')])
+ ## socket.h (module 'network'): int ns3::Socket::ShutdownRecv() [member function]
+ cls.add_method('ShutdownRecv',
+ 'int',
+ [],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): int ns3::Socket::ShutdownSend() [member function]
+ cls.add_method('ShutdownSend',
+ 'int',
+ [],
+ is_pure_virtual=True, is_virtual=True)
+ ## socket.h (module 'network'): void ns3::Socket::DoDispose() [member function]
+ cls.add_method('DoDispose',
+ 'void',
+ [],
+ visibility='protected', is_virtual=True)
+ ## socket.h (module 'network'): void ns3::Socket::NotifyConnectionFailed() [member function]
+ cls.add_method('NotifyConnectionFailed',
+ 'void',
+ [],
+ visibility='protected')
+ ## socket.h (module 'network'): bool ns3::Socket::NotifyConnectionRequest(ns3::Address const & from) [member function]
+ cls.add_method('NotifyConnectionRequest',
+ 'bool',
+ [param('ns3::Address const &', 'from')],
+ visibility='protected')
+ ## socket.h (module 'network'): void ns3::Socket::NotifyConnectionSucceeded() [member function]
+ cls.add_method('NotifyConnectionSucceeded',
+ 'void',
+ [],
+ visibility='protected')
+ ## socket.h (module 'network'): void ns3::Socket::NotifyDataRecv() [member function]
+ cls.add_method('NotifyDataRecv',
+ 'void',
+ [],
+ visibility='protected')
+ ## socket.h (module 'network'): void ns3::Socket::NotifyDataSent(uint32_t size) [member function]
+ cls.add_method('NotifyDataSent',
+ 'void',
+ [param('uint32_t', 'size')],
+ visibility='protected')
+ ## socket.h (module 'network'): void ns3::Socket::NotifyErrorClose() [member function]
+ cls.add_method('NotifyErrorClose',
+ 'void',
+ [],
+ visibility='protected')
+ ## socket.h (module 'network'): void ns3::Socket::NotifyNewConnectionCreated(ns3::Ptr<ns3::Socket> socket, ns3::Address const & from) [member function]
+ cls.add_method('NotifyNewConnectionCreated',
+ 'void',
+ [param('ns3::Ptr< ns3::Socket >', 'socket'), param('ns3::Address const &', 'from')],
+ visibility='protected')
+ ## socket.h (module 'network'): void ns3::Socket::NotifyNormalClose() [member function]
+ cls.add_method('NotifyNormalClose',
+ 'void',
+ [],
+ visibility='protected')
+ ## socket.h (module 'network'): void ns3::Socket::NotifySend(uint32_t spaceAvailable) [member function]
+ cls.add_method('NotifySend',
+ 'void',
+ [param('uint32_t', 'spaceAvailable')],
+ visibility='protected')
+ return
+
+def register_Ns3Tag_methods(root_module, cls):
+ cls.add_output_stream_operator()
+ ## 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_Ns3Time_methods(root_module, cls):
cls.add_binary_comparison_operator('!=')
cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', 'right'))
@@ -3303,6 +4003,8 @@
def register_Ns3TopologyReaderLink_methods(root_module, cls):
## topology-reader.h (module 'topology-read'): ns3::TopologyReader::Link::Link(ns3::TopologyReader::Link const & arg0) [copy constructor]
cls.add_constructor([param('ns3::TopologyReader::Link const &', 'arg0')])
+ ## topology-reader.h (module 'topology-read'): ns3::TopologyReader::Link::Link() [constructor]
+ cls.add_constructor([])
## topology-reader.h (module 'topology-read'): ns3::TopologyReader::Link::Link(ns3::Ptr<ns3::Node> fromPtr, std::string const & fromName, ns3::Ptr<ns3::Node> toPtr, std::string const & toName) [constructor]
cls.add_constructor([param('ns3::Ptr< ns3::Node >', 'fromPtr'), param('std::string const &', 'fromName'), param('ns3::Ptr< ns3::Node >', 'toPtr'), param('std::string const &', 'toName')])
## topology-reader.h (module 'topology-read'): std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > ns3::TopologyReader::Link::AttributesBegin() [member function]
@@ -3423,6 +4125,92 @@
is_pure_virtual=True, is_const=True, is_virtual=True)
return
+def register_Ns3WeightsPathStretchTag_methods(root_module, cls):
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::WeightsPathStretchTag::WeightsPathStretchTag(ns3::WeightsPathStretchTag const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::WeightsPathStretchTag const &', 'arg0')])
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::WeightsPathStretchTag::WeightsPathStretchTag() [constructor]
+ cls.add_constructor([])
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): void ns3::WeightsPathStretchTag::AddPathInfo(ns3::Ptr<ns3::Node> node, uint32_t weight) [member function]
+ cls.add_method('AddPathInfo',
+ 'void',
+ [param('ns3::Ptr< ns3::Node >', 'node'), param('uint32_t', 'weight')])
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): void ns3::WeightsPathStretchTag::Deserialize(ns3::TagBuffer i) [member function]
+ cls.add_method('Deserialize',
+ 'void',
+ [param('ns3::TagBuffer', 'i')],
+ is_virtual=True)
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::Ptr<ns3::Node> ns3::WeightsPathStretchTag::GetDestinationNode() const [member function]
+ cls.add_method('GetDestinationNode',
+ 'ns3::Ptr< ns3::Node >',
+ [],
+ is_const=True)
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): std::list<ns3::WeightsPathStretchTag::NodeWeightPair, std::allocator<ns3::WeightsPathStretchTag::NodeWeightPair> > const & ns3::WeightsPathStretchTag::GetInfos() const [member function]
+ cls.add_method('GetInfos',
+ 'std::list< ns3::WeightsPathStretchTag::NodeWeightPair > const &',
+ [],
+ is_const=True)
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): uint32_t ns3::WeightsPathStretchTag::GetSerializedSize() const [member function]
+ cls.add_method('GetSerializedSize',
+ 'uint32_t',
+ [],
+ is_const=True, is_virtual=True)
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::Ptr<ns3::Node> ns3::WeightsPathStretchTag::GetSourceNode() const [member function]
+ cls.add_method('GetSourceNode',
+ 'ns3::Ptr< ns3::Node >',
+ [],
+ is_const=True)
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): uint64_t ns3::WeightsPathStretchTag::GetTotalWeight() const [member function]
+ cls.add_method('GetTotalWeight',
+ 'uint64_t',
+ [],
+ is_const=True)
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): static ns3::TypeId ns3::WeightsPathStretchTag::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): void ns3::WeightsPathStretchTag::Print(std::ostream & os) const [member function]
+ cls.add_method('Print',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_const=True, is_virtual=True)
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): void ns3::WeightsPathStretchTag::Serialize(ns3::TagBuffer i) const [member function]
+ cls.add_method('Serialize',
+ 'void',
+ [param('ns3::TagBuffer', 'i')],
+ is_const=True, is_virtual=True)
+ return
+
+def register_Ns3WeightsPathStretchTagNodeWeightPair_methods(root_module, cls):
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::WeightsPathStretchTag::NodeWeightPair::NodeWeightPair(ns3::WeightsPathStretchTag::NodeWeightPair const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::WeightsPathStretchTag::NodeWeightPair const &', 'arg0')])
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::WeightsPathStretchTag::NodeWeightPair::NodeWeightPair() [constructor]
+ cls.add_constructor([])
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::WeightsPathStretchTag::NodeWeightPair::NodeWeightPair(ns3::Ptr<ns3::Node> _node, uint32_t _weight) [constructor]
+ cls.add_constructor([param('ns3::Ptr< ns3::Node >', '_node'), param('uint32_t', '_weight')])
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::WeightsPathStretchTag::NodeWeightPair::node [variable]
+ cls.add_instance_attribute('node', 'ns3::Ptr< ns3::Node >', is_const=False)
+ ## ccnx-path-stretch-tag.h (module 'NDNabstraction'): ns3::WeightsPathStretchTag::NodeWeightPair::weight [variable]
+ cls.add_instance_attribute('weight', 'uint32_t', is_const=False)
+ return
+
+def register_Ns3WindowTracer_methods(root_module, cls):
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): ns3::WindowTracer::WindowTracer(ns3::WindowTracer const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::WindowTracer const &', 'arg0')])
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): ns3::WindowTracer::WindowTracer(std::ostream & os, ns3::Ptr<ns3::Node> node, std::string const & appId="*") [constructor]
+ cls.add_constructor([param('std::ostream &', 'os'), param('ns3::Ptr< ns3::Node >', 'node'), param('std::string const &', 'appId', default_value='"*"')])
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): static void ns3::WindowTracer::PrintHeader(std::ostream & os) [member function]
+ cls.add_method('PrintHeader',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_static=True)
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): void ns3::WindowTracer::OnWindowChange(std::string context, uint32_t oldValue, uint32_t newValue) [member function]
+ cls.add_method('OnWindowChange',
+ 'void',
+ [param('std::string', 'context'), param('uint32_t', 'oldValue'), param('uint32_t', 'newValue')],
+ is_virtual=True)
+ return
+
def register_Ns3AnnotatedTopologyReader_methods(root_module, cls):
## annotated-topology-reader.h (module 'NDNabstraction'): ns3::AnnotatedTopologyReader::AnnotatedTopologyReader(std::string const & path="", double scale=1.0e+0) [constructor]
cls.add_constructor([param('std::string const &', 'path', default_value='""'), param('double', 'scale', default_value='1.0e+0')])
@@ -3436,6 +4224,11 @@
'ns3::NodeContainer',
[],
is_const=True)
+ ## annotated-topology-reader.h (module 'NDNabstraction'): std::list<ns3::TopologyReader::Link, std::allocator<ns3::TopologyReader::Link> > const & ns3::AnnotatedTopologyReader::GetLinks() const [member function]
+ cls.add_method('GetLinks',
+ 'std::list< ns3::TopologyReader::Link > const &',
+ [],
+ is_const=True)
## annotated-topology-reader.h (module 'NDNabstraction'): void ns3::AnnotatedTopologyReader::AssignIpv4Addresses(ns3::Ipv4Address base) [member function]
cls.add_method('AssignIpv4Addresses',
'void',
@@ -3448,6 +4241,15 @@
cls.add_method('SetMobilityModel',
'void',
[param('std::string const &', 'model')])
+ ## annotated-topology-reader.h (module 'NDNabstraction'): void ns3::AnnotatedTopologyReader::ApplyOspfMetric() [member function]
+ cls.add_method('ApplyOspfMetric',
+ 'void',
+ [])
+ ## annotated-topology-reader.h (module 'NDNabstraction'): void ns3::AnnotatedTopologyReader::SavePositions(std::string const & file) const [member function]
+ cls.add_method('SavePositions',
+ 'void',
+ [param('std::string const &', 'file')],
+ is_const=True)
## annotated-topology-reader.h (module 'NDNabstraction'): ns3::Ptr<ns3::Node> ns3::AnnotatedTopologyReader::CreateNode(std::string const name) [member function]
cls.add_method('CreateNode',
'ns3::Ptr< ns3::Node >',
@@ -3463,11 +4265,6 @@
'void',
[],
visibility='protected')
- ## annotated-topology-reader.h (module 'NDNabstraction'): void ns3::AnnotatedTopologyReader::ApplyOspfMetric() [member function]
- cls.add_method('ApplyOspfMetric',
- 'void',
- [],
- visibility='protected')
return
def register_Ns3Application_methods(root_module, cls):
@@ -3610,6 +4407,46 @@
is_pure_virtual=True, is_const=True, is_virtual=True)
return
+def register_Ns3BatchesChecker_methods(root_module, cls):
+ ## batches.h (module 'NDNabstraction'): ns3::BatchesChecker::BatchesChecker() [constructor]
+ cls.add_constructor([])
+ ## batches.h (module 'NDNabstraction'): ns3::BatchesChecker::BatchesChecker(ns3::BatchesChecker const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::BatchesChecker const &', 'arg0')])
+ return
+
+def register_Ns3BatchesValue_methods(root_module, cls):
+ ## batches.h (module 'NDNabstraction'): ns3::BatchesValue::BatchesValue() [constructor]
+ cls.add_constructor([])
+ ## batches.h (module 'NDNabstraction'): ns3::BatchesValue::BatchesValue(ns3::BatchesValue const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::BatchesValue const &', 'arg0')])
+ ## batches.h (module 'NDNabstraction'): ns3::BatchesValue::BatchesValue(ns3::Batches const & value) [constructor]
+ cls.add_constructor([param('ns3::Batches const &', 'value')])
+ ## batches.h (module 'NDNabstraction'): ns3::Ptr<ns3::AttributeValue> ns3::BatchesValue::Copy() const [member function]
+ cls.add_method('Copy',
+ 'ns3::Ptr< ns3::AttributeValue >',
+ [],
+ is_const=True, is_virtual=True)
+ ## batches.h (module 'NDNabstraction'): bool ns3::BatchesValue::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)
+ ## batches.h (module 'NDNabstraction'): ns3::Batches ns3::BatchesValue::Get() const [member function]
+ cls.add_method('Get',
+ 'ns3::Batches',
+ [],
+ is_const=True)
+ ## batches.h (module 'NDNabstraction'): std::string ns3::BatchesValue::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)
+ ## batches.h (module 'NDNabstraction'): void ns3::BatchesValue::Set(ns3::Batches const & value) [member function]
+ cls.add_method('Set',
+ 'void',
+ [param('ns3::Batches const &', 'value')])
+ return
+
def register_Ns3CallbackChecker_methods(root_module, cls):
## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
cls.add_constructor([])
@@ -3714,20 +4551,20 @@
'ns3::TypeId',
[],
is_static=True)
- ## ccnx-app.h (module 'NDNabstraction'): void ns3::CcnxApp::OnContentObject(ns3::Ptr<const ns3::CcnxContentObjectHeader> const & contentObject, ns3::Ptr<const ns3::Packet> const & payload) [member function]
+ ## ccnx-app.h (module 'NDNabstraction'): void ns3::CcnxApp::OnContentObject(ns3::Ptr<const ns3::CcnxContentObjectHeader> const & contentObject, ns3::Ptr<ns3::Packet> payload) [member function]
cls.add_method('OnContentObject',
'void',
- [param('ns3::Ptr< ns3::CcnxContentObjectHeader const > const &', 'contentObject'), param('ns3::Ptr< ns3::Packet const > const &', 'payload')],
+ [param('ns3::Ptr< ns3::CcnxContentObjectHeader const > const &', 'contentObject'), param('ns3::Ptr< ns3::Packet >', 'payload')],
is_virtual=True)
- ## ccnx-app.h (module 'NDNabstraction'): void ns3::CcnxApp::OnInterest(ns3::Ptr<const ns3::CcnxInterestHeader> const & interest) [member function]
+ ## ccnx-app.h (module 'NDNabstraction'): void ns3::CcnxApp::OnInterest(ns3::Ptr<const ns3::CcnxInterestHeader> const & interest, ns3::Ptr<ns3::Packet> packet) [member function]
cls.add_method('OnInterest',
'void',
- [param('ns3::Ptr< ns3::CcnxInterestHeader const > const &', 'interest')],
+ [param('ns3::Ptr< ns3::CcnxInterestHeader const > const &', 'interest'), param('ns3::Ptr< ns3::Packet >', 'packet')],
is_virtual=True)
- ## ccnx-app.h (module 'NDNabstraction'): void ns3::CcnxApp::OnNack(ns3::Ptr<const ns3::CcnxInterestHeader> const & interest) [member function]
+ ## ccnx-app.h (module 'NDNabstraction'): void ns3::CcnxApp::OnNack(ns3::Ptr<const ns3::CcnxInterestHeader> const & interest, ns3::Ptr<ns3::Packet> packet) [member function]
cls.add_method('OnNack',
'void',
- [param('ns3::Ptr< ns3::CcnxInterestHeader const > const &', 'interest')],
+ [param('ns3::Ptr< ns3::CcnxInterestHeader const > const &', 'interest'), param('ns3::Ptr< ns3::Packet >', 'packet')],
is_virtual=True)
## ccnx-app.h (module 'NDNabstraction'): void ns3::CcnxApp::RegisterProtocolHandler(ns3::Callback<bool, ns3::Ptr<ns3::Packet const> const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> handler) [member function]
cls.add_method('RegisterProtocolHandler',
@@ -3799,6 +4636,17 @@
is_pure_virtual=True, is_const=True, is_virtual=True)
return
+def register_Ns3CcnxConsumerWindowTracer_methods(root_module, cls):
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): ns3::CcnxConsumerWindowTracer::CcnxConsumerWindowTracer(ns3::CcnxConsumerWindowTracer const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::CcnxConsumerWindowTracer const &', 'arg0')])
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): ns3::CcnxConsumerWindowTracer::CcnxConsumerWindowTracer(std::ostream & os, ns3::Ptr<ns3::Node> node, std::string const & appId="*") [constructor]
+ cls.add_constructor([param('std::ostream &', 'os'), param('ns3::Ptr< ns3::Node >', 'node'), param('std::string const &', 'appId', default_value='"*"')])
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): void ns3::CcnxConsumerWindowTracer::Connect() [member function]
+ cls.add_method('Connect',
+ 'void',
+ [])
+ return
+
def register_Ns3CcnxContentObjectHeader_methods(root_module, cls):
## ccnx-content-object-header.h (module 'NDNabstraction'): ns3::CcnxContentObjectHeader::CcnxContentObjectHeader(ns3::CcnxContentObjectHeader const & arg0) [copy constructor]
cls.add_constructor([param('ns3::CcnxContentObjectHeader const &', 'arg0')])
@@ -3893,6 +4741,16 @@
'uint32_t',
[],
is_const=True)
+ ## ccnx-face.h (module 'NDNabstraction'): uint16_t ns3::CcnxFace::GetMetric() const [member function]
+ cls.add_method('GetMetric',
+ 'uint16_t',
+ [],
+ is_const=True, is_virtual=True)
+ ## ccnx-face.h (module 'NDNabstraction'): ns3::Ptr<ns3::Node> ns3::CcnxFace::GetNode() const [member function]
+ cls.add_method('GetNode',
+ 'ns3::Ptr< ns3::Node >',
+ [],
+ is_const=True)
## ccnx-face.h (module 'NDNabstraction'): static ns3::TypeId ns3::CcnxFace::GetTypeId() [member function]
cls.add_method('GetTypeId',
'ns3::TypeId',
@@ -3941,6 +4799,11 @@
cls.add_method('SetId',
'void',
[param('uint32_t', 'id')])
+ ## ccnx-face.h (module 'NDNabstraction'): void ns3::CcnxFace::SetMetric(uint16_t metric) [member function]
+ cls.add_method('SetMetric',
+ 'void',
+ [param('uint16_t', 'metric')],
+ is_virtual=True)
## ccnx-face.h (module 'NDNabstraction'): void ns3::CcnxFace::SetUp(bool up=true) [member function]
cls.add_method('SetUp',
'void',
@@ -4304,6 +5167,11 @@
'std::list< std::string > const &',
[],
is_const=True)
+ ## ccnx-name-components.h (module 'NDNabstraction'): std::string ns3::CcnxNameComponents::GetLastComponent() const [member function]
+ cls.add_method('GetLastComponent',
+ 'std::string',
+ [],
+ is_const=True)
## ccnx-name-components.h (module 'NDNabstraction'): std::list<boost::reference_wrapper<std::string const>, std::allocator<boost::reference_wrapper<std::string const> > > ns3::CcnxNameComponents::GetSubComponents(size_t num) const [member function]
cls.add_method('GetSubComponents',
'std::list< boost::reference_wrapper< std::string const > >',
@@ -4361,6 +5229,27 @@
[param('ns3::CcnxNameComponents const &', 'value')])
return
+def register_Ns3CcnxPathWeightTracer_methods(root_module, cls):
+ ## ccnx-path-weight-tracer.h (module 'NDNabstraction'): ns3::CcnxPathWeightTracer::CcnxPathWeightTracer(ns3::CcnxPathWeightTracer const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::CcnxPathWeightTracer const &', 'arg0')])
+ ## ccnx-path-weight-tracer.h (module 'NDNabstraction'): ns3::CcnxPathWeightTracer::CcnxPathWeightTracer(std::ostream & os, ns3::Ptr<ns3::Node> node) [constructor]
+ cls.add_constructor([param('std::ostream &', 'os'), param('ns3::Ptr< ns3::Node >', 'node')])
+ ## ccnx-path-weight-tracer.h (module 'NDNabstraction'): void ns3::CcnxPathWeightTracer::Connect() [member function]
+ cls.add_method('Connect',
+ 'void',
+ [])
+ ## ccnx-path-weight-tracer.h (module 'NDNabstraction'): static void ns3::CcnxPathWeightTracer::PrintHeader(std::ostream & os) [member function]
+ cls.add_method('PrintHeader',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_static=True)
+ ## ccnx-path-weight-tracer.h (module 'NDNabstraction'): void ns3::CcnxPathWeightTracer::InLocalFace(std::string context, ns3::Ptr<ns3::Node> src, ns3::Ptr<ns3::Node> dst, uint32_t seqno, uint32_t weight) [member function]
+ cls.add_method('InLocalFace',
+ 'void',
+ [param('std::string', 'context'), param('ns3::Ptr< ns3::Node >', 'src'), param('ns3::Ptr< ns3::Node >', 'dst'), param('uint32_t', 'seqno'), param('uint32_t', 'weight')],
+ 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')])
@@ -4440,6 +5329,160 @@
[param('int64_t const &', 'value')])
return
+def register_Ns3Ipv4_methods(root_module, cls):
+ ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4(ns3::Ipv4 const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Ipv4 const &', 'arg0')])
+ ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4() [constructor]
+ cls.add_constructor([])
+ ## ipv4.h (module 'internet'): bool ns3::Ipv4::AddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+ cls.add_method('AddAddress',
+ 'bool',
+ [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): uint32_t ns3::Ipv4::AddInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
+ cls.add_method('AddInterface',
+ 'uint32_t',
+ [param('ns3::Ptr< ns3::NetDevice >', 'device')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): ns3::Ipv4InterfaceAddress ns3::Ipv4::GetAddress(uint32_t interface, uint32_t addressIndex) const [member function]
+ cls.add_method('GetAddress',
+ 'ns3::Ipv4InterfaceAddress',
+ [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): int32_t ns3::Ipv4::GetInterfaceForAddress(ns3::Ipv4Address address) const [member function]
+ cls.add_method('GetInterfaceForAddress',
+ 'int32_t',
+ [param('ns3::Ipv4Address', 'address')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): int32_t ns3::Ipv4::GetInterfaceForDevice(ns3::Ptr<const ns3::NetDevice> device) const [member function]
+ cls.add_method('GetInterfaceForDevice',
+ 'int32_t',
+ [param('ns3::Ptr< ns3::NetDevice const >', 'device')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): int32_t ns3::Ipv4::GetInterfaceForPrefix(ns3::Ipv4Address address, ns3::Ipv4Mask mask) const [member function]
+ cls.add_method('GetInterfaceForPrefix',
+ 'int32_t',
+ [param('ns3::Ipv4Address', 'address'), param('ns3::Ipv4Mask', 'mask')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): uint16_t ns3::Ipv4::GetMetric(uint32_t interface) const [member function]
+ cls.add_method('GetMetric',
+ 'uint16_t',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): uint16_t ns3::Ipv4::GetMtu(uint32_t interface) const [member function]
+ cls.add_method('GetMtu',
+ 'uint16_t',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): uint32_t ns3::Ipv4::GetNAddresses(uint32_t interface) const [member function]
+ cls.add_method('GetNAddresses',
+ 'uint32_t',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): uint32_t ns3::Ipv4::GetNInterfaces() const [member function]
+ cls.add_method('GetNInterfaces',
+ 'uint32_t',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv4::GetNetDevice(uint32_t interface) [member function]
+ cls.add_method('GetNetDevice',
+ 'ns3::Ptr< ns3::NetDevice >',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
+ cls.add_method('GetRoutingProtocol',
+ 'ns3::Ptr< ns3::Ipv4RoutingProtocol >',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): static ns3::TypeId ns3::Ipv4::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::Ipv4L4Protocol> protocol) [member function]
+ cls.add_method('Insert',
+ 'void',
+ [param('ns3::Ptr< ns3::Ipv4L4Protocol >', 'protocol')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
+ cls.add_method('IsDestinationAddress',
+ 'bool',
+ [param('ns3::Ipv4Address', 'address'), param('uint32_t', 'iif')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsForwarding(uint32_t interface) const [member function]
+ cls.add_method('IsForwarding',
+ 'bool',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsUp(uint32_t interface) const [member function]
+ cls.add_method('IsUp',
+ 'bool',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
+ cls.add_method('RemoveAddress',
+ 'bool',
+ [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
+ cls.add_method('SelectSourceAddress',
+ 'ns3::Ipv4Address',
+ [param('ns3::Ptr< ns3::NetDevice const >', 'device'), param('ns3::Ipv4Address', 'dst'), param('ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e', 'scope')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): void ns3::Ipv4::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+ cls.add_method('Send',
+ 'void',
+ [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): void ns3::Ipv4::SetDown(uint32_t interface) [member function]
+ cls.add_method('SetDown',
+ 'void',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): void ns3::Ipv4::SetForwarding(uint32_t interface, bool val) [member function]
+ cls.add_method('SetForwarding',
+ 'void',
+ [param('uint32_t', 'interface'), param('bool', 'val')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): void ns3::Ipv4::SetMetric(uint32_t interface, uint16_t metric) [member function]
+ cls.add_method('SetMetric',
+ 'void',
+ [param('uint32_t', 'interface'), param('uint16_t', 'metric')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): void ns3::Ipv4::SetRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol) [member function]
+ cls.add_method('SetRoutingProtocol',
+ 'void',
+ [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): void ns3::Ipv4::SetUp(uint32_t interface) [member function]
+ cls.add_method('SetUp',
+ 'void',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
+ cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
+ ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
+ cls.add_method('GetIpForward',
+ 'bool',
+ [],
+ is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+ ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetWeakEsModel() const [member function]
+ cls.add_method('GetWeakEsModel',
+ 'bool',
+ [],
+ is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+ ## ipv4.h (module 'internet'): void ns3::Ipv4::SetIpForward(bool forward) [member function]
+ cls.add_method('SetIpForward',
+ 'void',
+ [param('bool', 'forward')],
+ is_pure_virtual=True, visibility='private', is_virtual=True)
+ ## ipv4.h (module 'internet'): void ns3::Ipv4::SetWeakEsModel(bool model) [member function]
+ cls.add_method('SetWeakEsModel',
+ 'void',
+ [param('bool', 'model')],
+ is_pure_virtual=True, visibility='private', is_virtual=True)
+ return
+
def register_Ns3Ipv4AddressChecker_methods(root_module, cls):
## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker::Ipv4AddressChecker() [constructor]
cls.add_constructor([])
@@ -4480,6 +5523,312 @@
[param('ns3::Ipv4Address const &', 'value')])
return
+def register_Ns3Ipv4AppTracer_methods(root_module, cls):
+ cls.add_output_stream_operator()
+ ## ipv4-app-tracer.h (module 'NDNabstraction'): ns3::Ipv4AppTracer::Ipv4AppTracer(ns3::Ipv4AppTracer const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Ipv4AppTracer const &', 'arg0')])
+ ## ipv4-app-tracer.h (module 'NDNabstraction'): ns3::Ipv4AppTracer::Ipv4AppTracer(ns3::Ptr<ns3::Node> node, std::string const & appId="*") [constructor]
+ cls.add_constructor([param('ns3::Ptr< ns3::Node >', 'node'), param('std::string const &', 'appId', default_value='"*"')])
+ ## ipv4-app-tracer.h (module 'NDNabstraction'): void ns3::Ipv4AppTracer::Connect() [member function]
+ cls.add_method('Connect',
+ 'void',
+ [])
+ ## ipv4-app-tracer.h (module 'NDNabstraction'): void ns3::Ipv4AppTracer::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)
+ ## ipv4-app-tracer.h (module 'NDNabstraction'): void ns3::Ipv4AppTracer::PrintHeader(std::ostream & os) const [member function]
+ cls.add_method('PrintHeader',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4-app-tracer.h (module 'NDNabstraction'): void ns3::Ipv4AppTracer::Rx(std::string context, ns3::Ipv4Header const & arg1, ns3::Ptr<const ns3::Packet> arg2, uint32_t arg3) [member function]
+ cls.add_method('Rx',
+ 'void',
+ [param('std::string', 'context'), param('ns3::Ipv4Header const &', 'arg1'), param('ns3::Ptr< ns3::Packet const >', 'arg2'), param('uint32_t', 'arg3')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-app-tracer.h (module 'NDNabstraction'): void ns3::Ipv4AppTracer::Tx(std::string context, ns3::Ipv4Header const & arg1, ns3::Ptr<const ns3::Packet> arg2, uint32_t arg3) [member function]
+ cls.add_method('Tx',
+ 'void',
+ [param('std::string', 'context'), param('ns3::Ipv4Header const &', 'arg1'), param('ns3::Ptr< ns3::Packet const >', 'arg2'), param('uint32_t', 'arg3')],
+ is_pure_virtual=True, is_virtual=True)
+ return
+
+def register_Ns3Ipv4L3Protocol_methods(root_module, cls):
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::Ipv4L3Protocol() [constructor]
+ cls.add_constructor([])
+ ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::AddAddress(uint32_t i, ns3::Ipv4InterfaceAddress address) [member function]
+ cls.add_method('AddAddress',
+ 'bool',
+ [param('uint32_t', 'i'), param('ns3::Ipv4InterfaceAddress', 'address')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv4L3Protocol::AddInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
+ cls.add_method('AddInterface',
+ 'uint32_t',
+ [param('ns3::Ptr< ns3::NetDevice >', 'device')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::Ipv4L3Protocol::CreateRawSocket() [member function]
+ cls.add_method('CreateRawSocket',
+ 'ns3::Ptr< ns3::Socket >',
+ [])
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DeleteRawSocket(ns3::Ptr<ns3::Socket> socket) [member function]
+ cls.add_method('DeleteRawSocket',
+ 'void',
+ [param('ns3::Ptr< ns3::Socket >', 'socket')])
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4InterfaceAddress ns3::Ipv4L3Protocol::GetAddress(uint32_t interfaceIndex, uint32_t addressIndex) const [member function]
+ cls.add_method('GetAddress',
+ 'ns3::Ipv4InterfaceAddress',
+ [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4Interface> ns3::Ipv4L3Protocol::GetInterface(uint32_t i) const [member function]
+ cls.add_method('GetInterface',
+ 'ns3::Ptr< ns3::Ipv4Interface >',
+ [param('uint32_t', 'i')],
+ is_const=True)
+ ## ipv4-l3-protocol.h (module 'internet'): int32_t ns3::Ipv4L3Protocol::GetInterfaceForAddress(ns3::Ipv4Address addr) const [member function]
+ cls.add_method('GetInterfaceForAddress',
+ 'int32_t',
+ [param('ns3::Ipv4Address', 'addr')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): int32_t ns3::Ipv4L3Protocol::GetInterfaceForDevice(ns3::Ptr<const ns3::NetDevice> device) const [member function]
+ cls.add_method('GetInterfaceForDevice',
+ 'int32_t',
+ [param('ns3::Ptr< ns3::NetDevice const >', 'device')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): int32_t ns3::Ipv4L3Protocol::GetInterfaceForPrefix(ns3::Ipv4Address addr, ns3::Ipv4Mask mask) const [member function]
+ cls.add_method('GetInterfaceForPrefix',
+ 'int32_t',
+ [param('ns3::Ipv4Address', 'addr'), param('ns3::Ipv4Mask', 'mask')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): uint16_t ns3::Ipv4L3Protocol::GetMetric(uint32_t i) const [member function]
+ cls.add_method('GetMetric',
+ 'uint16_t',
+ [param('uint32_t', 'i')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): uint16_t ns3::Ipv4L3Protocol::GetMtu(uint32_t i) const [member function]
+ cls.add_method('GetMtu',
+ 'uint16_t',
+ [param('uint32_t', 'i')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv4L3Protocol::GetNAddresses(uint32_t interface) const [member function]
+ cls.add_method('GetNAddresses',
+ 'uint32_t',
+ [param('uint32_t', 'interface')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv4L3Protocol::GetNInterfaces() const [member function]
+ cls.add_method('GetNInterfaces',
+ 'uint32_t',
+ [],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv4L3Protocol::GetNetDevice(uint32_t i) [member function]
+ cls.add_method('GetNetDevice',
+ 'ns3::Ptr< ns3::NetDevice >',
+ [param('uint32_t', 'i')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4L4Protocol> ns3::Ipv4L3Protocol::GetProtocol(int protocolNumber) const [member function]
+ cls.add_method('GetProtocol',
+ 'ns3::Ptr< ns3::Ipv4L4Protocol >',
+ [param('int', 'protocolNumber')],
+ is_const=True)
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4L3Protocol::GetRoutingProtocol() const [member function]
+ cls.add_method('GetRoutingProtocol',
+ 'ns3::Ptr< ns3::Ipv4RoutingProtocol >',
+ [],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): static ns3::TypeId ns3::Ipv4L3Protocol::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Insert(ns3::Ptr<ns3::Ipv4L4Protocol> protocol) [member function]
+ cls.add_method('Insert',
+ 'void',
+ [param('ns3::Ptr< ns3::Ipv4L4Protocol >', 'protocol')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
+ cls.add_method('IsDestinationAddress',
+ 'bool',
+ [param('ns3::Ipv4Address', 'address'), param('uint32_t', 'iif')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsForwarding(uint32_t i) const [member function]
+ cls.add_method('IsForwarding',
+ 'bool',
+ [param('uint32_t', 'i')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsUp(uint32_t i) const [member function]
+ cls.add_method('IsUp',
+ 'bool',
+ [param('uint32_t', 'i')],
+ is_const=True, is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<const ns3::Packet> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
+ cls.add_method('Receive',
+ 'void',
+ [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Packet const >', 'p'), param('uint16_t', 'protocol'), param('ns3::Address const &', 'from'), param('ns3::Address const &', 'to'), param('ns3::NetDevice::PacketType', 'packetType')])
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::Ipv4L4Protocol> protocol) [member function]
+ cls.add_method('Remove',
+ 'void',
+ [param('ns3::Ptr< ns3::Ipv4L4Protocol >', 'protocol')])
+ ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
+ cls.add_method('RemoveAddress',
+ 'bool',
+ [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
+ cls.add_method('SelectSourceAddress',
+ 'ns3::Ipv4Address',
+ [param('ns3::Ptr< ns3::NetDevice const >', 'device'), param('ns3::Ipv4Address', 'dst'), param('ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e', 'scope')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+ cls.add_method('Send',
+ 'void',
+ [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SendWithHeader(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Header ipHeader, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+ cls.add_method('SendWithHeader',
+ 'void',
+ [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Header', 'ipHeader'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetDefaultTtl(uint8_t ttl) [member function]
+ cls.add_method('SetDefaultTtl',
+ 'void',
+ [param('uint8_t', 'ttl')])
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetDown(uint32_t i) [member function]
+ cls.add_method('SetDown',
+ 'void',
+ [param('uint32_t', 'i')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetForwarding(uint32_t i, bool val) [member function]
+ cls.add_method('SetForwarding',
+ 'void',
+ [param('uint32_t', 'i'), param('bool', 'val')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetMetric(uint32_t i, uint16_t metric) [member function]
+ cls.add_method('SetMetric',
+ 'void',
+ [param('uint32_t', 'i'), param('uint16_t', 'metric')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+ cls.add_method('SetNode',
+ 'void',
+ [param('ns3::Ptr< ns3::Node >', 'node')])
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol) [member function]
+ cls.add_method('SetRoutingProtocol',
+ 'void',
+ [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetUp(uint32_t i) [member function]
+ cls.add_method('SetUp',
+ 'void',
+ [param('uint32_t', 'i')],
+ is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::PROT_NUMBER [variable]
+ cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DoDispose() [member function]
+ cls.add_method('DoDispose',
+ 'void',
+ [],
+ visibility='protected', is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::NotifyNewAggregate() [member function]
+ cls.add_method('NotifyNewAggregate',
+ 'void',
+ [],
+ visibility='protected', is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::GetIpForward() const [member function]
+ cls.add_method('GetIpForward',
+ 'bool',
+ [],
+ is_const=True, visibility='private', is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::GetWeakEsModel() const [member function]
+ cls.add_method('GetWeakEsModel',
+ 'bool',
+ [],
+ is_const=True, visibility='private', is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetIpForward(bool forward) [member function]
+ cls.add_method('SetIpForward',
+ 'void',
+ [param('bool', 'forward')],
+ visibility='private', is_virtual=True)
+ ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetWeakEsModel(bool model) [member function]
+ cls.add_method('SetWeakEsModel',
+ 'void',
+ [param('bool', 'model')],
+ visibility='private', is_virtual=True)
+ return
+
+def register_Ns3Ipv4L3Tracer_methods(root_module, cls):
+ cls.add_output_stream_operator()
+ ## ipv4-l3-tracer.h (module 'NDNabstraction'): ns3::Ipv4L3Tracer::Ipv4L3Tracer(ns3::Ipv4L3Tracer const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Ipv4L3Tracer const &', 'arg0')])
+ ## ipv4-l3-tracer.h (module 'NDNabstraction'): ns3::Ipv4L3Tracer::Ipv4L3Tracer(ns3::Ptr<ns3::Node> node) [constructor]
+ cls.add_constructor([param('ns3::Ptr< ns3::Node >', 'node')])
+ ## ipv4-l3-tracer.h (module 'NDNabstraction'): void ns3::Ipv4L3Tracer::Connect() [member function]
+ cls.add_method('Connect',
+ 'void',
+ [])
+ ## ipv4-l3-tracer.h (module 'NDNabstraction'): void ns3::Ipv4L3Tracer::Drop(std::string context, ns3::Ipv4Header const & arg1, ns3::Ptr<const ns3::Packet> arg2, ns3::Ipv4L3Protocol::DropReason arg3, ns3::Ptr<ns3::Ipv4> arg4, uint32_t arg5) [member function]
+ cls.add_method('Drop',
+ 'void',
+ [param('std::string', 'context'), param('ns3::Ipv4Header const &', 'arg1'), param('ns3::Ptr< ns3::Packet const >', 'arg2'), param('ns3::Ipv4L3Protocol::DropReason', 'arg3'), param('ns3::Ptr< ns3::Ipv4 >', 'arg4'), param('uint32_t', 'arg5')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-l3-tracer.h (module 'NDNabstraction'): void ns3::Ipv4L3Tracer::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)
+ ## ipv4-l3-tracer.h (module 'NDNabstraction'): void ns3::Ipv4L3Tracer::PrintHeader(std::ostream & os) const [member function]
+ cls.add_method('PrintHeader',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4-l3-tracer.h (module 'NDNabstraction'): void ns3::Ipv4L3Tracer::Rx(std::string context, ns3::Ptr<const ns3::Packet> arg1, ns3::Ptr<ns3::Ipv4> arg2, uint32_t arg3) [member function]
+ cls.add_method('Rx',
+ 'void',
+ [param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'arg1'), param('ns3::Ptr< ns3::Ipv4 >', 'arg2'), param('uint32_t', 'arg3')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-l3-tracer.h (module 'NDNabstraction'): void ns3::Ipv4L3Tracer::Tx(std::string context, ns3::Ptr<const ns3::Packet> arg1, ns3::Ptr<ns3::Ipv4> arg2, uint32_t arg3) [member function]
+ cls.add_method('Tx',
+ 'void',
+ [param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'arg1'), param('ns3::Ptr< ns3::Ipv4 >', 'arg2'), param('uint32_t', 'arg3')],
+ is_pure_virtual=True, is_virtual=True)
+ return
+
+def register_Ns3Ipv4L4Protocol_methods(root_module, cls):
+ ## ipv4-l4-protocol.h (module 'internet'): ns3::Ipv4L4Protocol::Ipv4L4Protocol() [constructor]
+ cls.add_constructor([])
+ ## ipv4-l4-protocol.h (module 'internet'): ns3::Ipv4L4Protocol::Ipv4L4Protocol(ns3::Ipv4L4Protocol const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Ipv4L4Protocol const &', 'arg0')])
+ ## ipv4-l4-protocol.h (module 'internet'): ns3::Callback<void,ns3::Ptr<ns3::Packet>,ns3::Ipv4Address,ns3::Ipv4Address,unsigned char,ns3::Ptr<ns3::Ipv4Route>,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ns3::Ipv4L4Protocol::GetDownTarget() const [member function]
+ cls.add_method('GetDownTarget',
+ 'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Ipv4Address, ns3::Ipv4Address, unsigned char, ns3::Ptr< ns3::Ipv4Route >, ns3::empty, ns3::empty, ns3::empty, ns3::empty >',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4-l4-protocol.h (module 'internet'): int ns3::Ipv4L4Protocol::GetProtocolNumber() const [member function]
+ cls.add_method('GetProtocolNumber',
+ 'int',
+ [],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4-l4-protocol.h (module 'internet'): static ns3::TypeId ns3::Ipv4L4Protocol::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## ipv4-l4-protocol.h (module 'internet'): ns3::Ipv4L4Protocol::RxStatus ns3::Ipv4L4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
+ cls.add_method('Receive',
+ 'ns3::Ipv4L4Protocol::RxStatus',
+ [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-l4-protocol.h (module 'internet'): void ns3::Ipv4L4Protocol::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',
+ 'void',
+ [param('ns3::Ipv4Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv4Address', 'payloadSource'), param('ns3::Ipv4Address', 'payloadDestination'), param('uint8_t const *', 'payload')],
+ is_virtual=True)
+ ## ipv4-l4-protocol.h (module 'internet'): void ns3::Ipv4L4Protocol::SetDownTarget(ns3::Callback<void,ns3::Ptr<ns3::Packet>,ns3::Ipv4Address,ns3::Ipv4Address,unsigned char,ns3::Ptr<ns3::Ipv4Route>,ns3::empty,ns3::empty,ns3::empty,ns3::empty> cb) [member function]
+ cls.add_method('SetDownTarget',
+ 'void',
+ [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Ipv4Address, ns3::Ipv4Address, unsigned char, ns3::Ptr< ns3::Ipv4Route >, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')],
+ is_pure_virtual=True, is_virtual=True)
+ return
+
def register_Ns3Ipv4MaskChecker_methods(root_module, cls):
## ipv4-address.h (module 'network'): ns3::Ipv4MaskChecker::Ipv4MaskChecker() [constructor]
cls.add_constructor([])
@@ -4520,6 +5869,154 @@
[param('ns3::Ipv4Mask const &', 'value')])
return
+def register_Ns3Ipv4MulticastRoute_methods(root_module, cls):
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute::Ipv4MulticastRoute(ns3::Ipv4MulticastRoute const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Ipv4MulticastRoute const &', 'arg0')])
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute::Ipv4MulticastRoute() [constructor]
+ cls.add_constructor([])
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4MulticastRoute::GetGroup() const [member function]
+ cls.add_method('GetGroup',
+ 'ns3::Ipv4Address',
+ [],
+ is_const=True)
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4MulticastRoute::GetOrigin() const [member function]
+ cls.add_method('GetOrigin',
+ 'ns3::Ipv4Address',
+ [],
+ is_const=True)
+ ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
+ cls.add_method('GetOutputTtl',
+ 'uint32_t',
+ [param('uint32_t', 'oif')],
+ deprecated=True)
+ ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
+ cls.add_method('GetOutputTtlMap',
+ 'std::map< unsigned int, unsigned int >',
+ [],
+ is_const=True)
+ ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetParent() const [member function]
+ cls.add_method('GetParent',
+ 'uint32_t',
+ [],
+ is_const=True)
+ ## ipv4-route.h (module 'internet'): void ns3::Ipv4MulticastRoute::SetGroup(ns3::Ipv4Address const group) [member function]
+ cls.add_method('SetGroup',
+ 'void',
+ [param('ns3::Ipv4Address const', 'group')])
+ ## ipv4-route.h (module 'internet'): void ns3::Ipv4MulticastRoute::SetOrigin(ns3::Ipv4Address const origin) [member function]
+ cls.add_method('SetOrigin',
+ 'void',
+ [param('ns3::Ipv4Address const', 'origin')])
+ ## ipv4-route.h (module 'internet'): void ns3::Ipv4MulticastRoute::SetOutputTtl(uint32_t oif, uint32_t ttl) [member function]
+ cls.add_method('SetOutputTtl',
+ 'void',
+ [param('uint32_t', 'oif'), param('uint32_t', 'ttl')])
+ ## ipv4-route.h (module 'internet'): void ns3::Ipv4MulticastRoute::SetParent(uint32_t iif) [member function]
+ cls.add_method('SetParent',
+ 'void',
+ [param('uint32_t', 'iif')])
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute::MAX_INTERFACES [variable]
+ cls.add_static_attribute('MAX_INTERFACES', 'uint32_t const', is_const=True)
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute::MAX_TTL [variable]
+ cls.add_static_attribute('MAX_TTL', 'uint32_t const', is_const=True)
+ return
+
+def register_Ns3Ipv4Route_methods(root_module, cls):
+ cls.add_output_stream_operator()
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4Route::Ipv4Route(ns3::Ipv4Route const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Ipv4Route const &', 'arg0')])
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4Route::Ipv4Route() [constructor]
+ cls.add_constructor([])
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Route::GetDestination() const [member function]
+ cls.add_method('GetDestination',
+ 'ns3::Ipv4Address',
+ [],
+ is_const=True)
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Route::GetGateway() const [member function]
+ cls.add_method('GetGateway',
+ 'ns3::Ipv4Address',
+ [],
+ is_const=True)
+ ## ipv4-route.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv4Route::GetOutputDevice() const [member function]
+ cls.add_method('GetOutputDevice',
+ 'ns3::Ptr< ns3::NetDevice >',
+ [],
+ is_const=True)
+ ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Route::GetSource() const [member function]
+ cls.add_method('GetSource',
+ 'ns3::Ipv4Address',
+ [],
+ is_const=True)
+ ## ipv4-route.h (module 'internet'): void ns3::Ipv4Route::SetDestination(ns3::Ipv4Address dest) [member function]
+ cls.add_method('SetDestination',
+ 'void',
+ [param('ns3::Ipv4Address', 'dest')])
+ ## ipv4-route.h (module 'internet'): void ns3::Ipv4Route::SetGateway(ns3::Ipv4Address gw) [member function]
+ cls.add_method('SetGateway',
+ 'void',
+ [param('ns3::Ipv4Address', 'gw')])
+ ## ipv4-route.h (module 'internet'): void ns3::Ipv4Route::SetOutputDevice(ns3::Ptr<ns3::NetDevice> outputDevice) [member function]
+ cls.add_method('SetOutputDevice',
+ 'void',
+ [param('ns3::Ptr< ns3::NetDevice >', 'outputDevice')])
+ ## ipv4-route.h (module 'internet'): void ns3::Ipv4Route::SetSource(ns3::Ipv4Address src) [member function]
+ cls.add_method('SetSource',
+ 'void',
+ [param('ns3::Ipv4Address', 'src')])
+ return
+
+def register_Ns3Ipv4RoutingProtocol_methods(root_module, cls):
+ ## ipv4-routing-protocol.h (module 'internet'): ns3::Ipv4RoutingProtocol::Ipv4RoutingProtocol() [constructor]
+ cls.add_constructor([])
+ ## ipv4-routing-protocol.h (module 'internet'): ns3::Ipv4RoutingProtocol::Ipv4RoutingProtocol(ns3::Ipv4RoutingProtocol const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::Ipv4RoutingProtocol const &', 'arg0')])
+ ## ipv4-routing-protocol.h (module 'internet'): static ns3::TypeId ns3::Ipv4RoutingProtocol::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::NotifyAddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+ cls.add_method('NotifyAddAddress',
+ 'void',
+ [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::NotifyInterfaceDown(uint32_t interface) [member function]
+ cls.add_method('NotifyInterfaceDown',
+ 'void',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::NotifyInterfaceUp(uint32_t interface) [member function]
+ cls.add_method('NotifyInterfaceUp',
+ 'void',
+ [param('uint32_t', 'interface')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::NotifyRemoveAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+ cls.add_method('NotifyRemoveAddress',
+ 'void',
+ [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::PrintRoutingTable(ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+ cls.add_method('PrintRoutingTable',
+ 'void',
+ [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ipv4-routing-protocol.h (module 'internet'): bool ns3::Ipv4RoutingProtocol::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+ cls.add_method('RouteInput',
+ 'bool',
+ [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-routing-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4RoutingProtocol::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
+ cls.add_method('RouteOutput',
+ 'ns3::Ptr< ns3::Ipv4Route >',
+ [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice >', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::SetIpv4(ns3::Ptr<ns3::Ipv4> ipv4) [member function]
+ cls.add_method('SetIpv4',
+ 'void',
+ [param('ns3::Ptr< ns3::Ipv4 >', 'ipv4')],
+ is_pure_virtual=True, is_virtual=True)
+ return
+
def register_Ns3Ipv6AddressChecker_methods(root_module, cls):
## ipv6-address.h (module 'network'): ns3::Ipv6AddressChecker::Ipv6AddressChecker() [constructor]
cls.add_constructor([])
@@ -4955,6 +6452,19 @@
[param('ns3::ObjectFactory const &', 'value')])
return
+def register_Ns3OutputStreamWrapper_methods(root_module, cls):
+ ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(ns3::OutputStreamWrapper const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::OutputStreamWrapper const &', 'arg0')])
+ ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(std::string filename, std::_Ios_Openmode filemode) [constructor]
+ cls.add_constructor([param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode')])
+ ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(std::ostream * os) [constructor]
+ cls.add_constructor([param('std::ostream *', 'os')])
+ ## output-stream-wrapper.h (module 'network'): std::ostream * ns3::OutputStreamWrapper::GetStream() [member function]
+ cls.add_method('GetStream',
+ 'std::ostream *',
+ [])
+ return
+
def register_Ns3Packet_methods(root_module, cls):
cls.add_output_stream_operator()
## packet.h (module 'network'): ns3::Packet::Packet() [constructor]
@@ -4980,11 +6490,10 @@
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]
+ ## packet.h (module 'network'): void ns3::Packet::AddPacketTag(ns3::Ptr<const ns3::Tag> tag) [member function]
cls.add_method('AddPacketTag',
'void',
- [param('ns3::Tag const &', 'tag')],
- is_const=True)
+ [param('ns3::Ptr< ns3::Tag const >', 'tag')])
## packet.h (module 'network'): void ns3::Packet::AddPaddingAtEnd(uint32_t size) [member function]
cls.add_method('AddPaddingAtEnd',
'void',
@@ -5043,11 +6552,6 @@
'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',
@@ -5073,10 +6577,10 @@
'uint32_t',
[param('ns3::Header &', 'header')],
is_const=True)
- ## packet.h (module 'network'): bool ns3::Packet::PeekPacketTag(ns3::Tag & tag) const [member function]
+ ## packet.h (module 'network'): ns3::Ptr<const ns3::Tag> ns3::Packet::PeekPacketTag(ns3::TypeId tagType) const [member function]
cls.add_method('PeekPacketTag',
- 'bool',
- [param('ns3::Tag &', 'tag')],
+ 'ns3::Ptr< ns3::Tag const >',
+ [param('ns3::TypeId', 'tagType')],
is_const=True)
## packet.h (module 'network'): uint32_t ns3::Packet::PeekTrailer(ns3::Trailer & trailer) [member function]
cls.add_method('PeekTrailer',
@@ -5117,10 +6621,10 @@
cls.add_method('RemoveHeader',
'uint32_t',
[param('ns3::Header &', 'header')])
- ## packet.h (module 'network'): bool ns3::Packet::RemovePacketTag(ns3::Tag & tag) [member function]
+ ## packet.h (module 'network'): ns3::Ptr<const ns3::Tag> ns3::Packet::RemovePacketTag(ns3::TypeId tagType) [member function]
cls.add_method('RemovePacketTag',
- 'bool',
- [param('ns3::Tag &', 'tag')])
+ 'ns3::Ptr< ns3::Tag const >',
+ [param('ns3::TypeId', 'tagType')])
## packet.h (module 'network'): uint32_t ns3::Packet::RemoveTrailer(ns3::Trailer & trailer) [member function]
cls.add_method('RemoveTrailer',
'uint32_t',
@@ -5192,11 +6696,148 @@
cls.add_method('Commit',
'void',
[])
- ## rocketfuel-weights-reader.h (module 'NDNabstraction'): void ns3::RocketfuelWeightsReader::SavePositions(std::string const & file) const [member function]
- cls.add_method('SavePositions',
+ return
+
+def register_Ns3SocketAddressTag_methods(root_module, cls):
+ ## socket.h (module 'network'): ns3::SocketAddressTag::SocketAddressTag(ns3::SocketAddressTag const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::SocketAddressTag const &', 'arg0')])
+ ## socket.h (module 'network'): ns3::SocketAddressTag::SocketAddressTag() [constructor]
+ cls.add_constructor([])
+ ## socket.h (module 'network'): void ns3::SocketAddressTag::Deserialize(ns3::TagBuffer i) [member function]
+ cls.add_method('Deserialize',
'void',
- [param('std::string const &', 'file')],
+ [param('ns3::TagBuffer', 'i')],
+ is_virtual=True)
+ ## socket.h (module 'network'): ns3::Address ns3::SocketAddressTag::GetAddress() const [member function]
+ cls.add_method('GetAddress',
+ 'ns3::Address',
+ [],
is_const=True)
+ ## socket.h (module 'network'): ns3::TypeId ns3::SocketAddressTag::GetInstanceTypeId() const [member function]
+ cls.add_method('GetInstanceTypeId',
+ 'ns3::TypeId',
+ [],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): uint32_t ns3::SocketAddressTag::GetSerializedSize() const [member function]
+ cls.add_method('GetSerializedSize',
+ 'uint32_t',
+ [],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): static ns3::TypeId ns3::SocketAddressTag::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## socket.h (module 'network'): void ns3::SocketAddressTag::Print(std::ostream & os) const [member function]
+ cls.add_method('Print',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): void ns3::SocketAddressTag::Serialize(ns3::TagBuffer i) const [member function]
+ cls.add_method('Serialize',
+ 'void',
+ [param('ns3::TagBuffer', 'i')],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): void ns3::SocketAddressTag::SetAddress(ns3::Address addr) [member function]
+ cls.add_method('SetAddress',
+ 'void',
+ [param('ns3::Address', 'addr')])
+ return
+
+def register_Ns3SocketIpTtlTag_methods(root_module, cls):
+ ## socket.h (module 'network'): ns3::SocketIpTtlTag::SocketIpTtlTag(ns3::SocketIpTtlTag const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::SocketIpTtlTag const &', 'arg0')])
+ ## socket.h (module 'network'): ns3::SocketIpTtlTag::SocketIpTtlTag() [constructor]
+ cls.add_constructor([])
+ ## socket.h (module 'network'): void ns3::SocketIpTtlTag::Deserialize(ns3::TagBuffer i) [member function]
+ cls.add_method('Deserialize',
+ 'void',
+ [param('ns3::TagBuffer', 'i')],
+ is_virtual=True)
+ ## socket.h (module 'network'): ns3::TypeId ns3::SocketIpTtlTag::GetInstanceTypeId() const [member function]
+ cls.add_method('GetInstanceTypeId',
+ 'ns3::TypeId',
+ [],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): uint32_t ns3::SocketIpTtlTag::GetSerializedSize() const [member function]
+ cls.add_method('GetSerializedSize',
+ 'uint32_t',
+ [],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): uint8_t ns3::SocketIpTtlTag::GetTtl() const [member function]
+ cls.add_method('GetTtl',
+ 'uint8_t',
+ [],
+ is_const=True)
+ ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpTtlTag::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## socket.h (module 'network'): void ns3::SocketIpTtlTag::Print(std::ostream & os) const [member function]
+ cls.add_method('Print',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): void ns3::SocketIpTtlTag::Serialize(ns3::TagBuffer i) const [member function]
+ cls.add_method('Serialize',
+ 'void',
+ [param('ns3::TagBuffer', 'i')],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): void ns3::SocketIpTtlTag::SetTtl(uint8_t ttl) [member function]
+ cls.add_method('SetTtl',
+ 'void',
+ [param('uint8_t', 'ttl')])
+ return
+
+def register_Ns3SocketSetDontFragmentTag_methods(root_module, cls):
+ ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag::SocketSetDontFragmentTag(ns3::SocketSetDontFragmentTag const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::SocketSetDontFragmentTag const &', 'arg0')])
+ ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag::SocketSetDontFragmentTag() [constructor]
+ cls.add_constructor([])
+ ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Deserialize(ns3::TagBuffer i) [member function]
+ cls.add_method('Deserialize',
+ 'void',
+ [param('ns3::TagBuffer', 'i')],
+ is_virtual=True)
+ ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Disable() [member function]
+ cls.add_method('Disable',
+ 'void',
+ [])
+ ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Enable() [member function]
+ cls.add_method('Enable',
+ 'void',
+ [])
+ ## socket.h (module 'network'): ns3::TypeId ns3::SocketSetDontFragmentTag::GetInstanceTypeId() const [member function]
+ cls.add_method('GetInstanceTypeId',
+ 'ns3::TypeId',
+ [],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): uint32_t ns3::SocketSetDontFragmentTag::GetSerializedSize() const [member function]
+ cls.add_method('GetSerializedSize',
+ 'uint32_t',
+ [],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): static ns3::TypeId ns3::SocketSetDontFragmentTag::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## socket.h (module 'network'): bool ns3::SocketSetDontFragmentTag::IsEnabled() const [member function]
+ cls.add_method('IsEnabled',
+ 'bool',
+ [],
+ is_const=True)
+ ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Print(std::ostream & os) const [member function]
+ cls.add_method('Print',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_const=True, is_virtual=True)
+ ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Serialize(ns3::TagBuffer i) const [member function]
+ cls.add_method('Serialize',
+ 'void',
+ [param('ns3::TagBuffer', 'i')],
+ is_const=True, is_virtual=True)
return
def register_Ns3SpringMobilityModel_methods(root_module, cls):
@@ -5235,6 +6876,17 @@
visibility='private', is_virtual=True)
return
+def register_Ns3TcpCongestionWindowTracer_methods(root_module, cls):
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): ns3::TcpCongestionWindowTracer::TcpCongestionWindowTracer(ns3::TcpCongestionWindowTracer const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::TcpCongestionWindowTracer const &', 'arg0')])
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): ns3::TcpCongestionWindowTracer::TcpCongestionWindowTracer(std::ostream & os, ns3::Ptr<ns3::Node> node, std::string const & appId="*") [constructor]
+ cls.add_constructor([param('std::ostream &', 'os'), param('ns3::Ptr< ns3::Node >', 'node'), param('std::string const &', 'appId', default_value='"*"')])
+ ## ccnx-consumer-window-tracer.h (module 'NDNabstraction'): void ns3::TcpCongestionWindowTracer::Connect() [member function]
+ cls.add_method('Connect',
+ 'void',
+ [])
+ return
+
def register_Ns3TimeChecker_methods(root_module, cls):
## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
cls.add_constructor([])
@@ -5437,6 +7089,10 @@
def register_functions(root_module):
module = root_module
+ ## batches.h (module 'NDNabstraction'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeBatchesChecker() [free function]
+ module.add_function('MakeBatchesChecker',
+ 'ns3::Ptr< ns3::AttributeChecker const >',
+ [])
## ccnx-name-components.h (module 'NDNabstraction'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeCcnxNameComponentsChecker() [free function]
module.add_function('MakeCcnxNameComponentsChecker',
'ns3::Ptr< ns3::AttributeChecker const >',
diff --git a/examples/abilene-topology-backup.txt b/examples/abilene-topology-backup.txt
deleted file mode 100644
index f4f1d43..0000000
--- a/examples/abilene-topology-backup.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-12 30
-1 2 9920000 1 1 100 100
-2 1 9920000 1 1 100 100
-2 5 9920000 1176 1 100 100
-2 6 2480000 587 1 100 100
-2 12 9920000 846 1 100 100
-3 6 9920000 260 1 100 100
-3 9 9920000 700 1 100 100
-4 7 9920000 639 1 100 100
-4 10 9920000 1295 1 100 100
-4 11 9920000 2095 1 100 100
-5 2 9920000 1176 1 100 100
-5 7 9920000 902 1 100 100
-5 8 9920000 1893 1 100 100
-6 2 9920000 587 1 100 100
-6 3 2480000 260 1 100 100
-6 7 9920000 548 1 100 100
-7 4 9920000 639 1 100 100
-7 5 9920000 902 1 100 100
-7 6 9920000 548 1 100 100
-8 5 9920000 1893 1 100 100
-8 10 9920000 366 1 100 100
-9 3 9920000 700 1 100 100
-9 12 9920000 233 1 100 100
-10 4 9920000 1295 1 100 100
-10 8 9920000 366 1 100 100
-10 11 9920000 861 1 100 100
-11 4 9920000 2095 1 100 100
-11 10 9920000 861 1 100 100
-12 2 9920000 846 1 100 100
-12 9 9920000 233 1 100 100
diff --git a/examples/abilene-topology.cc b/examples/abilene-topology.cc
index 48ad6db..ff7f52d 100644
--- a/examples/abilene-topology.cc
+++ b/examples/abilene-topology.cc
@@ -117,7 +117,7 @@
ccnxHelper.InstallAll ();
NS_LOG_INFO ("Installing Applications");
- CcnxAppHelper consumerHelper ("ns3::CcnxConsumer");
+ CcnxAppHelper consumerHelper ("ns3::CcnxConsumerCbr");
consumerHelper.SetPrefix ("/Data");
consumerHelper.SetAttribute ("MeanRate", StringValue ("1Mbps"));
ApplicationContainer consumers = consumerHelper.Install (Names::Find<Node> ("/abilene", "SNVAng"));
@@ -146,7 +146,7 @@
}
CcnxTraceHelper traceHelper;
- traceHelper.EnableAggregateAppAll ("ns3::CcnxConsumer");
+ traceHelper.EnableAggregateAppAll ("ns3::CcnxConsumerCbr");
traceHelper.EnableAggregateAppAll ("ns3::CcnxProducer");
traceHelper.EnableAggregateL3All ();
traceHelper.SetL3TraceFile ("trace-l3.log");
diff --git a/examples/annotated-topology-read-example.cc b/examples/annotated-topology-read-example.cc
index 450d8d1..d000d57 100644
--- a/examples/annotated-topology-read-example.cc
+++ b/examples/annotated-topology-read-example.cc
@@ -93,7 +93,7 @@
Ptr<CcnxFaceContainer> cf = ccnx.Install (nodes);
NS_LOG_INFO ("Installing Applications");
- CcnxAppHelper helper ("ns3::CcnxConsumer");
+ CcnxAppHelper helper ("ns3::CcnxConsumerCbr");
helper.SetPrefix ("/3");
ApplicationContainer app = helper.Install ("1");
app.Start (Seconds (1.0));
diff --git a/examples/base-experiment.h b/examples/base-experiment.h
new file mode 100644
index 0000000..4b3c052
--- /dev/null
+++ b/examples/base-experiment.h
@@ -0,0 +1,192 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2011,2012 University of California, Los Angeles
+ *
+ * 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: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#ifndef BASE_EXPERIMENT_H
+#define BASE_EXPERIMENT_H
+
+#include "ns3/rocketfuel-topology-reader.h"
+
+void PrintTime ()
+{
+ cout << "Progress: " << Simulator::Now ().ToDouble (Time::S) << "s" << endl;
+
+ Simulator::Schedule (Seconds (5.0), PrintTime);
+}
+
+class BaseExperiment
+{
+public:
+ BaseExperiment ()
+ : m_rand (0,52)
+ , reader (0)
+ , m_numNodes (52)
+ { }
+
+ ~BaseExperiment ()
+ {
+ if (reader != 0) delete reader;
+ }
+
+ void
+ ConfigureTopology ()
+ {
+ Names::Clear ();
+ cout << "Configure Topology\n";
+ if (reader != 0) delete reader;
+ reader = new RocketfuelWeightsReader ("/sprint");
+
+ string weights ("./src/NDNabstraction/examples/sprint-pops.weights");
+ string latencies ("./src/NDNabstraction/examples/sprint-pops.latencies");
+ string positions ("./src/NDNabstraction/examples/sprint-pops.positions");
+
+ reader->SetFileName (positions);
+ reader->SetFileType (RocketfuelWeightsReader::POSITIONS);
+ reader->Read ();
+
+ reader->SetFileName (weights);
+ reader->SetFileType (RocketfuelWeightsReader::WEIGHTS);
+ reader->Read ();
+
+ reader->SetFileName (latencies);
+ reader->SetFileType (RocketfuelWeightsReader::LATENCIES);
+ reader->Read ();
+
+ reader->Commit ();
+ }
+
+ void InstallCcnxStackImpl ()
+ {
+ InternetStackHelper stack;
+ Ipv4GlobalRoutingHelper ipv4RoutingHelper ("ns3::Ipv4GlobalRoutingOrderedNexthops");
+ stack.SetRoutingHelper (ipv4RoutingHelper);
+ stack.Install (reader->GetNodes ());
+
+ reader->AssignIpv4Addresses (Ipv4Address ("10.0.0.0"));
+
+ // Install CCNx stack
+ cout << "Installing CCNx stack\n";
+ CcnxStackHelper ccnxHelper;
+ ccnxHelper.SetForwardingStrategy ("ns3::CcnxBestRouteStrategy");
+ ccnxHelper.EnableLimits (true, Seconds(0.1));
+ ccnxHelper.SetDefaultRoutes (false);
+ ccnxHelper.InstallAll ();
+
+ reader->ApplyOspfMetric ();
+ }
+
+ void InstallCcnxStack (bool installFIBs = true)
+ {
+ InstallCcnxStackImpl ();
+
+ CcnxStackHelper ccnxHelper;
+ ccnxHelper.InstallFakeGlobalRoutes ();
+ if (installFIBs)
+ {
+ // // Populate FIB based on IPv4 global routing controller
+ ccnxHelper.InstallRoutesToAll ();
+ }
+ }
+
+ void InstallIpStack ()
+ {
+ InternetStackHelper stack;
+ stack.Install (reader->GetNodes ());
+ reader->AssignIpv4Addresses (Ipv4Address ("10.0.0.0"));
+ reader->ApplyOspfMetric ();
+
+ Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+ }
+
+ void
+ GenerateRandomPairs (uint16_t numStreams)
+ {
+ m_pairs.clear ();
+ // map<uint32_t, set<uint32_t> > streams;
+ m_usedNodes.clear ();
+
+ uint16_t createdStreams = 0;
+ uint16_t guard = 0;
+ while (createdStreams < numStreams && guard < (numeric_limits<uint16_t>::max ()-1))
+ {
+ guard ++;
+
+ uint32_t node1_num = m_rand.GetValue (); //43;//
+ uint32_t node2_num = m_rand.GetValue (); //38;//
+
+ if (node1_num == node2_num)
+ continue;
+
+ if (m_usedNodes.count (node1_num) > 0 ||
+ m_usedNodes.count (node2_num) > 0 )
+ {
+ continue; // don't reuse nodes
+ }
+
+ m_usedNodes.insert (node1_num);
+ m_usedNodes.insert (node2_num);
+
+ m_pairs.push_back (make_tuple (node1_num, node2_num));
+ createdStreams ++;
+ }
+ }
+
+ void
+ SetPair (uint32_t pairId)
+ {
+ m_pairs.clear ();
+ m_usedNodes.clear ();
+
+ uint32_t i = 0;
+ for (uint32_t node1_num = 0; node1_num < 52; node1_num++)
+ for (uint32_t node2_num = 0; node2_num < 52; node2_num++)
+ {
+ if (node1_num == node2_num) continue;
+
+ // std::cout << "i = " << i << ", pairId = " << pairId << "\n";
+ if (i++ != pairId) continue;
+
+ m_usedNodes.insert (node1_num);
+ m_usedNodes.insert (node2_num);
+
+ m_pairs.push_back (make_tuple (node1_num, node2_num));
+ return;
+ }
+ }
+
+ void
+ Run (const Time &finishTime)
+ {
+ cout << "Run Simulation.\n";
+ Simulator::Stop (finishTime);
+ Simulator::Schedule (Seconds (5.0), PrintTime);
+ Simulator::Run ();
+ Simulator::Destroy ();
+ cout << "Done.\n";
+ }
+
+ UniformVariable m_rand;
+ RocketfuelWeightsReader *reader;
+
+ list<tuple<uint32_t,uint32_t> > m_pairs;
+ set<uint32_t> m_usedNodes;
+ const int m_numNodes;
+};
+
+#endif
diff --git a/examples/blackhole-sprint.cc b/examples/blackhole-sprint.cc
new file mode 100644
index 0000000..c912ecb
--- /dev/null
+++ b/examples/blackhole-sprint.cc
@@ -0,0 +1,188 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * 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: Ilya Moiseenko <iliamo@cs.ucla.edu>
+ */
+
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/NDNabstraction-module.h"
+#include "ns3/point-to-point-grid.h"
+#include "ns3/ipv4-global-routing-helper.h"
+#include "ns3/random-variable.h"
+
+#include <sstream>
+#include <map>
+#include <list>
+#include <set>
+#include "ns3/rocketfuel-topology-reader.h"
+
+#include <boost/lexical_cast.hpp>
+#include <boost/foreach.hpp>
+
+#include <boost/config.hpp>
+#include <iostream>
+#include <fstream>
+
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/graph/dijkstra_shortest_paths.hpp>
+
+using namespace ns3;
+using namespace std;
+using namespace boost;
+
+NS_LOG_COMPONENT_DEFINE ("BlackholeSprint");
+
+#include "base-experiment.h"
+
+class Experiment : public BaseExperiment
+{
+public:
+ // hijacker is more than an application. just disable all faces
+ static void
+ InstallHijacker (std::string prefix, Ptr<Node> node)
+ {
+ Ptr<Ccnx> ccnx = node->GetObject<Ccnx> ();
+ for (uint32_t i = 0; i < ccnx->GetNFaces (); i++)
+ {
+ Ptr<CcnxFace> face = ccnx->GetFace (i);
+ face->SetUp (false);
+ }
+ CcnxStackHelper::InstallRouteTo (prefix, node);
+ }
+
+ //We are creating 10 pairs of producer-hijacker and everybody else is a consumer
+ ApplicationContainer
+ AddApplications ()
+ {
+ ApplicationContainer apps;
+
+ list<string> prefixes;
+
+ // Create Producers/Hijackers
+ uint32_t pair = 0;
+ for (list<tuple<uint32_t,uint32_t> >::iterator i = m_pairs.begin (); i != m_pairs.end (); i++)
+ {
+ uint32_t node1_num = i->get<0> ();
+ uint32_t node2_num = i->get<1> ();
+
+ cout << "Good: " << node1_num << ", bad: " << node2_num << "\n";
+
+ Ptr<Node> node1 = Names::Find<Node> ("/sprint", lexical_cast<string> (node1_num));
+ Ptr<Node> node2 = Names::Find<Node> ("/sprint", lexical_cast<string> (node2_num));
+
+ // node1 legitimate producer
+ // node2 "fake" producer
+
+ string prefix = "/bh/" + lexical_cast<string> (pair);
+ pair ++;
+
+ CcnxAppHelper legitimateProducerHelper ("ns3::CcnxProducer");
+ legitimateProducerHelper.SetPrefix (prefix);
+ apps.Add
+ (legitimateProducerHelper.Install (node1));
+
+ // one more trick. Need to install route to hijacker (aka "hijacker announces itself as a legitimate producer")
+ CcnxStackHelper::InstallRouteTo (prefix, node1);
+ Simulator::Schedule (Seconds(10.0), Experiment::InstallHijacker, prefix, node2);
+
+ prefixes.push_back (prefix); // remember prefixes that consumers will be requesting
+ }
+
+ // Create Consumers
+ NodeContainer nodes = reader->GetNodes ();
+ for (NodeContainer::Iterator node = nodes.Begin (); node != nodes.End (); node++)
+ {
+ uint32_t namedId = lexical_cast<uint32_t> (Names::FindName (*node));
+ if (m_usedNodes.count (namedId) > 0)
+ continue;
+
+ CcnxAppHelper consumerHelper ("ns3::CcnxConsumerBatches");
+ consumerHelper.SetAttribute ("LifeTime", StringValue("100s"));
+ consumerHelper.SetAttribute ("Batches", StringValue("0s 10 6s 1 20s 1"));
+ BOOST_FOREACH (const string &prefix, prefixes)
+ {
+ consumerHelper.SetPrefix (prefix + "/" + lexical_cast<string> (namedId)); // make sure we're requesting unique prefixes... this was a huge bug before
+
+ ApplicationContainer consumer = consumerHelper.Install (*node);
+ apps.Add (consumer);
+ }
+
+ // break;
+ }
+ return apps;
+ }
+};
+
+int
+main (int argc, char *argv[])
+{
+ cout << "Begin blackhole scenario\n";
+
+ Config::SetDefault ("ns3::PointToPointNetDevice::DataRate", StringValue ("100Mbps"));
+ Config::SetDefault ("ns3::DropTailQueue::MaxPackets", StringValue ("2000"));
+ Config::SetDefault ("ns3::RttEstimator::InitialEstimation", StringValue ("0.5s"));
+
+ Config::SetDefault ("ns3::ConfigStore::Filename", StringValue ("attributes.xml"));
+ Config::SetDefault ("ns3::ConfigStore::Mode", StringValue ("Save"));
+ Config::SetDefault ("ns3::ConfigStore::FileFormat", StringValue ("Xml"));
+
+ uint32_t maxRuns = 1;
+ uint32_t startRun = 0;
+ CommandLine cmd;
+ cmd.AddValue ("start", "Initial run number", startRun);
+ cmd.AddValue ("runs", "Number of runs", maxRuns);
+ cmd.Parse (argc, argv);
+
+ // ConfigStore config;
+ // config.ConfigureDefaults ();
+
+ Experiment experiment;
+ for (uint32_t run = startRun; run < startRun + maxRuns; run++)
+ {
+ Config::SetGlobal ("RngRun", IntegerValue (run));
+ cout << "seed = " << SeedManager::GetSeed () << ", run = " << SeedManager::GetRun () << endl;
+
+ Experiment experiment;
+ // experiment.GenerateRandomPairs (1);
+ experiment.SetPair (run);
+ cout << "Run " << run << endl;
+
+ string prefix = "blackhole-" + lexical_cast<string> (run) + "-";
+
+ experiment.ConfigureTopology ();
+ experiment.InstallCcnxStack (false);
+ ApplicationContainer apps = experiment.AddApplications ();
+
+ //tracing
+ CcnxTraceHelper traceHelper;
+ // traceHelper.EnableRateL3All (prefix + "rate-trace.log");
+ traceHelper.EnableSeqsAppAll ("ns3::CcnxConsumerBatches", prefix + "consumers-seqs.log");
+
+ // enable path weights some time from now (ensure that all faces are created)
+ Simulator::Schedule (Seconds (4.5), &CcnxTraceHelper::EnablePathWeights, &traceHelper, prefix + "weights.log");
+ std::cout << "Total " << apps.GetN () << " applications\n";
+
+ experiment.Run (Seconds(40.0));
+ }
+
+ cout << "Finish blackhole scenario\n";
+ return 0;
+}
diff --git a/examples/ccnx-grid.cc b/examples/ccnx-grid.cc
index a4255be..15898aa 100644
--- a/examples/ccnx-grid.cc
+++ b/examples/ccnx-grid.cc
@@ -115,7 +115,7 @@
std::ostringstream prefix;
prefix << "/" << producer->GetId ();
- CcnxAppHelper consumerHelper ("ns3::CcnxConsumer");
+ CcnxAppHelper consumerHelper ("ns3::CcnxConsumerCbr");
consumerHelper.SetPrefix (prefix.str ());
consumerHelper.SetAttribute ("MeanRate", StringValue ("1Mbps"));
ApplicationContainer consumers = consumerHelper.Install (consumerNodes);
diff --git a/examples/ccnx-test.cc b/examples/ccnx-test.cc
deleted file mode 100644
index cae2815..0000000
--- a/examples/ccnx-test.cc
+++ /dev/null
@@ -1,102 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-
-#include "ns3/core-module.h"
-#include "ns3/network-module.h"
-#include "ns3/point-to-point-module.h"
-#include "ns3/NDNabstraction-module.h"
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE ("CcnxTest");
-
-int
-main (int argc, char *argv[])
-{
- // LogComponentEnable ("CcnxTest", LOG_ALL);
- // LogComponentEnable ("CcnxStackHelper", LOG_ALL);
- // LogComponentEnable ("CcnxRit", LOG_ALL);
-
- // Config::SetDefault ("ns3::OnOffApplication::PacketSize", UintegerValue (210));
- // Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue ("448kb/s"));
-
- Config::SetDefault ("ns3::PointToPointNetDevice::DataRate", StringValue ("10Mbps"));
- Config::SetDefault ("ns3::PointToPointChannel::Delay", StringValue ("1ms"));
-
- Packet::EnableChecking();
- Packet::EnablePrinting();
- CommandLine cmd;
- cmd.Parse (argc, argv);
-
- // Here, we will explicitly create seven nodes.
- NodeContainer c;
- c.Create (3);
- Names::Add ("1", c.Get (0));
- Names::Add ("2", c.Get (1));
- Names::Add ("3", c.Get (2));
-
- // NodeContainer n1 = NodeContainer ("1") ("2");
- // NodeContainer n2 = NodeContainer ("2") ("3");
-
- NS_LOG_INFO ("Create channels.");
- PointToPointHelper p2p;
- p2p.Install ("1", "2");
- p2p.Install ("2", "3");
-
- NS_LOG_INFO ("Installing NDN stack");
- CcnxStackHelper ccnx;
- Ptr<CcnxFaceContainer> cf = ccnx.Install (c);
-
- CcnxAppHelper helper ("ns3::CcnxConsumer");
- helper.SetPrefix ("/3");
- ApplicationContainer app = helper.Install ("1");
- app.Start (Seconds (1.0));
- app.Stop (Seconds (10.05));
-
- CcnxAppHelper helper2 ("ns3::CcnxProducer");
- helper2.SetPrefix ("/3");
- helper2.SetAttribute ("PayloadSize", StringValue("1024"));
- ApplicationContainer app2 = helper2.Install("3");
-
- app2.Start(Seconds(0.0));
- app2.Stop(Seconds(15.0));
-
- /**
- * \brief Add forwarding entry in FIB
- *
- * \param node Node
- * \param prefix Routing prefix
- * \param face Face index
- * \param metric Routing metric
- */
- ccnx.AddRoute ("1", "/3", 0, 1);
- ccnx.AddRoute ("2", "/3", 1, 1);
- ccnx.AddRoute ("2", "/3", 0, 10000);
- NS_LOG_INFO ("FIB dump:\n" << *c.Get(0)->GetObject<CcnxFib> ());
- NS_LOG_INFO ("FIB dump:\n" << *c.Get(1)->GetObject<CcnxFib> ());
-
- // Create the OnOff application to send UDP datagrams of size
- // 210 bytes at a rate of 448 Kb/s from n0 to n4
- // NS_LOG_INFO ("Create Applications.");
-
- // std::string sendsizeattr = "SendSize";
- // //flow2 7-->2
- // BulkSendHelper bulksend0 ("ns3::CcnxLocalFaceFactory", InetSocketAddress (i23.GetAddress (0), port));
- // //bulksend0.SetAttribute(sendsizeattr, AttributeValue(ConstantVariable(2560)));
- // bulksend0.SetAttribute("MaxBytes", UintegerValue(2560));
- // ApplicationContainer apps = bulksend0.Install(c.Get(6));
- // apps.Start(Seconds (1.0));
- // apps.Stop(Seconds (10.0));
-
- // AsciiTraceHelper ascii;
- // p2p.EnableAsciiAll (ascii.CreateFileStream ("ccnx-test.tr"));
- // p2p.EnablePcapAll ("ccnx-test");
-
- Simulator::Stop (Seconds (20));
-
- NS_LOG_INFO ("Run Simulation.");
- Simulator::Run ();
- Simulator::Destroy ();
- NS_LOG_INFO ("Done.");
-
- return 0;
-}
diff --git a/examples/congestion-pop.cc b/examples/congestion-pop.cc
index 51a5fa0..ae28ad8 100644
--- a/examples/congestion-pop.cc
+++ b/examples/congestion-pop.cc
@@ -28,13 +28,7 @@
#include "ns3/random-variable.h"
#include "ns3/internet-module.h"
#include "ns3/applications-module.h"
-
-#include <iostream>
-#include <sstream>
-#include <map>
-#include <list>
-#include <set>
-#include "ns3/rocketfuel-topology-reader.h"
+#include "ns3/config-store.h"
#include <boost/lexical_cast.hpp>
#include <boost/foreach.hpp>
@@ -45,108 +39,34 @@
NS_LOG_COMPONENT_DEFINE ("Scenario");
-void PrintTime ()
-{
- cout << "Progress: " << Simulator::Now ().ToDouble (Time::S) << "s" << endl;
+// void PrintTime ()
+// {
+// cout << "Progress: " << Simulator::Now ().ToDouble (Time::S) << "s" << endl;
- Simulator::Schedule (Seconds (1.0), PrintTime);
-}
+// Simulator::Schedule (Seconds (1.0), PrintTime);
+// }
-class Experiment
+#include "base-experiment.h"
+
+class Experiment : public BaseExperiment
{
public:
- Experiment ()
- : m_rand (0,52)
- , reader ("/sprint")
- { }
-
- void
- ConfigureCcnxTopology ()
- {
- Names::Clear ();
-
- string weights ("./src/NDNabstraction/examples/sprint-pops.weights");
- string latencies ("./src/NDNabstraction/examples/sprint-pops.latencies");
- string positions ("./src/NDNabstraction/examples/sprint-pops.positions");
-
- RocketfuelWeightsReader reader ("/sprint");
-
- reader.SetFileName (positions);
- reader.SetFileType (RocketfuelWeightsReader::POSITIONS);
- reader.Read ();
-
- reader.SetFileName (weights);
- reader.SetFileType (RocketfuelWeightsReader::WEIGHTS);
- reader.Read ();
-
- reader.SetFileName (latencies);
- reader.SetFileType (RocketfuelWeightsReader::LATENCIES);
- reader.Read ();
-
- reader.Commit ();
- NS_ASSERT_MSG (reader.LinksSize () != 0, "Problems reading the topology file. Failing.");
-
- NS_LOG_INFO("Nodes = " << reader.GetNodes ().GetN());
- NS_LOG_INFO("Links = " << reader.LinksSize ());
-
- // ------------------------------------------------------------
- // -- Read topology data.
- // --------------------------------------------
-
- InternetStackHelper stack;
- Ipv4GlobalRoutingHelper ipv4RoutingHelper ("ns3::Ipv4GlobalRoutingOrderedNexthops");
- stack.SetRoutingHelper (ipv4RoutingHelper);
- stack.Install (reader.GetNodes ());
-
- reader.AssignIpv4Addresses (Ipv4Address ("10.0.0.0"));
-
- // Install CCNx stack
- NS_LOG_INFO ("Installing CCNx stack");
- CcnxStackHelper ccnxHelper;
- ccnxHelper.SetForwardingStrategy ("ns3::CcnxBestRouteStrategy");
- ccnxHelper.EnableLimits (true, Seconds(0.1));
- ccnxHelper.SetDefaultRoutes (false);
- ccnxHelper.InstallAll ();
- }
-
- void
- ConfigureRouting ()
- {
- CcnxStackHelper ccnxHelper;
- // // Populate FIB based on IPv4 global routing controller
- ccnxHelper.InstallFakeGlobalRoutes ();
- ccnxHelper.InstallRoutesToAll ();
- }
-
ApplicationContainer
- AddCcnxRandomApplications (uint16_t numStreams)
+ AddCcnxApplications ()
{
- map<uint32_t, set<uint32_t> > streams;
ApplicationContainer apps;
-
- uint16_t createdStreams = 0;
- uint16_t guard = 0;
- while (createdStreams < numStreams && guard < (numeric_limits<uint16_t>::max ()-1))
+
+ for (list<tuple<uint32_t,uint32_t> >::iterator i = m_pairs.begin (); i != m_pairs.end (); i++)
{
- guard ++;
-
- uint32_t node1_num = m_rand.GetValue ();
- uint32_t node2_num = m_rand.GetValue ();
-
- if (node1_num == node2_num)
- continue;
-
- if (streams[node1_num].count (node2_num) > 0) // don't create duplicate streams
- continue;
-
- streams[node1_num].insert (node2_num);
+ uint32_t node1_num = i->get<0> ();
+ uint32_t node2_num = i->get<1> ();
Ptr<Node> node1 = Names::Find<Node> ("/sprint", lexical_cast<string> (node1_num));
Ptr<Node> node2 = Names::Find<Node> ("/sprint", lexical_cast<string> (node2_num));
- CcnxAppHelper consumerHelper ("ns3::CcnxConsumer");
+ CcnxAppHelper consumerHelper ("ns3::CcnxConsumerWindow");
consumerHelper.SetPrefix ("/" + lexical_cast<string> (node2->GetId ()));
- consumerHelper.SetAttribute ("MeanRate", StringValue ("2Mbps"));
+ // consumerHelper.SetAttribute ("MeanRate", StringValue ("2Mbps"));
consumerHelper.SetAttribute ("Size", StringValue ("1.983642578125")); //to make sure max seq # is 2000
CcnxAppHelper producerHelper ("ns3::CcnxProducer");
@@ -157,26 +77,49 @@
apps.Add
(producerHelper.Install (node2));
-
- createdStreams ++;
}
return apps;
}
- void
- Run (const Time &finishTime)
+ ApplicationContainer
+ AddTcpApplications ()
{
- cout << "Run Simulation.\n";
- Simulator::Stop (finishTime);
- // Simulator::Schedule (Seconds (1.0), PrintTime);
- Simulator::Run ();
- Simulator::Destroy ();
- cout << "Done.\n";
- }
+ ApplicationContainer apps;
- UniformVariable m_rand;
- RocketfuelWeightsReader reader;
+ uint32_t streamId = 0;
+ const static uint32_t base_port = 10;
+ for (list<tuple<uint32_t,uint32_t> >::iterator i = m_pairs.begin (); i != m_pairs.end (); i++)
+ {
+ uint32_t node1_num = i->get<0> ();
+ uint32_t node2_num = i->get<1> ();
+
+ Ptr<Node> node1 = Names::Find<Node> ("/sprint", lexical_cast<string> (node2_num));
+ Ptr<Node> node2 = Names::Find<Node> ("/sprint", lexical_cast<string> (node1_num));
+
+ Ptr<Ipv4> ipv4 = node1->GetObject<Ipv4> ();
+ // ipv4->GetAddress (0, 0);
+
+ // to make sure we don't reuse the same port numbers for different flows, just make all port numbers unique
+ PacketSinkHelper consumerHelper ("ns3::TcpSocketFactory",
+ InetSocketAddress (Ipv4Address::GetAny (), base_port + streamId));
+
+ BulkSendHelper producerHelper ("ns3::TcpSocketFactory",
+ InetSocketAddress (ipv4->GetAddress (1, 0).GetLocal (), base_port + streamId));
+ // cout << "SendTo: " << ipv4->GetAddress (1, 0).GetLocal () << endl;
+ producerHelper.SetAttribute ("MaxBytes", UintegerValue (2081040)); // equal to 2001 ccnx packets
+
+ apps.Add
+ (consumerHelper.Install (node1));
+
+ apps.Add
+ (producerHelper.Install (node2));
+
+ streamId++;
+ }
+
+ return apps;
+ }
};
@@ -186,8 +129,15 @@
cout << "Begin congestion-pop scenario\n";
Config::SetDefault ("ns3::PointToPointNetDevice::DataRate", StringValue ("1Mbps"));
- Config::SetDefault ("ns3::DropTailQueue::MaxPackets", StringValue ("20"));
+ Config::SetDefault ("ns3::DropTailQueue::MaxPackets", StringValue ("60"));
+ Config::SetDefault ("ns3::TcpSocket::SegmentSize", StringValue ("1040"));
+
+ Config::SetDefault ("ns3::BulkSendApplication::SendSize", StringValue ("1040"));
+ Config::SetDefault ("ns3::ConfigStore::Filename", StringValue ("attributes.xml"));
+ Config::SetDefault ("ns3::ConfigStore::Mode", StringValue ("Save"));
+ Config::SetDefault ("ns3::ConfigStore::FileFormat", StringValue ("Xml"));
+
uint32_t maxRuns = 1;
uint32_t startRun = 0;
CommandLine cmd;
@@ -195,6 +145,9 @@
cmd.AddValue ("runs", "Number of runs", maxRuns);
cmd.Parse (argc, argv);
+ // ConfigStore config;
+ // config.ConfigureDefaults ();
+
for (uint32_t run = startRun; run < startRun + maxRuns; run++)
{
Config::SetGlobal ("RngRun", IntegerValue (run));
@@ -202,27 +155,69 @@
Experiment experiment;
cout << "Run " << run << endl;
-
- experiment.ConfigureCcnxTopology ();
- ApplicationContainer apps = experiment.AddCcnxRandomApplications (20);
- experiment.ConfigureRouting ();
-
string prefix = "run-" + lexical_cast<string> (run) + "-";
+ experiment.GenerateRandomPairs (20);
ofstream of_nodes ((prefix + "apps.log").c_str ());
- for (uint32_t i = 0; i < apps.GetN () / 2; i++)
+ for (list<tuple<uint32_t,uint32_t> >::iterator i = experiment.m_pairs.begin (); i != experiment.m_pairs.end (); i++)
{
- of_nodes << "From " << apps.Get (i*2)->GetNode ()->GetId ()
- << " to " << apps.Get (i*2 + 1)->GetNode ()->GetId ();
+ of_nodes << "From " << i->get<0> ()
+ << " to " << i->get<1> ();
of_nodes << "\n";
}
of_nodes.close ();
- CcnxTraceHelper traceHelper;
- traceHelper.EnableRateL3All (prefix + "rate-trace.log");
- traceHelper.EnableSeqsAppAll ("ns3::CcnxConsumer", prefix + "consumers-seqs.log");
+ cout << "NDN experiment\n";
+ // NDN
+ {
+ experiment.ConfigureTopology ();
+ experiment.InstallCcnxStack ();
+ ApplicationContainer apps = experiment.AddCcnxApplications ();
- experiment.Run (Seconds (200.0));
+ for (uint32_t i = 0; i < apps.GetN () / 2; i++)
+ {
+ apps.Get (i*2)->SetStartTime (Seconds (1+i));
+ apps.Get (i*2 + 1)->SetStartTime (Seconds (1+i));
+ }
+
+ CcnxTraceHelper traceHelper;
+ // traceHelper.EnableRateL3All (prefix + "rate-trace.log");
+ // traceHelper.EnableSeqsAppAll ("ns3::CcnxConsumerCbr", prefix + "consumers-seqs.log");
+ traceHelper.EnableSeqsAppAll ("ns3::CcnxConsumerWindow", prefix + "consumers-seqs.log");
+ traceHelper.EnableWindowsAll (prefix + "windows.log");
+
+ // config.ConfigureAttributes ();
+ experiment.Run (Seconds (200.0));
+ }
+
+ cout << "TCP experiment\n";
+ // TCP
+ {
+ experiment.ConfigureTopology ();
+ experiment.InstallIpStack ();
+ ApplicationContainer apps = experiment.AddTcpApplications ();
+
+ CcnxTraceHelper traceHelper;
+ traceHelper.EnableIpv4SeqsAppAll (prefix + "tcp-consumers-seqs.log");
+ traceHelper.EnableWindowsTcpAll (prefix + "tcp-windows.log");
+
+ for (uint32_t i = 0; i < apps.GetN () / 2; i++)
+ {
+ apps.Get (i*2)->SetStartTime (Seconds (1+i));
+
+ apps.Get (i*2 + 1)->SetStartTime (Seconds (1+i));
+
+ // cout << "Node: " << apps.Get (i*2 + 1)->GetNode ()->GetId () << "\n";
+ // care only about BulkSender
+ Simulator::Schedule (Seconds (1+i+0.01),
+ &CcnxTraceHelper::TcpConnect, &traceHelper, apps.Get (i*2)->GetNode ());
+
+ Simulator::Schedule (Seconds (1+i+0.01),
+ &CcnxTraceHelper::TcpConnect, &traceHelper, apps.Get (i*2 + 1)->GetNode ());
+ }
+
+ experiment.Run (Seconds (200.0));
+ }
}
// cout << "Finish congestion-pop scenario\n";
diff --git a/examples/congestion-tcp-pop.cc b/examples/congestion-tcp-pop.cc
deleted file mode 100644
index c1ac443..0000000
--- a/examples/congestion-tcp-pop.cc
+++ /dev/null
@@ -1,231 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2011 University of California, Los Angeles
- *
- * 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: Ilya Moiseenko <iliamo@cs.ucla.edu>
- */
-
-
-#include "ns3/core-module.h"
-#include "ns3/network-module.h"
-#include "ns3/point-to-point-module.h"
-#include "ns3/NDNabstraction-module.h"
-#include "ns3/point-to-point-grid.h"
-#include "ns3/ipv4-global-routing-helper.h"
-#include "ns3/random-variable.h"
-#include "ns3/internet-module.h"
-#include "ns3/applications-module.h"
-#include "ns3/config-store.h"
-
-#include <iostream>
-#include <sstream>
-#include <map>
-#include <list>
-#include <set>
-#include "ns3/rocketfuel-topology-reader.h"
-
-#include "../helper/tracers/ipv4-seqs-app-tracer.h"
-
-#include <boost/lexical_cast.hpp>
-#include <boost/foreach.hpp>
-
-using namespace ns3;
-using namespace std;
-using namespace boost;
-
-NS_LOG_COMPONENT_DEFINE ("Scenario");
-
-void PrintTime ()
-{
- cout << "Progress: " << Simulator::Now ().ToDouble (Time::S) << "s" << endl;
-
- Simulator::Schedule (Seconds (1.0), PrintTime);
-}
-
-class Experiment
-{
-public:
- Experiment ()
- : m_rand (0,52)
- , reader ("/sprint")
- { }
-
- void
- ConfigureIpv4Topology ()
- {
- Names::Clear ();
-
- string weights ("./src/NDNabstraction/examples/sprint-pops.weights");
- string latencies ("./src/NDNabstraction/examples/sprint-pops.latencies");
- string positions ("./src/NDNabstraction/examples/sprint-pops.positions");
-
- reader.SetFileName (positions);
- reader.SetFileType (RocketfuelWeightsReader::POSITIONS);
- reader.Read ();
-
- reader.SetFileName (weights);
- reader.SetFileType (RocketfuelWeightsReader::WEIGHTS);
- reader.Read ();
-
- reader.SetFileName (latencies);
- reader.SetFileType (RocketfuelWeightsReader::LATENCIES);
- reader.Read ();
-
- reader.Commit ();
- NS_ASSERT_MSG (reader.LinksSize () != 0, "Problems reading the topology file. Failing.");
-
- NS_LOG_INFO("Nodes = " << reader.GetNodes ().GetN());
- NS_LOG_INFO("Links = " << reader.LinksSize ());
-
- InternetStackHelper stack;
- stack.Install (reader.GetNodes ());
- reader.AssignIpv4Addresses (Ipv4Address ("10.0.0.0"));
- }
-
- void
- ConfigureRouting ()
- {
- Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
-
- // m_rand = UniformVariable (0, reader.GetNodes ().GetN());
- }
-
- ApplicationContainer
- AddTcpRandomApplications (uint16_t numStreams)
- {
- map<uint32_t, set<uint32_t> > streams;
- ApplicationContainer apps;
-
- const static uint32_t base_port = 10;
- uint16_t createdStreams = 0;
- uint16_t guard = 0;
- while (createdStreams < numStreams && guard < (numeric_limits<uint16_t>::max ()-1))
- {
- guard ++;
-
- uint32_t node1_num = m_rand.GetValue ();
- uint32_t node2_num = m_rand.GetValue ();
-
- if (node1_num == node2_num)
- continue;
-
- if (streams[node1_num].count (node2_num) > 0) // don't create duplicate streams
- continue;
-
- streams[node1_num].insert (node2_num);
-
- Ptr<Node> node1 = Names::Find<Node> ("/sprint", lexical_cast<string> (node1_num));
- Ptr<Node> node2 = Names::Find<Node> ("/sprint", lexical_cast<string> (node2_num));
-
- Ptr<Ipv4> ipv4 = node1->GetObject<Ipv4> ();
- // ipv4->GetAddress (0, 0);
-
- // to make sure we don't reuse the same port numbers for different flows, just make all port numbers unique
- PacketSinkHelper consumerHelper ("ns3::TcpSocketFactory",
- InetSocketAddress (Ipv4Address::GetAny (), base_port + createdStreams));
-
- BulkSendHelper producerHelper ("ns3::TcpSocketFactory",
- InetSocketAddress (ipv4->GetAddress (1, 0).GetLocal (), base_port + createdStreams));
- // cout << "SendTo: " << ipv4->GetAddress (1, 0).GetLocal () << endl;
- producerHelper.SetAttribute ("MaxBytes", UintegerValue (2081040)); // equal to 2001 ccnx packets
-
- apps.Add
- (consumerHelper.Install (node1));
-
- apps.Add
- (producerHelper.Install (node2));
-
- createdStreams ++;
- }
-
- return apps;
- }
-
- void
- Run (const Time &finishTime)
- {
- cout << "Run Simulation.\n";
- Simulator::Stop (finishTime);
- // Simulator::Schedule (Seconds (1.0), PrintTime);
- Simulator::Run ();
- Simulator::Destroy ();
- cout << "Done.\n";
- }
-
- UniformVariable m_rand;
- RocketfuelWeightsReader reader;
-};
-
-int
-main (int argc, char *argv[])
-{
- cout << "Begin congestion-pop scenario\n";
- Packet::EnableChecking();
- Packet::EnablePrinting();
-
- Config::SetDefault ("ns3::PointToPointNetDevice::DataRate", StringValue ("1Mbps"));
- Config::SetDefault ("ns3::DropTailQueue::MaxPackets", StringValue ("20"));
- Config::SetDefault ("ns3::TcpSocket::SegmentSize", StringValue ("1040"));
-
- Config::SetDefault ("ns3::BulkSendApplication::SendSize", StringValue ("1040"));
-
- // Config::SetDefault ("ns3::ConfigStore::Filename", StringValue ("attributes.xml"));
- // Config::SetDefault ("ns3::ConfigStore::Mode", StringValue ("Save"));
- // Config::SetDefault ("ns3::ConfigStore::FileFormat", StringValue ("Xml"));
-
- uint32_t maxRuns = 1;
- uint32_t startRun = 0;
- CommandLine cmd;
- cmd.AddValue ("start", "Initial run number", startRun);
- cmd.AddValue ("runs", "Number of runs", maxRuns);
- cmd.Parse (argc, argv);
-
- // ConfigStore config;
- // config.ConfigureDefaults ();
-
- for (uint32_t run = startRun; run < startRun + maxRuns; run++)
- {
- Config::SetGlobal ("RngRun", IntegerValue (run));
- cout << "seed = " << SeedManager::GetSeed () << ", run = " << SeedManager::GetRun () << endl;
-
- Experiment experiment;
- cout << "Run " << run << endl;
-
- experiment.ConfigureIpv4Topology ();
- ApplicationContainer apps = experiment.AddTcpRandomApplications (20);
- experiment.ConfigureRouting ();
-
- string prefix = "run-tcp-" + lexical_cast<string> (run) + "-";
-
- ofstream of_nodes ((prefix + "apps.log").c_str ());
- for (uint32_t i = 0; i < apps.GetN () / 2; i++)
- {
- of_nodes << "From " << apps.Get (i*2)->GetNode ()->GetId ()
- << " to " << apps.Get (i*2 + 1)->GetNode ()->GetId ();
- of_nodes << "\n";
- }
-
- CcnxTraceHelper traceHelper;
- traceHelper.EnableIpv4SeqsAppAll (prefix + "consumers-seqs.log");
-
- // config.ConfigureAttributes ();
-
- experiment.Run (Seconds (200.0));
- }
-
- // cout << "Finish congestion-pop scenario\n";
- return 0;
-}
diff --git a/examples/congestion-zoom.cc b/examples/congestion-zoom.cc
new file mode 100644
index 0000000..35b3c0c
--- /dev/null
+++ b/examples/congestion-zoom.cc
@@ -0,0 +1,294 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * 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: Ilya Moiseenko <iliamo@cs.ucla.edu>
+ */
+
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/NDNabstraction-module.h"
+#include "ns3/point-to-point-grid.h"
+#include "ns3/ipv4-global-routing-helper.h"
+#include "ns3/random-variable.h"
+#include "ns3/internet-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/config-store.h"
+
+#include <boost/lexical_cast.hpp>
+#include <boost/foreach.hpp>
+
+using namespace ns3;
+using namespace std;
+using namespace boost;
+
+NS_LOG_COMPONENT_DEFINE ("Scenario");
+
+// void PrintTime ()
+// {
+// cout << "Progress: " << Simulator::Now ().ToDouble (Time::S) << "s" << endl;
+
+// Simulator::Schedule (Seconds (1.0), PrintTime);
+// }
+
+#include "base-experiment.h"
+
+class Experiment
+{
+public:
+ AnnotatedTopologyReader *reader;
+ string prefix;
+
+ Experiment ()
+ : reader (0)
+ , prefix ("simple/")
+ { }
+
+ void
+ ConfigureTopology ()
+ {
+ Names::Clear ();
+ cout << "Configure Topology\n";
+ if (reader != 0) delete reader;
+ reader = new AnnotatedTopologyReader (prefix);
+
+ string input ("./src/NDNabstraction/examples/congestion-zoom.txt");
+
+ reader->SetFileName (input);
+ reader->Read ();
+ }
+
+ void InstallCcnxStackImpl ()
+ {
+ InternetStackHelper stack;
+ Ipv4GlobalRoutingHelper ipv4RoutingHelper ("ns3::Ipv4GlobalRoutingOrderedNexthops");
+ stack.SetRoutingHelper (ipv4RoutingHelper);
+ stack.Install (reader->GetNodes ());
+
+ reader->AssignIpv4Addresses (Ipv4Address ("10.0.0.0"));
+
+ // Install CCNx stack
+ cout << "Installing CCNx stack\n";
+ CcnxStackHelper ccnxHelper;
+ ccnxHelper.SetForwardingStrategy ("ns3::CcnxBestRouteStrategy");
+ ccnxHelper.EnableLimits (true, Seconds(0.1));
+ ccnxHelper.SetDefaultRoutes (false);
+ ccnxHelper.InstallAll ();
+
+ reader->ApplyOspfMetric ();
+ }
+
+ void InstallCcnxStack (bool installFIBs = true)
+ {
+ InstallCcnxStackImpl ();
+
+ CcnxStackHelper ccnxHelper;
+ ccnxHelper.InstallFakeGlobalRoutes ();
+ if (installFIBs)
+ {
+ // // Populate FIB based on IPv4 global routing controller
+ ccnxHelper.InstallRoutesToAll ();
+ }
+ }
+
+ void InstallIpStack ()
+ {
+ InternetStackHelper stack;
+ stack.Install (reader->GetNodes ());
+ reader->AssignIpv4Addresses (Ipv4Address ("10.0.0.0"));
+ reader->ApplyOspfMetric ();
+
+ Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+ }
+
+ ApplicationContainer
+ AddCcnxApplications ()
+ {
+ ApplicationContainer apps;
+
+ Ptr<Node> client = Names::Find<Node> (prefix, lexical_cast<string> ("client"));
+ Ptr<Node> server = Names::Find<Node> (prefix, lexical_cast<string> ("server"));
+
+ CcnxAppHelper consumerHelper ("ns3::CcnxConsumerWindow");
+ consumerHelper.SetPrefix ("/" + lexical_cast<string> (server->GetId ()));
+ consumerHelper.SetAttribute ("Size", StringValue ("2.0"));
+
+ CcnxAppHelper producerHelper ("ns3::CcnxProducer");
+ producerHelper.SetPrefix ("/" + lexical_cast<string> (server->GetId ()));
+
+ apps.Add
+ (consumerHelper.Install (client));
+
+ apps.Add
+ (producerHelper.Install (server));
+
+ return apps;
+ }
+
+ ApplicationContainer
+ AddTcpApplications ()
+ {
+ ApplicationContainer apps;
+
+ Ptr<Node> client = Names::Find<Node> (prefix, lexical_cast<string> ("client"));
+ Ptr<Node> server = Names::Find<Node> (prefix, lexical_cast<string> ("server"));
+
+ Ptr<Ipv4> ipv4 = client->GetObject<Ipv4> ();
+
+ // to make sure we don't reuse the same port numbers for different flows, just make all port numbers unique
+ PacketSinkHelper consumerHelper ("ns3::TcpSocketFactory",
+ InetSocketAddress (Ipv4Address::GetAny (), 1024));
+
+ BulkSendHelper producerHelper ("ns3::TcpSocketFactory",
+ InetSocketAddress (ipv4->GetAddress (1, 0).GetLocal (), 1024));
+ // cout << "SendTo: " << ipv4->GetAddress (1, 0).GetLocal () << endl;
+ producerHelper.SetAttribute ("MaxBytes", UintegerValue (2081040)); // equal to 2001 ccnx packets
+
+ apps.Add
+ (consumerHelper.Install (client));
+
+ apps.Add
+ (producerHelper.Install (server));
+
+ // uint32_t streamId = 0;
+ // const static uint32_t base_port = 10;
+ // for (list<tuple<uint32_t,uint32_t> >::iterator i = m_pairs.begin (); i != m_pairs.end (); i++)
+ // {
+ // uint32_t node1_num = i->get<0> ();
+ // uint32_t node2_num = i->get<1> ();
+
+ // Ptr<Node> node1 = Names::Find<Node> ("/sprint", lexical_cast<string> (node2_num));
+ // Ptr<Node> node2 = Names::Find<Node> ("/sprint", lexical_cast<string> (node1_num));
+
+ // Ptr<Ipv4> ipv4 = node1->GetObject<Ipv4> ();
+ // // ipv4->GetAddress (0, 0);
+
+ // // to make sure we don't reuse the same port numbers for different flows, just make all port numbers unique
+ // PacketSinkHelper consumerHelper ("ns3::TcpSocketFactory",
+ // InetSocketAddress (Ipv4Address::GetAny (), base_port + streamId));
+
+ // BulkSendHelper producerHelper ("ns3::TcpSocketFactory",
+ // InetSocketAddress (ipv4->GetAddress (1, 0).GetLocal (), base_port + streamId));
+ // // cout << "SendTo: " << ipv4->GetAddress (1, 0).GetLocal () << endl;
+ // producerHelper.SetAttribute ("MaxBytes", UintegerValue (2081040)); // equal to 2001 ccnx packets
+
+ // apps.Add
+ // (consumerHelper.Install (node1));
+
+ // apps.Add
+ // (producerHelper.Install (node2));
+
+ // streamId++;
+ // }
+
+ return apps;
+ }
+
+ void
+ Run (const Time &finishTime)
+ {
+ cout << "Run Simulation.\n";
+ Simulator::Stop (finishTime);
+ Simulator::Schedule (Seconds (5.0), PrintTime);
+ Simulator::Run ();
+ Simulator::Destroy ();
+ cout << "Done.\n";
+ }
+};
+
+
+int
+main (int argc, char *argv[])
+{
+ cout << "Begin congestion-pop scenario\n";
+
+ Config::SetDefault ("ns3::PointToPointNetDevice::DataRate", StringValue ("1Mbps"));
+ // Config::SetDefault ("ns3::DropTailQueue::MaxPackets", StringValue ("60"));
+ Config::SetDefault ("ns3::TcpSocket::SegmentSize", StringValue ("1040"));
+
+ Config::SetDefault ("ns3::BulkSendApplication::SendSize", StringValue ("1040"));
+
+ Config::SetDefault ("ns3::ConfigStore::Filename", StringValue ("attributes.xml"));
+ Config::SetDefault ("ns3::ConfigStore::Mode", StringValue ("Save"));
+ Config::SetDefault ("ns3::ConfigStore::FileFormat", StringValue ("Xml"));
+
+ CommandLine cmd;
+ cmd.Parse (argc, argv);
+
+ // ConfigStore config;
+ // config.ConfigureDefaults ();
+
+ Experiment experiment;
+ string prefix = "congestion-zoom-";
+
+ cout << "NDN experiment\n";
+ // NDN
+ {
+ experiment.ConfigureTopology ();
+ experiment.InstallCcnxStack ();
+ experiment.AddCcnxApplications ();
+
+ // for (uint32_t i = 0; i < apps.GetN () / 2; i++)
+ // {
+ // apps.Get (i*2)->SetStartTime (Seconds (1+i));
+ // apps.Get (i*2 + 1)->SetStartTime (Seconds (1+i));
+ // }
+
+ CcnxTraceHelper traceHelper;
+ traceHelper.EnableRateL3All (prefix + "rate-trace.log");
+ // traceHelper.EnableSeqsAppAll ("ns3::CcnxConsumerCbr", prefix + "consumers-seqs.log");
+ // traceHelper.EnableSeqsAppAll ("ns3::CcnxConsumerWindow", prefix + "consumers-seqs.log");
+ // traceHelper.EnableWindowsAll (prefix + "windows.log");
+
+ // config.ConfigureAttributes ();
+ experiment.Run (Seconds (50.0));
+ // experiment.reader->SavePositions ("pos.log");
+ }
+
+ cout << "TCP experiment\n";
+ // TCP
+ {
+ experiment.ConfigureTopology ();
+ experiment.InstallIpStack ();
+ experiment.AddTcpApplications ();
+
+ CcnxTraceHelper traceHelper;
+ traceHelper.EnableIpv4RateL3All (prefix + "ipv4-rate-trace.log");
+ // traceHelper.EnableIpv4SeqsAppAll (prefix + "tcp-consumers-seqs.log");
+ // traceHelper.EnableWindowsTcpAll (prefix + "tcp-windows.log");
+
+ // for (uint32_t i = 0; i < apps.GetN () / 2; i++)
+ // {
+ // apps.Get (i*2)->SetStartTime (Seconds (1+i));
+
+ // apps.Get (i*2 + 1)->SetStartTime (Seconds (1+i));
+
+ // // cout << "Node: " << apps.Get (i*2 + 1)->GetNode ()->GetId () << "\n";
+ // // care only about BulkSender
+ // Simulator::Schedule (Seconds (1+i+0.01),
+ // &CcnxTraceHelper::TcpConnect, &traceHelper, apps.Get (i*2)->GetNode ());
+
+ // Simulator::Schedule (Seconds (1+i+0.01),
+ // &CcnxTraceHelper::TcpConnect, &traceHelper, apps.Get (i*2 + 1)->GetNode ());
+ // }
+
+ experiment.Run (Seconds (50.0));
+ }
+
+ return 0;
+}
diff --git a/examples/congestion-zoom.txt b/examples/congestion-zoom.txt
new file mode 100644
index 0000000..1747062
--- /dev/null
+++ b/examples/congestion-zoom.txt
@@ -0,0 +1,16 @@
+router
+#name city latitude longitude
+client unknown 28.8967 -12.8654
+server unknown 28.8967 51.3505
+clientProvider unknown 28.8967 8.97413
+serverProvider unknown 28.8967 37.5575
+provider1 unknown 23.5641 32.6924
+provider2 unknown 36.0641 32.6924
+link
+#x y capacity(kbps) OSPF Delay MaxPackets
+client clientProvider 10Mbps 1 5ms 200
+server serverProvider 10Mbps 2 6ms 200
+clientProvider provider1 1Mbps 1 50ms 20
+clientProvider provider2 1Mbps 1 50ms 20
+serverProvider provider1 1Mbps 1 5ms 20
+serverProvider provider2 1Mbps 2 6ms 20
diff --git a/examples/content-object-example.cc b/examples/content-object-example.cc
deleted file mode 100644
index 8272e86..0000000
--- a/examples/content-object-example.cc
+++ /dev/null
@@ -1,56 +0,0 @@
-#include "ns3/test.h"
-#include "ns3/annotated-topology-reader.h"
-#include "ns3/ccnx-content-object-header.h"
-#include "ns3/uinteger.h"
-#include "ns3/random-variable.h"
-#include <limits>
-#include "ns3/ccnx-header-helper.h"
-#include "ns3/header.h"
-#include "ns3/ccnx-name-components.h"
-#include "ns3/nstime.h"
-#include "ns3/buffer.h"
-#include "ns3/log.h"
-
-using namespace ns3;
-#include <fstream>
-
-NS_LOG_COMPONENT_DEFINE ("ContentObjectHeaderExample");
-
-int
-main (int argc, char *argv[])
-{
- LogComponentEnable ("ContentObjectHeaderExample", LOG_ALL);
- LogComponentEnable ("Packet", LOG_ALL);
-
- NS_LOG_INFO ("Test started");
-
- Packet::EnablePrinting ();
- Packet::EnableChecking ();
- Packet packet (10);
-
- CcnxContentObjectHeader header;
- CcnxContentObjectTail trailer;
-
- Ptr<CcnxNameComponents> testname = Create<CcnxNameComponents> ();
- (*testname) ("1");
- header.SetName(testname);
-
- NS_LOG_INFO ("Source: \n" << header << trailer);
-
- packet.AddHeader (header);
- packet.AddTrailer (trailer);
-
- // NS_LOG_INFO ("Deserialized packet: \n" << packet);
-
- NS_LOG_INFO ("Removing and deserializing individual headers");
-
- CcnxContentObjectHeader dst_header;
- CcnxContentObjectTail dst_trailer;
-
- packet.RemoveHeader (dst_header);
- packet.RemoveTrailer (dst_trailer);
-
- NS_LOG_INFO ("Target: \n" << dst_header << dst_trailer);
-
- return 0;
-}
diff --git a/examples/failures/failures-0.01 b/examples/failures/failures-0.01
new file mode 100644
index 0000000..3207d84
--- /dev/null
+++ b/examples/failures/failures-0.01
@@ -0,0 +1,1000 @@
+14-16;5-8
+
+
+3-9
+
+
+
+9-20;19-41
+
+9-20
+
+7-13
+11-17;6-7;16-24
+14-17;6-8;16-24
+
+
+1-8
+
+2-3;15-18;20-21;27-28
+27-28
+11-38;6-7
+12-13;6-25
+
+18-23;24-50
+
+1-5;17-29
+5-7
+6-11
+6-7
+
+9-20
+9-20
+12-13;9-15;9-20
+
+9-20
+9-19
+1-9;33-40
+8-16
+8-24;16-17
+13-32;17-28
+1-11
+
+
+31-47
+1-7;17-29;48-49;19-41
+9-31
+
+
+
+
+8-28
+6-25
+8-26;17-29;48-49
+7-13
+
+
+14-15
+32-44;24-45
+23-24
+17-26
+
+24-38;24-50
+
+17-24
+20-22;17-20;5-8
+
+
+27-28
+1-8;13-33;40-49
+11-24
+
+9-31
+
+
+32-48
+20-21;8-24
+9-19;24-38
+16-17;31-37
+
+17-36
+
+21-31
+
+8-28;19-41
+6-11
+6-11;24-50
+
+6-28;32-44
+15-19
+14-15
+14-17
+3-9
+
+
+
+
+
+19-41
+
+
+
+
+
+16-24;9-20;24-45
+
+9-20
+9-20
+13-33;9-20
+
+17-29
+9-20
+9-20;19-41
+18-23
+
+6-7
+
+24-45
+6-11
+20-22
+17-25;40-49
+
+9-20;9-19
+5-32
+8-16
+
+8-26;17-36;5-32
+
+2-3
+
+20-22;19-20
+8-26
+23-24
+
+
+
+0-1
+11-38;33-40
+
+40-49
+9-30
+
+
+19-51
+11-38
+1-7;14-16
+2-3;17-29;24-45
+17-35
+11-24
+0-1;8-24
+
+17-18
+14-15;9-20;3-9
+
+33-39
+
+
+9-20
+1-7;13-32
+9-20
+32-42;9-20
+
+17-18;17-24;9-17
+
+32-48;9-19
+17-25
+17-18
+15-18
+15-19;24-31
+40-48
+
+1-9
+
+25-26;13-32
+
+
+
+8-26
+32-42;9-20
+
+40-48
+
+
+8-16;9-20
+8-26;9-20;19-20
+14-15
+
+9-20
+8-20;9-20
+6-17
+6-7
+16-17;5-7
+
+
+17-24
+18-23
+8-16;32-48
+17-36;16-17
+
+17-28
+1-4;31-37
+
+
+1-10;39-42
+24-31
+17-24;6-11;31-47
+
+9-19
+16-29
+
+1-8;19-20
+
+16-17
+39-42
+
+6-7
+8-20
+
+24-38
+
+5-7
+
+
+
+
+
+
+20-21;5-32
+
+20-21;9-31
+8-20
+12-13;6-7
+31-37
+25-26
+33-39
+
+8-20
+
+17-24;19-20
+6-28
+24-31
+1-7
+
+14-17;17-35;31-45
+0-1
+
+
+
+
+
+13-33;31-47
+14-17
+
+
+40-48
+1-10;40-48
+8-26
+16-29;40-48
+6-7
+9-31
+
+
+20-22;31-45;32-42
+17-25;6-8
+6-17;31-47
+
+25-26
+
+
+8-28;17-26
+32-44
+
+
+
+31-46
+33-39;5-32;40-49
+
+5-32
+1-7
+32-42
+19-20
+19-51
+1-8
+13-33
+
+
+3-9
+25-26
+
+27-28
+1-6;23-24;31-37;19-20
+16-17
+6-7
+32-42
+
+19-41
+17-29
+
+
+
+18-23
+
+17-28;17-29
+
+
+0-1
+9-30
+
+6-7
+32-42
+
+16-29
+14-15
+
+20-22
+
+
+
+15-18;19-51
+
+32-42
+9-31
+32-42
+
+25-26
+6-11
+40-49
+20-22
+
+
+
+
+1-9
+17-28;18-23;24-50
+11-24;5-7
+14-17;8-28
+
+
+9-19
+
+0-1
+9-15
+15-19
+
+1-11
+
+24-31
+
+32-42
+
+
+5-32
+32-42
+2-3
+
+
+
+19-20
+6-11
+
+17-25;16-29
+15-19
+
+
+
+
+
+1-6;17-28;17-24
+32-42
+6-11
+
+
+
+
+24-45
+
+1-10;6-8;7-13
+
+
+5-7
+15-18
+
+
+14-16
+
+19-20
+
+
+
+
+6-17;32-42
+8-28
+9-17
+20-22
+
+
+17-18
+8-28;7-13
+32-42;19-51
+32-44
+33-39;32-44
+
+
+
+
+
+
+17-18
+1-7
+
+17-18;6-7
+17-29
+
+
+1-5;6-28;24-38
+13-32;17-18;17-25
+
+
+17-18
+
+13-32;5-8
+15-18
+32-42
+
+6-7
+9-19
+6-28
+32-44
+
+
+17-35
+
+20-22;31-45
+
+
+
+
+11-24
+1-5;33-40
+19-20
+6-17
+14-17;33-39
+8-28
+8-16
+1-6;11-17;39-42
+8-24
+11-38
+1-7
+1-7
+24-38
+14-17
+6-8
+2-3
+
+32-44
+1-10
+6-25;19-41
+14-16;17-26
+
+33-40;32-42
+
+8-20;31-46
+21-31;31-46
+
+
+
+
+
+1-10
+1-10
+32-42;9-19
+16-24
+
+6-7;24-50
+14-17
+25-26
+
+
+3-9
+1-8;6-17;31-45
+31-45
+
+8-20
+32-42;48-49
+
+7-13;24-38
+
+
+8-24
+23-24
+17-26
+
+
+11-24
+19-20
+
+
+39-42
+
+
+
+
+
+
+
+11-24
+6-7;32-44;5-7
+48-49
+40-49
+
+17-25;33-40;32-42;9-31
+24-45
+16-17;32-42
+1-4;1-11
+13-32;17-25
+0-1;1-9
+38-43
+
+
+11-38
+
+6-28
+48-49
+8-20
+1-5;9-15
+
+1-11;16-24;31-45;32-48
+21-31
+
+14-17;13-32;17-28
+8-20
+17-24;5-7
+1-8
+6-28;24-50
+5-32
+17-20
+14-15;6-11
+
+20-22
+9-17
+1-4
+24-45
+
+
+
+
+
+32-42;24-50
+19-41
+
+
+
+
+17-24;48-49
+8-28
+9-19
+25-26;32-44
+33-39;31-46
+31-46;31-47
+11-17
+33-40
+12-13;17-25
+16-29
+19-41
+
+20-22
+6-25;6-11
+
+
+31-46
+9-31;9-17
+
+32-42
+
+31-47
+17-24
+0-1;5-7
+1-9;1-10;16-29
+
+1-5
+32-44
+
+
+32-48;9-15
+
+
+31-46;32-48
+19-20
+31-46
+17-26
+13-33
+17-29
+39-42;24-38
+
+38-43
+17-35
+17-28
+
+
+31-37
+14-17
+
+1-8;21-31;17-26
+1-10;13-33;31-47;9-31;19-51
+8-26;17-28
+
+
+
+
+
+
+
+
+31-45;19-51
+
+11-17
+
+16-29
+
+
+
+
+1-8
+
+14-15
+
+12-13
+
+20-21
+
+
+
+
+31-47;5-8
+
+5-7
+
+
+2-3
+
+
+
+11-17
+
+
+
+8-16;9-20
+
+
+17-18
+
+17-29
+8-26;17-18
+1-5;16-17
+13-32
+6-25
+
+6-11;9-20
+17-28;17-26
+
+1-8;13-32
+
+5-32
+
+31-37;38-43;5-32
+6-28
+1-4;9-30
+31-37
+1-4
+6-11;9-20
+6-7
+
+
+18-23
+
+
+
+
+8-26
+11-38;24-45
+9-20
+
+
+
+
+
+
+17-20;6-11
+1-10
+
+
+5-32
+16-29
+24-45
+
+15-18;38-43
+
+15-19;31-37;9-30
+
+23-24
+
+1-10
+
+8-28;33-40;5-7
+1-4;31-45
+
+11-24
+17-25;5-8;24-31
+
+
+
+15-19
+
+1-10;8-20
+
+32-44
+14-16;16-29
+
+31-46;40-49
+
+
+24-31
+19-51
+7-13;24-45
+24-50
+17-26
+
+
+
+5-7
+17-24
+
+9-19
+1-9;39-42
+
+0-1;9-30
+8-28
+8-16
+20-22;8-26
+
+16-29
+1-6
+1-11;15-18
+9-17
+
+17-29
+
+
+6-8
+6-25
+1-8;24-31
+
+
+
+9-31
+
+
+17-24
+1-4
+
+13-33;6-17
+23-24
+14-17
+
+24-31
+
+1-10;15-18;5-32
+
+11-38
+8-28
+6-25
+
+
+5-7
+6-8
+1-4;9-19
+
+
+13-32;31-46
+14-16
+12-13
+
+8-28;39-42;19-51
+31-45;5-7
+8-20
+39-42
+
+
+8-24;6-8;9-31
+14-16;13-32
+
+20-21;9-20
+27-28
+8-28
+9-15
+1-5;33-39
+31-45
+17-36
+14-16;16-17
+32-48
+
+20-21
+11-17;9-20;3-9
+
+
+11-38
+
+
+
+8-16;11-17;6-17
+7-13
+5-8
+
+40-49;19-51
+
+1-11;27-28
+
+
+
+
+32-44
+20-21
+24-50
+
+23-24;32-44
+
+14-17
+21-31
+32-48;24-31
+
+
+32-48
+
+9-15
+14-16;33-39;9-30
+1-10;15-18;32-44
+39-42
+
+
+8-20;17-29;11-24
+
+1-9;27-28;19-41
+8-26
+
+12-13
+8-20;18-23
+1-4
+
+
+17-24;6-28;24-31
+
+38-43
+13-33
+7-13;9-15
+17-35;31-37
+1-8
+
+17-29
+11-17
+
+8-24;17-28
+
+14-16;9-19
+21-31
+
+14-15;9-17
+1-5
+12-13
+24-38
+8-26
+
+32-44;18-23;3-9
+19-20
+11-24
+6-8
+1-7
+
+20-21;40-49
+18-23
+
+15-19
+
+
+
+1-6
+
+
+
+11-17;31-45
+
+
+9-19
+9-17
+
+8-28
+
+15-19;20-21
+
+
+
+24-31
+1-4
+0-1
+
+13-32
+
+1-7
+31-46
+
+1-6;17-18
+20-22
+17-25
+1-8;9-31
+16-29
+17-18
+
+11-17
+17-18
+
+
+
+
+2-3;1-6
+
+
+17-26
+
+
+19-20
+17-28
+21-31;11-24;31-47
+
+
+
+
+
+9-15;9-17
+
+3-9
+8-28
+7-13
+
+
+
+5-32
+23-24
+1-8
+
+1-6;16-17;19-41;19-51
+17-25
+
+14-15
+
+19-20
+
+
+
+20-21
+16-17
+
+6-7
+
+
+17-20
+15-18
+1-10
+33-39;31-45
+6-7
+
+15-19;17-28
+9-31
+
+
+
+20-22
+
+5-7
+33-39
+
+33-39
+6-28
+
+
+8-16
+21-31;18-23
+
+6-11;31-47
+
+27-28;17-20
+
+
+
+
+1-11
+11-24
+
+11-17
+
+14-16;17-25;19-51
+9-30
+
diff --git a/examples/failures/failures-0.02 b/examples/failures/failures-0.02
new file mode 100644
index 0000000..bcf7591
--- /dev/null
+++ b/examples/failures/failures-0.02
@@ -0,0 +1,1000 @@
+16-29;31-47
+
+27-28;8-26;17-24;6-7;16-17;24-45
+14-15;17-29;24-45
+1-10
+27-28
+1-5
+23-24;17-25;11-24;18-23
+
+20-22;31-45;9-31
+1-7;1-11;12-13
+1-10;17-24;24-31
+13-33;9-19
+20-22;32-42;9-15
+13-32
+12-13
+1-8
+3-9
+1-5;8-28;17-20;48-49
+5-32
+
+15-18;6-7;7-13
+20-22;17-24
+
+
+8-24;13-33;31-47
+48-49;38-43
+27-28;11-17
+40-49
+1-7
+17-35;24-38
+17-29;31-47
+17-36
+12-13;24-45
+13-32;33-40
+11-17;3-9
+17-28;38-43;9-17
+
+15-19;16-17;24-50
+
+14-15;21-31;18-23;24-31
+
+0-1;7-13
+32-48;9-31
+33-40
+1-11;14-16;17-26;31-46;38-43;19-20
+14-15
+1-11;33-39;31-46;32-48
+39-42;16-17;38-43
+24-50
+6-34;16-24;19-51
+21-31
+
+15-18;11-24;6-8
+
+13-32;39-42;31-45
+12-13;6-11;9-19;19-51
+
+17-18;6-11;38-43
+6-11
+21-31
+17-18
+
+20-22;8-16;8-28;16-17;19-51
+16-24
+6-28;6-17;18-23
+
+
+24-45
+16-24;24-31
+
+6-28
+5-7
+20-21;6-8;18-23
+1-10;25-26;17-20;24-50
+6-7
+17-24
+
+17-18;17-26;6-25;19-51
+19-20
+25-26;17-28;9-17
+
+1-10;13-32;9-31
+14-15;24-38;24-31;24-45
+9-30
+25-26;17-25;24-38
+17-36;16-29
+38-43;24-38;3-9
+
+6-11;48-49
+
+6-11;18-23
+1-7;1-9
+8-16
+
+
+33-40;5-32
+17-35;38-43;24-31
+32-44;5-7;18-23
+6-7
+
+17-24;9-17
+1-11
+15-19;20-22
+6-17
+17-25
+18-23
+1-8;39-42
+13-33
+6-28;31-46
+1-9;33-39
+17-26;9-31
+17-20;31-37;9-31
+1-6
+9-30
+8-26;24-45
+
+33-39;33-40
+15-18
+25-26
+9-17
+8-20;8-28;11-24
+1-6;17-28;17-24;9-15
+15-19
+5-32
+18-23
+40-49
+14-15;32-44;24-31
+20-21;16-17
+23-24
+1-9
+1-4;1-7;8-28
+18-23
+
+
+16-29;32-44;3-9
+25-26;31-45
+1-11
+11-17
+13-32
+
+6-7;24-38
+15-18
+15-19;16-17
+
+9-19
+11-17;9-30
+17-26;11-38
+14-16;6-28;38-43
+
+
+20-21
+1-5;33-39;32-44
+8-16
+14-17;11-38;6-25
+6-8
+1-11;8-20;13-33;17-28
+17-28;6-8
+1-9;33-39;38-43
+6-25
+
+11-17
+1-8;16-24;40-49
+14-17;9-15
+1-5;9-31
+13-32
+0-1;1-10;14-16
+1-4;48-49;38-43
+23-24;31-46
+13-33;6-17
+
+
+
+1-6;31-46
+
+1-7;6-8;24-50
+1-5;17-24;16-24
+27-28;8-20
+14-17;17-36;33-40
+17-20
+17-26
+23-24;21-31;33-39;32-44
+19-20
+
+
+1-4;39-42
+40-49
+
+1-5;12-13
+
+2-3
+1-11
+0-1;13-32;16-29;24-38
+39-42
+24-38
+11-17
+9-30
+1-5;38-43
+15-18
+17-20;48-49
+8-28;17-25;39-42
+48-49
+
+6-34;32-48
+11-38
+
+32-44;24-31
+38-43;9-31
+24-45
+1-5
+8-28;11-17;40-49
+11-38;24-50
+
+14-16;8-20
+8-24;24-50
+16-17;3-9
+9-15
+23-24;17-35
+
+19-51
+17-35;24-31
+1-4;11-17
+14-15
+
+16-29;32-48
+1-6;6-28;9-30
+8-16;9-17;5-7;3-9
+8-16;17-20
+
+13-33
+17-29
+15-18
+48-49
+17-28;11-24;9-19
+1-5;24-45
+14-16;9-19
+24-31;19-51
+
+
+21-31
+6-11
+1-6;3-9
+19-51
+
+
+
+
+
+12-13;21-31;17-26;38-43
+20-21;8-20;17-25;31-45;18-23;19-51
+
+
+14-17
+17-36;6-7;5-7;24-45
+23-24;13-32;32-48
+15-18;8-16
+
+27-28;24-45
+6-8;38-43;9-15;19-51
+1-4;6-17
+16-24
+
+
+
+0-1;17-29;40-49;19-51
+
+1-11;18-23;3-9
+17-28;38-43
+8-28;17-29
+17-20;11-17
+
+1-8;5-7
+0-1;6-11
+16-29;19-51
+5-32
+
+1-9;21-31;13-33
+1-10;9-19
+14-16
+14-17;31-45
+6-25;5-32;5-7
+27-28;17-26;19-41
+18-23
+1-5
+14-17;8-24;24-45
+1-10;31-47
+1-8;31-45;7-13
+15-18;21-31
+
+12-13;15-19;17-36;40-48
+13-32;33-39;3-9
+14-15;20-22;8-20;6-8;40-48
+14-17;17-25;40-48
+23-24;17-18;40-48;24-31
+1-4
+15-18
+13-32;11-38;40-48
+17-24;39-42;40-48
+0-1;11-17;6-7
+20-21;8-16;17-25
+17-18
+1-4
+1-6;31-46;40-48
+11-24;31-46
+6-8;5-32
+
+6-34
+17-36;19-51
+6-17;9-30;40-48
+17-20;31-37;9-30
+16-24
+13-32;17-18;11-24;32-44
+12-13;16-29
+21-31
+8-28;17-26
+1-6;17-18;11-38;6-25;16-24;5-7
+1-10;24-38
+
+1-11;8-24;6-34
+20-21;6-28;9-17
+
+
+11-38;19-51
+
+14-17;9-17
+13-33;6-8;16-24
+8-24;17-36;24-50
+15-18
+
+1-10;27-28;17-18;17-29;31-47
+6-34;6-11;16-17
+14-17;6-11;3-9
+6-11
+39-42
+23-24
+24-50
+17-25
+12-13;9-30
+
+17-35;32-44;9-15
+6-7
+40-49
+1-8;33-40;39-42
+1-10;14-16;17-24
+
+6-8;6-17
+1-5;8-24;5-32
+16-17
+3-9
+1-4
+39-42
+21-31;24-31
+15-18
+0-1;14-15;17-24
+5-32;24-50
+12-13;23-24;6-34
+
+1-7;12-13;14-17;8-20;6-11;24-50
+11-38
+
+11-17;31-47
+0-1
+14-16;33-39;16-29
+20-21;6-11
+6-25;6-11
+15-19;8-24;32-44;24-31;24-45
+31-46
+
+8-28;6-11;19-51
+
+1-7
+20-22
+
+1-11;6-17;3-9
+1-11;13-32;31-37;19-41
+
+
+14-15
+1-8;17-20
+2-3
+24-31
+11-38;32-48
+17-26;5-32;18-23
+
+9-31
+
+39-42
+17-35
+
+31-47;48-49
+17-36
+6-25;24-50
+23-24
+
+39-42
+15-19
+1-9;8-24
+13-33
+
+21-31;18-23;19-41
+13-32
+5-32
+8-16;40-49
+33-39
+8-24;17-28;5-32
+
+6-8
+
+14-16;17-20;33-39
+12-13;17-35;6-17;9-19
+20-22;19-41
+
+11-17;40-49
+31-45;31-47
+12-13;17-28;33-40
+1-8;17-26
+
+17-36
+8-20
+31-47
+14-17
+48-49;9-30
+
+2-3;39-42;9-30
+
+19-41
+1-5
+8-24;13-32;6-8;16-24
+31-46;9-15;19-41
+
+17-25
+17-35
+1-7;1-8
+1-6;9-17
+14-17;17-26
+17-35;6-17;6-34;39-42
+17-36;9-15
+6-17;16-24
+17-20
+1-4
+20-21
+25-26;8-26;16-24;19-20
+1-7;8-24;16-29;40-49
+24-38
+13-33
+1-5;20-21;6-25
+5-7
+32-48;24-38
+25-26;6-8
+17-28
+31-47
+1-5
+16-29
+24-50
+1-10;8-20;9-19;5-32;24-31
+24-50
+
+17-25
+1-4;13-33
+17-35
+5-7
+
+1-10;8-16
+6-25
+
+
+8-24;6-28;24-45
+11-17;33-39
+8-26;16-29;5-8
+1-9;12-13;8-26;24-31
+9-17
+
+32-48
+33-39;31-47
+6-17;31-45;9-17
+25-26;8-20
+6-17;38-43
+9-30
+6-28;24-38
+14-15;5-8
+19-51
+20-21;25-26
+
+17-26;16-17
+1-11;8-28
+33-40;16-29;3-9
+17-25;48-49;19-51
+1-9
+1-8
+6-25;9-15
+1-10;6-7;3-9
+17-28
+12-13;24-50
+31-45
+1-4;11-17;31-46
+17-20;33-40
+
+25-26;32-48;24-31
+31-37;9-19
+40-49
+
+
+
+0-1;25-26
+
+
+1-8
+17-20;17-24
+1-5;8-26;6-8;6-34;19-51
+17-36;9-31;5-32
+0-1;12-13
+1-4;1-6
+14-16;16-24;9-31
+6-17
+25-26
+20-21;13-33;6-11
+17-26;6-25;6-11;16-24;38-43
+
+17-24
+1-11;8-28
+21-31
+6-8;32-44
+
+7-13;40-48
+39-42
+25-26
+7-13;38-43;24-31
+
+24-50
+14-16;13-33
+
+27-28;8-20;39-42
+
+14-17;17-20
+17-25;16-29;5-7;40-48
+1-7;9-30
+14-15;38-43
+5-32;19-20
+6-7
+9-31
+21-31
+25-26
+6-25;6-8;9-15;9-19
+9-31
+7-13
+
+17-36
+8-24;17-18;24-45;19-41
+1-4
+2-3;17-29;6-17;32-44
+6-34;32-44;19-20
+6-17
+
+
+20-21
+
+8-24;16-24
+40-48
+
+2-3;17-18;9-15
+
+17-20
+1-8;17-18
+
+
+0-1;8-16;17-18;5-32;19-20
+1-4;14-17;8-16
+5-7;24-50
+1-10;17-36;11-38;38-43;40-48
+
+1-9;15-18;25-26
+20-22
+
+17-18
+14-17;6-25;9-31
+20-21;6-34
+15-19;6-7;6-8;16-24
+
+17-20;17-29;24-45;19-20
+40-48
+
+27-28;40-49
+11-17;31-37
+19-51
+5-32
+17-24;24-45
+9-19
+17-18;33-40;6-34
+1-9;6-17
+8-24;9-30;5-32
+40-48
+9-30;24-31
+17-18;31-47;19-20
+1-11
+11-24
+31-45
+1-8;17-24
+
+31-47
+0-1;12-13;32-44
+
+8-28;40-48
+8-20
+14-16
+12-13
+1-9;24-38;24-31
+17-24
+0-1;24-38
+11-24;16-17;5-32
+7-13
+
+20-21;5-7
+6-25;39-42;40-48
+16-24
+31-45
+17-29;38-43
+
+1-5;15-18;11-24;6-34
+19-20
+13-32;17-36;31-46
+1-4;8-26
+
+
+40-48;24-45
+1-9;6-28
+
+
+33-40;16-24;48-49
+1-11;32-44
+1-5;1-6;6-34
+8-28;7-13
+20-21;5-8
+2-3;6-7;5-8;40-49
+8-26;5-8
+8-20;21-31;40-48
+13-32;6-11
+1-7;15-19;20-22;31-47
+1-10;9-17
+16-29
+
+
+31-45;5-32;24-38
+
+8-28;16-17
+
+5-32;40-48
+1-7;15-19
+33-40
+18-23
+14-16;31-37
+1-10
+0-1;2-3;1-8
+17-28
+14-17;31-37
+
+32-44;24-50
+1-4;12-13;23-24
+
+17-20
+32-48
+13-33
+
+20-22;8-24;6-7;6-28;6-25;9-17;24-31
+1-11
+12-13;17-29;6-11
+15-19;8-28;6-11;31-47;18-23
+8-26;6-25;6-11;48-49
+6-17;32-48
+9-19
+6-11
+12-13
+2-3
+
+31-47
+8-26;17-36;9-19
+9-30
+
+14-16;24-31
+1-5;6-34
+20-22
+
+
+27-28
+31-46
+1-11;17-26
+2-3;11-24;6-8;9-15
+
+17-28;19-20
+8-28;17-20
+2-3;6-25
+40-48;24-45
+1-5;6-34
+17-25;5-32;24-31
+1-4;5-7
+8-26;6-25
+17-28
+
+24-38;24-45
+
+1-7;48-49
+8-26;9-15
+8-28;40-48
+16-24
+1-5;11-38;6-34;31-47;9-17
+
+6-17
+1-9
+1-6
+27-28;19-41
+31-37
+32-48
+6-7
+1-11;20-21;17-29;40-48
+
+0-1;31-37;19-20
+11-17
+
+20-22;17-26;33-39
+21-31;6-8;9-19
+33-40;19-41
+1-11;8-26;17-35;6-25
+1-8;1-10;9-17
+19-41
+1-11;8-24;9-31
+
+
+
+1-5;23-24;17-24;17-25;6-34
+
+5-7
+13-33;9-30
+11-24;32-44;24-50
+14-16
+27-28;19-41
+19-51
+1-10;16-29;24-31
+
+11-38
+15-18
+1-5;17-29;6-34
+31-45
+31-37;9-31;19-20
+
+8-24;6-17;3-9
+13-32;19-51
+21-31;17-36
+
+1-4;8-26;17-29;6-25
+1-7;17-36
+31-46
+
+14-16;6-28;19-51
+
+8-26;9-15;24-45;3-9
+1-11
+
+14-15
+8-16
+1-6;32-44
+6-8
+19-51
+
+1-7;9-19
+1-5;20-21;33-39;6-34;48-49
+
+17-36
+14-17;40-49;19-51
+
+
+6-25;3-9
+15-18
+
+1-5;1-7;11-17;39-42;24-45
+19-51
+1-6;1-11;17-20
+1-5;1-8;21-31;11-24;6-34
+
+31-37
+1-11;39-42
+17-35;31-47
+6-8;32-48
+
+
+8-24;17-24;17-25;19-20
+14-17;20-21
+17-26
+14-15;27-28;32-44
+11-38;33-39
+17-35;7-13
+17-29
+15-18;31-45;9-17;3-9
+
+17-35;40-49
+
+
+11-38;16-24
+48-49;40-48;19-20
+1-9
+
+8-16;11-24;11-17
+33-40
+8-24;19-51
+1-4;31-45;5-7;40-48
+15-18;13-33
+40-48
+32-48;40-48
+31-37;40-48
+6-7;40-48
+11-24;32-48
+
+1-11;17-18;40-48
+1-11
+
+
+17-28;32-44;40-48
+40-48
+1-9;5-32
+
+17-18;17-26;17-29
+1-4;6-17
+0-1;8-26;33-40
+5-32
+
+1-9;5-8
+14-17;38-43
+
+
+15-19;13-33;19-41
+0-1;23-24;39-42
+17-18
+6-34
+11-24
+17-18
+38-43
+48-49
+8-20;24-45
+20-22
+15-19;8-28;32-48;9-17;5-7
+
+2-3;33-39
+8-26
+9-30;9-17;19-41
+
+20-21;38-43;24-50
+
+12-13;17-25;5-8
+0-1
+
+14-15;31-45;40-49
+
+9-19
+
+1-6
+9-31;24-45
+6-8
+19-41
+17-20
+
+17-28;9-31
+8-28;21-31
+8-16;11-17;31-47
+39-42;31-37
+
+9-15
+
+1-11;31-37
+11-24;31-47;9-17
+8-16;31-37;32-48
+
+25-26;39-42;24-50
+7-13;19-41
+9-30
+14-16;33-40;6-28;6-25
+16-24
+1-7
+31-46
+39-42
+23-24
+1-10;14-16;8-16;16-24
+24-45
+14-17
+20-21;13-32;31-45;3-9
+5-8;5-7
+5-8
+5-8
+17-35;17-26;6-7;5-8;19-51
+8-24;8-26;13-33;11-17
+9-31
+48-49
+15-18;6-25
+12-13;25-26;5-7;19-20
+12-13
+14-15;8-20
+33-40
+24-31
+9-19
+38-43
+
+1-9
+15-18;21-31;13-33
+14-16;8-26;17-29
+
+
+1-11
+8-16;33-39
+
+11-38;38-43
+
+0-1;21-31;24-50
+5-7
+6-7;24-45
+
+1-6;8-20;17-28
+
+8-26;11-38;16-29
+17-20
+
+1-6;23-24;8-28;6-28;9-15;3-9
+
+2-3;17-26
+14-17;6-17
+11-38;48-49;40-49
+16-29
+17-25
+15-18;17-20
+25-26
+1-9;8-24;6-25
+8-28;16-17;9-31;5-32
+1-4;6-34
+6-28;16-24;16-29;48-49;40-49
+1-6;6-25;24-38
+32-48
+12-13;15-19;33-39
+27-28;8-26
+8-28;9-17
+14-15;6-7;31-47
+31-46
+14-16;17-25;24-31
+20-21;9-19;19-41
+1-11;7-13
+11-17
+
+15-19
+1-6;31-46
+
+
+11-24;32-44;5-32
+8-16;8-26;3-9
+
+19-41
+17-29
+19-51
+0-1;14-17;15-19;17-26;6-34;16-17;19-41
+16-29;9-30
+17-35
+1-10;14-16;24-50
+24-38
+1-8;9-31
+
+
+14-17;27-28;8-24;17-28;17-24;32-48;7-13
+33-39;39-42
+16-17
+1-10;15-18
+24-38
+
+
+6-8
+8-24
+13-33
+17-24
+1-7;17-29;16-29
+8-28;6-7
+1-11;8-26;6-28;5-32
+1-11
+1-8;14-17;9-17
+
+8-16
+2-3;1-7;11-17
+7-13
+1-9;17-25;9-17
+17-24
+1-4;9-31;9-30;9-19;3-9
+14-16
+33-39;16-24
+17-26;6-28
+
+
+32-48;5-8
+9-30
+13-32;5-8
+1-5;8-16
+32-48;38-43
+2-3;11-17
+1-8;6-34
+32-44
+24-38;24-50
+12-13;20-21
+24-38
+1-4;1-5;14-17;19-20
diff --git a/examples/failures/failures-0.03 b/examples/failures/failures-0.03
new file mode 100644
index 0000000..ee6bd4c
--- /dev/null
+++ b/examples/failures/failures-0.03
@@ -0,0 +1,1000 @@
+11-38
+12-13;8-24;33-39;16-29;31-46;38-43
+1-11;15-19;3-9
+8-24;6-17;9-17;9-19;3-9
+40-48
+24-45
+
+0-1;1-9;6-28;16-17
+17-26
+48-49
+14-15;17-25;9-30
+1-8;17-24;6-17;16-24
+11-24;33-39;31-45;31-46
+1-8;19-41;19-20
+1-6;17-35;33-40;6-8
+0-1;1-7;23-24;32-44
+31-47;32-44;5-32;40-48;24-38
+16-17;48-49;9-17;40-48
+17-25;31-37;40-48
+17-20;6-28;40-48
+8-26;6-7;40-48;19-41
+12-13;5-32;5-7
+25-26
+1-6;31-46
+1-7
+23-24;27-28;6-17;48-49
+11-17;31-45
+1-10;8-26;16-17
+25-26;18-23
+9-31
+
+6-28;6-25;38-43;9-17
+1-4;31-37
+25-26;17-24
+13-32;33-40;40-48;24-45
+8-28;13-33;17-29
+15-18;40-48
+17-20;31-37;9-30;40-48
+14-16;11-17;6-11;48-49;19-20
+21-31;17-36;6-11
+23-24;8-16;6-11
+0-1;17-26;6-11;38-43;24-45
+1-11;6-11
+17-29;6-11;31-47;40-49
+12-13;33-40;7-13
+1-8;11-38;9-19
+39-42
+8-20;8-26;32-48
+23-24;16-24;9-15;5-7
+1-5;39-42;24-31
+1-6;13-32;32-48
+17-20;19-41
+11-17;33-39;6-34;16-29
+31-45;19-51
+17-24;9-31
+14-16
+17-36;5-7
+1-4;17-20;40-49
+33-39
+18-23
+0-1;17-20
+1-8
+9-17
+9-15;24-31
+1-8;33-40;6-34
+15-19;8-28;6-7;6-17;19-41
+1-7;18-23
+0-1;1-4;11-17;16-29;32-44;9-15
+17-26
+17-29
+11-24
+1-10;20-22;13-32;9-15
+31-45;48-49
+27-28;6-8;5-32;19-41
+14-16;8-20;31-47
+0-1;17-28;33-40;31-46;9-15
+1-6;6-17;9-17
+
+
+11-38
+1-8;48-49;9-31
+1-11;14-17;31-37
+6-34;24-50
+15-18;16-29;9-15
+20-22;17-25;16-24;31-46;24-45
+1-7;17-28;33-40
+13-32;6-7;6-8
+1-9
+39-42;9-19
+16-29;32-44;38-43
+8-24
+15-18;9-17
+8-26;17-25;3-9
+17-28
+6-34
+21-31;33-40;9-17
+14-17;39-42
+12-13;6-7;5-32
+20-21;23-24
+8-16;6-8
+6-28;48-49
+15-19;20-22
+12-13;31-47;24-38;3-9
+1-6;40-49;19-51
+14-17;24-38
+17-29;33-40;6-25;16-17;19-20
+6-28;7-13
+17-35
+8-28;11-17
+1-10;11-38
+17-36
+14-17;8-26
+13-33;31-46
+0-1;31-47
+
+33-40
+24-45
+1-11;16-29;32-44
+3-9
+6-34;19-20;19-51
+0-1;14-16;38-43
+11-17;16-17;9-30
+1-4;27-28
+1-10;20-22
+1-7;39-42;32-44;24-31
+1-6;20-22;21-31
+11-24;16-29;19-51
+
+17-28;33-39;6-25;31-45
+8-16;13-33;17-36
+7-13;38-43
+8-28;6-34
+1-9;11-17;31-37;31-47;9-19
+14-15;11-38;33-39;48-49;9-19;19-41
+
+8-26;17-28;16-24;9-19;5-8;5-7
+1-8;23-24;9-17
+32-48;5-7
+1-6;17-28;17-29
+14-16;21-31
+1-4
+8-28;13-33;17-26;6-8;39-42;16-29;19-41
+17-24;31-46;24-31
+
+9-31
+15-19;8-26;6-28;32-44;19-20
+5-8
+16-17;7-13
+8-24;11-17
+27-28
+31-46
+1-9;23-24
+1-11;14-15;8-26;9-15;40-49
+5-32
+1-8
+15-18;17-29
+0-1;33-39;24-31
+1-11;6-11
+17-20;6-11
+23-24;21-31;11-17;6-25
+11-38
+
+16-17
+20-22;8-24;17-25
+13-32;16-24
+6-7;48-49
+8-20;17-24;18-23
+1-6;20-21;11-38
+5-8
+
+17-28;7-13;40-48
+14-15;9-17;24-31
+8-16;8-26;11-24;24-45
+1-7;32-44;48-49;19-20
+23-24;17-26;31-45
+17-35
+8-28;9-19
+40-48
+8-26;17-35;40-48;3-9
+6-11;18-23
+15-18;17-28;40-48
+5-32;40-48
+5-7
+
+17-36;31-45;40-48
+13-32;6-25;39-42;40-48;24-31
+8-28;11-38;32-48
+1-5;1-8;15-18;17-28
+1-10;1-11
+6-25;16-29;9-17
+16-17;5-8
+1-5;17-25;33-39;19-51
+1-7
+20-21;25-26;31-47;19-51
+1-4;1-6;8-20
+17-29
+1-10;6-28;40-49
+23-24;33-40;40-48
+2-3;21-31;5-8;40-48
+15-19
+0-1;5-8;40-48
+12-13;27-28;8-26;6-11;48-49;3-9
+1-7;17-35;17-18;6-17;5-8;40-48
+9-30
+25-26;6-17;9-31
+17-28
+17-18;24-31
+17-26;16-17
+6-7;6-8;19-41
+8-28;17-24;24-50
+31-46
+14-16
+6-17;6-11;31-37
+6-17;19-20
+12-13
+25-26;7-13
+
+8-16;5-7
+38-43
+9-19
+1-7;6-25;48-49;9-19
+13-32;17-36;6-7
+32-44
+17-36;6-7;38-43
+25-26;17-24
+1-9;17-18;17-29
+1-8;15-19;6-25;39-42
+1-11;18-23
+15-18;33-40
+12-13;14-15;38-43;40-49
+20-22;17-24;16-29
+14-16;13-32;16-17
+25-26;8-28;17-20;33-39
+20-21;21-31;9-15;5-32
+7-13;9-31
+1-4;11-24
+0-1;15-18;5-8
+16-29;5-8;40-49
+5-8
+5-8
+14-16;17-36;6-34;5-8;24-45
+1-9;1-11;17-24;17-26;16-17;5-8
+17-24;24-31
+1-11;8-28;8-24;17-20;11-38
+2-3;1-5;1-6;12-13;8-16;8-26;48-49
+11-17;24-45
+12-13;15-19;6-7
+
+1-5;14-17;27-28;17-18;32-44;19-41
+
+8-20;17-35
+1-5;1-9;15-18;13-33;9-31;24-31
+48-49;5-7
+25-26;17-24;19-20
+20-22;11-38
+17-18
+
+13-33;31-47;18-23
+1-6;14-16;8-26;6-34
+1-10;17-18;7-13
+
+21-31;11-17;16-17;9-30
+11-38;6-7
+17-24;9-19
+31-46;9-17;40-49
+39-42;24-31
+1-10;20-21
+12-13;6-17
+14-15;8-28;11-17
+17-25;3-9
+27-28
+8-20;17-28;5-8;24-50
+
+17-24;5-8
+15-19;23-24
+6-7;5-8
+14-15;31-45;9-31;40-49
+8-24;13-32;32-44
+1-7;17-28;6-17;16-24
+2-3;6-25
+38-43;19-51
+
+23-24;6-8;24-50
+9-17
+15-19;6-28
+8-24;9-15
+20-21;25-26;6-7;16-17;19-51
+14-17;17-20;11-17;9-17
+8-16;17-25;11-38
+6-28;38-43
+16-17
+12-13;32-48
+25-26;39-42;48-49
+9-15
+20-22;17-36
+14-16;31-37;19-51
+14-17;17-20;11-38;31-47
+
+8-28;11-17
+31-37
+20-21;33-39
+33-39;5-7
+1-4;16-17;19-51
+11-24;31-47
+6-17
+1-6;12-13
+13-33;6-34;5-7;18-23
+17-26;33-40;9-19
+9-17;24-31;24-45;19-51
+12-13;38-43;24-50
+
+11-38
+17-28
+17-28;17-36;40-49
+1-9;1-11
+1-8;15-18
+8-24;16-29;9-30
+11-24
+17-29;6-25;6-34;31-45
+11-38;7-13
+20-21
+1-6;11-17;6-28;19-20
+5-32;24-31
+1-9;14-15;31-47
+8-28;17-25;33-39;48-49
+13-32
+11-24
+16-17;9-17
+17-24;31-46
+1-10;21-31;38-43
+
+0-1;18-23
+31-47
+16-29;32-48;9-15
+14-15;8-28;13-32;40-49;19-41
+24-31
+1-11;20-22
+17-25;31-46
+8-26;31-45;40-49;24-31;24-50
+1-4
+0-1;1-9;8-24;38-43;18-23
+17-35;17-26;6-7;5-8
+25-26
+6-8;6-17;16-17;5-8
+17-20;39-42
+1-10;13-33;40-49
+
+13-32;31-37;9-15
+15-18;17-29;5-8
+1-6;20-22;27-28;24-50
+15-19;11-24
+14-16;31-37
+9-19;5-7
+17-20
+
+31-37;3-9;19-41
+1-4;8-28;31-45
+1-8;8-24;33-39;32-44
+
+1-9;1-10;16-29
+17-25
+13-32
+16-24
+6-8;40-48
+8-26;6-8;40-48
+18-23;40-48;3-9
+6-28;40-48;24-38;24-31
+17-36;16-29;40-48
+2-3;20-22
+17-29;40-48;24-38
+8-20;48-49;5-7;40-48
+1-11;24-38
+16-24;9-30
+21-31;18-23
+1-4;20-22;27-28;17-24;17-26
+31-45
+0-1;6-25;19-20
+1-9
+6-7;31-37
+8-16;13-33
+15-18;17-25;32-44
+11-38
+13-32;6-17
+1-6;16-29
+17-24
+2-3;1-8
+
+
+1-8;33-39;33-40;9-17
+17-35;17-29
+1-8
+15-19;8-16;8-26;13-33;18-23
+12-13
+14-17;13-33;17-35;9-17
+0-1
+1-7;6-7
+11-38;9-19
+14-16;8-26;9-31
+11-17;33-40;18-23
+27-28;17-28;6-11
+14-17;15-19;6-11;31-46;24-31
+8-26;13-33;17-26;17-29
+0-1;21-31;6-11;48-49
+6-11
+2-3;15-18;20-21;11-38;6-11
+1-11;13-33;6-28;6-11
+12-13;32-44;5-32
+1-8;17-28;31-47;32-44;9-17
+1-10;17-26;33-40
+0-1;23-24;17-28;11-17;24-31
+
+15-18;19-51
+1-4;9-15;24-45
+2-3;5-8;24-50
+31-47;32-48;7-13;5-8;5-7;19-51
+1-9;13-33;11-38
+1-10
+17-28;6-28;16-17;32-48
+33-40;9-31
+14-15;15-18;23-24;25-26;33-40
+0-1;6-17;24-45
+1-11;9-17
+1-8;27-28;16-29;9-15;19-41
+1-10
+
+14-15;15-19;39-42
+1-6;1-8;8-20;17-29;19-41
+20-22;13-33;17-20;6-7;16-24
+1-7;11-17;31-47
+33-40;6-28
+6-8;31-45;5-32
+1-9;8-24;6-17;5-7
+8-20;17-28;6-11;24-45
+33-39;6-11
+12-13;8-24;5-32
+8-28;6-7;6-11;9-15
+1-6;8-26;39-42;9-17
+11-24;16-17;24-50
+9-19
+15-19;17-18;33-39;6-34;9-31;9-19
+2-3;17-26;33-40;5-7
+17-29;6-28;19-51
+17-28;6-17;9-15
+
+2-3;23-24;8-28;16-29
+31-45;31-47
+39-42
+31-37;24-50
+6-28
+19-51
+15-19;8-16;13-33;33-40
+17-20;31-37
+11-24;6-34
+1-6;16-17;5-8
+8-20;17-18;16-29
+0-1;1-10;20-22;31-46;5-32
+31-46;32-48
+1-7;13-32;17-18;31-45;9-15
+1-8;20-21;6-8;39-42
+8-24;11-17
+1-11;33-40;6-7;32-44
+1-9;1-11;33-40;32-44;5-32
+1-7;32-44;19-41
+20-21;9-15
+1-4
+31-46;31-37;9-31;19-41
+40-49;24-31
+20-22;17-29;6-7
+15-18
+8-28
+17-25
+33-40;19-20
+1-7;11-38;7-13
+27-28;17-18;16-17
+17-26
+15-18
+17-18;19-41
+20-21
+
+12-13;24-31;24-50;19-51
+1-6;17-18;19-41
+8-28;33-39
+17-25;6-17;32-48
+9-19
+23-24;11-24;6-7
+13-32;11-17;32-48;5-8
+13-33;9-17;5-8;3-9
+17-35;31-47
+17-29;5-8
+0-1;1-6;24-38
+1-9;5-8
+6-8;6-11;31-45;5-8
+17-20;6-7;24-38;19-51
+8-24
+1-10;12-13;23-24;24-38;19-51
+1-8;27-28;21-31;17-18;6-17
+1-9;25-26;13-33;17-29;24-38
+33-39
+1-5
+32-48
+2-3;27-28;7-13
+20-22;8-28
+24-31
+17-18;33-39
+14-17;17-29;11-24;11-17;5-32
+1-7;31-37;40-48
+17-20;40-48;24-45
+17-26;40-48
+17-25
+2-3;8-20;8-16;31-37;48-49;9-30;24-50
+17-18;9-30;9-17;40-48
+17-29;17-36;40-48;24-50
+8-16
+1-6;40-48;24-45
+15-19;32-44;40-48
+1-11;7-13;40-48
+17-25;39-42;40-48
+6-17;48-49;40-48
+
+14-15;6-11;16-29;31-46;40-48
+6-11;40-48;24-50
+8-26;6-11;40-48
+8-16;6-11;40-48
+21-31;9-30;5-8
+1-7;17-20;6-11;31-37;40-48
+14-16;6-11;40-48
+1-6;9-19;40-48
+17-35;16-24;40-48
+12-13;11-38;31-46;5-32;40-48;19-51
+23-24;17-36;11-24;6-34;31-46
+1-11;8-24
+33-39;24-50
+12-13;14-15;40-48
+17-28;11-17;6-25;38-43;40-48
+17-18;9-30
+1-4;16-29;32-48;32-44;40-48
+20-21;8-16;32-44;38-43
+8-20;24-31
+15-18;15-19;11-24;6-25;32-48;5-7
+11-38
+32-42
+17-28;16-29
+21-31;33-39
+17-28;24-38
+23-24;6-7
+1-8;15-18;8-20;6-34;31-45;5-8
+20-22;32-42;38-43;40-49;24-38;3-9
+13-32;17-20
+15-19;17-29;24-38
+
+0-1;27-28;16-29
+12-13;21-31;32-42;24-31
+1-6;14-16;11-24
+
+13-33;11-38;5-8
+2-3;1-10;20-21
+21-31;9-31;9-30;24-50
+17-29;7-13
+19-41
+8-20;6-7;6-17;5-8
+17-24
+2-3;20-22;33-39
+16-17;5-32;24-50
+21-31;7-13;9-31;18-23
+15-19;11-17;16-24
+8-20;8-24;17-20;19-20
+14-15;6-7;32-44;40-49;3-9
+1-7;25-26;17-36
+11-17;9-17;9-19
+1-11;31-37
+9-19
+23-24;17-24;32-48
+6-17;6-34;19-51
+25-26;17-26;16-29;24-31
+8-26;6-25;5-7;19-51
+1-9;39-42
+1-6
+
+23-24;25-26;32-42
+
+
+6-17;48-49
+12-13;8-16;16-17;31-46
+17-25;39-42
+13-32;17-36;9-31;24-50
+0-1
+1-7;12-13;15-18
+8-26;31-37;32-44
+1-4;21-31
+31-46;5-8
+32-48
+11-17;6-7;5-8
+17-24;6-8;5-32
+8-20;24-45
+15-18;11-17;9-30
+8-16;33-39;38-43;24-50
+3-9
+32-42
+15-19;31-47
+8-24;19-41
+8-26
+14-15;8-28
+1-8;17-24
+32-42;38-43
+8-28
+1-11;12-13;6-25;31-47;5-32
+17-26;40-49
+8-24;8-26;16-17
+14-16;15-19;21-31;9-15
+12-13;17-28
+19-41
+20-22;6-28;39-42
+13-32
+20-22;38-43;9-19
+8-26;17-29;9-19;19-41
+8-24;6-7;32-44
+32-44;9-15
+23-24;11-17
+15-18;15-19;17-20;9-31;24-45
+6-17;39-42;16-24
+1-8;17-36
+27-28;8-20;33-40;16-29;31-47;19-41
+17-24
+8-24
+17-35
+1-7;8-16;38-43
+17-25
+8-26;11-38;32-42;5-7
+12-13;21-31;13-33;32-48
+0-1;7-13
+2-3;40-49
+1-9;33-40
+12-13;20-21;16-17;19-20
+
+6-25
+2-3;13-32
+6-25
+
+
+1-11;25-26;16-29;31-45
+1-6;8-26;13-32;17-26;11-24
+33-39
+1-4;32-44
+
+18-23;24-31
+1-7;17-20;17-36;16-17
+19-20
+0-1;27-28;8-26;6-17;31-37;40-49;19-41;19-20
+16-17;31-45;9-30
+2-3;8-20;11-24;24-38
+15-18;7-13
+20-22;17-28;24-38
+6-7;9-31;9-17;19-51
+1-7;14-16;15-19;11-38;5-7
+
+13-32
+14-15;40-49
+8-24;31-46;32-48;9-19
+15-18;17-24;16-17
+8-28;19-20
+1-4;1-10;33-40;6-17
+14-15;16-29
+21-31
+1-7;15-19;8-20;6-7
+20-22
+31-47;24-31
+6-25
+1-9;16-29
+
+1-10;6-28;31-37;48-49
+8-16;17-28;6-17
+27-28;33-40;16-24;32-42
+
+1-5;1-8;11-38;24-50
+17-35;17-26;6-28;9-31;19-20
+39-42;40-49
+1-5
+8-20;17-25;3-9
+1-4;1-7;15-19;20-22
+17-18;11-17;5-32
+18-23
+
+14-16;23-24
+
+
+1-5;5-32
+16-29;32-48
+3-9
+1-5
+0-1;17-20;17-24;9-15;19-41
+9-15;19-20
+
+1-5;16-17;31-37
+
+1-6;32-44
+8-28;16-29;24-31
+
+1-5;11-17;5-8
+15-18;15-19;6-25;9-17
+5-8;5-7;40-49
+14-16;17-25;6-11;9-19;19-20
+8-24;6-7
+6-11;38-43
+6-11
+5-8
+8-28;24-45
+
+17-26;11-38;31-46
+11-17
+1-5;1-8;24-31;24-50
+16-29
+8-16;17-28;17-36;32-48
+6-8;16-29
+8-16;17-36;6-8
+19-20
+17-18;11-38;31-46
+
+12-13
+23-24;17-18
+14-17;11-24
+6-25;32-44
+1-5;17-29
+15-18;27-28;13-33;17-35;11-38;33-39
+11-38;9-31
+31-37;40-49;24-31
+1-5
+6-7
+8-20;39-42;19-51
+15-19;11-24;16-29
+17-18
+8-24;32-42
+1-7;1-8;17-36;38-43
+6-8;16-17
+6-8
+12-13;17-29;6-28;9-15;5-32;40-49
+6-11
+14-17;6-17;6-11;32-42;19-51
+1-5;13-33;16-29;24-45
+7-13;9-17;3-9
+
+17-26;33-39;48-49;5-32
+6-34
+31-37;9-31
+8-16;16-29;38-43
+17-24;6-17;16-24;9-19
+1-6
+17-35;5-32
+1-8;6-7;6-8
+17-18
+1-9;1-11;13-32;32-42
+1-6;27-28;16-29
+23-24
+8-26;7-13;9-17
+18-23
+7-13;19-20
+48-49
+17-18;6-17;9-17
+14-15;8-16;8-24;13-33;19-41
+6-7;6-17
+17-18;24-31
+
+31-47;9-30;5-7;18-23;24-50
+32-42
+6-25;9-31
+1-11;13-32;11-17;31-45
+1-8;1-9;8-26;17-35;17-29;17-36
+17-36;16-24;9-17
+13-32;39-42
+0-1;15-19;6-25
+20-21;13-33;18-23
+20-22;5-32;24-50;19-51
+11-24
+24-50
+14-16;8-28;17-26;31-45
+1-7
+31-46;32-48
+11-24;16-24;48-49;18-23
+15-18;15-19;16-17
+1-6;27-28;24-50
+6-7;16-29;31-45;19-51
+
+6-8;24-45
+6-28;16-24
+25-26;6-7;24-31
+13-33;6-34;31-45;31-46
+1-9
+11-24;33-39
+17-20;32-42
+15-19;25-26;9-19;5-7
+17-35;5-32
+1-7;8-26;17-20
+38-43;9-15
+8-24;33-39
+23-24
+9-15;9-31
+27-28;11-24
+13-33;39-42
+
+17-24;3-9
+27-28;8-24;6-17
+38-43
+6-28;31-37;9-30
+1-11;8-16;32-44
+21-31;17-36;7-13
+1-7;16-17;48-49
+0-1;1-4;32-48
+1-5;31-47;32-42
+17-26;11-17
+1-6;13-33;6-17
+1-5;11-24;33-39;19-20
+17-20;6-17;24-45;19-41
+2-3;48-49
+8-24;17-29;24-50
+15-19;17-35
+1-9;21-31;6-34;9-15
+8-16;39-42
+
+12-13
+15-18;11-24
+7-13
+0-1;1-9;14-16;20-21;13-33;24-50
+11-17;6-11;16-17
+1-7;15-19;13-32;17-25;39-42;16-24;5-32
+16-24;19-41
+6-11;32-44
+6-11
+6-34
+6-8
+6-7;40-49
+19-51
+2-3;1-10;32-42
+9-19
+1-7;11-24;33-39;16-24;9-19
+14-15;33-40;31-37;32-48;3-9
+14-17;8-28;17-35;17-18;17-36;5-7;24-45
+1-6;33-40
+12-13;19-20;19-51
+1-8;16-17
+1-11;20-22;33-39;6-34;24-31;19-51
+1-11;17-35
+12-13;20-21;17-26;11-38;5-8
+5-32;24-45
+13-33;9-30
+39-42;31-47;32-42
+33-40;31-46
+6-8;16-17
+20-21
+16-17
+27-28
+6-17;32-42
+11-24;6-28;31-47;5-7
+20-22;6-28
+13-32;6-7
+33-40
+
+
+6-28;9-15
+0-1;6-25;31-47
+1-9;17-35
+1-4;12-13;17-36;39-42;24-50
+20-21
+1-7;33-39;24-31
+23-24;16-17;32-48;19-20
+17-20;33-40;3-9
+0-1;1-6;11-24;48-49
+14-16;17-25;6-7
+
+11-17;6-17;31-45
+15-19
+5-32;3-9
+
+9-15
+
+1-11;17-26;31-47;24-45
+8-28;11-38;9-15
+9-19;24-31
+1-4;1-9;20-22;21-31
+1-6;16-24
+1-6;38-43
+9-15
+20-21;9-17
+17-29;6-8
+12-13
+
+32-42
+6-17;31-45
+5-7
+1-10;15-19;8-16;13-33;17-35;16-29;9-31
+1-8;8-16
+
+21-31;17-25;32-44;9-31
+1-7;15-18;33-39;6-7;7-13
+20-22;8-26
+19-41
+17-20
+1-4;17-36;6-28
+1-9;27-28;39-42
+21-31;5-32
+32-42
+38-43
+1-7;20-21;13-33
+14-16;38-43;24-31
+8-16;6-28;31-47
+
+14-16;16-29;32-42;24-38;19-41
+48-49;24-45
+12-13
+17-26;32-44;19-41
+
+1-11;31-46;32-48;32-42;40-49
+1-7;8-28
+14-17;7-13
+1-10;17-18;18-23
+13-33;6-11
+31-45;5-7
+8-24;13-33;6-25;19-41
+9-17
+23-24;21-31;19-20;19-51
+8-26;9-31
+31-37;38-43;19-51
+20-21;8-28;17-20;9-19
+17-24
+15-18;27-28
+6-28;5-7
+15-19
+6-17;5-32
+1-6
+13-33;6-17
+6-7;16-29;32-44;32-42;7-13
+14-15;11-24;32-44
+20-22;8-20;8-28
+1-9;14-16;24-31
+
+8-16;16-24;31-37
+27-28
+17-35
+6-17;24-38;24-45
+13-33
+17-20;16-24;31-37;24-38
+1-6;13-33;17-29;6-7;16-17
+17-26;24-31
+8-24;17-18;32-42
+23-24;21-31
+20-22;8-28;39-42
+18-23;3-9;19-20
+1-4;1-9;17-18;32-48
+8-16;31-47
+1-11;32-42;5-8
+1-11;15-19
+1-4;13-33;17-36;16-17;9-17
+23-24;27-28;24-50
+1-5;39-42;5-8
+13-32;17-18;32-48;18-23
+8-28;17-24
+11-38;11-17;6-25
+31-45
+1-5;39-42
+
+15-19;6-28;32-44
+25-26
+1-5;24-31;24-45;3-9
+31-46;40-49
+21-31;11-38;31-47
+1-5;1-8;6-7;9-19
+25-26
+1-6;23-24;32-42
+1-4;17-18;17-28
+0-1;17-29;7-13
+9-15;5-32;19-41
+19-51
+15-18;31-46
+6-34;6-11;19-20
+6-11
+17-24;17-26
+24-38
+11-24;5-7;19-51
+1-10;14-16;8-16;17-35;33-40;6-17;24-38
+18-23;19-51
+1-6
+
+
+25-26
+1-6;1-11;19-41
+14-17;20-22;9-30;24-31
+17-18;19-51
+8-28;33-40;32-44;40-49
+1-7;25-26;8-20;24-50
+
+33-39;9-17
+14-16;27-28;17-18;6-28
+11-24
+14-17;20-21;17-20;24-45
+25-26;16-29;48-49
+
+1-9;12-13;15-18
+17-25;39-42;32-48
+17-29;11-38;7-13
+20-22;25-26;27-28;16-17;24-45
+8-24;11-24;16-24;32-48;19-20
+33-39
diff --git a/examples/failures/failures-0.04 b/examples/failures/failures-0.04
new file mode 100644
index 0000000..b8539fb
--- /dev/null
+++ b/examples/failures/failures-0.04
@@ -0,0 +1,1000 @@
+1-4;8-26;33-40;31-45;38-43;9-15;9-20;40-49
+15-19;11-24;6-8
+8-20;17-24
+9-30;3-9
+21-31;6-8
+2-3;1-4;25-26;6-25;31-46;32-48;32-44
+23-24;19-51
+1-11;33-39;48-49;5-32;24-50
+6-28;31-46;32-44;7-13;9-17
+1-7;8-28;6-17;32-48
+2-3;13-33;5-32
+0-1;15-18;17-35;17-20;6-34;9-20;24-38
+15-19;17-25;6-8;31-46;32-44
+8-16;6-34;40-48;19-41
+33-39;40-49
+
+9-20
+1-8;33-40;16-29
+20-21;27-28;32-48;24-50
+1-8;20-22
+14-15;15-19;11-38;33-40;48-49
+14-16;21-31;3-9;19-41
+6-25;19-51
+27-28;17-36;6-17
+2-3;14-16
+17-29
+25-26;8-26;13-32;16-24;9-15
+1-9
+17-24
+31-46;19-20
+1-11;11-38;6-8;9-20
+16-24
+12-13;14-15;21-31;13-32;17-25;38-43
+1-7;1-11;11-24;31-45;5-7
+17-26;11-17;7-13;5-32;40-49;3-9
+13-32;31-47;9-20;5-32;24-50
+33-39;9-20
+8-28;6-11;32-48
+12-13;6-8;6-17
+15-19;8-28;11-17
+17-28
+1-8;6-28;6-11
+15-18;8-26;17-24;9-19
+20-21;17-35;33-39;9-19
+14-16;11-38
+13-32;17-36;6-7;9-20;24-45
+8-28;13-33;17-26;9-31;5-8;24-38
+
+17-28
+8-24;16-17;5-8
+20-22;9-20;24-50
+1-4;31-45
+2-3;1-7;6-7;24-31
+1-11;3-9;19-41
+11-17;38-43;24-31
+27-28;9-20;5-7
+14-16
+8-26;17-26;6-17;32-44
+2-3;20-21;17-28;6-34;39-42
+8-26;9-31
+16-24
+25-26;7-13;40-48;24-38
+31-45;5-32
+0-1;2-3;8-24;24-31;19-20
+8-28;19-20
+0-1;13-32;31-37
+6-17;40-48
+0-1;8-16;17-28;5-7
+0-1;48-49;5-32
+2-3;14-16;8-28;17-35;17-24;32-48;24-45
+2-3;1-5;17-36;9-30;24-45
+1-8;23-24;17-29;33-40;16-17;19-41
+15-18;6-34;16-24;31-47;9-20;9-30;24-31
+11-38;31-45;32-48
+1-6;25-26;16-17;31-45;31-47;32-44
+2-3;8-26;6-11;24-38
+1-5;14-17;13-32;17-26;9-15;9-17
+1-11;14-17;11-38;9-20
+17-35;17-20;6-7
+15-18
+1-9;40-49
+17-24;6-8;24-31;24-50
+
+13-32;6-25;40-48
+24-50
+12-13;27-28;13-32;13-33
+14-15;21-31;6-28;39-42;32-48;9-15
+14-17;6-8;9-20
+31-46
+16-29;7-13;9-17;5-8;5-7
+0-1;17-18;24-45
+1-8;12-13;14-16;17-36;31-47;32-48
+16-29;24-45
+1-9;31-47;5-32;40-48;24-45
+33-39
+1-4;11-24;32-48
+1-4;12-13;13-32;9-31
+1-11;9-19
+14-17;8-20;39-42;9-19;40-48;19-41
+12-13;31-46
+1-11;20-22;6-17;16-24
+1-6;15-19;17-25;48-49;9-20
+20-22;25-26;11-38;9-15
+14-16;13-32;11-24;6-7;16-29;31-45;31-46;9-20;18-23
+17-35;32-44;40-48
+12-13;31-37;18-23;40-49
+1-10;8-16;11-24;16-17
+15-19;8-20;32-44;5-32
+1-8;15-19;8-26;9-20
+11-24;38-43;40-48
+6-34;31-37;3-9
+1-7;6-17
+6-17;9-30;40-48;3-9
+25-26;33-40
+1-10;39-42;19-51
+1-9;17-36;31-45;9-20;19-20
+1-5;20-22;31-45;40-48;40-49;19-20
+2-3;1-8;1-9;20-22;17-25;6-11
+1-4;20-22;17-26;39-42;9-31
+0-1;17-26;9-17
+12-13
+0-1;15-19;8-24;11-24;6-17;7-13
+2-3;1-5;1-11;21-31;6-25;38-43
+12-13;8-16;17-29;33-39;6-7
+11-17
+1-7;8-20;11-24;19-41
+21-31;17-24;11-17;16-17
+14-15;14-17;9-20;24-50;19-51
+2-3;6-28
+16-29
+6-7;24-38;24-50
+33-39;16-24;9-20;24-45
+16-17;24-45
+0-1;21-31;24-31
+19-41
+16-29;18-23;24-31
+6-17;9-20;5-7;24-31
+1-8;21-31;16-24
+17-35;17-36
+6-8
+15-19;17-29
+0-1;8-28;48-49;9-30
+8-26;17-20;6-28;39-42;16-24;3-9
+0-1;15-18;17-28
+21-31;6-7;6-25
+11-38;33-39;33-40;9-20;5-7
+14-16;33-40;9-20
+
+38-43;9-15;18-23;24-50
+1-7;19-20
+1-6;12-13;13-32;9-20
+17-24;6-28
+8-20;19-51
+1-10;6-17;9-19
+6-11;9-19
+11-38
+13-32;17-25
+24-31
+2-3;1-5;9-15;18-23
+9-17
+8-16;17-35;11-17;6-28;9-20
+14-16;17-26;24-31
+1-5;17-35;17-36;3-9
+1-6;1-10;8-16;13-33;5-32;24-31
+8-28;11-17;6-17;39-42;24-45
+0-1;25-26;17-24;9-20;24-38
+8-28;17-25;5-32;19-41;19-20
+17-35;6-25;31-37
+0-1;8-16;6-8;6-11
+8-28;17-20;17-28
+8-24
+33-40;32-44;9-20;24-38
+6-25;40-49;24-31
+14-16;21-31
+11-38;33-40;31-47;32-44;7-13
+0-1;1-9;6-7;9-20;9-30
+14-15;17-25;17-29;16-24;9-20;24-38
+15-19;16-17;31-46;9-31;9-30;5-8
+1-8;23-24;17-28;39-42;24-31
+8-20;6-25
+1-7;8-16;6-34;5-7
+
+16-29;9-20
+5-8
+14-16;17-36;19-41
+20-22
+1-4;25-26;9-20
+8-20;17-20;11-17;40-49
+6-11
+13-32;33-39;32-42
+25-26;17-28;17-29;9-20
+20-21;9-20;5-7;19-51
+23-24;6-7;6-8
+1-6;6-17;6-11;31-47
+8-28;5-32;24-38;3-9
+14-15;17-35;6-25;6-34;7-13
+1-9;13-33;32-42;24-50
+1-7;9-20;5-32
+2-3;1-9;17-28;6-17;19-51
+20-22;25-26;19-20
+20-21;20-22;5-32;19-20
+27-28;8-16;13-33;6-17
+1-10;15-19;20-22;17-26;11-17;31-37;40-49;24-45
+27-28;17-26;24-45
+1-8;32-48;9-20;9-31;24-50
+1-6;24-31
+0-1;6-25;16-24;38-43
+14-16;23-24;17-24;11-38;48-49;9-19;24-31
+0-1;1-4;8-26;32-48;9-30;9-19;18-23
+1-4;1-11;17-18;9-20;19-41
+17-28;31-47;48-49;9-30;24-38
+11-38;3-9
+6-11;7-13
+15-18;31-47
+
+20-21;8-16
+2-3;1-11;17-29;6-8
+
+0-1;1-10;14-15;17-28;33-39;18-23;3-9
+1-9;9-15;9-20;19-41
+0-1;15-19;25-26
+2-3;15-19;17-18;17-24;11-38;6-28;38-43
+32-48
+17-35;11-17;6-7
+8-26;17-35
+1-8;6-8
+8-26;5-8
+1-6;1-8;12-13
+1-7;25-26;32-48
+1-7;1-10;17-35;5-32;18-23
+20-21;6-11;9-15;9-20
+18-23
+1-4;12-13;32-48
+0-1;1-9;31-45
+8-16;17-18;6-25;39-42
+12-13;13-32;17-18;11-24;6-8;18-23;3-9
+12-13;16-24;9-20;5-7
+1-11;20-22;17-24;11-38;32-48
+8-24;9-17
+27-28;16-17;32-44
+
+15-19;17-25;6-34;16-24;32-48;18-23
+1-10;8-26;32-44;24-31;19-41
+14-16;11-24;9-17
+15-18;27-28;17-28;17-26;32-42;38-43;24-31
+17-26;32-48;9-20;9-30;9-17
+16-29;9-20
+11-24;6-28
+14-15;33-39;6-17;32-42
+25-26;39-42;31-47
+8-16;11-17;32-48
+17-25;31-47;32-42;9-20;24-31
+8-24;21-31;17-35;16-29
+17-36;6-7;31-46;9-31;24-31
+1-4;1-9;14-15;17-20;17-18;11-17;32-42
+1-4;21-31;13-33;31-45;31-37;7-13
+1-9;23-24
+25-26;27-28;17-25;9-30
+1-11;8-20;16-17;31-46;9-20
+8-26;17-29;31-47;5-7
+1-6
+12-13;17-24;6-11;31-47
+25-26;17-18
+6-7;9-19;5-32;40-49
+11-24;32-42;9-19
+15-19;20-21;13-33;24-45
+14-16;27-28;8-20
+39-42;31-45;32-42
+1-7
+38-43;24-31
+8-16
+1-7;6-11;16-24;24-31
+1-8;27-28;40-48
+6-25;32-44;5-8;40-49
+15-18;17-18
+39-42
+1-7;20-21;25-26;17-18;40-48
+17-35;6-25;19-41
+8-28;11-17
+24-38
+14-17;17-35;11-38
+1-6;8-28;9-15;9-30
+7-13
+8-28;17-29
+20-22;17-20;9-30;19-51
+12-13;39-42;32-42
+1-5;1-6;1-9;17-26;33-40;40-48;24-38
+17-26;16-24;19-41
+17-18;32-42
+14-17;19-51
+1-8;17-24;9-20;9-30;9-19;19-51
+12-13;14-17;15-19;9-15
+14-15;17-20;17-24;31-45
+16-24
+1-6;11-24;16-29;38-43;40-49
+48-49
+1-8;9-31;40-48;24-31
+25-26
+2-3;11-17;48-49;24-31
+1-9;14-17;13-33;17-29;17-36
+1-4;14-17;8-24;17-18;33-40;6-7;6-8;9-15;19-51
+20-22;38-43;9-19;5-7
+1-9;14-15;11-24;32-44;5-32;40-48
+1-6;15-19;40-48
+1-11;25-26;17-24;6-11;5-7
+12-13;8-24;17-25;16-24;5-32;19-41
+1-7;17-20;17-18;31-37;32-44;24-38
+1-10;3-9
+12-13;20-21;23-24;5-8;40-48;19-51
+1-5;1-9
+1-10;8-20
+13-33;11-17;18-23;24-38
+20-22;8-26;11-17;5-32
+21-31;17-35;33-39;33-40
+31-45;24-31
+14-15;23-24;17-25
+11-24;9-30;24-31;24-50
+1-10;17-20;6-8
+23-24;9-19;5-8;40-48
+8-20;8-24;11-24;9-19;24-45;19-51
+1-5;8-28;6-7
+16-29;16-17
+1-4;14-16;8-28;16-24;9-31;24-31;19-41
+20-22
+8-16;17-28;18-23;40-49
+1-9;8-28;8-26;17-25;5-7;24-31
+6-8;32-48;24-38
+11-38;33-39;6-17
+12-13;17-20;17-26
+14-17
+6-7;38-43
+14-15;25-26;9-17;24-31
+6-28
+8-24;11-24;7-13;40-49;24-31
+27-28;6-34;16-29;18-23
+16-29;16-17;18-23;19-41
+27-28;17-29;16-29;24-45
+17-35;32-48;24-45;24-50
+1-8;31-45
+25-26
+1-8;14-17;13-32;6-11
+
+1-8;8-26;17-29
+8-16;13-33;17-36;32-42;9-17;24-45
+14-15;8-24;6-11;31-45;18-23;24-45
+2-3
+17-20;19-51
+1-4;8-20;8-16;3-9
+
+8-28;48-49
+33-39;33-40;9-30;5-32;40-49
+8-28;6-28;9-17
+20-21;11-38;6-7;6-25;6-8
+25-26;8-28;16-29
+5-8;18-23;24-50
+1-9;15-18;17-20;11-17;40-49;19-41
+38-43;9-17
+15-19;17-18;6-25
+1-9;16-24;9-15
+12-13;14-16;19-51
+14-17;11-17;5-8
+14-17;16-17;31-47;7-13
+1-8;12-13;8-16;6-25
+6-34;31-37;31-47
+8-20;16-29;5-32
+48-49;24-50
+17-35;18-23
+17-28;16-17;9-15
+1-5;1-11;20-21;17-28;6-7;9-15
+6-7;31-37;24-31
+14-15;39-42;32-44
+1-6;14-16;14-17;23-24;17-26;6-17;6-34;31-37;24-31;19-20
+17-29;5-7
+12-13;13-32;32-48;9-19;24-38
+0-1;21-31;17-35;9-19
+15-18;8-26;16-24;48-49
+0-1;12-13;33-40
+17-20;16-29;32-48;24-31
+1-9;6-7;48-49;24-38
+14-16;31-46
+17-28;17-25;6-11
+
+32-48;5-7
+19-51
+0-1;20-21;20-22;6-11;39-42;32-42;38-43
+15-18;15-19;20-22;11-38;31-45;48-49
+0-1;1-5;13-32;11-24;32-48
+1-6;33-40;32-42;9-30
+48-49;24-31
+11-24;7-13
+15-18;39-42;31-47;9-20
+1-4;8-28;13-32;17-36;6-25;6-17;32-42
+8-26;13-33;17-29;31-47
+1-5;8-28;11-24;11-17;16-24;9-17
+14-16;32-42
+15-18;8-28;48-49
+1-11;31-45;38-43
+8-16;13-32;7-13
+48-49;9-31;5-32
+1-10;20-22;23-24;17-28;11-38
+27-28;11-24;6-25
+1-9
+20-21;5-8
+31-37
+1-7;13-32;17-25;9-31
+15-18;48-49;19-20
+1-10;24-45
+1-8;32-44;5-8
+8-26;31-37;31-47;19-41
+1-10;23-24;3-9
+13-32;6-8;39-42;31-37;31-47;32-44
+1-6;14-15;17-36
+11-38;31-46;31-47;19-20
+1-9;23-24;17-26
+17-25;11-38;6-11;31-46
+15-18;13-33;17-28;17-36;33-39
+1-10;1-11;14-16;15-19;17-24;6-17;6-34;16-24;24-38
+21-31
+16-17;7-13
+14-17;20-21;6-11;9-30
+
+16-24;19-20
+1-7;8-28;33-39;3-9
+16-24;31-37;3-9;19-20
+13-32;6-34
+1-6;8-28;16-17;32-42
+1-10;5-32
+1-8
+1-9;21-31;17-29;6-25;16-17;32-42;9-19;5-7
+17-20;9-19
+20-21;13-32;13-33;17-24;6-28
+21-31;32-42
+1-10
+38-43;9-15;24-31
+21-31;13-32
+12-13;15-19
+8-24;40-49
+1-4;17-36;11-17;6-8
+1-6;8-16;11-38;19-51
+2-3;21-31;17-25;6-34
+32-48;19-41
+11-24;3-9
+15-19;24-50
+25-26;8-20
+17-29;6-28
+0-1;33-39;9-20
+1-6;8-24;16-29;9-20
+15-18;8-24;5-8;24-45
+6-34
+6-17
+32-42;48-49
+25-26;31-45;32-48;7-13;5-32;19-41
+1-8;13-33;6-11;5-8
+14-15;8-28;9-31
+20-22;8-16;21-31;9-15
+17-26;17-29
+15-18;20-21;17-26;32-42;38-43
+1-7;17-29;38-43;24-38;19-51
+8-16;17-35;6-7;39-42;24-50
+1-9;17-28;9-31
+1-7;1-10;8-26;33-39;32-42
+1-9;14-17
+14-17;13-33;39-42;9-17;40-49;24-45
+1-5;1-10;1-11;27-28;32-42;24-38
+14-16;13-32
+17-35;17-29;11-17;16-29
+15-18;32-42
+20-22;8-26;17-20;11-38;6-7;16-17;18-23;3-9
+
+20-22;6-17;38-43;5-32;24-38
+1-5;20-22;32-42;18-23
+8-20;6-28;32-44
+1-7;23-24;17-24;40-49
+31-47;32-42
+0-1;8-16;33-39;16-24;32-44;7-13;3-9
+31-47
+0-1;14-16;15-18;39-42;19-41
+1-8;20-21;17-29;6-7
+25-26;16-29
+8-26;17-18;17-26;16-24;31-37;7-13
+1-8;33-40;6-25;16-24;18-23
+
+33-39
+1-4;14-17;17-36;6-17
+31-37;9-19;40-48
+1-5;12-13;6-28;9-19
+0-1;15-18;17-24;19-41
+16-29
+23-24
+1-5;1-10;1-11;27-28;11-24;31-37;9-15
+1-8;15-18
+31-45;9-30;19-20
+6-7;6-11;31-45;24-38;24-50;19-20
+1-6;27-28;8-16;8-26;13-33;9-30;3-9
+33-40
+
+1-7;1-10;33-39;6-11;16-29;5-7
+17-20;17-26;6-25;6-17;32-42
+0-1;1-6;17-26;16-29;31-46;5-8
+1-8;16-17;48-49
+11-24;39-42;32-42;7-13
+14-15;6-28;6-8;24-31
+18-23
+20-21;20-22
+
+1-4;17-20;17-36;31-46
+0-1;1-6;11-38;16-17;38-43;24-50;3-9
+16-29;9-31
+0-1;1-9;19-41;19-20
+8-26;17-24;6-28;16-29;19-20
+0-1;17-18
+8-16;21-31;17-29;18-23
+1-8;17-25;11-17;48-49
+40-49
+6-8
+1-7;8-20
+2-3;17-20
+15-18
+12-13;17-29;32-48;9-31
+1-6;14-15;40-48
+25-26;5-32
+13-33;17-28
+1-10;14-16;14-17;17-35
+1-6;27-28;17-35;17-36;5-7;24-31
+1-8;12-13;8-20;17-25
+17-18;32-42;24-45
+
+1-4;1-5;1-6;15-18;6-28;16-29;31-45;24-38
+1-4;20-21;17-29;16-24;32-42
+1-10;6-7;6-11;40-48
+0-1;15-19;9-30;19-41
+
+1-6;1-10;14-17;6-8;39-42;32-48;7-13;19-51
+17-25
+0-1;33-39;39-42;31-45
+14-16;20-22;8-26;17-20;17-18;11-38;6-11;5-32;40-48
+20-22;32-44
+15-18;21-31;13-33
+14-15;8-28;16-29;3-9
+17-26;6-34;32-44;9-19
+0-1;17-26;33-39;6-8;9-19;19-41
+25-26;8-20;11-24;18-23
+0-1;20-21;32-44;5-8
+1-8;38-43
+
+15-19;21-31;6-11;9-20;5-8
+1-8;1-10;32-48
+17-18;6-34;39-42
+21-31;33-39;5-32
+15-19;16-29;24-45
+1-4;17-35;32-48;48-49;24-38
+1-4;1-7;27-28;8-26;21-31;17-36;16-17;18-23
+0-1;11-17;6-17
+1-9;17-20;7-13
+
+1-11;31-45;24-38
+
+1-9;17-29;11-17;16-29;7-13;9-17;18-23;24-50
+1-6;14-16;20-21;23-24;17-18;11-17;16-24;9-17
+
+1-11;17-18;17-25;32-42;40-49
+16-29;48-49
+9-30;24-31
+16-24;32-42;9-17;5-32
+8-28;5-7
+17-20;17-29;31-37
+1-8;8-28
+1-9;6-8;6-17
+14-15;13-32
+8-20;8-16;13-33;31-46;19-41
+1-7;15-19;20-22;17-18;17-25;40-49
+20-22;33-40;6-7;48-49;24-31
+24-45
+1-4;8-24;32-44;24-45;24-50
+1-4;14-15
+17-29
+1-11;17-35;17-36;32-44;5-7
+12-13;8-20;48-49;19-20
+19-20
+1-7;6-17;16-29;38-43;18-23
+17-18;17-25;5-32;40-49
+16-24;48-49
+1-5;17-26;11-17;33-40
+12-13;17-26;31-46;7-13
+8-16;13-33;16-17;5-8
+8-26;17-29
+8-20;17-35;16-24;31-45;31-46;31-47;18-23
+1-6;8-24;6-7;48-49
+1-5;39-42
+20-21;17-18;5-8;3-9
+6-8;16-17
+25-26;27-28;48-49;7-13;19-51
+1-8;12-13;6-8
+
+1-8;17-24;48-49;38-43;5-32;24-38
+21-31;9-19;24-45
+1-4;9-19
+25-26;31-45;48-49;5-7
+21-31;17-20;6-17;16-24
+1-7;14-15;17-18;17-36;9-31;9-30;24-38
+1-11;6-34
+17-25;11-17
+8-26;13-33;9-15;9-30;3-9
+14-17;23-24;39-42
+1-6;14-17;8-16;19-41
+31-37;24-38
+0-1;33-39;38-43
+11-38;6-28;31-37;48-49;9-17;24-50
+15-18;8-28;6-34
+1-9;17-35;17-18;6-25;6-11;16-17;5-7
+0-1;19-20
+1-8;11-24;7-13
+24-31;19-41
+15-19;16-17
+14-17;33-39;32-42;48-49
+1-10;27-28;11-24;11-17;31-47
+2-3;14-16
+1-6;17-20
+1-4;1-7;15-18;20-21;20-22;31-37;9-17;19-51
+1-4;20-22;16-17;24-45
+0-1;20-22;27-28;17-24;17-36
+17-18;24-50
+1-9;14-17;24-38
+8-28;9-15;9-30
+1-11;14-17;17-25;17-26
+17-26;5-32
+5-8
+1-5;48-49;9-15;3-9
+2-3;1-10;14-16;15-18;19-20
+17-18;19-20
+1-7;16-29
+1-8;1-10;15-19;17-18;11-38;5-7
+13-33;7-13;24-50
+2-3;1-6;48-49
+14-17;13-32;6-34
+14-15;9-30
+11-38
+9-31
+1-10;15-18;8-16;11-17
+39-42;16-29
+8-24;13-33;40-49;3-9
+8-16
+0-1;1-4;6-11
+14-17;8-26;17-20;16-24
+14-17;31-45;32-42
+8-28;38-43;9-31
+11-38
+1-11;14-15;20-21;27-28
+8-20;11-24;9-31;19-41
+17-24
+15-19;17-28;33-39;16-29;9-19
+14-16;9-19
+0-1;20-22;27-28;6-11
+20-22
+0-1;1-7;1-9;14-17;17-20;16-17;5-7
+11-24
+1-10;17-29;33-40;6-28;16-24;16-17;9-20
+8-20
+1-5;11-17;16-17
+6-7;16-29
+25-26;8-16;11-38;6-8;31-46
+13-33
+0-1;17-20;31-45;19-51
+8-28;17-24;39-42;31-46;5-32
+1-10;6-25;6-17;9-15
+14-15;8-20;8-28
+1-11;17-26;17-36;16-24
+20-21;48-49
+2-3;8-28;16-29
+1-10;23-24;6-8
+1-5;15-19;32-44;9-30
+1-9;1-11;6-28;16-29;5-8;24-31
+13-33;9-30;5-8
+17-35
+
+17-35;31-37
+20-21;8-16;6-7;5-8;19-41
+8-26
+1-10;23-24;21-31;39-42
+17-18;18-23;3-9
+15-18;8-16;6-17;32-42
+1-5;31-37;5-32
+25-26;21-31;9-17;24-31
+14-15;6-11
+1-8;16-29;24-38
+1-10;11-38;33-40
+1-8;31-37
+14-16;20-22;40-49
+1-10;15-19;20-22;27-28;31-37;48-49
+15-18;21-31;17-36
+15-18
+6-7;16-29;19-51
+1-7;23-24;8-28;6-11;31-45;5-32;3-9
+8-20;21-31;13-33;6-25;16-29;31-45;31-47
+2-3;8-26;17-25;7-13
+12-13;5-32;40-48
+17-20
+19-20
+1-6;48-49;24-45;3-9
+15-18;11-38;33-40;5-7;40-48
+6-7;6-34;9-15
+17-18;9-20;9-31;24-50
+1-10;8-20
+17-35;6-8;32-44;9-30
+17-28;11-24;16-29
+1-9;17-24;48-49;40-48
+9-19
+17-29;9-19;40-49;24-38
+15-19;13-33;17-25;6-34;5-32
+17-26
+1-4;8-20;8-26;33-40;9-15
+11-24;5-7
+12-13;6-34;16-24
+27-28;17-36;24-38
+8-24;17-28;24-50;19-20
+39-42;16-29;40-48
+6-25;19-41
+32-42;3-9
+1-10;24-31
+20-21;8-20;17-24;6-28
+14-15;32-42;40-48
+14-16;33-40;31-45;5-8
+1-7;5-32;40-49;24-45
+21-31;17-28;11-24;16-17;31-45;9-15;24-45
+1-8;1-9;17-28;32-42;3-9
+48-49
+17-20;6-25;9-15;40-48;19-51
+24-31
+1-6;8-24;17-35;17-25;11-38;6-17
+9-31
+23-24
+38-43;19-20
+1-4;31-45;40-49;19-20
+14-16;17-20;5-7
+2-3;14-17;8-16;17-36;5-32
+1-5;11-17;6-28;31-46;9-31
+8-28;21-31;31-47;24-31
+20-21;20-22;17-36;19-51
+1-11;20-22;8-28;17-25;33-39;31-47;9-30
+1-9;15-19;31-37
+0-1
+1-11;6-7;9-30;18-23;40-48
+0-1;27-28;8-24;40-49
+8-26;39-42;19-41
+14-17;9-17;24-45
+1-6;1-9;14-17
+1-5;17-24;33-39;24-45
+11-38;40-48
+12-13;27-28;19-51
+13-33;6-25;31-46;3-9
+21-31;9-17
+25-26;17-26;31-45;18-23;24-50
+8-26
+17-29
+11-17;32-42
+11-24;31-37;9-15;3-9
+1-5;1-7;17-20;17-29;17-36;32-44
+11-38;6-17
+2-3;17-35
+6-11
+15-18;33-39
+14-15;8-26;33-40;6-25;31-37;9-19;5-32;5-8;24-31
+20-21;8-24;13-33;9-19
+2-3;17-20;17-25;9-17
+6-11
+
+13-32;11-38
+1-8;1-9;38-43;9-20;5-32
+1-10;13-33;17-29;31-47;32-44;9-31;19-51
+31-37;48-49
+1-6;1-8;23-24;8-16;6-8
+5-8
+12-13;8-24;38-43
+20-21;13-32;11-17;16-24;9-30
+6-17;31-37;5-32
+33-39;33-40;39-42;48-49
+27-28;17-24;9-30
+12-13;8-26;17-29
+15-18;15-19;20-22
+6-34
+1-4;8-28;16-24;32-42
+14-15;13-32
+8-28;16-17;7-13
+1-9;6-28;32-42;9-17
+1-7;1-11;15-19;21-31;13-33;24-50
+15-19;17-36;24-45
+6-7;24-45
+8-24;21-31;13-32;33-40;31-45
+20-21;17-35;9-17;3-9
+6-25;5-32
+15-18;19-41
+
+8-20;17-24;6-28
+1-5;14-16
+13-32;17-26
+8-26;17-26
+1-9;9-17;19-51
+11-24
+21-31;24-31;24-50
+20-21
+2-3;6-7;7-13;19-20
+1-4;20-22;8-20;39-42
+1-4;1-10;15-18;9-17;19-20;19-51
+1-4;1-7;15-19;6-11;5-7
+1-5;15-19;17-25
+17-29;6-8;31-45;32-44;40-49
+11-38
+1-11;8-28;13-33;17-36;3-9
+16-24;19-41
+8-20;8-28
+1-11;32-42;38-43
+2-3;15-18;8-28;8-26;9-31;5-8
+1-11;20-22;6-28;19-51
+27-28;33-39;33-40
+1-6;32-42;9-30
+1-5;14-16;25-26;17-29;39-42;31-46;40-49
+33-40
+12-13;11-17;6-7;9-31;24-45
+17-24;9-19
+0-1;9-15;9-19
+1-7;11-38;16-17;40-49
+0-1;15-18;25-26
+1-8;12-13;15-19;13-33
+1-5;20-22;17-24;31-37;9-20
+20-22;19-51
+1-4;31-46;31-47
+1-4
+1-6;8-16;21-31;17-18;33-39;16-17;24-50
+1-10;13-33;17-20;16-29;31-46;9-31
+25-26;17-25;17-36;19-51
+1-5;1-11;16-17;19-41
+17-29;6-8
+38-43
+1-11;11-24
+6-17
+1-5;1-6;1-10;33-39;7-13;24-31
+25-26;6-11;19-20
+8-26;17-26;11-17;16-17;48-49;24-31
+14-16
+17-18;6-25
+48-49;19-41;19-51
+1-9;31-47;32-42;5-32;24-50
+20-21;23-24
+13-33;17-28;17-24;17-25;31-47
+1-8;27-28;32-42;9-30
+9-19
+1-5;8-16;8-24;40-49
+6-34;48-49
+1-4;6-7;38-43;9-30;5-7;24-45
+23-24;17-18;9-15
+
+1-10;14-16;17-18
+15-18;23-24;19-41;19-20
+
+1-9;1-10;20-22;8-20;17-20;17-36
+12-13;20-22;23-24;8-24;5-8;24-50
+12-13;27-28;17-35;17-29;6-34;9-19;5-7
+1-11;20-22
+17-35;17-24;17-29;6-8
+14-15;13-33;9-15;3-9
+31-47
+12-13;17-18;11-17;39-42;31-37;5-8;40-49
+15-18;6-34;16-24;31-47;19-41
+0-1;33-39;38-43
+2-3;8-16
+2-3;23-24;17-20;32-48
+1-8;31-37;32-44
+20-21
+1-10;20-21;16-24
+1-8;23-24;17-25;32-42
+1-4;6-34;32-44;38-43;24-50
+1-10;14-15;11-24;39-42;32-48;5-7;24-31
+15-18;6-7;24-45
+1-9;14-16;17-18;9-19
+13-33;6-11;9-19
+1-7;1-9;17-24;39-42;9-17
+
+14-17;17-29;17-36;33-40
+17-18;6-7;31-37;24-45
+15-19;8-26;17-28;17-26;6-28;32-42;24-50;19-51
+6-11;19-41
+9-30
+13-33;11-24;7-13;9-31;24-31
+17-35;17-18;9-17;5-32
+1-8;14-15;8-24;9-15
+33-39;32-42
+40-49
+14-17;31-46;24-38;19-20
+2-3;14-17;17-28;11-24;11-17;6-7;24-31
+1-5;24-38
+15-18;17-26;11-17;32-48
+24-50;3-9
+24-31
+15-18
+1-4;17-18;33-39;24-38
+1-7;8-28
+21-31;24-45
+8-28;5-8
+14-17;15-19;13-33;39-42
+14-17;15-19;25-26;17-24;31-45
+1-5
+23-24;8-16;21-31;17-25;17-26
+27-28
+19-41
+1-11;21-31;17-25;32-44;24-45
+17-29;19-20
+12-13
+32-44;32-42
+14-17;8-20;17-18;33-39;6-25;24-50
+12-13;14-17;11-17;31-46
+32-42
+17-35;5-32;24-38
+1-6;12-13;16-17;9-31;40-49
+1-7;11-38;39-42;40-48
+13-33;17-24;17-25;6-11;32-42
+12-13;20-21;23-24;17-29;16-24
+1-4;1-5;1-6
+1-4;17-28;32-42;24-38
+17-20;31-37;40-48
+6-11;24-50
+1-11;6-7;16-24;38-43
+17-26;17-36
+8-28;6-17;40-48;19-20
+9-17;5-8
+1-9;17-25
+17-29;31-47
+17-20;31-37;9-31;5-32
+25-26;39-42;16-29;31-47;5-7
+
+8-26;31-45;9-19;3-9
+15-19;6-7;9-19
+17-24;6-34
+1-6;14-16;20-21;16-24;38-43;18-23
+17-25;6-17;40-48
+23-24;8-16;11-24;32-48;5-32;19-20
+1-8;17-29
+
+1-8;27-28;17-35;17-20;6-7;24-31
+8-16;17-18;11-17;16-24;16-29
+20-22;6-34
+20-22;16-17
+8-16;11-24;6-25
+27-28;17-28;6-8;5-8;3-9
+15-18;20-21;16-24;31-47;40-48
+13-33;17-20;48-49
+1-8;17-28
+1-6;8-26;17-36;31-47;7-13
+6-34;16-29;16-17;31-45
+6-17;48-49;5-8;40-49;3-9
+15-19;16-29;5-7;40-48
+21-31
+6-25
+17-28;9-17;18-23
+2-3;1-6;5-32;40-48;40-49
+17-24;32-42;48-49
+11-38
+14-16;17-36
+1-8;8-16;24-50
+20-21;8-24;6-28;6-11;16-29;9-17
+1-6;1-8;12-13
+2-3;8-16;13-33
+8-20;3-9
+31-47;18-23
+13-32;17-20;17-26;9-17;24-38
+17-26;31-45;7-13
+11-38;9-17
+1-6;1-11;17-35;6-28;16-29
+12-13;6-28;9-30;19-41
+1-7;17-36;6-7
+1-9;20-21;27-28;33-40;6-8
+8-20;13-32;32-44
+24-50
+20-22;31-46;7-13;5-7;18-23
+20-22
+17-20;9-31
+25-26;8-16;21-31;13-33;31-45;24-45
+13-32;17-35;6-8
+8-28;17-29;16-29
+15-19;8-26;32-48;9-20;9-17
+14-16;13-32;31-46;32-42;40-49;19-51
+8-28;11-38;33-40;9-31
+11-17;31-47;5-32
+6-28;24-31
+23-24;13-32;17-24;17-25;31-47;9-15
+1-4;6-8;9-19;5-7;18-23
+1-7;17-20;11-24;16-17;32-42;9-19;24-50
+15-19;20-21;31-46;3-9
+0-1;8-26;31-37
+11-24;32-42
+14-15;15-18;15-19
+1-9;14-16;9-30
+13-33;16-29
+17-36;6-7
+17-25;31-37;7-13;5-8
+1-11;11-38
+33-39
+1-6;8-20;8-26;13-32;6-25;6-11
+0-1;17-29
+1-8;14-15;27-28;31-37
+0-1;6-17;32-44
diff --git a/examples/failures/failures-0.05 b/examples/failures/failures-0.05
new file mode 100644
index 0000000..3cabb18
--- /dev/null
+++ b/examples/failures/failures-0.05
@@ -0,0 +1,1000 @@
+1-4;1-7;1-8;13-33;17-25;11-17;5-32;24-45
+14-16;6-7;48-49;5-7;40-49
+2-3;17-24;32-48;9-15
+1-4;1-5;1-7;19-20
+1-7;21-31;11-17;31-47;48-49
+20-21;17-18;9-31;40-49;19-20
+1-6;15-18;6-7;9-19;24-45
+17-20;6-17;6-11;16-24;32-44;9-19;24-38;24-31
+14-16;17-29;6-25;9-19
+8-24;6-7;6-8;9-19
+12-13;6-11;38-43;24-38;24-50
+2-3;1-11;9-31
+0-1;1-6;14-15;25-26;11-24;3-9
+2-3;33-40;32-48
+23-24;8-26;13-32;17-26;11-38;16-24;16-29;16-17
+8-28;17-26;33-40;7-13;9-30
+1-5;13-32;39-42;48-49;9-15;18-23
+1-6;1-11;12-13;8-16;6-11;5-7
+2-3;15-18;32-42;38-43;5-7
+2-3;17-35;17-18;9-17;5-32
+11-17;6-17;6-11;9-30;19-51
+0-1;1-6;17-35;17-18;38-43
+31-46
+31-47;5-32
+17-24;32-42;48-49;40-49
+2-3;17-20;17-29;39-42;18-23
+2-3;1-5;14-17;17-28;11-24;11-17;33-40;6-7;24-31
+17-24;6-25;7-13;19-41;19-51
+1-10;3-9
+25-26;13-32;17-20;40-49
+1-4;1-8;15-18;15-19;31-45;31-46;32-42;7-13
+
+1-7;8-28;9-15
+0-1;17-20;31-47;5-8;40-48
+12-13;14-16;9-15;24-38;24-50
+21-31;39-42
+1-9;14-16;3-9
+14-16;11-38;16-17;38-43;5-32;18-23
+14-17;15-19;25-26;8-28;17-24;17-25;31-45
+1-11;17-36;6-8;6-34;32-44
+1-7;1-10;17-24;17-36;31-46;48-49
+33-40;6-28;6-25;6-17
+17-24;11-38;39-42
+14-15;33-40;6-28;3-9
+1-5;17-24;17-29;16-17;9-15;19-20
+15-19;8-16;13-32;31-45;5-8;40-48
+15-18;8-20;13-33;17-24;6-28
+1-6;9-15
+2-3;1-5;1-7;20-22;8-20;17-35;16-29;31-37;40-49
+31-47;32-44;5-8;40-48;19-41
+8-24;17-35;17-25;16-24
+32-42
+1-8;1-10;13-33;17-29;24-50
+2-3;1-6;8-28;17-18;11-24;24-45
+8-26;31-37;40-49
+1-7;13-33;17-24;17-25;6-11;32-42
+16-17
+17-35;6-17;31-45
+1-4;17-35;17-24;11-24;9-17;40-48
+33-40;6-7;6-17;6-11;9-15;9-30;5-7;19-41
+17-24;11-38;9-30;5-7
+17-20;31-37;40-48
+6-11;24-50
+1-5;25-26;17-18
+8-16;8-26;17-26;17-29;16-17;32-48;40-48
+0-1;20-21;20-22;17-20;17-18;17-26;6-11
+17-36;11-17;31-45;3-9;19-20
+17-18
+23-24;17-24;32-48
+17-29;31-47
+17-20;31-37;9-31;5-32
+1-5;8-28;11-38
+
+9-17;9-19
+12-13;16-29;9-19;5-32;40-48
+15-19;6-7;9-19
+1-7;31-37;48-49
+17-28;40-48
+17-20;6-8;31-47;5-32
+25-26;8-16;13-33;17-20;17-26;18-23
+0-1;1-10;25-26;17-18;32-42
+12-13;27-28;8-28;6-28;32-44;18-23;40-48
+21-31;17-18;9-15;3-9
+1-8;27-28;17-35;17-20;6-7;24-31
+1-5;20-22;8-26;33-39;48-49;7-13;40-48;40-49
+1-4;1-8;17-35;5-32;19-20
+14-17;20-21;32-44;19-51
+1-10;25-26;17-20;6-7;40-48
+0-1;8-28;33-40;3-9
+1-7;20-22;8-20;11-17;6-17;24-45;19-51
+0-1;17-26;24-50;3-9
+1-7;15-18;17-25;6-28;6-8;5-8;24-31;24-45
+11-24;9-17
+1-6;8-26;17-24;17-36;31-47;7-13;24-38
+1-11;17-36;5-8
+31-37
+7-13;40-49
+14-15;6-11;5-8
+17-18;6-8
+14-15;17-29;11-38;32-42;38-43;9-30;24-45
+8-20;8-28;17-18;6-11;5-8;24-45;19-41
+1-9;9-17;19-51
+1-5;12-13;16-17
+8-26;6-17;31-47
+20-22;17-29;6-11;5-8;24-31
+11-38;9-15
+1-8;8-16;24-50
+38-43;9-15;40-48;24-38
+14-17;8-16;31-37;40-49
+17-20;11-24;6-28;6-8
+17-18;16-29
+8-20;3-9
+14-16;31-37;5-7;19-41
+1-5;8-24;6-28;6-8;6-11;16-29
+25-26;32-48;40-48;24-31
+1-4;1-8;17-26;11-24
+0-1;15-18;23-24;17-26;38-43;9-31
+21-31;17-26;48-49;18-23
+11-38;33-40;9-17
+1-6;1-11;17-35;6-28;16-29
+11-24;6-8;31-46;3-9
+1-11;14-15;21-31;17-25;48-49;24-45;24-50
+15-19;6-34
+14-15;8-20;13-32;17-28;32-44
+17-28;32-48;38-43;9-15;24-38
+8-26;17-36;9-17;24-31
+11-17;32-42
+17-35;17-28;17-24;16-17;19-20
+0-1;12-13;23-24;6-28;40-49;3-9
+17-20;17-18;17-24;33-39;6-17;9-31;19-20
+15-19;31-46
+17-18;11-17;32-44;9-17
+8-16;8-24
+0-1;2-3;6-7;6-8;39-42;24-38
+21-31;6-25;16-17;40-49
+1-8;17-29;6-28;31-45
+8-28;11-38;33-40;9-31
+14-17;17-35;6-25;32-48
+15-19;48-49
+17-18;31-37;24-50
+1-6;31-46;9-19
+1-4;6-7;6-8;6-34;9-30;9-19;5-7;18-23
+1-4;13-32;17-28;9-31;9-30;9-19
+16-29;5-8
+8-20
+1-5;20-22;6-11;31-45;7-13;19-41
+0-1;1-5;6-25
+11-24;32-42
+23-24;21-31;13-32;31-46;19-41
+6-25;7-13;9-31
+1-7;12-13;14-16;20-22;8-24;48-49
+1-9;8-28;33-40;39-42;19-51
+1-10;3-9
+1-11;17-36;11-38
+17-28;16-17
+1-11;8-26;17-35;11-17;33-39;9-31;5-8
+25-26;9-15;9-17
+8-20;17-35;17-28;39-42;5-32;24-31
+1-7;6-28;6-11;24-45;19-41;19-51
+1-7;5-8;24-45
+6-34;16-29;31-47;24-50;3-9
+1-8;1-9;21-31;11-17;19-51
+2-3;14-16;14-17;8-24;6-8;32-44;9-31
+32-42;9-17
+1-5;1-10;17-25
+15-18;8-26;31-45
+20-22;13-32;17-26;33-40
+2-3;23-24;17-35;17-26;19-51
+1-4;1-10;15-18;11-38;31-47;9-17;3-9;19-20;19-51
+2-3;1-4;32-48;24-31
+1-4;17-20;17-28;6-34;31-47;32-44;9-17;19-20
+14-17;19-51
+1-10;17-24;11-17
+25-26;33-39;6-8;16-29
+15-19;21-31;32-48;24-31
+23-24;8-26;6-7
+8-20;17-24;6-28;16-24;38-43
+14-16;8-16;11-17;16-17;40-49
+17-20;17-36;6-34;9-17
+
+13-32;17-36;18-23
+1-6;17-36;6-17;31-37;5-7;19-51
+11-24;6-25
+15-19;20-21;21-31;17-20;6-7;16-24;3-9
+14-17;6-8;38-43;9-30;24-50;19-51
+8-24;8-26;9-30
+9-30
+1-8;17-25;6-34;31-37;9-15
+20-22;17-25;11-38
+14-15;15-18;17-24;24-38
+23-24;8-26;16-29;32-44
+1-5;17-28;33-39;6-7;19-51
+18-23
+
+1-7;17-28;11-38;6-11;16-29;31-45;31-37
+23-24;39-42;31-47
+1-4;14-17;8-26;6-25;16-24;32-44;32-42;24-38
+2-3;1-4;1-8;24-45
+0-1;8-16;13-32;17-35
+8-20;33-39;38-43;9-15
+20-21;8-16;21-31;32-42
+20-22;17-24;11-24;6-11;18-23
+1-7;1-11;14-15;15-18;11-17;31-45;9-15;5-8;24-31;24-50
+1-7;8-24
+2-3;1-10;13-32;32-44
+8-28;6-8;31-47;5-8;24-45
+1-5;8-26;17-28;24-45
+11-17;31-37;9-19
+1-10;14-17;17-35;9-19;5-32;40-49
+1-5;1-11;8-20;17-36;11-24;9-19
+20-22
+
+33-39
+1-6;39-42;16-17;7-13;5-32;24-31
+31-37
+17-20;31-47
+14-15;6-34
+12-13;32-42;5-32
+14-15;17-26;31-46;32-48;38-43
+14-16;8-20;17-26
+14-16;8-28;8-24;6-7;16-17;31-37;31-47;40-49
+14-17;17-28;5-7;3-9
+13-32;6-25;5-7;24-50;19-41
+1-10;15-18;3-9
+2-3;17-24;31-47;5-8
+1-4;1-8;25-26;17-20;9-17
+1-4;1-5
+2-3;8-28;8-26;17-29;33-39;6-8;5-32
+20-22;6-28;48-49;40-49
+1-10;13-32;6-7;16-17
+17-35;32-42;9-30
+14-15;31-45;31-47;9-15;9-30;9-17;19-20
+1-11;8-20;33-40;6-25
+6-7;6-17
+17-28;6-34;31-46;9-31
+1-9;8-24;6-7;6-17;32-48
+12-13;11-38
+15-19;17-36;39-42;16-17
+0-1;17-36;6-8;38-43;9-17
+17-29;31-45
+17-35;17-24;6-11;39-42;48-49;40-49
+1-10;6-17;16-17
+17-24
+1-6;8-20;17-20;17-25;11-17;32-44
+1-5;48-49
+7-13;9-15
+20-22;17-24;11-17;31-37;9-15;3-9
+1-8;14-17;17-29;31-45;31-46;18-23;24-38;24-31
+8-26
+20-22;8-16;6-11;16-29;7-13;19-51
+
+
+1-4;15-18;6-25;39-42;7-13;24-31
+1-4;3-9;19-20
+2-3;14-15;8-20;17-29;6-7;6-34;31-47;5-8
+0-1;2-3;23-24;6-8;32-42
+14-15;16-29
+1-11;14-17;17-36;5-8
+8-26;19-41
+1-9;21-31;7-13;24-50
+23-24;33-40;32-42
+16-17;9-17;3-9
+17-25;17-36
+1-11;8-24;17-36;6-34;5-8
+8-16;17-36;39-42;31-37;32-42
+8-20;11-38
+11-17;6-17
+25-26;19-41
+0-1;17-36;24-31;24-45;24-50
+11-24
+2-3;16-24;5-32
+17-20;17-26;31-37
+12-13;8-16;21-31;17-28;17-26;11-17
+20-22;16-17
+5-32
+8-24;17-28;6-28;9-30;24-38
+2-3;6-17;9-19
+14-15;33-40;31-47;48-49;9-19
+1-8;14-16;9-19;24-38
+17-28;6-7;9-30
+0-1;23-24;17-24;5-7;24-50
+1-4;1-8;8-24;17-28
+27-28;13-33;11-24;32-44
+14-15;9-17;24-50
+2-3;14-17;15-19;27-28;16-17;7-13;3-9;19-41
+14-15;17-25;6-28
+17-29;16-29;31-37;32-48;40-48
+6-25;6-8;9-31
+8-16;8-26;17-20;11-38
+1-10;12-13;17-36;5-32
+1-10;12-13;14-15;8-16;6-25;9-30
+6-34;6-11;24-31
+20-22
+1-10;20-22;17-36;6-17;48-49;5-7;24-31
+14-17;17-24;11-38;18-23;19-20
+1-6;6-28;6-11;9-15;40-49;19-51
+1-11;17-24;16-29;31-45;7-13;24-50
+8-26
+39-42;9-17
+1-5;1-9;11-38
+15-18;11-17;32-42
+1-5;13-33;11-17;19-41
+1-8;17-35;17-20;6-28;32-48;40-49;19-51
+0-1;1-5;40-48
+1-8;17-35;39-42
+0-1;1-9;14-16;16-24;31-37
+23-24;17-20;31-47;9-31;5-32;24-31
+1-4;17-28;6-8;9-17
+1-10;14-17;25-26;27-28;32-42;18-23
+20-21;31-45
+1-6;27-28;16-17;24-45
+2-3;20-22;16-24;31-37;9-15;5-8;24-31
+17-28;31-37
+1-7;27-28;6-25;39-42;38-43
+20-21;6-28;9-17
+1-9;27-28;33-39;7-13;9-30;5-8;19-20
+31-46
+8-26;6-34;32-48;18-23
+2-3;21-31;11-17;6-8;16-17;5-8
+0-1;17-26;16-29;40-49;24-45
+8-24;17-26;11-24;6-17;38-43
+1-11;23-24;17-26;17-29;5-32;5-8
+1-8;31-45;32-44;9-17;24-38
+13-32;17-25;16-17;18-23;3-9
+12-13;17-20;11-17;33-40;31-46;32-48;24-50
+2-3;5-8;24-31
+8-28;16-17;5-32;40-48
+14-15;8-26;21-31;6-34;31-37
+31-47
+31-46;24-38;24-45;3-9
+1-5;1-6;5-7;24-45
+2-3;33-39;6-25;5-7
+1-4;16-24;32-42;24-38
+0-1;1-4;11-24;11-38;6-17;19-20
+2-3;38-43;5-32;24-31
+1-5;14-16;25-26;17-29;39-42;31-46;5-7;40-49
+1-7;20-21;33-40
+1-10;6-11;40-48;19-20
+8-26;17-20;33-40;6-8;32-42;3-9
+13-32;17-29
+17-35;17-18;31-46
+1-9;11-17
+1-11;25-26;17-35;17-20;17-18;39-42;9-19
+13-33;17-24;6-28;6-11;9-19;40-48;19-41
+1-5;17-35;17-18;17-36;40-49;24-31
+2-3;14-16;14-17;31-45;32-42
+14-16;11-38;5-8
+1-9;14-16;13-32;17-20;40-48
+1-11;14-15;8-26;11-24;39-42;24-45
+15-18;27-28;8-20;13-32;48-49;24-45
+14-15;20-22;8-24;17-28;7-13;40-48
+27-28;17-25;31-47;24-50
+5-32;3-9
+2-3;17-29;39-42;31-37
+1-5;14-17;13-32;33-40
+8-24
+1-7;1-8;12-13;16-29;40-48
+17-20;16-29;9-19
+0-1;1-7;6-8;32-42;38-43;9-30;24-31;24-45;19-51
+1-8;8-16;31-45;32-44;24-45
+1-10;6-28;6-25;31-37;40-48
+14-16;15-18;17-18;11-24;16-24;32-48;9-15;19-51
+1-4;13-32;17-24;7-13;40-49
+12-13;40-48
+8-28;9-31;19-41
+20-21;17-29;38-43
+25-26;32-44;40-48;24-45
+1-10;8-26;13-33;33-39;5-32;24-45;3-9
+1-6;39-42;9-15;9-19
+1-9;14-17;31-37;38-43
+12-13;14-15;8-20;17-26;17-29;32-42
+17-26;24-31
+17-35;17-36;6-7;16-17;31-45
+1-11;17-36;11-24;31-47
+8-28;17-36;11-38;5-8;40-49;19-51
+25-26;8-16;17-18;33-39;6-17;31-37
+24-31;24-45
+8-26;5-8
+1-7;6-25;24-50
+17-24;9-19
+11-38;6-8;31-45;9-15
+19-41
+17-35;17-20;17-29;31-37;24-31
+13-33
+14-15;23-24;6-11;16-17;19-51
+1-8;15-18;17-18;5-32;24-38
+1-7;14-15;13-33;11-17;32-42
+1-4;1-8;1-9;1-10;12-13;14-16;8-26;21-31;17-18;6-11;7-13;38-43
+1-4;14-16;13-32;31-37;31-47;24-38
+
+0-1;9-15;9-19
+20-22;7-13;19-51
+1-6;12-13;21-31;9-15
+6-25;40-49;24-31;19-41
+1-5;14-17;13-32;32-48;18-23;19-51
+2-3;31-37
+2-3;1-6;8-24;11-24;6-17;19-20
+1-11;15-18;17-18
+0-1;12-13;14-15;31-47;9-30;3-9
+1-10;6-28;32-48;9-30
+14-15;21-31;17-36;6-34;32-44;5-7
+8-26;17-24;31-47;3-9
+17-29;17-36;6-7;31-37
+39-42;32-42
+23-24;8-16;16-29;24-31
+1-11;13-33;6-25;40-49
+6-17;24-38
+17-24;31-46;9-19
+20-22;25-26;31-45;31-47;32-44;9-19
+12-13;15-18;17-18;17-24;17-25;6-7;9-19
+15-19;9-15
+1-8;17-24;33-39;6-8
+6-17;24-38
+1-5;8-20;13-32;5-7
+8-24;21-31;17-29;24-45
+11-38;24-31
+1-4;31-45
+1-4;25-26;31-46;5-8;24-50;19-20
+15-19;13-32;11-24
+17-18;6-25;6-34
+17-35;33-39;16-29
+14-15;17-26;6-8;31-47;3-9
+0-1;17-28;17-26;11-24;6-11
+25-26;8-28;17-35;6-8
+1-9;1-11;8-20;40-49
+8-16;17-24
+25-26;8-24;17-28;48-49;38-43;5-8
+17-24;16-17;31-46
+0-1;17-25;16-29;32-42;9-17
+17-18;17-24;17-29;6-28;6-8;7-13;5-8
+14-16;17-36
+1-10;8-24;17-18
+6-8;5-8
+15-18;20-22;8-28;17-29;48-49
+23-24;11-17;38-43
+15-19;20-21;8-20
+1-8;31-45
+0-1;16-24;32-44;3-9;19-20
+1-7;8-26;33-39;39-42;24-50
+1-9;20-21;19-20
+14-17;6-25;31-46;5-7
+14-15;48-49;9-15;9-30
+1-4;25-26;13-33;9-31;9-30
+14-15;11-38;11-17;39-42;31-37;31-47
+8-20;32-44;18-23
+8-20;11-17;33-39
+20-22;19-51
+15-18;17-18;17-25;33-40;6-28;19-41
+6-34;39-42
+20-21;8-26;33-40;6-28;38-43;24-38;24-50
+8-24;9-31
+16-24;16-17;9-17
+25-26;17-35
+14-17;24-45
+2-3;1-11;17-18;17-29;5-7
+17-20;6-7;6-25;16-29;7-13
+1-10;8-20;11-38;6-17;39-42
+1-4;1-8;31-46;31-47
+17-36;32-42;9-17;18-23
+1-6;17-36;7-13;19-20
+2-3;14-16;24-38
+1-5;1-8;14-16;19-20
+
+17-28;11-17;16-17;48-49
+17-18;38-43
+1-6;14-15;14-17;8-28;17-25;33-39;19-51
+20-21;17-28;16-24;24-50
+14-15;13-32;31-47
+1-4;11-38;33-40;16-29;32-48;9-17;40-49;24-31;24-45
+1-10;11-24;6-11
+0-1;1-6;9-31;24-50
+8-16;16-17;9-17
+1-4;23-24
+1-4;1-8;20-22;17-26;6-8;31-45
+1-5;17-26;11-38;11-17;32-42
+17-28;17-24;6-11;48-49;9-19;19-51
+0-1;1-10;6-28;16-29;9-31;9-19;3-9
+25-26;33-40;9-19
+14-17;8-20;17-18;17-29;6-11;16-17
+14-16;8-28;3-9
+14-17;31-47;32-44;9-17;40-49;19-20
+2-3;12-13;17-28;18-23;24-31;24-45;19-20
+2-3;9-30;24-45
+1-6;15-18;33-39;6-11;9-30
+6-7;6-28;6-34
+8-28;17-18;11-38;32-44
+17-36;24-50
+1-11;17-36;31-45;5-8
+8-20;8-26;9-31;9-17
+1-7;14-17;17-28;7-13;38-43;9-30;5-32
+14-16;14-17;13-32;6-7;39-42
+14-17;6-8
+17-18
+25-26;6-34;16-17;31-45;38-43
+6-28;48-49
+0-1;2-3;1-10;18-23
+1-9;17-35;11-38
+27-28;40-49
+8-26;13-33;11-24;3-9
+1-5;20-21;27-28;6-25;16-24
+21-31;16-17;38-43;24-45
+14-15
+2-3;27-28;11-38;6-8;16-29;32-42
+
+20-21;27-28;17-18;18-23
+31-37
+17-18;6-28;31-45;31-46
+8-24;11-38;5-7
+27-28;8-26;17-24;6-7;16-17;31-46;7-13;5-7;24-45
+40-49;24-45
+1-7;27-28;17-24;6-17;19-41
+1-7;13-32
+25-26;17-25;17-36;19-51
+1-11;8-16;17-20;17-24;19-41
+1-6;14-16;23-24;13-33;31-45;31-47;24-50
+1-5;1-8;1-10;14-16;6-28;9-15
+0-1;17-18;11-24;6-7;16-17;31-46
+1-8;15-19;17-35;17-20
+1-6;17-18;24-45
+
+8-28;6-34;6-11;32-48;19-51
+18-23;40-49;3-9
+17-26;32-44
+14-15;8-16;17-35;11-24;11-38;6-28;6-17;48-49
+17-25;17-26
+1-4;1-8;17-35;17-26;11-17;32-44;24-38
+23-24;31-46;32-48
+1-10;21-31;9-15;5-32
+24-38
+9-30;3-9
+2-3;13-32;11-17;9-30
+15-18;8-16;6-17;39-42
+13-33;9-17
+20-22;23-24;27-28;6-8;31-46;9-31;18-23
+21-31;17-18;17-24;6-34;32-42
+1-9;1-10;1-11;25-26;33-39;6-25;32-42;24-31
+16-29;5-7
+2-3;5-7;19-51
+2-3;14-17;8-26;13-32
+33-40;16-17;31-46
+1-7;1-9;1-11;8-20;17-24;17-36;31-37;9-19;19-20
+13-33;17-25;6-25;16-29;32-48;9-19;40-48
+1-10;20-21;25-26;17-24;11-17;16-24;9-19
+21-31;17-20;17-28;33-39;19-41
+2-3;13-33;17-24;6-17
+1-11;15-18;13-32;7-13;19-51
+1-8;13-32
+20-21;16-17;31-37;32-48;32-42
+8-28;17-29;11-38;11-17;32-48;9-17;18-23;24-50
+23-24;16-24;16-29;38-43
+1-9;48-49
+14-17;20-21;11-24
+20-22;33-40;6-28;7-13;9-15
+1-4;8-16;8-24;17-25;11-38;11-17;6-25;24-31
+12-13;16-29
+17-28;31-45
+1-5;17-36;18-23;40-49;19-20
+23-24;17-24;6-8;31-46;3-9
+0-1;21-31;40-48
+24-50
+1-6;3-9
+14-15;20-21;25-26;17-35;6-11;18-23;19-51
+23-24;21-31;6-28;19-20
+0-1;15-19;16-24
+1-9;14-17
+16-24;32-48;38-43;5-32
+8-24;11-38;6-7;16-29;40-48;24-50;19-41
+13-33;48-49;24-38
+0-1;31-45
+17-36;33-40;6-25;38-43;9-17
+0-1;23-24;8-28;8-26;17-36;31-47;40-48
+15-19;13-33;17-36;33-40
+14-16;17-20;17-25;11-38;31-45;9-30
+2-3;17-25;11-17;6-11;39-42;9-30;18-23
+2-3;1-5;20-22;8-20;17-26;11-24;6-7
+0-1;21-31;17-26
+12-13;5-7
+14-17;25-26;40-49
+11-17
+1-5;1-6;1-10;17-24;33-39;7-13;24-31
+33-39;31-45
+1-4;1-8;15-18
+1-4;23-24;40-48
+1-9;6-28;6-25
+6-17;48-49;38-43
+8-28;6-8;32-42;40-48
+13-33
+1-10;12-13;15-19;16-29;9-17;24-50
+7-13;40-48
+0-1;14-15;8-26;11-38;11-17;31-47
+27-28;13-33;17-20;5-7;40-49
+
+1-6;7-13;38-43;5-8;3-9
+1-7;1-9;15-18;19-41
+25-26
+13-32;6-25;6-34;5-8;19-41
+11-24;48-49;24-45
+6-25;40-48
+12-13;17-36
+1-7;1-10;8-26;17-35;17-20;17-36;31-45;31-37;3-9
+1-7;8-28;9-17;40-48
+17-26;5-7;19-20
+0-1;8-24;17-35;32-44;32-42
+1-5;1-6;5-32
+14-15;17-35;48-49;5-7;19-20
+15-18;23-24;17-29;39-42
+17-35;11-17;33-39;16-24;31-46
+1-6;8-24;6-8;32-44
+1-4;1-9;20-21;13-32;17-28;9-19;18-23
+15-19;17-29;32-42;9-19
+1-5;20-22;25-26;27-28;6-11;39-42;16-29;9-30;9-19;19-51
+14-15;6-28;31-46;31-37;31-47;40-48
+12-13;27-28;17-26;19-51
+0-1;14-16;8-24;11-17;6-34;9-17
+33-40
+8-28;40-48
+1-6;13-32;33-40;19-41
+6-11;16-17;9-30;5-7
+6-28;31-37;5-7
+8-26;31-46;9-15
+1-5;1-11;6-11
+8-16;40-48;3-9
+14-17;8-28;13-33;17-36;6-7
+13-33;33-40;32-44;24-50
+15-19;23-24;8-24;17-26;31-47
+17-26
+1-10;17-26;9-15;40-49
+0-1;25-26;6-8;16-24
+1-7;15-18;6-28;6-17;31-45;9-17;3-9
+17-20;32-48;32-42
+1-9
+14-15;13-32;17-25;33-39;38-43;5-7
+33-40;24-31
+1-4;1-10;17-20
+0-1;1-7;23-24;27-28;8-28;17-25;6-8;6-34;9-15
+1-4;1-8;20-22;25-26;13-33;17-28;6-7;5-32;5-8
+0-1;1-9;17-35;6-25
+14-17;31-37;9-17
+8-26;5-8
+12-13;8-26;17-24;48-49;38-43;5-32
+15-18;8-28;17-29;6-28;32-44
+6-17;31-45;32-42;5-8
+17-25;9-15;19-20
+25-26;8-16;17-28;11-24;31-37;9-17;3-9
+39-42;9-15;19-20
+48-49;19-41;19-51
+1-9;1-11;33-40;18-23
+1-6;8-20;17-28;6-28;16-29
+27-28;6-25;32-44
+14-17;8-26;33-39;6-34;31-45
+2-3;12-13;32-44;5-8;40-49;24-38
+11-17;6-11;48-49;3-9
+15-18;25-26;11-38;5-32
+13-33;24-38
+24-31
+14-16;8-28;9-30
+1-9;31-47;32-42;5-32;24-50
+21-31;13-33;31-45;9-15;9-30;5-32;40-49
+11-38;38-43;18-23
+1-8;1-9;8-24;6-17;31-47;3-9
+14-15;17-29;24-45
+12-13;14-17;17-20;5-32
+1-4;14-15;6-25;39-42;32-42;40-49;24-50
+27-28;13-32;48-49;19-41
+1-7;15-18;8-16;17-35
+1-7;1-10;8-28;17-20;38-43
+
+0-1;1-9;38-43
+14-15;15-18
+0-1;12-13;6-28;32-48
+15-19;25-26;31-45;31-47;9-17;40-49
+1-11;16-24
+8-28;11-24;16-17;5-7
+13-33;17-29;24-50
+9-15;9-19
+14-15;17-20;17-28;17-26;6-25;9-19
+1-5;13-33;17-26;33-39;9-17;9-19;19-41
+1-6;14-15;8-24;17-35;17-26;33-40;6-7;16-24;16-29;32-44;38-43;9-31;9-19
+1-11;15-19;31-45
+1-5;17-18;32-44;9-30;19-51
+12-13;23-24;16-17;31-47;32-42
+
+40-49
+31-37;9-17
+1-6;16-24;9-31;24-50
+17-29;6-7;32-44;38-43
+2-3;1-8;15-19;20-21;25-26;6-8;19-20
+2-3;23-24;27-28;17-28;16-17
+1-6;1-8;13-33;48-49;5-8
+0-1;15-18;8-16;8-28;8-26;17-29;6-7;7-13
+1-6;9-30
+33-40;16-29;9-31;5-32;19-41
+8-20;21-31;17-25;32-42;9-17;5-8
+1-6;12-13;20-22;17-20;17-28;33-39;31-37;9-15
+1-10;18-23
+1-7;23-24;39-42;9-15;5-8
+32-48;48-49;38-43;9-30
+1-6;14-15;17-20;11-24;6-17;19-41
+14-17;6-8;16-24;24-31
+40-49
+2-3;21-31;17-35
+8-20;11-24;11-38;6-25;31-37;38-43;5-32
+15-18;6-7;6-11;31-47;5-8
+23-24;25-26;11-24;33-39
+1-9;12-13;17-25
+11-38;11-17;6-7;6-34;31-46;19-20
+1-11;8-24;17-36;6-28;40-49
+17-36;38-43;19-41;19-20
+1-11;8-16;17-28;17-36;6-28;6-8;32-42
+13-32;33-40;6-7;24-31
+12-13;14-16;14-17;11-38;11-17;33-39
+14-15;16-24;31-47;7-13;9-15;18-23
+1-5;8-16;8-24;6-11;40-49
+1-5;17-35;31-46
+1-10;15-18;8-16;9-17;5-7
+20-22;17-25;6-34;7-13;38-43;5-32
+1-4;20-21;11-17
+1-4;1-8;6-25;31-47;32-44
+17-18;6-17;39-42;16-24;40-49
+25-26;8-26;6-8;5-32
+20-21;11-24;31-45;31-46;32-42;48-49;9-17;24-31
+11-17;16-29;31-37;24-50;3-9
+8-28;9-31
+1-4;1-8;17-20;39-42
+1-7;19-41
+20-21;33-40;16-24;32-44
+1-10;15-18;17-24;17-26;16-17;9-15;5-7
+17-25;17-26;6-28;6-8;31-47;9-17;24-45;19-20
+13-32;17-18;17-24;31-45;5-32
+20-21;17-20;6-25;9-31;3-9
+0-1;23-24;17-18;40-49
+1-7;16-24;24-31
+1-9;12-13;17-28;5-32
+1-6;20-21;8-20;13-32;17-36;6-28;16-17;32-48;38-43;9-17;19-41
+2-3;1-4;6-28
+31-37;32-48
+0-1;2-3;39-42;9-31
+15-19;20-22;31-47;32-42;40-49
+20-21;8-28;17-20;16-29
+12-13;14-16;17-25;6-17;9-30
+1-6;14-16;8-26;17-18;33-40;32-48;9-30
+8-24;16-17;31-37;9-19
+1-9;11-24;9-31;9-19;24-31
+1-4;1-8;17-35;7-13;9-19
+1-4;1-5;17-28;5-8;18-23;24-38
+1-4;14-17;11-24;19-41
+1-10
+33-39;6-7;6-11;7-13
+5-8
+31-45;40-49;19-20
+12-13;23-24;8-26;6-11
+17-25;6-7;16-29;5-8
+17-18;38-43
+15-19;33-40;6-11;32-42;5-7
+14-15;20-22;17-18;5-8
+8-20
+14-16;14-17;11-38;31-47;9-31;9-30
+0-1;12-13;14-15;6-11;31-47;48-49;5-32
+1-9;1-11;14-17;17-24;5-8
+7-13;18-23;3-9
+1-6;8-26;17-20;17-29;6-8
+1-7;16-24;32-48;9-15;24-31
+1-8;15-18;11-38;31-45
+27-28;33-39;6-7;6-17;31-37;38-43
+17-36;6-28;32-44
+27-28;32-42
+19-41
+8-24;17-20;7-13
+1-5;27-28;13-32;39-42;16-24
+1-7;14-15;48-49;24-38;19-20
+25-26;27-28;21-31;6-34;31-45;31-37
+14-15;8-28;18-23
+1-4;1-8;20-22;27-28;24-38;24-31
+1-4;11-17;6-28;9-15;40-49;24-50
+1-6;21-31;17-35;11-38;9-17;5-32;24-45
+17-25;24-45
+1-9;20-21;20-22;27-28;17-35;17-26;31-37;19-41
+2-3;8-16;17-26;11-24;31-45
+6-7;31-45;24-45
+0-1;31-45;5-8;19-51
+2-3;17-18;11-17;19-41
+8-26;40-49
+1-6;6-17;9-17
+1-11;8-24;33-39;31-47;9-30;5-7
+17-20;16-24;9-30;5-32;18-23;19-51
+16-17
+48-49;9-15
+1-5;8-28;32-42;19-51
+21-31;17-36;9-15;9-17;19-20
+0-1;17-18;6-34;40-48;19-41
+15-18;23-24;19-41;19-20
+1-5;1-9;1-10;12-13;13-32;16-24;19-20
+3-9
+8-28
+17-25
+14-17;8-24;17-25;38-43;40-48
+6-11;5-7;18-23
+20-22;17-18;16-29
+23-24;13-33;11-17;6-34;39-42;32-44;9-15;40-48
+6-17;40-49
+2-3;1-4;15-18;17-28;33-40;9-15
+8-26
+0-1;2-3;21-31;40-48;19-41
+1-10
+20-21;11-17;6-28;6-25;16-24
+25-26;11-38;24-45
+21-31;6-25;31-47
+14-17;8-24;13-32;17-20;17-18;31-37;40-48
+32-44;5-7;18-23
+9-19;5-7;24-31;24-50
+23-24;8-20;17-29;11-24;9-19;40-48
+1-11;12-13;17-35;31-46;9-19
+1-5;8-28;11-38;33-40;5-8;19-41;19-20
+15-18;6-28;6-8;16-24;32-42;9-15;24-38
+0-1;1-9;8-28;17-35;31-45;38-43;40-48
+1-10;48-49;7-13;3-9
+17-28;33-40;39-42;31-47;24-38
+1-8;6-34
+23-24;17-36;33-39;6-25;40-49
+1-11;21-31;17-18;17-36;39-42;16-24;31-46
+17-36;6-25;31-37;18-23;24-31;24-50
+31-45
+2-3;12-13;8-16;11-38;11-17;6-7;40-48;3-9
+1-11;17-18;17-36;16-24
+13-33;17-35;9-30;19-41
+14-16;8-24;17-25;16-17;9-15;9-30
+0-1;16-24;40-48
+1-8;1-9;1-10;33-39;31-37
+1-5;11-38;11-17
+2-3;1-4;1-8;12-13;8-28;17-26;32-42;40-48
+2-3;8-24;17-26;9-30;40-49
+15-19;8-26;6-28;6-8;9-15;19-20
+1-9;40-48
+14-17;17-18;24-50
+17-36;18-23
+1-10;17-29;6-7;32-48
+2-3;14-15;13-33;33-39;31-37;5-7;40-48
+2-3;15-18;20-22;17-28
+14-16;17-20
+1-11;14-16;6-25;40-48;24-31
+32-44;24-38
+27-28;8-20;8-28;11-24
+1-10;17-25;6-8;9-17;40-48
+
+17-35;17-36;11-17;6-34;6-11
+1-7;14-17;25-26;33-39;48-49;5-8
+1-8;23-24;17-18;11-24
+8-16;17-29;18-23
+8-24;17-24;16-29;16-17;40-48
+31-37
+11-24;31-45;19-41
+12-13;5-32;24-50;19-51
+0-1;14-16;17-20;6-8;32-44;19-20
+1-8;14-16;8-20;17-18;3-9
+21-31;17-35;17-29;19-51
+1-9;48-49;38-43;9-15;5-32
+1-7;20-22
+1-4;1-5
+0-1;2-3;14-17;23-24;24-38
+2-3;18-23
+8-28;8-24;16-17;5-32;40-48
+13-33;17-20;17-25;6-28
+12-13;8-26;17-29;33-40;5-8;19-41
+17-18;17-24;11-38;33-39;6-28
+0-1;25-26;5-32
+1-11;17-18;5-8
+32-42
+2-3;6-17
+8-16;16-17;48-49;9-31;9-30
+12-13;13-32;31-37;5-8
+1-5;40-48
+14-17
+1-7;25-26;17-25;6-17;32-48;7-13;24-31;19-20
+1-7;23-24;8-16;13-33;32-48;40-48;40-49
+1-10;8-20;11-38;6-8;16-29;32-42
+21-31;17-24;6-17;9-19
+15-19;13-32;17-28;32-44;9-19;40-48
+20-21;27-28;17-35;17-24;31-37;9-19
+2-3;17-35;5-8
+16-17
+14-16;14-17;20-22;21-31;17-18;17-28;17-26;33-39;6-28;5-32
+1-9;14-15;25-26;17-26;33-40
+20-21;27-28;8-26;17-18;6-8;6-34
+1-5;39-42
+1-4;1-8;27-28;8-20;6-11;31-37;32-44
+15-18;24-31
+20-21;27-28;6-25;16-17
+17-35;48-49;19-51
+1-6;27-28;8-24;21-31;13-33;17-28
+1-11;25-26;31-47
+1-6;14-15;18-23
+
+17-29;11-24;11-17;6-34;16-17;31-45;24-45
+8-16;13-33;17-18;17-28;6-7;19-20
+23-24;8-28;21-31;17-24;6-17;6-11;5-32;24-38
+19-20
+1-11;20-21;8-20;13-32;13-33;17-28;17-24;6-8;16-24;31-46;32-42
+14-16;6-7;6-17;24-31
+15-18;21-31;11-38
+6-28;6-25
+1-9;6-7;48-49;24-38;24-45;3-9
+8-26;17-20;17-29;6-28;6-34;24-50
+1-7;1-11;23-24;17-28;31-46;19-51
+21-31;11-17
+6-8;31-46
+12-13;17-18;17-28;31-37;38-43;5-7;40-49
+0-1;14-17;9-15;5-7;19-41
+1-10;8-24;16-17;31-47;5-8;24-50
+17-28;3-9
+1-7;1-8;14-16;17-25;11-24;9-30
+1-4;14-16;11-38;9-30
+0-1;1-4;1-10;14-16;15-18;17-29;9-30
+15-18;8-26;6-25
+33-40;16-29;32-42
+1-9;20-21;23-24;8-16;8-26;11-24;31-46
+1-6;13-33;6-17
+12-13;21-31;11-38;18-23
+27-28;8-28;17-28;31-47;9-17;40-49
+1-7;8-20;31-37
+14-17;27-28;17-35;6-34;31-46;24-31
+0-1;20-22;6-28;7-13;9-31;19-41
+17-35;11-24;31-45;24-38;19-51
+12-13;15-19;16-17;9-15;5-32;19-41
+0-1;33-39;38-43
+1-11;25-26;8-26;13-33;3-9
+14-16;31-46;24-38;19-51
+1-5;17-24;6-8;16-24
+31-37;32-44;9-31
+17-24
+1-9;23-24;17-28;6-34;32-44;40-49
+1-6;17-24;16-17
+17-35;17-26;38-43;5-32;3-9
+14-17;17-26;17-36;16-24;5-7
+8-26;33-39;39-42;31-37;18-23
+1-7;1-10;11-38
+6-25;19-20
+1-8;15-18;5-32
+14-16;6-11;48-49;19-20
+14-16;8-16
+14-16;24-45;3-9
+8-16;6-25
+
+1-9;21-31;6-11;9-17
+1-10;14-17;17-29;33-40;9-19
+13-32;9-19
+1-9;16-29;32-44;19-51
+15-19;11-38;48-49;9-19;24-50
+1-6;21-31
+12-13
+8-24
+8-20;24-31
+17-29
+2-3;33-39;5-32;18-23
+14-16;15-19;23-24;6-17
+8-24;6-25;40-49;3-9;19-41
+21-31;17-29;9-30;9-17
+8-16;39-42
+6-8;6-34;9-30;19-20
+1-8;20-22;25-26;17-35;16-17;48-49
+2-3;33-40;6-28;19-51
+21-31;5-7
+8-16;17-24;9-15;18-23
+0-1;11-17;16-17;32-44;38-43;3-9
+17-24;17-29
+31-45
+2-3;1-4;16-17;38-43;5-8
+27-28;9-31;18-23
+12-13;14-17;8-28;33-40
+17-29;6-8;16-24;32-48;32-44
+23-24;27-28;33-39;5-8
+20-21;24-50;3-9
+1-9;27-28;8-20;13-33;11-24;19-41
+2-3;15-18;17-28;39-42;5-8
+2-3;1-5;31-37;32-44;5-7
+20-21;8-26;11-38;5-7
+15-19;6-34;5-8;18-23
+20-22;21-31;38-43
+8-24;31-45;31-47;48-49;9-17;24-38;19-20
+1-10;15-19;20-21;8-16;16-24
+0-1;2-3;14-17;5-8;40-49
+2-3;12-13;13-33;17-24
+20-22;8-28;17-28;6-17;16-29;7-13;24-38
+14-15;8-20;17-24;17-26;6-25;5-32;24-31
+1-9;1-11;8-28;8-26;17-26;6-11;39-42;31-45
+16-17;31-47;40-49;24-31;3-9
+5-7
+1-6;20-21;17-29;33-39;33-40;6-11;16-24;5-7;24-50
+23-24;17-35;19-51
+8-24;6-25
+1-8;23-24;17-25;39-42;32-42
+31-47;18-23
+1-8;31-45;24-38
+9-31;3-9;19-41
+2-3;1-4;1-8;1-9;12-13;14-17;8-26;5-32
+1-4;8-24;17-24;11-17;6-7;32-42
+1-8;27-28
+20-22;17-20;17-24;16-29;31-46;9-30;19-41
+1-6;27-28;6-28;6-17;9-30;19-20;19-51
+1-9;15-19;25-26;17-28;17-25;32-48
+2-3;27-28;17-35;16-17
diff --git a/examples/failures/failures-0.06 b/examples/failures/failures-0.06
new file mode 100644
index 0000000..88798cc
--- /dev/null
+++ b/examples/failures/failures-0.06
@@ -0,0 +1,1000 @@
+14-16;6-28;9-15;9-17;24-45;19-41
+1-5;1-6;6-28;18-23;24-50
+1-9;16-24
+12-13;8-16;17-35;16-17;31-46;24-31
+0-1;14-17;17-35;17-24;6-34;48-49
+11-24;6-11;32-44;24-38;19-51
+8-20;32-44;48-49;5-32
+1-11;8-24;17-29;18-23;24-45
+1-5;1-11;25-26;27-28;13-32;11-38;33-39;6-11;16-17;32-42;24-38
+16-24;9-30
+14-17;27-28;8-28;5-7;19-20
+15-19;27-28;8-20;8-26;13-33;17-28;6-7;9-30;19-20;19-51
+6-34
+13-32;16-17;31-46
+8-16;11-38;16-24;31-45;48-49
+20-22;13-32;17-25;7-13;9-17
+8-24;13-33;16-24;18-23;19-41
+14-17;17-29;33-39;16-24;24-38
+2-3;15-18;8-28;17-25;16-17
+17-35;17-28;6-28;18-23
+
+1-4;13-33;17-29;17-36
+1-4;14-16;20-21;8-20;8-24;17-26;19-20
+0-1;32-44;7-13;9-17
+7-13;9-30;5-7;24-50;19-41
+20-21;17-35;48-49;38-43
+25-26;9-19
+16-17;32-44;9-19;24-45
+20-22;6-34;32-44;32-42;9-19;5-32
+1-5;14-17;20-22;13-32;39-42
+2-3;23-24;25-26;11-17;18-23
+15-18;15-19;17-20;9-31;24-45
+0-1;6-11;16-17;31-47;38-43;9-30
+1-9;1-10;20-21;17-36;32-48
+27-28;6-7;18-23;24-31
+1-6;16-17;9-17;5-8;19-51
+1-11;33-39;31-47
+0-1;1-11;14-16;11-24;48-49;24-38
+23-24;8-16;8-28;17-28;5-8;24-50
+1-10;15-19;20-22;8-20;11-17;33-40;39-42;31-46
+11-38;39-42;5-32;5-8;18-23;40-49;24-45
+1-6;39-42;31-46;31-47;19-51
+15-18;40-49
+1-7;14-16;20-21;8-20;17-24
+17-24
+20-21;6-34;5-32
+1-9;6-28;6-17;9-30;19-41
+2-3;1-6;8-26;13-32;17-26;11-24;6-17;16-17
+1-9;17-25;7-13;24-38
+11-17;6-11;32-44;9-31;19-51
+14-16;27-28;6-25;16-17;5-7;24-50
+0-1;27-28;8-26;6-17;31-37;9-30;40-49;19-41;19-20
+1-7;12-13;15-19;17-35;32-42;9-15;40-48
+1-9;15-18;17-35;33-40;6-34;6-11;16-17
+17-35;11-17;39-42;16-24;31-45;31-46;9-15;3-9
+2-3;1-6;14-15;8-26;17-35;17-20;17-29;31-37;32-48;24-38
+14-17;20-21;25-26;17-29;6-7;9-19;5-32;40-48
+8-26;16-29;24-50
+14-15;13-32;6-7
+2-3;1-9;13-33;40-48;24-31
+0-1;1-5;6-7;6-8;16-24;32-48;24-31
+1-6;1-9;21-31;24-45
+1-5;20-21;31-37;18-23
+21-31;17-20;11-38
+15-18;13-32;17-29
+12-13;27-28;32-48;9-15
+1-9;17-25;33-40;16-24;38-43
+1-10;31-45;31-47
+1-5;1-7;17-18;17-36;11-24;32-48;5-8;19-51
+2-3;25-26;17-35;16-29;9-15;5-8;40-48;3-9
+17-35;17-26;6-7;6-28;9-31;19-20
+1-9;1-11;31-45
+13-33;17-28;31-47;5-32
+1-5;15-19;20-22;8-26;17-28;17-24;17-29;6-28
+14-16;20-21;6-25;6-11;5-7
+15-18;17-29;32-48;9-31
+8-24;11-24;16-29;32-42;24-50
+8-16;13-33;6-8;6-17;31-37
+6-7;24-45;3-9
+0-1;2-3;15-18;15-19;17-35;17-20;5-8
+14-17;25-26;32-44
+1-9;27-28;32-44;7-13
+2-3;1-8;8-20;8-24;31-46;38-43
+1-7;1-8;15-19;17-28;17-36;11-17;16-24
+1-9;23-24;25-26;17-36;31-45;40-48
+2-3;1-4;39-42;19-51
+1-11;40-48;3-9
+8-24;8-26;33-40;31-46;9-19
+2-3;14-15;17-24;11-17;33-40;31-46;9-30;9-19
+14-15;17-35;17-24;5-32
+0-1;12-13;6-28;3-9
+15-19;17-20;16-17;24-38
+12-13;14-17;17-35;17-29;11-17
+0-1;20-21;17-18;17-26;7-13;19-41
+1-7;15-19;17-26;6-17;48-49;9-15;9-31;5-8;19-41
+17-24;6-17;6-34;6-11;16-24;31-37;31-47
+14-17;13-33;6-25;31-46
+1-9;17-28;17-24;31-45;31-46;48-49
+1-4;20-21;27-28;8-16;17-36
+1-7;8-16;17-25
+8-16;3-9;19-41
+1-4;1-5;17-35
+14-17;15-19;11-24;9-17;24-45
+8-20;13-33;24-38;19-51
+17-20;11-24;16-24;31-37
+15-19;21-31;39-42
+17-18;17-29;6-17
+17-35;7-13;19-41
+24-38;24-31
+2-3;1-11;23-24;9-30
+1-6;1-8;14-17;13-32;16-17;32-48;7-13;5-32
+0-1;1-4;8-28;17-36;31-47;9-17;19-41
+11-24;11-17;31-47
+16-24;31-46;24-45
+0-1;1-10;20-22;38-43;9-17;24-38
+20-21;5-8
+14-17;17-20;39-42;24-50;19-41
+2-3;20-21;11-38;6-17;7-13;9-31;9-17;3-9
+1-5;1-6;17-26;33-39;6-11;32-44;48-49;5-32;18-23
+27-28;17-18;5-8
+0-1;27-28;17-28;6-25;16-24;31-47;9-19
+8-16;13-33;9-19
+1-7;27-28;8-16;8-26;33-39;31-45;19-41
+0-1;27-28;16-24;24-38;19-41
+15-19;16-17;31-46;31-37;9-31;19-41
+23-24;27-28;13-33;17-35;11-38;32-44
+1-4;17-35;17-36;7-13
+1-10;8-28;24-38
+8-24;17-28;6-8;31-47;48-49;9-15;3-9
+7-13;19-20
+1-7;13-32;48-49;40-49;24-45
+1-10;17-24;33-39;16-29;32-42;5-32
+12-13;6-34;31-45;9-30
+6-25
+1-9;24-38
+20-22;17-18;6-28;40-49;19-41
+1-8;21-31;11-24;33-39;6-11;5-7;24-31
+1-5;17-25;11-38
+8-26;17-18;17-24;38-43;9-15
+23-24;27-28
+1-4;21-31;17-25;11-24;11-38;31-37;24-31;19-20;19-51
+1-6;1-9;27-28;17-36;31-47;5-8
+1-9;25-26;13-32;11-24;6-11
+14-16;8-16;17-26;11-17;16-17;38-43;5-8;18-23
+23-24;17-26;39-42;16-29;31-46;19-51
+0-1;8-24;32-42;5-32
+1-10;8-16;17-20;18-23;24-31
+0-1;17-20;38-43;3-9
+
+11-17;33-39
+6-28;6-8;16-24
+23-24;25-26;11-24;6-7;48-49;24-31
+2-3;15-19;8-16;11-17;40-49;24-38;24-50
+8-16;21-31;31-37;38-43;19-41
+1-4;20-22;17-29;6-25;9-19;18-23;19-41
+1-8;15-19;25-26;7-13;9-19;5-7;40-49
+8-20;17-29
+14-16;8-16;33-39;6-34;9-31;5-32
+17-35;33-40
+33-40;6-11;16-29;7-13;9-17;5-32;19-51
+15-18;17-18;16-24;32-48;7-13
+19-20
+8-20;8-28;17-35
+1-9;1-10;15-19;25-26;8-16;8-26;17-35;6-11;32-44
+14-16;17-28;17-24;33-40;16-29;16-17;48-49;19-41;19-51
+1-4;13-32;17-36;33-39;32-42
+6-28;24-50
+20-21;6-28;5-7;18-23
+17-18;16-29;32-42;3-9
+17-20;17-26;38-43;5-7;40-48;19-51
+33-39;40-48;19-20
+20-21;8-20;17-18;6-28;32-48;24-38;19-51
+1-9;20-22;21-31;6-34;16-17;9-15;24-50;3-9
+25-26;17-29;5-8
+12-13;21-31;6-7;39-42;16-24;9-15
+17-20;31-45;7-13;9-31
+1-4;17-36;6-17;18-23;19-20
+23-24;17-36;5-7;18-23;24-31;3-9;19-20
+0-1;15-18;20-22;25-26;13-33;33-39;32-44;40-48
+1-9;27-28;17-18;16-17;19-41
+1-7;21-31;17-20;6-11;16-29;31-46;5-32
+8-28;17-18;31-46;9-15;9-19;40-48;24-31
+1-6;14-15;8-16;8-24;11-17;33-40;31-37;32-48;3-9;19-51
+0-1;31-46;7-13
+1-7;20-21;8-24;18-23
+1-8;14-16;17-25;33-39;31-46;3-9
+2-3;20-22;17-26;39-42
+8-24;17-26;11-24;6-7;32-48;5-8
+1-8;1-10;15-19;8-16;17-24;18-23
+8-16;8-26;11-17;33-39;38-43;19-51
+1-5;13-32;17-18;17-26;32-48;40-49
+1-10;20-21;8-20;8-16;17-20;17-25;16-29;5-8
+12-13;17-29;31-46
+20-21;25-26;31-46;48-49;40-48;24-31
+15-18;33-39;6-34;32-44;5-32;24-50
+23-24;38-43;40-48
+0-1;2-3;1-9;8-20;6-11;19-51
+0-1;1-11;13-33;31-37;31-47;9-17;24-38
+14-16;8-24;6-11;48-49
+1-4;14-15;13-32;17-25;17-36;6-11;31-45;9-31
+25-26;21-31;17-35;11-38;16-24;38-43;24-38;24-31
+23-24;13-32;17-18;19-41
+1-5;17-36;7-13;40-48
+6-8
+17-20;33-40;31-37;3-9
+23-24;17-28;33-40;39-42
+0-1;1-5;1-9;14-16;15-18;17-25;9-31;19-51
+8-24;21-31;16-24;32-42
+6-28
+0-1;1-6;12-13;25-26;17-35;6-25;31-45;9-31;19-51
+31-37;9-30
+13-32;17-26;11-24;32-42;9-30
+6-17;31-47
+1-4;1-5;12-13;13-32;17-36;6-28;32-44;9-19;24-50;19-51
+6-7;5-7;19-20
+17-36;31-37;5-8;18-23
+1-11;14-17;8-28;8-24;7-13
+8-20;6-17
+21-31;31-37
+0-1;15-19;33-40
+
+1-7;14-15;6-34;48-49;7-13;5-7;24-45;19-41;19-51
+1-10;15-19;8-16;13-33;17-35;16-29;32-48;9-31
+0-1;11-38;6-8;31-37;9-19;24-31
+23-24;9-15
+17-25;6-8;16-29;31-46
+1-7;8-26;13-32;17-35;17-28;16-24;31-46;5-32;19-20
+1-10;1-11;14-16;25-26;17-25;16-17;31-47
+1-4;1-6;17-36;6-28;31-45
+12-13;17-35;17-36;33-39;6-28;5-7
+20-21;17-29;6-25;24-31
+12-13;15-18;27-28;17-24;6-25;31-45
+27-28;8-28;21-31;13-32;17-24;31-46;31-37;9-30
+8-16;17-24;33-40;6-28;31-47;19-51
+15-19;8-16;21-31;33-40;32-48;9-15;9-17;24-31;24-50
+14-17;15-19;25-26;13-33;40-48
+8-26;31-45;24-31
+1-7;20-22;9-15
+17-28;17-26;6-28;7-13;9-17
+8-28;13-33;17-20;17-26;17-29;6-28;5-32
+14-15;13-33;6-34;16-29;31-37
+1-4;1-5;23-24;6-7;32-42;18-23;24-31;24-50
+15-19;8-28;11-17;33-39;6-11;16-17;9-31;18-23
+0-1;25-26;27-28;17-29;17-36;16-24;9-15;3-9
+23-24;21-31;11-24;6-7;32-48;19-20;19-51
+15-19;20-22;13-33;9-19
+1-5;23-24;21-31;9-19;3-9
+14-15;17-24;6-7;32-42;9-15;9-19
+32-44;5-32
+31-45;31-37;48-49;5-8;19-51
+1-7;1-9;6-7
+0-1;9-31
+13-32;6-7;16-29;32-44;32-42;7-13
+1-4;1-10;14-17;23-24;17-24;6-25
+1-4;8-26;17-28;6-7;5-7
+0-1;17-24;17-36
+1-11;8-16;8-28;8-24;16-24;31-37;38-43
+1-8;17-35;17-28;9-19
+1-9
+14-17;11-17;48-49;24-45;19-41
+2-3;1-6;8-26;32-48
+1-5;14-16;15-19;48-49;9-31
+17-26;11-24;19-51
+0-1;1-6;13-32;17-29;31-45;32-48;24-31
+1-9;20-22;8-28;13-32;17-20;39-42
+14-17;23-24;8-24;21-31;17-24;6-17;6-11;3-9;19-20
+17-29
+1-4;1-5;1-7;1-10;14-15;25-26;33-39;5-8;24-50
+20-22;8-28;21-31;17-24;6-17;5-8;19-41
+17-29;31-45
+1-6;14-17;8-20;8-26;21-31;17-36;11-38;11-17;6-28;31-46
+8-24;17-20;6-34;24-50
+15-19;33-39;24-38
+13-33;6-7;6-8;9-17
+17-35;17-24;6-17
+1-7;13-32;11-24;19-20
+20-22;25-26;8-20;16-29;5-8
+1-9;8-24;17-18;11-24;9-31;5-32;3-9
+1-7;14-15;17-28;39-42;9-19
+1-7;15-19;25-26;17-35;17-20;6-7;6-28;32-48
+14-15;8-26;17-25;33-40;18-23
+20-21;27-28;8-28;33-40;6-7;6-17;31-37;31-47;7-13;3-9
+13-33;17-20;7-13;24-45
+1-6;1-10;15-19;6-8;31-45;24-50
+1-11;15-18;25-26;17-20;6-17;31-46
+20-22;13-33;17-18;33-39;7-13;9-17
+17-20;17-18;17-26;6-25;40-49;19-20
+17-26;6-17;32-48;24-31;19-41
+1-6;14-16;23-24;17-25;6-8;24-31
+1-7;14-15;8-26;40-49
+14-16;17-35;11-38;6-34;31-47
+15-19;23-24;6-7;31-45
+8-20;17-25;39-42;9-30;24-45;24-50
+14-15;17-35;6-28;6-17;16-29;48-49;40-49
+17-35
+1-4;1-5;14-17;20-22;33-40;32-44;48-49;7-13;24-50
+1-11;13-33;17-18;11-17;5-8;5-7;24-45
+17-35
+23-24;8-16;8-28;17-24;17-36;11-38;6-34;16-24;24-50
+27-28;8-26;9-31;9-17;24-38;3-9
+25-26;16-29;48-49;24-31
+1-10;8-20;17-20;17-18;6-7;40-48
+15-19;27-28;18-23;40-49
+15-18;13-32;7-13
+0-1;20-22;6-8
+8-26;17-18
+13-32;13-33;32-42
+20-21;21-31;24-38;19-41
+14-17;8-28;17-28;6-28;40-48
+1-4;1-7;15-18;21-31;13-33;5-7
+0-1;8-26;32-42;24-45
+8-16;13-32;17-18;17-36;39-42;31-47;7-13;38-43;18-23;24-50
+14-15;8-28;17-18;9-17;40-49
+1-11;17-26;33-40;39-42;31-47;9-19
+15-19;17-18;17-26;11-38;9-30
+23-24;17-35;6-11;16-29;40-48;40-49
+20-21;18-23
+33-39;9-30
+0-1;1-10;15-19;20-22;11-24;6-28;6-34
+8-20;17-20;17-18;17-28;16-29
+16-24;48-49;9-31
+2-3;1-11;12-13;23-24;17-29;31-46;7-13;40-48
+15-19;24-31
+14-15;13-32;17-20;11-24;6-7;16-29;24-38;19-51
+1-7;39-42;16-24;9-31;5-7
+1-6;20-21;6-7
+8-26;17-35;17-29;11-38;11-17
+8-16;17-36;32-48;24-38
+2-3;12-13;15-18;17-20;31-46;31-47;40-48;19-20
+15-19;20-21;21-31;39-42;32-42;7-13;24-31;19-51
+8-26;13-32;33-39;40-48
+1-7;11-24;3-9
+0-1;38-43;19-51
+12-13;6-11
+1-6;1-10;27-28;8-24;13-33;11-17;31-45;9-19;24-38
+17-25;6-34;19-41
+11-38;33-39
+1-5;1-7;1-8;8-16;31-37;3-9
+1-4;1-8;6-8;9-31
+1-4;1-8;17-25;11-24;11-17;6-11;31-46;5-7
+1-8;12-13;14-15;14-17;17-26
+1-9;1-11;15-18;20-21;11-38;38-43;18-23;24-45
+6-34;31-45
+11-24
+17-18;17-25;11-17;33-39
+15-19;16-29;31-47;5-32;24-38;24-31
+1-11;15-19;11-38;7-13;40-49
+1-7;14-16;20-22;8-26;17-20;6-8;6-34;9-19;18-23;24-38
+9-19
+15-19;8-24;17-28;24-50
+2-3;17-24;24-45;19-20
+1-4;9-17
+1-6;14-17;8-24;5-32;19-51
+15-19;17-28;33-39;6-28;39-42;16-24;48-49;19-51
+32-48
+13-33;11-38
+31-45;9-30
+17-36;6-11;5-8;24-50;19-51
+1-7;12-13;25-26;8-24;17-18;16-17;9-30;24-50;19-41
+1-5;1-9;8-16;13-33;17-18;9-17
+1-9;14-15;15-19;27-28;6-11;9-31;18-23;19-20
+1-9;14-16;11-17;38-43;18-23;19-51
+12-13;8-20
+1-11;15-19;31-46;9-17;5-32;24-45
+1-4;15-18;17-28;17-26;33-40;48-49
+1-6;13-33;17-36;33-39;33-40;16-24
+14-16;18-23
+12-13;14-15;15-19;17-35;17-18;17-25;17-36;33-40;32-48;40-49;24-45
+14-16;40-48;19-20
+1-6;12-13;16-24;31-46;7-13;9-15;24-50;19-20
+14-17;8-16;16-17;32-44;38-43
+1-6;17-35;17-18;17-29;18-23
+0-1;1-5;1-9;11-38;6-8;16-17;24-38
+0-1;1-6;17-29;32-48
+1-5;14-15;20-21;11-17;16-29;31-46;48-49
+6-7;32-44;9-15
+1-11;24-31
+2-3;1-11;11-38
+1-11;8-28;9-31;9-19
+1-4;6-7;6-8
+17-36;11-17;39-42;9-19;19-20
+2-3;1-5;1-6;8-16;13-32;16-29
+6-8;6-34;31-46;5-8;24-31;24-50
+8-20;11-38;11-17;16-17;31-37;24-31
+14-15;32-42;3-9
+1-7;25-26;6-28;39-42;24-38;24-50
+14-17;20-22;33-39;6-8;6-17;16-24
+14-16;8-20;31-37;5-32
+1-7;20-21;17-24;17-26;19-20
+1-11;8-26;17-24
+1-4;12-13;9-15
+1-11;23-24;6-8;39-42;9-31;18-23
+1-5;14-15;14-17;17-29;32-42;3-9
+14-17;15-19;25-26;13-32;6-28;9-17
+12-13;27-28;17-29;17-36;11-38;16-17;32-48
+8-28;32-44;48-49;24-45;3-9
+17-20;16-24;5-7
+2-3;48-49;5-7;19-51
+32-48;38-43;24-31;19-20
+1-8;15-19;8-26;13-32;13-33;16-29;16-17;32-42;40-49;24-45
+6-11;9-30;9-17
+1-8;17-18;24-45
+8-24;17-25;32-48;32-42;24-38
+1-4;8-20;33-40;6-25;31-37
+2-3;1-4;14-17;17-28;33-40;6-25;9-17;19-41
+15-18;17-20;6-8;31-47;24-50
+
+1-11;16-24;32-48
+
+13-33
+14-17;31-46;32-42;19-41
+9-19
+20-21;40-49
+33-39;32-42;9-19;5-32;24-50
+12-13;8-16;8-24;17-26;11-17;31-45;38-43;24-31
+0-1;15-19
+12-13;6-8;31-37;19-51
+14-17;33-39;39-42
+1-7;15-18;6-34;24-45
+17-20;6-17;5-32
+1-11;14-15
+1-11;31-45;32-48;38-43
+2-3;14-16;15-19;8-24;17-28;6-28;6-34;9-30;19-51
+8-20;21-31;6-28;16-24;31-37;32-42;24-31
+16-24;16-29;5-7
+12-13;8-20;8-28;16-24;32-42;5-7;24-31
+6-8;18-23;40-48
+15-19;20-22;17-28;6-25;6-8;39-42;38-43;40-48
+0-1;17-24;24-38
+1-7;13-32;19-51
+1-5;15-18;21-31;17-20;17-28;6-7;9-15;24-31
+1-4;20-21;23-24;6-8;6-34
+2-3;1-5
+15-19;23-24;17-35;40-48;3-9
+2-3;1-5;17-25
+1-8;12-13;25-26;17-25;33-40;16-17;31-45
+1-9;1-10;14-16;20-22
+8-24;17-20;6-34;16-29;32-42;24-38;24-45
+0-1;20-21;6-28;6-8;38-43;5-8;24-50
+2-3;17-26;18-23
+13-33;24-38
+15-19;6-34;3-9
+12-13;15-18;11-17;6-28;31-45;9-17;18-23;24-31;19-51
+1-7;23-24;25-26;6-25;24-50
+6-25;9-19
+17-28;17-26;18-23;3-9
+14-16;32-48;32-44;9-17;3-9
+0-1;1-4;20-22;8-26;17-24;31-45;9-19;5-7;18-23;3-9
+2-3;1-8;20-21;20-22;7-13;18-23
+13-32;9-15
+8-24;17-36;3-9
+8-26;17-28;11-24;31-45;31-37;5-32;40-48;19-20
+27-28;17-29;11-17;6-17;32-42;9-15
+17-20;6-11;16-29;24-38
+2-3;1-5;1-9;27-28;31-45
+1-7;6-7
+0-1;8-16;21-31;13-32;13-33;17-28
+20-21;17-26;31-45
+27-28;8-16;33-39;6-17;31-47;5-8
+1-11;31-47;5-7;19-41
+5-8
+15-18;8-24;21-31;17-28;31-45;3-9
+2-3;8-20;17-20;17-25;18-23
+17-24;11-17;6-8;16-24;24-50
+17-28;17-29;16-24
+0-1;15-19;20-22;25-26;21-31;17-26;16-29;32-48;38-43;5-8;3-9
+11-38;11-17;48-49;18-23
+23-24;17-18;40-49
+15-19;23-24;17-18;33-40
+1-9;13-32;39-42;32-42;9-17;3-9
+1-6;1-7;8-24;6-34;9-15;9-17
+12-13;8-26;31-45;48-49;24-45
+14-16
+1-4;1-5;1-8;15-19;8-24;33-40;32-42;38-43;5-7;18-23;3-9
+1-10;16-17
+1-5;13-33
+1-8;12-13;17-28;17-29;17-36;6-7;38-43
+23-24;6-28
+0-1;12-13;14-16;14-17;20-22;11-38;6-25;6-34;31-45;9-19
+1-5;8-20;17-35;33-40
+12-13;17-35;6-17;9-17
+8-26;17-28;6-28;31-46;7-13
+1-5;25-26;6-25
+1-9;9-15;24-38;19-51
+6-7;9-30
+14-17;6-28;31-47;32-42;9-30
+14-16;8-26;11-17;9-17;19-51
+12-13;20-22;21-31;11-38;24-50
+1-8;17-18;33-39;6-34;32-44;24-38
+14-15;8-16;8-28;17-20;6-8;40-49
+1-10;8-16;21-31;17-35;17-20;11-24;31-46;24-38
+27-28;8-16;8-24;17-26;16-29;32-48
+0-1;1-11;15-18;16-17;5-8
+19-20
+1-5;27-28;16-17
+14-15;8-20;33-40;16-24;5-32
+0-1;14-17;8-24;8-26;24-31;19-51
+2-3;12-13;32-42
+13-33;6-25;16-29;9-31;40-49
+14-16;8-20;24-45;19-41
+1-4;14-16;13-32;17-28;17-29;6-8;6-17;39-42;24-38
+32-48
+
+1-11;25-26;8-16;6-7;31-47
+1-8;31-47;24-38
+0-1;2-3;14-15;13-33;40-49
+20-21;8-26;6-28
+6-34;5-7
+17-18;11-24;32-42;9-15
+14-17;6-7;31-37
+1-8;15-18;33-39;33-40;9-17;24-50
+14-15;25-26;8-26;33-40;39-42;40-49
+2-3;1-9;15-18;8-26;21-31
+14-15;8-16;17-20;31-46;9-19;19-20
+32-44;9-17;5-7
+17-35;17-29;33-39;16-29;32-44;7-13;5-7
+14-17;21-31;17-26;6-11;5-8
+1-11;8-24;13-32;17-26;11-24
+1-7;1-11;21-31;33-40;31-45;31-47
+17-20;17-18;6-28;6-25;31-37;18-23
+25-26;8-24;21-31;6-28;6-25;6-17;39-42;38-43;9-15;5-7;24-38
+17-20
+2-3;15-18
+0-1;14-16;13-32;17-28
+0-1;12-13;8-28;31-46;24-45;3-9;19-20
+25-26;6-28;31-47;24-45
+23-24;17-35;17-18;11-17;16-17;24-38;19-41
+1-10;14-17;17-35;17-18;6-8
+20-22;8-20;39-42;16-24;9-30;5-7
+1-4;1-7;14-16;15-18;8-24;21-31;6-25;6-17
+12-13;6-34;31-46;48-49;19-51
+1-5;1-11;15-19;11-38;18-23;3-9
+6-25
+0-1;2-3;1-7;14-17;23-24;8-16;13-32;17-36;19-20
+8-20;17-24;6-17;48-49;40-48
+33-40
+1-5;14-16;17-29;38-43
+1-6;14-16;17-18;16-29;31-45;40-48
+
+8-16;13-33;17-24;6-7;9-15
+1-9;11-17;6-17;6-34;39-42;31-45;32-42;24-38
+1-7;1-9;15-18;17-28;17-25;6-8;31-47;9-17;5-32
+15-19;17-26;24-45;3-9
+8-24;17-18;6-34;31-37;19-20
+1-5;1-10;8-16;6-11;18-23;19-41
+8-28;17-24;16-24;24-45
+1-9;9-19
+17-24;16-29;9-30;9-19;19-51
+1-7;20-21;11-17;9-30;5-8
+8-28;17-24;17-29;17-36;11-38;6-7;6-34;5-7
+8-28;33-39
+0-1;14-17;6-8;9-15;9-30
+1-9;38-43
+12-13;17-18;11-24;11-17;9-17;40-48
+2-3;20-21;17-24;19-20
+1-4;1-6;12-13;8-24;17-24;11-24;5-7;24-38;19-41;19-20
+1-6;12-13;17-35;17-26;17-36;31-46;32-48;9-17
+1-8;39-42;48-49;9-15;9-31
+12-13;14-15;6-7;6-8;31-45;40-48;19-51
+25-26;31-37
+1-5;23-24;13-32
+17-35;17-20;9-17
+12-13;23-24
+2-3;21-31;17-36;32-48;24-45;3-9;19-51
+11-38;6-25;9-17
+14-16;17-24;5-32
+15-18;17-18;38-43;3-9
+1-7;1-9;1-10;25-26;48-49;9-15;5-8
+8-16;3-9
+1-9;14-15;17-26;11-17;33-39;33-40;31-45
+1-4;24-38
+0-1;1-4;21-31;32-48;32-42;40-48
+6-8;31-45
+15-19;23-24;17-24;33-39;6-8;48-49
+11-17
+1-9;1-10;17-36;32-42;24-38
+2-3;1-9;20-21;8-28;17-36;6-34;39-42;16-17;31-46;32-44;9-20;5-8
+15-18;8-26;6-17;16-24;9-31;3-9
+8-24;17-28;39-42;31-46;9-19;18-23;40-48;24-31
+15-18;8-16;13-32;6-7;6-11;40-48
+20-22;7-13;9-19;19-51
+8-20;33-39;6-17
+6-8;5-7;40-49
+1-4;14-17;25-26;17-29;5-7;40-48
+1-7;1-11;13-32
+1-6;17-35;5-32;24-38;24-50;3-9;19-51
+2-3;20-21;20-22;11-24;11-38;24-38;19-51
+1-7;21-31;6-17;9-15
+20-21;20-22;17-25;31-37;32-42
+21-31;33-39;33-40;6-7;19-51
+2-3;8-20;9-31;9-19;19-20
+20-21;13-33;11-17;32-44;24-31
+21-31;6-11;16-29;32-44;9-20
+17-26;32-44;32-42;5-8
+2-3;21-31;17-28
+11-38;6-34;32-42;18-23
+1-6;1-11;13-32;6-7;19-41
+1-4;1-8;16-29;31-47;5-32;5-8;24-38;24-50
+8-28;13-33;33-39;6-8;9-20
+20-21;9-15;5-8
+2-3;14-17;11-38;6-25;48-49;9-15
+17-28;6-25;16-24;16-17;9-19;40-49;3-9
+15-18;20-21;17-36;6-8
+8-20;8-28;17-35;17-36;5-7
+27-28;8-16;11-38;6-7;6-34;16-29;9-20;24-45
+12-13;8-24;21-31;13-33;16-17;31-46;24-45
+1-7;14-17;23-24;27-28;31-46;24-31
+15-19;27-28;21-31;31-45;32-44
+8-20;13-32;13-33;17-24;6-34;32-44;9-20;5-32
+13-33;11-38;5-7
+1-4;17-28;6-28;9-20;9-30
+7-13;9-19;19-41
+17-35;6-11;16-24;40-48
+14-17;20-21;25-26;8-20;8-26;11-38;6-34;6-11;9-15;9-19
+1-11;12-13;14-15;15-18;15-19;23-24;17-20;6-25;31-45;32-44
+8-16;9-15
+1-9;1-11;23-24;6-28;32-44;40-49
+17-29;48-49;5-7
+14-15;8-20;8-28;17-26;6-34;7-13;38-43
+14-16
+1-10;15-18;13-32;6-28;19-41
+25-26;17-24;6-25;6-17;16-29;31-37
+17-24;11-24;6-28
+17-24;9-31
+13-32;17-20;16-24
+1-8;5-8;24-45;19-41
+21-31;17-25;6-7;16-29;5-32;18-23
+1-10;12-13;14-16;15-18;11-24;33-40;16-24;16-29;5-8;18-23
+27-28;8-16;8-26;31-46;31-47;38-43;3-9
+27-28;9-20;24-38;19-41
+12-13;23-24;27-28;17-24;33-39;6-17;9-31;5-8
+17-36;6-34;48-49;9-30;3-9
+15-18;11-17;16-17
+0-1;14-16;38-43;9-30
+14-17;17-24;32-44;40-49
+1-10;14-16;8-20;6-25;31-37;9-15;9-30
+12-13;11-24;11-17;31-45;9-30
+1-7;1-10;13-32;13-33;6-34;16-17;32-48;9-20;9-31
+20-22;23-24;19-20
+12-13;15-18;17-35;33-39;24-50
+2-3;23-24;8-20;17-25;6-7;6-11;9-31
+1-5;1-11;20-21;13-33;17-35
+25-26;21-31;31-37;7-13
+8-24;13-32;17-25;17-26;9-20
+12-13;14-17;13-33;17-26;17-36;11-24;6-8;16-17;31-37;24-50
+8-20;17-18;16-29;31-47;32-44;38-43;9-17;5-32;24-45
+20-21;8-20;8-16;17-29;7-13;9-19
+25-26;11-17;6-28;16-29;9-19;3-9
+6-7;6-25;32-44;9-20;9-17
+17-18;7-13
+14-17;32-44;9-31;9-17
+6-34;3-9
+1-4;1-8;23-24;8-28;31-47;24-38
+0-1;1-4;15-19;6-17;9-20;9-31;5-32
+1-6;1-10;8-28;32-44;9-20
+14-17;21-31;17-35;17-25;6-8;6-11;31-37;9-30
+0-1;1-9;1-11;13-32;6-17
+12-13;8-20;33-39;31-45
+23-24;21-31;17-36;5-7
+1-7;20-21;20-22;17-36;11-17;16-29;32-48;24-38;19-20;19-51
+16-17;48-49;7-13
+17-18;33-39;18-23
+1-7;14-16;6-25;31-47
+1-8;14-15;9-31;40-49
+25-26;38-43
+17-18;17-24;6-17;5-7
+2-3;1-4;1-7;12-13;23-24;33-39;38-43;9-20
+21-31;16-24;31-45;19-20
+1-6;1-9;1-10;8-28;17-35;6-25;6-34;39-42
+1-4;17-24;31-37;31-47
+25-26;16-17;32-44;32-42
+1-8;14-15;8-26;21-31;32-44;9-17;40-48;40-49
+14-15;8-28;8-24;17-35;17-26;11-17;33-39;6-8;39-42;16-17;31-46;32-42;9-20;18-23;19-41
+20-22;8-16;8-28
+0-1;25-26;8-20;16-29;32-48;9-17;5-7;19-51
+0-1;17-25;17-36;11-17;31-37;9-17;19-41
+1-10;12-13;33-39;31-47
+15-18;15-19;23-24;17-24;11-17;6-8;5-8;24-45
+1-10;12-13;33-40;16-24;32-44
+8-28;13-32;17-24;6-7;5-32
+8-28;17-29;7-13;9-20;5-7
+1-9;8-24;8-26;33-39;6-7;6-17;16-29
+1-9;14-17;8-28;6-8;39-42;32-42;9-19
+15-18;20-22;8-16;6-11;39-42;16-17;40-48;24-38
+1-10;8-16;17-25;6-34;16-29;38-43
+14-16;13-32;17-29
+1-7;1-10;27-28;39-42;31-47;9-15;5-7;24-31;24-50
+11-38;6-8;6-11;31-47;40-48;24-31
+14-17;9-15;9-20
+15-18;8-28;6-34;31-37;32-44;9-17
+33-40;6-7;6-8;24-38;24-31;24-50
+12-13;25-26;27-28;8-20;17-28;11-24;6-7;32-44;9-31
+1-8;20-22;8-24;13-32;17-28;48-49;9-15
+1-7;14-15;17-35;17-18;11-38;6-8;32-48;5-7
+1-5;32-44;5-32
+2-3;1-4;1-6;1-8;32-48;5-32;24-31
+20-21;13-32;17-20;17-26;11-24;32-44
+33-40;32-44;7-13;18-23
+33-40;38-43
+1-10;14-16;13-32;6-28;5-32
+12-13;31-45;7-13;24-45
+27-28;13-33;17-26
+20-22;33-39;31-47
+6-8;6-34;24-50
+15-19;27-28;17-20;17-28;16-29;48-49;18-23
+1-5;17-18;6-7;39-42;31-45;24-50
+1-8;14-16;8-20;17-20;11-17;6-11;16-17;24-45
+0-1;1-7;25-26;27-28;8-28;6-7;9-15;19-41
+1-4;17-28;17-29;16-24;31-47;32-42;5-8;18-23;40-48
+1-10;1-11;13-33;17-18;31-47;9-31
+1-8;6-7
+6-34;16-17
+20-21;17-28;16-29
+14-17
+1-11;14-16;15-18;21-31;39-42;3-9
+1-7;11-24;31-45;31-47;32-48;9-19
+17-36;16-24;24-38
+12-13;8-16;17-25;17-29;31-37
+1-10;8-16;17-24;3-9
+14-17;20-21;8-16;6-28;32-42
+2-3;20-22;27-28;8-28;13-32;17-25;33-39
+27-28;11-17;33-40;31-46;5-7;19-20
+20-22;27-28;17-26;6-8;9-30;19-20
+9-15
+20-21;11-17;9-30;5-32
+14-15;33-39;6-11
+27-28;17-28;17-24;6-11;39-42;31-45;40-49;3-9;19-41
+14-16;15-19;17-20;11-17;9-20;24-38
+14-16;27-28;16-17
+1-6;11-24;33-39;40-49;19-51
+1-7;17-18;17-36;6-28;16-29;18-23
+20-22;8-28;8-26;17-36;6-28
+12-13;17-36;32-42;38-43
+0-1;20-22;6-8;31-47;48-49;5-8;19-20
+14-17;6-17;24-45
+2-3;6-28;16-17
+17-28;6-25;16-24;48-49;5-7
+8-26;21-31;6-34;24-38
+1-6;13-33
+32-44;24-38
+15-18;23-24;8-20;6-8
+17-18;24-45
+6-7;31-37
+25-26;5-7;40-49;3-9
+1-10;5-8
+1-8;15-18;11-24;3-9
+20-22;13-32;17-35;6-8;32-48;9-20;19-20
+1-9;15-18;13-32;17-35;17-36;6-28;6-25;6-34;24-38
+17-35;17-28;16-17;9-17
+15-19;21-31;11-24;33-39;9-20
+0-1;1-5;20-21;17-26;9-20;19-41
+14-15;8-28;17-26;11-24;6-28;9-19;5-7
+14-16;14-17;25-26;6-34
+15-18;11-24;39-42;31-45
+14-15;20-21;17-35;17-20;17-28;17-24;6-11;9-20
+12-13;20-22;17-18;17-24;17-25;31-37;31-47;32-44;9-31;19-20
+17-25;9-15;24-50;19-51
+1-5;1-10;1-11;15-19;23-24;31-47;7-13;24-45
+1-7;13-33;11-24;33-39;16-24;16-17;31-47;5-32;19-51
+12-13;6-17;19-41
+15-19;38-43
+1-9;27-28;6-17;16-24;16-29;24-31
+12-13;17-24
+6-7;16-17;48-49;9-30;5-32
+14-16;20-21;8-24;33-40;31-37;32-42;9-31;9-30;24-50
+23-24;8-28;39-42;16-29;18-23
+17-25
+27-28;32-42;18-23
+17-24
+25-26
+13-32;31-46;32-48;48-49;38-43;24-38
+14-17;17-35;17-28;33-40;9-15;24-31;3-9
+14-16;13-33;17-35;16-24;31-45;9-20;5-8
+8-20;8-16;17-36;32-44;32-42
+1-6;20-22;17-20
+14-17;8-16;21-31;17-26;17-36;6-28;6-34;16-24;16-17;32-44;18-23
+1-10;17-25;17-26;31-46
+15-18;25-26;6-8;6-11;31-46;32-42;19-41
+0-1;1-4;15-19;17-35;11-24;16-24;24-45
+0-1;27-28;16-29;24-38
+16-24;24-38
+14-16;8-28;33-40
+1-5;20-21;11-38;6-25;32-44
+11-17;16-29;16-17;9-31;18-23;19-51
+0-1;1-6;20-21;24-50
+
+23-24;6-34;31-47;9-19;24-45;24-50
+16-24;16-17;9-30;9-19
+23-24;17-28;33-40;6-7;16-24;31-37;9-30
+6-25;18-23;24-31
+14-16;8-20;8-28;17-35;6-11;19-20
+23-24;6-25;9-20
+8-20;17-28;17-36;33-40;6-28;16-17;32-48;9-20;9-30;5-32
+2-3;1-10;15-19;21-31;31-47;38-43
+11-38;9-20
+1-6;6-8;6-17;5-8;24-38
+2-3;14-17;8-26;6-17
+1-6;1-9;12-13;7-13
+1-5;8-28;32-42;48-49;40-49
+1-6;1-8;14-15;39-42
+1-6;11-24;6-8;32-42;5-7;24-31
+8-16;8-24;38-43
+1-7;17-20;17-29;6-17;24-38
+1-6;1-10;1-11;17-35;11-38;6-28;31-47
+21-31;17-24;17-26;11-17;19-41
+1-10;8-28;33-40;6-7
+11-38;16-24;9-20;5-32;40-48
+11-24;24-31
+14-17;23-24;13-32;31-46;31-37
+1-8;25-26;16-24;31-45;31-46;31-47
+1-5;15-18;23-24;13-33;11-17;5-32;24-45;19-51
+15-19;11-38;6-8
+1-5;17-25;11-38;6-7;31-45
+0-1;8-16;21-31;17-24;48-49
+25-26;13-32;33-40;16-24;32-48;9-30;18-23;19-41
+21-31;6-34;48-49;9-15;5-32
+31-45;31-46;24-45
+1-5;14-16;31-46;9-20;40-48;40-49;24-31;19-51
+20-22;8-20;33-39
+14-15;21-31;33-40;31-47;32-42;3-9
+17-36;11-24;11-38;6-25;6-8;9-20;9-19;5-32;40-48;19-20
+25-26;8-16;17-35;19-51
+1-10;15-18;8-28;31-46;48-49
+2-3;14-15;13-33;17-35;6-25;32-42;48-49;18-23
+1-4;12-13;14-16;20-21;8-20;8-16;6-25;6-34
+1-11;17-28;24-45
+0-1;13-33;6-17;39-42;7-13
+20-22;17-25;11-17;33-39;3-9
+23-24;17-35;9-20;40-48;24-38
+8-28;17-26;6-11;5-32;40-49;19-41
+15-19;11-17;31-37;38-43;9-20;9-30;40-48
+8-26;17-36;39-42
+20-21;31-37;9-15;9-30
+1-6;14-15;14-17;6-7;6-25;9-30;5-32
+1-5;1-9;17-35;16-24;9-31
+15-19;13-32;16-29;19-41
+1-9;17-29;33-39;32-44;9-31
+1-4;17-28;6-8;31-37
+1-4;1-6;1-8;15-19;20-22;8-28;11-24;6-7;6-17;16-17;31-47;32-48;38-43
+1-5;12-13;14-15;20-22;8-20;17-24;9-15
+1-11;15-18;21-31;31-45
+1-11;15-19;8-26;6-8;32-42
+25-26;21-31;13-33;48-49
+1-9;1-11;16-17;38-43;24-50
+0-1;12-13;33-40;6-28;48-49;9-20;40-48
+1-9;12-13;8-28;11-17;9-17;5-8;24-31;19-41
+14-17;13-33;32-48;18-23
+1-5;25-26
+17-24;6-7;6-11;16-24;7-13
+1-6;17-20;17-28;17-24;11-38;6-28;9-20;40-48;24-45
+17-18;17-29;6-17;9-15;3-9
+25-26;16-24;31-45;9-15
+0-1;8-24;13-32;13-33;11-38;9-31;5-32
+1-5;1-6;1-11;12-13;14-15;15-19;8-16;13-33;17-25;17-26;9-15;9-19;5-8;40-49
+1-5;23-24;25-26;13-33;6-28;6-34;9-31;9-30;5-7
+15-19;17-28;17-25;6-8;31-46;32-44;9-20;40-49;19-51
+15-18;32-42;9-31;5-8
+1-5;14-15;14-17;20-22;16-24;5-32;18-23
+0-1;1-7;1-9;27-28;17-36
+1-10;15-19;20-21;27-28;6-28;6-25;31-47;38-43;24-31
+5-7;19-51
+20-21;27-28;6-7;9-20;5-7;24-50
+2-3;1-7;14-17;25-26;27-28;17-29;11-38;6-28;6-17;39-42;18-23;19-41
+15-18;17-24;6-34;32-48;9-20;18-23;3-9
+1-10;8-20;31-46;32-42
+1-11;24-45;24-50
+1-6;32-48;32-42
+0-1;11-24;5-32;5-7;24-38
+14-17;8-24;16-29;18-23;24-38;19-41
+1-7
+1-11;8-26
+1-9;25-26;31-46
+11-24;7-13;9-30;5-8;19-51
+2-3;17-36;6-25;9-20;9-17;19-41
+14-17;20-21;8-24;17-18;31-37;18-23;19-41
+8-20;8-26;39-42;16-17;31-47;32-44;32-42;9-30;5-8
+2-3;17-25;9-20;40-49
+1-4;1-5;1-7;1-8;16-17;32-42;9-20;5-32
+33-39;16-17;31-46;9-15;18-23;24-38;19-20
+1-10;14-15;17-26;16-24
+2-3;1-5;8-24;17-35;17-24;7-13;9-20;9-31;19-20
+1-5;27-28;13-32;17-18;6-8;6-34;32-42;7-13;5-7;19-41
+20-21;8-24;3-9
+17-18;16-29;5-32;24-38
+23-24;17-36;11-38;6-8;16-29;9-19;24-45
+12-13;8-20;17-18;17-24;17-36;32-48;9-19;24-31
+12-13;8-28;32-42;24-38;24-31
+1-10;17-29;9-17;40-49;24-50
+15-19;6-7;48-49;24-45;19-41
+25-26;8-20;8-28;8-24;21-31;33-40;7-13
+17-36;31-45;32-42;9-15;9-19
+1-4;1-10;16-17;3-9
+48-49;9-30;40-49
+1-10;14-17;31-45;24-38
+20-21;21-31;6-7
+1-10;17-20;17-18;17-28;6-11;38-43;9-30;5-32;5-7
+8-16;17-28;17-29;11-24;18-23
+17-18;17-25;6-17;39-42;16-29;32-44;24-31
+27-28;17-18;11-24;31-37;38-43;9-15;19-51
+17-18;32-48
+27-28;8-28;8-26;6-34;16-17;19-41
+1-4;14-16;8-16;9-19;24-45;19-51
+24-38;19-20
+1-8;33-40;5-8
+0-1;13-33;17-24;17-26;33-40
+1-9;21-31;17-26;33-39;9-15
+15-19;8-28;8-26;11-38
+1-6;15-18;20-22;21-31;11-17
+1-8;12-13
+2-3;25-26;8-28;13-33;17-35;31-37;32-48;32-42;18-23
+8-16;6-28;9-20;3-9
+14-15;14-17;8-16;8-26;17-18;6-28;16-29;40-49
+1-4;14-16;8-16;17-20;17-18
+8-16;6-28;6-8;31-37;19-20
+15-18;15-19;17-25;6-25;6-8;32-44;32-42
+0-1;13-32;38-43;24-45
+13-33;11-38;6-17;6-34;32-42;9-17
+2-3;1-6;17-36;18-23
+14-17;27-28;31-46;32-42;24-50
+1-4;14-15;9-30;9-19
+1-4;1-9;1-10;23-24;27-28;8-20;13-32;6-34;9-19;18-23
+1-9;16-24;32-44;48-49;18-23
+31-45;31-46;31-37
+0-1;1-6;20-22;8-20;8-28;17-24;17-29;33-39;6-8
+8-28;13-33;17-28;48-49;9-31;19-41;19-20
+1-6;8-28
+1-7;15-18;15-19;17-29;16-24;31-45
+0-1;13-33;31-47;3-9
+33-40;6-25;5-8
+14-16;17-36;33-40;6-8;9-20
+20-21;13-32;17-28;17-24;6-34;48-49;9-20
+8-20;17-24;17-26;17-36;40-48
+31-47
+1-4;8-16;8-28;17-18;31-37;24-38
+8-26;17-26;31-47
+13-32;11-17;32-48;48-49;7-13
+25-26;27-28;13-32;6-25;6-17;16-17;9-17;18-23
+1-9;23-24;11-24;40-48
+8-24;33-39;16-17;32-48;24-50
+2-3;15-18;20-22;39-42;31-47;3-9;19-51
+1-11;27-28;40-48;40-49
+1-7;1-11;20-22;8-28;17-28;6-11
+0-1;17-20;6-28;38-43
+12-13;16-24;3-9
+1-5;9-20;9-31
+15-19;17-26;16-29
+15-18;31-47;40-48
+40-48;19-41
+17-25;16-29
+1-4;20-21;8-26;13-33;31-37;38-43
+17-20;17-24;6-25;7-13
+17-35;6-25;6-17
+1-5;1-10;24-38
+1-6;13-32;11-24;32-42;9-20
+8-26;17-18;31-46;9-15;40-48
+14-15;16-24;31-46;32-48;32-42;9-31;9-19
+20-21;20-22;23-24;11-24;11-17;19-41
+8-24;17-18;17-24;31-45
+1-7;17-25;17-26;9-17
+15-18;27-28;17-26;17-36;16-24;32-48;9-31;40-48
+17-29;6-25;6-17;3-9
+20-22;17-36;32-44;9-30;18-23;24-31
+11-24;6-8;31-46
+27-28;31-47;32-44;9-30
+1-9;17-20;17-28;6-34;32-48;32-44;9-30;18-23
+2-3;1-9;17-24;11-17;40-48;19-51
+1-8;15-19;13-33;17-24;16-17;24-31;19-20
+14-17;6-28;24-50
+12-13;23-24;6-8;32-42;9-20
+0-1;2-3;8-16;9-17;40-48;24-50
+12-13;8-16;8-26;17-25;17-29;33-39;32-42;9-15
+15-18;8-28;31-46;9-15
+1-9;31-46;32-42
+6-28;40-48
+14-15;17-36;11-17;16-29;31-46;38-43;5-32;24-50
+20-21;6-17;9-20;9-17;3-9;19-51
+1-4;12-13;11-17
+1-4;20-21;23-24;17-20;6-25;19-41;19-20
+15-18;20-21;17-35;11-24;6-25;5-32;19-20
+1-8;8-28;39-42;48-49;40-49;24-38
+2-3;1-7;1-11;17-20;9-20;5-7
+15-19;8-20;6-17
+6-7;18-23;40-49
+6-8;6-34;39-42;9-15
+25-26;17-28;17-24;17-26;33-40;7-13;24-45
+1-9;8-26;33-40;31-45;9-20;9-31
+16-17;32-48;19-41
+14-15;17-35;17-36;6-34;38-43;5-7;3-9;19-51
+15-19;6-8;6-11;32-42;9-19;24-31;19-41
+8-26
+1-6;8-16;17-35;6-17;9-19;19-41
+1-4;1-8;20-21;20-22;17-25;31-47
+1-11;6-25;6-34;7-13;5-8
+15-19;24-50
+11-38;16-17;18-23;19-51
+1-7;8-26;31-37;48-49;9-15;24-50
+16-17;9-20
+0-1;2-3;15-19;17-25;6-34;32-48;32-42;9-20
+31-37;3-9
+39-42
diff --git a/examples/failures/failures-0.07 b/examples/failures/failures-0.07
new file mode 100644
index 0000000..3f1d247
--- /dev/null
+++ b/examples/failures/failures-0.07
@@ -0,0 +1,1000 @@
+1-6;1-11;17-18;33-40;6-28;9-19
+1-9;12-13;11-24;39-42;16-24;32-44;9-17;5-32;24-38
+1-9;25-26;6-8;32-48
+11-38;9-31;5-32
+14-16;11-17;6-25
+8-16
+20-21;8-20;8-26;17-36;32-44;24-31
+8-24;33-40;38-43
+15-19;6-28;48-49;5-7;24-38
+0-1;17-20;17-25;11-17;6-17;39-42;16-29;9-31;18-23;3-9;19-20
+6-8;31-47;9-17;40-49
+8-28;13-33;31-45;31-37;24-38;24-31;19-20
+1-4;8-16;17-36;6-34
+0-1;17-18;6-7;16-29;9-20
+15-18;17-20;19-41
+2-3;1-5;17-18;11-17;38-43;24-38
+1-8;40-49;3-9
+1-9;25-26;17-35;9-17
+33-39;9-19
+14-16;20-22;8-28;17-35;9-19
+2-3;1-11;14-16;11-17;31-47;48-49;7-13;9-19
+2-3;14-17;15-19;6-8;9-19
+6-25;6-17;5-7
+0-1;14-15;13-33;16-24;5-7
+1-7;23-24;8-16;8-28;8-24;17-24;38-43;9-30;40-48;24-45
+1-5;25-26;6-28;31-45;24-31
+1-11;15-18;27-28;8-26;17-26;11-38;33-40;38-43;9-17
+0-1;20-21;17-20;17-26;6-7;24-31
+17-26
+1-9;14-15;6-25;39-42;38-43;9-20;18-23;19-20;19-51
+1-6;12-13;14-16;23-24;8-16;11-24;32-48;5-32;19-20
+39-42;31-45;48-49;9-30;24-38
+6-17
+8-28;5-7;40-49;24-45
+33-39;16-29;18-23;24-38;24-31;24-45
+1-4;1-8;6-28;48-49;7-13;24-45
+1-9;6-7;6-25;16-24;5-8
+14-15;15-18;15-19;17-36;31-46;32-44
+23-24;9-30;9-17;24-38;3-9
+14-15;6-34;31-47;5-8;19-41
+1-4;1-5;20-22;17-18;17-29;33-40;6-7;39-42;31-37;9-31
+1-9;27-28;11-17;7-13;24-38
+14-17;17-18;17-24;6-28;6-25;6-8;31-46;32-44
+0-1;1-8;20-21;27-28;17-28;11-24;38-43;24-45
+14-16;8-26;17-29;31-45;24-45
+1-6;14-16;15-19;23-24;27-28;5-8
+1-5;15-18;11-38;33-39;9-20
+1-11;11-17;9-31
+1-10;20-21;27-28;8-20;6-7;6-11;16-29
+15-18;25-26;5-8;5-7;19-20
+1-5;1-6;15-19;17-25;6-8;31-46;32-44;24-50
+1-9;8-28;17-35;32-48;48-49;24-45;19-20
+8-16;8-24;17-28;11-17;6-7;16-24;16-29;32-48;24-45
+23-24;13-33;17-35;11-38;31-45;9-15;9-17;40-48;24-31;24-45;3-9
+20-22;6-28;38-43;19-51
+1-10;12-13;14-17;11-24;6-17;31-37
+1-9;14-15;8-20;17-18;11-24;16-24;40-48
+17-35;31-37;40-48
+8-16;8-24;16-29;16-17;31-45;18-23;19-51
+14-15;15-19;20-22;11-38;33-40;48-49
+1-5;14-16;21-31;7-13;5-32;40-48;3-9;19-41
+15-18;6-25;32-42;19-51
+13-33;5-7
+1-10;8-28;31-46;5-7;40-48;24-50
+1-8;20-21;8-26;17-36;11-17;31-37;19-51
+14-17;17-20;9-31
+0-1;1-7;6-34;31-45;48-49;40-48;24-31
+1-4;1-7;8-20;17-25;32-48
+1-10;21-31;17-24;6-11;32-48;7-13;19-20
+16-17;31-46;19-20
+1-6;14-17;11-17;33-39;33-40;40-48;40-49
+1-5;1-10;8-28;17-29;6-28;5-32;19-20
+15-18;8-16;7-13;9-30;18-23
+14-16;15-19;21-31;9-20
+20-22;8-26;17-20;17-26;31-37;48-49;24-31;3-9
+1-11;17-28;17-26;6-17;31-47;32-44;5-7;40-49;24-38
+17-26;9-30
+8-20;8-28;33-39;6-11;16-29;32-48;9-31;40-48
+17-20;24-38
+0-1;12-13;15-19;11-24;6-8
+20-22;17-18
+1-7;6-28;32-42;9-15;40-49
+15-19;17-24;11-17;9-19;5-8
+0-1;12-13;8-28;8-26;17-35;32-48;32-44;38-43;9-15;9-20;9-19;3-9
+1-9;15-18;17-28;17-25;6-34;16-17;32-48;7-13;9-31;9-19
+20-21;17-35;33-39;31-45;9-19;24-38
+14-15;13-33;33-40;6-25;9-20;18-23
+2-3;15-19;17-35;17-20;6-11;16-17;31-47;9-15;5-32;40-48
+2-3;27-28;8-20;17-36;32-42;5-7
+1-10;8-16;17-35;17-25;16-24;48-49;9-17;5-8;24-31;19-20
+6-7;6-17;9-30;40-48;3-9
+8-24;17-29;6-8;19-20
+17-35;11-38;6-34;9-15
+1-4;1-5;20-21;8-26;33-39;16-29;7-13
+17-35;11-24;31-47
+1-6;15-18;20-22;8-16;13-32;6-17
+1-8;1-11;17-25;32-42;9-31;3-9;19-41
+14-16;25-26;13-32;11-17;16-29;38-43;24-31
+14-16;17-28;6-8;40-49;24-45;19-41
+1-6;12-13;14-15;9-17
+13-32;17-18;33-40;6-28;9-20
+8-20;17-29;11-38;39-42;5-32
+14-15;15-19;31-37;5-7
+1-5;1-9;13-32;17-18;11-17;9-31;24-50
+1-6;16-24;5-32
+25-26;13-32;17-18;31-45;7-13;40-48;24-38
+17-24;31-47
+15-18;11-24
+1-9;17-20;11-38;9-17;40-48;24-38;19-51
+23-24;13-33;11-17;33-40;6-34;16-17;31-46
+0-1;13-32;31-37;40-49;24-31
+14-16;8-26;6-17;32-44;40-48;24-38;19-51
+1-5;17-25;31-45;48-49;38-43
+1-6;17-28;9-20
+12-13;14-16;8-26;13-33;17-29;39-42;48-49
+20-21;25-26;21-31;17-25;17-36;11-38;31-45;9-30
+1-6;1-8;27-28;17-36;9-15;9-30;9-17
+13-32;16-29;31-47;40-49;24-31;24-50
+0-1;27-28;8-16;17-35;17-18;6-28;31-37;9-15;9-20;24-45
+1-4;1-9;20-21
+1-6;12-13;14-15;15-18;8-20;8-24;17-35;17-18;11-24;6-34;32-44;5-32;19-41
+1-5;8-16;13-32;6-11;16-17;31-37;48-49;7-13
+1-8;8-26;13-33;17-20;17-28;6-7;9-20;40-49;19-41
+1-7;17-26;31-46
+6-17;16-17;32-44;5-7
+1-7;1-10;17-35;17-18;17-26;6-11;39-42;19-41
+15-19;23-24;8-24;13-33;17-28;17-26;16-24;32-48;32-44;40-48
+14-16;13-32;16-29;38-43;3-9
+14-15;21-31;33-39;6-11
+8-20;33-40;6-34;16-17;31-47;32-42;40-48;40-49
+14-15;25-26;8-28;19-20
+17-20;31-46
+1-7;21-31;17-24;11-17;16-24;32-48
+23-24;11-24;48-49;5-8
+1-9;17-35;17-18;17-24;17-29;6-28;6-25;16-29;31-37;9-20;3-9;19-41
+14-15;14-17;6-7;16-24;38-43;5-7;24-31;24-45
+1-6;8-28;18-23
+1-8;1-10;17-35;17-18;6-34;5-8
+2-3;14-17;17-28;11-17;6-8;9-20
+20-22;31-46;31-47
+0-1;8-16;5-32;24-38
+23-24;8-20;13-33;6-8;9-15;9-20;5-7;40-49
+14-15;8-26;33-40;38-43
+2-3;8-24;8-26;11-17;7-13;9-15;24-38;3-9
+2-3;1-10;14-15;20-21;17-36;6-25;9-20;18-23;24-50
+1-4;8-28;17-36;32-42;48-49;24-45
+1-5;1-7;8-28;21-31;17-29;31-37;9-20
+1-4;11-24;32-48;9-19;5-8
+1-4;1-5;1-11;9-20;9-19
+0-1;20-21;23-24;8-24;17-20;11-38;9-19;24-31
+8-20;13-33;9-19;5-8;18-23
+2-3;1-6;1-8;9-20
+2-3;1-10;12-13;14-17;31-46
+1-7;14-16;27-28;8-28;21-31;13-33;6-25;16-29;32-48;48-49
+8-24;17-25;9-20;9-31
+1-6;15-18;17-24;11-17;6-34;32-44;9-17;5-7;19-41
+23-24;17-29;39-42;38-43
+1-6;1-7;11-24;11-17;39-42;32-48;7-13;19-41
+2-3;1-5;20-22;9-20;9-30;24-50;19-41
+2-3;12-13;31-37;7-13;18-23;40-49
+1-6;1-10;8-16;8-24;11-24;6-25;16-17
+1-11;14-17;17-29;11-17;33-40;31-47;48-49;9-20
+8-26;17-35;6-11;39-42;24-31
+0-1;25-26;6-28;32-44
+2-3;14-15;23-24;9-15;9-20
+1-9;13-33;6-34;39-42;31-37;40-49;3-9
+1-7;6-7;6-17
+1-7;1-10;15-18;39-42;31-45;19-51
+1-11;15-18;25-26;8-16;24-50
+6-8;6-11;32-48
+15-19;20-21;21-31;19-20
+2-3;1-6;8-20;17-20;39-42;9-20;9-17;24-50
+0-1;2-3;1-4;1-8;1-9;12-13;20-22;17-25;17-36;11-24;11-38;33-40;6-8;6-11;19-20
+17-28;17-26;11-24;6-28;31-47;9-15;9-31;18-23;3-9
+1-4;1-8;27-28;13-33;17-26;16-24;24-50
+1-5;1-10;23-24;17-26;6-7
+1-8;1-11;14-17;48-49
+17-25;6-8;31-37;9-15;24-50
+15-18;17-25;16-24
+15-19;20-22;17-18;6-7;16-24;9-15;9-20;9-31;19-41
+12-13;25-26;8-16;17-29;33-39;6-7
+1-7;8-20;11-24;6-8;19-41
+39-42;38-43
+23-24;21-31;13-33;11-38;6-28;24-31;19-41
+1-9;15-19;17-29;48-49
+8-16;38-43;9-20
+12-13;20-21;7-13;5-32;5-8
+25-26;39-42;3-9
+0-1;17-20;11-38;33-40;6-8;32-44;40-49
+9-17;5-8;19-20
+8-20;17-24;17-29
+1-10;15-18;20-21;23-24;24-38
+2-3;15-19;17-29
+2-3;1-8;1-9;8-20;5-7
+6-17;9-20;5-7;24-31
+1-6;20-21;8-28;17-24;6-7;31-47;40-49;3-9
+14-16;20-22;17-29;32-44;48-49;9-15;9-17;18-23
+12-13;14-16;13-32;17-20;17-24;33-39;6-25;9-20
+2-3;1-5;14-17;13-33;11-24;9-30
+2-3;1-4;1-6;17-36;11-38;6-7;6-8;6-34;31-37;19-41
+1-4;15-19;17-36;9-20;40-49
+17-28;6-28;16-17;32-44
+8-26;17-20;33-40;6-28;39-42;16-24;3-9
+1-9;15-18;8-20;13-32;6-7
+1-11;12-13;25-26;8-16;17-35;32-44;9-20
+13-32;7-13;9-31;18-23
+1-6;14-15;17-28;6-25;31-37
+33-39;40-49
+14-15;21-31;17-29;16-24;48-49;7-13;5-8;24-38
+6-11;31-46;19-41
+1-10;17-20;31-45
+8-24;11-17;7-13;9-31
+1-9;13-33;17-24;11-17;33-39;33-40;6-25;6-34;9-20;9-17
+1-9;8-20;17-25;6-11;16-29;31-37;9-19;40-49
+1-11;17-25;9-19
+0-1;1-5;12-13;15-18;33-39;16-24;31-47;9-19
+17-29;9-20;9-19
+1-7;13-33;11-17;33-40;31-46;32-48;18-23
+6-34;31-45;32-42;7-13;9-31;24-45
+1-8;31-37;9-20;40-49;24-45
+13-33;17-35;11-24;6-25;6-8;16-29;31-47
+25-26;21-31;11-24;16-24;5-7
+1-10;39-42;32-48;5-7
+14-16;15-18;8-16;6-34;31-37;24-50
+12-13;8-16;6-7
+14-17;17-26;32-48
+1-6;1-7;8-16;17-26;6-17;6-11;16-17;48-49;9-31
+1-7;14-16;17-25;17-26;31-37;18-23;40-49;3-9
+1-4;15-18;17-36;9-15;24-45
+2-3;1-4;17-29;17-36;6-34;6-11;16-24
+1-4;1-8;8-24;17-20;17-36;11-38;6-7;32-48;18-23;24-50
+1-5;20-22;31-47;19-20
+1-8;1-9;6-8;9-31;40-49
+8-16;17-35;33-40;6-25;16-17;31-37;32-44;19-20
+8-28;17-20;17-28;16-29
+21-31;17-24;31-46;48-49;19-51
+1-10;20-22;21-31;11-38;16-24;31-46;32-42;38-43;9-20
+1-6;1-11;13-33;19-41
+14-16;15-19;6-7;48-49;9-15;19-51
+23-24;25-26;17-25;11-24;6-34;9-20;9-31;40-49;19-41
+8-28;13-33;31-37;9-15;24-50
+17-29;11-38;33-40;16-17;31-47;32-44;7-13;24-31
+0-1;1-9;6-7;9-20;9-30
+1-6;1-10;17-20;31-46;32-42;9-30
+1-5;1-11;21-31;9-17;40-49
+14-17;17-35;17-24;6-7;6-25;9-31
+0-1;1-8;25-26;17-35;17-26;17-36;39-42;16-29;38-43;9-20;40-49
+1-8;15-19;23-24;17-28;6-34;39-42;24-31
+1-6;20-21;25-26;17-20;16-29;32-42
+16-17
+14-15;8-16;17-25;6-7;6-17;5-7;3-9
+1-10;12-13;33-39;6-8;32-48
+1-6;14-16;15-18;8-28;8-26;17-20;17-28;17-36;11-24;33-40;6-25;39-42;16-24;9-20;19-20
+1-4;1-8;12-13;8-16;48-49;7-13;19-20
+1-9;8-28;6-11;31-45
+1-4;1-8;25-26;8-20;17-36;33-40;31-47;5-32
+20-22;21-31;9-20;9-17;24-31;3-9;19-51
+8-26;17-26;6-17;32-44
+1-8;1-11;14-17;17-28;11-38;31-46;9-15;5-8
+
+1-9;20-21;6-17;31-47;9-20;5-7;19-51
+13-32;17-25;31-37;5-8
+0-1;8-26;6-28;7-13
+14-15;25-26;11-38;16-17;32-42;9-20;24-50;3-9
+27-28;6-7;16-24;38-43
+8-16;9-17
+15-19;27-28;8-20;8-28;13-32;17-18;17-28;33-40;9-20
+0-1;14-15;8-16;6-11;16-29;31-45;31-37
+1-8;8-28;17-35;17-26;11-38;31-45;32-42;5-7
+27-28;21-31;6-28;39-42;48-49
+2-3;1-9;8-24;17-28;6-17;19-51
+2-3;14-17;27-28;6-11;16-24;16-17;32-42
+8-26;13-32;32-44;9-17;3-9
+23-24;27-28;17-25;11-24;6-34;18-23
+1-8;17-26;11-24;6-25;6-11;9-15
+27-28;8-16;17-26;11-38;38-43;24-45
+1-6;15-18;17-18;17-26;17-29;33-39;16-29;19-51
+27-28;17-35;6-25;16-24;24-38
+20-22;17-20;11-24;9-20;9-19
+1-9;17-20;11-17;6-25;38-43;19-20
+1-9;14-15;25-26;27-28;17-36;11-17;32-42;9-19;3-9;19-51
+1-6;14-16;23-24;17-24;11-38;16-29;48-49;9-19;24-38;24-31;19-41
+1-10;14-15;27-28;8-28;21-31;17-28;33-40;6-8;32-44;9-20;9-19
+1-4;15-19;17-24;6-34;38-43;9-31;9-30;24-45;19-51
+14-17;17-25;24-45
+1-5;17-24;17-25;11-17;9-20
+1-8;11-38;6-25;16-17;3-9
+1-6;1-11;8-24;17-24;32-48;32-42;5-7
+0-1;23-24;25-26;8-20;31-45;32-48;9-20
+1-10;20-21;8-28;31-37;9-31
+1-6;1-7;1-8;17-28;17-29;17-36;6-17;5-8;24-31
+1-7;21-31;17-18;17-28;11-24;11-17;7-13
+1-6;1-7;8-16;8-26;11-24;32-42;9-20
+13-32;6-8;6-34;48-49;19-51
+20-21;6-17;16-29;16-17
+1-11;33-40;39-42;5-8;24-38
+17-20;17-25;11-17;31-37
+17-25
+1-7;1-8;1-9;6-7;16-17
+1-7;15-19;19-51
+15-18;23-24;17-20;17-18;17-29;6-25;6-17;6-11;9-20
+1-7;13-33;33-40;9-31;40-49
+1-5;1-10;38-43
+27-28;9-31;24-31
+21-31;33-39;6-11;32-42;9-20
+2-3;27-28;8-24;31-47;40-49;24-50
+0-1;1-7;1-10;12-13;17-35;5-32;18-23;40-48
+15-19;27-28;13-33;17-36;5-8
+1-9;14-15;23-24;17-35;31-46;32-44
+1-4;14-16;14-17;17-25;31-37;38-43;19-51
+1-4;1-8;14-15;33-40;16-29;5-8;3-9
+2-3;15-19;20-21;33-39;18-23
+1-4;1-8;12-13;14-15;38-43;9-15;3-9
+12-13;15-18;8-16;17-18;6-25;39-42;32-42;40-48
+1-10;20-22;11-24;6-7;16-17;5-8;19-20
+24-50
+20-21;31-46;31-37;32-44;5-7;40-48;19-20
+1-5;1-6;1-9;21-31;6-28;9-15;5-7;40-49;19-41
+20-22;17-28
+1-11;8-20;6-34;6-11;9-15;9-20;19-41
+0-1;14-16;20-21;8-16;8-28;32-42;38-43
+14-16;14-17;8-26;17-28;11-38;6-8;6-17;48-49;24-45
+13-33;31-47;40-48;19-51
+1-4;1-5;1-11;15-19;17-20;16-24;31-47;32-48;5-8
+1-9;23-24;9-15;9-30;19-41
+1-11;17-26;6-17;32-42;9-30
+17-26;6-7;9-15;40-48;19-51
+17-26;11-24;11-38;6-28;39-42;31-47
+1-7;8-24;6-34
+0-1;1-8;1-10;15-19;17-18;33-40;31-46;18-23;40-48;40-49
+25-26;8-20;13-32;17-29
+12-13;14-17;8-26;17-35;6-25;38-43
+1-6;17-25;11-17;31-47;32-42;9-20;24-31;24-45;19-51
+1-9;8-24;6-7;6-28
+1-7;14-16;21-31;6-7;6-25;24-38
+14-16;33-40;31-45;9-15;5-8;24-38
+14-16;8-16;13-33;17-29;7-13;9-31;9-17;19-20
+1-4;15-18;17-20;17-36;5-32;40-48
+0-1;1-10;20-21;6-34;48-49
+1-5;12-13;25-26;13-32;11-38;33-39;6-7;19-41
+1-9;23-24;8-24;17-29;11-24;40-48
+27-28;8-16;8-28;17-20;11-24;33-40;32-42
+1-6;20-21;8-20;6-8
+1-11;15-19;27-28;21-31;6-7;31-46;32-48;38-43;40-48
+0-1;13-32;17-18;24-38
+12-13;27-28;17-24;6-8;6-11;31-47;9-19
+14-15;8-26;13-32
+20-21;17-35;33-39;6-7;6-28;32-44;9-20;9-19;5-8;24-31
+25-26;27-28;13-33;17-24;6-34;39-42;16-29;9-19;24-38
+1-5;15-18;17-35;17-28;6-11;16-24;31-37;9-19;3-9
+14-16;31-47;9-15;40-48
+1-7;1-11;14-16;8-28;17-25;6-7;31-46;9-17;24-38
+12-13;15-19;20-22;8-26;13-32;6-11;32-44;5-32
+14-15;11-24;39-42;31-45;32-42;40-48
+13-32;17-28;38-43;9-31;24-31
+8-16;19-20
+6-28;6-17;6-34;16-17;40-48
+1-8;1-11;20-21;8-24;13-33;6-17;9-15;40-49;19-51
+1-6;8-16;17-28;48-49;24-38
+1-5;12-13;8-28;17-20;6-11
+13-32;33-40;6-7;40-48;24-50;19-41
+15-18;17-18;9-31;24-38
+1-4;11-38;6-11;39-42;19-41
+1-4;1-8;23-24;8-20;8-24;6-7;6-28;5-8
+21-31;16-17;31-37;32-48
+1-4;1-8;14-16;15-19;17-36;6-11;32-48;32-44;32-42;48-49
+17-28;17-36;6-17;6-34;9-15;5-8
+20-21;11-38;6-7;31-47;9-31;9-30
+1-10;14-15;6-7;16-29;31-37;7-13;5-8;18-23
+1-11;8-24;17-24;17-25
+14-17;6-17;16-24;32-42;5-7;40-48
+8-28;8-26;17-29;33-40
+25-26;8-20;8-26;13-33;6-7;31-47;40-49
+14-15;6-28;6-8;48-49;9-15;40-48;24-50
+1-11;8-24;16-24;31-37;19-20
+13-32;17-28;17-26;17-29
+20-22;17-35;17-26;9-17;40-48;19-20
+1-9;8-16;17-26;5-32
+14-17;27-28;19-51
+0-1;8-16;11-38;6-8;6-11;16-17;31-45
+1-5;25-26;17-18;11-24;31-45;32-48;38-43;40-48
+21-31;13-33;33-39;16-29;32-48;24-31;19-41
+32-42;19-51
+8-20;6-17;40-48;19-41
+1-8;12-13;13-33;6-7;6-8
+1-7;8-16;17-20;6-28;6-25;48-49;7-13
+1-7;1-8;17-25;9-31;40-48;24-31
+11-24;33-40;39-42;18-23;19-41
+1-4;1-8;15-19;5-32
+23-24;17-28;33-39;32-42;24-50
+12-13;31-47;24-45;24-50;3-9;19-51
+1-4;1-8;8-28;13-32;17-36;16-29;32-44
+1-10;14-16;20-22;17-25;31-37
+12-13;13-33;6-8;6-34
+8-20;17-20;6-11
+6-28;16-24;24-38
+15-18;25-26;17-18;6-17;9-15;40-48
+1-6;12-13;14-15;8-24;17-25;16-24;5-32;19-41;19-20
+0-1;21-31;31-46;38-43;9-15
+1-11;8-16;5-8;40-48;24-31
+8-26;32-44;7-13;24-50
+15-18;20-22;13-32;16-24;5-8;24-45
+14-17;17-35;6-28;39-42;16-24;31-45;32-48
+14-16;8-24;32-48;5-8;40-48
+1-10;12-13;14-16;8-20
+11-24;31-37
+1-7;14-17;8-28;31-46;32-42
+1-7;8-16;17-20;33-39;9-17
+1-6;15-18;17-18;32-48;18-23;3-9
+15-19;17-29;9-30;5-7
+8-26;11-24;9-30;9-19;5-7;24-31;24-50
+13-33;31-37;31-47;9-19
+1-11;8-24;6-7;6-11;16-29
+0-1;1-5;1-6;17-24;6-25;48-49;9-19;5-32
+20-21;20-22;17-29;6-28;9-19;40-49;24-50;19-20
+14-17;17-24;9-15
+1-5;8-28;33-40;6-7
+1-4;1-8;13-32;17-24;17-36;5-32;18-23
+1-9;15-19;20-21;20-22;27-28;32-42;9-31
+1-8;1-10;1-11;14-16;21-31;31-46;7-13;24-38
+14-16;15-18;27-28;8-24;17-20;6-28;6-17;6-34;38-43
+0-1;1-8;8-16;17-36;11-17;32-42;9-15
+17-28;16-24;16-29;5-8;5-7;40-48;3-9
+17-25;32-48;32-42;48-49;9-17;19-51
+1-8;15-19;8-20;21-31;19-51
+12-13;14-15;17-20;17-26;33-39;19-41
+14-17;17-26;6-25;32-44;9-15
+8-16;17-24;17-26;6-17;16-29;19-51
+25-26;17-28;17-29;11-17;6-28;6-34;48-49;7-13;9-15;18-23
+20-22;11-38;31-45;32-42;5-32
+14-16;20-21;27-28;6-7;6-17;31-47;9-31;3-9
+15-18;6-28;16-17;48-49
+0-1;1-8;8-28;6-25;39-42;31-37;9-15
+1-6;8-20;33-40;31-46;5-7
+21-31;11-38;31-46;9-30;5-32
+1-8;13-33;11-24;11-38;31-45
+20-22;25-26;21-31;6-34;19-41;19-20
+2-3;25-26;17-28;17-25;32-44;32-42;7-13;24-50
+2-3;1-6;1-10;17-35;17-18;39-42;3-9
+15-19;6-25;31-46;9-15;18-23;19-51
+17-35;17-18;6-11;24-50
+1-4;17-20;32-42;24-31
+1-6;20-21;13-32;17-28;16-17;31-37;32-44;9-31;40-49;19-51
+2-3;14-16;15-18;6-8;48-49;9-17
+2-3;1-4;25-26;8-20;8-16;17-36;33-40;9-30;3-9
+1-7;1-10;20-22;33-39;6-11;32-48
+1-10;14-17;33-40;6-11;16-24;24-31
+1-10;1-11;12-13;17-28;17-36;11-38;6-34;9-30;24-38
+20-21;6-17;31-46
+1-7;1-9;15-19;21-31;11-24;6-28;31-45;5-7
+0-1;1-7;8-26;33-39;6-25;9-31
+2-3;14-15;14-17;16-17;32-48;5-32;24-50;19-41
+2-3;1-11;17-29;16-24;48-49;9-30
+25-26;27-28;8-28;39-42;16-29;7-13;9-17
+1-6;1-10;8-24;32-42
+0-1;23-24;8-20;17-28;6-8;5-32
+17-25;7-13;9-15;9-31;24-38;19-51
+6-7;31-37
+2-3;27-28;21-31;19-20
+1-9;8-28;16-24;16-17;9-15
+1-11;12-13;14-16;27-28;8-26;9-17;24-38;19-51
+17-24;6-28;6-17;24-31;3-9
+27-28;32-42
+13-33;17-24;24-38
+14-17;27-28;17-29;6-7;48-49
+17-24;6-34;31-37;31-47
+1-8;27-28;11-24;33-40;16-17;9-17;5-8;18-23;24-31;19-51
+15-18;17-18;17-24;17-25;33-39;6-28;39-42;32-44;19-41
+0-1;14-16;8-24;16-29;9-20
+1-8;17-29;17-36
+1-4;15-19;25-26;8-16;8-26;17-36;31-45;5-8;19-51
+1-4;12-13;23-24;25-26;27-28;8-26;21-31;17-36;39-42;32-42;24-38;24-45
+13-32;6-7;6-17;31-37;24-31;24-45
+14-17;20-22;6-34;5-8
+1-10;1-11;17-35;17-26;6-8;16-29;16-17;24-38
+17-26;31-47;32-44;9-15;9-19;5-32;5-7;24-50;19-20
+8-28;17-35;17-26;6-7;39-42;9-19;5-8
+20-21;8-24;33-40;9-19
+1-7;15-19;23-24;25-26;8-20;13-33;31-45;7-13;9-19
+1-5;14-16;13-32;17-18;6-28;6-25;6-11;40-49
+1-7;1-11;15-18;13-32;11-24;6-28;6-25;16-29;40-49;24-31
+17-29;24-38;24-45
+1-10;20-21;17-18;9-17;24-45;19-41
+13-32;6-34;32-44;32-42;38-43
+1-9;12-13;6-7;48-49;24-38;3-9;19-41
+13-32;17-29;6-17;24-31
+14-16;14-17;20-21;23-24;8-16;8-28;11-17;6-28;40-49
+1-11;14-15;31-37;24-38
+8-20;17-35;9-31;9-17;24-45
+14-15;24-45
+17-35;17-28;17-25;11-17;31-46;7-13;38-43;9-31;9-30
+12-13;13-32;13-33;17-35;33-40;9-30;5-32;5-7;24-38;24-45;3-9
+15-18;15-19;20-22;8-16;11-24;11-38;6-34;31-45;31-46;48-49
+0-1;1-5;13-32;17-35;11-24;32-48
+17-28;6-8;32-48
+14-15;27-28;13-32;17-29;6-11;9-30;18-23;19-20
+21-31;33-40;6-28;9-30
+1-4;1-10;27-28;17-36;31-46;31-37;38-43;19-20
+1-4;8-28;13-32;17-18;17-36;6-25;6-17;32-42;9-15;24-31
+14-16;27-28
+1-7;14-16;14-17;15-19;6-7;9-15;24-45
+48-49;9-30;9-19;24-45
+1-7;1-8;27-28;6-8;24-50
+1-5;20-21;25-26;33-39;16-29;32-44;32-42;19-41
+15-18;27-28;31-37;48-49;40-49;24-31
+1-9;1-10;1-11;11-24;6-8;31-45;31-46;38-43;19-41
+8-16;8-28;13-32;7-13
+17-24;33-40;16-24;9-31
+8-20;21-31;6-28;16-17
+8-26;17-24;31-47
+20-22;33-39;6-34;39-42;32-44;32-42
+20-21;8-24;5-8
+15-18;23-24;6-11;31-47;9-19;5-7;18-23
+1-11;17-18;6-7;6-8;31-46;7-13;9-17
+0-1;17-35
+1-9;20-22;6-28;5-8;5-7;19-20
+1-5;12-13;14-16;15-18;8-28;17-35;17-24;6-8;16-29;16-17;24-50
+1-10;23-24;9-15;24-45;19-20
+1-8;6-34;32-44;5-8;24-45
+1-5;25-26;17-29;6-25;32-42;9-15;9-17
+8-20;33-39;6-7;16-24;31-46;32-48;9-31
+0-1;1-7;5-8;18-23;3-9;19-41
+1-7;12-13;15-19;32-42
+1-9;1-10;15-19;20-21;17-36;6-17;9-17;9-19;19-41
+17-26;17-29;11-24;6-8;16-17;48-49
+1-9;1-10;23-24;17-26
+1-4;17-26;11-17;31-45;31-37;24-45;24-50
+14-16;17-20;17-26;16-24;32-42;9-31
+0-1;2-3;1-6;15-18;25-26;17-35;33-39;6-7;6-34;31-46;9-30;24-31
+2-3;1-5;8-26;17-36;16-29;31-47;5-32
+1-9;8-16;13-33;5-7;18-23
+11-24;31-45;31-46;31-47;9-30;5-32
+27-28;17-28;17-24;17-25;6-25;6-8;9-31;24-50
+1-5;14-17;8-16;21-31;40-49
+8-26;11-24;9-20;9-19;3-9
+14-15;17-20;11-17;6-28;16-17;32-42;24-38
+1-10;20-22;39-42;16-29;9-30;24-50;19-20
+13-32;6-34;6-11
+31-37;24-38;24-31;19-20
+15-18;8-20;8-16;8-26;17-20;11-24
+11-17;9-19
+9-19;5-7;18-23;24-38
+14-16;33-40;31-46;9-19
+17-20;6-11;9-19;3-9
+20-21;33-39;6-34;24-38
+0-1;1-6;11-24;11-38;6-25;31-46
+1-8;6-17;16-17;31-45;32-48;40-49
+23-24;17-24;11-17;6-7;31-37;32-48;18-23
+14-17;8-26;13-33;17-35;31-47;24-38
+1-4;1-6;1-7;20-21;17-24;17-25;6-25;16-24;32-44;24-50
+1-7;20-22;8-20;17-35;17-28;32-42;3-9;19-51
+1-4;1-5;1-7;15-19;17-36;6-7;9-31;19-41
+12-13;13-32;17-35;24-45;24-50
+5-7;24-31;24-45
+1-9;23-24;32-44;32-42;5-7
+14-16;17-28;17-25;6-7;6-25;19-20
+1-6;15-19;17-36
+20-22;11-17;6-17
+1-11;31-37;40-49
+1-6;14-17;8-26;9-15;9-31;19-20
+12-13;8-16;5-8;24-31
+1-9;25-26;13-32;31-45;32-44
+8-20;17-29;6-28
+1-6;15-18;8-24;33-39;6-17;6-34;32-48;5-8;24-45
+1-7;21-31;17-24;24-45
+0-1;1-11;14-15;15-19;11-17;6-25;16-29;7-13
+20-21;17-24;17-29;9-17;5-8;24-50
+1-6
+25-26;13-33;9-20
+2-3;14-17;25-26;8-24;8-26;13-32;16-24;5-7
+1-8;13-33;6-11;16-29;9-30;5-8;5-7
+14-16;20-22;8-20;17-29;33-40;32-42;48-49;38-43
+1-6;1-8;6-28;6-25;6-34
+0-1;1-5;6-8;6-11;16-17;31-37;31-47;5-8;24-31;24-45;19-41
+8-16;17-26;11-24;31-45;24-45;3-9
+1-10;15-18;20-22;17-26;16-24;19-20
+1-4;8-28;21-31;17-26;6-8;6-17;6-11;9-30;5-8;24-38
+1-9;17-28;9-31
+1-4;27-28;13-33;17-36;32-48;48-49;19-20
+1-4;1-9;8-16;6-28;6-8;48-49
+1-4;17-36;33-39;6-11;5-8;24-38;24-50
+1-11;12-13;21-31;17-24;17-29;6-34;32-44;5-32;40-48;24-31
+6-28;6-8;5-7;18-23;40-49
+14-16;8-28;17-36;11-24;6-17;16-24;32-42
+0-1;14-17;6-11;5-8;19-41
+23-24;8-24;33-40;31-37
+1-10;1-11;15-18;13-32;31-46;32-44;24-50
+1-5;13-33;17-35;33-39;6-11;16-24;31-47
+21-31;32-48;24-31
+15-19;17-25;17-29;6-34;7-13;9-31
+1-4;1-8;1-11;14-17;23-24;32-48
+8-28;6-7
+1-11;20-22;8-20;11-17;6-28;31-46;31-47;32-44
+1-6;20-22;8-28;21-31;13-33;5-32;18-23;24-50
+17-35;17-28;31-47;32-42
+0-1;14-17;8-16;33-39;39-42;16-24;31-46;32-44;7-13;24-38;3-9;19-41;19-51
+15-19;23-24;8-24;8-26;17-35;17-29;19-20
+1-9;15-18;16-29;31-37
+11-38;32-48;32-42;40-49;24-38;19-51
+11-24;33-40;6-28;31-45;32-48
+25-26;8-16;21-31;17-25;17-29;39-42;31-46
+14-16;14-17;31-46;24-31
+1-6;8-20;8-24;17-25;9-31
+1-4;1-5;6-8
+0-1;23-24;17-20;33-39
+1-10;8-28;13-33;17-24;9-17;9-19
+1-6;1-8;17-36;31-47;9-19;5-7
+20-21;8-24;9-19
+14-16;6-25;6-34;31-45;31-46;9-31;9-19
+0-1;14-16;15-18;17-24;24-45;19-41
+16-29;32-42;9-30;3-9
+20-22;8-20;17-24;9-30;9-17;40-48;19-51
+1-8;14-16;8-20;11-17;33-40;9-17
+1-6;17-25;17-29;33-40
+21-31;17-24;17-25;5-8
+1-11;8-28;39-42;9-31;40-48
+20-21;6-17;31-46;31-47;18-23
+1-6;27-28;8-16;8-26;13-33;6-25;32-44;48-49;9-30;40-49;24-31;3-9;19-20
+0-1;14-17;15-19;21-31;33-40
+17-25;6-17
+1-10;1-11;39-42;32-48;9-17
+1-6;15-18;17-35;17-26;11-38;31-45;31-46;5-7
+1-5;14-16;8-16;17-26;17-29;32-44;24-50
+14-15
+14-16;17-28;17-26
+1-8;17-26;11-24;16-17;48-49;38-43
+1-5;20-22;8-26;3-9
+14-17;23-24;11-38;6-25;9-31
+1-10;17-24;6-28;31-37;31-47
+1-4;1-7;12-13;13-33;6-17;39-42;31-46;7-13;9-15
+8-24;21-31;17-24;17-25;33-39;32-44;18-23;19-41
+14-17;33-40;9-15;40-48
+0-1;1-6;13-32;17-28;11-38;16-17;38-43;24-50;3-9
+15-18;8-20;16-29;9-31;5-32
+15-18;13-32;39-42;31-47;9-15;9-20
+8-28;17-36;39-42;31-45;31-46;40-49
+1-5;12-13;17-36;6-25;9-17;24-31;19-20
+1-6;20-21
+1-9;13-32;11-38;33-39;31-47;32-44;5-32;40-48;24-45;19-20
+8-16;21-31;17-29;18-23
+1-10;1-11;14-17;8-28;17-18;16-17;9-31
+20-21;25-26;17-28;32-48;40-48
+12-13;23-24;17-18;33-40;6-17;32-48
+1-6;8-20;13-32;11-24
+17-35;48-49;40-48
+1-11;14-15;25-26;6-34;16-17;7-13;5-7;24-38;19-51
+15-18;20-21;24-45
+12-13;17-29;32-48;9-31;5-32;24-31
+1-9;1-10;1-11;15-19;8-24;33-39;6-25;16-17;31-47;32-48;9-15;5-7
+1-5;1-7;20-22
+1-7;14-15;23-24;25-26;16-24
+17-29;7-13
+
+1-8;12-13;14-17;20-22;8-20;8-24;17-25;6-28;6-17
+17-18;32-42;38-43;9-30;24-45
+11-38;33-39;16-17;9-30;3-9;19-20
+1-5;17-25;31-45;32-44;48-49;24-31
+1-4;8-26;17-35;6-25;16-24;31-37;48-49;18-23;24-50
+23-24;8-28;17-24;39-42;9-17;5-32
+8-24;13-32;17-18;17-25;9-31;9-30;40-49
+1-8;1-9;8-28;31-37;7-13;5-7;24-38
+1-6;13-32;17-18;6-25;31-45;9-15;9-17
+15-19;20-21;17-28;6-34;32-42;18-23
+0-1;1-7;1-11;8-20;17-35;17-36;11-17;24-38;24-50
+1-7;14-17;8-24;21-31;11-24;16-24
+1-6;1-9;17-35;17-25
+1-10;6-7;16-29;24-50
+12-13;8-28;18-23;24-38
+12-13;17-20;17-18;17-25;11-24;11-17;9-20;19-20
+17-28;18-23
+1-11;15-18;23-24;13-32;16-24;31-37
+12-13;20-22;8-24;11-17;33-40;16-17;32-42;9-17;9-19;5-32;40-49;24-31
+2-3;1-5;20-22;13-33;17-25;17-26;9-31;9-19;5-8
+2-3;1-11;12-13;23-24;17-26;31-37;9-15;9-17;9-19;24-45;19-51
+1-8;17-28;17-26;33-40;6-8;24-45
+0-1;20-21;8-28;6-25;32-44;5-8
+14-17;48-49;40-49;19-51
+17-28;16-29;3-9;19-41
+2-3;1-9;32-42;5-8;24-31
+31-46;9-31;24-38;19-51
+2-3;14-16;6-17;6-34;18-23
+15-18;23-24;13-33;33-39
+17-29;11-24;6-25;31-37;31-47;7-13
+15-19;17-28;16-29;32-42;24-45
+0-1;1-4;17-35;32-48;48-49;24-38;24-45;19-41
+1-9;32-48;3-9
+2-3;20-22;21-31;31-46;5-7
+2-3;8-28;8-24;17-18;17-36;24-38
+1-8;23-24;17-36;31-37;5-8;18-23
+17-25
+8-28;21-31;13-32;13-33;6-8;19-20
+1-10;20-22;25-26;33-39;32-48;32-42;24-45
+12-13;15-19;17-28;39-42;31-47;24-31;24-45
+1-11;15-18;8-28;13-32;17-20;6-8;3-9
+1-9;17-29;6-28;6-25;6-17;31-46
+1-5;8-20;8-26;17-28;11-38;39-42;31-37;38-43;9-17;19-20
+13-33;17-35;16-29;48-49
+17-18;31-47;19-20
+1-10;14-17;13-32;33-39;31-45;9-30
+1-7;15-19;13-33;11-17;32-44;32-42;9-30;19-51
+1-7;1-11;11-38;6-28
+1-6;8-24;16-29;9-20
+1-6;17-20;17-29;31-37;9-17
+1-8;14-17;8-28;24-31
+8-16;11-24;6-7;6-11;16-29;31-46
+15-18;8-24;8-26;11-17
+8-26;31-45;19-51
+1-7;1-9;15-19;20-22;17-18;17-25;40-49
+1-6;1-7;23-24;25-26;8-28;6-25;31-37;9-17
+17-29;11-24;11-17;6-28;32-44
+14-17;17-20;17-28
+20-22;6-17;32-42
+8-20;40-49;24-31
+1-4;1-8;14-15;39-42;16-17;48-49;19-51
+2-3;1-5;17-28;6-8;31-46;40-49
+2-3;14-15;14-17;31-37;9-17;24-50
+1-7;25-26;6-11;19-20
+1-9;1-11;8-24;13-32;17-36;33-39;32-44;7-13;9-31
+8-20;17-36;33-40;19-20
+12-13;14-16;17-18;17-25;6-11;5-32;40-49
+6-25;16-17;9-15;19-41
+13-33;17-29;6-17;31-46;31-37;9-17;24-45
+0-1;1-10;20-21;8-24;13-32;17-28;17-26;6-11;9-15;19-41
+11-17;33-39;39-42;16-17
+14-17;17-24;17-26;33-40;32-42;9-31;3-9
+8-26;21-31;13-32;17-26;6-17
+8-26;17-24;17-29;19-51
+1-5;1-9;14-15;20-21;11-24;5-7
+17-24;16-17;32-48
+1-8;15-18;6-25;32-48;19-51
+8-16;17-25;9-31;24-31;24-45
+17-28;24-45
+6-8;32-42;38-43;24-38
+20-22;8-28;17-20;17-29;16-29;32-48
+20-22;17-26;31-45;31-47
+17-28;33-39;31-45;32-48;5-8
+1-9;14-17;20-21;11-38;6-34;32-44;9-30;9-19;24-31;24-50
+0-1;1-4;1-7;14-17;15-19;33-40;31-37;31-47;9-17;9-19;19-41;19-20
+1-4;21-31;17-29;16-29;9-19;5-8;24-45
+8-20;17-35;11-24;31-45;7-13;9-15;9-19;24-45;24-50;19-41;19-20;19-51
+1-4;17-36;11-24;6-28;9-30;24-45
+1-8;15-18;8-28;17-36;6-25;32-44;9-15;9-30;5-8
+1-9;17-29;5-7;19-51
+23-24;17-28;6-8;16-17;31-37;9-17;5-7
+1-11;6-34;39-42;32-42;48-49;18-23
+23-24;17-26;9-31;9-17
+1-7;8-26;17-18;6-17;19-51
+8-16;21-31;6-8;31-47;3-9
+
+25-26;8-20;32-44;24-50;19-51
+25-26;17-29;31-37;24-38
+2-3;20-22;21-31;11-17;32-44;9-15
+13-33;33-39;33-40;31-47
+11-38;6-7;6-34;39-42;16-24;9-15
+1-11;12-13;13-32;17-25;5-7;3-9
+1-9;23-24;13-33;17-35;17-20;17-18;17-25;6-25;6-11;16-17;9-17;5-7
+0-1;1-8;15-18;17-26
+2-3;8-16;8-28;11-17;31-37;32-42;5-32;18-23
+2-3;27-28;8-24;17-35;17-18;6-7
+8-20;39-42;16-17;19-20;19-51
+1-6;27-28;21-31;17-20;33-39;24-50
+1-9;6-28;32-48;32-42;7-13;3-9
+14-16;13-32;6-25;6-34;32-48;38-43;40-49;19-51
+0-1;2-3;14-16;8-24
+2-3;1-6;17-20;16-29
+8-26;33-40;6-7;6-11;18-23;24-31;19-41
+1-4;1-5;16-17
+2-3;17-18;17-36;33-40;6-17;24-45;3-9
+1-4;1-8;13-33;17-36;11-17;6-28;31-45;32-48;24-38
+6-11;32-42;48-49;9-31;19-51
+2-3;1-8;1-10;20-21;20-22;6-7;6-17;16-24;38-43;5-7;3-9
+1-9;14-17;23-24;8-20;5-7;24-38
+21-31;17-35;17-18;17-26;6-34;31-37;19-51
+17-25;17-26;17-36;6-8;32-42;24-50
+17-35;17-18;17-26;11-17;16-24;31-47
+17-26;11-24;31-46;9-31;19-51
+1-5;1-9;6-8;48-49;9-15;3-9
+0-1;14-15;15-18;17-20;6-7;16-29;24-38
+9-20
+2-3;20-22;11-38;6-7;16-29;40-49;24-45
+8-16;33-39;24-31
+1-6;1-11;12-13;8-20;13-33;17-28;11-17;7-13;9-30;18-23;19-20
+6-25;6-34;31-46;38-43;9-17
+23-24;33-40;16-17;31-45;31-37;5-32
+1-9;11-24;9-15;5-8;5-7
+1-5;32-44;48-49;38-43;9-30;24-45;3-9
+2-3;14-15;21-31;17-28;9-30
+14-17;20-21;6-17;31-46;31-47;5-8;24-31
+17-35;6-28;6-25;9-31
+1-6;1-7;15-19;27-28;13-33;32-42
+1-7;14-15;8-28;17-18
+15-18;20-22;23-24;17-25;6-34;9-17;5-8;24-50
+14-16;25-26;8-16;31-37;31-47;3-9;19-41
+2-3;32-44;7-13
+1-4;1-6;1-8;17-18;33-40;6-8;16-29;16-17;32-42;5-8
+1-5;8-26;33-39;9-31;24-45
+14-17;8-26;17-20;16-24;31-45
+11-24;6-25;6-8;5-8
+2-3;1-11;15-19;23-24;8-24;21-31;17-29;6-11;31-37;5-32
+2-3;1-9;8-16;11-38;32-48
+17-36;6-17;31-46;24-31;3-9;19-20
+24-50
+1-7;15-18;9-19;19-51
+8-20;17-35;17-24;9-19
+0-1;1-11;8-24;9-19;24-45;24-50
+1-6;8-26;17-24;11-38;33-39;6-8;6-11;31-45;48-49;9-19;40-48;40-49
+2-3;14-15;23-24;32-42;9-17;9-19;24-31
+2-3;8-28;6-25;31-37;9-15;3-9
+12-13;20-21;17-25;17-29;7-13;19-51
+1-6;1-10;20-22;11-24;31-45;31-47
+14-17;17-18;11-24
+8-20
+0-1;33-39;6-7;39-42;31-45;9-31
+2-3;1-8;20-21;33-40;48-49
+23-24;17-20;31-37;32-42
+1-9;6-11;32-44;40-48;19-51
+25-26;8-16;21-31;11-38;6-8;31-46
+14-16;20-21;13-33;6-34;39-42
+14-16;19-20
+1-4;14-16;15-19;9-15;9-17
+13-32;17-18;11-17;31-37;19-20
+1-10;8-24;6-25;6-17;9-15
+1-8;14-15;14-17;8-20;8-28;17-20;33-39;32-42
+15-19;25-26;21-31;6-11;48-49;9-20;5-8;24-31
+8-16;17-35;17-26;31-46;9-30;3-9
+1-8;1-9;25-26;17-26;17-36;6-17;16-29;48-49;5-7;19-41;19-51
+12-13;15-18;8-26;17-35;17-26;33-40;32-42;38-43;9-15;5-8
+20-22;8-24;17-20;11-24;6-8;6-34;32-48;9-31
+21-31;13-32;17-28;11-24;6-25;9-17;24-50;19-51
+15-19;23-24;27-28;13-33;9-30;5-8;40-49
+8-28;16-24;31-45;32-44;7-13;9-30;24-31;3-9
+1-5;1-7;1-11;27-28;17-20;17-25;19-51
+0-1;1-7;12-13;14-16;14-17;20-22;25-26;8-24;48-49;5-32;5-8
+15-19;17-28
+2-3;1-4;17-36;11-38;6-28;31-47;3-9
+8-26;40-49
+27-28;8-26
+1-10;23-24;21-31;17-18;17-28;17-29;6-25;39-42;31-37;5-32
+15-18;8-16;6-17;32-42
+12-13;17-18;11-38;5-8
+1-6;25-26;19-20
+1-5;25-26;13-32;13-33;17-29;11-24;31-47;24-50
+15-19;20-21;8-28;17-35;39-42;32-48;32-42;5-8
+8-16;13-32;16-17;5-32
+1-6;1-7;8-26;17-35;6-34;16-24;31-45;40-48;24-50;3-9
+2-3;12-13;8-26;11-24;31-37;9-15
+1-7;14-16;6-28;32-42;9-31
+14-16;14-17;20-22;6-8;40-49
+1-4;1-8;39-42;40-48
+1-5;1-6;11-24;16-24
+1-8;13-33;17-36;11-38;6-11;32-42;19-41
+13-32;17-29;17-36;40-48;24-31;24-45
+1-9;20-22;24-45
+8-20;21-31;13-33;6-25;16-29;31-45;31-47
+1-11;8-28;17-28;6-17;16-17;31-37;40-48
+23-24;17-29;11-38;32-44;9-15;18-23
+6-7;6-11;32-48;9-20;5-8;24-45;19-41
+25-26;13-32;33-39;39-42
+17-20;6-8;32-44
+6-11;16-17;38-43;9-31;9-17;40-49
+1-10;8-16;8-28;24-38;19-41
+0-1;17-25;16-29;3-9
+15-18;6-34;32-42;24-31;19-41
+17-29;31-47;32-48;5-7;24-38
+1-8;15-19;27-28;33-39;6-28;32-48;9-30
+8-20;17-35;6-8;6-17;31-45;32-44;9-30
+27-28;17-28;11-24;16-29;32-42;24-38
+1-11;20-21;17-35;39-42;7-13;9-30;24-45;19-20
+1-10;20-21;17-35;17-29;9-19
+6-17;9-17;9-19;24-45
+0-1;20-22;17-18;16-17;38-43;9-19
+14-16;21-31;6-34;16-29;31-46;32-44;9-30;9-19;40-49
+1-5;14-15;8-28;17-18;17-28;17-24;17-26;17-29;16-24;9-15;24-50
+1-4;15-18;25-26;17-26;33-39;38-43;5-32;18-23;19-51
+13-33;17-18;17-26;11-24;11-17;6-28;6-8;32-42;40-48
+8-20;11-24;5-7
+16-24;16-29;31-46;7-13;5-7;19-51
+13-32;6-7;6-8;9-31;9-17;40-48
+14-16;15-18;6-8;16-17;19-51
+0-1;14-17;23-24;24-45
+1-6;1-11;8-16;8-28;17-36;6-34;31-45;31-47;32-48;48-49;24-45
+25-26;9-15;40-48;19-20
+25-26;6-17;32-42;3-9
+1-9;1-10;24-31
+1-6;14-16;8-26;17-25;38-43;5-32;40-48
+1-11;15-18;20-22;27-28;8-16;13-32;6-17;5-8
+1-10;20-22;8-28;17-28;6-8;24-38
+13-32;31-46;38-43
+2-3;33-40;6-28;6-11;31-37;5-7
+14-17;8-20;17-18;31-45;9-31;5-32;5-7;40-48
+14-16;11-38;6-11;9-20;5-8;19-20
+1-5;1-8;1-9;17-28;32-42;5-7;3-9
+1-11;20-22;17-29;33-39;16-24;24-31
+1-8;6-11;16-17;24-50;19-41
+1-6;13-32;17-18;18-23
+14-17;8-26;6-25;6-8;31-45;32-42;40-49;19-41
+0-1;31-46;31-37;32-48;48-49;5-8
+17-20;32-44;9-31
+1-6;23-24;6-8;6-34
+1-4;11-17;6-11;31-45;38-43;19-20;19-51
+33-40
+0-1;2-3;1-8;23-24;25-26;8-16;17-25;33-39;6-7;6-17;48-49;7-13;38-43;9-17
+13-32;17-20;17-25;11-38;6-28;31-46;19-20
+2-3;1-10;15-19;17-35;6-17;6-11;32-44;9-30;19-51
+2-3;13-32;17-24;48-49;5-7
+0-1;8-28;21-31;11-17;31-47;7-13;24-31
+20-21;20-22;23-24;8-16;17-20;17-24;17-36;6-11;31-37;5-32;24-50;19-51
+8-20;6-34;31-46;40-49
+1-5;12-13;14-15;27-28;17-25;32-44;9-30
+1-7;15-18;23-24;8-16;17-35;17-36;6-7;6-28;9-31
+1-7;17-28;31-46;32-42;7-13
+17-35;32-44;9-30;24-50
+2-3;12-13;17-28;19-51
+1-6;14-16;23-24;21-31;6-25
+1-10;14-16;20-21;25-26;17-35;11-24;16-24;31-47;32-42;5-32;5-7;40-48;24-38
+11-17;33-39;48-49;24-50;19-51
+1-11;27-28;8-20;17-35;6-34;39-42;18-23
+11-38;32-48;9-17;40-48;24-38
+0-1;12-13;27-28;17-20;16-24;32-42;40-49;19-51
+14-15;17-28;17-25;7-13;19-20
+1-9;15-18;27-28;11-17;33-40;38-43;40-48;3-9
+1-10;14-15;25-26;8-16;8-28;17-26;6-25;31-46;9-31;19-20
+1-9;8-24;8-26;17-26
+6-34;6-11;32-44;9-20;5-8;5-7
+23-24;17-25;6-34;39-42;31-37;24-38;24-45
+1-5;21-31;6-7;7-13;24-45;24-50
+1-4;20-22;8-28;6-8
+8-20;31-45;38-43;9-31;24-31;19-51
+12-13;14-17;8-24;11-38
+1-9;17-36;6-7;5-7;40-49
+15-19;17-28;11-17
+1-7;15-18;33-39;9-19
+1-10;6-7;39-42;9-19;24-45
+13-32;17-35;11-38;6-8;32-42;9-31;9-19;24-38;24-45;3-9;19-51
+1-9;8-24;8-26;17-18;9-30;5-32;24-50
+23-24;6-8;31-37;40-49;24-31
+1-10;8-20;17-28
+12-13;25-26;11-17;7-13;19-20
+1-6;14-17;20-21;8-28;17-35;11-24;6-17;6-11;32-44
+8-24;17-20;11-38;6-25;19-20
+33-39;16-24;31-45;7-13
+21-31;6-34;6-11;31-37;32-42;48-49;40-49;24-50;3-9
+1-5;1-6;1-8;14-15;23-24;8-16;11-17;6-8;5-7
+1-7;15-18;15-19;33-40;39-42
+1-7;11-38;6-11;16-24;16-29;9-30;19-41
+11-17;6-25;19-51
+0-1;1-5;6-7;32-44;9-30;5-8;24-31
+1-6;8-20;17-25;31-47;18-23
+0-1;27-28;8-16;17-20;17-24;24-31
+21-31;32-44;32-42;7-13;9-30;5-32;19-41
+1-4;1-5;14-15;20-21;8-24;11-38;9-17;5-8;24-38
+12-13;8-26;17-29
+17-20;18-23;40-49;19-51
+1-4;17-28;5-8;24-38
+14-16;15-18;13-33;6-28;6-8;5-7
+1-6;11-38;9-15;3-9;19-51
+1-10;17-29;33-40;6-28;6-11;39-42;16-24;16-17;9-20;5-8;24-45
+0-1;17-20;48-49;24-38;19-20
+12-13;33-40;6-17
+1-7;1-10;6-34;16-24;31-47;19-20;19-51
+1-5;8-26;17-36;11-24;39-42;16-29;31-37;5-32;24-38
+20-22;23-24;17-20;24-50
+1-9;14-17;8-16;17-28;6-8;19-51
+1-11;17-25;24-38
+17-25;6-25;5-32
+20-22;6-8;9-17
+1-6;1-10;15-18;15-19;21-31;31-37;38-43;24-31
+2-3;20-22;8-28;16-29;24-45
+17-35;17-29;6-17;31-45;31-46;7-13
+12-13;6-34;31-47;32-42;48-49;5-32;19-51
+25-26;8-16;13-33;17-20;17-26;18-23
+8-26;17-26;7-13
+1-9;13-32;17-26;9-15;9-17;19-51
+1-6;23-24;13-33;11-38;33-40;31-37;32-44;5-32
+17-28;32-48;38-43;9-15;24-38
+12-13;14-17;15-19;8-28;17-25;31-46
+0-1;1-5;17-25;11-17;6-25
+1-4;1-6;1-8;13-32;11-24;9-31;24-38
+2-3;12-13;23-24;25-26;11-24;32-44;48-49
+15-18;8-20;21-31;33-40;32-44
+17-35;17-29
+14-16;32-42;5-7;24-38
+1-6;12-13;14-15;13-33;17-35;16-17;31-37
+1-5;1-11;27-28;17-36;6-25;6-11;7-13
+20-22;23-24;8-16;17-35;11-38;32-44;48-49;9-30;18-23;24-50
+14-17;11-24;16-17
+1-6;25-26;6-11;16-24;3-9;19-41
+8-20;8-28;13-32
+1-11;17-36;32-42;38-43;40-49
+0-1;1-9;14-15;8-24;21-31;33-39;16-17;32-42;9-17;24-38
+8-26;17-29;17-36;11-38;33-40;6-11;31-45;32-48
+1-6;33-39;32-48;9-30
+14-15;23-24;21-31;17-28;6-7;31-37
+1-7;14-16;6-8;31-47;5-7;19-41
+1-7;1-11
+8-28;13-32;33-40;9-19
+12-13;11-17;6-7;6-8;16-17;9-31;9-19;24-45
+1-10;17-35;17-28;9-19;24-45;19-20;19-51
+2-3;1-5;12-13;16-24;9-19;19-20
+8-26;17-20;17-24;31-47;3-9
diff --git a/examples/failures/failures-0.08 b/examples/failures/failures-0.08
new file mode 100644
index 0000000..8465ab0
--- /dev/null
+++ b/examples/failures/failures-0.08
@@ -0,0 +1,1000 @@
+15-18;20-22;27-28;21-31;17-29;6-17
+16-29;9-15;24-31
+1-8;23-24;8-28;11-24;11-17;16-17;5-7
+1-8;20-21;16-24;5-7;3-9
+16-24;18-23
+13-33;17-35;17-29;5-32;24-45
+12-13;14-15;14-17;16-17
+1-8;23-24;17-18;11-24;33-39;31-47
+20-21;25-26;17-20;17-36;38-43;19-51
+15-18;17-28;9-17
+1-11;12-13;8-26;5-32;24-50;19-51
+1-11;33-39;31-37;7-13;40-48;24-31;19-20
+0-1;20-22;27-28;17-25;6-7;6-17;6-11;19-41
+33-40;31-37;32-44;9-17;9-19;18-23
+17-35;17-20;5-8
+1-10;14-15;21-31;17-24;6-25;6-17;16-24;31-47;9-17;5-8
+1-8;12-13;14-17;20-21;17-18;6-25;16-24
+1-10;8-28;8-26;6-34;9-15;9-17
+0-1;1-9;25-26;17-35;5-32
+14-16;17-25;31-37
+15-19;8-28;17-18;17-28;11-24;9-31;9-17;40-49;24-38;19-51
+17-20;31-45;3-9
+12-13;27-28;8-16;8-24;8-26;33-39;6-28;31-37;9-30;19-20
+1-6;1-11;25-26;17-25;17-36;6-17;6-34
+1-9;12-13;20-22;21-31;17-26;33-39;33-40;16-24;16-17;32-44;32-42;9-19;24-38;3-9
+1-5;1-11;14-15;8-28;17-18;17-36;11-38;6-7;9-19;40-48;19-20
+1-9;1-11;20-22;8-24;17-36;9-15;9-19
+1-11;14-16;17-20;17-36;16-17;5-8
+1-7;1-11;14-16;17-26;17-36;6-34;9-31;9-17;19-51
+14-17;20-22;8-24;8-26;17-35;17-26;6-7;6-11;32-42;24-50
+1-4;1-8;27-28;8-20;17-24;6-11;31-37;32-44
+1-10;12-13;15-18;20-21;6-28;39-42;31-47;32-44;24-50
+8-16;17-20
+1-9;33-39
+14-15;6-34;40-49;3-9
+1-6;14-15;20-21;8-24;17-35;17-26;11-17;33-40;6-7;16-24;16-29;31-37;32-44;38-43;9-31;9-19
+1-5;1-6;6-8;9-31;19-20
+2-3;1-11;20-21;8-20;13-32;13-33;17-28;17-24;6-7;6-8;16-24;31-46;32-42
+12-13;17-35;17-20;17-24;17-25;5-32;18-23
+15-19;17-18;6-34;32-42;24-31
+1-7;1-11;23-24;8-28;17-28;31-46;24-45;19-51
+1-11;17-29;6-8;16-29;31-46;9-15
+1-6;17-35;6-8;9-30
+1-10;8-24;17-36;6-8;16-17;31-47;5-8;24-50
+12-13;15-19;20-21;8-28;17-36;16-24
+1-4;17-28;11-38;6-34;16-17;9-15;24-38;24-45;24-50;19-41
+2-3;8-26;13-33;17-20;33-40;32-48;32-44;5-32;18-23
+8-26;33-40;16-29;32-42
+8-28;13-32;33-40;16-17;31-47;24-50
+20-22;17-20;33-39;6-7;9-30
+0-1;1-5;14-17;20-21;9-15;5-7;19-41;19-20
+8-28;17-24;31-47;9-17;5-7;24-45
+1-8;23-24;27-28;17-25;32-44
+1-9;15-18;20-22;25-26;8-26;17-29;32-48;32-44
+14-16;31-46;48-49;24-38;19-51
+1-10;14-15;8-28;13-33;11-24;6-28;31-46;31-47;7-13;9-31;5-32
+21-31;17-35;6-28;31-46;32-42;48-49;9-17
+17-28;17-24;17-36;38-43;19-41
+20-21;8-24;17-36;16-24;18-23;3-9
+14-17;17-24;17-26;17-36;16-24;5-8;5-7
+17-26;5-8
+1-4;1-5;12-13;8-24;13-33;17-35;16-29;19-20
+1-4;1-8;20-22;17-20;17-28;16-17;19-51
+8-16;6-25;31-45;9-31
+0-1;1-6;14-17;13-32;9-15;9-19;24-50;19-51
+8-26;17-20;17-24;11-17;9-19
+15-19;11-38;48-49;9-19;24-50
+0-1;1-7;1-10;21-31;6-25;6-34;31-37
+27-28;8-24;17-36;11-17;3-9
+17-18;39-42;9-15;9-17;18-23
+2-3;8-28;21-31;17-28;11-17;16-24;9-30
+0-1;20-21;17-29;33-39;6-11;16-24;31-47;7-13;9-30
+12-13;8-24;6-25;6-11;40-49;3-9;19-41
+1-7;1-11;14-15;15-19;8-28;32-44;9-15;24-45
+1-11;27-28;13-32;32-44;5-32;19-20
+2-3;1-11;15-18;6-8;31-47;32-44;9-31
+0-1;1-11;8-20;11-17;16-17;32-44;48-49;38-43;3-9;19-51
+1-7;15-19;20-22;8-26;17-18;24-38
+2-3;1-4;20-21;16-17;7-13;38-43;5-8
+15-19;17-35;33-39;31-45;32-48;48-49;5-7;19-20
+1-4;1-8;17-35;17-24;11-17;6-7;9-17;24-45
+23-24;17-28;6-28;39-42;16-17;38-43
+17-18;16-29;31-37;3-9
+14-15;15-18;8-20;31-47;40-49
+20-21;8-26;11-38;11-17;5-7
+1-6;1-7;1-11;12-13;31-46;31-37
+1-6;1-11;17-18;17-28;17-24;33-39;39-42;31-46;7-13;5-32;19-41
+1-11;11-38;11-17;31-46;31-37;24-50;19-20
+1-5;14-16;8-20;21-31;19-51
+1-5;1-7;25-26;8-24;17-20;17-26;32-48;24-50
+1-5;1-10;1-11;12-13;5-32
+0-1;20-22;17-26;11-17;6-11
+1-6;20-21;8-16;17-29;33-39;33-40;6-11;16-24;5-7;24-50
+1-8;6-11;32-48
+0-1;1-10;14-17;17-35;5-8;24-50
+14-16;23-24;13-33;17-18;17-36;6-34;9-31;9-30;3-9;19-41
+14-16;8-20;17-25;6-28;6-25;16-29;9-30;24-50
+1-6;12-13;15-18;23-24;8-28;17-28;17-29;33-39;6-28;6-25;16-17;9-15;9-30
+15-19;17-35;11-24;48-49;5-32;24-38;24-50
+0-1;1-5;20-21;25-26;8-16;9-17;5-7;3-9
+1-5;8-16;13-33;17-20;6-17;16-29;48-49;5-7
+1-9;13-32;11-24;6-7;9-15;18-23;40-49;19-20
+1-11;8-16;17-24;17-29;5-7;40-48
+1-6;14-17;15-19;17-25;33-39;6-17;32-44;9-31;40-48;24-38;24-45
+1-6;25-26;6-7;31-47;32-44;32-42
+1-9;17-18;32-44;9-19;24-31
+12-13;17-29;32-48;32-44;9-19;19-41
+1-5;11-17;33-39;6-28;16-24;24-45
+8-20;17-35;17-36;24-31;19-51
+25-26;8-28;17-36;18-23
+1-4;1-6;1-10;8-24;39-42;31-46;9-31
+1-4;13-33;17-28;31-46
+1-6;14-15;6-17;31-47;40-49;19-51
+1-10;15-18;8-26;9-31;5-8;24-45;19-51
+1-7;1-9;12-13;20-22;8-28;48-49;7-13;9-15;9-17;24-45
+8-20;8-24;13-32;5-32;40-48
+20-21;48-49
+23-24;6-7;6-28;6-25;6-8;39-42;9-17;5-7;40-48
+14-15;15-19;8-28;17-28;17-24;6-25;5-7
+17-35;9-31;5-32;24-31
+14-15;15-18;25-26;8-26;17-26;11-24;39-42;31-45;9-30;5-8;24-38
+1-9;17-26;16-17;7-13;5-8
+1-6;15-19;20-22;8-20;11-17;6-8;6-11
+1-6;20-21;17-28;16-29;9-15;3-9
+15-19;31-45;31-47
+9-17;18-23
+1-7;13-33;17-20;17-24;17-36;31-45;48-49;5-7;24-50
+20-22;8-26;17-36;33-40;9-31;5-32;5-7
+1-6;8-20;21-31;17-36;33-40;6-17;48-49;40-48
+1-6;13-32;17-35;17-36;11-17;33-40;6-8;38-43;9-15;19-51
+1-4;1-7;14-15;25-26;11-24;6-8;6-17;16-24;31-47;32-48;9-17
+20-21;16-24;38-43
+12-13;15-19;8-24;6-17
+1-5;23-24;21-31;17-29;11-24;11-38;11-17;16-29;31-47;32-48;5-7
+2-3;1-5;15-18;33-39;6-17;31-37;7-13;5-7;24-38;19-41
+2-3;1-7;1-9;11-38;11-17;6-28
+20-22;23-24;8-24;17-25;38-43
+20-21;8-28;11-17;6-17;19-20
+17-29;6-25;6-8;16-29;38-43;9-15
+12-13;14-16;17-35;17-20;6-17;18-23
+2-3;1-10;14-15;14-17;25-26;11-17;33-39;31-37
+1-8;8-28;6-17;31-45;32-44;5-7;24-38;19-51
+0-1;15-18;6-28;6-11;32-44;7-13;5-7;40-48
+17-35;17-36;6-25;6-11;40-48
+1-4;8-16;8-28;13-33;6-11;16-24;32-42;9-30;18-23;40-48
+1-4;1-8;12-13;25-26;8-16;13-32;17-28;6-34;9-30;9-19
+13-32;17-28;6-25;7-13;24-31
+27-28;8-24;11-24;6-7;31-45;31-46;9-31;9-19
+8-20;17-35;17-24;11-38;16-29;31-46;9-15;9-19
+31-46;24-45;19-41
+1-8;20-22;23-24;8-24;13-33;33-40;48-49;7-13;9-17
+0-1;14-15;8-26;17-26;11-38;33-40;6-34;16-24;31-45;5-8;19-51
+20-21;17-26;11-24;16-24;16-29
+6-17;9-17;5-8;19-51
+16-17;31-37;32-42;9-31;24-45
+25-26;33-39;9-17
+2-3;1-6;8-26;16-17;9-15
+14-16;13-33;17-25;6-28;9-15;24-45;3-9
+1-9;1-11;20-21;13-33;17-35;6-17;6-34;16-29
+1-5;1-11;12-13;15-19;17-36;6-7;16-17;40-48
+0-1;2-3;1-11;17-29;17-36;31-37;32-48
+1-9;1-11;14-15;8-20;17-36;33-39;9-17;40-49
+0-1;17-36;6-25;6-34;31-37;31-47;48-49;9-31;18-23
+14-16;14-17;8-26;17-35;17-20;6-25;16-17;31-47;7-13;9-17;24-31;24-50
+14-16;21-31;11-17;48-49
+17-28;16-29;5-7;24-50
+1-10;23-24;8-20;33-39;31-45;31-47;9-17;24-31;24-45
+15-19;13-32;17-35;6-34;39-42;31-37;24-50;19-41
+1-5;15-19;8-26;11-38;11-17;31-45;31-37
+2-3;1-6;1-8;1-9;14-17;8-26;13-33;11-38;31-46;32-44
+1-6;21-31;17-29;31-46;32-44;9-31;40-48;24-31;24-50
+25-26;8-24;13-32;17-24;11-24;31-45;31-46;32-44;18-23;19-51
+14-16;15-19;27-28;17-25;6-17;31-46;32-44;40-49
+14-15;20-21;6-34;31-37
+2-3;1-6;1-11;13-33;16-24;48-49;9-30;3-9
+1-6;1-7;1-11;11-38;6-11;9-30
+1-9;6-11;31-45;18-23;24-31
+2-3;1-4;14-17;15-19;33-39;6-28;16-17
+15-18;17-36;33-40;7-13
+0-1;1-7;24-31;24-45
+8-20;6-8;16-29;16-17;32-48;5-8;40-49
+1-5;1-10;6-8;5-8;24-38
+17-28;17-26;16-17;24-45;19-41
+1-7;14-17;15-19;23-24;17-26;32-48;24-31;19-51
+1-9;11-24;3-9
+20-22;23-24;8-20;9-19;18-23;24-38
+1-11;15-18;6-25;6-17;48-49;9-15;9-19;19-20
+1-7;1-11;15-19;8-28;8-26;6-25;6-8;9-19
+1-11;20-21;27-28;8-24;39-42;32-48;3-9
+2-3;1-11;17-25;11-24;6-34
+20-21;25-26;16-24;9-31;19-51
+25-26;17-18
+1-5;1-9;14-17;8-28;32-48;7-13;9-15
+8-20;17-28;11-38;5-32;19-51
+18-23;24-45
+1-4;1-10;27-28;17-18;17-29;6-28;31-37;31-47
+12-13;25-26;8-16;17-29;6-34;6-11;16-17;32-44
+1-7;14-17;23-24;11-24;6-17;6-11;31-45;9-31;9-17;5-32;3-9
+20-22;8-20;8-16;13-33;6-7;16-29;32-44;48-49
+1-9;23-24;17-18;31-47;7-13;9-17;18-23;24-38;24-45;19-20
+15-18;8-16;6-34;16-17;31-45;32-44;48-49;24-50
+17-28;11-38;11-17;6-7;6-25;6-34;31-46;19-20
+1-11;23-24;17-28;9-15;40-49
+1-5;11-24;16-24;32-48;9-30;19-51
+13-33;6-7;24-38
+27-28;8-26;9-31;9-17;5-32
+21-31;6-25;31-45;31-37;32-42
+0-1;20-22;8-16;8-28;17-25;6-25;6-11;5-8
+17-24;6-11;31-46;5-8;18-23
+8-24;39-42;16-24;31-46
+25-26;33-40;6-7;48-49;9-17;19-20
+2-3;1-4;27-28;8-26;21-31;13-33;17-25;17-26;6-28;6-25;3-9
+15-19;23-24;13-33;11-24;6-11;31-46;32-48;9-15;5-8;24-31
+13-32;17-26;11-24;6-28;6-34;16-29;7-13;40-49
+1-7;14-15;18-23
+1-6;1-8;14-16;17-35;17-28;16-17;7-13;38-43
+23-24;25-26;11-24
+1-5;8-26;21-31;17-18;17-29;11-38;16-17;38-43;9-31;19-51
+6-7;16-29;31-45;31-37
+33-39;16-17;38-43
+8-24;17-20;17-28;6-28;32-44;48-49;3-9
+14-17;31-46
+11-17;6-17;31-47;9-30;24-31
+2-3;1-7;8-26;6-11;32-42;5-7
+1-7;8-26;17-25;31-46;18-23
+1-8;6-34;31-45;9-30;19-20
+1-9;1-11;8-16;21-31;17-36;33-40;18-23
+0-1;1-11;8-16;17-28;17-25;17-36;9-19;3-9
+1-11;8-16;17-36;9-19
+1-4;1-8;23-24;17-24;9-19
+0-1;17-29;16-24;16-29;16-17;9-15;9-31;24-31
+1-5;15-18;48-49;7-13
+1-5;1-7
+1-8;1-9;20-22;13-33
+1-10;27-28;8-28;17-35;6-11;16-29;18-23;24-45
+12-13;14-16;14-17;11-38;11-17;33-39
+0-1;17-29;11-38;6-11;39-42
+1-11;13-32;33-39;6-11;31-37;24-31;19-41;19-20
+1-6;1-11;20-22;8-28;17-20;17-25;11-17;9-31
+1-11;8-24;21-31;13-33;17-35;31-37;7-13
+12-13;18-23;24-45;3-9
+14-16;23-24;8-28;11-24;31-45;48-49;38-43;9-17;5-32
+2-3;1-7;14-16;14-17;25-26;17-36;33-39;32-42;19-51
+1-6;23-24;17-20;17-28;17-24;17-26;17-36;32-48;48-49
+1-6;14-15;20-21;17-18;17-25;17-26;17-36;11-17;31-37;5-8
+1-4;15-18;8-20;17-26;6-25;31-45;32-44;9-31;5-8
+1-8;8-20;32-48;32-42;5-32;40-49;24-31
+1-4;1-7;20-22;11-24;32-44;19-41
+1-8;25-26;11-17;16-29;32-44;38-43;40-48;24-50
+1-9;1-10;17-18;5-32;18-23;40-48
+1-6;31-45;38-43;24-50
+2-3;14-17;15-19;8-20;13-32;17-24;9-30;40-49;24-38
+1-8;1-11;21-31;7-13;38-43;9-30;24-45
+1-5;1-11;15-18;6-11;16-17;31-47;9-31;9-30
+14-15;8-26;17-28;6-28;6-11;38-43;9-15;9-17;40-49;3-9
+1-6;12-13;15-19;6-28;16-17;48-49;24-38
+1-9;8-24;17-20;11-38;39-42;31-47;38-43
+2-3;15-18;6-7;6-34;16-29;3-9;19-41
+25-26;8-28;13-33;33-40;5-8;18-23
+1-7;14-16;13-32;17-24;11-17;16-24;31-46;5-8
+2-3;14-17;20-22;8-24;11-38;6-8;16-24;31-46;7-13;9-15;9-17
+1-4;6-7;31-46;9-31;40-48
+1-4;1-6;1-8;11-24;31-46;19-20
+2-3;1-7;1-10;13-33;17-25;17-36;32-48
+1-5;14-17;23-24;32-42;24-31;24-45
+1-5;1-10;6-8;6-11;7-13;38-43;40-49
+1-8;14-15;8-26;6-7;6-8;6-11;16-24;16-29;9-19
+1-6;1-7;1-9;12-13;15-18;17-18;17-24;16-24;9-19
+1-4;20-21;13-33;11-17;9-31
+0-1;1-6;1-11;13-33;17-28;6-34;39-42;32-48;9-31;9-19
+1-11;8-28;17-35;17-20;16-29;31-47;48-49;19-51
+1-11;6-7;7-13;40-48
+1-7;1-8;20-22;6-8;40-48;24-38
+8-26;5-7
+1-6;15-19;8-28;13-33;17-35;17-26;6-34;16-24;31-45;31-47;9-30;24-45;24-50
+1-5;1-9;17-26;17-29;11-17;19-20
+1-5;1-8;27-28;8-20;16-17;5-32;24-50
+1-4;25-26;21-31;17-25;11-38;3-9
+1-4;1-9;15-19;6-8;31-45;7-13
+1-5;1-6;1-10;14-15;20-22;8-16;8-24;21-31;18-23;24-31
+1-6;1-10;13-33;17-28;6-25;6-8;6-34;9-15;19-51
+1-6;20-22;17-20;11-38;6-25;6-17;5-7
+15-18;8-16;6-28;48-49
+0-1;1-9;25-26;27-28;21-31;17-35;31-46;24-50
+15-19;6-11;16-29;31-45;31-46;9-17;5-8
+20-22;17-29;6-17;6-34;31-46;9-15;40-48;19-41
+1-5;1-7;32-44;7-13;40-48;19-20
+1-5;25-26;6-17;32-44;40-49
+15-19;17-28;33-39;6-7;16-29;32-48;32-44
+14-15;8-28;17-35;17-29;32-44;5-7;19-51
+1-6;25-26;8-16;8-26;33-39
+1-7;1-8;8-16;8-26;21-31;17-18;17-24;17-29;33-40;6-34;24-38
+1-6;8-16;7-13;9-17;24-31
+1-6;15-19;8-16;6-8;39-42;16-29;18-23
+1-9;20-22;8-28;17-35;17-20;17-36;33-39;48-49
+1-7;12-13;14-17;17-29;17-36;33-40;31-47;9-15;24-31;19-41
+0-1;1-10;15-18;8-20;8-26;17-36;33-40;48-49;40-48;24-45
+16-17;9-17;5-7;40-48
+1-6;21-31;5-7;40-49;24-45;19-20
+23-24;17-20;17-28;33-39;16-17;31-47;7-13;3-9;19-51
+6-25;31-37
+12-13;39-42
+2-3;1-9;12-13;8-24;17-25;11-38;6-28;6-34;16-17;24-31
+25-26;8-26;9-17
+15-18;20-21;21-31;13-33;17-26;16-24;31-45;9-31;9-30;24-45
+13-32;17-28;17-26;6-25;24-31;3-9
+1-9;17-25;17-26;38-43;9-19
+27-28;31-47;7-13;9-19
+1-5;1-10;12-13;8-20;13-32;9-19;5-32;24-31
+1-5;1-8;1-9;14-17;9-15;40-49;24-38;24-50;3-9;19-41
+0-1;2-3;1-4;1-10;17-28;33-39;38-43;5-8;40-48
+1-4;1-7;20-21;21-31;11-38;16-24;31-37;9-31;19-20
+27-28;17-18;11-17;6-28;9-17;24-31;19-51
+1-10;6-11;16-24;31-45
+2-3;17-35;17-18;6-17;6-11;39-42;5-7;24-45;3-9
+8-20;8-26;13-33;5-7
+0-1;6-17;5-32;18-23
+25-26;6-7
+15-18;23-24;17-35;17-20;17-18;6-17;6-34;32-44
+2-3;20-21;17-28;32-44;9-31;19-41;19-51
+23-24;11-24;6-25;16-17;31-47;32-44;48-49;40-49
+17-24;5-7
+14-15;25-26;8-24;13-32;13-33;17-35;17-18;11-38;33-40;6-17
+0-1;1-7;6-7;6-28;31-45
+1-8;17-20;11-24;33-40;6-34;31-47;9-30;5-8;40-48
+0-1;1-9;1-10;27-28;6-25;6-17;31-46;40-48
+1-4;27-28;8-24;33-40;7-13;38-43;9-30;24-38;24-45
+1-10;20-21;17-25;31-46;9-31
+1-9;8-20;6-28;31-46;32-48;32-42;38-43
+12-13;8-28;6-28;31-46;24-31;19-41;19-51
+17-24;6-28;31-46;24-38;24-50
+2-3;14-17;5-7
+15-19;27-28;8-28;8-26;11-38;48-49;24-38
+20-22;13-32;13-33;11-24;6-8;16-24;31-45;31-37;7-13
+0-1;1-4;8-20;13-33;6-17;6-11
+1-8;21-31;17-26;33-40;16-24;32-44;5-7;24-38
+14-15;23-24;21-31;17-26;6-7;6-34;39-42;16-24
+8-16;17-28;17-26;9-17
+11-24;33-39;6-28;31-37;24-45;3-9;19-20
+1-7;15-19;17-25
+0-1;1-6;1-10;31-45;9-31;40-49
+1-11;12-13;15-18;8-24;17-20;17-18;31-47
+1-11;14-16;8-16;13-33;11-17;5-32;5-8
+0-1;17-24;17-29;6-7;31-46;32-44;5-8;24-45
+1-4;14-15;15-19;20-22;8-28;31-46;32-44;9-15;19-51
+2-3;1-4;1-6;8-26;11-17;31-46;32-44;18-23
+25-26;8-26;13-33;17-20;17-26;17-29;11-24;11-38;11-17;6-8;32-44;32-42;48-49;5-7;24-31;19-41
+21-31;17-20;17-36;33-40;32-42
+12-13;23-24;8-20;13-32;11-38;33-39;16-24;38-43;9-31;9-19;19-20
+0-1;1-7;15-18;25-26;27-28;8-28;17-29;6-7;16-24;9-19
+14-16;23-24;17-25;6-25;6-11;16-29;7-13;9-30
+13-32;17-24;11-24;11-38;18-23;40-49
+1-10;8-26;19-41
+1-11;14-17;11-17;33-39;6-28;48-49
+1-9;12-13;20-21;20-22;25-26;6-25;16-17;38-43;9-17
+27-28;8-20;8-24;13-33;6-7;6-25;5-32
+1-5;1-8;11-17;32-42;5-8;24-38
+8-16;8-28;32-44;9-15
+0-1;6-34;31-37;9-30;5-7
+25-26;8-24;13-32;17-28;17-24;33-39;39-42;9-15
+16-29;9-17
+0-1;12-13;17-36;11-17;16-29
+1-4;1-6;23-24;8-20;19-20
+8-16;8-28;13-33;6-7;6-17;48-49
+8-16;17-24;17-25;6-34;32-42
+17-35;11-38;33-40;6-17;32-44
+1-6;1-7;1-9;15-19;17-26;6-8;32-44
+1-6;20-21;8-20;21-31;17-26;11-24;32-44;9-31
+1-9;12-13;15-19;17-28;17-24;9-30;5-32
+16-24;32-48;32-44
+0-1;1-5;33-40;6-34;40-49
+12-13;15-18;27-28;8-16;16-29;18-23
+2-3;14-15;15-19;6-17
+8-24;21-31;39-42;31-45;5-32
+1-5;25-26;8-20;6-17;31-46;19-20
+0-1;20-21;13-32;6-34;16-29;16-17;48-49;9-31;5-8;19-20
+8-24;17-35;17-20;39-42
+14-16;14-17;17-36;11-24;31-45;31-46;31-37;9-15
+0-1;1-4;1-7;1-8;23-24;6-28
+14-15;14-17;23-24;8-20;11-38;11-17;33-40;6-7;31-47;9-30;40-48;24-38
+11-38;9-30
+20-21;16-24;16-29;9-17;19-51
+13-32;32-48;32-42;38-43;5-7;18-23;24-31
+20-22;17-28;17-29;7-13
+1-5;12-13
+13-32;33-39;48-49;24-45
+6-25;6-17;6-34;9-15;19-20
+1-5;1-11;39-42;31-37;32-44
+2-3;1-6;1-11;17-35;11-24;33-40;6-7;6-17;32-44;9-19;5-7;24-31
+1-6;1-11;25-26;33-40;16-17;31-37;32-44;9-19;5-7
+14-15;8-16;17-36;6-17;40-49;19-51
+1-11;12-13;23-24;33-39;33-40;39-42;32-44;5-7;18-23
+1-8;6-34;31-46;32-42
+20-22;27-28;17-35;17-20;6-17
+8-20;21-31;6-7;3-9
+1-6;1-9;8-26;13-33;16-29;31-37
+1-8;6-8;39-42;32-48;18-23
+2-3;12-13;17-25;17-26;11-24;6-34;6-11;48-49;5-7
+1-5;14-17;15-19;17-20;17-26;17-36;6-11;7-13
+8-20;17-28;31-45;40-49;19-20
+2-3;1-6;15-18;27-28;13-33;17-24;31-37;31-47;24-45
+1-6;1-9;14-16;15-18;23-24;11-24;33-39;33-40;6-25;6-8;9-30
+20-21;8-16;8-28;32-42;19-41
+1-9;1-10;1-11;14-15;15-19;8-16;6-8;6-34;16-24;40-49;19-51
+1-11;8-16;17-35;17-25;16-24;31-45;7-13
+8-24;39-42;31-47;32-48;9-30;5-7;18-23
+2-3;1-8;17-18;9-30;5-7;40-48
+14-17;23-24;8-20;21-31;11-24;40-48
+8-24;17-35;17-24;6-34;5-8
+2-3;12-13;23-24;6-8;48-49
+0-1;1-4;1-8;1-9;8-16;17-18;17-28;6-28;6-8;9-15;5-32;19-20
+1-4;14-17;8-16;6-28;19-41
+1-6;1-7;14-16;8-26;17-18;17-25;33-40;31-45;32-48;9-30;9-19
+14-15;15-19;8-20;8-26;17-35;6-25;5-7;24-50;19-20
+17-29;6-34;16-29;9-17;5-7;18-23;24-38
+1-7;1-8;15-18;17-18;17-24;17-25;9-31;24-50
+0-1;12-13;9-15
+1-10;20-21;27-28;33-39;33-40;39-42;32-44;9-17;24-50
+14-16;15-19;11-38;6-7
+14-16;20-22;8-26;17-18;48-49;7-13;18-23;24-50
+13-32;31-45;31-37
+14-15;23-24;13-33;17-28;17-24;40-49
+2-3;1-9;15-18;8-24;21-31;17-35;11-17;39-42;16-17;40-48;19-20
+1-4;20-21;23-24;17-20;33-40;6-7;6-28;9-31;9-30;9-19
+14-15;23-24;27-28;13-32;17-18;16-24;16-29;5-32;24-45;24-50
+0-1;8-28;11-38;16-24;31-45;38-43;19-51
+17-25;11-17;31-37
+14-17;13-33;17-35;16-17;7-13;19-51
+1-4;1-8;21-31;17-26;9-30;9-19;5-32
+1-10;12-13;17-26;11-24;38-43;9-19
+20-21;17-29;6-7;31-45;9-30;9-19;24-38
+2-3;6-11;32-48;32-42;48-49;9-30
+8-20;8-28;17-18;17-28;6-11
+0-1;14-15;18-23
+1-4;21-31;13-32;6-28;31-37;9-30
+1-5;1-6;39-42;32-48;9-15
+23-24;8-28;17-35;6-28;6-34;24-50
+14-17;8-24;11-24;33-40;16-24;19-20
+17-28;33-40;16-24;32-48;40-48;24-50
+2-3;27-28;8-20;8-16;11-38;33-39;6-25;32-44;32-42;5-7;18-23;40-48;24-38;19-51
+25-26;8-16;8-28;8-24;13-33;6-25;6-8;39-42;31-37;32-44;24-50;3-9
+1-10;1-11;17-35;11-17;6-8;32-48;48-49;5-32
+1-11;14-15;11-38;7-13;9-31;5-8;24-50
+1-11;17-24;16-17
+2-3;1-4;15-18;15-19;8-20;13-32;11-17;33-39;31-46;24-50
+1-4;1-9;1-10;17-28;17-25;17-29
+1-10;25-26;8-20
+13-33;17-18;16-17;31-46;31-37
+1-7;17-36;31-45;5-7;24-50
+2-3;13-32;17-25;17-36;11-17;6-8;16-29;5-7;18-23;19-41;19-20
+1-5;32-42;19-51
+17-18;19-20
+1-9;14-17;20-21;6-28
+12-13;14-15;20-22;23-24;8-20;17-29;6-28;32-48;40-48;24-45
+1-10;1-11;14-16;13-33;6-34;48-49;9-15;9-30;5-32;18-23;40-48
+1-11;14-16;15-19;17-18;17-28;6-11;9-30;5-7
+1-10;1-11;14-17;8-26;11-24;6-17;9-30;5-8;5-7
+1-6;15-19;13-33;17-18;17-24;33-39;39-42;32-44;9-15;18-23;24-45
+0-1;2-3;1-11;17-29;38-43;9-30
+8-20;8-24;17-29;31-47;24-38
+15-18;15-19;20-21;8-28;13-32;17-24;17-26;38-43;19-51
+1-5;17-26;11-38;16-17
+39-42;32-48;38-43;5-32;19-20
+14-16;11-17;16-29;16-17;5-7;18-23;40-49
+1-6;14-15;17-18;17-36;33-40;6-25;31-46;3-9
+17-36;33-40;6-25;6-34;16-17;31-46;32-48;24-38
+12-13;14-17;25-26;33-39;31-37;31-47;32-44;9-17
+1-9;15-18;8-28;39-42;32-44;40-48
+14-17;8-26;16-17;31-45;40-49;19-20
+1-10;8-26;17-18;6-7;6-17;31-45;32-48;9-15;9-19;18-23;40-48
+1-6;14-16;23-24;17-20;11-24;6-28;32-42;9-19
+1-5;1-6;1-10;14-16;27-28;21-31;17-35;6-28;6-34;9-31;9-19;24-45
+0-1;1-5;14-16;23-24;25-26;8-20;6-28;5-8;5-7
+17-25;11-17;6-7;5-7;3-9;19-20
+8-26;17-24;31-37;9-17
+0-1;1-8;1-9;17-35;17-20;6-11;5-32
+25-26;11-17;33-39;24-50
+17-25;33-39;16-29;18-23
+1-4;8-20;13-33
+1-9;14-16;15-18;11-38;11-17;6-8;6-34;16-24
+2-3;1-8;17-35;17-29;39-42;16-17;32-48;32-42;7-13;24-38;24-31
+0-1;20-21;8-26;17-20;40-48
+15-18;8-16;17-36;16-17;9-30;40-48;19-51
+1-10;32-48;9-15;18-23;40-48
+40-48;19-51
+8-20;33-40;31-45;38-43;40-48;19-41
+12-13;14-17;20-21;27-28;13-33;17-20;17-18;11-24;33-40;6-8;32-48;19-20
+33-39;33-40;7-13;3-9
+1-9;16-29;18-23;24-38;19-20
+15-18;17-35;17-26;31-45;5-8
+1-7;12-13;27-28;8-24;6-8
+20-22;8-24;17-18;17-26;39-42;32-44;9-31
+15-19;25-26;21-31;13-33;17-20;17-26;31-37;32-44;9-17
+2-3;1-6;1-8;14-15;27-28;6-25;6-34;5-32;40-49
+1-4;20-21;17-35;17-28;6-25
+1-10;1-11;17-18;17-36;6-28;31-45;7-13;9-17
+2-3;1-7;1-9;1-11;17-36;11-38;19-51
+17-20;17-36;31-37;9-15;9-17;18-23;3-9
+1-6;23-24;8-20;17-35;6-34;31-46;32-48;48-49;9-31;5-7
+21-31;17-28;17-36;31-37;31-47;32-42;5-32;24-50
+15-19;17-18;7-13;18-23;19-20
+1-5;14-15;20-22;17-18;11-24;5-8;40-48;24-38
+20-21;11-24;31-46;24-50;3-9
+17-24;11-38;16-24;31-47;38-43;9-15;9-17;24-31
+0-1;15-18;33-39;6-28;31-45;40-49;24-50;19-51
+2-3;1-6;12-13;14-15;21-31;17-28;11-24;5-8
+15-19;17-25;17-29;11-38;39-42;16-29;9-31;18-23;24-50
+0-1;1-8;31-47;9-30;24-38
+1-7;1-11;8-24;13-32;33-39
+1-6;1-10;1-11;14-17;6-34;32-48;9-19;24-31
+1-6;1-11;27-28;17-20;17-24;6-7;6-11;9-19;19-20
+1-10;1-11;15-18;8-24;17-29;9-19;24-45
+14-17;13-33;17-28;11-17;9-15
+1-11;21-31;6-17;48-49;9-15
+2-3;17-35;17-18;6-25;9-31;19-41
+8-24;6-25;6-17;39-42;32-48;18-23
+20-22;17-29;9-17;5-8
+2-3;1-6;1-7;14-15;23-24;25-26;5-8
+1-5;27-28;8-28
+31-45;32-42;3-9
+17-26;11-38;6-34;16-29;31-46;18-23
+1-6;1-8;8-28;13-33;17-20;17-26;6-28;31-46
+1-11;14-16;20-21;25-26;8-16;13-32;17-35;17-18;6-7;5-7
+17-25
+1-10;14-17;8-26;39-42;16-24;7-13
+17-24;33-39;31-45;31-37;5-32;3-9
+1-8;15-18;20-22;8-28;13-32;6-34;24-38;19-51
+0-1;1-7;1-9;17-18;6-8;6-17
+21-31;6-7;32-44;19-41
+8-24;8-26;13-32;31-45;32-44;32-42;7-13;18-23;3-9
+1-8;12-13;14-16;20-21;20-22;8-20;33-39;6-11;16-24;31-37;5-7
+1-7;14-16;8-16;6-34;16-24;31-47
+1-5;14-17;25-26;17-24;17-29;17-36;39-42;24-38;24-45
+15-18;23-24;11-24;6-8;9-31;40-49
+1-11;8-26;13-32;17-36;11-24;6-17;38-43;3-9
+27-28;17-20
+0-1;14-15;17-18;6-8;6-17;16-17;32-48;19-20
+12-13;15-19;11-24;5-7;19-41
+1-10;14-16;17-29;6-25;5-7
+2-3;1-7;9-17
+20-22;27-28;17-18;33-39;33-40;24-45
+17-35;11-38;31-45;19-41
+25-26;11-17;6-34;31-37;32-48;32-44;24-31
+1-4;1-6;1-8;20-21;8-24;17-28;16-24;3-9
+1-7;14-15;8-28;21-31;17-29;11-24;6-28;48-49;40-49
+1-10;23-24;25-26;16-29;32-42;9-31;40-49
+1-5;23-24;17-35;17-24;17-36;11-17;6-28;9-31;24-45
+1-5;8-24;17-36;6-28;32-42
+0-1;1-8;14-17;6-7;6-25;6-34;31-37;19-20
+1-7;17-18;11-17;9-19
+20-22;17-25;17-29;6-17;9-15;9-19;19-41;19-20;19-51
+17-26;31-47;32-48;9-19;5-32;5-8
+14-17;21-31;17-26;11-17;32-44;7-13
+1-7;20-22;13-32;32-44;24-38
+17-28;17-29;16-17;31-46
+2-3;1-9;15-18;11-38;39-42;31-47;24-38
+1-8;12-13;20-21;32-48;7-13;9-15;9-31;18-23;24-38
+12-13;20-21;27-28;11-17;33-39;6-7;6-17;6-11;31-37;38-43
+1-5;12-13;14-15;27-28;17-25;16-17;32-42;48-49
+17-18;9-30
+8-16;6-17;31-47
+1-4;23-24;8-16;8-26;17-28;11-17;6-7;31-47;40-48
+1-5;1-11;8-24;33-40;6-17;40-48
+0-1;1-10;1-11;14-17;23-24;8-20;17-20;17-18;17-36;33-40;6-28;31-45;9-17;24-38;19-51
+1-9;20-22;27-28;8-28;17-36;11-24;11-17;6-28;5-32;40-49
+23-24;27-28;8-16;8-24;13-32;17-29;6-11
+1-7;8-26;17-35;17-36;11-38;6-11;9-15
+1-8;14-15;14-17;13-33;11-17;33-39;33-40;6-25;6-11;31-45;32-42;40-49
+1-10;8-20;13-32;17-28;5-32;24-38
+1-5;25-26;33-40;6-25
+48-49;19-41
+31-37
+1-11;17-28;17-25;6-28;6-11;16-17;31-47;5-8
+1-6;1-11;8-26;17-29;32-48
+1-11;12-13;21-31;33-39;6-8;39-42;31-37;38-43;9-31;19-41;19-20
+1-11;13-32;13-33;11-17;40-48;40-49
+1-8;1-9;14-15;8-28;17-18;7-13;38-43;40-48;19-20
+0-1;1-4;1-10;14-17;23-24;17-28;17-29;6-34;32-44;5-32;24-38
+1-4;15-18;8-26;13-32;11-17;6-7;32-48;32-44;18-23;40-49
+1-8;31-37;3-9;19-20
+1-9;1-10;23-24;6-8;32-44;24-45;24-50
+1-7;20-21;17-28;11-38;32-44;38-43;9-15;5-8
+1-8;23-24;27-28;6-34;31-47;32-44;7-13;9-17
+12-13;14-16;8-24;17-26;17-36;11-24;6-28;38-43;19-51
+8-28;17-26;17-36;11-38;33-39;31-37;5-32;24-31
+1-7;14-17;17-24;6-8;40-48
+2-3;8-24;17-35;17-28;24-45
+11-38;6-25;6-34;18-23;24-31
+15-19;27-28;8-28;11-17;6-17;9-30;19-20
+14-15;21-31;33-39;31-37;9-30;40-49
+13-33;17-20;17-18;11-38;11-17;16-29;31-46;48-49;5-7;19-41
+1-11;14-16;14-17;20-22;8-26;6-17;9-19;24-31
+1-11;13-33;17-28;17-29;11-17;9-19;24-45
+1-11;15-18;15-19;17-24;6-34;9-19
+1-4;1-10;17-25;48-49;24-38;24-31;19-41
+1-4;12-13;11-17;6-7;16-17;31-37;32-48;7-13
+0-1;1-8;1-10;20-21;8-26;17-29;16-29;48-49;18-23
+1-7;33-40;16-17;31-45;9-31
+1-9;23-24;11-17;33-40;6-34;6-11;40-48;24-38
+27-28;33-40;32-42
+1-8;17-24;17-25;6-7
+14-15;8-28;39-42;31-46;9-15;18-23;19-20
+12-13;11-24
+1-6;1-9;1-11;11-17;31-45;19-41
+1-6;1-11;20-22;8-24;13-32;17-20;3-9
+1-5;1-8;14-17;27-28;8-16;21-31;13-33;17-35;11-24;33-39;6-34;9-31;5-7
+1-9;1-11;27-28;31-47
+14-16;8-16;13-32;17-24;39-42;24-45
+1-10;14-16;8-28;11-38;48-49;9-30;5-8;40-49;24-50;3-9
+1-6;20-21;25-26;11-17;32-44;5-8;24-45
+0-1;13-32;16-29;31-47;32-44;9-15;18-23;24-50;19-20
+2-3;1-4;1-7;8-28;17-20;17-25;6-25
+1-4;14-17;33-39
+20-22;27-28;21-31;17-26;11-17;6-7;6-25;9-31;40-48;24-50;19-41;19-20;19-51
+1-9;25-26;17-26
+1-6;14-16;15-18;23-24;8-16;17-24;17-26;31-46;31-47;9-17;24-50
+0-1;1-6;1-7;14-16;8-16;13-33;17-35;11-17;31-46;7-13
+2-3;1-5;20-21;17-20;17-29;31-37;5-32;24-50
+13-32;17-25;6-7;6-11;32-48;3-9
+1-11;11-17;6-17;32-42;18-23;24-45
+1-7;1-11;8-20;21-31;33-39;6-34;16-17;48-49;9-15;9-31;5-8
+1-11;14-17;24-31
+17-28;11-17;16-17;3-9;19-41;19-51
+12-13;15-18;27-28;6-7;6-17;16-24
+1-5;14-15;27-28;8-28;17-24;5-32;40-48
+1-5;1-7;1-8;20-22;17-20;19-20
+1-4;14-17;17-35;17-28;40-49;24-45
+1-10;8-16;8-26;13-33;6-25;31-47;3-9
+1-4;1-6;8-28;8-24;33-40;6-28;9-31;9-17;18-23;24-31
+1-8;12-13;15-18;25-26;11-17;7-13
+27-28;17-36;31-37;38-43;9-19;40-49
+17-24;17-29;17-36;33-39;6-34;39-42;31-45;31-47;9-19;24-45
+2-3;1-7;14-16;20-21;8-26;13-32;17-29;11-38;6-25;6-8;16-24;48-49;38-43;9-19;19-51
+1-6;1-8;14-15;23-24;8-20;21-31;16-24;9-17;40-49
+1-7;8-28;17-18;17-25;17-26;6-25;16-17;19-51
+38-43;9-15;24-31
+12-13;14-17;13-32;11-24;11-38;31-37;31-47;5-8;24-38
+1-7;17-29;33-39;6-34;7-13;18-23;40-48
+2-3;31-46;32-48;9-30;40-48
+1-5;1-10;20-22;8-26;21-31;17-28;11-24;16-17;31-47;32-44;32-42;38-43;40-48
+14-16;13-33;17-35;11-17;6-8;9-15;3-9
+14-17;17-20;33-39;6-8;32-48;40-49;24-31
+12-13;15-19;8-24;16-29;18-23
+1-4;17-26;6-28;6-34;16-29;31-47
+8-26;17-28;17-24;17-26;11-17;32-48;5-7;24-38;24-31;19-51
+1-5;20-22;25-26;17-28;17-26;32-42;9-15;9-30;9-17
+20-21;8-20;17-36;5-7;3-9;19-41
+1-7;27-28;17-20;17-36;33-39
+15-19;23-24;17-25;11-17;6-7;31-45;9-31;18-23;24-31
+1-5;12-13;17-35;6-34;39-42;32-42;9-15;5-32
+1-5;14-17;23-24;11-38;6-11;5-8;24-50;3-9;19-20
+1-7;15-18;8-28;8-26;18-23
+1-9;15-19;20-22;17-20;33-39;31-45;24-50
+1-10;17-18;17-24;11-38
+14-15;25-26;8-28;17-25;11-17;33-40;6-34;16-24;9-15;24-45;24-50;19-51
+33-40;16-24;9-31;19-41
+2-3;1-11;17-26;17-29;33-40;16-17;9-30;5-7;40-48
+1-8;8-26;6-25;16-29;18-23;24-38
+15-19;8-16;16-29;16-17;31-45
+1-4;15-18;9-15;24-38;3-9
+1-11;8-20;8-24;21-31;6-25;9-31;9-30;40-49
+1-6;1-11;17-28;6-25;9-30;24-31
+1-6;1-11;20-22;8-28;17-36;11-17;9-30;9-17;5-32;19-20
+2-3;8-24;8-26;13-32;17-36;39-42;9-30;24-38;3-9
+23-24
+12-13;14-17;8-20;8-28;11-24;24-38;24-45
+20-21;17-24;6-7;48-49;38-43;24-50;19-51
+1-7;1-10;14-16;8-28;21-31;17-20;11-24;38-43;19-41
+1-8;1-11;8-24;33-39;33-40;31-47;9-30;5-7
+1-6;21-31;32-48;9-17
+1-7;8-26;38-43;5-8;24-50;3-9;19-41
+14-17;25-26;27-28;9-19
+11-38;31-46;32-48;38-43;9-19;24-50
+13-33;17-28;6-7;6-11;31-46;9-19
+1-9;1-11;14-15;15-18;21-31;6-11;38-43;9-15;24-50
+1-5;1-11;20-21;17-24;17-26;11-38;16-17;5-32
+1-11;14-15;20-22;17-18;17-26;39-42;16-24;9-31;24-45
+1-11;16-24;31-47;5-7;19-51
+1-7;1-11;27-28;8-20;8-28;13-32;31-45;38-43;5-7;3-9
+1-9;17-18;6-7;6-28;31-45;19-41
+1-11;11-17;39-42;16-17;9-15;5-8;5-7
+1-6;1-8;1-10;6-28;38-43;5-8;18-23
+0-1;8-24;13-32;6-28;16-17;48-49;9-17
+20-21;8-28;17-36;33-40;6-25;6-8;38-43;5-32;24-38
+1-9;23-24;13-33;17-24;17-36;33-40;6-11;16-24;9-31
+2-3;8-24;16-24;32-48;9-15;9-30;19-51
+1-6;8-20;5-7
+1-6;12-13;17-28;11-24;7-13;5-7
+15-18;20-22;8-26;33-40;6-34;39-42;24-50
+21-31;13-32;13-33;6-7;6-8;18-23;24-31;19-41
+0-1;1-11;11-24;11-38;11-17;33-40;31-37;38-43;9-30;18-23;40-49;24-38;24-31;19-41
+0-1;1-7;1-11;20-21;17-29;11-24;11-17;33-39;6-8;16-29
+1-9;1-11;8-20;17-24;17-25;9-31
+1-4;17-24;11-24;11-17;6-17;16-24;7-13;24-38
+1-4;8-26;16-24
+1-7;1-8;17-18;17-29;6-7;5-7
+27-28;13-32;17-20;17-28;11-24;11-38;6-8
+1-10;11-17;6-8;31-46;31-37;40-49;19-51
+14-15;15-19;20-21;20-22;23-24;17-24;6-28;16-17;19-41;19-20
+1-8;1-9;21-31;17-18;9-15;9-31;24-31
+23-24;25-26;11-17;39-42;24-45
+14-15;15-18;25-26;8-20;13-33;17-20;17-25;16-24;9-31
+6-25;31-47;24-38
+1-11;14-17;13-33;32-44;7-13;24-31;24-50
+1-11;17-35;17-18;17-28;6-11;31-45;32-44;18-23
+0-1;1-7;21-31;17-26;6-11;16-24;16-29;40-49;24-50
+8-28;17-24;17-26;39-42;16-24;31-47;24-31;24-45;3-9
+2-3;12-13;17-20;17-26;6-25;9-17;24-50
+0-1;1-8;14-16;14-17;8-16;33-40;5-32
+1-4;1-10;14-16;8-16;8-28;17-28;33-40;31-45;31-47;32-42;18-23;24-31;24-50;19-51
+2-3;1-4;15-18;8-16;33-40;31-47;9-30;5-8
+20-22;8-16;33-40;32-48;9-30;9-19;40-48;19-20
+1-5;1-9;1-10;12-13;20-21;13-32;16-24;19-20;19-51
+17-35;17-20;17-18;9-17;9-19;40-48;24-31;19-41
+17-24;6-17;31-45;9-15
+11-17;39-42;9-17;5-32
+14-17;17-25;33-40;7-13;24-45
+23-24;19-41
+14-16;15-18;8-26;21-31;17-20;17-36;6-17;9-17;18-23
+2-3;1-5;20-21;27-28;11-24;6-7;19-51
+14-15;25-26;8-16;8-24;32-48;9-17;24-38;3-9
+1-7;17-24;17-29;38-43
+16-29;19-41
+1-5;1-7;1-8;14-15;21-31;11-17;6-7;6-11;3-9
+39-42;18-23;19-20
+27-28;24-38;3-9
+1-4;20-22;17-18;17-28;6-8;6-11;24-31
+1-7;17-35;17-24;33-39;6-7;6-8;6-11;32-44;40-49
+0-1;1-9;32-44;40-48
+23-24;13-33;17-20;39-42;16-29;31-46;40-48;24-31
+8-26;17-18;6-25;31-45;31-46
+0-1;8-20;17-35;17-28;17-36;24-38
+2-3;15-18;20-21;17-36;33-39;6-7;9-15;24-31
+1-5;21-31;17-36;6-8;16-29;16-17
+1-10;14-16;17-18;48-49;24-38;24-45;19-41
+15-19;8-24;13-33;17-18;17-24;33-40;6-8;24-45
+20-22;25-26;17-35;17-26;6-25;31-45;9-17;5-7;24-31;19-20
+0-1;14-17;8-20;8-26;17-26;6-17;5-7
+17-29;33-39;16-17;48-49;9-17
+21-31;17-18;17-29;11-24;6-17;9-31;24-31
+15-18;20-21;6-8;48-49;5-32;5-8;40-48;19-41
+2-3;25-26;6-8;32-48;5-32;5-8;40-48;19-51
+27-28;8-26;31-47;9-15
+1-4;1-5;1-9;17-29;33-39;9-17;24-38
+2-3;1-5;39-42;24-45
+1-9;14-16;27-28;11-24;33-40;6-17;40-48
+1-11;12-13;14-17;23-24
+7-13;9-15;9-31
+17-20;6-28;16-24;16-29;31-37
+20-22;8-16;17-36;11-24;31-46;19-20
+15-19
+14-16;25-26;32-48;32-44;38-43;9-15;9-19
+14-16;8-24;17-18;17-25;11-24;11-38;32-44;9-19;18-23;24-38;24-31
+1-11;20-21;17-20;17-28;16-29;38-43;9-19
+0-1;2-3;1-6;1-11;6-34;7-13
+8-28;17-24;17-29;11-17;33-40;6-28;38-43;24-31;19-51
+1-4;1-10;20-22;23-24;33-40;31-45;48-49;38-43;5-8
+1-9;8-20;17-18;33-40;6-28;31-45;32-42
+2-3;1-5;33-40;16-29;40-48;24-45;3-9
+14-15;14-16;20-22;17-20;11-17;6-25;5-32;40-48;24-38;24-31
+1-4;14-15;14-17;17-35;17-25;6-11;38-43;5-7;40-49
+1-6;14-16;20-21;8-26;6-11;31-45;9-15;18-23
+1-10;15-18;6-11;16-24;31-47;7-13
+1-8
+6-7;6-25;6-8;6-17;6-11;39-42
+13-32;17-18;11-24;31-37;9-15;24-31
+0-1;14-17;15-19;20-21;25-26;8-24;17-26;11-17;6-17;6-34;16-17;9-31;9-30;3-9;19-41
+2-3;1-4;1-6;15-18;8-26;17-28;33-40;6-7;31-47;9-15;9-17
+14-16;21-31;17-26;39-42;31-37;40-49;19-41
+0-1;12-13;14-15;13-32;9-30
+17-18;17-28;11-17;6-7;31-47;7-13
+27-28;6-8;31-37;9-15;5-32;3-9
+1-9;20-22;16-29;48-49;9-17;40-48
+8-26;21-31;11-17;6-28;39-42;40-48;24-38
+20-21;17-35;6-28;32-48;9-31;5-8;19-20
+1-4;8-20;8-28;7-13;18-23;3-9;19-51
+1-10;23-24;11-17;32-42;19-41
+17-20;6-8;24-38
+1-6;17-24;6-7;6-25;16-17
+17-20;32-44;38-43;9-31
+14-15;8-28;17-35;6-8;32-44;40-49
+2-3;8-16;13-33;9-15;24-38
+0-1;1-8;14-17;17-20;11-17;33-39;32-48;19-41
+12-13;20-22;8-20;8-28;17-29;33-40;6-7;16-24;16-29;31-46;48-49
+1-6;17-18
+15-18;8-24;21-31;17-24;32-48;32-42;9-15;9-17;5-7
+1-7;8-26;17-25;6-11;16-17;31-37;7-13;38-43;5-7
+0-1;15-19;20-22;8-28;17-28;33-39;5-7;18-23;40-49;24-45;19-20
+27-28;8-24;11-17;40-48;19-51
+1-6;1-10;12-13;23-24;6-28;6-25;40-48
+39-42;31-37;32-44;32-42;19-51
+0-1;8-28;13-32;38-43;9-15;9-17;40-48;3-9;19-41;19-51
+23-24;11-38;39-42;31-37
+1-4;15-18;25-26;8-26;17-18;17-28;11-24;11-17;38-43;9-30;9-19;24-45
+2-3;1-7;1-11;14-16;27-28;6-25;16-29;7-13;9-19
+1-11;14-16;8-28;21-31;31-45;32-42;38-43;9-31;9-19
+0-1;1-11;12-13;14-16;20-21;11-17;9-17
+2-3;20-22;17-18;17-25;33-39;39-42;16-24
+1-9;25-26;8-28;8-26;17-26;6-28;31-46;24-45
+0-1;14-15;17-24;17-26;17-29;31-46;9-15;19-20
+31-46;3-9
+21-31;6-25;31-47;38-43;40-49
+1-10;17-18;6-8;32-44;7-13;19-20
+8-24;17-36;33-40;6-7;6-8;5-32;24-31;19-51
+23-24;33-40;24-38
+1-11;8-26;48-49
+1-6;8-28;21-31;17-28;17-24;11-38;39-42;24-38
+15-18;13-32;13-33;18-23
+14-15;8-16;9-17
+27-28;8-28;17-20;6-17;16-24;24-45
+15-19;6-7;31-47;5-7
+1-7;1-10;21-31;17-28;17-25;17-29;6-17;6-11;39-42;5-7
+27-28;13-33;6-34;16-29;9-19;19-51
+1-8;14-16;14-17;20-22;8-28;17-29;6-11;31-45;31-46;48-49;19-20
+12-13;8-24;33-39;6-17;16-29;31-46;38-43;5-8
+15-18;15-19;13-33;31-46;48-49;9-31;9-30;19-51
+1-7;8-16;6-25;31-46;9-30;5-32;24-31
+1-6;27-28;8-16;8-24;17-35;6-25;16-24;31-46;7-13;9-30;40-49
+1-6;25-26;8-16;13-32;6-25;16-24;31-46;9-30
+2-3;12-13;15-19;17-25;17-36;9-17;3-9
+13-33;17-24;5-7
+17-35;17-29;31-45;18-23;24-45
+1-8;20-21;17-20;11-24;32-42;24-31
+1-5;1-11;14-15;8-16;13-32;17-18;31-46;9-19;19-20
+33-40;39-42;31-37;32-44
+13-32;32-48;48-49
+6-25;9-17
+0-1;1-4;1-6;17-25;11-17;6-8;7-13;9-15;9-31;19-20
+1-4;1-6;20-21;32-48
+8-26;17-26;39-42
+1-11;12-13;23-24;17-26;11-17;32-42
+27-28;8-24;17-26;32-48
+1-6;21-31;6-17
+11-24;16-17;9-19
+1-5;1-11;12-13;14-17;8-16;17-35;31-46;9-19
+1-8;8-16;13-32;11-17;16-29;31-45;31-47;32-48;48-49;7-13;9-19;5-8
+0-1;1-9;1-10;14-15;8-16;13-33;33-39;6-7;6-8;16-17;9-19;40-49;19-41
+12-13;14-17;15-18;15-19;8-16;6-28;6-17
+8-16;6-28;24-45;19-20
+25-26;17-28;6-17;16-29;31-45
+2-3;1-11;17-24
+20-21;11-38;33-40;38-43
+23-24;8-24;11-17;31-46;31-47;9-30;24-50
+1-5;17-35;39-42;31-46;32-44;38-43;9-30;9-17;5-7;18-23;40-49
+1-4;14-15;15-18;6-28;16-29;48-49;24-50
+1-11;15-18;17-24;17-25;6-11;39-42;31-46;31-47;32-48;5-32
+14-16;8-24;17-29;11-17;33-39;6-28;38-43;9-15
+20-22;17-24;17-29;9-31;9-17;24-38;24-50
+0-1;1-10;15-19;17-35;17-25;32-42;38-43
+1-6;1-7;1-9;25-26;8-20;39-42;18-23;24-50;19-41
+11-24;7-13;38-43;5-8
+17-29;33-39;6-11;5-32;5-7;24-45
+15-19;11-17;39-42;16-17;5-7;18-23
+0-1;8-26;21-31;17-36;6-25;19-41;19-51
+1-6;14-15;8-20;17-24;40-49
+1-6;6-17;31-45
+1-11;11-17;16-29;31-46;9-15;9-31;24-45
+0-1;1-9;6-34;16-24;48-49;24-45
+1-8;6-17;32-42;7-13;18-23
+0-1;23-24;8-28;11-38;24-38
+20-22;8-26;17-26;6-17;9-15
+1-4;1-7;17-20;17-24;17-26;6-28;39-42;31-45;31-46;3-9
+0-1;2-3;1-8;20-21;8-28;13-32;6-28;6-17;6-34;31-46;19-20
+12-13;8-24;16-29;31-46;5-32;19-51
+25-26;39-42;16-24;31-46
+1-7;13-32;17-18;31-45;9-15;24-38;3-9
+1-8;14-17;15-18;17-20;6-17
+1-11;20-21;13-33;17-36;16-24;31-46;40-48
+0-1;27-28;8-20;13-33;33-40;6-34;32-42;19-41
+1-5;17-28;17-24;17-36;32-44;9-30
+20-21;17-18;17-36;39-42;32-44;9-30
+0-1
+14-17;8-16;8-26;9-17;19-41
+14-16;8-28;33-39;7-13;40-49
+12-13;15-18;17-25;9-19;24-31;24-50
+2-3;1-8;20-21;13-32;13-33;17-24;6-11;32-42;9-19
+1-4;1-9;27-28;11-24;11-38;16-24;19-20
+1-4;8-24;6-28;16-24;38-43;9-17;18-23;40-48
+14-17;33-39;48-49;40-48
+2-3;1-11;33-39;6-17;39-42;31-46;31-37;48-49;9-15;40-48
+0-1;1-11;12-13;11-38;6-7;38-43;24-45
+14-16;17-25;6-17;7-13;5-32;19-41
+6-25;31-45;32-48;38-43;5-8
+20-21;20-22;17-18;11-38;6-25;31-47;9-17
+2-3;15-19;17-36;31-37;38-43;9-15;3-9
+6-17;16-17;32-48;32-42;5-7;24-45
+1-10;12-13;14-17;13-32;31-47;38-43;5-7
+2-3;1-7;8-20;21-31;17-18;17-25;39-42;16-29;19-20;19-51
+1-10;15-18;15-19;5-32;3-9
+25-26;17-35;17-29;6-25;38-43;40-49
+1-7;9-30;40-48
+1-6;1-8;14-16;23-24;8-26;13-32;33-40;31-37;5-32
+20-21;27-28;17-35;17-24;17-26;33-40;32-48;48-49;40-48;19-41
+1-7;23-24;17-26;16-29;16-17;31-37
+1-11;8-20;8-28;24-38
+1-11;17-28;9-15
+1-6;14-17;17-35;11-24;6-28;32-44;9-30;40-49;24-45
+14-15;14-16;15-18;8-28;8-26;17-20;17-18
+0-1;1-7;20-22;17-24
+1-8;8-24;17-25;11-24;16-24;9-15
+12-13;25-26;27-28;8-20;17-36;33-39;19-20;19-51
+2-3;12-13;20-22;23-24;8-16;11-38;11-17;6-7;9-15;40-48;3-9
+2-3;11-38;48-49;9-17;5-8
+6-8;16-17;9-31;19-20
+8-16;17-25;6-28;6-8;31-47;9-15;3-9
+11-17;6-8;6-17;31-45;7-13
+1-7;1-9;14-15;25-26;6-7
+12-13;27-28;16-17;9-17;5-32;18-23
+8-20;17-28;40-48;3-9
+0-1;1-9;6-8;6-11;32-48;9-17
+14-17;6-7;9-31;5-7;24-50;19-51
+15-18;17-28;16-17;5-8;5-7
+1-8;8-16;8-24;7-13;5-8;40-49;24-45;19-51
+12-13;20-21;6-28;6-34;31-37;5-8;3-9
+1-8;14-16;6-28;24-45
+1-7;27-28;8-16;8-26;39-42;9-17;9-19;5-32;24-38;19-41
+1-5;1-10;25-26;8-16;6-7;6-8;31-47;48-49;7-13;9-19;24-31
+1-5;8-16;8-28;8-24;6-17;31-47;9-17;9-19;3-9
+2-3;14-17;48-49;9-31;9-30;24-45
+1-9;20-22;8-16;13-32;18-23
+1-6;1-10;14-15;8-24;11-24;6-7;6-8;24-45;19-41
+17-20;17-25;17-26;39-42;31-45;7-13
+0-1;1-11;13-32;17-26;6-25;31-46
+1-4;23-24;8-16;17-24;6-34;24-38
+1-7;1-8;14-16;14-17;20-22;17-26;33-40
+33-40;6-11;16-29;9-15;24-38
+15-18;23-24;27-28;8-20;8-16;11-38;6-11;31-37;32-44;9-31;24-45;19-20
+1-9;8-16;33-39;32-44
+1-4;1-5;1-8;12-13;20-21;6-25;32-42;48-49;9-17;5-7
+15-19;11-38;6-25;6-8;7-13
+13-33;16-24;19-51
+2-3;17-29;33-39;6-28;24-45
+1-9;8-20;13-32;6-25;32-48;38-43
+1-7;15-18;20-22;8-26;17-18;6-7;31-45;40-48;24-38;19-41
+1-5;11-38;11-17
+12-13;15-19;6-34;5-32;5-7
+20-21;17-29;5-7
+0-1;8-28;16-24;7-13;38-43;24-50;19-20
+1-5;1-7;14-17;8-24;21-31;17-20;31-45;32-48;32-42
+1-5;14-16;15-19;8-20;8-26;39-42;16-29;38-43;9-15;5-8;24-50;19-20
+12-13;14-16;17-29;40-49
+14-15;25-26;8-28;8-24;17-29;31-47;38-43;24-45;24-50
+20-22;17-25;33-39;5-7
+2-3;11-38;9-30;5-7;24-50;19-41
+1-4;1-10;15-19;8-28;39-42;7-13;3-9
+1-4;1-9;13-33;17-20;17-26;6-28;9-17;24-38
+0-1;8-26;17-35;17-20;6-34;31-47;9-31;40-48;24-50
+1-8;1-10;12-13;14-17;11-38
+15-18;17-28;33-39;32-42;18-23;40-49
+1-6;20-21;27-28;6-28;16-29;31-47;24-45
+14-15;11-24;16-24;16-29;32-44;48-49;9-30;3-9
+8-26;17-24;6-25;16-24;31-37;32-44;19-20
+1-5;8-28;8-24;17-29;6-7;6-34;7-13;19-51
+17-25;17-26;31-47;9-31;9-17
+0-1;1-6;13-32;17-35;17-26;9-19;3-9
+1-8;1-9;15-18;27-28;8-24;17-28;32-48;9-19
+1-8;15-19;8-26;17-25;17-26;6-28;6-8;16-29;9-15;19-20
+20-21;23-24;39-42;31-37;9-19
+13-32;16-24;32-42
+1-10;8-20;8-16;17-35;17-24;31-45;9-17;40-49;24-38
+1-4;1-7;1-8;14-15;11-17;7-13;5-32;24-50
+1-4;6-11
+1-11;14-17;13-33;17-20;6-11;39-42;48-49;24-50
+1-5;1-9;1-11;11-17;33-39;6-34;16-29
+1-7;20-21;8-20;17-28;6-8;32-48;48-49;9-17;24-45;19-20
+2-3;8-16;6-28;6-8
+14-16;6-8;24-50
+12-13;17-35;33-40;6-7;6-8;31-37;32-42;24-45;19-41
+1-7;14-17;13-32;11-17;7-13;18-23
+17-35;24-50
+2-3;1-6;8-24;21-31;17-29;16-29;31-46;19-41
+1-6;1-11;12-13;20-22;27-28;31-46;38-43
+15-19;25-26;8-20;17-28;11-17;6-28;32-44;48-49;9-30
+1-8;17-20;17-18;6-28;31-47;32-44;9-30;18-23
+33-39;6-34;9-17
+20-21;11-38;9-15;24-31
+0-1;27-28;8-26;17-35;17-20;16-24;24-45;19-20
+14-15;15-18;13-32;13-33;16-17;7-13;9-31;5-8;40-49;3-9
+14-17;27-28;33-39;33-40;48-49;5-32
+17-24;17-25;11-38;5-32;18-23
+11-24;33-39;6-34;9-17
+1-5;1-9;1-10;20-22;13-32;31-47;9-15
+1-8;15-19;25-26;8-26;17-18;11-38;3-9
+14-17;20-21;23-24;13-33;32-42
+14-16;8-20;8-16;8-24;17-20;17-26;31-47
+15-18;8-16;21-31;17-26;31-47;9-31
+17-29;31-46;31-37;24-38
+17-29;11-24
+12-13;20-21;8-26;17-36;6-17;24-38;19-20
+2-3;15-18;20-22;21-31;17-28;7-13
+6-11;38-43
+1-7;8-20;13-32;17-35;17-28;11-24;33-39;6-17;6-34;6-11;39-42;16-29;32-42
+1-6;25-26;17-24;6-8;48-49;38-43;9-17;24-31
+1-10;27-28;31-47;24-38
+0-1;1-4;1-5;15-19;17-25;6-25;32-44;38-43;9-15;5-7
+1-11;12-13;23-24;17-35;6-28;6-17;9-19;24-38
+1-11;14-15;21-31;11-38;33-39;6-28;6-34;16-24;31-47;38-43;9-19;5-32;40-49;3-9
+1-6;1-11;23-24;6-7;6-28;16-24;9-17;9-19;19-41
+1-6;14-15;15-19;16-24;16-17;32-48
+1-7;14-16;15-18;17-18;9-17
diff --git a/examples/failures/failures-0.09 b/examples/failures/failures-0.09
new file mode 100644
index 0000000..e1a7d7e
--- /dev/null
+++ b/examples/failures/failures-0.09
@@ -0,0 +1,1000 @@
+13-33;17-35;17-36;33-40;6-7;6-8;16-24;16-17;9-17;19-41
+9-20
+2-3;1-7;25-26;17-18;17-25;16-17;19-41
+0-1;1-4;27-28;16-17;31-47;9-17;19-51
+15-18;21-31;17-28;17-29;38-43;9-17
+1-4;1-6;14-15;15-19;9-31;5-32;24-45
+8-28;6-7;16-29;16-17;31-46;9-19;24-31;24-45;3-9
+1-5;20-22;25-26;17-20;17-24;31-37;9-20;9-19;18-23;24-45
+20-21;13-32;17-29;33-39;31-45;9-19;24-38
+1-6;14-17;17-28;17-24;11-38;6-17;48-49;9-19
+1-10;13-32;17-25;9-20;9-19
+1-11;20-22;17-24;17-25;33-40;24-38;24-31
+23-24;17-29;31-45;9-17;24-50;3-9;19-41
+2-3;1-5;1-7;14-15;13-32;16-24;7-13;9-20;9-17;24-50;3-9
+1-7;8-28;6-25;9-20;5-7
+1-8;8-20;8-26;17-26;11-38;16-24;31-37;38-43;9-30;24-38;24-45;19-41
+1-9;13-32;13-33;17-18;17-26;6-28;7-13;9-15;5-32;18-23;24-45
+1-5;1-11;21-31;17-26;33-39;33-40;16-17;9-20;24-45
+1-10;8-16;8-28;13-32;17-18;17-26;17-29;6-8;38-43
+0-1;1-8;14-16;8-24;6-34;16-24;31-46;31-47;32-44;24-31
+23-24;21-31;17-35;11-17;6-28;9-20;9-30
+1-8;1-9;17-28;6-8;9-17;18-23;19-41;19-20
+6-17
+14-17;13-32;6-25;31-37;9-20;9-31
+1-11;20-21;6-8;9-15;24-38;24-45;19-41
+1-6;33-39;16-29;16-17;18-23;24-38;24-31;24-45
+20-22;8-20;8-16;17-36;11-17;31-45;38-43;24-45;24-50
+12-13;14-15;15-18;15-19;17-36;31-46;32-44;40-48;24-50
+23-24;13-33;9-30;9-17;24-38;3-9
+14-15;6-34;31-47;5-8;19-41
+1-4;1-5;20-22;17-18;17-29;33-40;6-7;39-42;31-37;9-31;40-48
+1-9;27-28;8-28;11-17;7-13;24-38
+14-17;17-18;17-24;11-38;6-28;6-25;6-8;31-46;32-44
+0-1;1-8;20-21;27-28;17-28;11-24;38-43;40-48;24-45
+14-16;8-26;17-24;17-29;31-45;5-32;24-38;24-45
+14-17;8-28;13-32;13-33;16-17;31-46;31-37
+1-7;1-8;23-24;8-28;6-17;39-42;32-48;40-49;19-41
+1-5;1-7;1-9;14-15;8-20;32-48;48-49;38-43;9-20;9-17;5-7
+1-8;1-9;17-20;11-17;31-46;32-44;19-51
+15-18;17-28;17-29;31-37;32-42;9-15;18-23
+8-16;13-33;16-24;16-17;9-20;19-20
+1-10;12-13;15-19;11-24;39-42;5-32;19-51
+17-20;33-39;6-28;6-11;9-31;24-50;3-9;19-41
+2-3;1-9;8-26;11-38;16-17;31-46;31-47;7-13;5-8
+0-1;2-3;1-5;1-8;14-15;17-24;11-17;33-40;16-29;48-49;40-48
+2-3;1-11;20-21;27-28;8-28;13-33;6-25;6-34;32-48;24-50
+17-18;6-11;39-42;9-15;24-50;19-41
+1-8;20-22;8-20;32-48;19-41
+16-24;9-20;24-38;24-31
+1-9;13-32;11-24;31-46;9-31
+15-18;8-28;21-31;17-36;11-24;16-29;9-15;18-23;3-9
+13-32;17-25;31-37;9-20;24-38
+2-3;17-35;17-25;6-7;6-28;39-42;48-49;9-15
+0-1;1-4;8-26;17-28;40-49;24-31
+1-4;1-5;23-24;25-26;8-26;13-32;16-24;9-15;40-48
+12-13;15-19;17-20;17-18;33-40;6-25;6-17;31-47;7-13;9-17
+1-10;14-17;8-20;17-28;31-46
+1-10;12-13;17-28;17-25;6-25;16-29;32-44;5-32;5-7;18-23;24-38
+2-3;1-4;1-11;17-29;17-36;31-37;32-44;40-48
+2-3;21-31;16-24;9-30;18-23;40-49;24-50
+8-16;6-7;9-30;24-50;19-20
+1-8;14-16;13-33;39-42;40-48;19-41
+14-16;15-18;23-24;16-29;31-45;9-17;24-38;19-20
+25-26;8-28;8-26;17-25;33-40;19-41
+20-22;8-24;8-26;17-35;17-20;17-25;17-26;31-37;48-49;24-31;3-9
+1-11;17-28;17-26;6-17;16-24;31-47;32-44;5-7;40-49;24-38
+20-21;17-26;9-30;5-32
+1-5;8-16;17-18;17-26;11-24;9-30;18-23
+0-1;1-9;14-15;8-26;17-18;33-40;48-49;40-48
+17-20;33-40;9-15;24-38
+14-17;23-24;17-29;9-20;24-50
+1-7;20-21;6-28;32-42;9-15;9-19;5-32;40-49
+1-7;1-10;25-26;6-7;48-49;9-19;24-38;24-31
+0-1;1-11;12-13;8-28;8-26;17-35;32-48;32-44;38-43;9-15;9-20;9-19;3-9
+1-9;15-18;17-28;17-25;17-29;6-34;16-17;32-48;7-13;9-31;9-19
+20-21;17-35;33-39;31-45;9-19;24-38
+14-16;11-38;6-7;38-43;19-51
+1-8;14-16;23-24;8-20;7-13;9-17;24-31;19-41
+1-5;32-44;24-38;19-20
+1-11;15-18;25-26;8-16;24-50
+1-8;1-10;14-17;25-26;21-31;17-36;6-8;48-49;5-7;19-51
+1-4;8-28;17-36;11-24;39-42;16-29;9-31;19-20
+0-1;8-16;16-24;5-32;18-23;24-38
+1-4;27-28;8-26;6-25;6-8;6-17;6-34;40-49;19-51
+14-15;20-22;17-29;33-39;6-11;40-48;19-41
+27-28;8-28;13-33;16-29;16-17;31-46;24-38
+14-15;15-18;15-19;17-18;39-42;16-24;9-17;24-50;19-51
+27-28;8-24;33-40;6-28;6-8;31-47
+1-5;20-22;25-26;8-20;21-31;17-24;6-7;31-45;32-48;24-38
+1-9;27-28;8-16;17-35;11-17;39-42;9-20;5-7;40-49;19-51
+1-5;14-15;23-24;31-46;31-47;9-31;24-38
+1-11;17-20;17-24;6-8;6-34;18-23;24-31
+14-16;21-31;17-35;17-25;6-25;31-47;48-49;24-38
+1-7;12-13;14-17;23-24;8-24;8-26;17-24;17-25;11-24;6-17;16-24;16-17;31-46;7-13;9-20;9-17;19-51
+1-7;1-8;11-24;33-39;9-15
+15-19;17-20;17-28;39-42;38-43
+0-1;14-15;20-21;17-29;6-7;31-37;9-15;9-20;24-31;24-50;19-51
+13-33;31-45;5-32
+1-5;1-8;15-18;8-24;33-40;31-46;19-41
+1-10;12-13;6-28;9-20;9-31;18-23;19-20
+20-21;21-31;17-18;17-29;6-7;32-44;24-50;19-41
+14-16;39-42;16-29;32-42;7-13;40-48
+6-25;31-45;9-30;9-17
+8-28;17-36;38-43;9-20;9-30
+0-1;8-16;17-28;6-28;16-29;16-17;5-7;24-31
+1-9;20-21;5-7
+1-9;12-13;11-24;33-40;6-17;31-46;9-20;9-31
+1-10;14-17;20-22;40-49
+23-24;17-20;6-7;6-11;32-44;9-17;18-23
+1-4;15-18;8-20;21-31;17-36;6-34;16-24;31-47;9-20;9-30;24-31
+8-28;17-25;11-38;33-39;6-25;31-45;32-48
+1-5;20-22;8-16;13-32;6-11;16-17;31-37;48-49;7-13
+20-22;11-38;6-17;31-37
+17-28;6-28;16-17;32-44;18-23;19-51
+1-8;8-26;13-33;17-20;17-28;6-7;9-20;40-49;19-41
+17-24;17-26;16-24;31-47;32-44;18-23;24-50
+1-7;1-10;17-35;17-18;17-26;6-11;39-42;19-41
+1-7;1-11;14-16;14-17;17-24;17-26;11-38;6-28;9-20
+14-16;13-32;17-26;17-29;16-29;32-48;38-43;3-9
+14-15;21-31;11-24;33-39;6-11
+1-6;8-20;33-40;6-34;16-17;31-47;32-42;40-48;40-49;24-38
+14-15;14-17;25-26;8-28;6-7;6-17;16-24;5-7;19-20
+1-5;1-9;15-18;20-21;8-24;17-28;17-25;6-11;16-29
+14-15;8-26;13-32;17-25;11-38;6-28;6-25;31-45;40-48;19-20
+1-9;27-28;8-20;13-33;17-24;17-25;11-17;33-39;33-40;6-25;6-34;9-20;9-17;24-31
+1-6;1-11;23-24;11-17;39-42;9-17;24-50
+12-13;27-28;13-32;13-33;6-7;6-11;9-31
+20-21;17-20;40-48;3-9
+27-28;8-24;21-31;31-46;31-37;7-13
+8-16;13-33;11-38;33-39
+1-8;14-17;15-19;25-26;17-35;17-18;11-17;5-7;40-48;19-41
+1-6;1-9;20-21;6-17;16-29;7-13;9-17;5-8;5-7
+23-24;6-25;31-45;32-42;48-49;9-31;18-23;19-41
+14-16;17-25;17-36;6-7;39-42;40-48;3-9
+0-1;15-18;8-16;6-17
+1-5;14-16;17-18;17-36;11-17;33-39;9-15;5-8;19-41
+1-5;1-6;20-21;27-28;11-17;6-28;16-29;31-46
+1-4;1-7;6-34;38-43;9-15;9-19;5-32;40-48
+1-7;1-9;25-26;13-33;17-24;33-39;6-7;16-24;9-19;40-49;24-50
+1-4;1-10;12-13;13-32;17-36;6-25;39-42;9-31;9-30;9-19;19-41
+1-6;21-31;17-24;17-29;17-36;48-49;9-30;9-17;9-19;40-48;19-20
+14-15;17-35;17-25;6-8;16-29;31-46;9-19
+0-1;1-11;8-20;8-26;6-7;16-24;24-31;19-51
+1-5;1-9;23-24;17-35;17-28;7-13;9-15;9-20;5-32;5-7;19-20
+15-19;21-31;17-20;33-39;39-42;31-47;9-30;24-38
+12-13;20-22;25-26;11-24;11-38;6-28;6-34;9-15;9-30;19-51
+15-19;11-24;32-44;40-48;24-50
+1-10;14-16;15-18;13-32;11-24;33-39;6-7;16-29;16-17;31-45;31-46;9-20;18-23
+1-11;20-21;21-31;33-40;48-49;24-38;3-9
+1-8;8-16;17-18;17-29;6-25;9-17;19-51
+1-7;13-33;32-44;9-20;9-17;40-49
+8-28;8-24;17-25;11-38;19-41
+15-19;20-21;8-20;8-26;17-25;6-28;6-8;32-44;48-49;5-32;24-50;19-51
+1-9;14-17;17-20;9-30;40-48;19-41
+25-26;33-39;6-7;16-17;31-47;32-48
+1-6;17-35;17-28;6-34;9-17;18-23;3-9;19-51
+0-1;1-5;14-16;20-21;8-16;8-24;40-48;40-49
+12-13;14-17;25-26;8-24;17-18;17-26;11-24;9-17;3-9
+0-1;17-35;17-20;6-28;6-25;32-44;9-31
+1-7;1-10;15-18;39-42;16-29;31-45;19-51
+1-6;1-7;31-37;48-49;9-15;5-7;40-48
+15-19;20-21;21-31;17-18;17-29;32-48;5-7;19-20
+1-4;17-36;33-39;6-7;6-17;16-17;7-13;38-43;9-15;40-49;19-51
+14-15;25-26;27-28;8-20;8-26;17-18;17-24;40-48
+2-3;8-28;17-28;17-26;11-24;33-39;6-28;31-47;9-15;9-31;18-23;3-9
+1-4;1-8;14-15;27-28;13-33;17-24;17-26;16-24;24-50
+1-5;1-10;23-24;17-26;6-7
+1-8;1-11;14-17;17-26;17-36;48-49
+1-10;17-26;5-8;5-7;18-23;19-20
+1-9;20-22;8-28;33-40;24-38
+15-18;17-25;16-24;18-23
+2-3;1-6;15-18;17-20;9-31;9-17;3-9
+0-1;14-16;8-26;17-35;31-45;9-17;24-38
+39-42;16-17;38-43
+1-10;6-7;6-34;32-44
+14-15;14-17;27-28;13-32;17-18;11-17;9-20;24-50;19-51
+2-3;12-13;11-24;6-28;6-11;16-24
+0-1;1-6;1-11;14-15;27-28;6-7;16-17;9-31;9-17
+1-9;21-31;17-35;6-25;9-15;9-20
+0-1;17-25;17-26;16-17;31-46;48-49;5-32
+1-5;1-7;8-24;6-11;48-49;24-31;3-9
+1-7;14-17;17-35;17-25;33-39;6-28;16-17;31-45;7-13;38-43
+1-10;15-18;20-21;23-24;9-30;5-32;24-38
+14-15;20-22;8-26;21-31;17-35;6-7;6-8;6-34;31-46;9-31;5-7;19-20
+1-5;14-16;20-22;17-18;17-29;11-17;6-28;39-42;16-24;32-42;5-32;18-23;19-20;19-51
+1-7;1-10;23-24;27-28;11-38;32-48;9-30;40-49;24-50
+1-7;1-9;12-13;17-18;17-36;31-46;32-48;7-13;5-7;3-9
+1-7;1-9;14-17;25-26;31-45;31-37
+1-4;8-16;17-18;6-7;32-44;5-8;24-50
+20-21;21-31;17-24;16-29;9-30;5-32
+2-3;15-18;17-26;17-36;6-28;7-13
+1-4;15-19;20-22;17-18;17-36;9-20;40-49
+1-4;1-5;1-6;13-33;17-35;17-24;17-25;17-36;31-45;31-46;32-42;9-17;5-8
+1-9;15-18;8-20;13-32;6-7
+1-11;12-13;25-26;8-16;17-35;16-29;32-44;38-43;9-20
+13-32;7-13;9-31;18-23
+1-6;14-15;17-28;11-38;6-25;31-37
+1-8;6-7;6-17;31-46;31-37;9-20;24-31
+1-5;1-9;17-25;48-49;7-13;5-7
+1-8;1-9;1-11;27-28;8-16;16-29;32-42
+1-6;1-7;12-13;8-26;13-32;11-24;6-8;39-42;9-15;9-20;9-19;5-32;3-9
+1-4;1-6;1-7;1-8;17-35;17-28;17-29;17-36;6-17;5-8;24-31
+20-22;25-26;21-31;6-8;48-49;9-20;9-19;19-20
+1-11;8-16;17-35;17-25;9-19;40-49
+0-1;1-5;12-13;15-18;8-20;33-39;16-24;31-47;7-13;9-19
+17-35;11-24;6-11;9-19
+1-7;15-19;13-33;11-17;33-40;31-46;32-48;18-23
+1-9;1-10;11-17;6-8;9-17;24-38
+20-22;27-28;17-20;17-25;6-7;39-42;40-49
+14-16;20-21;25-26;8-28;17-28;17-24;33-40;16-17;31-46;9-20;24-31
+14-17;23-24;8-26;21-31;17-36;32-42;5-32
+8-20;8-24;13-33;17-26;17-29;11-38;33-39;16-24;5-7;19-51
+1-7;13-33;33-40;9-31;40-49
+1-4;1-6;1-7;15-19;8-16;17-26;6-17;6-11;16-17;32-44;48-49;9-31
+1-7;14-16;17-25;17-26;31-37;18-23;40-49;3-9
+0-1;2-3;13-32;17-26;31-46;38-43;19-51
+2-3;1-4;15-18;17-29;17-36;6-34;6-11;16-24
+2-3;1-6;15-19;8-24;13-32;6-28;6-17;24-31
+1-10;25-26;8-16;21-31;17-28;33-40;32-44;32-42;38-43;9-17
+20-22;8-26;13-32;17-24;31-45;9-30;19-20
+27-28;31-47;48-49;9-20;24-38
+14-17;20-21;23-24;8-20;33-39;39-42;38-43;9-15;3-9
+1-5;12-13;21-31;11-17;6-7;5-32;5-7
+1-6;14-17;15-19;8-20;8-16;7-13;9-30;40-49;24-38
+1-4;1-7;1-8;12-13;14-15;8-20;17-35;38-43;9-15;18-23;3-9
+6-34;16-24;16-29;16-17;31-46;9-30
+1-11;14-16;17-20;6-28;31-45;9-31;18-23
+20-22;25-26;8-28;13-33;31-37;9-15;24-50
+15-18;17-29;11-38;33-40;16-17;31-47;32-44;7-13;24-31
+0-1;1-9;6-7;6-25;9-20;9-30
+1-6;1-10;17-20;31-46;32-42;9-30
+1-5;1-11;21-31;7-13;9-17;40-49;24-50
+8-20;17-29;48-49;9-20
+1-8;15-19;23-24;17-28;33-40;6-34;39-42;24-31
+1-6;20-21;25-26;8-20;17-35;17-20;16-29;32-42
+23-24;25-26;11-38;6-17;31-45;31-46;9-20
+1-8;27-28;13-33;6-28;31-46;31-37;9-20;5-7
+17-35;17-29;31-37;5-8
+1-10;12-13;14-17;33-39;6-8;32-48
+1-6;14-16;15-18;8-28;8-26;17-20;17-28;17-36;11-24;33-40;6-25;39-42;16-24;16-17;32-48;9-20;19-20
+8-24;6-17;16-29;31-45;31-47;9-17;5-32;5-8
+1-4;31-46
+1-4;25-26;8-16;6-34;9-20
+0-1;1-4;1-7;1-11;21-31;6-11;31-46;31-37;3-9
+1-9;12-13;17-18;48-49;9-31;5-32;24-50
+1-10;8-24;17-35;17-36;11-38;9-20
+1-8;27-28;17-35;9-17
+14-17;15-19;17-36;6-11;16-17;32-42;7-13;9-17;24-31
+17-28;6-28;6-25;39-42;38-43;9-15
+1-11;14-15;17-24;31-45;9-20
+1-6;1-8;6-17;6-11;16-24;31-47;32-44;9-15;40-49
+12-13;15-18;25-26;13-33;17-24;11-38;9-31;5-7
+1-6;14-16;23-24;31-47;24-45
+12-13;32-44;24-45;19-51
+0-1;14-15;8-16;6-11;16-29;31-45;31-37;24-45
+11-17;33-39;33-40;7-13;40-48;40-49
+2-3;1-6;1-9;8-24;13-33;17-28;11-38;6-17;31-47;19-51
+2-3;8-26;17-28;11-17;6-25;32-42
+1-11;20-22;25-26;8-26;5-8;19-41;19-20
+14-17;17-28;17-24;6-25;6-8;31-47
+14-15;21-31;17-26;6-7;31-45;5-7;40-48
+12-13;8-28;13-32;17-26;6-34;39-42;16-17;5-7;40-49
+1-7;14-15;15-18;8-24;17-26
+0-1;1-8;20-21;17-26;6-7;32-48;9-20;9-31;9-19;24-50
+1-10;14-16;8-20;17-20;17-26;33-40;16-29;31-37;32-48;32-44;7-13;9-19
+1-4;1-8;8-16;8-28;13-33;17-25;17-29;6-28;32-42;9-15;9-30;9-19;18-23
+39-42;9-19;40-48;24-50;3-9
+12-13;14-17;20-21;8-24;11-38;6-7;6-25;7-13;9-15;9-17;9-19;5-32;24-50
+0-1;2-3;14-16;20-21;27-28;21-31;33-40;9-20
+1-6;14-17;16-17;9-31;19-51
+17-29;33-40;6-34;16-29;32-44;32-42;40-48
+23-24;13-32;17-28;31-47;48-49;9-30;18-23;24-38
+0-1;1-10;17-18;6-7;16-24;9-30
+14-17;8-20;8-28;8-24;17-35;17-20;31-45;31-37;40-48;40-49;3-9
+1-5;1-9;15-18;13-33;17-18;17-29;6-25;9-15;5-7;24-38
+17-24;6-28;6-8;16-29;9-31;19-51
+15-19;13-32;6-17;16-24;16-17;9-17;40-48;19-41
+14-16;20-22;17-20;24-38;24-31;19-20
+14-16;23-24;31-46;40-49;19-41;19-51
+2-3;8-28;24-31
+0-1;1-10;14-15;8-16;17-28;33-39;32-48;7-13;38-43;18-23;40-48;3-9;19-20
+1-11;8-28;33-40;39-42;32-48;5-8;24-38
+17-20;17-25;11-17;31-37
+17-25;40-48
+1-7;1-8;1-9;27-28;17-25;6-7;39-42;16-17
+1-7;15-19;19-51
+0-1;15-18;20-22;23-24;27-28;17-20;17-18;17-29;6-25;6-17;6-11;31-46;32-48;32-44;9-20
+1-5;1-10;12-13;8-16;16-29;38-43
+20-21;17-18;17-28;31-37;9-15;3-9;19-51
+21-31;13-33;33-39;6-11;32-42;9-20
+15-19;13-32;33-39;6-28;6-34;31-46;24-45
+14-17;25-26;8-28;17-20;17-36;6-17;48-49;9-15;5-7
+2-3;17-28;17-36;6-7;16-17;19-51
+2-3;20-21;6-11;9-15;9-20;19-41
+1-9;14-15;23-24;17-35;31-45;31-46;32-44
+1-4;14-16;14-17;17-25;31-37;38-43;19-41;19-51
+8-20;8-16;8-24;17-35;6-7;6-34;6-11;9-20
+2-3;15-19;20-21;33-39;18-23
+2-3;1-8;15-18;21-31;17-36;7-13;9-17;24-38;19-51
+1-5;1-10;20-22;17-20;17-36;11-24;6-7;16-17;5-8;19-20
+0-1;8-28;17-18;17-28;6-28;6-17;16-29;5-7
+14-17;20-22;13-33;9-20;5-7
+23-24;33-40;32-42;7-13;9-30;5-32;24-38;24-31;19-51
+17-18;17-24;6-11;16-17;31-47;48-49;9-20;40-49
+14-15;6-17;16-24;3-9
+2-3;1-7;20-22;13-33;17-24;6-25;24-38
+2-3;1-7;12-13;8-26;33-39;6-11;16-29;32-42;9-20
+1-10;8-26;21-31;17-24;11-38;33-40;31-45;31-46;32-48;32-44;9-15;9-31;24-31;19-41
+0-1;1-11;8-28;17-20;17-29;6-7;6-8;9-30;40-49;24-38
+15-18;23-24;8-16;6-11;39-42;9-20
+1-5;21-31;17-26;16-24;16-17
+2-3;17-26;6-8;31-37;18-23;24-38
+1-5;1-9;15-18;20-21;23-24;25-26;8-20;8-16;17-28;6-7;7-13;24-50
+17-26;11-24;11-38;6-28;39-42;31-47
+14-15;17-26;33-39;6-25;6-17;32-42;9-31;9-17
+1-9;8-20;6-34;9-30;5-7;24-38;24-31
+25-26;9-15;9-20;19-41
+1-8;23-24;8-20;13-33;17-18;7-13;5-32
+2-3;14-16;14-17;20-21;8-16;39-42;32-42;24-38
+2-3;1-4;1-8;12-13;20-22;27-28;17-18;17-36;9-20;19-20
+1-4;1-5;17-36;6-7;31-46;38-43;9-31;18-23;24-31
+15-18;27-28;17-35;17-28;24-38;24-50;19-20
+1-4;33-39;6-28;32-48;9-20;9-17
+8-28;6-25
+20-22;27-28;17-25;6-25;16-29
+2-3;23-24;8-24;31-47;24-38
+27-28;8-16;8-28;13-32;17-20;11-24;33-40;32-42
+1-7;14-17;8-26;17-36;6-17;16-24;31-37;40-49
+1-11;15-19;27-28;21-31;6-7;6-17;31-46;32-48;38-43;40-48
+13-33;17-29;6-28;31-45;32-48;32-44;9-17;9-19;18-23
+1-5;1-9;1-10;8-24;17-20;17-28;32-42;48-49;9-19;5-7;19-41
+0-1;2-3;8-16;33-40;6-34;16-24;38-43;9-19
+23-24;33-39;6-7;6-25;9-15;9-19;5-32;40-49
+1-8;1-11;14-16;15-18;13-32;17-18;17-29;16-17;31-46;9-19;24-31
+1-5;14-15;17-20;17-36;6-28;6-11;9-15;3-9;19-41
+17-25;32-48;32-42;48-49;9-17;19-51
+17-20;11-38;32-44;18-23;24-50
+14-15;8-20;8-26;17-35;7-13
+33-40
+0-1;1-10;14-15;8-20;11-24;39-42;16-24;31-45;32-42;40-48
+13-32;17-28;38-43;9-31;24-31
+1-9;14-15;14-17;23-24;25-26;21-31;33-39;6-7;6-11;5-7;3-9
+1-11;13-33;11-38;6-28;6-17;6-34;16-17;40-48
+20-22;17-25;16-29;31-45;31-37;32-44;32-42;19-20
+20-21;32-48;9-30;18-23
+13-32;33-40;6-7;9-30;9-17;40-48;24-50;19-41
+8-26;21-31;11-38;31-46;32-48;9-30;5-32;5-8
+0-1;1-4;1-9;1-10;15-18;6-28;9-31;9-17
+1-4;1-6;11-38;6-11;39-42;19-41
+1-7;20-21;23-24;25-26;8-16;17-20;17-18;17-28;40-48
+25-26;21-31;16-17;31-37;32-48;9-15;24-38;3-9
+1-4;1-8;12-13;14-16;15-19;17-36;6-11;32-48;32-44;32-42;48-49
+1-6;17-24;17-29;11-24;6-25;31-45;7-13;9-30;40-48;40-49
+1-8;13-32;17-20;17-25;39-42;16-17;18-23;24-31
+1-5;1-11;8-24;17-24;17-25;6-11;38-43
+14-17;6-17;16-24;32-42;5-7;40-48
+8-28;8-26;17-29;33-40;31-45;9-15
+1-10;14-17;33-40;6-11;16-24;24-31
+12-13;25-26;8-20;8-26;13-33;6-7;6-11;31-47;40-49;19-51
+14-15;15-18;6-28;6-8;48-49;9-15;40-48;24-50
+15-19;8-20;17-35;33-39;24-50
+0-1;14-15;17-26;6-25;6-34;16-29;16-17;19-51
+1-11;8-28;17-20;17-26;16-24;38-43;5-8;18-23;19-41
+1-6;17-18;17-26;32-42;48-49
+23-24;17-26;17-29;11-38;6-25;31-45;40-49;24-31;19-41
+8-16;17-25;6-7;6-28;6-17;31-37;5-8;3-9
+1-10;20-22;25-26;27-28;8-28;8-26;17-20;16-24;31-37
+0-1;1-5;1-8;8-26;21-31;33-39;31-47;32-44;9-17;19-51
+6-7;31-37
+14-17;15-19;27-28;17-29;6-34;16-17;9-17
+1-8;12-13;13-33;33-40;6-7;6-8
+15-18;27-28;11-17;48-49;18-23;19-51
+8-28;8-24;17-35;33-40;31-37;32-42
+14-15;27-28;8-16;13-33;6-7;6-25;16-24;31-45;31-46;31-37
+1-4;1-6;1-10;17-35;17-36;16-29;7-13;19-51
+1-4;14-15;27-28;17-18;17-36;33-39;32-44;48-49;24-45
+14-16;8-26;21-31;11-17;39-42;16-17;5-32
+1-4;14-17;8-24;17-18;33-40;6-7;6-28;6-8;31-45;9-15;24-31;19-51
+1-5;1-6;20-21;8-20;31-46;9-31;3-9
+17-35;33-39;6-34;31-45;5-8;19-20
+1-11;17-18;17-36;6-25;16-29;16-17;31-47;32-42
+8-20;17-36;6-8;32-44;5-7;19-51
+1-10;15-18;15-19;13-33;17-28;11-38;39-42;31-37;40-49
+15-18;20-21;8-24;11-24;48-49;24-31;24-50
+1-8;8-28;17-20;17-25;33-39;9-17
+1-6;13-33;17-28;17-29;6-7;6-11;39-42;31-47;9-31;24-45
+31-45;31-46
+1-9;1-11;23-24;8-16;8-26;11-38;6-34;16-17;32-42;5-32;40-49;3-9
+1-5;1-9;8-24;17-20;33-40;9-30
+0-1;1-6;1-10;13-32;6-7;6-28;16-24;31-47;7-13;9-30
+12-13;20-21;25-26;27-28;21-31;17-25;9-30;9-19;19-20
+0-1;14-16;15-19;17-28;39-42;48-49;24-31
+1-7;14-17;8-28;31-46;32-42
+11-38;6-17;16-29;32-48;7-13
+1-6;15-18;17-18;6-28;16-24;32-48;18-23;3-9
+20-21;27-28;16-17;32-42;9-19;5-8;40-48
+1-5;15-19;8-26;11-17;6-25;6-11;9-19
+6-28;16-24;9-31;9-19;24-38
+23-24;25-26;17-18;11-38;48-49;9-19;5-8;40-48;24-31
+8-20;8-24;13-33;11-24;6-7;16-29;9-19;5-32;40-49;24-45;19-51
+1-4;1-10;33-39;31-46;24-31;24-45;3-9
+1-7;8-16;17-20;17-29;11-38;7-13;9-19
+2-3;15-19;20-22;23-24;17-28;6-8;6-17;16-17;48-49;38-43;24-45;19-20
+2-3;1-4;17-36;31-37;9-31;5-8;40-48;24-45
+0-1;2-3;1-6;14-17;17-24
+15-18;23-24;8-26;13-33;48-49;19-41
+8-26;33-40;6-25
+20-21;27-28;13-32;17-18;11-24;31-45;7-13
+1-6;8-16;8-28;13-33;17-36;11-24;24-31;3-9
+8-20;13-32;17-20;17-18;17-26;16-24;16-17;48-49;9-31;5-7
+8-24;17-28;17-26;6-8;24-38
+0-1;1-11;15-19;17-25;17-26;31-45;31-46;31-37
+1-7;17-36;11-17;6-8;9-19
+1-6;1-7;21-31;17-26;31-37;24-50
+1-7;12-13;14-17;8-16;17-20;11-38;6-34;16-24;24-38
+8-26;13-32;17-35;17-29;11-38;16-29;32-48;32-44;32-42;3-9
+15-19;8-24;6-25;38-43;5-32;18-23
+1-6;1-11;15-18;20-22;13-32;13-33;33-40;31-46;48-49;24-38
+1-5;14-16;17-20;17-24;17-25;32-42;19-51
+1-10;20-21;13-32;38-43
+0-1;12-13;23-24;8-20;8-28;17-24;16-17;32-44;24-38
+1-6;14-15;8-24;6-17;31-37;9-31;18-23;19-51
+1-11;20-22;17-20;33-40;6-25;6-34;31-46;32-42;5-32;5-7;3-9;19-20
+15-18;23-24;8-28;17-35;17-36;16-29;9-19
+14-17;8-26;11-17;16-24;16-17;32-48;19-41
+1-8;8-26;13-32;17-28;17-29;16-29;48-49
+1-6;15-19;31-45;32-44;19-41
+1-4;1-7;1-8;1-10;8-24;17-20;17-36;6-8;9-15;9-30
+1-7;15-18;16-24;31-46;40-49
+1-4;1-8;12-13;14-15;25-26;6-28;6-25
+14-16;8-20;8-28;17-24;11-17;6-11;32-42;3-9;19-41
+0-1;1-8;15-19;23-24;8-16;17-36;33-40;6-7;16-17;31-45;9-30;24-31;24-50
+1-5;8-24;18-23
+1-8;20-22;31-37;32-48;32-42;9-31;5-7;40-49;24-38;19-51
+8-24;17-18;31-45;32-48;32-44;38-43;9-19
+2-3;14-15;14-17;16-17;32-48;5-32;24-50;19-41
+20-21;11-38;6-7;6-25;6-8
+12-13;14-15;8-16;17-35;17-18;33-40;38-43;9-30;24-38;19-41;19-51
+1-6;1-10;25-26;8-24;32-42;9-15;3-9
+0-1;14-15;23-24;8-20;17-20;17-28;6-28;6-8;5-32
+0-1;15-18;17-25;7-13;9-15;9-31;24-38;19-51
+2-3;27-28;21-31;19-20
+1-5;1-7;1-9;8-28;33-40;16-24;16-17;9-15
+2-3;8-24;13-33;31-47;48-49
+14-15;14-17;8-28;17-29;11-17;6-11;9-15;5-8
+1-4;1-10;20-21;21-31;17-28;17-25;17-36;11-24;33-40;6-25;6-34;24-50
+8-26;11-24;9-20;9-19;3-9
+12-13;21-31;17-25;33-40;32-42;9-31;9-17;5-7
+1-7;1-11;15-19;16-29;31-45;32-44;9-17;24-31
+14-15;17-35;17-18;11-24;16-24
+1-8;27-28;11-24;33-40;6-8;16-17;9-17;5-8;18-23;24-31;19-51
+15-18;17-18;17-24;17-25;33-39;6-28;39-42;32-44;19-41
+1-4;1-8;17-29;17-36
+1-4;15-19;25-26;8-16;8-26;17-24;17-36;11-17;16-24;31-45;5-8;19-41;19-51
+0-1;23-24;6-25;5-32
+1-4;32-48;48-49;7-13;38-43;18-23
+12-13;14-15;20-21;17-29;39-42;32-48;32-44;24-38
+0-1;1-4;1-5;1-6;12-13;17-28;11-24;11-38;6-25;31-46
+1-6;14-16;14-17;20-22;23-24;17-25;17-26;17-36;11-24;6-17;6-34;31-37;9-19;24-31;19-41;19-20
+17-26;11-24;33-40;6-8;31-45;31-37;38-43;9-31;9-19
+1-6;1-9;15-19;8-20;8-24;17-18;17-26;31-45;32-44;9-19;5-7;24-31;19-41
+1-8;17-26;17-36;31-37;32-42;9-19
+14-15;17-28;11-17;38-43;9-17;9-19;19-41
+15-18;8-26;17-25;6-11;31-46
+1-6;1-11;20-21;13-33;6-8;6-17;16-17;7-13
+17-20;6-7;16-29;32-48;24-31;19-51
+11-24;6-11;32-48;5-32;18-23
+1-5;33-39;6-8;31-47;9-30;24-50
+0-1;20-22;11-17;6-17;31-37
+1-7;15-19;20-21;17-35;9-30;24-50;19-51
+1-7;14-16;17-20;6-7;6-11;16-29
+8-20;21-31;17-35;9-31;9-17;24-45
+1-11;8-26;16-17;19-51
+0-1;14-17;20-21;20-22;6-11;39-42;31-45;32-42;38-43;24-31
+8-28;17-18;17-25;6-17;3-9
+1-6;1-9;17-29;33-40;6-28;6-8;6-34;9-30;18-23;40-49;19-51
+23-24;8-16;13-33;17-18;6-11;31-46;31-37;9-15
+1-5;17-24;6-17;32-42;9-31;5-32
+1-4;20-22;17-18;6-7;39-42;48-49;19-20
+25-26;21-31;13-33;9-20
+1-4;1-6;1-8;17-24;17-29;11-24;11-17;6-11;7-13
+17-25;11-38;33-40;6-28;32-48;18-23;24-45;19-41;19-20
+0-1;1-4;1-7;1-8;1-9;8-20;8-16;8-26;17-36;31-46;32-48;24-45;3-9
+1-7;14-16;14-17;15-19;6-7;9-15;24-38;24-45
+1-6;14-16;23-24;33-39;6-34;38-43
+13-33;6-28;24-50
+15-18;8-28;11-38;33-40;6-7;6-11;16-24;31-45;48-49;9-17
+39-42;32-44
+8-24;13-33;16-29
+2-3;1-7;6-7;6-8;32-44;3-9
+1-4;1-9;8-16;13-32;17-36;6-28;6-8;48-49
+2-3;1-5;1-6;1-7;1-9;12-13;15-19;17-18;11-17;39-42;48-49;24-38
+2-3;1-7;1-10;20-22;23-24;8-20;8-26;21-31;17-28;17-25;11-24;11-38;6-17;6-34;24-31
+20-22;8-20;33-39;6-34;39-42;32-44;32-42;24-45
+25-26;8-24;17-24;17-29;6-17;48-49;24-31
+1-5;1-10;6-28;31-37
+15-19;8-16;17-24;16-24;32-48;9-31
+14-16;13-33;17-18;17-25;11-38;32-48;32-42;19-51
+0-1;15-18;20-22;17-29;39-42;32-48;32-44;38-43;5-32;40-49;19-20
+14-15;8-24;17-18
+12-13;8-28;33-40;32-42;5-7;18-23
+1-4;1-7;1-8;1-11;14-17;23-24;32-48
+20-21;8-26;17-18;31-45;48-49;38-43;5-8;40-48;24-31;19-20
+1-5;14-17;8-20;13-33;17-28;17-25;11-38
+27-28;17-20;17-18;16-24;31-46;40-49;24-50;3-9
+8-24;17-35;6-28;31-37;32-42;5-8;40-48;24-50
+1-4;27-28;13-32;17-24;17-26;17-36;11-17;33-40;31-45;18-23
+14-15;17-35;17-26;32-48;9-17
+27-28;8-28;17-24;17-26;17-29;11-24;11-38;31-47;9-31;5-8;40-48
+1-8;14-16;15-18;17-26;11-24;6-11;39-42;48-49;40-49
+1-7;8-24;9-30;3-9
+1-6;13-32;17-28;11-17;31-46;9-30;5-8;40-48
+14-16;14-17;17-24;31-46;5-32;24-31
+1-5;17-29;17-36;6-7;6-25;6-11;38-43;19-41
+20-22;8-16;13-32;6-17;31-37;5-7
+12-13;13-33;6-28;39-42;9-15;5-32
+1-6;1-11;8-24;6-11;7-13
+14-17;17-29;33-40;6-7;31-46;48-49;9-15;9-30
+20-21;25-26;11-17
+13-32;33-39;6-34;6-11;31-45;7-13;5-32
+1-6;15-19;8-28;8-26;21-31;17-18;17-25;16-17;31-47;32-42;18-23
+1-9;1-11;12-13;15-18;23-24;8-24;13-32;17-29;6-7;9-19;40-49;24-50;19-20
+2-3;14-16;20-21;8-20;17-18;17-24;33-40;31-46;31-37;32-48;9-19;24-31;19-51
+20-22;6-25;7-13;9-31;3-9;19-51
+2-3;13-32;13-33;16-17;32-48;9-15;9-19
+1-6;14-15;15-19;17-24;11-38;32-42;48-49;9-19
+25-26;33-39;6-7;9-19;5-32;24-45;19-51
+1-9;1-11;14-17;27-28;38-43;9-31;5-7;24-45
+21-31;32-42;7-13;24-45
+1-10;8-26;40-48
+2-3;8-26;11-24;11-17;6-17
+14-17;27-28;6-28;6-17;16-17;7-13;9-17
+0-1;1-4;1-8;15-18;8-28;17-36;31-47;48-49
+1-6;20-22;25-26;8-20;8-16;33-40;16-24;16-29;31-45;9-31;40-49;3-9
+1-5;1-11;12-13;23-24;8-26;13-33;17-20;11-24;6-11;18-23;24-50
+1-8;14-15;15-19;17-28;33-39;6-25;39-42;32-44;18-23
+13-33;11-17;5-7;24-31;24-45
+2-3;1-10;14-16;21-31;13-32;17-35;17-25;6-34;24-45
+14-16;20-22;17-28;17-25;6-7;6-25;19-20
+1-11;8-26;17-18;17-36;31-37;40-49
+1-6;14-17;8-26;17-36;16-24;9-15;9-31;19-20
+12-13;8-16;11-17;38-43;5-8;24-31
+1-9;25-26;13-32;11-24;31-45;32-44
+1-5;8-20;17-29;6-28;18-23
+1-6;15-18;23-24;8-24;33-39;6-17;6-34;32-48;48-49;5-8;24-45
+1-7;1-10;15-18;8-24;17-28;17-29;33-39;6-7;6-34;32-44;9-17;24-38;19-41
+1-7;21-31;17-24;32-48;24-45
+0-1;1-11;14-15;15-19;17-28;11-17;33-40;6-25;16-29;7-13;9-17
+12-13;20-21;17-24;17-29;9-17;5-8;24-50
+1-6;24-31
+8-28;8-24;17-24;6-7;7-13
+1-8;13-33;17-35;6-11;16-29;9-30;5-8;5-7
+1-11;14-16;20-22;8-20;17-29;33-40;32-42;48-49;38-43;9-31
+17-18;11-38;24-45
+0-1;1-5;14-17;8-20;21-31;6-8;6-11;16-17;31-37;31-47;5-8;24-31;24-45;19-41
+0-1;8-16;8-24;17-18;17-25;17-26;11-24;31-45;5-32;24-45;3-9
+12-13;14-15;17-18;11-24;48-49;24-38
+1-7;20-21;25-26;33-40;9-20;40-49
+1-4;14-15;15-18;15-19;17-26;17-29;11-24;16-29;31-46;32-44;32-42;9-30;9-17;24-45
+2-3;1-6;20-22;25-26;27-28;13-32;17-18;17-26;16-17;18-23;19-20
+1-9;25-26;8-26;17-28;17-26;9-31
+1-4;27-28;13-33;17-20;17-36;31-45;32-48;48-49;19-20
+1-5;15-19;8-16;8-24;6-17;16-29;32-48;19-41;19-51
+27-28;17-35;7-13;3-9
+0-1;23-24;8-20;33-40;6-25;31-37;38-43
+2-3;1-9;14-17;20-21;17-35;17-20;17-28;17-24;11-38;31-37;5-7;24-50;19-51
+2-3;14-16;13-32;17-36;9-17;40-48
+25-26;17-24;17-36;31-47;5-32
+0-1;1-7;27-28;8-28;6-28;32-42;24-45;24-50
+1-10;48-49;19-51
+1-6;1-7;15-18;20-21;11-24;39-42;31-45;32-42
+1-8;1-11;15-19;8-28;8-26;11-38;33-39;6-28;31-46;32-44;9-15
+20-22;6-17;6-11;38-43;5-32;5-8;24-38;3-9;19-51
+13-33;17-18;6-25;6-34;9-15;9-17
+1-6;14-17;17-28;17-25
+1-5;1-9;17-29;6-11;16-29;24-38;24-45;19-51
+14-16;25-26;11-38;40-49;19-41
+14-16;17-35;17-28;33-40;31-47;32-42
+0-1;1-11;14-17;8-16;33-39;6-11;39-42;16-24;31-46;32-44;7-13;24-38;3-9;19-41;19-51
+6-8;16-29;31-45;38-43;5-32;24-38
+14-15;15-19;23-24;8-24;8-26;17-35;17-29;24-50;19-20
+1-6;1-10;12-13;8-26;48-49
+11-38;6-25;32-48;32-42;7-13;18-23;40-49;24-38;24-31;19-20;19-51
+17-20;11-24;33-40;6-28;16-24;31-45;32-48
+24-45
+1-6;8-20;8-24;17-25;16-17;9-31;24-38;24-45
+1-4;1-5;6-8;9-19
+0-1;23-24;17-20;33-39;6-28;9-19
+1-4;14-17;17-29;17-36;6-17;48-49;9-19;40-49
+27-28;8-16;8-26;39-42;31-46;31-37;32-42;9-19;40-48;24-31
+2-3;1-8;1-11;15-19;27-28;17-29;6-7;6-25;9-20;5-7;18-23;24-31
+20-21;8-28;8-24;17-25;11-24;11-17;6-34;16-29;7-13;9-30;9-17;9-19
+1-10;17-28;11-24;33-40;6-17;31-47
+1-9;15-18;20-22;17-36;32-48;32-42;5-7;18-23
+14-16;6-7;32-48;40-49;3-9;19-51
+15-19;33-39;6-17;16-24;9-30;5-32;24-38
+8-20;21-31;17-24;17-25;5-8
+1-5;1-11;8-28;39-42;9-31;40-48
+20-21;6-17;6-34;31-46;31-47;18-23
+25-26;8-28;6-34;6-11;16-17;38-43
+0-1;14-17;15-19;21-31;33-40;5-32
+2-3;8-24;21-31;17-28;32-44;19-20
+23-24;17-25;6-17
+1-10;1-11;39-42;32-48;9-17;24-45
+1-6;15-18;17-35;17-20;17-26;11-38;31-45;31-46;32-48;5-7;18-23
+1-5;14-16;8-16;17-26;17-29;33-39;32-44;24-50
+14-16;17-28;17-26;33-40
+1-8;17-26;11-24;6-34;16-17;48-49;38-43
+1-5;20-22;8-26;17-26;3-9
+14-17;15-19;23-24;21-31;11-38;6-25;16-24;9-31
+1-6;1-7;14-15;16-29;40-48;24-45
+1-4;1-7;12-13;13-33;6-17;39-42;31-46;7-13;9-15;24-45
+2-3;1-5;17-24;11-24;7-13;19-41
+1-7;8-28;8-24;21-31;17-24;17-25;33-39;32-44;18-23;24-31;19-41
+1-4;15-19;20-22
+1-5;14-17;20-21;6-28;6-17;31-47;48-49
+14-15;15-18;25-26;17-36;6-7;6-25;6-8;6-34;6-11;9-15;19-51
+23-24;8-28;17-36;39-42;31-45;31-46;40-49
+1-10;14-15;8-24;8-26;16-17;32-48;32-44;38-43;9-15;5-7;18-23;24-50
+14-16;8-16;17-25;6-11;16-24;32-48;19-41;19-20;19-51
+12-13;23-24;13-33;11-38;6-7;6-28;31-37;9-17;5-8;24-31
+27-28;17-20;17-36;16-17;38-43;9-17;40-48;24-38;24-50
+1-5;1-9;17-24;6-25;31-45;48-49;9-15;40-49
+1-10;20-22;8-20;17-25;16-17;31-45;31-46;9-20;5-8
+1-11;14-15;18-23;19-41
+14-17;8-16;17-24;6-7;6-28;6-34;9-15;40-48;24-38
+14-17;13-33;17-28;11-38;33-40;6-34;24-45
+15-18;20-21;24-45
+0-1;8-16;6-28;16-29;32-42;38-43;5-7;40-49;24-45;24-50;19-41
+1-6;14-15;14-16;21-31;7-13;40-48;24-45;3-9
+1-5;1-7;14-16;20-22;19-41
+1-7;14-15;23-24;25-26;16-24
+17-29;7-13
+14-15
+1-8;14-16;25-26;8-26;21-31;17-24;17-26;17-29;33-39;6-7;6-34;16-29;9-17
+0-1;2-3;1-8;12-13;14-17;20-22;8-20;8-24;17-28;17-25;6-28;6-17;40-49
+17-18;32-44;32-42;38-43;9-30;24-45
+1-4;1-8;1-10;8-26;17-24;17-29;11-24;33-40;31-45;24-45
+1-4;15-19;8-26;13-33;17-35;6-25;16-24;31-37;48-49;18-23;24-50
+15-18;23-24;8-28;17-24;39-42;31-37;9-17;5-32
+1-4;1-5;27-28;8-24;17-35;17-36;16-17;32-42;9-31;19-20
+21-31;17-25;17-29;31-47;32-44;9-30;24-50;19-51
+8-16;17-35;17-20;11-38;33-40;6-11;5-7;40-48
+12-13;14-16;15-19;20-21;17-28;6-34;16-17;32-42;18-23;24-31
+1-6;1-10;14-16;14-17;6-28;6-25;6-8;39-42;32-48;7-13;3-9;19-51
+1-11;23-24;17-26;9-31;9-17
+8-24;17-36;6-11;32-48;48-49;40-48;40-49
+25-26;8-20;8-26;13-33;17-20;17-29;33-39;32-44
+20-21;25-26;11-38;6-8;31-37;7-13;9-17;24-45;19-51
+1-6;6-11;40-48;24-31;19-41
+15-18;20-22;11-17;39-42;38-43;9-19
+0-1;14-15;8-28;6-17;6-34;16-29;16-17;9-19;3-9;19-41
+17-26;6-34;32-44;9-19;3-9
+1-6;17-24;17-26;33-40;31-47;48-49;9-19
+21-31;17-26;6-28;6-17;9-19;5-8;24-38
+20-22;8-20;13-32;13-33;17-20;17-26;17-29;6-7;39-42;31-45;5-32;5-7;19-41;19-20
+0-1;1-8;15-18;8-24;17-20;17-26;6-25
+1-9;15-19;17-18;17-26;16-24;31-37;5-7
+1-5;1-6;1-11;14-16;23-24;17-28;17-25;11-24;31-46;31-47;9-17;5-8;18-23;40-49;24-38;24-50;19-20
+14-15;17-18;11-24;11-38;33-40;16-17;9-31;3-9
+14-17;20-21;27-28;17-20;17-29;6-7
+8-28;17-18;6-34;39-42;48-49;24-50
+0-1;15-18;8-24;21-31;33-39;16-17;5-32
+1-4;1-10;25-26;17-18;17-25;11-17;6-11;40-49;19-51
+14-15;13-33;11-38;6-25;16-24;24-50
+2-3;1-4;8-20;8-16;8-26;17-18;6-8;16-17;7-13;5-8
+2-3;20-22;21-31;31-46;5-7;19-41
+1-4;1-6;15-18;8-28;8-26;11-17;6-11;16-17;31-45;9-31
+2-3;1-9;17-18;17-26;17-36;33-40;6-17;24-45;3-9
+2-3;8-28;8-24;17-18;17-36;16-29;5-32;24-38;24-50
+23-24;17-28;17-25;6-34;40-49
+17-25;32-44;9-30
+1-8;1-11;14-17;8-16;6-25;31-45;38-43;9-31;24-38
+14-15;20-21;20-22;27-28;6-28;31-46;48-49;3-9
+2-3;1-5;1-7;15-18;8-24;13-33;33-40;24-45
+2-3;1-7;14-15;27-28;11-24;9-15;18-23;24-38;24-45
+8-28;8-26;11-24;11-38;31-45;32-44;9-30
+1-11;6-17
+15-19;17-24;11-17;6-34;16-29;31-46;7-13;19-20
+2-3;20-22;17-29;11-38;6-7;16-29;40-49;24-45
+8-24;16-24;31-37;32-42;9-17;5-32
+1-8;14-15;23-24;6-17;48-49;9-30;18-23;3-9
+1-6;17-20;17-29;31-37;9-17
+1-10;1-11;14-15;13-33;33-40;6-28;32-48;19-51
+8-16;11-24;6-7;6-11;16-29;31-46;9-31
+15-18;20-21;8-24;8-26;11-17
+8-26;17-35;31-45;38-43;19-51
+14-16;25-26;8-20;17-28;11-38;6-34;6-11;31-47;32-44;32-42
+13-32;13-33;6-11;16-17
+1-9;20-22;39-42;24-45
+1-7;14-15;8-28;17-18;17-25;24-45
+1-4;8-24;6-28;32-44;24-31;24-45;24-50
+12-13;23-24;11-38;6-11;18-23;24-45
+0-1;14-17;11-24;6-25;32-48;9-15
+1-7;1-10;15-19;8-26;13-32;31-47
+1-7;20-22;25-26;6-34;6-11;39-42;19-20
+1-5;25-26;8-24;21-31;17-18;16-24;16-17;48-49
+15-18;8-20;17-36;33-40;5-7;19-20
+12-13;14-16;17-18;17-25;6-11;5-32;40-49
+6-25;16-17;9-15;19-41
+13-33;17-29;6-17;31-46;31-37;9-17;24-45
+1-7;17-20;6-8;6-17;16-17;32-48
+0-1;1-10;20-21;8-24;13-32;17-28;17-26;6-11;9-15;24-45;19-41;19-51
+1-5;14-17;17-20;17-24;17-26;33-40;32-42;9-31;3-9
+0-1;14-15;14-17;25-26;17-25;17-26;16-24;31-46;38-43;9-15;5-32
+1-10;8-16;17-18;6-8;6-34;7-13
+12-13;13-32;13-33;11-17;6-25;39-42;9-15;24-31;19-41
+1-6;1-11;8-20;8-24;6-7;6-17;48-49
+1-9;15-18;21-31;11-24;31-47;32-44;7-13;5-7
+15-19;11-24;6-11;31-46
+8-16;17-25;6-17;16-17;9-15;5-32;40-49;19-41
+25-26;13-33;17-18;16-24;32-44;9-30
+1-5;14-15;14-17;25-26;8-20;9-31
+17-28;33-39;31-45;32-48;9-30;9-19;5-8
+14-16;23-24;8-26;6-8;6-17;39-42;16-17;9-19;18-23;24-38;19-51
+0-1;1-4;1-5;1-7;14-17;15-19;33-40;31-37;31-47;9-17;9-19;19-41;19-20
+1-7;1-10;17-25;16-24;9-19;5-32;40-49;24-31
+1-4;14-15;6-7;6-17;32-44;9-30;9-19;3-9
+25-26;31-45;32-42;48-49;5-7;19-20
+2-3;15-18;18-23;19-41
+1-11;21-31;9-31;24-50
+20-21;8-28;17-35;11-17;6-7;6-34;9-15;19-41
+1-5;8-26;17-24;17-36;6-8;31-45;32-48;32-44;9-30;5-32
+1-4;20-21;23-24;8-16;17-36;33-39;6-34;38-43;9-15;5-7
+13-32;17-35;33-40;32-48;5-8;24-31;24-50
+12-13;14-16;23-24;11-38;16-17;18-23;3-9
+0-1;1-6;14-17;8-16;13-32;6-28;32-42;48-49;9-17;19-41
+2-3;8-20;17-28;9-31;5-8;40-49
+2-3;1-8;20-22;21-31;11-17;32-44;38-43;9-15;19-41
+13-33;33-39;33-40;31-47
+1-7;14-17;11-38;6-7;6-34;39-42;16-24;9-15
+1-11;12-13;15-18;13-32;17-25;5-7;3-9
+1-8;27-28;8-26;17-28;6-17;31-45;19-51
+2-3;8-16;8-28;11-17;6-17;31-37;32-42;5-32;18-23
+1-9;1-10;15-19;8-26;17-29;11-17;16-29;7-13;9-17;18-23;24-50
+2-3;27-28;8-24;17-35;17-18;6-7
+2-3;8-20;39-42;16-17;19-20;19-51
+1-11;17-35;17-18;17-24;6-17;31-45;31-46;9-15;24-38
+1-9;12-13;8-20;6-28;32-48;32-42;7-13;3-9;19-20
+14-16;15-19;13-32;17-24;6-25;6-34;32-48;38-43;9-31;40-49;19-51
+1-5;14-15;14-17;8-24;11-17;33-40;24-38;24-50
+1-4;13-32;13-33;11-38;39-42;31-47;32-42;48-49
+2-3;1-4;1-7;14-15;15-18;20-21;20-22;6-28;6-8;31-37;9-17;19-51
+1-7;1-9;15-19;23-24;25-26;31-37;5-32;24-38
+1-7;1-9;21-31;16-24;5-7;24-31
+0-1;1-4;1-11;17-20;9-30;5-32;24-31;3-9;19-51
+8-20;17-29;17-36;6-28;31-37;32-44;5-32;40-48;24-45
+23-24;27-28;13-33;17-28;17-24;11-38;6-34;16-17;7-13;24-31;3-9
+21-31;17-35;17-18;17-26;6-34;6-11;31-37;19-51
+1-7;14-16;8-16;17-20;17-26;11-17;6-7
+1-7;1-11;15-19;20-21;20-22;25-26;8-28;17-26;17-36;11-24;6-25;16-17;9-30;18-23;40-49;24-38
+1-7;17-26;11-24;6-11;31-46;9-31;5-32;19-51
+1-5;1-9;14-17;33-40;6-8;39-42;48-49;9-15;3-9
+2-3;1-10;14-16;15-18;6-28;40-48;19-20
+8-16;33-39;24-31
+1-6;1-11;12-13;8-20;13-33;17-28;11-17;7-13;9-30;18-23;19-20
+27-28;17-24;31-47;48-49;19-20
+21-31;16-24;31-45;32-44;32-42;9-30;24-38
+25-26;8-20;8-28;17-20;11-38;6-7;32-48;19-20
+6-17;16-29;32-48
+2-3;1-6;15-19;8-26;48-49;5-7;40-48
+2-3;1-11;14-15;21-31;17-28;9-30;18-23
+2-3;14-17;20-21;27-28;6-17;31-46;31-47;5-8;24-31
+17-35;6-28;6-25;39-42;9-31
+0-1;1-9;1-10;12-13;8-28;6-8;16-24;7-13
+14-16;15-18;15-19;25-26;8-20;17-35;17-29;6-17;32-44;9-15
+1-4;1-5;1-6;14-15;20-22;11-24;33-40;18-23;24-38;19-51
+12-13;14-15;6-28;6-11;39-42;16-24;31-37;9-15;9-20;5-8;24-50
+17-35;11-24;6-7;9-17;40-48;3-9
+1-4;1-7;23-24;17-24;6-17;31-47
+1-7;20-21;8-16;8-26;13-33;17-35;17-20;6-8;16-29;31-37;9-15;5-32;5-8;5-7
+1-7;15-19;17-36;11-17;6-28;39-42;31-46;48-49
+27-28;8-24;17-35;17-28;6-17;16-24;16-17;32-42;18-23;24-31
+25-26;7-13;19-20
+1-5;1-11;14-15;20-21;25-26;27-28;8-28;17-20
+0-1;8-20;8-16;11-24;16-29;9-31;9-19;24-50;19-41;19-20
+14-16;15-18;17-25;17-36;39-42;16-24;31-46;9-15;9-19;5-32
+1-8;14-16;8-20;17-18;17-25;17-36;31-45;38-43;9-17;9-19;19-41
+23-24;8-16;13-33;17-20;17-18;6-8;9-30;24-50
+15-18;8-16;17-28;17-24;17-29;16-29;19-20
+8-28;13-33;17-20;31-37;32-48;9-19
+1-8;1-11;23-24;8-26;17-18;32-48;9-19
+12-13;15-19;21-31;17-24;33-40;6-28;16-24;16-29;38-43
+1-5;14-15;17-18;6-8;6-11;39-42;31-46;5-7;40-48;19-41
+1-6;1-10;20-22;8-24;17-25;11-24;31-45;31-47;18-23
+14-17;17-18;11-24;38-43
+1-7;1-11;15-19;6-11;16-29;7-13;40-48;19-51
+2-3;1-8;20-21;33-40;16-17;48-49;5-32
+2-3;1-6;15-18;8-20;8-16;13-33;33-39;6-17;39-42;31-46;31-47;9-31;24-31;24-45
+2-3;1-5;1-8;12-13;14-16;20-22;8-28;8-24;8-26;21-31;32-48;9-17;24-45;19-41
+1-5;1-9;14-15;17-20;11-38;33-39;9-15;18-23
+14-15;25-26;11-38;6-34;32-48;24-45
+1-10;6-28;16-24;16-29;40-49
+1-4;1-6;14-15
+2-3;1-4;14-17;17-25;24-38;24-31;19-20
+2-3;1-9;27-28;32-44;48-49;9-31;9-30
+2-3;1-4;1-9;12-13;15-19;17-28;17-24;11-38;16-24;16-29;32-42;38-43;5-7;24-50
+1-6;8-20;13-33;17-26;33-39;6-25;19-20
+25-26;17-26;11-17;31-45;9-17;18-23
+1-7;1-10;14-17;23-24;25-26;17-26;6-7;6-8;24-45
+1-5;1-7;15-18;15-19;17-20;17-25;17-26;31-47;32-44;32-42;9-30;24-45
+1-6;1-11;25-26;11-17;6-11;31-47;9-20;9-30;5-8
+1-6;1-9;1-11;8-28;17-36;6-28;16-29;5-8;24-31
+1-10;14-16;21-31;48-49;40-49
+14-16;20-21;20-22;17-18;11-17;33-40;6-7
+17-20;11-24;6-17;32-48;5-8;3-9
+25-26;17-18;11-24;6-28;16-24;16-29;16-17;32-48;32-44
+23-24;25-26;17-35;31-37;38-43;9-31
+20-21;8-20;8-16;8-26;6-7;39-42;5-8;19-41
+14-17;20-22;13-33;17-35;17-20;6-17;9-15;5-7;24-31
+1-5;1-8;14-15;5-7;19-41
+21-31;31-45;9-15;5-8;3-9
+1-10;8-28;17-35;6-34;16-17;9-15;9-30;3-9
+1-7;1-8;15-18;17-24;11-38;6-7;31-47;18-23;24-50
+1-7;27-28;8-16;8-28;17-20;17-28;39-42;9-31;40-48
+1-11;23-24;25-26;21-31;17-24;33-40;9-17;5-8;24-31
+27-28;11-17;32-42
+2-3;1-6;1-9;17-28;17-24;16-24
+0-1;14-16;14-17;27-28;8-24;17-25;17-29;11-24;6-28;6-34;38-43;5-8;19-51
+1-4;8-20;8-26;11-24;6-8;5-32
+14-15;33-40;32-44;32-42;40-48
+1-6;8-16;13-33;11-17;5-8;18-23;40-49;19-51
+1-4;1-9;25-26;17-18;17-28;17-29;33-39;6-25;6-8;6-17;39-42;48-49
+0-1;17-29;11-24;6-25;9-17
+1-9;12-13;15-18;15-19;20-22;8-24;9-17;5-7;40-48
+1-11;20-21;17-18;31-47
+17-35;33-40;7-13;24-50
+0-1;17-29;6-34;16-24;18-23;40-48
+1-5;8-20;21-31;17-36;11-17;6-28;39-42
+1-8;20-21;8-24;17-36;16-29;38-43;19-41
+12-13;13-33;11-38;48-49;5-32;40-48
+1-8;14-16;21-31;17-24;33-39;33-40;16-24
+1-11;14-16;14-17;15-19;11-24;31-37;32-42;9-15;9-31
+1-10;14-17;23-24;8-16;8-28;39-42;24-38;19-41
+33-40;6-28;6-17;16-24;31-37;38-43;9-31
+1-9;8-24;31-37;7-13;19-20
+15-18;6-34;6-11;16-24;32-42;24-31;19-41
+17-29;31-47;32-48;5-7;24-38;19-20
+1-8;15-19;27-28;33-39;6-28;32-48;7-13;9-30
+8-20;17-35;11-24;6-8;6-17;6-11;31-45;31-46;32-44;9-15;9-30
+27-28;8-24;17-28;11-24;16-29;32-42;9-19;24-38
+1-10;20-21;8-28;17-35;17-25;17-29;11-38;31-47;9-17;9-19
+6-28;6-17;9-17;9-19;24-45;3-9;19-41
+0-1;20-22;17-18;16-17;38-43;9-19;24-38
+1-4;14-16;21-31;6-34;16-29;31-46;32-44;9-30;9-19;40-49
+1-8;11-38
+1-4;14-16;20-21;17-26;48-49
+15-19;17-26;11-38;24-38
+1-7;15-18;20-22;17-26;33-39;6-25;31-45;32-42;9-17
+1-4;1-5;1-7;1-10;23-24;17-20;17-28;17-26;24-31
+1-7;8-20;17-24;40-49;19-51
+1-9;12-13;13-33;17-25;31-37;9-31;5-32;5-7
+0-1;14-17;23-24;24-45
+21-31;17-20;11-24;48-49;7-13;19-20;19-51
+1-8;17-28;17-36;6-7;6-28;6-25;16-17;19-41
+1-11;15-19;8-16;17-35;17-36;5-32;18-23;24-50;19-20
+14-17;27-28;17-18;31-45;31-47;40-49;24-38
+1-10;14-17;21-31;33-39;16-24;9-17;19-41;19-51
+12-13;20-22;17-35;31-46;9-31;9-17
+14-16;15-18;8-20;17-25;33-40;6-7;6-8;32-44;24-50
+0-1;23-24;17-35;31-37;32-42
+1-11;8-16;6-11;38-43;24-45
+1-7;20-21;17-18;6-8;5-32;40-49;24-45
+1-7;20-22;25-26;13-33;11-38;33-39;6-7;31-46;24-45;19-41
+1-10;12-13;6-11;39-42;3-9
+14-15;7-13;5-7
+0-1;1-9;20-21;17-35;11-24;6-7;6-28;31-37;32-44;5-32
+15-19;13-33;17-28;17-25;24-50
+14-15;20-22;23-24;8-26;17-29;6-11;16-29;32-42
+1-6;27-28;8-24;17-35;17-24;17-25;11-38;6-17;7-13;9-15
+15-19;8-20;21-31;33-40;6-25;39-42;16-17;9-31;18-23;24-31
+1-4;15-18;25-26;17-35;11-17;16-24;40-48;24-38
+1-4;1-9;1-10;25-26;17-29;6-34;32-44;32-42;38-43;9-30;24-45;24-50
+1-6;14-16;11-24;16-29;24-45;19-20
+1-4;15-19;8-24;11-24;40-48;40-49;24-38
+0-1;1-4;1-8;23-24;8-16;8-28;13-33;17-28;6-7;31-37;31-47;32-48;24-31;19-20
+1-5;17-29;11-17;6-28;31-46;31-37;9-31
+1-6;1-8;20-22;8-26;16-29;32-44;9-15;9-30;40-48;24-38
+2-3;12-13;23-24;25-26;27-28;17-20;11-24;32-44;48-49;24-50
+1-9;6-8;5-8;3-9
+1-10;25-26;8-24;6-7;6-25;31-45;40-49
+14-17;8-20;8-16;17-18;17-28;17-29;17-36;6-28;6-34;16-17;48-49;7-13;40-48;24-38
+1-6;15-18;6-8;31-46;5-8;19-41;19-51
+20-21;20-22;17-18;17-24;11-17;16-29;32-44;9-30;5-32
+1-5;1-9;15-19;16-17;32-48;9-15;9-17
+12-13;8-24;17-24;11-38;6-17;31-37;3-9;19-51
+1-6;14-16;23-24;8-16;21-31;33-40;6-25;38-43;40-49
+27-28;31-46
+11-17;33-39;48-49;24-50;19-51
+2-3;1-7;1-11;14-16;27-28;13-32;17-29;40-48;19-20;19-51
+0-1;2-3;1-9;14-15;8-24;21-31;33-39;16-17;32-42;9-17;24-38
+14-17;6-8;31-46;32-48;24-50
+8-28;11-38;33-39;32-48;9-17;40-48;24-38
+1-11;15-19;20-21;11-38;6-7;31-37;9-15;5-32;24-45;19-20;19-51
+14-15;17-28;17-25;7-13;19-20
+1-9;15-18;27-28;11-17;33-40;38-43;40-48;24-38;3-9
+1-10;14-15;25-26;8-16;8-28;21-31;17-26;6-25;31-46;9-31;19-20
+8-26;13-33;17-20;17-26;48-49;7-13;24-31
+1-4;15-19;20-22;17-26;33-39;32-44;38-43
+1-4;1-7;1-8;12-13;21-31;17-26;6-17;39-42;9-15;5-32;18-23
+0-1;1-7;1-9;14-17;17-18;31-47;9-17
+15-18;11-38;31-45;9-31;5-32
+0-1;1-4;1-8;14-16;8-20;8-16;17-35;17-20;11-17;9-17;5-7
+23-24;17-18;11-38;6-25;6-8;6-17
+8-28;11-38;6-28;6-17;19-41
+1-5;20-21;39-42;48-49;9-19;18-23;40-49;24-31
+14-15;14-17;13-33;17-20;9-15;9-19;5-8;24-50
+1-9;1-10;15-18;8-16;8-26;17-36;33-39;16-24;9-19
+6-34;6-11;9-31;9-19;19-41
+33-40;6-25;31-45;32-44;9-19;24-50
+27-28;8-28;17-29;9-15;18-23;40-49
+2-3;6-11;16-24;16-17
+14-16;11-17;6-25
+1-7;8-20;21-31;6-25;16-29;31-47;32-42;48-49;5-8
+1-7;1-11;12-13;17-36;6-28;19-20
+14-17;8-24;9-31
+1-5;1-6;14-16;8-16;8-28;8-26;6-34;5-8;5-7;3-9;19-20
+27-28;16-29;31-47;32-44;9-30
+13-33;17-35;16-24;9-30
+27-28;17-18;16-17;5-8;18-23
+1-8;15-19;8-24;6-28;32-42;24-50
+1-11;27-28;21-31;17-25;11-24;6-25;31-45;9-31
+1-6;8-20;17-25;31-47;9-15;18-23
+1-5;1-7;14-16;20-22;17-20;32-48;7-13;24-38
+0-1;27-28;8-16;17-20;17-24;24-31
+33-39;33-40;39-42;16-29;31-46;48-49;9-15
+14-16;23-24;27-28;8-26;17-24;6-34;9-30
+1-10;14-16;8-26;13-32;11-24;6-17;6-11;9-15;9-30
+1-4;1-5;14-17;27-28;17-24;32-48;7-13;9-31
+15-19;25-26;32-48;5-32;40-49;24-31
+15-18;20-21;6-17;39-42;16-29;31-45;31-46
+1-6;11-38;9-15;5-7;3-9;19-51
+1-9;17-35;6-28;32-42;9-17
+1-7;1-11;15-19;8-20;8-28;21-31;13-33;17-18;33-39;24-50
+20-21;8-20;8-26;17-36;32-44;24-31
+1-7;1-10;11-24;6-34;16-24;31-45;31-47;38-43;19-20;19-51
+11-17;33-40
+1-8;25-26;8-26;17-36;11-38;6-28;32-42;18-23;24-31;19-20
+0-1;1-6;12-13;14-15;25-26;17-36;31-46;19-51
+1-5;17-29;39-42
+14-15;20-22;8-16;13-32;11-24;6-17
+1-11;14-16;23-24;17-35;17-20;17-28;11-17;33-39;16-24;32-44;5-7;19-41;19-51
+1-6;1-10;15-18;15-19;21-31;13-32;31-37;38-43;24-31
+17-35;17-29;6-17;31-45;31-46;7-13
+12-13;6-34;31-47;32-42;48-49;5-32;19-51
+1-9;8-24;33-40;31-46;38-43
+20-22;25-26;8-16;8-26;13-33;17-20;17-26;16-24;18-23
+0-1;1-6;1-11;17-28;17-24;17-26;33-40;32-44;9-31;40-49;24-50;3-9
+1-7;14-17;15-19;27-28;17-35;17-26;11-38;6-7;48-49
+0-1;1-7;8-16;33-39;16-24;31-45;38-43
+1-7;1-9;1-11;17-35;11-17;33-40;6-8;6-17;6-11;16-29;32-44;19-41
+1-4;14-15;13-33
+2-3;1-4;6-7;6-34;7-13;40-49;19-41;19-20
+2-3;1-5;1-10;14-15;25-26;6-25;6-8;6-11;16-24;24-50
+1-4;12-13;8-20;21-31;17-24;31-37;32-48
+1-9;23-24;8-28;8-26;16-29;32-48;32-44;48-49;9-30;19-20
+2-3;15-19;23-24;17-28;6-28;48-49;9-15;5-7;24-38
+1-9;14-16;11-17;5-7;24-50;19-41;19-51
+1-5;1-11;27-28;8-28;17-36;6-25;6-11;31-37;7-13
+20-22;23-24;8-16;8-24;17-35;11-38;32-44;48-49;9-30;18-23;24-50
+0-1;27-28;13-32;6-28;6-34;32-42;38-43;9-30;5-8;24-31;24-50
+1-6;25-26;6-11;16-24;7-13;3-9;19-41
+8-20;8-28;13-32;6-7
+12-13;15-19;20-22;39-42;31-46;5-8;19-41
+1-10;14-17;8-20;8-26;17-29;17-36;11-38;33-40;6-28;6-11;31-45;32-48
+1-6;15-18;33-39;16-24;32-48;9-30
+14-15;23-24;21-31;17-28;6-7;31-37
+0-1;17-20;17-25;11-17;6-17;39-42;16-29;9-31;18-23;3-9;19-20
+1-9;13-32;17-25;33-39;6-11;16-17;18-23;24-31;3-9
+1-7;1-11;9-19;19-51
+1-7;14-17;8-16;11-38;6-34;31-45;7-13;9-19
+12-13;20-21;11-17;6-7;6-8;16-17;9-31;9-19;24-45
+1-10;17-35;17-28;31-47;9-19;24-45;19-20;19-51
+17-25;9-19;24-45
+1-11;14-15;8-20;21-31;13-33;17-35;31-45;32-48;48-49;9-17;5-8
+1-5;20-21;11-38;6-7;16-24;31-37;5-32;40-49;24-31;3-9;19-51
+15-18;25-26;8-28;17-35;17-24;6-8;32-44
+23-24;25-26;27-28;11-17;38-43;5-8
+33-39;6-8;31-47;9-17;40-49
+2-3;1-4;15-19;17-24;33-40;6-34;16-17;24-38;24-50
+0-1;2-3;12-13;14-16;20-22;17-18;17-25;6-8;5-7
+14-16;17-24;11-24;9-15;5-8;5-7
+1-7;1-8;11-24;48-49;7-13;24-38
+1-5;1-7;1-10;8-20;8-26;13-33;9-31;9-17;24-31;24-50;3-9
+15-19;8-20;8-26;17-18;17-29;6-25;38-43;40-48
+17-25;17-36;6-7;39-42;16-17;32-48;9-17;5-8;24-31;24-50
+14-17;8-28;8-24;21-31;17-18;17-24;6-34;32-48;32-42;40-49
+1-5;1-11;14-15;15-18;27-28;13-32;7-13;38-43;19-51
+1-6;1-7;1-9;13-33;17-18;31-47;9-31;24-45;24-50
+1-4;1-5;14-15;23-24;17-24;17-36;32-44
+1-7;12-13;13-32;17-36;24-45;3-9
+0-1;1-8;8-28;17-36;6-25;39-42;32-42;7-13
+25-26;8-24;33-39;6-11;19-20
+25-26;8-20;8-16;17-26;33-40;16-29;32-44
+12-13;27-28;17-26;7-13;9-15;9-30;40-48;19-51
+1-6;1-11;14-17;20-22;21-31;17-25;17-26;6-17;38-43;9-31
+23-24;17-20;17-26
+1-5;11-24;16-29;31-37;24-45
+1-7;1-9;31-47;32-42;5-32;24-31;24-50
+1-6;15-18;20-21;17-35;33-39;6-25;9-30
diff --git a/examples/failures/failures-0.1 b/examples/failures/failures-0.1
new file mode 100644
index 0000000..08cb6a4
--- /dev/null
+++ b/examples/failures/failures-0.1
@@ -0,0 +1,1000 @@
+17-18;17-25;17-36;11-17;7-13
+1-7;12-13;14-16;21-31;33-39;9-17
+1-4;14-16;25-26;17-35;6-8;16-17;31-46;32-42;38-43;9-19
+20-21;23-24;8-20;17-20;11-38;6-28;9-19;19-51
+1-6;27-28;8-28;21-31;17-36;31-45;31-37;9-19;40-49;24-38
+1-11;8-26;13-32;17-18;17-28;6-25;16-17;31-45;32-42;9-19;5-32;24-50
+20-21;20-22;25-26;17-36;6-34;16-29;31-45;31-47;32-44;9-15;9-19;24-45
+2-3;15-18;20-22;25-26;27-28;6-28;6-8;6-17;6-34;7-13;38-43;9-31;9-19
+1-10;20-22;17-25;33-40;16-29;32-48;5-32
+1-11;14-15;20-21;20-22;8-28;17-35;17-28;11-24
+0-1;14-16;20-22;27-28;13-33;17-18;16-29;24-50;3-9
+20-22;23-24;11-38;11-17;31-47;32-42;5-32
+14-15;14-16;20-21;20-22;11-17;33-40;6-7;6-17;16-24;16-29;38-43;9-17;40-49;19-51
+1-4;13-32;11-24;11-38;6-7;16-24;7-13;9-30;9-19;40-48
+20-22;27-28;8-16;21-31;31-37;5-8
+20-22;17-35;33-39;16-29;5-32;24-31
+15-18;20-21;17-18;17-25;17-26;33-39;48-49;19-41
+12-13;27-28;13-32;17-26;17-29;6-28;6-25;16-17;9-31;24-31
+8-16;17-24;17-26;6-8;6-17;5-32
+2-3;1-6;20-21;25-26;17-29;7-13
+1-10;27-28;8-26;17-35;6-11;32-48;9-15;5-7;19-51
+0-1;17-18;17-24;17-29;6-28;6-8;7-13;5-32;5-8
+2-3;1-7;20-21;8-16;16-24;16-17;9-17;5-7;40-49
+23-24;27-28;21-31;17-20;11-24;6-17;32-42;9-30
+1-4;14-15;17-20;17-25;6-7;9-17;19-41
+1-8;15-19;17-24;6-25
+15-19;20-21;8-20;17-35;17-25;11-24;9-30
+1-5;15-19;8-20;8-28;13-33;17-18;6-34;9-31;19-41
+14-15;17-28;6-34;6-11;48-49;9-30;24-38;3-9;19-20
+1-7;1-9;1-10;20-21;13-32;5-8;19-20
+1-4;1-8;17-20;32-42;38-43;9-30;19-20;19-51
+1-4;1-9;14-16;17-35;33-40;6-7;6-28;40-49;24-31;24-45;19-20
+14-15;15-19;11-38;11-17;39-42;31-37;31-47;38-43
+1-9;12-13;14-16;21-31;7-13;24-31
+1-7;15-18;17-28;11-17;6-7;32-44
+1-4;1-8;8-24;21-31;17-28;11-24;6-17;6-34;9-31
+6-17;16-24;7-13;40-49;19-41
+1-5;11-24;6-8;6-11;39-42
+1-9;17-18;11-17;31-45;19-41;19-51
+17-28;11-24;6-28;6-25;32-42;24-50
+14-17;11-24;16-17;31-47;48-49;18-23;40-48
+1-8;1-10;1-11;14-17;23-24;13-32;38-43;5-7;40-49;24-50;19-41
+1-5;14-17;17-36;11-24;16-24;32-48;32-42;9-17;18-23
+0-1;14-15;14-17;15-18;21-31;13-33;17-20;17-18;17-25;48-49;5-7;24-38
+25-26;8-28;17-36;6-25;31-37;32-48;18-23;3-9
+1-11;13-33;6-28;31-47;7-13;3-9
+0-1;6-34;31-46;32-48
+14-15;17-29;17-36;6-8;38-43;18-23;24-45;24-50
+1-9;27-28;6-7;31-47;24-45
+12-13;17-18;17-29;17-36;6-17;6-34;32-44;32-42;9-15;18-23
+2-3;1-6;1-7;1-11;8-20;8-28;8-26;6-7;6-28;40-49;24-31
+8-20;8-26;9-31;24-38
+14-16;8-16;16-24;16-17;31-46;9-17;24-50;19-41
+1-10;15-18;23-24;21-31;13-32;17-25;32-44;9-19
+14-15;15-19;27-28;8-24;17-20;17-26;6-11;16-29;9-15;9-17;9-19;40-48;24-38;24-50
+15-19;20-21;17-26;6-34;31-37;38-43;9-30;9-19;24-45;19-51
+0-1;1-10;15-19;21-31;17-35;17-26;6-28;6-8;16-29;9-31;9-19;3-9
+1-5;23-24;17-35;31-37;38-43;40-49
+1-7;1-8;14-15;8-20;8-26;13-32;13-33;32-48;7-13;9-30;9-19;5-8;3-9;19-41
+1-5;8-20;8-24;8-26;16-24;16-29;48-49;19-20
+15-19;13-32;13-33;17-18;17-28;6-28;6-17;16-29;7-13
+1-5;15-19;6-8;31-46;32-42;9-31
+2-3;14-15;15-18;15-19;23-24;13-33;17-24;16-24;16-29;32-44;5-7;24-45;3-9
+1-7;21-31;17-35;11-17;6-11;9-15;9-17;40-48;3-9;19-41
+14-16;25-26;31-45;32-42;9-30;9-17;40-49
+1-10;1-11;17-36;6-7;31-45;9-15;5-8;24-50
+2-3;1-5;8-16;21-31;17-25;9-31;9-30
+0-1;12-13;8-24;17-20;17-36;11-17;33-40;6-17
+8-20;16-29;32-42;5-32;5-8;24-38;24-31
+12-13;17-24;17-29;11-17;16-24;9-15;24-31;19-41
+1-11;14-15;8-28;13-32;17-36;11-17;6-25;6-11;32-48;7-13;40-48;24-38
+8-16;17-29;6-28;6-8;32-42;48-49
+1-7;8-24;17-24;5-7
+14-15;8-26;17-29;6-17;5-8;40-49;19-51
+1-5;1-11;23-24;8-26;13-33;11-24;5-7;3-9
+8-16;8-28;17-24;9-17;3-9
+25-26;8-24;21-31;13-33;17-28;17-25;11-24;6-34;31-37;31-47;32-44
+14-17;8-28;11-24;6-28;31-46;31-37
+14-17;20-21;27-28;17-18;17-28;5-32;18-23;40-49;24-50
+8-20;8-16;8-28;8-24;17-28;33-40;9-15
+1-7;1-8;14-17;21-31;17-25;11-24;39-42;5-8
+15-18;8-24;17-28;32-44;5-8;19-51
+27-28;8-26;17-35;17-24;11-38;6-7;16-17;31-46;7-13;5-32;5-7;24-45
+20-22;23-24;8-20;33-39;32-42;9-15;40-49
+14-15;15-19;17-18;17-36;6-8;6-34;39-42;31-47;5-7;40-48
+1-8;1-11;15-19;8-16;8-24;17-20;17-24;16-24;9-15;18-23;19-41
+12-13;23-24;13-32;17-36;6-17;31-46;32-42;48-49;9-31;3-9
+12-13;17-35;6-25;16-17;31-37;38-43;9-30;18-23;40-49;24-31
+17-24;17-36;33-39;6-11;39-42;24-38;19-51
+1-6;1-10;1-11;8-16;8-24;21-31;17-18;17-25;33-39;31-45;31-47;48-49;9-30;24-45
+1-8;8-20;8-26;13-33;17-29;16-29;31-46;40-48
+1-5;8-20;13-33;17-36;11-38;31-45;31-46;19-20
+0-1;8-20;17-20;6-28;6-17;31-45;9-30;40-48;19-20
+1-10;17-26;17-29;39-42;32-42;38-43;19-20
+1-11;8-16;17-26;11-24;7-13;9-30;5-8;19-20
+2-3;14-16;23-24;8-28;17-18;17-26;17-29;6-8;16-24;31-46;31-47;32-48
+25-26;8-26;6-11;7-13;9-31;9-30;19-41
+14-16;8-26;17-28;17-29;6-17;39-42;9-17;40-49;24-45
+2-3;1-5;13-32;17-20;11-17;16-29;38-43;9-30;19-51
+14-15;15-18;21-31;11-38;11-17;33-40;6-7;16-17;31-46;9-15;40-48
+1-7;8-28;17-18;11-17;6-7;16-29
+1-10;12-13;15-18;17-36;11-38;6-25;48-49;5-32
+0-1;1-10;17-28;39-42;48-49;5-8
+12-13;16-29;5-7
+0-1;8-16;8-26;11-38;11-17;39-42;9-19;5-32
+1-10;1-11;14-16;8-26;13-33;17-36;11-17;6-17;48-49;9-15;9-19
+17-18;6-28;39-42;9-31;9-19;40-49;19-51
+1-5;14-16;23-24;17-35;17-36;38-43;9-19;5-32;24-38
+15-18;25-26;33-39;31-37;32-44;7-13;9-19
+1-11;27-28;17-36;31-37;9-17
+14-15;6-17;5-32
+15-19;17-36;6-34;16-24
+0-1;1-11;12-13;14-15;15-18;17-35;17-36;16-17;32-48;48-49;7-13;38-43;9-15;5-32
+2-3;1-11;17-35;17-29;6-8;16-24;16-29;38-43
+1-5;1-8;8-26;13-32;17-20;6-7;6-17;31-45;5-32;40-48
+1-11;15-19;11-24;40-48;24-45;19-51
+1-4;14-17;20-21;17-24;11-24;5-8
+2-3;1-4;14-17;21-31;17-35;17-28;17-29;32-44;7-13;38-43;9-31;5-32;40-49
+1-6;1-10;17-29;33-40;39-42;31-45;48-49
+15-18;17-28;31-45;7-13
+1-6;14-16;23-24;13-33;17-20;17-18;6-28;6-34;5-32;18-23
+27-28;17-28;32-44;48-49;40-48
+14-15;20-21;25-26;17-35;33-40;6-11;31-37;32-48;38-43;9-15;9-17;18-23;19-51
+8-16;8-28;33-39;5-32;5-7
+2-3;12-13;14-16;8-24
+1-7;1-8;27-28;6-28;6-17;18-23
+1-11;12-13;20-21;13-32;17-18;32-44;9-15;5-7;40-49
+1-6;8-24;6-17;6-34;9-31;24-45
+15-18;27-28;8-16;8-26;17-35;38-43;24-31;3-9
+0-1;23-24;8-28;8-26;17-36;16-24;31-47;40-48;3-9
+1-5;1-8;14-16;21-31;13-32;33-39;6-7;16-29;9-30;24-38;24-31;19-51
+1-7;20-22;27-28;17-18;17-36;33-40;6-25;32-42;7-13
+2-3;1-5;20-22;8-20;17-26;11-24;6-7;31-37;9-17;19-51
+20-22;8-20;17-35;17-26;17-36;6-8;48-49;5-32;24-45;19-41
+1-9;1-11;20-22;27-28;17-26;11-24;6-28;31-47;32-48;24-38
+1-7;12-13;14-15;17-18;39-42;32-44;48-49;7-13;9-15;9-31;24-45
+1-4;8-26;17-26;6-7;39-42;18-23
+1-9;20-22;21-31;13-33;17-18;17-25;11-17;48-49;9-15;9-31;5-32;40-48;24-50
+0-1;1-4;23-24;18-23;40-48
+1-9;14-16;17-35;6-28;6-25;16-24
+0-1;1-5;17-28;6-34;16-29;31-47;9-15;5-32;19-51
+1-9;14-15;14-16;15-19;23-24;27-28;6-34;24-45
+1-10;12-13;15-19;17-18;17-29;16-29;31-37;9-17;24-50
+1-9;15-19;8-26;33-39;7-13
+2-3;17-28;17-25;17-29;11-38;33-39;6-8;16-29;31-45;5-7;40-48;40-49;24-31;19-41
+1-6;1-9;6-11;31-45;7-13;38-43;5-8;3-9
+1-5;11-38;38-43;9-17
+1-11;15-18;15-19;20-22;23-24;17-28;6-28;16-24;32-42;9-31;5-8
+15-19;20-22;8-20;17-29;6-17;16-29;31-46;7-13;38-43;24-38;24-45
+17-28;33-39;31-37;9-17
+1-5;14-16;15-19;20-22;8-20;17-29;16-29;31-45;32-44;19-51
+1-7;1-10;1-11;20-22;8-26;17-35;17-20;17-28;17-36;31-45;31-37;3-9
+14-16;20-22;13-32;16-29;31-45;31-46;3-9
+20-22;21-31;17-36;6-7;6-25;6-17;39-42;32-42;40-48;19-41
+25-26;6-7;6-34;16-29;32-44;5-8
+1-4;1-5;1-8;15-18;13-33;6-17;9-19;19-41;19-20
+17-35;11-17;33-39;6-28;16-24;31-46;9-19;24-31
+8-20;8-28;6-25;40-48
+1-5;1-7;13-33;17-20;11-17;33-39;9-19;5-7
+2-3;23-24;17-25;11-17;6-11;32-44;9-19;40-49;24-31
+0-1;33-40;6-8;7-13;9-15;9-19;19-51
+14-15;6-28;31-46;31-37;31-47;48-49;9-31;9-17;40-48
+8-28;17-35;11-24;16-17;5-8
+1-10;11-17;33-39;6-28;16-24;31-47;9-30;40-49;3-9
+8-28;17-18;33-39;48-49;24-45
+15-18;11-24;6-11;16-17;9-15;9-30;5-7
+1-10;8-20;8-24;8-26;13-32;17-24;17-29;11-24;11-38;11-17;6-7;9-31;40-48;24-50
+17-28;6-28;5-7;40-48;19-51
+2-3;15-19;20-22;17-20;31-46;9-17;24-50
+6-7;31-47;32-44;32-42
+21-31;13-33;17-35;17-28;33-39;7-13;18-23;24-38
+15-19;23-24;8-24;17-26;33-39;31-47;38-43;9-15
+1-5;1-8;14-16;15-19;27-28;8-16;8-28;17-26;6-8;6-11;31-45;32-48;32-42;5-32;18-23;19-41
+1-6;15-19;17-26;31-45;31-46
+1-11;23-24;25-26;8-20;8-28;8-26;17-26;16-29;38-43;5-32;24-50;19-20
+1-6;1-7;8-24;17-20;17-36;6-34;32-48;32-42
+2-3;1-4;12-13;8-16;6-25;31-47;9-31;18-23
+17-18;33-39;16-17;5-32;19-41
+1-10;1-11;14-15;17-35;6-11;16-29;31-47
+15-19;20-22;23-24;8-28;17-28;17-36;6-34;6-11;3-9
+12-13;27-28;8-28;8-24;17-24;11-38;48-49;7-13;38-43;24-50
+2-3;12-13;17-25;6-28;16-29;32-44;5-32;5-8
+1-7;14-16;13-33;17-20;6-7;6-25;6-8;6-17;16-24;32-42;40-49;24-31
+1-8;14-15;23-24;11-24;6-8;19-51
+14-16;15-18;13-33;17-35;31-47;5-32;24-31;24-45
+1-6;32-48;32-44;38-43;24-50
+25-26;27-28;8-16;17-28;11-24;31-37;9-31;9-17;3-9
+0-1;6-17;5-32;5-7;3-9
+1-5;17-20;17-18;11-38;5-8;19-41
+27-28;8-26;17-35;6-25;32-44;5-7
+0-1;1-11;15-19;20-22;27-28;13-33;17-35;11-38;6-17;6-34;9-15;9-31;3-9
+1-6;1-10;8-16;17-28;17-25;17-29;9-15;5-32;19-51
+20-22;39-42;16-24;7-13;40-49;24-45
+2-3;15-18;20-22;27-28;21-31;17-29;6-17
+1-8;14-15;20-22;17-18;32-42;7-13;5-32
+20-22;8-16;13-32;17-35;33-40;6-28;16-17;48-49
+15-19;21-31;13-33;17-25;17-36;31-45;9-15;9-30;5-32;40-49
+1-4;20-22;8-20;8-28;11-38;11-17;33-39;6-34;32-48;5-32
+0-1;1-4;20-22;8-20;13-33;11-17;6-17;6-11;31-45;31-46;24-31
+1-4;1-8;15-19;20-22;25-26;27-28;17-18;33-40;31-45;24-45
+1-4;1-6;15-19;13-33;17-25;6-7;39-42;31-45;32-42;5-32;40-49;24-31;19-51
+1-5;14-16;8-16;21-31;6-8;39-42;16-24;24-38
+15-19;6-7;6-25
+1-7;1-10;14-16;8-28;21-31;17-20;11-24;31-46;38-43;19-41
+1-5;23-24;5-8;24-38;3-9
+1-8;14-16;8-26;17-18;39-42;9-15;3-9
+25-26;8-20;21-31;17-20;11-24;6-8;6-17;9-31;5-32;18-23
+14-17;13-32;6-8;31-46;31-47;48-49;9-17;9-19;24-45
+2-3;14-17;17-25;38-43;9-19;5-7;19-51
+0-1;1-7;14-15;14-17;17-20;17-28;17-26;6-28;6-25;39-42;32-48;9-19
+1-8;1-11;14-17;17-18;17-24;17-26;6-8;48-49;9-19;24-50
+1-5;12-13;14-17;15-18;25-26;17-26;17-36;31-46;24-38
+13-33;17-25;6-25;31-46;32-48;18-23
+12-13;14-15;23-24;21-31;17-26;16-17;31-47;32-42
+17-28;17-24;17-36;6-11;39-42;38-43;19-41
+1-10;1-11;8-28;11-38;18-23;24-31;24-45
+1-6;17-20;17-18;17-36;16-24;31-46;31-37;9-15;9-31;24-50
+13-33;17-24;11-24;33-39;6-34;9-17;18-23;24-31;19-20
+17-28;17-25;17-29;17-36;33-40;6-34;39-42;31-47;7-13;9-30;19-20;19-51
+1-9;1-11;13-32;11-24;6-7;32-42;38-43;9-15;18-23;40-49;19-20
+0-1;15-18;8-16;8-28;8-26;17-29;6-7;31-46;7-13;9-30;19-20
+1-4;1-5;23-24;6-17;16-17;24-45
+2-3;17-25;6-7;6-8;7-13;19-41
+1-5;1-8;6-28;6-25;32-44;5-8
+1-6;14-16;27-28;17-28;40-48;24-45
+1-10;17-35;17-29;18-23;40-49
+25-26;8-16;11-17;31-46;9-30;19-41
+1-9;14-16;16-24;31-37;9-31;5-8;19-51
+17-35;17-18;39-42;9-30;9-17;5-7;24-50
+1-5;15-19;8-26;11-38;11-17;31-45;31-37;38-43
+1-9;15-19;8-20;13-32;11-17;39-42;16-29;9-17;5-32;24-50
+1-5;1-7;15-18;16-29;16-17;9-15
+0-1;1-6;13-32;39-42;31-45;32-42;24-31
+1-8;17-36;6-11;16-24;5-8
+0-1;1-6;1-9;23-24;17-20;39-42;16-17;40-49;3-9;19-51
+1-4;1-7;21-31;11-38;9-30;5-7;24-38
+1-11;8-16;17-28;17-36;6-7;6-28;6-8;32-48;32-42;24-50
+1-5;1-9;14-16;21-31;13-32;33-40;6-7;9-15;9-31;24-31
+1-6;1-7;25-26;17-28;33-39;16-29;32-44;38-43;9-17
+1-5;8-28;17-35;17-18;33-39;6-7;6-28;6-34;31-46;32-42;48-49;40-49
+2-3;1-4;15-18;6-7;6-34;16-29;3-9;19-41
+1-4;6-17;39-42;40-48
+13-32;17-25;32-42;24-45
+8-26;17-18;17-29;6-17;39-42;16-24;7-13;40-49
+1-6;25-26;8-16;8-26;33-39;19-51
+2-3;1-5;14-17;27-28;17-25;33-40;6-8;32-44;32-42;5-32;3-9
+1-4;17-29;33-40;6-11;32-48;9-15;24-50
+0-1;1-6;1-9;14-16;14-17;23-24;13-32;13-33;17-35;31-46;9-31;40-48;3-9
+12-13;17-20;6-25;6-34;39-42;32-48;40-48
+1-9;14-16;14-17;27-28;8-28;5-32;40-49;24-50
+1-6;17-25;17-26;6-28;6-8;31-47;9-17;24-45;19-20
+1-9;1-11;12-13;14-15;25-26;17-26;11-38;33-39;31-46;31-37;32-48;24-45
+17-26;39-42;16-17;38-43;3-9;19-20;19-51
+1-5;6-25;6-34;31-45
+1-7;20-22;8-16;17-36;6-34;31-45;48-49;18-23;40-48;24-50
+1-11;20-22;27-28;17-25;31-45;7-13;5-32;24-31
+0-1;2-3;14-17;8-20;21-31;11-17;39-42;9-31;19-41
+1-10;8-16;8-28;6-34;9-30;5-8;5-7;19-51
+14-16;14-17;25-26;16-17;7-13;38-43;9-30;9-19;24-45
+1-8;14-15;14-17;15-18;8-26;17-35;17-28;31-45;31-37;9-19;5-7
+1-6;1-7;14-16;8-26;17-18;17-25;33-40;6-28;6-25;6-17;31-45;32-48;9-30;9-19
+1-4;1-10;13-32;6-8;39-42;31-45;31-47;32-44;32-42;9-19;5-7
+1-4;17-24;9-30;9-19;40-49;19-51
+1-4;1-5;17-28;16-24;38-43;5-8;18-23;40-48;24-38
+1-4;1-8;12-13;15-19;8-28;17-35;11-38;33-39;6-28
+1-6;15-19;13-33;17-18;17-24;33-39;39-42;32-44;9-15;18-23;24-45
+12-13;14-15;8-28;8-26;38-43;9-31;24-45
+12-13;14-16;23-24;8-26;17-29;6-17;6-11;16-29;7-13
+17-20;17-18;17-25;17-29;6-17;39-42;16-24;19-41
+0-1;1-5;11-38;33-40;31-47
+14-15;14-16;8-24;21-31;17-29;16-24;16-29;48-49;7-13;5-8;40-48;19-51
+13-32;33-39;6-7;6-28;31-37;9-15;5-7
+8-28;17-20;11-24;33-39;16-29;38-43;9-17;24-31
+2-3;17-25;33-40;6-25;6-17;32-48;5-7;19-41
+8-24;11-24;6-8;6-34;16-29;24-38;24-45
+1-11;8-26;13-32;17-20;17-36;11-24;6-17;38-43;3-9
+1-7;1-10;27-28;16-24;31-46;32-48;9-15;9-31;5-8;40-48;24-38;24-31
+1-6;15-18;11-38;38-43;5-8;40-48;19-51
+8-24;17-20;17-24;16-17
+1-8;17-35;11-24;9-30
+1-11;14-16;23-24;27-28;13-33;17-36;32-42;7-13
+14-15;6-17;31-45;31-46;38-43;5-32;5-7;40-49
+0-1;14-16;8-16;17-28;17-36;11-38;33-40;6-34;6-11;16-17;31-45;32-44
+1-7;25-26;27-28;8-24;21-31;6-34;31-45;31-37;5-7
+1-11;17-18;6-8;9-17;5-32;5-8;40-48
+1-5;17-24;31-46;48-49;19-51
+12-13;15-18;27-28;6-7;6-17;16-24;32-48;32-42;38-43;9-31
+15-19;8-24;13-32;16-17;9-15;5-32
+1-10;15-19;23-24;17-24;17-26;32-48
+2-3;1-6;15-19;8-26;17-18;17-26;11-17;31-46;19-41
+1-10;15-18;11-24;6-8;31-46;9-31
+8-26;17-26;11-38;11-17;6-25;9-15;5-32;40-49;24-31
+14-17;8-28;8-24;17-24;17-29;11-24;11-17;6-28;6-17;40-48
+0-1;1-5;14-15;14-17;21-31;31-37;24-38;24-31;24-45;3-9
+14-17;13-33;17-29;31-46;31-47;7-13
+14-17;17-18;17-24;9-17;19-51
+14-15;14-17;15-18;25-26;8-20;8-24;13-33;17-20;17-25;16-24;9-31
+1-10;23-24;8-16;8-26;17-29;17-36;31-47;32-48;32-44;48-49;24-38
+33-39;6-25;6-8;31-46;32-48;32-42;24-50
+13-32;11-38;33-39;16-17;31-47;40-48;40-49
+1-10;14-16;23-24;8-24;17-18;33-40;48-49;24-38;24-45;19-41
+1-9;20-21;13-32;6-28;16-29;9-17
+1-5;1-6;17-24;17-25;6-7;31-47;32-48;32-42;18-23;24-45
+1-4;1-8;12-13;14-16;8-16;21-31;17-20;6-34;31-46;31-37;19-51
+1-11;27-28;8-20;13-32;11-38;6-25;39-42;48-49;7-13;3-9
+1-7;12-13;15-18;8-20;17-24;33-39;6-17;31-37;32-44;5-8;3-9
+1-4;8-26;17-18;17-25;6-28;16-24;7-13;9-31;5-8;18-23
+8-16;31-46;40-48;24-31
+1-8;25-26;11-24;11-38;18-23;24-38;24-45
+1-5;17-25;11-24;6-34;31-45;32-44;9-19;5-32;24-45
+14-16;27-28;13-33;6-34;16-29;9-19;19-51
+11-24;9-19;5-7;24-31;24-50
+1-6;1-7;14-15;13-33;17-24;11-24;6-11;32-44
+1-10;14-16;23-24;8-26;11-38;6-28;39-42;16-24;16-29;31-47;9-19;5-32;5-8
+27-28;8-26;17-29;33-40;32-48;32-44;5-7;40-48;40-49
+15-18;20-22;25-26;16-29;31-37
+1-8;1-10;48-49;7-13;9-30;3-9
+17-35;11-38;6-7;6-34;16-17;3-9
+0-1;14-15;17-24;6-7;6-17;6-34;9-30;9-17;5-32;40-49;19-51
+1-11;8-28;21-31;17-18;17-36;6-28;39-42;16-24;31-46;48-49;5-8
+1-7;8-26;31-47;9-30;40-48
+25-26;8-26;17-24;17-36;6-25;6-8;9-31;5-32;5-7;24-38
+2-3;14-16;13-33;17-35;9-30;19-41
+6-8;6-34;16-29;32-42;48-49;5-8;24-50;19-41
+1-11;12-13;15-18;17-20;17-28;17-36;6-28;39-42;31-46;32-44;32-42;5-7
+12-13;27-28;8-28;13-33;17-18;11-17;9-30;5-32;24-50
+1-5;13-32;11-38;11-17
+1-7;17-26;11-17;33-40;31-37;32-48;9-15;9-30;5-8
+1-10;1-11;14-17;27-28;17-35;17-28;17-26;39-42;31-46;32-44;7-13;5-32;40-48;40-49;19-20
+0-1;1-6;14-17;21-31;17-26;11-24;6-25;16-24;16-17;9-17;19-20
+14-17;17-20;17-18;32-42;24-31;24-50;19-20
+14-17;27-28;33-39;33-40;48-49;5-32;19-20
+14-17;17-25;33-39;6-8;39-42;32-44;38-43
+1-5;1-7;14-15;23-24;17-35;6-28;3-9;19-41
+23-24;25-26;8-16;17-36;6-11;31-37;9-31;18-23;24-45
+1-6;1-9;1-11;14-16;20-21;23-24;25-26;8-16;8-26;17-36;6-25;6-17;16-17;9-30;19-20;19-51
+1-9;25-26;27-28;11-38;6-11;16-17;31-45;5-32;3-9
+1-8;1-9;1-11;21-31;17-24;6-25;6-17;6-11;31-47;32-48;9-15;9-31
+1-10;12-13;17-25;33-40;6-8;9-17;40-48
+0-1;12-13;14-15;14-17;16-17;19-51
+1-9;21-31;6-34;16-24;32-48;9-17
+0-1;12-13;8-16;17-29;18-23
+1-5;1-8;1-9;27-28;13-33;17-18;6-25;39-42;32-44;9-15;5-32;24-50
+15-18;23-24;8-28;17-25;17-29;6-11;32-42;7-13;5-7;18-23
+1-9;14-16;11-38;6-17;31-47;48-49;38-43;40-48;24-45
+1-4;1-6;15-19;27-28;8-16;13-32;5-32;5-7;18-23
+0-1;2-3;1-5;17-24;17-26;16-29;40-49;24-31;24-45
+1-10;21-31;17-35;17-24;17-29;17-36;33-39;31-46;32-42;9-31;19-20;19-51
+17-25;11-17;6-17;31-47;9-17;19-20
+1-6;11-38;11-17;6-8;39-42;32-48
+0-1;2-3;11-17;9-30;18-23
+2-3;13-32;17-25;33-40;6-11;39-42
+1-9;16-29;31-47;32-44;9-31;9-17;40-49;24-31
+1-8;14-15;17-18;17-24;11-38;11-17;33-39;6-28;16-29;16-17
+0-1;1-9;14-16;25-26;17-35;31-46;5-32;19-41
+1-7;33-40;6-7;6-17;39-42;16-29;31-47;7-13
+1-11;12-13;17-28;17-24;6-7;9-15;9-31;40-49
+17-26;32-44;5-7;40-48
+12-13;13-32;16-29;31-37;5-8
+1-8;13-33;17-20;17-18
+12-13;27-28;8-16;8-24;8-26;17-35;33-39;33-40;6-28;31-37;9-30;19-20
+14-15;33-39;6-8;32-44;9-19;5-32;24-45;24-50;19-20
+1-10;15-18;17-20;31-45;9-15;9-31;9-17;9-19;19-20;19-51
+1-6;27-28;21-31;17-24;17-29;6-17;31-45;31-46;48-49;9-19;19-20
+1-8;14-15;23-24;8-16;8-24;11-24;33-40;31-45;9-19;5-32;5-8;3-9;19-20
+1-11;14-16;17-20;17-36;16-17;5-8
+1-4;1-5;27-28;17-24;17-25;17-26;11-24;11-38;6-34;16-24;24-31
+14-16;8-26;17-26;17-36;6-28;31-45;31-37;38-43;24-45
+1-6;20-21;21-31;13-32;17-28;17-26;11-38;16-29;24-31
+1-4;8-28;8-24;17-20;17-28;17-26;6-17;16-17;24-31;24-45
+1-11;21-31;13-32;17-18;16-24;31-45;7-13;3-9
+2-3;15-18;8-20;5-32;40-49
+17-35;17-20;48-49;19-51
+1-6;27-28;8-24;21-31;13-33;17-28;17-24;9-15;24-38
+1-5;1-10;17-25;6-28;6-17;16-17;32-44;5-32;5-7
+1-8;14-16;14-17;15-19;8-26;11-38;6-25;48-49
+0-1;1-11;12-13;14-17;15-19;23-24;27-28;16-24;31-46;9-15;5-7;24-45;19-41
+1-7;14-16;14-17;15-19;20-22;8-24;17-28;6-11;32-48;5-32
+1-6;14-17;20-22
+12-13;17-20;17-26;11-17;33-40;31-46;32-48;24-50
+14-15;14-17;20-22;25-26;13-32;33-39;6-17;31-37;7-13;40-49;19-51
+1-8;1-11;20-22;11-24;33-39;31-46;31-47;5-32;24-38;3-9
+1-5;20-22;8-24;17-36;38-43;9-17;3-9
+2-3;20-22;21-31;11-24;11-17;33-40;24-31
+1-7;20-22;17-25;17-36;11-38;11-17;32-42
+1-6;17-35;6-8;9-30;40-49;24-31
+1-8;25-26;8-24;21-31;17-20;33-39;5-32;5-7;18-23
+2-3;1-4;14-16;27-28;13-33;17-29;11-17;33-39;6-7;6-17;32-42;9-30;24-31;24-45;19-51
+1-4;23-24;8-28;17-18;11-17;6-7;31-47;32-44;18-23
+0-1;1-4;1-10;14-16;15-18;17-29;11-17;31-45;9-30;5-32
+1-8;15-18;25-26;11-17;32-42;9-31
+8-24;8-26;17-29;6-7;32-42;48-49;9-15;18-23;19-41
+12-13;8-28;13-32;13-33;33-40;16-17;31-47;24-50
+17-20;6-25;6-17;16-24;32-44;9-15;5-32;5-8;3-9;19-41;19-20
+27-28;8-28;17-18;17-28;16-29;31-47;32-42;48-49;9-17;40-49;3-9;19-20
+12-13;8-24;6-28;6-34;16-17;24-45;19-20
+21-31;13-32;33-40;6-8;6-34;16-29;38-43;5-32
+1-8;23-24;27-28;17-25;32-44
+12-13;15-19;6-25;16-17;9-15;5-32;5-7;19-41
+14-16;15-18;15-19;17-35;16-24;5-8
+1-7;15-19;23-24;13-32;6-17
+1-9;12-13;20-21;8-24;17-18;17-36;6-34;40-49
+0-1;1-10;14-15;8-16;8-28;13-33;11-24;6-28;6-34;31-46;31-47;7-13;9-31;5-32
+8-20;17-36;16-24;32-48;5-32;24-45
+15-19;27-28;8-20;13-33;6-11;7-13;40-49;24-31
+1-11;15-19;17-18;17-26;17-36;5-7;24-50;19-51
+1-5;1-6;1-7;14-15;15-19;23-24;21-31;13-33;17-26;33-39;6-7;32-44;32-42;48-49;5-32
+17-25;17-26;17-36;33-39;9-15;5-7;19-41
+14-16;15-18;8-16;13-32;17-26;5-8
+1-4;23-24;21-31;33-40;6-8;16-24;32-42;48-49;19-41
+1-4;8-20;17-35;17-20;17-25;6-11;38-43;24-38
+1-4;27-28;8-20;17-29;9-31;9-19;5-32;24-45
+1-10;15-19;8-20;17-28;9-15
+1-7;8-16;6-25;16-24;16-17;32-42;9-19;5-32;40-49
+8-26;17-20;17-24;11-17;9-19
+1-5;12-13;14-17;27-28;17-28;9-30;9-19;5-32
+1-6;21-31;17-18;11-17;6-34;9-31;24-50
+15-18;8-16;8-28;17-28;17-24;17-29;11-24;6-34
+1-6;14-16;23-24;25-26;27-28;13-33;11-24;11-17;6-25;6-11;31-45;5-32;24-38;24-50
+17-29;33-40;6-11;31-46
+1-11;14-15;14-16;13-33;17-25;11-24;11-17;39-42;32-44
+1-7;27-28;8-26;6-7;16-17;48-49;9-31;9-30;5-32
+1-5;1-10;8-16;6-7;6-34;24-31;3-9
+1-11;14-15;23-24;11-17;33-40;6-8;6-11;32-42;9-17;40-48
+14-17;20-21;17-24;11-38;33-40;6-28;6-17;31-45;31-46;24-38
+1-5;1-9;14-15;14-17;25-26;17-25;6-7;6-25;6-8;32-42;38-43;9-17;40-48
+14-17;21-31;17-28;9-31;5-7;24-45
+1-7;1-9;12-13;15-18;20-21;23-24;8-20;17-20;17-18;33-39;6-11;16-24;32-48
+8-16;13-32;17-28;11-24;11-38;6-7;31-45;32-42;24-50
+14-15;17-25;17-36;6-34;31-45;31-37
+2-3;1-4;20-21;16-17;7-13;38-43;5-8
+1-4;1-6;1-9;14-16;11-24;31-37;32-42;40-49;24-38
+0-1;1-5;13-32;17-18;11-38;6-25;31-46;40-48;19-41;19-51
+1-7;1-8;20-21;17-35;17-20;11-24;31-47;48-49;24-45
+1-5;1-6;20-21;17-29;11-17;6-7;7-13;5-7;24-45
+1-10;8-28;6-17;9-17;24-31
+15-18;23-24;21-31;38-43;9-15;9-31;18-23
+1-6;20-21;25-26;6-34;16-24;31-46;32-48;24-31
+15-19;17-18;6-28;6-34;5-8;18-23
+1-8;15-19;13-33;17-35;6-8;6-11;24-38;19-20
+1-5;1-7;14-15;15-19;20-21;8-28;11-17;18-23;40-48;40-49;19-20;19-51
+1-11;11-38;11-17;31-46;31-37;24-50;19-20
+2-3;8-16;17-25;33-40;18-23;19-20
+1-6;20-22;25-26;17-26;17-29;6-34;16-24;31-37
+1-8;20-22;17-20;17-26;11-17;6-28;6-34;16-29;38-43;5-8
+12-13;15-19;17-35;17-25;11-17;31-47;32-48;48-49;9-30;3-9;19-51
+1-4;1-8;14-16;8-16;17-20;33-39;6-28;40-49
+0-1;12-13;20-22;17-26;11-17;6-11;40-49
+1-5;1-9;14-15;13-32;17-35;17-24;17-26;17-36;9-15;9-30;5-32
+23-24;17-35;17-25;6-17;19-51
+1-9;1-11;12-13;27-28;13-33;17-36;11-17;39-42;31-46;9-30;9-17
+1-4;1-8;20-21;6-25;31-45;38-43;24-38
+1-9;14-16;23-24;13-33;17-18;17-36;11-17;6-28;6-34;9-31;9-30;5-8;3-9;19-41
+1-4;8-26;32-48;9-15;5-8;24-45
+1-9;1-11;14-16;39-42;31-46;32-48;38-43;9-30;5-32;40-48;24-45
+15-18;33-39;7-13;40-48;40-49
+1-6;27-28;6-7;6-28;6-25;6-17;16-24;9-30;19-20;19-51
+25-26;13-33;17-25;17-29;6-25;16-17;31-37;31-47;5-7;24-50
+1-7;17-18;6-7;32-44;32-42;5-32;19-20
+39-42;31-46;9-15;9-30;24-31;19-20
+0-1;1-10;14-17;27-28;8-26;13-32;6-8;38-43;9-17
+14-17;23-24;8-26;33-39;6-11;16-17;5-32;24-31
+1-8;1-11;8-20;8-16;13-32;6-11
+1-5;14-15;14-17;15-19;27-28;8-28;21-31;17-18;6-8;39-42;31-46;9-19
+2-3;14-17;15-18;15-19;25-26;17-28;17-29;6-25;9-19;5-32
+1-5;1-6;17-35;17-20;17-24;6-34;39-42;31-47;32-48;48-49;9-19;40-49
+1-11;8-16;17-28;17-25;11-24;6-34;32-42;9-31;9-19;24-38;24-50;19-51
+14-15;15-19;20-21;8-26;17-36;9-15
+0-1;1-7;20-21;13-32;17-35;33-40;9-15;5-8
+8-20;8-28;13-33;17-18;17-28;17-29;48-49
+14-17;15-19;23-24;25-26;21-31;17-29;17-36;39-42;16-17;7-13
+1-11;14-15;14-17;15-19;20-21;25-26;13-33;17-35;17-28;6-25;31-47;9-15;40-48;19-20
+14-17;17-24;17-29;17-36;11-17;24-50;19-41;19-20
+1-5;14-17;11-38;11-17;32-42;24-31;19-20
+14-17;15-18;20-21;13-32;17-36;33-39;6-28;6-11;39-42;16-24;31-37;38-43;40-49;19-20
+2-3;1-6;1-11;17-28;17-24;33-39;6-8;16-17;32-48;5-8;3-9
+17-25;31-47;9-31;24-45;3-9;19-51
+20-21;32-44;48-49;24-50
+23-24;8-28;6-7;6-28;6-25;6-8;39-42;9-30;9-17;5-7;40-48
+15-18;8-28;8-26;13-33;17-20;17-24;48-49
+2-3;17-35;17-18;17-25;7-13;9-17;18-23;24-50
+20-21;8-16;8-28;8-24;33-39;6-28;6-11;39-42;16-24;48-49
+0-1;1-5;1-11;12-13;14-15;23-24;17-24;33-39;5-8;18-23
+12-13;15-18;21-31;17-20;17-26;38-43
+1-8;1-10;20-21;13-32;17-26;6-25;18-23;19-51
+12-13;14-16;8-24;17-28;17-25;17-26;32-44
+1-7;21-31;17-20;17-26;31-47;9-30;5-32
+1-5;1-10;27-28;6-8;6-11;16-24;16-17;31-37;24-50;19-20
+8-28;13-32;17-29;33-39;9-30;5-8;24-38;19-20
+1-6;1-8;14-15;8-24;17-28;11-24;6-25;32-44;5-32;19-20
+0-1;20-22;27-28;8-24;17-25;6-11;31-45;9-19;18-23;40-48;3-9;19-51
+20-21;27-28;17-29;9-30;19-20
+15-19;17-24;11-38;6-7;6-28;32-48;32-42;7-13;9-31;9-17;40-48
+1-4;14-15;15-18;15-19;31-46;9-15;5-32;40-49;24-50
+0-1;1-4;15-19;20-21;23-24;27-28;8-28;8-24;32-44;24-31;19-41
+1-4;1-8;8-16;17-24;6-11
+2-3;1-10;25-26;21-31;48-49;5-32;5-8;24-38;24-31
+20-21;16-24;31-46;38-43
+14-17;27-28;17-35;17-18;17-25;6-28;31-45;9-15;5-32;40-48;40-49;24-31
+8-16;8-26;13-33;16-17;5-32;40-48;3-9;19-51
+1-7;1-8;20-21;8-20;13-32;6-34;5-7
+20-21;8-20;11-38;6-11;16-24;9-19;40-48
+12-13;15-18;20-22;8-20;13-33;33-40;6-25;6-8;6-34;31-46;9-31
+20-22;23-24;8-20;8-24;17-25;38-43;9-17;5-32;5-7;40-49
+20-21;20-22;8-16;31-45;32-48;7-13;24-38;24-45;24-50
+0-1;1-6;14-15;20-22;17-35;16-17;31-45;19-41
+1-8;1-11;14-16;14-17;20-22;8-28;21-31;11-24;33-40;6-28;31-45;31-46
+1-7;14-17;20-21;20-22;8-24;17-20;11-17;16-24;9-15;40-48
+2-3;1-10;14-15;14-17;20-22;25-26;11-17;33-39;31-37;38-43;19-41
+14-17;20-22;17-36;6-7;31-47;19-51
+1-11;14-17;15-18;20-21;17-35;6-7;31-46;32-42;5-8;24-31
+2-3;8-28;8-24;17-36;6-17;48-49;9-31;40-49;24-45
+13-32;17-24;6-25;48-49;9-19;5-32;18-23
+1-4;1-7;1-9;14-15;21-31;17-18;11-38;6-7;31-47;32-48;9-30
+0-1;1-4;6-7;6-28;6-8;16-17;32-44;32-42;9-19;19-41
+1-4;1-8;1-9;12-13;14-16;25-26;8-16;13-32;17-28;6-34;9-30;9-19
+1-4;14-17;20-22;8-24;17-24;33-40;6-25;6-34;6-11;31-37;9-15;9-31;9-19;40-48;40-49;24-50
+1-9;1-10;14-16;14-17;20-22;8-20;17-20;17-25;6-8;38-43;9-30;9-19;24-38
+2-3;1-7;6-8;39-42;16-24;19-20
+27-28;8-28;21-31;17-35;38-43;9-17;24-50;19-20;19-51
+1-8;14-17;15-18;20-22;23-24;8-24;13-32;13-33;33-40;16-24;48-49;7-13;9-17
+20-22;8-26;17-26;17-29;11-38;33-39;9-30;24-50
+2-3;1-11;20-22;21-31;17-24;17-26;32-44;38-43;3-9
+14-16;14-17;33-39;31-45;9-17;9-19
+1-5;1-6;20-22;17-20;17-18;17-26;17-29;6-11;48-49;40-48
+0-1;20-22;8-24;17-25;17-26;32-48;24-38;24-31
+1-8;17-24;16-17;31-37;32-42;9-31;40-49;24-45
+1-11;25-26;27-28;8-28;13-32;32-44;5-8;24-31;24-50;19-51
+14-15;25-26;6-28;6-25;6-8;38-43;19-41
+1-10;15-18;8-24;17-18;11-17
+17-25;6-11;7-13;40-48;40-49;19-41
+1-8;16-29;38-43;18-23
+1-6;1-9;1-10;13-33;17-36;31-45;32-42;5-8
+20-21;8-20;17-28;16-24;5-7
+1-11;14-15;20-21;8-24;31-47;9-19;5-8
+1-9;1-11;14-15;8-20;17-36;33-39;9-17;40-49;19-51
+1-7;12-13;23-24;17-35;17-25;33-39;6-17;24-45;19-41
+1-9;12-13;14-16;20-21;8-28;8-26;17-36;6-8;40-48
+0-1;8-16;6-8;16-29;31-45;31-37;32-48;40-48
+1-11;14-16;15-18;21-31;11-17;6-25;32-42;48-49
+0-1;2-3;20-21;25-26;17-29;11-24;11-38;31-37;38-43
+13-32;17-35;6-28;6-17;32-48;9-15;9-31
+17-24;17-29;33-40;48-49;7-13;19-51
+20-21;8-16;17-25;16-24;16-17
+2-3;1-6;1-8;1-9;14-17;8-26;13-33;11-38;11-17;31-46;32-44
+23-24;21-31;17-24;17-36;16-17;31-46;32-48;9-31;9-17;5-32;19-41
+1-5;17-24;38-43;3-9
+1-9;14-16;14-17;20-21;25-26;13-33;17-18;16-17;9-17;5-32;24-45
+1-6;15-18;8-16;24-31;24-50
+1-9;14-16;15-19;27-28;17-25;6-17;31-46;32-44;40-49;24-38
+14-15;20-21;6-34;31-37
+1-7;15-19;33-40;31-37;9-31;40-48;19-20
+27-28;17-18;6-25;7-13;9-30;24-31;19-41;19-20
+1-5;1-8;14-15;14-17;25-26;13-32;17-25;16-24;32-48;40-49;24-50
+1-4;14-17;15-19;8-28;33-39;48-49;7-13;9-17;5-8;5-7;24-38
+2-3;1-4;14-17;15-19;33-39;6-28;16-17
+1-6;1-11;14-17;17-26;17-36;18-23;24-38
+14-17;31-37;18-23;24-31
+1-4;1-7;1-10;14-17;15-18;15-19;11-24;6-11;31-47
+1-7;13-32;17-18;17-36;11-24;6-34;31-45;32-44;48-49;9-15;3-9
+1-11;17-28;17-24;39-42;31-45;31-47;40-49;3-9
+1-6;20-21;25-26;8-26;17-26;11-24;6-7;16-24;31-45;38-43;5-32;19-51
+1-5;17-28;17-26;33-40;16-17;24-45;19-41
+1-5;20-22;8-16;8-28;21-31;17-24;17-26;11-38;33-39;6-28;5-7;24-45
+1-6;1-7;17-26;6-7;16-24;31-45;40-49;3-9
+1-8;11-17;6-11;31-45;9-19;24-31;24-50;3-9
+1-10;14-15;23-24;25-26;13-32;13-33;17-28;11-17;33-40;6-8;32-48;9-31;9-17;9-19;19-20
+1-11;15-18;25-26;6-25;6-17;31-46;48-49;9-15;9-19;19-20
+12-13;14-17;20-21;20-22;6-8;31-47;24-50
+2-3;8-26;17-29;9-19;19-20
+12-13;14-15;21-31;32-44;7-13;24-45;19-20
+1-7;17-29;6-28;31-37;32-42;48-49;5-8;24-38;19-51
+2-3;1-11;17-25;11-24;6-34;31-46
+8-28;17-20;17-29;6-17;6-34;18-23;40-49;19-41
+0-1;17-36;11-24;16-17;32-44;5-7
+0-1;17-18;11-24;33-40;16-29
+1-4;1-6;1-8;15-18;8-26;17-20;6-8;3-9
+0-1;2-3;20-21;27-28;8-16;21-31;17-36;6-7;16-24;32-44;32-42;7-13
+23-24;13-33;11-24;6-25;9-15;9-30
+1-8;1-11;15-18;8-20;8-24;17-24;33-39;6-28;31-37;32-42;5-32;5-7;24-31
+1-11;15-19;25-26;8-24;17-20;17-36;39-42;31-46;9-17;5-32;24-45
+1-7;14-16;15-19;20-21;27-28;13-32;17-28;17-25;32-48;9-30;24-50;19-41
+1-10;15-19;8-16;17-36;32-44;9-31;19-20
+14-16;8-28;6-11;9-30;5-32;40-49;19-20
+20-21;8-24;8-26;6-28;39-42;31-46;31-37;32-42;19-20
+17-28;11-38;31-45;9-30;24-38;19-20
+15-18;8-16;6-34;16-17;31-45;32-44;48-49;5-32;24-31;24-50
+1-7;20-21;17-35;6-34;16-24;31-45;9-30
+0-1;1-6;8-28;8-24;33-40;6-28;39-42;31-46;24-31;3-9
+2-3;17-29;33-39;6-8;48-49;9-17;5-32
+1-5;1-6;20-22;25-26;8-16;13-32;11-38;6-17;32-44;9-31;24-45;19-51
+12-13;14-17;20-21;23-24;17-25;33-39;6-25;6-11
+12-13;14-15;14-17;17-29;16-17;7-13;9-31;40-49;24-50
+1-8;14-17;25-26;8-24;13-32;17-35;33-40;39-42;31-46;32-48;9-15;5-32;24-38
+1-10;14-17;20-21;11-38;31-37;5-7;19-51
+1-5;14-17;15-18;13-33;11-24;6-7;19-41
+6-7;31-47;32-42;5-7
+1-4;8-24;39-42;16-24;31-46
+27-28;17-36;11-24;11-38;9-15;5-32;24-45
+0-1;1-4;23-24;8-20;8-26;6-17
+1-4;8-20;17-20;17-25;17-26;11-17;6-8;9-17;24-38
+20-21;20-22;16-24;18-23
+14-16;8-24;17-26;11-17;39-42;31-46;31-47;48-49;9-31;40-49
+1-5;17-26;11-38;6-28;32-42;24-31
+1-6;1-8;14-16;17-35;17-28;16-17;7-13;38-43;9-15;19-51
+2-3;15-18;25-26;13-32;6-17;32-48;24-31;3-9
+1-10;25-26;8-28;8-24;21-31;31-46;5-8;3-9;19-41
+12-13;14-15;17-20;17-24;6-34;16-24;31-47;9-15
+1-7;12-13;23-24;17-28;17-25;6-34;24-38
+1-7;1-10;15-19;8-20;13-32;13-33;6-28;16-29;31-47;32-44;9-15;18-23
+12-13;15-19;20-21;8-24;21-31;17-20;17-18;6-7;9-30
+23-24;25-26;6-7;16-29;9-31;5-32;24-38;19-41
+1-6;17-35;17-18;17-24;17-36;39-42;9-30
+24-45
+14-16;15-18;20-21;8-28;17-25;17-29;6-8;6-34;16-24;16-29;31-45;32-44;24-45;19-20
+1-8;8-24;11-24;6-34;31-45;31-47;9-30;5-32;19-20
+1-6;1-7;14-16;17-18;17-29;11-38;33-39;6-25;16-29;31-37;7-13;9-19;19-20
+20-21;33-39;6-11;48-49;9-30;9-19;40-48;3-9;19-20
+1-4;1-10;14-15;17-35;6-17;32-48;32-44;32-42;38-43;9-19;5-32;3-9
+1-4;1-5;8-24;9-30;9-19;24-38;19-51
+1-4;1-8;23-24;17-24;33-40;9-19;5-8
+2-3;1-4;13-32;17-18;9-31;5-32;24-45
+8-26;9-17;19-41
+1-11;27-28;8-24;13-33;19-20
+0-1;1-9;17-35;17-24;6-28;6-25;6-17;16-24;38-43;9-15;24-31
+20-22;25-26;17-20;17-28;11-38;33-40;6-8;6-11;32-42;5-7;40-48;40-49
+1-8;1-9;12-13;20-22;13-33;31-37
+1-5;12-13;20-22;17-18;17-24;5-7;24-38
+1-9;20-22;13-33;6-8;7-13
+20-22;17-35;17-28;11-24;6-7;6-17;48-49;24-45;19-51
+25-26;8-26;13-33;33-39;6-25;31-47;7-13;9-17;19-20
+1-6;1-8;1-11;20-22;8-28;17-20;17-25;11-24;11-17;9-31
+1-9;15-18;20-22;23-24;8-20;17-18;11-17;6-11;48-49;9-17;40-48
+6-7;6-11;32-44;32-42;40-48;24-50
+20-21;13-32;9-30;40-49;24-38;19-20
+1-6;1-8;17-20;33-40;31-37
+1-11;33-39;6-25;6-34;31-37;24-50;3-9
+2-3;1-7;14-15;14-16;14-17;25-26;8-26;17-36;33-39;32-42;24-45;19-41;19-51
+14-17;25-26;8-26;17-20;17-18;6-28;16-24;31-47;9-15
+1-4;15-19;27-28;8-28;17-26;16-17;31-45;40-48;40-49;19-41
+1-4;1-9;20-21;8-20;13-33;17-24;17-26;17-29;16-24;31-45;31-47;32-42;7-13;5-32
+1-4;15-18;8-20;17-26;6-25;31-45;32-44;9-31;5-8
+1-5;1-10;12-13;15-19;13-33;11-38;32-48;7-13;9-17;5-8
+1-7;15-19;17-18;17-29;17-36;33-40;31-47;32-42;40-49
+1-11;15-19;13-33;17-20;31-45;31-46;48-49;24-45
+14-16;15-19;25-26;21-31;6-11;16-29;31-47;32-42;9-31;9-17;40-48;24-50;19-20
+0-1;13-32;17-29;11-24;31-45;5-7
+0-1;14-16;11-38;32-42;9-30;5-32;40-48;3-9;19-20
+1-8;14-15;31-37;48-49;18-23;40-49;19-20
+1-6;8-16;17-35;11-24;6-25;9-30;5-8;24-50
+2-3;13-32;17-28;16-24;32-44;5-32;18-23
+1-5;1-11;15-18;8-28;6-11;16-17;31-47;9-31;9-30
+1-7;6-8;7-13;18-23
+2-3;1-8;23-24;8-16;21-31;16-29;9-30;5-32;24-38;19-41
+1-10;17-35;17-28;17-25;7-13;9-17;18-23;40-48;24-50;19-51
+1-11;17-20;11-38;16-29;32-48;38-43;5-7
+1-10;15-19;25-26;27-28;17-20;17-29;39-42;9-30;3-9;19-41;19-20
+25-26;8-28;13-33;33-40;16-17;5-8;18-23
+0-1;8-16;16-29;31-37;9-15;5-7;40-49
+1-8;14-15;8-28;17-20;31-47;32-48;5-32;3-9
+0-1;1-4;1-7;15-18;20-21;27-28;13-32;17-25;17-29;11-38;16-17;31-37;32-44
+1-4;1-6;6-7;6-17;31-46;9-31;40-48;24-31
+12-13;23-24;13-32;17-20;17-36;11-17;16-29;40-48;19-51
+1-4;20-21;25-26;27-28;8-16;48-49;9-15;5-8;24-31
+1-6;1-11;8-20;17-36;11-38;33-39;6-7;6-34;16-24;9-17;3-9;19-41
+2-3;1-7;14-16;8-20;17-35;17-29;11-24;32-42;24-50
+1-5;1-10;6-8;6-11;7-13;38-43;9-19;40-49
+17-26;33-39;6-8;9-30;9-19;40-49
+1-11;14-16;15-18;15-19;20-21;23-24;8-24;17-35;17-18;11-24;6-8;16-24;16-29;32-48;48-49;9-15;3-9;19-51
+14-16;17-29;31-37;32-48;9-19
+0-1;25-26;17-20;16-17;9-19
+2-3;1-8;1-10;15-18;33-39;33-40;6-28;6-34;31-46;31-37;38-43;9-19;19-41;19-51
+0-1;1-6;1-11;13-33;17-28;33-39;6-34;39-42;32-48;9-31;9-19
+15-19;17-25;31-45;9-15;19-51
+8-20;13-33;17-18;6-11;32-44;24-50
+14-15;14-17;23-24;8-20;17-35;33-40;31-46;9-15;9-30
+1-5;1-11;14-17;25-26;17-28;39-42;48-49;38-43;5-32;3-9
+1-6;14-17;25-26;8-28;21-31;6-8;7-13;9-30;9-17;40-48;3-9;19-20
+14-16;14-17;17-25;17-26;11-38;16-17;32-44;9-15;5-8;24-31;19-20
+2-3;1-5;17-29;6-34;31-37;7-13;9-30;5-8
+1-8;1-10;14-15;15-18;8-16;17-26;6-17;7-13;5-8;5-7;24-45;19-41
+0-1;8-28;17-26;11-24;33-40;31-47;32-48;19-51
+2-3;1-4;6-25;9-31;3-9
+1-4;14-15;25-26;21-31;17-25;11-24;11-38;3-9
+1-5;8-26;17-36;11-24;31-46;9-30
+1-11;8-26;17-18;17-24;6-28;39-42;40-48
+2-3;17-35;17-36;6-11;9-30;5-8
+1-6;20-22;21-31;17-20;11-38;6-25;6-17;5-7
+1-7;15-18;20-22;17-24;17-36;6-8;31-46;31-47;32-42;24-45;19-51
+20-22;25-26;39-42;9-15;5-7;24-38
+1-7;14-15;17-25;11-24;6-34;16-29
+14-16;21-31;17-20;31-47;38-43
+15-19;8-20;8-24;6-11;16-29;31-45;31-46;9-17;5-8;40-49
+15-19;8-28;17-18;33-40;31-47;19-20
+20-21;21-31;13-32;17-35;17-20;6-7;38-43;5-32;19-20
+1-10;17-28;31-37;32-42;48-49;24-38;24-50;19-20
+8-24;11-38;31-46;19-20
+14-15;20-21;8-16;17-25;33-40;5-32
+1-5;1-7;1-8;15-18;17-18;6-28;6-25;31-47;32-48;48-49;40-48
+23-24;8-26;6-11;7-13;38-43;5-8
+14-16;20-21;8-24;8-26;6-8;16-24;31-46;9-15;5-32;40-49;24-45;24-50;3-9
+20-21;17-29;39-42;38-43;24-50
+1-6;8-16;7-13;9-17;24-31
+1-4;12-13;25-26;27-28;13-33;11-17;16-17;24-38
+2-3;1-4;1-8;12-13;20-21;21-31;17-18;11-17;31-47;5-32;19-41;19-51
+1-4;1-7;8-28;8-24;17-25;11-24;11-38;11-17;33-39;31-37;38-43
+1-4;1-5;27-28;8-16;13-32;6-34;40-48;24-50
+1-10;20-21;11-24;6-34;6-11;32-42;5-32
+0-1;23-24;17-24;16-17;24-45
+25-26;11-38;11-17;6-7;32-44;24-45
+0-1;1-10;14-16;20-21;13-32;17-25;11-24;33-40;6-7;6-8;32-42;9-30
+23-24;17-20;17-28;33-39;16-17;31-47;32-48;7-13;3-9;19-51
+25-26;8-16;17-24;31-46;32-44;40-48;24-45;19-41
+14-16;8-28;33-39;9-30;40-48;3-9
+1-6;20-21;17-35;6-34;32-48;48-49;38-43;9-17;24-38;24-50
+6-34;9-30;40-49
+15-19;25-26;8-26;17-25;9-17;24-38
+15-18;8-28;17-24;11-17;6-17;32-42;48-49;9-15;9-31;9-17;18-23;19-41;19-51
+20-22;17-26;33-39;31-37;24-45
+8-16;17-25;17-26;11-38;6-8;39-42;9-19;24-38;3-9
+17-26;16-29;31-46;31-37;9-19;5-7
+27-28;17-35;6-7;31-47;7-13;9-19
+1-6;1-7;1-8;25-26;8-28;6-7;6-28;6-25;6-17;9-19;5-7
+2-3;25-26;17-25;11-24;39-42;31-47;9-15;24-50
+1-4;23-24;8-16;8-26;21-31;6-11;39-42;16-17;32-42;9-19
+1-4;27-28;13-32;17-29;33-39;31-46;40-49
+1-10;14-15;17-36;39-42;19-20
+2-3;1-5;1-11;15-18;23-24;21-31;13-33;17-24;16-17;32-44;32-42;19-20
+0-1;8-24;17-28;17-36;6-25;19-20
+25-26;13-32;17-20;6-28;31-47;9-17;40-49;24-31
+1-8;31-45;32-42;24-50
+2-3;1-6;14-16;15-19;8-20;21-31;33-40;6-8;31-47;7-13;9-17;5-8;40-48;24-45
+1-7;15-19;8-20;8-28;8-24;17-20;31-46;32-48;9-31;24-38;19-51
+12-13;14-16;15-19;6-25;31-37;24-31
+0-1;1-5;1-6;1-11;20-21;27-28;33-40;31-45;5-32
+25-26;6-7
+1-8;15-18;25-26;11-24;33-40;6-7;6-28;16-17;48-49;24-50;19-41
+1-9;12-13;8-16;13-33;6-17;3-9
+1-11;17-25
+1-9;23-24;13-33;11-24;6-25;16-17;31-47;32-44;48-49;40-49
+1-7;8-20;17-29;33-40;16-29;38-43;9-30;18-23;24-45;19-51
+1-5;1-8;1-9;1-10;25-26;8-20;8-16;11-38;6-8;7-13;5-32;19-41;19-20
+1-11;6-8;6-34;32-42;9-31;5-7;3-9;19-51
+2-3;17-24;17-29;6-34;31-37;7-13;40-49
+8-28;17-28;17-36;6-11;32-48
+1-8;14-16;13-33;17-26;6-7;31-45;9-31;5-8;24-38;19-51
+1-4;14-16;15-18;33-39;16-24;31-37;32-42;5-8;40-48
+1-4;1-8;8-26;17-28;17-24;33-39;16-29;9-30;18-23
+2-3;1-4;14-15;32-48;40-49
+1-4;1-5;1-6;17-35;17-18;6-34;16-29;9-30;24-50
+20-22;17-20;17-24;11-38;6-7;6-34;19-51
+20-22;23-24;6-7;6-25;48-49;9-30;24-38
+2-3;17-35;17-36;33-39;16-24;9-31;40-48
+14-16;13-33;17-20;33-39;33-40;31-46;32-44;7-13;5-32;40-49
+15-19;27-28;8-28;8-26;11-38;48-49;24-38;24-31
+0-1;1-7;12-13;14-16;15-19;8-16;32-42;9-17
+8-28;17-35;17-20;17-26;17-36;6-7;6-34;16-17;31-45;31-46
+1-10;15-19;17-25;17-26;11-24;6-25;6-34;5-32;24-31;24-50
+1-8;1-11;20-22;8-28;17-26;11-17;32-48;40-49;19-51
+1-6;17-26;11-38;6-25;9-15;24-38
+14-17;8-16;8-28;13-32;17-20;17-24;17-26;5-32
+1-6;14-17;25-26;11-17;32-48;9-15
+1-7;14-17;17-29;11-17;6-11;16-24;31-46;32-44;9-31;5-7;40-49;24-38;24-50
+1-8;14-17;23-24;17-35;17-28;17-24;11-38;6-28;5-32
+0-1;1-6;14-16;15-18;8-20;21-31;32-42
+1-10;8-20;17-18;17-28;33-39;16-24;31-37
+1-11;14-15;14-16;8-16;33-39;6-8;48-49;40-49;19-41
+1-7;14-16;20-21;27-28;13-33;17-28;17-26;6-25;6-8;39-42;9-17;5-32;24-31
+1-4;21-31;13-33;17-28;31-37;32-42;24-50
+1-4;1-7;1-8;1-10;17-35;19-41
+1-11;14-15;8-16;13-32;17-25;6-28;6-25;31-37;48-49;24-50
+1-5;21-31;17-20;17-36;33-40;39-42;32-42;9-19
+27-28;9-19;5-32;5-7
+1-6;15-18;17-18;17-24;17-36;48-49;9-19;5-8;24-38;19-51
+12-13;8-16;6-28;16-17;32-48;9-19;5-7;19-41
+12-13;27-28;6-8;39-42;7-13;5-32;24-31;24-45;24-50
+1-6;14-16;33-40;6-25;9-30;19-20
+1-7;8-26;17-20;31-45;31-47;32-42;7-13;9-17;3-9
+1-5;1-6;1-8;1-10;14-16;17-26;33-39;6-25;6-17;9-19
+1-10;25-26;8-16;17-18;33-39;6-7;6-17;31-37;9-15
+27-28;8-16;17-18;6-8;16-24;16-29;31-45;5-32;18-23
+0-1;25-26;8-28;17-24;17-25;33-39;39-42;31-37
+2-3;1-10;25-26;8-20;21-31;16-29;32-44;9-15;5-8;18-23;24-38;24-50
+27-28;8-20;8-24;13-32;13-33;6-7;6-25;9-31;5-32
+15-18;15-19;17-35;17-24;6-7;16-29;31-47;18-23;24-45
+1-7;15-19;23-24;13-33;17-20;17-18;17-28;6-28;6-34;39-42
+1-8;14-15;15-19;27-28;8-28;11-38;6-34;16-29;32-44;48-49;5-32;18-23;40-49;19-41
+14-16;15-19;8-24;17-29;16-17;32-48;38-43
+1-4;16-29;9-17
+8-20;8-16;6-8;48-49;24-50;3-9;19-20
+12-13;23-24;8-26;11-17;6-28;31-37;24-31;24-45;3-9
+1-11;8-20;17-24;17-36;9-17;3-9;19-20
+8-24;6-28;39-42;31-47;5-32;40-49;19-41;19-20
+0-1;15-18;17-36;6-34;19-20
+1-8;14-17;25-26;8-26;33-39;33-40;6-25;31-37;31-47;32-44
+0-1;20-21;13-33;33-39;6-11;5-7;24-38
+14-15;8-24;6-7;6-17;31-46;40-49;24-45
+1-10;12-13;23-24;13-33;17-35;17-26;32-42;24-31;24-50;19-41;19-51
+1-6;20-21;8-20;21-31;17-18;17-26;11-24;16-24;32-44;9-31
+1-8;8-20;17-20;17-25;17-26;6-8;6-34;16-17;31-45;31-47;24-31
+17-24;11-24;6-34;31-45;31-46;7-13
+14-15;20-21;27-28;13-32;17-36;6-8;31-46;32-48;32-42;7-13;5-32
+1-7;1-11;11-17;6-25;31-45;3-9
+2-3;15-18;17-35;11-17;6-28;6-8;6-11;32-44;9-17;24-50;3-9
+8-16;13-32;17-18;17-28;17-24;11-17;31-37;32-48;32-42;24-45
+1-5;16-17;31-46;48-49
+8-20;17-28;11-17;16-29;31-37;24-38;19-20
+14-15;8-20;11-17;33-40;6-25;6-34;31-47;32-42;5-7;18-23;19-20
+0-1;20-21;8-20;13-32;11-17;6-34;16-29;16-17;48-49;9-31;5-8;19-20
+1-10;14-16;15-19;23-24;8-26;17-18;17-36;31-46;5-8
+1-4;1-5;1-6;1-8;8-28;16-29;7-13;40-49;24-50
+14-15;14-16;15-18;13-33;17-36;24-45
+11-38;6-8;31-45;38-43;9-15
+1-4;17-25;6-7;6-8;16-29;32-44;9-15;24-45
+25-26;17-24;18-23;24-38;3-9;19-41
+14-15;20-21;8-20;21-31;17-36;6-34;9-15;5-8;5-7;40-48;40-49
+27-28;8-20;33-40;6-28;6-11;9-30;19-41
+17-18;17-36;6-17;16-17;31-46;5-7;24-38
+1-7;14-15;20-21;8-28;13-32;17-25;31-37;32-48;9-31;9-30
+1-5;12-13
+2-3;25-26;17-20;33-40;32-48;24-31
+0-1;15-18;20-21;23-24;11-24;16-24;31-45;31-46
+0-1;12-13;14-16;8-20;13-32;11-24;6-28;6-34;9-19;24-31;19-20
+1-11;17-25;17-36;48-49;5-8;24-38;19-41
+1-8;27-28;8-20;13-33;17-20;17-29;39-42;9-31;9-19;19-20
+1-7;1-10;20-21;8-26;21-31;6-25;9-19;40-49;24-38
+1-7;14-15;15-19;8-16;8-28;17-29;32-42;9-19
+15-19;25-26;27-28;11-38;6-28;48-49;9-19;5-7
+15-19;20-21;20-22;8-24;39-42;16-24;9-17
+1-11;14-15;20-22;33-40;32-44;5-8;40-48;40-49
+20-22;27-28;8-16;17-35;17-20;6-25;6-17;19-51
+20-21;20-22;17-25;17-36
+1-4;14-16;8-20;8-24;21-31;7-13;3-9
+1-4;1-5;25-26;6-28;6-11;31-46;38-43;9-31;24-45
+20-21;27-28;6-11;9-15;5-32;24-50
+1-8;6-8;39-42;16-29;32-48;18-23;40-49
+0-1;8-16;13-33;17-26;6-25;32-42;40-48
+1-11;23-24;8-24;13-32;17-26;17-36;6-7;6-34;16-24;32-44;38-43;19-20
+13-33;17-26;33-40;6-17;31-46;24-38;19-41;19-51
+13-32;17-35;17-26;39-42;16-29;5-7;18-23
+1-10;15-18;25-26;8-20;17-18;17-25;17-29;6-28;6-11;31-45;9-30;19-20
+8-20;8-24;6-25;24-38;19-20
+2-3;1-7;14-16;17-29;7-13;38-43;9-15;9-30;9-17;40-48;24-45
+12-13;31-37;9-31;24-50;3-9;19-41
+12-13;17-20;17-29;11-38;6-8;9-30;3-9
+0-1;2-3;25-26;31-46;38-43;9-31;19-51
+2-3;21-31;17-18;11-24;48-49;9-15;24-31
+33-40;16-24;9-30;5-7
+1-5;1-9;1-11;14-17;8-20;8-16;13-33;17-20;9-15;5-32;5-8;24-31
+0-1;1-6;1-7;15-19;8-26;13-32;33-39;6-25;9-30;5-8;5-7;24-38
+15-19;13-33;17-25;16-17;31-47;32-48;40-48;24-45
+1-4;1-8;14-15;15-19;17-20;17-18;11-17;33-40;6-17;32-42;9-30
+1-4;1-10;25-26;13-33;11-17;9-17
+1-4;8-28;11-38;31-37;9-31;19-51
+14-16;33-39;6-25;6-8;32-42;7-13;9-17;5-32
+1-5;1-10;8-28;8-26;17-28;17-36;11-17;33-39;31-37;32-44;5-8;3-9
+15-18;33-39;39-42
+1-8;14-17;17-18;6-7;6-17;6-34;7-13;9-15;5-8;24-38
+2-3;1-5;14-17;23-24;17-20;6-34;32-42;48-49;40-48;40-49
+14-17;15-18;8-16;6-8
+17-28;17-36;33-40;32-44;24-38;19-41
+1-6;6-28;32-42;48-49;5-32;19-51
+0-1;2-3;12-13;14-15;9-15;40-49
+0-1;2-3;1-6;1-11;20-22;27-28;8-26;17-29;16-29;5-32;40-48
+1-7;1-10;13-33;17-28;17-29;33-40;6-34;31-45;32-44;9-17;5-32;40-48;24-31
+13-32;11-24;31-45;31-37
+12-13;20-22;27-28;17-35;11-24;31-46;9-17;5-32;5-7;18-23;3-9
+0-1;1-4;14-16;8-26;17-20;17-29;33-40
+1-8;1-10;15-18;24-38
+17-25;11-24;6-7;9-31;5-7;18-23;24-31;19-51
+14-15;23-24;27-28;13-32;17-18;16-24;16-29;5-32;5-8;24-45;24-50
+1-5;1-7;8-26;6-7;16-17;5-8;19-41;19-20
+1-4;25-26;8-20;8-26;6-7;9-30;40-48;40-49;19-20
+0-1;1-4;1-8;14-16;8-20;8-16;8-28;17-25;16-29;32-42;48-49;9-31;18-23;3-9
+2-3;1-4;20-22;17-26;6-25;6-11;9-30;9-17;9-19
+1-4;14-16;20-22;17-20;17-26;11-38;33-39;6-28;6-17;16-29;31-37;32-48;9-19;18-23;24-38
+1-6;1-10;20-22;17-24;17-26;16-17;48-49;9-15;9-30;9-19;24-45
+14-15;15-18;15-19;20-22;8-16;13-32;17-26;16-29;9-19;5-7;18-23
+0-1;1-5;11-17;6-7;6-25;16-17;31-46;7-13;5-8;5-7
+1-8;12-13;15-19;20-22;23-24;8-28;21-31;7-13;9-30;19-51
+12-13;15-19;20-22;17-24;11-24;16-29;32-42;38-43;5-7;18-23;40-48
+15-19;20-22;13-33;17-25;6-17;7-13;9-30;40-49;24-31
+20-22;8-16;17-20;11-24;11-17;6-11;16-29;18-23;19-41
+0-1;20-22;13-33;17-28;17-24;11-17;33-40;6-8;9-31;9-30;24-38;24-31
+1-8;1-11;25-26;11-38;6-34;24-45
+6-34;31-37;38-43;9-17;19-41
+1-7;15-18;17-18;17-25;11-17;9-17;5-32;40-48;24-38;19-51
+1-5;8-16;11-17;6-7;31-37;32-44;5-7;19-41
+1-10;1-11;21-31;17-20;16-17;48-49;19-51
+8-24;17-28;6-28;9-30;9-19;5-8;24-38
+2-3;1-4;15-19;13-33;17-29;9-15;9-17;5-32;5-8
+1-8;17-24;16-24;5-32;5-7
+2-3;23-24;25-26;17-29;7-13
+1-10;14-17;8-16;21-31;17-18;6-25;6-34;16-17;31-45;32-44;48-49;5-8
+1-4;1-7;14-17;17-24;17-29;6-8;6-34;31-45;31-46;9-31;5-32;24-45
+0-1;14-16;20-21;17-29;6-25;6-8;16-17
+1-4;1-5;1-8;14-17;8-26;13-33;32-42;40-49
+0-1;1-4;14-17;15-18;8-16;17-24;33-40;6-28;32-44;9-15;5-32
+12-13;13-33;17-18;16-17;31-46;31-37
+12-13;8-28
+14-15;8-24;17-25;17-36;6-34;6-11;5-7;40-49
+1-5;15-19;13-32;11-24;6-28;6-8;6-11;32-44;32-42;7-13;18-23;3-9
+1-6;1-11;12-13;27-28;8-28;11-24;16-17;40-48
+15-19;8-26;17-28;17-36;6-17;39-42;31-47;32-48;9-15;5-32
+15-19;23-24;8-26;17-35;17-20;17-24;11-24;6-7;6-28;7-13;38-43
+1-5;1-10;15-19;27-28;8-24;13-32;6-7;24-31;19-41
+15-18;8-20;31-47;7-13
+2-3;1-8;14-16;8-20;13-32;17-20;11-38;6-7;31-46;9-30;24-50
+0-1;14-15;15-19;6-8;31-37;9-17;5-8
+1-11;14-16;15-19;17-18;17-28;6-11;9-30;5-7
+15-19;8-26;16-17;40-48
+2-3;25-26;8-16;13-32;39-42;32-44
+1-8;14-15;25-26;21-31;13-33;17-18;11-38;6-7;31-37;24-50
+1-5;1-8;23-24;13-33;16-29;5-32;18-23;19-51
+8-20;8-24;17-29;6-17;31-47;9-15;24-38
+1-4;8-20;17-35;17-26;33-40;16-29;32-48;38-43;5-8;18-23;24-50;3-9
+1-4;1-7;14-15;15-18;8-16;21-31;17-26;17-29;6-11;39-42;32-44;7-13;5-32
+1-9;25-26;8-28;17-26;17-29;11-24;6-11;48-49
+1-11;20-21;8-24;17-36;31-37;7-13;9-17;40-48;24-50
+0-1;2-3;1-9;13-32;17-29;24-38;24-31
+1-6;14-15;17-18;17-36;33-40;6-25;16-29;31-46;48-49;3-9
+1-7;1-9;20-21;23-24;17-35;17-29;32-42;18-23;3-9
+2-3;1-5;8-16;8-28;8-24;21-31;17-36;33-39;6-8;39-42;16-29;19-51
+1-7;33-39;7-13;5-32;19-51
+14-15;33-39;38-43;9-31;18-23;40-49
+15-18;20-21;17-36;11-38;33-40;16-24;16-29;31-45;31-46;19-41
+1-10;8-26;17-18;6-7;6-28;6-17;31-45;32-48;9-15;9-19;18-23;40-48
+8-16;8-24;17-35;39-42;16-29;31-45;9-19;24-38
+1-7;14-16;20-21;17-24;16-17;31-37;9-17;9-19;18-23
+1-8;1-9;1-10;1-11;13-32;13-33;33-39;39-42;32-44;9-19;40-49
+8-28;17-28;33-39;31-37;7-13;9-17;19-41;19-51
+1-9;14-15;8-24;17-20;16-24;9-15;24-50
+0-1;1-6;6-28;6-8;40-48;3-9;19-20
+1-9;1-11;12-13;15-18;23-24;8-26;33-40;39-42;9-31;19-20
+1-10;1-11;17-20;33-39;32-48;38-43;24-38
+2-3;20-21;17-20;17-24;6-34;16-24;31-47;38-43;24-38;24-45
+8-24;21-31;13-32;6-11;48-49;24-45;19-20
+1-7;15-19;20-22;25-26;6-28;16-17;31-47;32-42;9-30;5-8
+1-6;1-10;1-11;14-16;15-19;20-22;8-20;17-20;17-25;33-40;6-25;39-42;38-43;40-49;24-31
+2-3;14-17;15-19;20-22;8-20;17-36;6-17;32-48;9-30
+8-28;8-24;11-17;6-28;39-42;31-47;32-44;32-42;9-15;19-51
+0-1;20-21;27-28;8-26;17-20;11-17;40-48
+1-11;14-17;20-22;23-24;8-28;6-7;6-34;39-42;31-47;7-13;9-15;5-7
+0-1;1-7;14-17;15-18;20-22;17-29;17-36;6-11;32-42;38-43;9-31;9-30;24-45
+15-19;20-21;27-28;8-24;6-7;6-28;6-25;6-11;39-42;16-24;32-44;48-49;7-13
+14-15;32-44;9-31
+8-28;16-17;31-47;5-8
+1-5;17-35;6-8;39-42
+1-6;20-21;8-28;13-32;13-33;17-24;31-47;48-49;9-30;40-48;19-51
+25-26;8-24;8-26;38-43
+1-6;14-16;8-28;17-18;11-17;6-34;6-11;31-47;5-7
+17-28;17-25;48-49;5-32;5-8
+1-5;12-13;14-16;15-18;31-37;32-48;32-44;38-43;9-17;5-7;40-49;24-45
+1-10;1-11;12-13;17-26
+23-24;17-24;17-26;11-24;7-13;5-32
+0-1;2-3;25-26;8-16;17-18;17-28;17-26;31-47;19-51
+17-25;16-24;5-32;24-31;24-45
+8-26;33-39;6-7;6-8;32-44;24-31
+1-11;13-32;17-24;33-39;6-7;6-28;6-17;6-11;16-24;16-17;38-43;19-41
+21-31;16-29;32-42;24-31
+1-6;8-16;13-33;17-36;18-23
+1-5;15-19;38-43;24-31
+1-6;1-8;14-16;15-18;15-19;25-26;21-31;13-32;17-29;31-46;32-42;5-7
+27-28;33-39;31-37;31-47;5-32;24-50;19-41;19-51
+8-26;17-25;17-29;33-39;6-28;7-13;9-17;5-7
+1-10;17-35;17-20;11-38;32-48
+1-5;14-17;13-32;16-24;9-17
+1-8;20-21;17-18;17-36;16-17;5-7;24-50
+1-7;14-15;14-17;8-16;3-9
+1-10;14-17;25-26;17-18;33-40;6-8;31-45;32-48;9-31;5-32;19-41
+14-16;14-17;23-24;17-28;17-25;11-38;33-39;6-7;16-17;31-45;48-49;38-43;9-30;24-38
+15-18;17-35;17-24;6-17;31-46;32-44;24-45
+2-3;1-6;12-13;14-15;21-31;17-20;17-28;11-24;6-7;38-43;5-8
+1-11;6-7;31-45;5-32;3-9
+8-16;13-32;13-33;17-24;17-25;11-24;11-38;16-24;31-45;9-17;3-9;19-41
+25-26;8-28;31-45;31-46;32-44;40-49
+2-3;16-24;7-13;9-30;9-17;9-19;24-50
+1-4;1-10;27-28;8-28;9-19;24-38
+0-1;1-5;1-11;12-13;17-28;6-11;31-47;48-49;24-31
+1-4;1-8;23-24;13-32;11-38;9-31;9-30;9-19;5-32;5-8
+1-4;17-35;17-18;6-8;9-19;24-31;24-45;19-41;19-20
+1-4;15-18;25-26;27-28;17-24;32-48;38-43;9-30;9-19;19-20
+0-1;1-7;25-26;48-49;5-32;19-20
+14-15;20-22;8-28;17-20;6-11;19-20
+1-8;20-22;27-28;17-24;17-29;11-17;6-17;6-34;32-42;9-15
+1-5;20-22;21-31;17-35;17-18;11-17;6-28;6-34;31-37;48-49;5-32;24-38;3-9
+20-22;17-29;9-17;5-8
+20-22;23-24;27-28;8-20;8-26;17-24;17-25;11-38;16-17;9-15;24-45
+2-3;1-7;15-19;20-22;8-20;13-33;17-29;6-7;31-47;7-13;9-31;5-32;19-51
+1-7;12-13;8-20;17-36;32-44;38-43;9-17;5-32;5-7;19-41
+1-10;15-18;17-29;32-48
+12-13;15-19;20-22;27-28;13-32;13-33;17-35;17-18;33-39;6-11;16-24;32-42;19-41
+15-19;17-26;11-24;33-40;5-32
+0-1;1-5;1-11;14-16;8-16;17-28;17-26;16-17;32-48;5-7
+25-26;17-26;6-25;6-8;31-47;5-8;19-41
+1-7;8-28;21-31;6-17;16-29;31-37;5-32;5-7;24-45
+17-35;17-20;17-18;11-38;33-40;9-17;24-31
+1-11;8-16;17-28;17-25;16-29;48-49
+14-15;15-18;32-44;9-15;9-31;5-32;18-23;40-49
+23-24;6-28;16-29;31-47
diff --git a/examples/failures/latency.orig b/examples/failures/latency.orig
new file mode 100644
index 0000000..7c3fd07
--- /dev/null
+++ b/examples/failures/latency.orig
@@ -0,0 +1,84 @@
+0 1 0.312
+2 3 10.786
+1 4 0.222
+1 5 1.035
+1 6 1.414
+1 7 1.24
+1 8 0.814
+1 9 19.532
+1 10 0.352
+1 11 4.593
+12 13 2.622
+14 15 0.207
+14 16 12.098
+14 17 13.941
+15 18 7.791
+15 19 38.946
+20 21 19.775
+20 22 0.345
+23 24 5.337
+25 26 0.276
+27 28 0.645
+8 20 19.787
+8 16 8.352
+8 28 1.578
+8 24 10.459
+8 26 5.005
+21 31 20.741
+13 32 4.737
+13 33 1.424
+17 35 2.091
+17 20 14.409
+17 18 7.13
+17 28 6.214
+17 24 6.437
+17 25 1.315
+17 26 1.176
+17 29 3.282
+17 36 2.478
+11 24 5.751
+11 38 3.235
+11 17 4.718
+33 39 1.817
+33 40 2.035
+6 7 0.327
+6 28 0.97
+6 25 5.176
+6 8 0.612
+6 17 5.725
+6 34 0.802
+6 11 6.007
+39 42 0.699
+16 24 3.655
+16 29 0.135
+16 17 3.286
+31 45 0.268
+31 46 0.268
+31 37 3.375
+31 47 2.708
+32 48 1.712
+32 44 2.329
+32 42 1.595
+48 49 3.201
+7 13 31.13
+38 43 1.643
+9 15 5.513
+9 20 0.437
+9 31 2.648
+9 30 0.124
+9 17 14.774
+9 19 42.03
+5 32 28.338
+5 8 0.359
+5 7 0.316
+18 23 0.779
+40 48 2.34
+40 49 2.529
+24 38 7.706
+24 31 9.827
+24 45 10.045
+24 50 0.092
+3 9 59.812
+19 41 26.19
+19 20 42.057
+19 51 14.125
diff --git a/examples/failures/weight.orig b/examples/failures/weight.orig
new file mode 100644
index 0000000..387a37f
--- /dev/null
+++ b/examples/failures/weight.orig
@@ -0,0 +1,84 @@
+0 1 312
+2 3 10786
+1 4 222
+1 5 2500
+1 6 4000
+1 7 2500
+1 8 3860
+1 9 11769
+1 10 352
+1 11 3500
+12 13 2622
+14 15 500
+14 16 14192
+14 17 8909
+15 18 11747
+15 19 44530
+20 21 19775
+20 22 345
+23 24 5337
+25 26 2184
+27 28 645
+8 20 11409
+8 16 8282
+8 28 3000
+8 24 7735
+8 26 5500
+21 31 20741
+13 32 7552
+13 33 1500
+17 35 2091
+17 20 14409
+17 18 4337
+17 28 4000
+17 24 5735
+17 25 1315
+17 26 2500
+17 29 3282
+17 36 2478
+11 24 5096
+11 38 3235
+11 17 4360
+33 39 2000
+33 40 3000
+6 7 2500
+6 28 6860
+6 25 5176
+6 8 5860
+6 17 3860
+6 34 802
+6 11 5500
+39 42 699
+16 24 1547
+16 29 3000
+16 17 5282
+31 45 500
+31 46 268
+31 37 3375
+31 47 2708
+32 48 1712
+32 44 2329
+32 42 3352
+48 49 3201
+7 13 30890
+38 43 1643
+9 15 5500
+9 20 2500
+9 31 4735
+9 30 124
+9 17 13909
+9 19 42030
+5 32 28338
+5 8 2360
+5 7 2000
+18 23 5735
+40 48 2340
+40 49 2529
+24 38 2860
+24 31 9909
+24 45 10409
+24 50 92
+3 9 59812
+19 41 26190
+19 20 39530
+19 51 14125
diff --git a/examples/interest-header-example.cc b/examples/interest-header-example.cc
deleted file mode 100644
index e068feb..0000000
--- a/examples/interest-header-example.cc
+++ /dev/null
@@ -1,90 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2011 University of California, Los Angeles
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-#include "ns3/test.h"
-#include "ns3/annotated-topology-reader.h"
-#include "ns3/ccnx-interest-header.h"
-#include "ns3/uinteger.h"
-#include "ns3/random-variable.h"
-#include <limits>
-#include "ns3/ccnx-header-helper.h"
-#include "ns3/header.h"
-#include "ns3/ccnx-name-components.h"
-#include "ns3/nstime.h"
-#include "ns3/buffer.h"
-#include "ns3/log.h"
-#include "ns3/packet.h"
-
-using namespace ns3;
-#include <fstream>
-
-NS_LOG_COMPONENT_DEFINE ("InterestHeaderExample");
-
-int
-main (int argc, char *argv[])
-{
- // LogComponentEnable ("InterestHeaderExample", LOG_ALL);
- // LogComponentEnable ("Packet", LOG_ALL);
-
- NS_LOG_INFO ("Test started");
-
- Packet::EnablePrinting ();
- Packet::EnableChecking ();
- Packet packet (0);
-
- CcnxInterestHeader interestHeader;
-
- Ptr<CcnxNameComponents> testname = Create<CcnxNameComponents> ();
- (*testname) ("first") ("second");
- interestHeader.SetName(testname);
-
- uint32_t minSuffixComponents = 20;
- interestHeader.SetMinSuffixComponents(minSuffixComponents);
-
- uint32_t maxSuffixComponents = 40;
- interestHeader.SetMaxSuffixComponents(maxSuffixComponents);
-
- Time lifetime = Seconds(661777) + MicroSeconds(1234);
- interestHeader.SetInterestLifetime(lifetime);
-
- bool child = true;
- interestHeader.SetChildSelector(child);
-
- Ptr<CcnxNameComponents> exclude = Create<CcnxNameComponents> ();
- (*exclude) ("exclude1") ("exclude2");
- interestHeader.SetExclude(exclude);
-
- UniformVariable random(1, std::numeric_limits<uint32_t>::max ());
- uint32_t randomNonce = static_cast<uint32_t> (random.GetValue());
- interestHeader.SetNonce(randomNonce);
-
- interestHeader.SetNack(CcnxInterestHeader::NACK_CONGESTION);
- NS_LOG_INFO ("Source: \n" << interestHeader);
-
- packet.AddHeader (interestHeader);
- NS_LOG_INFO ("Deserialized packet: " << packet);
-
- NS_LOG_INFO ("Removing and deserializing individual headers");
-
- CcnxInterestHeader target;
- packet.RemoveHeader (target);
-
- // NS_LOG_INFO ("Target: \n" << target);
-
- return 0;
-}
diff --git a/examples/link-failure-base.cc b/examples/link-failure-base.cc
new file mode 100644
index 0000000..a499f8d
--- /dev/null
+++ b/examples/link-failure-base.cc
@@ -0,0 +1,261 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * 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: Ilya Moiseenko <iliamo@cs.ucla.edu>
+ */
+
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/NDNabstraction-module.h"
+#include "ns3/point-to-point-grid.h"
+#include "ns3/ipv4-global-routing-helper.h"
+#include "ns3/random-variable.h"
+#include "ns3/ccnx.h"
+#include "ns3/topology-reader.h"
+#include "../model/ccnx-net-device-face.h"
+
+#include <iostream>
+#include <sstream>
+#include <map>
+#include <list>
+#include <set>
+#include "ns3/rocketfuel-topology-reader.h"
+
+#include <boost/lexical_cast.hpp>
+#include <boost/foreach.hpp>
+
+using namespace ns3;
+using namespace std;
+using namespace boost;
+
+NS_LOG_COMPONENT_DEFINE ("LinkFailureSprint");
+
+#include "base-experiment.h"
+
+class Experiment : public BaseExperiment
+{
+public:
+ typedef tuple<string, string> failure_t;
+ typedef list<failure_t> failures_t;
+
+ Experiment (const string &file)
+ {
+ ifstream failures (("./src/NDNabstraction/examples/failures/failures-"+file).c_str ());
+ for(std::string line; std::getline(failures, line); )
+ {
+ if (line == "")
+ {
+ m_failures.push_back (failures_t ());
+ continue;
+ }
+
+ failures_t failures;
+ istringstream run (line);
+ while (!run.eof () && !run.bad ())
+ {
+ int32_t link1 = -1;
+ int32_t link2 = -1;
+ run >> link1;
+ run.get ();
+ run >> link2;
+ run.get ();
+ if (link1 < 0 || link2 < 0) continue;
+
+ // cout << link1 << " <-> " << link2 << " ";
+ failures.push_back (failure_t (lexical_cast<string> (link1), lexical_cast<string> (link2)));
+ }
+ m_failures.push_back (failures);
+ }
+ }
+
+ // hijacker is more than an application. just disable all faces
+ void
+ FailLinks (uint32_t failId)
+ {
+ failures_t failures = m_failures [failId];
+ BOOST_FOREACH (failure_t failure, failures)
+ {
+ Ptr<Node> node1 = Names::Find<Node> ("/sprint", failure.get<0> ());
+ Ptr<Node> node2 = Names::Find<Node> ("/sprint", failure.get<1> ());
+ // cout << failure.get<0> () << " <-> " << failure.get<1> () << " ";
+ // cout << node1 << ", " << node2 << "\n";
+
+ Ptr<Ccnx> ccnx1 = node1->GetObject<Ccnx> ();
+ Ptr<Ccnx> ccnx2 = node2->GetObject<Ccnx> ();
+ for (uint32_t faceId = 0; faceId < ccnx1->GetNFaces (); faceId++)
+ {
+ Ptr<CcnxFace> face = ccnx1->GetFace (faceId);
+ Ptr<CcnxNetDeviceFace> ndFace = face->GetObject<CcnxNetDeviceFace> ();
+ if (ndFace == 0) continue;
+
+ Ptr<PointToPointNetDevice> nd1 = ndFace->GetNetDevice ()->GetObject<PointToPointNetDevice> ();
+ if (nd1 == 0) continue;
+
+ Ptr<Channel> channel = nd1->GetChannel ();
+ if (channel == 0) continue;
+
+ Ptr<PointToPointChannel> ppChannel = DynamicCast<PointToPointChannel> (channel);
+
+ Ptr<NetDevice> nd2 = ppChannel->GetDevice (0);
+ if (nd2->GetNode () == node1)
+ nd2 = ppChannel->GetDevice (1);
+
+ if (Names::FindName (nd2->GetNode ()) == failure.get<1> ())
+ {
+ cout << "Failing " << failure.get<0> () << " <-> " << failure.get<1> () << " link\n";
+
+ Ptr<CcnxFace> face1 = ccnx1->GetFaceByNetDevice (nd1);
+ Ptr<CcnxFace> face2 = ccnx2->GetFaceByNetDevice (nd2);
+
+ face1->SetUp (false);
+ face2->SetUp (false);
+
+ // set metric to max (for GlobalRouter to know what we want)
+ Ptr<Ipv4> ipv4_1 = ccnx1->GetObject<Ipv4> ();
+ Ptr<Ipv4> ipv4_2 = ccnx2->GetObject<Ipv4> ();
+
+ uint32_t if1 = ipv4_1->GetInterfaceForDevice (nd1);
+ uint32_t if2 = ipv4_2->GetInterfaceForDevice (nd2);
+
+ ipv4_1->SetMetric (if1, std::numeric_limits<uint16_t>::max ());
+ ipv4_2->SetMetric (if2, std::numeric_limits<uint16_t>::max ());
+ break;
+ }
+ }
+ }
+ }
+
+ //We are creating "everybody-to-everybody" usage pattern
+ ApplicationContainer
+ AddApplications()
+ {
+ NS_LOG_INFO ("Adding applications");
+ NS_LOG_INFO ("GetN = " << reader->GetNodes().GetN());
+
+ double delay = 0;
+
+ ApplicationContainer apps;
+ for (uint32_t i = 0; i<reader->GetNodes().GetN(); i++)
+ {
+ NS_LOG_INFO("i="<<i);
+ Ptr<Node> node1 = Names::Find<Node> ("/sprint", lexical_cast<string> (i));
+
+ CcnxAppHelper producerHelper ("ns3::CcnxProducer");
+ producerHelper.SetPrefix ("/" + lexical_cast<string> (node1->GetId ()));
+
+ apps.Add (producerHelper.Install (node1));
+
+ CcnxAppHelper consumerHelper ("ns3::CcnxConsumerBatches");
+ consumerHelper.SetAttribute ("LifeTime", StringValue("100s"));
+ consumerHelper.SetAttribute ("Batches", StringValue("2s 1"));
+
+ for(uint32_t j = 0; j<reader->GetNodes().GetN();j++)
+ {
+ NS_LOG_INFO("j="<<j);
+ if(i==j)
+ continue;
+
+ Ptr<Node> node2 = Names::Find<Node> ("/sprint", lexical_cast<string> (j));
+
+ consumerHelper.SetPrefix ("/" + lexical_cast<string> (node1->GetId ()) + "/" + lexical_cast<string> (node2->GetId ()));
+ ApplicationContainer consumer = consumerHelper.Install (node2);
+ consumer.Start (Seconds (delay));
+ apps.Add (consumer);
+
+ delay += 0.0001;
+ }
+ }
+
+ return apps;
+ }
+
+private:
+ vector<failures_t> m_failures;
+};
+
+int
+main (int argc, char *argv[])
+{
+ cout << "Begin link failure scenario\n";
+
+ Config::SetDefault ("ns3::PointToPointNetDevice::DataRate", StringValue ("100Mbps"));
+ Config::SetDefault ("ns3::DropTailQueue::MaxPackets", StringValue ("2000"));
+ Config::SetDefault ("ns3::RttEstimator::InitialEstimation", StringValue ("0.5s"));
+ // Config::SetDefault ("ns3::RttEstimator::MaxMultiplier", StringValue ("16.0")); // original default is 64.0
+
+ Config::SetDefault ("ns3::ConfigStore::Filename", StringValue ("attributes.xml"));
+ Config::SetDefault ("ns3::ConfigStore::Mode", StringValue ("Save"));
+ Config::SetDefault ("ns3::ConfigStore::FileFormat", StringValue ("Xml"));
+
+ // Config::SetDefault ("ns3::CcnxConsumer::LifeTime", StringValue ("100s"));
+
+ uint32_t maxRuns = 1;
+ uint32_t startRun = 0;
+ std::string failures = "";
+ CommandLine cmd;
+ cmd.AddValue ("start", "Initial run number", startRun);
+ cmd.AddValue ("runs", "Number of runs", maxRuns);
+ cmd.AddValue ("failures", "File with failures", failures);
+ cmd.Parse (argc, argv);
+
+ if (failures == "")
+ {
+ std::cerr << "--failures=<file> parameter has to be specified" << std::endl;
+ return 1;
+ }
+
+ // ConfigStore config;
+ // config.ConfigureDefaults ();
+
+ Experiment experiment (failures);
+ for (uint32_t run = startRun; run < startRun + maxRuns; run++)
+ {
+ Config::SetGlobal ("RngRun", IntegerValue (run));
+ cout << "seed = " << SeedManager::GetSeed () << ", run = " << SeedManager::GetRun () << endl;
+
+ cout << "Run " << run << endl;
+ string prefix = "link-failure-"+ failures +"-base-" + lexical_cast<string> (run) + "-";
+
+ experiment.ConfigureTopology ();
+ experiment.InstallCcnxStackImpl ();
+
+ CcnxStackHelper ccnxHelper;
+ ccnxHelper.InstallFakeGlobalRoutesImpl ();
+
+ experiment.FailLinks (run);
+
+ Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+ ccnxHelper.InstallRoutesToAll ();
+
+ ApplicationContainer apps = experiment.AddApplications ();
+ cout << "Total number of applications: " << apps.GetN () << "\n";
+
+ //tracing
+ CcnxTraceHelper traceHelper;
+ // Simulator::Schedule (Seconds (4.5), &CcnxTraceHelper::EnableSeqsAppAll, &traceHelper,
+ // "ns3::CcnxConsumerBatches", prefix + "consumers-seqs.log");
+ Simulator::Schedule (Seconds (0.1), &CcnxTraceHelper::EnablePathWeights, &traceHelper,
+ prefix + "weights.log");
+
+ experiment.Run (Seconds(10.0));
+ }
+
+ cout << "Finish link failure scenario\n";
+ return 0;
+}
diff --git a/examples/link-failure-sprint.cc b/examples/link-failure-sprint.cc
new file mode 100644
index 0000000..88f2344
--- /dev/null
+++ b/examples/link-failure-sprint.cc
@@ -0,0 +1,311 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * 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: Ilya Moiseenko <iliamo@cs.ucla.edu>
+ */
+
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/NDNabstraction-module.h"
+#include "ns3/point-to-point-grid.h"
+#include "ns3/ipv4-global-routing-helper.h"
+#include "ns3/random-variable.h"
+#include "ns3/ccnx.h"
+#include "ns3/topology-reader.h"
+#include "../model/ccnx-net-device-face.h"
+
+#include <iostream>
+#include <sstream>
+#include <map>
+#include <list>
+#include <set>
+#include "ns3/rocketfuel-topology-reader.h"
+
+#include <boost/lexical_cast.hpp>
+#include <boost/foreach.hpp>
+
+using namespace ns3;
+using namespace std;
+using namespace boost;
+
+NS_LOG_COMPONENT_DEFINE ("LinkFailureSprint");
+
+#include "base-experiment.h"
+
+class Experiment : public BaseExperiment
+{
+public:
+ typedef tuple<string, string> failure_t;
+ typedef list<failure_t> failures_t;
+
+ Experiment (const string &file)
+ {
+ ifstream failures (("./src/NDNabstraction/examples/failures/failures-"+file).c_str ());
+ for(std::string line; std::getline(failures, line); )
+ {
+ if (line == "")
+ {
+ m_failures.push_back (failures_t ());
+ continue;
+ }
+
+ failures_t failures;
+ istringstream run (line);
+ while (!run.eof () && !run.bad ())
+ {
+ int32_t link1 = -1;
+ int32_t link2 = -1;
+ run >> link1;
+ run.get ();
+ run >> link2;
+ run.get ();
+ if (link1 < 0 || link2 < 0) continue;
+
+ // cout << link1 << " <-> " << link2 << " ";
+ failures.push_back (failure_t (lexical_cast<string> (link1), lexical_cast<string> (link2)));
+ }
+ m_failures.push_back (failures);
+ }
+ }
+
+ // hijacker is more than an application. just disable all faces
+ void
+ FailLinks (uint32_t failId)
+ {
+ failures_t failures = m_failures [failId];
+ BOOST_FOREACH (failure_t failure, failures)
+ {
+ Ptr<Node> node1 = Names::Find<Node> ("/sprint", failure.get<0> ());
+ Ptr<Node> node2 = Names::Find<Node> ("/sprint", failure.get<1> ());
+ // cout << failure.get<0> () << " <-> " << failure.get<1> () << " ";
+ // cout << node1 << ", " << node2 << "\n";
+
+ Ptr<Ccnx> ccnx1 = node1->GetObject<Ccnx> ();
+ Ptr<Ccnx> ccnx2 = node2->GetObject<Ccnx> ();
+ for (uint32_t faceId = 0; faceId < ccnx1->GetNFaces (); faceId++)
+ {
+ Ptr<CcnxFace> face = ccnx1->GetFace (faceId);
+ Ptr<CcnxNetDeviceFace> ndFace = face->GetObject<CcnxNetDeviceFace> ();
+ if (ndFace == 0) continue;
+
+ Ptr<PointToPointNetDevice> nd1 = ndFace->GetNetDevice ()->GetObject<PointToPointNetDevice> ();
+ if (nd1 == 0) continue;
+
+ Ptr<Channel> channel = nd1->GetChannel ();
+ if (channel == 0) continue;
+
+ Ptr<PointToPointChannel> ppChannel = DynamicCast<PointToPointChannel> (channel);
+
+ Ptr<NetDevice> nd2 = ppChannel->GetDevice (0);
+ if (nd2->GetNode () == node1)
+ nd2 = ppChannel->GetDevice (1);
+
+ if (Names::FindName (nd2->GetNode ()) == failure.get<1> ())
+ {
+ cout << "Failing " << failure.get<0> () << " <-> " << failure.get<1> () << " link\n";
+
+ Ptr<CcnxFace> face1 = ccnx1->GetFaceByNetDevice (nd1);
+ Ptr<CcnxFace> face2 = ccnx2->GetFaceByNetDevice (nd2);
+
+ face1->SetUp (false);
+ face2->SetUp (false);
+
+ // set metric to max (for GlobalRouter to know what we want)
+ Ptr<Ipv4> ipv4_1 = ccnx1->GetObject<Ipv4> ();
+ Ptr<Ipv4> ipv4_2 = ccnx2->GetObject<Ipv4> ();
+
+ uint32_t if1 = ipv4_1->GetInterfaceForDevice (nd1);
+ uint32_t if2 = ipv4_2->GetInterfaceForDevice (nd2);
+
+ ipv4_1->SetMetric (if1, std::numeric_limits<uint16_t>::max ());
+ ipv4_2->SetMetric (if2, std::numeric_limits<uint16_t>::max ());
+ break;
+ }
+ }
+ }
+ }
+
+ // void
+ // FailLinks(double threshold)
+ // {
+ // NS_LOG_INFO("Failing links");
+ // m_linkRand = UniformVariable(0, 1.0);
+ // double probability = 0.0;
+
+ // BOOST_FOREACH (const TopologyReader::Link &link, m_reader.GetLinks())
+ // {
+ // probability = m_linkRand.GetValue();
+ // NS_LOG_INFO ("Probability = " << probability);
+
+ // if(probability <= threshold)
+ // {
+ // Ptr<Node> fromNode = link.GetFromNode ();
+ // Ptr<Node> toNode = link.GetToNode ();
+ // NS_LOG_INFO("From node id = " << fromNode->GetId());
+ // NS_LOG_INFO("To node id = " << toNode->GetId());
+
+ // Ptr<CcnxL3Protocol> fromCcnx = fromNode->GetObject<CcnxL3Protocol> ();
+ // Ptr<CcnxL3Protocol> toCcnx = toNode->GetObject<CcnxL3Protocol> ();
+
+ // Ptr<NetDevice> fromDevice = link.GetFromNetDevice ();
+ // Ptr<NetDevice> toDevice = link.GetToNetDevice ();
+
+ // Ptr<CcnxFace> fromFace = fromCcnx->GetFaceByNetDevice (fromDevice);
+ // Ptr<CcnxFace> toFace = toCcnx->GetFaceByNetDevice (toDevice);
+
+ // NS_LOG_INFO("From face id = " << fromFace->GetId());
+ // NS_LOG_INFO("To face id = " << toFace->GetId());
+ // fromFace->SetUp (false);
+ // toFace->SetUp (false);
+
+ // NS_LOG_INFO(fromFace->IsUp());
+ // NS_LOG_INFO(toFace->IsUp());
+ // }
+
+ // }
+ // /*
+ // uint32_t nodeId = m_rand.GetValue ();
+ // Ptr<Node> node = Names::Find<Node> ("/sprint", lexical_cast<string> (nodeId));
+
+ // Ptr<CcnxL3Protocol> ccnx = node->GetObject<CcnxL3Protocol> ();
+ // UniformVariable faceRandom = UniformVariable (0, ccnx->GetNFaces ());
+ // uint32_t faceId = faceRandom.GetValue();
+ // Ptr<CcnxFace> face = ccnx->GetFace (faceId);
+ // face->SetUp(false);
+ // */
+ // }
+
+ //We are creating "everybody-to-everybody" usage pattern
+ ApplicationContainer
+ AddApplications()
+ {
+ NS_LOG_INFO ("Adding applications");
+ NS_LOG_INFO ("GetN = " << reader->GetNodes().GetN());
+
+ double delay = 0;
+
+ ApplicationContainer apps;
+ for (uint32_t i = 0; i<reader->GetNodes().GetN(); i++)
+ {
+ NS_LOG_INFO("i="<<i);
+ Ptr<Node> node1 = Names::Find<Node> ("/sprint", lexical_cast<string> (i));
+
+ CcnxAppHelper producerHelper ("ns3::CcnxProducer");
+ producerHelper.SetPrefix ("/" + lexical_cast<string> (node1->GetId ()));
+
+ apps.Add (producerHelper.Install (node1));
+
+ CcnxAppHelper consumerHelper ("ns3::CcnxConsumerBatches");
+ consumerHelper.SetAttribute ("LifeTime", StringValue("100s"));
+ consumerHelper.SetAttribute ("Batches", StringValue("0s 1 1s 1 2s 1 3s 1 6s 1 20s 1"));
+
+ for(uint32_t j = 0; j<reader->GetNodes().GetN();j++)
+ {
+ NS_LOG_INFO("j="<<j);
+ if(i==j)
+ continue;
+
+ Ptr<Node> node2 = Names::Find<Node> ("/sprint", lexical_cast<string> (j));
+
+ consumerHelper.SetPrefix ("/" + lexical_cast<string> (node1->GetId ()) + "/" + lexical_cast<string> (node2->GetId ()));
+ ApplicationContainer consumer = consumerHelper.Install (node2);
+ consumer.Start (Seconds (delay));
+ apps.Add (consumer);
+
+ delay += 0.0001;
+ }
+ }
+
+ return apps;
+ }
+
+ void
+ RecalculateRouting ()
+ {
+ Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+ }
+
+private:
+ vector<failures_t> m_failures;
+};
+
+int
+main (int argc, char *argv[])
+{
+ cout << "Begin link failure scenario\n";
+
+ Config::SetDefault ("ns3::PointToPointNetDevice::DataRate", StringValue ("100Mbps"));
+ Config::SetDefault ("ns3::DropTailQueue::MaxPackets", StringValue ("2000"));
+ Config::SetDefault ("ns3::RttEstimator::InitialEstimation", StringValue ("0.5s"));
+ // Config::SetDefault ("ns3::RttEstimator::MaxMultiplier", StringValue ("16.0")); // original default is 64.0
+
+ Config::SetDefault ("ns3::ConfigStore::Filename", StringValue ("attributes.xml"));
+ Config::SetDefault ("ns3::ConfigStore::Mode", StringValue ("Save"));
+ Config::SetDefault ("ns3::ConfigStore::FileFormat", StringValue ("Xml"));
+
+ // Config::SetDefault ("ns3::CcnxConsumer::LifeTime", StringValue ("100s"));
+
+ uint32_t maxRuns = 1;
+ uint32_t startRun = 0;
+ std::string failures = "";
+ CommandLine cmd;
+ cmd.AddValue ("start", "Initial run number", startRun);
+ cmd.AddValue ("runs", "Number of runs", maxRuns);
+ cmd.AddValue ("failures", "File with failures", failures);
+ cmd.Parse (argc, argv);
+
+ if (failures == "")
+ {
+ std::cerr << "--failures=<file> parameter has to be specified" << std::endl;
+ return 1;
+ }
+
+ // ConfigStore config;
+ // config.ConfigureDefaults ();
+
+ Experiment experiment (failures);
+ for (uint32_t run = startRun; run < startRun + maxRuns; run++)
+ {
+ Config::SetGlobal ("RngRun", IntegerValue (run));
+ cout << "seed = " << SeedManager::GetSeed () << ", run = " << SeedManager::GetRun () << endl;
+
+ cout << "Run " << run << endl;
+ string prefix = "link-failure-" + lexical_cast<string> (run) + "-";
+
+ experiment.ConfigureTopology ();
+ experiment.InstallCcnxStack (true);
+ ApplicationContainer apps = experiment.AddApplications ();
+ cout << "Total number of applications: " << apps.GetN () << "\n";
+
+ Simulator::Schedule (Seconds (10.0), &Experiment::FailLinks, &experiment, run);
+ Simulator::Schedule (Seconds (39.0), &Experiment::RecalculateRouting, &experiment);
+
+ //tracing
+ CcnxTraceHelper traceHelper;
+ Simulator::Schedule (Seconds (4.5), &CcnxTraceHelper::EnableSeqsAppAll, &traceHelper,
+ "ns3::CcnxConsumerBatches", prefix + "consumers-seqs.log");
+ Simulator::Schedule (Seconds (4.5), &CcnxTraceHelper::EnablePathWeights, &traceHelper,
+ prefix + "weights.log");
+
+ experiment.Run (Seconds(60.0));
+ }
+
+ cout << "Finish link failure scenario\n";
+ return 0;
+}
diff --git a/examples/syntactic-topology-ndnabstraction.cc b/examples/syntactic-topology-ndnabstraction.cc
deleted file mode 100644
index 3fc04a1..0000000
--- a/examples/syntactic-topology-ndnabstraction.cc
+++ /dev/null
@@ -1,226 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2011 University of California, Los Angeles
- *
- * 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: Ilya Moiseenko <iliamo@cs.ucla.edu>
- */
-
-#include "ns3/core-module.h"
-#include "ns3/network-module.h"
-#include "ns3/point-to-point-module.h"
-#include "ns3/NDNabstraction-module.h"
-#include <ns3/point-to-point-grid.h>
-#include "ns3/ipv4-global-routing-helper.h"
-
-#include <iostream>
-#include <sstream>
-
-#include "ns3/ccnx.h"
-
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE ("SyncTopologyNDNabstraction");
-
-int
-main (int argc, char *argv[])
-{
- // Set up some default values for the simulation. Use the
-
- Config::SetDefault ("ns3::OnOffApplication::PacketSize", UintegerValue (210));
- Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue ("448kb/s"));
-
- Packet::EnableChecking();
- Packet::EnablePrinting();
-
- // Allow the user to override any of the defaults and the above
- // DefaultValue::Bind ()s at run-time, via command-line arguments
- CommandLine cmd;
- cmd.Parse (argc, argv);
-
- // Here, we will explicitly create seven nodes.
- NS_LOG_INFO ("Create nodes.");
- NodeContainer c;
- c.Create (7);
- Names::Add ("1", c.Get (0));
- Names::Add ("2", c.Get (1));
- Names::Add ("3", c.Get (2));
- Names::Add ("4", c.Get (3));
- Names::Add ("5", c.Get (4));
- Names::Add ("6", c.Get (5));
- Names::Add ("7", c.Get (6));
-
-
- NodeContainer n13 = NodeContainer (c.Get (0), c.Get (2));
- NodeContainer n23 = NodeContainer (c.Get (1), c.Get (2));
- NodeContainer n35 = NodeContainer (c.Get (2), c.Get (4));
- NodeContainer n34 = NodeContainer (c.Get (2), c.Get (3));
- NodeContainer n45 = NodeContainer (c.Get (3), c.Get (4));
- NodeContainer n56 = NodeContainer (c.Get (4), c.Get (5));
- NodeContainer n57 = NodeContainer (c.Get (4), c.Get (6));
-
- //Ipv4StaticRoutingHelper staticRouting;
-
- //Ipv4ListRoutingHelper list;
- //list.Add (staticRouting, 1);
-
- //Add static routing
- //InternetStackHelper internet;
- //internet.SetRoutingHelper (list); // has effect on the next Install ()
- //internet.Install (c);
-
- // We create the channels first without any IP addressing information
- NS_LOG_INFO ("Create channels.");
- PointToPointHelper p2p;
- p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
- p2p.SetChannelAttribute ("Delay", StringValue ("1ms"));
- NetDeviceContainer nd13 = p2p.Install (n13);
- NetDeviceContainer nd23 = p2p.Install (n23);
- NetDeviceContainer nd56 = p2p.Install (n56);
-
- p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
- p2p.SetChannelAttribute ("Delay", StringValue ("50ms"));
- NetDeviceContainer nd57 = p2p.Install (n57);
-
- p2p.SetDeviceAttribute ("DataRate", StringValue ("1Mbps"));
- p2p.SetChannelAttribute ("Delay", StringValue ("1ms"));
- NetDeviceContainer nd34 = p2p.Install (n34);
- NetDeviceContainer nd45 = p2p.Install (n45);
-
- p2p.SetDeviceAttribute ("DataRate", StringValue ("1Mbps"));
- p2p.SetChannelAttribute ("Delay", StringValue ("50ms"));
- NetDeviceContainer nd35 = p2p.Install (n35);
-
- InternetStackHelper stack;
- Ipv4GlobalRoutingHelper ipv4RoutingHelper;
- // Ptr<Ipv4RoutingHelper> ipv4RoutingHelper = stack.GetRoutingHelper ();
- stack.SetRoutingHelper (ipv4RoutingHelper);
- stack.Install(c);
- // // Create router nodes, initialize routing database and set up the routing
- // // tables in the nodes.
- Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
-
- // Later, we add IP addresses.
- NS_LOG_INFO ("Assign IP Addresses.");
- Ipv4AddressHelper ipv4;
- ipv4.SetBase ("192.168.1.0", "255.255.255.0");
- Ipv4InterfaceContainer i13 = ipv4.Assign (nd13);
- Ipv4InterfaceContainer i23 = ipv4.Assign (nd23);
- Ipv4InterfaceContainer i35 = ipv4.Assign (nd35);
- Ipv4InterfaceContainer i34 = ipv4.Assign (nd34);
- Ipv4InterfaceContainer i45 = ipv4.Assign (nd45);
- Ipv4InterfaceContainer i56 = ipv4.Assign (nd56);
- Ipv4InterfaceContainer i57 = ipv4.Assign (nd57);
-
-
-
-
- CcnxStackHelper ccnx;
- ccnx.SetForwardingStrategy ("ns3::CcnxFloodingStrategy");
- ccnx.EnableLimits (false);
- Ptr<CcnxFaceContainer> cf = ccnx.Install (c);
-
- NS_LOG_INFO ("Installing Applications");
- CcnxConsumerHelper helper ("/3");
- ApplicationContainer app = helper.Install (c.Get(1));
- app.Start (Seconds (1.0));
- app.Stop (Seconds (1000.05));
-
- /*CcnxConsumerHelper helper2 ("/4");
- ApplicationContainer app2 = helper2.Install(c.Get(5));
- app2.Start (Seconds (1.0));
- app2.Stop (Seconds (1000.05));
- */
- CcnxProducerHelper helper3 ("/3",120);
- ApplicationContainer app3 = helper3.Install(c.Get(6));
- app3.Start(Seconds(0.0));
- app3.Stop(Seconds(1500.0));
- /*
- CcnxProducerHelper helper4 ("/4",150);
- ApplicationContainer app4 = helper4.Install(c.Get(0));
- app4.Start(Seconds(0.0));
- app4.Stop(Seconds(1500.0));
- */
-
- ccnx.AddRoute("1","/3",0,1);
- ccnx.AddRoute("3","/3",2,1);
- ccnx.AddRoute("3","/3",3,1);
- ccnx.AddRoute("4","/3",1,1);
- ccnx.AddRoute("5","/3",2,1);
-
- /*ccnx.AddRoute ("1", "/3", 0, 1);
- ccnx.AddRoute ("1", "/3", 1, 1);
-
- ccnx.AddRoute ("2", "/3", 1, 1);
-
- ccnx.AddRoute ("3", "/3", 1, 1);
-
- ccnx.AddRoute ("4", "/3", 2, 1);
-
- ccnx.AddRoute ("6", "/3", 2, 1);
-
- ccnx.AddRoute ("7", "/3", 1, 1);
-
- ccnx.AddRoute ("8", "/3", 1, 1);
- */
-
- // Create the OnOff application to send UDP datagrams of size
- // 210 bytes at a rate of 448 Kb/s from n0 to n4
- /*NS_LOG_INFO ("Create Applications.");
- uint16_t port = 9; // Discard port (RFC 863)
-
- std::string sendsizeattr = "SendSize";
- //flow2 7-->2
- BulkSendHelper bulksend0 ("ns3::UdpSocketFactory", InetSocketAddress (i23.GetAddress (0), port));
- //bulksend0.SetAttribute(sendsizeattr, AttributeValue(ConstantVariable(2560)));
- bulksend0.SetAttribute("MaxBytes", UintegerValue(2560));
- ApplicationContainer apps = bulksend0.Install(c.Get(6));
- apps.Start(Seconds (1.0));
- apps.Stop(Seconds (10.0));
-
- // Create a packet sink to receive these packets
- PacketSinkHelper sink0 ("ns3::UdpSocketFactory", InetSocketAddress(Ipv4Address::GetAny (), port));
- apps = sink0.Install(c.Get(1));
- apps.Start(Seconds(0.0));
- apps.Stop(Seconds(20.0));
-
- //flow1 1-->6
- BulkSendHelper bulksend ("ns3::UdpSocketFactory", InetSocketAddress (i56.GetAddress (1), port));
- //bulksend.SetAttribute(sendsizeattr, AttributeValue( ConstantVariable(2560)));
- bulksend0.SetAttribute("MaxBytes", UintegerValue(2560));
- apps = bulksend.Install (c.Get (0));
- apps.Start (Seconds (6.0));
- apps.Stop (Seconds (20.0));
-
- // Create a packet sink to receive these packets
- PacketSinkHelper sink ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), port));
- apps = sink.Install (c.Get (5));
- apps.Start(Seconds(0.0));
- apps.Stop(Seconds(20.0));
-
- AsciiTraceHelper ascii;
- p2p.EnableAsciiAll (ascii.CreateFileStream ("sync-topology-ndnabstraction.tr"));
- p2p.EnablePcapAll ("sync-topology-ndnabstraction");*/
-
- Simulator::Stop (Seconds (2000));
-
- NS_LOG_INFO ("Run Simulation.");
- Simulator::Run ();
- Simulator::Destroy ();
- NS_LOG_INFO ("Done.");
-
- return 0;
-}
diff --git a/examples/synthetic-topology.cc b/examples/synthetic-topology.cc
index 971bbe1..250a936 100644
--- a/examples/synthetic-topology.cc
+++ b/examples/synthetic-topology.cc
@@ -89,7 +89,7 @@
ccnxHelper.InstallAll ();
NS_LOG_INFO ("Installing Applications");
- CcnxAppHelper consumerHelper ("ns3::CcnxConsumer");
+ CcnxAppHelper consumerHelper ("ns3::CcnxConsumerCbr");
consumerHelper.SetPrefix ("/6");
consumerHelper.SetAttribute ("MeanRate", StringValue ("2Mbps"));
@@ -142,13 +142,13 @@
Simulator::Stop (finishTime);
CcnxTraceHelper traceHelper;
- // traceHelper.EnableAggregateAppAll ("ns3::CcnxConsumer");
+ // traceHelper.EnableAggregateAppAll ("ns3::CcnxConsumerCbr");
// traceHelper.EnableAggregateAppAll ("ns3::CcnxProducer");
// traceHelper.EnableAggregateL3All ();
// traceHelper.SetL3TraceFile ("trace-l3.log");
// traceHelper.SetAppTraceFile ("trace-app.log");
// traceHelper.EnableRateL3All ("rate-trace.log");
- traceHelper.EnableSeqsAppAll ("ns3::CcnxConsumer", "consumers-seqs.log");
+ traceHelper.EnableSeqsAppAll ("ns3::CcnxConsumerCbr", "consumers-seqs.log");
NS_LOG_INFO ("Run Simulation.");
Simulator::Run ();
diff --git a/examples/vanet-ccnx.cc b/examples/vanet-ccnx.cc
new file mode 100644
index 0000000..54f8fa8
--- /dev/null
+++ b/examples/vanet-ccnx.cc
@@ -0,0 +1,140 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2005-2009 Old Dominion University [ARBABI]
+ *
+ * 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: Hadi Arbabi <marbabi@cs.odu.edu>
+ */
+
+/*
+ This the starting point of the simulation and experiments.
+ The main function will parse the input and parameter settings.
+ Creates a highway and set the highway parameters. then bind the events (callbacks)
+ to the created controller and designed handlers. Sets the highway start and end time,
+ and eventually runs the simulation which is basically running a highway with a controller.
+ You can add your functions to controller to create various scenarios.
+*/
+
+#include <fstream>
+#include <iostream>
+#include <iomanip>
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/wifi-module.h"
+
+#include "math.h"
+
+#include "ns3/model.h"
+#include "ns3/highway.h"
+#include "ns3/vehicle-generator.h"
+#include "ns3/tinyxml.h"
+#include "ns3/highway-project-xml.h"
+#include "ns3/highway-xml.h"
+#include "ns3/wifi-configuration-xml.h"
+#include "ns3/highway-project.h"
+
+#include "ns3/ccnx-stack-helper.h"
+#include "ns3/ccnx-face-container.h"
+#include "ns3/ccnx-app-helper.h"
+
+NS_LOG_COMPONENT_DEFINE ("VanetCcnx");
+
+using namespace ns3;
+using namespace std;
+
+void
+EquipVehicle (Ptr<Vehicle> vehicle, Ptr<Highway> highway, double probability)
+{
+ NS_LOG_FUNCTION (vehicle->GetNode ()->GetId () << highway << probability);
+
+ CcnxStackHelper ccnxHelper;
+ ccnxHelper.SetDefaultRoutes (true);
+ Ptr<CcnxFaceContainer> faces = ccnxHelper.Install (vehicle->GetNode ());
+ NS_LOG_DEBUG ("Install CCNx stack. " << faces->GetN () << " faces available");
+
+
+ if (probability < 30)
+ {
+ CcnxAppHelper producerHelper ("ns3::CcnxProducer");
+ producerHelper.SetPrefix ("/");
+ producerHelper.Install (vehicle->GetNode ());
+ }
+ else
+ {
+ CcnxAppHelper consumerHelper ("ns3::CcnxConsumerCbr");
+ consumerHelper.SetAttribute ("LifeTime", StringValue("100s"));
+ consumerHelper.SetAttribute ("Frequency", StringValue("10"));
+ consumerHelper.SetPrefix ("/");
+ consumerHelper.Install (vehicle->GetNode ());
+ }
+}
+
+int
+main (int argc, char *argv[])
+{
+ string projectXmlFile = "";
+
+ CommandLine cmd;
+ cmd.AddValue ("project", "highway xml description", projectXmlFile);
+ cmd.Parse (argc, argv);
+ if (projectXmlFile == "")
+ {
+ std::cerr << "ERROR: --project option MUST be specified\n";
+ return 1;
+ }
+
+ std::ifstream testProjectFile (projectXmlFile.c_str ());
+ if (testProjectFile.bad ())
+ {
+ std::cerr << "ERROR: Cannot open project file\n";
+ return 2;
+ }
+ testProjectFile.close ();
+
+ TiXmlDocument doc (projectXmlFile.c_str ());
+ doc.LoadFile ();
+ TiXmlHandle hDoc (&doc);
+ TiXmlElement* root = hDoc.FirstChildElement ().Element ();
+ TiXmlHandle hroot = TiXmlHandle (root);
+ HighwayProjectXml xml;
+ xml.LoadFromXml (hroot);
+
+ ns3::PacketMetadata::Enable ();
+ Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("2200"));
+ Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("2200"));
+
+ HighwayProject project (xml);
+ // project.SetVehTraceFile (vehicleTraceFile);
+ // project.SetNetTraceFile (networkTraceFile);
+
+ for (std::list<ns3::Ptr<ns3::VehicleGenerator> >::iterator generator = project.GetVehicleGenerators ().begin ();
+ generator != project.GetVehicleGenerators ().end ();
+ generator++)
+ {
+ (*generator)->TraceConnectWithoutContext ("NewVehicle", MakeCallback (EquipVehicle));
+ }
+
+ project.Start ();
+
+ Simulator::Run ();
+ Simulator::Destroy ();
+
+ // Ptr<Highway> highway = project.getHighways ()[0];
+ // Simulator::Schedule (Seconds (10), &addCustomVehicle, highway);
+ // project.SetVehicleControlCallback (MakeCallback (&controlVehicle));
+
+ return 0;
+}
diff --git a/helper/ccnx-stack-helper.cc b/helper/ccnx-stack-helper.cc
index ff73cae..b7c8a01 100644
--- a/helper/ccnx-stack-helper.cc
+++ b/helper/ccnx-stack-helper.cc
@@ -19,41 +19,6 @@
* Ilya Moiseenko <iliamo@cs.ucla.edu>
*/
-/**
- * \ingroup ccnx
- * \defgroup CcnxStackModel Ccnx Stack Model
- *
- * \section CcnxStackTracingModel Tracing in the Ccnx Stack
- *
- * The ccnx stack provides a number of trace sources in its various
- * protocol implementations. These trace sources can be hooked using your own
- * custom trace code, or you can use our helper functions in some cases to
- * arrange for tracing to be enabled.
- *
- * \subsection CcnxStackCcnxTracingModel Tracing in Ccnx
- *
- * The Ccnx layer three protocol provides three trace hooks. These are the
- * "Tx" (ns3::CcnxL3Protocol::m_txTrace), "Rx" (ns3::CcnxL3Protocol::m_rxTrace)
- * and "Drop" (ns3::CcnxL3Protocol::m_dropTrace) trace sources.
- *
- * The "Tx" trace is fired in a number of situations, all of which indicate that
- * a given packet is about to be sent down to a given ns3::CcnxFace.
- *
- * - \todo list Tx trace events
- *
- * The "Rx" trace is fired when a packet is passed from the device up to the
- * ns3::CcnxL3Protocol::Receive function.
- *
- * - In the receive function, the CcnxFaceList is iterated, and if the
- * CcnxFace corresponding to the receiving device is found to be in the
- * UP state, the trace is fired.
- *
- * The "Drop" trace is fired in any case where the packet is dropped (in both
- * the transmit and receive paths).
- *
- * - \todo list Drop trace events
- */
-
#include "ns3/assert.h"
#include "ns3/log.h"
#include "ns3/object.h"
@@ -91,43 +56,11 @@
#include <limits>
#include <map>
#include <boost/foreach.hpp>
-
-#define NDN_DEFAULT_DATA_SIZE 1024
+#include <boost/lexical_cast.hpp>
NS_LOG_COMPONENT_DEFINE ("CcnxStackHelper");
namespace ns3 {
-
-// Things are going to work differently here with respect to trace
-// file handling than in most places because the Tx and Rx trace
-// sources we are interested in are going to multiplex receive and
-// transmit callbacks for all Ccnx and face pairs through one
-// callback. We want packets to or from each distinct pair to go to
-// an individual file, so we have got to demultiplex the Ccnx and face
-// pair into a corresponding Ptr<PcapFileWrapper> at the callback.
-//
-// A complication in this situation is that the trace sources are
-// hooked on a protocol basis. There is no trace source hooked by an
-// Ccnx and face pair. This means that if we naively proceed to hook,
-// say, a drop trace for a given Ccnx with face 0, and then hook for
-// Ccnx with face 1 we will hook the drop trace twice and get two
-// callbacks per event. What we need to do is to hook the event once,
-// and that will result in a single callback per drop event, and the
-// trace source will provide the face which we filter on in the trace
-// sink.
-//
-// This has got to continue to work properly after the helper has been
-// destroyed; but must be cleaned up at the end of time to avoid
-// leaks. Global maps of protocol/face pairs to file objects seems to
-// fit the bill.
-//
-// typedef std::pair<Ptr<Ccnx>, uint32_t> FacePairCcnx;
-// typedef std::map<FacePairCcnx, Ptr<PcapFileWrapper> > FaceFileMapCcnx;
-// typedef std::map<FacePairCcnx, Ptr<OutputStreamWrapper> > FaceStreamMapCcnx;
-
-// static FaceFileMapCcnx g_faceFileMapCcnx; /**< A mapping of Ccnx/face pairs to pcap files */
-// static FaceStreamMapCcnx g_faceStreamMapCcnx; /**< A mapping of Ccnx/face pairs to ascii streams */
-
CcnxStackHelper::CcnxStackHelper ()
: m_limitsEnabled (false)
@@ -155,7 +88,10 @@
}
void
-CcnxStackHelper::EnableLimits (bool enable/* = true*/, Time avgRtt/*=Seconds(0.1)*/, uint32_t avgContentObject/*=1100*/, uint32_t avgInterest/*=40*/)
+CcnxStackHelper::EnableLimits (bool enable/* = true*/,
+ Time avgRtt/*=Seconds(0.1)*/,
+ uint32_t avgContentObject/*=1100*/,
+ uint32_t avgInterest/*=40*/)
{
NS_LOG_INFO ("EnableLimits: " << enable);
m_limitsEnabled = enable;
@@ -223,27 +159,24 @@
{
NS_LOG_INFO ("Limits are enabled");
Ptr<PointToPointNetDevice> p2p = DynamicCast<PointToPointNetDevice> (device);
- if (p2p == 0)
+ if (p2p != 0)
{
- NS_LOG_INFO ("Non p2p interface");
- continue; // only PointToPointNetDevice supports limits
- }
-
- // Setup bucket filtering
- // Assume that we know average data packet size, and this size is equal default size
- // Set maximum buckets (averaging over 1 second)
+ // Setup bucket filtering
+ // Assume that we know average data packet size, and this size is equal default size
+ // Set maximum buckets (averaging over 1 second)
- DataRateValue dataRate; device->GetAttribute ("DataRate", dataRate);
+ DataRateValue dataRate; device->GetAttribute ("DataRate", dataRate);
- NS_LOG_INFO("DataRate for this link is " << dataRate.Get());
+ NS_LOG_INFO("DataRate for this link is " << dataRate.Get());
- double maxInterestPackets = 1.0 * dataRate.Get ().GetBitRate () / 8.0 / m_avgContentObjectSize;
- NS_LOG_INFO ("Max packets per second: " << maxInterestPackets);
- NS_LOG_INFO ("Max burst: " << m_avgRtt.ToDouble (Time::S) * maxInterestPackets);
+ double maxInterestPackets = 1.0 * dataRate.Get ().GetBitRate () / 8.0 / (m_avgContentObjectSize + m_avgInterestSize);
+ NS_LOG_INFO ("Max packets per second: " << maxInterestPackets);
+ NS_LOG_INFO ("Max burst: " << m_avgRtt.ToDouble (Time::S) * maxInterestPackets);
- // Set bucket max to BDP
- face->SetBucketMax (m_avgRtt.ToDouble (Time::S) * maxInterestPackets); // number of interests allowed
- face->SetBucketLeak (maxInterestPackets);
+ // Set bucket max to BDP
+ face->SetBucketMax (m_avgRtt.ToDouble (Time::S) * maxInterestPackets); // number of interests allowed
+ face->SetBucketLeak (maxInterestPackets);
+ }
}
face->SetUp ();
@@ -262,7 +195,7 @@
void
-CcnxStackHelper::AddRoute (Ptr<Node> node, std::string prefix, Ptr<CcnxFace> face, int32_t metric) const
+CcnxStackHelper::AddRoute (Ptr<Node> node, std::string prefix, Ptr<CcnxFace> face, int32_t metric)
{
NS_LOG_LOGIC ("[" << node->GetId () << "]$ route add " << prefix << " via " << *face << " metric " << metric);
@@ -274,7 +207,7 @@
}
void
-CcnxStackHelper::AddRoute (std::string nodeName, std::string prefix, uint32_t faceId, int32_t metric) const
+CcnxStackHelper::AddRoute (std::string nodeName, std::string prefix, uint32_t faceId, int32_t metric)
{
Ptr<Node> node = Names::Find<Node> (nodeName);
NS_ASSERT_MSG (node != 0, "Node [" << nodeName << "] does not exist");
@@ -288,275 +221,6 @@
AddRoute (node, prefix, face, metric);
}
-/*
- void
- CcnxStackHelper::AddRoute (Ptr<Node> node, std::string prefix, uint32_t faceId, int32_t metric)
- {
- NS_LOG_LOGIC ("[" << nodeName << "]$ route add " << prefix << " via " << faceId << " metric " << metric);
-
- NS_ASSERT_MSG (node != 0, "Node does not exist");
-
- Ptr<Ccnx> ccnx = node->GetObject<Ccnx> ();
- Ptr<CcnxFib> fib = node->GetObject<CcnxFib> ();
- Ptr<CcnxFace> face = ccnx->GetFace (faceId);
- NS_ASSERT_MSG (node != 0, "Face with ID [" << faceId << "] does not exist on node [" << nodeName << "]");
-
- CcnxNameComponentsValue prefixValue;
- prefixValue.DeserializeFromString (prefix, MakeCcnxNameComponentsChecker ());
- fib->Add (prefixValue.Get (), face, metric);
- }
-*/
-
-// static void
-// CcnxL3ProtocolRxTxSink (Ptr<const Packet> p, Ptr<Ccnx> ccnx, uint32_t face)
-// {
-// NS_LOG_FUNCTION (p << ccnx << face);
-
-// //
-// // Since trace sources are independent of face, if we hook a source
-// // on a particular protocol we will get traces for all of its faces.
-// // We need to filter this to only report faces for which the user
-// // has expressed interest.
-// //
-// FacePairCcnx pair = std::make_pair (ccnx, face);
-// if (g_faceFileMapCcnx.find (pair) == g_faceFileMapCcnx.end ())
-// {
-// NS_LOG_INFO ("Ignoring packet to/from face " << face);
-// return;
-// }
-
-// Ptr<PcapFileWrapper> file = g_faceFileMapCcnx[pair];
-// file->Write (Simulator::Now (), p);
-// }
-
-// bool
-// CcnxStackHelper::PcapHooked (Ptr<Ccnx> ccnx)
-// {
-// for (FaceFileMapCcnx::const_iterator i = g_faceFileMapCcnx.begin ();
-// i != g_faceFileMapCcnx.end ();
-// ++i)
-// {
-// if ((*i).first.first == ccnx)
-// {
-// return true;
-// }
-// }
-// return false;
-// }
-
-// void
-// CcnxStackHelper::EnablePcapCcnxInternal (std::string prefix, Ptr<Ccnx> ccnx, uint32_t face, bool explicitFilename)
-// {
-// NS_LOG_FUNCTION (prefix << ccnx << face);
-
-// //
-// // We have to create a file and a mapping from protocol/face to file
-// // irrespective of how many times we want to trace a particular protocol.
-// //
-// PcapHelper pcapHelper;
-
-// std::string filename;
-// if (explicitFilename)
-// {
-// filename = prefix;
-// }
-// else
-// {
-// filename = pcapHelper.GetFilenameFromInterfacePair (prefix, ccnx, face);
-// }
-
-// Ptr<PcapFileWrapper> file = pcapHelper.CreateFile (filename, std::ios::out, PcapHelper::DLT_RAW);
-
-// //
-// // However, we only hook the trace source once to avoid multiple trace sink
-// // calls per event (connect is independent of face).
-// //
-// if (!PcapHooked (ccnx))
-// {
-// //
-// // Ptr<Ccnx> is aggregated to node and CcnxL3Protocol is aggregated to
-// // node so we can get to CcnxL3Protocol through Ccnx.
-// //
-// Ptr<CcnxL3Protocol> ccnxL3Protocol = ccnx->GetObject<CcnxL3Protocol> ();
-// NS_ASSERT_MSG (ccnxL3Protocol, "CcnxStackHelper::EnablePcapCcnxInternal(): "
-// "m_ccnxEnabled and ccnxL3Protocol inconsistent");
-
-// bool result = ccnxL3Protocol->TraceConnectWithoutContext ("Tx", MakeCallback (&CcnxL3ProtocolRxTxSink));
-// NS_ASSERT_MSG (result == true, "CcnxStackHelper::EnablePcapCcnxInternal(): "
-// "Unable to connect ccnxL3Protocol \"Tx\"");
-
-// result = ccnxL3Protocol->TraceConnectWithoutContext ("Rx", MakeCallback (&CcnxL3ProtocolRxTxSink));
-// NS_ASSERT_MSG (result == true, "CcnxStackHelper::EnablePcapCcnxInternal(): "
-// "Unable to connect ccnxL3Protocol \"Rx\"");
-// // cast result to void, to suppress ‘result’ set but not used compiler-warning
-// // for optimized builds
-// (void) result;
-// }
-
-// g_faceFileMapCcnx[std::make_pair (ccnx, face)] = file;
-// }
-
-// static void
-// CcnxL3ProtocolDropSinkWithoutContext (
-// Ptr<OutputStreamWrapper> stream,
-// Ptr<const Packet> packet,
-// CcnxL3Protocol::DropReason reason,
-// Ptr<Ccnx> ccnx,
-// uint32_t face)
-// {
-// //
-// // Since trace sources are independent of face, if we hook a source
-// // on a particular protocol we will get traces for all of its faces.
-// // We need to filter this to only report faces for which the user
-// // has expressed interest.
-// //
-// FacePairCcnx pair = std::make_pair (ccnx, face);
-// if (g_faceStreamMapCcnx.find (pair) == g_faceStreamMapCcnx.end ())
-// {
-// NS_LOG_INFO ("Ignoring packet to/from face " << face);
-// return;
-// }
-
-// *stream->GetStream () << "d " << Simulator::Now ().GetSeconds () << " " << *packet << std::endl;
-// }
-
-// static void
-// CcnxL3ProtocolDropSinkWithContext (
-// Ptr<OutputStreamWrapper> stream,
-// std::string context,
-// Ptr<const Packet> packet,
-// CcnxL3Protocol::DropReason reason,
-// Ptr<Ccnx> ccnx,
-// uint32_t face)
-// {
-// //
-// // Since trace sources are independent of face, if we hook a source
-// // on a particular protocol we will get traces for all of its faces.
-// // We need to filter this to only report faces for which the user
-// // has expressed interest.
-// //
-// FacePairCcnx pair = std::make_pair (ccnx, face);
-// if (g_faceStreamMapCcnx.find (pair) == g_faceStreamMapCcnx.end ())
-// {
-// NS_LOG_INFO ("Ignoring packet to/from face " << face);
-// return;
-// }
-
-// *stream->GetStream () << "d " << Simulator::Now ().GetSeconds () << " " << context << "(" << face << ") "
-// << *packet << std::endl;
-// }
-
-// bool
-// CcnxStackHelper::AsciiHooked (Ptr<Ccnx> ccnx)
-// {
-// for ( FaceStreamMapCcnx::const_iterator i = g_faceStreamMapCcnx.begin ();
-// i != g_faceStreamMapCcnx.end ();
-// ++i)
-// {
-// if ((*i).first.first == ccnx)
-// {
-// return true;
-// }
-// }
-// return false;
-// }
-
-// void
-// CcnxStackHelper::EnableAsciiCcnxInternal (
-// Ptr<OutputStreamWrapper> stream,
-// std::string prefix,
-// Ptr<Ccnx> ccnx,
-// uint32_t face,
-// bool explicitFilename)
-// {
-// //
-// // Our trace sinks are going to use packet printing, so we have to
-// // make sure that is turned on.
-// //
-// Packet::EnablePrinting ();
-
-// //
-// // If we are not provided an OutputStreamWrapper, we are expected to create
-// // one using the usual trace filename conventions and hook WithoutContext
-// // since there will be one file per context and therefore the context would
-// // be redundant.
-// //
-// if (stream == 0)
-// {
-// //
-// // Set up an output stream object to deal with private ofstream copy
-// // constructor and lifetime issues. Let the helper decide the actual
-// // name of the file given the prefix.
-// //
-// // We have to create a stream and a mapping from protocol/face to
-// // stream irrespective of how many times we want to trace a particular
-// // protocol.
-// //
-// AsciiTraceHelper asciiTraceHelper;
-
-// std::string filename;
-// if (explicitFilename)
-// {
-// filename = prefix;
-// }
-// else
-// {
-// filename = asciiTraceHelper.GetFilenameFromInterfacePair (prefix, ccnx, face);
-// }
-
-// Ptr<OutputStreamWrapper> theStream = asciiTraceHelper.CreateFileStream (filename);
-
-// //
-// // However, we only hook the trace sources once to avoid multiple trace sink
-// // calls per event (connect is independent of face).
-// //
-// if (!AsciiHooked (ccnx))
-// {
-// //
-// // The drop sink for the CcnxL3Protocol uses a different signature than
-// // the default sink, so we have to cook one up for ourselves. We can get
-// // to the Ptr<CcnxL3Protocol> through our Ptr<Ccnx> since they must both
-// // be aggregated to the same node.
-// //
-// Ptr<CcnxL3Protocol> ccnxL3Protocol = ccnx->GetObject<CcnxL3Protocol> ();
-// bool __attribute__ ((unused)) result = ccnxL3Protocol->TraceConnectWithoutContext ("Drop",
-// MakeBoundCallback (&CcnxL3ProtocolDropSinkWithoutContext, theStream));
-// NS_ASSERT_MSG (result == true, "CcnxStackHelper::EanableAsciiCcnxInternal(): "
-// "Unable to connect ccnxL3Protocol \"Drop\"");
-// }
-
-// g_faceStreamMapCcnx[std::make_pair (ccnx, face)] = theStream;
-// return;
-// }
-
-// //
-// // If we are provided an OutputStreamWrapper, we are expected to use it, and
-// // to provide a context. We are free to come up with our own context if we
-// // want, and use the AsciiTraceHelper Hook*WithContext functions, but for
-// // compatibility and simplicity, we just use Config::Connect and let it deal
-// // with the context.
-// //
-// // We need to associate the ccnx/face with a stream to express interest
-// // in tracing events on that pair, however, we only hook the trace sources
-// // once to avoid multiple trace sink calls per event (connect is independent
-// // of face).
-// //
-// if (!AsciiHooked (ccnx))
-// {
-// Ptr<Node> node = ccnx->GetObject<Node> ();
-// std::ostringstream oss;
-
-// //
-// // This has all kinds of parameters coming with, so we have to cook up our
-// // own sink.
-// //
-// oss.str ("");
-// oss << "/NodeList/" << node->GetId () << "/$ns3::CcnxL3Protocol/Drop";
-// Config::Connect (oss.str (), MakeBoundCallback (&CcnxL3ProtocolDropSinkWithContext, stream));
-// }
-
-// g_faceStreamMapCcnx[std::make_pair (ccnx, face)] = stream;
-// }
void
CcnxStackHelper::InstallFakeGlobalRoutesImpl ()
@@ -596,9 +260,12 @@
void
CcnxStackHelper::InstallRouteTo (Ptr<Node> destNode)
{
- std::ostringstream destPrefix;
- destPrefix << "/" << destNode->GetId ();
+ InstallRouteTo (boost::lexical_cast<std::string> (destNode->GetId ()), destNode);
+}
+void
+CcnxStackHelper::InstallRouteTo (const std::string &prefix, Ptr<Node> destNode)
+{
Ipv4Address destIpv4 = Ipv4Address(destNode->GetId ());
for (NodeList::Iterator node = NodeList::Begin ();
@@ -631,7 +298,7 @@
Ptr<CcnxFace> face = ccnx->GetFaceByNetDevice (netDevice);
NS_ASSERT_MSG (face != 0, "Definitely should never happen. Call the president");
- AddRoute (*node, destPrefix.str(), face, entry.GetMetric ());
+ AddRoute (*node, prefix, face, entry.GetMetric ());
}
}
}
diff --git a/helper/ccnx-stack-helper.h b/helper/ccnx-stack-helper.h
index b4cdbc6..6cd3745 100644
--- a/helper/ccnx-stack-helper.h
+++ b/helper/ccnx-stack-helper.h
@@ -151,8 +151,8 @@
* \param faceId Face index
* \param metric Routing metric
*/
- void
- AddRoute (std::string nodeName, std::string prefix, uint32_t faceId, int32_t metric) const;
+ static void
+ AddRoute (std::string nodeName, std::string prefix, uint32_t faceId, int32_t metric);
/**
* \brief Add forwarding entry in FIB
@@ -162,8 +162,8 @@
* \param face Face
* \param metric Routing metric
*/
- void
- AddRoute (Ptr<Node> node, std::string prefix, Ptr<CcnxFace> face, int32_t metric) const;
+ static void
+ AddRoute (Ptr<Node> node, std::string prefix, Ptr<CcnxFace> face, int32_t metric);
/**
* \brief Set flag indicating necessity to install default routes in FIB
@@ -177,28 +177,36 @@
* This method adds fake routes to all nodes, where each route is /32 and IPv4 address equal to node number.
* For example, node 5 will have direct route to 0.0.0.5.
*/
- void
+ static void
InstallFakeGlobalRoutes ();
- void
+ static void
InstallFakeGlobalRoutesImpl ();
/**
- * \brief Installs CCNx route to `node` based on fake IPv4 routes
+ * \brief Install CCNx route to `node` based on fake IPv4 routes
*
* Actual route is "/<nodeId>"
*
* \param node Pointer to a node, which should be reached from all other nodes
*/
- void
+ static void
InstallRouteTo (Ptr<Node> node);
/**
- * \brief Installs CCNx route to all nodes based on fake IPv4 routes
+ * \brief Install CCNx route to /prefix which is installed on `node'
+ *
+ * Normally, prefix is /<node->GetId()>. Other values may be used in black-holing scenarios
+ */
+ static void
+ InstallRouteTo (const std::string &prefix, Ptr<Node> node);
+
+ /**
+ * \brief Install CCNx route to all nodes based on fake IPv4 routes
*
* \see InstallRouteTo
*/
- void
+ static void
InstallRoutesToAll ();
private:
diff --git a/helper/ccnx-trace-helper.cc b/helper/ccnx-trace-helper.cc
index 1742462..a153862 100644
--- a/helper/ccnx-trace-helper.cc
+++ b/helper/ccnx-trace-helper.cc
@@ -31,6 +31,8 @@
#include "ns3/object-vector.h"
#include "ns3/simulator.h"
#include "ns3/names.h"
+#include "ns3/tcp-l4-protocol.h"
+#include "ns3/node.h"
#include <boost/ref.hpp>
#include <boost/lexical_cast.hpp>
@@ -39,7 +41,10 @@
#include "tracers/ccnx-aggregate-l3-tracer.h"
#include "tracers/ccnx-rate-l3-tracer.h"
#include "tracers/ccnx-seqs-app-tracer.h"
+#include "tracers/ipv4-rate-l3-tracer.h"
#include "tracers/ipv4-seqs-app-tracer.h"
+#include "tracers/ccnx-consumer-window-tracer.h"
+#include "tracers/ccnx-path-weight-tracer.h"
#include "ns3/ccnx-interest-header.h"
#include "ns3/ccnx-content-object-header.h"
@@ -56,7 +61,11 @@
CcnxTraceHelper::CcnxTraceHelper ()
: m_l3RateTrace (0)
, m_appSeqsTrace (0)
+ , m_ipv4RateTrace (0)
, m_ipv4AppSeqsTrace (0)
+ , m_windowsTrace (0)
+ , m_windowsTcpTrace (0)
+ , m_pathWeightsTrace (0)
{
}
@@ -66,6 +75,10 @@
if (m_l3RateTrace != 0) delete m_l3RateTrace;
if (m_appSeqsTrace != 0) delete m_appSeqsTrace;
if (m_ipv4AppSeqsTrace != 0) delete m_ipv4AppSeqsTrace;
+ if (m_windowsTrace != 0) delete m_windowsTrace;
+ if (m_windowsTcpTrace != 0) delete m_windowsTcpTrace;
+ if (m_pathWeightsTrace != 0) delete m_pathWeightsTrace;
+ if (m_ipv4RateTrace != 0) delete m_ipv4RateTrace;
if (m_apps.size () > 0)
{
@@ -193,7 +206,7 @@
NS_LOG_DEBUG ("Node: " << lexical_cast<string> ((*node)->GetId ()));
Ptr<CcnxRateL3Tracer> trace = Create<CcnxRateL3Tracer> (boost::ref(*m_l3RateTrace), *node);
- trace->SetAveragingPeriod (Seconds (0.5));
+ trace->SetAveragingPeriod (Seconds (0.2));
m_l3Rates.push_back (trace);
}
@@ -206,6 +219,32 @@
}
void
+CcnxTraceHelper::EnableIpv4RateL3All (const std::string &file)
+{
+ NS_LOG_FUNCTION (this);
+ m_ipv4RateTrace = new ofstream (file.c_str (), ios::trunc);
+
+ for (NodeList::Iterator node = NodeList::Begin ();
+ node != NodeList::End ();
+ node++)
+ {
+ NS_LOG_DEBUG ("Node: " << lexical_cast<string> ((*node)->GetId ()));
+
+ Ptr<Ipv4RateL3Tracer> trace = Create<Ipv4RateL3Tracer> (boost::ref(*m_ipv4RateTrace), *node);
+ trace->SetAveragingPeriod (Seconds (0.2));
+ m_ipv4Rates.push_back (trace);
+ }
+
+ if (m_ipv4Rates.size () > 0)
+ {
+ // *m_ipv4RateTrace << "# "; // not necessary for R's read.table
+ m_ipv4Rates.front ()->PrintHeader (*m_ipv4RateTrace);
+ *m_ipv4RateTrace << "\n";
+ }
+}
+
+
+void
CcnxTraceHelper::EnableSeqsAppAll (const std::string &appName, const std::string &trace)
{
NS_LOG_FUNCTION (this);
@@ -286,5 +325,91 @@
}
}
+void
+CcnxTraceHelper::EnableWindowsAll (const std::string &windowTrace)
+{
+ NS_LOG_FUNCTION (this);
+ m_windowsTrace = new ofstream (windowTrace.c_str (), ios::trunc);
+
+ for (NodeList::Iterator node = NodeList::Begin ();
+ node != NodeList::End ();
+ node++)
+ {
+ ObjectVectorValue apps;
+ (*node)->GetAttribute ("ApplicationList", apps);
+
+ NS_LOG_DEBUG ("Node: " << lexical_cast<string> ((*node)->GetId ()));
+
+ uint32_t appId = 0;
+ for (ObjectVectorValue::Iterator app = apps.Begin ();
+ app != apps.End ();
+ app++, appId++)
+ {
+ if ((*app)->GetInstanceTypeId ().GetName () == "ns3::CcnxConsumerWindow")
+ {
+ Ptr<CcnxConsumerWindowTracer> trace = Create<CcnxConsumerWindowTracer> (boost::ref(*m_windowsTrace),
+ *node,
+ lexical_cast<string> (appId));
+ m_windows.push_back (trace);
+ }
+ }
+
+ }
+
+ if (m_windows.size () > 0)
+ {
+ m_windows.front ()->PrintHeader (*m_windowsTrace);
+ *m_windowsTrace << "\n";
+ }
+}
+
+void
+CcnxTraceHelper::TcpConnect (Ptr<Node> node)
+{
+ ObjectVectorValue sockets;
+ node->GetObject<TcpL4Protocol> ()->GetAttribute ("SocketList", sockets);
+
+ uint32_t sockId = 0;
+ for (ObjectVectorValue::Iterator socket = sockets.Begin ();
+ socket != sockets.End ();
+ socket++, sockId++)
+ {
+ // std::cout << "Node: " << node->GetId () << ", Socket " << sockId << "\n";
+
+ Ptr<TcpCongestionWindowTracer> trace = Create<TcpCongestionWindowTracer> (boost::ref(*m_windowsTcpTrace),
+ node,
+ lexical_cast<string> (sockId));
+ m_windowsTcp.push_back (trace);
+ }
+}
+
+void
+CcnxTraceHelper::EnableWindowsTcpAll (const std::string &windowTrace)
+{
+ NS_LOG_FUNCTION (this);
+ m_windowsTcpTrace = new ofstream (windowTrace.c_str (), ios::trunc);
+
+ WindowTracer::PrintHeader (*m_windowsTcpTrace);
+ *m_windowsTcpTrace << "\n";
+}
+
+void
+CcnxTraceHelper::EnablePathWeights (const std::string &pathWeights)
+{
+ NS_LOG_FUNCTION (this);
+ m_pathWeightsTrace = new ofstream (pathWeights.c_str (), ios::trunc);
+
+ CcnxPathWeightTracer::PrintHeader (*m_pathWeightsTrace);
+ *m_pathWeightsTrace << "\n";
+
+ for (NodeList::Iterator node = NodeList::Begin ();
+ node != NodeList::End ();
+ node++)
+ {
+ Ptr<CcnxPathWeightTracer> trace = Create<CcnxPathWeightTracer> (boost::ref(*m_pathWeightsTrace),
+ *node);
+ m_pathWeights.push_back (trace);
+ }
+}
} // namespace ns3
diff --git a/helper/ccnx-trace-helper.h b/helper/ccnx-trace-helper.h
index 4079f9c..aa9cd30 100644
--- a/helper/ccnx-trace-helper.h
+++ b/helper/ccnx-trace-helper.h
@@ -28,9 +28,14 @@
namespace ns3 {
+class Node;
class CcnxAppTracer;
class CcnxL3Tracer;
+class Ipv4L3Tracer;
class Ipv4AppTracer;
+class WindowTracer;
+class CcnxPathWeightTracer;
+class Application;
class CcnxTraceHelper
{
@@ -93,7 +98,38 @@
*/
void
EnableIpv4SeqsAppAll (const std::string &appSeqsTrace = "app-seqs.log");
-
+
+ /**
+ * @brief Enable network-level IPv4 rate tracing on all IPv4-enabled nodes
+ */
+ void
+ EnableIpv4RateL3All (const std::string &ipv4RateTrace = "ipv4-rate.log");
+
+ /**
+ * @brief Enable tracing of window changes in CcnxConsumerWindow
+ */
+ void
+ EnableWindowsAll (const std::string &windowTrace = "windows.log");
+
+ /**
+ * @brief Enable tracing of congestion window changes in TcpNewReno
+ */
+ void
+ EnableWindowsTcpAll (const std::string &windowTrace);
+
+ /**
+ * @brief Should be called with node pointer after TCP application
+ *
+ * Workaround because NS-3 needs object to exist before connecting trace
+ */
+ void TcpConnect (Ptr<Node> node);
+
+ /**
+ * @brief Enable tracing of path weights
+ */
+ void
+ EnablePathWeights (const std::string &pathWeights);
+
private:
std::string m_appTrace;
std::list<Ptr<CcnxAppTracer> > m_apps;
@@ -107,8 +143,20 @@
std::list<Ptr<CcnxAppTracer> > m_appSeqs;
std::ostream *m_appSeqsTrace;
+ std::list<Ptr<Ipv4L3Tracer> > m_ipv4Rates;
+ std::ostream *m_ipv4RateTrace;
+
std::list<Ptr<Ipv4AppTracer> > m_ipv4AppSeqs;
std::ostream *m_ipv4AppSeqsTrace;
+
+ std::list<Ptr<WindowTracer> > m_windows;
+ std::ostream *m_windowsTrace;
+
+ std::list<Ptr<WindowTracer> > m_windowsTcp;
+ std::ostream *m_windowsTcpTrace;
+
+ std::list<Ptr<CcnxPathWeightTracer> > m_pathWeights;
+ std::ostream *m_pathWeightsTrace;
};
diff --git a/helper/tracers/ccnx-consumer-window-tracer.cc b/helper/tracers/ccnx-consumer-window-tracer.cc
new file mode 100644
index 0000000..eea664a
--- /dev/null
+++ b/helper/tracers/ccnx-consumer-window-tracer.cc
@@ -0,0 +1,88 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2011 UCLA
+ *
+ * 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: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#include "ccnx-consumer-window-tracer.h"
+#include "ns3/node.h"
+#include "ns3/packet.h"
+#include "ns3/config.h"
+#include "ns3/callback.h"
+#include "ns3/names.h"
+#include "ns3/simulator.h"
+
+#include <boost/lexical_cast.hpp>
+
+using namespace std;
+using namespace boost;
+
+namespace ns3 {
+
+void
+CcnxConsumerWindowTracer::Connect ()
+{
+ Config::Connect ("/NodeList/"+m_node+"/ApplicationList/"+m_appId+"/$ns3::CcnxConsumerWindow/WindowTrace",
+ MakeCallback (&WindowTracer::OnWindowChange, this));
+}
+
+void
+TcpCongestionWindowTracer::Connect ()
+{
+ Config::Connect ("/NodeList/"+m_node+"/$ns3::TcpL4Protocol/SocketList/*/CongestionWindow",
+ MakeCallback (&WindowTracer::OnWindowChange, this));
+}
+
+
+WindowTracer::WindowTracer (std::ostream &os, Ptr<Node> node, const std::string &appId)
+ : m_appId (appId)
+ , m_nodePtr (node)
+ , m_os (os)
+{
+ m_node = boost::lexical_cast<string> (m_nodePtr->GetId ());
+
+ string name = Names::FindName (node);
+ if (!name.empty ())
+ {
+ m_nodeName = name;
+ }
+ else
+ m_nodeName = m_node;
+}
+
+
+void
+WindowTracer::PrintHeader (std::ostream &os)
+{
+ os << "Time\t"
+ << "Node\t"
+ << "AppId\t"
+ << "Window";
+}
+
+void
+WindowTracer::OnWindowChange (std::string context,
+ uint32_t oldValue, uint32_t newValue)
+{
+ m_os
+ << Simulator::Now ().ToDouble (Time::S) << "\t"
+ << m_nodeName << "\t"
+ << m_appId << "\t"
+ << newValue << endl;
+}
+
+} // namespace ns3
diff --git a/helper/tracers/ccnx-consumer-window-tracer.h b/helper/tracers/ccnx-consumer-window-tracer.h
new file mode 100644
index 0000000..c538931
--- /dev/null
+++ b/helper/tracers/ccnx-consumer-window-tracer.h
@@ -0,0 +1,77 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2012 UCLA
+ *
+ * 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: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#ifndef CCNX_CONSUMER_WINDOW_TRACER_H
+#define CCNX_CONSUMER_WINDOW_TRACER_H
+
+#include "ns3/ptr.h"
+#include "ns3/simple-ref-count.h"
+
+namespace ns3 {
+
+class Node;
+
+class WindowTracer : public SimpleRefCount<WindowTracer>
+{
+public:
+ WindowTracer (std::ostream &os, Ptr<Node> node, const std::string &appId = "*");
+ virtual ~WindowTracer () { };
+
+ static void
+ PrintHeader (std::ostream &os);
+
+ virtual void
+ OnWindowChange (std::string context,
+ uint32_t oldValue, uint32_t newValue);
+
+protected:
+ std::string m_appId;
+ std::string m_node;
+ std::string m_nodeName;
+ Ptr<Node> m_nodePtr;
+ std::ostream& m_os;
+};
+
+class CcnxConsumerWindowTracer : public WindowTracer
+{
+public:
+ CcnxConsumerWindowTracer (std::ostream &os, Ptr<Node> node, const std::string &appId = "*")
+ : WindowTracer (os, node, appId)
+ { Connect (); }
+
+ void
+ Connect ();
+};
+
+class TcpCongestionWindowTracer : public WindowTracer
+{
+public:
+ TcpCongestionWindowTracer (std::ostream &os, Ptr<Node> node, const std::string &appId = "*")
+ : WindowTracer (os, node, appId)
+ { Connect (); }
+
+ void
+ Connect ();
+};
+
+
+} // namespace ns3
+
+#endif // CCNX_CONSUMER_WINDOW_TRACER_H
diff --git a/helper/tracers/ccnx-path-weight-tracer.cc b/helper/tracers/ccnx-path-weight-tracer.cc
new file mode 100644
index 0000000..b2685bd
--- /dev/null
+++ b/helper/tracers/ccnx-path-weight-tracer.cc
@@ -0,0 +1,91 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2011 UCLA
+ *
+ * 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: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#include "ccnx-path-weight-tracer.h"
+#include "ns3/node.h"
+#include "ns3/packet.h"
+#include "ns3/config.h"
+#include "ns3/names.h"
+#include "ns3/callback.h"
+#include "ns3/ccnx-app.h"
+#include "ns3/ccnx-face.h"
+#include "ns3/boolean.h"
+#include "ns3/simulator.h"
+
+#include <boost/lexical_cast.hpp>
+#include <boost/foreach.hpp>
+
+using namespace std;
+
+namespace ns3 {
+
+CcnxPathWeightTracer::CcnxPathWeightTracer (std::ostream &os, Ptr<Node> node)
+ : m_os (os)
+ , m_nodePtr (node)
+{
+ m_node = boost::lexical_cast<string> (m_nodePtr->GetId ());
+
+ Connect ();
+
+ string name = Names::FindName (node);
+ if (!name.empty ())
+ {
+ m_node = name;
+ }
+}
+
+void
+CcnxPathWeightTracer::Connect ()
+{
+ Config::Set ("/NodeList/"+m_node+"/$ns3::CcnxL3Protocol/FaceList/*/MetricTagging",
+ BooleanValue (true));
+
+ Config::Connect ("/NodeList/"+m_node+"/ApplicationList/*/PathWeightsTrace",
+ MakeCallback (&CcnxPathWeightTracer::InLocalFace, this));
+}
+
+void
+CcnxPathWeightTracer::PrintHeader (std::ostream &os)
+{
+ os << "Time\t"
+ << "Src\t"
+ << "Dst\t"
+ << "SeqNo\t"
+ << "Weight";
+}
+
+void
+CcnxPathWeightTracer::InLocalFace (std::string context,
+ Ptr<Node> src, Ptr<Node> dst, uint32_t seqno, uint32_t weight)
+{
+ std::string srcName = Names::FindName (src);
+ std::string dstName = Names::FindName (dst);
+ if (srcName == "") srcName = boost::lexical_cast<std::string> (src->GetId ());
+ if (dstName == "") srcName = boost::lexical_cast<std::string> (dst->GetId ());
+ // std::cout << "Path weights from " << Names::FindName (src) << " to "<< Names::FindName (dst) <<" : " << weight << "\n";
+
+ m_os << Simulator::Now ().ToDouble (Time::S) << "\t"
+ << srcName << "\t"
+ << dstName << "\t"
+ << seqno << "\t"
+ << weight << "\n";
+}
+
+} // namespace ns3
diff --git a/helper/tracers/ccnx-path-weight-tracer.h b/helper/tracers/ccnx-path-weight-tracer.h
new file mode 100644
index 0000000..f4bd187
--- /dev/null
+++ b/helper/tracers/ccnx-path-weight-tracer.h
@@ -0,0 +1,62 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2011 UCLA
+ *
+ * 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: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#ifndef CCNX_PATH_WEIGHT_TRACER_H
+#define CCNX_PATH_WEIGHT_TRACER_H
+
+#include "ns3/ptr.h"
+#include "ns3/simple-ref-count.h"
+#include "ns3/ccnx-path-stretch-tag.h"
+#include <list>
+
+namespace ns3 {
+
+class Node;
+class Packet;
+class CcnxApp;
+
+class CcnxPathWeightTracer : public SimpleRefCount<CcnxPathWeightTracer>
+{
+public:
+ CcnxPathWeightTracer (std::ostream &os, Ptr<Node> node);
+ virtual ~CcnxPathWeightTracer () { };
+
+ void
+ Connect ();
+
+ static void
+ PrintHeader (std::ostream &os);
+
+ /**
+ * \brief Process packet weight upon reception of packet on a local face
+ */
+ virtual void
+ InLocalFace (std::string context,
+ Ptr<Node> src, Ptr<Node> dst, uint32_t seqno, uint32_t weight);
+
+protected:
+ std::ostream &m_os;
+ std::string m_node;
+ Ptr<Node> m_nodePtr;
+};
+
+} // namespace ns3
+
+#endif // CCNX_PATH_WEIGHT_TRACER_H
diff --git a/helper/tracers/ipv4-l3-tracer.cc b/helper/tracers/ipv4-l3-tracer.cc
new file mode 100644
index 0000000..ed2cb9c
--- /dev/null
+++ b/helper/tracers/ipv4-l3-tracer.cc
@@ -0,0 +1,61 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2011 UCLA
+ *
+ * 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: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#include "ipv4-l3-tracer.h"
+#include "ns3/node.h"
+#include "ns3/packet.h"
+#include "ns3/config.h"
+#include "ns3/names.h"
+#include "ns3/callback.h"
+#include "ns3/ccnx-app.h"
+#include "ns3/ccnx-face.h"
+
+#include <boost/lexical_cast.hpp>
+
+using namespace std;
+
+namespace ns3 {
+
+Ipv4L3Tracer::Ipv4L3Tracer (Ptr<Node> node)
+: m_nodePtr (node)
+{
+ m_node = boost::lexical_cast<string> (m_nodePtr->GetId ());
+
+ Connect ();
+
+ string name = Names::FindName (node);
+ if (!name.empty ())
+ {
+ m_node = name;
+ }
+}
+
+void
+Ipv4L3Tracer::Connect ()
+{
+ Config::Connect ("/NodeList/"+m_node+"/$ns3::Ipv4L3Protocol/Tx",
+ MakeCallback (&Ipv4L3Tracer::Tx, this));
+ Config::Connect ("/NodeList/"+m_node+"/$ns3::Ipv4L3Protocol/Rx",
+ MakeCallback (&Ipv4L3Tracer::Rx, this));
+ Config::Connect ("/NodeList/"+m_node+"/$ns3::Ipv4L3Protocol/Drop",
+ MakeCallback (&Ipv4L3Tracer::Drop, this));
+}
+
+} // namespace ns3
diff --git a/helper/tracers/ipv4-l3-tracer.h b/helper/tracers/ipv4-l3-tracer.h
new file mode 100644
index 0000000..e5f3c74
--- /dev/null
+++ b/helper/tracers/ipv4-l3-tracer.h
@@ -0,0 +1,90 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2011 UCLA
+ *
+ * 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: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#ifndef IPV4_L3_TRACER_H
+#define IPV4_L3_TRACER_H
+
+#include "ns3/ptr.h"
+#include "ns3/simple-ref-count.h"
+#include "ns3/ipv4-l3-protocol.h"
+
+namespace ns3 {
+
+class Node;
+
+class Ipv4L3Tracer : public SimpleRefCount<Ipv4L3Tracer>
+{
+public:
+ Ipv4L3Tracer (Ptr<Node> node);
+ virtual ~Ipv4L3Tracer () { };
+
+ void
+ Connect ();
+
+ virtual void
+ PrintHeader (std::ostream &os) const = 0;
+
+ virtual void
+ Print (std::ostream &os) const = 0;
+
+ virtual void
+ Rx (std::string context,
+ Ptr<const Packet>, Ptr<Ipv4>, uint32_t) = 0;
+
+ virtual void
+ Tx (std::string context,
+ Ptr<const Packet>, Ptr<Ipv4>, uint32_t) = 0;
+
+ virtual void
+ Drop (std::string context,
+ const Ipv4Header &, Ptr<const Packet>, Ipv4L3Protocol::DropReason, Ptr<Ipv4>, uint32_t) = 0;
+
+protected:
+ std::string m_node;
+ Ptr<Node> m_nodePtr;
+
+ struct Stats
+ {
+ void Reset ()
+ {
+ m_in = 0;
+ m_out = 0;
+ m_drop = 0;
+ }
+
+ uint64_t m_in;
+ uint64_t m_out;
+ uint64_t m_drop;
+ };
+};
+
+inline std::ostream&
+operator << (std::ostream &os, const Ipv4L3Tracer &tracer)
+{
+ os << "# ";
+ tracer.PrintHeader (os);
+ os << "\n";
+ tracer.Print (os);
+ return os;
+}
+
+} // namespace ns3
+
+#endif // IPV4_L3_TRACER_H
diff --git a/helper/tracers/ipv4-rate-l3-tracer.cc b/helper/tracers/ipv4-rate-l3-tracer.cc
new file mode 100644
index 0000000..e97ba18
--- /dev/null
+++ b/helper/tracers/ipv4-rate-l3-tracer.cc
@@ -0,0 +1,142 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2011 UCLA
+ *
+ * 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: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#include "ipv4-rate-l3-tracer.h"
+#include "ns3/node.h"
+#include "ns3/packet.h"
+#include "ns3/config.h"
+#include "ns3/callback.h"
+#include "ns3/simulator.h"
+
+#include "ns3/ipv4-header.h"
+
+namespace ns3 {
+
+Ipv4RateL3Tracer::Ipv4RateL3Tracer (std::ostream &os, Ptr<Node> node)
+ : Ipv4L3Tracer (node)
+ , m_os (os)
+{
+ SetAveragingPeriod (Seconds (1.0));
+}
+
+Ipv4RateL3Tracer::~Ipv4RateL3Tracer ()
+{
+ m_printEvent.Cancel ();
+}
+
+void
+Ipv4RateL3Tracer::SetAveragingPeriod (const Time &period)
+{
+ m_period = period;
+ m_printEvent.Cancel ();
+ m_printEvent = Simulator::Schedule (m_period, &Ipv4RateL3Tracer::PeriodicPrinter, this);
+}
+
+void
+Ipv4RateL3Tracer::PeriodicPrinter ()
+{
+ Print (m_os);
+ Reset ();
+
+ m_printEvent = Simulator::Schedule (m_period, &Ipv4RateL3Tracer::PeriodicPrinter, this);
+}
+
+void
+Ipv4RateL3Tracer::PrintHeader (std::ostream &os) const
+{
+ os << "Time" << "\t"
+
+ << "Node" << "\t"
+ << "Interface" << "\t"
+
+ << "Type" << "\t"
+ << "Packets" << "\t"
+ << "Kilobytes";
+}
+
+void
+Ipv4RateL3Tracer::Reset ()
+{
+ for (std::map<uint32_t, boost::tuple<Stats, Stats, Stats, Stats> >::iterator stats = m_stats.begin ();
+ stats != m_stats.end ();
+ stats++)
+ {
+ stats->second.get<0> ().Reset ();
+ stats->second.get<1> ().Reset ();
+ }
+}
+
+const double alpha = 0.8;
+
+#define STATS(INDEX) stats->second.get<INDEX> ()
+#define RATE(INDEX, fieldName) STATS(INDEX).fieldName / m_period.ToDouble (Time::S)
+
+#define PRINTER(printName, fieldName) \
+STATS(2).fieldName = /*new value*/alpha * RATE(0, fieldName) + /*old value*/(1-alpha) * STATS(2).fieldName; \
+STATS(3).fieldName = /*new value*/alpha * RATE(1, fieldName) / 1024.0 + /*old value*/(1-alpha) * STATS(3).fieldName; \
+ \
+os << time.ToDouble (Time::S) << "\t" \
+ << m_node << "\t" \
+ << stats->first << "\t" \
+ << printName << "\t" \
+ << STATS(2).fieldName << "\t" \
+ << STATS(3).fieldName << "\n";
+
+void
+Ipv4RateL3Tracer::Print (std::ostream &os) const
+{
+ for (std::map<uint32_t, boost::tuple<Stats, Stats, Stats, Stats> >::iterator stats = m_stats.begin ();
+ stats != m_stats.end ();
+ stats++)
+ {
+ Time time = Simulator::Now ();
+
+ PRINTER ("In", m_in);
+ PRINTER ("Out", m_out);
+ PRINTER ("Drop", m_drop);
+ }
+}
+
+void
+Ipv4RateL3Tracer::Rx (std::string context,
+ Ptr<const Packet> packet, Ptr<Ipv4> ipv4, uint32_t iface)
+{
+ m_stats[iface].get<0> ().m_in ++;
+ m_stats[iface].get<1> ().m_in += packet->GetSize ();
+}
+
+void
+Ipv4RateL3Tracer::Tx (std::string context,
+ Ptr<const Packet> packet, Ptr<Ipv4> ipv4, uint32_t iface)
+{
+ m_stats[iface].get<0> ().m_out ++;
+ m_stats[iface].get<1> ().m_out += packet->GetSize ();
+}
+
+void
+Ipv4RateL3Tracer::Drop (std::string context,
+ const Ipv4Header &header, Ptr<const Packet> packet, Ipv4L3Protocol::DropReason, Ptr<Ipv4> ipv4, uint32_t iface)
+{
+ m_stats[iface].get<0> ().m_drop ++;
+ m_stats[iface].get<1> ().m_drop += packet->GetSize ();
+}
+
+
+} // namespace ns3
diff --git a/helper/tracers/ipv4-rate-l3-tracer.h b/helper/tracers/ipv4-rate-l3-tracer.h
new file mode 100644
index 0000000..454ac14
--- /dev/null
+++ b/helper/tracers/ipv4-rate-l3-tracer.h
@@ -0,0 +1,85 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2011 UCLA
+ *
+ * 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: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#ifndef IPV4_RATE_L3_TRACER_H
+#define IPV4_RATE_L3_TRACER_H
+
+#include "ipv4-l3-tracer.h"
+
+#include "ns3/nstime.h"
+#include "ns3/event-id.h"
+
+#include <boost/tuple/tuple.hpp>
+#include <map>
+
+namespace ns3 {
+
+/**
+ * @ingroup ccnx
+ * @brief CCNx network-layer rate tracer
+ */
+class Ipv4RateL3Tracer : public Ipv4L3Tracer
+{
+public:
+ /**
+ * @brief Network layer tracer constructor
+ */
+ Ipv4RateL3Tracer (std::ostream &os, Ptr<Node> node);
+ virtual ~Ipv4RateL3Tracer ();
+
+ void
+ SetAveragingPeriod (const Time &period);
+
+ virtual void
+ PrintHeader (std::ostream &os) const;
+
+ virtual void
+ Print (std::ostream &os) const;
+
+ virtual void
+ Rx (std::string context,
+ Ptr<const Packet>, Ptr<Ipv4>, uint32_t);
+
+ virtual void
+ Tx (std::string context,
+ Ptr<const Packet>, Ptr<Ipv4>, uint32_t);
+
+ virtual void
+ Drop (std::string context,
+ const Ipv4Header &, Ptr<const Packet>, Ipv4L3Protocol::DropReason, Ptr<Ipv4>, uint32_t);
+
+private:
+ void
+ PeriodicPrinter ();
+
+ void
+ Reset ();
+
+private:
+ std::ostream& m_os;
+ Time m_period;
+ EventId m_printEvent;
+
+ mutable std::map<uint32_t, boost::tuple<Stats, Stats, Stats, Stats> > m_stats;
+};
+
+} // namespace ns3
+
+#endif // IPV4_RATE_L3_TRACER_H
diff --git a/model/annotated-topology-reader.cc b/model/annotated-topology-reader.cc
index 194a90c..d6bbad1 100644
--- a/model/annotated-topology-reader.cc
+++ b/model/annotated-topology-reader.cc
@@ -37,6 +37,8 @@
#include "ns3/pointer.h"
#include "ns3/uinteger.h"
#include "ns3/ipv4-address.h"
+#include "ns3/ccnx.h"
+#include "ns3/ccnx-face.h"
#include "ns3/constant-position-mobility-model.h"
@@ -112,6 +114,11 @@
return m_nodes;
}
+const std::list<TopologyReader::Link>&
+AnnotatedTopologyReader::GetLinks () const
+{
+ return m_linksList;
+}
NodeContainer
AnnotatedTopologyReader::Read (void)
@@ -214,8 +221,6 @@
base = Ipv4Address (base.Get () + 256);
address.SetBase (base, Ipv4Mask ("/24"));
}
-
- ApplyOspfMetric ();
}
void
@@ -228,22 +233,42 @@
{
Ptr<Ipv4> ipv4 = link.GetFromNode ()->GetObject<Ipv4> ();
- NS_ASSERT (ipv4 != 0);
+ if (ipv4 != 0)
+ {
+ int32_t interfaceId = ipv4->GetInterfaceForDevice (link.GetFromNetDevice ());
+ NS_ASSERT (interfaceId >= 0);
- int32_t interfaceId = ipv4->GetInterfaceForDevice (link.GetFromNetDevice ());
- NS_ASSERT (interfaceId >= 0);
-
- ipv4->SetMetric (interfaceId,metric);
+ ipv4->SetMetric (interfaceId,metric);
+ }
+
+ Ptr<Ccnx> ccnx = link.GetFromNode ()->GetObject<Ccnx> ();
+ if (ccnx != 0)
+ {
+ Ptr<CcnxFace> face = ccnx->GetFaceByNetDevice (link.GetFromNetDevice ());
+ NS_ASSERT (face != 0);
+
+ face->SetMetric (metric);
+ }
}
{
Ptr<Ipv4> ipv4 = link.GetToNode ()->GetObject<Ipv4> ();
- NS_ASSERT (ipv4 != 0);
-
- int32_t interfaceId = ipv4->GetInterfaceForDevice (link.GetToNetDevice ());
- NS_ASSERT (interfaceId >= 0);
+ if (ipv4 != 0)
+ {
+ int32_t interfaceId = ipv4->GetInterfaceForDevice (link.GetToNetDevice ());
+ NS_ASSERT (interfaceId >= 0);
- ipv4->SetMetric (interfaceId,metric);
+ ipv4->SetMetric (interfaceId,metric);
+ }
+
+ Ptr<Ccnx> ccnx = link.GetToNode ()->GetObject<Ccnx> ();
+ if (ccnx != 0)
+ {
+ Ptr<CcnxFace> face = ccnx->GetFaceByNetDevice (link.GetToNetDevice ());
+ NS_ASSERT (face != 0);
+
+ face->SetMetric (metric);
+ }
}
}
}
@@ -290,4 +315,22 @@
}
}
+void
+AnnotatedTopologyReader::SavePositions (const std::string &file) const
+{
+ ofstream os (file.c_str (), ios::trunc);
+ os << "router\n";
+
+ for (NodeContainer::Iterator node = m_nodes.Begin ();
+ node != m_nodes.End ();
+ node++)
+ {
+ std::string name = Names::FindName (*node);
+ Ptr<MobilityModel> mobility = (*node)->GetObject<MobilityModel> ();
+ Vector position = mobility->GetPosition ();
+
+ os << name << "\t" << "unknown" << "\t" << -position.y << "\t" << position.x << "\n";
+ }
+}
+
}
diff --git a/model/annotated-topology-reader.h b/model/annotated-topology-reader.h
index b9268b8..95ce123 100644
--- a/model/annotated-topology-reader.h
+++ b/model/annotated-topology-reader.h
@@ -63,6 +63,12 @@
GetNodes () const;
/**
+ * \brief Get links read by the reader
+ */
+ const std::list<Link>&
+ GetLinks () const;
+
+ /**
* \brief Assign IPv4 addresses to all links
*
* Note, IPv4 stack should be installed on all nodes prior this call
@@ -74,12 +80,34 @@
void
AssignIpv4Addresses (Ipv4Address base);
+ /**
+ * \brief Set bounding box where nodes will be randomly places (if positions are unspecified)
+ * \param ulx Upper left x coordinate
+ * \param uly Upper left y coordinate
+ * \param lrx Lower right x coordinate
+ * \param lry Lower right y coordinate
+ */
void
SetBoundingBox (double ulx, double uly, double lrx, double lry);
+ /**
+ * \brief Set mobility model to be used on nodes
+ * \param model class name of the model
+ */
void
SetMobilityModel (const std::string &model);
+ /**
+ * \brief Apply OSPF metric on Ipv4 (if exists) and Ccnx (if exists) stacks
+ */
+ void ApplyOspfMetric ();
+
+ /**
+ * \brief Save positions (e.g., after manual modification using visualizer)
+ */
+ void
+ SavePositions (const std::string &file) const;
+
protected:
Ptr<Node>
CreateNode (const std::string name);
@@ -94,7 +122,6 @@
* NodeContainer from Read method
*/
void ApplySettings ();
- void ApplyOspfMetric ();
protected:
std::string m_path;
diff --git a/model/batches.cc b/model/batches.cc
new file mode 100644
index 0000000..1dbccfa
--- /dev/null
+++ b/model/batches.cc
@@ -0,0 +1,57 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2011,2012 University of California, Los Angeles
+ *
+ * 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: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#include "ns3/batches.h"
+
+namespace ns3 {
+
+ATTRIBUTE_HELPER_CPP (Batches);
+
+std::ostream &
+operator << (std::ostream &os, const Batches &batch)
+{
+ for (Batches::const_iterator i = batch.begin (); i != batch.end (); i++)
+ os << i->get<0> () << " " << i->get<1> () << " ";
+
+ return os;
+}
+
+/**
+ * \brief Read components from input and add them to components. Will read input stream till eof
+ * Substrings separated by slashes will become separate components
+ */
+std::istream &
+operator >> (std::istream &is, Batches &batch)
+{
+ Time time;
+ uint32_t amount;
+ while (!is.eof ())
+ {
+ is >> time >> amount;
+ batch.Add (time, amount);
+ // std::cout << time << ", " << amount << ". \n";
+ }
+
+ is.clear ();
+ return is;
+}
+
+
+}
diff --git a/model/batches.h b/model/batches.h
new file mode 100644
index 0000000..d481a47
--- /dev/null
+++ b/model/batches.h
@@ -0,0 +1,58 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2011,2012 University of California, Los Angeles
+ *
+ * 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: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#ifndef _BATCHES_H_
+#define _BATCHES_H_
+
+#include "ns3/attribute.h"
+#include "ns3/attribute-helper.h"
+#include "ns3/nstime.h"
+#include <list>
+#include <boost/tuple/tuple.hpp>
+
+namespace ns3 {
+
+class Batches : public std::list<boost::tuple<Time, uint32_t> >
+{
+public:
+ Batches () { };
+
+ void
+ Add (const Time &when, uint32_t amount)
+ {
+ push_back (boost::make_tuple<Time, uint32_t> (when, amount));
+ }
+};
+
+ATTRIBUTE_HELPER_HEADER (Batches);
+
+std::ostream &
+operator << (std::ostream &os, const Batches &batch);
+
+/**
+ * \brief Read components from input and add them to components. Will read input stream till eof
+ * Substrings separated by slashes will become separate components
+ */
+std::istream &
+operator >> (std::istream &is, Batches &batch);
+
+} // namespace ns3
+
+#endif // _BATCHES_H_
diff --git a/model/ccnx-bestroute-strategy.cc b/model/ccnx-bestroute-strategy.cc
index 2bbe287..2f3057f 100644
--- a/model/ccnx-bestroute-strategy.cc
+++ b/model/ccnx-bestroute-strategy.cc
@@ -23,6 +23,7 @@
#include "ccnx-interest-header.h"
#include "ccnx-pit.h"
#include "ccnx-pit-entry.h"
+#include "ccnx-path-stretch-tag.h"
#include "ns3/assert.h"
#include "ns3/log.h"
@@ -62,6 +63,8 @@
{
NS_LOG_FUNCTION (this);
+
+
// Try to work out with just green faces
bool greenOk = PropagateInterestViaGreen (pitEntry, incomingFace, header, packet);
if (greenOk)
@@ -99,7 +102,10 @@
m_pit->modify (m_pit->iterator_to (pitEntry),
ll::bind(&CcnxPitEntry::AddOutgoing, ll::_1, metricFace.m_face));
- metricFace.m_face->Send (packet->Copy ());
+ Ptr<Packet> packetToSend = packet->Copy ();
+
+ //transmission
+ metricFace.m_face->Send (packetToSend);
m_transmittedInterestsTrace (header, metricFace.m_face);
propagatedCount++;
diff --git a/model/ccnx-face.cc b/model/ccnx-face.cc
index 3c88e1c..78266fe 100644
--- a/model/ccnx-face.cc
+++ b/model/ccnx-face.cc
@@ -27,8 +27,11 @@
#include "ns3/assert.h"
#include "ns3/uinteger.h"
#include "ns3/double.h"
+#include "ns3/boolean.h"
#include "ns3/simulator.h"
+#include "ccnx-path-stretch-tag.h"
+
#include <boost/ref.hpp>
NS_LOG_COMPONENT_DEFINE ("CcnxFace");
@@ -56,6 +59,10 @@
MakeDoubleAccessor (&CcnxFace::m_bucketLeak),
MakeDoubleChecker<double> ())
+ .AddAttribute ("MetricTagging", "Enable metric tagging (path-stretch calculation)",
+ BooleanValue (false),
+ MakeBooleanAccessor (&CcnxFace::m_enableMetricTagging),
+ MakeBooleanChecker ())
;
return tid;
}
@@ -74,6 +81,8 @@
, m_ifup (false)
, m_id ((uint32_t)-1)
, m_lastLeakTime (0)
+ , m_metric (0)
+ , m_enableMetricTagging (false)
{
NS_LOG_FUNCTION (this);
@@ -94,6 +103,12 @@
return *this;
}
+Ptr<Node>
+CcnxFace::GetNode () const
+{
+ return m_node;
+}
+
void
CcnxFace::RegisterProtocolHandler (ProtocolHandler handler)
{
@@ -141,6 +156,24 @@
if (!IsUp ())
return false;
+ if (m_enableMetricTagging)
+ {
+ // update path information
+ Ptr<const WeightsPathStretchTag> origTag = packet->RemovePacketTag<WeightsPathStretchTag> ();
+ Ptr<WeightsPathStretchTag> tag;
+ if (origTag == 0)
+ {
+ tag = CreateObject<WeightsPathStretchTag> (); // create a new tag
+ }
+ else
+ {
+ tag = CreateObject<WeightsPathStretchTag> (*origTag); // will update existing tag
+ }
+
+ tag->AddPathInfo (m_node, GetMetric ());
+ packet->AddPacketTag (tag);
+ }
+
SendImpl (packet);
return true;
}
@@ -194,19 +227,19 @@
m_bucketLeak = leak;
}
-// void
-// CcnxFace::SetMetric (uint16_t metric)
-// {
-// NS_LOG_FUNCTION (metric);
-// m_metric = metric;
-// }
+void
+CcnxFace::SetMetric (uint16_t metric)
+{
+ NS_LOG_FUNCTION (metric);
+ m_metric = metric;
+}
-// uint16_t
-// CcnxFace::GetMetric (void) const
-// {
-// NS_LOG_FUNCTION_NOARGS ();
-// return m_metric;
-// }
+uint16_t
+CcnxFace::GetMetric (void) const
+{
+ NS_LOG_FUNCTION_NOARGS ();
+ return m_metric;
+}
/**
* These are face states and may be distinct from
diff --git a/model/ccnx-face.h b/model/ccnx-face.h
index df488dc..e2100c6 100644
--- a/model/ccnx-face.h
+++ b/model/ccnx-face.h
@@ -67,6 +67,9 @@
CcnxFace (Ptr<Node> node);
virtual ~CcnxFace();
+ Ptr<Node>
+ GetNode () const;
+
////////////////////////////////////////////////////////////////////
/**
@@ -108,19 +111,19 @@
Receive (const Ptr<const Packet> &p);
////////////////////////////////////////////////////////////////////
- // /**
- // * \Brief Assign routing/forwarding metric with face
- // *
- // * \param metric configured routing metric (cost) of this face
- // */
- // virtual void SetMetric (uint16_t metric);
+ /**
+ * \Brief Assign routing/forwarding metric with face
+ *
+ * \param metric configured routing metric (cost) of this face
+ */
+ virtual void SetMetric (uint16_t metric);
- // /**
- // * \brief Get routing/forwarding metric assigned to the face
- // *
- // * \returns configured routing/forwarding metric (cost) of this face
- // */
- // virtual uint16_t GetMetric (void) const;
+ /**
+ * \brief Get routing/forwarding metric assigned to the face
+ *
+ * \returns configured routing/forwarding metric (cost) of this face
+ */
+ virtual uint16_t GetMetric (void) const;
/**
* These are face states and may be distinct from actual lower-layer
@@ -225,7 +228,10 @@
ProtocolHandler m_protocolHandler; ///< Callback via which packets are getting send to CCNx stack
bool m_ifup; ///< \brief flag indicating that the interface is UP
uint32_t m_id; ///< \brief id of the interface in CCNx stack (per-node uniqueness)
- Time m_lastLeakTime;
+ Time m_lastLeakTime;
+ uint32_t m_metric; ///< \brief metric of the face
+
+ bool m_enableMetricTagging;
};
std::ostream& operator<< (std::ostream& os, const CcnxFace &face);
diff --git a/model/ccnx-fib.cc b/model/ccnx-fib.cc
index 24f236f..b068954 100644
--- a/model/ccnx-fib.cc
+++ b/model/ccnx-fib.cc
@@ -289,7 +289,7 @@
{
static const std::string statusString[] = {"","g","y","r"};
- os << *metric.m_face << "(" << metric.m_routingCost << ","<< statusString [metric.m_status] << ")";
+ os << *metric.m_face << "(" << metric.m_routingCost << ","<< statusString [metric.m_status] << "," << metric.m_face->GetMetric () << ")";
return os;
}
diff --git a/model/ccnx-fib.h b/model/ccnx-fib.h
index f383961..318bc54 100644
--- a/model/ccnx-fib.h
+++ b/model/ccnx-fib.h
@@ -60,7 +60,7 @@
* \param face Face for which metric
* \param cost Initial value for routing cost
*/
- CcnxFibFaceMetric (Ptr<CcnxFace> face, int cost)
+ CcnxFibFaceMetric (Ptr<CcnxFace> face, int32_t cost)
: m_face (face)
, m_status (NDN_FIB_YELLOW)
, m_routingCost (cost)
diff --git a/model/ccnx-flooding-strategy.cc b/model/ccnx-flooding-strategy.cc
index 5b8542d..182381e 100644
--- a/model/ccnx-flooding-strategy.cc
+++ b/model/ccnx-flooding-strategy.cc
@@ -22,6 +22,7 @@
#include "ccnx-interest-header.h"
#include "ccnx-pit.h"
#include "ccnx-pit-entry.h"
+#include "ccnx-path-stretch-tag.h"
#include "ns3/assert.h"
#include "ns3/log.h"
@@ -116,7 +117,10 @@
// NS_LOG_ERROR ("size: " << pitEntry.m_outgoing.size ());
// }
- metricFace.m_face->Send (packet->Copy ());
+ Ptr<Packet> packetToSend = packet->Copy ();
+
+ //transmission
+ metricFace.m_face->Send (packetToSend);
m_transmittedInterestsTrace (header, metricFace.m_face);
propagatedCount++;
diff --git a/model/ccnx-forwarding-strategy.cc b/model/ccnx-forwarding-strategy.cc
index fbd4613..a856577 100644
--- a/model/ccnx-forwarding-strategy.cc
+++ b/model/ccnx-forwarding-strategy.cc
@@ -22,9 +22,9 @@
#include "ns3/assert.h"
#include "ccnx-forwarding-strategy.h"
+#include "ns3/ptr.h"
#include "ns3/log.h"
#include "ns3/simulator.h"
-#include "ns3/double.h"
#include "ccnx-pit.h"
#include "ccnx-pit-entry.h"
@@ -109,22 +109,18 @@
}
m_pit->modify (m_pit->iterator_to (pitEntry),
- ll::bind(&CcnxPitEntry::AddOutgoing, ll::_1, metricFace.m_face));
+ ll::bind (&CcnxPitEntry::AddOutgoing, ll::_1, metricFace.m_face));
- metricFace.m_face->Send (packet->Copy ());
+ Ptr<Packet> packetToSend = packet->Copy ();
+
+ //transmission
+ metricFace.m_face->Send (packetToSend);
m_transmittedInterestsTrace (header, metricFace.m_face);
propagatedCount++;
break; // propagate only one interest
}
- // if (Simulator::GetContext ()==1)
- // {
- // if (propagatedCount > 0)
- // NS_LOG_DEBUG ("Propagate via a green face");
- // else
- // NS_LOG_DEBUG ("Can't :(");
- // }
return propagatedCount > 0;
}
diff --git a/model/ccnx-forwarding-strategy.h b/model/ccnx-forwarding-strategy.h
index 23c15a5..ea9f692 100644
--- a/model/ccnx-forwarding-strategy.h
+++ b/model/ccnx-forwarding-strategy.h
@@ -32,6 +32,7 @@
class CcnxInterestHeader;
class CcnxPit;
class CcnxPitEntry;
+class CcnxFibFaceMetric;
/**
* \ingroup ccnx
diff --git a/model/ccnx-l3-protocol.cc b/model/ccnx-l3-protocol.cc
index 223c578..87c0881 100644
--- a/model/ccnx-l3-protocol.cc
+++ b/model/ccnx-l3-protocol.cc
@@ -75,12 +75,10 @@
MakePointerAccessor (&CcnxL3Protocol::SetForwardingStrategy, &CcnxL3Protocol::GetForwardingStrategy),
MakePointerChecker<CcnxForwardingStrategy> ())
- // .AddAttribute ("BucketLeakInterval",
- // "Interval to leak buckets",
- // StringValue ("100ms"),
- // MakeTimeAccessor (&CcnxL3Protocol::GetBucketLeakInterval,
- // &CcnxL3Protocol::SetBucketLeakInterval),
- // MakeTimeChecker ())
+ .AddAttribute ("EnableNACKs", "Enabling support of NACKs",
+ BooleanValue (true),
+ MakeBooleanAccessor (&CcnxL3Protocol::m_nacksEnabled),
+ MakeBooleanChecker ())
;
return tid;
}
@@ -410,14 +408,17 @@
* Every time interest is satisfied, PIT entry (with empty incoming and outgoing faces)
* is kept for another small chunk of time.
*/
-
- NS_LOG_DEBUG ("Sending NACK_LOOP");
- header->SetNack (CcnxInterestHeader::NACK_LOOP);
- Ptr<Packet> nack = Create<Packet> ();
- nack->AddHeader (*header);
- incomingFace->Send (nack);
- m_outNacks (header, incomingFace);
+ if (m_nacksEnabled)
+ {
+ NS_LOG_DEBUG ("Sending NACK_LOOP");
+ header->SetNack (CcnxInterestHeader::NACK_LOOP);
+ Ptr<Packet> nack = Create<Packet> ();
+ nack->AddHeader (*header);
+
+ incomingFace->Send (nack);
+ m_outNacks (header, incomingFace);
+ }
return;
}
@@ -610,16 +611,20 @@
CcnxL3Protocol::GiveUpInterest (const CcnxPitEntry &pitEntry,
Ptr<CcnxInterestHeader> header)
{
- Ptr<Packet> packet = Create<Packet> ();
- header->SetNack (CcnxInterestHeader::NACK_GIVEUP_PIT);
- packet->AddHeader (*header);
-
- BOOST_FOREACH (const CcnxPitEntryIncomingFace &incoming, pitEntry.m_incoming)
+ if (m_nacksEnabled)
{
- incoming.m_face->Send (packet->Copy ());
+ Ptr<Packet> packet = Create<Packet> ();
+ header->SetNack (CcnxInterestHeader::NACK_GIVEUP_PIT);
+ packet->AddHeader (*header);
- m_outNacks (header, incoming.m_face);
+ BOOST_FOREACH (const CcnxPitEntryIncomingFace &incoming, pitEntry.m_incoming)
+ {
+ incoming.m_face->Send (packet->Copy ());
+
+ m_outNacks (header, incoming.m_face);
+ }
}
+
// All incoming interests cannot be satisfied. Remove them
m_pit->modify (m_pit->iterator_to (pitEntry),
ll::bind (&CcnxPitEntry::ClearIncoming, ll::_1));
@@ -634,37 +639,4 @@
Simulator::Now () + m_pit->GetPitEntryPruningTimeout ()));
}
-// void
-// CcnxL3Protocol::SetBucketLeakInterval (Time interval)
-// {
-// m_bucketLeakInterval = interval;
-
-// if (m_bucketLeakEvent.IsRunning ())
-// m_bucketLeakEvent.Cancel ();
-
-// m_bucketLeakEvent = Simulator::Schedule (m_bucketLeakInterval,
-// &CcnxL3Protocol::LeakBuckets, this);
-// }
-
-// Time
-// CcnxL3Protocol::GetBucketLeakInterval () const
-// {
-// return m_bucketLeakInterval;
-// }
-
-// void
-// CcnxL3Protocol::LeakBuckets ()
-// {
-// // NS_LOG_FUNCTION (this);
-
-// BOOST_FOREACH (const Ptr<CcnxFace> &face, m_faces)
-// {
-// face->LeakBucket (m_bucketLeakInterval);
-// }
-
-// m_bucketLeakEvent = Simulator::Schedule (m_bucketLeakInterval,
-// &CcnxL3Protocol::LeakBuckets,
-// this);
-// }
-
} //namespace ns3
diff --git a/model/ccnx-l3-protocol.h b/model/ccnx-l3-protocol.h
index d3e1b44..1da29b7 100644
--- a/model/ccnx-l3-protocol.h
+++ b/model/ccnx-l3-protocol.h
@@ -207,6 +207,8 @@
Ptr<CcnxPit> m_pit; ///< \brief PIT (pending interest table)
Ptr<CcnxFib> m_fib; ///< \brief FIB
Ptr<CcnxContentStore> m_contentStore; ///< \brief Content store (for caching purposes only)
+
+ bool m_nacksEnabled;
// Time m_bucketLeakInterval;
// EventId m_bucketLeakEvent;
diff --git a/model/ccnx-local-face.cc b/model/ccnx-local-face.cc
index 7b4413c..f3abba9 100644
--- a/model/ccnx-local-face.cc
+++ b/model/ccnx-local-face.cc
@@ -26,12 +26,14 @@
#include "ns3/packet.h"
#include "ns3/node.h"
#include "ns3/assert.h"
+#include "ns3/simulator.h"
#include "ns3/ccnx-header-helper.h"
#include "ns3/ccnx-app.h"
#include "ccnx-interest-header.h"
#include "ccnx-content-object-header.h"
+#include "ccnx-path-stretch-tag.h"
NS_LOG_COMPONENT_DEFINE ("CcnxLocalFace");
@@ -87,7 +89,7 @@
m_app->RegisterProtocolHandler (MakeCallback (&CcnxFace::Receive, this));
}
-
+
void
CcnxLocalFace::SendImpl (Ptr<Packet> p)
{
@@ -104,9 +106,9 @@
p->RemoveHeader (*header);
if (header->GetNack () > 0)
- m_app->OnNack (header);
+ m_app->OnNack (header, p);
else
- m_app->OnInterest (header);
+ m_app->OnInterest (header, p);
break;
}
diff --git a/model/ccnx-local-face.h b/model/ccnx-local-face.h
index 63458f2..327199d 100644
--- a/model/ccnx-local-face.h
+++ b/model/ccnx-local-face.h
@@ -23,6 +23,7 @@
#define CCNX_LOCAL_FACE_H
#include "ccnx-face.h"
+#include "ns3/traced-callback.h"
namespace ns3
{
diff --git a/model/ccnx-path-stretch-tag.cc b/model/ccnx-path-stretch-tag.cc
new file mode 100644
index 0000000..31adca1
--- /dev/null
+++ b/model/ccnx-path-stretch-tag.cc
@@ -0,0 +1,119 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * 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: Ilya Moiseenko <iliamo@cs.ucla.edu>
+ */
+
+#include "ccnx-path-stretch-tag.h"
+#include "ns3/node.h"
+#include "ns3/names.h"
+
+namespace ns3 {
+
+WeightsPathStretchTag::WeightsPathStretchTag ()
+{
+}
+
+void
+WeightsPathStretchTag::AddPathInfo (Ptr<Node> node, uint32_t weight)
+{
+ m_infos.push_back (NodeWeightPair (node, weight));
+}
+
+
+TypeId WeightsPathStretchTag::GetTypeId ()
+{
+ static TypeId tid = TypeId("ns3::WeightsPathStretchTag")
+ .SetParent<Tag>()
+ .AddConstructor<WeightsPathStretchTag>()
+ ;
+ return tid;
+}
+
+// TypeId
+// WeightsPathStretchTag::GetInstanceTypeId () const
+// {
+// return GetTypeId ();
+// }
+
+uint64_t
+WeightsPathStretchTag::GetTotalWeight () const
+{
+ uint64_t total = 0;
+ for (std::list<NodeWeightPair>::const_iterator info = m_infos.begin (); info != m_infos.end (); info++)
+ {
+ total += info->weight;
+ }
+ return total;
+}
+
+Ptr<Node>
+WeightsPathStretchTag::GetSourceNode () const
+{
+ NS_ASSERT (m_infos.size () > 0);
+ return m_infos.front ().node;
+}
+
+Ptr<Node>
+WeightsPathStretchTag::GetDestinationNode () const
+{
+ NS_ASSERT (m_infos.size () > 0);
+ return m_infos.back ().node;
+}
+
+uint32_t WeightsPathStretchTag::GetSerializedSize (void) const
+{
+ return 0;
+ // return sizeof (GetPointer (m_value.node)) + sizeof (m_value.weight);
+}
+
+void WeightsPathStretchTag::Serialize (TagBuffer i) const
+{
+ NS_FATAL_ERROR ("Serialization is not supported for this tag");
+ // m_value.node->Ref ();
+ // i.WriteU64 (reinterpret_cast<uint64_t> (GetPointer (m_value.node)));
+ // i.WriteU32 (m_value.weight);
+}
+
+void WeightsPathStretchTag::Deserialize (TagBuffer i)
+{
+ NS_FATAL_ERROR ("Deserialization is not supported for this tag");
+ // m_value.node = Ptr<Node> (reinterpret_cast<Node*> (i.ReadU64 ()), false);
+ // m_value.weight = i.ReadU32 ();
+}
+
+void WeightsPathStretchTag::Print (std::ostream &os) const
+{
+ for (std::list<NodeWeightPair>::const_iterator info = m_infos.begin ();
+ info != m_infos.end ();
+ info ++)
+ {
+ if (info != m_infos.begin ()) os << ",";
+ NS_ASSERT (info->node != 0);
+
+ os << info->node->GetId () << "(" << Names::FindName (info->node) << ")";
+ // std::string name = Names::FindName (info->node);
+ // if (!name.empty ())
+ // os << name;
+ // else
+ // os << info->node->GetId ();
+ os << ":" << info->weight;
+ }
+}
+
+} // namespace ns3
+
diff --git a/model/ccnx-path-stretch-tag.h b/model/ccnx-path-stretch-tag.h
new file mode 100644
index 0000000..644871f
--- /dev/null
+++ b/model/ccnx-path-stretch-tag.h
@@ -0,0 +1,118 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * 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: Ilya Moiseenko <iliamo@cs.ucla.edu>
+ */
+
+#include "ns3/tag.h"
+
+#ifndef PATH_STRETCH_TAG_H
+#define PATH_STRETCH_TAG_H
+
+namespace ns3 {
+
+class Node;
+class Packet;
+
+//#define PATH_SPLICING_MAX_N_HOPS 38
+//#define PATH_SPLICING_MAX_SLICE_INDEX 16
+
+class WeightsPathStretchTag : public Tag
+{
+public:
+ struct NodeWeightPair
+ {
+ NodeWeightPair () : node (0), weight (0) { }
+ NodeWeightPair (Ptr<Node> _node, uint32_t _weight) : node (_node), weight (_weight) { }
+
+ Ptr<Node> node;
+ uint32_t weight;
+ };
+
+ static TypeId
+ GetTypeId ();
+
+ WeightsPathStretchTag ();
+ virtual ~WeightsPathStretchTag () { };
+
+ void
+ AddPathInfo (Ptr<Node> node, uint32_t weight);
+
+ uint64_t
+ GetTotalWeight () const;
+
+ Ptr<Node>
+ GetSourceNode () const;
+
+ Ptr<Node>
+ GetDestinationNode () const;
+
+ const std::list<NodeWeightPair> &
+ GetInfos () const
+ { return m_infos; }
+
+ // from Tag
+ virtual uint32_t
+ GetSerializedSize (void) const;
+
+ virtual void
+ Serialize (TagBuffer i) const;
+
+ virtual void
+ Deserialize (TagBuffer i);
+
+ virtual void
+ Print (std::ostream &os) const;
+
+private:
+ std::list<NodeWeightPair> m_infos;
+};
+
+// class DelaysPathStretchTag : public Tag
+// {
+// public:
+// DelaysPathStretchTag();
+
+// static TypeId GetTypeId(void);
+// virtual TypeId GetInstanceTypeId(void) const;
+
+// virtual uint32_t GetSerializedSize(void) const;
+// virtual void Serialize(TagBuffer i) const;
+// virtual void Deserialize(TagBuffer i);
+// virtual void Print(std::ostream &os) const;
+
+// int GetNHops();
+// void AddNewHop(double delay);
+// int GetCurrentHop();
+// void RemoveCurrentHop();
+// //void RandomizeTags(UniformVariable &rand, uint32_t max);
+
+// private:
+// //PathSplicingPathTag(const PathSplicingPathTag &o);
+// //PathSplicingPathTag &operator = (const PathSplicingPathTag &o);
+
+// //bool operator == (PathSplicingPathTag const &o) const;
+
+// private:
+// std::list<double> m_delays;
+// };
+
+
+} // namespace ns3
+
+
+#endif /* PATH_STRETCH_TAG_H */
diff --git a/model/ccnx-pit.cc b/model/ccnx-pit.cc
index d9667cf..ca2c3f3 100644
--- a/model/ccnx-pit.cc
+++ b/model/ccnx-pit.cc
@@ -170,7 +170,7 @@
{
CcnxFibEntryContainer::type::iterator fibEntry = m_fib->LongestPrefixMatch (header);
NS_ASSERT_MSG (fibEntry != m_fib->m_fib.end (),
- "There should be at least default route set");
+ "There should be at least default route set" << " Prefix = "<<header.GetName() << "NodeID == " << m_fib->GetObject<Node>()->GetId() << "\n" << *m_fib);
entry = insert (end (),
CcnxPitEntry (Create<CcnxNameComponents> (header.GetName ()),
diff --git a/model/rocketfuel-weights-reader.cc b/model/rocketfuel-weights-reader.cc
index 4681e4e..acd3235 100644
--- a/model/rocketfuel-weights-reader.cc
+++ b/model/rocketfuel-weights-reader.cc
@@ -177,22 +177,4 @@
SpringMobilityHelper::InstallSprings (LinksBegin (), LinksEnd ());
}
-void
-RocketfuelWeightsReader::SavePositions (const std::string &file) const
-{
- ofstream os (file.c_str (), ios::trunc);
- os << "router\n";
-
- for (NodeContainer::Iterator node = m_nodes.Begin ();
- node != m_nodes.End ();
- node++)
- {
- std::string name = Names::FindName (*node);
- Ptr<MobilityModel> mobility = (*node)->GetObject<MobilityModel> ();
- Vector position = mobility->GetPosition ();
-
- os << name << "\t" << "unknown" << "\t" << -position.y << "\t" << position.x << "\n";
- }
-}
-
} /* namespace ns3 */
diff --git a/model/rocketfuel-weights-reader.h b/model/rocketfuel-weights-reader.h
index cf6a784..e93ca32 100644
--- a/model/rocketfuel-weights-reader.h
+++ b/model/rocketfuel-weights-reader.h
@@ -67,9 +67,6 @@
LATENCIES,
POSITIONS
};
-
- void
- SavePositions (const std::string &file) const;
private:
RocketfuelWeightsReader (const RocketfuelWeightsReader&);
diff --git a/test/basic-regression-test.cc b/test/basic-regression-test.cc
index b4625bb..2edac36 100644
--- a/test/basic-regression-test.cc
+++ b/test/basic-regression-test.cc
@@ -86,59 +86,59 @@
// -- Read topology data.
// --------------------------------------------
- string input = NS_TEST_SOURCEDIR;
- input += "/testtopology.txt";
+ // string input = NS_TEST_SOURCEDIR;
+ // input += "/testtopology.txt";
- Ptr<AnnotatedTopologyReader> reader = CreateObject<AnnotatedTopologyReader> ();
- reader->SetFileName (input);
+ // Ptr<AnnotatedTopologyReader> reader = CreateObject<AnnotatedTopologyReader> ();
+ // reader->SetFileName (input);
- NodeContainer nodes;
- if (reader != 0)
- {
- nodes = reader->Read ();
- }
- else
- {
- NS_TEST_ASSERT_MSG_EQ (true, false, "file not found");
- }
+ // NodeContainer nodes;
+ // if (reader != 0)
+ // {
+ // nodes = reader->Read ();
+ // }
+ // else
+ // {
+ // NS_TEST_ASSERT_MSG_EQ (true, false, "file not found");
+ // }
- NS_TEST_ASSERT_MSG_EQ (7, reader->LinksSize (), "link count is wrong");
+ // NS_TEST_ASSERT_MSG_EQ (7, reader->LinksSize (), "link count is wrong");
- // ------------------------------------------------------------
- // -- Create nodes and network stacks
- // --------------------------------------------
- NS_LOG_INFO ("creating internet stack");
- InternetStackHelper stack;
+ // // ------------------------------------------------------------
+ // // -- Create nodes and network stacks
+ // // --------------------------------------------
+ // NS_LOG_INFO ("creating internet stack");
+ // InternetStackHelper stack;
- //routing
- /*Ipv4StaticRoutingHelper staticRouting;
- Ipv4ListRoutingHelper listRH;
- listRH.Add (staticRouting, 0);
- stack.SetRoutingHelper (listRH); // has effect on the next Install ()
- stack.Install (nodes);
+ // //routing
+ // /*Ipv4StaticRoutingHelper staticRouting;
+ // Ipv4ListRoutingHelper listRH;
+ // listRH.Add (staticRouting, 0);
+ // stack.SetRoutingHelper (listRH); // has effect on the next Install ()
+ // stack.Install (nodes);
- NS_LOG_INFO ("creating ip4 addresses");
- Ipv4AddressHelper address;
- address.SetBase ("10.0.0.0", "255.255.255.252");*/
+ // NS_LOG_INFO ("creating ip4 addresses");
+ // Ipv4AddressHelper address;
+ // address.SetBase ("10.0.0.0", "255.255.255.252");*/
- int totlinks = reader->LinksSize ();
+ // int totlinks = reader->LinksSize ();
- /// applying settings
- NS_LOG_INFO ("creating node containers");
- NodeContainer* nc = new NodeContainer[totlinks];
- TopologyReader::ConstLinksIterator iter;
- int i = 0;
- for ( iter = reader->LinksBegin (); iter != reader->LinksEnd (); iter++, i++ )
- {
- nc[i] = NodeContainer (iter->GetFromNode (), iter->GetToNode ());
- }
+ // /// applying settings
+ // NS_LOG_INFO ("creating node containers");
+ // NodeContainer* nc = new NodeContainer[totlinks];
+ // TopologyReader::ConstLinksIterator iter;
+ // int i = 0;
+ // for ( iter = reader->LinksBegin (); iter != reader->LinksEnd (); iter++, i++ )
+ // {
+ // nc[i] = NodeContainer (iter->GetFromNode (), iter->GetToNode ());
+ // }
- NetDeviceContainer* ndc = new NetDeviceContainer[totlinks];
- reader->ApplySettings(ndc,nc);
- /// settings applied
+ // NetDeviceContainer* ndc = new NetDeviceContainer[totlinks];
+ // reader->ApplySettings(ndc,nc);
+ // /// settings applied
diff --git a/test/content-object-test.cc b/test/content-object-test.cc
index eff1304..cbb5811 100644
--- a/test/content-object-test.cc
+++ b/test/content-object-test.cc
@@ -23,6 +23,7 @@
#include "ns3/ccnx-interest-header.h"
#include "ns3/uinteger.h"
#include "ns3/random-variable.h"
+#include "ns3/packet.h"
#include <limits>
#include "ns3/ccnx-header-helper.h"
#include "ns3/header.h"
diff --git a/test/interest-header-serialization-test.cc b/test/interest-header-serialization-test.cc
index 62d83a4..5c73bfc 100644
--- a/test/interest-header-serialization-test.cc
+++ b/test/interest-header-serialization-test.cc
@@ -30,6 +30,7 @@
#include "ns3/nstime.h"
#include "ns3/buffer.h"
#include "ns3/log.h"
+#include "ns3/packet.h"
#include <iostream>
#include <fstream>
diff --git a/examples/packet-sizes.cc b/test/packet-sizes.cc
similarity index 100%
rename from examples/packet-sizes.cc
rename to test/packet-sizes.cc
diff --git a/utils/highway-position-allocator.cc b/utils/highway-position-allocator.cc
new file mode 100644
index 0000000..9ad52ba
--- /dev/null
+++ b/utils/highway-position-allocator.cc
@@ -0,0 +1,103 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Lucas Wang <lucas@cs.ucla.edu>
+ */
+
+
+#include "highway-position-allocator.h"
+#include "ns3/random-variable.h"
+#include "ns3/log.h"
+#include "ns3/double.h"
+#include <math.h>
+
+NS_LOG_COMPONENT_DEFINE ("HighwayPositionAllocator");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (HighwayPositionAllocator);
+
+TypeId HighwayPositionAllocator::GetTypeId (void){
+ static TypeId tid = TypeId("ns3::HighwayPositionAllocator").
+ SetParent<PositionAllocator> ().
+ SetGroupName("Mobility").
+ AddConstructor<HighwayPositionAllocator>().
+ AddAttribute("Start", "the start position of the highway",
+ VectorValue (Vector(0.0, 0.0, 0.0)),
+ MakeVectorAccessor(&HighwayPositionAllocator::SetStartPosition,
+ &HighwayPositionAllocator::GetStartPosition),
+ MakeVectorChecker ()).
+ AddAttribute("Direction", "the direction of the highway",
+ DoubleValue (0.0),
+ MakeDoubleAccessor(&HighwayPositionAllocator::SetDirection,
+ &HighwayPositionAllocator::GetDirection),
+ MakeDoubleChecker<double> ()).
+ AddAttribute("Length", "the length of the highway",
+ DoubleValue (0.0),
+ MakeDoubleAccessor(&HighwayPositionAllocator::SetLength,
+ &HighwayPositionAllocator::GetLength),
+ MakeDoubleChecker<double> ());
+
+ return tid;
+}
+
+HighwayPositionAllocator::HighwayPositionAllocator (){
+ m_previous_position = Vector(0.0, 0.0, 0.0);
+}
+
+Vector HighwayPositionAllocator::GetNext (void) const{
+ UniformVariable random_gap_var (1.0, 10.0);
+ double random_gap = random_gap_var.GetValue();
+
+ double delta_x = random_gap * cos(m_direction);
+ double delta_y = random_gap * sin(m_direction);
+
+
+ Vector new_position(m_previous_position.x - delta_x, m_previous_position.y - delta_y, m_previous_position.z);
+ m_previous_position.x = new_position.x;
+ m_previous_position.y = new_position.y;
+ m_previous_position.z = new_position.z;
+
+ return new_position;
+}
+
+void HighwayPositionAllocator::SetStartPosition(Vector start){
+ m_start = start;
+ m_previous_position = m_start; // initialize the m_previous_position to be start of the highway
+}
+
+Vector HighwayPositionAllocator::GetStartPosition(void) const {
+ return m_start;
+}
+
+void HighwayPositionAllocator::SetDirection(double direction){
+ m_direction = direction;
+}
+
+double HighwayPositionAllocator::GetDirection(void) const {
+ return m_direction;
+}
+
+void HighwayPositionAllocator::SetLength(double length){
+ m_length = length;
+}
+
+double HighwayPositionAllocator::GetLength(void) const {
+ return m_length;
+}
+
+}
diff --git a/utils/highway-position-allocator.h b/utils/highway-position-allocator.h
new file mode 100644
index 0000000..4028b4a
--- /dev/null
+++ b/utils/highway-position-allocator.h
@@ -0,0 +1,53 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Lucas Wang <lucas@cs.ucla.edu>
+ */
+#ifndef HIGHWAY_POSITION_ALLOCATOR_H
+#define HIGHWAY_POSITION_ALLOCATOR_H
+
+#include "ns3/position-allocator.h"
+
+namespace ns3 {
+
+/**
+ * This position allocator is used to generate positions for cars
+ * on a highway.
+ */
+
+class HighwayPositionAllocator : public PositionAllocator
+{
+public:
+ static TypeId GetTypeId (void);
+ HighwayPositionAllocator ();
+ virtual Vector GetNext (void) const;
+ void SetStartPosition(Vector start);
+ Vector GetStartPosition(void) const;
+ void SetDirection(double direction); // the angle in terms of radian degrees
+ double GetDirection(void) const ;
+ void SetLength(double length);
+ double GetLength(void) const ;
+
+private:
+ mutable Vector m_previous_position; // previously generated vehicle position
+ Vector m_start; // highway starting point
+ double m_direction; //highway direction
+ double m_length; // highway length
+};
+}
+
+#endif
diff --git a/wscript b/wscript
index 80bc42c..2643c67 100644
--- a/wscript
+++ b/wscript
@@ -59,8 +59,11 @@
"helper/ccnx-header-helper.h",
"helper/ccnx-trace-helper.h",
"helper/tracers/ipv4-app-tracer.h",
+ "helper/tracers/ipv4-l3-tracer.h",
"helper/tracers/ccnx-app-tracer.h",
"helper/tracers/ccnx-l3-tracer.h",
+ "helper/tracers/ccnx-consumer-window-tracer.h",
+ "helper/tracers/ccnx-path-weight-tracer.h",
"helper/ccnx-face-container.h",
"apps/ccnx-app.h",
@@ -72,6 +75,7 @@
"model/ccnx-interest-header.h",
"model/ccnx-content-object-header.h",
"model/ccnx-name-components.h",
+ "model/ccnx-path-stretch-tag.h",
"model/ccnx-fib.h",
"utils/spring-mobility-model.h",
@@ -79,29 +83,22 @@
"model/rocketfuel-weights-reader.h",
"model/annotated-topology-reader.h",
+
+ "model/batches.h"
]
tests.source = bld.path.ant_glob('test/*.cc');
if True or bld.env['ENABLE_EXAMPLES']:
- obj = bld.create_ns3_program('ccnx-test', ['NDNabstraction', 'internet'])
- obj.source = 'examples/ccnx-test.cc'
-
- obj = bld.create_ns3_program('ccnx-routing-simple', ['NDNabstraction', 'point-to-point-layout'])
+ obj = bld.create_ns3_program('ccnx-routing-simple', ['NDNabstraction'])
obj.source = 'examples/ccnx-routing-simple.cc'
- obj = bld.create_ns3_program('ccnx-grid', ['NDNabstraction', 'point-to-point-layout'])
+ obj = bld.create_ns3_program('ccnx-grid', ['NDNabstraction'])
obj.source = 'examples/ccnx-grid.cc'
- obj = bld.create_ns3_program('annotated-topology', ['NDNabstraction', 'point-to-point-layout'])
+ obj = bld.create_ns3_program('annotated-topology', ['NDNabstraction'])
obj.source = 'examples/annotated-topology-read-example.cc'
- obj = bld.create_ns3_program('interest-header-example', ['NDNabstraction'])
- obj.source = 'examples/interest-header-example.cc'
-
- obj = bld.create_ns3_program('packet-sizes', ['NDNabstraction'])
- obj.source = 'examples/packet-sizes.cc'
-
obj = bld.create_ns3_program('ccnx-sprint-topology', ['NDNabstraction'])
obj.source = 'examples/sprint-topology.cc'
@@ -114,8 +111,20 @@
obj = bld.create_ns3_program('congestion-pop', ['NDNabstraction'])
obj.source = 'examples/congestion-pop.cc'
- obj = bld.create_ns3_program('congestion-tcp-pop', ['NDNabstraction'])
- obj.source = 'examples/congestion-tcp-pop.cc'
+ obj = bld.create_ns3_program('link-failure', ['NDNabstraction'])
+ obj.source = 'examples/link-failure-sprint.cc'
+
+ obj = bld.create_ns3_program('link-failure-base', ['NDNabstraction'])
+ obj.source = 'examples/link-failure-base.cc'
+
+ obj = bld.create_ns3_program('blackhole-sprint', ['NDNabstraction'])
+ obj.source = 'examples/blackhole-sprint.cc'
+
+ obj = bld.create_ns3_program('congestion-zoom', ['NDNabstraction'])
+ obj.source = 'examples/congestion-zoom.cc'
+
+ obj = bld.create_ns3_program('vanet-ccnx', ['NDNabstraction', 'highway-mobility'])
+ obj.source = 'examples/vanet-ccnx.cc'
obj = bld.create_ns3_program('car2car-wifi', ['internet', 'applications', 'visualizer', 'NDNabstraction'])
obj.source = 'examples/car2car-wifi.cc'