diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/AngelClient.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/AngelClient.java
index 642f7d150ebeb9f171039a2493d46e516bbd2d72..69a3ea5a114853cfa0b9ac0839dd6b8f900e5529 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/AngelClient.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/AngelClient.java
@@ -17,7 +17,7 @@ public class AngelClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public AngelClient ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/AngelServer.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/AngelServer.java
index 30272825ade467ec21337e2bdaa56fb0d01a8c2d..b57793dcc9919afec5f3ad605fe760c96b6b92d4 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/AngelServer.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/AngelServer.java
@@ -17,7 +17,7 @@ public class AngelServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public AngelServer ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/BlankenbekerMyTcpClient.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/BlankenbekerMyTcpClient.java
index 8af6349de245593fa1bf152ba423867d7a38f521..d3b9b7e9fc424620bb86337e891184ea8a45f642 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/BlankenbekerMyTcpClient.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/BlankenbekerMyTcpClient.java
@@ -24,7 +24,7 @@ public class BlankenbekerMyTcpClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BlankenbekerMyTcpClient ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/BlankenbekerMyTcpServer.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/BlankenbekerMyTcpServer.java
index 98e0ee7c1ebd9002bf0ce37e1c1fe550de4fb0a4..bf1a8a7815b299658f50355a9dfa13551a8e4475 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/BlankenbekerMyTcpServer.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/BlankenbekerMyTcpServer.java
@@ -27,7 +27,7 @@ public class BlankenbekerMyTcpServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BlankenbekerMyTcpServer ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/HanleyTcpClient.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/HanleyTcpClient.java
index ad11c39905408eb6f7e1c4cf4a87d5c1b4346f8e..67758652b1b5f1476fe406d6e255c20bfe98543b 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/HanleyTcpClient.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/HanleyTcpClient.java
@@ -18,7 +18,7 @@ public class HanleyTcpClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public HanleyTcpClient ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/HanleyTcpServer.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/HanleyTcpServer.java
index 8ac09d8b46b61b518029d4a4b6510680c0feec8c..ea0fb0dacb2250aa8909d54911de5da93a4074e8 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/HanleyTcpServer.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/HanleyTcpServer.java
@@ -30,7 +30,7 @@ public class HanleyTcpServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public HanleyTcpServer ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/LandasClient1.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/LandasClient1.java
index f64779dc44891402ee9e9568eecdfd28a64a5f27..a30f20af15ae0b57090d13999b88d68fee03225b 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/LandasClient1.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/LandasClient1.java
@@ -16,7 +16,7 @@ public class LandasClient1
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LandasClient1 ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/LandasClient2.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/LandasClient2.java
index fc8b3e54969d4259c303934de810300ba144b00f..af68460d9544e0913ec4eb85e76945f5c377fc09 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/LandasClient2.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/LandasClient2.java
@@ -18,7 +18,7 @@ public class LandasClient2
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LandasClient2 ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/LandasServer1.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/LandasServer1.java
index 511904f2cd7aa1f56a7122d9e1f57cb24ba5392d..db6298600e13e52f6ba25790067a4399be8cbce1 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/LandasServer1.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/LandasServer1.java
@@ -16,7 +16,7 @@ public class LandasServer1
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LandasServer1 ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/LandasServer2.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/LandasServer2.java
index 35dbb0106d48ffaaafeb40ff050c7087c61c964d..54f348ca8a879baf31480df21dc5d38960433dce 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/LandasServer2.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/LandasServer2.java
@@ -20,7 +20,7 @@ public class LandasServer2
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LandasServer2 ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/MaroonTcpClient.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/MaroonTcpClient.java
index 390b1253de059d49b877b4f9cbc6ef6234aba339..b77bd69aaabfd185097a40df2b4d80362928d79e 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/MaroonTcpClient.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/MaroonTcpClient.java
@@ -26,7 +26,7 @@ public class MaroonTcpClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public MaroonTcpClient ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/MaroonTcpServer.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/MaroonTcpServer.java
index dcf46a40fa140b7c4ae1de29f9519b53141c78ee..9cea1ce193c38f587ca64b24a7a333ebd7cddaa0 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/MaroonTcpServer.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/MaroonTcpServer.java
@@ -33,7 +33,7 @@ public class MaroonTcpServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public MaroonTcpServer ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/SasalaClient.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/SasalaClient.java
index facd92e5a861ea8cb6eb783e04cc6fdfc694e7be..8e1921d7a6e28371f1587571921f136caa0ebbef 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/SasalaClient.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/SasalaClient.java
@@ -12,7 +12,7 @@ public class SasalaClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SasalaClient ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/SasalaServer.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/SasalaServer.java
index 8ab2a706ed9d9898ef8cf4d1979c4936578b427a..c11195e08f728aa1ec41526bc936796cac5b71ed 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/SasalaServer.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/SasalaServer.java
@@ -12,7 +12,7 @@ public class SasalaServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SasalaServer ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/SnellPositionClient.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/SnellPositionClient.java
index 8970382afe2849cfffc10ae6559c6b2109540104..cfb763d44315a3b5549b5f9d60260f0f51509d65 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/SnellPositionClient.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/SnellPositionClient.java
@@ -17,7 +17,7 @@ public class SnellPositionClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SnellPositionClient ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/SnellPositionServer.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/SnellPositionServer.java
index b5da354a2e0683e82efed9a0021375ea3887e935..9177b1b20e32efd481bff52876ace2f72d8b6880 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/SnellPositionServer.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/SnellPositionServer.java
@@ -14,7 +14,7 @@ public class SnellPositionServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SnellPositionServer ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/TackettTcpClient.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/TackettTcpClient.java
index cb3f6acc3325fa13e022f81c8ebce660a4dc2802..d3b39230e9f00ef2cf44e640ff8b41d7de7e3bf2 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/TackettTcpClient.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/TackettTcpClient.java
@@ -19,7 +19,7 @@ public class TackettTcpClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public TackettTcpClient ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/TackettTcpServer.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/TackettTcpServer.java
index be8f21de55df0b41592fb1e39d3af7601638d4c2..578101f7432c9291a0a48e1b96ae5a455b695ec0 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/TackettTcpServer.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/TackettTcpServer.java
@@ -29,7 +29,7 @@ public class TackettTcpServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public TackettTcpServer ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/YamashitaDeMouraTcpClient.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/YamashitaDeMouraTcpClient.java
index d6b92ace1e36d0517ab667ab5f757637606d0279..e333d192c00b7525cd0adce1b194d927f099a7bb 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/YamashitaDeMouraTcpClient.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/YamashitaDeMouraTcpClient.java
@@ -17,7 +17,7 @@ public class YamashitaDeMouraTcpClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public YamashitaDeMouraTcpClient ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/YamashitaDeMouraTcpServer.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/YamashitaDeMouraTcpServer.java
index ffd7536cd6f2554f2d6d82b07fa081f2ff188d0a..9947bc54b126f3b926fc12cc9253f3a408174f69 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/YamashitaDeMouraTcpServer.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/YamashitaDeMouraTcpServer.java
@@ -19,7 +19,7 @@ public class YamashitaDeMouraTcpServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public YamashitaDeMouraTcpServer ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/package-info.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/package-info.java
index b6eb003568ea4c59310e38ee6d87fe6c1b947a3e..69d1885e4b123b2c7517de77be4f16203c1d01d6 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/package-info.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework1/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JanuaryMarch.homework1;
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/AngelMulticastReceiver.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/AngelMulticastReceiver.java
index 89e2b303c667be78ee5fa85b6487ec9994f1924d..5b0c2a33e9385d2177445f6c83393d4b0051e23f 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/AngelMulticastReceiver.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/AngelMulticastReceiver.java
@@ -13,7 +13,7 @@ public class AngelMulticastReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public AngelMulticastReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/AngelMulticastSenderExample.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/AngelMulticastSenderExample.java
index 728940dafe80f144d7aa1ed788192ba306c4bec2..6356466cb44a591524adf9144851d32ca4c0bbdd 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/AngelMulticastSenderExample.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/AngelMulticastSenderExample.java
@@ -16,7 +16,7 @@ public class AngelMulticastSenderExample
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public AngelMulticastSenderExample ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/BlankenbekerMulticastReceiver.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/BlankenbekerMulticastReceiver.java
index b22e15f282c9e9e3c2c7c0b5a2794868c82d8680..7033f0a972966b6dd52537ac1bf44a69338a9fdb 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/BlankenbekerMulticastReceiver.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/BlankenbekerMulticastReceiver.java
@@ -21,7 +21,7 @@ public class BlankenbekerMulticastReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BlankenbekerMulticastReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/BlankenbekerMulticastSender.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/BlankenbekerMulticastSender.java
index c58b04a5c65f150ce70d8a0c4b85169ea14c8677..4410b83d3c4bf68d91ccdaa8feb6f0cac604402b 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/BlankenbekerMulticastSender.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/BlankenbekerMulticastSender.java
@@ -21,7 +21,7 @@ public class BlankenbekerMulticastSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BlankenbekerMulticastSender ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/ConardMulticastReceiver.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/ConardMulticastReceiver.java
index 92a65dc83c332e8b75f08c84acbaabf61f9e7e6c..1e84753992b7fb90ffa958ffc413183487e9fa1c 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/ConardMulticastReceiver.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/ConardMulticastReceiver.java
@@ -13,7 +13,7 @@ public class ConardMulticastReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public ConardMulticastReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/ConardMulticastSender.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/ConardMulticastSender.java
index 0911436d157482626a2ab9b34f597adecf3557c6..4ca9f2574356512ba524e1808a196855c3c4fd6d 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/ConardMulticastSender.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/ConardMulticastSender.java
@@ -17,7 +17,7 @@ public class ConardMulticastSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public ConardMulticastSender ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/HanleyMulticastHWreceiver.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/HanleyMulticastHWreceiver.java
index e313ca1a4af7204c3de8dd562395af5f3e3c69b0..8f4fb587a45e9fb14e6c11f50980bdf80b0a34f9 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/HanleyMulticastHWreceiver.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/HanleyMulticastHWreceiver.java
@@ -16,7 +16,7 @@ public class HanleyMulticastHWreceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public HanleyMulticastHWreceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/HanleyMulticastHWsender.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/HanleyMulticastHWsender.java
index 43181ebaff6daf2d2de9f992e77abdadced59ab3..62a17a42f2045fe0461f46b1f57b4870f2a4fdee 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/HanleyMulticastHWsender.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/HanleyMulticastHWsender.java
@@ -18,7 +18,7 @@ public class HanleyMulticastHWsender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public HanleyMulticastHWsender ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/LandasMulticastReceiver.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/LandasMulticastReceiver.java
index 53cebb9114d704f90f31c223c6b154cc2820af57..1876b97a62ae5403ee738765a497f6cce005184e 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/LandasMulticastReceiver.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/LandasMulticastReceiver.java
@@ -15,7 +15,7 @@ public class LandasMulticastReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LandasMulticastReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/LandasMulticastReceiver2.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/LandasMulticastReceiver2.java
index 589574d6cd3db88e1ccf7e13b8950627865554e7..ac4339198b49143bd38162aee3f67780fabff819 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/LandasMulticastReceiver2.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/LandasMulticastReceiver2.java
@@ -15,7 +15,7 @@ public class LandasMulticastReceiver2
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LandasMulticastReceiver2 ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/LandasMulticastSender.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/LandasMulticastSender.java
index d09b449ee44750abd6898db3ba9852d3f11f9435..221b16b0b39c0d3b898f38b7b13cbac48c724684 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/LandasMulticastSender.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/LandasMulticastSender.java
@@ -15,7 +15,7 @@ public class LandasMulticastSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LandasMulticastSender ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/LandasMulticastSender2.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/LandasMulticastSender2.java
index cd37d7ac2611bd7427a9537858b89c61fb68ab88..d8c7cdecd61c76a93a24913b267c93c3314bc700 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/LandasMulticastSender2.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/LandasMulticastSender2.java
@@ -15,7 +15,7 @@ public class LandasMulticastSender2
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LandasMulticastSender2 ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/MaroonMulticastReceiver.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/MaroonMulticastReceiver.java
index 64f786fa66f6d19985eb47863b704dc30f114364..cc0fc0231de2ea143bc9d9da75f4163ca7e13450 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/MaroonMulticastReceiver.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/MaroonMulticastReceiver.java
@@ -19,7 +19,7 @@ public class MaroonMulticastReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public MaroonMulticastReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/MaroonMulticastSenderExample.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/MaroonMulticastSenderExample.java
index 6f82fdb6a68bf27c563db296da4475e96619223d..d233acc4afb007d8cccd73feef351635d7254efd 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/MaroonMulticastSenderExample.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/MaroonMulticastSenderExample.java
@@ -15,7 +15,7 @@ public class MaroonMulticastSenderExample
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public MaroonMulticastSenderExample ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/SasalaMulticastReceiver.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/SasalaMulticastReceiver.java
index d1913ba8653bd8ae71dc31104feebeffa5231887..47dcedbf73141734344532df446202a11c18369a 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/SasalaMulticastReceiver.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/SasalaMulticastReceiver.java
@@ -13,7 +13,7 @@ public class SasalaMulticastReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SasalaMulticastReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/SasalaMulticastSender.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/SasalaMulticastSender.java
index 61d8735b99a7009a5edebcc471bc5f1e121ae472..ab614e197fae38a32a4f9d5c9ae245fe25145c15 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/SasalaMulticastSender.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/SasalaMulticastSender.java
@@ -16,7 +16,7 @@ public class SasalaMulticastSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SasalaMulticastSender ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/SnellMulticastClient.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/SnellMulticastClient.java
index 5e53b83db3c2c2b2f641b797c84f69bfc120a8e2..889a2f763958f5d8740776ce7d366ccfa3c8b139 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/SnellMulticastClient.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/SnellMulticastClient.java
@@ -21,7 +21,7 @@ public class SnellMulticastClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SnellMulticastClient ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/SnellMulticastServer.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/SnellMulticastServer.java
index 777e0fa24a3308e5884c896df41280c82deaf847..930c7d99df2d51587056393e20ade0ee2363d428 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/SnellMulticastServer.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/SnellMulticastServer.java
@@ -13,7 +13,7 @@ public class SnellMulticastServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SnellMulticastServer ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/TackettMultiCastReceiver.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/TackettMultiCastReceiver.java
index 69f6aea8baff014a6cf98381f6e57350f0ec3bb7..60ca3ecb4309e71004fa7d81ba51cec10323df53 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/TackettMultiCastReceiver.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/TackettMultiCastReceiver.java
@@ -16,7 +16,7 @@ public class TackettMultiCastReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public TackettMultiCastReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/TackettMulticastSender.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/TackettMulticastSender.java
index 69a6b551f7a3c8725faf00d4d17e4124f68fbb0f..6d1562acfa71044514e7541c5caa93ce02f4dcc9 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/TackettMulticastSender.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/TackettMulticastSender.java
@@ -18,7 +18,7 @@ public class TackettMulticastSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public TackettMulticastSender ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/YamashitaDeMouraMulticastReceiver.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/YamashitaDeMouraMulticastReceiver.java
index 2c075a62d5b1ea37039d596be6c8cc3e05311dac..9024bd1166f0072a6468a9dcfc22b24b30cbf185 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/YamashitaDeMouraMulticastReceiver.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/YamashitaDeMouraMulticastReceiver.java
@@ -18,7 +18,7 @@ public class YamashitaDeMouraMulticastReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public YamashitaDeMouraMulticastReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/YamashitaDeMouraMulticastSender.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/YamashitaDeMouraMulticastSender.java
index cac8c7f596c600371995930361f7b4225888ea57..2ad6127183c34b74b5f566001109cfab04012a0b 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/YamashitaDeMouraMulticastSender.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/YamashitaDeMouraMulticastSender.java
@@ -18,7 +18,7 @@ public class YamashitaDeMouraMulticastSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public YamashitaDeMouraMulticastSender ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/package-info.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/package-info.java
index 620dcafd619416583dd0a5205d4c7805cdbdd2af..6a69ff94d1cae4d76394c77f94b8ca6d7569be8c 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/package-info.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JanuaryMarch.homework2;
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Angel_OpenDisEspduSender.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Angel_OpenDisEspduSender.java
index 20c738e8baa287bd1de9b246e3f664e1b7bb88a2..fc37d3fe43b0f11d9b05d14df12f27bc0e6a7b92 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Angel_OpenDisEspduSender.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Angel_OpenDisEspduSender.java
@@ -19,7 +19,7 @@ public class Angel_OpenDisEspduSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Angel_OpenDisEspduSender ()
     {
@@ -30,13 +30,13 @@ public class Angel_OpenDisEspduSender
     /** Type of network connection */
 	public enum NetworkMode {
         /** Unicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 		UNICAST,
         /** Multicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** Broadcast network mode 
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
 
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/BlankenbekerOpenDisEspduSender.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/BlankenbekerOpenDisEspduSender.java
index a844fc95594d9e9f2cc8f3a33949be832eb2a69c..8af434e033df0cbc5e92a93448ab21c8b370e148 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/BlankenbekerOpenDisEspduSender.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/BlankenbekerOpenDisEspduSender.java
@@ -19,7 +19,7 @@ public class BlankenbekerOpenDisEspduSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BlankenbekerOpenDisEspduSender ()
     {
@@ -31,13 +31,13 @@ public class BlankenbekerOpenDisEspduSender
     /** Type of network connection */
 	public enum NetworkMode {
         /** Unicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 	UNICAST,
         /** Multicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** Broadcast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
 
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/ConardSnellOpenDisEspduSender.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/ConardSnellOpenDisEspduSender.java
index 66529a4991850165ec62542324ac9795a87a7802..2367942abe23fd48c52aa28a1e9eca2681a4f636 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/ConardSnellOpenDisEspduSender.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/ConardSnellOpenDisEspduSender.java
@@ -19,7 +19,7 @@ public class ConardSnellOpenDisEspduSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public ConardSnellOpenDisEspduSender ()
     {
@@ -30,13 +30,13 @@ public class ConardSnellOpenDisEspduSender
     /** Type of network connection */
 	public enum NetworkMode {
         /** Unicast network mode 
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 	UNICAST,
         /** Multicast network mode 
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** Broadcast network mode 
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
 
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/EspduReceiver.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/EspduReceiver.java
index c2c310df4a08a0cefe9211ff72371c5a1f509c44..4785da915a3fd0f5fd860102ad84974c09bc1b42 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/EspduReceiver.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/EspduReceiver.java
@@ -17,7 +17,7 @@ public class EspduReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public EspduReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Hanley_OpenDisEspduSender.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Hanley_OpenDisEspduSender.java
index d7921b4ea4fdcb3b65006a347a3f814cb0803743..6fc079777f0252f23f6f2f585b783cf597cf6334 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Hanley_OpenDisEspduSender.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Hanley_OpenDisEspduSender.java
@@ -19,7 +19,7 @@ public class Hanley_OpenDisEspduSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Hanley_OpenDisEspduSender ()
     {
@@ -30,13 +30,13 @@ public class Hanley_OpenDisEspduSender
     /** Type of network connection */
 	public enum NetworkMode {
         /** Unicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 	UNICAST,
         /** Multicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** Broadcast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
 
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Landas_OpenDisEspduSender.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Landas_OpenDisEspduSender.java
index 45e322a89c20022514a50a71cbb9bef06cacccd6..1f5bb79cb195ed1b42c62ae43f89caea68810356 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Landas_OpenDisEspduSender.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Landas_OpenDisEspduSender.java
@@ -19,7 +19,7 @@ public class Landas_OpenDisEspduSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Landas_OpenDisEspduSender ()
     {
@@ -30,13 +30,13 @@ public class Landas_OpenDisEspduSender
     /** Type of network connection */
 	public enum NetworkMode {
         /** accessor
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 		UNICAST,
         /** accessor
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** accessor
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
 
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/OpenDisEspduSender.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/OpenDisEspduSender.java
index 2fe2627cd4de051b28f3c7e67ed9fae00a0db3f8..4bf0825f61a45d616d35b8a2692c22806f05ae40 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/OpenDisEspduSender.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/OpenDisEspduSender.java
@@ -19,7 +19,7 @@ public class OpenDisEspduSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public OpenDisEspduSender ()
     {
@@ -30,13 +30,13 @@ public class OpenDisEspduSender
     /** Type of network connection */
 	public enum NetworkMode {
         /** accessor
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 		UNICAST,
         /** accessor
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** accessor
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
 
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Sasala_OpenDisEspduSender1.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Sasala_OpenDisEspduSender1.java
index 26c493940c620281eb81daa9f5df0f4ab37f7abf..3a637688f7bb7e6cee5db9d536ee13d6a677b880 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Sasala_OpenDisEspduSender1.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Sasala_OpenDisEspduSender1.java
@@ -18,7 +18,7 @@ public class Sasala_OpenDisEspduSender1
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Sasala_OpenDisEspduSender1 ()
     {
@@ -29,13 +29,13 @@ public class Sasala_OpenDisEspduSender1
     /** Type of network connection */
 	public enum NetworkMode {
         /** enumeration
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 		UNICAST,
         /** enumeration
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** enumeration
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
 
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Tackett_Assignment3_OpenDisEspduSender.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Tackett_Assignment3_OpenDisEspduSender.java
index 324270eec6324112705745310e07ff3649d2f5df..552dafe652bbae8551a541bb6c51f6651907aeae 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Tackett_Assignment3_OpenDisEspduSender.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/Tackett_Assignment3_OpenDisEspduSender.java
@@ -19,7 +19,7 @@ public class Tackett_Assignment3_OpenDisEspduSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Tackett_Assignment3_OpenDisEspduSender ()
     {
@@ -30,13 +30,13 @@ public class Tackett_Assignment3_OpenDisEspduSender
     /** Type of network connection */
 	public enum NetworkMode {
         /** enumeration value
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 		UNICAST,
         /** enumeration value
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** enumeration value
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
 
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/YamashitaDeMouraOpenDisEspduSender.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/YamashitaDeMouraOpenDisEspduSender.java
index 1c380dfd25790940682b541f708cc6fb3e1025c3..26c9aa67872385867993609995955a78b00b879a 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/YamashitaDeMouraOpenDisEspduSender.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/YamashitaDeMouraOpenDisEspduSender.java
@@ -22,7 +22,7 @@ public class YamashitaDeMouraOpenDisEspduSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public YamashitaDeMouraOpenDisEspduSender ()
     {
@@ -33,13 +33,13 @@ public class YamashitaDeMouraOpenDisEspduSender
     /** Type of network connection */
 	public enum NetworkMode {
         /** enumeration value
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 		UNICAST,
         /** enumeration value
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** enumeration value
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
 
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/package-info.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/package-info.java
index 4966b7cf1c81066b5bfe4170fd69e06ca7e1de7b..f1266cb01240427b3291e73c96b44041fd730804 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/package-info.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework3/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JanuaryMarch.homework3;
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/package-info.java b/assignments/src/MV3500Cohort2018JanuaryMarch/package-info.java
index 6c84267f0bb7a347c77386504e7d72f2c70feccb..7e1ddb4f07e1456b8e495b064851d9a0f4eda2c2 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/package-info.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/package-info.java
@@ -3,10 +3,10 @@ package MV3500Cohort2018JanuaryMarch;
 /**
  * Student homework assignments produced as part of the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduReceiverAtoTCP.java b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduReceiverAtoTCP.java
index c2107d491caf46fdf4790b6cbd3ca279a54ea149..70e7a2a544b063766118f7278dd5bb9e3c02b4d3 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduReceiverAtoTCP.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduReceiverAtoTCP.java
@@ -20,7 +20,7 @@ public class AngelBlankEspduReceiverAtoTCP
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public AngelBlankEspduReceiverAtoTCP ()
     {
@@ -30,10 +30,10 @@ public class AngelBlankEspduReceiverAtoTCP
     /** address of interest */
     public static final String TCP_DESTINATION_IP = "172.20.146.111";
     /** port of interest
-     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
     public static final int DIS_DESTINATION_PORT = 3000;
     /** port of interest
-     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
     public static final int TCP_DESTINATION_PORT = 2999;
     /** maximum packet size */
     public static final int MAX_PDU_SIZE = 8192;
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduReceiverBtoTCP.java b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduReceiverBtoTCP.java
index e9a5add44f74c43e3305e7dc5f00dfe9e245cd89..8458229f0cb33fb7085a4b5fac05b0e2695e9be1 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduReceiverBtoTCP.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduReceiverBtoTCP.java
@@ -21,7 +21,7 @@ public class AngelBlankEspduReceiverBtoTCP
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public AngelBlankEspduReceiverBtoTCP ()
     {
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduSenderA.java b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduSenderA.java
index 8d1861c92ee36580160fec4919837632c0144c51..89268c8f7dfd1744e56f303be7d563f5f97782a6 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduSenderA.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduSenderA.java
@@ -19,7 +19,7 @@ public class AngelBlankEspduSenderA
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public AngelBlankEspduSenderA ()
     {
@@ -30,13 +30,13 @@ public class AngelBlankEspduSenderA
     /** Type of network connection */
 	public enum NetworkMode {
         /** Unicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 		UNICAST,
         /** Multicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** Broadcast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
 
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduSenderB.java b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduSenderB.java
index 92bf677a075767c1f779a748c6c28326dd03dde8..5dafc3f6218cf99b460829d4cbaefa156c527226 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduSenderB.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduSenderB.java
@@ -19,7 +19,7 @@ public class AngelBlankEspduSenderB
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public AngelBlankEspduSenderB ()
     {
@@ -29,13 +29,13 @@ public class AngelBlankEspduSenderB
     /** Type of network connection */
 	public enum NetworkMode {
         /** Unicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 	UNICAST,
         /** Multicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** Broadcast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
     /** default multicast group we send on */
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduTCPReceiverASenderB.java b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduTCPReceiverASenderB.java
index 1713ad0686154604cbaa7f1633f86a8595b64cca..05c60689b7548280c08fe71f6d1f9a59586deaa7 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduTCPReceiverASenderB.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduTCPReceiverASenderB.java
@@ -21,7 +21,7 @@ public class AngelBlankEspduTCPReceiverASenderB
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public AngelBlankEspduTCPReceiverASenderB ()
     {
@@ -31,13 +31,13 @@ public class AngelBlankEspduTCPReceiverASenderB
     /** Type of network connection */
 	public enum NetworkMode {
         /** Unicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 	UNICAST,
         /** Multicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** Broadcast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
     /** default multicast group we send on */
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduTCPReceiverBSenderA.java b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduTCPReceiverBSenderA.java
index fcb269fa21a74ca7f3b7752b1f312cbe3c629aa4..bae25c5107284ec734e72c2897489ee0da26c41c 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduTCPReceiverBSenderA.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/AngelBlankEspduTCPReceiverBSenderA.java
@@ -19,7 +19,7 @@ public class AngelBlankEspduTCPReceiverBSenderA
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public AngelBlankEspduTCPReceiverBSenderA ()
     {
@@ -30,13 +30,13 @@ public class AngelBlankEspduTCPReceiverBSenderA
     /** Type of network connection */
 	public enum NetworkMode {
         /** Unicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 	UNICAST,
         /** Multicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** Broadcast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
     /** socket parameter of interest */
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/package-info.java b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/package-info.java
index 64f1f5fce2e1115a11744a6a57d9f1710658a340..85b8f614acfc8a21d8fdee87d445eca1f68c98d8 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/package-info.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/AngelopoulosBlankenbeker/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JanuaryMarch.projects.AngelopoulosBlankenbeker;
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/Hanley/HanleyOpenDisEspduSenderFP.java b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/Hanley/HanleyOpenDisEspduSenderFP.java
index 3926748606f996e8d3709379f5997d9e0286b199..00c804081cd0359166004d440c3e2cbd9c4f162b 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/Hanley/HanleyOpenDisEspduSenderFP.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/Hanley/HanleyOpenDisEspduSenderFP.java
@@ -28,7 +28,7 @@ public class HanleyOpenDisEspduSenderFP
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public HanleyOpenDisEspduSenderFP ()
     {
@@ -39,13 +39,13 @@ public class HanleyOpenDisEspduSenderFP
     /** Type of network connection */
 	public enum NetworkMode {
         /** Unicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 	UNICAST,
         /** Multicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** Broadcast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
 
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/Hanley/package-info.java b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/Hanley/package-info.java
index 00e4237805391ecffdb82f5f993428f4416b6900..4b7f034af0b154b5fa6acfa236d04ab116f33dc6 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/Hanley/package-info.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/Hanley/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JanuaryMarch.projects.Hanley;
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/LandasTackettDeMoura/package-info.java b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/LandasTackettDeMoura/package-info.java
index f768aa3a747db6670f99c7813d034ed88bbfd2cd..c610607a00e0a1e7715b4470231312d1fccda843 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/LandasTackettDeMoura/package-info.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/LandasTackettDeMoura/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JanuaryMarch.projects.LandasTackettDeMoura;
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/SasalaMaroon/CSVreaderOpenDisEspduSenderFP.java b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/SasalaMaroon/CSVreaderOpenDisEspduSenderFP.java
index 5fcc359b2d2b8a607bc52dba4f3cd36a2571403e..dfd9951f270af2f2d748b0f149dc7c035735cbd2 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/SasalaMaroon/CSVreaderOpenDisEspduSenderFP.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/SasalaMaroon/CSVreaderOpenDisEspduSenderFP.java
@@ -34,7 +34,7 @@ public class CSVreaderOpenDisEspduSenderFP
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public CSVreaderOpenDisEspduSenderFP ()
     {
@@ -51,13 +51,13 @@ public class CSVreaderOpenDisEspduSenderFP
     /** Type of network connection */
 	public enum NetworkMode {
         /** Unicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 	UNICAST,
         /** Multicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** Broadcast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
 
diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/SasalaMaroon/package-info.java b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/SasalaMaroon/package-info.java
index 209d39e86115ad5b781a389480a0dd80fb16fc78..53b47edbf6aea20fe521a2cdc607cb093714c309 100644
--- a/assignments/src/MV3500Cohort2018JanuaryMarch/projects/SasalaMaroon/package-info.java
+++ b/assignments/src/MV3500Cohort2018JanuaryMarch/projects/SasalaMaroon/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JanuaryMarch.projects.SasalaMaroon;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework1/AyresAssignment1.java b/assignments/src/MV3500Cohort2018JulySeptember/homework1/AyresAssignment1.java
index 0c64e33ecf4773b3f88eaf27f1c4c54728f6af54..5690b1ae7f7f91bdad39cbd63bc356ae58aed992 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework1/AyresAssignment1.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework1/AyresAssignment1.java
@@ -16,7 +16,7 @@ public class AyresAssignment1
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public AyresAssignment1 ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework1/CainAssignment1.java b/assignments/src/MV3500Cohort2018JulySeptember/homework1/CainAssignment1.java
index b7acebb8ddec00dde76683fc31c4437d436b3598..b19b752a2fa073a03dd35b74b757a2766297967b 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework1/CainAssignment1.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework1/CainAssignment1.java
@@ -16,7 +16,7 @@ public class CainAssignment1
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public CainAssignment1 ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework1/DemchkoAssignment1.java b/assignments/src/MV3500Cohort2018JulySeptember/homework1/DemchkoAssignment1.java
index ef74b6fd85fbf5969e2c077ae1b4a0d4648c9145..cbda9679042deb9c5cf0ebeb9c2a86321445b026 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework1/DemchkoAssignment1.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework1/DemchkoAssignment1.java
@@ -20,7 +20,7 @@ public class DemchkoAssignment1
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public DemchkoAssignment1 ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework1/DemchkoAssignment2.java b/assignments/src/MV3500Cohort2018JulySeptember/homework1/DemchkoAssignment2.java
index b9614f6afc9ae0ee541fcafc86e0ba7c349cb5ab..6b5715026e2c8e79ab58125b3bf24b08758643dd 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework1/DemchkoAssignment2.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework1/DemchkoAssignment2.java
@@ -8,7 +8,7 @@ public class DemchkoAssignment2
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public DemchkoAssignment2 ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework1/FriscoAssignment1.java b/assignments/src/MV3500Cohort2018JulySeptember/homework1/FriscoAssignment1.java
index bb8e8fad77fd0143f3c398a4525b86d4adbffd15..7d07dbda58796f75cfd6a60deef4d9a2ccde4b5b 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework1/FriscoAssignment1.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework1/FriscoAssignment1.java
@@ -31,7 +31,7 @@ public class FriscoAssignment1
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FriscoAssignment1 ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework1/FurrAssignment1.java b/assignments/src/MV3500Cohort2018JulySeptember/homework1/FurrAssignment1.java
index 8cb360e8ba379c5d5ea55f3fc9b9768e6034c4ed..87037a6e3b6587ec750f6bdc9a3560c37b70cd71 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework1/FurrAssignment1.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework1/FurrAssignment1.java
@@ -31,7 +31,7 @@ public class FurrAssignment1
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FurrAssignment1 ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework1/FurrAssignment2.java b/assignments/src/MV3500Cohort2018JulySeptember/homework1/FurrAssignment2.java
index 4215a27887fea558879ba54f1ac68e974e3dd2e2..a2784af005e8190af2ca70730a1892c8ccea17c2 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework1/FurrAssignment2.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework1/FurrAssignment2.java
@@ -33,7 +33,7 @@ public class FurrAssignment2
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FurrAssignment2 ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework1/JacksonAssignment1.java b/assignments/src/MV3500Cohort2018JulySeptember/homework1/JacksonAssignment1.java
index bdc31174f7ab60fc4365b99fdcb051031bacb8bd..ee0cfe600716ec9e87e5291f9374374b0c930dfc 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework1/JacksonAssignment1.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework1/JacksonAssignment1.java
@@ -19,7 +19,7 @@ public class JacksonAssignment1
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public JacksonAssignment1 ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework1/LoeffelmanAssignment1.java b/assignments/src/MV3500Cohort2018JulySeptember/homework1/LoeffelmanAssignment1.java
index 5121c624e0a6061a41cb4a19b86ae3e2de28d4c5..57d30acbaec1ad26c8e4e9c598b616f2dd9617c0 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework1/LoeffelmanAssignment1.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework1/LoeffelmanAssignment1.java
@@ -18,7 +18,7 @@ public class LoeffelmanAssignment1
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LoeffelmanAssignment1 ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework1/LoeffelmanAssignment1Tcp2.java b/assignments/src/MV3500Cohort2018JulySeptember/homework1/LoeffelmanAssignment1Tcp2.java
index bd372efd077e193c5b3344dbb976b3f1314d54b1..9213c8f0d971b41fab3b6d9e4c7da94992ba0d6b 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework1/LoeffelmanAssignment1Tcp2.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework1/LoeffelmanAssignment1Tcp2.java
@@ -19,7 +19,7 @@ public class LoeffelmanAssignment1Tcp2
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LoeffelmanAssignment1Tcp2 ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework1/SeversonAssignment1.java b/assignments/src/MV3500Cohort2018JulySeptember/homework1/SeversonAssignment1.java
index 3308120be0e6ddadf119ce9da39b81c807b19393..ed5c9efd43f2bfca7afba642d0840b6c8a89bf52 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework1/SeversonAssignment1.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework1/SeversonAssignment1.java
@@ -20,7 +20,7 @@ public class SeversonAssignment1
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SeversonAssignment1 ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework1/ThomersonAssignment1.java b/assignments/src/MV3500Cohort2018JulySeptember/homework1/ThomersonAssignment1.java
index 483816e060a0c803034b71928c98ab8516612afc..eec159e8f10ac8bae0cd76c4304a04c0b540d4df 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework1/ThomersonAssignment1.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework1/ThomersonAssignment1.java
@@ -49,7 +49,7 @@ public class ThomersonAssignment1
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public ThomersonAssignment1 ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework1/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/homework1/package-info.java
index 5de06f414c752307c61492dccac05dfdc9820fd6..59e5a827ba49ecffc5170f853d6c7f18a76e0310 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework1/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework1/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.homework1;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Ayres/Ayres_Client.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Ayres/Ayres_Client.java
index 755cb3328c08ab6c78364282f517ea319b118b4a..312d40e887d4a3ef264fabd37f37e053e15d3351 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Ayres/Ayres_Client.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Ayres/Ayres_Client.java
@@ -21,7 +21,7 @@ public class Ayres_Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Ayres_Client ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Ayres/Ayres_Server.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Ayres/Ayres_Server.java
index 98cbc2666e3bd8b111457756f8c69d0390f8b935..46a3ace857c27a460f65c8005b1bc4bdcad8a3e0 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Ayres/Ayres_Server.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Ayres/Ayres_Server.java
@@ -23,7 +23,7 @@ public class Ayres_Server
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Ayres_Server ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Ayres/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Ayres/package-info.java
index f7309e9c5b556ef5dd7695eb7d9a8fadff6a70b3..3e55ed8dcb7f1661be8f77b4a4da43410d44a960 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Ayres/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Ayres/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.homework2.Ayres;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Cain/CainTcpClient.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Cain/CainTcpClient.java
index e77c1696dbef34a64937d91df54510a48fbc232b..3d357043d441e81bd0c2ed7c957b1097f93cb61f 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Cain/CainTcpClient.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Cain/CainTcpClient.java
@@ -11,7 +11,7 @@ public class CainTcpClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public CainTcpClient ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Cain/CainTcpServer.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Cain/CainTcpServer.java
index 5f5134c275759a37a950740441bb5f68aa9974c6..a94de246194c2941d65a80a28ab347931a0cedfc 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Cain/CainTcpServer.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Cain/CainTcpServer.java
@@ -13,7 +13,7 @@ public class CainTcpServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public CainTcpServer ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Cain/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Cain/package-info.java
index 233a62835235df4177f4418efdab951079f77621..d756cff1718a3239bab041973eae8097a52b7c17 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Cain/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Cain/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.homework2.Cain;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Demchko/DemchkoClient.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Demchko/DemchkoClient.java
index 9297b977b86920cebd6d4d2403d5ec47c1eb5f6c..4966a60d90dadb76bbc23f38b23fcfed8c52057b 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Demchko/DemchkoClient.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Demchko/DemchkoClient.java
@@ -24,7 +24,7 @@ public class DemchkoClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public DemchkoClient ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Demchko/DemchkoServer.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Demchko/DemchkoServer.java
index 2216e38a570c9f3ad74746116c5192a2cfcd2bbc..b22bd67f89d6c5b6e8176f7e485c1d781226e725 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Demchko/DemchkoServer.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Demchko/DemchkoServer.java
@@ -19,7 +19,7 @@ public class DemchkoServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public DemchkoServer ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Demchko/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Demchko/package-info.java
index 48c2cc7cd3146b4124fa8522334ba2249cb7e735..8db5a05a469b040ef8dc557a6352f5dc7d764521 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Demchko/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Demchko/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.homework2.Demchko;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Frisco/FriscoAssignment2Client.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Frisco/FriscoAssignment2Client.java
index 1c68ddae719738e65fe265aa111dfb462747f7b3..9a2f8aafa0436b67be4ad2b96f8fe4230640646e 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Frisco/FriscoAssignment2Client.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Frisco/FriscoAssignment2Client.java
@@ -19,7 +19,7 @@ public class FriscoAssignment2Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FriscoAssignment2Client ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Frisco/FriscoAssignment2Server.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Frisco/FriscoAssignment2Server.java
index 6714da084a732943ae80d7e4bdb9085c6ea3e144..e5eed29250c0437010c3d9e1168eb491bdeda075 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Frisco/FriscoAssignment2Server.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Frisco/FriscoAssignment2Server.java
@@ -21,7 +21,7 @@ public class FriscoAssignment2Server
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FriscoAssignment2Server ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Frisco/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Frisco/package-info.java
index 505ea1cb78a8124c3af3b50633b161b244e3a816..f6329252b8b1d4f3270e3e668f8390c8acb8871b 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Frisco/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Frisco/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.homework2.Frisco;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Furr/FurrTcpClient.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Furr/FurrTcpClient.java
index 0f60f1e842a549dcd6ed5d3b8d17e2f47b1ef992..5464ca89053c424c3f896dd019c1e08f3dfb01ce 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Furr/FurrTcpClient.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Furr/FurrTcpClient.java
@@ -15,7 +15,7 @@ public class FurrTcpClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FurrTcpClient ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Furr/FurrTcpServer.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Furr/FurrTcpServer.java
index 5c93b8133ce766bad0a0afc3f83822fdac554d61..2b77f25817d801448afdf2793ff6125a71736678 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Furr/FurrTcpServer.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Furr/FurrTcpServer.java
@@ -22,7 +22,7 @@ public class FurrTcpServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FurrTcpServer ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Furr/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Furr/package-info.java
index 3e24afa99613937aa68bab5f1b6b88409555e34f..1c01f471296d4956b0a9c64f2e5a198bb58e0b08 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Furr/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Furr/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.homework2.Furr;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Jackson/JacksonTcpClient.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Jackson/JacksonTcpClient.java
index 0d2ba4324285fa5129f890903904c8eedb72e9cf..b203554106895737afc2eb2dae82368f0118c18e 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Jackson/JacksonTcpClient.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Jackson/JacksonTcpClient.java
@@ -17,7 +17,7 @@ public class JacksonTcpClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public JacksonTcpClient ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Jackson/JacksonTcpServer.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Jackson/JacksonTcpServer.java
index adfbec057606e38c40445c37fea87332be01e9f8..1b81c6454673502033c118ee79f20c092110469e 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Jackson/JacksonTcpServer.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Jackson/JacksonTcpServer.java
@@ -25,7 +25,7 @@ public class JacksonTcpServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public JacksonTcpServer ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Jackson/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Jackson/package-info.java
index 9ae3a07d755bc2f9c9542c2d1f19f77597ec23da..e390ce21214fc792b306a41174039ced0af8e83c 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Jackson/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Jackson/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.homework2.Jackson;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Loeffelman/LoeffelmanAssignment2Client.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Loeffelman/LoeffelmanAssignment2Client.java
index c88358a3e2d1dc81323ef4d3afe0a38910d7d2dd..fdbc309996002cd2afeed0e4aaee10c7a49cf15e 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Loeffelman/LoeffelmanAssignment2Client.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Loeffelman/LoeffelmanAssignment2Client.java
@@ -23,7 +23,7 @@ public class LoeffelmanAssignment2Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LoeffelmanAssignment2Client ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Loeffelman/LoeffelmanAssignment2Server.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Loeffelman/LoeffelmanAssignment2Server.java
index e78471d5248d155dbc1b6b94ace706ed2d229af9..c41c3389fa1039bfe69abe4d2577a7e6689d1c24 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Loeffelman/LoeffelmanAssignment2Server.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Loeffelman/LoeffelmanAssignment2Server.java
@@ -24,7 +24,7 @@ public class LoeffelmanAssignment2Server
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LoeffelmanAssignment2Server ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Loeffelman/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Loeffelman/package-info.java
index 4e05bb917a3bc63606d315bd0d640a4f5fbb5577..60cf7f1d667bcc917321e92084bc0d2bf1a4be77 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Loeffelman/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Loeffelman/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.homework2.Loeffelman;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Severson/SeversonAssignment2_Client.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Severson/SeversonAssignment2_Client.java
index adf995eb26299465b2d34727bc508f15e1af270e..dcc2532f409388823aa349d268683ee5173c32fe 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Severson/SeversonAssignment2_Client.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Severson/SeversonAssignment2_Client.java
@@ -22,7 +22,7 @@ public class SeversonAssignment2_Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SeversonAssignment2_Client ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Severson/SeversonAssingment2_Server.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Severson/SeversonAssingment2_Server.java
index 8026d6d9814cd24d9c377245ed882da3b8cd1dc5..98d3257c5eb05ddeaeff9206800483931808de39 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Severson/SeversonAssingment2_Server.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Severson/SeversonAssingment2_Server.java
@@ -23,7 +23,7 @@ public class SeversonAssingment2_Server
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SeversonAssingment2_Server ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Severson/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Severson/package-info.java
index b1f7676287179f7ff70301a3c4a428435fcd2742..13414859e1a46e16815db9f96d9aecae7e49e410 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Severson/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Severson/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.homework2.Severson;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Thomerson/ThomersonAssignment2Client.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Thomerson/ThomersonAssignment2Client.java
index 59acdf49e57def074664196cc7a654143e839cfa..1e92fc58a45614f4488058af04c1d0422d609ab5 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Thomerson/ThomersonAssignment2Client.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Thomerson/ThomersonAssignment2Client.java
@@ -27,7 +27,7 @@ public class ThomersonAssignment2Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public ThomersonAssignment2Client ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Thomerson/ThomersonAssignment2Server.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Thomerson/ThomersonAssignment2Server.java
index fd2dbc2a0e5888129bdb1117e098d9d4d34e7abf..3e6966e3cf659bbb6c7c8c6780acfff350d28d2c 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Thomerson/ThomersonAssignment2Server.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Thomerson/ThomersonAssignment2Server.java
@@ -33,7 +33,7 @@ public class ThomersonAssignment2Server
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public ThomersonAssignment2Server ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Thomerson/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Thomerson/package-info.java
index e95808a3d8370a19b4e150281b693a16473ada11..85246096ab77ced72d1e9d61358aa92c6ff8f679 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/Thomerson/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/Thomerson/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.homework2.Thomerson;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework2/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/homework2/package-info.java
index 487119aab119ac50f8c742fb8fc9ea192aa3fc5d..ea0b52d6c7918ff3f01da644e38ae7c47b93982a 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework2/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework2/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.homework2;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework3/AyresDemchkoHomework3/AyresDemchkoMulticastReceiver.java b/assignments/src/MV3500Cohort2018JulySeptember/homework3/AyresDemchkoHomework3/AyresDemchkoMulticastReceiver.java
index 3646b2f4c71dd71738cdbc16d2c6c038957e4180..19f7de065498ada352233510f458a1b08c1c029b 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework3/AyresDemchkoHomework3/AyresDemchkoMulticastReceiver.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework3/AyresDemchkoHomework3/AyresDemchkoMulticastReceiver.java
@@ -22,7 +22,7 @@ public class AyresDemchkoMulticastReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public AyresDemchkoMulticastReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework3/AyresDemchkoHomework3/AyresDemchkoMulticastSender.java b/assignments/src/MV3500Cohort2018JulySeptember/homework3/AyresDemchkoHomework3/AyresDemchkoMulticastSender.java
index c007f4aa58723c3a63708db8b42d35c7cb6dd006..d3732facd5dbf401fe30d61798332626df34e7d2 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework3/AyresDemchkoHomework3/AyresDemchkoMulticastSender.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework3/AyresDemchkoHomework3/AyresDemchkoMulticastSender.java
@@ -19,7 +19,7 @@ public class AyresDemchkoMulticastSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public AyresDemchkoMulticastSender ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework3/AyresDemchkoHomework3/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/homework3/AyresDemchkoHomework3/package-info.java
index c07e29dd17a1866df7b096c26ebae5c3bd812060..421da53744d5afecc5efd9aafb3b953e8934bb1c 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework3/AyresDemchkoHomework3/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework3/AyresDemchkoHomework3/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.homework3.AyresDemchkoHomework3;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Cain_Thomerson_Homework3/CainThomersonHw3Receiver.java b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Cain_Thomerson_Homework3/CainThomersonHw3Receiver.java
index 87dbce3d14ccfa6469c9760b80c43ec59bc233d2..c63a792c559944f4b2ed9022ab1ce6aac2afbf4c 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Cain_Thomerson_Homework3/CainThomersonHw3Receiver.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Cain_Thomerson_Homework3/CainThomersonHw3Receiver.java
@@ -19,7 +19,7 @@ public class CainThomersonHw3Receiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public CainThomersonHw3Receiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Cain_Thomerson_Homework3/CainThomersonHw3Sender.java b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Cain_Thomerson_Homework3/CainThomersonHw3Sender.java
index d6c99dd04fc8c7134a4963e9a5dcccdcb9f75c4e..346fb74eb9d25ad76e0433be6c3a542ff6ad7792 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Cain_Thomerson_Homework3/CainThomersonHw3Sender.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Cain_Thomerson_Homework3/CainThomersonHw3Sender.java
@@ -19,7 +19,7 @@ public class CainThomersonHw3Sender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public CainThomersonHw3Sender ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Cain_Thomerson_Homework3/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Cain_Thomerson_Homework3/package-info.java
index 0e0a598cd49b3a36a760214e7f8beb6e90bdf968..fbb1346770a0ce352ab112b62c098a1612e29bfe 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Cain_Thomerson_Homework3/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Cain_Thomerson_Homework3/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.homework3.Cain_Thomerson_Homework3;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Furr_Frisco_Homework3/FurrFriscoHw3Receiver.java b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Furr_Frisco_Homework3/FurrFriscoHw3Receiver.java
index 91279ef293e7df3e8767def84be5481529b7c96a..d1cf765f0bee0862504da4dac00981be4ba4cc57 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Furr_Frisco_Homework3/FurrFriscoHw3Receiver.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Furr_Frisco_Homework3/FurrFriscoHw3Receiver.java
@@ -20,7 +20,7 @@ public class FurrFriscoHw3Receiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FurrFriscoHw3Receiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Furr_Frisco_Homework3/FurrFriscoHw3Sender.java b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Furr_Frisco_Homework3/FurrFriscoHw3Sender.java
index 69b565986f13ddccb860536515908c50c67add1d..db6eeab8ec1736bb56edbd08922ae37eae2eb5a0 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Furr_Frisco_Homework3/FurrFriscoHw3Sender.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Furr_Frisco_Homework3/FurrFriscoHw3Sender.java
@@ -17,7 +17,7 @@ public class FurrFriscoHw3Sender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FurrFriscoHw3Sender ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Furr_Frisco_Homework3/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Furr_Frisco_Homework3/package-info.java
index 76abc30941f808e627fceb925fd34ab27787f013..8f2ff411cfd7666a9bb0e83a0d4221da4bcc1300 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Furr_Frisco_Homework3/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Furr_Frisco_Homework3/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.homework3.Furr_Frisco_Homework3;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Jackson_Homework3/Jackson_UdpReceiver.java b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Jackson_Homework3/Jackson_UdpReceiver.java
index 4a626da5874250ad86c9b6dfe8bd21e21e689d75..6a37178f9ff04b8802aea6bb1a8c67965da90ce8 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Jackson_Homework3/Jackson_UdpReceiver.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Jackson_Homework3/Jackson_UdpReceiver.java
@@ -13,7 +13,7 @@ public class Jackson_UdpReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Jackson_UdpReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Jackson_Homework3/Jackson_UdpSender.java b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Jackson_Homework3/Jackson_UdpSender.java
index 704b462c73b8251b282eb0324bc1595b350c96e3..54e12aa23d141699ac8f90b579ffb8421f28461e 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Jackson_Homework3/Jackson_UdpSender.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Jackson_Homework3/Jackson_UdpSender.java
@@ -15,7 +15,7 @@ public class Jackson_UdpSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Jackson_UdpSender ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Jackson_Homework3/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Jackson_Homework3/package-info.java
index 2d58a91166d26ef9394199c8bf889f5edccf9b09..7512834c54eb641e3486d504748e193eab507321 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Jackson_Homework3/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Jackson_Homework3/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.homework3.Jackson_Homework3;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/LoeffelmanSeversonMulticastImageHw3Receiver.java b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/LoeffelmanSeversonMulticastImageHw3Receiver.java
index 88a7d2010f1beba78fc816ec78c06127a9a49d3c..0641a26cd38e57e93428578d1ad30f1bf1afb277 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/LoeffelmanSeversonMulticastImageHw3Receiver.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/LoeffelmanSeversonMulticastImageHw3Receiver.java
@@ -26,7 +26,7 @@ public class LoeffelmanSeversonMulticastImageHw3Receiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LoeffelmanSeversonMulticastImageHw3Receiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/LoeffelmanSeversonMulticastImageHw3Sender.java b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/LoeffelmanSeversonMulticastImageHw3Sender.java
index a48fdf6d6efce6c810f5ebb6a113c8211db31630..e8f14be1515c6cc3f6e983832122faa1047ca48b 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/LoeffelmanSeversonMulticastImageHw3Sender.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/LoeffelmanSeversonMulticastImageHw3Sender.java
@@ -24,7 +24,7 @@ public class LoeffelmanSeversonMulticastImageHw3Sender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LoeffelmanSeversonMulticastImageHw3Sender ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/LoeffelmanSeversonUDPImageHW3Receiver.java b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/LoeffelmanSeversonUDPImageHW3Receiver.java
index 56927c677344585894fc0f1511fe4d2a99306c34..6b48af4384977595c3dc9ef8a4348d8ac5036be1 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/LoeffelmanSeversonUDPImageHW3Receiver.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/LoeffelmanSeversonUDPImageHW3Receiver.java
@@ -25,7 +25,7 @@ public class LoeffelmanSeversonUDPImageHW3Receiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LoeffelmanSeversonUDPImageHW3Receiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/LoeffelmanSeversonUDPImageSender.java b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/LoeffelmanSeversonUDPImageSender.java
index 69a0a7c8e71aaa49f2c0e3dc488241dad8aab8b3..ab777ee5411300a1f541c60672b95768ef156b18 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/LoeffelmanSeversonUDPImageSender.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/LoeffelmanSeversonUDPImageSender.java
@@ -24,7 +24,7 @@ public class LoeffelmanSeversonUDPImageSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LoeffelmanSeversonUDPImageSender ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/package-info.java
index f81d4d324713fe07385bac8dc6ab2e2f4d39c6a4..6d1baf0d80886bc5881e0f6323b62b4fe0c4a6f4 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/homework3/Loeffelman_Severson_Homework3/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.homework3.Loeffelman_Severson_Homework3;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/projects/AyresDemchko/AyresDemchkoReceiver.java b/assignments/src/MV3500Cohort2018JulySeptember/projects/AyresDemchko/AyresDemchkoReceiver.java
index f93737b0cbe1d00560ea9a5ff722d2638a81fb9b..9ed64107a9b67dafc3d622b2d8180f4081209049 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/projects/AyresDemchko/AyresDemchkoReceiver.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/projects/AyresDemchko/AyresDemchkoReceiver.java
@@ -26,7 +26,7 @@ public class AyresDemchkoReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public AyresDemchkoReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/projects/AyresDemchko/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/projects/AyresDemchko/package-info.java
index db79ace1fcc110d73240d28f46fc6f03befc8050..e4b976991fef9264747eef046484e80331297531 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/projects/AyresDemchko/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/projects/AyresDemchko/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.projects.AyresDemchko;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/projects/CainThomersonFinal/C_T_EspduRequestingUnit.java b/assignments/src/MV3500Cohort2018JulySeptember/projects/CainThomersonFinal/C_T_EspduRequestingUnit.java
index 792a3a0ad60cdb9c32d905eb9f755f18bdc476b4..429e1b35c2f488478db74990213b192ca7d34e7f 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/projects/CainThomersonFinal/C_T_EspduRequestingUnit.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/projects/CainThomersonFinal/C_T_EspduRequestingUnit.java
@@ -19,7 +19,7 @@ public class C_T_EspduRequestingUnit
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public C_T_EspduRequestingUnit ()
     {
@@ -31,13 +31,13 @@ public class C_T_EspduRequestingUnit
     /** Type of network connection */
 	public enum NetworkMode {
         /** Unicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 	UNICAST,
         /** Multicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** Broadcast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
 
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/projects/CainThomersonFinal/C_T_EspduSupplyerUnit.java b/assignments/src/MV3500Cohort2018JulySeptember/projects/CainThomersonFinal/C_T_EspduSupplyerUnit.java
index 2bd8c4f0855fad088be15e6bf24b0d13c045941b..39d26c66d110665bf8b1a575676e5f54409ae4d0 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/projects/CainThomersonFinal/C_T_EspduSupplyerUnit.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/projects/CainThomersonFinal/C_T_EspduSupplyerUnit.java
@@ -21,7 +21,7 @@ public class C_T_EspduSupplyerUnit
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public C_T_EspduSupplyerUnit ()
     {
@@ -33,13 +33,13 @@ public class C_T_EspduSupplyerUnit
     /** Type of network connection */
 	public enum NetworkMode {
         /** Unicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 	UNICAST,
         /** Multicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** Broadcast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
 
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/projects/CainThomersonFinal/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/projects/CainThomersonFinal/package-info.java
index 48ca516283a3f54d7ed1f8ed5590547cb0e08cd2..8401840b8bbd0b77b0208a9e962ae97f196f53b4 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/projects/CainThomersonFinal/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/projects/CainThomersonFinal/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.projects.CainThomersonFinal;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/projects/FriscoFurr/originals/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/projects/FriscoFurr/originals/package-info.java
index 3d9e062e54145db83a3a41b6a0eb3c5189931082..45c718bee56755e2f65572a3722b40f21c4c374d 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/projects/FriscoFurr/originals/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/projects/FriscoFurr/originals/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.projects.FriscoFurr.originals;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/projects/FriscoFurr/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/projects/FriscoFurr/package-info.java
index 1ca399b02c03e503da071002c34cdf5dec9b0e08..05d6fa096ab5e3b90f45ad58c618ff668858ea27 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/projects/FriscoFurr/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/projects/FriscoFurr/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.projects.FriscoFurr;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/projects/JacksonUnity/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/projects/JacksonUnity/package-info.java
index 4073fb3752f55bb56b0cc54c014aa3f8d0d83bc4..841f35336dd2a91105b71f704c6b0079b2cf3f19 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/projects/JacksonUnity/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/projects/JacksonUnity/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.projects.JacksonUnity;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/projects/LoeffelmanSeverson/LoeffelmanSeversonDISImageReceiver.java b/assignments/src/MV3500Cohort2018JulySeptember/projects/LoeffelmanSeverson/LoeffelmanSeversonDISImageReceiver.java
index 75b30c639229dfbfaa77f7a53ef1821f740cdcf0..6bda641fe3c4d4e68adc04db2fd4db2b134b7806 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/projects/LoeffelmanSeverson/LoeffelmanSeversonDISImageReceiver.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/projects/LoeffelmanSeverson/LoeffelmanSeversonDISImageReceiver.java
@@ -37,7 +37,7 @@ public class LoeffelmanSeversonDISImageReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LoeffelmanSeversonDISImageReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/projects/LoeffelmanSeverson/originals/LoeffelmanSeversonDISImageReceiver.java b/assignments/src/MV3500Cohort2018JulySeptember/projects/LoeffelmanSeverson/originals/LoeffelmanSeversonDISImageReceiver.java
index 3bcccb4639477d47f10ff3125ab69f040c037bd4..a7a5485a5e9b50f733032b06947458bd2f7aa468 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/projects/LoeffelmanSeverson/originals/LoeffelmanSeversonDISImageReceiver.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/projects/LoeffelmanSeverson/originals/LoeffelmanSeversonDISImageReceiver.java
@@ -37,7 +37,7 @@ public class LoeffelmanSeversonDISImageReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LoeffelmanSeversonDISImageReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/projects/LoeffelmanSeverson/originals/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/projects/LoeffelmanSeverson/originals/package-info.java
index 4585916d6b301eeebb8e4c9f17e4b17e669f282e..95242a611b6169d6137e5d349d7b7351f423b5f1 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/projects/LoeffelmanSeverson/originals/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/projects/LoeffelmanSeverson/originals/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.projects.LoeffelmanSeverson.originals;
diff --git a/assignments/src/MV3500Cohort2018JulySeptember/projects/LoeffelmanSeverson/package-info.java b/assignments/src/MV3500Cohort2018JulySeptember/projects/LoeffelmanSeverson/package-info.java
index 133e63bf2fa142d230407685707418b9a3857575..0e57812a62cbb340a9bfdaf323b2939584d5320b 100644
--- a/assignments/src/MV3500Cohort2018JulySeptember/projects/LoeffelmanSeverson/package-info.java
+++ b/assignments/src/MV3500Cohort2018JulySeptember/projects/LoeffelmanSeverson/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2018JulySeptember.projects.LoeffelmanSeverson;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework1/BoronTcpExample1Telnet1.java b/assignments/src/MV3500Cohort2019JulySeptember/homework1/BoronTcpExample1Telnet1.java
index 5774af73f1db204ee282e52c2fd6a77a5a929a24..c890de2d389f7bd9fff146e14b349723df6fff35 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework1/BoronTcpExample1Telnet1.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework1/BoronTcpExample1Telnet1.java
@@ -34,7 +34,7 @@ public class BoronTcpExample1Telnet1
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BoronTcpExample1Telnet1 ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework1/BrennenstuhlTcpExample1Telnet.java b/assignments/src/MV3500Cohort2019JulySeptember/homework1/BrennenstuhlTcpExample1Telnet.java
index 2ae8c47391ebaa0a2b6eb6e73700aab52226ca3d..847b252476303c51c5c0c07b66c705140d67e166 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework1/BrennenstuhlTcpExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework1/BrennenstuhlTcpExample1Telnet.java
@@ -33,7 +33,7 @@ public class BrennenstuhlTcpExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BrennenstuhlTcpExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework1/BrutzmanRefactorTcpExample1Telnet.java b/assignments/src/MV3500Cohort2019JulySeptember/homework1/BrutzmanRefactorTcpExample1Telnet.java
index 3c4196fbfa03781d060e8de8e2c348308e3bd0fa..46350d03073fb3d96c5f8e9ee7ba7d6b94e4c424 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework1/BrutzmanRefactorTcpExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework1/BrutzmanRefactorTcpExample1Telnet.java
@@ -33,7 +33,7 @@ public class BrutzmanRefactorTcpExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BrutzmanRefactorTcpExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework1/FetterolfTcpExample1Telnet.java b/assignments/src/MV3500Cohort2019JulySeptember/homework1/FetterolfTcpExample1Telnet.java
index 3e6c1d27d397141d24b355d1b3640a42cb028404..45d2e095c2ebf0205a16f5708dfb61915137e2b7 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework1/FetterolfTcpExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework1/FetterolfTcpExample1Telnet.java
@@ -33,7 +33,7 @@ public class FetterolfTcpExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FetterolfTcpExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework1/KNOBELOCH_TcpExample1Telnet.java b/assignments/src/MV3500Cohort2019JulySeptember/homework1/KNOBELOCH_TcpExample1Telnet.java
index 3f00d4f955b7c312319e01796827b065556be700..ed8d45dc3fe78f5f210fcbdf09327b3a1e2c76c1 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework1/KNOBELOCH_TcpExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework1/KNOBELOCH_TcpExample1Telnet.java
@@ -33,7 +33,7 @@ public class KNOBELOCH_TcpExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public KNOBELOCH_TcpExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework1/McCannTcpExample1Telnet.java b/assignments/src/MV3500Cohort2019JulySeptember/homework1/McCannTcpExample1Telnet.java
index 79e757702db32c14416e8606f69e119946ef1228..b44307f4d509c737490d63b2b48b51b145e3127b 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework1/McCannTcpExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework1/McCannTcpExample1Telnet.java
@@ -33,7 +33,7 @@ public class McCannTcpExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public McCannTcpExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework1/SchuttTcpExample1Telnet.java b/assignments/src/MV3500Cohort2019JulySeptember/homework1/SchuttTcpExample1Telnet.java
index 47b468443a91f94d7a93bbe64f9a4ecfb069fd80..128f95d4d2e9bd032a962b6ade363b58c59d06cb 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework1/SchuttTcpExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework1/SchuttTcpExample1Telnet.java
@@ -33,7 +33,7 @@ public class SchuttTcpExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SchuttTcpExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework1/YURKOVICH_TcpExample1Telnet.java b/assignments/src/MV3500Cohort2019JulySeptember/homework1/YURKOVICH_TcpExample1Telnet.java
index adeba047867669be447cb86c7a0db9ee1f9c849d..f35a8676676953c5150a9cec3c017d9573163f13 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework1/YURKOVICH_TcpExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework1/YURKOVICH_TcpExample1Telnet.java
@@ -33,7 +33,7 @@ public class YURKOVICH_TcpExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public YURKOVICH_TcpExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework1/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/homework1/package-info.java
index 30563b33c5430ae3b19b08575037879e5586f71e..ff0a98bcc9c27819e30d4651420a97d709b8e03b 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework1/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework1/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.homework1;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Boron/BoronClient.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Boron/BoronClient.java
index 4e13afb37671b5b0611e40b861519b218a5c439c..d1c0f7bb8bb8d6ee27bfca737e29d938ad343712 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Boron/BoronClient.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Boron/BoronClient.java
@@ -15,7 +15,7 @@ public class BoronClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BoronClient ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Boron/BoronServer.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Boron/BoronServer.java
index e469700e45759ad316e383f33f6eb88fe1f50287..e7ba766c0034ca8b3e9ab266d883b0eabf50e810 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Boron/BoronServer.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Boron/BoronServer.java
@@ -15,7 +15,7 @@ public class BoronServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BoronServer ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Boron/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Boron/package-info.java
index 42d820e0f9f76b87796f63e281740795b28f8cbb..452f2837273583f23d992045055e302aa6e97842 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Boron/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Boron/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.homework2.Boron;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/ChuckNorris.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/ChuckNorris.java
index 3e21856a8561c478db04070c59cb4c8cfc0e5a53..e902150af380be655117363e3699b15727c5165d 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/ChuckNorris.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/ChuckNorris.java
@@ -13,7 +13,7 @@ public class ChuckNorris
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public ChuckNorris ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/SirTobiClient.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/SirTobiClient.java
index 7c8d2db379bcb356a0acc36445376b98fa688a1e..44fb00210dadd1253fb9fe510bc284e59e4abe4d 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/SirTobiClient.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/SirTobiClient.java
@@ -17,7 +17,7 @@ public class SirTobiClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SirTobiClient ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/SirTobiServer.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/SirTobiServer.java
index d4c24638f48022ab944d73eb212ad83e181185c5..5a3bedaf07133a6770964356d706c1675758673b 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/SirTobiServer.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/SirTobiServer.java
@@ -25,7 +25,7 @@ public class SirTobiServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SirTobiServer ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/package-info.java
index 894c565162686ca3b769ac59f931445288c84535..f073cb4cf4b1a23bfdd6fdb931f0c6cc2c70dab1 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.homework2.Brennenstuhl;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Fetterolf/FetterolfHomework2Client.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Fetterolf/FetterolfHomework2Client.java
index 80a88fd57a93ca8b1cf24fd14926fbf288a310ef..dd880ce9236a414270999a227e050da585a5b1f2 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Fetterolf/FetterolfHomework2Client.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Fetterolf/FetterolfHomework2Client.java
@@ -17,7 +17,7 @@ public class FetterolfHomework2Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FetterolfHomework2Client ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Fetterolf/FetterolfHomework2Server.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Fetterolf/FetterolfHomework2Server.java
index 2eff114c90d6afe990032ba942cd98f684a19ae3..92966d5c28e8fe269bc2c1c16ddf6af4f5918e63 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Fetterolf/FetterolfHomework2Server.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Fetterolf/FetterolfHomework2Server.java
@@ -26,7 +26,7 @@ public class FetterolfHomework2Server
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FetterolfHomework2Server ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Fetterolf/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Fetterolf/package-info.java
index 50c5224dc90e7f3c1ebd5f7275d6a019d446fb5d..ed2f193049a7e161d930bf1f40835ba56b62b259 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Fetterolf/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Fetterolf/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.homework2.Fetterolf;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Knobeloch/Knobeloch_TCPIP_Client.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Knobeloch/Knobeloch_TCPIP_Client.java
index 0b4bb7819c9dc241814221fe91e57ac9c70ffa8f..385d4695edbde11201c573cc387495f40c26d386 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Knobeloch/Knobeloch_TCPIP_Client.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Knobeloch/Knobeloch_TCPIP_Client.java
@@ -18,7 +18,7 @@ public class Knobeloch_TCPIP_Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Knobeloch_TCPIP_Client ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Knobeloch/Knobeloch_TCPIP_Server.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Knobeloch/Knobeloch_TCPIP_Server.java
index 4b708060f978689d5d70a3439a149389b98d052c..1b8eb937aabff3863e73274c03e0ca1a53713e9c 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Knobeloch/Knobeloch_TCPIP_Server.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Knobeloch/Knobeloch_TCPIP_Server.java
@@ -26,7 +26,7 @@ public class Knobeloch_TCPIP_Server
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Knobeloch_TCPIP_Server ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Knobeloch/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Knobeloch/package-info.java
index 359ee56a8e07b913b6c0472afc5c159b8f4ba43b..aa5ce782ae44402f7147f36a4c8c4206a45cd55b 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Knobeloch/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Knobeloch/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.homework2.Knobeloch;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/McCann/McCannClient.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/McCann/McCannClient.java
index 7fc60057aa5a9109edf62534e9418122fc49b3db..7c66716e3d8e9e77996ad24f75379880d499c673 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/McCann/McCannClient.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/McCann/McCannClient.java
@@ -19,7 +19,7 @@ public class McCannClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public McCannClient ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/McCann/McCannServer.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/McCann/McCannServer.java
index 877887974265eb65f037969fef6824957ef9a2a8..4fa738ce7f6cf3d829c6adf8129c9db167e38a3c 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/McCann/McCannServer.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/McCann/McCannServer.java
@@ -17,7 +17,7 @@ public class McCannServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public McCannServer ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/McCann/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/McCann/package-info.java
index 3ad3afef5ca76a8fca36c92cddc58b55c71a98fd..363a5342a0bc55d42326fab38126d82e6cb1fdd5 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/McCann/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/McCann/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.homework2.McCann;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Schutt/SchuttClient.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Schutt/SchuttClient.java
index f3215ae5c294f021ce911a2fcab6917c60ef0da9..b0cbb50026b08dd9473aafc66ab33724b34b9c09 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Schutt/SchuttClient.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Schutt/SchuttClient.java
@@ -13,7 +13,7 @@ public class SchuttClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SchuttClient ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Schutt/SchuttServerDispatcher.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Schutt/SchuttServerDispatcher.java
index c69bcee4517effa5be577863faf3369dd80976f0..045455b2ce31d3261fe15187711ba058a304f33f 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Schutt/SchuttServerDispatcher.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Schutt/SchuttServerDispatcher.java
@@ -13,7 +13,7 @@ public class SchuttServerDispatcher
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SchuttServerDispatcher ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Schutt/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Schutt/package-info.java
index a0f79c1b9a3403f4475fdbdd540c233c38bf5306..623756e06e76ba8b0cfd9445a271602b93b644b5 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Schutt/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Schutt/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.homework2.Schutt;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Yurkovich/Yurkovich_Client.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Yurkovich/Yurkovich_Client.java
index 1240eaab93cfd8359308c18fdfbf174fc7741039..8cf61215ba7d983b61ee4be6030b6acf46cd47df 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Yurkovich/Yurkovich_Client.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Yurkovich/Yurkovich_Client.java
@@ -17,7 +17,7 @@ public class Yurkovich_Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Yurkovich_Client ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Yurkovich/Yurkovich_Server.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Yurkovich/Yurkovich_Server.java
index de60e2325288b0a1824e2dccda1bdb230e6bcfee..5e23ddcc9e3bc5d446a63f78a04b55482313e201 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Yurkovich/Yurkovich_Server.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Yurkovich/Yurkovich_Server.java
@@ -25,7 +25,7 @@ public class Yurkovich_Server
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Yurkovich_Server ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Yurkovich/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Yurkovich/package-info.java
index 7137ffc7b850c71cc90d670c9379f53478da1957..3fd94387ab5ed357c1aca18b66acabd78d6d673e 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Yurkovich/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Yurkovich/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.homework2.Yurkovich;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/package-info.java
index fb1aa4de1733de288829306071530fb9cd2e2ab5..982243947ef7064bebe004a794482cefd35b6507 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.homework2;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Boron/BoronPduReceiver.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Boron/BoronPduReceiver.java
index 5cb7f47c0d8695bbfe9cfd27af8af37e5f2fc950..41ce68f34117438efac1a6043fda11759731286a 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Boron/BoronPduReceiver.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Boron/BoronPduReceiver.java
@@ -20,7 +20,7 @@ public class BoronPduReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BoronPduReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Boron/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Boron/package-info.java
index dc1b6ea728701f5563bfd93ccbf77ed7bf96c6f0..1c900ef4247daacf273c2ae75e2e4ba53464b875 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Boron/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Boron/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.homework4.Boron;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/BrennenstuhlEspduReceiver.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/BrennenstuhlEspduReceiver.java
index 2212bf7e3215012b1200c9cb3222907cc4d19a6b..8c103c32b04f04b4208970003bd53da6978a4451 100755
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/BrennenstuhlEspduReceiver.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/BrennenstuhlEspduReceiver.java
@@ -18,7 +18,7 @@ public class BrennenstuhlEspduReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BrennenstuhlEspduReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/BrennenstuhlEspduSender.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/BrennenstuhlEspduSender.java
index 86607d9a4eb2768d66eb0e41826e5f4bffadee89..842ffe709ee3f76c82b09d4ef0b6fe28120466e2 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/BrennenstuhlEspduSender.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/BrennenstuhlEspduSender.java
@@ -21,7 +21,7 @@ public class BrennenstuhlEspduSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BrennenstuhlEspduSender ()
     {
@@ -43,13 +43,13 @@ public class BrennenstuhlEspduSender
     /** Type of network connection */
 	public enum NetworkMode {
         /** Unicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 	UNICAST,
         /** Multicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** Unicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
 
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/Version2/AllPduReceiver.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/Version2/AllPduReceiver.java
index abfa1c295e9a4ce429f73f8720a2051567175ec8..cd1d56145a3f6d68c8c1ef17c5f79bae46731e26 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/Version2/AllPduReceiver.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/Version2/AllPduReceiver.java
@@ -15,7 +15,7 @@ public class AllPduReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public AllPduReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/Version2/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/Version2/package-info.java
index 6cf2ad1d4e3b5104c8b6e7cc4423ca6045150cfb..1c0a3578ba517d02d1227c7ccf0a310452cd7900 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/Version2/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/Version2/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.homework4.Brennenstuhl.Version2;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/package-info.java
index 6bfe8d1455e699fec55cee9df2c290288fa23a80..d3ec336bc95281ce2b05eec44445afc26e17458d 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Brennenstuhl/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.homework4.Brennenstuhl;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Fetterolf/FetterolfPduListenerSaver.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Fetterolf/FetterolfPduListenerSaver.java
index 850e7b1d79535be5fde93cd1a40e9a162d875d72..bda436bee3febc16a74e0379b43daaa179fad42e 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Fetterolf/FetterolfPduListenerSaver.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Fetterolf/FetterolfPduListenerSaver.java
@@ -19,7 +19,7 @@ public class FetterolfPduListenerSaver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FetterolfPduListenerSaver ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Fetterolf/FetterolfPduReceiver.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Fetterolf/FetterolfPduReceiver.java
index b23133fc476e20b9496e6d3cc7656c9d608b6a81..fafea85643cf0d226fb564e0c4fb18077c28734d 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Fetterolf/FetterolfPduReceiver.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Fetterolf/FetterolfPduReceiver.java
@@ -13,7 +13,7 @@ public class FetterolfPduReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FetterolfPduReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Fetterolf/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Fetterolf/package-info.java
index 36cb48ca7f63717742410fe3882a96022740d902..b4e04e914990b45ef4bdbe146e07a2c73f3c7c61 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Fetterolf/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Fetterolf/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.homework4.Fetterolf;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Knobeloch/Knobeloch_PduReceiver.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Knobeloch/Knobeloch_PduReceiver.java
index bc6a52e74866184f8c660fb16c8180ddee67f510..e9df0051113149b2c3d08141be80905363e0d7fe 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Knobeloch/Knobeloch_PduReceiver.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Knobeloch/Knobeloch_PduReceiver.java
@@ -14,17 +14,17 @@ public class Knobeloch_PduReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Knobeloch_PduReceiver ()
     {
         // default initializations occur here
     }
     /** network address of interest
-     * @see <a href="https://en.wikipedia.org/wiki/IP_address">https://en.wikipedia.org/wiki/IP_address</a> */
+     * @see <a href="https://en.wikipedia.org/wiki/IP_address" target="_blank">https://en.wikipedia.org/wiki/IP_address</a> */
    public static final String DEFAULT_MULTICAST_ADDRESS = Knobeloch_PduSender.DEFAULT_MULTICAST_ADDRESS;
     /** port of interest
-     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
   public static final int DEFAULT_MULTICAST_PORT = Knobeloch_PduSender.DEFAULT_MULTICAST_PORT;
   static final boolean USE_FAST_ESPDU = false;
 
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Knobeloch/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Knobeloch/package-info.java
index 5ea91bd96babf791c33836a6c9daf9de40b7c284..86ccf950c38e822fc5e38ecaca75b9b32de415a7 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Knobeloch/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Knobeloch/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.homework4.Knobeloch;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/McCann/McCannPduReceiver.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/McCann/McCannPduReceiver.java
index 9a3ca15acc1d9714df9b62a41c41351af777d07c..fa3c8df4f78ca421ee93ffc17f9cdcf3151739e9 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/McCann/McCannPduReceiver.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/McCann/McCannPduReceiver.java
@@ -15,7 +15,7 @@ public class McCannPduReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public McCannPduReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/McCann/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/McCann/package-info.java
index 9fc517467e8c4f8ea7bf5bb61265f959aa2e439c..e5852c048998d3edb9218f9d68ff7065932cd482 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/McCann/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/McCann/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.homework4.McCann;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Schutt/SchuttESPDUSender.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Schutt/SchuttESPDUSender.java
index 220daafdbb802b40371f15b25bc70b0ae8f215d2..1a0cd2af6e6fb1a8561ef3ecf4704c24fc33ce60 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Schutt/SchuttESPDUSender.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Schutt/SchuttESPDUSender.java
@@ -28,7 +28,7 @@ public class SchuttESPDUSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SchuttESPDUSender ()
     {
@@ -50,13 +50,13 @@ public class SchuttESPDUSender
     /** Type of network connection */
 	public enum NetworkMode {
         /** enumeration value
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 		UNICAST,
         /** enumeration value
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** enumeration value
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
 
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Schutt/SchuttEspduReceiver.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Schutt/SchuttEspduReceiver.java
index 462059ffb2a0b05d4efaa2489fae9d907edec754..fa56a5450db047ee143a1fca0c32bb12d8d4e06e 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Schutt/SchuttEspduReceiver.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Schutt/SchuttEspduReceiver.java
@@ -19,7 +19,7 @@ public class SchuttEspduReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SchuttEspduReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Schutt/SchuttPDUSaverListener.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Schutt/SchuttPDUSaverListener.java
index 1d50300d68219845d00d5c01e661c75953514ca3..5ad4c2145314c3f5e0a55de8d7f969c1e558990a 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Schutt/SchuttPDUSaverListener.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Schutt/SchuttPDUSaverListener.java
@@ -19,7 +19,7 @@ public class SchuttPDUSaverListener
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SchuttPDUSaverListener ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Schutt/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Schutt/package-info.java
index 5c40c1ca1fa79ee74af9ef1332771d1486d01bc9..18928a3104e2c3d33f9bc4a7677771a822c21488 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Schutt/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Schutt/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.homework4.Schutt;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Yurkovich/Yurk_EspduReceiver.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Yurkovich/Yurk_EspduReceiver.java
index 783f5e0a5fef789fabde5a3ffc60ff8170d686a7..19307314a940fad97a305f378901108a912bcba6 100755
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Yurkovich/Yurk_EspduReceiver.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Yurkovich/Yurk_EspduReceiver.java
@@ -18,7 +18,7 @@ public class Yurk_EspduReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Yurk_EspduReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Yurkovich/Yurk_EspduSender.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Yurkovich/Yurk_EspduSender.java
index 2721f764fca2d52b0dcc698261660ed6fe4b3a38..4b35cfdb56e4b9745516051d98466fa1946083b9 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Yurkovich/Yurk_EspduSender.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Yurkovich/Yurk_EspduSender.java
@@ -18,7 +18,7 @@ public class Yurk_EspduSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Yurk_EspduSender ()
     {
@@ -39,13 +39,13 @@ public class Yurk_EspduSender
     /** Type of network connection */
 	public enum NetworkMode {
         /** enumeration value
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 		UNICAST,
         /** enumeration value
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** enumeration value
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
 
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Yurkovich/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Yurkovich/package-info.java
index f7c3ed21f280672aae5d0e2f44e2d928a9d1d034..8e10c4dd3c2927df8e2e8e18225c1985a06f3dc9 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework4/Yurkovich/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/Yurkovich/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.homework4.Yurkovich;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC1_MCAST_PduSender.java b/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC1_MCAST_PduSender.java
index 28a7c3158c8137a485b2a41901d3218ec169276e..825d9a7088e865156716670fafa903c99c2b0a9a 100755
--- a/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC1_MCAST_PduSender.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC1_MCAST_PduSender.java
@@ -14,7 +14,7 @@ public class BRE_KNO_MCC_PC1_MCAST_PduSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BRE_KNO_MCC_PC1_MCAST_PduSender ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC2_Controller.java b/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC2_Controller.java
index 8415196a9f2c8d6df151cf5be2c4852c60773c3b..d1c476c05c989c076016c5fb3398eeb11a68365a 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC2_Controller.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC2_Controller.java
@@ -12,7 +12,7 @@ public class BRE_KNO_MCC_PC2_Controller
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BRE_KNO_MCC_PC2_Controller ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC2_PC1_MCAST_PduReceiver.java b/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC2_PC1_MCAST_PduReceiver.java
index 403e3f3629db624679eca3220b7ba88d593006a7..69fe955c78c4eca2c38584eea2acf2e14f6fa2d5 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC2_PC1_MCAST_PduReceiver.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC2_PC1_MCAST_PduReceiver.java
@@ -19,7 +19,7 @@ public class BRE_KNO_MCC_PC2_PC1_MCAST_PduReceiver extends Thread
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BRE_KNO_MCC_PC2_PC1_MCAST_PduReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC2_PC3_UNICAST_PduReceiver.java b/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC2_PC3_UNICAST_PduReceiver.java
index 9e0d39867af85b7b7b6a2c3af005d609924c64d3..839023746ac439c6a4cff06659175715d81699fd 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC2_PC3_UNICAST_PduReceiver.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC2_PC3_UNICAST_PduReceiver.java
@@ -10,7 +10,7 @@ public class BRE_KNO_MCC_PC2_PC3_UNICAST_PduReceiver extends Thread
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BRE_KNO_MCC_PC2_PC3_UNICAST_PduReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender.java b/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender.java
index f0a32aaeb24a69e7363ba6b4d82b076ce44e3029..cb0e605a1977435ed6d418caafaf1ec1ab156fc7 100755
--- a/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender.java
@@ -22,7 +22,7 @@ public class BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender extends Thread
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC3_PC2_UNICAST_PduReceiver.java b/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC3_PC2_UNICAST_PduReceiver.java
index 756812a3045ceb07d7951909c3a3f712551ee117..bc2b6406d84d785c041cbd3c5a47052bf2020b84 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC3_PC2_UNICAST_PduReceiver.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/BRE_KNO_MCC_PC3_PC2_UNICAST_PduReceiver.java
@@ -14,7 +14,7 @@ public class BRE_KNO_MCC_PC3_PC2_UNICAST_PduReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BRE_KNO_MCC_PC3_PC2_UNICAST_PduReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/package-info.java
index d42efba72561bbc7d806b9452d72f051b0d9df03..f99eac8fe0c01bac5aa24a192af84c0b46eef5ca 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.projects.BrennenstuhlKnobelochMcCann;
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/projects/SchuttFetterolf/package-info.java b/assignments/src/MV3500Cohort2019JulySeptember/projects/SchuttFetterolf/package-info.java
index 3ba0baa71951384fd8b837d99cc4603f15446601..37417c18fcc90cf57871253cdcc9ff720d5e6e2d 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/projects/SchuttFetterolf/package-info.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/projects/SchuttFetterolf/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2019JulySeptember.projects.SchuttFetterolf;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework1/BrittTcPExample1Telnet.java b/assignments/src/MV3500Cohort2020JulySeptember/homework1/BrittTcPExample1Telnet.java
index 519278e9244bf02dec726a971130d519329f8263..85f7aa095118edd0ce3d2e155c0495b903e3b657 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework1/BrittTcPExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework1/BrittTcPExample1Telnet.java
@@ -16,7 +16,7 @@ public class BrittTcPExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BrittTcPExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework1/BrutzmanRefactorTcpExample1Telnet.java b/assignments/src/MV3500Cohort2020JulySeptember/homework1/BrutzmanRefactorTcpExample1Telnet.java
index 15a73e2d2683e6e976930eca151c93ed8f784879..172b48c28d7e7aedb68e4ef15c37fa69e6194e10 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework1/BrutzmanRefactorTcpExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework1/BrutzmanRefactorTcpExample1Telnet.java
@@ -34,7 +34,7 @@ public class BrutzmanRefactorTcpExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public BrutzmanRefactorTcpExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework1/CannonTcpExample1Telnet.java b/assignments/src/MV3500Cohort2020JulySeptember/homework1/CannonTcpExample1Telnet.java
index 7cc655ee9472d127560b584ecf7bff9b5c374317..e37da707c84ec598b07945c6e6fad042b11065e3 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework1/CannonTcpExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework1/CannonTcpExample1Telnet.java
@@ -15,7 +15,7 @@ public class CannonTcpExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public CannonTcpExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework1/GaribayTCPExample1Telnet.java b/assignments/src/MV3500Cohort2020JulySeptember/homework1/GaribayTCPExample1Telnet.java
index cedcf3369f7f7e8a43d3fc31457356f2d529a4eb..ddd3050d31b467e7f0c34a898564a86969fd868e 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework1/GaribayTCPExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework1/GaribayTCPExample1Telnet.java
@@ -17,7 +17,7 @@ public class GaribayTCPExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public GaribayTCPExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework1/GoerickeTcpExample1Telnet.java b/assignments/src/MV3500Cohort2020JulySeptember/homework1/GoerickeTcpExample1Telnet.java
index 586c3df72addba35244712573b3063a4cccb7c07..fb43f6122c7ee1c8a325eeeaa3493a0af0aefc97 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework1/GoerickeTcpExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework1/GoerickeTcpExample1Telnet.java
@@ -15,7 +15,7 @@ public class GoerickeTcpExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public GoerickeTcpExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework1/MahanTCPExample1Telnet.java b/assignments/src/MV3500Cohort2020JulySeptember/homework1/MahanTCPExample1Telnet.java
index ff0107ca1a5735c6b9b508fad03b07bc09417db6..c03af0d2a2e707ddb6ee668a3b9a59b5e0d275ee 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework1/MahanTCPExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework1/MahanTCPExample1Telnet.java
@@ -15,7 +15,7 @@ public class MahanTCPExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public MahanTCPExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework1/WeissenbergerTcpExample1Telnet.java b/assignments/src/MV3500Cohort2020JulySeptember/homework1/WeissenbergerTcpExample1Telnet.java
index 3d141c24f41acadefc33d515248cbec5ebef992b..bc827fb111c68582aad3f965a49328dddd52b759 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework1/WeissenbergerTcpExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework1/WeissenbergerTcpExample1Telnet.java
@@ -17,7 +17,7 @@ public class WeissenbergerTcpExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public WeissenbergerTcpExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework1/WhiteTcpExample1Telnet.java b/assignments/src/MV3500Cohort2020JulySeptember/homework1/WhiteTcpExample1Telnet.java
index 061c30e2b00a34e0c62989cbebaaa559e146ad81..93f0e5d46d074c025b898c32c25f9819b60af574 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework1/WhiteTcpExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework1/WhiteTcpExample1Telnet.java
@@ -34,7 +34,7 @@ public class WhiteTcpExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public WhiteTcpExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework1/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework1/package-info.java
index 4480dcb51990dbb0e2e067d8ad307e22962b84ee..9b127f6b296d414f5d243c2ac5b324eda38a0f24 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework1/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework1/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework1;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Britt/Britt_Client.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Britt/Britt_Client.java
index 40c08684c4bccfd95a9d4c9daad5d73e9d6e576b..f87343a20500263d3274d8f45a2629a5c52e18e8 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Britt/Britt_Client.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Britt/Britt_Client.java
@@ -18,7 +18,7 @@ public class Britt_Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Britt_Client ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Britt/Britt_Server.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Britt/Britt_Server.java
index 42a78e6ee1ac7550d0114d8e1b65b2c5b165fe6f..2203a925dbf94f0f02221a49148bb294ad0435ed 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Britt/Britt_Server.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Britt/Britt_Server.java
@@ -20,7 +20,7 @@ public class Britt_Server
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Britt_Server ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Britt/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Britt/package-info.java
index 634b660bec935258662ef1eee2daf0b6600941a7..2b420d2cbad6da10493dca321c53987dab3db6af 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Britt/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Britt/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework2.Britt;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Cannon/CannonClient.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Cannon/CannonClient.java
index 24567797e925fa74d06d5a05e5766fbe379e4570..6a4333e52d0e63e1b17c17ccdb86244d5938b5bb 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Cannon/CannonClient.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Cannon/CannonClient.java
@@ -24,7 +24,7 @@ public class CannonClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public CannonClient ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Cannon/CannonServer.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Cannon/CannonServer.java
index 36f98c0ef2af2760b1b79235e3218c102f809cbb..0d5b01f4bd6b2cedbdde092f91f2c48f2d15e99a 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Cannon/CannonServer.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Cannon/CannonServer.java
@@ -34,7 +34,7 @@ public class CannonServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public CannonServer ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Cannon/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Cannon/package-info.java
index 5fde5c7079000378478457a830de5ab4a352236a..4341ebebfdbd467fa6738a03b3ac1428e6614e9f 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Cannon/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Cannon/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework2.Cannon;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Garibay/GaribayClient.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Garibay/GaribayClient.java
index 962bd4db8125a62020e13b138a525b35371fe803..c1f70ef448bb54703a651349b6e678c8ad91dff2 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Garibay/GaribayClient.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Garibay/GaribayClient.java
@@ -10,7 +10,7 @@ public class GaribayClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public GaribayClient ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Garibay/GaribayServer.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Garibay/GaribayServer.java
index 596e6a04f16612551eeb9eb4118215f8ddf1d25a..b420ccd963b8d67ace15b916165594af66fa0174 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Garibay/GaribayServer.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Garibay/GaribayServer.java
@@ -11,7 +11,7 @@ public class GaribayServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public GaribayServer ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Garibay/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Garibay/package-info.java
index 96c04a14b1c08832d32d886854a62e36ce6c6f3e..0f2d64e8ce17c29657165653aeac2c891ca6d97b 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Garibay/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Garibay/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework2.Garibay;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Goericke/GoerickeClient.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Goericke/GoerickeClient.java
index 964415ad11ed5a6d940ed6ef66e5e69d10e960a2..e61fd4e4cdfe545d08f3281d77d0f8620f31d11f 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Goericke/GoerickeClient.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Goericke/GoerickeClient.java
@@ -17,7 +17,7 @@ public class GoerickeClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public GoerickeClient ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Goericke/GoerickeServer.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Goericke/GoerickeServer.java
index f00516e89b839c1927fc693b170869a825332e8c..731bf6f4a57eef29c48f6104980813498ac710d4 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Goericke/GoerickeServer.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Goericke/GoerickeServer.java
@@ -18,7 +18,7 @@ public class GoerickeServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public GoerickeServer ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Goericke/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Goericke/package-info.java
index ad78a05f6ed26b70d73d69d39840c740641259a3..fac84f31aa2bef589fdafa798b7442798c49a452 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Goericke/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Goericke/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework2.Goericke;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Client.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Client.java
index da4982d22155428fdb57404f5e3aad01d0b228c7..8903fa0fee45275cfbdbf5551bb59d8e1d197e58 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Client.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Client.java
@@ -10,7 +10,7 @@ public class Mahan_Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Mahan_Client ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Server.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Server.java
index 2c3b82995da3adff7b4a334cc3af59d528ef598b..59eef23ec6b9ac4433907bba61f15779495e50f7 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Server.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Server.java
@@ -11,7 +11,7 @@ public class Mahan_Server
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Mahan_Server ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/package-info.java
index 4bfb49a8fbea5581664937613b9c878a509c6c51..b691cb9edc348bffd49d84ff655c6649fccbf695 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework2.Mahan;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Weissenberger/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Weissenberger/package-info.java
index df6784b2482884f5e62993d9cdaebc1233cbaa56..a405d4e9670e74dbd1fda7341a03037ff771f327 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Weissenberger/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Weissenberger/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework2.Weissenberger;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/White/WhiteClient.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/White/WhiteClient.java
index 38ace02388f6755c0fce2d52ce485168bf701441..1182d60fa2dd4b63afc67677da163673921b01ba 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/White/WhiteClient.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/White/WhiteClient.java
@@ -18,7 +18,7 @@ public class WhiteClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public WhiteClient ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/White/WhiteServer.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/White/WhiteServer.java
index e0640dfce6784c45e7c43a6ef0504d48fff23176..9c9d796c84077a175db820688097e5859e692c3c 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/White/WhiteServer.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/White/WhiteServer.java
@@ -26,7 +26,7 @@ public class WhiteServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public WhiteServer ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/White/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/White/package-info.java
index cb54f7145ad7e21c9b81b694860acc12e3deb498..e2602aa6005cd0cc02582690ae6801e89acfadf9 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/White/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/White/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework2.White;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/package-info.java
index 22dd72b6e8633472929b4634231e2bdffa268f3a..3d81050e3f0cf53cf8aed70101180a9eb3f2604d 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework2;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Britt/UdpReceiver.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Britt/UdpReceiver.java
index 67bdda17d113fb5a09f175a11bc7380304d39f47..b6c42571b3b63e3fac4f879addd83ae7c5b553e2 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Britt/UdpReceiver.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Britt/UdpReceiver.java
@@ -10,8 +10,8 @@ import java.net.*;
  * 
  * Start this before launching UdpSender.
  * 
- * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
- * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html" target="_blank">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
+ * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol" target="_blank">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
  * @author mcgredo
  * @author brutzman
  */
@@ -19,7 +19,7 @@ public class UdpReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public UdpReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Britt/UdpSender.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Britt/UdpSender.java
index 6d7009787bf3bbd507550eb4a81ddb848514be22..d2a2ea6531122af8074e235c51717148bb477dbc 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Britt/UdpSender.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Britt/UdpSender.java
@@ -11,9 +11,9 @@ import java.net.*;
  * 
  * Start this before launching UdpReceiver.
  * 
- * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
- * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
- * @see <a href="https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html">System properties</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html" target="_blank">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
+ * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol" target="_blank">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html" target="_blank">System properties</a>
  * @author mcgredo
  * @author brutzman
  */
@@ -21,7 +21,7 @@ public class UdpSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public UdpSender ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Britt/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Britt/package-info.java
index daf32433d38ef39f9fd911b2dfa5dfae5458cbe9..29521620e06c26e5e7491bb60f4318d81eead648 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Britt/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Britt/package-info.java
@@ -1,10 +1,10 @@
 /**
  * UDP datagram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework3.Britt;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Cannon/CannonUdpReceiver.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Cannon/CannonUdpReceiver.java
index 890f83d154c69c3111b1bd2e667a2874feba706f..4d4cadd2cb9dad71de476e5110d80f73644a6001 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Cannon/CannonUdpReceiver.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Cannon/CannonUdpReceiver.java
@@ -10,8 +10,8 @@ import java.net.*;
  * 
  * Start this before launching UdpSender.
  * 
- * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
- * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html" target="_blank">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
+ * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol" target="_blank">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
  * @author mcgredo
  * @author brutzman
  */
@@ -19,7 +19,7 @@ public class CannonUdpReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public CannonUdpReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Cannon/CannonUdpSender.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Cannon/CannonUdpSender.java
index 935e03a4d837c08ad9f4241cc5c15afe98fe1905..aae8b29e41db63f4fd72e4e363c0b6ad164f7491 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Cannon/CannonUdpSender.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Cannon/CannonUdpSender.java
@@ -11,9 +11,9 @@ import java.net.*;
  * 
  * Start this before launching UdpReceiver.
  * 
- * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
- * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
- * @see <a href="https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html">System properties</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html" target="_blank">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
+ * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol" target="_blank">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html" target="_blank">System properties</a>
  * @author mcgredo
  * @author brutzman
  */
@@ -21,7 +21,7 @@ public class CannonUdpSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public CannonUdpSender ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Cannon/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Cannon/package-info.java
index eff0625267e247cb1855ab104e6cfc2a7f7c3bab..5d1964a6bdee457f29dd8c0e66680308b0e81764 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Cannon/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Cannon/package-info.java
@@ -1,10 +1,10 @@
 /**
  * UDP datagram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework3.Cannon;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Garibay/UDPReceiverGaribay.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Garibay/UDPReceiverGaribay.java
index 9ad7897d678e2be4a5305762c827a78f3c898212..0f479bc32a14ff2bbf4163cf88105d0dfdeb411e 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Garibay/UDPReceiverGaribay.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Garibay/UDPReceiverGaribay.java
@@ -15,7 +15,7 @@ public class UDPReceiverGaribay
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public UDPReceiverGaribay ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Garibay/UDPSenderGaribay.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Garibay/UDPSenderGaribay.java
index cfacc9a6c19a252e8c92b5406dde32cb4b45d1fd..1b4bec0879be96b0ded45b9d8689228a45180905 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Garibay/UDPSenderGaribay.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Garibay/UDPSenderGaribay.java
@@ -16,7 +16,7 @@ public class UDPSenderGaribay
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public UDPSenderGaribay ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Garibay/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Garibay/package-info.java
index 4e1ec6ddc2306fc59f6ca520176e89897f2a09c3..1bb89aa72df9b8685849f4f5df924abf6d04b9ba 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Garibay/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Garibay/package-info.java
@@ -1,10 +1,10 @@
 /**
  * UDP datagram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework3.Garibay;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Goericke/TCPNumberReceiverUDPResultSender.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Goericke/TCPNumberReceiverUDPResultSender.java
index 8dd6e7181a9d047550e8ee79e7026fecea73c3b3..7ea27b4e945a85a7317571144b08c89d6d8f85d2 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Goericke/TCPNumberReceiverUDPResultSender.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Goericke/TCPNumberReceiverUDPResultSender.java
@@ -23,7 +23,7 @@ public class TCPNumberReceiverUDPResultSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public TCPNumberReceiverUDPResultSender ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Goericke/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Goericke/package-info.java
index 902b9b5afc00373264dc07bb9c02c24003faf43d..8925d7f8e21b3512845da48574d0ca1f86a83efa 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Goericke/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Goericke/package-info.java
@@ -1,10 +1,10 @@
 /**
  * UDP datagram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework3.Goericke;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/MahanUdpReceiver.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/MahanUdpReceiver.java
index ce7126d7694c91fe839085e4e12f0bf4dc3cc092..6de12f00ede5b509218621d138f24eb6f3e055e2 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/MahanUdpReceiver.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/MahanUdpReceiver.java
@@ -11,7 +11,7 @@ public class MahanUdpReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public MahanUdpReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/MahanUdpSender.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/MahanUdpSender.java
index f8f50af1a17791f3334625266c89252a365debc5..00a7b3803724c25d5e3a40b0b1ee095756c95fa9 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/MahanUdpSender.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/MahanUdpSender.java
@@ -11,7 +11,7 @@ public class MahanUdpSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public MahanUdpSender ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/package-info.java
index d2cc959f5c9e734abc98d62c022e17bf84cb04dc..237feb7699114f1c14fd31c5b13db8232e618578 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/package-info.java
@@ -1,10 +1,10 @@
 /**
  * UDP datagram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework3.Mahan;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/TCPNumberSender.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/TCPNumberSender.java
index 087f8d63b12b0139a17f49c9b81e98044ec88809..4e31c3fc833c49204b015afde58578a0581e2307 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/TCPNumberSender.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/TCPNumberSender.java
@@ -18,7 +18,7 @@ public class TCPNumberSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public TCPNumberSender ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/UDPResultReceiver.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/UDPResultReceiver.java
index adc6bcb2bccaed65673a2112e38c717ec28a65fd..5fb012ebe1e6fccd46a8b64a34d9c6abe4454807 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/UDPResultReceiver.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/UDPResultReceiver.java
@@ -18,7 +18,7 @@ public class UDPResultReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public UDPResultReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/package-info.java
index f8883ebf6206f4a688539c9b4cc0587b7831a577..904ad411fca1549fecefc46d70a7af9215f492bf 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/package-info.java
@@ -1,10 +1,10 @@
 /**
  * UDP datagram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework3.Weissenberger;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/WeissenbergerGoericke/TCPNumberReceiverUDPResultSender.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/WeissenbergerGoericke/TCPNumberReceiverUDPResultSender.java
index 60393aeb6bf7386d23359dbcabdd8562f9c42982..4716633d683034c5ab15e2c7d17129fc5b130d3f 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/WeissenbergerGoericke/TCPNumberReceiverUDPResultSender.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/WeissenbergerGoericke/TCPNumberReceiverUDPResultSender.java
@@ -23,7 +23,7 @@ public class TCPNumberReceiverUDPResultSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public TCPNumberReceiverUDPResultSender ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/WeissenbergerGoericke/TCPNumberSender.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/WeissenbergerGoericke/TCPNumberSender.java
index 6bcf7955214837e34031a4fac491ff2025fbf15b..a4e1c9135a7602b04194f1381bdd2377b2d844c9 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/WeissenbergerGoericke/TCPNumberSender.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/WeissenbergerGoericke/TCPNumberSender.java
@@ -18,7 +18,7 @@ public class TCPNumberSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public TCPNumberSender ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/WeissenbergerGoericke/UDPResultReceiver.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/WeissenbergerGoericke/UDPResultReceiver.java
index 46a8edea1cd928d75d853182e81159d93827e5c3..84d2cc967f066b83e8cca6297ef47acfb5f13e37 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/WeissenbergerGoericke/UDPResultReceiver.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/WeissenbergerGoericke/UDPResultReceiver.java
@@ -18,14 +18,14 @@ public class UDPResultReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public UDPResultReceiver ()
     {
         // default initializations
     }
     /** port of interest
-     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
     public static final int    RECEIVING_PORT = 1415;
 
     /**
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/WeissenbergerGoericke/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/WeissenbergerGoericke/package-info.java
index b744fdba7659265ff23fda31fb93d7760cb43902..6bb9dc313ac4bdeb080f412a502f4811c1ab8677 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/WeissenbergerGoericke/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/WeissenbergerGoericke/package-info.java
@@ -1,10 +1,10 @@
 /**
  * UDP datagram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework3.WeissenbergerGoericke;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/White/UdpReceiver.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/White/UdpReceiver.java
index 9117a797b57df273b81b3b4028994175661c8b9f..f0ed882aa5f266ab349d11209dfbb2e962d77743 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/White/UdpReceiver.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/White/UdpReceiver.java
@@ -10,8 +10,8 @@ import java.net.*;
  * 
  * Start this before launching UdpSender.
  * 
- * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
- * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html" target="_blank">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
+ * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol" target="_blank">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
  * @author mcgredo
  * @author brutzman
  */
@@ -19,7 +19,7 @@ public class UdpReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public UdpReceiver ()
     {
@@ -27,7 +27,7 @@ public class UdpReceiver
     }
 //  public static final int       SENDING_PORT = 1414; // port used by UdpSender, unneeded here
     /** port of interest
-     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
     public static final int     RECEIVING_PORT = 1415;
     private static final String DESTINATION_HOST = "localhost";
 
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/White/UdpSender.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/White/UdpSender.java
index 7c2616d69bb4fcc67d7b5d1573df22382e270358..58179b3afc890c5eb25996303135c0a1d8361057 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/White/UdpSender.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/White/UdpSender.java
@@ -11,9 +11,9 @@ import java.net.*;
  * 
  * Start this before launching UdpReceiver.
  * 
- * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
- * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
- * @see <a href="https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html">System properties</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html" target="_blank">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
+ * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol" target="_blank">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html" target="_blank">System properties</a>
  * @author mcgredo
  * @author brutzman
  */
@@ -21,7 +21,7 @@ public class UdpSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public UdpSender ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/White/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/White/package-info.java
index 38d7f8bd235d3e67506435ebc3867eb87eaa2b7f..7977ad00e953855657765f2410767fddb3c0dd57 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/White/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/White/package-info.java
@@ -1,10 +1,10 @@
 /**
  * UDP datagram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework3.White;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/BrittSimulation.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/BrittSimulation.java
index d71bd39fbcbdac32eb6382a3dd287aa01bc8be0d..0c2e49a1dc903378ce50fd46b71f56a06c3ea65e 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/BrittSimulation.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/BrittSimulation.java
@@ -138,7 +138,7 @@ public class BrittSimulation
 
     /**
      * Send EntityState, Fire, Comment PDUs
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing the narrative comment
@@ -176,7 +176,7 @@ public class BrittSimulation
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/EspduSender.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/EspduSender.java
index bab47f015f1e303e10937221c8ebd7e9828c0410..9321f84ff772770333c35f9881147e5e9e453db6 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/EspduSender.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/EspduSender.java
@@ -23,7 +23,7 @@ public class EspduSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public EspduSender ()
     {
@@ -47,13 +47,13 @@ public class EspduSender
     /** Type of network connection */
 	public enum NetworkMode {
         /** Unicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Unicast">https://en.wikipedia.org/wiki/Unicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
 	UNICAST,
         /** Multicast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Multicast">https://en.wikipedia.org/wiki/Multicast</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
         MULTICAST,
         /** Broadcast network mode
-         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
         BROADCAST
 	};
     
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/ExampleSimulationProgram.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/ExampleSimulationProgram.java
index eef45fd5aba7ea473869233494b70b043571980b..f6f62b9341e4c6cce2eb814c62ca93f2fb929df8 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/ExampleSimulationProgram.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/ExampleSimulationProgram.java
@@ -128,7 +128,7 @@ public class ExampleSimulationProgram
 
     /**
      * Send EntityState, Fire, Comment PDUs
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing the narrative comment
@@ -166,7 +166,7 @@ public class ExampleSimulationProgram
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/PDUReceiver.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/PDUReceiver.java
index f2bb4baf9d41dd36dc433f9775940800529f5c4e..4a91deb39e5cdbc3c96f099bbd13675d427e0403 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/PDUReceiver.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/PDUReceiver.java
@@ -18,7 +18,7 @@ public class PDUReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public PDUReceiver ()
     {
@@ -36,13 +36,13 @@ public class PDUReceiver
      * Default port used, matches Wireshark DIS capture default
      */
     /** port of interest
-     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
     public static final int DEFAULT_PORT = 2317;
     /** port of interest
-     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
     public static final int SECOND_PORT = 3000;
     /** port of interest
-     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
     public static final int THIRD_PORT = 2318;
     
     
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/package-info.java
index 36b75ea537e5c5922d56320aba1cea5e0b1a2f56..51ccdb85d4066c2b25da1430e04d6aa487ded32d 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Britt/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework4.Britt;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Cannon/CannonArtillerySimulation.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Cannon/CannonArtillerySimulation.java
index 7487d210eba85d4f5a1c12a43d9ddec745628215..ae05237849fac5ae6ceeaa3475441ab64648801c 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Cannon/CannonArtillerySimulation.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Cannon/CannonArtillerySimulation.java
@@ -133,7 +133,7 @@ public class CannonArtillerySimulation {
      * Send EntityState, Fire, Comment PDUs
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing
+     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing
      * Information to a Method or a Constructor</a> Arbitrary Number of
      * Arguments
      * @param entityStatePdu the ESPDU to send, if any
@@ -174,7 +174,7 @@ public class CannonArtillerySimulation {
      * Main method is first executed when a program instance is loaded.
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java
+     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java
      * Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String
      * parameters that are passed from execution environment during invocation
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Cannon/PDUReceiver.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Cannon/PDUReceiver.java
index 0ea5b0aac8c4377db75196430b56af7fbf25cc70..cda17f958d7beaa0334601057734662469ff9a3b 100755
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Cannon/PDUReceiver.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Cannon/PDUReceiver.java
@@ -19,7 +19,7 @@ public class PDUReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public PDUReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Cannon/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Cannon/package-info.java
index 745526c714cde5d2e378e53d92dcf67a4617e4cb..6182e3d479456f6293c91a5220c64b32165bae96 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Cannon/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Cannon/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework4.Cannon;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Garibay/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Garibay/package-info.java
index 6c4ece3da1b1f38db85b7512d0b81196359277a0..a0a4a39b3d5449ffa42af081b9a6b9faae568415 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Garibay/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Garibay/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework4.Garibay;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Mahan/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Mahan/package-info.java
index e23181b5b9fa41090e35f8d2b8371d68316cc022..bafe46e5b58b14bfba7c82030c0b20a8e7c026bd 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/Mahan/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/Mahan/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework4.Mahan;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/GermanyEspduReceiverEspduVPNSender.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/GermanyEspduReceiverEspduVPNSender.java
index 2feb2ee748912f56223fb819bded02449c33a184..ac0aeebeab84373e196b6fb5ca98a1d85619f90a 100755
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/GermanyEspduReceiverEspduVPNSender.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/GermanyEspduReceiverEspduVPNSender.java
@@ -21,7 +21,7 @@ public class GermanyEspduReceiverEspduVPNSender
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public GermanyEspduReceiverEspduVPNSender ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/GermanyEspduVPNReceiver.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/GermanyEspduVPNReceiver.java
index f78e8444a002e18c458989ba170700ce2d24c65c..c640a672454fc85e354f31ef9ac22b9e4cb895cd 100755
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/GermanyEspduVPNReceiver.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/GermanyEspduVPNReceiver.java
@@ -18,7 +18,7 @@ public class GermanyEspduVPNReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public GermanyEspduVPNReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/package-info.java
index 663a5e4d75c55367b6d6dccdc800303fcc975c0f..706cd13afc6682db3f11b24ddcb6083352843158 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework4.WeissenbergerGoericke;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/package-info.java
index 2176721dbc4e7fdf5eaa12600068fc39400db769..543f3e8bd72383300e465bf21487b2ea300e9eba 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework4.White;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/test/PDUReceiver.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/test/PDUReceiver.java
index 002cca4fb5b229d2f9876a6355f1ca6d678580f8..164571c1e3681af1edf4594c97efd344bc7217f1 100755
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/test/PDUReceiver.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/test/PDUReceiver.java
@@ -19,7 +19,7 @@ public class PDUReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public PDUReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/test/WhiteSimulation.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/test/WhiteSimulation.java
index 85d406f2ee4f6ec15befabfc35a526548e1b662e..aa0e5c9f840a07b7c67d5be73208826d34feb64f 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/test/WhiteSimulation.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/test/WhiteSimulation.java
@@ -141,7 +141,7 @@ public class WhiteSimulation
 
     /**
      * Send EntityState, Fire, Comment PDUs
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing the narrative comment
@@ -179,7 +179,7 @@ public class WhiteSimulation
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/test/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/test/package-info.java
index 7792918276464bcba24b09c7ca1070def766b820..b2830c824f129670e1311436615eade1c7a49514 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/test/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/test/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework4.White.test;
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/PDUReceiver.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/PDUReceiver.java
index 1e2378d9add6baf9a4e8d60bb753ac88b3f395de..8207d523b56165dddfa4ca58c356abe13bec494b 100755
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/PDUReceiver.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/PDUReceiver.java
@@ -18,7 +18,7 @@ public class PDUReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public PDUReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/PduListenerSaver.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/PduListenerSaver.java
index aea394ebc60cebdec9fb5019dca1788e035d8624..62d57ab802a08f6362638ee1f761c3659a4cf6b9 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/PduListenerSaver.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/PduListenerSaver.java
@@ -21,7 +21,7 @@ public class PduListenerSaver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public PduListenerSaver ()
     {
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/WhiteSimulation.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/WhiteSimulation.java
index 087f4268fc27c8b82e1a1725fa4664c92b0b0579..3b09d4ba1eaf40c73ce922cd37f8fd2b44d4aed5 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/WhiteSimulation.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/WhiteSimulation.java
@@ -138,7 +138,7 @@ public class WhiteSimulation
 
     /**
      * Send EntityState, Fire, Comment PDUs
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing the narrative comment
@@ -176,7 +176,7 @@ public class WhiteSimulation
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/package-info.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/package-info.java
index 9f4534a168d54d692503fa920fc166ccb18c4edd..994f3aa87c27c5785fc6b99262481175d1d54fca 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/package-info.java
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Distributed Interactive Simulation (DIS) homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2020JulySeptember.homework4.White.working;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/AllenTcpExample1Telnet1.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/AllenTcpExample1Telnet1.java
index 82d90242915f387a7ea9d6d11530473ea732ef29..c548ba06edbd1b3a8786e950c5f57f2282b8f0ae 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/AllenTcpExample1Telnet1.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/AllenTcpExample1Telnet1.java
@@ -34,7 +34,7 @@ public class AllenTcpExample1Telnet1
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public AllenTcpExample1Telnet1 ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/FisherTCPExample1Telnet.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/FisherTCPExample1Telnet.java
index 7dcceb7421fd5883a17fdbd00d026091e138644d..a4dfbe8d596fb761ce39fee2d9495b6faa596b22 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/FisherTCPExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/FisherTCPExample1Telnet.java
@@ -17,7 +17,7 @@ public class FisherTCPExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FisherTCPExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/FrankTCPExample3Client.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/FrankTCPExample3Client.java
index 178f76e2a4a539a3c374328829be0e53982b29ef..9545c7372fb79ab5533f1d23b2f910b76e42514e 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/FrankTCPExample3Client.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/FrankTCPExample3Client.java
@@ -15,7 +15,7 @@ public class FrankTCPExample3Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FrankTCPExample3Client ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/FrankTCPExample3Server.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/FrankTCPExample3Server.java
index 9de3d6987ae874a065b34786d1e8ea8ef70e99f9..9f73361c35a349d3f3ad18f7518386f9d428c314 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/FrankTCPExample3Server.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/FrankTCPExample3Server.java
@@ -26,7 +26,7 @@ public class FrankTCPExample3Server
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FrankTCPExample3Server ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/HittnerDomTcpExample1Telnet.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/HittnerDomTcpExample1Telnet.java
index 8fe1cd77028a656aaf387e8718267245cba705f0..d61a7bdd1026f4cd80ebef9488ed04bdd2e8cddd 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/HittnerDomTcpExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/HittnerDomTcpExample1Telnet.java
@@ -17,7 +17,7 @@ public class HittnerDomTcpExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public HittnerDomTcpExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/HittnerNickTcpExample1Telnet.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/HittnerNickTcpExample1Telnet.java
index 70e52459bd9c6961044f69d1564a81970da40c18..30815396f9cbe790020987f20c38bc918212ea02 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/HittnerNickTcpExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/HittnerNickTcpExample1Telnet.java
@@ -17,7 +17,7 @@ public class HittnerNickTcpExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public HittnerNickTcpExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/KeevenTCPExample3Client.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/KeevenTCPExample3Client.java
index a2a11a070a0b19ef3e30d954ce81fa333af7b884..9ceac8198e85512a96f0164601e9ebed9cae4a99 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/KeevenTCPExample3Client.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/KeevenTCPExample3Client.java
@@ -22,7 +22,7 @@ public class KeevenTCPExample3Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public KeevenTCPExample3Client ()
     {
@@ -30,8 +30,8 @@ public class KeevenTCPExample3Client
     }
 
     /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
-     * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
-     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
+     * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
      */
     public final static String LOCALHOST = "0:0:0:0:0:0:0:1";
 
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/KeevenTCPExample3Server.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/KeevenTCPExample3Server.java
index b8b0475ac096e396918ac02cd4cb54da311d4f5e..22a7735c008eae3220f845773b9f29614acf65bc 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/KeevenTCPExample3Server.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/KeevenTCPExample3Server.java
@@ -29,7 +29,7 @@ public class KeevenTCPExample3Server
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public KeevenTCPExample3Server ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/LeckieTcpExample2.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/LeckieTcpExample2.java
index 3f6b83e80551ae4e0c7974aec3c25d710a568c65..450f28f47d87b4c204ce46f388e58e590ed03b9b 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/LeckieTcpExample2.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/LeckieTcpExample2.java
@@ -30,7 +30,7 @@ public class LeckieTcpExample2
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LeckieTcpExample2 ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/McNeelyTCPExample2.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/McNeelyTCPExample2.java
index 1bb805e24e5e463bc7accfeebffe1e031437a618..0c955cc578e15994806a9d62a3eb5d56975cb879 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/McNeelyTCPExample2.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/McNeelyTCPExample2.java
@@ -30,7 +30,7 @@ public class McNeelyTCPExample2
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public McNeelyTCPExample2 ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/MorrisTcpExample1Telnet.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/MorrisTcpExample1Telnet.java
index d57ee5dafc8f445d3f05771d513624e1402907c6..f3547f5ae7c801a722ea601b956ff339da22cfa1 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/MorrisTcpExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/MorrisTcpExample1Telnet.java
@@ -34,7 +34,7 @@ public class MorrisTcpExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public MorrisTcpExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/PughTcp2ConnectionCounting.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/PughTcp2ConnectionCounting.java
index 9b3264b1ae9fbd05e68d76a693902664ce10e1eb..45ce231b4aaa958f8b0167931879f9f9511854bb 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/PughTcp2ConnectionCounting.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/PughTcp2ConnectionCounting.java
@@ -26,7 +26,7 @@ public class PughTcp2ConnectionCounting
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public PughTcp2ConnectionCounting ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/ReynoldsTcpExample1Telnet1.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/ReynoldsTcpExample1Telnet1.java
index 56bee6709e85f7e655f610939788b5cb751fac51..19a03267f7cd81a6276217248425b9b8479c5544 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/ReynoldsTcpExample1Telnet1.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/ReynoldsTcpExample1Telnet1.java
@@ -17,7 +17,7 @@ public class ReynoldsTcpExample1Telnet1
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public ReynoldsTcpExample1Telnet1 ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/RobinsonTcpExample1Telnet.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/RobinsonTcpExample1Telnet.java
index 974ba7150f2638f45f0f5a634d00d57dd5589b31..a8fe80ee3ec2cb63e61c5b5f96775f5b858b912e 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/RobinsonTcpExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/RobinsonTcpExample1Telnet.java
@@ -14,7 +14,7 @@ public class RobinsonTcpExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public RobinsonTcpExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/SchlesselTcpExample1Telnet.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/SchlesselTcpExample1Telnet.java
index f97f27818e3bfcfed1b9a061a3fda6304d4f63f4..34e5696f775909322eecdd6938ca55674fa47cca 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/SchlesselTcpExample1Telnet.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/SchlesselTcpExample1Telnet.java
@@ -12,7 +12,7 @@ public class SchlesselTcpExample1Telnet
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SchlesselTcpExample1Telnet ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/TcpExample2_Leckie_Mod_Hw1.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/TcpExample2_Leckie_Mod_Hw1.java
index d6bd392dced177013e49c62016253b554d69f1c0..8828ccc4d767f7aa450407a5c286b26bcb350894 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/TcpExample2_Leckie_Mod_Hw1.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/TcpExample2_Leckie_Mod_Hw1.java
@@ -30,7 +30,7 @@ public class TcpExample2_Leckie_Mod_Hw1
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public TcpExample2_Leckie_Mod_Hw1 ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/package-info.java
index f196f197c1907cd5ea116765a6774f718822d940..81133d68129c3c6a5de4032b1d2fc47ade681503 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework1;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Allen/AllenTcpExample3Client.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Allen/AllenTcpExample3Client.java
index bfddffba46fd0200c24e62b178f15366db4f9c56..8c39435cb7ad899e8fb04a00b2fa961483ce5a28 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Allen/AllenTcpExample3Client.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Allen/AllenTcpExample3Client.java
@@ -17,7 +17,7 @@ public class AllenTcpExample3Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public AllenTcpExample3Client ()
     {
@@ -25,8 +25,8 @@ public class AllenTcpExample3Client
     }
 
     /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
-     * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
-     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
+     * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
      */
     public final static String LOCALHOST = "0:0:0:0:0:0:0:1";
 
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Allen/AllenTcpExample3Server.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Allen/AllenTcpExample3Server.java
index 61f3761ff0adf8a0905ec1bd631951a784b43520..825988484fc33bcb0a0970fb687f682cb1914a7f 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Allen/AllenTcpExample3Server.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Allen/AllenTcpExample3Server.java
@@ -24,7 +24,7 @@ public class AllenTcpExample3Server
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public AllenTcpExample3Server ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Allen/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Allen/package-info.java
index 1ddb39e05b268de70702f24403dff56e40036372..f125b854515ecd839c08c1ed81fc8874967fa147 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Allen/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Allen/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework2.Allen;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Domonique/HittnerDTcpExample3Client.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Domonique/HittnerDTcpExample3Client.java
index 2ae541560b6becab605cf2819b43404d974a1f3a..d858143bc8c03188bcbbddf05204d7193d7fb334 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Domonique/HittnerDTcpExample3Client.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Domonique/HittnerDTcpExample3Client.java
@@ -10,7 +10,7 @@ public class HittnerDTcpExample3Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public HittnerDTcpExample3Client ()
     {
@@ -18,8 +18,8 @@ public class HittnerDTcpExample3Client
     }
 
     /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
-     * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
-     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
+     * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
      */
     public final static String LOCALHOST = "0:0:0:0:0:0:0:1";
 
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Domonique/HittnerDTcpExampleServer.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Domonique/HittnerDTcpExampleServer.java
index de069c7cba3dab685dfe90cdf751ac98f9c00614..cd57f726abb574e56b5cd2fd0725a0c5f48f0f20 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Domonique/HittnerDTcpExampleServer.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Domonique/HittnerDTcpExampleServer.java
@@ -11,7 +11,7 @@ public class HittnerDTcpExampleServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public HittnerDTcpExampleServer ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Domonique/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Domonique/package-info.java
index 165c55c68c20cce8545e8978162d12b0dc52efa4..c70e4b5805166ed1c161eccf961dbb9c330f5fb4 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Domonique/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Domonique/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework2.Domonique;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Fisher/FisherClient.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Fisher/FisherClient.java
index f964bd515f7c70a0258fc1c1253ecfdb4b92148b..226f7e3c3d5a0d2ae59949750ae195e84339e1fe 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Fisher/FisherClient.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Fisher/FisherClient.java
@@ -23,7 +23,7 @@ public class FisherClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FisherClient ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Fisher/FisherServer.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Fisher/FisherServer.java
index 9502baf6e2be47d5d506b3f47469cb815ae0f4e2..d126d442314c050ab4463ae32b1f05a2c9d94d74 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Fisher/FisherServer.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Fisher/FisherServer.java
@@ -32,7 +32,7 @@ public class FisherServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FisherServer ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Fisher/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Fisher/package-info.java
index 58b473e18a2779464bfacbbaba31b10a03d9095a..5d5ff6e14d76b1e7a32586d1a58d32229b18f5bd 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Fisher/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Fisher/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework2.Fisher;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Frank/FrankClient.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Frank/FrankClient.java
index 5f0006bdfcfd08603f7c65a2143bf437dc35755a..d94aa90309aa7c4753812dc71ab1d7de7baf634a 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Frank/FrankClient.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Frank/FrankClient.java
@@ -27,7 +27,7 @@ public class FrankClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FrankClient ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Frank/FrankServer.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Frank/FrankServer.java
index 2ee17764b9e289a62c85d9c2ebb7c454fffb0af5..a141a256bb37366dcc3ac7a2439fb1c44c1a186c 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Frank/FrankServer.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Frank/FrankServer.java
@@ -18,7 +18,7 @@ public class FrankServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FrankServer ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Frank/FrankTcpExample3Client.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Frank/FrankTcpExample3Client.java
index 9f9e841c74a774adcd65055a5b8d813a1b75bf41..2ae60c34dd5fb92d51d514dae97d8a9a7ca9f113 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Frank/FrankTcpExample3Client.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Frank/FrankTcpExample3Client.java
@@ -20,7 +20,7 @@ public class FrankTcpExample3Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public FrankTcpExample3Client ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Frank/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Frank/package-info.java
index 561fd8c0812fd3f03dcacc17c0b038d34d6e8001..be3d85b6e1a145c85e53e0518c5d77e76c7618ea 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Frank/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Frank/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework2.Frank;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerNick/HittnerNickTcpExample3Client.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerNick/HittnerNickTcpExample3Client.java
index cc08a867580844bf58fa476ac698d47e421899b7..294333f197770ae2ebe8e32e3220da1a5f9d2574 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerNick/HittnerNickTcpExample3Client.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerNick/HittnerNickTcpExample3Client.java
@@ -18,7 +18,7 @@ public class HittnerNickTcpExample3Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public HittnerNickTcpExample3Client ()
     {
@@ -26,8 +26,8 @@ public class HittnerNickTcpExample3Client
     }
 
     /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
-     * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
-     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
+     * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
      */
     public final static String LOCALHOST = "0:0:0:0:0:0:0:1";
 
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerNick/HittnerNickTcpExample3Server.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerNick/HittnerNickTcpExample3Server.java
index a0d441cdbd6b31c3cdb34476ccaa8a15e9380f04..f5db4e8636775df232f7434980d1de22a15e5346 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerNick/HittnerNickTcpExample3Server.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerNick/HittnerNickTcpExample3Server.java
@@ -26,7 +26,7 @@ public class HittnerNickTcpExample3Server
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public HittnerNickTcpExample3Server ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerNick/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerNick/package-info.java
index 8d4e87929b423417783d6eae4ebb75cc9674e6ab..7a4f28529bcd546b049a2869b4f1ef9661fb0cbf 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerNick/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerNick/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework2.HittnerNick;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Keeven/KeevenTCPExample3Client2.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Keeven/KeevenTCPExample3Client2.java
index 46f9d0ec24d16507a8715a4d8845d2b05d317479..acaa487cc49826b8340e23bbd0b565b184bd5421 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Keeven/KeevenTCPExample3Client2.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Keeven/KeevenTCPExample3Client2.java
@@ -22,7 +22,7 @@ public class KeevenTCPExample3Client2
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public KeevenTCPExample3Client2 ()
     {
@@ -30,8 +30,8 @@ public class KeevenTCPExample3Client2
     }
 
     /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
-     * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
-     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
+     * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
      */
     public final static String LOCALHOST = "0:0:0:0:0:0:0:1";
 
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Keeven/KeevenTCPExample3Server2.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Keeven/KeevenTCPExample3Server2.java
index e5632c6d11687c9e267c8ed48e3660dba6efec0c..63dc5b1c4854c77655058de37382f39084629512 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Keeven/KeevenTCPExample3Server2.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Keeven/KeevenTCPExample3Server2.java
@@ -29,7 +29,7 @@ public class KeevenTCPExample3Server2
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public KeevenTCPExample3Server2 ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Keeven/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Keeven/package-info.java
index b17fa698b071d7f4e54de4083343b80aa3e0f9a6..cb67a27785ef3feae469021e7fb79654c9807256 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Keeven/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Keeven/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework2.Keeven;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Leckie/LeckieClient.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Leckie/LeckieClient.java
index f1357631097a20988787bc74b0fd828017da8040..ea20023b966bab066f6306b29c7691df2088da3e 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Leckie/LeckieClient.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Leckie/LeckieClient.java
@@ -10,7 +10,7 @@ public class LeckieClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LeckieClient ()
     {
@@ -18,8 +18,8 @@ public class LeckieClient
     }
 
     /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
-     * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
-     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
+     * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
      */
     public final static String LOCALHOST = "0:0:0:0:0:0:0:1";
 
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Leckie/LeckieServer.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Leckie/LeckieServer.java
index f9d49daf4d33c0edc7cbed9b3a2222001fd55bc2..1a62d00601c64d6e1c3134a9683e92360eb444bd 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Leckie/LeckieServer.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Leckie/LeckieServer.java
@@ -11,7 +11,7 @@ public class LeckieServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public LeckieServer ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Leckie/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Leckie/package-info.java
index 8416b9e542689f16d3301b47e28a891dff4a2be1..4333553b3432e5d99f029effb9efba9f6d419bc7 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Leckie/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Leckie/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework2.Leckie;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/McNeely/McNeelyTCPExample3Client.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/McNeely/McNeelyTCPExample3Client.java
index 66fecac0c7f0ab9b3f769f233f1c011fc82320c1..80e87178dc226e3db26546e8aacb27940e6c8af7 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/McNeely/McNeelyTCPExample3Client.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/McNeely/McNeelyTCPExample3Client.java
@@ -17,7 +17,7 @@ public class McNeelyTCPExample3Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public McNeelyTCPExample3Client ()
     {
@@ -25,8 +25,8 @@ public class McNeelyTCPExample3Client
     }
 
     /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
-     * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
-     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
+     * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
      */
     public final static String LOCALHOST = "0:0:0:0:0:0:0:1";
 
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/McNeely/McNeelyTCPExample3Server.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/McNeely/McNeelyTCPExample3Server.java
index 75d7717fc1cbee81e2c7b31312917520d347be46..dde983d00ad85383da2c08906ad3293ac6f8046a 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/McNeely/McNeelyTCPExample3Server.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/McNeely/McNeelyTCPExample3Server.java
@@ -25,7 +25,7 @@ public class McNeelyTCPExample3Server
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public McNeelyTCPExample3Server ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/McNeely/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/McNeely/package-info.java
index e0d2dfc0abc284a05d95ac1d820740606e2df5d2..9b701ce521a61c854a0c70f62f36c22685ec33ee 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/McNeely/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/McNeely/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework2.McNeely;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Morris/MorrisTCPExample3Client.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Morris/MorrisTCPExample3Client.java
index 56aebab53091a11104072f410a8949479ec526b2..b00f4236b5af5c466a626d1ba0022e5fa009ece0 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Morris/MorrisTCPExample3Client.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Morris/MorrisTCPExample3Client.java
@@ -13,15 +13,15 @@ public class MorrisTCPExample3Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public MorrisTCPExample3Client ()
     {
         // default initializations 
     }
     /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
-     * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
-     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
+     * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
      */
     public final static String LOCALHOST = "0:0:0:0:0:0:0:1";
 
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Morris/MorrisTcpExample3Server.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Morris/MorrisTcpExample3Server.java
index 125ba5e9acdfc368ab7c46f87f27c32bc9919b95..e794015119b620a8166ce0ad3612cfbbd6ba339e 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Morris/MorrisTcpExample3Server.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Morris/MorrisTcpExample3Server.java
@@ -27,7 +27,7 @@ public class MorrisTcpExample3Server
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public MorrisTcpExample3Server ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Morris/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Morris/package-info.java
index 1df7bef62ba3c1fc16147ab9729ec91b9b81ea01..b54d2e37aaa93e03810c26c57944b0d9aefa800b 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Morris/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Morris/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework2.Morris;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Pugh/Pugh3Client_homework2.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Pugh/Pugh3Client_homework2.java
index d2653fb19f6b7f754f9ceb47f2608074771b37ed..afd4dc679a4227f54a0d72eeb5052fc8efec6d4a 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Pugh/Pugh3Client_homework2.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Pugh/Pugh3Client_homework2.java
@@ -18,7 +18,7 @@ public class Pugh3Client_homework2
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Pugh3Client_homework2 ()
     {
@@ -30,9 +30,9 @@ public class Pugh3Client_homework2
      * IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
      *
      * @see
-     * <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
+     * <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
      * @see
-     * <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a>
+     * <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a>
      */
     public final static String LOCALHOST = "0:0:0:0:0:0:0:1"; //Local host
 
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Pugh/Pugh3Server.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Pugh/Pugh3Server.java
index bf0e0e9682bb3d7dd652286ed59e5d920b67ac10..9192a9bfa954610611ab7bae81aa418ac2b26d3e 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Pugh/Pugh3Server.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Pugh/Pugh3Server.java
@@ -26,7 +26,7 @@ public class Pugh3Server
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public Pugh3Server ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Pugh/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Pugh/package-info.java
index dc63bad61b49305fbc97f3fac9e3923deb76c67a..99bd240d3b38863369d424d223e44684c7a4981a 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Pugh/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Pugh/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework2.Pugh;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Reynolds/ReynoldsTcpExample3Client.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Reynolds/ReynoldsTcpExample3Client.java
index adb0831e48424c0b12530476de749ba2670a6d6d..41047edeaeda71deadd97f062a7bce03c25509b3 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Reynolds/ReynoldsTcpExample3Client.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Reynolds/ReynoldsTcpExample3Client.java
@@ -19,7 +19,7 @@ public class ReynoldsTcpExample3Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public ReynoldsTcpExample3Client ()
     {
@@ -27,8 +27,8 @@ public class ReynoldsTcpExample3Client
     }
 
     /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
-     * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
-     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
+     * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
      */
     public final static String LOCALHOST = "0:0:0:0:0:0:0:1";
 
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Reynolds/ReynoldsTcpExample3Server.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Reynolds/ReynoldsTcpExample3Server.java
index 1cf5e2953c600b1c637af2e6e2266ff3ea98d0c7..c9ce76cb36f6b511ee056193d296ae57d8e1daa8 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Reynolds/ReynoldsTcpExample3Server.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Reynolds/ReynoldsTcpExample3Server.java
@@ -27,7 +27,7 @@ public class ReynoldsTcpExample3Server
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public ReynoldsTcpExample3Server ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Reynolds/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Reynolds/package-info.java
index 8da49cbaf45b13804bf5aa6952c8ac8600533ca0..a53eb30a115f0e9fd795765440cb44c4441bad39 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Reynolds/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Reynolds/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework2.Reynolds;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Robinson/RobinsonTCP3exClient.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Robinson/RobinsonTCP3exClient.java
index 3a63044b5614e2adc7624b7d2ddbc531376f9fa7..5fa9b6f4cfa8e3ce66aa8a8faeb1661f46e1b82f 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Robinson/RobinsonTCP3exClient.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Robinson/RobinsonTCP3exClient.java
@@ -15,7 +15,7 @@ public class RobinsonTCP3exClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public RobinsonTCP3exClient ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Robinson/RobinsonTCP3exServer.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Robinson/RobinsonTCP3exServer.java
index f09809939de7403480f5a5002d12e6b1faea1192..aa04fc50589b4846f2f3a1cf9684219598de503f 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Robinson/RobinsonTCP3exServer.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Robinson/RobinsonTCP3exServer.java
@@ -15,7 +15,7 @@ public class RobinsonTCP3exServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public RobinsonTCP3exServer ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Robinson/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Robinson/package-info.java
index 0a43d3bafb95ffe6887385331e3d57feaab0db44..73ad970f53e4174c3e01870bd84650300bc39e33 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Robinson/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Robinson/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework2.Robinson;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Schlessel/SchlesselClient.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Schlessel/SchlesselClient.java
index 9ee69dbfa3d55528faa8b6d06fa885522d1e3232..98656337fdb87b17f38f5aadcb9681425dcdbc9c 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Schlessel/SchlesselClient.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Schlessel/SchlesselClient.java
@@ -11,7 +11,7 @@ public class SchlesselClient
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SchlesselClient ()
     {
@@ -19,8 +19,8 @@ public class SchlesselClient
     }
 
     /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
-     * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
-     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
+     * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
      */
     public final static String LOCALHOST = "0:0:0:0:0:0:0:1";
 
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Schlessel/SchlesselServer.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Schlessel/SchlesselServer.java
index 6e97cb0e9d3d2203069dd431a9810e2f0cb711f6..91b300e148c5560f4a9660160f0b0ff53e0c6a9c 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Schlessel/SchlesselServer.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Schlessel/SchlesselServer.java
@@ -11,7 +11,7 @@ public class SchlesselServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public SchlesselServer ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Schlessel/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Schlessel/package-info.java
index 39c7b0f33e4441cdf6e0db8f85e297c977ccb973..cac69162c3e5e089f667684aff5818d2194e7167 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Schlessel/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Schlessel/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework2.Schlessel;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/package-info.java
index 1b2c6aa2282531d604d5d5098c8568311e9f4b5d..d67e1b13205c6228a82d08446011a4a46e04b14e 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework2;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Allen/ExampleSimulationProgramAllen_3.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Allen/ExampleSimulationProgramAllen_3.java
index 7505ffadb6dd2d49d5b2ace8f0de5ecce152a405..8b1c717b1ff9f22265eb06054ce0f984dbec120d 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Allen/ExampleSimulationProgramAllen_3.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Allen/ExampleSimulationProgramAllen_3.java
@@ -407,7 +407,7 @@ public class ExampleSimulationProgramAllen_3
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -420,7 +420,7 @@ public class ExampleSimulationProgramAllen_3
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -463,7 +463,7 @@ public class ExampleSimulationProgramAllen_3
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Allen/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Allen/package-info.java
index 91511440d812a4b3a235bb7cb54524ef4d75800e..38b4c31d18cce1b8a100bfd40d20a2eeeb91c0c3 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Allen/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Allen/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimulationProgram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework3.Allen;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Fisher/ExampleSimulationProgramFisher_2.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Fisher/ExampleSimulationProgramFisher_2.java
index fbd5be06f23f82e80a733ffa606ee6a39a5ec758..bc2e6aa61a919f76f895289e532010603fb2637a 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Fisher/ExampleSimulationProgramFisher_2.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Fisher/ExampleSimulationProgramFisher_2.java
@@ -302,7 +302,7 @@ public class ExampleSimulationProgramFisher_2
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -315,7 +315,7 @@ public class ExampleSimulationProgramFisher_2
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -358,7 +358,7 @@ public class ExampleSimulationProgramFisher_2
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Fisher/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Fisher/package-info.java
index 178b29eba5c5a3762de3b82e95d38df2cf34b997..c8ab2ef870ec52e5d09e17906492a21a07e776c1 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Fisher/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Fisher/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimulationProgram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework3.Fisher;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Frank/FrankAssignmentThreeSimulation.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Frank/FrankAssignmentThreeSimulation.java
index da46993c1f0952ecd096c6decfe97ea9eaaa3871..05da0f4ab482f39c78a478cff316f281f74d8c27 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Frank/FrankAssignmentThreeSimulation.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Frank/FrankAssignmentThreeSimulation.java
@@ -424,7 +424,7 @@ public class FrankAssignmentThreeSimulation {
      * Send Comment PDU
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing
+     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing
      * Information to a Method or a Constructor</a> Arbitrary Number of
      * Arguments
      * @param commentType enumeration value describing purpose of the narrative
@@ -442,7 +442,7 @@ public class FrankAssignmentThreeSimulation {
      * reflecting state of current simulation timestep.
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing
+     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing
      * Information to a Method or a Constructor</a> Arbitrary Number of
      * Arguments
      * @param entityStatePdu the ESPDU to send, if any
@@ -487,7 +487,7 @@ public class FrankAssignmentThreeSimulation {
      * Main method is first executed when a program instance is loaded.
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java
+     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java
      * Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String
      * parameters that are passed from execution environment during invocation
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Frank/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Frank/package-info.java
index 5b347bad0732eec8ca27f7a1a361cda8a175597f..edb55f63fdf0177f2929170c06223a61a7287cc0 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Frank/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Frank/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimulationProgram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework3.Frank;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/HittnerDom/HittnerDom3HW.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/HittnerDom/HittnerDom3HW.java
index db30b21bc693befa207bc41dd7e31f869a2ad32e..19daca6d194dae2183d69d02f3cbc1088e421827 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/HittnerDom/HittnerDom3HW.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/HittnerDom/HittnerDom3HW.java
@@ -286,7 +286,7 @@ public class HittnerDom3HW
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -299,7 +299,7 @@ public class HittnerDom3HW
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -342,7 +342,7 @@ public class HittnerDom3HW
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/HittnerDom/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/HittnerDom/package-info.java
index fd1c03d96a203d7db30726239c3bbe924d4c745c..cf09dff4dfc92356d6221ae1fe0a60e5b9916f40 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/HittnerDom/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/HittnerDom/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimulationProgram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework3.HittnerDom;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/HittnerNick/HittnerNick3.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/HittnerNick/HittnerNick3.java
index 52a396d54b4a2eb7938a5beb4ba0e27377b08192..ac7d344e020830706aabaabc526d7ee8e933dfac 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/HittnerNick/HittnerNick3.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/HittnerNick/HittnerNick3.java
@@ -282,7 +282,7 @@ public class HittnerNick3
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -295,7 +295,7 @@ public class HittnerNick3
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -338,7 +338,7 @@ public class HittnerNick3
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/HittnerNick/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/HittnerNick/package-info.java
index eb41736090d81f68e3b530dc4d6415e2cb30f5d2..957064e078aec38f72291b7d520e97f877e78963 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/HittnerNick/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/HittnerNick/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimulationProgram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework3.HittnerNick;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Keeven/Keeven3.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Keeven/Keeven3.java
index fbaa589657dcdcf8cfa13b94e1a0df5d1dbceab7..9f12551f086830b38f6b6ef323cb2ae149dfc1a5 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Keeven/Keeven3.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Keeven/Keeven3.java
@@ -423,7 +423,7 @@ public class Keeven3 {
      * Send Comment PDU
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing
+     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing
      * Information to a Method or a Constructor</a> Arbitrary Number of
      * Arguments
      * @param commentType enumeration value describing purpose of the narrative
@@ -441,7 +441,7 @@ public class Keeven3 {
      * reflecting state of current simulation timestep.
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing
+     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing
      * Information to a Method or a Constructor</a> Arbitrary Number of
      * Arguments
      * @param entityStatePdu the ESPDU to send, if any
@@ -486,7 +486,7 @@ public class Keeven3 {
      * Main method is first executed when a program instance is loaded.
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java
+     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java
      * Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String
      * parameters that are passed from execution environment during invocation
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Keeven/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Keeven/package-info.java
index a406c00e588d29d2635c2bb8bf92852d5f0afcb9..dd38eb3b424cb8316b1c8e5af66f86c103e8c50c 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Keeven/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Keeven/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimulationProgram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework3.Keeven;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Leckie/homework3Leckie.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Leckie/homework3Leckie.java
index 5cd62faaf97c906d399a4dda8b99c1d87c6dabfd..b084a637f6dfd7cb92934753d3756c05fa48311d 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Leckie/homework3Leckie.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Leckie/homework3Leckie.java
@@ -271,7 +271,7 @@ public class homework3Leckie
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -284,7 +284,7 @@ public class homework3Leckie
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -325,7 +325,7 @@ public class homework3Leckie
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Leckie/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Leckie/package-info.java
index 4789fd891c1a6ecf6ca0c138857f0b5fe2da9dd7..df938c394ac479625f011a2cf670af4ca063694a 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Leckie/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Leckie/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimulationProgram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework3.Leckie;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Lentz/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Lentz/package-info.java
index 4a0d3ff748323abaf6b22b47292c0aee226f3889..8cf4ef90c45aa44925d766cfd0063f310aa4ceaa 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Lentz/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Lentz/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimulationProgram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework3.Lentz;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/McNeely/ExampleSimulationProgramMcNeely.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/McNeely/ExampleSimulationProgramMcNeely.java
index 3777ab0d8381a21673e72248be66c8173cb0aef3..a23362e2d7e5abc40b0998d6520da439bdb2e75b 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/McNeely/ExampleSimulationProgramMcNeely.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/McNeely/ExampleSimulationProgramMcNeely.java
@@ -263,7 +263,7 @@ public class ExampleSimulationProgramMcNeely
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -276,7 +276,7 @@ public class ExampleSimulationProgramMcNeely
 
     /**
      * Send EntityState, Fire, Comment PDUs
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -317,7 +317,7 @@ public class ExampleSimulationProgramMcNeely
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/McNeely/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/McNeely/package-info.java
index 1379caf1435d02822f5489f6ce2462fcb4cd7af9..bd13dcc257a0b713bde975a9bb342c7624778683 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/McNeely/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/McNeely/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimulationProgram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework3.McNeely;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Morris/MorrisSimulationProgram.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Morris/MorrisSimulationProgram.java
index 542c521eb81731e612d17ac0ee1b05eafad3375f..708ab9083ea4124e1dd14c87b2ebf99d0d5291f6 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Morris/MorrisSimulationProgram.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Morris/MorrisSimulationProgram.java
@@ -291,7 +291,7 @@ public class MorrisSimulationProgram
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -304,7 +304,7 @@ public class MorrisSimulationProgram
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -348,7 +348,7 @@ public class MorrisSimulationProgram
     /**
      * Main method is first executed when a program instance is loaded.
      * @throws java.lang.Exception user interrupt
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args) throws Exception
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Morris/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Morris/package-info.java
index 73e75bb0b44430a3e17e44865249bc06f0d9e29b..33ef4048f6a12ffea603b181925ff954ccbe4106 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Morris/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Morris/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimulationProgram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework3.Morris;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Pugh/PughSimulationProgram.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Pugh/PughSimulationProgram.java
index f45e97677c45267ba7ff7122e613d8de62af5f11..2c221f90ed005494e387fccb0955d2e810801480 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Pugh/PughSimulationProgram.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Pugh/PughSimulationProgram.java
@@ -291,7 +291,7 @@ public class PughSimulationProgram
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -304,7 +304,7 @@ public class PughSimulationProgram
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -347,7 +347,7 @@ public class PughSimulationProgram
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Pugh/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Pugh/package-info.java
index 618d4148211f76aca3ee11a4cf28785ae7104101..653d213619d7d373c6ca2fa670176f29041a479f 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Pugh/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Pugh/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimulationProgram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework3.Pugh;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Reynolds/ExampleSimulationProgramReynolds.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Reynolds/ExampleSimulationProgramReynolds.java
index f5041be5084b42b78a2a10aa1b753cb15e21e2ea..8028fb061afbb951c18659feceee8f5b2d9ae056 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Reynolds/ExampleSimulationProgramReynolds.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Reynolds/ExampleSimulationProgramReynolds.java
@@ -417,7 +417,7 @@ public class ExampleSimulationProgramReynolds {
      * Send Comment PDU
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing
+     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing
      * Information to a Method or a Constructor</a> Arbitrary Number of
      * Arguments
      * @param commentType enumeration value describing purpose of the narrative
@@ -435,7 +435,7 @@ public class ExampleSimulationProgramReynolds {
      * reflecting state of current simulation timestep.
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing
+     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing
      * Information to a Method or a Constructor</a> Arbitrary Number of
      * Arguments
      * @param entityStatePdu the ESPDU to send, if any
@@ -480,7 +480,7 @@ public class ExampleSimulationProgramReynolds {
      * Main method is first executed when a program instance is loaded.
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java
+     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java
      * Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String
      * parameters that are passed from execution environment during invocation
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Reynolds/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Reynolds/package-info.java
index 2d96342eba6bab10758fd8d35891366f74d99677..9859a898129f9997ff099ee197ee90c6bfb2b08a 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Reynolds/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Reynolds/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimulationProgram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework3.Reynolds;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Robinson/hw3Robinson.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Robinson/hw3Robinson.java
index 99c678a0a315b2d07a4940c05bd33f9effda0ea7..8d5aa8c7a52926e046cbf6e754c80cc7929273af 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Robinson/hw3Robinson.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Robinson/hw3Robinson.java
@@ -316,7 +316,7 @@ public class hw3Robinson {
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -329,7 +329,7 @@ public class hw3Robinson {
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -372,7 +372,7 @@ public class hw3Robinson {
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Robinson/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Robinson/package-info.java
index 9d21ca01d4c27913547d2e5181023876774113b2..37385f8a45e00fc75f01635c42848ef8e97fe280 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Robinson/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Robinson/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimulationProgram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework3.Robinson;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Schlessel/ExampleSimulationProgram.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Schlessel/ExampleSimulationProgram.java
index f3637760cb1f3e4404e5b2b2931ccc1d7d6def69..733f506917597a48323e572c7d761990625e24a2 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Schlessel/ExampleSimulationProgram.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Schlessel/ExampleSimulationProgram.java
@@ -294,7 +294,7 @@ public class ExampleSimulationProgram
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -307,7 +307,7 @@ public class ExampleSimulationProgram
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -350,7 +350,7 @@ public class ExampleSimulationProgram
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Schlessel/SchlesselSimulationProgram.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Schlessel/SchlesselSimulationProgram.java
index 7957fd606116951dc9da15f59c641833c2de45c0..e85666389413ab2d4f9cc836f6b784eb15b2c505 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Schlessel/SchlesselSimulationProgram.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Schlessel/SchlesselSimulationProgram.java
@@ -301,7 +301,7 @@ public class SchlesselSimulationProgram
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -314,7 +314,7 @@ public class SchlesselSimulationProgram
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -357,7 +357,7 @@ public class SchlesselSimulationProgram
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Schlessel/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Schlessel/package-info.java
index 88c04d33fb319a2fef6edbdb9b8a2d94925983a6..d92cb9930b466f2095ffe89cc168af3ed61aed2e 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Schlessel/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Schlessel/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimulationProgram homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework3.Schlessel;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/package-info.java
index 08be8b4231027e92f2966cb033babcc99976f1ba..3591e8ccd6498ad710f4a1e38e8b836cf6473c33 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework3;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework4/Allen/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework4/Allen/package-info.java
index 7a1abd2e950df5a39bf6ffd58f2279e92510c727..ec3976724e79e82fa17b2693a8e9a70515bf4d57 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework4/Allen/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework4/Allen/package-info.java
@@ -1,10 +1,10 @@
 /**
  * PDU assessment homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework4.Allen;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework4/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework4/package-info.java
index 7a6e627be7b8d8931f487ca94175b74e4d2fcbbc..406c58017681bee1fba5dd106e028d6ff0314615 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/homework4/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/homework4/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.homework4;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/projects/AllenReynolds/KineticFirewallSimulationProgramAllenReynolds.java b/assignments/src/MV3500Cohort2021JulySeptember/projects/AllenReynolds/KineticFirewallSimulationProgramAllenReynolds.java
index 171cea5b8e8f7c95b154f5ac654961b6c03dc887..63c7d03ab2328e3022fc23346c09ab8841300721 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/projects/AllenReynolds/KineticFirewallSimulationProgramAllenReynolds.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/projects/AllenReynolds/KineticFirewallSimulationProgramAllenReynolds.java
@@ -469,7 +469,7 @@ public class KineticFirewallSimulationProgramAllenReynolds {
      * Send Comment PDU
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing
+     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing
      * Information to a Method or a Constructor</a> Arbitrary Number of
      * Arguments
      * @param commentType enumeration value describing purpose of the narrative
@@ -487,7 +487,7 @@ public class KineticFirewallSimulationProgramAllenReynolds {
      * reflecting state of current simulation timestep.
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing
+     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing
      * Information to a Method or a Constructor</a> Arbitrary Number of
      * Arguments
      * @param entityStatePdu the ESPDU to send, if any
@@ -532,7 +532,7 @@ public class KineticFirewallSimulationProgramAllenReynolds {
      * Main method is first executed when a program instance is loaded.
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java
+     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java
      * Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String
      * parameters that are passed from execution environment during invocation
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/projects/AllenReynolds/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/projects/AllenReynolds/package-info.java
index 8969e6eb55041e596eac25e3975b0f0d082b3867..70609bbe4dea2522c982d5bf88c096acd00f7abf 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/projects/AllenReynolds/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/projects/AllenReynolds/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Kinetic Firewall Simulation final project supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.projects.AllenReynolds;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/MV3500ProjectFisher.java b/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/MV3500ProjectFisher.java
index 452b2e00176b02acc5456ad33a47e21873fdfc48..1084c12dd4df339e05f766d41c81f1b8e5e311eb 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/MV3500ProjectFisher.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/MV3500ProjectFisher.java
@@ -408,7 +408,7 @@ public class MV3500ProjectFisher
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -421,7 +421,7 @@ public class MV3500ProjectFisher
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
@@ -461,7 +461,7 @@ public class MV3500ProjectFisher
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/package-info.java
index 887ea7229c639558242ba773dc71b318c41b0ef0..0fef910a26996637dd0dbac12fff172b1a1a52ca 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Entity Type example analysis, final project supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.projects.Fisher;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/projects/McneelyLeckieProject/McneelyLeckieReceiver.java b/assignments/src/MV3500Cohort2021JulySeptember/projects/McneelyLeckieProject/McneelyLeckieReceiver.java
index b1635295ddb1023f05857099ae7b757da3d8fde9..ca1234645ff710cabac9c40004054f7585fddf69 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/projects/McneelyLeckieProject/McneelyLeckieReceiver.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/projects/McneelyLeckieProject/McneelyLeckieReceiver.java
@@ -26,7 +26,7 @@ public class McneelyLeckieReceiver
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public McneelyLeckieReceiver ()
     {
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/projects/McneelyLeckieProject/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/projects/McneelyLeckieProject/package-info.java
index 7c09f5d54c857dca30ece5aa2a33430254f36982..bf3d40774394af3dd960e9b8a7cae76422cebfff 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/projects/McneelyLeckieProject/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/projects/McneelyLeckieProject/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Aviation Maintenance Supply simulation, final project supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.projects.McneelyLeckieProject;
diff --git a/assignments/src/MV3500Cohort2021JulySeptember/projects/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/projects/package-info.java
index 35001001770526a77a9236659f53e3786f425ede..36653d4890954e693544874e20be6d6d24288f32 100644
--- a/assignments/src/MV3500Cohort2021JulySeptember/projects/package-info.java
+++ b/assignments/src/MV3500Cohort2021JulySeptember/projects/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2021JulySeptember.projects;
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework1/Duran/DuranTcpExample3Client.java b/assignments/src/MV3500Cohort2022MayJune/homework1/Duran/DuranTcpExample3Client.java
index f2dc358c788b9146cf9e74aea15b39b0416a2dc4..dadf5229a239f0677598941d6f76cdbc1e9c0642 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework1/Duran/DuranTcpExample3Client.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework1/Duran/DuranTcpExample3Client.java
@@ -7,7 +7,7 @@ public class DuranTcpExample3Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public DuranTcpExample3Client ()
     {
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework1/Duran/DuranTcpExampleServer.java b/assignments/src/MV3500Cohort2022MayJune/homework1/Duran/DuranTcpExampleServer.java
index da0cb4f4addf199bdd51dcca5fd807ed0274c583..2c8684c00f3482acfa24ad63b886182f318d76d2 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework1/Duran/DuranTcpExampleServer.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework1/Duran/DuranTcpExampleServer.java
@@ -10,7 +10,7 @@ public class DuranTcpExampleServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public DuranTcpExampleServer ()
     {
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework1/Duran/package-info.java b/assignments/src/MV3500Cohort2022MayJune/homework1/Duran/package-info.java
index 38312e532b35d0f297419d953676d4cbbb398e00..dc7d95630123df70db0085c3b06143186c47af96 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework1/Duran/package-info.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework1/Duran/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimpleSimulation program-modification homework assignment supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2022MayJune.homework1.Duran;
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework1/Marks/MarksTcpExample3Client.java b/assignments/src/MV3500Cohort2022MayJune/homework1/Marks/MarksTcpExample3Client.java
index 5436f193021b55ec9570ef427d5fe2a1a027f79b..d67c4f1fc676daf3fa1fb6228edf859cf13e26e1 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework1/Marks/MarksTcpExample3Client.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework1/Marks/MarksTcpExample3Client.java
@@ -10,7 +10,7 @@ public class MarksTcpExample3Client
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public MarksTcpExample3Client ()
     {
@@ -18,8 +18,8 @@ public class MarksTcpExample3Client
     }
 
     /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
-     * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
-     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
+     * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
      */
     public final static String LOCALHOST = "0:0:0:0:0:0:0:1";
 
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework1/Marks/MarksTcpExampleServer.java b/assignments/src/MV3500Cohort2022MayJune/homework1/Marks/MarksTcpExampleServer.java
index 64fbcf8a3107e7c29e73c3abff7fd9dae15b49b9..c1805bd670e925f72f814efb1db8b76277479778 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework1/Marks/MarksTcpExampleServer.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework1/Marks/MarksTcpExampleServer.java
@@ -11,7 +11,7 @@ public class MarksTcpExampleServer
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public MarksTcpExampleServer ()
     {
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework1/Marks/package-info.java b/assignments/src/MV3500Cohort2022MayJune/homework1/Marks/package-info.java
index 7d74a29099159573bb26ab81a02933464537a27b..433146396f1d13059c42c4600df5b2d15efacdfb 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework1/Marks/package-info.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework1/Marks/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimpleSimulation program-modification homework assignment supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2022MayJune.homework1.Marks;
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework1/package-info.java b/assignments/src/MV3500Cohort2022MayJune/homework1/package-info.java
index d8978c183b54e43f2e32d4bc287c775eae9671f4..16aa571e8158e4c77253a45a4a9184133d6b11ad 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework1/package-info.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework1/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2022MayJune.homework1;
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Ashmore/ExampleSimulationProgramAshmore.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Ashmore/ExampleSimulationProgramAshmore.java
index 9115997c159ac4a282c811873f37a1e62b3a5122..0f30c70d05412301b2814405ffd0e5deeb61b5ec 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Ashmore/ExampleSimulationProgramAshmore.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Ashmore/ExampleSimulationProgramAshmore.java
@@ -367,7 +367,7 @@ public class ExampleSimulationProgramAshmore
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -380,7 +380,7 @@ public class ExampleSimulationProgramAshmore
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -466,7 +466,7 @@ public class ExampleSimulationProgramAshmore
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line parameters: network address and port.
      *    Command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Ashmore/ExampleTrackInterpolationAshmore.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Ashmore/ExampleTrackInterpolationAshmore.java
index 6594b9d492e9001d7846bf727a7cfb5502eb3a82..7269af2ce8ebb4451daf9dc321e0ae1f6792686a 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Ashmore/ExampleTrackInterpolationAshmore.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Ashmore/ExampleTrackInterpolationAshmore.java
@@ -18,7 +18,7 @@ public class ExampleTrackInterpolationAshmore extends ExampleSimulationProgramAs
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public ExampleTrackInterpolationAshmore ()
     {
@@ -222,7 +222,7 @@ public class ExampleTrackInterpolationAshmore extends ExampleSimulationProgramAs
      * Main method is first executed when a program instance is loaded.
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java
+     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java
      * Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String
      * parameters that are passed from execution environment during invocation
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Ashmore/PduTrack.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Ashmore/PduTrack.java
index 8cded7a666c68aaf99dad80444611ca0cc6a351a..6089a4489ace89e6d19dd49756a3f271a78d3419 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Ashmore/PduTrack.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Ashmore/PduTrack.java
@@ -345,8 +345,8 @@ public class PduTrack
 
     /**
      * Sort all PDUs by timestamp
-     * @see <a href="https://stackoverflow.com/questions/16252269/how-to-sort-an-arraylist">StackOverflow: How to sort an ArrayList?</a>
-     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html">Collections Framework Overview</a>
+     * @see <a href="https://stackoverflow.com/questions/16252269/how-to-sort-an-arraylist" target="_blank">StackOverflow: How to sort an ArrayList?</a>
+     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html" target="_blank">Collections Framework Overview</a>
      * @return same object to permit progressive setters
      */
     public PduTrack sortPdus()
@@ -367,8 +367,8 @@ public class PduTrack
     }
     /**
      * Reverse order of PDU list
-     * @see <a href="https://stackoverflow.com/questions/10766492/what-is-the-simplest-way-to-reverse-an-arraylist">StackOverflow: What is the Simplest Way to Reverse an ArrayList?</a>
-     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html">Collections Framework Overview</a>
+     * @see <a href="https://stackoverflow.com/questions/10766492/what-is-the-simplest-way-to-reverse-an-arraylist" target="_blank">StackOverflow: What is the Simplest Way to Reverse an ArrayList?</a>
+     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html" target="_blank">Collections Framework Overview</a>
      * @return same object to permit progressive setters
      */
     public PduTrack reversePdus()
@@ -821,7 +821,7 @@ public class PduTrack
     /**
      * Convert byte array to hex string
      * @param bytes input data
-     * @see <a href="https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java">https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java</a>
+     * @see <a href="https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java" target="_blank">https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java</a>
      * @return hex string
      */
     public static String bytesToHex(byte[] bytes)
@@ -1023,7 +1023,7 @@ public class PduTrack
     
     /**
      * Main method for testing.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args [address, port, descriptor] command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Ashmore/package-info.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Ashmore/package-info.java
index 89244c23a736df3baa917fc18ef145bd3c40de27..3c9e88aa8f5f45b1c45088d06df776bfac3d8fe4 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Ashmore/package-info.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Ashmore/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimpleSimulation program-modification homework assignment supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2022MayJune.homework2.Ashmore;
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Caroffino/package-info.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Caroffino/package-info.java
index 4a7120101364cb9b72035a4c5cbd2aeff0e9a758..d2fcddd29f757d3d177092cd37516225aea66a5f 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Caroffino/package-info.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Caroffino/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimpleSimulation program-modification homework assignment supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2022MayJune.homework2.Caroffino;
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Duran/ExampleSimulationProgramDuran.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Duran/ExampleSimulationProgramDuran.java
index 9d93215fa55f4a7ba8138a75630cda5743b3535e..5b6748b04435f274ad740bd26bd35d3c89baa094 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Duran/ExampleSimulationProgramDuran.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Duran/ExampleSimulationProgramDuran.java
@@ -368,7 +368,7 @@ public class ExampleSimulationProgramDuran
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -381,7 +381,7 @@ public class ExampleSimulationProgramDuran
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -467,7 +467,7 @@ public class ExampleSimulationProgramDuran
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line parameters: network address and port.
      *    Command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Duran/ExampleTrackInterpolationDuran.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Duran/ExampleTrackInterpolationDuran.java
index 105c0f0acf53c8eeac63fea6902c8bd67af273f1..4d8317ea94644738b92964151bc52e10f377a394 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Duran/ExampleTrackInterpolationDuran.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Duran/ExampleTrackInterpolationDuran.java
@@ -18,7 +18,7 @@ public class ExampleTrackInterpolationDuran extends ExampleSimulationProgramDura
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public ExampleTrackInterpolationDuran ()
     {
@@ -220,7 +220,7 @@ public class ExampleTrackInterpolationDuran extends ExampleSimulationProgramDura
      * Main method is first executed when a program instance is loaded.
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java
+     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java
      * Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String
      * parameters that are passed from execution environment during invocation
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Duran/PduTrack.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Duran/PduTrack.java
index 121ab78128723a99e57878f115e03b698985b89f..7c30751a741166a6d081ccf1ca900a68be39f424 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Duran/PduTrack.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Duran/PduTrack.java
@@ -345,8 +345,8 @@ public class PduTrack
 
     /**
      * Sort all PDUs by timestamp
-     * @see <a href="https://stackoverflow.com/questions/16252269/how-to-sort-an-arraylist">StackOverflow: How to sort an ArrayList?</a>
-     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html">Collections Framework Overview</a>
+     * @see <a href="https://stackoverflow.com/questions/16252269/how-to-sort-an-arraylist" target="_blank">StackOverflow: How to sort an ArrayList?</a>
+     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html" target="_blank">Collections Framework Overview</a>
      * @return same object to permit progressive setters
      */
     public PduTrack sortPdus()
@@ -367,8 +367,8 @@ public class PduTrack
     }
     /**
      * Reverse order of PDU list
-     * @see <a href="https://stackoverflow.com/questions/10766492/what-is-the-simplest-way-to-reverse-an-arraylist">StackOverflow: What is the Simplest Way to Reverse an ArrayList?</a>
-     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html">Collections Framework Overview</a>
+     * @see <a href="https://stackoverflow.com/questions/10766492/what-is-the-simplest-way-to-reverse-an-arraylist" target="_blank">StackOverflow: What is the Simplest Way to Reverse an ArrayList?</a>
+     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html" target="_blank">Collections Framework Overview</a>
      * @return same object to permit progressive setters
      */
     public PduTrack reversePdus()
@@ -821,7 +821,7 @@ public class PduTrack
     /**
      * Convert byte array to hex string
      * @param bytes input data
-     * @see <a href="https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java">https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java</a>
+     * @see <a href="https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java" target="_blank">https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java</a>
      * @return hex string
      */
     public static String bytesToHex(byte[] bytes)
@@ -1023,7 +1023,7 @@ public class PduTrack
     
     /**
      * Main method for testing.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args [address, port, descriptor] command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Duran/package-info.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Duran/package-info.java
index caf06ad8b39a3df1ac672f2713285b5029601ccd..f885b439e01498edbb485fbb7443dd2b5b5d9279 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Duran/package-info.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Duran/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimpleSimulation program-modification homework assignment supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2022MayJune.homework2.Duran;
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Hickey/ExampleSimulationProgramHickey.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Hickey/ExampleSimulationProgramHickey.java
index 46a48a53ec8ad47a70eae79465219a0da638d136..01dd324b9d5c8f154d13ec5a6120aa6f94e6bff9 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Hickey/ExampleSimulationProgramHickey.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Hickey/ExampleSimulationProgramHickey.java
@@ -25,7 +25,7 @@ import java.util.logging.Logger;
  *  that includes DIS-capable entities performing tasks of interest, and then reporting activity via PDUs
  *  to the network.
  *  Default program initialization includes PDU recording turned on by default.
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramLog.txt">ExampleSimulationProgramLog.txt</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramLog.txt" target="_blank">ExampleSimulationProgramLog.txt</a>
  */
 public class ExampleSimulationProgramHickey
 {
@@ -377,7 +377,7 @@ public class ExampleSimulationProgramHickey
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -390,7 +390,7 @@ public class ExampleSimulationProgramHickey
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -476,7 +476,7 @@ public class ExampleSimulationProgramHickey
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line parameters: network address and port.
      *    Command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Hickey/ExampleTrackInterpolationHickey.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Hickey/ExampleTrackInterpolationHickey.java
index 9a56ba48e2e360add1d022471d5af448abca8b84..be7e1d2fdcbe1acf789ebecc84632051cd4c489f 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Hickey/ExampleTrackInterpolationHickey.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Hickey/ExampleTrackInterpolationHickey.java
@@ -25,15 +25,15 @@ import java.util.logging.Logger;
  * simulation for networked entity tracks and presentation, including
  * DIS-capable entities doing tasks and reporting them to the network.
  * Default settings include PDU recording turned on by default.
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleTrackInterpolationLog.txt">ExampleTrackInterpolationLog.txt</a>
- * @see <a href="https://calhoun.nps.edu/handle/10945/65436">REPEATABLE UNIT TESTING OF DISTRIBUTED INTERACTIVE SIMULATION (DIS) PROTOCOL BEHAVIOR STREAMS USING WEB STANDARDS</a> by Tobias Brennenstuhl, Masters Thesis, Naval Postgraduate School (NPS), June 2020
- * @see <a href="https://gitlab.nps.edu/Savage/SavageTheses/-/tree/master/BrennenstuhlTobias">https://gitlab.nps.edu/Savage/SavageTheses/-/tree/master/BrennenstuhlTobias</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleTrackInterpolationLog.txt" target="_blank">ExampleTrackInterpolationLog.txt</a>
+ * @see <a href="https://calhoun.nps.edu/handle/10945/65436" target="_blank">REPEATABLE UNIT TESTING OF DISTRIBUTED INTERACTIVE SIMULATION (DIS) PROTOCOL BEHAVIOR STREAMS USING WEB STANDARDS</a> by Tobias Brennenstuhl, Masters Thesis, Naval Postgraduate School (NPS), June 2020
+ * @see <a href="https://gitlab.nps.edu/Savage/SavageTheses/-/tree/master/BrennenstuhlTobias" target="_blank">https://gitlab.nps.edu/Savage/SavageTheses/-/tree/master/BrennenstuhlTobias</a>
  */
 public class ExampleTrackInterpolationHickey extends ExampleSimulationProgramHickey
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public ExampleTrackInterpolationHickey ()
     {
@@ -235,7 +235,7 @@ public class ExampleTrackInterpolationHickey extends ExampleSimulationProgramHic
      * Main method is first executed when a program instance is loaded.
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java
+     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java
      * Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String
      * parameters that are passed from execution environment during invocation
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Hickey/PduTrack.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Hickey/PduTrack.java
index 00af5fe6fe9232ea8b0497e0a3455de766668670..565b32b010742d12be8b748fa3a04fae8986a047 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Hickey/PduTrack.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Hickey/PduTrack.java
@@ -347,8 +347,8 @@ public class PduTrack
 
     /**
      * Sort all PDUs by timestamp
-     * @see <a href="https://stackoverflow.com/questions/16252269/how-to-sort-an-arraylist">StackOverflow: How to sort an ArrayList?</a>
-     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html">Collections Framework Overview</a>
+     * @see <a href="https://stackoverflow.com/questions/16252269/how-to-sort-an-arraylist" target="_blank">StackOverflow: How to sort an ArrayList?</a>
+     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html" target="_blank">Collections Framework Overview</a>
      * @return same object to permit progressive setters
      */
     public PduTrack sortPdus()
@@ -369,8 +369,8 @@ public class PduTrack
     }
     /**
      * Reverse order of PDU list
-     * @see <a href="https://stackoverflow.com/questions/10766492/what-is-the-simplest-way-to-reverse-an-arraylist">StackOverflow: What is the Simplest Way to Reverse an ArrayList?</a>
-     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html">Collections Framework Overview</a>
+     * @see <a href="https://stackoverflow.com/questions/10766492/what-is-the-simplest-way-to-reverse-an-arraylist" target="_blank">StackOverflow: What is the Simplest Way to Reverse an ArrayList?</a>
+     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html" target="_blank">Collections Framework Overview</a>
      * @return same object to permit progressive setters
      */
     public PduTrack reversePdus()
@@ -823,7 +823,7 @@ public class PduTrack
     /**
      * Convert byte array to hex string
      * @param bytes input data
-     * @see <a href="https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java">https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java</a>
+     * @see <a href="https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java" target="_blank">https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java</a>
      * @return hex string
      */
     public static String bytesToHex(byte[] bytes)
@@ -1025,7 +1025,7 @@ public class PduTrack
     
     /**
      * Main method for testing.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args [address, port, descriptor] command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Hickey/package-info.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Hickey/package-info.java
index 158f3543ebe4398126354cf825d5b8a36c684acf..2bf3c1b242ff7088f7ec18b158e946f2486c05a1 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Hickey/package-info.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Hickey/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimpleSimulation program-modification homework assignment supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2022MayJune.homework2.Hickey;
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Marks/ExampleSimulationProgramMarks.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Marks/ExampleSimulationProgramMarks.java
index de4171dc8cff2c0ced5b0a84269bf17dc23b90d6..993bc3d4971a641b603ba56b85305497a5b835e1 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Marks/ExampleSimulationProgramMarks.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Marks/ExampleSimulationProgramMarks.java
@@ -24,7 +24,7 @@ import java.util.logging.Logger;
  *  that includes DIS-capable entities performing tasks of interest, and then reporting activity via PDUs
  *  to the network.
  *  Default program initialization includes PDU recording turned on by default.
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramLog.txt">ExampleSimulationProgramLog.txt</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramLog.txt" target="_blank">ExampleSimulationProgramLog.txt</a>
  */
 public class ExampleSimulationProgramMarks
 {
@@ -376,7 +376,7 @@ public class ExampleSimulationProgramMarks
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -389,7 +389,7 @@ public class ExampleSimulationProgramMarks
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -475,7 +475,7 @@ public class ExampleSimulationProgramMarks
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line parameters: network address and port.
      *    Command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Marks/ExampleTrackInterpolationMarks.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Marks/ExampleTrackInterpolationMarks.java
index 01e0c0e3826e10a1c8958818a773acd74476c188..618afe454757e9b106b260ba9249be9f71c8ef89 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Marks/ExampleTrackInterpolationMarks.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Marks/ExampleTrackInterpolationMarks.java
@@ -24,15 +24,15 @@ import java.util.logging.Logger;
  * simulation for networked entity tracks and presentation, including
  * DIS-capable entities doing tasks and reporting them to the network.
  * Default settings include PDU recording turned on by default.
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleTrackInterpolationLog.txt">ExampleTrackInterpolationLog.txt</a>
- * @see <a href="https://calhoun.nps.edu/handle/10945/65436">REPEATABLE UNIT TESTING OF DISTRIBUTED INTERACTIVE SIMULATION (DIS) PROTOCOL BEHAVIOR STREAMS USING WEB STANDARDS</a> by Tobias Brennenstuhl, Masters Thesis, Naval Postgraduate School (NPS), June 2020
- * @see <a href="https://gitlab.nps.edu/Savage/SavageTheses/-/tree/master/BrennenstuhlTobias">https://gitlab.nps.edu/Savage/SavageTheses/-/tree/master/BrennenstuhlTobias</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleTrackInterpolationLog.txt" target="_blank">ExampleTrackInterpolationLog.txt</a>
+ * @see <a href="https://calhoun.nps.edu/handle/10945/65436" target="_blank">REPEATABLE UNIT TESTING OF DISTRIBUTED INTERACTIVE SIMULATION (DIS) PROTOCOL BEHAVIOR STREAMS USING WEB STANDARDS</a> by Tobias Brennenstuhl, Masters Thesis, Naval Postgraduate School (NPS), June 2020
+ * @see <a href="https://gitlab.nps.edu/Savage/SavageTheses/-/tree/master/BrennenstuhlTobias" target="_blank">https://gitlab.nps.edu/Savage/SavageTheses/-/tree/master/BrennenstuhlTobias</a>
  */
 public class ExampleTrackInterpolationMarks extends ExampleSimulationProgramMarks
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public ExampleTrackInterpolationMarks ()
     {
@@ -234,7 +234,7 @@ public class ExampleTrackInterpolationMarks extends ExampleSimulationProgramMark
      * Main method is first executed when a program instance is loaded.
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java
+     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java
      * Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String
      * parameters that are passed from execution environment during invocation
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Marks/PduTrack.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Marks/PduTrack.java
index 7891d253427f00358a7160f512978ebced5f2959..fab5a4f9cb780a43a063b87888cce8538d7b3ad7 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Marks/PduTrack.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Marks/PduTrack.java
@@ -346,8 +346,8 @@ public class PduTrack
 
     /**
      * Sort all PDUs by timestamp
-     * @see <a href="https://stackoverflow.com/questions/16252269/how-to-sort-an-arraylist">StackOverflow: How to sort an ArrayList?</a>
-     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html">Collections Framework Overview</a>
+     * @see <a href="https://stackoverflow.com/questions/16252269/how-to-sort-an-arraylist" target="_blank">StackOverflow: How to sort an ArrayList?</a>
+     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html" target="_blank">Collections Framework Overview</a>
      * @return same object to permit progressive setters
      */
     public PduTrack sortPdus()
@@ -368,8 +368,8 @@ public class PduTrack
     }
     /**
      * Reverse order of PDU list
-     * @see <a href="https://stackoverflow.com/questions/10766492/what-is-the-simplest-way-to-reverse-an-arraylist">StackOverflow: What is the Simplest Way to Reverse an ArrayList?</a>
-     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html">Collections Framework Overview</a>
+     * @see <a href="https://stackoverflow.com/questions/10766492/what-is-the-simplest-way-to-reverse-an-arraylist" target="_blank">StackOverflow: What is the Simplest Way to Reverse an ArrayList?</a>
+     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html" target="_blank">Collections Framework Overview</a>
      * @return same object to permit progressive setters
      */
     public PduTrack reversePdus()
@@ -822,7 +822,7 @@ public class PduTrack
     /**
      * Convert byte array to hex string
      * @param bytes input data
-     * @see <a href="https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java">https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java</a>
+     * @see <a href="https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java" target="_blank">https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java</a>
      * @return hex string
      */
     public static String bytesToHex(byte[] bytes)
@@ -1024,7 +1024,7 @@ public class PduTrack
     
     /**
      * Main method for testing.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args [address, port, descriptor] command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Marks/package-info.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Marks/package-info.java
index 222c1a19d261735b4c677b72d57a5ef744cea6b8..ce2d3bb6a55634e76dc929931e06aa945c4c4c09 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Marks/package-info.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Marks/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimpleSimulation program-modification homework assignment supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2022MayJune.homework2.Marks;
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Martin/package-info.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Martin/package-info.java
index 06e60be9a7f5a855c14753431f61cfed1d61b222..e37e926a13acdba607933f40aa8b4a1d9c5e1a0e 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Martin/package-info.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Martin/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimpleSimulation program-modification homework assignment supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2022MayJune.homework2.Martin;
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Royer/Homework2.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Royer/Homework2.java
index 1f2bd7b8d750b17391b207696795368c7a54b4a7..050169d7ea2b7dff58056fdc7900efdf574c7976 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Royer/Homework2.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Royer/Homework2.java
@@ -18,7 +18,7 @@ import java.util.logging.Logger;
  *  that includes DIS-capable entities performing tasks of interest, and then reporting activity via PDUs
  *  to the network.
  *  Default program initialization includes PDU recording turned on by default.
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramLog.txt">ExampleSimulationProgramLog.txt</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramLog.txt" target="_blank">ExampleSimulationProgramLog.txt</a>
  */
 public class Homework2
 {
@@ -265,7 +265,7 @@ public class Homework2
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -330,7 +330,7 @@ public class Homework2
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line parameters: network address and port.
      *    Command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Royer/package-info.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Royer/package-info.java
index 68d490841f110b6dcf4b8986e796b7ccb1edcb5b..e0728c0cb9de68cc892c7bc94d251519c43a0116 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Royer/package-info.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Royer/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimpleSimulation program-modification homework assignment supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2022MayJune.homework2.Royer;
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Tam/ExampleSimulationProgramTam.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Tam/ExampleSimulationProgramTam.java
index 49399c2f5d43948a94d2d992700195199fd64160..6cca74d7db712c9eec3f8dce3e992bca5fae4baa 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Tam/ExampleSimulationProgramTam.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Tam/ExampleSimulationProgramTam.java
@@ -24,7 +24,7 @@ import java.util.logging.Logger;
  *  that includes DIS-capable entities performing tasks of interest, and then reporting activity via PDUs
  *  to the network.
  *  Default program initialization includes PDU recording turned on by default.
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramLog.txt">ExampleSimulationProgramLog.txt</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramLog.txt" target="_blank">ExampleSimulationProgramLog.txt</a>
  */
 public class ExampleSimulationProgramTam
 {
@@ -376,7 +376,7 @@ public class ExampleSimulationProgramTam
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -389,7 +389,7 @@ public class ExampleSimulationProgramTam
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -475,7 +475,7 @@ public class ExampleSimulationProgramTam
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line parameters: network address and port.
      *    Command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Tam/ExampleTrackInterpolationTam.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Tam/ExampleTrackInterpolationTam.java
index 775fee32a2b959d56c712a6c751d29e2d8cd84fc..4b34781927617f4fc016bc93fe67f40ed10d2955 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Tam/ExampleTrackInterpolationTam.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Tam/ExampleTrackInterpolationTam.java
@@ -26,15 +26,15 @@ import java.util.logging.Logger;
  * simulation for networked entity tracks and presentation, including
  * DIS-capable entities doing tasks and reporting them to the network.
  * Default settings include PDU recording turned on by default.
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleTrackInterpolationLog.txt">ExampleTrackInterpolationLog.txt</a>
- * @see <a href="https://calhoun.nps.edu/handle/10945/65436">REPEATABLE UNIT TESTING OF DISTRIBUTED INTERACTIVE SIMULATION (DIS) PROTOCOL BEHAVIOR STREAMS USING WEB STANDARDS</a> by Tobias Brennenstuhl, Masters Thesis, Naval Postgraduate School (NPS), June 2020
- * @see <a href="https://gitlab.nps.edu/Savage/SavageTheses/-/tree/master/BrennenstuhlTobias">https://gitlab.nps.edu/Savage/SavageTheses/-/tree/master/BrennenstuhlTobias</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleTrackInterpolationLog.txt" target="_blank">ExampleTrackInterpolationLog.txt</a>
+ * @see <a href="https://calhoun.nps.edu/handle/10945/65436" target="_blank">REPEATABLE UNIT TESTING OF DISTRIBUTED INTERACTIVE SIMULATION (DIS) PROTOCOL BEHAVIOR STREAMS USING WEB STANDARDS</a> by Tobias Brennenstuhl, Masters Thesis, Naval Postgraduate School (NPS), June 2020
+ * @see <a href="https://gitlab.nps.edu/Savage/SavageTheses/-/tree/master/BrennenstuhlTobias" target="_blank">https://gitlab.nps.edu/Savage/SavageTheses/-/tree/master/BrennenstuhlTobias</a>
  */
 public class ExampleTrackInterpolationTam extends ExampleSimulationProgramTam
 {
     /**
      * Default constructor to silence javadoc warning
-     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor">StackOverflow: Java default constructor</a>
+     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
      */
     public ExampleTrackInterpolationTam ()
     {
@@ -236,7 +236,7 @@ public class ExampleTrackInterpolationTam extends ExampleSimulationProgramTam
      * Main method is first executed when a program instance is loaded.
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java
+     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java
      * Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String
      * parameters that are passed from execution environment during invocation
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Tam/PduTrack.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Tam/PduTrack.java
index 8d54bbc547ef170a9438275b9d45d39a56ad4f1f..5d3767354746d41ac4bbe9a839049b275fb20fc5 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Tam/PduTrack.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Tam/PduTrack.java
@@ -346,8 +346,8 @@ public class PduTrack
 
     /**
      * Sort all PDUs by timestamp
-     * @see <a href="https://stackoverflow.com/questions/16252269/how-to-sort-an-arraylist">StackOverflow: How to sort an ArrayList?</a>
-     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html">Collections Framework Overview</a>
+     * @see <a href="https://stackoverflow.com/questions/16252269/how-to-sort-an-arraylist" target="_blank">StackOverflow: How to sort an ArrayList?</a>
+     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html" target="_blank">Collections Framework Overview</a>
      * @return same object to permit progressive setters
      */
     public PduTrack sortPdus()
@@ -368,8 +368,8 @@ public class PduTrack
     }
     /**
      * Reverse order of PDU list
-     * @see <a href="https://stackoverflow.com/questions/10766492/what-is-the-simplest-way-to-reverse-an-arraylist">StackOverflow: What is the Simplest Way to Reverse an ArrayList?</a>
-     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html">Collections Framework Overview</a>
+     * @see <a href="https://stackoverflow.com/questions/10766492/what-is-the-simplest-way-to-reverse-an-arraylist" target="_blank">StackOverflow: What is the Simplest Way to Reverse an ArrayList?</a>
+     * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-overview.html" target="_blank">Collections Framework Overview</a>
      * @return same object to permit progressive setters
      */
     public PduTrack reversePdus()
@@ -822,7 +822,7 @@ public class PduTrack
     /**
      * Convert byte array to hex string
      * @param bytes input data
-     * @see <a href="https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java">https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java</a>
+     * @see <a href="https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java" target="_blank">https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java</a>
      * @return hex string
      */
     public static String bytesToHex(byte[] bytes)
@@ -1024,7 +1024,7 @@ public class PduTrack
     
     /**
      * Main method for testing.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args [address, port, descriptor] command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/Tam/package-info.java b/assignments/src/MV3500Cohort2022MayJune/homework2/Tam/package-info.java
index a2a5e58d8596b53f2198c51457e14c735168b416..23a25a3bc3378da0bec37ee263dbf3f68a462571 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/Tam/package-info.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/Tam/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Program-modification homework assignment supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2022MayJune.homework2.Tam;
diff --git a/assignments/src/MV3500Cohort2022MayJune/homework2/package-info.java b/assignments/src/MV3500Cohort2022MayJune/homework2/package-info.java
index 5b29b5370b92dcf1273975b0917de495f16d632f..08ea2ee2dc699b4f57c85a36d2d273d7cbf2403f 100644
--- a/assignments/src/MV3500Cohort2022MayJune/homework2/package-info.java
+++ b/assignments/src/MV3500Cohort2022MayJune/homework2/package-info.java
@@ -1,10 +1,10 @@
 /**
  * ExampleSimpleSimulation program-modification homework assignment supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2022MayJune.homework2;
diff --git a/assignments/src/MV3500Cohort2022MayJune/projects/ArrivalProcessOpenDis7.java b/assignments/src/MV3500Cohort2022MayJune/projects/ArrivalProcessOpenDis7.java
index 19c77d09ac1e02363611fd3f124bd2dd76aa8c2a..de8c6c855b191644a4808c65c0bad7f7fa359cc2 100644
--- a/assignments/src/MV3500Cohort2022MayJune/projects/ArrivalProcessOpenDis7.java
+++ b/assignments/src/MV3500Cohort2022MayJune/projects/ArrivalProcessOpenDis7.java
@@ -13,8 +13,8 @@ import simkit.random.RandomVariate;
  *
  * @see MV3500Cohort2022MayJune.projects.TwoCraneBerths
  * @see MV3500Cohort2022MayJune.projects.run.RunTwoCranesBerthOpenDis7
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/examples/src/SimkitOpenDis7Examples/ArrivalProcessOpenDis7EventGraph.png">ArrivalProcessDisPdu.png</a>
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/examples/src/SimkitOpenDis7Examples/TwoCraneBerthsComponentEventGraph.png">TwoCraneBerthsComponentEventGraph.png</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/examples/src/SimkitOpenDis7Examples/ArrivalProcessOpenDis7EventGraph.png" target="_blank">ArrivalProcessDisPdu.png</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/examples/src/SimkitOpenDis7Examples/TwoCraneBerthsComponentEventGraph.png" target="_blank">TwoCraneBerthsComponentEventGraph.png</a>
  * @author abuss@nps.edu
  * @author brutzman@nps.edu
  */
diff --git a/assignments/src/MV3500Cohort2022MayJune/projects/TwoCraneBerthsOpenDis7.java b/assignments/src/MV3500Cohort2022MayJune/projects/TwoCraneBerthsOpenDis7.java
index adc2ba93f86c9674d46d29afb65c89c3b1eb133a..45a398cd669a04abf2e24a2f29950b1c2feebbf0 100644
--- a/assignments/src/MV3500Cohort2022MayJune/projects/TwoCraneBerthsOpenDis7.java
+++ b/assignments/src/MV3500Cohort2022MayJune/projects/TwoCraneBerthsOpenDis7.java
@@ -17,9 +17,9 @@ import simkit.SimEntityBase;
  * @see TwoCraneBerths
  * @see MV3500Cohort2022MayJune.projects.TwoCraneBerthsOpenDis7
  * @see MV3500Cohort2022MayJune.projects.run.RunTwoCranesBerthOpenDis7
- * @see <a href="run/RunTwoCranesBerthOpenDis7Log.txt">RunTwoCranesBerthOpenDis7Log.txt</a>
- * @see <a href="TwoCraneBerthsAssignment05.docx">TwoCraneBerthsAssignment05.docx</a>
- * @see <a href="TwoCraneBerthsAssignment05Solution.docx">TwoCraneBerthsAssignment05Solution.docx</a>
+ * @see <a href="run/RunTwoCranesBerthOpenDis7Log.txt" target="_blank">RunTwoCranesBerthOpenDis7Log.txt</a>
+ * @see <a href="TwoCraneBerthsAssignment05.docx" target="_blank">TwoCraneBerthsAssignment05.docx</a>
+ * @see <a href="TwoCraneBerthsAssignment05Solution.docx" target="_blank">TwoCraneBerthsAssignment05Solution.docx</a>
  * @author abuss@nps.edu@nps.edu
  * @author brutzman@nps.edu
  */
@@ -214,7 +214,7 @@ public class TwoCraneBerthsOpenDis7 extends SimEntityBase
      * @param simkitTimeStamp  simkit timeStamp when crane operations began
      * @param numberContainers how many container boxes to offload
      * @param pierDistanceForCraneOffload  Y coordinate down pier across from ship's berth, aligned with cargo
-     * @see <a href="https://en.wikipedia.org/wiki/The_Box_(Levinson_book)">The Box: How the Shipping Container Made the World Smaller and the World Economy Bigger is</a>
+     * @see <a href="https://en.wikipedia.org/wiki/The_Box_(Levinson_book)" target="_blank">The Box: How the Shipping Container Made the World Smaller and the World Economy Bigger is</a>
      */
     public void reportCraneContainerUnloadOperationsDIS(
                     double simkitTimeStamp,
diff --git a/assignments/src/MV3500Cohort2022MayJune/projects/package-info.java b/assignments/src/MV3500Cohort2022MayJune/projects/package-info.java
index 9ebdc25d3f8cdbe69979328bd59fc7374e0f1d68..b3c840c25b2153c9d763edc95723cb6c0fc80110 100644
--- a/assignments/src/MV3500Cohort2022MayJune/projects/package-info.java
+++ b/assignments/src/MV3500Cohort2022MayJune/projects/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Student projects produced as part of the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2022MayJune.projects;
diff --git a/assignments/src/MV3500Cohort2022MayJune/projects/run/package-info.java b/assignments/src/MV3500Cohort2022MayJune/projects/run/package-info.java
index 99c23e9d14338d05d7ea6cb68172aca8cbfb5c75..db2c9d4e8441c5744e045c38aec46f94ffeee602 100644
--- a/assignments/src/MV3500Cohort2022MayJune/projects/run/package-info.java
+++ b/assignments/src/MV3500Cohort2022MayJune/projects/run/package-info.java
@@ -2,10 +2,10 @@
  * Student projects produced as part of the NPS MOVES MV3500 Networked Graphics course, note that
  * the run subpackage is necessary for Simkit execution.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2022MayJune.projects.run;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework1/Cecil/Assignment1_TCP_Client.java b/assignments/src/MV3500Cohort2023MarchJune/homework1/Cecil/Assignment1_TCP_Client.java
index 65880aab66a9b4cfc0ac85b597bf1909f8ad506a..5ee6e349fb90056ccffd8bbce008ab38e51fbd93 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework1/Cecil/Assignment1_TCP_Client.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework1/Cecil/Assignment1_TCP_Client.java
@@ -26,8 +26,8 @@ public class Assignment1_TCP_Client
         // default constructor
     }
     /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
-     * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
-     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
+     * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
      */
     public final static String LOCALHOST = "0:0:0:0:0:0:0:1";
 
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework1/Cecil/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework1/Cecil/package-info.java
index 96d2650c30dcc9be865bc0bb059571babbcd3102..77460c71ca6cbe2c048b15c04dcbbe9b4b767c0e 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework1/Cecil/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework1/Cecil/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Program-modification homework assignment supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework1.Cecil;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework1/Chojnacki/Assignment1Client.java b/assignments/src/MV3500Cohort2023MarchJune/homework1/Chojnacki/Assignment1Client.java
index 02fc826d6b1b4a01bb2ed4edac08ef485d08d995..daa38925af7081813d78419dfee1bcc9a2fe8ac5 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework1/Chojnacki/Assignment1Client.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework1/Chojnacki/Assignment1Client.java
@@ -28,8 +28,8 @@ public class Assignment1Client
         // default constructor
     }
     /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
-     * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
-     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
+     * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
      */
     public final static String LOCALHOST = "0:0:0:0:0:0:0:1";
 
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework1/Chojnacki/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework1/Chojnacki/package-info.java
index c16608d8ed9b791e4c2b3659e10ea65ee695fc89..721da89f5712528bf9c5f22c6a33eca4fc7cb01d 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework1/Chojnacki/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework1/Chojnacki/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Program-modification homework assignment supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework1.Chojnacki;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework1/Fredrickson/FredricksonAssignment1Client.java b/assignments/src/MV3500Cohort2023MarchJune/homework1/Fredrickson/FredricksonAssignment1Client.java
index 3bea9e79c5a45186810bbef35d6fe4756c6e547b..e7f0f1d0124d10fa380a67b3bab593a789bcbcb0 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework1/Fredrickson/FredricksonAssignment1Client.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework1/Fredrickson/FredricksonAssignment1Client.java
@@ -31,8 +31,8 @@ public class FredricksonAssignment1Client
         // default constructor
     }
     /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
-     * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
-     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
+     * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
      */
     public final static String LOCALHOST = "0:0:0:0:0:0:0:1";
 
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework1/Fredrickson/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework1/Fredrickson/package-info.java
index 3bf6865838935398a0d7a157033880e83a755673..d516016f23948bc275a3527f9c045c79f4a14e9b 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework1/Fredrickson/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework1/Fredrickson/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Program-modification homework assignment supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework1.Fredrickson;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework1/Hedgcorth/Assignment1Client.java b/assignments/src/MV3500Cohort2023MarchJune/homework1/Hedgcorth/Assignment1Client.java
index 6747eddc5525317b5f2df14df4de61d3685cd57c..695bb855c2f9fae339e093a0018f19d2140c9001 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework1/Hedgcorth/Assignment1Client.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework1/Hedgcorth/Assignment1Client.java
@@ -27,8 +27,8 @@ public class Assignment1Client
     }
 
     /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
-     * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
-     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
+     * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
      */
     public final static String LOCALHOST = "0:0:0:0:0:0:0:1"; //Local host
 
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework1/Hedgcorth/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework1/Hedgcorth/package-info.java
index 5bda94bd2955de8c8ea224c1923fe36880912936..e924143702af4569900f2486080b91a1326cbce7 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework1/Hedgcorth/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework1/Hedgcorth/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Program-modification homework assignment supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework1.Hedgcorth;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework1/Islas/HW1Client.java b/assignments/src/MV3500Cohort2023MarchJune/homework1/Islas/HW1Client.java
index 6f01a415ef58601caa648ca9746f45d69ffe66e0..09f73d2eb70693b064c9749a5ab23ac5b1f75cca 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework1/Islas/HW1Client.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework1/Islas/HW1Client.java
@@ -22,8 +22,8 @@ public class HW1Client {
       }
   
       /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
-       * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
-       * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
+       * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+       * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
        */
       public final static String LOCALHOST = "0:0:0:0:0:0:0:1"; //Local host
   
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework1/Islas/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework1/Islas/package-info.java
index 690f498b07b48325fe26423531cb31bfbed04a00..d83b2c225d13603462df98c64f2098a89fe66a82 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework1/Islas/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework1/Islas/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Program-modification homework assignment supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework1.Islas;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework1/Oblak/Assignment1Client.java b/assignments/src/MV3500Cohort2023MarchJune/homework1/Oblak/Assignment1Client.java
index b8954324d1ec1dc1c6acd0617021c42f3b4bccbb..3c8817d729704e5b6af1be77c8c172b6e4dc82d5 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework1/Oblak/Assignment1Client.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework1/Oblak/Assignment1Client.java
@@ -26,8 +26,8 @@ public class Assignment1Client
         // default constructor
     }
     /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
-     * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
-     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
+     * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
      */
     public final static String LOCALHOST = "0:0:0:0:0:0:0:1";
 
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework1/Oblak/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework1/Oblak/package-info.java
index fd08cc44b4ce7f9fb38f9508340cfbbb5c194adb..251da68964ff67c9231f5541247a12ad8eb08eed 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework1/Oblak/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework1/Oblak/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Program-modification homework assignment supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework1.Oblak;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework1/Sloan/SloanExample3Client.java b/assignments/src/MV3500Cohort2023MarchJune/homework1/Sloan/SloanExample3Client.java
index 8517bf786544a25d35c3df743ad4f4239329c218..8fce15a84b9170fd52f9252a342d5631aef3221b 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework1/Sloan/SloanExample3Client.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework1/Sloan/SloanExample3Client.java
@@ -26,8 +26,8 @@ public class SloanExample3Client {
     }
 
     /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
-     * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
-     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
+     * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
      */
     public final static String LOCALHOST = "0:0:0:0:0:0:0:1"; //Local host
 
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework1/Sloan/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework1/Sloan/package-info.java
index ce3204575757711ece6456de74a6e6aeda297026..dd853362978996e143b0c2130f14370538b27bc7 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework1/Sloan/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework1/Sloan/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Program-modification homework assignment supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework1.Sloan;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework1/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework1/package-info.java
index c65b281e1319b994cd75bb19990c9c5e74dfe79c..19d43eec89c2511e184d8b231879fbcf54fca74d 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework1/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework1/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework1;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Cecil/MulticastUdpSenderCecil.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Cecil/MulticastUdpSenderCecil.java
index b5ac6fa9e6f861f95825150be5d6af495c30bdc9..33365810670ca5e0a0b89fb474d4cf0a5d01daf2 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Cecil/MulticastUdpSenderCecil.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Cecil/MulticastUdpSenderCecil.java
@@ -25,10 +25,10 @@ public class MulticastUdpSenderCecil
     // https://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml
 
     /** Default multicast group address for send and receive connections.
-     * @see <a href="https://en.wikipedia.org/wiki/Multicast_address">https://en.wikipedia.org/wiki/Multicast_address</a> */
+     * @see <a href="https://en.wikipedia.org/wiki/Multicast_address" target="_blank">https://en.wikipedia.org/wiki/Multicast_address</a> */
     public static final String MULTICAST_ADDRESS = "239.1.2.15"; // within reserved multicast address range
     /** Default socket port used, matches Wireshark DIS capture default
-     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
     public static final int     DESTINATION_PORT = 1718;
     
     /** Time to live: how many router-decrement levels can be crossed */
@@ -38,7 +38,7 @@ public class MulticastUdpSenderCecil
     public static final int LOOPSIZE = 8; // or maybe 20000
     
     /** Receiving this message causes termination
-     * @see <a href="https://en.wikipedia.org/wiki/Sentinel_value">https://en.wikipedia.org/wiki/Sentinel_value</a> */
+     * @see <a href="https://en.wikipedia.org/wiki/Sentinel_value" target="_blank">https://en.wikipedia.org/wiki/Sentinel_value</a> */
     public static final String QUIT_SENTINEL = "Daylight come and me want to go home.";
     private static NetworkInterface ni;
     
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Cecil/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Cecil/package-info.java
index 77476e14ca3e36145e4e318ecf65a22fbe0feb3a..dd3c7f0fc364b0495b5280acc59ba444ff0e158f 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Cecil/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Cecil/package-info.java
@@ -2,10 +2,10 @@
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * TODO You can say whatever you want here!
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework2.Cecil;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Chojnacki/MulticastUdpSender.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Chojnacki/MulticastUdpSender.java
index a61668e1f6fec5a2a0baa509247096b28a114491..43ef543ed38d78b19d45cd9c181c2f9cbd845b63 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Chojnacki/MulticastUdpSender.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Chojnacki/MulticastUdpSender.java
@@ -29,14 +29,14 @@ public class MulticastUdpSender {
      * Default multicast group address for send and receive connections.
      *
      * @see
-     * <a href="https://en.wikipedia.org/wiki/Multicast_address">https://en.wikipedia.org/wiki/Multicast_address</a>
+     * <a href="https://en.wikipedia.org/wiki/Multicast_address" target="_blank">https://en.wikipedia.org/wiki/Multicast_address</a>
      */
     public static final String MULTICAST_ADDRESS = "239.1.2.15"; // within reserved multicast address range
     /**
      * Default socket port used, matches Wireshark DIS capture default
      *
      * @see
-     * <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)">https://en.wikipedia.org/wiki/Port_(computer_networking)</a>
+     * <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a>
      */
     public static final int DESTINATION_PORT = 1718;
 
@@ -54,7 +54,7 @@ public class MulticastUdpSender {
      * Receiving this message causes termination
      *
      * @see
-     * <a href="https://en.wikipedia.org/wiki/Sentinel_value">https://en.wikipedia.org/wiki/Sentinel_value</a>
+     * <a href="https://en.wikipedia.org/wiki/Sentinel_value" target="_blank">https://en.wikipedia.org/wiki/Sentinel_value</a>
      */
     public static final String QUIT_SENTINEL = "I surrender!";
     private static NetworkInterface ni;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Chojnacki/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Chojnacki/package-info.java
index 678bb2d5ba301d14dcd7207fea71ba7106ad9605..893ee0461c7c1dfcbb4d269c5ef781080b585df0 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Chojnacki/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Chojnacki/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Multicast Receiver and Sender.  Sender sends 10 packets.  The Receiver closes once 10 packets have been received.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework2.Chojnacki;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Fredrickson/UnicastUdpReceiver.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Fredrickson/UnicastUdpReceiver.java
index 991ef8cf0668861d0bc71e87200ef94149e30944..5a6664e1fdd669c400ffc444c4a181397bcac21c 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Fredrickson/UnicastUdpReceiver.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Fredrickson/UnicastUdpReceiver.java
@@ -10,9 +10,9 @@ import java.net.*;
  * 
  * Start this before launching UdpSender.
  *
- * @see <a href="https://docs.oracle.com/javase/tutorial/networking/datagrams/index.html">https://docs.oracle.com/javase/tutorial/networking/datagrams/index.html</a>
- * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
- * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/networking/datagrams/index.html" target="_blank">https://docs.oracle.com/javase/tutorial/networking/datagrams/index.html</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html" target="_blank">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
+ * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol" target="_blank">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
  * @author mcgredo
  * @author brutzman@nps.edu
  * 
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Fredrickson/UnicastUdpSender.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Fredrickson/UnicastUdpSender.java
index 7863285a7ad6dc4e088a6c7b5b489d2df8db7655..7ab83aeff802102b617790837a5d2c01c41fde1c 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Fredrickson/UnicastUdpSender.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Fredrickson/UnicastUdpSender.java
@@ -11,9 +11,9 @@ import java.net.*;
  * 
  * Start this before launching UdpReceiver.
  * 
- * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
- * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
- * @see <a href="https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html">System properties</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html" target="_blank">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
+ * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol" target="_blank">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html" target="_blank">System properties</a>
  * @author mcgredo
  * @author brutzman@nps.edu
  * 
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Fredrickson/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Fredrickson/package-info.java
index f1c8d2801c03f5404fe0c4ebfc5827d00e716ded..9ad9cf59fce3e38f3744d642a8f4865a54ea7461 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Fredrickson/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Fredrickson/package-info.java
@@ -2,10 +2,10 @@
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * TODO You can say whatever you want here!
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework2.Fredrickson;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Hedgcorth/MulticastUdpSender.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Hedgcorth/MulticastUdpSender.java
index f592e12224df880e445f5f9d3fcabb7bd23d0be6..9f7f871532e8cb0d6a57c9ada249e88317f99a5a 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Hedgcorth/MulticastUdpSender.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Hedgcorth/MulticastUdpSender.java
@@ -37,14 +37,14 @@ public class MulticastUdpSender {
      * Default multicast group address for send and receive connections.
      *
      * @see
-     * <a href="https://en.wikipedia.org/wiki/Multicast_address">https://en.wikipedia.org/wiki/Multicast_address</a>
+     * <a href="https://en.wikipedia.org/wiki/Multicast_address" target="_blank">https://en.wikipedia.org/wiki/Multicast_address</a>
      */
     public static final String MULTICAST_ADDRESS = "239.1.2.15"; // within reserved multicast address range
     /**
      * Default socket port used, matches Wireshark DIS capture default
      *
      * @see
-     * <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)">https://en.wikipedia.org/wiki/Port_(computer_networking)</a>
+     * <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a>
      */
     public static final int DESTINATION_PORT = 1718;
 
@@ -62,7 +62,7 @@ public class MulticastUdpSender {
      * Receiving this message causes termination
      *
      * @see
-     * <a href="https://en.wikipedia.org/wiki/Sentinel_value">https://en.wikipedia.org/wiki/Sentinel_value</a>
+     * <a href="https://en.wikipedia.org/wiki/Sentinel_value" target="_blank">https://en.wikipedia.org/wiki/Sentinel_value</a>
      */
     public static final String QUIT_SENTINEL = "QUIT QUIT QUIT!";
     private static NetworkInterface ni;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Hedgcorth/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Hedgcorth/package-info.java
index fb110c5e71a0d765b5906679ed236ddc2c597885..44c283727e3237c9a082bd3df161a27ad860da23 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Hedgcorth/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Hedgcorth/package-info.java
@@ -2,10 +2,10 @@
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * TODO You can say whatever you want here!
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework2.Hedgcorth;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Islas/UnicastUdpReceiver.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Islas/UnicastUdpReceiver.java
index 524ca4a85a2b8fc07d09262f28968c0c411b2f08..64d45b074c1efc1cecf35bbcd774a944620e89f8 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Islas/UnicastUdpReceiver.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Islas/UnicastUdpReceiver.java
@@ -10,9 +10,9 @@ import java.net.*;
  * 
  * Start this before launching UdpSender.
  *
- * @see <a href="https://docs.oracle.com/javase/tutorial/networking/datagrams/index.html">https://docs.oracle.com/javase/tutorial/networking/datagrams/index.html</a>
- * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
- * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/networking/datagrams/index.html" target="_blank">https://docs.oracle.com/javase/tutorial/networking/datagrams/index.html</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html" target="_blank">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
+ * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol" target="_blank">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
  * @author mcgredo
  * @author brutzman@nps.edu
  */
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Islas/UnicastUdpSender.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Islas/UnicastUdpSender.java
index c5f10beed4ba82974f943aae57a12c4f7997575d..96f15841ba206bf8bf39b7503b4334b159dd57b5 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Islas/UnicastUdpSender.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Islas/UnicastUdpSender.java
@@ -11,9 +11,9 @@ import java.net.*;
  * 
  * Start this before launching UdpReceiver.
  * 
- * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
- * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
- * @see <a href="https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html">System properties</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html" target="_blank">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
+ * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol" target="_blank">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html" target="_blank">System properties</a>
  * @author mcgredo
  * @author brutzman@nps.edu
  */
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Islas/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Islas/package-info.java
index 64265bded454c38d6ecb129f675255636ed69887..d9c0925c1abc85a2ed0b3abffa0ebe4f95e94837 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Islas/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Islas/package-info.java
@@ -3,10 +3,10 @@
  * Sets up a UDP Receiver, prompting a pass question from Montey Python, and a UDP Sender, submitting 25 guesses
  * to the prompt.  
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework2.Islas;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Oblak/UnicastUdpReceiver.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Oblak/UnicastUdpReceiver.java
index c7240c69f0633050c6719c9448131a3d161860ce..feb885af0ac02699043c9123db8228c09140e6b4 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Oblak/UnicastUdpReceiver.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Oblak/UnicastUdpReceiver.java
@@ -10,9 +10,9 @@ import java.net.*;
  * 
  * Start this before launching UdpSender.
  *
- * @see <a href="https://docs.oracle.com/javase/tutorial/networking/datagrams/index.html">https://docs.oracle.com/javase/tutorial/networking/datagrams/index.html</a>
- * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
- * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/networking/datagrams/index.html" target="_blank">https://docs.oracle.com/javase/tutorial/networking/datagrams/index.html</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html" target="_blank">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
+ * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol" target="_blank">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
  * @author mcgredo
  * @author brutzman@nps.edu
  */
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Oblak/UnicastUdpSender.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Oblak/UnicastUdpSender.java
index c9df2c8982abc2486432d6b64c09945bfa68c0d0..c8929f4192a7396dcc54fdaacff673bc7088824e 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Oblak/UnicastUdpSender.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Oblak/UnicastUdpSender.java
@@ -11,9 +11,9 @@ import java.net.*;
  * 
  * Start this before launching UdpReceiver.
  * 
- * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
- * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
- * @see <a href="https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html">System properties</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html" target="_blank">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
+ * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol" target="_blank">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html" target="_blank">System properties</a>
  * @author mcgredo
  * @author brutzman@nps.edu
  */
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Oblak/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Oblak/package-info.java
index 505148ee70577fdf79676af477a0e59a301d6801..be6554d376c9b81134fc602411c3c1f1c23f3ba5 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Oblak/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Oblak/package-info.java
@@ -3,10 +3,10 @@
  * Sets up a UDP Receiver, prompting a pass question from Monterey Python, and a UDP Sender, submitting 25 guesses
  * to the prompt.  
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework2.Oblak;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Sloan/SloanMulticastUdpSender.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Sloan/SloanMulticastUdpSender.java
index b39432e9ded77f37ae443296de1330779aa6d025..7af61f36b162cec1281830a313da8eb8d2bb6356 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Sloan/SloanMulticastUdpSender.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Sloan/SloanMulticastUdpSender.java
@@ -34,10 +34,10 @@ public class SloanMulticastUdpSender
     // https://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml
 
     /** Default multicast group address for send and receive connections.
-     * @see <a href="https://en.wikipedia.org/wiki/Multicast_address">https://en.wikipedia.org/wiki/Multicast_address</a> */
+     * @see <a href="https://en.wikipedia.org/wiki/Multicast_address" target="_blank">https://en.wikipedia.org/wiki/Multicast_address</a> */
     public static final String MULTICAST_ADDRESS = "239.1.2.15"; // within reserved multicast address range
     /** Default socket port used, matches Wireshark DIS capture default
-     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
     public static final int     DESTINATION_PORT = 1718;
     
     /** Time to live: how many router-decrement levels can be crossed */
@@ -47,7 +47,7 @@ public class SloanMulticastUdpSender
     public static final int LOOPSIZE = 20; // or maybe 20000
     
     /** Receiving this message causes termination
-     * @see <a href="https://en.wikipedia.org/wiki/Sentinel_value">https://en.wikipedia.org/wiki/Sentinel_value</a> */
+     * @see <a href="https://en.wikipedia.org/wiki/Sentinel_value" target="_blank">https://en.wikipedia.org/wiki/Sentinel_value</a> */
     public static final String QUIT_SENTINEL = "QUIT QUIT QUIT!";
     /** sharable value */
     public static final String SUSTAIN_RUNNING = "PROGRAM STILL RUNNING";
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Sloan/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Sloan/package-info.java
index 2d2a567fdb03940da8845d4a2c774ffc98064609..d9c758998c8aff6c7d49618f5dd00dc4edf5ed8d 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Sloan/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Sloan/package-info.java
@@ -2,10 +2,10 @@
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * TODO You can say whatever you want here!
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework2.Sloan;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Tidwell/MulticastUdpSender.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Tidwell/MulticastUdpSender.java
index f7b82fd27ca0633d88303857cc99ebd50f0ab757..0f186916f6337e48cfd0c53258923ad2aa7998ce 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Tidwell/MulticastUdpSender.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Tidwell/MulticastUdpSender.java
@@ -21,10 +21,10 @@ public class MulticastUdpSender {
     // https://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml
 
     /** Default multicast group address for send and receive connections.
-     * @see <a href="https://en.wikipedia.org/wiki/Multicast_address">https://en.wikipedia.org/wiki/Multicast_address</a> */
+     * @see <a href="https://en.wikipedia.org/wiki/Multicast_address" target="_blank">https://en.wikipedia.org/wiki/Multicast_address</a> */
     public static final String MULTICAST_ADDRESS = "239.1.2.15"; // within reserved multicast address range
     /** Default socket port used, matches Wireshark DIS capture default
-     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
     public static final int     DESTINATION_PORT = 1718;
     
     /** Time to live: how many router-decrement levels can be crossed */
@@ -34,7 +34,7 @@ public class MulticastUdpSender {
     public static final int LOOPSIZE = 20; // or maybe 20000
     
     /** Receiving this message causes termination
-     * @see <a href="https://en.wikipedia.org/wiki/Sentinel_value">https://en.wikipedia.org/wiki/Sentinel_value</a> */
+     * @see <a href="https://en.wikipedia.org/wiki/Sentinel_value" target="_blank">https://en.wikipedia.org/wiki/Sentinel_value</a> */
     public static final String QUIT_SENTINEL = "QUIT QUIT QUIT!";
     private static NetworkInterface ni;
     
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/Tidwell/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/Tidwell/package-info.java
index 678e85ce33211fa6335e080b226c575020e0fc70..5d8f7d4891263c51be781b9e586510029443a5c6 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/Tidwell/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/Tidwell/package-info.java
@@ -2,10 +2,10 @@
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * TODO You can say whatever you want here!
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework2.Tidwell;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework2/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework2/package-info.java
index 9bc214a28b64601949cea61e29090ec61cceab42..ef3d652b0c6fc2d0f7a695097ea4caff7f4eca29 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework2/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework2/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework2;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Cecil/ExampleSimulationProgram.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Cecil/ExampleSimulationProgram.java
index 1201f46aa327de23a40ff5a7e8df33ec3133c80d..9068974cf56393521184195381974df211c22f39 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Cecil/ExampleSimulationProgram.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Cecil/ExampleSimulationProgram.java
@@ -25,11 +25,11 @@ import simkit.util.SimplePropertyDumper;
  *  example simulation program that includes DIS-capable entities performing 
  *  tasks of interest, and then reporting activity via PDUs to the network.
  *  Default program initialization includes PDU recording turned on by default.
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramLog.txt">ExampleSimulationProgramLog.txt</a>
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramPduCaptureLog.dislog">ExampleSimulationProgramPduCaptureLog.dislog</a>
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramFlowDiagram.pdf">ExampleSimulationProgramFlowDiagram.pdf</a>
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramWireshark.png">ExampleSimulationProgramWireshark.png</a>
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramSequenceDiagram.png">ExampleSimulationProgramSequenceDiagram.png</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramLog.txt" target="_blank">ExampleSimulationProgramLog.txt</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramPduCaptureLog.dislog" target="_blank">ExampleSimulationProgramPduCaptureLog.dislog</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramFlowDiagram.pdf" target="_blank">ExampleSimulationProgramFlowDiagram.pdf</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramWireshark.png" target="_blank">ExampleSimulationProgramWireshark.png</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramSequenceDiagram.png" target="_blank">ExampleSimulationProgramSequenceDiagram.png</a>
  */
 public class ExampleSimulationProgram
 {
@@ -328,7 +328,7 @@ public class ExampleSimulationProgram
      * @param comments       String array of narrative comments
      * @see DisChannel
 //   * @see DisTime // TODO find renamed version
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      */
     public void sendAllPdusForLoopTimestep(double simTimeSeconds,
                                    EntityStatePdu entityStatePdu,
@@ -406,7 +406,7 @@ public class ExampleSimulationProgram
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line parameters: network address and port.
      *    Command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Cecil/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Cecil/package-info.java
index 433d0f6ed5d3a4fd45346176b9737ded3e703846..0cec4d09c4f523e438ac2daecbbe9bc75fa6dc1f 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Cecil/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Cecil/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Assignment 3 - Example Simulation Program for MV3500.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework3.Cecil;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Chojnacki/ExampleSimulationProgram.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Chojnacki/ExampleSimulationProgram.java
index 3ac933bf2a488fbef3641ddb99c38e0ef8827db5..1db40ae70a2086341cd024a9d4e2e8ff021a4ba1 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Chojnacki/ExampleSimulationProgram.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Chojnacki/ExampleSimulationProgram.java
@@ -401,7 +401,7 @@ public class ExampleSimulationProgram {
      * Send Comment PDU
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing
+     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing
      * Information to a Method or a Constructor</a> Arbitrary Number of
      * Arguments
      * @param commentType enumeration value describing purpose of the narrative
@@ -419,7 +419,7 @@ public class ExampleSimulationProgram {
      * reflecting state of current simulation timestep.
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing
+     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing
      * Information to a Method or a Constructor</a> Arbitrary Number of
      * Arguments
      * @param entityStatePdu the ESPDU to send, if any
@@ -464,7 +464,7 @@ public class ExampleSimulationProgram {
      * Main method is first executed when a program instance is loaded.
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java
+     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java
      * Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String
      * parameters that are passed from execution environment during invocation
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Fredrickson/ExampleSimulationProgram.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Fredrickson/ExampleSimulationProgram.java
index c3ea72958ca8d20e095d515eb0e6dbe6b56d6b9c..33ad75c84b8da435c60278e1309da8b7bc5a59f9 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Fredrickson/ExampleSimulationProgram.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Fredrickson/ExampleSimulationProgram.java
@@ -20,11 +20,11 @@ import java.util.logging.Logger;
  *  example simulation program that includes DIS-capable entities performing 
  *  tasks of interest, and then reporting activity via PDUs to the network.
  *  Default program initialization includes PDU recording turned on by default.
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramLog.txt">ExampleSimulationProgramLog.txt</a>
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramPduCaptureLog.dislog">ExampleSimulationProgramPduCaptureLog.dislog</a>
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramFlowDiagram.pdf">ExampleSimulationProgramFlowDiagram.pdf</a>
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramWireshark.png">ExampleSimulationProgramWireshark.png</a>
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramSequenceDiagram.png">ExampleSimulationProgramSequenceDiagram.png</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramLog.txt" target="_blank">ExampleSimulationProgramLog.txt</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramPduCaptureLog.dislog" target="_blank">ExampleSimulationProgramPduCaptureLog.dislog</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramFlowDiagram.pdf" target="_blank">ExampleSimulationProgramFlowDiagram.pdf</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramWireshark.png" target="_blank">ExampleSimulationProgramWireshark.png</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramSequenceDiagram.png" target="_blank">ExampleSimulationProgramSequenceDiagram.png</a>
  * 
  * JOHN FREDRICKSON
  * -formatting changes made
@@ -306,7 +306,7 @@ public class ExampleSimulationProgram
      * @param comments       String array of narrative comments
      * @see DisChannel
 //   * @see DisTime // TODO find renamed version
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      */
     public void sendAllPdusForLoopTimestep(double simTimeSeconds,
                                    EntityStatePdu entityStatePdu,
@@ -384,7 +384,7 @@ public class ExampleSimulationProgram
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line parameters: network address and port.
      *    Command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Fredrickson/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Fredrickson/package-info.java
index 7729ccd90f91ecb22dc986ca35c3d1f2e3d0463b..8a5a6b1a7f1c60f56dd2d7bbe2389b1a6d7dbb8a 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Fredrickson/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Fredrickson/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Assignment 3 - Example Simulation Program.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework3.Fredrickson;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/ExampleSimulationProgram.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/ExampleSimulationProgram.java
index 4424f6e4a77772a106ddf7fb785abcc2839feda1..7454222c31e025e8fec2504785353be7e11e4c23 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/ExampleSimulationProgram.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/ExampleSimulationProgram.java
@@ -343,7 +343,7 @@ public class ExampleSimulationProgram {
      * @param comments String array of narrative comments
      * @see DisChannel // * @see DisTime // TODO find renamed version
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing
+     * <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing
      * Information to a Method or a Constructor</a> Arbitrary Number of
      * Arguments
      */
@@ -435,7 +435,7 @@ public class ExampleSimulationProgram {
      * Main method is first executed when a program instance is loaded.
      *
      * @see
-     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java
+     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java
      * Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line parameters: network address and port.
      * Command-line arguments are an array of optional String parameters that
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/package-info.java
index 291e392c4c21d577bb6e3e406bdd97c1932cb8da..8b9585ee15633d9594a4b1746f244b117555e186 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/package-info.java
@@ -2,10 +2,10 @@
  * Assignment 3 - Example Simulation Program for MV3500.
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework3.Hedgcorth;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Islas/ExampleSimulationProgram.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Islas/ExampleSimulationProgram.java
index f21d15eae2ac5f2f47ab04288de6efbbee9ebb3b..00d3c6dfe8f47a4b49ab329282bc9006efc74a6e 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Islas/ExampleSimulationProgram.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Islas/ExampleSimulationProgram.java
@@ -20,11 +20,11 @@ import java.util.logging.Logger;
  *  example simulation program that includes DIS-capable entities performing 
  *  tasks of interest, and then reporting activity via PDUs to the network.
  *  Default program initialization includes PDU recording turned on by default.
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramLog.txt">ExampleSimulationProgramLog.txt</a>
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramPduCaptureLog.dislog">ExampleSimulationProgramPduCaptureLog.dislog</a>
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramFlowDiagram.pdf">ExampleSimulationProgramFlowDiagram.pdf</a>
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramWireshark.png">ExampleSimulationProgramWireshark.png</a>
- *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramSequenceDiagram.png">ExampleSimulationProgramSequenceDiagram.png</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramLog.txt" target="_blank">ExampleSimulationProgramLog.txt</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramPduCaptureLog.dislog" target="_blank">ExampleSimulationProgramPduCaptureLog.dislog</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramFlowDiagram.pdf" target="_blank">ExampleSimulationProgramFlowDiagram.pdf</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramWireshark.png" target="_blank">ExampleSimulationProgramWireshark.png</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramSequenceDiagram.png" target="_blank">ExampleSimulationProgramSequenceDiagram.png</a>
  */
 public class ExampleSimulationProgram
 {
@@ -339,7 +339,7 @@ public class ExampleSimulationProgram
      * @param comments       String array of narrative comments
      * @see DisChannel
 //   * @see DisTime // TODO find renamed version
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      */
     public void sendAllPdusForLoopTimestep(double simTimeSeconds,
                                    EntityStatePdu entityStatePdu,
@@ -417,7 +417,7 @@ public class ExampleSimulationProgram
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line parameters: network address and port.
      *    Command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Islas/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Islas/package-info.java
index 3ae2e78cb32bc2556a55f36cbb9a9b0bfb84d5ef..e914dbe50875e8b45b99001f18cd08fb1b22984e 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Islas/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Islas/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Assignment3 for the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  *
  * Sets coordinates for Entity 1 and Entity 2.  When simulations starts, Entity 1 advances towards Entity 2 and 
  * fires munitions when in range.  Prints Entity 1 location and firing info (on occurance) to console after each step of the simulation.
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Oblak/ExampleSimulationProgram.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Oblak/ExampleSimulationProgram.java
index deb0601ecd5c051c21821bdaa7361f3d789ca795..15e731724931669285e2f88e59eaa6057f3242e6 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Oblak/ExampleSimulationProgram.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Oblak/ExampleSimulationProgram.java
@@ -419,7 +419,7 @@ public class ExampleSimulationProgram
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -432,7 +432,7 @@ public class ExampleSimulationProgram
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -475,7 +475,7 @@ public class ExampleSimulationProgram
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Oblak/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Oblak/package-info.java
index bf4046a5c11eb42607cb8e6642943bd92dff135f..86ad65a0008dc82f68f52909f2ea8d3294b74161 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Oblak/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Oblak/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Assignment 3 for NPS MOVES MV3500 Networked Graphics course March-June 2023.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework3.Oblak;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Sloan/SloanExampleSimulationProgram.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Sloan/SloanExampleSimulationProgram.java
index 06baaecd23744707c8c298b24cd45ec5e47de5cb..286b0ffdff6839a45c889c957c5d8294bb1d1e0b 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Sloan/SloanExampleSimulationProgram.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Sloan/SloanExampleSimulationProgram.java
@@ -303,7 +303,7 @@ public class SloanExampleSimulationProgram
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -316,7 +316,7 @@ public class SloanExampleSimulationProgram
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -359,7 +359,7 @@ public class SloanExampleSimulationProgram
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Sloan/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Sloan/package-info.java
index b4a4c653405d45182b164b2f80cf37cfc277e9bb..c7c8f6b2b11cc78764fd20ffff8ebd7734f9c891 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Sloan/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Sloan/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework3.Sloan;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Tidwell/ExampleSimulationProgram.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Tidwell/ExampleSimulationProgram.java
index 8ce33fd4e806c887fd6887b77c86647c0dbaea2c..76b7377a13560c8dd4a184ba5bf4bdcd672df80d 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Tidwell/ExampleSimulationProgram.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Tidwell/ExampleSimulationProgram.java
@@ -407,7 +407,7 @@ public class ExampleSimulationProgram
 
     /**
      * Send Comment PDU
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param commentType    enumeration value describing purpose of the narrative comment
      * @param comments       String array of narrative comments
      */
@@ -420,7 +420,7 @@ public class ExampleSimulationProgram
 
     /**
      * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      * @param entityStatePdu the ESPDU to send, if any
      * @param firePdu        the FirePDU to send, if any
      * @param commentType    enumeration value describing purpose of the narrative comment
@@ -463,7 +463,7 @@ public class ExampleSimulationProgram
   
     /**
      * Main method is first executed when a program instance is loaded.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
      * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
      */
     public static void main(String[] args)
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Tidwell/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Tidwell/package-info.java
index 091d7b4a9b6a28bfd2b9762078b6de3ed3057f30..9f2704a3f378f3093b1669157c5ec8bb28f76241 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Tidwell/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Tidwell/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework3.Tidwell;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/package-info.java
index 8022bef21bf0262e7ebd3b4f188f29fc2334cec5..9d7882f4923d817239bc3afd4f348167c3d606c8 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework3/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework3;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework4/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework4/package-info.java
index 95c1bd75d608c606e433ddd6197d4b74215d2e84..75b4e600d4c05f595662df3e33a71ccf7dc24466 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/homework4/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/homework4/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.homework4;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/projects/Islas/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/projects/Islas/package-info.java
index 3ea760dfbc241591cc778679113cb5b64aeb0c12..e0abde371f992b7af0aec4401dbb7e7667bd13e9 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/projects/Islas/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/projects/Islas/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.projects.Islas;
diff --git a/assignments/src/MV3500Cohort2023MarchJune/projects/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/projects/package-info.java
index d28f57b2b5ff2e5cbb8222a7640166fbe73be7db..52924aba2e2848a50b0d7faae8836d51dcb4309a 100644
--- a/assignments/src/MV3500Cohort2023MarchJune/projects/package-info.java
+++ b/assignments/src/MV3500Cohort2023MarchJune/projects/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2023MarchJune.projects;
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework1/Matiski/package-info.java b/assignments/src/MV3500Cohort2024JulySeptember/homework1/Matiski/package-info.java
index 84e91c55dbda053fc7dedbea18b653f283a6e482..d9db345c5abeaffacf4eaa9162425c00fe0b1930 100644
--- a/assignments/src/MV3500Cohort2024JulySeptember/homework1/Matiski/package-info.java
+++ b/assignments/src/MV3500Cohort2024JulySeptember/homework1/Matiski/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2024JulySeptember.homework1.Matiski;
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework1/package-info.java b/assignments/src/MV3500Cohort2024JulySeptember/homework1/package-info.java
index 040db63af9221bbfb172c39b5f447771f657f060..f76ddf194c9c026ca288351a1c6c2d7d8697a1fb 100644
--- a/assignments/src/MV3500Cohort2024JulySeptember/homework1/package-info.java
+++ b/assignments/src/MV3500Cohort2024JulySeptember/homework1/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2024JulySeptember.homework1;
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework2/package-info.java b/assignments/src/MV3500Cohort2024JulySeptember/homework2/package-info.java
index 274898788b03e9e4902513464d87c6ba23e2891e..5bc45ca64900ea6a1124928858fcc556096ae88b 100644
--- a/assignments/src/MV3500Cohort2024JulySeptember/homework2/package-info.java
+++ b/assignments/src/MV3500Cohort2024JulySeptember/homework2/package-info.java
@@ -1,10 +1,10 @@
 /**
  * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2024JulySeptember.homework2;
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework3/package-info.java b/assignments/src/MV3500Cohort2024JulySeptember/homework3/package-info.java
index 6be98c3d9db8c8f087fb27b9077eb339a0be3772..cc004dfe5a0e3a6d02d590b47631f5bed705eac8 100644
--- a/assignments/src/MV3500Cohort2024JulySeptember/homework3/package-info.java
+++ b/assignments/src/MV3500Cohort2024JulySeptember/homework3/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2024JulySeptember.homework3;
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework4/package-info.java b/assignments/src/MV3500Cohort2024JulySeptember/homework4/package-info.java
index c4e3470c5e400b07886e558d3822c7e5cc182c15..30f4568018cc752b1a6c6cbbebb3d02883048a33 100644
--- a/assignments/src/MV3500Cohort2024JulySeptember/homework4/package-info.java
+++ b/assignments/src/MV3500Cohort2024JulySeptember/homework4/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2024JulySeptember.homework4;
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/package-info.java b/assignments/src/MV3500Cohort2024JulySeptember/projects/package-info.java
index a74867a4f9a9a9531fef98ab0160735810234971..2f2d8afba83ed17c95a8dade4c3b715e89e7b3cb 100644
--- a/assignments/src/MV3500Cohort2024JulySeptember/projects/package-info.java
+++ b/assignments/src/MV3500Cohort2024JulySeptember/projects/package-info.java
@@ -1,10 +1,10 @@
 /**
  * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
  * 
- * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
  * @see java.lang.Package
- * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a>
- * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a>
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
  */
 
 package MV3500Cohort2024JulySeptember.projects;
diff --git a/assignments/src/src/HttpServletExamples/DisServletPagesConceptDrawings.pdf b/assignments/src/src/HttpServletExamples/DisServletPagesConceptDrawings.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..b3309aa7ee49408e8983e938422cd50d33fbef76
Binary files /dev/null and b/assignments/src/src/HttpServletExamples/DisServletPagesConceptDrawings.pdf differ
diff --git a/assignments/src/src/HttpServletExamples/DisServletPagesConceptDrawings.vsdx b/assignments/src/src/HttpServletExamples/DisServletPagesConceptDrawings.vsdx
new file mode 100644
index 0000000000000000000000000000000000000000..f60d7580230cd54ec24444ca30922de65a96fcd7
Binary files /dev/null and b/assignments/src/src/HttpServletExamples/DisServletPagesConceptDrawings.vsdx differ
diff --git a/assignments/src/src/HttpServletExamples/HttpWebPageSource.java b/assignments/src/src/HttpServletExamples/HttpWebPageSource.java
new file mode 100644
index 0000000000000000000000000000000000000000..6ff19a0987be920e4491f995b5b8093b0769640a
--- /dev/null
+++ b/assignments/src/src/HttpServletExamples/HttpWebPageSource.java
@@ -0,0 +1,85 @@
+package HttpServletExamples;
+
+import java.io.*;
+import java.net.*;
+
+/**
+ * A very simple http web-page reading example that won't work in some circumstances.
+ * But it will in some others.
+ * 
+ * @author mcgredo
+ * @author brutzman@nps.edu
+ */
+public class HttpWebPageSource
+{
+    /** Default constructor */
+    public HttpWebPageSource()
+    {
+        // default constructor
+    }
+    /**
+     * Program invocation, execution starts here
+     * @param args command-line arguments
+     */
+    public static void main(String[] args)
+    {
+        try
+        {
+           System.out.println("HttpWebPageSource: create http connection and retrieve default page");
+           System.out.println("Reference:  https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol");
+           System.out.println("Reference:  https://tools.ietf.org/html/rfc7230");
+           System.out.println("Reference:  https://en.wikipedia.org/wiki/CURL");
+           System.out.println();
+           
+           // We request an IP to connect to a web server running on default http port 80.
+           
+           String WEB_SERVER_ADDRESS    = "www.nps.edu";
+           int    WEB_SERVER_PORT_HTTP  = 80;
+           int    WEB_SERVER_PORT_HTTPS = 443; // does this work too?
+           System.out.println("New socket WEB_ADDRESS=" + WEB_SERVER_ADDRESS);
+           
+           // this Java construct will work for HTTP but not HTTPS
+           Socket socket = new Socket(WEB_SERVER_ADDRESS, WEB_SERVER_PORT_HTTPS); // compare alternative: https on port 443
+           
+           // we send a command to the web server, asking for what
+           // we want. Note that the format for the command is very
+           // specific and documented.
+           OutputStream os = socket.getOutputStream();
+           PrintStream  ps = new PrintStream(os);
+		   
+		   String message = "GET /index.html HTTP/1.0";
+           ps.print(message); // to socket
+           System.out.println(message);
+           System.out.println();
+           
+           // Commands have to terminate with "carriage return/line feed"
+           // twice to end the request. Those are the special characters
+           // to have the control characters printed.  Part of the http protocol!
+           ps.print("\r\n\r\n");
+           ps.flush();
+           
+           // Up until now we have been reading one line only.
+           // But a web server will write an unknown number of lines.
+           // So now we read until the transmisson ends.
+           
+           InputStream    is = socket.getInputStream();
+           Reader         isr = new InputStreamReader(is);
+           BufferedReader br = new BufferedReader(isr);
+           
+           String line;
+           int count = 0;
+           
+           while((line = br.readLine()) != null) // read from BufferedReader br one line at a time
+           {
+               count++;
+               System.out.println(count + ": " + line);
+           }
+           System.out.println("HttpWebPageSource: response finished");
+        }
+        catch(IOException e)
+        {
+            System.err.println("HttpWebPageSource: problem with client");
+            System.err.println(e);
+        }
+    }
+}
diff --git a/assignments/src/src/HttpServletExamples/HttpWebPageSourceTerminalLog.txt b/assignments/src/src/HttpServletExamples/HttpWebPageSourceTerminalLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9deeef11d9aede321dc7ed17c0795449fbb134d7
--- /dev/null
+++ b/assignments/src/src/HttpServletExamples/HttpWebPageSourceTerminalLog.txt
@@ -0,0 +1,64 @@
+ant -f C:\\x-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=HttpServletExamples/HttpWebPageSource.java -Drun.class=HttpServletExamples.HttpWebPageSource run-single
+init:
+Deleting: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+compile-single:
+run-single:
+HttpWebPageSource: create http connection and retrieve default page
+Reference:  https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
+Reference:  https://tools.ietf.org/html/rfc7230
+Reference:  https://en.wikipedia.org/wiki/CURL
+
+New socket WEB_ADDRESS=www.nps.edu
+GET /index.html HTTP/1.0
+
+1: HTTP/1.1 301 Moved Permanently
+2: Date: Wed, 12 Aug 2020 01:19:20 GMT
+3: Server: Apache
+4: Location: https://instituteforsecuritygovernance.org/index.html
+5: Content-Length: 261
+6: Connection: close
+7: Content-Type: text/html; charset=iso-8859-1
+8: 
+9: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
+10: <html><head>
+11: <title>301 Moved Permanently</title>
+12: </head><body>
+13: <h1>Moved Permanently</h1>
+14: <p>The document has moved <a href="https://instituteforsecuritygovernance.org/index.html">here</a>.</p>
+15: </body></html>
+HttpWebPageSource: response finished
+BUILD SUCCESSFUL (total time: 2 seconds)
+
+now using https to port 443:
+
+run-single:
+HttpWebPageSource: create http connection and retrieve default page
+Reference:  https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
+Reference:  https://tools.ietf.org/html/rfc7230
+Reference:  https://en.wikipedia.org/wiki/CURL
+
+New socket WEB_ADDRESS=www.nps.edu
+GET /index.html HTTP/1.0
+
+1: HTTP/1.1 400 Bad Request
+2: Date: Mon, 17 Aug 2020 18:25:20 GMT
+3: Server: Apache
+4: Content-Length: 362
+5: Connection: close
+6: Content-Type: text/html; charset=iso-8859-1
+7: 
+8: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
+9: <html><head>
+10: <title>400 Bad Request</title>
+11: </head><body>
+12: <h1>Bad Request</h1>
+13: <p>Your browser sent a request that this server could not understand.<br />
+14: Reason: You're speaking plain HTTP to an SSL-enabled server port.<br />
+15:  Instead use the HTTPS scheme to access this URL, please.<br />
+16: </p>
+17: </body></html>
+HttpWebPageSource: response finished
+BUILD SUCCESSFUL (total time: 2 seconds)
diff --git a/assignments/src/src/HttpServletExamples/JavaServletArchitecture.pdf b/assignments/src/src/HttpServletExamples/JavaServletArchitecture.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..b4471ff80a3cb8f629f2181894c5d8ea46f07aec
Binary files /dev/null and b/assignments/src/src/HttpServletExamples/JavaServletArchitecture.pdf differ
diff --git a/assignments/src/src/HttpServletExamples/JavaServletArchitecture.png b/assignments/src/src/HttpServletExamples/JavaServletArchitecture.png
new file mode 100644
index 0000000000000000000000000000000000000000..b0b336460bdcf2e0a7bebf6e3d07f570034f19f8
Binary files /dev/null and b/assignments/src/src/HttpServletExamples/JavaServletArchitecture.png differ
diff --git a/assignments/src/src/HttpServletExamples/JavaServletArchitecture.vsdx b/assignments/src/src/HttpServletExamples/JavaServletArchitecture.vsdx
new file mode 100644
index 0000000000000000000000000000000000000000..5492753a1ceaf505e0d7837434ff9ff0011a8324
Binary files /dev/null and b/assignments/src/src/HttpServletExamples/JavaServletArchitecture.vsdx differ
diff --git a/assignments/src/src/HttpServletExamples/package-info.java b/assignments/src/src/HttpServletExamples/package-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..3105b0ca207babfc94fe17bb00a04efacea46507
--- /dev/null
+++ b/assignments/src/src/HttpServletExamples/package-info.java
@@ -0,0 +1,10 @@
+/**
+ * opendis7 Http Servlet Java examples supporting the NPS MOVES MV3500 Networked Graphics course.
+ * 
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/examples/src/HttpServletExamples" target="blank">NetworkedGraphicsMV3500 examples: HttpServletExamples</a>
+ * @see java.lang.Package
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="blank">StackOverflow: how-do-i-document-packages-in-java</a>
+ */
+
+package HttpServletExamples;
diff --git a/assignments/src/src/OpenDis4Examples/EspduReceiver.java b/assignments/src/src/OpenDis4Examples/EspduReceiver.java
new file mode 100644
index 0000000000000000000000000000000000000000..2a327c29fd6e1860467f1b5a8a2481c068cf95b1
--- /dev/null
+++ b/assignments/src/src/OpenDis4Examples/EspduReceiver.java
@@ -0,0 +1,93 @@
+package OpenDis4Examples; 
+
+import java.net.*;
+import java.util.*;
+
+import edu.nps.moves.disutil.*;
+
+import edu.nps.moves.dis.*;
+import java.io.IOException;
+
+/**
+ * Receives PDUs from the network in IEEE DIS format.
+ * Adapted from OpenDIS library example package edu.nps.moves.examples
+ *
+ * @author DMcG
+ * @version $Id:$
+ */
+public class EspduReceiver
+{
+    /** Default constructor */
+    public EspduReceiver()
+    {
+        // default constructor
+    }
+    /** Max size of a PDU in binary format that we can receive. This is actually
+     * somewhat outdated--PDUs can be larger--but this is a reasonable starting point.
+     */
+    private static final int MAX_PDU_SIZE = 8192;
+
+    /** Default multicast group address we send on.
+      * @see <a href="https://en.wikipedia.org/wiki/Multicast_address" target="_blank">https://en.wikipedia.org/wiki/Multicast_address</a> */
+    private static final String DEFAULT_MULTICAST_ADDRESS = "239.1.2.3";
+	
+    /** Default multicast port used, matches Wireshark DIS capture default
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+    private static final int    DEFAULT_MULTICAST_PORT    = 3000;
+
+    /**
+     * Program invocation, execution starts here
+     * @param args command-line arguments
+     */
+    public static void main(String args[])
+	{
+		System.out.println("OpenDis4Examples.EspduReceiver started...");
+		
+        MulticastSocket socket;
+        DatagramPacket packet;
+        InetAddress address;
+        PduFactory pduFactory = new PduFactory();
+
+        try {
+            // Specify the socket to receive data
+            socket = new MulticastSocket(DEFAULT_MULTICAST_PORT);
+            socket.setBroadcast(true);
+       
+            // address = InetAddress.getByName(EspduSender.DEFAULT_MULTICAST_GROUP);
+            // socket.joinGroup(address);
+
+            while (true) // Loop infinitely, receiving datagrams
+			{
+                byte buffer[] = new byte[MAX_PDU_SIZE];
+                packet = new DatagramPacket(buffer, buffer.length);
+
+                socket.receive(packet);
+
+                List<Pdu> pduBundle = pduFactory.getPdusFromBundle(packet.getData());
+                System.out.println("Bundle size is " + pduBundle.size());
+                
+                Iterator iterator = pduBundle.iterator();
+
+                while(iterator.hasNext())
+                {
+                    Pdu aPdu = (Pdu)iterator.next();
+                
+                    System.out.print("got PDU of type: " + aPdu.getClass().getSimpleName());
+                    if(aPdu instanceof EntityStatePdu)
+                    {
+                        EntityID eid = ((EntityStatePdu)aPdu).getEntityID();
+                        Vector3Double position = ((EntityStatePdu)aPdu).getEntityLocation();
+                        System.out.print(" EID:[" + eid.getSite() + ", " + eid.getApplication() + ", " + eid.getEntity() + "] ");
+                        System.out.print(" Location in DIS coordinates: [" + position.getX() + ", " + position.getY() + ", " + position.getZ() + "]");
+                    }
+                    System.out.println();
+                } // end trop through PDU bundle
+            } // end while
+        } // End try
+        catch (IOException e)
+		{
+            System.out.println("Problem with OpenDis4Examples.EspduReceiver, see exception trace:");
+            System.out.println(e);
+        }
+    } // end main
+} // end class
diff --git a/assignments/src/src/OpenDis4Examples/EspduSender.java b/assignments/src/src/OpenDis4Examples/EspduSender.java
new file mode 100644
index 0000000000000000000000000000000000000000..aad548af9310391a0ad68c3c1f1ed9c2885c624c
--- /dev/null
+++ b/assignments/src/src/OpenDis4Examples/EspduSender.java
@@ -0,0 +1,350 @@
+package OpenDis4Examples;
+
+import java.io.*;
+import java.net.*;
+import java.util.*;
+
+import edu.nps.moves.dis.*;
+import edu.nps.moves.disutil.CoordinateConversions;
+import edu.nps.moves.disutil.DisTime;
+
+/**
+ * Creates and sends ESPDUs in IEEE binary format. Adapted from OpenDIS library
+ * example package edu.nps.moves.examples
+ *
+ * @author DMcG
+ */
+public class EspduSender
+{
+    /** Default constructor */
+    public EspduSender()
+    {
+        // default constructor
+    }
+    /** Defining number of packets to send is superior to infinite loops
+      * which have possible hazard of unstoppably sending packets as a zombie process */
+	public static final int NUMBER_TO_SEND = 5; // 5000;
+
+    /** Type of network connection */
+	public enum NetworkMode {
+        /** Unicast network mode
+         * @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
+		UNICAST,
+        /** Multicast network mode
+         * @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
+        MULTICAST,
+        /** Broadcast network mode
+         * @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+        BROADCAST
+	};
+
+	/**
+	 * Default multicast group address we send on.
+	 */
+	public static final String DEFAULT_MULTICAST_ADDRESS = "239.1.2.3";
+
+	/**
+	 * Default multicast port used, matches Wireshark DIS capture default
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a>
+	 */
+	public static final int DEFAULT_MULTICAST_PORT = 3000;
+
+	/**
+	 * Possible system properties, passed in via -Dattr=val networkMode:
+	 * unicast, broadcast, multicast destinationIp: where to send the packet. If
+	 * in multicast mode, this can be multicast. To determine broadcast
+	 * destination IP, use an online broadcast address calculator, for example
+	 * http://www.remotemonitoringsystems.ca/broadcast.php If in multicast mode,
+	 * a join() will be done on the multicast address. port: port used for both
+	 * source and destination.
+	 *
+	 * @param args command-line arguments
+	 */
+	public static void main(String args[])
+	{
+		System.out.println("OpenDis4Examples.EspduSender started... send " + NUMBER_TO_SEND + " ESPDUs, initial index=0");
+		/**
+		 * an entity state pdu
+		 */
+		EntityStatePdu espdu = new EntityStatePdu();
+		MulticastSocket socket = null; // must be initialized, even if null
+		DisTime disTime = DisTime.getInstance(); // TODO explain
+		int alternator = -1;
+
+		// ICBM coordinates for my office
+		double lat = 36.595517;
+		double lon = -121.877000;
+
+		// Default settings. These are used if no system properties are set. 
+		// If system properties are passed in, these are over ridden.
+		int port = DEFAULT_MULTICAST_PORT;
+		NetworkMode mode = NetworkMode.BROADCAST;
+		InetAddress destinationIp = null; // must be initialized, even if null
+
+		try {
+			destinationIp = InetAddress.getByName(DEFAULT_MULTICAST_ADDRESS);
+		} catch (UnknownHostException e) {
+			System.out.println(e + " Cannot create multicast address");
+			System.exit(0);
+		}
+
+		// All system properties, passed in on the command line via -Dattribute=value
+		Properties systemProperties = System.getProperties();
+
+		// IP address we send to
+		String destinationIpString = systemProperties.getProperty("destinationIp");
+
+		// Port we send to, and local port we open the socket on
+		String portString = systemProperties.getProperty("port");
+
+		// Network mode: unicast, multicast, broadcast
+		String networkModeString = systemProperties.getProperty("networkMode"); // unicast or multicast or broadcast
+
+		// Set up a socket to send information
+		try {
+			// Port we send to
+			if (portString != null) 
+			{
+			    System.out.println("Using systemProperties port=" + portString);
+				port = Integer.parseInt(portString);
+			}
+
+			socket = new MulticastSocket(port);
+
+			// Where we send packets to, the destination IP address
+			if (destinationIpString != null) 
+			{
+				destinationIp = InetAddress.getByName(destinationIpString);
+			}
+
+			// Type of transport: unicast, broadcast, or multicast
+			// TODO convert to String constants
+			if (networkModeString != null) {
+				if (networkModeString.equalsIgnoreCase("unicast")) 
+				{
+					mode = NetworkMode.UNICAST;
+				} 
+				else if (networkModeString.equalsIgnoreCase("broadcast")) {
+					mode = NetworkMode.BROADCAST;
+				} 
+				else if (networkModeString.equalsIgnoreCase("multicast")) {
+					mode = NetworkMode.MULTICAST;
+					if (!destinationIp.isMulticastAddress())
+					{
+						throw new RuntimeException("Sending to multicast address, but destination address " + destinationIp.toString() + "is not multicast");
+					}
+//					socket.joinGroup(destinationIp); // deprecated, TODO select correct NetworkInterface
+                    // =======================================================================
+                    // updated approach using NetworkInterface
+                    NetworkInterface networkInterface = NetworkInterface.getByInetAddress(destinationIp);
+                    if (networkInterface != null)
+                        System.out.println("networkInterface=" + networkInterface.getDisplayName()); // typically null if loopback
+                    SocketAddress localMulticastSocketAddress = new InetSocketAddress(destinationIp, DEFAULT_MULTICAST_PORT);
+                    MulticastSocket multicastSocket = new MulticastSocket(DEFAULT_MULTICAST_PORT);
+                    multicastSocket.joinGroup(localMulticastSocketAddress, networkInterface);
+                    // =======================================================================
+				}
+			} // end networkModeString
+		}
+		catch (IOException | RuntimeException e)
+		{
+			System.out.println("Unable to initialize networking. Exiting.");
+			System.out.println(e);
+			System.exit(-1);
+		}
+
+		// Initialize values in the Entity State PDU object. The exercise ID is 
+		// a way to differentiate between different virtual worlds on one network.
+		// Note that some values (such as the PDU type and PDU family) are set
+		// automatically when you create the ESPDU.
+		espdu.setExerciseID((short) 1);
+
+		// The EID is the unique identifier for objects in the world. This 
+		// EID should match up with the ID for the object specified in the 
+		// VMRL/x3d/virtual world.
+		EntityID entityID = espdu.getEntityID();
+		entityID.setSite(1);  // 0 is apparently not a valid site number, per the spec
+		entityID.setApplication(1);
+		entityID.setEntity(2);
+
+		// Set the entity type. SISO has a big list of enumerations, so that by
+		// specifying various numbers we can say this is an M1A2 American tank,
+		// the USS Enterprise, and so on. We'll make this a tank. There is a 
+		// separate project elsehwhere in this project that implements DIS 
+		// enumerations in C++ and Java, but to keep things simple we just use
+		// numbers here.
+		EntityType entityType = espdu.getEntityType();
+		entityType.setEntityKind((short) 1);      // Platform (vs lifeform, munition, sensor, etc.)
+		entityType.setCountry(225);              // USA
+		entityType.setDomain((short) 1);          // Land (vs air, surface, subsurface, space)
+		entityType.setCategory((short) 1);        // Tank
+		entityType.setSubcategory((short) 1);     // M1 Abrams
+		entityType.setSpec((short) 3);            // M1A2 Abrams
+
+		Set<InetAddress> broadcastAddresses;
+		// Loop through sending N ESPDUs
+		try
+		{
+			System.out.println("Sending " + NUMBER_TO_SEND + " ESPDU packets to " + destinationIp.toString());
+			
+			for (int index = 0; index < NUMBER_TO_SEND; index++) {
+				// DIS time is a pain in the uh, neck. DIS time units are 2^31-1 units per
+				// hour, and time is set to DIS time units from the top of the hour. 
+				// This means that if you start sending just before the top of the hour
+				// the time units can roll over to zero as you are sending. The receivers
+				// (escpecially homegrown ones) are often not able to detect rollover
+				// and may start discarding packets as dupes or out of order. We use
+				// an NPS timestamp here, hundredths of a second since the start of the
+				// year. The DIS standard for time is often ignored in the wild; I've seen
+				// people use Unix time (seconds since 1970) and more. Or you can
+				// just stuff idx into the timestamp field to get something that is monotonically
+				// increasing.
+
+				// Note that timestamp is used to detect duplicate and out of order packets. 
+				// That means if you DON'T change the timestamp, many implementations will simply
+				// discard subsequent packets that have an identical timestamp. Also, if they
+				// receive a PDU with an timestamp lower than the last one they received, they
+				// may discard it as an earlier, out-of-order PDU. So it is a good idea to
+				// update the timestamp on ALL packets sent.
+				// An alterative approach: actually follow the standard. It's a crazy concept,
+				// but it might just work.
+				int timestamp = disTime.getDisAbsoluteTimestamp();
+				espdu.setTimestamp(timestamp);
+
+				// Set the position of the entity in the world. DIS uses a cartesian 
+				// coordinate system with the origin at the center of the earth, the x
+				// axis out at the equator and prime meridian, y out at the equator and
+				// 90 deg east, and z up and out the north pole. To place an object on
+				// the earth's surface you also need a model for the shape of the earth
+				// (it's not a sphere.) All the fancy math necessary to do this is in
+				// the SEDRIS SRM package. There are also some one-off formulas for 
+				// doing conversions from, for example, lat/lon/altitude to DIS coordinates.
+				// Here we use those one-off formulas.
+				// Modify the position of the object. This will send the object a little
+				// due east by adding some to the longitude every iteration. Since we
+				// are on the Pacific coast, this sends the object east. Assume we are
+				// at zero altitude. In other worlds you'd use DTED to determine the
+				// local ground altitude at that lat/lon, or you'd just use ground clamping.
+				// The x and y values will change, but the z value should not.
+				//lon = lon + (double)((double)idx / 100000.0);
+				//System.out.println("lla=" + lat + "," + lon + ", 0.0");
+				double direction = Math.pow((double) (-1.0), (double) (index));
+				lon = lon + (direction * 0.00006);
+				System.out.println(lon);
+
+				double disCoordinates[] = CoordinateConversions.getXYZfromLatLonDegrees(lat, lon, 1.0);
+				Vector3Double location = espdu.getEntityLocation();
+				location.setX(disCoordinates[0]);
+				location.setY(disCoordinates[1]);
+				location.setZ(disCoordinates[2]);
+				System.out.println("lat, lon:" + lat + ", " + lon);
+				System.out.println("DIS coord:" + disCoordinates[0] + ", " + disCoordinates[1] + ", " + disCoordinates[2]);
+
+				// Optionally, we can do some rotation of the entity
+				/*
+            Orientation orientation = espdu.getEntityOrientation();
+            float psi = orientation.getPsi();
+            psi = psi + idx;
+            orientation.setPsi(psi);
+            orientation.setTheta((float)(orientation.getTheta() + idx /2.0));
+				 */
+				// You can set other ESPDU values here, such as the velocity, acceleration,
+				// and so on.
+				// Marshal out the espdu object to a byte array, then send a datagram
+				// packet with that data in it.
+				ByteArrayOutputStream baos = new ByteArrayOutputStream();
+				DataOutputStream dos = new DataOutputStream(baos);
+				espdu.marshal(dos);
+
+				FirePdu fire = new FirePdu();
+				byte[] fireArray = fire.marshal();
+
+				// The byte array here is the packet in DIS format. We put that into a 
+				// datagram and send it.
+				byte[] data = baos.toByteArray();
+
+				broadcastAddresses = getBroadcastAddresses();
+				Iterator iterator = broadcastAddresses.iterator();
+				while (iterator.hasNext())
+				{
+					InetAddress broadcast = (InetAddress) iterator.next();
+					System.out.println("Sending broadcast datagram packet to " + broadcast);
+					DatagramPacket packet = new DatagramPacket(data, data.length, broadcast, port);
+					socket.send(packet);
+					// TODO experiment with these!  8)
+					packet = new DatagramPacket(fireArray, fireArray.length, broadcast, port); // alternate
+					socket.send(packet);
+				}
+
+				// Send every 1 sec. Otherwise all this will be all over in a fraction of a second.
+				Thread.sleep(1000); // msec
+
+				location = espdu.getEntityLocation();
+
+				System.out.println("Espdu #" + index + " EID=[" + entityID.getSite() + "," + entityID.getApplication() + "," + entityID.getEntity() + "]");
+				System.out.println(" DIS coordinates location=[" + location.getX() + "," + location.getY() + "," + location.getZ() + "]");
+				double c[] = {location.getX(), location.getY(), location.getZ()};
+				double lla[] = CoordinateConversions.xyzToLatLonDegrees(c);
+// debug:		System.out.println(" Location (lat/lon/alt): [" + lla[0] + ", " + lla[1] + ", " + lla[2] + "]");
+			}
+		}
+		catch (IOException | InterruptedException e)
+		{
+            System.out.println("Problem with OpenDis4Examples.EspduSender, see exception trace:");
+			System.out.println(e);
+		}
+	}
+
+	/**
+	 * A number of sites get all snippy about using 255.255.255.255 for a
+	 * broadcast address; it trips their security software and they kick you off
+	 * their network. (Comcast, NPS.) This determines the broadcast address for
+	 * all connected interfaces, based on the IP and subnet mask. If you have a
+	 * dual-homed host it will return a broadcast address for both. If you have
+	 * some VMs running on your host this will pick up the addresses for those
+	 * as well--e.g. running VMWare on your laptop with a local IP this will also
+	 * pick up a 192.168 address assigned to the VM by the host OS.
+	 *
+	 * @return set of all broadcast addresses
+	 */
+	public static Set<InetAddress> getBroadcastAddresses()
+	{
+		Set<InetAddress> broadcastAddresses = new HashSet<>();
+		Enumeration interfaces;
+
+		try {
+			interfaces = NetworkInterface.getNetworkInterfaces();
+
+			while (interfaces.hasMoreElements())
+			{
+				NetworkInterface anInterface = (NetworkInterface) interfaces.nextElement();
+
+				if (anInterface.isUp())
+				{
+					Iterator iterator = anInterface.getInterfaceAddresses().iterator();
+					while (iterator.hasNext())
+					{
+						InterfaceAddress anAddress = (InterfaceAddress) iterator.next();
+						if ((anAddress == null || anAddress.getAddress().isLinkLocalAddress()))
+						{
+							continue;
+						}
+
+						//System.out.println("Getting broadcast address for " + anAddress);
+						InetAddress broadcastAddress = anAddress.getBroadcast();
+						if (broadcastAddress != null)
+						{
+							broadcastAddresses.add(broadcastAddress);
+						}
+					}
+				}
+			}
+		}
+		catch (SocketException e) 
+		{
+            System.out.println("Problem with OpenDis4Examples.EspduSender.getBroadcastAddresses(), see exception trace:");
+			System.out.println(e);
+		}
+		return broadcastAddresses;
+	}
+}
diff --git a/assignments/src/src/OpenDis4Examples/EspduSenderWireshark.png b/assignments/src/src/OpenDis4Examples/EspduSenderWireshark.png
new file mode 100644
index 0000000000000000000000000000000000000000..8fedce0aacc3fcdb97f895ecc8176890aa104e8c
Binary files /dev/null and b/assignments/src/src/OpenDis4Examples/EspduSenderWireshark.png differ
diff --git a/assignments/src/src/OpenDis4Examples/EspduTerminalLog.txt b/assignments/src/src/OpenDis4Examples/EspduTerminalLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..cfa5e53f475063a3d869e359bee1f495ba4851e3
--- /dev/null
+++ b/assignments/src/src/OpenDis4Examples/EspduTerminalLog.txt
@@ -0,0 +1,117 @@
+Invocation instructions:
+1. run/debug EspduReceiver.java (since sender does not block, must first be ready to listen)
+2. run/debug EspduSender.java
+
+Program responses for sender and receiver:
+
+===================================================
+ant -f C:\\x-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=OpenDis4Examples/EspduSender.java -Drun.class=OpenDis4Examples.EspduSender run-single
+init:
+Deleting: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+compile-single:
+run-single:
+OpenDis4Examples.EspduSender started... send 5 ESPDUs, initial index=0
+Sending 5 ESPDU packets to /239.1.2.3
+-121.87693999999999
+lat, lon:36.595517, -121.87693999999999
+DIS coord:-2707488.3677768684, -4353666.735244378, 3781450.3202754413
+Sending broadcast datagram packet to /127.255.255.255
+Sending broadcast datagram packet to /172.23.143.255
+Sending broadcast datagram packet to /172.16.0.255
+Sending broadcast datagram packet to /172.20.209.219
+Espdu #0 EID=[1,1,2]
+ DIS coordinates location=[-2707488.3677768684,-4353666.735244378,3781450.3202754413]
+-121.877
+lat, lon:36.595517, -121.877
+DIS coord:-2707492.9269245286, -4353663.899966802, 3781450.3202754413
+Sending broadcast datagram packet to /127.255.255.255
+Sending broadcast datagram packet to /172.23.143.255
+Sending broadcast datagram packet to /172.16.0.255
+Sending broadcast datagram packet to /172.20.209.219
+Espdu #1 EID=[1,1,2]
+ DIS coordinates location=[-2707492.9269245286,-4353663.899966802,3781450.3202754413]
+-121.87693999999999
+lat, lon:36.595517, -121.87693999999999
+DIS coord:-2707488.3677768684, -4353666.735244378, 3781450.3202754413
+Sending broadcast datagram packet to /127.255.255.255
+Sending broadcast datagram packet to /172.23.143.255
+Sending broadcast datagram packet to /172.16.0.255
+Sending broadcast datagram packet to /172.20.209.219
+Espdu #2 EID=[1,1,2]
+ DIS coordinates location=[-2707488.3677768684,-4353666.735244378,3781450.3202754413]
+-121.877
+lat, lon:36.595517, -121.877
+DIS coord:-2707492.9269245286, -4353663.899966802, 3781450.3202754413
+Sending broadcast datagram packet to /127.255.255.255
+Sending broadcast datagram packet to /172.23.143.255
+Sending broadcast datagram packet to /172.16.0.255
+Sending broadcast datagram packet to /172.20.209.219
+Espdu #3 EID=[1,1,2]
+ DIS coordinates location=[-2707492.9269245286,-4353663.899966802,3781450.3202754413]
+-121.87693999999999
+lat, lon:36.595517, -121.87693999999999
+DIS coord:-2707488.3677768684, -4353666.735244378, 3781450.3202754413
+Sending broadcast datagram packet to /127.255.255.255
+Sending broadcast datagram packet to /172.23.143.255
+Sending broadcast datagram packet to /172.16.0.255
+Sending broadcast datagram packet to /172.20.209.219
+Espdu #4 EID=[1,1,2]
+ DIS coordinates location=[-2707488.3677768684,-4353666.735244378,3781450.3202754413]
+BUILD SUCCESSFUL (total time: 12 seconds)
+
+===================================================
+ant -f C:\\x-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=OpenDis4Examples/EspduReceiver.java -Drun.class=OpenDis4Examples.EspduReceiver run-single
+init:
+Deleting: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+compile-single:
+run-single:
+OpenDis4Examples.EspduReceiver started...
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.EntityStatePdu EID:[1, 1, 2]  Location in DIS coordinates: [-2707488.3677768684, -4353666.735244378, 3781450.3202754413]
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.FirePdu
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.EntityStatePdu EID:[1, 1, 2]  Location in DIS coordinates: [-2707488.3677768684, -4353666.735244378, 3781450.3202754413]
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.FirePdu
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.EntityStatePdu EID:[1, 1, 2]  Location in DIS coordinates: [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.FirePdu
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.EntityStatePdu EID:[1, 1, 2]  Location in DIS coordinates: [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.FirePdu
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.EntityStatePdu EID:[1, 1, 2]  Location in DIS coordinates: [-2707488.3677768684, -4353666.735244378, 3781450.3202754413]
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.FirePdu
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.EntityStatePdu EID:[1, 1, 2]  Location in DIS coordinates: [-2707488.3677768684, -4353666.735244378, 3781450.3202754413]
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.FirePdu
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.EntityStatePdu EID:[1, 1, 2]  Location in DIS coordinates: [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.FirePdu
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.EntityStatePdu EID:[1, 1, 2]  Location in DIS coordinates: [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.FirePdu
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.EntityStatePdu EID:[1, 1, 2]  Location in DIS coordinates: [-2707488.3677768684, -4353666.735244378, 3781450.3202754413]
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.FirePdu
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.EntityStatePdu EID:[1, 1, 2]  Location in DIS coordinates: [-2707488.3677768684, -4353666.735244378, 3781450.3202754413]
+Bundle size is 1
+got PDU of type: edu.nps.moves.dis.FirePdu
+
+===================================================
+
diff --git a/assignments/src/src/OpenDis4Examples/PduReceiver.java b/assignments/src/src/OpenDis4Examples/PduReceiver.java
new file mode 100644
index 0000000000000000000000000000000000000000..63d7e99577526bcdf0dc32c57bc6da870be55c14
--- /dev/null
+++ b/assignments/src/src/OpenDis4Examples/PduReceiver.java
@@ -0,0 +1,88 @@
+package OpenDis4Examples;
+
+// originally edu.nps.moves.examples.ReceiverPerformance
+
+import java.net.*;
+
+import edu.nps.moves.dis.*;
+import edu.nps.moves.disutil.PduFactory;
+import java.io.IOException;
+
+/** Listen for IEEE DIS Protocol Data Units (PDUs) */
+public class PduReceiver 
+{
+    /** Default constructor */
+    public PduReceiver()
+    {
+        // default constructor
+    }
+    private static final int    MULTICAST_PORT  = 3000;
+    private static final String MULTICAST_GROUP = "239.1.2.3";
+    private static final boolean USE_FAST_ESPDU = false;
+    
+    /**
+     * Program invocation, execution starts here
+     * @param args command-line arguments
+     */
+    public static void main(String args[])
+    {
+        PduFactory      factory;
+        MulticastSocket socket;
+        InetAddress     address;
+		DatagramPacket  packet;
+		
+        try
+        {
+			System.out.println("OpenDis4Examples.PduReceiver started...");
+            socket  = new MulticastSocket  (MULTICAST_PORT);
+            address = InetAddress.getByName(MULTICAST_GROUP);
+//          socket.joinGroup(address); // deprecated
+            // =======================================================================
+            // new approach using interface
+            NetworkInterface networkInterface = NetworkInterface.getByInetAddress(address);
+            SocketAddress localMulticastSocketAddress = new InetSocketAddress(address, MULTICAST_PORT);
+            socket.joinGroup(localMulticastSocketAddress, networkInterface);
+            // =======================================================================
+            
+            factory = new PduFactory();
+            
+            while (true) // Loop infinitely, receiving datagrams
+            {
+                byte buffer[] = new byte[1500]; // typical MTU size
+                
+                packet = new DatagramPacket(buffer, buffer.length); // reset
+                
+                socket.receive(packet);
+                
+                Pdu pdu = factory.createPdu (packet.getData());
+				if (pdu != null)
+				{
+					short  currentPduType          = pdu.getPduType();
+					String currentPduTypeName      = pdu.getClass().getSimpleName();
+					short  currentProtocolFamilyID = pdu.getProtocolFamily();
+					String currentPduFamilyName    = pdu.getClass().getSuperclass().getSimpleName();
+					
+					StringBuilder message = new StringBuilder();
+					message.append("received DIS PDU: ");
+					message.append("pduType ");
+					if (currentPduType < 10)
+						message.append(" ");
+					message.append(currentPduType).append(" ").append(currentPduTypeName);
+					message.append(", protocolFamily ").append(currentProtocolFamilyID);
+					message.append(" ").append(currentPduFamilyName);
+				    System.out.println(message.toString());
+				}
+				else System.out.println("received packet but pdu is null, packet.getData().length=" + packet.getData().length + ", error...");
+            }
+        }
+        catch (IOException e)
+        {
+            System.out.println("Problem with OpenDis4Examples.PduReceiver, see exception trace:");
+            System.out.println(e);
+        }
+        finally
+        {
+            System.out.println("OpenDis4Examples.PduReceiver complete.");
+        }
+    }
+}
diff --git a/assignments/src/src/OpenDis4Examples/PduReceiverTerminalLog.txt b/assignments/src/src/OpenDis4Examples/PduReceiverTerminalLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..88dc4affa0a0426ced004f094bcf45c8370b2d19
--- /dev/null
+++ b/assignments/src/src/OpenDis4Examples/PduReceiverTerminalLog.txt
@@ -0,0 +1,26 @@
+ant -f C:\\x-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=OpenDis4Examples/PduReceiver.java -Drun.class=OpenDis4Examples.PduReceiver run-single
+init:
+Deleting: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+compile-single:
+run-single:
+OpenDis4Examples.PduReceiver started...
+received DIS PDU: pduType  1 edu.nps.moves.dis.EntityStatePdu, protocolFamily 1 EntityInformationFamilyPdu
+received DIS PDU: pduType  2 edu.nps.moves.dis.FirePdu, protocolFamily 2 WarfareFamilyPdu
+received DIS PDU: pduType  3 edu.nps.moves.dis.DetonationPdu, protocolFamily 2 WarfareFamilyPdu
+received DIS PDU: pduType  4 edu.nps.moves.dis.CollisionPdu, protocolFamily 1 EntityInformationFamilyPdu
+received DIS PDU: pduType  5 edu.nps.moves.dis.ServiceRequestPdu, protocolFamily 3 LogisticsFamilyPdu
+received DIS PDU: pduType  6 edu.nps.moves.dis.ResupplyOfferPdu, protocolFamily 3 LogisticsFamilyPdu
+received packet but pdu is null, packet.getData().length=1500, error...
+received DIS PDU: pduType  8 edu.nps.moves.dis.ResupplyCancelPdu, protocolFamily 3 LogisticsFamilyPdu
+received DIS PDU: pduType  9 edu.nps.moves.dis.RepairCompletePdu, protocolFamily 3 LogisticsFamilyPdu
+received DIS PDU: pduType 10 edu.nps.moves.dis.RepairResponsePdu, protocolFamily 3 LogisticsFamilyPdu
+received DIS PDU: pduType 11 edu.nps.moves.dis.CreateEntityPdu, protocolFamily 5 SimulationManagementFamilyPdu
+received DIS PDU: pduType 12 edu.nps.moves.dis.RemoveEntityPdu, protocolFamily 5 SimulationManagementFamilyPdu
+received DIS PDU: pduType 13 edu.nps.moves.dis.StartResumePdu, protocolFamily 5 SimulationManagementFamilyPdu
+received DIS PDU: pduType 14 edu.nps.moves.dis.StopFreezePdu, protocolFamily 5 SimulationManagementFamilyPdu
+received DIS PDU: pduType 15 edu.nps.moves.dis.AcknowledgePdu, protocolFamily 5 SimulationManagementFamilyPdu
+received DIS PDU: pduType 16 edu.nps.moves.dis.ActionRequestPdu, protocolFamily 5 SimulationManagementFamilyPdu
+received DIS PDU: pduType 22 edu.nps.moves.dis.CommentPdu, protocolFamily 5 SimulationManagementFamilyPdu
diff --git a/assignments/src/src/OpenDis4Examples/PduSender.java b/assignments/src/src/OpenDis4Examples/PduSender.java
new file mode 100644
index 0000000000000000000000000000000000000000..0417dd23777a3c33f5888667b9691f3c0e237dc9
--- /dev/null
+++ b/assignments/src/src/OpenDis4Examples/PduSender.java
@@ -0,0 +1,215 @@
+package OpenDis4Examples;
+
+import java.io.*;
+import java.net.*;
+import java.util.*;
+
+import edu.nps.moves.dis.*;
+import edu.nps.moves.disenum.*;
+import edu.nps.moves.examples.ClassNameComparator;
+
+/**
+ * This is an example that sends many/most types of PDUs. Useful for testing standards
+ * compliance or getting a full set of PDUs. It also writes the generated PDUs to an XML file.
+ * Adapted from OpenDIS library example package edu.nps.moves.examples
+ *
+ * @author DMcG
+ * @version $Id:$
+ */
+public class PduSender
+{
+    /** Default multicast group address we send on.
+      * @see <a href="https://en.wikipedia.org/wiki/Multicast_address" target="_blank">https://en.wikipedia.org/wiki/Multicast_address</a> */
+    private static final String DEFAULT_MULTICAST_ADDRESS = "239.1.2.3";
+	
+    /** Default multicast port used, matches Wireshark DIS capture default
+      * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+    private static final int    DEFAULT_MULTICAST_PORT    = 3000;
+	
+    private int port;
+    InetAddress multicastAddress;
+
+    /** Object constructor
+     * @param port port of interest
+     * @param multicast address of interest */
+    public PduSender(int port, String multicast) {
+        try
+		{
+            this.port = port;
+            multicastAddress = InetAddress.getByName(multicast);
+            if (!multicastAddress.isMulticastAddress())
+			{
+                System.out.println("Not a multicast address: " + multicast);
+            }
+        } 
+		catch (UnknownHostException e) {
+            System.out.println("Unable to open socket: " + e);
+        }
+    }
+
+    /** Begin operations */
+    public void run()
+	{
+		System.out.println("OpenDis4Examples.PduSender started...");
+        try {
+            List<Pdu> generatedPdusList = new ArrayList<>();
+
+            // Loop through all the enumerated PDU types, create a PDU for each type,
+            // add that PDU to generatedPdusList, and send each one
+            for (PduType pdu : PduType.values()) 
+			{
+                Pdu aPdu = null; // edu.​nps.​moves.​dis,PDU superclass for all PDUs, 
+
+                switch (pdu) // using enumeration values from edu.nps.moves.disenum.*
+				{
+                    case ENTITY_STATE:
+                        aPdu = new EntityStatePdu();
+						EntityStatePdu espdu = (EntityStatePdu) aPdu;
+						Marking marking = new Marking ();
+						marking.setCharactersString("PduSender"); // 11 characters max
+						espdu.setMarking(marking);
+						Vector3Double espduLocation = new Vector3Double();
+						espduLocation.setX(1.0);
+						espduLocation.setY(2.0);
+						espduLocation.setZ(3.0);
+						espdu.setEntityLocation(espduLocation);
+						// it is important to identify questions as you think of them
+						// TODO how to set azimuth, i.e. course direction over ground?
+                        break;
+                        
+                    case COMMENT:
+                        aPdu = new CommentPdu();
+						CommentPdu    newCommentPdu = (CommentPdu)aPdu;
+						VariableDatum newVariableDatum = new VariableDatum();
+						// etc. see Garrett and Pete's code
+                        break;
+
+                    case FIRE:
+                        aPdu = new FirePdu();
+                        break;
+
+                    case DETONATION:
+                        aPdu = new DetonationPdu();
+                        break;
+
+                    case COLLISION:
+                        aPdu = new CollisionPdu();
+                        break;
+
+                    case SERVICE_REQUEST:
+                        aPdu = new ServiceRequestPdu();
+                        break;
+
+                    case RESUPPLY_OFFER:
+                        aPdu = new ResupplyOfferPdu();
+                        break;
+
+                    case RESUPPLY_RECEIVED:
+                        aPdu = new ResupplyReceivedPdu();
+                        break;
+
+                    case RESUPPLY_CANCEL:
+                        aPdu = new ResupplyCancelPdu();
+                        break;
+
+                    case REPAIR_COMPLETE:
+                        aPdu = new RepairCompletePdu();
+                        break;
+
+                    case REPAIR_RESPONSE:
+                        aPdu = new RepairResponsePdu();
+                        break;
+
+                    case CREATE_ENTITY:
+                        aPdu = new CreateEntityPdu();
+                        break;
+
+                    case REMOVE_ENTITY:
+                        aPdu = new RemoveEntityPdu();
+                        break;
+
+                    case START_RESUME:
+                        aPdu = new StartResumePdu();
+                        break;
+
+                    case STOP_FREEZE:
+                        aPdu = new StopFreezePdu();
+                        break;
+
+                    case ACKNOWLEDGE:
+                        aPdu = new AcknowledgePdu();
+                        break;
+
+                    case ACTION_REQUEST:
+                        aPdu = new ActionRequestPdu();
+                        break;
+
+                    default:
+                        System.out.print("PDU of type " + pdu + " not supported, created or sent ");
+                        System.out.println();
+                }
+                if (aPdu != null)
+				{
+                    generatedPdusList.add(aPdu);
+                }
+            }
+
+            // Sort the created PDUs by class name, if desired
+//            Collections.sort(generatedPdusList, new ClassNameComparator());
+
+            System.out.println("Send the " + generatedPdusList.size() + " PDUs we created...");
+
+            // Send the PDUs we created
+            InetAddress localMulticastAddress = InetAddress.getByName(DEFAULT_MULTICAST_ADDRESS);
+            MulticastSocket socket = new MulticastSocket(DEFAULT_MULTICAST_PORT);
+//          socket.joinGroup(localMulticastAddress); // deprecated, TODO select correct NetworkInterface
+            // =======================================================================
+            // updated approach using NetworkInterface
+            NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localMulticastAddress);
+            if (networkInterface != null)
+                System.out.println("networkInterface=" + networkInterface.getDisplayName()); // typically null if loopback
+            SocketAddress localMulticastSocketAddress = new InetSocketAddress(localMulticastAddress, DEFAULT_MULTICAST_PORT);
+            socket.joinGroup(localMulticastSocketAddress, networkInterface);
+            // =======================================================================
+
+            for (int idx = 0; idx < generatedPdusList.size(); idx++)
+			{
+                ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                DataOutputStream dos = new DataOutputStream(baos);
+                byte[] buffer;
+
+                Pdu aPdu = generatedPdusList.get(idx);
+                aPdu.marshal(dos);
+
+                buffer = baos.toByteArray();
+                DatagramPacket packet = new DatagramPacket(buffer, buffer.length, localMulticastAddress, DEFAULT_MULTICAST_PORT);
+                socket.send(packet);
+                System.out.println("Sent PDU of type " + aPdu.getClass().getSimpleName());
+            }
+            // write the PDUs out to an XML file.
+            //PduContainer container = new PduContainer();
+            //container.setPdus(generatedPdus);
+            //container.marshallToXml("examplePdus.xml");
+        } catch (IOException e)
+		{
+            System.out.println(e);
+        }
+    }
+
+    /**
+     * Program invocation, execution starts here
+     * @param args command-line arguments
+     */
+    public static void main(String args[])
+	{
+        if (args.length == 2) {
+            PduSender sender = new PduSender(Integer.parseInt(args[0]), args[1]);
+            sender.run();
+        } else {
+            System.out.println("Usage:   PduSender <port> <multicast group>");
+            System.out.println("Default: PduSender  " + DEFAULT_MULTICAST_PORT + "   " + DEFAULT_MULTICAST_ADDRESS);
+            PduSender sender = new  PduSender(DEFAULT_MULTICAST_PORT, DEFAULT_MULTICAST_ADDRESS);
+            sender.run();
+        }
+    }
+}
diff --git a/assignments/src/src/OpenDis4Examples/PduSenderTerminalLog.txt b/assignments/src/src/OpenDis4Examples/PduSenderTerminalLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e9d69b91e924154dabf6132a952fe563d9fa7b8c
--- /dev/null
+++ b/assignments/src/src/OpenDis4Examples/PduSenderTerminalLog.txt
@@ -0,0 +1,81 @@
+ant -f C:\\x-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=OpenDis4Examples/PduSender.java -Drun.class=OpenDis4Examples.PduSender run-single
+init:
+Deleting: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+compile-single:
+run-single:
+Usage:   PduSender <port> <multicast group>
+Default: PduSender  3000   239.1.2.3
+OpenDis4Examples.PduSender started...
+PDU of type OTHER not supported, created or sent 
+PDU of type ACTION_RESPONSE not supported, created or sent 
+PDU of type DATA_QUERY not supported, created or sent 
+PDU of type SET_DATA not supported, created or sent 
+PDU of type DATA not supported, created or sent 
+PDU of type EVENT_REPORT not supported, created or sent 
+PDU of type ELECTROMAGNETIC_EMISSION not supported, created or sent 
+PDU of type DESIGNATOR not supported, created or sent 
+PDU of type TRANSMITTER not supported, created or sent 
+PDU of type SIGNAL not supported, created or sent 
+PDU of type RECEIVER not supported, created or sent 
+PDU of type IFF_ATC_NAVAIDS not supported, created or sent 
+PDU of type UNDERWATER_ACOUSTIC not supported, created or sent 
+PDU of type SUPPLEMENTAL_EMISSION_ENTITY_STATE not supported, created or sent 
+PDU of type INTERCOM_SIGNAL not supported, created or sent 
+PDU of type INTERCOM_CONTROL not supported, created or sent 
+PDU of type AGGREGATE_STATE not supported, created or sent 
+PDU of type ISGROUPOF not supported, created or sent 
+PDU of type TRANSFER_CONTROL not supported, created or sent 
+PDU of type ISPARTOF not supported, created or sent 
+PDU of type MINEFIELD_STATE not supported, created or sent 
+PDU of type MINEFIELD_QUERY not supported, created or sent 
+PDU of type MINEFIELD_DATA not supported, created or sent 
+PDU of type MINEFIELD_RESPONSE_NAK not supported, created or sent 
+PDU of type ENVIRONMENTAL_PROCESS not supported, created or sent 
+PDU of type GRIDDED_DATA not supported, created or sent 
+PDU of type POINT_OBJECT_STATE not supported, created or sent 
+PDU of type LINEAR_OBJECT_STATE not supported, created or sent 
+PDU of type AREAL_OBJECT_STATE not supported, created or sent 
+PDU of type TSPI not supported, created or sent 
+PDU of type APPEARANCE not supported, created or sent 
+PDU of type ARTICULATED_PARTS not supported, created or sent 
+PDU of type LE_FIRE not supported, created or sent 
+PDU of type LE_DETONATION not supported, created or sent 
+PDU of type CREATE_ENTITY_R not supported, created or sent 
+PDU of type REMOVE_ENTITY_R not supported, created or sent 
+PDU of type START_RESUME_R not supported, created or sent 
+PDU of type STOP_FREEZE_R not supported, created or sent 
+PDU of type ACKNOWLEDGE_R not supported, created or sent 
+PDU of type ACTION_REQUEST_R not supported, created or sent 
+PDU of type ACTION_RESPONSE_R not supported, created or sent 
+PDU of type DATA_QUERY_R not supported, created or sent 
+PDU of type SET_DATA_R not supported, created or sent 
+PDU of type DATA_R not supported, created or sent 
+PDU of type EVENT_REPORT_R not supported, created or sent 
+PDU of type COMMENT_R not supported, created or sent 
+PDU of type RECORD_R not supported, created or sent 
+PDU of type SET_RECORD_R not supported, created or sent 
+PDU of type RECORD_QUERY_R not supported, created or sent 
+PDU of type COLLISION_ELASTIC not supported, created or sent 
+PDU of type ENTITY_STATE_UPDATE not supported, created or sent 
+Send the 17 PDUs we created...
+Sent PDU of type edu.nps.moves.dis.EntityStatePdu
+Sent PDU of type edu.nps.moves.dis.FirePdu
+Sent PDU of type edu.nps.moves.dis.DetonationPdu
+Sent PDU of type edu.nps.moves.dis.CollisionPdu
+Sent PDU of type edu.nps.moves.dis.ServiceRequestPdu
+Sent PDU of type edu.nps.moves.dis.ResupplyOfferPdu
+Sent PDU of type edu.nps.moves.dis.ResupplyReceivedPdu
+Sent PDU of type edu.nps.moves.dis.ResupplyCancelPdu
+Sent PDU of type edu.nps.moves.dis.RepairCompletePdu
+Sent PDU of type edu.nps.moves.dis.RepairResponsePdu
+Sent PDU of type edu.nps.moves.dis.CreateEntityPdu
+Sent PDU of type edu.nps.moves.dis.RemoveEntityPdu
+Sent PDU of type edu.nps.moves.dis.StartResumePdu
+Sent PDU of type edu.nps.moves.dis.StopFreezePdu
+Sent PDU of type edu.nps.moves.dis.AcknowledgePdu
+Sent PDU of type edu.nps.moves.dis.ActionRequestPdu
+Sent PDU of type edu.nps.moves.dis.CommentPdu
+BUILD SUCCESSFUL (total time: 2 seconds)
diff --git a/assignments/src/src/OpenDis4Examples/PduSenderWireshark.png b/assignments/src/src/OpenDis4Examples/PduSenderWireshark.png
new file mode 100644
index 0000000000000000000000000000000000000000..2991771d646657e5803b2aa58758a417296ba26b
Binary files /dev/null and b/assignments/src/src/OpenDis4Examples/PduSenderWireshark.png differ
diff --git a/assignments/src/src/OpenDis4Examples/README.md b/assignments/src/src/OpenDis4Examples/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..538a10cd70b2988ff1a85cc7e6ca061d4696c953
--- /dev/null
+++ b/assignments/src/src/OpenDis4Examples/README.md
@@ -0,0 +1,10 @@
+# DIS Protocol Examples using Open-DIS-4 Java Library
+
+*Note:* these archived examples demonstrate an earlier version of Open-DIS-Java Library.
+Please work with current version [OpenDis7Examples](../OpenDis7Examples) instead.
+
+---
+
+Course examples using the [Open-DIS-Java](https://github.com/open-dis/open-dis-java) library are presented in this package.
+
+See [specifications](../../../specifications) directory to obtain reference copies of DIS and RPRFOM standards.
diff --git a/assignments/src/src/OpenDis4Examples/package-info.java b/assignments/src/src/OpenDis4Examples/package-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..acf568a652b70cfb93425f08706f73d34f79f9d7
--- /dev/null
+++ b/assignments/src/src/OpenDis4Examples/package-info.java
@@ -0,0 +1,10 @@
+/**
+ * open-dis library version 4: Java examples supporting the NPS MOVES MV3500 Networked Graphics course.
+ * 
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/examples/src/OpenDis4Examples" target="blank">NetworkedGraphicsMV3500 examples: OpenDis4Examples</a>
+ * @see java.lang.Package
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="blank">StackOverflow: how-do-i-document-packages-in-java</a>
+ */
+
+package OpenDis4Examples;
diff --git a/assignments/src/src/OpenDis7Examples/AllPduReceiver.java b/assignments/src/src/OpenDis7Examples/AllPduReceiver.java
new file mode 100644
index 0000000000000000000000000000000000000000..424ab01244d066a36803ca2b3ae0e425b4eb07cf
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/AllPduReceiver.java
@@ -0,0 +1,137 @@
+package OpenDis7Examples;
+
+import edu.nps.moves.dis7.enumerations.*;
+import edu.nps.moves.dis7.pdus.*;
+import edu.nps.moves.dis7.utilities.DisTime;
+import edu.nps.moves.dis7.utilities.PduFactory;
+import java.io.*;
+import java.net.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/** Listen to all kinds of PDUs and report them */
+public class AllPduReceiver
+{
+    /** Default constructor */
+    public AllPduReceiver()
+    {
+        // default constructor
+    }
+    /** default multicast address
+     * @see <a href="https://en.wikipedia.org/wiki/Multicast_address" target="_blank">https://en.wikipedia.org/wiki/Multicast_address</a> */
+    public static final String  DEFAULT_MULTICAST_ADDRESS = AllPduSender.DEFAULT_MULTICAST_ADDRESS;
+    /** default multicast port
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+    public static final int     DEFAULT_MULTICAST_PORT    = AllPduSender.DEFAULT_MULTICAST_PORT;
+    /** TODO whether to use Fast ESPDU */
+    public static final boolean USE_FAST_ESPDU = false;
+    
+	/** Output prefix to identify this class */
+    private final static String TRACE_PREFIX = "[" + AllPduReceiver.class.getName() + "] ";
+
+    /**
+     * Program invocation, execution starts here
+     * @param args command-line arguments
+     */
+    public static void main(String args[])
+    {
+        MulticastSocket multicastSocket;
+        InetAddress     multicastInetAddress;
+        PduFactory      pduFactory = new PduFactory();
+        DisTime.TimestampStyle       timestampStyle        = DisTime.TimestampStyle.IEEE_ABSOLUTE;
+        DisTime.setTimestampStyle(timestampStyle);
+
+        System.out.println(TRACE_PREFIX + "started...");
+
+        try {
+            if (args.length == 2)
+            {
+                multicastInetAddress = InetAddress.getByName(args[0]);
+                multicastSocket  = new MulticastSocket(Integer.parseInt(args[1]));
+            }
+            else
+            {
+                System.out.println("Usage:   AllPduReceiver <multicast group> <port>");
+                System.out.println("Default: AllPduReceiver     " + DEFAULT_MULTICAST_ADDRESS + "      " + DEFAULT_MULTICAST_PORT);
+                multicastSocket  = new MulticastSocket(DEFAULT_MULTICAST_PORT);
+                multicastInetAddress = InetAddress.getByName(DEFAULT_MULTICAST_ADDRESS);
+            }
+            System.out.println("To quit: stop or kill this process");
+    //      multicastSocket.joinGroup(multicastInetAddress); // deprecated
+
+            // =======================================================================
+            // new approach using interface
+            NetworkInterface networkInterface = NetworkInterface.getByInetAddress(multicastInetAddress);
+            SocketAddress localMulticastSocketAddress = new InetSocketAddress(multicastInetAddress, DEFAULT_MULTICAST_PORT);
+            multicastSocket.joinGroup(localMulticastSocketAddress, networkInterface);
+            // =======================================================================
+
+            byte buffer[]  = new byte[1500]; // typical MTU size in bytes
+
+            while (true) // Loop indefinitely, receiving datagrams
+            {
+                Arrays.fill(buffer, (byte)0);
+                DatagramPacket datagramPacket = new DatagramPacket(buffer, buffer.length); // reset packet each time
+                multicastSocket.receive(datagramPacket);  // process blocks here until receipt of network packet with PDU
+        //        datagramPacket.setLength(buffer.length);
+
+        //      Pdu pdu = pduFactory.createPdu(packet.getData()); // packet.getData() returns byte[] array data buffer
+
+                List<Pdu> pduBundle = pduFactory.getPdusFromBundle(datagramPacket.getData(),datagramPacket.getLength());
+
+                if      (pduBundle.isEmpty())
+                     System.out.println("Received PDU bundle is empty, packet.getData().length=" + datagramPacket.getData().length + ", error...");
+        //      else if (pduBundle.size() == 1)// common case, typically unremarkable
+        //           System.out.println("Received PDU bundle size is " + pduBundle.size());
+                else if (pduBundle.size() > 1)
+                     System.out.println("Received PDU bundle size is " + pduBundle.size());
+
+                for (Pdu nextPdu : pduBundle) // iterator loop through PDU bundle
+                {
+                    DisPduType currentPduType       = nextPdu.getPduType(); //short  currentPduType = nextPdu.getPduType();
+                    String     currentPduTypeName   = nextPdu.getClass().getSimpleName();
+                    String     currentPduFamilyName = nextPdu.getClass().getSuperclass().getSimpleName();
+                    DISProtocolFamily currentProtocolFamilyID = nextPdu.getProtocolFamily(); //short  currentProtocolFamilyID = nextPdu.getProtocolFamily();
+
+                    StringBuilder message = new StringBuilder();
+                    message.append(DisTime.convertToString(nextPdu.getTimestamp())).append(" ");
+                    message.append("received new DIS PDU ");
+                    String currentPduTypePadded     = String.format("%-48s", currentPduType);     // - indicates right padding of whitespace
+                    message.append(currentPduTypePadded);
+                    // optional, verbose
+        //            String currentPduTypeNamePadded = String.format("%-49s", currentPduTypeName); // - indicates right padding of whitespace
+        //            message.append(" of type ").append(currentPduTypeNamePadded); // package.class name
+                    message.append(" (").append(currentProtocolFamilyID);
+        //          message.append(" ").append(currentPduFamilyName); // class name is also available
+                    message.append(")");
+                    System.out.println(message.toString()); // diagnostic information helps
+
+                    // additional message information of interest, if any
+                    switch (currentPduType) // using enumeration values from edu.​nps.​moves.​dis7.​enumerations.​DisPduType
+                    {
+                        case COMMENT:
+                            CommentPdu commentPdu = (CommentPdu)nextPdu; // cast to precise type
+                            ArrayList<VariableDatum> payloadList = (ArrayList<VariableDatum>)commentPdu.getVariableDatums();
+                            if (!payloadList.isEmpty())
+                                System.out.print  ("   messages: ");
+                            for (VariableDatum variableDatum : payloadList)
+                            {
+                                String nextComment = new String(variableDatum.getVariableDatumValue()); // convert byte[] to String
+                                System.out.print  (" \"" + nextComment + "\"");
+                            }
+                            System.out.println();
+                    }
+                }
+                pduBundle.clear();
+            }
+        }
+        catch (IOException e) {
+          System.out.println("Problem with OpenDis7Examples.AllPduReceiver, see exception trace:");
+          System.out.println(e);
+        }
+        finally {
+          System.out.println("OpenDis7Examples.AllPduReceiver complete.");
+        }
+      }
+}
diff --git a/assignments/src/src/OpenDis7Examples/AllPduReceiverLog.txt b/assignments/src/src/OpenDis7Examples/AllPduReceiverLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b8e370319696e6f2a140ff6c56c1a05801f1c528
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/AllPduReceiverLog.txt
@@ -0,0 +1,87 @@
+ant -f C:\\x3d-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=OpenDis7Examples/AllPduReceiver.java -Drun.class=OpenDis7Examples.AllPduReceiver run-single
+init:
+Deleting: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+warning: [options] system modules path not set in conjunction with -source 17
+1 warning
+compile-single:
+run-single:
+[OpenDis7Examples.AllPduReceiver] started...
+Usage:   AllPduReceiver <multicast group> <port>
+Default: AllPduReceiver     239.1.2.3      3000
+To quit: stop or kill this process
+1969-00-31 16:00:00 received new DIS PDU DisPduType 01 ENTITY_STATE                       (DISProtocolFamily 1 ENTITY_INFORMATION_INTERACTION)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 02 FIRE                               (DISProtocolFamily 2 WARFARE)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 03 DETONATION                         (DISProtocolFamily 2 WARFARE)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 04 COLLISION                          (DISProtocolFamily 1 ENTITY_INFORMATION_INTERACTION)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 05 SERVICE_REQUEST                    (DISProtocolFamily 3 LOGISTICS)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 06 RESUPPLY_OFFER                     (DISProtocolFamily 3 LOGISTICS)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 07 RESUPPLY_RECEIVED                  (DISProtocolFamily 3 LOGISTICS)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 08 RESUPPLY_CANCEL                    (DISProtocolFamily 3 LOGISTICS)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 09 REPAIR_COMPLETE                    (DISProtocolFamily 3 LOGISTICS)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 10 REPAIR_RESPONSE                    (DISProtocolFamily 3 LOGISTICS)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 11 CREATE_ENTITY                      (DISProtocolFamily 5 SIMULATION_MANAGEMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 12 REMOVE_ENTITY                      (DISProtocolFamily 5 SIMULATION_MANAGEMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 13 START_RESUME                       (DISProtocolFamily 5 SIMULATION_MANAGEMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 14 STOP_FREEZE                        (DISProtocolFamily 5 SIMULATION_MANAGEMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 15 ACKNOWLEDGE                        (DISProtocolFamily 5 SIMULATION_MANAGEMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 16 ACTION_REQUEST                     (DISProtocolFamily 5 SIMULATION_MANAGEMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 17 ACTION_RESPONSE                    (DISProtocolFamily 5 SIMULATION_MANAGEMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 18 DATA_QUERY                         (DISProtocolFamily 5 SIMULATION_MANAGEMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 19 SET_DATA                           (DISProtocolFamily 5 SIMULATION_MANAGEMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 20 DATA                               (DISProtocolFamily 5 SIMULATION_MANAGEMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 21 EVENT_REPORT                       (DISProtocolFamily 5 SIMULATION_MANAGEMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 22 COMMENT                            (DISProtocolFamily 5 SIMULATION_MANAGEMENT)
+   messages:  "Hello CommentPDU" "Here is a second line of text in this comment."
+1969-00-31 16:00:00 received new DIS PDU DisPduType 23 ELECTROMAGNETIC_EMISSION           (DISProtocolFamily 6 DISTRIBUTED_EMISSION_REGENERATION)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 24 DESIGNATOR                         (DISProtocolFamily 6 DISTRIBUTED_EMISSION_REGENERATION)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 25 TRANSMITTER                        (DISProtocolFamily 4 RADIO_COMMUNICATIONS)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 26 SIGNAL                             (DISProtocolFamily 4 RADIO_COMMUNICATIONS)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 27 RECEIVER                           (DISProtocolFamily 4 RADIO_COMMUNICATIONS)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 28 IDENTIFICATION_FRIEND_OR_FOE       (DISProtocolFamily 6 DISTRIBUTED_EMISSION_REGENERATION)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 29 UNDERWATER_ACOUSTIC                (DISProtocolFamily 6 DISTRIBUTED_EMISSION_REGENERATION)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 30 SUPPLEMENTAL_EMISSION_ENTITY_STATE (DISProtocolFamily 6 DISTRIBUTED_EMISSION_REGENERATION)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 31 INTERCOM_SIGNAL                    (DISProtocolFamily 4 RADIO_COMMUNICATIONS)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 32 INTERCOM_CONTROL                   (DISProtocolFamily 4 RADIO_COMMUNICATIONS)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 33 AGGREGATE_STATE                    (DISProtocolFamily 7 ENTITY_MANAGEMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 34 ISGROUPOF                          (DISProtocolFamily 7 ENTITY_MANAGEMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 35 TRANSFER_OWNERSHIP                 (DISProtocolFamily 7 ENTITY_MANAGEMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 36 ISPARTOF                           (DISProtocolFamily 7 ENTITY_MANAGEMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 37 MINEFIELD_STATE                    (DISProtocolFamily 8 MINEFIELD)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 38 MINEFIELD_QUERY                    (DISProtocolFamily 8 MINEFIELD)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 39 MINEFIELD_DATA                     (DISProtocolFamily 8 MINEFIELD)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 40 MINEFIELD_RESPONSE_NACK            (DISProtocolFamily 8 MINEFIELD)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 41 ENVIRONMENTAL_PROCESS              (DISProtocolFamily 9 SYNTHETIC_ENVIRONMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 42 GRIDDED_DATA                       (DISProtocolFamily 9 SYNTHETIC_ENVIRONMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 43 POINT_OBJECT_STATE                 (DISProtocolFamily 9 SYNTHETIC_ENVIRONMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 44 LINEAR_OBJECT_STATE                (DISProtocolFamily 9 SYNTHETIC_ENVIRONMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 45 AREAL_OBJECT_STATE                 (DISProtocolFamily 9 SYNTHETIC_ENVIRONMENT)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 46 TIME_SPACE_POSITION_INFORMATION    (DISProtocolFamily 11 LIVE_ENTITY_LE_INFORMATION_INTERACTION)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 47 APPEARANCE                         (DISProtocolFamily 11 LIVE_ENTITY_LE_INFORMATION_INTERACTION)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 48 ARTICULATED_PARTS                  (DISProtocolFamily 11 LIVE_ENTITY_LE_INFORMATION_INTERACTION)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 49 LIVE_ENTITY_FIRE                   (DISProtocolFamily 11 LIVE_ENTITY_LE_INFORMATION_INTERACTION)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 50 LIVE_ENTITY_DETONATION             (DISProtocolFamily 11 LIVE_ENTITY_LE_INFORMATION_INTERACTION)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 51 CREATE_ENTITY_RELIABLE             (DISProtocolFamily 10 SIMULATION_MANAGEMENT_WITH_RELIABILITY)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 52 REMOVE_ENTITY_RELIABLE             (DISProtocolFamily 10 SIMULATION_MANAGEMENT_WITH_RELIABILITY)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 53 START_RESUME_RELIABLE              (DISProtocolFamily 10 SIMULATION_MANAGEMENT_WITH_RELIABILITY)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 54 STOP_FREEZE_RELIABLE               (DISProtocolFamily 10 SIMULATION_MANAGEMENT_WITH_RELIABILITY)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 55 ACKNOWLEDGE_RELIABLE               (DISProtocolFamily 10 SIMULATION_MANAGEMENT_WITH_RELIABILITY)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 56 ACTION_REQUEST_RELIABLE            (DISProtocolFamily 10 SIMULATION_MANAGEMENT_WITH_RELIABILITY)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 57 ACTION_RESPONSE_RELIABLE           (DISProtocolFamily 10 SIMULATION_MANAGEMENT_WITH_RELIABILITY)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 58 DATA_QUERY_RELIABLE                (DISProtocolFamily 10 SIMULATION_MANAGEMENT_WITH_RELIABILITY)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 59 SET_DATA_RELIABLE                  (DISProtocolFamily 10 SIMULATION_MANAGEMENT_WITH_RELIABILITY)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 60 DATA_RELIABLE                      (DISProtocolFamily 10 SIMULATION_MANAGEMENT_WITH_RELIABILITY)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 61 EVENT_REPORT_RELIABLE              (DISProtocolFamily 10 SIMULATION_MANAGEMENT_WITH_RELIABILITY)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 62 COMMENT_RELIABLE                   (DISProtocolFamily 10 SIMULATION_MANAGEMENT_WITH_RELIABILITY)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 63 RECORD_RELIABLE                    (DISProtocolFamily 10 SIMULATION_MANAGEMENT_WITH_RELIABILITY)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 64 SET_RECORD_RELIABLE                (DISProtocolFamily 10 SIMULATION_MANAGEMENT_WITH_RELIABILITY)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 65 RECORD_QUERY_RELIABLE              (DISProtocolFamily 10 SIMULATION_MANAGEMENT_WITH_RELIABILITY)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 66 COLLISION_ELASTIC                  (DISProtocolFamily 1 ENTITY_INFORMATION_INTERACTION)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 67 ENTITY_STATE_UPDATE                (DISProtocolFamily 1 ENTITY_INFORMATION_INTERACTION)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 68 DIRECTED_ENERGY_FIRE               (DISProtocolFamily 2 WARFARE)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 69 ENTITY_DAMAGE_STATUS               (DISProtocolFamily 2 WARFARE)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 70 INFORMATION_OPERATIONS_ACTION      (DISProtocolFamily 13 INFORMATION_OPERATIONS)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 71 INFORMATION_OPERATIONS_REPORT      (DISProtocolFamily 13 INFORMATION_OPERATIONS)
+1969-00-31 16:00:00 received new DIS PDU DisPduType 72 ATTRIBUTE                          (DISProtocolFamily 1 ENTITY_INFORMATION_INTERACTION)
diff --git a/assignments/src/src/OpenDis7Examples/AllPduSender.java b/assignments/src/src/OpenDis7Examples/AllPduSender.java
new file mode 100755
index 0000000000000000000000000000000000000000..441f9c1006c4c88eb6039de6f44e01a8e09b7594
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/AllPduSender.java
@@ -0,0 +1,557 @@
+package OpenDis7Examples;
+
+import java.io.*;
+import java.net.*;
+import java.util.*;
+
+import edu.nps.moves.dis7.pdus.*;
+import edu.nps.moves.dis7.enumerations.*;
+
+/**
+ * This is an application example that sends every type of PDU defined
+ * by the IEEE Distributed Interactive Simulation (DIS) Protocol.
+ * This example program is useful for testing standards compliance by applications, or 
+ * producing a full set of PDUs. It also writes the generated PDUs to an XML file.
+ * Adapted from OpenDIS library example package edu.nps.moves.examples
+ *
+ * @author brutzman
+ * @author DMcG
+ * @version $Id:$
+ */
+public class AllPduSender
+{
+    /** Default multicast group address we send on.
+      * @see <a href="https://en.wikipedia.org/wiki/Multicast_address" target="_blank">https://en.wikipedia.org/wiki/Multicast_address</a> */
+    public static final String DEFAULT_MULTICAST_ADDRESS = "239.1.2.3"; // PduRecorder "225.4.5.6"; //
+	
+    /** Default multicast port used, matches Wireshark DIS capture default
+      * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+    public static final int    DEFAULT_MULTICAST_PORT    = 3000;
+	
+    /** Duration in milliseconds, set to 0 to avoid pausing between PDU sends */
+    private long               THREAD_SLEEP_INTERVAL = 0;
+	
+    /** Number of complete loops to perform.
+     * Putting any upper limit on # packets sent avoids possibility of non-terminating infinite loops that continue sending packets. */
+    private int                SEND_LOOPS_TO_PERFORM = 1;
+    
+    private static InetAddress multicastInetAddress;
+    private static int         port;
+
+    /** Object constructor
+     * @param newMulticastAddress address of interest
+     * @param newMulticastPort port of interest */
+    public AllPduSender(String newMulticastAddress, int newMulticastPort)
+    {
+        this.port = DEFAULT_MULTICAST_PORT;
+        try
+		{
+            multicastInetAddress = InetAddress.getByName(newMulticastAddress);
+            if (!multicastInetAddress.isMulticastAddress())
+			{
+                System.out.println("Not a multicast address: " + newMulticastAddress);
+            }
+            this.port = newMulticastPort;
+        } 
+		catch (UnknownHostException e) {
+            System.out.println("Unable to open socket: " + e);
+        }
+    }
+
+    /** Begin operations
+     * @return number of PDUs received, -1 if exception occurs */
+    @SuppressWarnings("SleepWhileInLoop")
+    public int run()
+	{
+		System.out.println("OpenDis7Examples.AllPduSender started...");
+        if (SEND_LOOPS_TO_PERFORM != 1)
+        {
+            float  waitIntervalSeconds = ((float)THREAD_SLEEP_INTERVAL / 1000);
+            float  loopIntervalSeconds = ((float)THREAD_SLEEP_INTERVAL / 1000) * 72; // 72 PDUs
+            float totalDurationSeconds = loopIntervalSeconds * SEND_LOOPS_TO_PERFORM ;
+            System.out.println("... THREAD_SLEEP_INTERVAL = " + THREAD_SLEEP_INTERVAL + " milliseconds = "  + waitIntervalSeconds + " seconds");
+            System.out.print  ("... running for ");
+            if (SEND_LOOPS_TO_PERFORM > 1)
+                System.out.print  (SEND_LOOPS_TO_PERFORM + " loops, ");
+            if (THREAD_SLEEP_INTERVAL > 0)
+                System.out.println("expected loop interval = " + loopIntervalSeconds + " seconds, total duration = " + 
+                        totalDurationSeconds + " seconds = " + (totalDurationSeconds/60.0) + " minutes");
+        }
+           
+        System.out.println("Generate list of all PDU types and note issues, if any...");
+        List<Pdu> generatedPdusList = new ArrayList<>();
+            
+        for (int i = 0; i < SEND_LOOPS_TO_PERFORM; i++) {
+            
+            try {
+                
+                // Loop through all the enumerated PDU types, create a PDU for each type,
+                // add that PDU to generatedPdusList, then send each one
+                for (DisPduType pduTypeValue : DisPduType.values()) 
+                {
+    //                System.out.println("PDU " + pdu.getValue() + " " + pdu.name() + " " + pdu.getDescription()); // diagnostic
+
+                    Pdu aPdu = null; // edu.​nps.​moves7.​dis.PDU superclass for all PDUs, in preparation for custom assignment
+
+                    try {
+                        switch (pduTypeValue) // using enumeration values from edu.​nps.​moves.​dis7.​enumerations.​DisPduType
+                        {
+                            // each case value is DisPduType
+                            case OTHER: // 0
+                                System.out.println ("*** Note: DisPduType." + pduTypeValue.name() + "=" + pduTypeValue.getValue() + " not supported"); // TODO why was this received?
+                                break; // nothing to send
+
+                            case ENTITY_STATE: // 1 
+                                aPdu = new EntityStatePdu();
+
+                                EntityStatePdu espdu = (EntityStatePdu) aPdu;
+                                EntityMarking entityMarking = new EntityMarking ();
+                                entityMarking.setCharacters("AllPduSender".getBytes());   //entityMarking.setCharacters(Byte.valueOf("0")); // 11 characters max?
+
+                                espdu.setMarking(entityMarking);
+                                Vector3Double espduLocation = new Vector3Double();
+                                espduLocation.setX(1.0);
+                                espduLocation.setY(2.0);
+                                espduLocation.setZ(3.0);
+                                espdu.setEntityLocation(espduLocation);
+                                // it is important to identify questions as you think of them
+                                // TODO how to set azimuth, i.e. course direction over ground?
+                                break;
+
+                            case FIRE: // 2
+                                aPdu = new FirePdu();
+                                break;
+
+                            case DETONATION: // 3
+                                aPdu = new DetonationPdu();
+                                break;
+
+                            case COLLISION: // 4
+                                aPdu = new CollisionPdu();
+                                break;
+
+                            case SERVICE_REQUEST: // 5
+                                aPdu = new ServiceRequestPdu();
+                                break;
+
+                            case RESUPPLY_OFFER: // 6
+                                aPdu = new ResupplyOfferPdu();
+                                break;
+
+                            case RESUPPLY_RECEIVED: // 7
+                                aPdu = new ResupplyReceivedPdu();
+                                break;
+
+                            case RESUPPLY_CANCEL: //8
+                                aPdu = new ResupplyCancelPdu();
+                                break;
+
+                            case REPAIR_COMPLETE: // 9
+                                aPdu = new RepairCompletePdu();
+                                break;
+
+                            case REPAIR_RESPONSE: // 10
+                                aPdu = new RepairResponsePdu();
+                                break;
+
+                            case CREATE_ENTITY: // 11
+                                aPdu = new CreateEntityPdu();
+                                break;
+
+                            case REMOVE_ENTITY: // 12
+                                aPdu = new RemoveEntityPdu();
+                                break;
+
+                            case START_RESUME: // 13
+                                aPdu = new StartResumePdu();
+                                break;
+
+                            case STOP_FREEZE: // 14
+                                aPdu = new StopFreezePdu();
+                                break;
+
+                            case ACKNOWLEDGE: // 15
+                                aPdu = new AcknowledgePdu();
+                                break;
+
+                            case ACTION_REQUEST: // 16
+                                aPdu = new ActionRequestPdu();
+                                break;
+
+                            case ACTION_RESPONSE: // 17
+                                aPdu = new ActionResponsePdu();
+                                break;
+
+                            case DATA_QUERY: // 18
+                                aPdu = new DataQueryPdu();
+                                break;
+
+                            case SET_DATA: // 19
+                                aPdu = new SetDataPdu();
+                                break;
+
+                            case DATA: // 20
+                                aPdu = new DataPdu();
+                                break;
+
+                            case EVENT_REPORT: // 21
+                                aPdu = new EventReportPdu();
+                                break;
+
+                            case ELECTROMAGNETIC_EMISSION: // 23
+                                aPdu = new ElectromagneticEmissionPdu();
+                                break;
+
+                            case DESIGNATOR: // 24
+                                aPdu = new DesignatorPdu();
+                                break;
+
+                            case TRANSMITTER: // 25
+                                aPdu = new TransmitterPdu();
+                                break;
+
+                            case SIGNAL: // 26
+                                aPdu = new SignalPdu();
+                                break;
+
+                            case RECEIVER: // 27
+                                aPdu = new ReceiverPdu();
+                                break;
+
+                            case IDENTIFICATION_FRIEND_OR_FOE: // 28
+                                aPdu = new IdentificationFriendOrFoePdu();
+                                break;
+
+                            case UNDERWATER_ACOUSTIC: // 29
+                                aPdu = new UnderwaterAcousticPdu();
+                                break;
+
+                            case SUPPLEMENTAL_EMISSION_ENTITY_STATE: // 30
+                                aPdu = new SupplementalEmissionEntityStatePdu();
+                                break;
+
+                            case INTERCOM_SIGNAL: // 31
+                                aPdu = new IntercomSignalPdu();
+                                break;
+
+                            case INTERCOM_CONTROL: // 32
+                                aPdu = new IntercomControlPdu();
+                                break;
+
+                            case AGGREGATE_STATE: // 33
+                                aPdu = new AggregateStatePdu();
+                                break;
+
+                            case ISGROUPOF: // 34
+                                aPdu = new IsGroupOfPdu();
+                                break;
+
+                            case TRANSFER_OWNERSHIP: // 35
+                                aPdu = new TransferOwnershipPdu();
+                                break;
+
+                            case ISPARTOF: // 36
+                                aPdu = new IsPartOfPdu();
+                                break;
+
+                            case MINEFIELD_STATE: // 37
+                                aPdu = new MinefieldStatePdu();
+                                break;
+
+                            case MINEFIELD_QUERY: // 38
+                                aPdu = new MinefieldQueryPdu();
+                                break;
+
+                            case MINEFIELD_DATA: // 39
+                                aPdu = new MinefieldDataPdu();
+                                break;
+
+                            case MINEFIELD_RESPONSE_NACK: // 40
+                                aPdu = new MinefieldResponseNACKPdu();
+                                break;
+
+                            case ENVIRONMENTAL_PROCESS: // 41
+                                aPdu = new EnvironmentalProcessPdu();
+                                break;
+
+                            case GRIDDED_DATA: // 42
+                                aPdu = new GriddedDataPdu();
+                                break;
+
+                            case POINT_OBJECT_STATE: // 43
+                                aPdu = new PointObjectStatePdu();
+                                break;
+
+                            case LINEAR_OBJECT_STATE: // 44
+                                aPdu = new LinearObjectStatePdu();
+                                break;
+
+                            case AREAL_OBJECT_STATE: // 45
+                                aPdu = new ArealObjectStatePdu();
+                                break;
+
+                            case TIME_SPACE_POSITION_INFORMATION: // 46
+                                aPdu = new TimeSpacePositionInformationPdu();
+                                break;
+
+                            case APPEARANCE: // 47
+                                aPdu = new AppearancePdu();
+                                break;
+
+                            case ARTICULATED_PARTS: // 48
+                                aPdu = new ArticulatedPartsPdu();
+                                break;
+
+                            case LIVE_ENTITY_FIRE: // 49
+                                aPdu = new LiveEntityFirePdu();
+                                break;
+
+                            case LIVE_ENTITY_DETONATION: // 50
+                                aPdu = new LiveEntityDetonationPdu();
+                                break;
+
+                            case CREATE_ENTITY_RELIABLE: // 51
+                                aPdu = new CreateEntityReliablePdu();
+                                break;
+
+                            case REMOVE_ENTITY_RELIABLE: // 52
+                                aPdu = new RemoveEntityReliablePdu();
+                                break;
+
+                            case START_RESUME_RELIABLE: // 53
+                                aPdu = new StartResumeReliablePdu();
+                                break;
+
+                            case STOP_FREEZE_RELIABLE: // 54
+                                aPdu = new StopFreezeReliablePdu();
+                                break;
+
+                            case ACKNOWLEDGE_RELIABLE: // 55
+                                aPdu = new AcknowledgeReliablePdu();
+                                break;
+
+                            case ACTION_REQUEST_RELIABLE: // 56
+                                aPdu = new ActionRequestReliablePdu();
+                                break;
+
+                            case ACTION_RESPONSE_RELIABLE: // 57
+                                aPdu = new ActionResponseReliablePdu();
+                                break;
+
+                            case DATA_QUERY_RELIABLE: // 58
+                                aPdu = new DataQueryReliablePdu();
+                                break;
+
+                            case SET_DATA_RELIABLE: // 59
+                                aPdu = new SetDataReliablePdu();
+                                break;
+
+                            case DATA_RELIABLE: // 60
+                                aPdu = new DataReliablePdu();
+                                break;
+
+                            case EVENT_REPORT_RELIABLE: // 61
+                                aPdu = new EventReportReliablePdu();
+                                break;
+
+                            case COMMENT_RELIABLE: // 62
+                                aPdu = new CommentReliablePdu();
+                                break;
+
+                            case RECORD_RELIABLE: // 63
+                                aPdu = new RecordReliablePdu();
+                                break;
+
+                            case SET_RECORD_RELIABLE: // 64
+                                aPdu = new SetRecordReliablePdu();
+                                break;
+
+                            case RECORD_QUERY_RELIABLE: // 65
+                                aPdu = new RecordQueryReliablePdu();
+                                break;
+
+                            case COLLISION_ELASTIC: // 66
+                                aPdu = new CollisionElasticPdu();
+                                break;
+
+                            case ENTITY_STATE_UPDATE: // 67
+                                aPdu = new EntityStateUpdatePdu();
+                                break;
+
+                            case DIRECTED_ENERGY_FIRE: // 68
+                                aPdu = new DirectedEnergyFirePdu();
+                                break;
+
+                            case ENTITY_DAMAGE_STATUS: // 69
+                                aPdu = new EntityDamageStatusPdu();
+                                break;
+
+                            case INFORMATION_OPERATIONS_ACTION: // 70
+                                aPdu = new InformationOperationsActionPdu();
+                                break;
+
+                            case INFORMATION_OPERATIONS_REPORT: // 71
+                                aPdu = new InformationOperationsReportPdu();
+                                break;
+
+                            case ATTRIBUTE: // 72
+                                aPdu = new AttributePdu();
+                                break;
+
+                            case COMMENT:
+                                // aPdu = new CommentPdu(); // default for this switch logic
+
+                                // see Garrett Loffelman and Pete Severson's code for OpenDis version 4 example
+                                // https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/assignments/src/MV3500Cohort2018JulySeptember/projects/LoeffelmanSeverson
+
+                                CommentPdu    newCommentPdu = new CommentPdu();
+                                ArrayList<VariableDatum> payloadList = new ArrayList<>();
+                                ArrayList<String> commentsList = new ArrayList<>();
+                                commentsList.add("Hello CommentPDU");
+                                commentsList.add("Here is a second line of text in this comment.");
+                                if (!commentsList.isEmpty())
+                                    System.out.println("Preparing CommentPDU:");
+
+                                for (String comment : commentsList)
+                                {
+                                    VariableDatum newVariableDatum = new VariableDatum();
+                                    newVariableDatum.setVariableDatumValue (comment.getBytes());               // conversion
+                                    // TODO confirm whether method overloading is appropriate
+//                                  newVariableDatum.setVariableDatumLength(comment.getBytes().length); 
+                                    newVariableDatum.setVariableDatumLengthInBytes(comment.getBytes().length); // also available in bits, see spec and javadoc
+                                    // alternatively, you do not need to set this and the marshaller will figure it out from the byte array
+                                    // (see javadoc for VariableDatum.setVariableDatumLength())
+                                    payloadList.add(newVariableDatum);
+                                    System.out.println("   \"" + comment + "\"");
+                                }
+                                newCommentPdu.setVariableDatums(payloadList);
+
+                                aPdu = newCommentPdu; // hand off for sending
+                                break;
+
+                            default:
+                                System.out.println("*** Warning: PDU " + pduTypeValue.getValue() + " " + pduTypeValue + " not supported, created or sent ");
+
+                                // code generation block for this class follows:
+    //                            System.out.println("                    case " + pdu + ": // " + pdu.getValue());
+    //                            System.out.println("                        aPdu = new " + pdu.getDescription().replace(" ","").replace("-","").replace("/","") + 
+    //                                                                                      "Pdu();");
+    //                            System.out.println("                        break;");
+    //                            System.out.println();
+                        }
+                        if (aPdu != null)
+                        {
+                            // leave aPdu timestamp at default value for consistency of output unit tests
+                            generatedPdusList.add(aPdu); 
+                        }   
+                    }
+                    catch (Exception e)
+                    {
+                        System.out.print("Exception thrown for PDU " + pduTypeValue.getValue() + " " + pduTypeValue);
+                        System.out.print(Arrays.toString(e.getStackTrace()));
+                        // continue looping
+                    }
+                }
+                if (generatedPdusList.size() != 72) // TODO create an enumeration DISType.TOTAL_PDU_TYPES
+                    System.out.println("Error: " + generatedPdusList.size() + " PDUs generated, but 72 PDUs expected.");
+
+                // Send the PDUs we created
+                System.out.println("Send the " + generatedPdusList.size() + " PDUs we created...");
+
+                // =======================================================================
+                // prior appproach
+//                InetAddress localMulticastAddress = InetAddress.getByName(DEFAULT_MULTICAST_ADDRESS);
+//                MulticastSocket multicastSocket = new MulticastSocket(DEFAULT_MULTICAST_PORT);
+//                if (!localMulticastAddress.isMulticastAddress())
+//                {
+//                    throw new RuntimeException("*** Error: sending to multicast address, but destination address " + localMulticastAddress.toString() + "is not multicast");
+//                }
+//                multicastSocket.joinGroup(localMulticastAddress); // deprecated
+                // =======================================================================
+                // updated approach using NetworkInterface
+                NetworkInterface networkInterface = NetworkInterface.getByInetAddress(multicastInetAddress);
+                if (networkInterface != null)
+                    System.out.println("networkInterface=" + networkInterface.getDisplayName()); // typically null if loopback
+                SocketAddress localMulticastSocketAddress = new InetSocketAddress(multicastInetAddress, DEFAULT_MULTICAST_PORT);
+                MulticastSocket multicastSocket = new MulticastSocket(DEFAULT_MULTICAST_PORT);
+                multicastSocket.joinGroup(localMulticastSocketAddress, networkInterface);
+                // =======================================================================
+
+                byte[] buffer;
+                Pdu aPdu;
+                DatagramPacket packet;
+
+                for (int idx = 0; idx < generatedPdusList.size(); idx++)
+                {
+                    // careful here!  keep object instantiations inside of loop to avoid endless array and packet growth
+                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                    DataOutputStream       dos = new DataOutputStream(baos);
+                
+                    aPdu = generatedPdusList.get(idx);
+                    try 
+                    {
+                        aPdu.marshal(dos); // dos is DataOutputStream connected to ByteArrayOutputStrea
+
+                        buffer = baos.toByteArray();
+                        packet = new DatagramPacket(buffer, buffer.length, multicastInetAddress, DEFAULT_MULTICAST_PORT);
+                        multicastSocket.send(packet);
+                        
+                        DisPduType disPduType= aPdu.getPduType();
+//                      disPduType.setTRACE(true);
+                        String currentIndexPadded        = String.format("%2s",   (idx + 1));
+                        String currentPduTypeValuePadded = String.format("%2s",   disPduType.getValue());
+                        String currentPduTypePadded      = String.format("%-49s", aPdu.getPduType().toString()); // - indicates right padding of whitespace
+                        String packetLengthPadded        = String.format("%3s",   packet.getLength());
+                        
+                        System.out.println ("Sent packet #" + currentIndexPadded + ", " + 
+//                          currentPduTypeValuePadded + " " + 
+                            currentPduTypePadded + 
+                            "(packet.getLength()=" + packetLengthPadded + ")" + // diagnostic, beware of ever-growing packet size!
+                            " of type " + aPdu.getClass().getSimpleName());
+
+                        Thread.sleep(THREAD_SLEEP_INTERVAL); // pause for debugging, if zero this process still yields
+                    } 
+                    catch (Exception ex) {
+                        System.out.println("Marshaling error" + ex);
+                    }
+                }
+            }
+            catch (IOException e)
+            {
+                System.out.println(e);
+                return -1; // error condition
+            }
+        } // end repetion loop
+            
+        // TODO write the PDUs out to an XML file.
+        //PduContainer container = new PduContainer();
+        //container.setPdus(generatedPdus);
+        //container.marshallToXml("examplePdus.xml");
+        return generatedPdusList.size();
+    }
+
+    /**
+     * Program invocation, execution starts here
+     * @param args command-line arguments
+     */
+    public static void main(String args[])
+	{
+        AllPduSender allPduSender;
+        int totalSentPdus;
+            
+        if (args.length == 2)
+        {
+            System.out.println("Usage:   AllPduSender <multicast group> <port>");
+            System.out.println("Actual:  AllPduSender  " + multicastInetAddress.getHostAddress() + "   " + port);
+            allPduSender = new AllPduSender(args[0], Integer.parseInt(args[1]));
+        } 
+        else
+        {
+            System.out.println("Usage:   AllPduSender <multicast group> <port>");
+            System.out.println("Default: AllPduSender  " + DEFAULT_MULTICAST_ADDRESS + "   " + DEFAULT_MULTICAST_PORT);
+            allPduSender = new AllPduSender(DEFAULT_MULTICAST_ADDRESS, DEFAULT_MULTICAST_PORT);
+        }
+        totalSentPdus = allPduSender.run(); // do it to it
+        System.out.println("OpenDis7Examples.AllPduSender complete, sent " + totalSentPdus + " PDUs total.");
+    }
+}
diff --git a/assignments/src/src/OpenDis7Examples/AllPduSenderLog.txt b/assignments/src/src/OpenDis7Examples/AllPduSenderLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d4859b8653fed4b92eeb1cc0af6d23f201fcc2dc
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/AllPduSenderLog.txt
@@ -0,0 +1,93 @@
+ant -f C:\\x3d-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=OpenDis7Examples/AllPduSender.java -Drun.class=OpenDis7Examples.AllPduSender run-single
+init:
+Deleting: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+warning: [options] system modules path not set in conjunction with -source 17
+1 warning
+compile-single:
+run-single:
+Usage:   AllPduSender <multicast group> <port>
+Default: AllPduSender  239.1.2.3   3000
+OpenDis7Examples.AllPduSender started...
+Generate list of all PDU types and note issues, if any...
+*** Note: DisPduType.OTHER=0 not supported
+Preparing CommentPDU:
+   "Hello CommentPDU"
+   "Here is a second line of text in this comment."
+Send the 72 PDUs we created...
+Sent packet # 1, DisPduType 01 ENTITY_STATE                       (packet.getLength()=144) of type EntityStatePdu
+Sent packet # 2, DisPduType 02 FIRE                               (packet.getLength()= 96) of type FirePdu
+Sent packet # 3, DisPduType 03 DETONATION                         (packet.getLength()=104) of type DetonationPdu
+Sent packet # 4, DisPduType 04 COLLISION                          (packet.getLength()= 60) of type CollisionPdu
+Sent packet # 5, DisPduType 05 SERVICE_REQUEST                    (packet.getLength()= 28) of type ServiceRequestPdu
+Sent packet # 6, DisPduType 06 RESUPPLY_OFFER                     (packet.getLength()= 28) of type ResupplyOfferPdu
+Sent packet # 7, DisPduType 07 RESUPPLY_RECEIVED                  (packet.getLength()= 28) of type ResupplyReceivedPdu
+Sent packet # 8, DisPduType 08 RESUPPLY_CANCEL                    (packet.getLength()= 24) of type ResupplyCancelPdu
+Sent packet # 9, DisPduType 09 REPAIR_COMPLETE                    (packet.getLength()= 28) of type RepairCompletePdu
+Sent packet #10, DisPduType 10 REPAIR_RESPONSE                    (packet.getLength()= 28) of type RepairResponsePdu
+Sent packet #11, DisPduType 11 CREATE_ENTITY                      (packet.getLength()= 28) of type CreateEntityPdu
+Sent packet #12, DisPduType 12 REMOVE_ENTITY                      (packet.getLength()= 28) of type RemoveEntityPdu
+Sent packet #13, DisPduType 13 START_RESUME                       (packet.getLength()= 44) of type StartResumePdu
+Sent packet #14, DisPduType 14 STOP_FREEZE                        (packet.getLength()= 40) of type StopFreezePdu
+Sent packet #15, DisPduType 15 ACKNOWLEDGE                        (packet.getLength()= 32) of type AcknowledgePdu
+Sent packet #16, DisPduType 16 ACTION_REQUEST                     (packet.getLength()= 40) of type ActionRequestPdu
+Sent packet #17, DisPduType 17 ACTION_RESPONSE                    (packet.getLength()= 40) of type ActionResponsePdu
+Sent packet #18, DisPduType 18 DATA_QUERY                         (packet.getLength()= 40) of type DataQueryPdu
+Sent packet #19, DisPduType 19 SET_DATA                           (packet.getLength()= 40) of type SetDataPdu
+Sent packet #20, DisPduType 20 DATA                               (packet.getLength()= 40) of type DataPdu
+Sent packet #21, DisPduType 21 EVENT_REPORT                       (packet.getLength()= 40) of type EventReportPdu
+Sent packet #22, DisPduType 22 COMMENT                            (packet.getLength()=112) of type CommentPdu
+Sent packet #23, DisPduType 23 ELECTROMAGNETIC_EMISSION           (packet.getLength()= 28) of type ElectromagneticEmissionPdu
+Sent packet #24, DisPduType 24 DESIGNATOR                         (packet.getLength()= 88) of type DesignatorPdu
+Sent packet #25, DisPduType 25 TRANSMITTER                        (packet.getLength()=104) of type TransmitterPdu
+Sent packet #26, DisPduType 26 SIGNAL                             (packet.getLength()= 36) of type SignalPdu
+Sent packet #27, DisPduType 27 RECEIVER                           (packet.getLength()= 36) of type ReceiverPdu
+Sent packet #28, DisPduType 28 IDENTIFICATION_FRIEND_OR_FOE       (packet.getLength()= 60) of type IdentificationFriendOrFoePdu
+Sent packet #29, DisPduType 29 UNDERWATER_ACOUSTIC                (packet.getLength()= 32) of type UnderwaterAcousticPdu
+Sent packet #30, DisPduType 30 SUPPLEMENTAL_EMISSION_ENTITY_STATE (packet.getLength()= 28) of type SupplementalEmissionEntityStatePdu
+Sent packet #31, DisPduType 31 INTERCOM_SIGNAL                    (packet.getLength()= 36) of type IntercomSignalPdu
+Sent packet #32, DisPduType 32 INTERCOM_CONTROL                   (packet.getLength()= 40) of type IntercomControlPdu
+Sent packet #33, DisPduType 33 AGGREGATE_STATE                    (packet.getLength()=136) of type AggregateStatePdu
+Sent packet #34, DisPduType 34 ISGROUPOF                          (packet.getLength()= 40) of type IsGroupOfPdu
+Sent packet #35, DisPduType 35 TRANSFER_OWNERSHIP                 (packet.getLength()= 40) of type TransferOwnershipPdu
+Sent packet #36, DisPduType 36 ISPARTOF                           (packet.getLength()= 52) of type IsPartOfPdu
+Sent packet #37, DisPduType 37 MINEFIELD_STATE                    (packet.getLength()= 72) of type MinefieldStatePdu
+Sent packet #38, DisPduType 38 MINEFIELD_QUERY                    (packet.getLength()= 40) of type MinefieldQueryPdu
+Sent packet #39, DisPduType 39 MINEFIELD_DATA                     (packet.getLength()= 44) of type MinefieldDataPdu
+Sent packet #40, DisPduType 40 MINEFIELD_RESPONSE_NACK            (packet.getLength()= 26) of type MinefieldResponseNACKPdu
+Sent packet #41, DisPduType 41 ENVIRONMENTAL_PROCESS              (packet.getLength()= 32) of type EnvironmentalProcessPdu
+Sent packet #42, DisPduType 42 GRIDDED_DATA                       (packet.getLength()= 64) of type GriddedDataPdu
+Sent packet #43, DisPduType 43 POINT_OBJECT_STATE                 (packet.getLength()= 91) of type PointObjectStatePdu
+Sent packet #44, DisPduType 44 LINEAR_OBJECT_STATE                (packet.getLength()= 40) of type LinearObjectStatePdu
+Sent packet #45, DisPduType 45 AREAL_OBJECT_STATE                 (packet.getLength()= 49) of type ArealObjectStatePdu
+Sent packet #46, DisPduType 46 TIME_SPACE_POSITION_INFORMATION    (packet.getLength()= 54) of type TimeSpacePositionInformationPdu
+Sent packet #47, DisPduType 47 APPEARANCE                         (packet.getLength()= 67) of type AppearancePdu
+Sent packet #48, DisPduType 48 ARTICULATED_PARTS                  (packet.getLength()= 17) of type ArticulatedPartsPdu
+Sent packet #49, DisPduType 49 LIVE_ENTITY_FIRE                   (packet.getLength()= 67) of type LiveEntityFirePdu
+Sent packet #50, DisPduType 50 LIVE_ENTITY_DETONATION             (packet.getLength()= 79) of type LiveEntityDetonationPdu
+Sent packet #51, DisPduType 51 CREATE_ENTITY_RELIABLE             (packet.getLength()= 32) of type CreateEntityReliablePdu
+Sent packet #52, DisPduType 52 REMOVE_ENTITY_RELIABLE             (packet.getLength()= 32) of type RemoveEntityReliablePdu
+Sent packet #53, DisPduType 53 START_RESUME_RELIABLE              (packet.getLength()= 48) of type StartResumeReliablePdu
+Sent packet #54, DisPduType 54 STOP_FREEZE_RELIABLE               (packet.getLength()= 40) of type StopFreezeReliablePdu
+Sent packet #55, DisPduType 55 ACKNOWLEDGE_RELIABLE               (packet.getLength()= 32) of type AcknowledgeReliablePdu
+Sent packet #56, DisPduType 56 ACTION_REQUEST_RELIABLE            (packet.getLength()= 44) of type ActionRequestReliablePdu
+Sent packet #57, DisPduType 57 ACTION_RESPONSE_RELIABLE           (packet.getLength()= 40) of type ActionResponseReliablePdu
+Sent packet #58, DisPduType 58 DATA_QUERY_RELIABLE                (packet.getLength()= 44) of type DataQueryReliablePdu
+Sent packet #59, DisPduType 59 SET_DATA_RELIABLE                  (packet.getLength()= 40) of type SetDataReliablePdu
+Sent packet #60, DisPduType 60 DATA_RELIABLE                      (packet.getLength()= 40) of type DataReliablePdu
+Sent packet #61, DisPduType 61 EVENT_REPORT_RELIABLE              (packet.getLength()= 40) of type EventReportReliablePdu
+Sent packet #62, DisPduType 62 COMMENT_RELIABLE                   (packet.getLength()= 32) of type CommentReliablePdu
+Sent packet #63, DisPduType 63 RECORD_RELIABLE                    (packet.getLength()= 36) of type RecordReliablePdu
+Sent packet #64, DisPduType 64 SET_RECORD_RELIABLE                (packet.getLength()= 40) of type SetRecordReliablePdu
+Sent packet #65, DisPduType 65 RECORD_QUERY_RELIABLE              (packet.getLength()= 40) of type RecordQueryReliablePdu
+Sent packet #66, DisPduType 66 COLLISION_ELASTIC                  (packet.getLength()=100) of type CollisionElasticPdu
+Sent packet #67, DisPduType 67 ENTITY_STATE_UPDATE                (packet.getLength()= 72) of type EntityStateUpdatePdu
+Sent packet #68, DisPduType 68 DIRECTED_ENERGY_FIRE               (packet.getLength()= 88) of type DirectedEnergyFirePdu
+Sent packet #69, DisPduType 69 ENTITY_DAMAGE_STATUS               (packet.getLength()= 24) of type EntityDamageStatusPdu
+Sent packet #70, DisPduType 70 INFORMATION_OPERATIONS_ACTION      (packet.getLength()= 56) of type InformationOperationsActionPdu
+Sent packet #71, DisPduType 71 INFORMATION_OPERATIONS_REPORT      (packet.getLength()= 40) of type InformationOperationsReportPdu
+Sent packet #72, DisPduType 72 ATTRIBUTE                          (packet.getLength()= 32) of type AttributePdu
+OpenDis7Examples.AllPduSender complete, sent 72 PDUs total.
+BUILD SUCCESSFUL (total time: 3 seconds)
diff --git a/assignments/src/src/OpenDis7Examples/AllPduSenderWireshark.png b/assignments/src/src/OpenDis7Examples/AllPduSenderWireshark.png
new file mode 100644
index 0000000000000000000000000000000000000000..41308ac879a6c4820e7221193006d47f724811fc
Binary files /dev/null and b/assignments/src/src/OpenDis7Examples/AllPduSenderWireshark.png differ
diff --git a/assignments/src/src/OpenDis7Examples/AllPduSenderWiresharkCapture.pcapng b/assignments/src/src/OpenDis7Examples/AllPduSenderWiresharkCapture.pcapng
new file mode 100644
index 0000000000000000000000000000000000000000..9f19fb108d4950d9fc61b86d0704754c31784adc
Binary files /dev/null and b/assignments/src/src/OpenDis7Examples/AllPduSenderWiresharkCapture.pcapng differ
diff --git a/assignments/src/src/OpenDis7Examples/EspduReceiver.java b/assignments/src/src/OpenDis7Examples/EspduReceiver.java
new file mode 100755
index 0000000000000000000000000000000000000000..809f88a1f485432f81c004f387cf6e7c03cf4c0b
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/EspduReceiver.java
@@ -0,0 +1,118 @@
+package OpenDis7Examples; 
+
+import edu.nps.moves.dis7.pdus.*;
+import edu.nps.moves.dis7.utilities.*;
+import java.io.*;
+import java.net.*;
+import java.util.*;
+
+/**
+ * Receives PDUs from the network in IEEE DIS format.
+ * Adapted from OpenDIS library example package edu.nps.moves.examples
+ *
+ * @author DMcG
+ * @version $Id:$
+ */
+public class EspduReceiver
+{
+    /** Default constructor */
+    public EspduReceiver()
+    {
+        // default constructor
+    }
+    /** Max size of a PDU in binary format that we can receive. This is actually
+     * somewhat outdated--PDUs can be larger--but this is a reasonable starting point.
+     */
+    private static final int MAX_PDU_SIZE = 8192;
+
+    /** Default multicast group address we send on.
+     * @see <a href="https://en.wikipedia.org/wiki/Multicast_address" target="_blank">https://en.wikipedia.org/wiki/Multicast_address</a> */
+    public static final String DEFAULT_MULTICAST_ADDRESS = EspduSender.DEFAULT_MULTICAST_ADDRESS;
+	
+    /** Default multicast port used, matches Wireshark DIS capture default
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+    public static final int    DEFAULT_MULTICAST_PORT    = EspduSender.DEFAULT_MULTICAST_PORT;
+    
+	/** Output prefix to identify this class */
+    private final static String TRACE_PREFIX = "[" + EspduReceiver.class.getName() + "] ";
+
+    /**
+     * Program invocation, execution starts here
+     * @param args command-line arguments
+     */
+    public static void main(String args[])
+	{
+        MulticastSocket multicastSocket;
+        InetAddress     multicastInetAddress;
+        DatagramPacket  packet;
+        PduFactory      pduFactory = new PduFactory();
+        DisTime.TimestampStyle       timestampStyle        = DisTime.TimestampStyle.IEEE_ABSOLUTE;
+        DisTime.setTimestampStyle(timestampStyle);
+        int pduCount = 0;
+
+        System.out.println(TRACE_PREFIX + "started...");
+		
+        try {
+            // Specify the socket to receive data
+            multicastSocket = new MulticastSocket(DEFAULT_MULTICAST_PORT);
+//          socket.setBroadcast(true);
+       
+            multicastInetAddress = InetAddress.getByName(DEFAULT_MULTICAST_ADDRESS);
+//          socket.joinGroup(address); // deprecated
+            // =======================================================================
+            // new approach using interface
+            NetworkInterface networkInterface = NetworkInterface.getByInetAddress(multicastInetAddress);
+            SocketAddress localMulticastSocketAddress = new InetSocketAddress(multicastInetAddress, DEFAULT_MULTICAST_PORT);
+            multicastSocket.joinGroup(localMulticastSocketAddress, networkInterface);
+            // =======================================================================
+        
+            System.out.println(TRACE_PREFIX + "listening for PDU packets on " + multicastInetAddress.getHostAddress() + " port " + DEFAULT_MULTICAST_PORT);
+            System.out.println("To quit: stop or kill this process");
+            System.out.println("===============");
+            
+            while (true) // Loop infinitely, receiving datagrams
+			{
+                byte buffer[] = new byte[MAX_PDU_SIZE];
+                packet = new DatagramPacket(buffer, buffer.length); // reset packet each time
+
+                multicastSocket.receive(packet); // process blocks here until receipt of network packet with PDU
+
+                List<Pdu> pduBundle = pduFactory.getPdusFromBundle(packet.getData(),packet.getLength());
+                if (pduBundle.size() > 1)
+                    System.out.println("Received PDU bundle size is " + pduBundle.size());
+
+                for (Pdu nextPdu : pduBundle) // iterator loop through PDU bundle
+                {
+                    pduCount++;
+                    String receiptMessage = String.format("%3s", pduCount) // right justify, 3 characters
+                           + ". received PDU type " + nextPdu.getPduType().getValue() + "=" + nextPdu.getPduType().name() + " " + nextPdu.getClass().getSimpleName();
+                    if (nextPdu instanceof EntityStatePdu)
+                    {
+                        System.out.println(receiptMessage);
+                        EntityID      entityID = ((EntityStatePdu)nextPdu).getEntityID();
+                        Vector3Double position = ((EntityStatePdu)nextPdu).getEntityLocation();
+                        System.out.println("     entityID triplet: [" + entityID.getSiteID()+ ", " + entityID.getApplicationID()+ ", " + entityID.getEntityID()+ "] ");
+                        System.out.println("     Location in DIS coordinates:        [" + position.getX() + ", " + position.getY() + ", " + position.getZ() + "]");
+                    }
+                    else if (nextPdu instanceof FirePdu)
+                    {    
+                        System.out.println(receiptMessage);
+                        Vector3Double position = ((FirePdu)nextPdu).getLocationInWorldCoordinates();
+                        System.out.println("     FirePdu locationInWorldCoordinates: [" + position.getX() + ", " + position.getY() + ", " + position.getZ() + "]");
+                        System.out.println("===============");
+                    }
+                    else
+                    {    
+                        System.out.println(receiptMessage);
+                    }
+                } // end of bundle loop
+            } // end of while loop
+        } // end try block
+        catch (IOException ioe)
+		{
+            System.out.println(TRACE_PREFIX + "Problem with input/output, see exception trace:");
+            System.out.println(ioe);
+        }
+		System.out.println(TRACE_PREFIX + "complete.");
+    } // end main
+} // end class
diff --git a/assignments/src/src/OpenDis7Examples/EspduReceiverLog.txt b/assignments/src/src/OpenDis7Examples/EspduReceiverLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f1c451e9b593beba0715cbedf10d48f7b9e64f6a
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/EspduReceiverLog.txt
@@ -0,0 +1,74 @@
+ant -f C:\\x3d-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=OpenDis7Examples/EspduReceiver.java -Drun.class=OpenDis7Examples.EspduReceiver run-single
+init:
+Deleting: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+warning: [options] system modules path not set in conjunction with -source 17
+1 warning
+compile-single:
+run-single:
+[OpenDis7Examples.EspduReceiver] started...
+[OpenDis7Examples.EspduReceiver] listening for PDU packets on 239.1.2.3 port 3000
+To quit: stop or kill this process
+===============
+  1. received PDU type 1=ENTITY_STATE EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+  2. received PDU type 2=FIRE FirePdu
+     FirePdu locationInWorldCoordinates: [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+===============
+  3. received PDU type 1=ENTITY_STATE EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+  4. received PDU type 2=FIRE FirePdu
+     FirePdu locationInWorldCoordinates: [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+===============
+  5. received PDU type 1=ENTITY_STATE EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+  6. received PDU type 2=FIRE FirePdu
+     FirePdu locationInWorldCoordinates: [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+===============
+  7. received PDU type 1=ENTITY_STATE EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+  8. received PDU type 2=FIRE FirePdu
+     FirePdu locationInWorldCoordinates: [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+===============
+  9. received PDU type 1=ENTITY_STATE EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+ 10. received PDU type 2=FIRE FirePdu
+     FirePdu locationInWorldCoordinates: [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+===============
+ 11. received PDU type 1=ENTITY_STATE EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+ 12. received PDU type 2=FIRE FirePdu
+     FirePdu locationInWorldCoordinates: [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+===============
+ 13. received PDU type 1=ENTITY_STATE EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+ 14. received PDU type 2=FIRE FirePdu
+     FirePdu locationInWorldCoordinates: [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+===============
+ 15. received PDU type 1=ENTITY_STATE EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+ 16. received PDU type 2=FIRE FirePdu
+     FirePdu locationInWorldCoordinates: [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+===============
+ 17. received PDU type 1=ENTITY_STATE EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+ 18. received PDU type 2=FIRE FirePdu
+     FirePdu locationInWorldCoordinates: [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+===============
+ 19. received PDU type 1=ENTITY_STATE EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+ 20. received PDU type 2=FIRE FirePdu
+     FirePdu locationInWorldCoordinates: [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+===============
diff --git a/assignments/src/src/OpenDis7Examples/EspduSender.java b/assignments/src/src/OpenDis7Examples/EspduSender.java
new file mode 100644
index 0000000000000000000000000000000000000000..96862776150dd18d7595caac03a51f0ed7d9e94f
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/EspduSender.java
@@ -0,0 +1,435 @@
+package OpenDis7Examples;
+
+import edu.nps.moves.dis7.entities.usa.platform.land.M1A2;
+import edu.nps.moves.dis7.enumerations.Country;
+import edu.nps.moves.dis7.enumerations.EntityKind;
+import edu.nps.moves.dis7.enumerations.PlatformDomain;
+import edu.nps.moves.dis7.pdus.*;
+import edu.nps.moves.dis7.utilities.*;
+import java.io.*;
+import java.net.*;
+import java.util.*;
+
+/**
+ * Creates and sends ESPDUs in IEEE binary format. Adapted from OpenDIS library
+ * example package edu.nps.moves.examples
+ *
+ * @author Don McGregor
+ * @author Don Brutzman
+ */
+public class EspduSender
+{
+    /** Default constructor */
+    public EspduSender()
+    {
+        // default constructor
+    }
+	/**
+	 * Number of complete loops to perform.
+     * Putting any upper limit on # packets sent avoids possibility of non-terminating infinite loops that continue sending packets. */
+	public static final int SEND_LOOPS_TO_PERFORM = 5; // 5
+
+	/**
+	 * Default multicast group address we send on.
+     * @see <a href="https://en.wikipedia.org/wiki/Multicast_address" target="_blank">https://en.wikipedia.org/wiki/Multicast_address</a> */
+	public static final String DEFAULT_MULTICAST_ADDRESS = "239.1.2.3";
+
+	/**
+	 * Default multicast port used, matches Wireshark DIS capture default
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+	public static final int    DEFAULT_MULTICAST_PORT    = 3000;
+
+    /** Type of network connection:
+     * Point to point <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">UNICAST</a>,
+     * Many to many <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">MULTICAST</a>, or 
+     * (rarely used, potentially harmful) <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">BROADCAST</a>
+     */
+	public enum NetworkMode {
+        /** Point to point @see <a href="https://en.wikipedia.org/wiki/Unicast" target="_blank">https://en.wikipedia.org/wiki/Unicast</a> */
+		UNICAST,
+        /** Many to many @see <a href="https://en.wikipedia.org/wiki/Multicast" target="_blank">https://en.wikipedia.org/wiki/Multicast</a> */
+        MULTICAST,
+        /** (rarely used, potentially harmful) @see <a href="https://en.wikipedia.org/wiki/Broadcasting_(networking)" target="_blank">https://en.wikipedia.org/wiki/Broadcasting_(networking)</a> */
+        BROADCAST
+	};
+    
+	/**
+	 * Output prefix to identify this class, helps with logging
+	 */
+    private final static String TRACE_PREFIX = "[" + EspduSender.class.getName() + "] ";
+
+	/**
+	 * Possible system properties, passed in via -Dattr=val networkMode:
+	 * unicast, broadcast, multicast destinationIp: where to send the packet. If
+	 * in multicast mode, this can be multicast. To determine broadcast
+	 * destination IP, use an online broadcast address calculator, for example
+	 * http://www.remotemonitoringsystems.ca/broadcast.php If in multicast mode,
+	 * a join() will be done on the multicast address. port: port used for both
+	 * source and destination.
+	 *
+	 * @param args command-line arguments
+	 */
+    @SuppressWarnings("SleepWhileInLoop") // allows Thread.sleep(value) without warning in code
+	public static void main(String args[])
+	{
+        System.out.println(TRACE_PREFIX + " started...");
+
+        // Default settings. These are used if no system properties are set. 
+        // If system properties are passed in, these are overridden later.
+        NetworkMode          networkMode = NetworkMode.MULTICAST;
+        InetAddress multicastInetAddress = null; // must be initialized, even if null
+        int                         port = DEFAULT_MULTICAST_PORT;
+        MulticastSocket           socket = null; // must be initialized to avoid later error, even if null;
+        EntityStatePdu             espdu = new EntityStatePdu();
+//        DisTime                  disTime = new DisTime();
+
+		// ICBM coordinates for my office
+		double latitude  =   36.595517;
+		double longitude = -121.877000;
+		try
+        {
+			multicastInetAddress = InetAddress.getByName(DEFAULT_MULTICAST_ADDRESS);
+		}
+        catch (UnknownHostException e)
+        {
+			System.out.println(TRACE_PREFIX + e + " Cannot create multicast address");
+			System.exit(0);
+		}
+
+		// All system properties, passed in on the command line via -Dattribute=value
+		Properties systemProperties = System.getProperties();
+
+		// IP address we send to
+		String destinationIpString = systemProperties.getProperty("destinationIp");
+
+		// Port we send to, and local port we open the socket on
+		String portString = systemProperties.getProperty("port");
+
+		// Network mode: unicast, multicast, broadcast
+		String networkModeString = systemProperties.getProperty("networkMode"); // unicast or multicast or broadcast
+
+		// Set up socket to send information
+		try
+        {
+			if (portString != null) // Update port we send to, if provided
+			{
+				port = Integer.parseInt(portString);
+			}
+			socket = new MulticastSocket(port);
+
+			// Where we send packets to, the destination IP address
+			if (destinationIpString != null) 
+			{
+				multicastInetAddress = InetAddress.getByName(destinationIpString);
+			}
+
+			// Type of transport: unicast, broadcast, or multicast
+			if (networkModeString != null)
+            {
+				if (networkModeString.equalsIgnoreCase("unicast")) 
+				{
+					networkMode = NetworkMode.UNICAST;
+				} 
+				else if (networkModeString.equalsIgnoreCase("broadcast"))
+                {
+					networkMode = NetworkMode.BROADCAST;
+				} 
+				else if (networkModeString.equalsIgnoreCase("multicast"))
+                {
+					networkMode = NetworkMode.MULTICAST;
+					if (!multicastInetAddress.isMulticastAddress())
+					{
+						throw new RuntimeException("*** Error: sending to multicast address, but destination address " + multicastInetAddress.toString() + "is not multicast");
+					}
+//					socket.joinGroup(multicastInetAddress); // deprecated, TODO select correct NetworkInterface
+                    // =======================================================================
+                    // updated approach using NetworkInterface
+                    NetworkInterface networkInterface = NetworkInterface.getByInetAddress(multicastInetAddress);
+                    if (networkInterface != null)
+                        System.out.println("networkInterface=" + networkInterface.getDisplayName()); // typically null if loopback
+                    SocketAddress localMulticastSocketAddress = new InetSocketAddress(multicastInetAddress, DEFAULT_MULTICAST_PORT);
+                    MulticastSocket multicastSocket = new MulticastSocket(DEFAULT_MULTICAST_PORT);
+                    multicastSocket.joinGroup(localMulticastSocketAddress, networkInterface);
+                    // =======================================================================
+				}
+			} // end networkModeString
+            else if (networkMode == NetworkMode.MULTICAST)
+            {
+                networkModeString = "multicast";
+            }
+            else if (networkMode == NetworkMode.UNICAST)
+            {
+                networkModeString = "unicast";
+            }
+            else if (networkMode == NetworkMode.BROADCAST)
+            {
+                networkModeString = "broadcast";
+            }
+		}
+		catch (IOException | RuntimeException e)
+		{
+			System.out.println(TRACE_PREFIX + "Unable to initialize network correctly, exiting.");
+			System.out.println(e);
+			System.exit(-1); // outta here
+		}
+        System.out.println(TRACE_PREFIX + " sending " + networkModeString + " ESPDU packets to " +
+                            multicastInetAddress.getHostAddress() + " port " + port);
+
+		// Initialize values in the Entity State PDU object. The exercise ID is 
+		// a way to differentiate between different virtual worlds on one network.
+		// Note that some values (such as the PDU type and PDU family) are set
+		// automatically when you create the ESPDU.
+		espdu.setExerciseID((byte)1); //(short) 1);
+
+		// The EID is the unique identifier for objects in the world. This 
+		// EID should match up with the ID for the object specified in the 
+		// VMRL/x3d/virtual world.
+    
+  		EntityID entityID = espdu.getEntityID(); // initialize, reset, override
+        // TODO check: 0 is apparently not a valid site number, per DIS specification
+		entityID.setSiteID       ((short)1); // TODO utility method to allow int values
+		entityID.setApplicationID((short)2);
+		entityID.setEntityID     ((short)3);
+        espdu.setEntityID(entityID);         // TODO utility method to allow setting all three at once
+
+		// Set the entity type. SISO has a big list of enumerations, so that by
+		// specifying various numbers we can say this is an M1A2 American tank,
+		// the USS Enterprise, and so on. We'll make this a tank. There is a 
+		// separate project elsehwhere in this project that implements DIS 
+		// enumerations in C++ and Java, but to keep things simple we just use
+		// numbers here.
+    
+        // Manual way to override platform information:
+		EntityType entityType = espdu.getEntityType() 
+		        .setEntityKind (EntityKind.PLATFORM).setEntityKind (EntityKind.PLATFORM)  //(short) 1); // Platform (vs lifeform, munition, sensor, etc.); //(short) 1); // Platform (vs lifeform, munition, sensor, etc.)
+		        .setCountry    (Country.UNITED_STATES_OF_AMERICA_USA)  // 225 USA
+		        .setDomain     (Domain.inst(PlatformDomain.LAND))      // Land (vs air, surface, subsurface, space)
+		        .setCategory   ((byte) 1)   // Tank
+		        .setSubCategory((byte) 1)   // M1 Abrams
+		        .setSpecific   ((byte) 3);  // M1A2 Abrams
+    
+        // New way using entity jar(s)
+        espdu.setEntityType(new edu.nps.moves.dis7.entities.usa.platform.land.M1A2());
+        // or simply use an enumeration by name, with accompanying import statement at top of file
+        espdu.setEntityType(new M1A2()); 
+        
+        // Inspecting an enumeration
+        System.out.println("===============");
+        System.out.println("espdu entityType information:");
+        System.out.println("  EntityKind =" + espdu.getEntityType().getEntityKind());
+        System.out.println("  Country    =" + espdu.getEntityType().getCountry());
+        System.out.println("  Domain     =" + espdu.getEntityType().getDomain());
+        System.out.println("  Category   =" + espdu.getEntityType().getCategory());
+        System.out.println("  SubCategory=" + espdu.getEntityType().getSubCategory());
+        System.out.println("  Specific   =" + espdu.getEntityType().getCountry());
+        // TODO round trip lookup
+        
+		Set<InetAddress> localNetworkAddresses;
+
+		try // Loop through sending N ESPDUs
+		{
+			System.out.println(TRACE_PREFIX + "sending " + SEND_LOOPS_TO_PERFORM + " sets of packets:"); // + address.toString()
+			
+			for (int index = 1; index <= SEND_LOOPS_TO_PERFORM; index++)
+            {
+				// DIS time is a pain in the uh, neck. DIS time units are 2^31-1 units per
+				// hour, and time is set to DIS time units from the top of the hour. 
+				// This means that if you start sending just before the top of the hour
+				// the time units can roll over to zero as you are sending. The receivers
+				// (escpecially homegrown ones) are often not able to detect rollover
+				// and may start discarding packets as dupes or out of order. We use
+				// an NPS timestamp here, hundredths of a second since the start of the
+				// year. The DIS standard for time is often ignored in the wild; I've seen
+				// people use Unix time (seconds since 1970) and more. Or you can
+				// just stuff idx into the timestamp field to get something that is monotonically
+				// increasing.
+
+				// Note that timestamp is used to detect duplicate and out of order packets. 
+				// That means if you DON'T change the timestamp, many implementations will simply
+				// discard subsequent packets that have an identical timestamp. Also, if they
+				// receive a PDU with an timestamp lower than the last one they received, they
+				// may discard it as an earlier, out-of-order PDU. So it is a good idea to
+				// update the timestamp on ALL packets sent.
+				// An alterative approach: actually follow the standard. It's a crazy concept,
+				// but it might just work.
+				int timestamp = DisTime.getCurrentDisTimestamp();
+				espdu.setTimestamp(timestamp);
+
+				// Set the position of the entity in the world. DIS uses a cartesian 
+				// coordinate system with the origin at the center of the earth, the x
+				// axis out at the equator and prime meridian, y out at the equator and
+				// 90 deg east, and z up and out the north pole. To place an object on
+				// the earth's surface you also need a model for the shape of the earth
+				// (it's not a sphere.) All the fancy math necessary to do this is in
+				// the SEDRIS SRM package. There are also some one-off formulas for 
+				// doing conversions from, for example, lat/lon/altitude to DIS coordinates.
+				// Here we use those one-off formulas.
+				// Modify the position of the object. This will send the object a little
+				// due east by adding some to the longitude every iteration. Since we
+				// are on the Pacific coast, this sends the object east. Assume we are
+				// at zero altitude. In other worlds you'd use DTED to determine the
+				// local ground altitude at that lat/lon, or you'd just use ground clamping.
+				// The x and y values will change, but the z value should not.
+				//lon = lon + (double)((double)idx / 100000.0);
+				//System.out.println("lla=" + lat + "," + lon + ", 0.0");
+				double direction = Math.pow(-1.0, index);
+				longitude = longitude + (direction * 0.00006);
+
+				double disCoordinates[] = CoordinateConversions.getXYZfromLatLonDegrees(latitude, longitude, 1.0);
+				Vector3Double location = espdu.getEntityLocation();
+				location.setX(disCoordinates[0]);
+				location.setY(disCoordinates[1]);
+				location.setZ(disCoordinates[2]);
+				System.out.println("===============");
+				System.out.println("Create new PDUs");
+				System.out.println("  latitude, longitude:   [" + latitude + ", " + longitude + "]");
+				System.out.println("  coordinate conversion: [" + disCoordinates[0] + ", " + disCoordinates[1] + ", " + disCoordinates[2] + "]");
+
+				location = espdu.getEntityLocation();
+
+				System.out.println("Espdu #" + index + " entityID=[" + entityID.getSiteID()+ "," + entityID.getApplicationID()+ "," + entityID.getEntityID()+ "]");
+				double c[]   = {location.getX(), location.getY(), location.getZ()};
+				double lla[] = CoordinateConversions.xyzToLatLonDegrees(c);
+//              System.out.println("  DIS entityLocation: [" + location.getX() + "," + location.getY() + "," + location.getZ() + "]");
+				String debugString = " Location (latitude/longitude/altitude): [" + lla[0] + ", " + lla[1] + ", " + lla[2] + "]";
+//      		System.out.println(debugString);
+
+				// Optionally, we can do some rotation of the entity
+				/*
+            Orientation orientation = espdu.getEntityOrientation();
+            float psi = orientation.getPsi();
+            psi = psi + idx;
+            orientation.setPsi(psi);
+            orientation.setTheta((float)(orientation.getTheta() + idx /2.0));
+				 */
+				// You can set other ESPDU values here, such as the velocity, acceleration,
+				// and so on.
+				// Marshal out the espdu object to a byte array, then send a datagram
+				// packet with that data in it.
+				ByteArrayOutputStream baos = new ByteArrayOutputStream();
+				DataOutputStream dos = new DataOutputStream(baos);
+                DatagramPacket packet;
+
+				// The byte array here is the packet in DIS format. We put that into a 
+				// datagram and send it.
+				espdu.marshal(dos);
+				byte[] espduArray = baos.toByteArray();
+
+				FirePdu firePdu = new FirePdu();
+                firePdu.setLocationInWorldCoordinates(espdu.getEntityLocation());
+				byte[] fireArray = firePdu.marshal().array(); // can also use ByteBuffer
+
+				System.out.println("FirePdu #" + index + " firePdu=[FireMissionIndex=" + firePdu.getFireMissionIndex() + ", descriptor=" + firePdu.getDescriptor()+ "]");
+
+//                CommentPdu    newCommentPdu = new CommentPdu();
+//                ArrayList<VariableDatum> payloadList = new ArrayList<>();
+//                ArrayList<String> commentsList = new ArrayList<>();
+//                commentsList.add("Hello CommentPDU");
+//                commentsList.add("Here is a second line of text in this comment.");
+//                if (!commentsList.isEmpty())
+//                    System.out.println("Preparing CommentPDU:");
+//
+//                for (String comment : commentsList)
+//                {
+//                    VariableDatum newVariableDatum = new VariableDatum();
+//                    newVariableDatum.setVariableDatumValue (comment.getBytes());               // conversion
+//                    newVariableDatum.setVariableDatumLengthInBytes(comment.getBytes().length); // also available in bits, see spec and javadoc
+//                    // alternatively, you do not need to set this and the marshaller will figure it out from the byte array
+//                    // (see javadoc for VariableDatum.setVariableDatumLength())
+//                    payloadList.add(newVariableDatum);
+//                    System.out.println("   \"" + comment + "\"");
+//                }
+//                newCommentPdu.setVariableDatums(payloadList);
+//				byte[] commentArray = newCommentPdu.marshal();
+
+				localNetworkAddresses = getBroadcastAddresses();
+                for (InetAddress networkAddress : localNetworkAddresses) {
+                    if (espduArray.length > 0)
+                    {
+                        packet = new DatagramPacket(espduArray, espduArray.length, networkAddress, port);
+                        System.out.println(TRACE_PREFIX + "sending datagram packet [" + espdu.getPduType().toString() + "] " + 
+                                           "packet.getLength()=" + packet.getLength() + ", " + // diagnostic, beware of ever-growing packet size
+                                           String.format("to %-15s", networkAddress.getHostAddress()) + " port " + port);
+                        socket.send(packet);
+                    }
+                    // TODO experiment with these!  8)
+                    if (fireArray.length > 0)
+                    {
+                        packet = new DatagramPacket(fireArray, fireArray.length, networkAddress, port); // alternate
+                        System.out.println(TRACE_PREFIX + "sending datagram packet [" + firePdu.getPduType().toString() + "        ] " + 
+                                           "packet.getLength()= " + packet.getLength() + ", " + // diagnostic, beware of ever-growing packet size
+                                           String.format("to %-15s", networkAddress.getHostAddress()) + " port " + port);
+                        socket.send(packet);
+                    }       
+//                    // TODO experiment with these!  8)
+//                    if (newCommentPdu != null)
+//                    {
+//                        System.out.println(TRACE_PREFIX + "sending datagram packet [" + newCommentPdu.getPduType().toString() + "        ] to " + 
+//                                           String.format("%-15s", networkAddress.getHostAddress()) + " port " + port);
+//                        packet = new DatagramPacket(commentArray, commentArray.length, networkAddress, port); // alternate
+//                        socket.send(packet);
+//                    }
+                }
+				// Send every 1 second within loop. Otherwise all this will be all over in a fraction of a second.
+				Thread.sleep(1000); // msec
+			}
+		}
+		catch (Exception e)
+		{
+            System.out.println(TRACE_PREFIX + "Problem with " + e + ", see exception trace:");
+			System.out.println(e);
+		}
+        System.out.println("===============");
+		System.out.println(TRACE_PREFIX + "complete.");
+	}
+
+	/**
+	 * A number of sites get all snippy about using 255.255.255.255 for a
+	 * broadcast address; it trips their security software and they kick you off
+	 * their network. (Comcast, NPS, etc.) This determines the broadcast address for
+	 * all connected interfaces, based on the IP and subnet mask. If you have a
+	 * dual-homed host it will return a broadcast address for both. If you have
+	 * some VMs running on your host this will pick up the addresses for those
+	 * as well--e.g. running VMWare on your laptop with a local IP this will also
+	 * pick up a 192.168 address assigned to the VM by the host OS.
+	 *
+	 * @return set of all broadcast addresses
+	 */
+	public static Set<InetAddress> getBroadcastAddresses()
+	{
+		Set<InetAddress> broadcastAddresses = new HashSet<>();
+		Enumeration<NetworkInterface> interfaces;
+
+		try {
+			interfaces = NetworkInterface.getNetworkInterfaces();
+
+			while (interfaces.hasMoreElements())
+			{
+				NetworkInterface anInterface = interfaces.nextElement();
+
+				if (anInterface.isUp())
+				{
+                    for (InterfaceAddress anAddress : anInterface.getInterfaceAddresses()) {
+                        if ((anAddress == null || anAddress.getAddress().isLinkLocalAddress()))
+                        {
+                            continue;
+                        }
+
+                        //System.out.println("Getting broadcast address for " + anAddress);
+                        InetAddress broadcastAddress = anAddress.getBroadcast();
+                        if (broadcastAddress != null)
+                        {
+                            broadcastAddresses.add(broadcastAddress);
+                        }
+                    }
+				}
+			}
+		}
+		catch (SocketException e) 
+		{
+            System.out.println(TRACE_PREFIX + "Problem with .getBroadcastAddresses(), see exception trace:" + e);
+			System.out.println(e);
+		}
+		return broadcastAddresses;
+	}
+}
diff --git a/assignments/src/src/OpenDis7Examples/EspduSenderLog.txt b/assignments/src/src/OpenDis7Examples/EspduSenderLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5e5a864097d7760f40b02f020abf17f84744b6dd
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/EspduSenderLog.txt
@@ -0,0 +1,84 @@
+ant -f C:\\x3d-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=OpenDis7Examples/EspduSender.java -Drun.class=OpenDis7Examples.EspduSender run-single
+init:
+Deleting: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+warning: [options] system modules path not set in conjunction with -source 17
+1 warning
+compile-single:
+run-single:
+[OpenDis7Examples.EspduSender]  started...
+[OpenDis7Examples.EspduSender]  sending multicast ESPDU packets to 239.1.2.3 port 3000
+===============
+espdu entityType information:
+  EntityKind =EntityKind 1 PLATFORM
+  Country    =Country 225 UNITED_STATES_OF_AMERICA_USA
+  Domain     =Land
+  Category   =1
+  SubCategory=1
+  Specific   =Country 225 UNITED_STATES_OF_AMERICA_USA
+[OpenDis7Examples.EspduSender] sending 5 sets of packets:
+===============
+Create new PDUs
+  latitude, longitude:   [36.595517, -121.87706]
+  coordinate conversion: [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+Espdu #1 entityID=[1,2,3]
+FirePdu #1 firePdu=[FireMissionIndex=0, descriptor=MunitionDescriptor munitionType:EntityType entityKind:EntityKind 0 OTHER domain:Other country:Country 0 OTHER category:0 subCategory:0 specific:0 extra:0 warhead:MunitionDescriptorWarhead 0 OTHER fuse:MunitionDescriptorFuse 0 OTHER quantity:0 rate:0]
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 1500, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 192.168.1.255   port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 1500, to 192.168.1.255   port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.20.209.15   port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 1500, to 172.20.209.15   port 3000
+===============
+Create new PDUs
+  latitude, longitude:   [36.595517, -121.877]
+  coordinate conversion: [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+Espdu #2 entityID=[1,2,3]
+FirePdu #2 firePdu=[FireMissionIndex=0, descriptor=MunitionDescriptor munitionType:EntityType entityKind:EntityKind 0 OTHER domain:Other country:Country 0 OTHER category:0 subCategory:0 specific:0 extra:0 warhead:MunitionDescriptorWarhead 0 OTHER fuse:MunitionDescriptorFuse 0 OTHER quantity:0 rate:0]
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 1500, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 192.168.1.255   port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 1500, to 192.168.1.255   port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.20.209.15   port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 1500, to 172.20.209.15   port 3000
+===============
+Create new PDUs
+  latitude, longitude:   [36.595517, -121.87706]
+  coordinate conversion: [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+Espdu #3 entityID=[1,2,3]
+FirePdu #3 firePdu=[FireMissionIndex=0, descriptor=MunitionDescriptor munitionType:EntityType entityKind:EntityKind 0 OTHER domain:Other country:Country 0 OTHER category:0 subCategory:0 specific:0 extra:0 warhead:MunitionDescriptorWarhead 0 OTHER fuse:MunitionDescriptorFuse 0 OTHER quantity:0 rate:0]
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 1500, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 192.168.1.255   port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 1500, to 192.168.1.255   port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.20.209.15   port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 1500, to 172.20.209.15   port 3000
+===============
+Create new PDUs
+  latitude, longitude:   [36.595517, -121.877]
+  coordinate conversion: [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+Espdu #4 entityID=[1,2,3]
+FirePdu #4 firePdu=[FireMissionIndex=0, descriptor=MunitionDescriptor munitionType:EntityType entityKind:EntityKind 0 OTHER domain:Other country:Country 0 OTHER category:0 subCategory:0 specific:0 extra:0 warhead:MunitionDescriptorWarhead 0 OTHER fuse:MunitionDescriptorFuse 0 OTHER quantity:0 rate:0]
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 1500, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 192.168.1.255   port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 1500, to 192.168.1.255   port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.20.209.15   port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 1500, to 172.20.209.15   port 3000
+===============
+Create new PDUs
+  latitude, longitude:   [36.595517, -121.87706]
+  coordinate conversion: [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+Espdu #5 entityID=[1,2,3]
+FirePdu #5 firePdu=[FireMissionIndex=0, descriptor=MunitionDescriptor munitionType:EntityType entityKind:EntityKind 0 OTHER domain:Other country:Country 0 OTHER category:0 subCategory:0 specific:0 extra:0 warhead:MunitionDescriptorWarhead 0 OTHER fuse:MunitionDescriptorFuse 0 OTHER quantity:0 rate:0]
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 1500, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 192.168.1.255   port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 1500, to 192.168.1.255   port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.20.209.15   port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 1500, to 172.20.209.15   port 3000
+===============
+[OpenDis7Examples.EspduSender] complete.
+BUILD SUCCESSFUL (total time: 8 seconds)
diff --git a/assignments/src/src/OpenDis7Examples/EspduSenderWireshark.png b/assignments/src/src/OpenDis7Examples/EspduSenderWireshark.png
new file mode 100644
index 0000000000000000000000000000000000000000..209629a1a0fe7c5f804efe32b5ab36ba7645e722
Binary files /dev/null and b/assignments/src/src/OpenDis7Examples/EspduSenderWireshark.png differ
diff --git a/assignments/src/src/OpenDis7Examples/EspduSenderWiresharkCapture.pcapng b/assignments/src/src/OpenDis7Examples/EspduSenderWiresharkCapture.pcapng
new file mode 100644
index 0000000000000000000000000000000000000000..5615b7f12f140a50082049eadb7076a73bb80da7
Binary files /dev/null and b/assignments/src/src/OpenDis7Examples/EspduSenderWiresharkCapture.pcapng differ
diff --git a/assignments/src/src/OpenDis7Examples/EspduTerminalLog.txt b/assignments/src/src/OpenDis7Examples/EspduTerminalLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..aa29451610ecf5f3884d99c4a5f5f74eff878516
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/EspduTerminalLog.txt
@@ -0,0 +1,245 @@
+Invocation instructions:
+1. run/debug EspduReceiver.java (since sender does not block, first be ready to listen)
+2. run/debug EspduSender.java
+
+Program responses follow for sender and receiver:
+
+===================================================
+ant -f C:\\x-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=OpenDis7Examples/EspduSender.java -Drun.class=OpenDis7Examples.EspduSender run-single
+init:
+Deleting: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+compile-single:
+run-single:
+[OpenDis7Examples.EspduSender]  started...
+[OpenDis7Examples.EspduSender]  sending multicast ESPDU packets to 239.1.2.3 port 3000
+===============
+espdu entityType information:
+  EntityKind =DisPduType 1 PLATFORM
+  Country    =Country 225 UNITED_STATES_OF_AMERICA_USA
+  Domain     =Land
+  Category   =1
+  SubCategory=1
+  Specific   =Country 225 UNITED_STATES_OF_AMERICA_USA
+[OpenDis7Examples.EspduSender] sending 5 sets of packets:
+===============
+Create new PDUs
+  latitude, longitude:   [36.595517, -121.87706]
+  coordinate conversion: [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+Espdu #1 entityID=[1,2,3]
+FirePdu #1 firePdu=[FireMissionIndex=0, descriptor=MunitionDescriptor:
+ munitionType: EntityType:
+ entityKind: DisPduType 0 OTHER
+ domain: Other
+ country: Country 0 OTHER
+ category: 0
+ subCategory: 0
+ specific: 0
+ extra: 0
+
+ warhead: MunitionDescriptorWarhead 0 OTHER
+ fuse: MunitionDescriptorFuse 0 OTHER
+ quantity: 0
+ rate: 0
+]
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.28.239.255  port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 172.28.239.255  port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.16.0.255    port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 172.16.0.255    port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.20.209.219  port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 172.20.209.219  port 3000
+===============
+Create new PDUs
+  latitude, longitude:   [36.595517, -121.877]
+  coordinate conversion: [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+Espdu #2 entityID=[1,2,3]
+FirePdu #2 firePdu=[FireMissionIndex=0, descriptor=MunitionDescriptor:
+ munitionType: EntityType:
+ entityKind: DisPduType 0 OTHER
+ domain: Other
+ country: Country 0 OTHER
+ category: 0
+ subCategory: 0
+ specific: 0
+ extra: 0
+
+ warhead: MunitionDescriptorWarhead 0 OTHER
+ fuse: MunitionDescriptorFuse 0 OTHER
+ quantity: 0
+ rate: 0
+]
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.28.239.255  port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 172.28.239.255  port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.16.0.255    port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 172.16.0.255    port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.20.209.219  port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 172.20.209.219  port 3000
+===============
+Create new PDUs
+  latitude, longitude:   [36.595517, -121.87706]
+  coordinate conversion: [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+Espdu #3 entityID=[1,2,3]
+FirePdu #3 firePdu=[FireMissionIndex=0, descriptor=MunitionDescriptor:
+ munitionType: EntityType:
+ entityKind: DisPduType 0 OTHER
+ domain: Other
+ country: Country 0 OTHER
+ category: 0
+ subCategory: 0
+ specific: 0
+ extra: 0
+
+ warhead: MunitionDescriptorWarhead 0 OTHER
+ fuse: MunitionDescriptorFuse 0 OTHER
+ quantity: 0
+ rate: 0
+]
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.28.239.255  port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 172.28.239.255  port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.16.0.255    port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 172.16.0.255    port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.20.209.219  port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 172.20.209.219  port 3000
+===============
+Create new PDUs
+  latitude, longitude:   [36.595517, -121.877]
+  coordinate conversion: [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+Espdu #4 entityID=[1,2,3]
+FirePdu #4 firePdu=[FireMissionIndex=0, descriptor=MunitionDescriptor:
+ munitionType: EntityType:
+ entityKind: DisPduType 0 OTHER
+ domain: Other
+ country: Country 0 OTHER
+ category: 0
+ subCategory: 0
+ specific: 0
+ extra: 0
+
+ warhead: MunitionDescriptorWarhead 0 OTHER
+ fuse: MunitionDescriptorFuse 0 OTHER
+ quantity: 0
+ rate: 0
+]
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.28.239.255  port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 172.28.239.255  port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.16.0.255    port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 172.16.0.255    port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.20.209.219  port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 172.20.209.219  port 3000
+===============
+Create new PDUs
+  latitude, longitude:   [36.595517, -121.87706]
+  coordinate conversion: [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+Espdu #5 entityID=[1,2,3]
+FirePdu #5 firePdu=[FireMissionIndex=0, descriptor=MunitionDescriptor:
+ munitionType: EntityType:
+ entityKind: DisPduType 0 OTHER
+ domain: Other
+ country: Country 0 OTHER
+ category: 0
+ subCategory: 0
+ specific: 0
+ extra: 0
+
+ warhead: MunitionDescriptorWarhead 0 OTHER
+ fuse: MunitionDescriptorFuse 0 OTHER
+ quantity: 0
+ rate: 0
+]
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 127.255.255.255 port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.28.239.255  port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 172.28.239.255  port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.16.0.255    port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 172.16.0.255    port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 01 ENTITY_STATE] packet.getLength()=144, to 172.20.209.219  port 3000
+[OpenDis7Examples.EspduSender] sending datagram packet [DisPduType 02 FIRE        ] packet.getLength()= 96, to 172.20.209.219  port 3000
+===============
+[OpenDis7Examples.EspduSender] complete.
+BUILD SUCCESSFUL (total time: 11 seconds)
+
+
+===================================================
+
+ant -f C:\\x-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=OpenDis7Examples/EspduReceiver.java -Drun.class=OpenDis7Examples.EspduReceiver run-single
+init:
+Deleting: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+compile-single:
+run-single:
+[OpenDis7Examples.EspduReceiver] started...
+[OpenDis7Examples.EspduReceiver] listening for PDU packets on 239.1.2.3 port 3000
+To quit: stop or kill this process
+===============
+  1. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+  2. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu
+     FirePdu locationInWorldCoordinates: [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+===============
+  3. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+  4. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu
+     FirePdu locationInWorldCoordinates: [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+===============
+  5. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+  6. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu
+     FirePdu locationInWorldCoordinates: [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+===============
+  7. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+  8. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu
+     FirePdu locationInWorldCoordinates: [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+===============
+  9. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+ 10. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu
+     FirePdu locationInWorldCoordinates: [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+===============
+ 11. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+ 12. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu
+     FirePdu locationInWorldCoordinates: [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+===============
+ 13. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+ 14. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu
+     FirePdu locationInWorldCoordinates: [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+===============
+ 15. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+ 16. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu
+     FirePdu locationInWorldCoordinates: [-2707492.9269245286, -4353663.899966802, 3781450.3202754413]
+===============
+ 17. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+ 18. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu
+     FirePdu locationInWorldCoordinates: [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+===============
+ 19. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu
+     entityID triplet: [1, 2, 3] 
+     Location in DIS coordinates:        [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+ 20. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu
+     FirePdu locationInWorldCoordinates: [-2707497.4860692197, -4353661.0646844525, 3781450.3202754413]
+===============
\ No newline at end of file
diff --git a/assignments/src/src/OpenDis7Examples/ExampleSimulationProgram.java b/assignments/src/src/OpenDis7Examples/ExampleSimulationProgram.java
new file mode 100644
index 0000000000000000000000000000000000000000..dbc60b72e1071f77f8f60bc7a7718ae443415f96
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/ExampleSimulationProgram.java
@@ -0,0 +1,413 @@
+/**
+ * Copyright (c) 2008-2023, MOVES Institute, Naval Postgraduate School (NPS). All rights reserved.
+ * This work is provided under a BSD open-source license, see project license.html or license.txt
+ * @author brutzman@nps.edu
+ */
+package OpenDis7Examples;
+
+import edu.nps.moves.dis7.entities.swe.platform.surface._001Poseidon;
+import edu.nps.moves.dis7.entities.swe.platform.surface._002Triton;
+import edu.nps.moves.dis7.enumerations.*;
+import edu.nps.moves.dis7.pdus.*;
+import edu.nps.moves.dis7.utilities.DisChannel;
+import edu.nps.moves.dis7.utilities.PduFactory;
+import java.time.LocalDateTime;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/** The purpose of this inheritable class is to provide an easily modifiable 
+ *  example simulation program that includes DIS-capable entities performing 
+ *  tasks of interest, and then reporting activity via PDUs to the network.
+ *  Default program initialization includes PDU recording turned on by default.
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramLog.txt" target="_blank">ExampleSimulationProgramLog.txt</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramPduCaptureLog.dislog" target="_blank">ExampleSimulationProgramPduCaptureLog.dislog</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramFlowDiagram.pdf" target="_blank">ExampleSimulationProgramFlowDiagram.pdf</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramWireshark.png" target="_blank">ExampleSimulationProgramWireshark.png</a>
+ *  @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramSequenceDiagram.png" target="_blank">ExampleSimulationProgramSequenceDiagram.png</a>
+ */
+public class ExampleSimulationProgram
+{
+    /* **************************** infrastructure code, modification is seldom needed ************************* */
+                 
+    private   String     descriptor = this.getClass().getSimpleName();
+    /** DIS channel defined by network address/port combination includes multiple utility capabilities */
+    protected DisChannel disChannel;
+    /** Factory object used to create new PDU instances */
+    protected PduFactory pduFactory;
+    
+    /** seconds per loop for real-time or simulation execution */
+    private double  simulationTimeStepDuration  =  1.0; // seconds TODO encapsulate
+    /** initial simulation time in seconds */
+    double  simulationTimeInitial = 0.0;
+    /** current simulation time in seconds */
+    double  simulationTimeSeconds = simulationTimeInitial;
+    /** Maximum number of simulation loops */
+    int MAX_LOOP_COUNT = 4;
+    
+    String narrativeMessage1 = new String();
+    String narrativeMessage2 = new String();
+    String narrativeMessage3 = new String();
+    
+    /** EntityID settings for entity 1 */
+    protected EntityID           entityID_1          = new EntityID();
+    /** EntityID settings for entity 2 */
+    protected EntityID           entityID_2          = new EntityID();
+    /** ESPDU for entity 1 */
+    protected EntityStatePdu     entityStatePdu_1;
+    /** ESPDU for entity 2 */
+    protected EntityStatePdu     entityStatePdu_2;
+    /** FirePdu for entity 1 first  weapon (if any) */
+    protected FirePdu            firePdu_1a;
+    /** FirePdu for entity 1 second weapon (if any) */
+    protected FirePdu            firePdu_1b;
+    /** MunitionDescriptor for these weapons */
+    protected MunitionDescriptor munitionDescriptor1;
+    
+    // hey programmer, what other state do you want?  this is a good place to declare it...
+    
+    /**
+     * Constructor to create an instance of this class.
+     * Design goal: additional built-in initialization conveniences can go here
+     * to keep your efforts focused on the runSimulation() method.
+     */
+    // base constructor is not invoked automatically by other constructors
+    // https://stackoverflow.com/questions/581873/best-way-to-handle-multiple-constructors-in-java
+    public ExampleSimulationProgram()
+    {
+        initialize();
+    }
+    /**
+     * Constructor to create an instance of this class.
+     * @param newDescriptor describes this program, useful for logging and debugging
+     */
+    public ExampleSimulationProgram(String newDescriptor)
+    {
+        descriptor = newDescriptor;
+        initialize();
+    }
+    /**
+     * Utility Constructor that allows your example simulation program to override default network address and port
+     * @param address network address to use
+     * @param port corresponding network port to use
+     */
+    public ExampleSimulationProgram(String address, int port)
+    {
+        disChannel.setNetworkAddress            (address);
+        disChannel.setNetworkPort               (port);
+        disChannel.setVerboseComments           (true);       // TODO rename library method to disambiguate CommentPDU
+                                                                            // TODO still seems really chatty... add silent mode?
+        disChannel.setVerboseDisNetworkInterface(true);  // Default false
+        disChannel.setVerbosePduRecorder        (true);       // default false
+        initialize();
+    }
+    
+    /** Initialize channel setup for OpenDis7 and report a test PDU
+     * @see initializeDisChannel
+     * @see initializeSimulationEntities */
+    private void initialize()
+    {
+        initializeDisChannel(); // must come first, uses PduFactory
+        
+        initializeSimulationEntities(); // set unchanging parameters
+        
+        disChannel.join(); // TODO further functionality expected
+        
+        String timeStepMessage = "Simulation timestep duration " + getSimulationTimeStepDuration() + " seconds";
+        disChannel.sendCommentPdu(simulationTimeSeconds, DisChannel.COMMENTPDU_SIMULATION_TIMESTEP, timeStepMessage);
+        // additional constructor initialization can go here
+    }
+    
+    /** Initialize channel setup for OpenDis7 and report a test PDU */
+    private void initializeDisChannel()
+    {
+        if (disChannel == null)
+            disChannel = new DisChannel();
+        else
+        {
+            disChannel.printlnTRACE ("*** warning, duplicate invocation of initializeDisChannel() ignored");
+            return;
+        }
+        pduFactory     = disChannel.getPduFactory();
+        disChannel.setDescriptor(this.getClass().getSimpleName()); // ExampleSimulationProgram might be a superclass
+        disChannel.setUpNetworkInterface();
+        disChannel.printlnTRACE ("just checking: disChannel.getNetworkAddress()=" + disChannel.getNetworkAddress() +
+                                                         ", getNetworkPort()="    + disChannel.getNetworkPort());
+        disChannel.getDisNetworkInterface().setVerbose(true); // sending and receipt
+        disChannel.printlnTRACE ("just checking: hasVerboseSending()=" + disChannel.getDisNetworkInterface().hasVerboseSending() +
+                                              ", hasVerboseReceipt()=" + disChannel.getDisNetworkInterface().hasVerboseReceipt());
+        disChannel.getPduRecorder().setVerbose(true);
+
+        // TODO confirm whether recorder is explicitly started by programmer (or not)
+        
+//      disChannel.sendCommentPdu(VariableRecordType.OTHER, "DisThreadedNetworkInterface.initializeDisChannel() complete"); // hello channel, debug
+    }
+    
+    /** Get ready, get set... initialize simulation entities.  Who's who in the zoo?
+     */
+    public void initializeSimulationEntities()
+    {        
+        if (pduFactory == null)
+            pduFactory      = disChannel.getPduFactory();
+        entityStatePdu_1    = pduFactory.makeEntityStatePdu();
+        entityStatePdu_2    = pduFactory.makeEntityStatePdu();
+        firePdu_1a          = pduFactory.makeFirePdu();
+        firePdu_1b          = pduFactory.makeFirePdu();
+        munitionDescriptor1 = new MunitionDescriptor();
+        
+        // Your model setup: define participants.  who's who in this zoo?
+        // Assuming you keep track of entity objects...  here is some support for for Entity 1.
+        
+        // PDU objects are already declared and instances created, so now set their values.
+        // who is who in our big zoo, sufficient for global participation if we need it
+        entityID_1.setSiteID(1).setApplicationID(2).setEntityID(3); // made-up example ID;
+        disChannel.addEntity(entityID_1);
+        
+        entityID_2.setSiteID(1).setApplicationID(2).setEntityID(4); // made-up example ID; 
+        disChannel.addEntity(entityID_2);
+        // TODO someday, use enumerations for sites as part of a SimulationManager object; e.g. is there a unique site triplet for MOVES Institute?
+
+        entityStatePdu_1.setEntityID(entityID_1);
+        entityStatePdu_1.setForceId(ForceID.FRIENDLY);
+        entityStatePdu_1.setEntityType(new _001Poseidon());       // note import statement above
+//      entityStatePdu_1.setMarking("Entity #1");
+        entityStatePdu_1.setEntityType(new edu.nps.moves.dis7.entities.usa.platform.air.MV22B()); // note import statement at top
+        entityStatePdu_1.setMarking("Entity #53");
+        entityStatePdu_1.getMarkingString(); // use Netbeans Debug breakpoint here to check left justified...
+
+        entityStatePdu_2.setEntityID(entityID_2);
+        entityStatePdu_2.setForceId(ForceID.OPPOSING);
+        entityStatePdu_2.setEntityType(new _002Triton()); // note import statement above
+        entityStatePdu_2.setMarking("Entity #2");
+
+        // TODO how should we customize this munition?  what are key parameters for your simulation? 
+        // more is needed here by scenario authors...
+        munitionDescriptor1.setQuantity(1);
+        firePdu_1a.setDescriptor(munitionDescriptor1).setRange(1000.0f);
+    }
+                 
+    /**
+     * This runSimulationLoops() method is for you, a customizable programmer-modifiable
+     * code block for defining and running a new simulation of interest.
+     * 
+     * Welcome! Other parts of this program handle bookkeeping and plumbing tasks so that
+     * you can focus on your model entities and activities.
+     * Expandable support includes DIS EntityStatePdu, FirePdu and CommentPdu all available for 
+     * modification and sending in a simulation loop.
+     * Continuous improvement efforts seek to make this program as easy and straightforward
+     * as possible for DIS simulationists to use and adapt.
+     * All of the other methods are setup, teardown and configuration that you may find
+     * interesting, even helpful, but don't really have to worry about.
+     */
+    @SuppressWarnings("SleepWhileInLoop") // yes we might do that
+    public void runSimulationLoops ()
+    {
+      try
+      {              
+        final int     SIMULATION_MAX_LOOP_COUNT = 10; // be deliberate out there!  also avoid infinite loops.
+              int     simulationLoopCount = 0;        // variable, initialized at 0
+              boolean simulationComplete = false;     // sentinel variable as termination condition, are we done yet?
+        
+        // TODO reset Clock Time for today's date and timestamp to zero, providing consistent outputs for each simulation run
+        String timeMessage = "Simulation time " + simulationTimeSeconds + " at LocalDateTime " + LocalDateTime.now();
+        disChannel.sendCommentPdu(simulationTimeSeconds, DisChannel.COMMENTPDU_TIME, timeMessage);
+        // TODO replace enumeration with disChannel.COMMENTPDU_TIME
+        // TODO fix VariableRecordType.TIME_AMP_DATE_VALID
+        
+        // ===================================================================================================
+        // loop the simulation while allowed, programmer can set additional conditions to break out and finish
+        while (simulationLoopCount < SIMULATION_MAX_LOOP_COUNT)  // are we done yet?
+        {
+            simulationLoopCount++; // good practice: increment loop counter as first action in that loop
+            
+            // =============================================================================================
+            // * your own simulation code starts here! *****************************************************
+            // =============================================================================================
+            
+            //  are there any other variables to modify at the beginning of your loop?
+            
+            // are your reading any DIS PDUs from the network?  check for them here
+            
+            // compute a track, update an ESPDU, whatever it is that your model is doing...
+            
+            // Where is my entity?  Insert changes in position; this sample only changes X position.
+            entityStatePdu_1.getEntityLocation().setX(entityStatePdu_1.getEntityLocation().getX() + 1.0); // 1m per timestep
+            
+            // decide whether to fire, and then update the firePdu.  Hmmm, you might want a target to shoot at!
+            
+            // etc. etc. your code goes here for your simulation of interest
+                
+            // something happens between my simulation entities, la de da de da...
+            System.out.println ("... My simulation just did something, no really...");
+            System.out.flush(); // make sure this arrives to user even if other threads somehow become deadlocked
+            
+            
+            // make your reports: narrative code for CommentPdu here (set all to empty strings to avoid sending)
+            narrativeMessage1 = "MV3500 ExampleSimulationProgram";
+            narrativeMessage2 = "runSimulation() loop " + simulationLoopCount;
+            narrativeMessage3 = ""; // intentionally blank for testing
+
+            // your loop termination condition goes here
+            if (simulationLoopCount > MAX_LOOP_COUNT) // for example
+            {
+                simulationComplete = true;
+            }      
+            // =============================================================================================
+            // * your own simulation code is finished here! ************************************************
+            // =============================================================================================
+            
+            // staying synchronized with timestep: wait duration for elapsed time in this loop
+            // Thread.sleep needs a (long) parameter for milliseconds, which are clumsy to use sometimes
+            Thread.sleep((long)(getSimulationTimeStepDuration() * 1000)); // units of seconds * (1000 msec/sec) = milliseconds
+            System.out.println ("... [Pausing for " + getSimulationTimeStepDuration() + " seconds]");
+            
+            // OK now send the status PDUs for this loop, and then continue
+            System.out.println ("... sending PDUs of interest for simulation step " + simulationLoopCount + ", monitor loopback to confirm sent");
+            System.out.flush();
+            
+            // TODO set timesteps in PDUs
+            
+            sendAllPdusForLoopTimestep(simulationTimeSeconds,
+                                       entityStatePdu_1, 
+                                            firePdu_1a, 
+                                         DisChannel.COMMENTPDU_APPLICATION_STATUS, 
+                                           narrativeMessage1, narrativeMessage2, narrativeMessage3);
+            disChannel.sendSinglePdu(simulationTimeSeconds, entityStatePdu_2); // me too i.e. 2!
+            
+            System.out.println ("... [PDUs of interest successfully sent for this loop]");
+            System.out.flush();
+            
+            // ===============================
+            // current loop now finished, check whether to terminate if simulation complete, otherwise continue
+            if (simulationComplete || (simulationLoopCount > 10000)) // for example; including fail-safe condition is good
+            {
+                System.out.println ("... [loop termination condition met, simulationComplete=" + simulationComplete + "]"); // ", final loopCount=" + loopCount + 
+                System.out.flush();
+                break;
+            }
+            simulationTimeSeconds += getSimulationTimeStepDuration(); // good practice: increment simulationTime as lastst action in that loop
+                    
+        }   // end of simulation loop, continue until done
+        // ===================================================================================================// ===================================================================================================// ===================================================================================================// ===================================================================================================
+
+        narrativeMessage2 = "runSimulation() completed successfully"; // all done, so tell everyone else on the channel
+        // TODO better javadoc needs to be autogenerated for VariableRecordType enumerations
+        disChannel.sendCommentPdu(DisChannel.COMMENTPDU_NARRATIVE, narrativeMessage1, narrativeMessage2, narrativeMessage3);
+        System.out.println ("... [final=completion CommentPdu successfully sent for simulation]");
+        
+//        disChannel.getPduRecorder(). TODO record XML as well
+        disChannel.leave(); // embedded SimulationManager is expected to send appropriate PDUs for entity, application shutdown
+      } 
+      catch (InterruptedException iex) // handle any exception that your code might choose to provoke!
+      {
+        Logger.getLogger(ExampleSimulationProgram.class.getSimpleName()).log(Level.SEVERE, null, iex);
+      }
+    }
+
+    /**
+     * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep.
+     * @param simTimeSeconds simulation time in second, applied to PDU as timestamp
+     * @param entityStatePdu the ESPDU to send, if any
+     * @param firePdu        the FirePDU to send, if any
+     * @param commentType    enumeration value describing purpose of the narrative comment PDU
+     * @param comments       String array of narrative comments
+     * @see DisChannel
+//   * @see DisTime // TODO find renamed version
+     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html" target="_blank">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
+     */
+    public void sendAllPdusForLoopTimestep(double simTimeSeconds,
+                                   EntityStatePdu entityStatePdu,
+                                          FirePdu firePdu,
+                               VariableRecordType commentType,
+                                     // vararg... variable-length set of String comments can optionally follow
+                                        String... comments)
+    {
+        if (entityStatePdu != null)
+            disChannel.sendSinglePdu(simTimeSeconds, entityStatePdu);
+            
+        if (firePdu != null)
+            disChannel.sendSinglePdu(simTimeSeconds, firePdu); // bang
+        
+        disChannel.sendCommentPdu(simTimeSeconds, commentType, comments); // empty comments are filtered
+    }
+    
+    /**
+     * Initial execution via main() method: handle args array of command-line initialization (CLI) arguments here
+     * @param args command-line parameters: network address and port
+     */
+    protected void handleArguments (String[] args)
+    {
+        // initial execution: handle args array of initialization arguments here
+        if (args.length == 2) 
+        {
+            if ((args[0] != null) && !args[0].isEmpty())
+                thisProgram.disChannel.setNetworkAddress(args[0]);
+            if ((args[1] != null) && !args[1].isEmpty())
+                thisProgram.disChannel.setNetworkPort(Integer.parseInt(args[1]));
+        }
+        else if (args.length != 0) 
+        {
+            System.err.println("Usage: " + thisProgram.getClass().getSimpleName() + " [address port]");
+            System.exit(-1);
+        }
+    }
+
+    /**
+     * Get simple descriptor (such as parent class name) for this network interface, used in trace statements
+     * @return simple descriptor name
+     */
+    public String getDescriptor() {
+        return descriptor;
+    }
+
+    /**
+     * Set new simple descriptor (such as parent class name) for this network interface, used in trace statements
+     * @param newDescriptor simple descriptor name for this interface
+     */
+    public void setDescriptor(String newDescriptor) {
+        if (newDescriptor == null)
+            newDescriptor = "";
+        this.descriptor = newDescriptor;
+    }
+
+    /**
+     * parameter accessor method
+     * @return the simulationTimeStepDuration in seconds
+     */
+    public double getSimulationTimeStepDuration() {
+        return simulationTimeStepDuration;
+    }
+
+    /**
+     * parameter accessor method
+     * @param timeStepDurationSeconds the simulationTimeStepDuration in seconds to set
+     */
+    public void setSimulationTimeStepDuration(double timeStepDurationSeconds) {
+        this.simulationTimeStepDuration = timeStepDurationSeconds;
+    }
+    
+    /** Locally instantiable copy of program, can be subclassed. */
+    protected static ExampleSimulationProgram thisProgram;
+  
+    /**
+     * Main method is first executed when a program instance is loaded.
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @param args command-line parameters: network address and port.
+     *    Command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
+     */
+    public static void main(String[] args)
+    {
+        thisProgram = new ExampleSimulationProgram("test constructor"); // create instance of self within static main() method
+        
+        thisProgram.disChannel.printlnTRACE("main() started...");
+        
+        thisProgram.handleArguments(args); // process any command-line invocation arguments
+
+        thisProgram.runSimulationLoops(); // ... your simulation execution code goes in there ...
+        
+        thisProgram.disChannel.tearDownNetworkInterface(); // make sure no processes are left lingering
+        
+        thisProgram.disChannel.printlnTRACE("complete."); // report successful completion
+        
+        System.exit(0); // ensure all threads and sockets released
+    }
+}
diff --git a/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramFlowDiagram.pdf b/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramFlowDiagram.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..1092d26a408a96a754f0bae07e2b0315e0815e89
Binary files /dev/null and b/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramFlowDiagram.pdf differ
diff --git a/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramFlowDiagram.png b/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramFlowDiagram.png
new file mode 100644
index 0000000000000000000000000000000000000000..1917aa4ef9e4a994d8b4057c7c033f2ab73b78a6
Binary files /dev/null and b/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramFlowDiagram.png differ
diff --git a/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramFlowDiagram.vsdx b/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramFlowDiagram.vsdx
new file mode 100644
index 0000000000000000000000000000000000000000..439a854c826923f7f83f705be0a76139f141d2af
Binary files /dev/null and b/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramFlowDiagram.vsdx differ
diff --git a/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramLog.txt b/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..af7439f5d53e94b1cbb8fde885ac5dda59eb9a4e
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramLog.txt
@@ -0,0 +1,112 @@
+ant -f C:\\x3d-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=OpenDis7Examples/ExampleSimulationProgram.java -Drun.class=OpenDis7Examples.ExampleSimulationProgram run-single
+init:
+Deleting: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+warning: [options] system modules path not set in conjunction with -source 17
+1 warning
+compile-single:
+run-single:
+[DisChannel] thisHostName=IT160907-INFLPP
+[DisChannel ExampleSimulationProgram] Beginning pdu save to directory ./pduLog
+[PduRecorder ExampleSimulationProgram] Recorder log file open: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\pduLog\PduCaptureLog.dislog
+[DisThreadedNetworkInterface] using network interface PANGP Virtual Ethernet Adapter Secure
+[DisThreadedNetworkInterface] datagramSocket.joinGroup  address=239.1.2.3 port=3000 isConnected()=false createDatagramSocket() complete.
+[DisThreadedNetworkInterface] createThreads() sendingThread.isAlive()=true
+[DisThreadedNetworkInterface] createThreads() receiveThread.isAlive()=true
+[PduRecorder ExampleSimulationProgram] listening to IP address 239.1.2.3 on port 3000
+[DisChannel ExampleSimulationProgram] Network confirmation: address=239.1.2.3 port=3000
+[DisChannel ExampleSimulationProgram] just checking: disChannel.getNetworkAddress()=239.1.2.3, getNetworkPort()=3000
+[DisChannel ExampleSimulationProgram] just checking: hasVerboseSending()=true, hasVerboseReceipt()=true
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending  1] DisPduType 11 CREATE_ENTITY, size 28 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending  2] DisPduType 11 CREATE_ENTITY, size 28 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt  1] DisPduType 11 CREATE_ENTITY, size 28 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending  3] DisPduType 22 COMMENT, size 80 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt  2] DisPduType 11 CREATE_ENTITY, size 28 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt  3] DisPduType 22 COMMENT, size 80 bytes)
+[DisChannel ExampleSimulationProgram] *** [CommentPdu APPLICATION_TIMESTEP] [Simulation timestep duration 1.0 seconds]
+[DisChannel ExampleSimulationProgram] main() started...
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending  4] DisPduType 22 COMMENT, size 112 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt  4] DisPduType 22 COMMENT, size 112 bytes)
+[DisChannel ExampleSimulationProgram] *** [CommentPdu TIME] [Simulation time 0.0 at LocalDateTime 2023-12-30T22:00:00.559852600]
+... My simulation just did something, no really...
+... [Pausing for 1.0 seconds]
+... sending PDUs of interest for simulation step 1, monitor loopback to confirm sent
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending  5] DisPduType 01 ENTITY_STATE  Entity #53, size 144 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt  5] DisPduType 01 ENTITY_STATE  Entity #53, size 144 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending  6] DisPduType 02 FIRE, size 96 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt  6] DisPduType 02 FIRE, size 96 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending  7] DisPduType 22 COMMENT, size 104 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt  7] DisPduType 22 COMMENT, size 104 bytes)
+[DisChannel ExampleSimulationProgram] *** [CommentPdu APPLICATION_STATUS] [MV3500 ExampleSimulationProgram, runSimulation() loop 1]
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending  8] DisPduType 01 ENTITY_STATE   Entity #2, size 144 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt  8] DisPduType 01 ENTITY_STATE   Entity #2, size 144 bytes)
+... [PDUs of interest successfully sent for this loop]
+... My simulation just did something, no really...
+... [Pausing for 1.0 seconds]
+... sending PDUs of interest for simulation step 2, monitor loopback to confirm sent
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending  9] DisPduType 01 ENTITY_STATE  Entity #53, size 144 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt  9] DisPduType 01 ENTITY_STATE  Entity #53, size 144 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending 10] DisPduType 02 FIRE, size 96 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt 10] DisPduType 02 FIRE, size 96 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending 11] DisPduType 22 COMMENT, size 104 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt 11] DisPduType 22 COMMENT, size 104 bytes)
+[DisChannel ExampleSimulationProgram] *** [CommentPdu APPLICATION_STATUS] [MV3500 ExampleSimulationProgram, runSimulation() loop 2]
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending 12] DisPduType 01 ENTITY_STATE   Entity #2, size 144 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt 12] DisPduType 01 ENTITY_STATE   Entity #2, size 144 bytes)
+... [PDUs of interest successfully sent for this loop]
+... My simulation just did something, no really...
+... [Pausing for 1.0 seconds]
+... sending PDUs of interest for simulation step 3, monitor loopback to confirm sent
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending 13] DisPduType 01 ENTITY_STATE  Entity #53, size 144 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt 13] DisPduType 01 ENTITY_STATE  Entity #53, size 144 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending 14] DisPduType 02 FIRE, size 96 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt 14] DisPduType 02 FIRE, size 96 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending 15] DisPduType 22 COMMENT, size 104 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt 15] DisPduType 22 COMMENT, size 104 bytes)
+[DisChannel ExampleSimulationProgram] *** [CommentPdu APPLICATION_STATUS] [MV3500 ExampleSimulationProgram, runSimulation() loop 3]
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending 16] DisPduType 01 ENTITY_STATE   Entity #2, size 144 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt 16] DisPduType 01 ENTITY_STATE   Entity #2, size 144 bytes)
+... [PDUs of interest successfully sent for this loop]
+... My simulation just did something, no really...
+... [Pausing for 1.0 seconds]
+... sending PDUs of interest for simulation step 4, monitor loopback to confirm sent
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending 17] DisPduType 01 ENTITY_STATE  Entity #53, size 144 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt 17] DisPduType 01 ENTITY_STATE  Entity #53, size 144 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending 18] DisPduType 02 FIRE, size 96 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt 18] DisPduType 02 FIRE, size 96 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending 19] DisPduType 22 COMMENT, size 104 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt 19] DisPduType 22 COMMENT, size 104 bytes)
+[DisChannel ExampleSimulationProgram] *** [CommentPdu APPLICATION_STATUS] [MV3500 ExampleSimulationProgram, runSimulation() loop 4]
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending 20] DisPduType 01 ENTITY_STATE   Entity #2, size 144 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt 20] DisPduType 01 ENTITY_STATE   Entity #2, size 144 bytes)
+... [PDUs of interest successfully sent for this loop]
+... My simulation just did something, no really...
+... [Pausing for 1.0 seconds]
+... sending PDUs of interest for simulation step 5, monitor loopback to confirm sent
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending 21] DisPduType 01 ENTITY_STATE  Entity #53, size 144 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt 21] DisPduType 01 ENTITY_STATE  Entity #53, size 144 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending 22] DisPduType 02 FIRE, size 96 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt 22] DisPduType 02 FIRE, size 96 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending 23] DisPduType 22 COMMENT, size 104 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt 23] DisPduType 22 COMMENT, size 104 bytes)
+[DisChannel ExampleSimulationProgram] *** [CommentPdu APPLICATION_STATUS] [MV3500 ExampleSimulationProgram, runSimulation() loop 5]
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending 24] DisPduType 01 ENTITY_STATE   Entity #2, size 144 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt 24] DisPduType 01 ENTITY_STATE   Entity #2, size 144 bytes)
+... [PDUs of interest successfully sent for this loop]
+... [loop termination condition met, simulationComplete=true]
+[DisThreadedNetworkInterface ExampleSimulationProgram] [sending 25] DisPduType 22 COMMENT, size 120 bytes)
+[DisThreadedNetworkInterface ExampleSimulationProgram] [receipt 25] DisPduType 22 COMMENT, size 120 bytes)
+[DisChannel ExampleSimulationProgram] *** [CommentPdu COMPLETE_EVENT_REPORT] [MV3500 ExampleSimulationProgram, runSimulation() completed successfully]
+... [final=completion CommentPdu successfully sent for simulation]
+*** setKillSentinelAndInterrupts() sentinel killed=true sendingThread.isInterrupted()=true receiveThread.isInterrupted()=true
+[DisThreadedNetworkInterface ExampleSimulationProgram] datagramSocket.leaveGroup address=239.1.2.3 port=3000 isClosed()=true close() complete.
+*** killThread() status: sendingThread.isAlive()=false sendingThread.isInterrupted()=true
+*** killThread() status: receiveThread.isAlive()=false receiveThread.isInterrupted()=true
+*** Thread close status: sendingThread.isAlive()=false receiveThread.isAlive()=false
+
+PduRecorder.stop() closing recorder log file:
+   C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\pduLog\PduCaptureLog.dislog
+[DisChannel ExampleSimulationProgram] complete.
+BUILD SUCCESSFUL (total time: 13 seconds)
diff --git a/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramPduCaptureLog.dislog b/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramPduCaptureLog.dislog
new file mode 100644
index 0000000000000000000000000000000000000000..d81f59667f239a2e1339da417e1b44c2e06f3721
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramPduCaptureLog.dislog
@@ -0,0 +1,54 @@
+# Start, ENCODING_PLAINTEXT, [PduRecorder] 20220625_204652, DIS capture file, .\pduLog\PduCaptureLog.dislog
+# Timestamp(8 bytes),ProtocolVersion,CompatibilityVersion,ExerciseID,PduType,PduStatus,HeaderLength,PduLength,then PDU-specific data
+# =============================================
+# DisPduType 11 CREATE_ENTITY, Session time 20:46:52.8, session duration 00:00:00.0, Pdu timestamp -939161411 01:49:49.0, simulation stream interval 0 00:00:00.0
+0,0,68,10,-73,22,-97,-7,7,4,11,5,-56,5,-120,-67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 11 CREATE_ENTITY, Session time 20:46:52.8, session duration 00:00:00.0, Pdu timestamp -939161411 01:49:49.0, simulation stream interval 0 00:00:00.0
+0,0,0,0,0,-126,88,92,7,4,11,5,-56,5,-120,-67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:46:52.8, session duration 00:00:00.0, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,0,0,-126,88,92,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-81,-46,0,0,1,64,83,105,109,117,108,97,116,105,111,110,32,116,105,109,101,115,116,101,112,32,100,117,114,97,116,105,111,110,32,49,46,48,32,115,101,99,111,110,100,115
+# DisPduType 22 COMMENT, Session time 20:46:52.9, session duration 00:00:00.1, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,0,6,-115,-34,-60,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-53,32,0,0,2,16,83,105,109,117,108,97,116,105,111,110,32,116,105,109,101,32,48,46,48,32,97,116,32,76,111,99,97,108,68,97,116,101,84,105,109,101,32,50,48,50,50,45,48,54,45,50,53,84,50,48,58,52,54,58,53,50,46,57,49,56,52,54,50,50,48,48,0,0,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:46:54.0, session duration 00:00:01.2, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,0,72,-50,23,44,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,3,1,0,1,2,0,-31,23,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,69,110,116,105,116,121,32,35,53,51,0,0,0,0
+# DisPduType 02 FIRE, Session time 20:46:54.1, session duration 00:00:01.3, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,0,79,64,-127,-48,7,1,2,2,0,0,0,0,0,96,40,0,0,2,0,3,0,0,0,2,0,3,0,0,0,2,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,122,0,0
+# DisPduType 22 COMMENT, Session time 20:46:54.2, session duration 00:00:01.4, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,0,85,-47,-118,-68,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,3,-87,-72,0,0,0,-8,77,86,51,53,48,48,32,69,120,97,109,112,108,101,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,3,-87,-72,0,0,0,-80,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,49,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:46:54.3, session duration 00:00:01.5, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,0,92,49,69,0,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,4,2,0,1,3,0,-51,62,2,2,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,69,110,116,105,116,121,32,35,50,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:46:55.4, session duration 00:00:02.6, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,0,-98,-85,-33,28,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,3,1,0,1,2,0,-31,23,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,69,110,116,105,116,121,32,35,53,51,0,0,0,0
+# DisPduType 02 FIRE, Session time 20:46:55.5, session duration 00:00:02.7, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,0,-91,11,-57,-36,7,1,2,2,0,0,0,0,0,96,40,0,0,2,0,3,0,0,0,2,0,3,0,0,0,2,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,122,0,0
+# DisPduType 22 COMMENT, Session time 20:46:55.6, session duration 00:00:02.8, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,0,-85,-89,-120,-20,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,3,-87,-72,0,0,0,-8,77,86,51,53,48,48,32,69,120,97,109,112,108,101,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,3,-87,-72,0,0,0,-80,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,50,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:46:55.7, session duration 00:00:02.9, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,0,-78,21,-112,32,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,4,2,0,1,3,0,-51,62,2,2,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,69,110,116,105,116,121,32,35,50,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:46:56.9, session duration 00:00:04.1, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,0,-12,-17,23,4,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,3,1,0,1,2,0,-31,23,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,69,110,116,105,116,121,32,35,53,51,0,0,0,0
+# DisPduType 02 FIRE, Session time 20:46:57.0, session duration 00:00:04.2, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,0,-5,98,-81,-100,7,1,2,2,0,0,0,0,0,96,40,0,0,2,0,3,0,0,0,2,0,3,0,0,0,2,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,122,0,0
+# DisPduType 22 COMMENT, Session time 20:46:57.1, session duration 00:00:04.3, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,1,1,-14,91,-76,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,3,-87,-72,0,0,0,-8,77,86,51,53,48,48,32,69,120,97,109,112,108,101,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,3,-87,-72,0,0,0,-80,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,51,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:46:57.2, session duration 00:00:04.4, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,1,8,89,25,72,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,4,2,0,1,3,0,-51,62,2,2,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,69,110,116,105,116,121,32,35,50,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:46:58.3, session duration 00:00:05.5, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,1,74,-66,108,-24,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,3,1,0,1,2,0,-31,23,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,69,110,116,105,116,121,32,35,53,51,0,0,0,0
+# DisPduType 02 FIRE, Session time 20:46:58.4, session duration 00:00:05.6, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,1,81,99,-111,-32,7,1,2,2,0,0,0,0,0,96,40,0,0,2,0,3,0,0,0,2,0,3,0,0,0,2,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,122,0,0
+# DisPduType 22 COMMENT, Session time 20:46:58.5, session duration 00:00:05.7, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,1,87,-39,103,32,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,3,-87,-72,0,0,0,-8,77,86,51,53,48,48,32,69,120,97,109,112,108,101,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,3,-87,-72,0,0,0,-80,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,52,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:46:58.6, session duration 00:00:05.8, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,1,94,99,-18,8,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,4,2,0,1,3,0,-51,62,2,2,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,69,110,116,105,116,121,32,35,50,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:46:59.8, session duration 00:00:07.0, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,1,-95,61,-111,-44,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,3,1,0,1,2,0,-31,23,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,69,110,116,105,116,121,32,35,53,51,0,0,0,0
+# DisPduType 02 FIRE, Session time 20:46:59.9, session duration 00:00:07.1, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,1,-89,-76,41,56,7,1,2,2,0,0,0,0,0,96,40,0,0,2,0,3,0,0,0,2,0,3,0,0,0,2,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,122,0,0
+# DisPduType 22 COMMENT, Session time 20:47:00.0, session duration 00:00:07.2, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,1,-82,82,31,32,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,3,-87,-72,0,0,0,-8,77,86,51,53,48,48,32,69,120,97,109,112,108,101,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,3,-87,-72,0,0,0,-80,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,53,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:00.1, session duration 00:00:07.3, Pdu timestamp 0 00:00:00.0, simulation stream interval 939161411 22:10:11.0
+0,0,0,1,-76,-71,-33,-80,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,4,2,0,1,3,0,-51,62,2,2,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,69,110,116,105,116,121,32,35,50,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:00.2, session duration 00:00:07.4, Pdu timestamp -1559 23:34:01.0, simulation stream interval 939159852 21:44:12.0
+0,0,0,1,-69,116,86,20,7,1,22,5,-1,-1,-7,-23,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,9,90,-90,0,0,0,-8,77,86,51,53,48,48,32,69,120,97,109,112,108,101,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,9,90,-90,0,0,1,48,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,99,111,109,112,108,101,116,101,100,32,115,117,99,99,101,115,115,102,117,108,108,121,0,0
+# Finish, ENCODING_PLAINTEXT, [PduRecorder] 20220625_204702, DIS capture file, .\pduLog\PduCaptureLog.dislog
diff --git a/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramSequenceDiagram.png b/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramSequenceDiagram.png
new file mode 100644
index 0000000000000000000000000000000000000000..da2290863bec43303a3f377ce9442e747e116f29
Binary files /dev/null and b/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramSequenceDiagram.png differ
diff --git a/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramSequenceDiagram.vsdx b/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramSequenceDiagram.vsdx
new file mode 100644
index 0000000000000000000000000000000000000000..9c12e5d7c5cdcc9d670f0288bdc6002bf541a9b8
Binary files /dev/null and b/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramSequenceDiagram.vsdx differ
diff --git a/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramWireshark.png b/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramWireshark.png
new file mode 100644
index 0000000000000000000000000000000000000000..34e2b468ea32b01f0d057110ff464973d7490df0
Binary files /dev/null and b/assignments/src/src/OpenDis7Examples/ExampleSimulationProgramWireshark.png differ
diff --git a/assignments/src/src/OpenDis7Examples/ExampleTrackInterpolation.java b/assignments/src/src/OpenDis7Examples/ExampleTrackInterpolation.java
new file mode 100644
index 0000000000000000000000000000000000000000..d2e9adb829a8c4b3e0de3ad79f91b47d1f26209f
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/ExampleTrackInterpolation.java
@@ -0,0 +1,260 @@
+/**
+ * Copyright (c) 2008-2022, MOVES Institute, Naval Postgraduate School (NPS). All rights reserved.
+ * This work is provided under a BSD open-source license, see project license.html and license.txt
+ *
+ * @author brutzman@nps.edu
+ */
+package OpenDis7Examples;
+
+import edu.nps.moves.dis7.entities.swe.platform.surface._001Poseidon;
+import edu.nps.moves.dis7.enumerations.ForceID;
+import edu.nps.moves.dis7.pdus.EntityStatePdu;
+import edu.nps.moves.dis7.pdus.Pdu;
+import edu.nps.moves.dis7.pdus.Vector3Double;
+import edu.nps.moves.dis7.utilities.DisChannel;
+import edu.nps.moves.dis7.utilities.DisTime;
+import edu.nps.moves.dis7.utilities.stream.X3dCreateInterpolators;
+import edu.nps.moves.dis7.utilities.stream.X3dCreateLineSet;
+import java.util.ArrayList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * The purpose of this program is to provide an easily modifiable example
+ * simulation for networked entity tracks and presentation, including
+ * DIS-capable entities doing tasks and reporting them to the network.
+ * Default settings include PDU recording turned on by default.
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleTrackInterpolationLog.txt" target="_blank">ExampleTrackInterpolationLog.txt</a>
+ * @see <a href="https://calhoun.nps.edu/handle/10945/65436" target="_blank">REPEATABLE UNIT TESTING OF DISTRIBUTED INTERACTIVE SIMULATION (DIS) PROTOCOL BEHAVIOR STREAMS USING WEB STANDARDS</a> by Tobias Brennenstuhl, Masters Thesis, Naval Postgraduate School (NPS), June 2020
+ * @see <a href="https://gitlab.nps.edu/Savage/SavageTheses/-/tree/master/BrennenstuhlTobias" target="_blank">https://gitlab.nps.edu/Savage/SavageTheses/-/tree/master/BrennenstuhlTobias</a>
+ */
+public class ExampleTrackInterpolation extends ExampleSimulationProgram
+{    
+    /** Default constructor */
+    public ExampleTrackInterpolation()
+    {
+        // default constructor
+    }
+    // -------------------- Begin Variables for X3D autogenerated code
+    private X3dCreateInterpolators x3dInterpolators = new X3dCreateInterpolators();
+    private X3dCreateLineSet       x3dLineSet       = new X3dCreateLineSet();
+    private byte[]                 globalByteBufferForX3dInterpolators = null;
+    // -------------------- End Variables for X3D autogenerated code
+    
+    ArrayList<Pdu> pduSentList = new ArrayList<>();
+    
+    /**
+     * This runSimulationLoops() method is a programmer-modifiable method for
+     * defining and running a new simulation of interest. Welcome! Other parts
+     * of this program handle bookkeeping and plumbing tasks so that you can
+     * focus on your model entities and activities. Expandable support includes
+     * DIS EntityStatePdu, FirePdu and CommentPdu all available for modification
+     * and sending in a simulation loop. Continuous improvement efforts seek to
+     * make this program as easy and straightforward as possible for DIS
+     * simulationists to use and adapt. All of the other methods are setup,
+     * teardown and configuration that you may find interesting, even helpful,
+     * but don't really have to worry about.
+     */
+    @SuppressWarnings("SleepWhileInLoop") // yes we do that
+    @Override // indicates that this method supercedes corresponding superclass method
+    public void runSimulationLoops() 
+    {
+        try
+        {
+            final int SIMULATION_MAX_LOOP_COUNT = 50; // be deliberate out there!  also avoid infinite loops.
+            int simulationLoopCount = 0;        // variable, initialized at 0
+            boolean simulationComplete = false;     // sentinel variable as termination condition, are we done yet?
+
+            // TODO reset Clock Time to today's date and timestamp to zero, providing consistent outputs for each simulation run
+            DisTime.setEpochLvcNow();
+            simulationTimeSeconds = simulationTimeInitial - getSimulationTimeStepDuration(); // pre-initialization for first loop
+        
+            initializeSimulationEntities();
+            
+            // use declared PDU objects and set their values.
+            entityID_1.setSiteID(1).setApplicationID(2).setEntityID(3); // made-up example ID;
+            // TODO someday, use enumerations; is there a unique site triplet for MOVES Institute?
+            
+            disChannel.getPduRecorder().setVerbose(false);
+            disChannel.getPduRecorder().hasVerboseOutput(); // debug check
+
+            EntityStatePdu espdu_1 = pduFactory.makeEntityStatePdu();
+            espdu_1.setEntityID(entityID_1);
+            espdu_1.setForceId(ForceID.FRIENDLY);
+            espdu_1.setEntityType(new _001Poseidon()); // note import statement above
+            espdu_1.setMarking("track path");
+//          espdu_1.clearMarking();     // test
+//          espdu_1.getMarkingString(); // trace
+//          espdu_1.setEntityLocation(new Vector3Double().setX(0).setY(0).setZ(0)); // long form
+            espdu_1.setEntityLocation(0, 0, 0); // utility method
+            
+            float speedEntity_1 = 1.0f; // meters/second
+            EntityStatePdu.Direction directionEntity_1 = EntityStatePdu.Direction.NORTH;
+            
+            PduTrack pduTrack_1 = new PduTrack();
+            pduTrack_1.setDescriptor("testing 123");
+            pduTrack_1.setDefaultWaypointInterval(1.0f); // overrides timestamps
+            pduTrack_1.setAddLineBreaksWithinKeyValues(true);
+            pduTrack_1.setAuthor("Don Brutzman");
+            pduTrack_1.setX3dModelName("ExampleTrackInterpolation.x3d");
+            pduTrack_1.setX3dModelIdentifier("https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleTrackInterpolation.x3d");
+            pduTrack_1.addPdu(espdu_1); // initial location
+            
+            // OK send initial PDUs prior to loop
+            if (disChannel.getPduRecorder().hasVerboseOutput())
+                System.out.println("sending PDUs for simulation step " + simulationLoopCount + ", monitor loopback to confirm sent");
+            disChannel.sendSinglePdu(espdu_1);
+//            sendCommentPdu(timeStepDurationCommentType, narrativeMessage1, narrativeMessage2, narrativeMessage3);
+            pduSentList.add(espdu_1);
+            reportPdu(simulationLoopCount, espdu_1.getEntityLocation(), directionEntity_1);
+
+            // TODO simulation management PDUs for startup, planning to design special class support
+            // ===================================================================================================
+            // loop the simulation while allowed, programmer can set additional conditions to break out and finish
+            while (simulationLoopCount < SIMULATION_MAX_LOOP_COUNT) // are we done yet?
+            {
+                simulationLoopCount++;      // good practice: increment loop counter as first action in that loop
+                simulationTimeSeconds += getSimulationTimeStepDuration(); // good practice: update clock along with loop index
+
+                // =============================================================================================
+                // * your own simulation code starts here! *****************************************************
+                // =============================================================================================
+                //  are there any other variables to modify at the beginning of your loop?
+                // compute a track, update an ESPDU, whatever it is that your model is doing...
+                
+                // Pick direction, change each 10 seconds, traverse a box.  No physics.  Walk a box!
+                if (simulationLoopCount <= 10)
+                    directionEntity_1 = EntityStatePdu.Direction.NORTH;
+                else if (simulationLoopCount <= 20)
+                    directionEntity_1 = EntityStatePdu.Direction.EAST;
+                else if (simulationLoopCount <= 30)
+                    directionEntity_1 = EntityStatePdu.Direction.SOUTH;
+                else // if (simulationLoopCount <= 40)
+                    directionEntity_1 = EntityStatePdu.Direction.WEST;
+                
+                // use utility method to simply update velocity vector using speed value and direction
+                espdu_1.setEntityLinearVelocity(speedEntity_1, directionEntity_1);
+                
+                // Where is my entity?  Insert changes in position; this sample only changes X position.
+                espdu_1.advanceEntityLocation(getSimulationTimeStepDuration());
+
+                // make your reports: narrative code for CommentPdu here (set all to empty strings to avoid sending)
+                narrativeMessage1 = "MV3500 TrackSimulationProgram";
+                narrativeMessage2 = "runSimulation() loop " + simulationLoopCount + " at time " + simulationTimeSeconds;
+                narrativeMessage3 = ""; // intentionally blank for testing
+
+                // your loop termination condition goes here
+                if (simulationLoopCount > 40) // for example
+                {
+                    simulationComplete = true;
+                }
+                // =============================================================================================
+                // * your own simulation code is finished here! ************************************************
+                // =============================================================================================
+
+                // staying synchronized with timestep: wait duration for elapsed time in this loop
+                // Thread.sleep needs a (long) parameter for milliseconds, which are clumsy to use sometimes
+                if (false) // real-time operation or simulation speedup
+                {
+                    Thread.sleep((long) (getSimulationTimeStepDuration() * 1000)); // seconds * (1000 msec/sec) = milliseconds
+                    System.out.println(disChannel.getTRACE_PREFIX() + "Pausing for " + getSimulationTimeStepDuration() + " seconds");
+                }
+
+                // OK now send the status PDUs for this loop, and then continue
+                if (disChannel.getPduRecorder().hasVerboseOutput())
+                    System.out.println("sending PDUs for simulation step " + simulationLoopCount + ", monitor loopback to confirm sent");
+                disChannel.sendSinglePdu(espdu_1);
+                disChannel.sendCommentPdu(DisChannel.COMMENTPDU_SIMULATION_TIMESTEP, narrativeMessage1, narrativeMessage2, narrativeMessage3);
+                if (disChannel.getPduRecorder().hasVerboseOutput())
+                    System.out.println(disChannel.getTRACE_PREFIX() + "PDUs successfully sent for this loop");
+                pduSentList.add(espdu_1);
+                pduTrack_1.addPdu(espdu_1);
+                Vector3Double location = espdu_1.getEntityLocation();
+                reportPdu(simulationLoopCount, location, directionEntity_1);
+                
+                // ===============================
+                // current loop now finished, check whether to terminate if simulation complete, otherwise continue
+                if (simulationComplete || (simulationLoopCount > 10000)) // for example; including fail-safe condition is good
+                {
+                    System.out.println(disChannel.getTRACE_PREFIX() + "loop termination condition met, simulationComplete=" + simulationComplete); // ", final loopCount=" + loopCount +
+                    break;
+                }
+            }   // end of simulation loop
+            // ===================================================================================================
+            System.out.println(disChannel.getTRACE_PREFIX() + "all PDUs successfully sent for this loop (pduSentList.size()=" + pduSentList.size() + " total)");
+            
+            // track analysis
+            System.out.println(disChannel.getTRACE_PREFIX() + "pduTrack_1 initialLocation=" + pduTrack_1.getInitialLocation() + ", latestLocation=" + pduTrack_1.getLatestLocation());
+            pduTrack_1.sortPdus()
+                      .createRawWaypoints();
+            
+            System.out.println("pduTrack_1 getEspduCount()=" + pduTrack_1.getEspduCount());
+            System.out.println("pduTrack_1 duration = " + pduTrack_1.getTotalDurationSeconds() + " seconds = " +
+                                                          pduTrack_1.getTotalDurationTicks() + " ticks");
+            System.out.println("=================================");
+            System.out.println(pduTrack_1.createX3dModel());
+            System.out.println("=================================");
+            
+            narrativeMessage2 = "runSimulation() completed successfully"; // all done
+            disChannel.sendCommentPdu(DisChannel.COMMENTPDU_NARRATIVE, narrativeMessage1, narrativeMessage2, narrativeMessage3);
+            if (disChannel.getPduRecorder().hasVerboseOutput())
+                disChannel.printlnTRACE("final CommentPdu successfully sent for simulation");
+            // TODO simulation management PDUs
+        }
+        catch (InterruptedException iex) // handle any exception that your code might choose to provoke!
+        {
+            Logger.getLogger(ExampleTrackInterpolation.class.getSimpleName()).log(Level.SEVERE, null, iex);
+        }
+    }
+    
+    /**
+     * Report current PDU information to console
+     * @param simulationLoopCount current loop index
+     * @param location current location
+     * @param directionEntity current direction
+     * @return same object to permit progressive setters
+     */
+    public ExampleTrackInterpolation reportPdu(int simulationLoopCount, Vector3Double location, EntityStatePdu.Direction directionEntity)
+    {
+        System.out.println (String.format("%2d ", simulationLoopCount) + "Entity location=(" + 
+                String.format("%4.1f", location.getX()) + ", " +
+                String.format("%4.1f", location.getY()) + ", " + 
+                String.format("%4.1f", location.getZ()) + ") "  +
+                String.format("%-5s",   directionEntity.name())
+//              + " " + espdu_1.getEntityLinearVelocity().toString()
+        );
+        return this;
+    }
+
+    /* Default constructors used unless otherwise defined/overridden.  */
+    /**
+     * Main method is first executed when a program instance is loaded.
+     *
+     * @see
+     * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java
+     * Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @param args command-line arguments are an array of optional String
+     * parameters that are passed from execution environment during invocation
+     */
+    public static void main(String[] args)
+    {
+        thisProgram = new ExampleTrackInterpolation(); // create instance of self within static main() method
+
+        thisProgram.disChannel.printlnTRACE("main() started...");
+        
+        thisProgram.handleArguments (args); // process command-line invocation arguments
+        
+//        thisProgram.disChannel.getPduRecorder().setVerbose(false);
+//        thisProgram.disChannel.setVerboseComments(false);
+//        thisProgram.disChannel.getDisNetworkInterface().setVerbose(false);
+        
+        thisProgram.runSimulationLoops(); // ... your simulation execution code goes in there ...
+        
+        thisProgram.disChannel.tearDownNetworkInterface(); // make sure no processes are left lingering
+        
+        thisProgram.disChannel.printlnTRACE("complete."); // report successful completion
+        
+        System.exit(0); // ensure all threads and sockets released
+    }
+
+}
diff --git a/assignments/src/src/OpenDis7Examples/ExampleTrackInterpolation.x3d b/assignments/src/src/OpenDis7Examples/ExampleTrackInterpolation.x3d
new file mode 100644
index 0000000000000000000000000000000000000000..c275c77bb468fa03002f3911e343b512d2fc56dd
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/ExampleTrackInterpolation.x3d
@@ -0,0 +1,169 @@
+<X3D profile='Interchange' version='4.0' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-4.0.xsd'>
+  <head>
+    <meta content='ExampleTrackInterpolation.x3d' name='title'/>
+    <meta content='Conversion of ESPDU track into X3D animation interpolators and LineSet.' name='description'/>
+    <meta content='1 January 2022' name='created'/>
+    <meta content='30 May 2022' name='modified'/>
+    <meta content='Don Brutzman' name='creator'/>
+    <meta content='https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleTrackInterpolation.x3d' name='identifier'/>
+    <meta content='PduTrack utility, opendis7-java Library https://github.com/open-dis/opendis7-java' name='generator'/>
+    <meta content='NPS MOVES MV3500 Networked Graphics https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500' name='reference'/>
+    <meta content='X3D Resources https://www.web3d.org/x3d/content/examples/X3dResources.html' name='reference'/>
+    <meta content='X3D Scene Authoring Hints https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html' name='reference'/>
+    <meta content='X3D Tooltips https://www.web3d.org/x3d/tooltips/X3dTooltips.html' name='reference'/>
+    <meta content='X3D Validator https://savage.nps.edu/X3dValidator' name='reference'/>
+    <meta content='Open source https://raw.githubusercontent.com/open-dis/opendis7-java/master/license.html' name='license'/>
+  </head>
+  <Scene>
+    <WorldInfo title='PduTrackInterpolation.x3d'/>
+    <TimeSensor DEF='testing123Clock' cycleInterval='42.0' loop='true'/>
+    <PositionInterpolator DEF='testing123Positions' key='0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0 30.0 31.0 32.0 33.0 34.0 35.0 36.0 37.0 38.0 39.0 40.0 41.0' keyValue='
+0.0 0.0 0.0,
+0.0 1.0 0.0,
+0.0 2.0 0.0,
+0.0 3.0 0.0,
+0.0 4.0 0.0,
+0.0 5.0 0.0,
+0.0 6.0 0.0,
+0.0 7.0 0.0,
+0.0 8.0 0.0,
+0.0 9.0 0.0,
+0.0 10.0 0.0,
+1.0 10.0 0.0,
+2.0 10.0 0.0,
+3.0 10.0 0.0,
+4.0 10.0 0.0,
+5.0 10.0 0.0,
+6.0 10.0 0.0,
+7.0 10.0 0.0,
+8.0 10.0 0.0,
+9.0 10.0 0.0,
+10.0 10.0 0.0,
+10.0 9.0 0.0,
+10.0 8.0 0.0,
+10.0 7.0 0.0,
+10.0 6.0 0.0,
+10.0 5.0 0.0,
+10.0 4.0 0.0,
+10.0 3.0 0.0,
+10.0 2.0 0.0,
+10.0 1.0 0.0,
+10.0 0.0 0.0,
+9.0 0.0 0.0,
+8.0 0.0 0.0,
+7.0 0.0 0.0,
+6.0 0.0 0.0,
+5.0 0.0 0.0,
+4.0 0.0 0.0,
+3.0 0.0 0.0,
+2.0 0.0 0.0,
+1.0 0.0 0.0,
+0.0 0.0 0.0,
+-1.0 0.0 0.0'/>
+    <OrientationInterpolator DEF='testing123Orientations' key='0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0 30.0 31.0 32.0 33.0 34.0 35.0 36.0 37.0 38.0 39.0 40.0 41.0' keyValue='
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0'/>
+    <ROUTE fromField='fraction_changed' fromNode='testing123Clock' toField='set_fraction' toNode='testing123Positions'/>
+    <ROUTE fromField='fraction_changed' fromNode='testing123Clock' toField='set_fraction' toNode='testing123Orientations'/>
+    <Shape>
+      <Appearance DEF='TrackAppearance'>
+        <Material emissiveColor='0.2 0.8 0.8'/>
+      </Appearance>
+      <LineSet vertexCount='42'>
+        <Coordinate point='
+0.0 0.0 0.0,
+0.0 1.0 0.0,
+0.0 2.0 0.0,
+0.0 3.0 0.0,
+0.0 4.0 0.0,
+0.0 5.0 0.0,
+0.0 6.0 0.0,
+0.0 7.0 0.0,
+0.0 8.0 0.0,
+0.0 9.0 0.0,
+0.0 10.0 0.0,
+1.0 10.0 0.0,
+2.0 10.0 0.0,
+3.0 10.0 0.0,
+4.0 10.0 0.0,
+5.0 10.0 0.0,
+6.0 10.0 0.0,
+7.0 10.0 0.0,
+8.0 10.0 0.0,
+9.0 10.0 0.0,
+10.0 10.0 0.0,
+10.0 9.0 0.0,
+10.0 8.0 0.0,
+10.0 7.0 0.0,
+10.0 6.0 0.0,
+10.0 5.0 0.0,
+10.0 4.0 0.0,
+10.0 3.0 0.0,
+10.0 2.0 0.0,
+10.0 1.0 0.0,
+10.0 0.0 0.0,
+9.0 0.0 0.0,
+8.0 0.0 0.0,
+7.0 0.0 0.0,
+6.0 0.0 0.0,
+5.0 0.0 0.0,
+4.0 0.0 0.0,
+3.0 0.0 0.0,
+2.0 0.0 0.0,
+1.0 0.0 0.0,
+0.0 0.0 0.0,
+-1.0 0.0 0.0'/>
+      </LineSet>
+    </Shape>
+    <Transform DEF='AnimationTransform'>
+      <Transform rotation='0 0 1 1.57'>
+        <Shape>
+          <Appearance USE='TrackAppearance'/>
+          <Cone bottomRadius='0.5'/>
+        </Shape>
+      </Transform>
+    </Transform>
+    <ROUTE fromField='value_changed' fromNode='testing123Positions' toField='translation' toNode='AnimationTransform'/>
+    <ROUTE fromField='value_changed' fromNode='testing123Orientations' toField='rotation' toNode='AnimationTransform'/>
+  </Scene>
+</X3D>
\ No newline at end of file
diff --git a/assignments/src/src/OpenDis7Examples/ExampleTrackInterpolationFlowchart.png b/assignments/src/src/OpenDis7Examples/ExampleTrackInterpolationFlowchart.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8898ecf8bf05b20d6cd516cc8b5f666aa9c0d22
Binary files /dev/null and b/assignments/src/src/OpenDis7Examples/ExampleTrackInterpolationFlowchart.png differ
diff --git a/assignments/src/src/OpenDis7Examples/ExampleTrackInterpolationLog.txt b/assignments/src/src/OpenDis7Examples/ExampleTrackInterpolationLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..eb51d89da8f07c787f0ab9224ce4da220199c85c
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/ExampleTrackInterpolationLog.txt
@@ -0,0 +1,297 @@
+ant -f C:\\x3d-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=OpenDis7Examples/ExampleTrackInterpolation.java -Drun.class=OpenDis7Examples.ExampleTrackInterpolation run-single
+init:
+Deleting: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+warning: [options] system modules path not set in conjunction with -source 17
+1 warning
+compile-single:
+run-single:
+[DisChannel] thisHostName=IT160907-INFLPP
+[DisChannel ExampleTrackInterpolation] Beginning pdu save to directory ./pduLog
+[PduRecorder ExampleTrackInterpolation] Recorder log file open: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\pduLog\PduCaptureLog.dislog
+[DisThreadedNetworkInterface] using network interface PANGP Virtual Ethernet Adapter Secure
+[DisThreadedNetworkInterface] datagramSocket.joinGroup  address=239.1.2.3 port=3000 isConnected()=false createDatagramSocket() complete.
+[DisThreadedNetworkInterface] createThreads() sendingThread.isAlive()=true
+[DisThreadedNetworkInterface] createThreads() receiveThread.isAlive()=true
+[PduRecorder ExampleTrackInterpolation] listening to IP address 239.1.2.3 on port 3000
+[DisChannel ExampleTrackInterpolation] Network confirmation: address=239.1.2.3 port=3000
+[DisChannel ExampleTrackInterpolation] just checking: disChannel.getNetworkAddress()=239.1.2.3, getNetworkPort()=3000
+[DisChannel ExampleTrackInterpolation] just checking: hasVerboseSending()=true, hasVerboseReceipt()=true
+[DisThreadedNetworkInterface ExampleTrackInterpolation] [sending  1] DisPduType 11 CREATE_ENTITY, size 28 bytes)
+[DisThreadedNetworkInterface ExampleTrackInterpolation] [sending  2] DisPduType 11 CREATE_ENTITY, size 28 bytes)
+[DisThreadedNetworkInterface ExampleTrackInterpolation] [receipt  1] DisPduType 11 CREATE_ENTITY, size 28 bytes)
+[DisThreadedNetworkInterface ExampleTrackInterpolation] [sending  3] DisPduType 22 COMMENT, size 80 bytes)
+[DisThreadedNetworkInterface ExampleTrackInterpolation] [receipt  2] DisPduType 11 CREATE_ENTITY, size 28 bytes)
+[DisThreadedNetworkInterface ExampleTrackInterpolation] [receipt  3] DisPduType 22 COMMENT, size 80 bytes)
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [Simulation timestep duration 1.0 seconds]
+[DisChannel ExampleTrackInterpolation] main() started...
+ 0 Entity location=( 0.0,  0.0,  0.0) NORTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 1 at time 0.0]
+ 1 Entity location=( 0.0,  1.0,  0.0) NORTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 2 at time 1.0]
+ 2 Entity location=( 0.0,  2.0,  0.0) NORTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 3 at time 2.0]
+ 3 Entity location=( 0.0,  3.0,  0.0) NORTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 4 at time 3.0]
+ 4 Entity location=( 0.0,  4.0,  0.0) NORTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 5 at time 4.0]
+ 5 Entity location=( 0.0,  5.0,  0.0) NORTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 6 at time 5.0]
+ 6 Entity location=( 0.0,  6.0,  0.0) NORTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 7 at time 6.0]
+ 7 Entity location=( 0.0,  7.0,  0.0) NORTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 8 at time 7.0]
+ 8 Entity location=( 0.0,  8.0,  0.0) NORTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 9 at time 8.0]
+ 9 Entity location=( 0.0,  9.0,  0.0) NORTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 10 at time 9.0]
+10 Entity location=( 0.0, 10.0,  0.0) NORTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 11 at time 10.0]
+11 Entity location=( 1.0, 10.0,  0.0) EAST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 12 at time 11.0]
+12 Entity location=( 2.0, 10.0,  0.0) EAST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 13 at time 12.0]
+13 Entity location=( 3.0, 10.0,  0.0) EAST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 14 at time 13.0]
+14 Entity location=( 4.0, 10.0,  0.0) EAST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 15 at time 14.0]
+15 Entity location=( 5.0, 10.0,  0.0) EAST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 16 at time 15.0]
+16 Entity location=( 6.0, 10.0,  0.0) EAST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 17 at time 16.0]
+17 Entity location=( 7.0, 10.0,  0.0) EAST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 18 at time 17.0]
+18 Entity location=( 8.0, 10.0,  0.0) EAST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 19 at time 18.0]
+19 Entity location=( 9.0, 10.0,  0.0) EAST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 20 at time 19.0]
+20 Entity location=(10.0, 10.0,  0.0) EAST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 21 at time 20.0]
+21 Entity location=(10.0,  9.0,  0.0) SOUTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 22 at time 21.0]
+22 Entity location=(10.0,  8.0,  0.0) SOUTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 23 at time 22.0]
+23 Entity location=(10.0,  7.0,  0.0) SOUTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 24 at time 23.0]
+24 Entity location=(10.0,  6.0,  0.0) SOUTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 25 at time 24.0]
+25 Entity location=(10.0,  5.0,  0.0) SOUTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 26 at time 25.0]
+26 Entity location=(10.0,  4.0,  0.0) SOUTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 27 at time 26.0]
+27 Entity location=(10.0,  3.0,  0.0) SOUTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 28 at time 27.0]
+28 Entity location=(10.0,  2.0,  0.0) SOUTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 29 at time 28.0]
+29 Entity location=(10.0,  1.0,  0.0) SOUTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 30 at time 29.0]
+30 Entity location=(10.0,  0.0,  0.0) SOUTH
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 31 at time 30.0]
+31 Entity location=( 9.0,  0.0,  0.0) WEST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 32 at time 31.0]
+32 Entity location=( 8.0,  0.0,  0.0) WEST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 33 at time 32.0]
+33 Entity location=( 7.0,  0.0,  0.0) WEST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 34 at time 33.0]
+34 Entity location=( 6.0,  0.0,  0.0) WEST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 35 at time 34.0]
+35 Entity location=( 5.0,  0.0,  0.0) WEST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 36 at time 35.0]
+36 Entity location=( 4.0,  0.0,  0.0) WEST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 37 at time 36.0]
+37 Entity location=( 3.0,  0.0,  0.0) WEST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 38 at time 37.0]
+38 Entity location=( 2.0,  0.0,  0.0) WEST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 39 at time 38.0]
+39 Entity location=( 1.0,  0.0,  0.0) WEST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 40 at time 39.0]
+40 Entity location=( 0.0,  0.0,  0.0) WEST 
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu APPLICATION_TIMESTEP] [MV3500 TrackSimulationProgram, runSimulation() loop 41 at time 40.0]
+41 Entity location=(-1.0,  0.0,  0.0) WEST 
+[DisChannel ExampleTrackInterpolation] loop termination condition met, simulationComplete=true
+[DisChannel ExampleTrackInterpolation] all PDUs successfully sent for this loop (pduSentList.size()=42 total)
+[DisChannel ExampleTrackInterpolation] pduTrack_1 initialLocation=Vector3Double x:0.0 y:0.0 z:0.0, latestLocation=Vector3Double x:-1.0 y:0.0 z:0.0
+pduTrack_1 getEspduCount()=42
+pduTrack_1 duration = 42.0 seconds = 0 ticks
+=================================
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 4.0//EN" "https://www.web3d.org/specifications/x3d-4.0.dtd">
+<X3D profile='Interchange' version='4.0' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-4.0.xsd'>
+  <head>
+    <meta content='ExampleTrackInterpolation.x3d' name='title'/>
+    <meta content='Conversion of ESPDU track into X3D animation interpolators and LineSet.' name='description'/>
+    <meta content='1 January 2022' name='created'/>
+    <meta content='21 December 2023' name='modified'/>
+    <meta content='Don Brutzman' name='creator'/>
+    <meta content='https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleTrackInterpolation.x3d' name='identifier'/>
+    <meta content='PduTrack utility, opendis7-java Library https://github.com/open-dis/opendis7-java' name='generator'/>
+    <meta content='NPS MOVES MV3500 Networked Graphics https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500' name='reference'/>
+    <meta content='X3D Resources https://www.web3d.org/x3d/content/examples/X3dResources.html' name='reference'/>
+    <meta content='X3D Scene Authoring Hints https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html' name='reference'/>
+    <meta content='X3D Tooltips https://www.web3d.org/x3d/tooltips/X3dTooltips.html' name='reference'/>
+    <meta content='X3D Validator https://savage.nps.edu/X3dValidator' name='reference'/>
+    <meta content='Open source https://raw.githubusercontent.com/open-dis/opendis7-java/master/license.html' name='license'/>
+  </head>
+  <Scene>
+    <WorldInfo title='PduTrackInterpolation.x3d'/>
+    <TimeSensor DEF='testing123Clock' cycleInterval='42.0' loop='true'/>
+    <PositionInterpolator DEF='testing123Positions' key='0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0 30.0 31.0 32.0 33.0 34.0 35.0 36.0 37.0 38.0 39.0 40.0 41.0' keyValue='
+0.0 0.0 0.0,
+0.0 1.0 0.0,
+0.0 2.0 0.0,
+0.0 3.0 0.0,
+0.0 4.0 0.0,
+0.0 5.0 0.0,
+0.0 6.0 0.0,
+0.0 7.0 0.0,
+0.0 8.0 0.0,
+0.0 9.0 0.0,
+0.0 10.0 0.0,
+1.0 10.0 0.0,
+2.0 10.0 0.0,
+3.0 10.0 0.0,
+4.0 10.0 0.0,
+5.0 10.0 0.0,
+6.0 10.0 0.0,
+7.0 10.0 0.0,
+8.0 10.0 0.0,
+9.0 10.0 0.0,
+10.0 10.0 0.0,
+10.0 9.0 0.0,
+10.0 8.0 0.0,
+10.0 7.0 0.0,
+10.0 6.0 0.0,
+10.0 5.0 0.0,
+10.0 4.0 0.0,
+10.0 3.0 0.0,
+10.0 2.0 0.0,
+10.0 1.0 0.0,
+10.0 0.0 0.0,
+9.0 0.0 0.0,
+8.0 0.0 0.0,
+7.0 0.0 0.0,
+6.0 0.0 0.0,
+5.0 0.0 0.0,
+4.0 0.0 0.0,
+3.0 0.0 0.0,
+2.0 0.0 0.0,
+1.0 0.0 0.0,
+0.0 0.0 0.0,
+-1.0 0.0 0.0'/>
+    <OrientationInterpolator DEF='testing123Orientations' key='0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0 30.0 31.0 32.0 33.0 34.0 35.0 36.0 37.0 38.0 39.0 40.0 41.0' keyValue='
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0,
+0.0 1.0 0.0 0.0'/>
+    <ROUTE fromField='fraction_changed' fromNode='testing123Clock' toField='set_fraction' toNode='testing123Positions'/>
+    <ROUTE fromField='fraction_changed' fromNode='testing123Clock' toField='set_fraction' toNode='testing123Orientations'/>
+    <Shape>
+      <Appearance DEF='TrackAppearance'>
+        <Material emissiveColor='0.2 0.8 0.8'/>
+      </Appearance>
+      <LineSet vertexCount='42'>
+        <Coordinate point='
+0.0 0.0 0.0,
+0.0 1.0 0.0,
+0.0 2.0 0.0,
+0.0 3.0 0.0,
+0.0 4.0 0.0,
+0.0 5.0 0.0,
+0.0 6.0 0.0,
+0.0 7.0 0.0,
+0.0 8.0 0.0,
+0.0 9.0 0.0,
+0.0 10.0 0.0,
+1.0 10.0 0.0,
+2.0 10.0 0.0,
+3.0 10.0 0.0,
+4.0 10.0 0.0,
+5.0 10.0 0.0,
+6.0 10.0 0.0,
+7.0 10.0 0.0,
+8.0 10.0 0.0,
+9.0 10.0 0.0,
+10.0 10.0 0.0,
+10.0 9.0 0.0,
+10.0 8.0 0.0,
+10.0 7.0 0.0,
+10.0 6.0 0.0,
+10.0 5.0 0.0,
+10.0 4.0 0.0,
+10.0 3.0 0.0,
+10.0 2.0 0.0,
+10.0 1.0 0.0,
+10.0 0.0 0.0,
+9.0 0.0 0.0,
+8.0 0.0 0.0,
+7.0 0.0 0.0,
+6.0 0.0 0.0,
+5.0 0.0 0.0,
+4.0 0.0 0.0,
+3.0 0.0 0.0,
+2.0 0.0 0.0,
+1.0 0.0 0.0,
+0.0 0.0 0.0,
+-1.0 0.0 0.0'/>
+      </LineSet>
+    </Shape>
+    <Transform DEF='AnimationTransform'>
+      <Transform rotation='0 0 1 1.57'>
+        <Shape>
+          <Appearance USE='TrackAppearance'/>
+          <Cone bottomRadius='0.5'/>
+        </Shape>
+      </Transform>
+    </Transform>
+    <ROUTE fromField='value_changed' fromNode='testing123Positions' toField='translation' toNode='AnimationTransform'/>
+    <ROUTE fromField='value_changed' fromNode='testing123Orientations' toField='rotation' toNode='AnimationTransform'/>
+  </Scene>
+</X3D>
+
+=================================
+[DisChannel ExampleTrackInterpolation] *** [CommentPdu COMPLETE_EVENT_REPORT] [MV3500 TrackSimulationProgram, runSimulation() completed successfully]
+
+PduRecorder.stop() closing recorder log file:
+   C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\pduLog\PduCaptureLog.dislog
+[DisChannel ExampleTrackInterpolation] complete.
+BUILD SUCCESSFUL (total time: 14 seconds)
diff --git a/assignments/src/src/OpenDis7Examples/ExampleTrackInterpolationPduCaptureLog.dislog b/assignments/src/src/OpenDis7Examples/ExampleTrackInterpolationPduCaptureLog.dislog
new file mode 100644
index 0000000000000000000000000000000000000000..91da4fe59543b1dede936ac1c9c2e76af040f476
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/ExampleTrackInterpolationPduCaptureLog.dislog
@@ -0,0 +1,178 @@
+# Start, ENCODING_PLAINTEXT, [PduRecorder] 20220625_204753, DIS capture file, .\pduLog\PduCaptureLog.dislog
+# Timestamp(8 bytes),ProtocolVersion,CompatibilityVersion,ExerciseID,PduType,PduStatus,HeaderLength,PduLength,then PDU-specific data
+# =============================================
+# DisPduType 11 CREATE_ENTITY, Session time 20:47:53.3, session duration 00:00:00.0, Pdu timestamp -866966591 15:56:49.0, simulation stream interval 0 00:00:00.0
+0,0,68,24,-51,-31,-114,-59,7,4,11,5,-52,83,35,-63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 11 CREATE_ENTITY, Session time 20:47:53.3, session duration 00:00:00.0, Pdu timestamp -866966591 15:56:49.0, simulation stream interval 0 00:00:00.0
+0,0,0,0,0,94,-65,-36,7,4,11,5,-52,83,35,-63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:53.3, session duration 00:00:00.0, Pdu timestamp 0 00:00:00.0, simulation stream interval 866966591 08:03:11.0
+0,0,0,0,0,110,-124,-108,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-81,-46,0,0,1,64,83,105,109,117,108,97,116,105,111,110,32,116,105,109,101,115,116,101,112,32,100,117,114,97,116,105,111,110,32,49,46,48,32,115,101,99,111,110,100,115
+# DisPduType 01 ENTITY_STATE, Session time 20:47:53.4, session duration 00:00:00.1, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,8,49,-107,64,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:53.5, session duration 00:00:00.2, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,14,-56,97,-112,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:53.6, session duration 00:00:00.3, Pdu timestamp 0 00:00:00.0, simulation stream interval 866966591 08:03:11.0
+0,0,0,0,21,-92,-118,-124,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,16,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,49,32,97,116,32,116,105,109,101,32,48,46,48,0,0,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:53.7, session duration 00:00:00.4, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,28,47,-72,56,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:53.9, session duration 00:00:00.5, Pdu timestamp 0 00:00:00.0, simulation stream interval 866966591 08:03:11.0
+0,0,0,0,34,-107,-119,20,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,16,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,50,32,97,116,32,116,105,109,101,32,49,46,48,0,0,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:54.0, session duration 00:00:00.6, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,41,31,112,56,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:54.1, session duration 00:00:00.7, Pdu timestamp 1 00:00:01.0, simulation stream interval 866966592 08:03:12.0
+0,0,0,0,47,125,125,-8,7,1,22,5,0,0,0,1,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,16,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,51,32,97,116,32,116,105,109,101,32,50,46,48,0,0,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:54.2, session duration 00:00:00.9, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,54,11,26,84,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:54.3, session duration 00:00:01.0, Pdu timestamp 1 00:00:01.0, simulation stream interval 866966592 08:03:12.0
+0,0,0,0,60,98,-17,-128,7,1,22,5,0,0,0,1,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,16,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,52,32,97,116,32,116,105,109,101,32,51,46,48,0,0,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:54.4, session duration 00:00:01.1, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,66,-26,43,56,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:54.5, session duration 00:00:01.2, Pdu timestamp 2 00:00:02.0, simulation stream interval 866966593 08:03:13.0
+0,0,0,0,73,95,-44,-116,7,1,22,5,0,0,0,2,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,16,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,53,32,97,116,32,116,105,109,101,32,52,46,48,0,0,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:54.6, session duration 00:00:01.3, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,79,-5,107,8,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:54.7, session duration 00:00:01.4, Pdu timestamp 2 00:00:02.0, simulation stream interval 866966593 08:03:13.0
+0,0,0,0,86,113,-29,-12,7,1,22,5,0,0,0,2,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,16,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,54,32,97,116,32,116,105,109,101,32,53,46,48,0,0,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:54.8, session duration 00:00:01.5, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,92,-20,94,68,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:54.9, session duration 00:00:01.6, Pdu timestamp 3 00:00:03.0, simulation stream interval 866966594 08:03:14.0
+0,0,0,0,99,87,-26,104,7,1,22,5,0,0,0,3,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,16,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,55,32,97,116,32,116,105,109,101,32,54,46,48,0,0,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:55.1, session duration 00:00:01.7, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,106,8,-31,16,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:55.2, session duration 00:00:01.8, Pdu timestamp 3 00:00:03.0, simulation stream interval 866966594 08:03:14.0
+0,0,0,0,112,99,126,-68,7,1,22,5,0,0,0,3,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,16,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,56,32,97,116,32,116,105,109,101,32,55,46,48,0,0,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:55.3, session duration 00:00:01.9, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,119,0,-33,-48,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:55.4, session duration 00:00:02.1, Pdu timestamp 3 00:00:03.0, simulation stream interval 866966594 08:03:14.0
+0,0,0,0,125,-120,-29,-64,7,1,22,5,0,0,0,3,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,16,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,57,32,97,116,32,116,105,109,101,32,56,46,48,0,0,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:55.5, session duration 00:00:02.2, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,-124,9,15,124,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:55.6, session duration 00:00:02.3, Pdu timestamp 4 00:00:04.0, simulation stream interval 866966595 08:03:15.0
+0,0,0,0,-118,108,83,56,7,1,22,5,0,0,0,4,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,24,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,49,48,32,97,116,32,116,105,109,101,32,57,46,48,0,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:55.7, session duration 00:00:02.4, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,-112,-22,97,40,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,63,-16,0,0,0,0,0,0,64,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:55.8, session duration 00:00:02.5, Pdu timestamp 4 00:00:04.0, simulation stream interval 866966595 08:03:15.0
+0,0,0,0,-105,100,-125,48,7,1,22,5,0,0,0,4,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,49,49,32,97,116,32,116,105,109,101,32,49,48,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:55.9, session duration 00:00:02.6, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,-99,-48,47,-88,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,64,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:56.0, session duration 00:00:02.7, Pdu timestamp 5 00:00:05.0, simulation stream interval 866966596 08:03:16.0
+0,0,0,0,-92,78,42,-40,7,1,22,5,0,0,0,5,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,49,50,32,97,116,32,116,105,109,101,32,49,49,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:56.1, session duration 00:00:02.8, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,-86,-50,21,-68,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,64,8,0,0,0,0,0,0,64,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:56.3, session duration 00:00:02.9, Pdu timestamp 5 00:00:05.0, simulation stream interval 866966596 08:03:16.0
+0,0,0,0,-79,103,10,100,7,1,22,5,0,0,0,5,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,49,51,32,97,116,32,116,105,109,101,32,49,50,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:56.4, session duration 00:00:03.0, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,-73,-47,81,112,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,64,16,0,0,0,0,0,0,64,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:56.5, session duration 00:00:03.1, Pdu timestamp 6 00:00:06.0, simulation stream interval 866966597 08:03:17.0
+0,0,0,0,-66,38,14,108,7,1,22,5,0,0,0,6,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,49,52,32,97,116,32,116,105,109,101,32,49,51,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:56.6, session duration 00:00:03.2, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,-60,-97,-21,-76,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,64,20,0,0,0,0,0,0,64,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:56.7, session duration 00:00:03.4, Pdu timestamp 6 00:00:06.0, simulation stream interval 866966597 08:03:17.0
+0,0,0,0,-53,8,109,60,7,1,22,5,0,0,0,6,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,49,53,32,97,116,32,116,105,109,101,32,49,52,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:56.8, session duration 00:00:03.5, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,-47,-82,-117,108,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,64,24,0,0,0,0,0,0,64,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:56.9, session duration 00:00:03.6, Pdu timestamp 7 00:00:07.0, simulation stream interval 866966598 08:03:18.0
+0,0,0,0,-40,6,-105,-84,7,1,22,5,0,0,0,7,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,49,54,32,97,116,32,116,105,109,101,32,49,53,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:57.0, session duration 00:00:03.7, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,-34,-79,-85,0,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,64,28,0,0,0,0,0,0,64,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:57.1, session duration 00:00:03.8, Pdu timestamp 7 00:00:07.0, simulation stream interval 866966598 08:03:18.0
+0,0,0,0,-27,58,-119,76,7,1,22,5,0,0,0,7,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,49,55,32,97,116,32,116,105,109,101,32,49,54,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:57.2, session duration 00:00:03.9, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,-21,-80,78,36,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,64,32,0,0,0,0,0,0,64,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:57.3, session duration 00:00:04.0, Pdu timestamp 7 00:00:07.0, simulation stream interval 866966598 08:03:18.0
+0,0,0,0,-14,29,-38,76,7,1,22,5,0,0,0,7,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,49,56,32,97,116,32,116,105,109,101,32,49,55,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:57.4, session duration 00:00:04.1, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,0,-8,-97,-104,-60,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,64,34,0,0,0,0,0,0,64,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:57.6, session duration 00:00:04.2, Pdu timestamp 8 00:00:08.0, simulation stream interval 866966599 08:03:19.0
+0,0,0,0,-1,39,-49,24,7,1,22,5,0,0,0,8,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,49,57,32,97,116,32,116,105,109,101,32,49,56,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:57.7, session duration 00:00:04.3, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,5,-72,-92,16,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,63,-128,0,0,0,0,0,0,0,0,0,0,64,36,0,0,0,0,0,0,64,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:57.8, session duration 00:00:04.5, Pdu timestamp 8 00:00:08.0, simulation stream interval 866966599 08:03:19.0
+0,0,0,1,12,67,-53,-24,7,1,22,5,0,0,0,8,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,50,48,32,97,116,32,116,105,109,101,32,49,57,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:57.9, session duration 00:00:04.6, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,18,-34,101,68,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,-65,-128,0,0,0,0,0,0,64,36,0,0,0,0,0,0,64,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:58.0, session duration 00:00:04.7, Pdu timestamp 9 00:00:09.0, simulation stream interval 866966600 08:03:20.0
+0,0,0,1,25,103,79,-84,7,1,22,5,0,0,0,9,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,50,49,32,97,116,32,116,105,109,101,32,50,48,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:58.1, session duration 00:00:04.8, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,32,31,86,60,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,-65,-128,0,0,0,0,0,0,64,36,0,0,0,0,0,0,64,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:58.2, session duration 00:00:04.9, Pdu timestamp 9 00:00:09.0, simulation stream interval 866966600 08:03:20.0
+0,0,0,1,38,-86,23,-68,7,1,22,5,0,0,0,9,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,50,50,32,97,116,32,116,105,109,101,32,50,49,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:58.3, session duration 00:00:05.0, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,45,53,-119,104,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,-65,-128,0,0,0,0,0,0,64,36,0,0,0,0,0,0,64,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:58.4, session duration 00:00:05.1, Pdu timestamp 10 00:00:10.0, simulation stream interval 866966601 08:03:21.0
+0,0,0,1,51,-81,63,-96,7,1,22,5,0,0,0,10,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,50,51,32,97,116,32,116,105,109,101,32,50,50,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:58.5, session duration 00:00:05.2, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,58,71,62,48,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,-65,-128,0,0,0,0,0,0,64,36,0,0,0,0,0,0,64,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:58.7, session duration 00:00:05.3, Pdu timestamp 10 00:00:10.0, simulation stream interval 866966601 08:03:21.0
+0,0,0,1,64,-59,-10,112,7,1,22,5,0,0,0,10,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,50,52,32,97,116,32,116,105,109,101,32,50,51,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:58.8, session duration 00:00:05.4, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,71,39,-68,36,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,-65,-128,0,0,0,0,0,0,64,36,0,0,0,0,0,0,64,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:58.9, session duration 00:00:05.5, Pdu timestamp 10 00:00:10.0, simulation stream interval 866966601 08:03:21.0
+0,0,0,1,77,-60,98,-128,7,1,22,5,0,0,0,10,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,50,53,32,97,116,32,116,105,109,101,32,50,52,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:59.0, session duration 00:00:05.7, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,84,99,92,-112,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,-65,-128,0,0,0,0,0,0,64,36,0,0,0,0,0,0,64,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:59.1, session duration 00:00:05.8, Pdu timestamp 11 00:00:11.0, simulation stream interval 866966602 08:03:22.0
+0,0,0,1,90,-51,-125,48,7,1,22,5,0,0,0,11,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,50,54,32,97,116,32,116,105,109,101,32,50,53,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:59.2, session duration 00:00:05.9, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,97,60,104,-88,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,-65,-128,0,0,0,0,0,0,64,36,0,0,0,0,0,0,64,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:59.3, session duration 00:00:06.0, Pdu timestamp 11 00:00:11.0, simulation stream interval 866966602 08:03:22.0
+0,0,0,1,103,-94,95,4,7,1,22,5,0,0,0,11,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,50,55,32,97,116,32,116,105,109,101,32,50,54,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:59.4, session duration 00:00:06.1, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,110,34,-40,-32,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,-65,-128,0,0,0,0,0,0,64,36,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:59.5, session duration 00:00:06.2, Pdu timestamp 12 00:00:12.0, simulation stream interval 866966603 08:03:23.0
+0,0,0,1,116,-85,-76,12,7,1,22,5,0,0,0,12,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,50,56,32,97,116,32,116,105,109,101,32,50,55,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:59.6, session duration 00:00:06.3, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,123,71,-126,0,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,-65,-128,0,0,0,0,0,0,64,36,0,0,0,0,0,0,63,-16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:47:59.7, session duration 00:00:06.4, Pdu timestamp 12 00:00:12.0, simulation stream interval 866966603 08:03:23.0
+0,0,0,1,-127,-43,35,-44,7,1,22,5,0,0,0,12,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,50,57,32,97,116,32,116,105,109,101,32,50,56,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:47:59.9, session duration 00:00:06.5, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,-120,111,23,-112,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,-65,-128,0,0,0,0,0,0,64,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:48:00.0, session duration 00:00:06.6, Pdu timestamp 13 00:00:13.0, simulation stream interval 866966604 08:03:24.0
+0,0,0,1,-114,-32,-86,-108,7,1,22,5,0,0,0,13,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,51,48,32,97,116,32,116,105,109,101,32,50,57,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:48:00.1, session duration 00:00:06.8, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,-107,102,-7,104,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,-65,-128,0,0,0,0,0,0,0,0,0,0,64,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:48:00.2, session duration 00:00:06.9, Pdu timestamp 13 00:00:13.0, simulation stream interval 866966604 08:03:24.0
+0,0,0,1,-101,-21,59,-96,7,1,22,5,0,0,0,13,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,51,49,32,97,116,32,116,105,109,101,32,51,48,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:48:00.3, session duration 00:00:07.0, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,-94,125,49,-88,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,-65,-128,0,0,0,0,0,0,0,0,0,0,64,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:48:00.4, session duration 00:00:07.1, Pdu timestamp 14 00:00:14.0, simulation stream interval 866966605 08:03:25.0
+0,0,0,1,-88,-11,-19,-32,7,1,22,5,0,0,0,14,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,51,50,32,97,116,32,116,105,109,101,32,51,49,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:48:00.5, session duration 00:00:07.2, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,-81,-121,11,-128,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,-65,-128,0,0,0,0,0,0,0,0,0,0,64,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:48:00.6, session duration 00:00:07.3, Pdu timestamp 14 00:00:14.0, simulation stream interval 866966605 08:03:25.0
+0,0,0,1,-74,17,5,0,7,1,22,5,0,0,0,14,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,51,51,32,97,116,32,116,105,109,101,32,51,50,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:48:00.7, session duration 00:00:07.4, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,-68,-97,-18,-12,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,-65,-128,0,0,0,0,0,0,0,0,0,0,64,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:48:00.8, session duration 00:00:07.5, Pdu timestamp 14 00:00:14.0, simulation stream interval 866966605 08:03:25.0
+0,0,0,1,-61,26,-52,124,7,1,22,5,0,0,0,14,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,51,52,32,97,116,32,116,105,109,101,32,51,51,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:48:01.0, session duration 00:00:07.6, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,-55,-84,45,76,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,-65,-128,0,0,0,0,0,0,0,0,0,0,64,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:48:01.1, session duration 00:00:07.7, Pdu timestamp 15 00:00:15.0, simulation stream interval 866966606 08:03:26.0
+0,0,0,1,-48,10,49,72,7,1,22,5,0,0,0,15,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,51,53,32,97,116,32,116,105,109,101,32,51,52,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:48:01.2, session duration 00:00:07.8, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,-42,-123,87,-36,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,-65,-128,0,0,0,0,0,0,0,0,0,0,64,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:48:01.3, session duration 00:00:08.0, Pdu timestamp 15 00:00:15.0, simulation stream interval 866966606 08:03:26.0
+0,0,0,1,-35,19,10,124,7,1,22,5,0,0,0,15,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,51,54,32,97,116,32,116,105,109,101,32,51,53,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:48:01.4, session duration 00:00:08.1, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,-29,-128,86,48,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,-65,-128,0,0,0,0,0,0,0,0,0,0,64,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:48:01.5, session duration 00:00:08.2, Pdu timestamp 16 00:00:16.0, simulation stream interval 866966607 08:03:27.0
+0,0,0,1,-23,-3,-42,84,7,1,22,5,0,0,0,16,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,51,55,32,97,116,32,116,105,109,101,32,51,54,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:48:01.6, session duration 00:00:08.3, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,-16,-82,48,12,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,-65,-128,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:48:01.7, session duration 00:00:08.4, Pdu timestamp 16 00:00:16.0, simulation stream interval 866966607 08:03:27.0
+0,0,0,1,-9,54,-27,-72,7,1,22,5,0,0,0,16,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,51,56,32,97,116,32,116,105,109,101,32,51,55,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:48:01.8, session duration 00:00:08.5, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,1,-3,-66,3,-8,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,-65,-128,0,0,0,0,0,0,0,0,0,0,63,-16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:48:01.9, session duration 00:00:08.6, Pdu timestamp 17 00:00:17.0, simulation stream interval 866966608 08:03:28.0
+0,0,0,2,4,57,-79,-76,7,1,22,5,0,0,0,17,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,51,57,32,97,116,32,116,105,109,101,32,51,56,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:48:02.0, session duration 00:00:08.7, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,2,10,-31,-20,-124,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,-65,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:48:02.2, session duration 00:00:08.8, Pdu timestamp 17 00:00:17.0, simulation stream interval 866966608 08:03:28.0
+0,0,0,2,17,60,-68,-8,7,1,22,5,0,0,0,17,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,52,48,32,97,116,32,116,105,109,101,32,51,57,46,48,0,0,0,0
+# DisPduType 01 ENTITY_STATE, Session time 20:48:02.3, session duration 00:00:08.9, Pdu timestamp 1193 00:19:53.0, simulation stream interval 866967784 08:23:04.0
+0,0,0,2,23,-62,-7,-44,7,1,1,1,0,0,4,-87,0,-112,40,0,0,1,0,2,0,3,1,0,1,3,0,-51,62,2,1,0,0,0,0,-31,0,0,0,0,-65,-128,0,0,0,0,0,0,0,0,0,0,-65,-16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,116,114,97,99,107,32,112,97,116,104,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:48:02.4, session duration 00:00:09.0, Pdu timestamp 17 00:00:17.0, simulation stream interval 866966608 08:03:28.0
+0,0,0,2,30,60,-95,-104,7,1,22,5,0,0,0,17,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,-81,-46,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,0,-81,-46,0,0,1,32,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,52,49,32,97,116,32,116,105,109,101,32,52,48,46,48,0,0,0,0
+# DisPduType 22 COMMENT, Session time 20:48:02.5, session duration 00:00:09.2, Pdu timestamp 18 00:00:18.0, simulation stream interval 866966609 08:03:29.0
+0,0,0,2,37,111,-20,104,7,1,22,5,0,0,0,18,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,9,90,-90,0,0,0,-24,77,86,51,53,48,48,32,84,114,97,99,107,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,0,0,9,90,-90,0,0,1,48,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,99,111,109,112,108,101,116,101,100,32,115,117,99,99,101,115,115,102,117,108,108,121,0,0
+# Finish, ENCODING_PLAINTEXT, [PduRecorder] 20220625_204804, DIS capture file, .\pduLog\PduCaptureLog.dislog
diff --git a/assignments/src/src/OpenDis7Examples/PduListenerSaver.java b/assignments/src/src/OpenDis7Examples/PduListenerSaver.java
new file mode 100644
index 0000000000000000000000000000000000000000..c70305435c72512a91d9e52f68f569c0969a215e
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/PduListenerSaver.java
@@ -0,0 +1,137 @@
+/**
+ * Copyright (c) 2008-2022, MOVES Institute, Naval Postgraduate School (NPS). All rights reserved.
+ * This work is provided under a BSD open-source license, see project license.html and license.txt
+ */
+package OpenDis7Examples;
+
+import edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface;
+import edu.nps.moves.dis7.utilities.stream.PduRecorder;
+import java.util.Scanner;
+
+/** Class to leverage the {@link edu.nps.moves.dis7.utilities.stream.PduRecorder} 
+ * with PDU log saving console controls for resume, pause and quit.
+ * 
+ * PduSaver.java created on Aug 21, 2019
+ * Renamed PduListenerSaver
+ * MOVES Institute Naval Postgraduate School, Monterey, CA, USA www.nps.edu
+ *
+ * @author Mike Bailey, jmbailey@nps.edu
+ * @version $Id$
+ */
+public class PduListenerSaver
+{
+    private final static String DEFAULT_OUTPUT_DIRECTORY = "pduLog";
+    
+    /** Default multicast group address <code>229.1.2.3</code> for send and receive connections.
+     * @see <a href="https://en.wikipedia.org/wiki/Multicast_address" target="_blank">https://en.wikipedia.org/wiki/Multicast_address</a>  */
+    public static String DEFAULT_DIS_ADDRESS = DisThreadedNetworkInterface.DEFAULT_DIS_ADDRESS;
+
+    /** Default socket port  <code>3000</code>, matches Wireshark DIS capture default
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+    public static int DEFAULT_DIS_PORT = DisThreadedNetworkInterface.DEFAULT_DIS_PORT;
+
+    private enum mystate
+    {
+        RUNNING,
+        PAUSED;
+    }
+    private String  disAddress; 
+    private int     disPort;
+
+    /**
+     * Object constructor using default multicast address and port
+     */
+    public PduListenerSaver()
+    {
+        this(DEFAULT_DIS_ADDRESS, DEFAULT_DIS_PORT);
+    }
+    
+    /**
+     * Object constructor using specified multicast address and port 
+     * @param address the multicast group or unicast address to utilize
+     * @param port the multicast port to utilize
+     */
+    public PduListenerSaver(String address, int port)
+    {
+        disAddress = address;
+        disPort    = port;
+    }
+    
+    /**
+     * Command-line invocation (CLI), execution starts here
+     * @param args command-line arguments
+     */
+    public static void main(String[] args)
+    {
+        String  outputDirectory = DEFAULT_OUTPUT_DIRECTORY;
+        String multicastAddress = DEFAULT_DIS_ADDRESS;
+        int                port = DEFAULT_DIS_PORT;
+
+        System.out.println("OpenDis7Examples.PduListenerSaver started...");
+
+        switch (args.length)
+        {
+            case 0:
+            // use default values
+                break;
+            case 1:
+                outputDirectory = args[0];
+                break;
+            case 3:
+                 outputDirectory = args[0];
+                multicastAddress = args[1];
+                            port = Integer.parseInt(args[2]);
+                break;
+            default:
+                // Common-sense practice is to print help message if invocation is problematic
+                System.err.println("Usage: PduListenerSaver() or PduListenerSaver(\"outputdir\") or PduListenerSaver(\"outputDirectory\",\"multicastAddress\", port");
+                System.exit(1);
+        }
+        System.out.println("Beginning PduListenerSaver (" + multicastAddress + ":" + port + ") to directory " + outputDirectory);
+
+        mystate state = mystate.RUNNING;
+        Scanner terminalKeyboardScanner  = new Scanner(System.in);
+        PduRecorder pduRecorder = new PduRecorder(outputDirectory, multicastAddress, port); // assumes save
+        pduRecorder.setDescriptor("PduListenerSaver");
+        pduRecorder.setVerbose(true);
+        pduRecorder.start(); // begin running
+
+        while (true) // monitor user input via keyboard
+        {
+            System.out.println("Type p/enter to pause, r/enter to resume, q/enter to quit");
+            String line = terminalKeyboardScanner.nextLine();
+            if (line.equalsIgnoreCase("p") && state == mystate.RUNNING) 
+            {
+                pduRecorder.pause();
+                state = mystate.PAUSED;
+                System.out.println("... state is now PAUSED");
+            }
+            else if (line.equalsIgnoreCase("p")) 
+            {
+                pduRecorder.pause();
+                state = mystate.PAUSED;
+                System.out.println("... state is still PAUSED");
+            }
+            else if (line.equalsIgnoreCase("r") && state == mystate.PAUSED) 
+            {
+                pduRecorder.resume();
+                state = mystate.RUNNING;
+                System.out.println("... state is now RUNNING");
+            }
+            else if (line.equalsIgnoreCase("r")) 
+            {
+                pduRecorder.resume();
+                state = mystate.RUNNING;
+                System.out.println("... state is still RUNNING");
+            }
+            else if (line.equalsIgnoreCase("q")) 
+            {
+                pduRecorder.stop();
+                System.out.println("... QUIT");
+                break;
+            }
+        }
+        System.out.println("Finished PduListenerSaver pdu recording, saved to file:");
+        System.out.println(pduRecorder.getLogFilePath());
+    }
+}
diff --git a/assignments/src/src/OpenDis7Examples/PduListenerSaverCaptureLog.dislog b/assignments/src/src/OpenDis7Examples/PduListenerSaverCaptureLog.dislog
new file mode 100644
index 0000000000000000000000000000000000000000..f588b215e5f48a026c97ea42e4660d8a7b3dcc32
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/PduListenerSaverCaptureLog.dislog
@@ -0,0 +1,149 @@
+# Start, ENCODING_PLAINTEXT, [PduRecorder PduListenerSaver] 20220620_132825, DIS capture file, pduLog\PduCaptureLog.dislog
+# DisPduType,ReceiptDate,ReceiptTime
+# Timestamp(8 bytes),ProtocolVersion,CompatibilityVersion,ExcerciseID,PduType,PduStatus,HeaderLength,PduLength,then PDU-specific data
+# =============================================
+# DisPduType 01 ENTITY_STATE,undated,00:00:00.0
+0,0,0,0,0,0,0,0,7,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-16,0,0,0,0,0,0,64,0,0,0,0,0,0,0,64,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,108,108,80,100,117,83,101,110,100,101,0,0,0,0
+# DisPduType 02 FIRE,undated,00:00:00.0
+0,0,0,0,1,69,-16,60,7,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 03 DETONATION,undated,00:00:00.0
+0,0,0,0,1,106,-90,72,7,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 04 COLLISION,undated,00:00:00.0
+0,0,0,0,1,118,45,-40,7,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 05 SERVICE_REQUEST,undated,00:00:00.0
+0,0,0,0,1,118,45,-40,7,0,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 06 RESUPPLY_OFFER,undated,00:00:00.0
+0,0,0,0,1,-126,-93,-80,7,0,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 07 RESUPPLY_RECEIVED,undated,00:00:00.0
+0,0,0,0,1,-120,7,-60,7,0,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 08 RESUPPLY_CANCEL,undated,00:00:00.0
+0,0,0,0,1,-120,7,-60,7,0,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 09 REPAIR_COMPLETE,undated,00:00:00.0
+0,0,0,0,1,-113,91,-16,7,0,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 10 REPAIR_RESPONSE,undated,00:00:00.0
+0,0,0,0,1,-105,25,48,7,0,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 11 CREATE_ENTITY,undated,00:00:00.0
+0,0,0,0,1,-105,25,48,7,0,11,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 12 REMOVE_ENTITY,undated,00:00:00.0
+0,0,0,0,1,-105,25,48,7,0,12,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 13 START_RESUME,undated,00:00:00.0
+0,0,0,0,1,-105,25,48,7,0,13,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 14 STOP_FREEZE,undated,00:00:00.0
+0,0,0,0,1,-105,25,48,7,0,14,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 15 ACKNOWLEDGE,undated,00:00:00.0
+0,0,0,0,1,-75,-83,80,7,0,15,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0
+# DisPduType 16 ACTION_REQUEST,undated,00:00:00.0
+0,0,0,0,1,-56,-114,-24,7,0,16,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 17 ACTION_RESPONSE,undated,00:00:00.0
+0,0,0,0,1,-56,-114,-24,7,0,17,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 18 DATA_QUERY,undated,00:00:00.0
+0,0,0,0,1,-41,-59,12,7,0,18,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 19 SET_DATA,undated,00:00:00.0
+0,0,0,0,1,-41,-59,12,7,0,19,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 20 DATA,undated,00:00:00.0
+0,0,0,0,1,-41,-59,12,7,0,20,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 21 EVENT_REPORT,undated,00:00:00.0
+0,0,0,0,1,-24,-84,100,7,0,21,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 22 COMMENT,undated,00:00:00.0
+0,0,0,0,1,-19,-56,-4,7,0,22,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,-128,72,101,108,108,111,32,67,111,109,109,101,110,116,80,68,85,0,0,0,1,0,0,1,112,72,101,114,101,32,105,115,32,97,32,115,101,99,111,110,100,32,108,105,110,101,32,111,102,32,116,101,120,116,32,105,110,32,116,104,105,115,32,99,111,109,109,101,110,116,46,0,0
+# DisPduType 23 ELECTROMAGNETIC_EMISSION,undated,00:00:00.0
+0,0,0,0,2,-102,82,-124,7,0,23,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 24 DESIGNATOR,undated,00:00:00.0
+0,0,0,0,2,-101,58,-16,7,0,24,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 25 TRANSMITTER,undated,00:00:00.0
+0,0,0,0,2,-72,105,-92,7,0,25,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 26 SIGNAL,undated,00:00:00.0
+0,0,0,0,2,-13,-83,-24,7,0,26,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0
+# DisPduType 27 RECEIVER,undated,00:00:00.0
+0,0,0,0,3,8,127,-104,7,0,27,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 28 IDENTIFICATION_FRIEND_OR_FOE,undated,00:00:00.0
+0,0,0,0,3,8,127,-104,7,0,28,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 29 UNDERWATER_ACOUSTIC,undated,00:00:00.0
+0,0,0,0,3,49,102,-80,7,0,29,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 30 SUPPLEMENTAL_EMISSION_ENTITY_STATE,undated,00:00:00.0
+0,0,0,0,3,49,102,-80,7,0,30,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 31 INTERCOM_SIGNAL,undated,00:00:00.0
+0,0,0,0,3,64,-98,100,7,0,31,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0
+# DisPduType 32 INTERCOM_CONTROL,undated,00:00:00.0
+0,0,0,0,3,75,-20,-120,7,0,32,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 33 AGGREGATE_STATE,undated,00:00:00.0
+0,0,0,0,3,83,-58,-80,7,0,33,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 34 ISGROUPOF,undated,00:00:00.0
+0,0,0,0,3,119,-100,-124,7,0,34,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 35 TRANSFER_OWNERSHIP,undated,00:00:00.0
+0,0,0,0,3,-123,-92,80,7,0,35,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 36 ISPARTOF,undated,00:00:00.0
+0,0,0,0,3,-107,45,68,7,0,36,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 37 MINEFIELD_STATE,undated,00:00:00.0
+0,0,0,0,3,-91,66,-40,7,0,37,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 38 MINEFIELD_QUERY,undated,00:00:00.0
+0,0,0,0,3,-58,100,-32,7,0,38,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 39 MINEFIELD_DATA,undated,00:00:00.0
+0,0,0,0,3,-53,92,-64,7,0,39,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 40 MINEFIELD_RESPONSE_NACK,undated,00:00:00.0
+0,0,0,0,3,-53,92,-64,7,0,40,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 41 ENVIRONMENTAL_PROCESS,undated,00:00:00.0
+0,0,0,0,3,-39,43,-124,7,0,41,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 42 GRIDDED_DATA,undated,00:00:00.0
+0,0,0,0,3,-23,-67,-76,7,0,42,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 43 POINT_OBJECT_STATE,undated,00:00:00.0
+0,0,0,0,3,-8,75,124,7,0,43,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 44 LINEAR_OBJECT_STATE,undated,00:00:00.0
+0,0,0,0,4,26,43,-64,7,0,44,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 45 AREAL_OBJECT_STATE,undated,00:00:00.0
+0,0,0,0,4,45,-103,-8,7,0,45,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 46 TIME_SPACE_POSITION_INFORMATION,undated,00:00:00.0
+0,0,0,0,4,53,115,88,7,0,46,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 47 APPEARANCE,undated,00:00:00.0
+0,0,0,0,4,90,-51,-40,7,0,47,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 48 ARTICULATED_PARTS,undated,00:00:00.0
+0,0,0,0,4,109,44,-108,7,0,48,11,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 49 LIVE_ENTITY_FIRE,undated,00:00:00.0
+0,0,0,0,4,111,121,-92,7,0,49,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 50 LIVE_ENTITY_DETONATION,undated,00:00:00.0
+0,0,0,0,4,111,121,-92,7,0,50,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 51 CREATE_ENTITY_RELIABLE,undated,00:00:00.0
+0,0,0,0,4,111,121,-92,7,0,51,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 52 REMOVE_ENTITY_RELIABLE,undated,00:00:00.0
+0,0,0,0,4,-126,-22,-104,7,0,52,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 53 START_RESUME_RELIABLE,undated,00:00:00.0
+0,0,0,0,4,-124,99,-16,7,0,53,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 54 STOP_FREEZE_RELIABLE,undated,00:00:00.0
+0,0,0,0,4,-124,99,-16,7,0,54,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 55 ACKNOWLEDGE_RELIABLE,undated,00:00:00.0
+0,0,0,0,4,-124,99,-16,7,0,55,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0
+# DisPduType 56 ACTION_REQUEST_RELIABLE,undated,00:00:00.0
+0,0,0,0,4,-124,99,-16,7,0,56,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 57 ACTION_RESPONSE_RELIABLE,undated,00:00:00.0
+0,0,0,0,4,-112,-38,44,7,0,57,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 58 DATA_QUERY_RELIABLE,undated,00:00:00.0
+0,0,0,0,4,-107,40,-124,7,0,58,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 59 SET_DATA_RELIABLE,undated,00:00:00.0
+0,0,0,0,4,-107,40,-124,7,0,59,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 60 DATA_RELIABLE,undated,00:00:00.0
+0,0,0,0,4,-107,40,-124,7,0,60,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 61 EVENT_REPORT_RELIABLE,undated,00:00:00.0
+0,0,0,0,4,-107,40,-124,7,0,61,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 62 COMMENT_RELIABLE,undated,00:00:00.0
+0,0,0,0,4,-107,40,-124,7,0,62,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 63 RECORD_RELIABLE,undated,00:00:00.0
+0,0,0,0,4,-92,99,88,7,0,63,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 64 SET_RECORD_RELIABLE,undated,00:00:00.0
+0,0,0,0,4,-84,121,68,7,0,64,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 65 RECORD_QUERY_RELIABLE,undated,00:00:00.0
+0,0,0,0,4,-84,121,68,7,0,65,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 66 COLLISION_ELASTIC,undated,00:00:00.0
+0,0,0,0,4,-72,68,104,7,0,66,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 67 ENTITY_STATE_UPDATE,undated,00:00:00.0
+0,0,0,0,4,-65,11,-12,7,0,67,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 68 DIRECTED_ENERGY_FIRE,undated,00:00:00.0
+0,0,0,0,4,-62,-57,8,7,0,68,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 69 ENTITY_DAMAGE_STATUS,undated,00:00:00.0
+0,0,0,0,4,-44,79,80,7,0,69,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 70 INFORMATION_OPERATIONS_ACTION,undated,00:00:00.0
+0,0,0,0,4,-30,-123,-4,7,0,70,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 71 INFORMATION_OPERATIONS_REPORT,undated,00:00:00.0
+0,0,0,0,4,-5,-4,-68,7,0,71,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# DisPduType 72 ATTRIBUTE,undated,00:00:00.0
+0,0,0,0,4,-4,-111,44,7,0,72,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
+# Finish, ENCODING_PLAINTEXT, [PduRecorder PduListenerSaver] 20220620_132833, DIS capture file, pduLog\PduCaptureLog.dislog
diff --git a/assignments/src/src/OpenDis7Examples/PduListenerSaverLog.txt b/assignments/src/src/OpenDis7Examples/PduListenerSaverLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..79f44b30cc3568fa611e96f4606179495373e0bc
Binary files /dev/null and b/assignments/src/src/OpenDis7Examples/PduListenerSaverLog.txt differ
diff --git a/assignments/src/src/OpenDis7Examples/PduReaderPlayer.java b/assignments/src/src/OpenDis7Examples/PduReaderPlayer.java
new file mode 100644
index 0000000000000000000000000000000000000000..533dd336c1790f2b07203d98e58ab8dfff8be665
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/PduReaderPlayer.java
@@ -0,0 +1,110 @@
+/**
+ * Copyright (c) 2008-2022, MOVES Institute, Naval Postgraduate School (NPS). All rights reserved.
+ * This work is provided under a BSD open-source license, see project license.html and license.txt
+ */
+package OpenDis7Examples;
+
+import edu.nps.moves.dis7.utilities.stream.PduPlayer;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.Scanner;
+
+/** Class to leverage the {@link edu.nps.moves.dis7.utilities.stream.PduPlayer} 
+ * with PDU log playback console controls for resume, pause and quit.
+ * 
+ * PduSaver.java created on Aug 21, 2019
+ * Renamed PduReaderPlayer
+ * MOVES Institute Naval Postgraduate School, Monterey, CA, USA www.nps.edu
+ *
+ * @author Mike Bailey, jmbailey@nps.edu
+ * @version $Id$
+ */
+public class PduReaderPlayer
+{
+    /** Default constructor */
+    public PduReaderPlayer()
+    {
+        // default constructor
+    }
+  private final static String DEFAULT_OUTPUT_DIRECTORY = "pduLog";
+  /** Default multicast group address we send on.
+    * @see <a href="https://en.wikipedia.org/wiki/Multicast_address" target="_blank">https://en.wikipedia.org/wiki/Multicast_address</a> */
+  public static final String  DEFAULT_MULTICAST_ADDRESS = AllPduSender.DEFAULT_MULTICAST_ADDRESS;
+  /** Default multicast port
+   * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+  public static final int     DEFAULT_MULTICAST_PORT    = AllPduSender.DEFAULT_MULTICAST_PORT;
+
+  private enum mystate
+  {
+    RUNNING,
+    PAUSED;
+  }
+
+  /** Command-line invocation (CLI) of program, execution starts here
+     * @param args command-line arguments
+     */
+  public static void main(String[] args)
+  {
+    String  outputDirectory = DEFAULT_OUTPUT_DIRECTORY;
+    String multicastAddress = DEFAULT_MULTICAST_ADDRESS;
+    int       multicastPort = DEFAULT_MULTICAST_PORT;
+    boolean       sendToNet = true;
+    
+    System.out.println("OpenDis7Examples.PduReaderPlayer started...");
+
+    switch (args.length) {
+      case 0:
+        break;
+      case 1:
+        outputDirectory = args[0];
+        sendToNet = Boolean.valueOf(args[1]);
+        break;
+      case 3:
+        outputDirectory = args[0];
+        multicastAddress = args[1];
+        multicastPort = Integer.parseInt(args[2]);
+        sendToNet = Boolean.valueOf(args[3]);
+        break;
+      default:
+        System.err.println("Usage: PduReaderPlayer() or \n"
+                + "PduReaderPlayer(\"outputdir\", \"sendToNet true/false\") or \n"
+                + "PduReaderPlayer(\"outputdir\", \"ipPort\", \"sendToNet true/false\") or \n"
+                + "PduReaderPlayer(\"outputdir\", \"multicast address\", \"ipPort\", \"sendToNet true/false\"");
+        System.exit(1);
+    }
+
+    System.out.println("Beginning PduReaderPlayer (" + multicastAddress + ":" + multicastPort + ") to directory " + outputDirectory);
+    try 
+    {
+      mystate state = mystate.RUNNING;
+      Scanner terminalKeyboardScanner = new Scanner(System.in);
+      PduPlayer pduPlayer = new PduPlayer(multicastAddress, multicastPort, Path.of(outputDirectory), sendToNet);
+      pduPlayer.begin();
+      
+      while (true) // monitor user input via keyboard
+      {
+        System.out.println("Type p/enter to pause, r/enter to resume, q/enter to quit");
+        String line = terminalKeyboardScanner.nextLine();
+        if (line.equalsIgnoreCase("p") && state == mystate.RUNNING) {
+          pduPlayer.stopPause();
+          state = mystate.PAUSED;
+        }
+        else if (line.equalsIgnoreCase("r") && state == mystate.PAUSED) {
+          pduPlayer.startResume();
+          state = mystate.RUNNING;
+        }
+        else if (line.equalsIgnoreCase("q")) {
+          System.out.println("... QUIT");
+          pduPlayer.end();
+          break;
+        }
+      }
+      System.out.println("Ending pdu files playback for directory " + outputDirectory);
+      System.out.println("OpenDis7Examples.PduReaderPlayer complete.");
+      System.exit(0); // TODO not sure why this is necessary with Netbeans...
+    }
+    catch (IOException ex) {
+      System.err.println("Exception: " + ex.getClass().getSimpleName() + ": " + ex.getLocalizedMessage());
+    }
+  }
+}
diff --git a/assignments/src/src/OpenDis7Examples/PduReaderPlayerLog.txt b/assignments/src/src/OpenDis7Examples/PduReaderPlayerLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a4b3a9b5f631fcd4680468458cd95f461ed2748a
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/PduReaderPlayerLog.txt
@@ -0,0 +1,93 @@
+ant -f C:\\x-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=OpenDis7Examples/PduReaderPlayer.java -Drun.class=OpenDis7Examples.PduReaderPlayer run-single
+init:
+Deleting: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+compile-single:
+run-single:
+OpenDis7Examples.PduReaderPlayer started...
+Beginning PduReaderPlayer (239.1.2.3:3000) to directory pduLog
+PduPlayer begin() playing DIS logs found in ancestor pduLog directory.
+ENCODING_PLAINTEXT
+Replaying PDU log file with ENCODING_PLAINTEXT: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\pduLog\PduCaptureLog.dislog
+Sent PDU: DisPduType 01 ENTITY_STATE
+Sent PDU: DisPduType 02 FIRE
+Sent PDU: DisPduType 03 DETONATION
+Sent PDU: DisPduType 04 COLLISION
+Sent PDU: DisPduType 05 SERVICE_REQUEST
+Sent PDU: DisPduType 06 RESUPPLY_OFFER
+Sent PDU: DisPduType 07 RESUPPLY_RECEIVED
+Sent PDU: DisPduType 08 RESUPPLY_CANCEL
+Sent PDU: DisPduType 09 REPAIR_COMPLETE
+Sent PDU: DisPduType 10 REPAIR_RESPONSE
+Sent PDU: DisPduType 11 CREATE_ENTITY
+Sent PDU: DisPduType 12 REMOVE_ENTITY
+Sent PDU: DisPduType 13 START_RESUME
+Sent PDU: DisPduType 14 STOP_FREEZE
+Sent PDU: DisPduType 15 ACKNOWLEDGE
+Sent PDU: DisPduType 16 ACTION_REQUEST
+Sent PDU: DisPduType 17 ACTION_RESPONSE
+Sent PDU: DisPduType 18 DATA_QUERY
+Sent PDU: DisPduType 19 SET_DATA
+Sent PDU: DisPduType 20 DATA
+Sent PDU: DisPduType 21 EVENT_REPORT
+Sent PDU: DisPduType 22 COMMENT
+Sent PDU: DisPduType 23 ELECTROMAGNETIC_EMISSION
+Sent PDU: DisPduType 24 DESIGNATOR
+Sent PDU: DisPduType 25 TRANSMITTER
+Sent PDU: DisPduType 26 SIGNAL
+Sent PDU: DisPduType 27 RECEIVER
+Sent PDU: DisPduType 28 IDENTIFICATION_FRIEND_OR_FOE
+Sent PDU: DisPduType 29 UNDERWATER_ACOUSTIC
+Sent PDU: DisPduType 30 SUPPLEMENTAL_EMISSION_ENTITY_STATE
+Sent PDU: DisPduType 31 INTERCOM_SIGNAL
+Sent PDU: DisPduType 32 INTERCOM_CONTROL
+Sent PDU: DisPduType 33 AGGREGATE_STATE
+Sent PDU: DisPduType 34 ISGROUPOF
+Sent PDU: DisPduType 35 TRANSFER_OWNERSHIP
+Sent PDU: DisPduType 36 ISPARTOF
+Sent PDU: DisPduType 37 MINEFIELD_STATE
+Sent PDU: DisPduType 38 MINEFIELD_QUERY
+Sent PDU: DisPduType 39 MINEFIELD_DATA
+Sent PDU: DisPduType 40 MINEFIELD_RESPONSE_NACK
+Sent PDU: DisPduType 41 ENVIRONMENTAL_PROCESS
+Sent PDU: DisPduType 42 GRIDDED_DATA
+Sent PDU: DisPduType 43 POINT_OBJECT_STATE
+Sent PDU: DisPduType 44 LINEAR_OBJECT_STATE
+Sent PDU: DisPduType 45 AREAL_OBJECT_STATE
+Sent PDU: DisPduType 46 TIME_SPACE_POSITION_INFORMATION
+Sent PDU: DisPduType 47 APPEARANCE
+Sent PDU: DisPduType 48 ARTICULATED_PARTS
+Sent PDU: DisPduType 49 LIVE_ENTITY_FIRE
+Sent PDU: DisPduType 50 LIVE_ENTITY_DETONATION
+Sent PDU: DisPduType 51 CREATE_ENTITY_RELIABLE
+Sent PDU: DisPduType 52 REMOVE_ENTITY_RELIABLE
+Sent PDU: DisPduType 53 START_RESUME_RELIABLE
+Sent PDU: DisPduType 54 STOP_FREEZE_RELIABLE
+Sent PDU: DisPduType 55 ACKNOWLEDGE_RELIABLE
+Sent PDU: DisPduType 56 ACTION_REQUEST_RELIABLE
+Sent PDU: DisPduType 57 ACTION_RESPONSE_RELIABLE
+Sent PDU: DisPduType 58 DATA_QUERY_RELIABLE
+Sent PDU: DisPduType 59 SET_DATA_RELIABLE
+Sent PDU: DisPduType 60 DATA_RELIABLE
+Sent PDU: DisPduType 61 EVENT_REPORT_RELIABLE
+Sent PDU: DisPduType 62 COMMENT_RELIABLE
+Sent PDU: DisPduType 63 RECORD_RELIABLE
+Sent PDU: DisPduType 64 SET_RECORD_RELIABLE
+Sent PDU: DisPduType 65 RECORD_QUERY_RELIABLE
+Sent PDU: DisPduType 66 COLLISION_ELASTIC
+Sent PDU: DisPduType 67 ENTITY_STATE_UPDATE
+Sent PDU: DisPduType 68 DIRECTED_ENERGY_FIRE
+Sent PDU: DisPduType 69 ENTITY_DAMAGE_STATUS
+Sent PDU: DisPduType 70 INFORMATION_OPERATIONS_ACTION
+Sent PDU: DisPduType 71 INFORMATION_OPERATIONS_REPORT
+Sent PDU: DisPduType 72 ATTRIBUTE
+Total PDUs: 72
+PduPlayer handleComment() found FINISH_COMMENT_MARKER, end of replay from log file PduCaptureLog.dislog
+Type p/enter to pause, r/enter to resume, q/enter to quit
+q
+... QUIT
+Ending pdu files playback for directory pduLog
+OpenDis7Examples.PduReaderPlayer complete.
+BUILD SUCCESSFUL (total time: 2 seconds)
diff --git a/assignments/src/src/OpenDis7Examples/PduReaderPlayerWireshark.png b/assignments/src/src/OpenDis7Examples/PduReaderPlayerWireshark.png
new file mode 100644
index 0000000000000000000000000000000000000000..fe642633248c7935d6aeb5ed7f0e0f8b4e43a13f
Binary files /dev/null and b/assignments/src/src/OpenDis7Examples/PduReaderPlayerWireshark.png differ
diff --git a/assignments/src/src/OpenDis7Examples/PduTrack.java b/assignments/src/src/OpenDis7Examples/PduTrack.java
new file mode 100644
index 0000000000000000000000000000000000000000..59d91939421f3b1bf409dd26ef7d797e61373726
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/PduTrack.java
@@ -0,0 +1,1042 @@
+/*
+Copyright (c) 1995-2022 held by the author(s).  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer
+      in the documentation and/or other materials provided with the
+      distribution.
+    * Neither the names of the Naval Postgraduate School (NPS)
+      Modeling Virtual Environments and Simulation (MOVES) Institute
+      https://www.nps.edu and https://www.nps.edu/web/moves
+      nor the names of its contributors may be used to endorse or
+      promote products derived from this software without specific
+      prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+*/
+// TODO move into opendis7 distribution tree in package edu.nps.moves.dis7.utilities.stream;
+
+package OpenDis7Examples;
+
+import edu.nps.moves.dis7.entities.swe.platform.surface._001Poseidon;
+import edu.nps.moves.dis7.enumerations.DisPduType;
+import edu.nps.moves.dis7.enumerations.ForceID;
+import edu.nps.moves.dis7.pdus.EntityID;
+import edu.nps.moves.dis7.pdus.EntityStatePdu;
+import edu.nps.moves.dis7.pdus.EulerAngles;
+import edu.nps.moves.dis7.pdus.Pdu;
+import edu.nps.moves.dis7.pdus.Vector3Double;
+import edu.nps.moves.dis7.utilities.DisTime;
+import edu.nps.moves.dis7.utilities.PduFactory;
+import java.io.ByteArrayOutputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * Create a track from DIS ESPDUs
+ * @author brutzman@nps.edu
+ */
+public class PduTrack
+{   
+    private String          descriptor = new String();
+    private ArrayList<Pdu>  pduList = new ArrayList<>();
+    private EntityStatePdu  initialEspdu;
+    private EntityStatePdu  latestEspdu;
+    private Vector3Double   initialLocation;
+    private Vector3Double   latestLocation;
+    
+    /** waypoint timelineList in seconds */
+    private ArrayList<Float>          timelineList = new ArrayList<>();
+    private ArrayList<Vector3Double> waypointsList = new ArrayList<>();
+    private ArrayList<EulerAngles> eulerAnglesList = new ArrayList<>();
+    
+    private String                             author = new String();
+    private String                 x3dModelIdentifier = new String();
+    private String                 x3dModelName       = "PduTrackInterpolation.x3d";
+    private float             defaultWaypointInterval = -1;
+    private float                     durationSeconds = -1;
+    private String                   x3dTimeSensorDEF = new String();
+    private String         x3dPositionInterpolatorDEF = new String();
+    private String      x3dOrientationInterpolatorDEF = new String();
+    private boolean      addLineBreaksWithinKeyValues = false;
+    /** what kind of timestamp is being used */
+    public    DisTime.TimestampStyle timestampStyle        = DisTime.TimestampStyle.IEEE_ABSOLUTE;
+    /** direct access to pduFactory for creating new PDU instances */
+    protected PduFactory             pduFactory            = new PduFactory(timestampStyle);
+    private   LocalDateTime          recordingStart;
+    private   LocalDateTime          recordingStop;
+    private   String                 todaysDateString      = new String();
+    
+    /** direct access to byteArrayOutputStream */
+    protected ByteArrayOutputStream  byteArrayOutputStream = new ByteArrayOutputStream();
+    /** direct access to DataOutputStream */
+    protected DataOutputStream       dataOutputStream      = new DataOutputStream(byteArrayOutputStream);
+    private   String TRACE_PREFIX = "[" + (PduTrack.class.getSimpleName()) + "] ";
+    
+    /**
+     * Constructor for PduTrack
+     */
+    public PduTrack()
+    {
+        // initialization code here
+        
+        // https://docs.oracle.com/javase/tutorial/datetime/TOC.html
+        // https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/time/package-summary.html
+        // https://stackoverflow.com/questions/5175728/how-to-get-the-current-date-time-in-java/5175900 (scroll down to java.time)
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d MMMM yyyy");
+        todaysDateString = LocalDate.now().format(formatter);
+//      System.out.println(TRACE_PREFIX + "today=" + todayString);
+    }
+    
+    /**
+     * Set timestampStyle used by PduFactory
+     * @param newTimestampStyle new value to set
+     */
+    public PduTrack(DisTime.TimestampStyle newTimestampStyle)
+    {
+        timestampStyle = newTimestampStyle;
+        DisTime.setTimestampStyle(newTimestampStyle);
+        // automatic super invocation: return PduTrack();
+    }
+    
+    /**
+     * Get simple descriptor (such as parent class name) for this SimulationManager, used in trace statements
+     * @return simple descriptor name
+     */
+    public String getDescriptor() 
+    {
+        return descriptor;
+    }
+    /**
+     * Set new simple descriptor (such as parent class name) for this SimulationManager, used in trace statements
+     * @param newDescriptor simple descriptor name for this interface
+     * @return same object to permit progressive setters */
+    public PduTrack setDescriptor(String newDescriptor) 
+    {
+        if (newDescriptor != null)
+            this.descriptor = newDescriptor.trim();
+        TRACE_PREFIX = "[" + (PduTrack.class.getSimpleName() + " " + descriptor) + "] ";
+        return this;
+    }
+    /**
+     * Get timestampStyle used by PduFactory
+     * @return current timestampStyle
+     */
+    public DisTime.TimestampStyle getTimestampStyle()
+    {
+        return timestampStyle;
+    }
+    /**
+     * Set timestampStyle used by PduFactory
+     * @param newTimestampStyle the timestampStyle to set
+     * @return same object to permit progressive setters 
+     */
+    public PduTrack setTimestampStyle(DisTime.TimestampStyle newTimestampStyle) 
+    {
+        this.timestampStyle = newTimestampStyle;
+        DisTime.setTimestampStyle(newTimestampStyle);
+        return this;
+    }
+
+    /**
+     * Determine initial location, reset to (0 0 0) if not found
+     * @return current initialLocation
+     */
+    public Vector3Double getInitialLocation() {
+        if (initialLocation == null)
+        {
+            System.out.println (TRACE_PREFIX + "getInitialLocation() not found, isTrackEmpty()=" + isTrackEmpty() + ", returning 0 0 0");
+            return new Vector3Double();
+        }
+        return initialLocation;
+    }
+    /**
+     * Determine current location, reset to (0 0 0) if not found
+     * @return current latestLocation
+     */
+    public Vector3Double getLatestLocation() {
+        if (latestLocation == null)
+        {
+            System.out.println (TRACE_PREFIX + "getLatestLocation() not found, isTrackEmpty()=" + isTrackEmpty() + ", returning 0 0 0");
+            return new Vector3Double();
+        }
+        return latestLocation;
+    }
+    /**
+     * Get individual Pdu from pduList, index must not exceed existing pduList size
+     * @param index for pdu of interest
+     * @return pdu of interest
+     */
+    public Pdu getPdu(int index) throws IndexOutOfBoundsException
+    {
+        if ((index >= pduList.size()) || (index < 0))
+        {
+            System.out.println (TRACE_PREFIX + "getPdu(" + index + ") out of bounds, pduList.size()=" + pduList.size());
+            // then throw exception
+        }
+        return pduList.get(index);
+    }
+    /**
+     * get current pduList
+     * @return current pduList
+     */
+    public ArrayList<Pdu> getPduList() {
+        return pduList;
+    }
+    /**
+     * get current waypointsList
+     * @return current waypointsList
+     */
+    public ArrayList<Vector3Double> getWaypointsList() {
+        return waypointsList;
+    }
+    /**
+     * current eulerAnglesList
+     * @return current eulerAnglesList
+     */
+    public ArrayList<EulerAngles> getEulerAnglesList() {
+        return eulerAnglesList;
+    }
+    /**
+     * Time in seconds corresponding to each PDU
+     * @return current timelineList
+     */
+    public ArrayList<Float> getTimelineList() {
+        return timelineList;
+    }
+    /**
+     * Add PDU, typically ESPDU
+     * @param newPdu new Pdu to add, typically ESPDU
+     * @return same object to permit progressive setters
+     */
+    public PduTrack addPdu(Pdu newPdu)
+    {
+        if (newPdu.getPduType() == DisPduType.ENTITY_STATE)
+        {
+////          EntityStatePdu deepCopyEspdu = new EntityStatePdu();
+//            EntityStatePdu deepCopyEspdu = pduFactory.makeEntityStatePdu();
+//            deepCopyEspdu.setTimestamp        (((EntityStatePdu)newPdu).getTimestamp());
+//            deepCopyEspdu.setMarking          (((EntityStatePdu)newPdu).getMarking());
+//            deepCopyEspdu.setEntityID         (((EntityStatePdu)newPdu).getEntityID());
+//            deepCopyEspdu.setForceId          (((EntityStatePdu)newPdu).getForceId());
+//            deepCopyEspdu.setEntityType       (((EntityStatePdu)newPdu).getEntityType());
+//            deepCopyEspdu.setEntityLocation   (((EntityStatePdu)newPdu).getEntityLocation());
+//            deepCopyEspdu.setEntityOrientation(((EntityStatePdu)newPdu).getEntityOrientation());
+            
+            EntityStatePdu deepCopyEspdu = ((EntityStatePdu)newPdu).copy();
+            pduList.add(deepCopyEspdu);
+//          alternative trials:
+//          pduList.add(((EntityStatePdu)newPdu).copyDataOutputStream());
+//          pduList.add(((EntityStatePdu)newPdu).copy());
+            
+            if (initialLocation == null)
+            {
+                initialEspdu    = deepCopyEspdu; // must save object since pduList might contain more than ESPDUs
+                initialLocation = deepCopyEspdu.getEntityLocation();
+            }
+            latestEspdu         = deepCopyEspdu; // must save object since pduList might contain more than ESPDUs
+            latestLocation      = deepCopyEspdu.getEntityLocation();
+        }
+        else pduList.add(newPdu); // TODO copy() - careful, must be a new object and not a reference
+        return this;
+    }
+    /**
+     * clear all PDUs
+     * @return same object to permit progressive setters
+     */
+    public PduTrack clearPduLists()
+    {
+           getPduList().clear();
+          waypointsList.clear();
+        eulerAnglesList.clear();
+           timelineList.clear();
+           initialEspdu = null;
+            latestEspdu = null;
+        initialLocation = null;
+         latestLocation = null;
+        return this;
+    }
+    
+    private String normalizeNameToken(String candidateDEF)
+    {
+        return candidateDEF.replace(" ", "").replace("-", "")
+                           .replace("(", "").replace(")", "")
+                           .replace("[", "").replace("])", "");
+    }
+
+    /**
+     * Provide DEF value if not defined by program
+     * @return current x3dTimeSensorDEF
+     */
+    public String getX3dTimeSensorDEF() {
+        if    (x3dTimeSensorDEF.isEmpty())
+               x3dTimeSensorDEF = normalizeNameToken(getDescriptor()) + "Clock";
+        return x3dTimeSensorDEF;
+    }
+
+    /**
+     * Set DEF value for X3D node
+     * @param x3dTimeSensorDEF the x3dTimeSensorDEF to set
+     */
+    public void setX3dTimeSensorDEF(String x3dTimeSensorDEF) {
+        this.x3dTimeSensorDEF = normalizeNameToken(x3dTimeSensorDEF);
+    }
+
+    /**
+     * Provide DEF value if not defined by program
+     * @return current x3dPositionInterpolatorDEF
+     */
+    public String getX3dPositionInterpolatorDEF() {
+        if    (x3dPositionInterpolatorDEF.isEmpty())
+               x3dPositionInterpolatorDEF = normalizeNameToken(getDescriptor()) + "Positions";
+        return x3dPositionInterpolatorDEF;
+    }
+
+    /**
+     * Set DEF value for X3D node
+     * @param x3dPositionInterpolatorDEF the x3dPositionInterpolatorDEF to set
+     */
+    public void setX3dPositionInterpolatorDEF(String x3dPositionInterpolatorDEF) {
+        this.x3dPositionInterpolatorDEF = normalizeNameToken(x3dPositionInterpolatorDEF);
+    }
+
+    /**
+     * Provide DEF value if not defined by program
+     * @return current x3dOrientationInterpolatorDEF
+     */
+    public String getX3dOrientationInterpolatorDEF() {
+        if    (x3dOrientationInterpolatorDEF.isEmpty())
+               x3dOrientationInterpolatorDEF = normalizeNameToken(getDescriptor()) + "Orientations";
+        return x3dOrientationInterpolatorDEF;
+    }
+
+    /**
+     * Set DEF value for X3D node
+     * @param x3dOrientationInterpolatorDEF the x3dOrientationInterpolatorDEF to set
+     */
+    public void setX3dOrientationInterpolatorDEF(String x3dOrientationInterpolatorDEF) {
+        this.x3dOrientationInterpolatorDEF = normalizeNameToken(x3dOrientationInterpolatorDEF);
+    }
+
+    /**
+     * Sort all PDUs by timestamp
+     * @see <a href="https://stackoverflow.com/questions/16252269/how-to-sort-an-arraylist" target="_blank">StackOverflow: How to sort an ArrayList?</a>
+     * @see <a href="https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/doc-files/coll-overview.html" target="_blank">Collections Framework Overview</a>
+     * @return same object to permit progressive setters
+     */
+    public PduTrack sortPdus()
+    {
+        Collections.sort(pduList, new Comparator<Pdu>() {
+            @Override
+            public int compare(Pdu lhs, Pdu rhs)
+            {
+                // -1 less than, 1 greater than, 0 equal
+                if      (lhs.occursBefore(rhs))
+                         return -1;
+                else if (lhs.occursSameTime(rhs))
+                         return 0;
+                else     return 1;
+            }
+        });
+        return this;
+    }
+    /**
+     * Reverse order of PDU list
+     * @see <a href="https://stackoverflow.com/questions/10766492/what-is-the-simplest-way-to-reverse-an-arraylist" target="_blank">StackOverflow: What is the Simplest Way to Reverse an ArrayList?</a>
+     * @see <a href="https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/doc-files/coll-overview.html" target="_blank">Collections Framework Overview</a>
+     * @return same object to permit progressive setters
+     */
+    public PduTrack reversePdus()
+    {
+        Collections.reverse(pduList);
+        return this;
+    }
+
+    /**
+     * Determine whether any ESPDUs have been received by this track
+     * @return whether track is empty
+     */
+    public boolean isTrackEmpty()
+    {
+        return (getEspduCount() == 0);
+    }
+    /**
+     * Count ESPDUs in pduList
+     * @return number of ESPDUs in pduList
+     */
+    public int getEspduCount()
+    {
+        int counter = 0;
+        for (Pdu nextPdu : getPduList())
+        {
+            if (nextPdu.getPduType() == DisPduType.ENTITY_STATE)
+               counter += 1;
+        }
+        return counter;
+    }
+    /**
+     * Compute track duration in timestamp ticks
+     * @return duration in timestamp ticks between initial and final ESPDU timestamps in waypointList
+     */
+    public int getTotalDurationTicks()
+    {
+        int    initialTime = -1;
+        int      finalTime = -1;
+        int  durationTicks = -1; // used if pduList is empty
+        
+        // must skip through pduList since non-ESPDU PDUs may be present
+        for (Pdu nextPdu : getPduList())
+        {
+            if (nextPdu.getPduType() == DisPduType.ENTITY_STATE)
+            {
+                if (initialTime == -1)
+                    initialTime = nextPdu.getTimestamp();
+                finalTime = nextPdu.getTimestamp();
+            }
+        }
+        if ((initialTime >= 0) && (finalTime >= 0))
+             durationTicks = (finalTime - initialTime);
+        if (getPduList().isEmpty())
+        {
+            System.out.println(TRACE_PREFIX + "getTrackDuration() computed illegal duration=" + durationTicks + " due to empty pdu list");
+        }
+        else if ((durationTicks <= 0) && (defaultWaypointInterval <= 0))
+        {
+            System.out.println(TRACE_PREFIX + "getTrackDuration() computed illegal duration=" + durationTicks + " due to illegal pdu list");
+        }
+        return durationTicks;
+    }
+    /**
+     * Compute track duration in seconds
+     * @return duration in seconds between initial and final ESPDU timestamps in waypointList
+     */
+    public float getTotalDurationSeconds()
+    {
+        if (defaultWaypointInterval > 0)
+        {
+            return getEspduCount() * defaultWaypointInterval;
+        }
+        else if (getTotalDurationTicks() < 0)
+               durationSeconds = getTotalDurationTicks() * 1.0f; // TODO convert
+        return durationSeconds;
+    }
+    /**
+     * Create waypoints and angles using all ESPDU points, with no linear regression or array reduction.
+     * @return same object to permit progressive setters
+     */
+    public PduTrack createRawWaypoints()
+    {
+        // https://stackoverflow.com/questions/6536094/java-arraylist-copy
+        
+           timelineList.clear();
+          waypointsList.clear();
+        eulerAnglesList.clear();
+        float clock = 0.0f;
+        for (int i = 0; i < pduList.size(); i++)
+        {
+            Pdu nextPdu = pduList.get(i);
+            if (nextPdu.getPduType() == DisPduType.ENTITY_STATE)
+            {
+                EntityStatePdu espdu = (EntityStatePdu)nextPdu;
+                if (defaultWaypointInterval > 0)
+                {
+                    timelineList.add(clock);
+                    clock += defaultWaypointInterval;
+                }
+                else
+                {
+                    timelineList.add(espdu.getTimestamp() * 1.0f); // TODO convert
+                }
+                   waypointsList.add(espdu.getEntityLocation());
+                 eulerAnglesList.add(espdu.getEntityOrientation());
+            }
+        }
+        return this;
+    }
+    /** 
+     * Utility method to create TimeSensor
+     * @return TimeSensor string in XML format
+     */
+    public String createX3dTimeSensorString()
+    {
+        StringBuilder sb = new StringBuilder();
+        sb.append("    <TimeSensor");
+        sb.append(" DEF='").append(getX3dTimeSensorDEF()).append("'");
+        sb.append(" cycleInterval='").append(String.valueOf(getTotalDurationSeconds())).append("'");
+        sb.append(" loop='true'");
+        sb.append("/>").append("\n");
+        
+        return sb.toString();
+    }
+    /**
+     * Create PositionInterpolator from Pdu list
+     * @return X3D PositionInterpolator as string
+     */
+    public String createX3dPositionInterpolatorString()
+    {
+        StringBuilder sb = new StringBuilder();
+        sb.append("    <PositionInterpolator");
+        sb.append(" DEF='").append(getX3dPositionInterpolatorDEF()).append("'");
+        sb.append(" key='");
+        for (int i = 0; i < timelineList.size(); i++)
+        {
+            float nextDuration = timelineList.get(i) * 1.0f; // TODO convert
+            sb.append(String.valueOf(nextDuration));
+            if (i < timelineList.size() - 1)
+                sb.append(" ");
+        }
+        sb.append("'");
+        sb.append(" keyValue='");
+        for (int i = 0; i < waypointsList.size(); i++)
+        {
+            if (hasAddLineBreaksWithinKeyValues())
+                sb.append("\n");
+            Vector3Double nextPosition = waypointsList.get(i);
+            sb.append(String.valueOf(nextPosition.getX())).append(" ")
+              .append(String.valueOf(nextPosition.getY())).append(" ")
+              .append(String.valueOf(nextPosition.getZ()));
+            if (i < waypointsList.size() - 1)
+                sb.append(",");
+        }
+        sb.append("'");
+        sb.append("/>").append("\n");
+        
+        return sb.toString();
+    }
+    /**
+     * Create OrientationInterpolator from Pdu list
+     * TODO preliminary support only includes horizontal rotation.
+     * @return X3D OrientationInterpolator as string
+     */
+    public String createX3dOrientationInterpolatorString()
+    {
+        StringBuilder sb = new StringBuilder();
+        sb.append("    <OrientationInterpolator");
+        sb.append(" DEF='").append(getX3dOrientationInterpolatorDEF()).append("'");
+        sb.append(" key='");
+        for (int i = 0; i < timelineList.size(); i++)
+        {
+            float nextDuration = timelineList.get(i) * 1.0f; // TODO convert
+            sb.append(String.valueOf(nextDuration));
+            if (i < timelineList.size() - 1)
+                sb.append(" ");
+        }
+        sb.append("'");
+        sb.append(" keyValue='");
+        for (int i = 0; i < eulerAnglesList.size(); i++)
+        {
+            if (hasAddLineBreaksWithinKeyValues())
+                sb.append("\n");
+            EulerAngles nextEulerAngle = new EulerAngles();
+            float axisX = 0.0f;
+            float axisY = 1.0f;
+            float axisZ = 0.0f;
+            float angle = 0.0f; // radians
+            
+            nextEulerAngle = eulerAnglesList.get(i);
+            angle = nextEulerAngle.getTheta();
+            
+            sb.append(String.valueOf(axisX)).append(" ")
+              .append(String.valueOf(axisY)).append(" ")
+              .append(String.valueOf(axisZ)).append(" ")
+              .append(String.valueOf(angle));
+            if (i < eulerAnglesList.size() - 1)
+                sb.append(",");
+        }
+        sb.append("'");
+        sb.append("/>").append("\n");
+        
+        return sb.toString();
+    }
+
+    /**
+     * Get name of author used as creator of X3D model
+     * @return current author
+     */
+    public String getAuthor() {
+        return author;
+    }
+
+    /**
+     * Set name of author used as creator of X3D model
+     * @param author the author to set
+     */
+    public void setAuthor(String author) {
+        if  (author == null)
+             author = new String();
+        author = author.trim();
+        this.author = author;
+    }
+
+    /**
+     * Get name of online url identifier for X3D model
+     * @return current x3dModelIdentifier
+     */
+    public String getX3dModelIdentifier() {
+        return x3dModelIdentifier;
+    }
+
+    /**
+     * Set name of online url identifier for X3D model
+     * @param x3dModelIdentifier the x3dModelIdentifier to set
+     */
+    public void setX3dModelIdentifier(String x3dModelIdentifier) {
+        if  (x3dModelIdentifier == null)
+             x3dModelIdentifier = new String();
+        x3dModelIdentifier = x3dModelIdentifier.trim();
+        if (!x3dModelIdentifier.startsWith("http://") && !x3dModelIdentifier.startsWith("https://"))
+            System.out.println(TRACE_PREFIX + "warning, identifier typically begins with https:// or http://");
+        else this.x3dModelIdentifier = x3dModelIdentifier;
+    }
+
+    /**
+     * File name for X3D model production
+     * @return current x3dModelName
+     */
+    public String getX3dModelName() {
+        return x3dModelName;
+    }
+    /**
+     * File name for X3D model production
+     * @param x3dModelName the x3dModelName to set
+     */
+    public void setX3dModelName(String x3dModelName) {
+        if  (x3dModelName == null)
+             x3dModelName = new String();
+        x3dModelName = x3dModelName.trim();
+        this.x3dModelName = x3dModelName;
+    }
+
+    /**
+     * Verbose (but more readable) output of numeric arrays in X3D model
+     * @return current addLineBreaksWithinKeyValues
+     */
+    public boolean hasAddLineBreaksWithinKeyValues() {
+        return addLineBreaksWithinKeyValues;
+    }
+
+    /**
+     * Verbose (but more readable) output of numeric arrays in X3D model
+     * @param addLineBreaksWithinKeyValues the addLineBreaksWithinKeyValues to set
+     */
+    public void setAddLineBreaksWithinKeyValues(boolean addLineBreaksWithinKeyValues) {
+        this.addLineBreaksWithinKeyValues = addLineBreaksWithinKeyValues;
+    }
+    /**
+     * Create full X3D interpolator model from Pdu list, assembling sections of scene graph
+     * @return X3D model as string
+     */
+    public String createX3dModel()
+    {
+        StringBuilder sb = new StringBuilder();
+        sb.append(createX3dModelHeaderString());
+        sb.append(createX3dTimeSensorString());
+        sb.append(createX3dPositionInterpolatorString());
+        sb.append(createX3dOrientationInterpolatorString());
+        sb.append(createX3dRoutesGeometryFooterString());
+        return sb.toString();
+    }
+    /**
+     * Create PositionInterpolator from Pdu list
+     * @return X3D PositionInterpolator as string
+     */
+    public String createX3dModelHeaderString()
+    {        
+        StringBuilder sb = new StringBuilder();
+        
+        sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>").append("\n");
+        sb.append("<!DOCTYPE X3D PUBLIC \"ISO//Web3D//DTD X3D 4.0//EN\" \"https://www.web3d.org/specifications/x3d-4.0.dtd\">").append("\n");
+        sb.append("<X3D profile='Interchange' version='4.0' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-4.0.xsd'>").append("\n");
+        sb.append("  <head>").append("\n");
+        if (!getX3dModelName().isEmpty())
+            sb.append("    <meta content='").append(getX3dModelName()).append("' name='title'/>").append("\n");
+        sb.append("    <meta content='Conversion of ESPDU track into X3D animation interpolators and LineSet.' name='description'/>").append("\n");
+        
+        sb.append("    <meta content='1 January 2022' name='created'/>").append("\n");
+        sb.append("    <meta content='").append(todaysDateString).append("' name='modified'/>").append("\n");
+        if (!getAuthor().isEmpty())
+            sb.append("    <meta content='").append(getAuthor()).append("' name='creator'/>").append("\n");
+        if (!getX3dModelIdentifier().isEmpty())
+            sb.append("    <meta content='").append(getX3dModelIdentifier()).append("' name='identifier'/>").append("\n");
+        
+        sb.append("    <meta content='PduTrack utility, opendis7-java Library https://github.com/open-dis/opendis7-java' name='generator'/>").append("\n");
+        sb.append("    <meta content='NPS MOVES MV3500 Networked Graphics https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500' name='reference'/>").append("\n");
+        sb.append("    <meta content='X3D Resources https://www.web3d.org/x3d/content/examples/X3dResources.html' name='reference'/>").append("\n");
+        sb.append("    <meta content='X3D Scene Authoring Hints https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html' name='reference'/>").append("\n");
+        sb.append("    <meta content='X3D Tooltips https://www.web3d.org/x3d/tooltips/X3dTooltips.html' name='reference'/>").append("\n");
+        sb.append("    <meta content='X3D Validator https://savage.nps.edu/X3dValidator' name='reference'/>").append("\n");
+        sb.append("    <meta content='Open source https://raw.githubusercontent.com/open-dis/opendis7-java/master/license.html' name='license'/>").append("\n");
+        sb.append("  </head>").append("\n");
+        sb.append("  <Scene>").append("\n");
+        sb.append("    <WorldInfo title='PduTrackInterpolation.x3d'/>").append("\n");
+
+        return sb.toString(); 
+    }
+    /**
+     * Create X3D ROUTEs and footer to connect TimeSensor to interpolators
+     * @return X3D PositionInterpolator as string
+     */
+    public String createX3dRoutesGeometryFooterString()
+    {
+        StringBuilder sb = new StringBuilder();
+        
+        sb.append("    <ROUTE fromField='fraction_changed' fromNode='")
+          .append(getX3dTimeSensorDEF())
+          .append("' toField='set_fraction' toNode='")
+          .append(getX3dPositionInterpolatorDEF())
+          .append("'/>").append("\n");
+        sb.append("    <ROUTE fromField='fraction_changed' fromNode='")
+          .append(getX3dTimeSensorDEF())
+          .append("' toField='set_fraction' toNode='")
+          .append(getX3dOrientationInterpolatorDEF())
+          .append("'/>").append("\n");
+        
+        sb.append("    <Shape>").append("\n");
+        sb.append("      <Appearance DEF='TrackAppearance'>").append("\n");
+        sb.append("        <Material emissiveColor='0.2 0.8 0.8'/>").append("\n");
+        sb.append("      </Appearance>").append("\n");
+        sb.append("      <LineSet vertexCount='").append(waypointsList.size()).append("'>").append("\n");
+        sb.append("        <Coordinate point='");
+        for (int i = 0; i < waypointsList.size(); i++)
+        {
+            if (hasAddLineBreaksWithinKeyValues())
+                sb.append("\n");
+            Vector3Double nextPosition = waypointsList.get(i);
+            sb.append(String.valueOf(nextPosition.getX())).append(" ")
+              .append(String.valueOf(nextPosition.getY())).append(" ")
+              .append(String.valueOf(nextPosition.getZ()));
+            if (i < waypointsList.size() - 1)
+                sb.append(",");
+        }
+        sb.append("'/>").append("\n");
+        sb.append("      </LineSet>").append("\n");
+        sb.append("    </Shape>").append("\n");
+        sb.append("    <Transform DEF='AnimationTransform'>").append("\n");
+        sb.append("      <Transform rotation='0 0 1 1.57'>").append("\n");
+        sb.append("        <Shape>").append("\n");
+        sb.append("          <Appearance USE='TrackAppearance'/>").append("\n");
+        sb.append("          <Cone bottomRadius='0.5'/>").append("\n");
+        sb.append("        </Shape>").append("\n");
+        sb.append("      </Transform>").append("\n");
+        sb.append("    </Transform>").append("\n");
+        sb.append("    <ROUTE fromField='value_changed' fromNode='")
+          .append(getX3dPositionInterpolatorDEF())
+          .append("' toField='translation' toNode='AnimationTransform'/>").append("\n");
+        sb.append("    <ROUTE fromField='value_changed' fromNode='")
+          .append(getX3dOrientationInterpolatorDEF())
+          .append("' toField='rotation' toNode='AnimationTransform'/>").append("\n");
+        
+        sb.append("  </Scene>").append("\n");
+        sb.append("</X3D>").append("\n");
+        
+        return sb.toString();
+    }
+
+    /**
+     * get defaultWaypointInterval
+     * @return current wayPointInterval
+     */
+    public float getDefaultWaypointInterval() {
+        return defaultWaypointInterval;
+    }
+
+    /**
+     * Set uniform waypoint interval (currently for testing)
+     * @param newWaypointInterval the wayPointInterval to set, in seconds, must be greater than zero
+     * @return same object to permit progressive setters */
+    public PduTrack setDefaultWaypointInterval(float newWaypointInterval) {
+        if (newWaypointInterval > 0.0)
+            this.defaultWaypointInterval = newWaypointInterval;
+        else 
+        {
+            System.out.println(TRACE_PREFIX + "error in setWaypointInterval(newWaypointInterval=" + newWaypointInterval + ") must be greater than zero");
+            return this;
+        }
+            
+        float clock = 0.0f;
+        if (!timelineList.isEmpty())
+        {   
+            ArrayList<Float> newTimelineList = new ArrayList<>();
+            for (int i = 0; i < getEspduCount(); i++)
+            {
+                newTimelineList.add(clock);
+                clock += defaultWaypointInterval;
+            }
+            timelineList = newTimelineList; // TO Array copy?
+        }
+        return this;
+    }
+    /** whether or not to insert commas between hex values */
+    private boolean insertCommas = true;
+    /**
+     * determine whether comma insertion is turned on
+     * @return whether or not to insert commas between hex values
+     */
+    public boolean hasInsertCommas() {
+        return insertCommas;
+    }
+    /**
+     * set whether comma insertion is turned on
+     * @param insertCommas the insertCommas value to set
+     */
+    public void setInsertCommas(boolean insertCommas) {
+        this.insertCommas = insertCommas;
+    }
+    /**
+     * Convert byte array to hex string
+     * @param bytes input data
+     * @param insertCommas whether to insert commas between hex values
+     * @return hex string
+     */
+    public String bytesToHex(byte[] bytes, boolean insertCommas)
+    {
+        this.setInsertCommas(insertCommas);
+        return bytesToHex(bytes);
+    }
+    /**
+     * Convert byte array to hex string
+     * @param bytes input data
+     * @see <a href="https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java" target="_blank">https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java</a>
+     * @return hex string
+     */
+    public static String bytesToHex(byte[] bytes)
+    {
+        boolean insertCommas = true;
+        final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
+        char[] hexChars = new char[bytes.length * 2];
+        StringBuilder sb = new StringBuilder();
+        for (int j = 0; j < bytes.length; j++) {
+            int v = bytes[j] & 0xFF;
+            hexChars[j * 2]     = HEX_ARRAY[v >>> 4];
+            hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
+//          if (!(hexChars[j * 2] == '0')) // omit leading zero
+            sb.append(hexChars[j * 2]);
+            sb.append(hexChars[j * 2 + 1]);
+            if (insertCommas && (j < bytes.length - 1))
+                sb.append(", ");
+        }
+        return sb.toString();
+    }
+    /**
+     * Report current PDU information to console
+     * @param anEspdu EntityStatePdu of interest
+     * @return same object to permit progressive setters
+     */
+    public PduTrack reportPdu(EntityStatePdu anEspdu)
+    {
+        System.out.println (
+                String.format("%s", anEspdu.getMarkingString().trim()) + ", " +
+                DisTime.convertToString(anEspdu.getTimestamp()) + " (" +
+                String.format("%08d", anEspdu.getTimestamp()) + "), " + 
+                "EntityID=(" + 
+                anEspdu.getEntityID().getSiteID() + ", " +
+                anEspdu.getEntityID().getApplicationID() + ", " + 
+                anEspdu.getEntityID().getEntityID() + "), " +
+                "location=(" + 
+                String.format("%4.1f", anEspdu.getEntityLocation().getX()) + ", " +
+                String.format("%4.1f", anEspdu.getEntityLocation().getY()) + ", " + 
+                String.format("%4.1f", anEspdu.getEntityLocation().getZ()) + ")"
+//              + " " + espdu_1.getEntityLinearVelocity().toString()
+        );
+        return this;
+    }
+    
+    /** Flush all buffers to reduce console scrambling while threaded
+     */
+    protected void flushBuffers()
+    {
+        try
+        {
+                 dataOutputStream.flush(); 
+            byteArrayOutputStream.flush();
+            byteArrayOutputStream.reset();
+            System.err.flush(); 
+            System.out.flush();
+        }
+        catch (IOException ioe)
+        {
+            System.out.println(TRACE_PREFIX + "flushBuffers() IOException: " + ioe.getMessage());
+        }
+    }
+    
+    /** Self test to check basic operation, invoked by main()
+     */
+    @SuppressWarnings("SleepWhileInLoop")
+    public void selfTest()
+    {
+        final int TOTAL_PDUS = 5;
+        System.out.println(TRACE_PREFIX + "selfTest() start...");
+      
+        PduTrack pduTrack = new PduTrack();
+        pduTrack.setDescriptor("PduTrack Self Test");
+        pduTrack.setAuthor("Don Brutzman");
+        pduTrack.setX3dModelIdentifier("https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/PduTrackInterpolation.x3d");
+        pduTrack.setDefaultWaypointInterval(1.0f); // experimentation with timestamp values
+
+        DisTime.setEpochLvcNow();
+        recordingStart = LocalDateTime.now();
+        Instant epoch = DisTime.getEpochLvc();
+        System.out.println(TRACE_PREFIX + "DisTime.hasEpochLvc()=" + DisTime.hasEpochLvc() + 
+                                         ", DisTime.getEpochLvc()=" + epoch + 
+                                         ", Instant.now()=" + Instant.now());
+        
+        EntityID entityID_123 = new EntityID();
+        entityID_123.setSiteID(1).setApplicationID(2).setEntityID(3); // made-up example ID;
+        // TODO someday, use enumerations; is there a unique site triplet for MOVES Institute?
+
+        for (int i = 0; i < TOTAL_PDUS; i++) // create espdus and add each to track pduList
+        {
+//          EntityStatePdu espdu = new EntityStatePdu();
+            EntityStatePdu espdu = pduFactory.makeEntityStatePdu(); // TODO check Pdu.Type
+            espdu.setTimestamp(DisTime.getCurrentDisTimestamp()); // chooses appropriate version
+            espdu.setMarking("ESPDU " + i);
+            espdu.setEntityLocation(i, i, i);
+            espdu.setEntityOrientation(0, (float)(45.0 * Math.PI / 180.0), 0);
+            espdu.setEntityID(entityID_123);
+            espdu.setForceId(ForceID.FRIENDLY);
+            espdu.setEntityType(new _001Poseidon()); // note import statement above
+            pduTrack.addPdu(espdu); // create copy
+            reportPdu(espdu);
+            try
+            {
+                Thread.sleep(100l);
+            }
+            catch (InterruptedException ie)
+            {
+                System.out.println(TRACE_PREFIX + "exceptional sleep dulay when generating ESPDUs: " + ie.getMessage());
+            }
+        }
+//        System.out.println(TRACE_PREFIX + "reversePdus() then sortPdus() to test track operations");
+//        pduTrack.reversePdus(); // test
+//        pduTrack.sortPdus();    // restore
+        pduTrack.createRawWaypoints(); // copies all ESPDU points to waypoints
+        
+        System.out.println(TRACE_PREFIX + "getEspduCount()="              + pduTrack.getEspduCount());
+        System.out.println(TRACE_PREFIX + "getDefaultWaypointInterval()=" + pduTrack.getDefaultWaypointInterval());
+        System.out.println(TRACE_PREFIX + "getTotalDurationSeconds()="    + pduTrack.getTotalDurationSeconds());
+        
+        System.out.println("=================================");
+        System.out.println("PduTrack pduList marshalling checks");
+        System.out.println("= = = = = = = = = = = = = = = = =");
+        try
+        {
+//          int BYTE_BUFFER_SIZE = 400; // TODO what is expected max buffer size?
+            for (int i = 0; i < TOTAL_PDUS; i++)
+            {
+                Pdu pdu = pduTrack.getPduList().get(i);
+                if (!(pdu instanceof EntityStatePdu))
+                    continue; // skip remainder of this loop
+                EntityStatePdu espdu = (EntityStatePdu) pdu;
+                System.out.println("espdu from pduTrack pduList");
+                reportPdu(espdu);
+                byte[] byteArray = espdu.marshal().array(); // can also use ByteBuffer
+                System.out.println("espdu.marshal() byteArray:                              " + bytesToHex(byteArray));
+                flushBuffers();
+                
+                ByteBuffer byteBuffer = ByteBuffer.allocate(byteArray.length);
+                espdu.marshal(byteBuffer);
+                System.out.println("espdu.marshal(byteBuffer):                              " + bytesToHex(byteBuffer.array()));
+                flushBuffers();
+                
+                espdu.marshal(dataOutputStream);
+                byte[] byteArrayDOS = byteArrayOutputStream.toByteArray();
+                System.out.println("espdu.marshal(dataOutputStream):                        " + bytesToHex(byteArrayDOS));
+                flushBuffers();
+
+                System.out.println(); // - - - - - - - - - - - - - - - - -
+                
+                System.out.println("espdu.copyByteBuffer()");
+                reportPdu(espdu.copyByteBuffer());
+                byte[] byteArrayCopy = espdu.copyByteBuffer().marshal().array(); // can also use ByteBuffer
+                System.out.println("espdu.copyByteBuffer().marshal() byteArray:             " + bytesToHex(byteArrayCopy));
+                flushBuffers();
+                
+                ByteBuffer byteBufferCopy = ByteBuffer.allocate(byteArray.length); // TODO is there a better way to reset?
+                espdu.copyByteBuffer().marshal(byteBufferCopy);
+                System.out.println("espdu.copyByteBuffer().marshal(byteBufferCopy):         " + bytesToHex(byteBufferCopy.array()));
+                flushBuffers();
+                
+                espdu.copyByteBuffer().marshal(dataOutputStream);
+                byte[] byteArrayDosCopy = byteArrayOutputStream.toByteArray();
+                System.out.println("espdu.copyByteBuffer().marshal(dataOutputStream):       " + bytesToHex(byteArrayDosCopy));
+                flushBuffers();
+
+                System.out.println(); // - - - - - - - - - - - - - - - - -
+                
+                System.out.println("espdu.copyDataOutputStream()");
+                reportPdu(espdu.copyDataOutputStream());
+                byte[] byteArrayCopyDOS = espdu.copyDataOutputStream().marshal().array(); // can also use ByteBuffer
+                System.out.println("espdu.copyDataOutputStream().marshal() byteArray:       " + bytesToHex(byteArrayCopyDOS));
+                flushBuffers();
+                
+                ByteBuffer byteBufferCopyDOS = ByteBuffer.allocate(byteArray.length); // TODO is there a better way to reset?
+                espdu.copyDataOutputStream().marshal(byteBufferCopyDOS);
+                System.out.println("espdu.copyDataOutputStream().marshal(byteBufferCopy):   " + bytesToHex(byteBufferCopyDOS.array()));
+                flushBuffers();
+                
+                espdu.copyDataOutputStream().marshal(dataOutputStream);
+                byte[] byteArrayDosCopy2 = byteArrayOutputStream.toByteArray();
+                System.out.println("espdu.copyDataOutputStream().marshal(dataOutputStream): " + bytesToHex(byteArrayDosCopy2));
+                flushBuffers();
+                System.out.println();
+                
+                System.out.println("= = = = = = = = = = = = = = = = =");
+            }
+        }
+        catch(Exception e)
+        {
+            System.out.println(TRACE_PREFIX + "Marshalling test exception: " + e.getMessage());
+        }
+        System.out.println("=================================");
+        pduTrack.setAddLineBreaksWithinKeyValues(true);
+        System.out.println(pduTrack.createX3dModel()); // 
+        System.out.println("=================================");
+
+        recordingStop = LocalDateTime.now();
+        System.out.println(TRACE_PREFIX + "selfTest() complete.");
+    }
+    
+    /**
+     * Main method for testing.
+     * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html" target="_blank">Java Tutorials: A Closer Look at the "Hello World!" Application</a>
+     * @param args [address, port, descriptor] command-line arguments are an array of optional String parameters that are passed from execution environment during invocation
+     */
+    public static void main(String[] args)
+    {
+        System.out.println("*** PduTrack.main() self test started...");
+          
+        PduTrack pduTrack = new PduTrack();
+        
+        pduTrack.setDescriptor("main() self test");
+        
+        pduTrack.selfTest();
+        
+        System.out.println("*** PduTrack.main() self test complete.");
+    }
+
+}
diff --git a/assignments/src/src/OpenDis7Examples/PduTrackInterpolation.x3d b/assignments/src/src/OpenDis7Examples/PduTrackInterpolation.x3d
new file mode 100644
index 0000000000000000000000000000000000000000..f9a4dafc84b2998ec60c537b208ee92a10e9a8e0
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/PduTrackInterpolation.x3d
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 4.0//EN" "https://www.web3d.org/specifications/x3d-4.0.dtd">
+<X3D profile='Interchange' version='4.0' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-4.0.xsd'>
+  <head>
+    <meta content='PduTrackInterpolation.x3d' name='title'/>
+    <meta content='Conversion of ESPDU track into X3D animation interpolators and LineSet.' name='description'/>
+    <meta content='1 January 2022' name='created'/>
+    <meta content='30 May 2022' name='modified'/>
+    <meta content='Don Brutzman' name='creator'/>
+    <meta content='https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/PduTrackInterpolation.x3d' name='identifier'/>
+    <meta content='PduTrack utility, opendis7-java Library https://github.com/open-dis/opendis7-java' name='generator'/>
+    <meta content='NPS MOVES MV3500 Networked Graphics https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500' name='reference'/>
+    <meta content='X3D Resources https://www.web3d.org/x3d/content/examples/X3dResources.html' name='reference'/>
+    <meta content='X3D Scene Authoring Hints https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html' name='reference'/>
+    <meta content='X3D Tooltips https://www.web3d.org/x3d/tooltips/X3dTooltips.html' name='reference'/>
+    <meta content='X3D Validator https://savage.nps.edu/X3dValidator' name='reference'/>
+    <meta content='Open source https://raw.githubusercontent.com/open-dis/opendis7-java/master/license.html' name='license'/>
+  </head>
+  <Scene>
+    <WorldInfo title='PduTrackInterpolation.x3d'/>
+    <TimeSensor DEF='PduTrackSelfTestClock' cycleInterval='5.0' loop='true'/>
+    <PositionInterpolator DEF='PduTrackSelfTestPositions' key='0.0 1.0 2.0 3.0 4.0' keyValue='
+0.0 0.0 0.0,
+1.0 1.0 1.0,
+2.0 2.0 2.0,
+3.0 3.0 3.0,
+4.0 4.0 4.0'/>
+    <OrientationInterpolator DEF='PduTrackSelfTestOrientations' key='0.0 1.0 2.0 3.0 4.0' keyValue='
+0.0 1.0 0.0 0.7853982,
+0.0 1.0 0.0 0.7853982,
+0.0 1.0 0.0 0.7853982,
+0.0 1.0 0.0 0.7853982,
+0.0 1.0 0.0 0.7853982'/>
+    <ROUTE fromField='fraction_changed' fromNode='PduTrackSelfTestClock' toField='set_fraction' toNode='PduTrackSelfTestPositions'/>
+    <ROUTE fromField='fraction_changed' fromNode='PduTrackSelfTestClock' toField='set_fraction' toNode='PduTrackSelfTestOrientations'/>
+    <Shape>
+      <Appearance DEF='TrackAppearance'>
+        <Material emissiveColor='0.2 0.8 0.8'/>
+      </Appearance>
+      <LineSet vertexCount='5'>
+        <Coordinate point='
+0.0 0.0 0.0,
+1.0 1.0 1.0,
+2.0 2.0 2.0,
+3.0 3.0 3.0,
+4.0 4.0 4.0'/>
+      </LineSet>
+    </Shape>
+    <Transform DEF='AnimationTransform'>
+      <Transform rotation='0 0 1 1.57'>
+        <Shape>
+          <Appearance USE='TrackAppearance'/>
+          <Cone bottomRadius='0.5'/>
+        </Shape>
+      </Transform>
+    </Transform>
+    <ROUTE fromField='value_changed' fromNode='PduTrackSelfTestPositions' toField='translation' toNode='AnimationTransform'/>
+    <ROUTE fromField='value_changed' fromNode='PduTrackSelfTestOrientations' toField='rotation' toNode='AnimationTransform'/>
+  </Scene>
+</X3D>
\ No newline at end of file
diff --git a/assignments/src/src/OpenDis7Examples/PduTrackLog.txt b/assignments/src/src/OpenDis7Examples/PduTrackLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7407f218aa8fa6b9d6981b6196ffd74a817bf932
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/PduTrackLog.txt
@@ -0,0 +1,183 @@
+ant -f C:\\x-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=OpenDis7Examples/PduTrack.java -Drun.class=OpenDis7Examples.PduTrack run-single
+init:
+Deleting: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+compile-single:
+run-single:
+*** PduTrack.main() self test started...
+[PduTrack main() self test] selfTest() start...
+[PduTrack main() self test] DisTime.hasEpochLvc()=true, DisTime.getEpochLvc()=2022-06-26T03:49:22.355281100Z, Instant.now()=2022-06-26T03:49:22.355281100Z
+ESPDU 0, 1969-00-31 16:00:35 (00035791), EntityID=(1, 2, 3), location=( 0.0,  0.0,  0.0)
+ESPDU 1, 1969-03-31 16:03:13 (00193273), EntityID=(1, 2, 3), location=( 1.0,  1.0,  1.0)
+ESPDU 2, 1969-05-31 16:05:23 (00323315), EntityID=(1, 2, 3), location=( 2.0,  2.0,  2.0)
+ESPDU 3, 1969-07-31 16:07:34 (00454551), EntityID=(1, 2, 3), location=( 3.0,  3.0,  3.0)
+ESPDU 4, 1969-09-31 16:09:43 (00583399), EntityID=(1, 2, 3), location=( 4.0,  4.0,  4.0)
+[PduTrack main() self test] getEspduCount()=5
+[PduTrack main() self test] getDefaultWaypointInterval()=1.0
+[PduTrack main() self test] getTotalDurationSeconds()=5.0
+=================================
+PduTrack pduList marshalling checks
+= = = = = = = = = = = = = = = = =
+espdu from pduTrack pduList
+ESPDU 0, 1969-00-31 16:00:35 (00035791), EntityID=(1, 2, 3), location=( 0.0,  0.0,  0.0)
+espdu.marshal() byteArray:                              07, 01, 01, 01, 00, 00, 8B, CF, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 30, 00, 00, 00, 00
+espdu.marshal(byteBuffer):                              07, 01, 01, 01, 00, 00, 8B, CF, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 30, 00, 00, 00, 00
+espdu.marshal(dataOutputStream):                        07, 01, 01, 01, 00, 00, 8B, CF, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 30, 00, 00, 00, 00
+
+espdu.copyByteBuffer()
+, 1969-00-31 16:00:00 (00000000), EntityID=(0, 0, 0), location=( 0.0,  0.0,  0.0)
+espdu.copyByteBuffer().marshal() byteArray:             00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00
+espdu.copyByteBuffer().marshal(byteBufferCopy):         00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00
+espdu.copyByteBuffer().marshal(dataOutputStream):       00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00
+
+espdu.copyDataOutputStream()
+ESPDU 0, 1969-00-31 16:00:35 (00035791), EntityID=(1, 2, 3), location=( 0.0,  0.0,  0.0)
+espdu.copyDataOutputStream().marshal() byteArray:       07, 01, 01, 01, 00, 00, 8B, CF, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 30, 00, 00, 00, 00
+espdu.copyDataOutputStream().marshal(byteBufferCopy):   07, 01, 01, 01, 00, 00, 8B, CF, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 30, 00, 00, 00, 00
+espdu.copyDataOutputStream().marshal(dataOutputStream): 07, 01, 01, 01, 00, 00, 8B, CF, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 30, 00, 00, 00, 00
+
+= = = = = = = = = = = = = = = = =
+espdu from pduTrack pduList
+ESPDU 1, 1969-03-31 16:03:13 (00193273), EntityID=(1, 2, 3), location=( 1.0,  1.0,  1.0)
+espdu.marshal() byteArray:                              07, 01, 01, 01, 00, 02, F2, F9, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, F0, 00, 00, 00, 00, 00, 00, 3F, F0, 00, 00, 00, 00, 00, 00, 3F, F0, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 31, 00, 00, 00, 00
+espdu.marshal(byteBuffer):                              07, 01, 01, 01, 00, 02, F2, F9, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, F0, 00, 00, 00, 00, 00, 00, 3F, F0, 00, 00, 00, 00, 00, 00, 3F, F0, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 31, 00, 00, 00, 00
+espdu.marshal(dataOutputStream):                        07, 01, 01, 01, 00, 02, F2, F9, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, F0, 00, 00, 00, 00, 00, 00, 3F, F0, 00, 00, 00, 00, 00, 00, 3F, F0, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 31, 00, 00, 00, 00
+
+espdu.copyByteBuffer()
+, 1969-00-31 16:00:00 (00000000), EntityID=(0, 0, 0), location=( 0.0,  0.0,  0.0)
+espdu.copyByteBuffer().marshal() byteArray:             00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00
+espdu.copyByteBuffer().marshal(byteBufferCopy):         00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00
+espdu.copyByteBuffer().marshal(dataOutputStream):       00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00
+
+espdu.copyDataOutputStream()
+ESPDU 1, 1969-03-31 16:03:13 (00193273), EntityID=(1, 2, 3), location=( 1.0,  1.0,  1.0)
+espdu.copyDataOutputStream().marshal() byteArray:       07, 01, 01, 01, 00, 02, F2, F9, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, F0, 00, 00, 00, 00, 00, 00, 3F, F0, 00, 00, 00, 00, 00, 00, 3F, F0, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 31, 00, 00, 00, 00
+espdu.copyDataOutputStream().marshal(byteBufferCopy):   07, 01, 01, 01, 00, 02, F2, F9, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, F0, 00, 00, 00, 00, 00, 00, 3F, F0, 00, 00, 00, 00, 00, 00, 3F, F0, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 31, 00, 00, 00, 00
+espdu.copyDataOutputStream().marshal(dataOutputStream): 07, 01, 01, 01, 00, 02, F2, F9, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, F0, 00, 00, 00, 00, 00, 00, 3F, F0, 00, 00, 00, 00, 00, 00, 3F, F0, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 31, 00, 00, 00, 00
+
+= = = = = = = = = = = = = = = = =
+espdu from pduTrack pduList
+ESPDU 2, 1969-05-31 16:05:23 (00323315), EntityID=(1, 2, 3), location=( 2.0,  2.0,  2.0)
+espdu.marshal() byteArray:                              07, 01, 01, 01, 00, 04, EE, F3, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 32, 00, 00, 00, 00
+espdu.marshal(byteBuffer):                              07, 01, 01, 01, 00, 04, EE, F3, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 32, 00, 00, 00, 00
+espdu.marshal(dataOutputStream):                        07, 01, 01, 01, 00, 04, EE, F3, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 32, 00, 00, 00, 00
+
+espdu.copyByteBuffer()
+, 1969-00-31 16:00:00 (00000000), EntityID=(0, 0, 0), location=( 0.0,  0.0,  0.0)
+espdu.copyByteBuffer().marshal() byteArray:             00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00
+espdu.copyByteBuffer().marshal(byteBufferCopy):         00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00
+espdu.copyByteBuffer().marshal(dataOutputStream):       00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00
+
+espdu.copyDataOutputStream()
+ESPDU 2, 1969-05-31 16:05:23 (00323315), EntityID=(1, 2, 3), location=( 2.0,  2.0,  2.0)
+espdu.copyDataOutputStream().marshal() byteArray:       07, 01, 01, 01, 00, 04, EE, F3, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 32, 00, 00, 00, 00
+espdu.copyDataOutputStream().marshal(byteBufferCopy):   07, 01, 01, 01, 00, 04, EE, F3, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 32, 00, 00, 00, 00
+espdu.copyDataOutputStream().marshal(dataOutputStream): 07, 01, 01, 01, 00, 04, EE, F3, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 32, 00, 00, 00, 00
+
+= = = = = = = = = = = = = = = = =
+espdu from pduTrack pduList
+ESPDU 3, 1969-07-31 16:07:34 (00454551), EntityID=(1, 2, 3), location=( 3.0,  3.0,  3.0)
+espdu.marshal() byteArray:                              07, 01, 01, 01, 00, 06, EF, 97, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 08, 00, 00, 00, 00, 00, 00, 40, 08, 00, 00, 00, 00, 00, 00, 40, 08, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 33, 00, 00, 00, 00
+espdu.marshal(byteBuffer):                              07, 01, 01, 01, 00, 06, EF, 97, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 08, 00, 00, 00, 00, 00, 00, 40, 08, 00, 00, 00, 00, 00, 00, 40, 08, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 33, 00, 00, 00, 00
+espdu.marshal(dataOutputStream):                        07, 01, 01, 01, 00, 06, EF, 97, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 08, 00, 00, 00, 00, 00, 00, 40, 08, 00, 00, 00, 00, 00, 00, 40, 08, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 33, 00, 00, 00, 00
+
+espdu.copyByteBuffer()
+, 1969-00-31 16:00:00 (00000000), EntityID=(0, 0, 0), location=( 0.0,  0.0,  0.0)
+espdu.copyByteBuffer().marshal() byteArray:             00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00
+espdu.copyByteBuffer().marshal(byteBufferCopy):         00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00
+espdu.copyByteBuffer().marshal(dataOutputStream):       00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00
+
+espdu.copyDataOutputStream()
+ESPDU 3, 1969-07-31 16:07:34 (00454551), EntityID=(1, 2, 3), location=( 3.0,  3.0,  3.0)
+espdu.copyDataOutputStream().marshal() byteArray:       07, 01, 01, 01, 00, 06, EF, 97, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 08, 00, 00, 00, 00, 00, 00, 40, 08, 00, 00, 00, 00, 00, 00, 40, 08, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 33, 00, 00, 00, 00
+espdu.copyDataOutputStream().marshal(byteBufferCopy):   07, 01, 01, 01, 00, 06, EF, 97, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 08, 00, 00, 00, 00, 00, 00, 40, 08, 00, 00, 00, 00, 00, 00, 40, 08, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 33, 00, 00, 00, 00
+espdu.copyDataOutputStream().marshal(dataOutputStream): 07, 01, 01, 01, 00, 06, EF, 97, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 08, 00, 00, 00, 00, 00, 00, 40, 08, 00, 00, 00, 00, 00, 00, 40, 08, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 33, 00, 00, 00, 00
+
+= = = = = = = = = = = = = = = = =
+espdu from pduTrack pduList
+ESPDU 4, 1969-09-31 16:09:43 (00583399), EntityID=(1, 2, 3), location=( 4.0,  4.0,  4.0)
+espdu.marshal() byteArray:                              07, 01, 01, 01, 00, 08, E6, E7, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 10, 00, 00, 00, 00, 00, 00, 40, 10, 00, 00, 00, 00, 00, 00, 40, 10, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 34, 00, 00, 00, 00
+espdu.marshal(byteBuffer):                              07, 01, 01, 01, 00, 08, E6, E7, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 10, 00, 00, 00, 00, 00, 00, 40, 10, 00, 00, 00, 00, 00, 00, 40, 10, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 34, 00, 00, 00, 00
+espdu.marshal(dataOutputStream):                        07, 01, 01, 01, 00, 08, E6, E7, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 10, 00, 00, 00, 00, 00, 00, 40, 10, 00, 00, 00, 00, 00, 00, 40, 10, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 34, 00, 00, 00, 00
+
+espdu.copyByteBuffer()
+, 1969-00-31 16:00:00 (00000000), EntityID=(0, 0, 0), location=( 0.0,  0.0,  0.0)
+espdu.copyByteBuffer().marshal() byteArray:             00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00
+espdu.copyByteBuffer().marshal(byteBufferCopy):         00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00
+espdu.copyByteBuffer().marshal(dataOutputStream):       00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00
+
+espdu.copyDataOutputStream()
+ESPDU 4, 1969-09-31 16:09:43 (00583399), EntityID=(1, 2, 3), location=( 4.0,  4.0,  4.0)
+espdu.copyDataOutputStream().marshal() byteArray:       07, 01, 01, 01, 00, 08, E6, E7, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 10, 00, 00, 00, 00, 00, 00, 40, 10, 00, 00, 00, 00, 00, 00, 40, 10, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 34, 00, 00, 00, 00
+espdu.copyDataOutputStream().marshal(byteBufferCopy):   07, 01, 01, 01, 00, 08, E6, E7, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 10, 00, 00, 00, 00, 00, 00, 40, 10, 00, 00, 00, 00, 00, 00, 40, 10, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 34, 00, 00, 00, 00
+espdu.copyDataOutputStream().marshal(dataOutputStream): 07, 01, 01, 01, 00, 08, E6, E7, 00, 90, 28, 00, 00, 01, 00, 02, 00, 03, 01, 00, 01, 03, 00, CD, 3E, 02, 01, 00, 00, 00, 00, E1, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 10, 00, 00, 00, 00, 00, 00, 40, 10, 00, 00, 00, 00, 00, 00, 40, 10, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 3F, 49, 0F, DB, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, 20, 20, 20, 45, 53, 50, 44, 55, 20, 34, 00, 00, 00, 00
+
+= = = = = = = = = = = = = = = = =
+=================================
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 4.0//EN" "https://www.web3d.org/specifications/x3d-4.0.dtd">
+<X3D profile='Interchange' version='4.0' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-4.0.xsd'>
+  <head>
+    <meta content='PduTrackInterpolation.x3d' name='title'/>
+    <meta content='Conversion of ESPDU track into X3D animation interpolators and LineSet.' name='description'/>
+    <meta content='1 January 2022' name='created'/>
+    <meta content='25 June 2022' name='modified'/>
+    <meta content='Don Brutzman' name='creator'/>
+    <meta content='https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/PduTrackInterpolation.x3d' name='identifier'/>
+    <meta content='PduTrack utility, opendis7-java Library https://github.com/open-dis/opendis7-java' name='generator'/>
+    <meta content='NPS MOVES MV3500 Networked Graphics https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500' name='reference'/>
+    <meta content='X3D Resources https://www.web3d.org/x3d/content/examples/X3dResources.html' name='reference'/>
+    <meta content='X3D Scene Authoring Hints https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html' name='reference'/>
+    <meta content='X3D Tooltips https://www.web3d.org/x3d/tooltips/X3dTooltips.html' name='reference'/>
+    <meta content='X3D Validator https://savage.nps.edu/X3dValidator' name='reference'/>
+    <meta content='Open source https://raw.githubusercontent.com/open-dis/opendis7-java/master/license.html' name='license'/>
+  </head>
+  <Scene>
+    <WorldInfo title='PduTrackInterpolation.x3d'/>
+    <TimeSensor DEF='PduTrackSelfTestClock' cycleInterval='5.0' loop='true'/>
+    <PositionInterpolator DEF='PduTrackSelfTestPositions' key='0.0 1.0 2.0 3.0 4.0' keyValue='
+0.0 0.0 0.0,
+1.0 1.0 1.0,
+2.0 2.0 2.0,
+3.0 3.0 3.0,
+4.0 4.0 4.0'/>
+    <OrientationInterpolator DEF='PduTrackSelfTestOrientations' key='0.0 1.0 2.0 3.0 4.0' keyValue='
+0.0 1.0 0.0 0.7853982,
+0.0 1.0 0.0 0.7853982,
+0.0 1.0 0.0 0.7853982,
+0.0 1.0 0.0 0.7853982,
+0.0 1.0 0.0 0.7853982'/>
+    <ROUTE fromField='fraction_changed' fromNode='PduTrackSelfTestClock' toField='set_fraction' toNode='PduTrackSelfTestPositions'/>
+    <ROUTE fromField='fraction_changed' fromNode='PduTrackSelfTestClock' toField='set_fraction' toNode='PduTrackSelfTestOrientations'/>
+    <Shape>
+      <Appearance DEF='TrackAppearance'>
+        <Material emissiveColor='0.2 0.8 0.8'/>
+      </Appearance>
+      <LineSet vertexCount='5'>
+        <Coordinate point='
+0.0 0.0 0.0,
+1.0 1.0 1.0,
+2.0 2.0 2.0,
+3.0 3.0 3.0,
+4.0 4.0 4.0'/>
+      </LineSet>
+    </Shape>
+    <Transform DEF='AnimationTransform'>
+      <Transform rotation='0 0 1 1.57'>
+        <Shape>
+          <Appearance USE='TrackAppearance'/>
+          <Cone bottomRadius='0.5'/>
+        </Shape>
+      </Transform>
+    </Transform>
+    <ROUTE fromField='value_changed' fromNode='PduTrackSelfTestPositions' toField='translation' toNode='AnimationTransform'/>
+    <ROUTE fromField='value_changed' fromNode='PduTrackSelfTestOrientations' toField='rotation' toNode='AnimationTransform'/>
+  </Scene>
+</X3D>
+
+=================================
+[PduTrack main() self test] selfTest() complete.
+*** PduTrack.main() self test complete.
+BUILD SUCCESSFUL (total time: 2 seconds)
diff --git a/assignments/src/src/OpenDis7Examples/README.md b/assignments/src/src/OpenDis7Examples/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..9718043fd1d864e5c4858b344f0b613b905bce41
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/README.md
@@ -0,0 +1,19 @@
+# DIS Protocol Examples using Open-DIS-Java Library v7
+
+These examples illustrate use of latest OpenDis7 library for IEEE Distributed Interactive Simulation (DIS) Protocol
+
+<!-- View this page at https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/README.md -->
+
+All examples tested, running and documented satisfactorily.
+
+This package presents course examples using the [Open-DIS-Java](https://github.com/open-dis/opendis7-java) library, with online [Javadoc](https://savage.nps.edu/opendis7-java/javadoc) showing complete coverage of 72 DIS PDUs and 22,000+ enumerations.
+
+See the [specifications](../../../specifications) directory to for guidance on obtaining reference copies of DIS and RPRFOM standards.
+
+|  AllPduSender packets in Wireshark   |EspduSender packets in Wireshark  |
+|--------------------------------------|----------------------------------|
+|  ![AllPduSender Wireshark](AllPduSenderWireshark.png "AllPduSender Wireshark") | ![EspduSenderSender Wireshark](EspduSenderWireshark.png "Multicast UDP Sender Wireshark") |
+
+| Example Simulation Program packets in Wireshark | PduReaderPlayer in Wireshark |
+|-------------------------------------------------|------------------------------|
+| ![Example Simulation Program packets in Wireshark](ExampleSimulationProgramWireshark.png "Example Simulation Program packets in Wireshark") | ![PduReaderPlayer in Wireshark](PduReaderPlayerWireshark.png "PduReaderPlayer in Wireshark") |
\ No newline at end of file
diff --git a/assignments/src/src/OpenDis7Examples/images/OpenDis7ExamplesAllPduScreenCapture.png b/assignments/src/src/OpenDis7Examples/images/OpenDis7ExamplesAllPduScreenCapture.png
new file mode 100644
index 0000000000000000000000000000000000000000..f22ecf7fbfaf759fe3c2fdbae60934a7b080a817
Binary files /dev/null and b/assignments/src/src/OpenDis7Examples/images/OpenDis7ExamplesAllPduScreenCapture.png differ
diff --git a/assignments/src/src/OpenDis7Examples/package-info.java b/assignments/src/src/OpenDis7Examples/package-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..b785145d7ea1647b6f909cdba772907b5a53e32a
--- /dev/null
+++ b/assignments/src/src/OpenDis7Examples/package-info.java
@@ -0,0 +1,10 @@
+/**
+ * opendis7 Java examples supporting the NPS MOVES MV3500 Networked Graphics course.
+ * 
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/examples/src/OpenDis7Examples" target="blank">NetworkedGraphicsMV3500 examples: OpenDis7Examples</a>
+ * @see java.lang.Package
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="blank">StackOverflow: how-do-i-document-packages-in-java</a>
+ */
+
+package OpenDis7Examples;
diff --git a/assignments/src/src/README.md b/assignments/src/src/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..34d2d0890b7973f2db2c20668a3fad1c9aaaf521
--- /dev/null
+++ b/assignments/src/src/README.md
@@ -0,0 +1,19 @@
+## MV3500 Examples Source Archive
+
+These example directories are presented in the same order provided in the course [../../presentations](presentations).
+
+<!-- View this page at https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/README.md -->
+
+1. [TcpExamples](TcpExamples) show how to create connection-oriented Transmission Control Protocol (TCP) sockets
+
+2. [UdpExamples](UdpExamples) show how to create User Datagram Protocol (UDP) sockets
+
+3. [OpenDis7Examples](OpenDis7Examples) illustrate use of latest OpenDis7 library for IEEE Distributed Interactive Simulation (DIS) Protocol
+
+4. [SimkitOpenDis7Examples](SimkitOpenDis7Examples) provides simple examples combining Simkit Discrete Event Simulation (DES) and IEEE DIS
+
+also with
+
+5. [OpenDis4Examples](OpenDis4Examples) illustrate use of (legacy) OpenDis4 library for IEEE Distributed Interactive Simulation (DIS) Protocol
+
+6. [HttpServletExamples](HttpServletExamples) shows how to use Java Servlets as server-side code running on an http server
diff --git a/assignments/src/src/SimkitOpenDis7Examples/ArrivalProcess.java b/assignments/src/src/SimkitOpenDis7Examples/ArrivalProcess.java
new file mode 100644
index 0000000000000000000000000000000000000000..8ff1b0c41204af0334617c636178c73e17ffb49d
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/ArrivalProcess.java
@@ -0,0 +1,97 @@
+package SimkitOpenDis7Examples;
+
+import simkit.SimEntityBase;
+import simkit.random.RandomVariate;
+
+/**
+ * One of the simplest non-trivial Event Graph models. A series of Arrival
+ * events is scheduled based on an inter arrival time random variate. The state
+ * variable, simply counts the number of these arrivals.
+ *
+ * @author abuss@nps.edu
+ */
+public class ArrivalProcess extends SimEntityBase {
+
+    /**
+     * Generates interarrival times
+     */
+    private RandomVariate interarrivalTimeGenerator;
+
+    /**
+     * State variable that counts the number of Arrival events
+     */
+    protected int numberArrivals;
+
+    /**
+     * Instantiate an ArrivalProcess with the given interarrivalTimeGenerator
+     *
+     * @param interarrivalTimeGenerator Given RandomVariate for interarrival
+     * times
+     */
+    public ArrivalProcess(RandomVariate interarrivalTimeGenerator) {
+        this.setInterarrivalTimeGenerator(interarrivalTimeGenerator);
+    }
+
+    /**
+     * If the ArrivalProcess is instantiated using the zero-argument
+     * constructor, be sure the set the interarrivalTimeGenerator with an
+     * explicit call to its setter method.
+     */
+    public ArrivalProcess() {
+    }
+
+    /**
+     * Initialize numberArrivals to 0
+     */
+    public void reset() {
+        super.reset();
+        numberArrivals = 0;
+    }
+
+    /**
+     * Schedule the first Arrival event with delay generated by
+     * interarrivalTimeGenerator
+     */
+    public void doRun() {
+        firePropertyChange("numberArrivals", getNumberArrivals());
+
+        waitDelay("Arrival", interarrivalTimeGenerator);
+    }
+
+    /**
+     * Increment numberArrivals<br>
+     * Schedule next Arrival event with delay generated by
+     * interarrivalTimeGenerator
+     */
+    public void doArrival() {
+        int oldNumberArrivals = getNumberArrivals();
+        numberArrivals += 1;
+        firePropertyChange("numberArrivals", oldNumberArrivals, getNumberArrivals());
+
+        waitDelay("Arrival", interarrivalTimeGenerator);
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return the interarrivalTimeGenerator
+     */
+    public RandomVariate getInterarrivalTimeGenerator() {
+        return interarrivalTimeGenerator;
+    }
+
+    /**
+     * accessor method to set a state variable
+     * @param interarrivalTimeGenerator the interarrivalTimeGenerator to set
+     */
+    public void setInterarrivalTimeGenerator(RandomVariate interarrivalTimeGenerator) {
+        this.interarrivalTimeGenerator = interarrivalTimeGenerator;
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return the numberArrivals
+     */
+    public int getNumberArrivals() {
+        return numberArrivals;
+    }
+}
diff --git a/assignments/src/src/SimkitOpenDis7Examples/ArrivalProcessOpenDis7.java b/assignments/src/src/SimkitOpenDis7Examples/ArrivalProcessOpenDis7.java
new file mode 100644
index 0000000000000000000000000000000000000000..b4b496ec0c396fa655dc46c15400570433aa0e8f
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/ArrivalProcessOpenDis7.java
@@ -0,0 +1,132 @@
+package SimkitOpenDis7Examples;
+
+import edu.nps.moves.dis7.enumerations.VariableRecordType;
+import edu.nps.moves.dis7.utilities.DisChannel;
+import simkit.SimEntityBase;
+import simkit.random.RandomVariate;
+
+/**
+ * ArrivalProcess event graph with openDis7 output PDU messages added.
+ * One of the simplest non-trivial Event Graph models. A series of Arrival
+ * events is scheduled based on an inter arrival time random variate. The state
+ * variable, simply counts the number of these arrivals.
+ *
+ * @see SimkitOpenDis7Examples.SimpleServer
+ * @see SimkitOpenDis7Examples.run.RunSimpleServerOpenDis7
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/examples/src/SimkitOpenDis7Examples/ArrivalProcessOpenDis7EventGraph.png" target="_blank">ArrivalProcessDisPdu.png</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/examples/src/SimkitOpenDis7Examples/SimpleServerComponentEventGraph.png" target="_blank">SimpleServerComponentEventGraph.png</a>
+ * @author abuss@nps.edu
+ * @author brutzman@nps.edu
+ */
+public class ArrivalProcessOpenDis7 extends SimEntityBase {
+    
+    private final DisChannel disChannel = new DisChannel();
+
+    /**
+     * Generates interarrival times
+     */
+    private RandomVariate interarrivalTimeGenerator;
+
+    /**
+     * State variable that counts the number of Arrival events
+     */
+    protected int numberArrivals;
+    
+    /** Initialize channel setup for OpenDis7 and report a test PDU */
+    private void initializeDisChannel()
+    {
+        disChannel.setUpNetworkInterface();
+        disChannel.printlnTRACE ("disChannel.getNetworkAddress()=" + disChannel.getNetworkAddress() +
+                                          ", getNetworkPort()="    + disChannel.getNetworkPort());
+        
+        disChannel.sendCommentPdu(VariableRecordType.OTHER, "ArrivalProcessOpenDis7 initialized");
+    }
+
+    /**
+     * Instantiate an ArrivalProcess with the given interarrivalTimeGenerator
+     *
+     * @param interarrivalTimeGenerator Given RandomVariate for interarrival
+     * times
+     */
+    public ArrivalProcessOpenDis7(RandomVariate interarrivalTimeGenerator) {
+        this.interarrivalTimeGenerator = interarrivalTimeGenerator;
+        initializeDisChannel();
+    }
+
+    /**
+     * If the ArrivalProcess is instantiated using the zero-argument
+     * constructor, be sure the set the interarrivalTimeGenerator with an
+     * explicit call to its setter method.
+     */
+    public ArrivalProcessOpenDis7() {
+        initializeDisChannel();
+    }
+
+    /**
+     * Initialize numberArrivals to 0
+     */
+    @Override
+    public void reset() {
+        super.reset();
+        numberArrivals = 0;
+    }
+
+    /**
+     * Schedule the first Arrival event with delay generated by
+     * interarrivalTimeGenerator
+     */
+    public void doRun() {
+        firePropertyChange("numberArrivals", getNumberArrivals());
+        
+        // TODO send simulation management PDUs via DIS channel, announce commencement
+
+        waitDelay("Arrival", interarrivalTimeGenerator);
+    }
+
+    /**
+     * Increment numberArrivals<br>
+     * Schedule next Arrival event with delay generated by
+     * interarrivalTimeGenerator
+     */
+    public void doArrival() {
+        int oldNumberArrivals = getNumberArrivals();
+        numberArrivals += 1;
+        firePropertyChange("numberArrivals", oldNumberArrivals, getNumberArrivals());
+        
+        // TODO announce selected arrivals via DIS channel
+
+        waitDelay("Arrival", interarrivalTimeGenerator);
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return the interarrivalTimeGenerator
+     */
+    public RandomVariate getInterarrivalTimeGenerator() {
+        return interarrivalTimeGenerator;
+    }
+
+    /**
+     * accessor method to set a state variable
+     * @param interarrivalTimeGenerator the interarrivalTimeGenerator to set
+     */
+    public void setInterarrivalTimeGenerator(RandomVariate interarrivalTimeGenerator) {
+        this.interarrivalTimeGenerator = interarrivalTimeGenerator;
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return the numberArrivals
+     */
+    public int getNumberArrivals() {
+        return numberArrivals;
+    }
+
+    /**
+     * accessor method to get current DIS channel object
+     * @return the disChannel
+     */
+    public DisChannel getDisChannel() {
+        return disChannel;
+    }
+}
diff --git a/assignments/src/src/SimkitOpenDis7Examples/ArrivalProcessOpenDis7EventGraph.png b/assignments/src/src/SimkitOpenDis7Examples/ArrivalProcessOpenDis7EventGraph.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad9db14a8fbe98b2f60e65d5f496a71a4618c62e
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/ArrivalProcessOpenDis7EventGraph.png differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/README.md b/assignments/src/src/SimkitOpenDis7Examples/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..5bb6cc0e3b210f02238669008be1839d26146702
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/README.md
@@ -0,0 +1,52 @@
+# Simkit DIS Examples
+
+[This directory](https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/examples/src/SimkitOpenDis7Examples) includes simple Simkit programs which are getting modified to
+utilize opendis7-java libraries for PDU output.
+
+## Design Goals
+
+* Integrate code to share state changes from Simkit entities as DIS PDU messages.
+* Establish reference examples with corresponding output logs for test confirmation.
+* Build interoperability examples for distributed simulation using Simkit, DIS and X3D.
+
+## Example Programs
+
+Design outline: [SimkitSimpleDiscreteEventSimulationModelForDIS.docx](documentation/SimkitSimpleDiscreteEventSimulationModelForDIS.docx)
+
+a. ArrivalProcess, SimpleServer: provide a simple starter example
+   * [ArrivalProcess.java](ArrivalProcess.java)
+   * [SimpleServer.java](SimpleServer.java) and [SimpleServerComponentEventGraph.png](SimpleServerComponentEventGraph.png)
+   * [run.RunSimpleServer.java](run/RunSimpleServer.java) and [run.RunSimpleServerLog.txt](run/RunSimpleServerLog.txt) 
+   * [ComputerAssignment 01 - The Arrival Process.docx](documentation/MV3302/ComputerAssignment 01 - The Arrival Process.docx)
+
+b. ArrivalProcessOpenDis7, SimpleServer: compatibly adds DIS output PDUs
+   * [ArrivalProcessOpenDis7.java](ArrivalProcessOpenDis7.java) and 
+     [ArrivalProcessOpenDis7EventGraph.png](ArrivalProcessOpenDis7EventGraph.png)
+   * [SimpleServer.java](SimpleServer.java) and [SimpleServerComponentEventGraph.png](SimpleServerComponentEventGraph.png)
+   * [run.SimpleServerOpenDis7.java](run/SimpleServerOpenDis7.java) and [run.RunSimpleServerLog.txt](run/SimpleServerOpenDis7.txt)
+
+c. Two Crane Berths
+   * [Ship.java](Ship.java)
+   * [ShipArrivalProcess.java](ShipArrivalProcess.java) and
+     [ShipArrivalProcessComponentEventGraph.png](ShipArrivalProcessComponentEventGraph.png)
+   * [TwoCraneBerths.java](TwoCraneBerths.java) and
+     [TwoCranesBerthComponentEventGraph.png](TwoCranesBerthComponentEventGraph.png)
+   * [run.RunTwoCranesBerth.java](run/RunTwoCranesBerth.java) and [run.RunTwoCranesBerthLog.txt](run/RunTwoCranesBerthLog.txt)
+   * [HarborWithTwoCranes.docx](documentation/HarborWithTwoCranes.docx) and [WrittenAssignment5Solution.docx](documentation/WrittenAssignment5Solution.docx)
+   * [ComputerAssignment 05 - Two Crane Berths.docx](documentation/MV3302/ComputerAssignment 05 - Two Crane Berths.docx)
+
+## References
+
+* Buss, Arnold, [Component Based Simulation Modeling with Simkit](documentation/BussComponentBasedSimulationModelingSimkitWintersim2002.pdf), Proceedings of the 2002 Winter Simulation Conference.
+* [Discrete Event Simulation Modeling](documentation/Discrete Event Simulation Modeling.pdf) manual for Simkit
+* https://github.com/ahbuss/Simkit
+* https://gitlab.nps.edu/abuss/MV3302ClassCode
+* [MV3302: Introduction to Discrete Event Simulation Modeling (SP22_1_AB)](https://cle.nps.edu/portal/site/7c6b3539-58e4-4640-9551-ab03f8629e3c) in NPS Sakai
+* [MV3302 > Resources > Handouts](https://cle.nps.edu/portal/site/7c6b3539-58e4-4640-9551-ab03f8629e3c/tool/7f0dea2b-fa42-4bed-8c38-c67ce9f56582?panel=Main)
+
+## TODO
+
+a. Refactor [OpenDis7Examples.ExampleSimulationProgram.java](../OpenDis7Examples/ExampleSimulationProgram.java) to extract re-usable DIS
+   network parameters, setup and teardown as a convenient superclass.
+
+b. Add additional PDU outputs to these examples.
diff --git a/assignments/src/src/SimkitOpenDis7Examples/Ship.java b/assignments/src/src/SimkitOpenDis7Examples/Ship.java
new file mode 100644
index 0000000000000000000000000000000000000000..aa46b4ca887a0452d52e0757bdf579c65b48db9c
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/Ship.java
@@ -0,0 +1,52 @@
+package SimkitOpenDis7Examples;
+
+import simkit.Entity;
+
+/**
+ * Model a ship that arrives at a pier for crane servicing
+ * @author abuss@nps.edu
+ */
+public class Ship extends Entity {
+
+    /**
+     * Remaining time to unload ship at unit rate
+     */
+    protected double remainingUnloadingTime;
+
+    /**
+     * Model constructor
+     * @throws IllegalArgumentException if remainingUnloadingTime &le; 0.0
+     * @param remainingUnloadingTime Given initial unloading time
+     */
+    public Ship(double remainingUnloadingTime) {
+        super("Ship");
+        if (remainingUnloadingTime <= 0.0) {
+            throw new IllegalArgumentException(
+                    "remainingUnloadingTime must be > 0.0: "
+                    + remainingUnloadingTime);
+        }
+        this.remainingUnloadingTime = remainingUnloadingTime;
+    }
+
+    /**
+     * Decrement remainingUnloadingTime by the elapsed time at the given rate
+     *
+     * @param rate Given rate of unloading
+     */
+    public void work(double rate) {
+        remainingUnloadingTime -= getElapsedTime() * rate;
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return The remainingUnloadingTime
+     */
+    public double getRemainingUnloadingTime() {
+        return remainingUnloadingTime;
+    }
+
+    @Override
+    public String toString() {
+        return super.toString() + String.format(" %.3f", getRemainingUnloadingTime());
+    }
+}
diff --git a/assignments/src/src/SimkitOpenDis7Examples/ShipArrivalProcess.java b/assignments/src/src/SimkitOpenDis7Examples/ShipArrivalProcess.java
new file mode 100644
index 0000000000000000000000000000000000000000..209bab376d71be17596bba00fe71dbc11f3c3f58
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/ShipArrivalProcess.java
@@ -0,0 +1,62 @@
+package SimkitOpenDis7Examples;
+
+import simkit.random.RandomVariate;
+
+/**
+ * Model a ship arrival process
+ * @author abuss@nps.edu
+ */
+public class ShipArrivalProcess extends ArrivalProcess {
+
+    /**
+     * Generates the initial unloading times for the Ships
+     */
+    private RandomVariate unloadTimeGenerator;
+
+    /**
+     * Zero-argument constructor
+     */
+    public ShipArrivalProcess() {
+    }
+
+    /**
+     * Instance constructor
+     * @param interarrivalTimeGenerator Given generator for interarrival times
+     * @param unloadTimeGenerator Given generator for total unloading times
+     */
+    public ShipArrivalProcess(
+            RandomVariate interarrivalTimeGenerator,
+            RandomVariate unloadTimeGenerator) {
+        this();
+        this.setInterarrivalTimeGenerator(interarrivalTimeGenerator);
+        this.setUnloadTimeGenerator(unloadTimeGenerator);
+    }
+
+    /**
+     * Instantiate a new Ship and Schedule Arrival(Ship)
+     */
+    @Override
+    public void doArrival() {
+        super.doArrival();
+        Ship ship = new Ship(unloadTimeGenerator.generate());
+        waitDelay("Arrival", 0.0, ship);
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return the unloadTimeGenerator
+     */
+    public RandomVariate getUnloadTimeGenerator() {
+        return unloadTimeGenerator;
+    }
+
+    /**
+     * accessor method to set a state variable
+     * @param unloadTimeGenerator the unloadTimeGenerator to set
+     */
+    public void setUnloadTimeGenerator(RandomVariate unloadTimeGenerator) {
+        this.unloadTimeGenerator = unloadTimeGenerator;
+    }
+
+
+}
diff --git a/assignments/src/src/SimkitOpenDis7Examples/ShipArrivalProcessComponentEventGraph.png b/assignments/src/src/SimkitOpenDis7Examples/ShipArrivalProcessComponentEventGraph.png
new file mode 100644
index 0000000000000000000000000000000000000000..626df45401cac09b588bab20c763aaeef5662e20
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/ShipArrivalProcessComponentEventGraph.png differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/SimpleServer.java b/assignments/src/src/SimkitOpenDis7Examples/SimpleServer.java
new file mode 100644
index 0000000000000000000000000000000000000000..5afa8dc658f80996cb82b19cf875fddf4f1a17f5
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/SimpleServer.java
@@ -0,0 +1,193 @@
+package SimkitOpenDis7Examples;
+
+import simkit.Priority;
+import simkit.SimEntityBase;
+import simkit.random.RandomVariate;
+
+/**
+ * Simple Server component. Instances of this class cannot be used on their own,
+ * but require another SimEntity to schedule Arrival events. If it is desired to
+ * listen to an event of another name,use an Adapter instance.
+ *
+ * The StartService is schedule with a positive priority, which will ensure it
+ * will occur ahead of any simultaneously scheduled Arrival events, as long as
+ * they have the default priority of 0.0.
+ *
+ * @author abuss@nps.edu
+ */
+public class SimpleServer extends SimEntityBase {
+
+    /**
+     * Total number of servers
+     */
+    private int totalNumberServers;
+    
+    /**
+     * Generates service times
+     */
+    private RandomVariate serviceTimeGenerator;
+
+    /**
+     * number of available servers at any time
+     */
+    protected int numberAvailableServers;
+    
+    /**
+     * number in queue at any time
+     */
+    protected int numberInQueue;
+    
+    /**
+     * Number customers served
+     */
+    protected int numberServed;
+
+    /**
+     * Zero-argument constructor
+     */
+    public SimpleServer() {
+    }
+
+    /**
+     * Creates a new instance of SimpleServer with the given parameters
+     *
+     * @param totalNumberServers Total number of servers
+     * @param serviceTimeGenerator Service time generator. Must be RandomVariate
+     * instance that only generates non-negative values.
+     */
+    public SimpleServer(int totalNumberServers, RandomVariate serviceTimeGenerator) {
+        setTotalNumberServers(totalNumberServers);
+        setServiceTimeGenerator(serviceTimeGenerator);
+    }
+
+    /**
+     * Set numberAvailable servers to total number servers, numberInQueue to 0,
+     * numberServed to 0.
+     */
+    @Override
+    public void reset() {
+        super.reset();
+        numberInQueue = 0;
+        numberAvailableServers = totalNumberServers;
+        numberServed = 0;
+    }
+
+    /**
+     * Just fires PropertyChange events
+     */
+    public void doRun() {
+        firePropertyChange("numberInQueue", getNumberInQueue());
+        firePropertyChange("numberAvailableServers", getNumberAvailableServers());
+        firePropertyChange("numberServed", getNumberServed());
+    }
+
+    /**
+     * Increment number in queue. If a server is available, schedule
+     * StartService immediately with priority of 1.0
+     */
+    public void doArrival() {
+        int oldNumberInQueue = numberInQueue;
+        numberInQueue = numberInQueue + 1;
+        firePropertyChange("numberInQueue", oldNumberInQueue, getNumberInQueue());
+        if (getNumberAvailableServers() > 0) {
+            waitDelay("StartService", 0.0, Priority.HIGH);
+        }
+    }
+
+    /**
+     * Decrement numberInQueue and numberAvailableServers Schedule EndService
+     * after service time delay
+     */
+    public void doStartService() {
+        int oldNumberInQueue = numberInQueue;
+        numberInQueue = numberInQueue - 1;
+        firePropertyChange("numberInQueue", oldNumberInQueue, numberInQueue);
+        int oldNumberAvailableServers = numberAvailableServers;
+        numberAvailableServers = numberAvailableServers - 1;
+        firePropertyChange("numberAvailableServers", oldNumberAvailableServers, numberAvailableServers);
+
+//        double serviceTime = getServiceTimeGenerator().generate();
+//        firePropertyChange("serviceTime", serviceTime);
+
+        waitDelay("EndService", serviceTimeGenerator);
+
+    }
+
+    /**
+     * Increment numberAvailableServers If customers in queue, schedule
+     * StartService immediately with HIGH priority
+     */
+    public void doEndService() {
+        int oldNumberAvailableServers = numberAvailableServers;
+        numberAvailableServers = numberAvailableServers + 1;
+        firePropertyChange("numberAvailableServers", oldNumberAvailableServers, numberAvailableServers);
+
+        int oldNumberServed = numberServed;
+        numberServed = numberServed + 1;
+        firePropertyChange("numberServed", oldNumberServed, numberServed);
+
+        if (getNumberInQueue() > 0) {
+            waitDelay("StartService", 0.0, Priority.HIGH);
+        }
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return the numberAvailableServers
+     */
+    public int getNumberAvailableServers() {
+        return numberAvailableServers;
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return the numberInQueue
+     */
+    public int getNumberInQueue() {
+        return numberInQueue;
+    }
+
+    /**
+     * accessor method to set a state variable
+     * @param totalNumberServers total number of servers
+     * @throws IllegalArgumentException if totalNumberServers &lt; 0
+     */
+    public void setTotalNumberServers(int totalNumberServers) {
+        if (totalNumberServers <= 0) {
+            throw new IllegalArgumentException("Need positive number of servers: " + totalNumberServers);
+        }
+        this.totalNumberServers = totalNumberServers;
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return the serviceTimeGenerator
+     */
+    public RandomVariate getServiceTimeGenerator() {
+        return this.serviceTimeGenerator;
+    }
+
+    /**
+     * accessor method to set a state variable
+     * @param serviceTimeGenerator the serviceTimeGenerator to set
+     */
+    public void setServiceTimeGenerator(RandomVariate serviceTimeGenerator) {
+        this.serviceTimeGenerator = serviceTimeGenerator;
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return the totalNumberServers
+     */
+    public int getTotalNumberServers() {
+        return this.totalNumberServers;
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return the numberServed
+     */
+    public int getNumberServed() {
+        return this.numberServed;
+    }
+}
diff --git a/assignments/src/src/SimkitOpenDis7Examples/SimpleServerComponentEventGraph.png b/assignments/src/src/SimkitOpenDis7Examples/SimpleServerComponentEventGraph.png
new file mode 100644
index 0000000000000000000000000000000000000000..dff11b08b2a259a4e8aadea52554a135ee216eb5
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/SimpleServerComponentEventGraph.png differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/SimpleServerOpenDis7.java b/assignments/src/src/SimkitOpenDis7Examples/SimpleServerOpenDis7.java
new file mode 100644
index 0000000000000000000000000000000000000000..de9824ebc3f69956b8d6467020b886b1d1fe5e9e
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/SimpleServerOpenDis7.java
@@ -0,0 +1,203 @@
+package SimkitOpenDis7Examples;
+
+import edu.nps.moves.dis7.enumerations.DisPduType;
+import edu.nps.moves.dis7.pdus.EntityStatePdu;
+import edu.nps.moves.dis7.utilities.DisChannel;
+import edu.nps.moves.dis7.utilities.PduFactory;
+import simkit.Priority;
+import simkit.SimEntityBase;
+import simkit.random.RandomVariate;
+
+/**
+ * Simple Server component. Instances of this class cannot be used on their own,
+ * but require another SimEntity to schedule Arrival events. If it is desired to
+ * listen to an event of another name,use an Adapter instance.
+ *
+ * The StartService is schedule with a positive priority, which will ensure it
+ * will occur ahead of any simultaneously scheduled Arrival events, as long as
+ * they have the default priority of 0.0.
+ *
+ * @author abuss@nps.edu
+ */
+public class SimpleServerOpenDis7 extends SimEntityBase
+{
+    // Utility constructor method: initial descriptor and verboseness of disNetworkInterface, pduRecorder
+    private final DisChannel disChannel = new DisChannel("TwoCraneBerthsOpenDis7", false, true); 
+    
+    PduFactory     pduFactory = new PduFactory();
+    EntityStatePdu espduCrane = (EntityStatePdu) pduFactory.createPdu(DisPduType.ENTITY_STATE);
+
+    /**
+     * Total number of servers
+     */
+    private int totalNumberServers;
+    
+    /**
+     * Generates service times
+     */
+    private RandomVariate serviceTimeGenerator;
+
+    /**
+     * number of available servers at any time
+     */
+    protected int numberAvailableServers;
+    
+    /**
+     * number in queue at any time
+     */
+    protected int numberInQueue;
+    
+    /**
+     * Number customers served
+     */
+    protected int numberServed;
+
+    /**
+     * Zero-argument constructor
+     */
+    public SimpleServerOpenDis7() {
+    }
+
+    /**
+     * Creates a new instance of SimpleServer with the given parameters
+     *
+     * @param totalNumberServers Total number of servers
+     * @param serviceTimeGenerator Service time generator. Must be RandomVariate
+     * instance that only generates non-negative values.
+     */
+    public SimpleServerOpenDis7(int totalNumberServers, RandomVariate serviceTimeGenerator) {
+        setTotalNumberServers(totalNumberServers);
+        setServiceTimeGenerator(serviceTimeGenerator);
+    }
+
+    /**
+     * Set numberAvailable servers to total number servers, numberInQueue to 0,
+     * numberServed to 0.
+     */
+    @Override
+    public void reset() {
+        super.reset();
+        numberInQueue = 0;
+        numberAvailableServers = totalNumberServers;
+        numberServed = 0;
+    }
+
+    /**
+     * Just fires PropertyChange events
+     */
+    public void doRun() {
+        firePropertyChange("numberInQueue", getNumberInQueue());
+        firePropertyChange("numberAvailableServers", getNumberAvailableServers());
+        firePropertyChange("numberServed", getNumberServed());
+    }
+
+    /**
+     * Increment number in queue. If a server is available, schedule
+     * StartService immediately with priority of 1.0
+     */
+    public void doArrival() {
+        int oldNumberInQueue = numberInQueue;
+        numberInQueue = numberInQueue + 1;
+        firePropertyChange("numberInQueue", oldNumberInQueue, getNumberInQueue());
+        if (getNumberAvailableServers() > 0) {
+            waitDelay("StartService", 0.0, Priority.HIGH);
+        }
+    }
+
+    /**
+     * Decrement numberInQueue and numberAvailableServers Schedule EndService
+     * after service time delay
+     */
+    public void doStartService() {
+        int oldNumberInQueue = numberInQueue;
+        numberInQueue = numberInQueue - 1;
+        firePropertyChange("numberInQueue", oldNumberInQueue, numberInQueue);
+        int oldNumberAvailableServers = numberAvailableServers;
+        numberAvailableServers = numberAvailableServers - 1;
+        firePropertyChange("numberAvailableServers", oldNumberAvailableServers, numberAvailableServers);
+
+//        double serviceTime = getServiceTimeGenerator().generate();
+//        firePropertyChange("serviceTime", serviceTime);
+
+        waitDelay("EndService", serviceTimeGenerator);
+
+    }
+
+    /**
+     * Increment numberAvailableServers If customers in queue, schedule
+     * StartService immediately with HIGH priority
+     */
+    public void doEndService() {
+        int oldNumberAvailableServers = numberAvailableServers;
+        numberAvailableServers = numberAvailableServers + 1;
+        firePropertyChange("numberAvailableServers", oldNumberAvailableServers, numberAvailableServers);
+
+        int oldNumberServed = numberServed;
+        numberServed = numberServed + 1;
+        firePropertyChange("numberServed", oldNumberServed, numberServed);
+
+        if (getNumberInQueue() > 0) {
+            waitDelay("StartService", 0.0, Priority.HIGH);
+        }
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return the numberAvailableServers
+     */
+    public int getNumberAvailableServers() {
+        return numberAvailableServers;
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return the numberInQueue
+     */
+    public int getNumberInQueue() {
+        return numberInQueue;
+    }
+
+    /**
+     * accessor method to set a state variable
+     * @param totalNumberServers total number of servers
+     * @throws IllegalArgumentException if totalNumberServers &lt; 0
+     */
+    public void setTotalNumberServers(int totalNumberServers) {
+        if (totalNumberServers <= 0) {
+            throw new IllegalArgumentException("Need positive number of servers: " + totalNumberServers);
+        }
+        this.totalNumberServers = totalNumberServers;
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return the serviceTimeGenerator
+     */
+    public RandomVariate getServiceTimeGenerator() {
+        return this.serviceTimeGenerator;
+    }
+
+    /**
+     * accessor method to set a state variable
+     * @param serviceTimeGenerator the serviceTimeGenerator to set
+     */
+    public void setServiceTimeGenerator(RandomVariate serviceTimeGenerator) {
+        this.serviceTimeGenerator = serviceTimeGenerator;
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return the totalNumberServers
+     */
+    public int getTotalNumberServers() {
+        return this.totalNumberServers;
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return the numberServed
+     */
+    public int getNumberServed() {
+        return this.numberServed;
+    }
+}
diff --git a/assignments/src/src/SimkitOpenDis7Examples/TwoCraneBerths.java b/assignments/src/src/SimkitOpenDis7Examples/TwoCraneBerths.java
new file mode 100644
index 0000000000000000000000000000000000000000..a10641544236b4071ee0455fd9e22c417326d7fa
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/TwoCraneBerths.java
@@ -0,0 +1,245 @@
+package SimkitOpenDis7Examples;
+
+import java.util.SortedSet;
+import java.util.TreeSet;
+import simkit.Priority;
+import simkit.SimEntityBase;
+
+/**
+ * Model two crane berths
+ * @author abuss@nps.edu
+ */
+public class TwoCraneBerths extends SimEntityBase
+{
+
+    /**
+     * Queue of Ships waiting to go into the berth
+     */
+    protected SortedSet<Ship> queue;
+
+    /**
+     * Contains 0, 1, or two Ships being unloaded
+     */
+    protected SortedSet<Ship> berth;
+
+    /**
+     * Time in the system for each Ship
+     */
+    protected double timeInSystem;
+
+    /**
+     * Delay in the queue for each Ship
+     */
+    protected double delayInQueue;
+
+    /**
+     * Instantiate queue and berth containers
+     */
+    public TwoCraneBerths() {
+        this.queue = new TreeSet<>();
+        this.berth = new TreeSet<>();
+    }
+
+    /**
+     * Clear queue and berth containers
+     */
+    @Override
+    public void reset() {
+        super.reset();
+        queue.clear();
+        berth.clear();
+        timeInSystem = Double.NaN; // Not a Number
+        delayInQueue = Double.NaN; // Not a Number
+    }
+
+    /**
+     * Only PropertyChangeEvents
+     */
+    public void doRun() 
+    {
+        firePropertyChange("queue", getQueue());
+        firePropertyChange("berth", getBerth());
+        firePropertyChange("timeInSystem", getTimeInSystem());
+        firePropertyChange("delayInQueue", getDelayInQueue());
+    }
+
+    /**
+     * Add the given Ship to queue<br>
+     * If berths is empty, schedule StartUnloadingTwoCranes<br>
+     * If berths has 1 Ship, schedule SwitchToOneCrane
+     *
+     * @param ship Given Ship arriving to harbor
+     */
+    public void doArrival(Ship ship) {
+
+        ship.stampTime();
+
+        SortedSet<Ship> oldQueue = getQueue();
+        queue.add(ship);
+        firePropertyChange("queue", oldQueue, getQueue());
+
+        if (berth.isEmpty()) {
+            waitDelay("StartUnloadingTwoCranes", 0.0, Priority.HIGH);
+        }
+
+        if (berth.size() == 1) {
+            waitDelay("SwitchToOneCrane", 0.0);
+        }
+    }
+
+    /**
+     * Remove the first Ship from queue<br>
+     * DelayInQueue is elapsedTime of that Ship<br>
+     * Add the ship to berth container<br>
+     * Schedule EndUnloadingTwoCranes at half the remaining time
+     */
+    public void doStartUnloadingTwoCranes() {
+        SortedSet<Ship> oldQueue = getQueue();
+        Ship ship = queue.first();
+        queue.remove(ship);
+        firePropertyChange("queue", oldQueue, getQueue());
+
+        delayInQueue = ship.getElapsedTime();
+        firePropertyChange("delayInQueue", getDelayInQueue());
+
+        ship.stampTime();
+
+        SortedSet<Ship> oldBerth = getBerth();
+        berth.add(ship);
+        firePropertyChange("berth", oldBerth, getBerth());
+
+        waitDelay("EndUnloadingTwoCranes", 0.5 * ship.getRemainingUnloadingTime());
+    }
+
+    /**
+     * Remove the (one) Ship from berth<br>
+     * TimeInSystem is the age of the Ship
+     */
+    public void doEndUnloadingTwoCranes() {
+        SortedSet<Ship> oldBerth = getBerth();
+        Ship ship = berth.first();
+        berth.remove(ship);
+        firePropertyChange("berth", oldBerth, getBerth());
+
+        timeInSystem = ship.getAge();
+        firePropertyChange("timeInSystem", getTimeInSystem());
+    }
+
+    /**
+     * This event is when a Ship arrives to find only one other Ship being
+     * unloaded.<br>
+     * Credit the ship in the berth with work at a rate of 2 (since 2 cranes
+     * have been unloading it<br>
+     * Interrupt EndUnloadingTwoCranes<br>
+     * Schedule EndUnloadingOneCrane with the Ship already in the berth<br>
+     * Schedule StartUnloadingOneCrane
+     */
+    public void doSwitchToOneCrane() {
+        Ship ship = berth.first();
+        ship.work(2.0);
+        ship.stampTime();
+
+        interrupt("EndUnloadingTwoCranes");
+
+        waitDelay("EndUnloadingOneCrane", ship.getRemainingUnloadingTime(), ship);
+
+        waitDelay("StartUnloadingOneCrane", 0.0, Priority.HIGH);
+    }
+
+    /**
+     * Pop the first Ship from the queue<br>
+     * delayInQueue is elapsedTime (from Arrival event)<br>
+     * Add that Ship to berth container<br>
+     * Schedule EndUnloadingOneCrane with that Ship
+     */
+    public void doStartUnloadingOneCrane() {
+        SortedSet<Ship> oldQueue = getQueue();
+        Ship ship = queue.first();
+        queue.remove(ship);
+        firePropertyChange("queue", oldQueue, getQueue());
+
+        delayInQueue = ship.getElapsedTime();
+        firePropertyChange("delayInQueue", getDelayInQueue());
+
+        ship.stampTime();
+
+        SortedSet<Ship> oldBerth = getBerth();
+        berth.add(ship);
+        firePropertyChange("berth", oldBerth, getBerth());
+
+        waitDelay("EndUnloadingOneCrane", ship.getRemainingUnloadingTime(), ship);
+    }
+
+    /**
+     * Remove given Ship from berth<br>
+     * If Ships in queue, schedule StartUnloadingOneCrane<br>
+     * If queue is empty, schedule SwitchToTwoCranes<br>
+     * timeInSystem is age of Ship
+     * 
+     * @param ship Given Ship
+     */
+    public void doEndUnloadingOneCrane(Ship ship) {
+        SortedSet<Ship> oldBerth = getBerth();
+        berth.remove(ship);
+        firePropertyChange("berth", oldBerth, getBerth());
+
+        if (queue.size() > 0) {
+            waitDelay("StartUnloadingOneCrane", 0.0, Priority.HIGH);
+        }
+
+        if (queue.isEmpty() && berth.size() == 1) {
+            waitDelay("SwitchToTwoCranes", 0.0);
+        }
+
+        timeInSystem = ship.getAge();
+        firePropertyChange("timeInSystem", getTimeInSystem());
+    }
+
+    /**
+     * Credit the work of the remaining Ship in berth at unit rate<br>
+     * Interrupt EndUnloadingOneCrane<br>
+     * Schedule EndUnloadingTwoCranes at double the rate (i.e., half the remaining time)
+     */
+    public void doSwitchToTwoCranes() {
+        Ship ship = berth.first();
+        ship.work(1.0);
+        ship.stampTime();
+
+        interrupt("EndUnloadingOneCrane", ship);
+
+        waitDelay("EndUnloadingTwoCranes",
+                0.5 * ship.getRemainingUnloadingTime());
+    }
+
+    /**
+     * Get tree of sorted Ship set queue
+     * @return Shallow copy of queue
+     */
+    public SortedSet<Ship> getQueue() {
+        return new TreeSet<>(queue);
+    }
+
+    /**
+     * Get tree of sorted Ship set berths
+     * @return Shallow copy of berth
+     */
+    public SortedSet<Ship> getBerth() {
+        return new TreeSet<>(berth);
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return The timeInSystem
+     */
+    public double getTimeInSystem() {
+        return timeInSystem;
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return The delayInQueue
+     */
+    public double getDelayInQueue() {
+        return delayInQueue;
+    }
+}
diff --git a/assignments/src/src/SimkitOpenDis7Examples/TwoCraneBerthsAssignment05.docx b/assignments/src/src/SimkitOpenDis7Examples/TwoCraneBerthsAssignment05.docx
new file mode 100644
index 0000000000000000000000000000000000000000..73271d2d04efcd4250e536d58b18e760f9c36b8d
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/TwoCraneBerthsAssignment05.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/TwoCraneBerthsAssignment05Solution.docx b/assignments/src/src/SimkitOpenDis7Examples/TwoCraneBerthsAssignment05Solution.docx
new file mode 100644
index 0000000000000000000000000000000000000000..a91574dcc69242c82303703ba899025c83314656
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/TwoCraneBerthsAssignment05Solution.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/TwoCraneBerthsOpenDis7.java b/assignments/src/src/SimkitOpenDis7Examples/TwoCraneBerthsOpenDis7.java
new file mode 100644
index 0000000000000000000000000000000000000000..a6deb8fa55631a010b7c98923c348605b70dccd9
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/TwoCraneBerthsOpenDis7.java
@@ -0,0 +1,406 @@
+package SimkitOpenDis7Examples;
+
+import edu.nps.moves.dis7.enumerations.DisPduType;
+import edu.nps.moves.dis7.enumerations.VariableRecordType;
+import edu.nps.moves.dis7.pdus.EntityStatePdu;
+import edu.nps.moves.dis7.pdus.EulerAngles;
+import edu.nps.moves.dis7.pdus.Vector3Double;
+import edu.nps.moves.dis7.utilities.DisChannel;
+import edu.nps.moves.dis7.utilities.PduFactory;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import simkit.Priority;
+import simkit.SimEntityBase;
+
+/**
+ * Add DIS outputs to TwoCraneBerths simkit simulation
+ * @see SimkitOpenDis7Examples.TwoCraneBerths
+ * @see <a href="run/RunTwoCranesBerthOpenDis7Log.txt" target="_blank">RunTwoCranesBerthOpenDis7Log.txt</a>
+ * @see <a href="TwoCraneBerthsAssignment05.docx" target="_blank">TwoCraneBerthsAssignment05.docx</a>
+ * @see <a href="TwoCraneBerthsAssignment05Solution.docx" target="_blank">TwoCraneBerthsAssignment05Solution.docx</a>
+ * @author abuss@nps.edu@nps.edu
+ * @author brutzman@nps.edu
+ */
+public class TwoCraneBerthsOpenDis7 extends SimEntityBase
+{
+    // Utility constructor method: initial descriptor and verboseness of disNetworkInterface, pduRecorder
+    private final DisChannel disChannel = new DisChannel("TwoCraneBerthsOpenDis7", false, true);
+    
+    PduFactory     pduFactory = new PduFactory();
+    EntityStatePdu espduCrane = (EntityStatePdu) pduFactory.createPdu(DisPduType.ENTITY_STATE);
+
+    /**
+     * Queue of Ships waiting to go into the berth
+     */
+    protected SortedSet<Ship> queue;
+
+    /**
+     * Contains 0, 1, or two Ships being unloaded
+     */
+    protected SortedSet<Ship> berth;
+
+    /**
+     * Time in the system for each Ship
+     */
+    protected double timeInSystem;
+
+    /**
+     * Delay in the queue for each Ship
+     */
+    protected double delayInQueue;
+
+    /**
+     * number of Ships offloaded
+     */
+    protected int shipCount = 0;
+
+    /**
+     * Instantiate queue and berth containers
+     */
+    public TwoCraneBerthsOpenDis7() {
+        this.queue = new TreeSet<>();
+        this.berth = new TreeSet<>();
+    }
+
+    /**
+     * Clear queue and berth containers
+     */
+    @Override
+    public void reset() {
+        super.reset();
+        queue.clear();
+        berth.clear();
+        timeInSystem = Double.NaN; // Not a Number
+        delayInQueue = Double.NaN; // Not a Number
+    }
+
+    /**
+     * Only PropertyChangeEvents
+     */
+    public void doRun()
+    {
+        disChannel.setVerboseComments(true);
+        disChannel.setVerboseDisNetworkInterface(true);
+        
+        firePropertyChange("queue", getQueue());
+        firePropertyChange("berth", getBerth());
+        firePropertyChange("timeInSystem", getTimeInSystem());
+        firePropertyChange("delayInQueue", getDelayInQueue());
+    }
+
+    /**
+     * Add the given Ship to queue<br>
+     * If berths is empty, schedule StartUnloadingTwoCranes<br>
+     * If berths has 1 Ship, schedule SwitchToOneCrane
+     *
+     * @param ship Given Ship arriving to harbor
+     */
+    public void doArrival(Ship ship) {
+
+        ship.stampTime();
+
+        SortedSet<Ship> oldQueue = getQueue();
+        queue.add(ship);
+        firePropertyChange("queue", oldQueue, getQueue());
+
+        if (berth.isEmpty()) {
+            waitDelay("StartUnloadingTwoCranes", 0.0, Priority.HIGH);
+        }
+
+        if (berth.size() == 1) {
+            waitDelay("SwitchToOneCrane", 0.0);
+        }
+    }
+
+    /**
+     * Remove the first Ship from queue<br>
+     * DelayInQueue is elapsedTime of that Ship<br>
+     * Add the ship to berth container<br>
+     * Schedule EndUnloadingTwoCranes at half the remaining time
+     */
+    public void doStartUnloadingTwoCranes() {
+        SortedSet<Ship> oldQueue = getQueue();
+        Ship ship = queue.first();
+        queue.remove(ship);
+        firePropertyChange("queue", oldQueue, getQueue());
+
+        delayInQueue = ship.getElapsedTime();
+        firePropertyChange("delayInQueue", getDelayInQueue());
+
+        ship.stampTime();
+
+        SortedSet<Ship> oldBerth = getBerth();
+        berth.add(ship);
+        firePropertyChange("berth", oldBerth, getBerth());
+        
+        // TODO reportCraneContainerUnloadOperationsDIS()
+
+        waitDelay("EndUnloadingTwoCranes", 0.5 * ship.getRemainingUnloadingTime());
+    }
+
+    /**
+     * Remove the (one) Ship from berth<br>
+     * TimeInSystem is the age of the Ship
+     */
+    public void doEndUnloadingTwoCranes() {
+        SortedSet<Ship> oldBerth = getBerth();
+        Ship ship = berth.first();
+        berth.remove(ship);
+        firePropertyChange("berth", oldBerth, getBerth());
+
+        timeInSystem = ship.getAge();
+        firePropertyChange("timeInSystem", getTimeInSystem());
+    }
+
+    /**
+     * This event is when a Ship arrives to find only one other Ship being
+     * unloaded.<br>
+     * Credit the ship in the berth with work at a rate of 2 (since 2 cranes
+     * have been unloading it<br>
+     * Interrupt EndUnloadingTwoCranes<br>
+     * Schedule EndUnloadingOneCrane with the Ship already in the berth<br>
+     * Schedule StartUnloadingOneCrane
+     */
+    public void doSwitchToOneCrane() {
+        Ship ship = berth.first();
+        ship.work(2.0);
+        ship.stampTime();
+
+        interrupt("EndUnloadingTwoCranes");
+
+        waitDelay("EndUnloadingOneCrane", ship.getRemainingUnloadingTime(), ship);
+
+        waitDelay("StartUnloadingOneCrane", 0.0, Priority.HIGH);
+    }
+
+    /**
+     * Pop the first Ship from the queue<br>
+     * delayInQueue is elapsedTime (from Arrival event)<br>
+     * Add that Ship to berth container<br>
+     * Schedule EndUnloadingOneCrane with that Ship
+     */
+    public void doStartUnloadingOneCrane() {
+        SortedSet<Ship> oldQueue = getQueue();
+        Ship ship = queue.first();
+        queue.remove(ship);
+        firePropertyChange("queue", oldQueue, getQueue());
+
+        delayInQueue = ship.getElapsedTime();
+        firePropertyChange("delayInQueue", getDelayInQueue());
+
+        ship.stampTime();
+
+        SortedSet<Ship> oldBerth = getBerth();
+        berth.add(ship);
+        firePropertyChange("berth", oldBerth, getBerth());
+        
+        // log crane operations for each ship
+        shipCount++;
+        
+        if (shipCount == 1)
+            System.out.println("=====================================");
+        if (shipCount <= 2)
+        {
+            reportCraneContainerUnloadOperationsDIS( ship.getTimeStamp(), // simkit timeStamp
+                                      10,  // numberOfContainers
+                                       90.0 // initial position of Ship
+                                    );     // TODO indicate berth
+            System.out.println("=====================================");
+        }
+
+        waitDelay("EndUnloadingOneCrane", ship.getRemainingUnloadingTime(), ship);
+    }
+    
+    /**
+     * Perform crane container unloading operations and send PDUs to report progress
+     * @param simkitTimeStamp  simkit timeStamp when crane operations began
+     * @param numberContainers how many container boxes to offload
+     * @param pierDistanceForCraneOffload  Y coordinate down pier across from ship's berth, aligned with cargo
+     * @see <a href="https://en.wikipedia.org/wiki/The_Box_(Levinson_book)" target="_blank">The Box: How the Shipping Container Made the World Smaller and the World Economy Bigger is</a>
+     */
+    public void reportCraneContainerUnloadOperationsDIS(
+                    double simkitTimeStamp,
+                    // which crane
+                    // which berth
+                    int    numberContainers, 
+                    double pierDistanceForCraneOffload
+                    // lengthOfCrane
+                )
+    {
+        int disTimeStamp = (int)simkitTimeStamp; // TODO document relationship
+        
+        // Pier coordinate system follows, Right-Hand Rule (RHR) throughout:
+        // +X axis to right  with X=0 on centerline of pier (train tracks
+        // +Y axis down pier with Y=0 at head of pier,
+        // +Z axis vertical  with Z=0 at level of pier
+        // phi   is rotation about +X axis, radians
+        // theta is rotation about +Y axis, radians
+        // psi   is rotation about +X axis, radians
+       
+        Vector3Double positionPierHead    = new Vector3Double();
+//      Vector3Double positionPierHead    = new Vector3Double(0.0, 0.0, 0.0); // TODO needs utility constructor
+        Vector3Double positionPierOffload = new Vector3Double();
+        positionPierOffload.setY(pierDistanceForCraneOffload);
+        
+        double       craneLinearSpeed  =  1.0; // m/sec
+        double       craneRotationRate = 10.0; // degrees/second
+        double containerHookupDuration = 60.0; // seconds average
+        double containerDetachDuration = 30.0; // seconds average
+        
+        // not modeling crane elevation angle, only orientation of crane cab and gantry
+        EulerAngles orientationToShip = (new EulerAngles()).setPsi((float) (90.0 * Math.PI/180.0)); // TODO utility methods needed
+        EulerAngles orientationToPier = (new EulerAngles()).setPsi((float) ( 0.0 * Math.PI/180.0)); // TODO utility methods needed
+        
+        // initialize ESPDU
+//      espduCrane.reset(); // TODO intialization utility method
+//      espduCrane.setEntityAppearance(TODO); // highlight active crane?
+        espduCrane.setTimestamp(disTimeStamp);
+        
+        // 1. Crane at head of pier, operator present, boom elevated vertically in stow position
+        espduCrane.setEntityLocation(positionPierHead);
+        espduCrane.setEntityOrientation(orientationToPier);
+        disChannel.sendSinglePdu (disTimeStamp, espduCrane);
+        disChannel.sendCommentPdu(disTimeStamp, VariableRecordType.CARGO, "Ready to process Ship " + shipCount + " with crane at head of pier");
+                
+        // 2, Ship arrives, tug departs
+        // ship PDU already, TODO can track tugboat here if desired for further fidelity
+        
+        // 3. Crane moves to position of ship: travel to positionOfCrane ay craneLinearSpeed
+        double craneTravelDuration = pierDistanceForCraneOffload / craneLinearSpeed; // units analysis: meters / (meters/second) = seconds
+        espduCrane.setEntityLocation(pierDistanceForCraneOffload, 0.0, 0.0);
+        disChannel.sendSinglePdu(disTimeStamp, espduCrane);
+        disChannel.sendCommentPdu(disTimeStamp, VariableRecordType.CARGO, 
+                                  "Crane moved to  position " + pierDistanceForCraneOffload + "m for offload after " + craneTravelDuration + " seconds");
+        
+        // 4. repeat until done: Crane rotates, lift container, rotates, lower container        
+        for (int containerIndex = 1; containerIndex <= numberContainers; containerIndex++)
+        {
+            // 4.a crane rotates to ship
+            double craneRotationDelay = 90.0 / craneRotationRate; // units analysis: degrees / (degrees/second) = seconds
+            espduCrane.setEntityOrientation(orientationToShip);
+            disChannel.sendSinglePdu(disTimeStamp, espduCrane);
+            disChannel.sendCommentPdu(disTimeStamp, VariableRecordType.CARGO, "Crane oriented to ship after " + craneRotationDelay + " seconds" +
+                                      " with craneRotationRate=" + craneRotationRate + " degrees/second");
+        
+//          // 4.b announce next step without further delay, then perform container hookup
+            disChannel.sendCommentPdu(disTimeStamp, VariableRecordType.CARGO, "Hooking up Container " + containerIndex + " to crane has started..."); // TODO + whichCrane
+            
+            disTimeStamp += containerHookupDuration;
+//          disChannel.sendSinglePdu(disTimeStamp, espduCrane); // superfluous, crane hasn't moved
+            disChannel.sendCommentPdu(disTimeStamp, VariableRecordType.CARGO, "Hooked up: Container " + containerIndex + " to crane" // TODO + whichCrane
+                                      + " after " + craneRotationDelay + " seconds");
+            
+            // 4.c crane rotates to pier
+            disTimeStamp += craneRotationDelay;
+            espduCrane.setEntityOrientation(orientationToPier);
+            disChannel.sendSinglePdu(disTimeStamp, espduCrane);
+            disChannel.sendCommentPdu(disTimeStamp, VariableRecordType.CARGO, "Crane oriented to pier after " + craneRotationDelay + " seconds" +
+                                      " with craneRotationRate=" + craneRotationRate + " degrees/second");
+            
+            // 4.d crane unhooks container
+            disTimeStamp += containerDetachDuration;
+//          disChannel.sendSinglePdu(disTimeStamp, espduCrane); // superfluous, crane hasn't moved
+            disChannel.sendCommentPdu(disTimeStamp, VariableRecordType.CARGO, "Crane detached: Container " + containerIndex + " on pier" // TODO + whichCrane
+                                      + " after " + containerDetachDuration + " seconds");
+            
+            // send PDUs accordingly
+            double totalDelay = (2.0 * craneRotationDelay + containerHookupDuration + containerDetachDuration);
+            disChannel.sendCommentPdu(disTimeStamp, VariableRecordType.ELAPSED_TIME,"Time duration for crane moving container " + containerIndex + ": " + totalDelay + " seconds");
+
+            // Future work: if this container is special, meaning on watchlist, report it
+        }
+        
+        // 4. Crane stows boom in vertical position
+        // TODO future refinement if even-more fidelity is desired
+        
+        // 5. Crane returns to head of pier every time in order to avoid interference with ship mooring/unmooring
+        espduCrane.setEntityLocation(positionPierHead); // head of pier
+        disTimeStamp += craneTravelDuration; // travel time back to head of pier
+        espduCrane.setEntityLocation(positionPierHead);
+        disChannel.sendSinglePdu(disTimeStamp, espduCrane);
+    }
+    /**
+     * Shutdown DIS network interfaces, enabling program termination
+     */
+    public void shutdownDisChannel()
+    {
+        if (disChannel != null)
+        {
+            disChannel.leave();
+            disChannel.tearDownNetworkInterface();
+        }
+    }
+
+    /**
+     * Remove given Ship from berth<br>
+     * If Ships in queue, schedule StartUnloadingOneCrane<br>
+     * If queue is empty, schedule SwitchToTwoCranes<br>
+     * timeInSystem is age of Ship
+     * 
+     * @param ship Given Ship
+     */
+    public void doEndUnloadingOneCrane(Ship ship) {
+        SortedSet<Ship> oldBerth = getBerth();
+        berth.remove(ship);
+        firePropertyChange("berth", oldBerth, getBerth());
+
+        if (queue.size() > 0) {
+            waitDelay("StartUnloadingOneCrane", 0.0, Priority.HIGH);
+        }
+
+        if (queue.isEmpty() && berth.size() == 1) {
+            waitDelay("SwitchToTwoCranes", 0.0);
+        }
+
+        timeInSystem = ship.getAge();
+        firePropertyChange("timeInSystem", getTimeInSystem());
+    }
+
+    /**
+     * Credit the work of the remaining Ship in berth at unit rate<br>
+     * Interrupt EndUnloadingOneCrane<br>
+     * Schedule EndUnloadingTwoCranes at double the rate (i.e., half the remaining time)
+     */
+    public void doSwitchToTwoCranes() {
+        Ship ship = berth.first();
+        ship.work(1.0);
+        ship.stampTime();
+
+        interrupt("EndUnloadingOneCrane", ship);
+
+        waitDelay("EndUnloadingTwoCranes",
+                0.5 * ship.getRemainingUnloadingTime());
+    }
+
+    /**
+     * Get tree of sorted Ship set queue
+     * @return Shallow copy of queue
+     */
+    public SortedSet<Ship> getQueue() {
+        return new TreeSet<>(queue);
+    }
+
+    /**
+     * Get tree of sorted Ship set berths
+     * @return Shallow copy of berth
+     */
+    public SortedSet<Ship> getBerth() {
+        return new TreeSet<>(berth);
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return The timeInSystem
+     */
+    public double getTimeInSystem() {
+        return timeInSystem;
+    }
+
+    /**
+     * accessor method to get a state variable
+     * @return The delayInQueue
+     */
+    public double getDelayInQueue() {
+        return delayInQueue;
+    }
+}
diff --git a/assignments/src/src/SimkitOpenDis7Examples/TwoCraneBerthsScenarioSketch.jpg b/assignments/src/src/SimkitOpenDis7Examples/TwoCraneBerthsScenarioSketch.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c23da5774f4f62b2e6bf182311aace53e889fb92
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/TwoCraneBerthsScenarioSketch.jpg differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/TwoCranesBerthComponentEventGraph.png b/assignments/src/src/SimkitOpenDis7Examples/TwoCranesBerthComponentEventGraph.png
new file mode 100644
index 0000000000000000000000000000000000000000..dde26d29446baf5b62b49d3011faa55ad6e0f2ec
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/TwoCranesBerthComponentEventGraph.png differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/TwoCranesBerthComponentEventGraphOpenDis7.png b/assignments/src/src/SimkitOpenDis7Examples/TwoCranesBerthComponentEventGraphOpenDis7.png
new file mode 100644
index 0000000000000000000000000000000000000000..e949b1af5bde4a36efdc2525ad5a1a4c300fac1f
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/TwoCranesBerthComponentEventGraphOpenDis7.png differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/TwoCranesTwoPiersSketch.jpg b/assignments/src/src/SimkitOpenDis7Examples/TwoCranesTwoPiersSketch.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5f0681603bf90b6934aefab6de88441ae88c521b
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/TwoCranesTwoPiersSketch.jpg differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/BussComponentBasedSimulationModelingSimkitWintersim2002.pdf b/assignments/src/src/SimkitOpenDis7Examples/documentation/BussComponentBasedSimulationModelingSimkitWintersim2002.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..fd148b3fcd586f237c8df1d394ba35007c509594
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/BussComponentBasedSimulationModelingSimkitWintersim2002.pdf differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/Discrete Event Simulation Modeling.pdf b/assignments/src/src/SimkitOpenDis7Examples/documentation/Discrete Event Simulation Modeling.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..529b1ed191932d95269a4471d6fb0ed5c7ca3995
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/Discrete Event Simulation Modeling.pdf differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/HarborWithTwoCranes.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/HarborWithTwoCranes.docx
new file mode 100644
index 0000000000000000000000000000000000000000..73271d2d04efcd4250e536d58b18e760f9c36b8d
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/HarborWithTwoCranes.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/ComputerAssignment 01 - The Arrival Process.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/ComputerAssignment 01 - The Arrival Process.docx
new file mode 100644
index 0000000000000000000000000000000000000000..3d2e31d90e7194186741fdeba8c9d90e4b4c124f
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/ComputerAssignment 01 - The Arrival Process.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/ComputerAssignment 02 - The Multiple Server Queue.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/ComputerAssignment 02 - The Multiple Server Queue.docx
new file mode 100644
index 0000000000000000000000000000000000000000..5d9064884772fc4e5b51ddc8e3bae287f389842e
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/ComputerAssignment 02 - The Multiple Server Queue.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/ComputerAssignment 03 - Server with Reneges.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/ComputerAssignment 03 - Server with Reneges.docx
new file mode 100644
index 0000000000000000000000000000000000000000..7bdfa0720f6358104b2994011af683807046ca6b
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/ComputerAssignment 03 - Server with Reneges.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/ComputerAssignment 04 - Transfer Line.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/ComputerAssignment 04 - Transfer Line.docx
new file mode 100644
index 0000000000000000000000000000000000000000..10fec58e9c034aff50433e40923d44bb61587901
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/ComputerAssignment 04 - Transfer Line.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/ComputerAssignment 05 - Two Crane Berths.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/ComputerAssignment 05 - Two Crane Berths.docx
new file mode 100644
index 0000000000000000000000000000000000000000..a91574dcc69242c82303703ba899025c83314656
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/ComputerAssignment 05 - Two Crane Berths.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/ComputerAssignment 06 - Movers and MoverManagers.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/ComputerAssignment 06 - Movers and MoverManagers.docx
new file mode 100644
index 0000000000000000000000000000000000000000..c174d84d220e0308afa431f37ea3fe0707d20350
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/ComputerAssignment 06 - Movers and MoverManagers.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/Midterm-2022 Solution.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/Midterm-2022 Solution.docx
new file mode 100644
index 0000000000000000000000000000000000000000..7dd33e982616ac2b3ddb161541a3bfd956fa3624
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/Midterm-2022 Solution.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/Sample Electronic Submission.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/Sample Electronic Submission.docx
new file mode 100644
index 0000000000000000000000000000000000000000..4a85437723f8f8d6b527feddb80509636fbe32eb
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/Sample Electronic Submission.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/Sample Written Submission.pdf b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/Sample Written Submission.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..8592c05ebc09a7307df99871ce271e77b91f75b4
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/Sample Written Submission.pdf differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/SampleMidterm.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/SampleMidterm.docx
new file mode 100644
index 0000000000000000000000000000000000000000..cd64836b412ee77ff365fb6e6ce795591a896810
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/SampleMidterm.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/SampleMidtermSolution.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/SampleMidtermSolution.docx
new file mode 100644
index 0000000000000000000000000000000000000000..7cd2db9c4957831c261e1ba85249299ceac032ae
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/SampleMidtermSolution.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/Simple Movers Output.txt b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/Simple Movers Output.txt
new file mode 100644
index 0000000000000000000000000000000000000000..85640332d61f945fe8b26935d1fa6d2e6feb1865
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/Simple Movers Output.txt	
@@ -0,0 +1,411 @@
+SimpleMover.1
+	maxSpeed = 30.0
+	initialLocation = Point2D.Double[0.0, 250.0]
+SimplePathMoverManager.2
+	path[0] = Point2D.Double[200.0, 0.0]
+	path[1] = Point2D.Double[-200.0, 250.0]
+	path[2] = Point2D.Double[200.0, 250.0]
+	path[3] = Point2D.Double[0.0, 250.0]
+	startOnRun = true
+SimpleMover.3
+	maxSpeed = 40.0
+	initialLocation = Point2D.Double[0.0, 150.0]
+SimplePatrolMoverManager.4
+	path[0] = Point2D.Double[0.0, 300.0]
+	path[1] = Point2D.Double[0.0, -100.0]
+	startOnRun = true
+SimpleMover.5
+	maxSpeed = 50.0
+	initialLocation = Point2D.Double[0.0, 0.0]
+SimpleRandomMoverManager.6
+	startOnRun = true
+	coordinateGenerator[0] = Uniform (-250.000, 250.000)
+	coordinateGenerator[1] = Uniform (-100.000, 300.000)
+** Event List 0 -- Starting Simulation **
+0.0000	Run	 <SimpleMover.1>
+0.0000	Run	 <SimplePathMoverManager.2>
+0.0000	Run	 <SimpleMover.3>
+0.0000	Run	 <SimplePatrolMoverManager.4>
+0.0000	Run	 <SimpleMover.5>
+0.0000	Run	 <SimpleRandomMoverManager.6>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List -- Starting Simulation **
+
+<SimpleMover.1> lastStopLocation: Point2D.Double[0.0, 250.0]
+<SimpleMover.1> velocity: Point2D.Double[0.0, 0.0]
+<SimpleMover.1> destination: Point2D.Double[NaN, NaN]
+<SimpleMover.1> startMoveTime: 0.0
+Time: 0.0000	CurrentEvent: Run [1]
+** Event List 0 --  **
+0.0000	Run	 <SimplePathMoverManager.2>
+0.0000	Run	 <SimpleMover.3>
+0.0000	Run	 <SimplePatrolMoverManager.4>
+0.0000	Run	 <SimpleMover.5>
+0.0000	Run	 <SimpleRandomMoverManager.6>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+<SimplePathMoverManager.2> next: 0
+Time: 0.0000	CurrentEvent: Run [2]
+** Event List 0 --  **
+0.0000	Run	 <SimpleMover.3>
+0.0000	Run	 <SimplePatrolMoverManager.4>
+0.0000	Run	 <SimpleMover.5>
+0.0000	Run	 <SimpleRandomMoverManager.6>
+0.0000	Start	 <SimplePathMoverManager.2>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+<SimpleMover.3> lastStopLocation: Point2D.Double[0.0, 150.0]
+<SimpleMover.3> velocity: Point2D.Double[0.0, 0.0]
+<SimpleMover.3> destination: Point2D.Double[NaN, NaN]
+<SimpleMover.3> startMoveTime: 0.0
+Time: 0.0000	CurrentEvent: Run [3]
+** Event List 0 --  **
+0.0000	Run	 <SimplePatrolMoverManager.4>
+0.0000	Run	 <SimpleMover.5>
+0.0000	Run	 <SimpleRandomMoverManager.6>
+0.0000	Start	 <SimplePathMoverManager.2>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+<SimplePatrolMoverManager.4> next: 0
+Time: 0.0000	CurrentEvent: Run [4]
+** Event List 0 --  **
+0.0000	Run	 <SimpleMover.5>
+0.0000	Run	 <SimpleRandomMoverManager.6>
+0.0000	Start	 <SimplePathMoverManager.2>
+0.0000	Start	 <SimplePatrolMoverManager.4>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+Time: 0.0000	CurrentEvent: Run [5]
+** Event List 0 --  **
+0.0000	Run	 <SimpleRandomMoverManager.6>
+0.0000	Start	 <SimplePathMoverManager.2>
+0.0000	Start	 <SimplePatrolMoverManager.4>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+Time: 0.0000	CurrentEvent: Run [6]
+** Event List 0 --  **
+0.0000	Start	 <SimplePathMoverManager.2>
+0.0000	Start	 <SimplePatrolMoverManager.4>
+0.0000	Start	 <SimpleRandomMoverManager.6>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+Time: 0.0000	CurrentEvent: Start [1]
+** Event List 0 --  **
+0.0000	Start	 <SimplePatrolMoverManager.4>
+0.0000	Start	 <SimpleRandomMoverManager.6>
+0.0000	MoveTo 	{Point2D.Double[200.0, 0.0]}	 <SimplePathMoverManager.2>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+Time: 0.0000	CurrentEvent: Start [2]
+** Event List 0 --  **
+0.0000	Start	 <SimpleRandomMoverManager.6>
+0.0000	MoveTo 	{Point2D.Double[200.0, 0.0]}	 <SimplePathMoverManager.2>
+0.0000	MoveTo 	{Point2D.Double[0.0, 300.0]}	 <SimplePatrolMoverManager.4>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+Time: 0.0000	CurrentEvent: Start [3]
+** Event List 0 --  **
+0.0000	MoveTo 	{Point2D.Double[200.0, 0.0]}	 <SimplePathMoverManager.2>
+0.0000	MoveTo 	{Point2D.Double[0.0, 300.0]}	 <SimplePatrolMoverManager.4>
+0.0000	MoveTo 	{Point2D.Double[158.66502991411835, 299.62435979396105]}	 <SimpleRandomMoverManager.6>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+<SimpleMover.1> destination: Point2D.Double[NaN, NaN] => Point2D.Double[200.0, 0.0]
+Time: 0.0000	CurrentEvent: MoveTo 	{Point2D.Double[200.0, 0.0]} [1]
+** Event List 0 --  **
+0.0000	MoveTo 	{Point2D.Double[0.0, 300.0]}	 <SimplePatrolMoverManager.4>
+0.0000	MoveTo 	{Point2D.Double[158.66502991411835, 299.62435979396105]}	 <SimpleRandomMoverManager.6>
+0.0000	StartMove 	{SimpleMover.1 (0.000, 250.000) [0.000, 0.000]}	 <SimpleMover.1>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+<SimpleMover.3> destination: Point2D.Double[NaN, NaN] => Point2D.Double[0.0, 300.0]
+Time: 0.0000	CurrentEvent: MoveTo 	{Point2D.Double[0.0, 300.0]} [2]
+** Event List 0 --  **
+0.0000	MoveTo 	{Point2D.Double[158.66502991411835, 299.62435979396105]}	 <SimpleRandomMoverManager.6>
+0.0000	StartMove 	{SimpleMover.1 (0.000, 250.000) [0.000, 0.000]}	 <SimpleMover.1>
+0.0000	StartMove 	{SimpleMover.3 (0.000, 150.000) [0.000, 0.000]}	 <SimpleMover.3>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+Time: 0.0000	CurrentEvent: MoveTo 	{Point2D.Double[158.66502991411835, 299.62435979396105]} [3]
+** Event List 0 --  **
+0.0000	StartMove 	{SimpleMover.1 (0.000, 250.000) [0.000, 0.000]}	 <SimpleMover.1>
+0.0000	StartMove 	{SimpleMover.3 (0.000, 150.000) [0.000, 0.000]}	 <SimpleMover.3>
+0.0000	StartMove 	{SimpleMover.5 (0.000, 0.000) [0.000, 0.000]}	 <SimpleMover.5>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+<SimpleMover.1> startMoveTime: 0.0 => 0.0
+<SimpleMover.1> velocity: Point2D.Double[0.0, 0.0] => Point2D.Double[18.74085142663273, -23.426064283290913]
+Time: 0.0000	CurrentEvent: StartMove 	{SimpleMover.1 (0.000, 250.000) [18.741, -23.426]} [1]
+** Event List 0 --  **
+0.0000	StartMove 	{SimpleMover.3 (0.000, 150.000) [0.000, 0.000]}	 <SimpleMover.3>
+0.0000	StartMove 	{SimpleMover.5 (0.000, 0.000) [0.000, 0.000]}	 <SimpleMover.5>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+10.6719	EndMove 	{SimpleMover.1 (0.000, 250.000) [18.741, -23.426]}	 <SimpleMover.1>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+<SimpleMover.3> startMoveTime: 0.0 => 0.0
+<SimpleMover.3> velocity: Point2D.Double[0.0, 0.0] => Point2D.Double[0.0, 40.0]
+Time: 0.0000	CurrentEvent: StartMove 	{SimpleMover.3 (0.000, 150.000) [0.000, 40.000]} [2]
+** Event List 0 --  **
+0.0000	StartMove 	{SimpleMover.5 (0.000, 0.000) [0.000, 0.000]}	 <SimpleMover.5>
+3.7500	EndMove 	{SimpleMover.3 (0.000, 150.000) [0.000, 40.000]}	 <SimpleMover.3>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+10.6719	EndMove 	{SimpleMover.1 (0.000, 250.000) [18.741, -23.426]}	 <SimpleMover.1>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+Time: 0.0000	CurrentEvent: StartMove 	{SimpleMover.5 (0.000, 0.000) [23.399, 44.187]} [3]
+** Event List 0 --  **
+3.7500	EndMove 	{SimpleMover.3 (0.000, 150.000) [0.000, 40.000]}	 <SimpleMover.3>
+6.7808	EndMove 	{SimpleMover.5 (0.000, 0.000) [23.399, 44.187]}	 <SimpleMover.5>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+10.6719	EndMove 	{SimpleMover.1 (0.000, 250.000) [18.741, -23.426]}	 <SimpleMover.1>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+<SimpleMover.3> lastStopLocation: Point2D.Double[0.0, 150.0] => Point2D.Double[0.0, 300.0]
+<SimpleMover.3> velocity: Point2D.Double[0.0, 40.0] => Point2D.Double[0.0, 0.0]
+<SimplePatrolMoverManager.4> next: 0 => 1
+Time: 3.7500	CurrentEvent: EndMove 	{SimpleMover.3 (0.000, 300.000) [0.000, 0.000]} [1]
+** Event List 0 --  **
+3.7500	MoveTo 	{Point2D.Double[0.0, -100.0]}	 <SimplePatrolMoverManager.4>
+6.7808	EndMove 	{SimpleMover.5 (87.746, 165.701) [23.399, 44.187]}	 <SimpleMover.5>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+10.6719	EndMove 	{SimpleMover.1 (70.278, 162.152) [18.741, -23.426]}	 <SimpleMover.1>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+<SimpleMover.3> destination: Point2D.Double[0.0, 300.0] => Point2D.Double[0.0, -100.0]
+Time: 3.7500	CurrentEvent: MoveTo 	{Point2D.Double[0.0, -100.0]} [4]
+** Event List 0 --  **
+3.7500	StartMove 	{SimpleMover.3 (0.000, 300.000) [0.000, 0.000]}	 <SimpleMover.3>
+6.7808	EndMove 	{SimpleMover.5 (87.746, 165.701) [23.399, 44.187]}	 <SimpleMover.5>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+10.6719	EndMove 	{SimpleMover.1 (70.278, 162.152) [18.741, -23.426]}	 <SimpleMover.1>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+<SimpleMover.3> startMoveTime: 0.0 => 3.75
+<SimpleMover.3> velocity: Point2D.Double[0.0, 0.0] => Point2D.Double[0.0, -40.0]
+Time: 3.7500	CurrentEvent: StartMove 	{SimpleMover.3 (0.000, 300.000) [0.000, -40.000]} [4]
+** Event List 0 --  **
+6.7808	EndMove 	{SimpleMover.5 (87.746, 165.701) [23.399, 44.187]}	 <SimpleMover.5>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+10.6719	EndMove 	{SimpleMover.1 (70.278, 162.152) [18.741, -23.426]}	 <SimpleMover.1>
+13.7500	EndMove 	{SimpleMover.3 (0.000, 300.000) [0.000, -40.000]}	 <SimpleMover.3>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+Time: 6.7808	CurrentEvent: EndMove 	{SimpleMover.5 (158.665, 299.624) [0.000, 0.000]} [2]
+** Event List 0 --  **
+6.7808	MoveTo 	{Point2D.Double[5.1771862199530005, -47.38683607429266]}	 <SimpleRandomMoverManager.6>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+10.6719	EndMove 	{SimpleMover.1 (127.079, 91.152) [18.741, -23.426]}	 <SimpleMover.1>
+13.7500	EndMove 	{SimpleMover.3 (0.000, 178.767) [0.000, -40.000]}	 <SimpleMover.3>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+Time: 6.7808	CurrentEvent: MoveTo 	{Point2D.Double[5.1771862199530005, -47.38683607429266]} [5]
+** Event List 0 --  **
+6.7808	StartMove 	{SimpleMover.5 (158.665, 299.624) [0.000, 0.000]}	 <SimpleMover.5>
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+10.6719	EndMove 	{SimpleMover.1 (127.079, 91.152) [18.741, -23.426]}	 <SimpleMover.1>
+13.7500	EndMove 	{SimpleMover.3 (0.000, 178.767) [0.000, -40.000]}	 <SimpleMover.3>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+Time: 6.7808	CurrentEvent: StartMove 	{SimpleMover.5 (158.665, 299.624) [-20.226, -45.727]} [5]
+** Event List 0 --  **
+10.0000	Stop	 <SimplePatrolMoverManager.4>
+10.6719	EndMove 	{SimpleMover.1 (127.079, 91.152) [18.741, -23.426]}	 <SimpleMover.1>
+13.7500	EndMove 	{SimpleMover.3 (0.000, 178.767) [0.000, -40.000]}	 <SimpleMover.3>
+14.3697	EndMove 	{SimpleMover.5 (158.665, 299.624) [-20.226, -45.727]}	 <SimpleMover.5>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+Time: 10.0000	CurrentEvent: Stop [1]
+** Event List 0 --  **
+10.0000	OrderStop	 <SimplePatrolMoverManager.4>
+10.6719	EndMove 	{SimpleMover.1 (187.409, 15.739) [18.741, -23.426]}	 <SimpleMover.1>
+13.7500	EndMove 	{SimpleMover.3 (0.000, 50.000) [0.000, -40.000]}	 <SimpleMover.3>
+14.3697	EndMove 	{SimpleMover.5 (93.556, 152.423) [-20.226, -45.727]}	 <SimpleMover.5>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+Time: 10.0000	CurrentEvent: OrderStop [1]
+** Event List 0 --  **
+10.0000	Stop 	{SimpleMover.3 (0.000, 50.000) [0.000, -40.000]}	 <SimpleMover.3>
+10.6719	EndMove 	{SimpleMover.1 (187.409, 15.739) [18.741, -23.426]}	 <SimpleMover.1>
+13.7500	EndMove 	{SimpleMover.3 (0.000, 50.000) [0.000, -40.000]}	 <SimpleMover.3>
+14.3697	EndMove 	{SimpleMover.5 (93.556, 152.423) [-20.226, -45.727]}	 <SimpleMover.5>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+<SimpleMover.3> lastStopLocation: Point2D.Double[0.0, 300.0] => Point2D.Double[0.0, 50.0]
+<SimpleMover.3> velocity: Point2D.Double[0.0, -40.0] => Point2D.Double[0.0, 0.0]
+Time: 10.0000	CurrentEvent: Stop 	{SimpleMover.3 (0.000, 50.000) [0.000, 0.000]} [1]
+** Event List 0 --  **
+10.6719	EndMove 	{SimpleMover.1 (187.409, 15.739) [18.741, -23.426]}	 <SimpleMover.1>
+14.3697	EndMove 	{SimpleMover.5 (93.556, 152.423) [-20.226, -45.727]}	 <SimpleMover.5>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+<SimpleMover.1> lastStopLocation: Point2D.Double[0.0, 250.0] => Point2D.Double[200.0, 0.0]
+<SimpleMover.1> velocity: Point2D.Double[18.74085142663273, -23.426064283290913] => Point2D.Double[0.0, 0.0]
+<SimplePathMoverManager.2> next: 0 => 1
+Time: 10.6719	CurrentEvent: EndMove 	{SimpleMover.1 (200.000, 0.000) [0.000, 0.000]} [3]
+** Event List 0 --  **
+10.6719	MoveTo 	{Point2D.Double[-200.0, 250.0]}	 <SimplePathMoverManager.2>
+14.3697	EndMove 	{SimpleMover.5 (79.967, 121.700) [-20.226, -45.727]}	 <SimpleMover.5>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+<SimpleMover.1> destination: Point2D.Double[200.0, 0.0] => Point2D.Double[-200.0, 250.0]
+Time: 10.6719	CurrentEvent: MoveTo 	{Point2D.Double[-200.0, 250.0]} [6]
+** Event List 0 --  **
+10.6719	StartMove 	{SimpleMover.1 (200.000, 0.000) [0.000, 0.000]}	 <SimpleMover.1>
+14.3697	EndMove 	{SimpleMover.5 (79.967, 121.700) [-20.226, -45.727]}	 <SimpleMover.5>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+ ** End of Event List --  **
+
+<SimpleMover.1> startMoveTime: 0.0 => 10.671873729054747
+<SimpleMover.1> velocity: Point2D.Double[0.0, 0.0] => Point2D.Double[-25.43994912015264, 15.899968200095401]
+Time: 10.6719	CurrentEvent: StartMove 	{SimpleMover.1 (200.000, 0.000) [-25.440, 15.900]} [6]
+** Event List 0 --  **
+14.3697	EndMove 	{SimpleMover.5 (79.967, 121.700) [-20.226, -45.727]}	 <SimpleMover.5>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+26.3952	EndMove 	{SimpleMover.1 (200.000, 0.000) [-25.440, 15.900]}	 <SimpleMover.1>
+ ** End of Event List --  **
+
+Time: 14.3697	CurrentEvent: EndMove 	{SimpleMover.5 (5.177, -47.387) [0.000, 0.000]} [4]
+** Event List 0 --  **
+14.3697	MoveTo 	{Point2D.Double[-232.29182581417263, 296.9878137111664]}	 <SimpleRandomMoverManager.6>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+26.3952	EndMove 	{SimpleMover.1 (105.929, 58.795) [-25.440, 15.900]}	 <SimpleMover.1>
+ ** End of Event List --  **
+
+Time: 14.3697	CurrentEvent: MoveTo 	{Point2D.Double[-232.29182581417263, 296.9878137111664]} [7]
+** Event List 0 --  **
+14.3697	StartMove 	{SimpleMover.5 (5.177, -47.387) [0.000, 0.000]}	 <SimpleMover.5>
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+26.3952	EndMove 	{SimpleMover.1 (105.929, 58.795) [-25.440, 15.900]}	 <SimpleMover.1>
+ ** End of Event List --  **
+
+Time: 14.3697	CurrentEvent: StartMove 	{SimpleMover.5 (5.177, -47.387) [-28.384, 41.162]} [7]
+** Event List 0 --  **
+20.0000	Stop	 <SimpleRandomMoverManager.6>
+22.7359	EndMove 	{SimpleMover.5 (5.177, -47.387) [-28.384, 41.162]}	 <SimpleMover.5>
+26.3952	EndMove 	{SimpleMover.1 (105.929, 58.795) [-25.440, 15.900]}	 <SimpleMover.1>
+ ** End of Event List --  **
+
+Time: 20.0000	CurrentEvent: Stop [2]
+** Event List 0 --  **
+20.0000	OrderStop	 <SimpleRandomMoverManager.6>
+22.7359	EndMove 	{SimpleMover.5 (-154.636, 184.372) [-28.384, 41.162]}	 <SimpleMover.5>
+26.3952	EndMove 	{SimpleMover.1 (-37.307, 148.317) [-25.440, 15.900]}	 <SimpleMover.1>
+ ** End of Event List --  **
+
+Time: 20.0000	CurrentEvent: OrderStop [2]
+** Event List 0 --  **
+20.0000	Stop 	{SimpleMover.5 (-154.636, 184.372) [-28.384, 41.162]}	 <SimpleMover.5>
+22.7359	EndMove 	{SimpleMover.5 (-154.636, 184.372) [-28.384, 41.162]}	 <SimpleMover.5>
+26.3952	EndMove 	{SimpleMover.1 (-37.307, 148.317) [-25.440, 15.900]}	 <SimpleMover.1>
+ ** End of Event List --  **
+
+Time: 20.0000	CurrentEvent: Stop 	{SimpleMover.5 (-154.636, 184.372) [0.000, 0.000]} [2]
+** Event List 0 --  **
+26.3952	EndMove 	{SimpleMover.1 (-37.307, 148.317) [-25.440, 15.900]}	 <SimpleMover.1>
+ ** End of Event List --  **
+
+<SimpleMover.1> lastStopLocation: Point2D.Double[200.0, 0.0] => Point2D.Double[-200.0, 250.0]
+<SimpleMover.1> velocity: Point2D.Double[-25.43994912015264, 15.899968200095401] => Point2D.Double[0.0, 0.0]
+<SimplePathMoverManager.2> next: 1 => 2
+Time: 26.3952	CurrentEvent: EndMove 	{SimpleMover.1 (-200.000, 250.000) [0.000, 0.000]} [5]
+** Event List 0 --  **
+26.3952	MoveTo 	{Point2D.Double[200.0, 250.0]}	 <SimplePathMoverManager.2>
+ ** End of Event List --  **
+
+<SimpleMover.1> destination: Point2D.Double[-200.0, 250.0] => Point2D.Double[200.0, 250.0]
+Time: 26.3952	CurrentEvent: MoveTo 	{Point2D.Double[200.0, 250.0]} [8]
+** Event List 0 --  **
+26.3952	StartMove 	{SimpleMover.1 (-200.000, 250.000) [0.000, 0.000]}	 <SimpleMover.1>
+ ** End of Event List --  **
+
+<SimpleMover.1> startMoveTime: 10.671873729054747 => 26.395175615815752
+<SimpleMover.1> velocity: Point2D.Double[0.0, 0.0] => Point2D.Double[30.0, 0.0]
+Time: 26.3952	CurrentEvent: StartMove 	{SimpleMover.1 (-200.000, 250.000) [30.000, 0.000]} [8]
+** Event List 0 --  **
+39.7285	EndMove 	{SimpleMover.1 (-200.000, 250.000) [30.000, 0.000]}	 <SimpleMover.1>
+ ** End of Event List --  **
+
+<SimpleMover.1> lastStopLocation: Point2D.Double[-200.0, 250.0] => Point2D.Double[200.0, 250.0]
+<SimpleMover.1> velocity: Point2D.Double[30.0, 0.0] => Point2D.Double[0.0, 0.0]
+<SimplePathMoverManager.2> next: 2 => 3
+Time: 39.7285	CurrentEvent: EndMove 	{SimpleMover.1 (200.000, 250.000) [0.000, 0.000]} [6]
+** Event List 0 --  **
+39.7285	MoveTo 	{Point2D.Double[0.0, 250.0]}	 <SimplePathMoverManager.2>
+ ** End of Event List --  **
+
+<SimpleMover.1> destination: Point2D.Double[200.0, 250.0] => Point2D.Double[0.0, 250.0]
+Time: 39.7285	CurrentEvent: MoveTo 	{Point2D.Double[0.0, 250.0]} [9]
+** Event List 0 --  **
+39.7285	StartMove 	{SimpleMover.1 (200.000, 250.000) [0.000, 0.000]}	 <SimpleMover.1>
+ ** End of Event List --  **
+
+<SimpleMover.1> startMoveTime: 26.395175615815752 => 39.72850894914909
+<SimpleMover.1> velocity: Point2D.Double[0.0, 0.0] => Point2D.Double[-30.0, 0.0]
+Time: 39.7285	CurrentEvent: StartMove 	{SimpleMover.1 (200.000, 250.000) [-30.000, 0.000]} [9]
+** Event List 0 --  **
+46.3952	EndMove 	{SimpleMover.1 (200.000, 250.000) [-30.000, 0.000]}	 <SimpleMover.1>
+ ** End of Event List --  **
+
+<SimpleMover.1> lastStopLocation: Point2D.Double[200.0, 250.0] => Point2D.Double[0.0, 250.0]
+<SimpleMover.1> velocity: Point2D.Double[-30.0, 0.0] => Point2D.Double[0.0, 0.0]
+<SimplePathMoverManager.2> next: 3 => 4
+Time: 46.3952	CurrentEvent: EndMove 	{SimpleMover.1 (0.000, 250.000) [0.000, 0.000]} [7]
+** Event List 0 --  **
+46.3952	Stop	 <SimplePathMoverManager.2>
+ ** End of Event List --  **
+
+Time: 46.3952	CurrentEvent: Stop [3]
+** Event List 0 --  **
+46.3952	OrderStop	 <SimplePathMoverManager.2>
+ ** End of Event List --  **
+
+Time: 46.3952	CurrentEvent: OrderStop [3]
+** Event List 0 --  **
+46.3952	Stop 	{SimpleMover.1 (0.000, 250.000) [0.000, 0.000]}	 <SimpleMover.1>
+ ** End of Event List --  **
+
+<SimpleMover.1> lastStopLocation: Point2D.Double[0.0, 250.0] => Point2D.Double[0.0, 250.0]
+<SimpleMover.1> velocity: Point2D.Double[0.0, 0.0] => Point2D.Double[0.0, 0.0]
+Time: 46.3952	CurrentEvent: Stop 	{SimpleMover.1 (0.000, 250.000) [0.000, 0.000]} [3]
+** Event List 0 --  **
+            << empty >>
+ ** End of Event List --  **
\ No newline at end of file
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment1.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment1.docx
new file mode 100644
index 0000000000000000000000000000000000000000..7b02d16b602a096514e014be5c3b23b8dbc5c7aa
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment1.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment1Solution.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment1Solution.docx
new file mode 100644
index 0000000000000000000000000000000000000000..3f6bc3afe005e77a11bc71cb630b15b9c44b67b5
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment1Solution.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment2.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment2.docx
new file mode 100644
index 0000000000000000000000000000000000000000..3438b6b508cabaef0f81a26525edcd776358b009
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment2.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment2Solution.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment2Solution.docx
new file mode 100644
index 0000000000000000000000000000000000000000..a06ee419659e80c596784ad56ecb8801ccd4dd1e
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment2Solution.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment3.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment3.docx
new file mode 100644
index 0000000000000000000000000000000000000000..84dcb3e749691a115e27448eb857935410f3f54a
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment3.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment3Solution.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment3Solution.docx
new file mode 100644
index 0000000000000000000000000000000000000000..809dbf2d314b3ce1f5333ec25db1a04315ae4eff
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment3Solution.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment4.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment4.docx
new file mode 100644
index 0000000000000000000000000000000000000000..87b2dda8f10d6796662153d05fe605dda2f7f780
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment4.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment4Solution.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment4Solution.docx
new file mode 100644
index 0000000000000000000000000000000000000000..e3b337d56c7da772e972c03029f16219bc5dcb54
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment4Solution.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment5.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment5.docx
new file mode 100644
index 0000000000000000000000000000000000000000..4ce1abec915850b5cded414e1e462c16e80eac87
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment5.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment5Solution.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment5Solution.docx
new file mode 100644
index 0000000000000000000000000000000000000000..496e068a041c1b3abcbf0f8c24568282c8f72606
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment5Solution.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment6.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment6.docx
new file mode 100644
index 0000000000000000000000000000000000000000..6564483b505cfae3fd505de5a543881cb21afe3a
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment6.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment7_2022.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment7_2022.docx
new file mode 100644
index 0000000000000000000000000000000000000000..492f048c54c74345ff7b7dc742738a87eab24aa0
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/MV3302/WrittenAssignment7_2022.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/SimkitDisDiagramModelNetworkIntegration.png b/assignments/src/src/SimkitOpenDis7Examples/documentation/SimkitDisDiagramModelNetworkIntegration.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad9db14a8fbe98b2f60e65d5f496a71a4618c62e
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/SimkitDisDiagramModelNetworkIntegration.png differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/SimkitDisDiagrams.vsdx b/assignments/src/src/SimkitOpenDis7Examples/documentation/SimkitDisDiagrams.vsdx
new file mode 100644
index 0000000000000000000000000000000000000000..aabd65d6cc0ee0c5987365b76de7030abaf00042
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/SimkitDisDiagrams.vsdx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/SimkitDisDiagramsTwoCranesBerthResupply.png b/assignments/src/src/SimkitOpenDis7Examples/documentation/SimkitDisDiagramsTwoCranesBerthResupply.png
new file mode 100644
index 0000000000000000000000000000000000000000..1798f09ccaa6e748894a1f86e990bc30066592c2
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/SimkitDisDiagramsTwoCranesBerthResupply.png differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/SimkitQuickReference.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/SimkitQuickReference.docx
new file mode 100644
index 0000000000000000000000000000000000000000..c833724ac72f4da83ea01d999a0b0fffe4f8d7d9
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/SimkitQuickReference.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/documentation/SimkitSimpleDiscreteEventSimulationModelForDIS.docx b/assignments/src/src/SimkitOpenDis7Examples/documentation/SimkitSimpleDiscreteEventSimulationModelForDIS.docx
new file mode 100644
index 0000000000000000000000000000000000000000..9b53790d0458594f1553db9b99c9cc03bf9b9096
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/documentation/SimkitSimpleDiscreteEventSimulationModelForDIS.docx differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/package-info.java b/assignments/src/src/SimkitOpenDis7Examples/package-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..0e224c9a88014fc274223f6a3e94ae20e21f3aac
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/package-info.java
@@ -0,0 +1,10 @@
+/**
+ * Simkit event graphs with opendis7 Java outputs supporting the NPS MOVES MV3500 Networked Graphics course.
+ * 
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/examples/src/SimkitOpenDis7Examples" target="blank">NetworkedGraphicsMV3500 examples: SimkitOpenDis7Examples</a>
+ * @see java.lang.Package
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="blank">StackOverflow: how-do-i-document-packages-in-java</a>
+ */
+
+package SimkitOpenDis7Examples;
diff --git a/assignments/src/src/SimkitOpenDis7Examples/run/RunSimpleServer.java b/assignments/src/src/SimkitOpenDis7Examples/run/RunSimpleServer.java
new file mode 100644
index 0000000000000000000000000000000000000000..bcd76af54119b1e7c3c27b9a7b73751762cd2497
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/run/RunSimpleServer.java
@@ -0,0 +1,87 @@
+package SimkitOpenDis7Examples.run;
+
+import SimkitOpenDis7Examples.ArrivalProcess;
+import SimkitOpenDis7Examples.SimpleServer;
+import simkit.Schedule;
+import simkit.random.RandomVariate;
+import simkit.random.RandomVariateFactory;
+import simkit.stat.SimpleStatsTimeVarying;
+import simkit.util.SimplePropertyDumper;
+
+/**
+ * Run a simple server problem and compute statistical measurement of results.
+ * <h2>Output:</h2><pre>
+ * ArrivalProcess.1
+ * &nbsp;&nbsp;&nbsp;&nbsp;interarrivalTimeGenerator = Uniform (0.900, 2.200)
+ * SimpleServer.2
+ * &nbsp;&nbsp;&nbsp;&nbsp;serviceTimeGenerator = Gamma (1.700, 1.800)
+ * &nbsp;&nbsp;&nbsp;&nbsp;totalNumberServers = 2
+ * Simulation ended at time 100,000.000
+ *
+ * There have been 64,475 arrivals
+ * There have been 64,472 customers served
+ * Average number in queue	15.9655
+ * Average utilization	0.9819</pre>
+ *
+ * @author abuss@nps.edu
+ */
+public class RunSimpleServer
+{
+    /** Default constructor */
+    public RunSimpleServer()
+    {
+        // default constructor
+    }
+    /**
+     * Run a simple program and compute statistical measurement of results.
+     * @param args the command line arguments
+     */
+    public static void main(String args[]) 
+    {
+        String rvName = "Uniform"; // TODO is enumeration available?
+        double lower = 0.9;
+        double upper = 2.2;
+        RandomVariate interarrivalTimeGenerator = RandomVariateFactory.getInstance(rvName, lower, upper);
+        ArrivalProcess arrival = new ArrivalProcess(interarrivalTimeGenerator);
+
+        rvName = "Gamma"; // TODO is enumeration available?
+        double alpha = 1.7;
+        double beta = 1.8;
+
+        RandomVariate serviceTimeGenerator = RandomVariateFactory.getInstance(rvName, alpha, beta);
+        int numServ = 1;
+        SimpleServer server = new SimpleServer(numServ, serviceTimeGenerator);
+        arrival.addSimEventListener(server);
+
+        SimplePropertyDumper simplePropertyDumper = new SimplePropertyDumper();
+//        server.addPropertyChangeListener(simplePropertyDumper);
+//        arrival.addPropertyChangeListener(simplePropertyDumper);
+
+        SimpleStatsTimeVarying numberInQueueStat = new SimpleStatsTimeVarying("numberInQueue");
+        SimpleStatsTimeVarying numberAvailableServersStat = new SimpleStatsTimeVarying("numberAvailableServers");
+
+        server.addPropertyChangeListener(numberInQueueStat);
+        server.addPropertyChangeListener(numberAvailableServersStat);
+
+        System.out.println(arrival);
+        System.out.println(server);
+
+//        Schedule.setVerbose(true);
+//        Schedule.setSingleStep(false);
+//        double stopTime = 6.0;
+        double stopTime = 100000.0;
+
+        Schedule.stopAtTime(stopTime);
+
+        Schedule.reset();
+        numberInQueueStat.reset();
+        numberAvailableServersStat.reset();
+        Schedule.startSimulation();
+
+        System.out.printf("Simulation ended at time %,.3f%n", Schedule.getSimTime());
+        System.out.printf("%nThere have been %,d arrivals%n", arrival.getNumberArrivals());
+        System.out.printf("There have been %,d customers served%n", server.getNumberServed());
+        System.out.printf("Average number in queue\t%.4f%n", numberInQueueStat.getMean());
+        System.out.printf("Average utilization\t%.4f%n", 1.0 - numberAvailableServersStat.getMean() / server.getTotalNumberServers());
+    }
+}
diff --git a/assignments/src/src/SimkitOpenDis7Examples/run/RunSimpleServerLog.txt b/assignments/src/src/SimkitOpenDis7Examples/run/RunSimpleServerLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b7679ce2153bddca01ebe902722157d13aa2e45d
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/run/RunSimpleServerLog.txt
@@ -0,0 +1,22 @@
+ant -f C:\\x3d-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=SimkitOpenDis7Examples/run/RunSimpleServer.java -Drun.class=SimkitOpenDis7Examples.run.RunSimpleServer run-single
+init:
+Deleting: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+warning: [options] system modules path not set in conjunction with -source 17
+1 warning
+compile-single:
+run-single:
+ArrivalProcess.1
+	interarrivalTimeGenerator = Uniform (0.900, 2.200)
+SimpleServer.2
+	totalNumberServers = 1
+	serviceTimeGenerator = Gamma (1.700, 1.800)
+Simulation ended at time 100,000.000
+
+There have been 64,526 arrivals
+There have been 32,790 customers served
+Average number in queue	15912.7375
+Average utilization	1.0000
+BUILD SUCCESSFUL (total time: 5 seconds)
diff --git a/assignments/src/src/SimkitOpenDis7Examples/run/RunSimpleServerOpenDis7.java b/assignments/src/src/SimkitOpenDis7Examples/run/RunSimpleServerOpenDis7.java
new file mode 100644
index 0000000000000000000000000000000000000000..bbcdfe6378793736d7e8e6a67b1b133ed8d0eb99
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/run/RunSimpleServerOpenDis7.java
@@ -0,0 +1,102 @@
+package SimkitOpenDis7Examples.run;
+
+import SimkitOpenDis7Examples.ArrivalProcessOpenDis7;
+import SimkitOpenDis7Examples.SimpleServerOpenDis7;
+import simkit.Schedule;
+import simkit.random.RandomVariate;
+import simkit.random.RandomVariateFactory;
+import simkit.stat.SimpleStatsTimeVarying;
+import simkit.util.SimplePropertyDumper;
+
+/**
+ * Runs SimpleServer event graph with openDis7 output PDUs added.
+ * TODO work in progress: adding functionality, refining naming and code patterns.
+ * 
+ * <h2>Output:</h2><pre>
+ * ArrivalProcess.1
+ * &nbsp;&nbsp;&nbsp;&nbsp;interarrivalTimeGenerator = Uniform (0.900, 2.200)
+ * SimpleServer.2
+ * &nbsp;&nbsp;&nbsp;&nbsp;serviceTimeGenerator = Gamma (1.700, 1.800)
+ * &nbsp;&nbsp;&nbsp;&nbsp;totalNumberServers = 2
+ * Simulation ended at time 100,000.000
+ *
+ * There have been 64,475 arrivals
+ * There have been 64,472 customers served
+ * Average number in queue	15.9655
+ * Average utilization	0.9819</pre>
+ *
+ * @see SimkitOpenDis7Examples.ArrivalProcessOpenDis7
+ * @see SimkitOpenDis7Examples.SimpleServer
+ * @see <a href="RunSimpleServerOpenDis7Log.txt" target="_blank">RunSimpleServerOpenDis7Log.txt</a>
+ * @see <a href="../ArrivalProcessOpenDis7EventGraph.png" target="_blank">ArrivalProcessOpenDis7EventGraph.png</a>
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/examples/src/SimkitOpenDis7Examples/documentation/ArrivalProcessDisPdu.png" target="_blank">ArrivalProcessDisPdu.png</a>
+ * @author abuss@nps.edu@nps.edu
+ * @author brutzman@nps.edu
+ */
+public class RunSimpleServerOpenDis7
+{
+    /** Default constructor */
+    public RunSimpleServerOpenDis7()
+    {
+        // default constructor
+    }
+    /**
+     * Run a simple program and compute statistical measurement of results.
+     * @see RunSimpleServer
+     * @param args the command line arguments
+     */
+    public static void main(String args[]) 
+    {
+        String rvName = "Uniform"; // TODO is enumeration available?
+        double lower = 0.9;
+        double upper = 2.2;
+        RandomVariate interarrivalTimeGenerator = RandomVariateFactory.getInstance(rvName, lower, upper);
+        ArrivalProcessOpenDis7 arrival = new ArrivalProcessOpenDis7(interarrivalTimeGenerator);
+
+        rvName = "Gamma"; // TODO is enumeration available?
+        double alpha = 1.7;
+        double beta = 1.8;
+
+        RandomVariate serviceTimeGenerator = RandomVariateFactory.getInstance(rvName, alpha, beta);
+        int numServ = 1;
+        SimpleServerOpenDis7 server = new SimpleServerOpenDis7(numServ, serviceTimeGenerator);
+        arrival.addSimEventListener(server);
+
+        SimplePropertyDumper simplePropertyDumper = new SimplePropertyDumper();
+//        server.addPropertyChangeListener(simplePropertyDumper);
+//        arrival.addPropertyChangeListener(simplePropertyDumper);
+
+        SimpleStatsTimeVarying numberInQueueStat = new SimpleStatsTimeVarying("numberInQueue");
+        SimpleStatsTimeVarying numberAvailableServersStat = new SimpleStatsTimeVarying("numberAvailableServers");
+
+        server.addPropertyChangeListener(numberInQueueStat);
+        server.addPropertyChangeListener(numberAvailableServersStat);
+
+        System.out.println(arrival);
+        System.out.println(server);
+
+//        Schedule.setVerbose(true);
+//        Schedule.setSingleStep(false);
+//        double stopTime = 6.0;
+        double stopTime = 100000.0;
+
+        Schedule.stopAtTime(stopTime);
+
+        Schedule.reset();
+        numberInQueueStat.reset();
+        numberAvailableServersStat.reset();
+        Schedule.startSimulation();
+
+        System.out.printf("Simulation ended at time %,.3f%n", Schedule.getSimTime());
+        System.out.printf("%nThere have been %,d arrivals%n", arrival.getNumberArrivals());
+        System.out.printf("There have been %,d customers served%n", server.getNumberServed());
+        System.out.printf("Average number in queue\t%.4f%n", numberInQueueStat.getMean());
+        System.out.printf("Average utilization\t%.4f%n", 1.0 - numberAvailableServersStat.getMean() / server.getTotalNumberServers());
+
+        System.out.println("Execution complete.");
+        
+        // TODO send simulation management PDUs via DIS channel, announce completion
+        arrival.getDisChannel().tearDownNetworkInterface();
+        System.exit(0); // normal completion
+    }
+}
diff --git a/assignments/src/src/SimkitOpenDis7Examples/run/RunSimpleServerOpenDis7Log.txt b/assignments/src/src/SimkitOpenDis7Examples/run/RunSimpleServerOpenDis7Log.txt
new file mode 100644
index 0000000000000000000000000000000000000000..fbc63d4c924cd51a326c20e1c97b88cedd2ef3ff
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/run/RunSimpleServerOpenDis7Log.txt
@@ -0,0 +1,56 @@
+ant -f C:\\x3d-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=SimkitOpenDis7Examples/run/RunSimpleServerOpenDis7.java -Drun.class=SimkitOpenDis7Examples.run.RunSimpleServerOpenDis7 run-single
+init:
+Deleting: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+warning: [options] system modules path not set in conjunction with -source 17
+1 warning
+compile-single:
+run-single:
+[DisChannel] thisHostName=IT160907-INFLPP
+[DisThreadedNetworkInterface] using network interface Intel(R) Wi-Fi 6E AX210 160MHz
+[DisThreadedNetworkInterface] datagramSocket.joinGroup  address=239.1.2.3 port=3000 isConnected()=false createDatagramSocket() complete.
+[DisThreadedNetworkInterface] createThreads() receiveThread.isAlive()=true
+[DisThreadedNetworkInterface] createThreads() sendingThread.isAlive()=true
+[DisChannel] Network confirmation: address=239.1.2.3 port=3000
+[DisChannel] Beginning pdu save to directory ./pduLog
+[PduRecorder] Recorder log file open: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\pduLog\PduCaptureLog22.dislog
+[DisThreadedNetworkInterface] using network interface Intel(R) Wi-Fi 6E AX210 160MHz
+[DisThreadedNetworkInterface] datagramSocket.joinGroup  address=239.1.2.3 port=3000 isConnected()=false createDatagramSocket() complete.
+[DisThreadedNetworkInterface] createThreads() receiveThread.isAlive()=true
+[DisThreadedNetworkInterface] createThreads() sendingThread.isAlive()=true
+[PduRecorder PduRecorder] listening to IP address 239.1.2.3 on port 3000
+[DisChannel] disChannel.getNetworkAddress()=239.1.2.3, getNetworkPort()=3000
+[DisThreadedNetworkInterface DisChannel] [sending  1] DisPduType 22 COMMENT, size 80 bytes)
+[DisThreadedNetworkInterface DisChannel] [receipt  1] DisPduType 22 COMMENT, size 80 bytes)
+[DisThreadedNetworkInterface PduRecorder] [receipt  1] DisPduType 22 COMMENT, size 80 bytes)
+[DisChannel] *** [CommentPdu OTHER] [ArrivalProcessOpenDis7 initialized]
+[DisChannel] thisHostName=IT160907-INFLPP
+ArrivalProcessOpenDis7.1
+	interarrivalTimeGenerator = Uniform (0.900, 2.200)
+SimpleServerOpenDis7.2
+	totalNumberServers = 1
+	serviceTimeGenerator = Gamma (1.700, 1.800)
+Simulation ended at time 100,000.000
+
+There have been 64,526 arrivals
+There have been 32,790 customers served
+Average number in queue	15912.7375
+Average utilization	1.0000
+Execution complete.
+*** setKillSentinelAndInterrupts() killed=true sendingThread.isInterrupted()=true receiveThread.isInterrupted()=true
+[DisThreadedNetworkInterface PduRecorder] close(): pdus2send.size()=0 baos.size()=0 dos.size()=0
+[DisThreadedNetworkInterface PduRecorder] datagramSocket.leaveGroup address=239.1.2.3 port=3000 isClosed()=true close() complete.
+*** killThread() status: sendingThread.isAlive()=false sendingThread.isInterrupted()=true
+*** killThread() status: receiveThread.isAlive()=false receiveThread.isInterrupted()=true
+*** Thread close status: sendingThread.isAlive()=false receiveThread.isAlive()=false
+
+PduRecorder.stop() closing recorder log file: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\pduLog\PduCaptureLog22.dislog
+*** setKillSentinelAndInterrupts() killed=true sendingThread.isInterrupted()=true receiveThread.isInterrupted()=true
+[DisThreadedNetworkInterface DisChannel] close(): pdus2send.size()=0 baos.size()=0 dos.size()=80
+[DisThreadedNetworkInterface DisChannel] datagramSocket.leaveGroup address=239.1.2.3 port=3000 isClosed()=true close() complete.
+*** killThread() status: sendingThread.isAlive()=false sendingThread.isInterrupted()=true
+*** killThread() status: receiveThread.isAlive()=false receiveThread.isInterrupted()=true
+*** Thread close status: sendingThread.isAlive()=false receiveThread.isAlive()=false
+BUILD SUCCESSFUL (total time: 10 seconds)
diff --git a/assignments/src/src/SimkitOpenDis7Examples/run/RunTwoCraneBerths.java b/assignments/src/src/SimkitOpenDis7Examples/run/RunTwoCraneBerths.java
new file mode 100644
index 0000000000000000000000000000000000000000..4334f2207b65b95e963f2c291dd446c7bee81b69
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/run/RunTwoCraneBerths.java
@@ -0,0 +1,92 @@
+package SimkitOpenDis7Examples.run;
+
+import SimkitOpenDis7Examples.ShipArrivalProcess;
+import SimkitOpenDis7Examples.TwoCraneBerths;
+import simkit.Schedule;
+import simkit.random.RandomVariate;
+import simkit.random.RandomVariateFactory;
+import simkit.stat.CollectionSizeTimeVaryingStats;
+import simkit.stat.SimpleStatsTally;
+
+/**
+ * Run simple two-berth model for 10 years (3650 days).
+ * <h2>Output:</h2><pre>
+ShipArrivalProcess.1
+	unloadTimeGenerator = Uniform (0.500, 1.500)
+	interarrivalTimeGenerator = Exponential (0.700)
+TwoCraneBerths.2
+
+Simulation ended at time 3,650.0
+
+Number of ships arriving:	5,135
+Number of ships unloaded:	5,129
+Maximum # in queue:		11
+Average # in queue:		0.6834
+Average # busy berths:		1.1737
+Average time in system:		1.3207
+Average delay in queue:		0.4857
+</pre>
+* 
+ * @author abuss@nps.edu
+ */
+public class RunTwoCraneBerths
+{
+    /** Default constructor */
+    public RunTwoCraneBerths()
+    {
+        // default constructor
+    }
+    /**
+     * Run a simple program and compute statistical measurement of results.
+     * @param args the command line arguments
+     */
+    public static void main(String[] args) {
+        RandomVariate interarrivalTimeGenerator =
+                RandomVariateFactory.getInstance("Exponential", 0.7);
+        RandomVariate unloadingTimeGenerator =
+                RandomVariateFactory.getInstance("Uniform", 0.5, 1.5);
+        ShipArrivalProcess shipArrivalProcess =
+                new ShipArrivalProcess(interarrivalTimeGenerator,
+                    unloadingTimeGenerator);
+        
+        TwoCraneBerths twoCraneBerths = new TwoCraneBerths();
+        shipArrivalProcess.addSimEventListener(twoCraneBerths);
+        
+        SimpleStatsTally delayInQueueStat = new SimpleStatsTally("delayInQueue");
+        SimpleStatsTally timeInSystemStat = new SimpleStatsTally("timeInSystem");
+        CollectionSizeTimeVaryingStats numberInQueueStat = 
+                new CollectionSizeTimeVaryingStats("queue");
+        CollectionSizeTimeVaryingStats numberInBerthStat = 
+                new CollectionSizeTimeVaryingStats("berth");
+//        SimplePropertyDumper simplePropertyDumper = new SimplePropertyDumper();
+//        twoCraneBerths.addPropertyChangeListener(simplePropertyDumper);
+        
+        twoCraneBerths.addPropertyChangeListener(delayInQueueStat);
+        twoCraneBerths.addPropertyChangeListener(timeInSystemStat);
+        twoCraneBerths.addPropertyChangeListener(numberInQueueStat);
+        twoCraneBerths.addPropertyChangeListener(numberInBerthStat);
+        
+        System.out.println(shipArrivalProcess);
+        System.out.println(twoCraneBerths);
+        
+        double stopTime = 10 * 365;
+        Schedule.stopAtTime(stopTime);
+        Schedule.setVerbose(false);
+        
+        Schedule.reset();
+        Schedule.startSimulation();
+        
+        System.out.printf("%nSimulation ended at time %,.1f%n%n",
+                Schedule.getSimTime());
+        
+        System.out.printf("Number of ships arriving:\t%,d%n", shipArrivalProcess.getNumberArrivals());
+        System.out.printf("Number of ships unloaded:\t%,d%n", timeInSystemStat.getCount());
+        System.out.printf("Maximum # in queue:\t\t%.0f%n", numberInQueueStat.getMaxObs());
+        System.out.printf("Average # in queue:\t\t%.4f%n", numberInQueueStat.getMean());
+        System.out.printf("Average # busy berths:\t\t%.4f%n", numberInBerthStat.getMean());
+        System.out.printf("Average time in system:\t\t%.4f%n",
+                timeInSystemStat.getMean());
+        System.out.printf("Average delay in queue:\t\t%.4f%n",
+                delayInQueueStat.getMean());    }
+
+}
diff --git a/assignments/src/src/SimkitOpenDis7Examples/run/RunTwoCraneBerthsLog.txt b/assignments/src/src/SimkitOpenDis7Examples/run/RunTwoCraneBerthsLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..437f9dc4c5a5f926fc48a85f663a0e8f0313d76e
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/run/RunTwoCraneBerthsLog.txt
@@ -0,0 +1,25 @@
+ant -f C:\\x3d-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=SimkitOpenDis7Examples/run/RunTwoCraneBerths.java -Drun.class=SimkitOpenDis7Examples.run.RunTwoCraneBerths run-single
+init:
+Deleting: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+warning: [options] system modules path not set in conjunction with -source 17
+1 warning
+compile-single:
+run-single:
+ShipArrivalProcess.1
+	unloadTimeGenerator = Uniform (0.500, 1.500)
+	interarrivalTimeGenerator = Exponential (0.700)
+TwoCraneBerths.2
+
+Simulation ended at time 3,650.0
+
+Number of ships arriving:	5,135
+Number of ships unloaded:	5,129
+Maximum # in queue:		11
+Average # in queue:		0.6834
+Average # busy berths:		1.1737
+Average time in system:		1.3207
+Average delay in queue:		0.4857
+BUILD SUCCESSFUL (total time: 6 seconds)
diff --git a/assignments/src/src/SimkitOpenDis7Examples/run/RunTwoCraneBerthsOpenDis7.java b/assignments/src/src/SimkitOpenDis7Examples/run/RunTwoCraneBerthsOpenDis7.java
new file mode 100644
index 0000000000000000000000000000000000000000..c6d4ea43cea3e9b5daa031eb499f7e85ecbd05e1
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/run/RunTwoCraneBerthsOpenDis7.java
@@ -0,0 +1,99 @@
+package SimkitOpenDis7Examples.run;
+
+import SimkitOpenDis7Examples.ShipArrivalProcess;
+import SimkitOpenDis7Examples.TwoCraneBerthsOpenDis7;
+import simkit.Schedule;
+import simkit.random.RandomVariate;
+import simkit.random.RandomVariateFactory;
+import simkit.stat.CollectionSizeTimeVaryingStats;
+import simkit.stat.SimpleStatsTally;
+
+/**
+ * Run simple two-berth model for 10 years (3650 days).
+ * <h2>Output:</h2><pre>
+ShipArrivalProcess.1
+	unloadTimeGenerator = Uniform (0.500, 1.500)
+	interarrivalTimeGenerator = Exponential (0.700)
+TwoCraneBerthsOpenDis7.2
+
+Simulation ended at time 3,650.0
+
+Number of ships arriving:	5,135
+Number of ships unloaded:	5,129
+Maximum # in queue:		11
+Average # in queue:		0.6834
+Average # busy berths:		1.1737
+Average time in system:		1.3207
+Average delay in queue:		0.4857
+</pre>
+* 
+ * @author abuss@nps.edu
+ */
+public class RunTwoCraneBerthsOpenDis7
+{
+    /** Default constructor */
+    public RunTwoCraneBerthsOpenDis7()
+    {
+        // default constructor
+    }
+    /**
+     * Run a simple program and compute statistical measurement of results.
+     * @param args the command line arguments
+     */
+    public static void main(String[] args)
+    {
+        System.out.println ("RunTwoCraneBerthsOpenDis7 started"); // here we go
+        RandomVariate interarrivalTimeGenerator =
+                RandomVariateFactory.getInstance("Exponential", 0.7);
+        RandomVariate unloadingTimeGenerator =
+                RandomVariateFactory.getInstance("Uniform", 0.5, 1.5);
+        ShipArrivalProcess shipArrivalProcess =
+                new ShipArrivalProcess(interarrivalTimeGenerator,
+                    unloadingTimeGenerator);
+        
+        // can start debugging here
+        TwoCraneBerthsOpenDis7 twoCraneBerthsOpenDis7 = new TwoCraneBerthsOpenDis7();
+        shipArrivalProcess.addSimEventListener(twoCraneBerthsOpenDis7);
+        
+        SimpleStatsTally delayInQueueStat = new SimpleStatsTally("delayInQueue");
+        SimpleStatsTally timeInSystemStat = new SimpleStatsTally("timeInSystem");
+        CollectionSizeTimeVaryingStats numberInQueueStat = 
+                new CollectionSizeTimeVaryingStats("queue");
+        CollectionSizeTimeVaryingStats numberInBerthStat = 
+                new CollectionSizeTimeVaryingStats("berth");
+//        SimplePropertyDumper simplePropertyDumper = new SimplePropertyDumper();
+//        twoCraneBerths.addPropertyChangeListener(simplePropertyDumper);
+        
+        twoCraneBerthsOpenDis7.addPropertyChangeListener(delayInQueueStat);
+        twoCraneBerthsOpenDis7.addPropertyChangeListener(timeInSystemStat);
+        twoCraneBerthsOpenDis7.addPropertyChangeListener(numberInQueueStat);
+        twoCraneBerthsOpenDis7.addPropertyChangeListener(numberInBerthStat);
+        
+        System.out.println(shipArrivalProcess);
+        System.out.println(twoCraneBerthsOpenDis7);
+        
+        double stopTime = 10 * 365;
+        Schedule.stopAtTime(stopTime);
+        Schedule.setVerbose(false);
+        
+        Schedule.reset();
+        Schedule.startSimulation();
+        
+        System.out.printf("%nSimulation ended at time %,.1f%n%n",
+                Schedule.getSimTime());
+        
+        System.out.printf("Number of ships arriving:\t%,d%n", shipArrivalProcess.getNumberArrivals());
+        System.out.printf("Number of ships unloaded:\t%,d%n", timeInSystemStat.getCount());
+        System.out.printf("Maximum # in queue:\t\t%.0f%n", numberInQueueStat.getMaxObs());
+        System.out.printf("Average # in queue:\t\t%.4f%n", numberInQueueStat.getMean());
+        System.out.printf("Average # busy berths:\t\t%.4f%n", numberInBerthStat.getMean());
+        System.out.printf("Average time in system:\t\t%.4f%n",
+                timeInSystemStat.getMean());
+        System.out.printf("Average delay in queue:\t\t%.4f%n",
+                delayInQueueStat.getMean());    
+    
+        twoCraneBerthsOpenDis7.shutdownDisChannel();
+        System.out.println ("RunTwoCraneBerthsOpenDis7 finished"); // out here
+        System.exit(0);
+    }
+}
diff --git a/assignments/src/src/SimkitOpenDis7Examples/run/RunTwoCraneBerthsOpenDis7Log.txt b/assignments/src/src/SimkitOpenDis7Examples/run/RunTwoCraneBerthsOpenDis7Log.txt
new file mode 100644
index 0000000000000000000000000000000000000000..84d6808b7f615e7a8ce352220840024de2503fd3
Binary files /dev/null and b/assignments/src/src/SimkitOpenDis7Examples/run/RunTwoCraneBerthsOpenDis7Log.txt differ
diff --git a/assignments/src/src/SimkitOpenDis7Examples/run/RunTwoCraneBerthsOpenDis7PduCaptureLog.dislog b/assignments/src/src/SimkitOpenDis7Examples/run/RunTwoCraneBerthsOpenDis7PduCaptureLog.dislog
new file mode 100644
index 0000000000000000000000000000000000000000..15ff64ab7c74f35ea59b1635c3fde73074351d2c
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/run/RunTwoCraneBerthsOpenDis7PduCaptureLog.dislog
@@ -0,0 +1,172 @@
+# Start, ENCODING_PLAINTEXT, [PduRecorder] 20220619_172513, DIS capture file, .\pduLog\PduCaptureLog.dislog
+2022-06-19,17:25:13.862,7,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:13.979,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,82,101,97,100,121,32,116,111,32,112,114,111,99,101,115,115,32,83,104,105,112,32,49,32,119,105,116,104,32,99,114,97,110,101,32,97,116,32,104,101,97,100,32,111,102,32,112,105,101,114,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:14.080,7,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:14.204,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-80,67,114,97,110,101,32,97,116,32,112,111,115,105,116,105,111,110,32,57,48,46,48,109,32,102,111,114,32,111,102,102,108,111,97,100,32,97,102,116,101,114,32,57,48,46,48,32,115,101,99,111,110,100,115,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:14.315,7,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:14.427,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:14.540,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,0,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,49,32,116,111,32,99,114,97,110,101,32 # DisPduType 22 COMMENT
+2022-06-19,17:25:14.645,7,1,22,5,0,0,0,60,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,49,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:14.755,7,0,1,1,0,0,0,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:14.869,7,1,22,5,0,0,0,69,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:14.982,7,1,22,5,0,0,0,99,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-128,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,49,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:15.086,7,1,22,5,0,0,0,99,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-56,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,49,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:15.194,7,0,1,1,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:15.300,7,1,22,5,0,0,0,99,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:15.402,7,1,22,5,0,0,0,99,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,0,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,50,32,116,111,32,99,114,97,110,101,32 # DisPduType 22 COMMENT
+2022-06-19,17:25:15.506,7,1,22,5,0,0,0,-97,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,50,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:15.616,7,0,1,1,0,0,0,-88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:15.722,7,1,22,5,0,0,0,-88,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:15.825,7,1,22,5,0,0,0,-58,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-128,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,50,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:15.928,7,1,22,5,0,0,0,-58,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-56,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,50,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:16.043,7,0,1,1,0,0,0,-58,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:16.145,7,1,22,5,0,0,0,-58,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:16.253,7,1,22,5,0,0,0,-58,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,0,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,51,32,116,111,32,99,114,97,110,101,32 # DisPduType 22 COMMENT
+2022-06-19,17:25:16.359,7,1,22,5,0,0,1,2,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,51,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:16.462,7,0,1,1,0,0,1,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:16.568,7,1,22,5,0,0,1,11,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:16.669,7,1,22,5,0,0,1,41,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-128,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,51,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:16.784,7,1,22,5,0,0,1,41,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-56,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,51,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:16.900,7,0,1,1,0,0,1,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:17.011,7,1,22,5,0,0,1,41,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:17.113,7,1,22,5,0,0,1,41,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,0,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,52,32,116,111,32,99,114,97,110,101,32 # DisPduType 22 COMMENT
+2022-06-19,17:25:17.215,7,1,22,5,0,0,1,101,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,52,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:17.316,7,0,1,1,0,0,1,110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:17.429,7,1,22,5,0,0,1,110,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:17.529,7,1,22,5,0,0,1,-116,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-128,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,52,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:17.639,7,1,22,5,0,0,1,-116,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-56,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,52,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:17.745,7,0,1,1,0,0,1,-116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:17.846,7,1,22,5,0,0,1,-116,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:17.953,7,1,22,5,0,0,1,-116,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,0,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,53,32,116,111,32,99,114,97,110,101,32 # DisPduType 22 COMMENT
+2022-06-19,17:25:18.068,7,1,22,5,0,0,1,-56,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,53,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:18.175,7,0,1,1,0,0,1,-47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:18.284,7,1,22,5,0,0,1,-47,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:18.393,7,1,22,5,0,0,1,-17,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-128,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,53,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:18.507,7,1,22,5,0,0,1,-17,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-56,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,53,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:18.629,7,0,1,1,0,0,1,-17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:18.743,7,1,22,5,0,0,1,-17,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:18.846,7,1,22,5,0,0,1,-17,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,0,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,54,32,116,111,32,99,114,97,110,101,32 # DisPduType 22 COMMENT
+2022-06-19,17:25:18.952,7,1,22,5,0,0,2,43,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,54,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:19.054,7,0,1,1,0,0,2,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:19.169,7,1,22,5,0,0,2,52,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:19.279,7,1,22,5,0,0,2,82,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-128,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,54,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:19.381,7,1,22,5,0,0,2,82,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-56,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,54,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:19.484,7,0,1,1,0,0,2,82,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:19.592,7,1,22,5,0,0,2,82,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:19.700,7,1,22,5,0,0,2,82,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,0,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,55,32,116,111,32,99,114,97,110,101,32 # DisPduType 22 COMMENT
+2022-06-19,17:25:19.805,7,1,22,5,0,0,2,-114,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,55,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:19.914,7,0,1,1,0,0,2,-105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:20.021,7,1,22,5,0,0,2,-105,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:20.123,7,1,22,5,0,0,2,-75,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-128,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,55,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:20.237,7,1,22,5,0,0,2,-75,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-56,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,55,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:20.349,7,0,1,1,0,0,2,-75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:20.454,7,1,22,5,0,0,2,-75,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:20.559,7,1,22,5,0,0,2,-75,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,0,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,56,32,116,111,32,99,114,97,110,101,32 # DisPduType 22 COMMENT
+2022-06-19,17:25:20.661,7,1,22,5,0,0,2,-15,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,56,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:20.767,7,0,1,1,0,0,2,-6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:20.874,7,1,22,5,0,0,2,-6,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:20.976,7,1,22,5,0,0,3,24,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-128,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,56,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:21.081,7,1,22,5,0,0,3,24,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-56,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,56,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:21.187,7,0,1,1,0,0,3,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:21.291,7,1,22,5,0,0,3,24,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:21.393,7,1,22,5,0,0,3,24,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,0,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,57,32,116,111,32,99,114,97,110,101,32 # DisPduType 22 COMMENT
+2022-06-19,17:25:21.505,7,1,22,5,0,0,3,84,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,57,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:21.609,7,0,1,1,0,0,3,93,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:21.714,7,1,22,5,0,0,3,93,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:21.818,7,1,22,5,0,0,3,123,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-128,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,57,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:21.943,7,1,22,5,0,0,3,123,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-56,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,57,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:22.059,7,0,1,1,0,0,3,123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:22.166,7,1,22,5,0,0,3,123,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:22.275,7,1,22,5,0,0,3,123,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,8,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,49,48,32,116,111,32,99,114,97,110,101,32,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:22.390,7,1,22,5,0,0,3,-73,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-104,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,49,48,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:22.496,7,0,1,1,0,0,3,-64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:22.599,7,1,22,5,0,0,3,-64,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:22.704,7,1,22,5,0,0,3,-34,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-120,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,49,48,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:22.805,7,1,22,5,0,0,3,-34,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-48,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,49,48,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:22.910,7,0,1,1,0,0,4,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:23.026,7,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:23.137,7,1,22,5,0,0,0,1,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,82,101,97,100,121,32,116,111,32,112,114,111,99,101,115,115,32,83,104,105,112,32,50,32,119,105,116,104,32,99,114,97,110,101,32,97,116,32,104,101,97,100,32,111,102,32,112,105,101,114,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:23.245,7,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:23.353,7,1,22,5,0,0,0,1,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-80,67,114,97,110,101,32,97,116,32,112,111,115,105,116,105,111,110,32,57,48,46,48,109,32,102,111,114,32,111,102,102,108,111,97,100,32,97,102,116,101,114,32,57,48,46,48,32,115,101,99,111,110,100,115,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:23.457,7,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:23.570,7,1,22,5,0,0,0,1,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:23.680,7,1,22,5,0,0,0,1,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,0,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,49,32,116,111,32,99,114,97,110,101,32 # DisPduType 22 COMMENT
+2022-06-19,17:25:23.783,7,1,22,5,0,0,0,61,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,49,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:23.889,7,0,1,1,0,0,0,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:23.992,7,1,22,5,0,0,0,70,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:24.099,7,1,22,5,0,0,0,100,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-128,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,49,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:24.201,7,1,22,5,0,0,0,100,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-56,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,49,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:24.317,7,0,1,1,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:24.418,7,1,22,5,0,0,0,100,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:24.524,7,1,22,5,0,0,0,100,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,0,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,50,32,116,111,32,99,114,97,110,101,32 # DisPduType 22 COMMENT
+2022-06-19,17:25:24.639,7,1,22,5,0,0,0,-96,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,50,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:24.741,7,0,1,1,0,0,0,-87,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:24.856,7,1,22,5,0,0,0,-87,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:24.958,7,1,22,5,0,0,0,-57,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-128,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,50,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:25.073,7,1,22,5,0,0,0,-57,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-56,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,50,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:25.181,7,0,1,1,0,0,0,-57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:25.288,7,1,22,5,0,0,0,-57,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:25.394,7,1,22,5,0,0,0,-57,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,0,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,51,32,116,111,32,99,114,97,110,101,32 # DisPduType 22 COMMENT
+2022-06-19,17:25:25.500,7,1,22,5,0,0,1,3,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,51,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:25.601,7,0,1,1,0,0,1,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:25.703,7,1,22,5,0,0,1,12,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:25.807,7,1,22,5,0,0,1,42,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-128,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,51,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:25.913,7,1,22,5,0,0,1,42,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-56,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,51,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:26.016,7,0,1,1,0,0,1,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:26.120,7,1,22,5,0,0,1,42,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:26.223,7,1,22,5,0,0,1,42,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,0,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,52,32,116,111,32,99,114,97,110,101,32 # DisPduType 22 COMMENT
+2022-06-19,17:25:26.333,7,1,22,5,0,0,1,102,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,52,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:26.435,7,0,1,1,0,0,1,111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:26.543,7,1,22,5,0,0,1,111,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:26.652,7,1,22,5,0,0,1,-115,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-128,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,52,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:26.765,7,1,22,5,0,0,1,-115,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-56,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,52,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:26.871,7,0,1,1,0,0,1,-115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:26.977,7,1,22,5,0,0,1,-115,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:27.097,7,1,22,5,0,0,1,-115,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,0,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,53,32,116,111,32,99,114,97,110,101,32 # DisPduType 22 COMMENT
+2022-06-19,17:25:27.202,7,1,22,5,0,0,1,-55,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,53,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:27.303,7,0,1,1,0,0,1,-46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:27.408,7,1,22,5,0,0,1,-46,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:27.511,7,1,22,5,0,0,1,-16,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-128,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,53,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:27.617,7,1,22,5,0,0,1,-16,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-56,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,53,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:27.721,7,0,1,1,0,0,1,-16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:27.835,7,1,22,5,0,0,1,-16,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:27.936,7,1,22,5,0,0,1,-16,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,0,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,54,32,116,111,32,99,114,97,110,101,32 # DisPduType 22 COMMENT
+2022-06-19,17:25:28.045,7,1,22,5,0,0,2,44,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,54,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:28.156,7,0,1,1,0,0,2,53,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:28.265,7,1,22,5,0,0,2,53,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:28.372,7,1,22,5,0,0,2,83,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-128,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,54,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:28.481,7,1,22,5,0,0,2,83,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-56,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,54,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:28.585,7,0,1,1,0,0,2,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:28.689,7,1,22,5,0,0,2,83,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:28.789,7,1,22,5,0,0,2,83,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,0,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,55,32,116,111,32,99,114,97,110,101,32 # DisPduType 22 COMMENT
+2022-06-19,17:25:28.890,7,1,22,5,0,0,2,-113,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,55,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:28.996,7,0,1,1,0,0,2,-104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:29.102,7,1,22,5,0,0,2,-104,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:29.216,7,1,22,5,0,0,2,-74,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-128,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,55,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:29.332,7,1,22,5,0,0,2,-74,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-56,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,55,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:29.437,7,0,1,1,0,0,2,-74,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:29.539,7,1,22,5,0,0,2,-74,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:29.643,7,1,22,5,0,0,2,-74,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,0,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,56,32,116,111,32,99,114,97,110,101,32 # DisPduType 22 COMMENT
+2022-06-19,17:25:29.747,7,1,22,5,0,0,2,-14,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,56,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:29.852,7,0,1,1,0,0,2,-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:29.958,7,1,22,5,0,0,2,-5,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:30.063,7,1,22,5,0,0,3,25,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-128,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,56,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:30.167,7,1,22,5,0,0,3,25,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-56,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,56,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:30.275,7,0,1,1,0,0,3,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:30.386,7,1,22,5,0,0,3,25,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:30.487,7,1,22,5,0,0,3,25,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,0,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,57,32,116,111,32,99,114,97,110,101,32 # DisPduType 22 COMMENT
+2022-06-19,17:25:30.592,7,1,22,5,0,0,3,85,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-112,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,57,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:30.692,7,0,1,1,0,0,3,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:30.794,7,1,22,5,0,0,3,94,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:30.897,7,1,22,5,0,0,3,124,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-128,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,57,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:31.002,7,1,22,5,0,0,3,124,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-56,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,57,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:31.103,7,0,1,1,0,0,3,124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-55,15,-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:31.205,7,1,22,5,0,0,3,124,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,115,104,105,112,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:31.307,7,1,22,5,0,0,3,124,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,8,72,111,111,107,105,110,103,32,117,112,32,67,111,110,116,97,105,110,101,114,32,49,48,32,116,111,32,99,114,97,110,101,32,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:31.415,7,1,22,5,0,0,3,-72,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-104,72,111,111,107,101,100,32,117,112,58,32,67,111,110,116,97,105,110,101,114,32,49,48,32,116,111,32,99,114,97,110,101,32,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:31.525,7,0,1,1,0,0,3,-63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,86,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+2022-06-19,17:25:31.632,7,1,22,5,0,0,3,-63,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,64,67,114,97,110,101,32,111,114,105,101,110,116,101,100,32,116,111,32,112,105,101,114,32,97,102,116,101,114,32,57,46,48,32,115,101,99,111,110,100,115 # DisPduType 22 COMMENT
+2022-06-19,17:25:31.737,7,1,22,5,0,0,3,-33,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,97,-88,0,0,1,-120,68,101,116,97,99,104,101,100,58,32,67,111,110,116,97,105,110,101,114,32,49,48,32,111,110,32,112,105,101,114,32,97,102,116,101,114,32,51,48,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:31.853,7,1,22,5,0,0,3,-33,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-77,-70,0,0,1,-48,84,105,109,101,32,100,117,114,97,116,105,111,110,32,102,111,114,32,99,114,97,110,101,32,109,111,118,105,110,103,32,99,111,110,116,97,105,110,101,114,32,49,48,58,32,49,48,56,46,48,32,115,101,99,111,110,100,115,0,0,0,0,0,0 # DisPduType 22 COMMENT
+2022-06-19,17:25:31.970,7,0,1,1,0,0,4,57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 # DisPduType 01 ENTITY_STATE
+# Finish, ENCODING_PLAINTEXT, [PduRecorder] 20220619_172533, DIS capture file, .\pduLog\PduCaptureLog.dislog
diff --git a/assignments/src/src/SimkitOpenDis7Examples/run/package-info.java b/assignments/src/src/SimkitOpenDis7Examples/run/package-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..01f79d5e8609d63795c6d252f31610cc7430d6b2
--- /dev/null
+++ b/assignments/src/src/SimkitOpenDis7Examples/run/package-info.java
@@ -0,0 +1,11 @@
+/**
+ * Invocation run classes for Simkit event graphs with opendis7 Java outputs supporting the NPS MOVES MV3500 Networked Graphics course.
+ * Note that the "run" subpackage is a common Simkit design pattern for separating simkit models from executable programs.
+ * 
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/examples" target="_blank">NetworkedGraphicsMV3500 examples</a>
+ * @see java.lang.Package
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
+ */
+
+package SimkitOpenDis7Examples.run;
diff --git a/assignments/src/src/TcpExamples/README.md b/assignments/src/src/TcpExamples/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..53cad8dd2ca02c6c3a764295db0645367aaaeb09
--- /dev/null
+++ b/assignments/src/src/TcpExamples/README.md
@@ -0,0 +1,13 @@
+## TCP Examples Source Code
+
+Programs in this directory show how to create connection-oriented Transmission Control Protocol (TCP) sockets
+
+<!-- View this page at https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/TcpExamples/README.md -->
+
+| Telnet example       |  Telnet connection counting   | 
+|----------------------|-------------------------------|
+|  ![Telnet example](TcpExample1ScreenshotNetcat.png "Telnet example") |  ![Telnet connection counting](TcpExample2ConnectionCountingScreenshot.png "Telnet connection counting") 
+
+| Client-server socket communications | Client-Server Timing Sequence Diagram |
+|-------------------------------------|---------------------------------------|
+| ![Client-server socket communications](TcpExample3ServerClientScreenshot.png "Client-server socket communications") | ![Client-Server Timing Sequence Diagram](TcpExample4SequenceDiagram.png "Client-Server Timing Sequence Diagram") |
diff --git a/assignments/src/src/TcpExamples/TcpExample1NetBeansConsoleTelnet.pdf b/assignments/src/src/TcpExamples/TcpExample1NetBeansConsoleTelnet.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..6da2f6981a6c7ac8b3e745b40c4b22613dca99a4
Binary files /dev/null and b/assignments/src/src/TcpExamples/TcpExample1NetBeansConsoleTelnet.pdf differ
diff --git a/assignments/src/src/TcpExamples/TcpExample1NetBeansConsoleTelnet.png b/assignments/src/src/TcpExamples/TcpExample1NetBeansConsoleTelnet.png
new file mode 100644
index 0000000000000000000000000000000000000000..371d0175017153c5c87af5ace1b3719d2ce52f46
Binary files /dev/null and b/assignments/src/src/TcpExamples/TcpExample1NetBeansConsoleTelnet.png differ
diff --git a/assignments/src/src/TcpExamples/TcpExample1NetBeansConsoleTelnet.vsdx b/assignments/src/src/TcpExamples/TcpExample1NetBeansConsoleTelnet.vsdx
new file mode 100644
index 0000000000000000000000000000000000000000..685e64ed571a6804ccdbde3394732ce0fab882b2
Binary files /dev/null and b/assignments/src/src/TcpExamples/TcpExample1NetBeansConsoleTelnet.vsdx differ
diff --git a/assignments/src/src/TcpExamples/TcpExample1ScreenshotNetcat.png b/assignments/src/src/TcpExamples/TcpExample1ScreenshotNetcat.png
new file mode 100644
index 0000000000000000000000000000000000000000..9d8dbc9aaf8cb5059a6dc937916e4df33e8f9f0d
Binary files /dev/null and b/assignments/src/src/TcpExamples/TcpExample1ScreenshotNetcat.png differ
diff --git a/assignments/src/src/TcpExamples/TcpExample1ScreenshotTelnet.png b/assignments/src/src/TcpExamples/TcpExample1ScreenshotTelnet.png
new file mode 100644
index 0000000000000000000000000000000000000000..51c1479478333f17767d4bf6368c450527ccf6f8
Binary files /dev/null and b/assignments/src/src/TcpExamples/TcpExample1ScreenshotTelnet.png differ
diff --git a/assignments/src/src/TcpExamples/TcpExample1Telnet.java b/assignments/src/src/TcpExamples/TcpExample1Telnet.java
new file mode 100644
index 0000000000000000000000000000000000000000..c42da16d066cf129bae314ead0d6137c874702ec
--- /dev/null
+++ b/assignments/src/src/TcpExamples/TcpExample1Telnet.java
@@ -0,0 +1,112 @@
+package TcpExamples;
+
+import java.io.*;
+import java.net.*;
+
+/**
+ * <p>
+ * The simplest possible TCP network program, opening a socket and waiting for a reply. 
+ * It listens for any socket connection response, either from telnet (telnet localhost 2317)
+ * or another program that you write (which we will do later). 
+ * Once a socket connection is established, TcpExample1Telnet simply
+ * writes a string in response to that connection and finishes, exiting.
+ * 
+ * <p>
+ * As an alternative to running the Windows (or other operating system) console, 
+ * you can instead run the NetBeans terminal window.  If you are on Windows,
+ * NetBeans is looking for Cgwin installation (for Unix-like compatibility)
+ * with details at <a href="https://savage.nps.edu/Savage/developers.html#Cygwin" target="blank">Savage Developers Guide: Cygwin</a>.
+ * Modifying this program is the basis for Assignment 1.
+ * </p>
+ * 
+ * <p>
+ * Testing the running server program from telnet looks like this:
+ * </p>
+ * <pre>
+ * it154916:projects mcgredo$ <b>telnet localhost 2317</b>
+ * Trying ::1...
+ * Connected to localhost.
+ * Escape character is '^]'.
+ * This was written by the server
+ * Connection closed by foreign host.
+ * </pre>
+ * <p>
+ * Notice that "This was written by the server" matches 
+ * what is written by the code below, over the output stream.
+ * </p>
+ * 
+ * <p>
+ * After this first connection the program below drops to
+ * the bottom of the method, and does not repeat itself.
+ * In other words, the program exits.
+ * </p>
+ * 
+ * @see <a href="../../../src/TcpExamples/TcpExample1TerminalLog.txt" target="_blank">TcpExample1TerminalLog.txt</a>
+ * @see <a href="../../../src/TcpExamples/TcpExample1NetBeansConsoleTelnet.png" target="_blank">TcpExample1NetBeansConsoleTelnet.png</a>
+ * @see <a href="../../../src/TcpExamples/TcpExample1NetBeansConsoleTelnet.pdf" target="_blank">TcpExample1NetBeansConsoleTelnet.pdf</a>
+ * @see <a href="../../../src/TcpExamples/TcpExample1ScreenshotNetcat.png" target="_blank">TcpExample1ScreenshotNetcat.png</a>
+ * @see <a href="../../../src/TcpExamples/TcpExample1ScreenshotTelnet.png" target="_blank">TcpExample1ScreenshotTelnet.png</a>
+ * @see <a href="https://savage.nps.edu/Savage/developers.html#Cygwin" target="blank">Savage Developers Guide: Cygwin</a>
+ * @see <a href="https://savage.nps.edu/Savage/developers.html#telnet" target="blank">Savage Developers Guide: telnet</a>
+ * 
+ * @author mcgredo
+ * @author brutzman@nps.edu
+ */
+public class TcpExample1Telnet 
+{
+    /** Default constructor */
+    public TcpExample1Telnet()
+    {
+        // default constructor
+    }
+    /**
+     * Program invocation, execution starts here
+     * @param args command-line arguments
+     */
+    public static void main(String[] args)
+    {
+        try
+        {
+            System.out.println(TcpExample1Telnet.class.getName() + " has started and is waiting for a connection.");
+            System.out.println("  help:     https://savage.nps.edu/Savage/developers.html#telnet");
+            System.out.println("  terminal: enter (telnet localhost 2317) or, for macOS (nc localhost 2317)..." );
+			
+            // The ServerSocket waits for a connection from a client.
+            // It returns a Socket object when the connection occurs.
+            ServerSocket serverSocket = new ServerSocket(2317);
+            
+            // Use Java io classes to write text (as opposed to
+            // unknown bytes of some sort) to the client
+            
+            // The Socket object represents the connection between
+            // the server and client, including a full duplex connection
+            try (Socket clientConnection = serverSocket.accept()) // listen, wait here for a client to connect
+            {
+                // OK we got something, time to respond!
+                // Use Java io classes to write text (as opposed to
+                // unknown bytes of some sort) to the client
+                OutputStream os = clientConnection.getOutputStream();
+                PrintStream  ps = new PrintStream(os);
+                
+                        ps.println("This client response was written by server " + TcpExample1Telnet.class.getName()); // to remote client
+                System.out.println("This server response was written by server " + TcpExample1Telnet.class.getName()); // to server console
+
+                // "flush()" in important in that it forces a write
+                // across what is in fact a slow connection
+                ps.flush();
+            }
+            System.out.println(TcpExample1Telnet.class.getName() + " completed successfully.");
+        }
+        catch(IOException ioe)
+        {
+            System.err.println("Exception with " + TcpExample1Telnet.class.getName() + " networking:"); // describe what is happening
+            System.err.println(ioe);
+            // Provide more helpful information to user if exception occurs due to running twice at one time
+            
+            // brute force exception checking, can be brittle if exception message changes
+            // if (e.getMessage().equals("Address already in use: NET_Bind")) 
+            if (ioe instanceof java.net.BindException)
+                System.err.println("*** Be sure to stop any other running instances of programs using this port!");
+        }
+    }
+}
diff --git a/assignments/src/src/TcpExamples/TcpExample1TerminalLog.txt b/assignments/src/src/TcpExamples/TcpExample1TerminalLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2bc38877fff342314788b81f53d97b73cda259e9
--- /dev/null
+++ b/assignments/src/src/TcpExamples/TcpExample1TerminalLog.txt
@@ -0,0 +1,33 @@
+Invocation instructions:
+1. run/debug TcpExample1Telnet.java
+2. console:  nc     localhost 2317
+ alternate:  telnet localhost 2217
+
+Program responses:
+
+===================================================
+run:
+TcpExample1Telnet has started and is waiting for a connection.
+  enter (telnet localhost 2317) or (nc localhost 2317)...
+This server response was written by server TcpExample1.
+TcpExample1 completed successfully.
+BUILD SUCCESSFUL (total time: 16 seconds)
+
+===================================================
+netcat window:
+
+brutzman@DESKTOP-2S09UKA /cygdrive/c/Program Files/NetBeans_11.0/bin
+$ nc localhost 2317
+This client response was written by server TcpExample1.
+
+===================================================
+Telnet window:
+
+don@it154928 /cygdrive/c/Program Files/NetBeans 8.2
+$  telnet localhost 2317                                                                                                                                                                                            
+Trying ::1...
+Connected to localhost.
+Escape character is '^]'.
+This client response was written by server TcpExample1.
+Connection closed by foreign host.
+===================================================
diff --git a/assignments/src/src/TcpExamples/TcpExample2ConnectionCounting.java b/assignments/src/src/TcpExamples/TcpExample2ConnectionCounting.java
new file mode 100644
index 0000000000000000000000000000000000000000..de9a434599c0f5bff320eab63a516922a837af3d
--- /dev/null
+++ b/assignments/src/src/TcpExamples/TcpExample2ConnectionCounting.java
@@ -0,0 +1,149 @@
+package TcpExamples;
+
+import java.io.*;
+import java.net.*;
+
+/**
+ * <p>
+ * This program is only slightly more complex than {@link TcpExample1Telnet}, 
+ * counting each connection instead of immediately exiting after the first connection. 
+ * The only thing this program does differently is introduce a loop into the response,
+ * so you don't have to restart the program after one response.
+ * Also, it prints out the socket pair the server sees.
+ * </p>
+ * <p>
+ * Suggestion: connect to this program via telnet several times, 
+ * comparing the socket-pair responses each time.
+ * </p>
+ * <p>
+ * <b><code>telnet localhost 2317</code></b>
+ * </p>
+ * <p>
+ * If you're paying attention (and sophisticated!) you can contact the
+ * another person's computer in class while running this program.  This is
+ * a good way to check local-area network (LAN) connectivity.  
+ * To learn that local computer's IPv4 Address, type
+ * </p>
+ * <p>
+ * <b><code>ipconfig</code></b>
+ * </p>
+ * <p>
+ * (On the NPS campus you might get a ipOfServerLaptop number like 172.20.148.215).
+ * The someone else (or even that person) can run
+ * </p>
+ * <p>
+ * <b><code>telnet ipOfServerLaptop 2317</code></b>
+ * </p>
+ * <p>
+ * If this program is running, then that machine displays the current counter value of
+ * socket pairs received.
+ * </p>
+ * @see <a href="../../../src/TcpExamples/TcpExample2ConnectionCountingTerminalLog.txt" target="blank">TcpExample2ConnectionCountingTerminalLog.txt</a>
+ * @see <a href="../../../src/TcpExamples/TcpExample2ConnectionCountingScreenshot.png" target="blank">TcpExample2ConnectionCountingScreenshot.png</a>
+ * @see <a href="https://savage.nps.edu/Savage/developers.html#Cygwin" target="blank">Savage Developers Guide: Cygwin</a>
+ * @see <a href="https://savage.nps.edu/Savage/developers.html#telnet" target="blank">Savage Developers Guide: telnet</a>
+ * @see <a href="https://en.wikipedia.org/wiki/Ipconfig" target="blank">Wikipedia: ipconfig</a>
+ * 
+ * @author mcgredo
+ * @author brutzman@nps.edu
+ */
+public class TcpExample2ConnectionCounting 
+{
+    /** Default constructor */
+    public TcpExample2ConnectionCounting()
+    {
+        // default constructor
+    }
+    /**
+     * Program invocation, execution starts here
+     * @param args command-line arguments
+     */
+    public static void main(String[] args)
+    {
+        try
+        {
+            // welcome aboard messages
+            System.out.println("TcpExample2ConnectionCounting has started and is waiting for a connection.");
+            System.out.println("  help: https://savage.nps.edu/Savage/developers.html#telnet");
+            System.out.println("  Windows ipconfig (or Mac ifconfig) indicates current IPv4_Address (for example local wireless IP address)");
+            System.out.println("  Windows enter (telnet localhost 2317)    or Mac enter (nc localhost 2317)    for loopback operation, or" );
+            System.out.println("  Windows enter (telnet IPv4_Address 2317) or Mac enter (nc IPv4_Address 2317) for LAN operation" );
+            System.out.println("TcpExample2ConnectionCounting server standing by..." );
+			
+            // ServerSocket waits for a connection from a client. 
+            // Notice that it is outside the loop; ServerSocket needs to be made only once.
+			
+            int connectionCount = 0; // state variable
+            
+            ServerSocket serverSocket = new ServerSocket(2317); // server decides here what port to listen on.
+			// of interest: often client doesn't care what port it uses locally when connecting to that server port.
+            
+            // Loop, infinitely, waiting for client connections.
+            // Stop the program somewhere else.
+            while(true)
+            {
+                // serverSocket.accept() blocks! then proceeds once a connection is "accept"ed
+                try (Socket clientConnection = serverSocket.accept()) { // the accept() method blocks here until a client connects
+                    connectionCount++; // got another one! a client has connected
+                    
+                    OutputStream os = clientConnection.getOutputStream();
+                    PrintStream ps = new PrintStream(os);
+                    
+//                    if (connectionCount == 1) // first time through, report connection
+//                    {
+//                        // Where are we?  In other words, what is our host number? Advertise it.
+//                        // Note that we use the serverSocket to get address, since host may have multiple network connections.
+//                        // https://stackoverflow.com/questions/9481865/getting-the-ip-address-of-the-current-machine-using-java
+//                        String localHostAddress = clientConnection.getInetAddress().getHostAddress();
+//                        System.out.println("Local host address is " + localHostAddress);
+//                        if (localHostAddress.contains("/"))
+//                            localHostAddress = localHostAddress.substring(localHostAddress.indexOf("/")+1);
+//                        // show localhost IP number to facilitate connections over local area network (LAN, WAN)
+//                        System.out.println("  enter (nc localhost   2317) or (telnet localhost   2317) for local operation" );
+//                        System.out.println("  enter (nc "     + localHostAddress + " 2317) or " +
+//                                                   "(telnet " + localHostAddress + " 2317)..." );
+//                    }
+                    
+                    ps.println("This client response was written by server " + TcpExample2ConnectionCounting.class.getName()); // to remote client
+                    System.out.println("This server response was written by server " + TcpExample2ConnectionCounting.class.getName()); // to server console
+                    
+                            ps.println("You were connection #" + connectionCount + ", by my count");
+                    
+                    // Print some information locally about the Socket connection.
+                    // This includes the port and IP numbers on both sides (the socket pair.)
+                    
+                    InetAddress  localAddress = clientConnection.getLocalAddress();
+                    InetAddress remoteAddress = clientConnection.getInetAddress();
+                    
+                    int  localPort = clientConnection.getLocalPort();
+                    int remotePort = clientConnection.getPort();       // remember the prior question, why are 2 ports different?
+                    
+                    // My socket pair connection looks like this, to localhost:
+                    // Socket pair: (( /0:0:0:0:0:0:0:1, 2317 ), ( /0:0:0:0:0:0:0:1, 54876 )) note IPv6
+                    // Socket pair: (( /0:0:0:0:0:0:0:1, 2317 ), ( /0:0:0:0:0:0:0:1, 54881 ))
+                    //
+                    // Why is first IP/port the same, while the second set has different ports?
+                    
+                    System.out.println("Socket pair (server, client): (( " + localAddress.toString() + ", " + localPort + " ), ( " +
+                            remoteAddress.toString() + ", " + remotePort + " ))");
+                    
+                    System.out.println("got another connection, #" + connectionCount); // report progress
+                    
+                    // Notice the use of flush() and close(). Without
+                    // the close() to Socket object may stay open for
+                    // a while after the client has stopped needing this
+                    // connection. Close() explicitly ends the connection.
+                    ps.flush();
+                }
+            }
+        }
+        catch(IOException e)
+        {
+            System.err.println("Problem with  " + TcpExample2ConnectionCounting.class.getName() + " networking:"); // describe what is happening
+            System.err.println("Error: " + e);
+            // Provide more helpful information to user if exception occurs due to running twice at one time
+            if (e instanceof java.net.BindException)
+                System.err.println("*** Be sure to stop any other running instances of programs using this port!");
+        }
+    }
+}
diff --git a/assignments/src/src/TcpExamples/TcpExample2ConnectionCountingScreenshot.png b/assignments/src/src/TcpExamples/TcpExample2ConnectionCountingScreenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..242286d10aa7cb2dc816499d794d93e7b18efaf6
Binary files /dev/null and b/assignments/src/src/TcpExamples/TcpExample2ConnectionCountingScreenshot.png differ
diff --git a/assignments/src/src/TcpExamples/TcpExample2ConnectionCountingTerminalLog.txt b/assignments/src/src/TcpExamples/TcpExample2ConnectionCountingTerminalLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e7324dfea05687f0e3e4130afb6a058a3a994d2d
--- /dev/null
+++ b/assignments/src/src/TcpExamples/TcpExample2ConnectionCountingTerminalLog.txt
@@ -0,0 +1,46 @@
+Invocation instructions:
+1. run/debug TcpExample2ConnectionCounting.java
+
+2. Windows: ipconfig
+     MacOS: ifconfig
+
+3. Windows: telnet  localhost 2317
+     MacOS:  nc     localhost 2317
+
+Program responses:
+
+===================================================
+run-single:
+TcpExample2ConnectionCounting has started and is waiting for a connection.
+  help: https://savage.nps.edu/Savage/developers.html#telnet
+  Windows ipconfig (or Mac ifconfig) indicates current IPv4_Address (for example local wireless IP address)
+  Windows enter (telnet localhost 2317)    or Mac enter (nc localhost 2317)    for loopback operation, or
+  Windows enter (telnet IPv4_Address 2317) or Mac enter (nc IPv4_Address 2317) for LAN operation
+TcpExample2ConnectionCounting server standing by...
+This server response was written by server TcpExamples.TcpExample2ConnectionCounting
+Socket pair (server, client): (( /172.20.154.38, 2317 ), ( /172.20.153.125, 55424 ))
+got another connection, #1
+This server response was written by server TcpExamples.TcpExample2ConnectionCounting
+Socket pair (server, client): (( /172.20.154.38, 2317 ), ( /172.20.153.125, 55425 ))
+got another connection, #2
+This server response was written by server TcpExamples.TcpExample2ConnectionCounting
+Socket pair (server, client): (( /172.20.154.38, 2317 ), ( /172.20.153.125, 55426 ))
+got another connection, #3
+This server response was written by server TcpExamples.TcpExample2ConnectionCounting
+Socket pair (server, client): (( /172.20.154.38, 2317 ), ( /172.20.153.125, 55427 ))
+got another connection, #4
+This server response was written by server TcpExamples.TcpExample2ConnectionCounting
+Socket pair (server, client): (( /172.20.154.38, 2317 ), ( /172.20.153.125, 55428 ))
+got another connection, #5
+This server response was written by server TcpExamples.TcpExample2ConnectionCounting
+Socket pair (server, client): (( /172.20.154.38, 2317 ), ( /172.20.154.38, 49308 ))
+got another connection, #6
+
+===================================================
+$  telnet localhost 2317
+
+This client response was written by server TcpExamples.TcpExample2ConnectionCounting                                                                                                                               
+You were connection #6, by my count                                                                                                                                                                                
+                                                                                                                                                                              
+Connection to host lost.
+===================================================
\ No newline at end of file
diff --git a/assignments/src/src/TcpExamples/TcpExample3Client.java b/assignments/src/src/TcpExamples/TcpExample3Client.java
new file mode 100644
index 0000000000000000000000000000000000000000..7312d3aac7f8aacf27abd5ca77d4c299b0867044
--- /dev/null
+++ b/assignments/src/src/TcpExamples/TcpExample3Client.java
@@ -0,0 +1,113 @@
+package TcpExamples;
+
+import java.io.*;
+import java.net.*;
+
+/**
+ * <p>
+ * This program duplicates what happened when telnet (or nc) was invoked in prior examples,
+ * directly connecting to an already-running {@link TcpExample3Server}. 
+ * In prior examples, we used telnet (or netcat) to connect to the server application.
+ * In this example, we are now writing our own program to make the socket connection.
+ * </p>
+ * <p>
+ * As you will see, when we run this program after we start the server program,
+ * we will see a string similar to what telnet printed, sent by the server. 
+ * The output at the server shows different socket-pair values, each time the loop iterates.
+ * </p>
+ *
+ * @see TcpExample3Server
+ * @see <a href="../../../src/TcpExamples/TcpExample3TerminalLog.txt" target="blank">TcpExample3TerminalLog.txt</a>
+ * @see <a href="../../../src/TcpExamples/TcpExample3ServerClientScreenshot.png" target="blank">TcpExample3ServerClientScreenshot.png</a>
+ * @see <a href="https://savage.nps.edu/Savage/developers.html#Cygwin" target="blank">Savage Developers Guide: Cygwin</a>
+ * @see <a href="https://savage.nps.edu/Savage/developers.html#telnet" target="blank">Savage Developers Guide: telnet</a>
+ * @see <a href="https://en.wikipedia.org/wiki/Ipconfig" target="blank">Wikipedia: ipconfig</a>
+ * 
+ * @author mcgredo
+ * @author brutzman@nps.edu
+ */
+public class TcpExample3Client
+{
+    /** Default constructor */
+    public TcpExample3Client()
+    {
+        // default constructor
+    }
+
+    /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
+     * @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
+     * @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a> 
+     */
+    public final static String LOCALHOST = "0:0:0:0:0:0:0:1"; //Local host
+
+    /**
+     * Program invocation, execution starts here
+     * @param args command-line arguments
+     */
+    @SuppressWarnings("SleepWhileInLoop") // you have been warned!
+    public static void main(String[] args)
+    {        
+        // Local variables/fields
+        Socket socket = null;
+        InputStream is;
+        Reader isr;
+        BufferedReader br;
+        String serverMessage;
+        int clientLoopCount = 0;
+        
+        try {
+            while (true)
+            {
+                clientLoopCount++; // increment at beginning of loop for reliability
+                System.out.println(TcpExample3Client.class.getName() + " creating socket...");
+
+                // We request an IP to connect to ("localhost") and
+                // port number at that IP (2317). This establishes
+                // a connection to that IP in the form of a Socket
+                // object; the server uses a ServerSocket to wait for
+                // connections.
+                socket = new Socket(LOCALHOST, 2317); // can change hostname (or IP number) to connect to another system
+
+                // Now hook everything up (i.e. set up the streams), Java style:
+                is  = socket.getInputStream();
+                isr = new InputStreamReader(is);
+                br  = new BufferedReader(isr);
+
+                // Read a single line written by the server. We'd
+                // do things a bit differently if there were many lines to be read
+                // from the server instead of one only.
+                serverMessage = br.readLine();
+                System.out.println("==================================================");
+                       
+                System.out.print  ("Client loop " + clientLoopCount + ": ");
+                System.out.println("now we're talking!");
+                System.out.println("The message the server sent was: '" + serverMessage + "'");
+                // socket gets closed, either automatically/silently by this code (or possibly by the server)
+                
+                Thread.sleep(500l); // slow things down, for example 500l (long) = 500 msec (1/2 second)
+                
+            } // end while(true) // infinite loops are dangerous, be sure to kill this process!
+        } 
+        catch (IOException | InterruptedException e )
+        {
+            System.err.println("Problem with " + TcpExample3Client.class.getName() + " networking:"); // describe what is happening
+            System.err.println("Error: " + e);
+            
+            // Provide more helpful information to user if exception occurs due to running twice at one time
+            if (e instanceof java.net.BindException) {
+                System.err.println("*** Be sure to stop any other running instances of programs using this port!");
+            }
+        }
+        finally // occurs after any other activity when shutting down
+        {
+            try {
+                if (socket != null)
+                    socket.close();
+            } catch (IOException e) {}
+            
+            // program exit: tell somebody about that happening.  Likely cause: server drops connection.
+            System.out.println();
+            System.out.println(TcpExample3Client.class.getName() + " exit");
+        }
+    }
+}
diff --git a/assignments/src/src/TcpExamples/TcpExample3Server.java b/assignments/src/src/TcpExamples/TcpExample3Server.java
new file mode 100644
index 0000000000000000000000000000000000000000..016480d7c0c1d33a6614c8817a1269c512a2e77f
--- /dev/null
+++ b/assignments/src/src/TcpExamples/TcpExample3Server.java
@@ -0,0 +1,130 @@
+package TcpExamples;
+
+import java.io.*;
+import java.net.*;
+
+/**
+ * <p>
+ * This program is only slightly more complex than {@link TcpExample1Telnet}
+ * and {@link TcpExample2ConnectionCounting}, awaiting a socket response. 
+ * The only thing it does differently is introduce a loop into the response, so
+ * you don't have to restart the program after one response. Also, it prints out
+ * the socket pair the server sees. Run the program via telnet (or nc)
+ * several times and compare the socket pairs.
+ * </p>
+ * <p>
+ *  <b><code>telnet localhost 2317</code></b>
+ * </p>
+ * <p>
+ * If you're paying attention (and sophisticated!) you can contact the
+ * another person's computer in class while running this program.  This is
+ * a good way to check local-area network (LAN) connectivity.  
+ * To learn that local computer's IPv4 Address, type
+ * </p>
+ * <p>
+ *  <b><code>ipconfig</code></b>
+ * </p>
+ * <p>
+ * Then contact the other computer by using telnet (or nc)
+ * </p>
+ * <p>
+ *  <code><b>telnet</b> [ipNumberOfServerLaptop] <b>2317</b></code>
+ * </p>
+ * <p>
+ * and have the other system display the socket pairs received.
+ * </p>
+ * 
+ * @see TcpExample3Client
+ * @see <a href="../../../src/TcpExamples/TcpExample3TerminalLog.txt" target="blank">TcpExample3TerminalLog.txt</a>
+ * @see <a href="../../../src/TcpExamples/TcpExample3ServerClientScreenshot.png" target="blank">TcpExample3ServerClientScreenshot.png</a>
+ * @see <a href="https://savage.nps.edu/Savage/developers.html#Cygwin" target="blank">Savage Developers Guide: Cygwin</a>
+ * @see <a href="https://savage.nps.edu/Savage/developers.html#telnet" target="blank">Savage Developers Guide: telnet</a>
+ * @see <a href="https://en.wikipedia.org/wiki/Ipconfig" target="blank">Wikipedia: ipconfig</a>
+ * 
+ * @author mcgredo
+ * @author brutzman@nps.edu
+ */
+public class TcpExample3Server
+{
+    /** Default constructor */
+    public TcpExample3Server()
+    {
+        // default constructor
+    }
+
+    /**
+     * Program invocation, execution starts here
+     * If already compiled, can run using console in directory ../../build/classes/ by invoking \
+     *      java -classpath . TcpExamples.TcpExample3Server
+     * @param args command-line arguments
+     */
+    public static void main(String[] args) {
+        try {
+            
+            // ServerSocket waits for a connection from a client. 
+            // Notice that it is outside the loop; ServerSocket
+            // needs to be made only once.
+            System.out.println(TcpExample3Server.class.getName() + " has started..."); // it helps debugging to put this on console first
+            
+            ServerSocket serverSocket = new ServerSocket(2317);
+            OutputStream os;
+            PrintStream ps;
+            InetAddress localAddress, remoteAddress;
+            int localPort, remotePort;
+            int serverLoopCount = 0;
+
+            // Server is up and waiting (i.e. "blocked" or paused)
+            // Loop, infinitely, waiting for client connections.
+            // Stop the program somewhere else.
+            while (true) { 
+                
+                // block until connected to a client
+                try (Socket clientConnectionSocket = serverSocket.accept())
+                {
+                    serverLoopCount++; // increment at beginning of loop for reliability
+                    
+                    // Now hook everything up (i.e. set up the streams), Java style:
+                    os = clientConnectionSocket.getOutputStream();
+                    ps = new PrintStream(os);
+                    ps.println("This is response " + serverLoopCount + " produced by the server."); // this gets sent back to client!
+                    
+                    // Print some information locally about the Socket connection.
+                    // This includes the port and IP numbers on both sides (the socket pair).
+                     localAddress = clientConnectionSocket.getLocalAddress();
+                    remoteAddress = clientConnectionSocket.getInetAddress();
+                        localPort = clientConnectionSocket.getLocalPort();
+                       remotePort = clientConnectionSocket.getPort();
+                       
+                    System.out.print ("Server loop " + serverLoopCount + ": ");
+                    
+                    // My socket pair connection looks like this, to localhost:
+                    // Socket pair: (( /0:0:0:0:0:0:0:1, 2317 ), ( /0:0:0:0:0:0:0:1, 54876 ))
+                    // Socket pair: (( /0:0:0:0:0:0:0:1, 2317 ), ( /0:0:0:0:0:0:0:1, 54881 ))
+                    
+                    // Why is the first IP/port the same, while the second set has different ports?
+                    System.out.println(TcpExample3Server.class.getName() + " socket pair showing host name, address, port:");
+                    System.out.println("  (( " + 
+                         localAddress.getHostName() + "=" +  localAddress.getHostAddress() + ", " + localPort + " ), ( " + 
+                        remoteAddress.getHostName() + "=" + remoteAddress.getHostAddress() + ", " + remotePort + " ))");
+                    
+                    if ( localAddress.getHostName().equals( localAddress.getHostAddress()) ||
+                        remoteAddress.getHostName().equals(remoteAddress.getHostAddress()))
+                        System.out.println("  note HostName matches address if host has no DNS name");                    
+                    // Notice the use of flush() and try w/ resources. Without
+                    // the try w/ resources the Socket object may stay open for
+                    // a while after the client has stopped needing this
+                    // connection. try w/ resources explicitly ends the connection.
+                    ps.flush();
+                    // like it or not, you're outta here!
+                }
+            }
+        } catch (IOException e) {
+            System.err.println("Problem with " + TcpExample3Server.class.getName() + " networking: " + e);
+
+            // Provide more helpful information to user if exception occurs due to running twice at one time
+            if (e instanceof java.net.BindException) {
+                System.err.println("*** Be sure to stop any other running instances of programs using this port!");
+            }
+        }
+    }
+}
diff --git a/assignments/src/src/TcpExamples/TcpExample3ServerClientScreenshot.png b/assignments/src/src/TcpExamples/TcpExample3ServerClientScreenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..64210e343ab2c91bad19fa88fb8a8c989e8b9c16
Binary files /dev/null and b/assignments/src/src/TcpExamples/TcpExample3ServerClientScreenshot.png differ
diff --git a/assignments/src/src/TcpExamples/TcpExample3TerminalLog.txt b/assignments/src/src/TcpExamples/TcpExample3TerminalLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e6b55d9562b8fa4f8dfb79ffcb15420e4119a20d
--- /dev/null
+++ b/assignments/src/src/TcpExamples/TcpExample3TerminalLog.txt
@@ -0,0 +1,46 @@
+Invocation instructions:
+* run/debug TcpExample3Server.java
+* run/debug TcpExample3Client.java
+
+Program responses:
+
+===================================================
+run-single:
+TcpExample3Server has started...
+Server loop 1: TcpExample3Server socket pair showing host name, address, port:
+  (( 0:0:0:0:0:0:0:1=0:0:0:0:0:0:0:1, 2317 ), ( 0:0:0:0:0:0:0:1=0:0:0:0:0:0:0:1, 54180 ))
+  note HostName matches address if host has no DNS name
+Server loop 2: TcpExample3Server socket pair showing host name, address, port:
+  (( 0:0:0:0:0:0:0:1=0:0:0:0:0:0:0:1, 2317 ), ( 0:0:0:0:0:0:0:1=0:0:0:0:0:0:0:1, 54181 ))
+  note HostName matches address if host has no DNS name
+Server loop 3: TcpExample3Server socket pair showing host name, address, port:
+  (( 0:0:0:0:0:0:0:1=0:0:0:0:0:0:0:1, 2317 ), ( 0:0:0:0:0:0:0:1=0:0:0:0:0:0:0:1, 54182 ))
+  note HostName matches address if host has no DNS name
+[etc.]
+[kill process to exit]
+
+===================================================
+run-single:
+TcpExample3Client creating socket...
+==================================================
+Client loop 1: now we're talking!
+The message the server sent was: 'This is response 1 produced by the server.'
+TcpExample3Client creating socket...
+==================================================
+Client loop 2: now we're talking!
+The message the server sent was: 'This is response 2 produced by the server.'
+TcpExample3Client creating socket...
+==================================================
+Client loop 3: now we're talking!
+The message the server sent was: 'This is response 3 produced by the server.'
+TcpExample3Client creating socket...
+==================================================
+[etc.]
+TcpExample3Client exit
+
+You must kill this client process to stop it, each is in an infinite loop.
+
+If first you kill the server process, that will kill the client process
+automatically when the connection drops, simply because the client program
+is written that way.  Killing the client process first does not stop the
+server, which will keep the localhost port locked.  Go ahead and test this.
diff --git a/assignments/src/src/TcpExamples/TcpExample4Client.java b/assignments/src/src/TcpExamples/TcpExample4Client.java
new file mode 100644
index 0000000000000000000000000000000000000000..9c6999a580ebe4a9bcb4fdbadeed854077df491c
--- /dev/null
+++ b/assignments/src/src/TcpExamples/TcpExample4Client.java
@@ -0,0 +1,84 @@
+package TcpExamples;
+
+import java.io.*;
+import java.net.*;
+//import java.time.LocalTime; // conversion?
+
+/**
+ * This client program establishes a socket connection to the {@link TcpExample4DispatchServer},
+ * then checks how long it takes to read the single line it expects as a server response.
+ * No fancy footwork here, it is pretty simple and similar to {@link TcpExample3Client}.
+ * 
+ * @see TcpExample4DispatchServer
+ * @see TcpExample4HandlerThread
+ *
+ * @see <a href="../../../src/TcpExamples/TcpExample4TerminalLog.txt" target="blank">TcpExample4TerminalLog.txt</a>
+ * @see <a href="../../../src/TcpExamples/TcpExample4SequenceDiagram.png" target="blank">TcpExample4SequenceDiagram.png</a>
+ * @see <a href="../../../src/TcpExamples/TcpExample4SequenceSketch.png" target="blank">TcpExample4SequenceSketch.png</a>
+ * 
+ * @author Don McGregor
+ * @author Don Brutzman
+ * @author MV3500 class
+ */
+public class TcpExample4Client
+{
+    /** Default constructor */
+    public TcpExample4Client()
+    {
+        // default constructor
+    }
+    static String DESTINATION_HOST = "localhost";
+    static int    MAX_LOOP_COUNT   = 4;
+
+    /**
+     * Program invocation, execution starts here
+     * @param args command-line arguments
+     */
+    public static void main(String[] args) {
+        try {
+            System.out.println(TcpExample4Client.class.getName() + " start, loop " + MAX_LOOP_COUNT + " times");
+            System.out.println("==================================================");
+            for (int loopCount = 1; loopCount <= MAX_LOOP_COUNT; loopCount++) // loop then exit
+            {
+                System.out.println(TcpExample4Client.class.getName() + " creating socket #" + loopCount + "...");
+
+                // We request an IP to connect to ("localhost") and
+                // port number at that IP (2317). This establishes
+                // a connection to that IP in the form of the Socket
+                // object; the server uses a ServerSocket to wait for
+                // connections.This particualar example is interacting
+                // with what it expects is a server that writes a single text
+                // line after 10 sec.
+                long startTime = System.currentTimeMillis();
+
+                // open a socket for each loop
+		Socket socket = new Socket(DESTINATION_HOST, 2317);
+
+                // Setup.  Read the single line written by the server.
+                // We'd do things a bit differently if many lines to be read
+                // from the server, instead of one only.
+                InputStream is = socket.getInputStream();
+                Reader isr = new InputStreamReader(is);
+                BufferedReader br = new BufferedReader(isr);
+
+                String serverMessage = br.readLine(); // blocks
+                long readTime = System.currentTimeMillis();
+                long timeLength = readTime - startTime;
+
+                System.out.println(TcpExample4Client.class.getName() + ": message received from server='" + serverMessage + "'");
+                System.out.println(TcpExample4Client.class.getName() + ": time msec required for read=" + timeLength);
+                System.out.println("==================================================");
+                // To push this further, launch multiple copies of TcpExample4Client simultaneously
+            }
+            System.out.println(TcpExample4Client.class.getName() + " complete");
+            // main method now exits
+        } catch (IOException e) {
+            System.out.println("Problem with " + TcpExample4Client.class.getName() + " networking:networking:"); // describe what is happening
+            System.out.println("Error: " + e);
+            // Provide more helpful information to user if exception occurs due to running twice at one time
+            if (e instanceof java.net.BindException) {
+                System.out.println("*** Be sure to stop any other running instances of programs using this port!");
+            }
+        }
+    }
+}
diff --git a/assignments/src/src/TcpExamples/TcpExample4DispatchServer.java b/assignments/src/src/TcpExamples/TcpExample4DispatchServer.java
new file mode 100644
index 0000000000000000000000000000000000000000..d889c89002b2663d85764ec45a88b4e9495c0388
--- /dev/null
+++ b/assignments/src/src/TcpExamples/TcpExample4DispatchServer.java
@@ -0,0 +1,64 @@
+package TcpExamples;
+
+import java.io.IOException;
+import java.net.*;
+
+/**
+ * This server program works a bit differently by creating and dispatching a
+ * new thread to handle multiple incoming socket connections, one after another, all running in parallel.
+ * This advanced technique is often used in high=performance high=capacity server programs.
+ * 
+ * @see TcpExample4Client
+ * @see TcpExample4HandlerThread
+ *
+ * @see <a href="../../../src/TcpExamples/TcpExample4TerminalLog.txt" target="blank">TcpExample4TerminalLog.txt</a>
+ * @see <a href="../../../src/TcpExamples/TcpExample4SequenceDiagram.png" target="blank">TcpExample4SequenceDiagram.png</a>
+ * @see <a href="../../../src/TcpExamples/TcpExample4SequenceSketch.png" target="blank">TcpExample4SequenceSketch.png</a>
+ *
+ * @author Don McGregor
+ * @author Don Brutzman
+ * @author MV3500 class
+ */
+public class TcpExample4DispatchServer
+{
+    /** Default constructor */
+    public TcpExample4DispatchServer()
+    {
+        // default constructor
+    }
+    /**
+     * Program invocation, execution starts here
+     * @param args command-line arguments
+     */
+    public static void main(String[] args)
+    {
+        try {
+            ServerSocket serverSocket = new ServerSocket(2317);
+            TcpExample4HandlerThread handlerThread;
+            Socket clientConnection;
+
+            int connectionCount = 0; // state variable
+
+            System.out.println(TcpExample4DispatchServer.class.getName() + " ready to accept socket connections...");
+            while (true) // infinite loop
+            {
+                clientConnection = serverSocket.accept(); // block until connected
+
+                connectionCount++; // unblocked, got another connection
+                System.out.println("=============================================================");
+                System.out.println(TcpExample4DispatchServer.class.getName() + ".handlerThread invocation for connection #" + connectionCount + "...");
+                handlerThread = new TcpExample4HandlerThread(clientConnection);
+                handlerThread.start(); // invokes the run() method in that object
+                System.out.println(TcpExample4DispatchServer.class.getName() + ".handlerThread is launched, awaiting another connection...");
+            }
+        } catch (IOException e) {
+            System.out.println("Problem with " + TcpExample4DispatchServer.class.getName() + " networking:"); // describe what is happening
+            System.out.println("Error: " + e);
+            // Provide more helpful information to user if exception occurs due to running twice at one time
+            if (e instanceof java.net.BindException) {
+                System.out.println("*** Be sure to stop any other running instances of programs using this port!");
+            }
+        }
+        System.out.println("=============================================================");
+    }
+}
diff --git a/assignments/src/src/TcpExamples/TcpExample4HandlerThread.java b/assignments/src/src/TcpExamples/TcpExample4HandlerThread.java
new file mode 100644
index 0000000000000000000000000000000000000000..2c3a128371e31e9a12b2bcdedb74bbedf5c7a54b
--- /dev/null
+++ b/assignments/src/src/TcpExamples/TcpExample4HandlerThread.java
@@ -0,0 +1,82 @@
+package TcpExamples;
+
+import java.io.*;
+import java.net.*;
+
+/**
+ * <p>
+ * This utility class supports the {@link TcpExample4DispatchServer} program,
+ * handling all programming logic needed for a new socket connection
+ * to run in a thread of its own. This is the server
+ * portion as well, so we artificially invent what happens
+ * if the server can't respond to a connection for several seconds.
+ * </p>
+ * <p>
+ * Warning: do not run this class!  It is created and used automatically by {@link TcpExample4DispatchServer} at run time.
+ * </p>
+ * 
+ * @see TcpExample4Client
+ * @see TcpExample4DispatchServer
+ *
+ * @see <a href="../../../src/TcpExamples/TcpExample4TerminalLog.txt" target="blank">TcpExample4TerminalLog.txt</a>
+ * @see <a href="../../../src/TcpExamples/TcpExample4SequenceDiagram.png" target="blank">TcpExample4SequenceDiagram.png</a>
+ * @see <a href="../../../src/TcpExamples/TcpExample4SequenceSketch.png" target="blank">TcpExample4SequenceSketch.png</a>
+ * 
+ * @author Don McGregor
+ * @author Don Brutzman
+ * @author MV3500 class
+ */
+public class TcpExample4HandlerThread extends Thread
+{
+    /** The socket connection to a client */
+    Socket socket;
+    
+    /** The thread constructor creates the socket from
+     * a ServerSocket, and passes one to the thread
+     * responsible for handling the connection.
+     * 
+     * @param socket The socket connection handled by this thread
+     */
+    TcpExample4HandlerThread(Socket socket)
+    {
+        this.socket = socket;
+    }
+    
+    /** Handles one connection. We add an artificial slowness
+     * to handling the connection with a sleep(). This means
+     * the client won't see a server connection response for ten seconds (default).
+     */
+    // @overriding run() method in Java Thread class is deliberate
+    @Override 
+    public void run()
+    {
+        try
+        {
+            System.out.println(TcpExample4HandlerThread.class.getName() + " starting to handle a thread...");
+            
+            // get the connection output stream, then wait a period of time. 
+            OutputStream os = socket.getOutputStream();
+            PrintStream ps = new PrintStream(os);
+
+            final long TIMEOUT = 2000; // 2000 milliseconds = 2 seconds, 10000 milliseconds = 10 seconds
+            System.out.println(TcpExample4HandlerThread.class.getName() + " pausing for TIMEOUT=" + TIMEOUT + "ms" + 
+                               " to emulate computation and avoid server-side overload"); 
+            Thread.sleep(TIMEOUT);
+                
+            // ps is the PrintStream is the Java way to use System.print() to pass data along the socket.
+            ps.println("This message was written by the server " + TcpExample4HandlerThread.class.getName()); // TODO insert socket count here!
+            ps.flush();     // make sure that it indeed escapes current process and reaches the client
+            socket.close(); // all clear, no longer need socket
+            System.out.println(TcpExample4HandlerThread.class.getName() + " finished handling a thread, now exit.");
+        }
+        catch(IOException | InterruptedException e) // either a networking or a threading problem
+        {
+            System.out.println("Problem with " + TcpExample4HandlerThread.class.getName() + " networking:"); // describe what is happening
+            System.out.println("Error: " + e);
+            
+            // Provide more helpful information to user if exception occurs due to running twice at one time
+            if (e instanceof java.net.BindException)
+                System.out.println("*** Be sure to stop any other running instances of programs using this port!");
+        }
+    }
+}
diff --git a/assignments/src/src/TcpExamples/TcpExample4SequenceDiagram.png b/assignments/src/src/TcpExamples/TcpExample4SequenceDiagram.png
new file mode 100644
index 0000000000000000000000000000000000000000..3eb3a8e753d2e7aea1baf4a1366b06397446f829
Binary files /dev/null and b/assignments/src/src/TcpExamples/TcpExample4SequenceDiagram.png differ
diff --git a/assignments/src/src/TcpExamples/TcpExample4SequenceDiagram.vsdx b/assignments/src/src/TcpExamples/TcpExample4SequenceDiagram.vsdx
new file mode 100644
index 0000000000000000000000000000000000000000..0248702b8eb0d8819b9bc052a73aac1abfdbdda7
Binary files /dev/null and b/assignments/src/src/TcpExamples/TcpExample4SequenceDiagram.vsdx differ
diff --git a/assignments/src/src/TcpExamples/TcpExample4SequenceSketch.png b/assignments/src/src/TcpExamples/TcpExample4SequenceSketch.png
new file mode 100644
index 0000000000000000000000000000000000000000..e34c8bcadd16bf3a9fd372580b93b33dafc995dd
Binary files /dev/null and b/assignments/src/src/TcpExamples/TcpExample4SequenceSketch.png differ
diff --git a/assignments/src/src/TcpExamples/TcpExample4TerminalLog.txt b/assignments/src/src/TcpExamples/TcpExample4TerminalLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..62945afa1c89dca8c65efab4cf390c6bd520bf7b
--- /dev/null
+++ b/assignments/src/src/TcpExamples/TcpExample4TerminalLog.txt
@@ -0,0 +1,69 @@
+Invocation instructions:
+1. run/debug TcpExample4ThreadTcpExample4DispatchServerServer.java
+2. don't run TcpExample4HandlerThread (since it is automatically launched as needed)
+3. run/debug TcpExample4Client.java
+
+Two program response logs, server and client:
+
+===================================================
+===================================================
+run:
+ant -f C:\\x-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=TcpExamples/TcpExample4DispatchServer.java -Drun.class=TcpExamples.TcpExample4DispatchServer run-single
+
+run-single:
+TcpExamples.TcpExample4DispatchServer ready to accept socket connections...
+=============================================================
+TcpExamples.TcpExample4DispatchServer.handlerThread invocation for connection #1...
+TcpExamples.TcpExample4DispatchServer.handlerThread is launched, awaiting another connection...
+TcpExamples.TcpExample4HandlerThread starting to handle a thread...
+TcpExamples.TcpExample4HandlerThread pausing for TIMEOUT=2000ms to emulate computation and avoid server-side overload
+TcpExamples.TcpExample4HandlerThread finished handling a thread, now exit.
+=============================================================
+TcpExamples.TcpExample4DispatchServer.handlerThread invocation for connection #2...
+TcpExamples.TcpExample4DispatchServer.handlerThread is launched, awaiting another connection...
+TcpExamples.TcpExample4HandlerThread starting to handle a thread...
+TcpExamples.TcpExample4HandlerThread pausing for TIMEOUT=2000ms to emulate computation and avoid server-side overload
+TcpExamples.TcpExample4HandlerThread finished handling a thread, now exit.
+=============================================================
+TcpExamples.TcpExample4DispatchServer.handlerThread invocation for connection #3...
+TcpExamples.TcpExample4DispatchServer.handlerThread is launched, awaiting another connection...
+TcpExamples.TcpExample4HandlerThread starting to handle a thread...
+TcpExamples.TcpExample4HandlerThread pausing for TIMEOUT=2000ms to emulate computation and avoid server-side overload
+TcpExamples.TcpExample4HandlerThread finished handling a thread, now exit.
+=============================================================
+TcpExamples.TcpExample4DispatchServer.handlerThread invocation for connection #4...
+TcpExamples.TcpExample4DispatchServer.handlerThread is launched, awaiting another connection...
+TcpExamples.TcpExample4HandlerThread starting to handle a thread...
+TcpExamples.TcpExample4HandlerThread pausing for TIMEOUT=2000ms to emulate computation and avoid server-side overload
+TcpExamples.TcpExample4HandlerThread finished handling a thread, now exit.
+BUILD STOPPED (total time: 25 seconds)
+
+===================================================
+===================================================
+run:
+ant -f C:\\x-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=TcpExamples/TcpExample4Client.java -Drun.class=TcpExamples.TcpExample4Client run-single
+
+run:
+TcpExamples.TcpExample4Client start, loop 4 times
+==================================================
+TcpExamples.TcpExample4Client creating socket #1...
+TcpExamples.TcpExample4Client: message received from server='This message was written by the server TcpExamples.TcpExample4HandlerThread'
+TcpExamples.TcpExample4Client: time msec required for read=2024
+==================================================
+TcpExamples.TcpExample4Client creating socket #2...
+TcpExamples.TcpExample4Client: message received from server='This message was written by the server TcpExamples.TcpExample4HandlerThread'
+TcpExamples.TcpExample4Client: time msec required for read=2008
+==================================================
+TcpExamples.TcpExample4Client creating socket #3...
+TcpExamples.TcpExample4Client: message received from server='This message was written by the server TcpExamples.TcpExample4HandlerThread'
+TcpExamples.TcpExample4Client: time msec required for read=2007
+==================================================
+TcpExamples.TcpExample4Client creating socket #4...
+TcpExamples.TcpExample4Client: message received from server='This message was written by the server TcpExamples.TcpExample4HandlerThread'
+TcpExamples.TcpExample4Client: time msec required for read=2011
+==================================================
+TcpExamples.TcpExample4Client complete
+BUILD SUCCESSFUL (total time: 8 seconds)
+
+===================================================
+===================================================
\ No newline at end of file
diff --git a/assignments/src/src/TcpExamples/package-info.java b/assignments/src/src/TcpExamples/package-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..84c534757e0c48c8321bf36bd2d769dac7a141ab
--- /dev/null
+++ b/assignments/src/src/TcpExamples/package-info.java
@@ -0,0 +1,10 @@
+/**
+ * TCP Unicast Examples supporting the NPS MOVES MV3500 Networked Graphics course.
+ * 
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/examples" target="blank">NetworkedGraphicsMV3500 examples</a>
+ * @see java.lang.Package
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="blank">StackOverflow: how-do-i-document-packages-in-java</a>
+ */
+
+package TcpExamples;
diff --git a/assignments/src/src/UdpExamples/MulticastUdpReceiver.java b/assignments/src/src/UdpExamples/MulticastUdpReceiver.java
new file mode 100644
index 0000000000000000000000000000000000000000..e7d5220158b9ae03570998d5729f7ecaa6853348
--- /dev/null
+++ b/assignments/src/src/UdpExamples/MulticastUdpReceiver.java
@@ -0,0 +1,123 @@
+package UdpExamples;
+
+import edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface;
+import java.io.*;
+import java.net.*;
+import java.nio.ByteBuffer;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Looks a lot like UdpReceiver. Start this before launching MulticastSender.
+ *
+ * @author mcgredo
+ * @author brutzman@nps.edu
+ */
+public class MulticastUdpReceiver
+{
+    /** Default constructor */
+    public MulticastUdpReceiver()
+    {
+        // default constructor
+    }
+    // reserved range for all IPv4 multicast: 224.0.0.0 through 239.255.255.255
+    // https://en.wikipedia.org/wiki/Multicast_address
+    // https://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml
+    private static final String MULTICAST_ADDRESS = "239.1.2.15";
+    private static final int     DESTINATION_PORT = 1718;
+
+    /**
+     * Time to live: how many router-decrement levels can be crossed
+     */
+    private static final int TTL = 10;
+
+    private static final boolean INFINITE_READ_LOOP = true;
+    private static NetworkInterface ni;
+
+    /**
+     * Program invocation, execution starts here
+     * @param args command-line arguments
+     */
+    public static void main(String[] args)
+    {
+        MulticastSocket multicastSocket = null;
+        InetSocketAddress group = null;
+        ByteBuffer buffer = ByteBuffer.allocate(1500);
+        DatagramPacket packet = new DatagramPacket(buffer.array(), buffer.capacity());
+        
+        try {
+            System.out.println("UdpExamples.MulticastUdpReceiver started...");
+
+            // This is a java/IPv6 problem. You should also add it to the
+            // arguments used to start the app, eg -Djava.net.preferIPv4Stack=true
+            // set in the "run" section of preferences. Also, typically
+            // netbeans must be restarted after these settings.
+            // https://stackoverflow.com/questions/18747134/getting-cant-assign-requested-address-java-net-socketexception-using-ehcache
+            System.setProperty("java.net.preferIPv4Stack", "true");
+
+            multicastSocket = new MulticastSocket(DESTINATION_PORT);
+            multicastSocket.setTimeToLive(TTL);
+            InetAddress multicastAddress = InetAddress.getByName(MULTICAST_ADDRESS);
+            
+            group = new InetSocketAddress(multicastAddress, DESTINATION_PORT);
+            
+            // Join group useful on receiving side
+            multicastSocket.joinGroup(group, ni = DisThreadedNetworkInterface.findIpv4Interface());
+            // You can join multiple groups here
+            
+            System.out.println("Multicast address/port: " + multicastAddress.getHostAddress() + "/" + DESTINATION_PORT);
+            System.out.println("Multicast packets received log:");
+
+            int index, count = 0; // initialize
+            float firstFloat, secondFloat;
+            StringBuilder firstCharacters = new StringBuilder();
+            char nextChar;
+
+            while (true) { // true is always true, so this is an infinite loop that continues until interrupted
+                multicastSocket.receive(packet);
+                count++;
+
+                nextChar = ' ';
+                while (nextChar != ';') // read and build string until terminator ; found
+                {
+                    nextChar = buffer.getChar();
+                    firstCharacters.append(nextChar);
+                }
+                if (firstCharacters.toString().contains(MulticastUdpSender.QUIT_SENTINEL)) {
+                    System.out.println("Received sentinel \"" + MulticastUdpSender.QUIT_SENTINEL + "\"");
+                    if (!INFINITE_READ_LOOP) {
+                        break; // exit out of reading loop
+                    }
+                }
+                index = buffer.getInt();
+                firstFloat = buffer.getFloat();
+                secondFloat = buffer.getFloat();
+                buffer.clear();
+
+                if (count < 10) {
+                    System.out.print(" "); // prettier output formatting
+                }
+                System.out.print(count + ". \"" + firstCharacters + "\" "); // wrap string in quote marks
+                System.out.println("index=" + index + ", firstFloat=" + firstFloat + " secondFloat=" + secondFloat);
+
+                System.out.println("MulticastReceiver loop complete.");
+                firstCharacters.setLength(0);
+            }
+        } catch (IOException e) {
+            System.err.println("Problem with MulticastReceiver, see exception trace:");
+            System.err.println(e);
+        } finally // clean up after exit condition
+        {
+            if (multicastSocket != null && !multicastSocket.isClosed()) {
+                try {
+                    multicastSocket.leaveGroup(group, ni);
+                } catch (IOException ex) {
+                    Logger.getLogger(MulticastUdpReceiver.class.getName()).log(Level.SEVERE, null, ex);
+                }
+                multicastSocket.close();
+            }
+            // socket/database/completion cleanup code can go here, if needed.
+            System.out.println("MulticastReceiver finally block, complete.");
+        }
+    }
+}
diff --git a/assignments/src/src/UdpExamples/MulticastUdpSender.java b/assignments/src/src/UdpExamples/MulticastUdpSender.java
new file mode 100644
index 0000000000000000000000000000000000000000..68788b7f83da4a6edbf7c8d358669ebd7de0963f
--- /dev/null
+++ b/assignments/src/src/UdpExamples/MulticastUdpSender.java
@@ -0,0 +1,134 @@
+package UdpExamples;
+
+import edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface;
+import java.io.*;
+import java.net.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Looks a lot like UdpSender.  Start this after launching MulticastReceiver.
+ * 
+ * Privacy note: this sender advertises your user name as part of the multicast packet message
+ * 
+ * @author mcgredo
+ * @author brutzman@nps.edu
+ */
+public class MulticastUdpSender
+{
+    /** Default constructor */
+    public MulticastUdpSender()
+    {
+        // default constructor
+    }
+    // reserved range for all IPv4 multicast: 224.0.0.0 through 239.255.255.255
+    // https://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml
+
+    /** Default multicast group address for send and receive connections.
+     * @see <a href="https://en.wikipedia.org/wiki/Multicast_address" target="_blank">https://en.wikipedia.org/wiki/Multicast_address</a> */
+    public static final String MULTICAST_ADDRESS = "239.1.2.15"; // within reserved multicast address range
+    /** Default socket port used, matches Wireshark DIS capture default
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)" target="_blank">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+    public static final int     DESTINATION_PORT = 1718;
+    
+    /** Time to live: how many router-decrement levels can be crossed */
+    public static final int TTL = 10;
+	
+    /** How many packets to send prior to termination */
+    public static final int LOOPSIZE = 20; // or maybe 20000
+    
+    /** Receiving this message causes termination
+     * @see <a href="https://en.wikipedia.org/wiki/Sentinel_value" target="_blank">https://en.wikipedia.org/wiki/Sentinel_value</a> */
+    public static final String QUIT_SENTINEL = "QUIT QUIT QUIT!";
+    private static NetworkInterface ni;
+    
+    /**
+     * Program invocation, execution starts here
+     * @param args command-line arguments
+     * @throws java.io.IOException execution error
+     */
+    @SuppressWarnings("SleepWhileInLoop")
+    public static void main(String[] args) throws IOException 
+    {
+        MulticastSocket multicastSocket = null;
+        InetSocketAddress group = null;
+        
+        // Put together a message with binary content. "ByteArrayOutputStream"
+        // is a java.io utility that lets us put together an array of binary
+        // data, which we put into the UDP packet.
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        DataOutputStream       dos = new DataOutputStream(baos);
+        
+        try
+        {
+            System.out.println("UdpExamples.MulticastUdpSender started...");
+            // This is a java/IPv6 problem. You should also add it to the
+            // arguments used to start the app, eg -Djava.net.preferIPv4Stack=true
+            // set in the "run" section of preferences. Also, typically
+            // netbeans must be restarted after these settings.
+            // https://stackoverflow.com/questions/18747134/getting-cant-assign-requested-address-java-net-socketexception-using-ehcache
+            System.setProperty("java.net.preferIPv4Stack", "true");
+            
+            // multicast group we are sending to--not a single host
+            multicastSocket = new MulticastSocket(/*DESTINATION_PORT*/);
+            multicastSocket.setTimeToLive(TTL); // time to live reduces scope of transmission
+            InetAddress multicastAddress = InetAddress.getByName(MULTICAST_ADDRESS);
+            System.out.println("Multicast address/port: " + multicastAddress.getHostAddress() + "/" + DESTINATION_PORT);
+            
+            group = new InetSocketAddress(multicastAddress, DESTINATION_PORT);
+            // Join group useful on receiving side
+            multicastSocket.joinGroup(group, ni = DisThreadedNetworkInterface.findIpv4Interface());
+            // You can join multiple groups here
+            
+            byte[] buffer = baos.toByteArray();
+            DatagramPacket packet = new DatagramPacket(buffer, buffer.length, group/*, DESTINATION_PORT*/);
+            
+            for (int index = 0; index < LOOPSIZE; index++)
+            {
+                // Put together an updated packet to send
+                if (index < LOOPSIZE - 1)
+                {
+                    // Put together an updated packet to send
+                    dos.writeChars("From " + System.getProperty("user.name") + ": ");
+                    dos.writeChars("MulticastSender packet " + Integer.toString(index) + ";"); // string chars for readability
+                    dos.writeInt  (index); // arbitrary data, needs Java or byte-alignment to read
+                    dos.writeFloat(17.0f); // arbitrary data, needs Java or byte-alignment to read
+                    dos.writeFloat(23.0f); // arbitrary data, needs Java or byte-alignment to read
+                }
+                else dos.writeChars(QUIT_SENTINEL + ";"); // note string must include ; semicolon as termination sentinel
+                
+                buffer = baos.toByteArray();
+                packet.setData(buffer);
+                multicastSocket.send(packet);
+                System.out.println("Sent multicast packet " + (index + 1) + " of " + LOOPSIZE);
+                baos.reset();
+
+                // How fast does this go? Does UDP try to slow it down, or does
+                // this cause network problems? (hint: yes for an unlimited send
+                // rate, unlike TCP). How do you know on the receiving side
+                // that you haven't received a duplicate UDP packet, out of
+                // order packet, or dropped packet?  Necessary considerations.
+                Thread.sleep(1000); // Send 100, one per second
+            }
+            System.out.println("MulticastSender complete.");
+        }
+        catch(IOException | InterruptedException e)
+        {
+            System.err.println("Problem with MulticastSender, see exception trace:");
+            System.err.println(e);
+        } finally {
+            
+            if (multicastSocket != null && !multicastSocket.isClosed()) {
+                try {
+                    multicastSocket.leaveGroup(group, ni);
+                } catch (IOException ex) {
+                    Logger.getLogger(MulticastUdpSender.class.getName()).log(Level.SEVERE, null, ex);
+                }
+                multicastSocket.close();
+            }
+            
+            dos.close();
+        }
+    }
+    
+}
diff --git a/assignments/src/src/UdpExamples/MulticastUdpSenderWireshark.png b/assignments/src/src/UdpExamples/MulticastUdpSenderWireshark.png
new file mode 100644
index 0000000000000000000000000000000000000000..554252e59b9815a5e8704ee219a71b6d7cf39e3b
Binary files /dev/null and b/assignments/src/src/UdpExamples/MulticastUdpSenderWireshark.png differ
diff --git a/assignments/src/src/UdpExamples/MulticastUdpTerminalLog.txt b/assignments/src/src/UdpExamples/MulticastUdpTerminalLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..812f534444435079cdb571599980a61693ef0d72
--- /dev/null
+++ b/assignments/src/src/UdpExamples/MulticastUdpTerminalLog.txt
@@ -0,0 +1,82 @@
+Invocation instructions:
+1. run/debug MulticastReceiver.java
+2. run/debug MulticastSender.java
+
+Program responses follow for sender and receiver:
+
+===================================================
+UdpMulticastExamples.MulticastUdpSender started...
+Multicast address/port: 239.1.2.15/1718
+[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface]  Using network interface Intel(R) Centrino(R) Ultimate-N 6300 AGN
+Sent multicast packet 1 of 20
+Sent multicast packet 2 of 20
+Sent multicast packet 3 of 20
+Sent multicast packet 4 of 20
+Sent multicast packet 5 of 20
+Sent multicast packet 6 of 20
+Sent multicast packet 7 of 20
+Sent multicast packet 8 of 20
+Sent multicast packet 9 of 20
+Sent multicast packet 10 of 20
+Sent multicast packet 11 of 20
+Sent multicast packet 12 of 20
+Sent multicast packet 13 of 20
+Sent multicast packet 14 of 20
+Sent multicast packet 15 of 20
+Sent multicast packet 16 of 20
+Sent multicast packet 17 of 20
+Sent multicast packet 18 of 20
+Sent multicast packet 19 of 20
+Sent multicast packet 20 of 20
+MulticastSender complete.
+BUILD SUCCESSFUL (total time: 22 seconds)
+
+===================================================
+run:
+UdpMulticastExamples.MulticastUdpReceiver started...
+[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface]  Using network interface Intel(R) Centrino(R) Ultimate-N 6300 AGN
+Multicast address/port: 239.1.2.15/1718
+Multicast packets received log:
+ 1. "From don: MulticastSender packet 0;" index=0, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+ 2. "From don: MulticastSender packet 1;" index=1, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+ 3. "From don: MulticastSender packet 2;" index=2, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+ 4. "From don: MulticastSender packet 3;" index=3, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+ 5. "From don: MulticastSender packet 4;" index=4, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+ 6. "From don: MulticastSender packet 5;" index=5, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+ 7. "From don: MulticastSender packet 6;" index=6, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+ 8. "From don: MulticastSender packet 7;" index=7, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+ 9. "From don: MulticastSender packet 8;" index=8, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+10. "From don: MulticastSender packet 9;" index=9, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+11. "From don: MulticastSender packet 10;" index=10, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+12. "From don: MulticastSender packet 11;" index=11, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+13. "From don: MulticastSender packet 12;" index=12, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+14. "From don: MulticastSender packet 13;" index=13, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+15. "From don: MulticastSender packet 14;" index=14, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+16. "From don: MulticastSender packet 15;" index=15, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+17. "From don: MulticastSender packet 16;" index=16, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+18. "From don: MulticastSender packet 17;" index=17, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+19. "From don: MulticastSender packet 18;" index=18, firstFloat=17.0 secondFloat=23.0
+MulticastReceiver loop complete.
+Received sentinel "QUIT QUIT QUIT!"
+20. "QUIT QUIT QUIT!;" index=6357107, firstFloat=1.0653034E-38 secondFloat=9.275539E-39
+MulticastReceiver loop complete.
+
+===================================================
diff --git a/assignments/src/src/UdpExamples/README.md b/assignments/src/src/UdpExamples/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..1a22a7925642d72e706f18bdcb96f66e80a49098
--- /dev/null
+++ b/assignments/src/src/UdpExamples/README.md
@@ -0,0 +1,9 @@
+## UDP Examples Source Code
+
+Programs in this directory show how to create User Datagram Protocol (UDP) sockets
+
+<!-- View this page at https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/UdpExamples/README.md -->
+
+|  Unicast UDP Sender packets in Wireshark     | Multicast UDP Sender packets inWireshark  |
+|----------------------------------------------|:------------------------------------------|
+|  ![Unicast UDP Sender Wireshark](UnicastUdpSenderWireshark.png "Unicast UDP Sender Wireshark") |![Multicast UDP Sender Wireshark](MulticastUdpSenderWireshark.png "Multicast UDP Sender Wireshark") |
diff --git a/assignments/src/src/UdpExamples/UnicastUdpReceiver.java b/assignments/src/src/UdpExamples/UnicastUdpReceiver.java
new file mode 100644
index 0000000000000000000000000000000000000000..7bc05fb2b31412a200efdedf9aaacbad60771465
--- /dev/null
+++ b/assignments/src/src/UdpExamples/UnicastUdpReceiver.java
@@ -0,0 +1,109 @@
+package UdpExamples;
+
+import java.io.*;
+import java.net.*;
+
+/**
+ * An example of receiving UDP packets. Since very often both the
+ * sender and receiver are on the same host we use different ports
+ * for each. This prevents collision complaints from the localhost.
+ * 
+ * Start this before launching UdpSender.
+ *
+ * @see <a href="https://docs.oracle.com/javase/tutorial/networking/datagrams/index.html" target="_blank">https://docs.oracle.com/javase/tutorial/networking/datagrams/index.html</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html" target="_blank">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
+ * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol" target="_blank">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
+ * @author mcgredo
+ * @author brutzman@nps.edu
+ */
+public class UnicastUdpReceiver
+{
+    /** Default constructor */
+    public UnicastUdpReceiver()
+    {
+        // default constructor
+    }
+//  public static final int        SENDING_PORT = 1414;        // port used by UdpSender, unneeded here
+    /** socket value of shared interest */
+    public static final int      UDP_PORT = 1415;        // sharable
+    /** socket value of shared interest */
+    public static final String DESTINATION_HOST = "localhost";
+
+    /**
+     * Program invocation, execution starts here
+     * @param args command-line arguments
+     */
+    public static void main(String[] args)
+    {
+        DatagramSocket udpSocket = null;
+        
+        try
+        {
+            System.out.println(UnicastUdpReceiver.class.getName() + " started...");
+            
+            // Create a UDP socket
+            udpSocket = new DatagramSocket(UDP_PORT);
+            udpSocket.setReceiveBufferSize(1500); // how many bytes are in buffer?  MTU=1500 is good
+            udpSocket.setBroadcast(false);        // we're just receiving here
+//            udpSocket.setReuseAddress(true);
+            
+            byte[] byteArray = new byte[1500];
+            DatagramPacket receivePacket = new DatagramPacket(byteArray, byteArray.length);
+            
+            ByteArrayInputStream bais = new ByteArrayInputStream(byteArray);
+            DataInputStream dis = new DataInputStream(bais);
+            
+            boolean       isEvenParity;
+            int           packetCount = 0;
+            int           firstInt;   
+            float         secondFloat;
+            String        thirdString;
+            String        padding;
+            
+            // You need a new receiving packet to read from every packet received
+            while (true)
+            {
+                packetCount++; // good practice to increment counter at start of loop, when possible
+                udpSocket.receive(receivePacket); // blocks until packet is received
+                
+                if (packetCount == 1)
+                {                
+                    if  (udpSocket.getInetAddress() == null)
+                         System.out.println("UdpReceiver address/port: UDP socket address null (loopback)" + "/" + UDP_PORT);
+                    else System.out.println("UdpReceiver address/port: " + udpSocket.getInetAddress().getHostAddress() + "/" + UDP_PORT);
+                }
+
+                // values of interest follow. order and types of what was sent must match what you are reading!
+                firstInt     = dis.readInt();     // packetID
+                secondFloat  = dis.readFloat();
+                thirdString  = dis.readUTF();     // string value with guaranteed encoding, matches UTF-8 is 8 bit
+                isEvenParity = dis.readBoolean(); // ok, we've gotten everything we're looking for.  
+                
+                dis.reset(); // now clear the input stream after reading, in preparation for next loop
+                
+                if  (isEvenParity) 
+                     padding = " ";
+                else padding = "";
+                
+                System.out.println("[" + UnicastUdpReceiver.class.getName() + "]" + 
+                                                    " port="   + UDP_PORT +
+                                                " packetID="   + firstInt +            // have output message use same name as sender
+                                     ", second float value="   + secondFloat  + 
+                                     ", third String value=\"" + thirdString  + "\"" + // note that /" is literal quote character
+                                    " isPacketIdEvenParity="   + isEvenParity + ","  + padding +
+                                     " packet counter="        + packetCount);
+            }
+        }
+        catch(IOException e)
+        {
+            System.err.println("Problem with UdpReceiver, see exception trace:");
+            System.err.println(e);
+        } 
+        finally // clean up prior to exit, don't want to leave behind zombie socket
+        {
+            if (udpSocket != null)
+                udpSocket.close();
+            System.out.println(UnicastUdpReceiver.class.getName() + " complete."); // all done
+        }
+    }
+}
diff --git a/assignments/src/src/UdpExamples/UnicastUdpSender.java b/assignments/src/src/UdpExamples/UnicastUdpSender.java
new file mode 100644
index 0000000000000000000000000000000000000000..e7d4daf32708dfa6815fae497003410e3bb1a468
--- /dev/null
+++ b/assignments/src/src/UdpExamples/UnicastUdpSender.java
@@ -0,0 +1,137 @@
+package UdpExamples;
+
+import java.io.*;
+import java.net.*;
+
+/**
+ * An example of sending UDP packets. The sending and receiving programs
+ * use different UDP ports; there can be problems getting this to work
+ * if both the sending and receiving sockets try to use the same port
+ * on the same host.
+ * 
+ * Start this before launching UdpReceiver.
+ * 
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html" target="_blank">https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html</a>
+ * @see <a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol" target="_blank">https://en.wikipedia.org/wiki/User_Datagram_Protocol</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html" target="_blank">System properties</a>
+ * @author mcgredo
+ * @author brutzman@nps.edu
+ */
+public class UnicastUdpSender 
+{
+    /** Default constructor */
+    public UnicastUdpSender()
+    {
+        // default constructor
+    }
+    private static final String            MY_NAME = System.getProperty("user.name"); // guru incantation   8)
+//  public  static final int          SENDING_PORT = 1414; // not needed, can let system choose an open local port
+    /** socket value of shared interest */
+    public  static final int              UDP_PORT = UnicastUdpReceiver.UDP_PORT; // 1415; ensure consistent
+    private static final int TOTAL_PACKETS_TO_SEND = 100;
+    
+    /** socket value of shared interest */
+    public static  final String   DESTINATION_HOST = "localhost"; 
+    // here is what we need for lab comms
+//  public static final String   DESTINATION_HOST = "10.1.105.16"; // localhost 127.0.0.1 or argon 10.1.105.1 or 10.1.105.1 or whatever
+    
+    /**
+     * Program invocation, execution starts here
+     * @param args command-line arguments
+     */
+    @SuppressWarnings("SleepWhileInLoop")
+    public static void main(String[] args)
+    {
+        DatagramSocket udpSocket = null;
+        DataOutputStream  dos = null;
+        int   packetID = 0;     // counter variable to send in packet
+        float    countdown = -1.0f; // unreachable value is good sentinel to ensure expected changes occur
+        String message = MY_NAME + " says Hello MV3500"; // no really
+        String padding = new String();
+        
+        try
+        {
+            System.out.println(UnicastUdpSender.class.getName() + " shows how to send simple-type values via DataOutputStream");
+            System.out.println(UnicastUdpSender.class.getName() + " started...");
+            
+            // Create a UDP socket
+            udpSocket = new DatagramSocket(); // let system assign output port, then SENDING_PORT not needed
+            
+            // Put together a message with binary content. "ByteArrayOutputStream"
+            // is a java.io utility that lets us put together an array of binary
+            // data, which we put into the UDP packet.
+            
+            ByteArrayOutputStream baos = new ByteArrayOutputStream(1500); // how many bytes are in buffer?  MTU=1500 is good
+            dos = new DataOutputStream(baos); // wrapper for writing values, connects both streams
+			
+            // Put together a packet to send
+            // these types and order of variables must match on sender and receiver
+            byte[] byteArray = baos.toByteArray();
+            
+            // ID of the host we are sending to
+            InetAddress destinationAddress = InetAddress.getByName(DESTINATION_HOST);
+            // ID of the host we are sending from
+            InetAddress      sourceAddress = InetAddress.getByName("localhost"); // possibly identical if source not modified
+            
+            DatagramPacket datagramPacket = new DatagramPacket(byteArray, byteArray.length, destinationAddress, UDP_PORT);
+            
+            System.out.println("UdpSender address/port: " + destinationAddress.getHostAddress() + "/" + UDP_PORT);
+       
+            // Hmmm, how fast does UDP stream go? Does UDP effectively slow packets down, or does
+            // this cause network problems? (hint: yes for an unlimited send rate, unlike TCP).
+            // How do you know on the receiving side that you haven't received a
+            // duplicate UDP packet, out-of-order packet, or dropped packet? your responsibility.
+            
+            for (int index = 1; index <= TOTAL_PACKETS_TO_SEND; index++) // avoid infinite send loops in code, they can be hard to kill!
+            {
+                packetID++;                               // increment counter, prefer using explicit value to index
+                countdown = TOTAL_PACKETS_TO_SEND - packetID; // countdown from goal total
+                boolean isPacketIdEvenParity = ((packetID % 2) == 0); // % is modulo operator; result 0 is even parity, 1 is odd parity
+                
+                // values of interest follow. order and types of what was sent must match what you are reading!
+                dos.writeInt    (packetID);
+                dos.writeFloat  (countdown);
+                dos.writeUTF    (message); // string value with guaranteed encoding, matches UTF-8 is 8 bit
+                dos.writeBoolean(isPacketIdEvenParity);
+                
+                dos.flush(); // sends DataOutputStream to ByteArrayOutputStream, clearing the buffer
+                byteArray = baos.toByteArray();    // OK so go get the flushed result...
+                datagramPacket.setData(byteArray); // and put it in the packet...
+                udpSocket.send(datagramPacket);    // and send it away. boom gone, nonblocking.
+//              System.out.println("udpSocket output port=" + udpSocket.getLocalPort()); // diagnostic tells what port was chosen by system
+                
+                if  (isPacketIdEvenParity)
+                     padding = " "; // single blank character as a string of length 1
+                else padding = "";  // empty string
+            
+                Thread.sleep(100); // Send packets at rate of one per second
+                System.out.println("[" + UnicastUdpSender.class.getName() + "] " + MY_NAME + " " + sourceAddress +
+                                   " port=" + UDP_PORT +
+                                   " has sent values (" + packetID + "," + countdown + ",\"" + message + "\"," + isPacketIdEvenParity +
+                                   ")" + padding + " as packet #" + index + " of " + TOTAL_PACKETS_TO_SEND);
+                baos.reset(); // clear the output stream after sending
+            }   // end for loop
+        }
+        catch (IOException | InterruptedException e)
+        {
+            System.err.println("Problem with UdpSender, see exception trace:");
+            System.err.println(e);
+        } 
+        finally // clean up prior to exit, don't want to leave behind zombies
+        {
+            if (udpSocket != null)
+                udpSocket.close();
+            try
+            {
+                if (dos != null)
+                    dos.close();
+            }
+            catch (IOException e)
+            {
+                System.err.println("Problem with UdpSender, see exception trace:");
+                System.err.println(e);
+            } 
+            System.out.println(UnicastUdpSender.class.getName() + " complete."); // all done
+        }
+    }
+}
diff --git a/assignments/src/src/UdpExamples/UnicastUdpSenderWireshark.png b/assignments/src/src/UdpExamples/UnicastUdpSenderWireshark.png
new file mode 100644
index 0000000000000000000000000000000000000000..1f942e7bb96079af5b73e17424c727700e8b6d92
Binary files /dev/null and b/assignments/src/src/UdpExamples/UnicastUdpSenderWireshark.png differ
diff --git a/assignments/src/src/UdpExamples/UnicastUdpSenderWiresharkCapture.pcapng b/assignments/src/src/UdpExamples/UnicastUdpSenderWiresharkCapture.pcapng
new file mode 100644
index 0000000000000000000000000000000000000000..19954b32a75dc72d76cf4a4f2962870914b89dc5
Binary files /dev/null and b/assignments/src/src/UdpExamples/UnicastUdpSenderWiresharkCapture.pcapng differ
diff --git a/assignments/src/src/UdpExamples/UnicastUdpTerminalLog.txt b/assignments/src/src/UdpExamples/UnicastUdpTerminalLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4299dbbd2e5c33f5714efa39c7f66ee421c0b9e6
--- /dev/null
+++ b/assignments/src/src/UdpExamples/UnicastUdpTerminalLog.txt
@@ -0,0 +1,336 @@
+These Java program examples read/write strictly typed values (integer, float, string, boolean).
+
+Invocation instructions:
+1. first run/debug UdpReceiver.java so it is listening.
+2.  then run/debug UdpSender.java
+
+Program responses follow for sender and receiver:
+
+===================================================
+ant -f C:\\x-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=UdpMulticastExamples/UdpSender.java -Drun.class=UdpMulticastExamples.UdpSender run-single
+init:
+Deleting: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+compile-single:
+run-single:
+UdpMulticastExamples.UdpSender shows how to send simple-type values via DataOutputStream
+UdpMulticastExamples.UdpSender started...
+UdpSender address/port: 127.0.0.1/1415
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (1,99.0,"don says Hello MV3500",false) as packet #1 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (2,98.0,"don says Hello MV3500",true)  as packet #2 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (3,97.0,"don says Hello MV3500",false) as packet #3 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (4,96.0,"don says Hello MV3500",true)  as packet #4 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (5,95.0,"don says Hello MV3500",false) as packet #5 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (6,94.0,"don says Hello MV3500",true)  as packet #6 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (7,93.0,"don says Hello MV3500",false) as packet #7 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (8,92.0,"don says Hello MV3500",true)  as packet #8 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (9,91.0,"don says Hello MV3500",false) as packet #9 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (10,90.0,"don says Hello MV3500",true)  as packet #10 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (11,89.0,"don says Hello MV3500",false) as packet #11 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (12,88.0,"don says Hello MV3500",true)  as packet #12 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (13,87.0,"don says Hello MV3500",false) as packet #13 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (14,86.0,"don says Hello MV3500",true)  as packet #14 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (15,85.0,"don says Hello MV3500",false) as packet #15 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (16,84.0,"don says Hello MV3500",true)  as packet #16 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (17,83.0,"don says Hello MV3500",false) as packet #17 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (18,82.0,"don says Hello MV3500",true)  as packet #18 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (19,81.0,"don says Hello MV3500",false) as packet #19 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (20,80.0,"don says Hello MV3500",true)  as packet #20 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (21,79.0,"don says Hello MV3500",false) as packet #21 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (22,78.0,"don says Hello MV3500",true)  as packet #22 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (23,77.0,"don says Hello MV3500",false) as packet #23 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (24,76.0,"don says Hello MV3500",true)  as packet #24 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (25,75.0,"don says Hello MV3500",false) as packet #25 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (26,74.0,"don says Hello MV3500",true)  as packet #26 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (27,73.0,"don says Hello MV3500",false) as packet #27 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (28,72.0,"don says Hello MV3500",true)  as packet #28 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (29,71.0,"don says Hello MV3500",false) as packet #29 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (30,70.0,"don says Hello MV3500",true)  as packet #30 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (31,69.0,"don says Hello MV3500",false) as packet #31 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (32,68.0,"don says Hello MV3500",true)  as packet #32 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (33,67.0,"don says Hello MV3500",false) as packet #33 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (34,66.0,"don says Hello MV3500",true)  as packet #34 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (35,65.0,"don says Hello MV3500",false) as packet #35 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (36,64.0,"don says Hello MV3500",true)  as packet #36 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (37,63.0,"don says Hello MV3500",false) as packet #37 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (38,62.0,"don says Hello MV3500",true)  as packet #38 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (39,61.0,"don says Hello MV3500",false) as packet #39 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (40,60.0,"don says Hello MV3500",true)  as packet #40 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (41,59.0,"don says Hello MV3500",false) as packet #41 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (42,58.0,"don says Hello MV3500",true)  as packet #42 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (43,57.0,"don says Hello MV3500",false) as packet #43 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (44,56.0,"don says Hello MV3500",true)  as packet #44 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (45,55.0,"don says Hello MV3500",false) as packet #45 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (46,54.0,"don says Hello MV3500",true)  as packet #46 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (47,53.0,"don says Hello MV3500",false) as packet #47 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (48,52.0,"don says Hello MV3500",true)  as packet #48 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (49,51.0,"don says Hello MV3500",false) as packet #49 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (50,50.0,"don says Hello MV3500",true)  as packet #50 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (51,49.0,"don says Hello MV3500",false) as packet #51 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (52,48.0,"don says Hello MV3500",true)  as packet #52 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (53,47.0,"don says Hello MV3500",false) as packet #53 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (54,46.0,"don says Hello MV3500",true)  as packet #54 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (55,45.0,"don says Hello MV3500",false) as packet #55 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (56,44.0,"don says Hello MV3500",true)  as packet #56 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (57,43.0,"don says Hello MV3500",false) as packet #57 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (58,42.0,"don says Hello MV3500",true)  as packet #58 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (59,41.0,"don says Hello MV3500",false) as packet #59 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (60,40.0,"don says Hello MV3500",true)  as packet #60 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (61,39.0,"don says Hello MV3500",false) as packet #61 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (62,38.0,"don says Hello MV3500",true)  as packet #62 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (63,37.0,"don says Hello MV3500",false) as packet #63 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (64,36.0,"don says Hello MV3500",true)  as packet #64 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (65,35.0,"don says Hello MV3500",false) as packet #65 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (66,34.0,"don says Hello MV3500",true)  as packet #66 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (67,33.0,"don says Hello MV3500",false) as packet #67 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (68,32.0,"don says Hello MV3500",true)  as packet #68 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (69,31.0,"don says Hello MV3500",false) as packet #69 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (70,30.0,"don says Hello MV3500",true)  as packet #70 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (71,29.0,"don says Hello MV3500",false) as packet #71 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (72,28.0,"don says Hello MV3500",true)  as packet #72 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (73,27.0,"don says Hello MV3500",false) as packet #73 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (74,26.0,"don says Hello MV3500",true)  as packet #74 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (75,25.0,"don says Hello MV3500",false) as packet #75 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (76,24.0,"don says Hello MV3500",true)  as packet #76 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (77,23.0,"don says Hello MV3500",false) as packet #77 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (78,22.0,"don says Hello MV3500",true)  as packet #78 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (79,21.0,"don says Hello MV3500",false) as packet #79 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (80,20.0,"don says Hello MV3500",true)  as packet #80 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (81,19.0,"don says Hello MV3500",false) as packet #81 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (82,18.0,"don says Hello MV3500",true)  as packet #82 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (83,17.0,"don says Hello MV3500",false) as packet #83 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (84,16.0,"don says Hello MV3500",true)  as packet #84 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (85,15.0,"don says Hello MV3500",false) as packet #85 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (86,14.0,"don says Hello MV3500",true)  as packet #86 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (87,13.0,"don says Hello MV3500",false) as packet #87 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (88,12.0,"don says Hello MV3500",true)  as packet #88 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (89,11.0,"don says Hello MV3500",false) as packet #89 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (90,10.0,"don says Hello MV3500",true)  as packet #90 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (91,9.0,"don says Hello MV3500",false) as packet #91 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (92,8.0,"don says Hello MV3500",true)  as packet #92 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (93,7.0,"don says Hello MV3500",false) as packet #93 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (94,6.0,"don says Hello MV3500",true)  as packet #94 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (95,5.0,"don says Hello MV3500",false) as packet #95 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (96,4.0,"don says Hello MV3500",true)  as packet #96 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (97,3.0,"don says Hello MV3500",false) as packet #97 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (98,2.0,"don says Hello MV3500",true)  as packet #98 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (99,1.0,"don says Hello MV3500",false) as packet #99 of 100
+[UdpMulticastExamples.UdpSender] don localhost/127.0.0.1 port=1415 has sent values (100,0.0,"don says Hello MV3500",true)  as packet #100 of 100
+UdpMulticastExamples.UdpSender complete.
+BUILD SUCCESSFUL (total time: 13 seconds)
+
+===================================================
+ant -f C:\\x-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=UdpMulticastExamples/UdpReceiver.java -Drun.class=UdpMulticastExamples.UdpReceiver run-single
+init:
+Deleting: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+deps-jar:
+Updating property file: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
+Compiling 1 source file to C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
+compile-single:
+run-single:
+UdpMulticastExamples.UdpReceiver started...
+UdpReceiver address/port: UDP socket address null (loopback)/1415
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=1, second float value=99.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=1
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=2, second float value=98.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=2
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=3, second float value=97.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=3
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=4, second float value=96.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=4
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=5, second float value=95.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=5
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=6, second float value=94.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=6
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=7, second float value=93.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=7
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=8, second float value=92.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=8
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=9, second float value=91.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=9
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=10, second float value=90.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=10
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=11, second float value=89.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=11
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=12, second float value=88.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=12
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=13, second float value=87.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=13
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=14, second float value=86.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=14
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=15, second float value=85.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=15
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=16, second float value=84.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=16
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=17, second float value=83.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=17
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=18, second float value=82.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=18
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=19, second float value=81.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=19
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=20, second float value=80.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=20
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=21, second float value=79.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=21
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=22, second float value=78.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=22
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=23, second float value=77.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=23
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=24, second float value=76.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=24
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=25, second float value=75.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=25
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=26, second float value=74.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=26
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=27, second float value=73.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=27
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=28, second float value=72.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=28
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=29, second float value=71.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=29
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=30, second float value=70.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=30
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=31, second float value=69.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=31
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=32, second float value=68.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=32
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=33, second float value=67.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=33
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=34, second float value=66.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=34
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=35, second float value=65.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=35
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=36, second float value=64.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=36
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=37, second float value=63.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=37
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=38, second float value=62.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=38
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=39, second float value=61.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=39
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=40, second float value=60.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=40
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=41, second float value=59.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=41
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=42, second float value=58.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=42
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=43, second float value=57.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=43
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=44, second float value=56.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=44
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=45, second float value=55.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=45
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=46, second float value=54.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=46
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=47, second float value=53.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=47
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=48, second float value=52.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=48
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=49, second float value=51.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=49
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=50, second float value=50.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=50
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=51, second float value=49.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=51
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=52, second float value=48.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=52
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=53, second float value=47.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=53
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=54, second float value=46.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=54
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=55, second float value=45.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=55
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=56, second float value=44.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=56
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=57, second float value=43.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=57
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=58, second float value=42.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=58
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=59, second float value=41.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=59
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=60, second float value=40.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=60
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=61, second float value=39.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=61
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=62, second float value=38.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=62
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=63, second float value=37.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=63
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=64, second float value=36.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=64
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=65, second float value=35.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=65
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=66, second float value=34.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=66
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=67, second float value=33.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=67
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=68, second float value=32.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=68
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=69, second float value=31.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=69
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=70, second float value=30.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=70
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=71, second float value=29.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=71
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=72, second float value=28.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=72
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=73, second float value=27.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=73
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=74, second float value=26.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=74
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=75, second float value=25.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=75
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=76, second float value=24.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=76
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=77, second float value=23.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=77
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=78, second float value=22.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=78
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=79, second float value=21.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=79
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=80, second float value=20.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=80
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=81, second float value=19.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=81
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=82, second float value=18.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=82
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=83, second float value=17.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=83
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=84, second float value=16.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=84
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=85, second float value=15.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=85
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=86, second float value=14.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=86
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=87, second float value=13.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=87
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=88, second float value=12.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=88
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=89, second float value=11.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=89
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=90, second float value=10.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=90
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=91, second float value=9.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=91
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=92, second float value=8.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=92
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=93, second float value=7.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=93
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=94, second float value=6.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=94
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=95, second float value=5.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=95
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=96, second float value=4.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=96
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=97, second float value=3.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=97
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=98, second float value=2.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=98
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=99, second float value=1.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=99
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=100, second float value=0.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=100
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=1, second float value=99.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=101
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=2, second float value=98.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=102
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=3, second float value=97.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=103
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=4, second float value=96.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=104
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=5, second float value=95.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=105
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=6, second float value=94.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=106
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=7, second float value=93.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=107
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=8, second float value=92.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=108
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=9, second float value=91.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=109
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=10, second float value=90.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=110
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=11, second float value=89.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=111
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=12, second float value=88.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=112
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=13, second float value=87.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=113
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=14, second float value=86.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=114
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=15, second float value=85.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=115
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=16, second float value=84.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=116
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=17, second float value=83.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=117
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=18, second float value=82.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=118
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=19, second float value=81.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=119
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=20, second float value=80.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=120
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=21, second float value=79.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=121
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=22, second float value=78.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=122
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=23, second float value=77.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=123
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=24, second float value=76.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=124
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=25, second float value=75.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=125
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=26, second float value=74.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=126
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=27, second float value=73.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=127
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=28, second float value=72.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=128
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=29, second float value=71.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=129
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=30, second float value=70.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=130
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=31, second float value=69.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=131
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=32, second float value=68.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=132
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=33, second float value=67.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=133
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=34, second float value=66.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=134
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=35, second float value=65.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=135
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=36, second float value=64.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=136
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=37, second float value=63.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=137
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=38, second float value=62.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=138
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=39, second float value=61.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=139
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=40, second float value=60.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=140
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=41, second float value=59.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=141
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=42, second float value=58.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=142
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=43, second float value=57.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=143
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=44, second float value=56.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=144
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=45, second float value=55.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=145
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=46, second float value=54.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=146
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=47, second float value=53.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=147
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=48, second float value=52.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=148
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=49, second float value=51.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=149
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=50, second float value=50.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=150
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=51, second float value=49.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=151
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=52, second float value=48.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=152
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=53, second float value=47.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=153
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=54, second float value=46.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=154
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=55, second float value=45.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=155
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=56, second float value=44.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=156
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=57, second float value=43.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=157
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=58, second float value=42.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=158
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=59, second float value=41.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=159
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=60, second float value=40.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=160
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=61, second float value=39.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=161
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=62, second float value=38.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=162
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=63, second float value=37.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=163
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=64, second float value=36.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=164
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=65, second float value=35.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=165
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=66, second float value=34.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=166
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=67, second float value=33.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=167
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=68, second float value=32.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=168
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=69, second float value=31.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=169
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=70, second float value=30.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=170
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=71, second float value=29.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=171
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=72, second float value=28.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=172
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=73, second float value=27.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=173
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=74, second float value=26.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=174
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=75, second float value=25.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=175
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=76, second float value=24.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=176
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=77, second float value=23.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=177
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=78, second float value=22.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=178
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=79, second float value=21.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=179
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=80, second float value=20.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=180
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=81, second float value=19.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=181
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=82, second float value=18.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=182
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=83, second float value=17.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=183
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=84, second float value=16.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=184
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=85, second float value=15.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=185
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=86, second float value=14.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=186
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=87, second float value=13.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=187
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=88, second float value=12.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=188
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=89, second float value=11.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=189
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=90, second float value=10.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=190
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=91, second float value=9.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=191
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=92, second float value=8.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=192
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=93, second float value=7.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=193
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=94, second float value=6.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=194
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=95, second float value=5.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=195
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=96, second float value=4.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=196
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=97, second float value=3.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=197
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=98, second float value=2.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=198
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=99, second float value=1.0, third String value="don says Hello MV3500" isPacketIdEvenParity=false, packet counter=199
+[UdpMulticastExamples.UdpReceiver]port=1415 packetID=100, second float value=0.0, third String value="don says Hello MV3500" isPacketIdEvenParity=true,  packet counter=200
+
+===================================================
\ No newline at end of file
diff --git a/assignments/src/src/UdpExamples/package-info.java b/assignments/src/src/UdpExamples/package-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba08cb901d79834a505154495a7e2d0536d03678
--- /dev/null
+++ b/assignments/src/src/UdpExamples/package-info.java
@@ -0,0 +1,10 @@
+/**
+ * UDP Multicast Examples supporting the NPS MOVES MV3500 Networked Graphics course.
+ * 
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/examples" target="blank">NetworkedGraphicsMV3500 examples</a>
+ * @see java.lang.Package
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="blank">StackOverflow: how-do-i-document-packages-in-java</a>
+ */
+
+package UdpExamples;
diff --git a/assignments/src/src/overview.html b/assignments/src/src/overview.html
new file mode 100644
index 0000000000000000000000000000000000000000..6934f6486fdc55ff3e6da9d143d70624290f00d9
--- /dev/null
+++ b/assignments/src/src/overview.html
@@ -0,0 +1,50 @@
+<html>
+    <!-- this page is used as part of javadoc autogeneration -->
+    <body>
+        
+        <h1> Course Resources </h1>
+        <p>
+            <!-- Note that javadoc throws an incorrect error regarding title attribute, but resulting HTML works as expected -->
+            <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/README.md" target="_blank" title="Open-Dis Surfer Dude, Thanks Don McGregor!"><img src="OpenDisSurferDude.png" alt="Open-Dis Surfer Dude, Thanks Don McGregor!" style="float:right"/></a>
+            <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">Assignments</a>,
+            <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/examples" target="_blank">examples</a>, and
+            <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/presentations" target="_blank">presentations</a> 
+            are provided in
+            <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500" target="_blank">MV3500 Distributed Simulation Fundamentals</a>
+            course archive by the
+            <a href="https://www.nps.edu/web/moves" target="_blank">Modeling, Virtual Environments, Simulation (MOVES) Institute</a>
+            of the
+            <a href="https://www.nps.edu" target="_blank">Naval Postgraduate School (NPS)</a>.
+        </p>
+        <p>
+            <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/MV3500DistributedSimulationSyllabus2024JulySeptember.pdf" target="_blank">MV3500 Course Syllabus</a>
+            provides a hands-on programming introduction to distributed communications in simulation applications.
+        </p>
+        
+        <h1> References </h1>
+        
+        <ul>
+            <li>
+                The
+                <a href="https://github.com/open-dis/opendis7-java" target="_blank">opendis7-java</a> 
+                library provides a complete type-safe Java implementation of both
+                the DIS Protocol version 7 (IEEE 1278.1-2012) and SISO-REF-010 Enumerations specifications,
+                interfaces and objects, all as open source.
+            </li>
+            <li>
+                <a href="https://savage.nps.edu/Savage/developers.html" target="_blank">Savage Developers Guide</a>
+                describes system configuration supporting various software projects by the NPS MOVES Savage Research Group.
+            </li>
+            <li>
+                <a href="https://wireshark.org" target="_blank">Wireshark</a> network protocol analyzer,
+                and
+                <a href="https://www.youtube.com/watch?v=TkCSr30UojM" target="_blank">Wireshark Tutorial for Beginners video</a> by Anson Alexander   
+            </li>
+        </ul>
+        <p>
+            This project Javadoc documentation is maintained online as part of 
+             <a href="https://savage.nps.edu/opendis7-java" target="_blank">opendis7-java Distribution Products</a>.
+        </p>
+        
+    </body>
+</html>
\ No newline at end of file