package Savage.HarborEquipment.Buoys;

import org.web3d.x3d.jsail.Core.*;
import org.web3d.x3d.jsail.fields.*;
import org.web3d.x3d.jsail.Geometry3D.*;
import org.web3d.x3d.jsail.Grouping.*;
import org.web3d.x3d.jsail.Rendering.*;
import org.web3d.x3d.jsail.Shape.*;
import org.web3d.x3d.jsail.Texturing.*;

// Javadoc metadata annotations follow, see below for X3DJSAIL Java source code.
/**
 * <p> Red Channel Buoy. </p>
 <p> Related links: Catalog page <a href="../../../../HarborEquipment/Buoys/RedBuoyIndex.html" target="_blank">RedBuoy</a>,  source <a href="../../../../HarborEquipment/Buoys/RedBuoy.java">RedBuoy.java</a>, <a href="https://www.web3d.org/x3d/content/examples/X3dResources.html" target="_blank">X3D Resources</a>, <a href="https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html" target="_blank">X3D Scene Authoring Hints</a>, and <a href="https://www.web3d.org/x3d/content/X3dTooltips.html" target="_blank">X3D Tooltips</a>. </p>
	<table style="color:black; border:0px solid; border-spacing:10px 0px;">
        <caption>Scene Meta Information</caption>
		<tr style="background-color:silver; border-color:silver;">
			<td style="text-align:center; padding:10px 0px;"><i>meta tags</i></td>
			<td style="text-align:left;   padding:10px 0px;">&nbsp; Document Metadata </td>
		</tr>

		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> title </i> </td>
			<td> <a href="../../../../HarborEquipment/Buoys/RedBuoy.x3d">RedBuoy.x3d</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> description </i> </td>
			<td> Red Channel Buoy </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> creator </i> </td>
			<td> LT Rommel Toledo, Mexcian Navy; LT Kent Sanders, USN </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> translator </i> </td>
			<td> LT Patrick Sullivan, USN </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> created </i> </td>
			<td> 11 January 2006 </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> translated </i> </td>
			<td> 21 January 2006 </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> modified </i> </td>
			<td> 20 October 2019 </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> identifier </i> </td>
			<td> <a href="https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/Buoys/RedBuoy.x3d" target="_blank">https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/Buoys/RedBuoy.x3d</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> reference </i> </td>
			<td> Original 3DS version of this model from the Toledo/Sanders Thesis on creating a ship simulator </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> subject </i> </td>
			<td> Buoy, Navaid, Navigation </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> permissions </i> </td>
			<td> Permission to translate and use this model given by the author </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> generator </i> </td>
			<td> VizX3D, <a href="http://www.vivaty.com/downloads/studio" target="_blank">http://www.vivaty.com/downloads/studio</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> generator </i> </td>
			<td> X3D-Edit, <a href="https://www.web3d.org/x3d/tools/X3D-Edit" target="_blank">https://www.web3d.org/x3d/tools/X3D-Edit</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> license </i> </td>
			<td> <a href="../../../../HarborEquipment/Buoys/../../license.html">../../license.html</a> </td>
		</tr>
		<tr style="background-color:silver; border-color:silver;">
			<td style="text-align:center;" colspan="2">  &nbsp; </td>
		</tr>
	</table>

	<p>
		This program uses the
		<a href="https://www.web3d.org/specifications/java/X3DJSAIL.html" target="_blank">X3D Java Scene Access Interface Library (X3DJSAIL)</a>.
		It has been produced using the 
		<a href="https://www.web3d.org/x3d/stylesheets/X3dToJava.xslt" target="_blank">X3dToJava.xslt</a>
		stylesheet
	       (<a href="https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/X3dToJava.xslt" target="_blank">version control</a>)
                which is used to create Java source code from an original <code>.x3d</code> model.
	</p>

	* @author LT Rommel Toledo, Mexcian Navy; LT Kent Sanders, USN
 */

public class RedBuoy
{
	/** Default constructor to create this object. */
	public RedBuoy ()
	{
	  initialize();
	}

	/** Create and initialize the X3D model for this object. */
	public final void initialize()
	{
            try { // catch-all
  x3dModel = new X3D().setProfile(X3D.PROFILE_INTERCHANGE).setVersion(X3D.VERSION_3_1)
  .setHead(new head()
    .addMeta(new meta().setName(meta.NAME_TITLE      ).setContent("RedBuoy.x3d"))
    .addMeta(new meta().setName(meta.NAME_DESCRIPTION).setContent("Red Channel Buoy"))
    .addMeta(new meta().setName(meta.NAME_CREATOR    ).setContent("LT Rommel Toledo, Mexcian Navy; LT Kent Sanders, USN"))
    .addMeta(new meta().setName(meta.NAME_TRANSLATOR ).setContent("LT Patrick Sullivan, USN"))
    .addMeta(new meta().setName(meta.NAME_CREATED    ).setContent("11 January 2006"))
    .addMeta(new meta().setName(meta.NAME_TRANSLATED ).setContent("21 January 2006"))
    .addMeta(new meta().setName(meta.NAME_MODIFIED   ).setContent("20 October 2019"))
    .addMeta(new meta().setName(meta.NAME_IDENTIFIER ).setContent("https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/Buoys/RedBuoy.x3d"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("Original 3DS version of this model from the Toledo/Sanders Thesis on creating a ship simulator"))
    .addMeta(new meta().setName(meta.NAME_SUBJECT    ).setContent("Buoy, Navaid, Navigation"))
    .addMeta(new meta().setName("permissions").setContent("Permission to translate and use this model given by the author"))
    .addMeta(new meta().setName(meta.NAME_GENERATOR  ).setContent("VizX3D, http://www.vivaty.com/downloads/studio"))
    .addMeta(new meta().setName(meta.NAME_GENERATOR  ).setContent("X3D-Edit, https://www.web3d.org/x3d/tools/X3D-Edit"))
    .addMeta(new meta().setName(meta.NAME_LICENSE    ).setContent("../../license.html")))
  .setScene(new Scene()
    .addChild(new WorldInfo().setTitle("RedBuoy.x3d"))
    .addChild(new Transform("RedBuoy").setScale(0.3,0.3,0.3)
      .addChild(new Transform("dad_cylinder")
        .addChild(new Shape("cylinder")
          .setAppearance(new Appearance()
            .setMaterial(new Material("material0_mat").setDiffuseColor(0.75,0.0,0.0).setShininess(0.08)))
          .setGeometry(new IndexedFaceSet().setCreaseAngle(0.785).setCoordIndex(new int[] {0,1,2,-1,1,0,3,-1,4,3,0,-1,3,4,5,-1,6,5,4,-1,5,6,7,-1,8,6,9,-1,6,8,7,-1,10,9,11,-1,9,10,8,-1,12,11,13,-1,11,12,10,-1,14,13,15,-1,13,14,12,-1,14,16,17,-1,16,14,15,-1,17,18,19,-1,18,17,16,-1,19,20,21,-1,20,19,18,-1,22,20,23,-1,20,22,21,-1,1,23,2,-1,23,1,22,-1,24,0,2,-1,24,4,0,-1,24,6,4,-1,24,9,6,-1,24,11,9,-1,24,13,11,-1,24,15,13,-1,24,16,15,-1,24,18,16,-1,24,20,18,-1,24,23,20,-1,24,2,23,-1,25,1,3,-1,25,3,5,-1,25,5,7,-1,25,7,8,-1,25,8,10,-1,25,10,12,-1,25,12,14,-1,25,14,17,-1,25,17,19,-1,25,19,21,-1,25,21,22,-1,25,22,1,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {.23718,.35187,.41973,.41471,-.00466,.24221,.41471,.35187,.24221,.23718,-.00466,.41973,-.00532,.35187,.48471,-.00532,-.00466,.48471,-.24782,.35187,.41973,-.24782,-.00466,.41973,-.42534,-.00466,.24221,-.42534,.35187,.24221,-.49032,-.00466,-.00029,-.49032,.35187,-.00029,-.42534,-.00466,-.24279,-.42534,.35187,-.24279,-.24782,-.00466,-.42031,-.24782,.35187,-.42031,-.00532,.35187,-.48529,-.00532,-.00466,-.48529,.23718,.35187,-.42031,.23718,-.00466,-.42031,.41471,.35187,-.24279,.41471,-.00466,-.24279,.47968,-.00466,-.00029,.47968,.35187,-.00029,-.00532,.35187,-.00029,-.00532,-.00466,-.00029}))))))
      .addChild(new Transform("dad_cylinder01").setTranslation(.013,0.0,-.026)
        .addChild(new Shape("cylinder01")
          .setAppearance(new Appearance()
            .setMaterial(new Material("material2_mat").setDiffuseColor(0.75,0.0,0.0).setShininess(0.08)))
          .setGeometry(new IndexedFaceSet().setCreaseAngle(0.977).setCoordIndex(new int[] {0,1,2,-1,1,0,3,-1,4,0,2,-1,0,4,5,-1,6,5,4,-1,5,6,7,-1,8,6,9,-1,6,8,7,-1,10,9,11,-1,9,10,8,-1,12,11,13,-1,11,12,10,-1,14,13,15,-1,13,14,12,-1,14,16,17,-1,16,14,15,-1,17,18,19,-1,18,17,16,-1,20,18,21,-1,18,20,19,-1,22,21,23,-1,21,22,20,-1,3,23,1,-1,23,3,22,-1,24,2,1,-1,24,4,2,-1,24,6,4,-1,24,9,6,-1,24,11,9,-1,24,13,11,-1,24,15,13,-1,24,16,15,-1,24,18,16,-1,24,21,18,-1,24,23,21,-1,24,1,23,-1,25,3,0,-1,25,0,5,-1,25,5,7,-1,25,7,8,-1,25,8,10,-1,25,10,12,-1,25,12,14,-1,25,14,17,-1,25,17,19,-1,25,19,20,-1,25,20,22,-1,25,22,3,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-.23532,.35937,.27319,-.22434,1.74437,.26221,-.23532,1.74437,.27319,-.22434,.35937,.26221,-.25032,1.74437,.27721,-.25032,.35937,.27721,-.26532,1.74437,.27319,-.26532,.35937,.27319,-.2763,.35937,.26221,-.2763,1.74437,.26221,-.28032,.35937,.24721,-.28032,1.74437,.24721,-.2763,.35937,.23221,-.2763,1.74437,.23221,-.26532,.35937,.22123,-.26532,1.74437,.22123,-.25032,1.74437,.21721,-.25032,.35937,.21721,-.23532,1.74437,.22123,-.23532,.35937,.22123,-.22434,.35937,.23221,-.22434,1.74437,.23221,-.22032,.35937,.24721,-.22032,1.74437,.24721,-.25032,1.74437,.24721,-.25032,.35937,.24721}))))))
      .addChild(new Transform("dad_cylinder02").setTranslation(-.017,0.0,-.04)
        .addChild(new Shape("cylinder02")
          .setAppearance(new Appearance()
            .setMaterial(new Material("material3_mat").setDiffuseColor(0.75,0.0,0.0).setShininess(0.080)))
          .setGeometry(new IndexedFaceSet().setCreaseAngle(0.785).setCoordIndex(new int[] {0,1,2,-1,0,3,1,-1,0,4,3,-1,0,5,4,-1,0,6,5,-1,0,7,6,-1,0,8,7,-1,0,9,8,-1,0,10,9,-1,0,11,10,-1,0,12,11,-1,0,2,12,-1,13,14,15,-1,13,15,16,-1,13,16,17,-1,13,17,18,-1,13,18,19,-1,13,19,20,-1,13,20,21,-1,13,21,22,-1,13,22,23,-1,13,23,24,-1,13,24,25,-1,13,25,14,-1,2,15,14,-1,15,2,1,-1,1,16,15,-1,16,1,3,-1,3,17,16,-1,17,3,4,-1,5,17,4,-1,17,5,18,-1,6,18,5,-1,18,6,19,-1,6,20,19,-1,20,6,7,-1,7,21,20,-1,21,7,8,-1,8,22,21,-1,22,8,9,-1,9,23,22,-1,23,9,10,-1,23,11,24,-1,11,23,10,-1,24,12,25,-1,12,24,11,-1,12,14,25,-1,14,12,2,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {.24968,.35937,.25721,.27968,.35937,.25721,.27566,.35937,.27221,.27566,.35937,.24221,.26468,.35937,.23123,.24968,.35937,.22721,.23468,.35937,.23123,.2237,.35937,.24221,.21968,.35937,.25721,.2237,.35937,.27221,.23468,.35937,.28319,.24968,.35937,.28721,.26468,.35937,.28319,.24968,1.74437,.25721,.27566,1.74437,.27221,.27968,1.74437,.25721,.27566,1.74437,.24221,.26468,1.74437,.23123,.24968,1.74437,.22721,.23468,1.74437,.23123,.2237,1.74437,.24221,.21968,1.74437,.25721,.2237,1.74437,.27221,.23468,1.74437,.28319,.24968,1.74437,.28721,.26468,1.74437,.28319}))))))
      .addChild(new Transform("dad_cylinder03")
        .addChild(new Shape("cylinder03")
          .setAppearance(new Appearance()
            .setMaterial(new Material("material4_mat").setDiffuseColor(0.75,0.0,0.0).setShininess(0.080)))
          .setGeometry(new IndexedFaceSet().setCreaseAngle(0.000).setCoordIndex(new int[] {0,1,2,-1,1,0,3,-1,4,0,2,-1,0,4,5,-1,6,5,4,-1,5,6,7,-1,8,6,9,-1,6,8,7,-1,10,9,11,-1,9,10,8,-1,12,11,13,-1,11,12,10,-1,14,13,15,-1,13,14,12,-1,14,16,17,-1,16,14,15,-1,17,18,19,-1,18,17,16,-1,20,18,21,-1,18,20,19,-1,22,21,23,-1,21,22,20,-1,3,23,1,-1,23,3,22,-1,24,2,1,-1,24,4,2,-1,24,6,4,-1,24,9,6,-1,24,11,9,-1,24,13,11,-1,24,15,13,-1,24,16,15,-1,24,18,16,-1,24,21,18,-1,24,23,21,-1,24,1,23,-1,25,3,0,-1,25,0,5,-1,25,5,7,-1,25,7,8,-1,25,8,10,-1,25,10,12,-1,25,12,14,-1,25,14,17,-1,25,17,19,-1,25,19,20,-1,25,20,22,-1,25,22,3,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-.23532,.35937,-.21681,-.22434,1.74437,-.22779,-.23532,1.74437,-.21681,-.22434,.35937,-.22779,-.25032,1.74437,-.21279,-.25032,.35937,-.21279,-.26532,1.74437,-.21681,-.26532,.35937,-.21681,-.2763,.35937,-.22779,-.2763,1.74437,-.22779,-.28032,.35937,-.24279,-.28032,1.74437,-.24279,-.2763,.35937,-.25779,-.2763,1.74437,-.25779,-.26532,.35937,-.26877,-.26532,1.74437,-.26877,-.25032,1.74437,-.27279,-.25032,.35937,-.27279,-.23532,1.74437,-.26877,-.23532,.35937,-.26877,-.22434,.35937,-.25779,-.22434,1.74437,-.25779,-.22032,.35937,-.24279,-.22032,1.74437,-.24279,-.25032,1.74437,-.24279,-.25032,.35937,-.24279}))))))
      .addChild(new Transform("dad_cylinder04")
        .addChild(new Shape("cylinder04")
          .setAppearance(new Appearance()
            .setMaterial(new Material("material5_mat").setDiffuseColor(0.75,0.0,0.0).setShininess(0.080)))
          .setGeometry(new IndexedFaceSet().setCreaseAngle(0.785).setCoordIndex(new int[] {0,1,2,-1,1,0,3,-1,4,3,0,-1,3,4,5,-1,6,5,4,-1,5,6,7,-1,8,7,6,-1,7,8,9,-1,10,8,11,-1,8,10,9,-1,12,11,13,-1,11,12,10,-1,12,14,15,-1,14,12,13,-1,15,16,17,-1,16,15,14,-1,17,18,19,-1,18,17,16,-1,19,20,21,-1,20,19,18,-1,22,20,23,-1,20,22,21,-1,1,23,2,-1,23,1,22,-1,24,0,2,-1,24,4,0,-1,24,6,4,-1,24,8,6,-1,24,11,8,-1,24,13,11,-1,24,14,13,-1,24,16,14,-1,24,18,16,-1,24,20,18,-1,24,23,20,-1,24,2,23,-1,25,1,3,-1,25,3,5,-1,25,5,7,-1,25,7,9,-1,25,9,10,-1,25,10,12,-1,25,12,15,-1,25,15,17,-1,25,17,19,-1,25,19,21,-1,25,21,22,-1,25,22,1,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {.18506,1.74494,.2755,.31683,1.71494,.15471,.31683,1.74494,.15471,.18506,1.71494,.2755,.00506,1.74494,.31971,.00506,1.71494,.31971,-.17494,1.74494,.2755,-.17494,1.71494,.2755,-.30671,1.74494,.15471,-.30671,1.71494,.15471,-.35494,1.71494,-.01029,-.35494,1.74494,-.01029,-.30671,1.71494,-.17529,-.30671,1.74494,-.17529,-.17494,1.74494,-.29608,-.17494,1.71494,-.29608,.00506,1.74494,-.34029,.00506,1.71494,-.34029,.18506,1.74494,-.29608,.18506,1.71494,-.29608,.31683,1.74494,-.17529,.31683,1.71494,-.17529,.36506,1.71494,-.01029,.36506,1.74494,-.01029,.00506,1.74494,-.01029,.00506,1.71494,-.01029}))))))
      .addChild(new Transform("dad_cylinder05")
        .addChild(new Shape("cylinder05")
          .setAppearance(new Appearance()
            .setMaterial(new Material("material6_mat").setDiffuseColor(0.75,0.0,0.0).setShininess(0.080)))
          .setGeometry(new IndexedFaceSet().setCreaseAngle(0.785).setCoordIndex(new int[] {0,1,2,-1,0,3,1,-1,0,4,3,-1,0,5,4,-1,0,6,5,-1,0,7,6,-1,0,8,7,-1,0,9,8,-1,0,10,9,-1,0,11,10,-1,0,12,11,-1,0,2,12,-1,13,14,15,-1,13,15,16,-1,13,16,17,-1,13,17,18,-1,13,18,19,-1,13,19,20,-1,13,20,21,-1,13,21,22,-1,13,22,23,-1,13,23,24,-1,13,24,25,-1,13,25,14,-1,2,15,14,-1,15,2,1,-1,1,16,15,-1,16,1,3,-1,4,16,3,-1,16,4,17,-1,5,17,4,-1,17,5,18,-1,6,18,5,-1,18,6,19,-1,7,19,6,-1,19,7,20,-1,7,21,20,-1,21,7,8,-1,8,22,21,-1,22,8,9,-1,22,10,23,-1,10,22,9,-1,23,11,24,-1,11,23,10,-1,24,12,25,-1,12,24,11,-1,25,2,14,-1,2,25,12,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-.00032,1.04687,-.01029,.35968,1.04687,-.01029,.31145,1.04687,.15471,.31145,1.04687,-.17529,.17968,1.04687,-.29608,-.00032,1.04687,-.34029,-.18032,1.04687,-.29608,-.31209,1.04687,-.17529,-.36032,1.04687,-.01029,-.31209,1.04687,.15471,-.18032,1.04687,.2755,-.00032,1.04687,.31971,.17968,1.04687,.2755,-.00032,1.07687,-.01029,.31145,1.07687,.15471,.35968,1.07687,-.01029,.31145,1.07687,-.17529,.17968,1.07687,-.29608,-.00032,1.07687,-.34029,-.18032,1.07687,-.29608,-.31209,1.07687,-.17529,-.36032,1.07687,-.01029,-.31209,1.07687,.15471,-.18032,1.07687,.2755,-.00032,1.07687,.31971,.17968,1.07687,.2755}))))))
      .addChild(new Transform("dad_cylinder14")
        .addChild(new Shape("cylinder14")
          .setAppearance(new Appearance()
            .setMaterial(new Material("material7_mat").setDiffuseColor(1.0,1.0,1.0).setShininess(0.080)))
          .setGeometry(new IndexedFaceSet().setCreaseAngle(0.785).setCoordIndex(new int[] {0,1,2,-1,1,0,3,-1,4,3,0,-1,3,4,5,-1,6,5,4,-1,5,6,7,-1,8,7,6,-1,7,8,9,-1,10,8,11,-1,8,10,9,-1,12,11,13,-1,11,12,10,-1,12,14,15,-1,14,12,13,-1,15,16,17,-1,16,15,14,-1,17,18,19,-1,18,17,16,-1,19,20,21,-1,20,19,18,-1,22,20,23,-1,20,22,21,-1,1,23,2,-1,23,1,22,-1,24,0,2,-1,24,4,0,-1,24,6,4,-1,24,8,6,-1,24,11,8,-1,24,13,11,-1,24,14,13,-1,24,16,14,-1,24,18,16,-1,24,20,18,-1,24,23,20,-1,24,2,23,-1,25,1,3,-1,25,3,5,-1,25,5,7,-1,25,7,9,-1,25,9,10,-1,25,10,12,-1,25,12,15,-1,25,15,17,-1,25,17,19,-1,25,19,21,-1,25,21,22,-1,25,22,1,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {.20623,.23674,.35747,.36209,-.20698,.20515,.36209,.23674,.20515,.20623,-.20698,.35747,-.00668,.23674,.41323,-.00668,-.20698,.41323,-.21959,.23674,.35747,-.21959,-.20698,.35747,-.37545,.23674,.20515,-.37545,-.20698,.20515,-.4325,-.20698,-.00293,-.4325,.23674,-.00293,-.37545,-.20698,-.21101,-.37545,.23674,-.21101,-.21959,.23674,-.36334,-.21959,-.20698,-.36334,-.00668,.23674,-.4191,-.00668,-.20698,-.4191,.20623,.23674,-.36334,.20623,-.20698,-.36334,.36209,.23674,-.21102,.36209,-.20698,-.21102,.41914,-.20698,-.00294,.41914,.23674,-.00294,-.00668,.23674,-.00293,-.00668,-.20698,-.00293}))))))
      .addChild(new Transform("dad_cylinder15")
        .addChild(new Shape("cylinder15")
          .setAppearance(new Appearance()
            .setMaterial(new Material("material8_mat").setDiffuseColor(1.0,1.0,1.0).setShininess(0.080)))
          .setGeometry(new IndexedFaceSet().setCreaseAngle(0.000).setCoordIndex(new int[] {0,1,2,-1,0,3,1,-1,0,4,3,-1,0,5,4,-1,0,6,5,-1,0,7,6,-1,0,8,7,-1,0,9,8,-1,0,10,9,-1,0,11,10,-1,0,12,11,-1,0,2,12,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {.00073,1.74517,-.0032,.07848,1.74517,-.0032,.06806,1.74517,.03324,.06806,1.74517,-.03964,.0396,1.74517,-.06632,.00073,1.74517,-.07609,-.03814,1.74517,-.06632,-.0666,1.74517,-.03964,-.07701,1.74517,-.0032,-.0666,1.74517,.03324,-.03814,1.74517,.05992,.00073,1.74517,.06969,.0396,1.74517,.05992}))))))
      .addChild(new Transform("dad_line")
        .addChild(new Shape("line")
          .setAppearance(new Appearance()
            .setTexture(new ImageTexture().setUrl(new String[] {"textures/DarkTexture.jpg","https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/Buoys/textures/DarkTexture.jpg"}))
            .setMaterial(new Material("material10_mat").setDiffuseColor(1.0,1.0,1.0).setShininess(0.080)))
          .setGeometry(new IndexedFaceSet().setCreaseAngle(0.785).setCoordIndex(getIndexedFaceSet_6_68_coordIndex()).setTexCoordIndex(getIndexedFaceSet_6_68_texCoordIndex())
            .setCoord(new Coordinate().setPoint(getCoordinate_7_68_point()))
            .setTexCoord(new TextureCoordinate().setPoint(new MFVec2f(/*0.invocation*/))))))
      .addChild(new Transform("dad_rect")
        .addChild(new Shape("rect")
          .setAppearance(new Appearance()
            .setMaterial(new Material("material11_mat").setDiffuseColor(0.75,0.0,0.0).setShininess(0.080)))
          .setGeometry(new IndexedFaceSet().setCreaseAngle(0.000).setCoordIndex(new int[] {0,1,2,-1,1,0,3,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {.24044,1.0651,.25124,-.23684,1.73687,-.24181,.24044,1.73687,.25124,-.23684,1.0651,-.24181}))))))
      .addChild(new Transform("dad_rect000000")
        .addChild(new Shape("rect000000")
          .setAppearance(new Appearance()
            .setMaterial(new Material("material12_mat").setDiffuseColor(0.75,0.0,0.0).setShininess(0.080)))
          .setGeometry(new IndexedFaceSet().setCreaseAngle(0.000).setCoordIndex(new int[] {0,1,2,-1,1,0,3,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-.24472,1.73687,.23336,.24833,1.0651,-.24393,.24833,1.73687,-.24393,-.24472,1.0651,.23336}))))))
      .addChild(new Transform("dad_rect000006")
        .addChild(new Shape("rect000006")
          .setAppearance(new Appearance()
            .setMaterial(new Material("material13_mat").setDiffuseColor(0.75,0.0,0.0).setShininess(0.080)))
          .setGeometry(new IndexedFaceSet().setCreaseAngle(0.000).setCoordIndex(new int[] {0,1,2,-1,1,0,3,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {.24818,.36184,-.24934,-.23595,1.04578,-.24934,.26315,.38176,-.24934,-.25092,1.02586,-.24934}))))))
      .addChild(new Transform("dad_rect000007")
        .addChild(new Shape("rect000007")
          .setAppearance(new Appearance()
            .setMaterial(new Material("material14_mat").setDiffuseColor(0.75,0.0,0.0).setShininess(0.080)))
          .setGeometry(new IndexedFaceSet().setCreaseAngle(0.000).setCoordIndex(new int[] {0,1,2,-1,1,0,3,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {.24001,.36184,.25299,-.24411,1.04578,.25299,.25499,.38176,.25299,-.25909,1.02586,.25299}))))))
      .addChild(new Transform("dad_rect000010")
        .addChild(new Shape("rect000010")
          .setAppearance(new Appearance()
            .setMaterial(new Material("material15_mat").setDiffuseColor(0.75,0.0,0.0).setShininess(0.080)))
          .setGeometry(new IndexedFaceSet().setCreaseAngle(0.000).setCoordIndex(new int[] {0,1,2,-1,1,0,3,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {.24726,1.04941,.25299,-.23687,.36546,.25299,.26224,1.02949,.25299,-.25184,.38538,.25299}))))))
      .addChild(new Transform("dad_rect000011")
        .addChild(new Shape("rect000011")
          .setAppearance(new Appearance()
            .setMaterial(new Material("material16_mat").setDiffuseColor(0.75,0.0,0.0).setShininess(0.080)))
          .setGeometry(new IndexedFaceSet().setCreaseAngle(0.000).setCoordIndex(new int[] {0,1,2,-1,1,0,3,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {.24859,1.04941,-.24525,-.23554,.36546,-.24525,.26356,1.02949,-.24525,-.25051,.38538,-.24525}))))))
      .addChild(new Transform("dad_rect000012")
        .addChild(new Shape("rect000012")
          .setAppearance(new Appearance()
            .setMaterial(new Material("material17_mat").setDiffuseColor(0.75,0.0,0.0).setShininess(0.080)))
          .setGeometry(new IndexedFaceSet().setCreaseAngle(0.000).setCoordIndex(new int[] {0,1,2,-1,1,0,3,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-.24709,.38176,-.23684,-.24709,1.02586,.27724,-.24709,1.04578,.26227,-.24709,.36184,-.22186}))))))
      .addChild(new Transform("dad_rect000013")
        .addChild(new Shape("rect000013")
          .setAppearance(new Appearance()
            .setMaterial(new Material("material18_mat").setDiffuseColor(0.75,0.0,0.0).setShininess(0.080)))
          .setGeometry(new IndexedFaceSet().setCreaseAngle(0.000).setCoordIndex(new int[] {0,1,2,-1,1,0,3,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {.25115,.38176,-.25317,.25115,1.02586,.2609,.25115,1.04578,.24593,.25115,.36184,-.2382}))))))
      .addChild(new Transform("dad_sphere")
        .addChild(new Shape("sphere")
          .setAppearance(new Appearance()
            .setMaterial(new Material("material19_mat").setDiffuseColor(0.75,0.0,0.0).setShininess(0.080)))
          .setGeometry(new IndexedFaceSet().setCcw(false).setCreaseAngle(0.785).setCoordIndex(getIndexedFaceSet_6_123_coordIndex())
            .setCoord(new Coordinate().setPoint(getCoordinate_7_123_point())))))
      .addChild(new Transform("dad_cylinder00").setTranslation(.005,-.0133,.031)
        .addChild(new Shape("cylinder00")
          .setAppearance(new Appearance()
            .setMaterial(new Material("material1_mat").setDiffuseColor(0.75,0.0,0.0).setShininess(0.080)))
          .setGeometry(new IndexedFaceSet().setCreaseAngle(0.785).setCoordIndex(new int[] {0,1,2,-1,0,3,1,-1,0,4,3,-1,0,5,4,-1,0,6,5,-1,0,7,6,-1,0,8,7,-1,0,9,8,-1,0,10,9,-1,0,11,10,-1,0,12,11,-1,0,2,12,-1,13,14,15,-1,13,15,16,-1,13,16,17,-1,13,17,18,-1,13,18,19,-1,13,19,20,-1,13,20,21,-1,13,21,22,-1,13,22,23,-1,13,23,24,-1,13,24,25,-1,13,25,14,-1,2,15,14,-1,15,2,1,-1,1,16,15,-1,16,1,3,-1,3,17,16,-1,17,3,4,-1,5,17,4,-1,17,5,18,-1,6,18,5,-1,18,6,19,-1,6,20,19,-1,20,6,7,-1,7,21,20,-1,21,7,8,-1,8,22,21,-1,22,8,9,-1,9,23,22,-1,23,9,10,-1,23,11,24,-1,11,23,10,-1,24,12,25,-1,12,24,11,-1,12,14,25,-1,14,12,2,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {.25968,.35937,-.25279,.28968,.35937,-.25279,.28567,.35937,-.23779,.28567,.35937,-.26779,.27468,.35937,-.27877,.25968,.35937,-.28279,.24468,.35937,-.27877,.2337,.35937,-.26779,.22968,.35937,-.25279,.2337,.35937,-.23779,.24468,.35937,-.22681,.25968,.35937,-.22279,.27468,.35937,-.22681,.25968,1.74437,-.25279,.28567,1.74437,-.23779,.28968,1.74437,-.25279,.28567,1.74437,-.26779,.27468,1.74437,-.27877,.25968,1.74437,-.28279,.24468,1.74437,-.27877,.2337,1.74437,-.26779,.22968,1.74437,-.25279,.2337,1.74437,-.23779,.24468,1.74437,-.22681,.25968,1.74437,-.22279,.27468,1.74437,-.22681}))))))
      .addChild(new Transform("dad_ellipse")
        .addChild(new Shape("ellipse")
          .setAppearance(new Appearance()
            .setTexture(new ImageTexture().setUrl(new String[] {"textures/PierCharlieCleat02.jpg","https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/Buoys/textures/PierCharlieCleat02.jpg"}))
            .setTextureTransform(new TextureTransform().setScale(.997,9.73))
            .setMaterial(new Material("material9_mat").setDiffuseColor(1.0,1.0,1.0).setShininess(0.080)))
          .setGeometry(new IndexedFaceSet().setCoordIndex(getIndexedFaceSet_6_137_coordIndex()).setTexCoordIndex(getIndexedFaceSet_6_137_texCoordIndex())
            .setCoord(new Coordinate().setPoint(getCoordinate_7_137_point()))
            .setTexCoord(new TextureCoordinate().setPoint(new MFVec2f(new double[] {.831,.508,1.0,1.0,.962,1.0,.859,.508,.753,.508,.854,1.0,.691,1.0,.636,.508,.5,1.0,.499,.508,.361,.508,.309,1.0,.244,.508,.146,1.0,.166,.508,.038,1.0,.139,.508,0.0,1.0,.166,.508,.038,1.0,.244,.508,.146,1.0,.309,1.0,.361,.508,.5,1.0,.499,.508,.636,.508,.691,1.0,.753,.508,.854,1.0,.831,.508,.962,1.0,.833,0.0,.861,0.0,.755,0.0,.639,0.0,.501,0.0,.363,0.0,.246,0.0,.168,0.0,.141,0.0,.168,0.0,.246,0.0,.363,0.0,.501,0.0,.639,0.0,.755,0.0,.833,0.0,.835,.492,.862,.492,.757,.492,.64,.492,.502,.492,.364,.492,.248,.492,.17,.492,.142,.492,.17,.492,.248,.492,.364,.492,.502,.492,.64,.492,.757,.492,.835,.492}))))))));
            }
            catch (Exception ex)
            {       
                System.err.println ("*** Further hints on X3DJSAIL errors and exceptions at");
                System.err.println ("*** https://www.web3d.org/specifications/java/X3DJSAIL.html");
                throw (ex);
            }
	}
	// end of initialize() method

		/** Define subarrays using type int[] */
		private int[] getIndexedFaceSet_6_68_coordIndex_1()
		{
			int[] value = {0,1,2,-1,1,0,3,-1,2,4,5,-1,4,2,1,-1,5,6,7,-1,6,5,4,-1,7,8,9,-1,8,7,6,-1,9,10,11,-1,10,9,8,-1,11,12,13,-1,12,11,10,-1,13,14,15,-1,14,13,12,-1,15,14,16,-1,15,16,17,-1,3,18,1,-1,18,3,19,-1,1,20,4,-1,20,1,18,-1,4,21,6,-1,21,4,20,-1,21,8,6,-1,8,21,22,-1,8,23,10,-1,23,8,22,-1,10,24,12,-1,24,10,23,-1,24,14,12,-1,14,24,25,-1,14,25,26,-1,14,26,16,-1,27,18,19,-1,18,27,28,-1,28,20,18,-1,20,28,29,-1,29,21,20,-1,21,29,30,-1,30,22,21,-1,22,30,31,-1,31,23,22,-1,23,31,32,-1,23,33,24,-1,33,23,32,-1,33,25,24,-1,25,33,34,-1,25,34,35,-1,25,35,26,-1,27,36,28,-1,36,27,37,-1,28,38,29,-1,38,28,36,-1,29,39,30,-1,39,29,38,-1,30,40,31,-1,40,30,39,-1,40,32,31,-1,32,40,41,-1,33,41,42,-1,41,33,32,-1,33,43,34,-1,43,33,42,-1,34,43,44,-1,34,44,35,-1,37,45,36,-1,45,37,46,-1,38,45,47,-1,45,38,36,-1,38,48,39,-1,48,38,47,-1,39,49,40,-1,49,39,48,-1,40,50,41,-1,50,40,49,-1,42,50,51,-1,50,42,41,-1,42,52,43,-1,52,42,51,-1,43,52,53,-1,43,53,44,-1,46,54,45,-1,54,46,55,-1,45,56,47,-1,56,45,54,-1,47,57,48,-1,57,47,56,-1,48,58,49,-1,58,48,57,-1,49,59,50,-1,59,49,58,-1,51,59,60,-1,59,51,50,-1,51,61,52,-1,61,51,60,-1,52,61,62,-1,52,62,53,-1,55,63,54,-1,63,55,64,-1,54,65,56,-1,65,54,63,-1,56,66,57,-1,66,56,65,-1,57,67,58,-1,67,57,66,-1,58,68,59,-1,68,58,67,-1,60,68,69,-1,68,60,59,-1,60,70,61,-1,70,60,69,-1,61,70,71,-1,61,71,62,-1,64,72,63,-1,72,64,73,-1,74,63,72,-1,63,74,65,-1,65,75,66,-1,75,65,74,-1,67,75,76,-1,75,67,66,-1,68,76,77,-1,76,68,67,-1,78,68,77,-1,68,78,69,-1,69,79,70,-1,79,69,78,-1,70,79,80,-1,70,80,71,-1,72,81,82,-1,81,72,73,-1,74,82,83,-1,82,74,72,-1,75,83,84,-1,83,75,74,-1,76,84,85,-1,84,76,75,-1,77,85,86,-1,85,77,76,-1,87,77,86,-1,77,87,78,-1,79,87,88,-1,87,79,78,-1,79,88,89,-1,79,89,80,-1,82,90,91,-1,90,82,81,-1,83,91,92,-1,91,83,82,-1,84,92,93,-1,92,84,83,-1,85,93,94,-1,93,85,84,-1,86,94,95,-1,94,86,85,-1,95,87,86,-1,87,95,96,-1,88,96,97,-1,96,88,87,-1,88,97,98,-1,88,98,89,-1,90,99,91,-1,99,90,100,-1,99,92,91,-1,92,99,101,-1,92,102,93,-1,102,92,101,-1,103,93,102,-1,93,103,94,-1,95,103,104,-1,103,95,94,-1,104,96,95,-1,96,104,105,-1,96,106,97,-1,106,96,105,-1,97,106,107,-1,97,107,98,-1,100,2,99,-1,2,100,0,-1,99,5,101,-1,5,99,2,-1,101,7,102,-1,7,101,5,-1,102,9,103,-1,9,102,7,-1,103,11,104,-1,11,103,9,-1,11,105,104,-1,105,11,13,-1,105,15,106,-1,15,105,13,-1,106,15,17,-1,106,17,107,-1};
			return value;
		}


		/** Define subarrays using type int[] */
		private int[] getIndexedFaceSet_6_68_texCoordIndex_1()
		{
			int[] value = {0,1,2,-1,1,0,3,-1,2,4,5,-1,4,2,1,-1,5,6,7,-1,6,5,4,-1,7,8,9,-1,8,7,6,-1,9,10,11,-1,10,9,8,-1,11,12,13,-1,12,11,10,-1,13,14,15,-1,14,13,12,-1,15,14,16,-1,15,16,17,-1,3,18,1,-1,18,3,19,-1,1,20,4,-1,20,1,18,-1,4,21,6,-1,21,4,20,-1,21,8,6,-1,8,21,22,-1,8,23,10,-1,23,8,22,-1,10,24,12,-1,24,10,23,-1,24,14,12,-1,14,24,25,-1,14,25,26,-1,14,26,16,-1,27,18,19,-1,18,27,28,-1,28,20,18,-1,20,28,29,-1,29,21,20,-1,21,29,30,-1,30,22,21,-1,22,30,31,-1,31,23,22,-1,23,31,32,-1,23,33,24,-1,33,23,32,-1,33,25,24,-1,25,33,34,-1,25,34,35,-1,25,35,26,-1,27,36,28,-1,36,27,37,-1,28,38,29,-1,38,28,36,-1,29,39,30,-1,39,29,38,-1,30,40,31,-1,40,30,39,-1,40,32,31,-1,32,40,41,-1,33,41,42,-1,41,33,32,-1,33,43,34,-1,43,33,42,-1,34,43,44,-1,34,44,35,-1,37,45,36,-1,45,37,46,-1,38,45,47,-1,45,38,36,-1,38,48,39,-1,48,38,47,-1,39,49,40,-1,49,39,48,-1,40,50,41,-1,50,40,49,-1,42,50,51,-1,50,42,41,-1,42,52,43,-1,52,42,51,-1,43,52,53,-1,43,53,44,-1,46,54,45,-1,54,46,55,-1,45,56,47,-1,56,45,54,-1,47,57,48,-1,57,47,56,-1,48,58,49,-1,58,48,57,-1,49,59,50,-1,59,49,58,-1,51,59,60,-1,59,51,50,-1,51,61,52,-1,61,51,60,-1,52,61,62,-1,52,62,53,-1,55,63,54,-1,63,55,64,-1,54,65,56,-1,65,54,63,-1,56,66,57,-1,66,56,65,-1,57,67,58,-1,67,57,66,-1,58,68,59,-1,68,58,67,-1,60,68,69,-1,68,60,59,-1,60,70,61,-1,70,60,69,-1,61,70,71,-1,61,71,62,-1,64,72,63,-1,72,64,73,-1,74,63,72,-1,63,74,65,-1,65,75,66,-1,75,65,74,-1,67,75,76,-1,75,67,66,-1,68,76,77,-1,76,68,67,-1,78,68,77,-1,68,78,69,-1,69,79,70,-1,79,69,78,-1,70,79,80,-1,70,80,71,-1,72,81,82,-1,81,72,73,-1,74,82,83,-1,82,74,72,-1,75,83,84,-1,83,75,74,-1,76,84,85,-1,84,76,75,-1,77,85,86,-1,85,77,76,-1,87,77,86,-1,77,87,78,-1,79,87,88,-1,87,79,78,-1,79,88,89,-1,79,89,80,-1,82,90,91,-1,90,82,81,-1,83,91,92,-1,91,83,82,-1,84,92,93,-1,92,84,83,-1,85,93,94,-1,93,85,84,-1,86,94,95,-1,94,86,85,-1,95,87,86,-1,87,95,96,-1,88,96,97,-1,96,88,87,-1,88,97,98,-1,88,98,89,-1,90,99,91,-1,99,90,100,-1,99,92,91,-1,92,99,101,-1,92,102,93,-1,102,92,101,-1,103,93,102,-1,93,103,94,-1,95,103,104,-1,103,95,94,-1,104,96,95,-1,96,104,105,-1,96,106,97,-1,106,96,105,-1,97,106,107,-1,97,107,98,-1,100,2,99,-1,2,100,0,-1,99,5,101,-1,5,99,2,-1,101,7,102,-1,7,101,5,-1,102,9,103,-1,9,102,7,-1,103,11,104,-1,11,103,9,-1,11,105,104,-1,105,11,13,-1,105,15,106,-1,15,105,13,-1,106,15,17,-1,106,17,107,-1};
			return value;
		}


		/** Define subarrays using type double[] */
		private double[] getCoordinate_7_68_point_1()
		{
			double[] value = {.09873,.87971,.00904,.07837,.91122,-.02981,.08878,.91122,.00904,.08699,.87971,-.03478,.06688,.9278,-.02317,.07551,.9278,.00904,.0597,.96096,-.01903,.06722,.96096,.00904,.05108,.99579,-.01405,.05727,.99579,.00904,.05108,1.01237,-.01405,.05727,1.01237,.00904,.02523,1.02729,.00087,.02742,1.02729,.00904,.0238,1.04554,.0017,.02576,1.04554,.00904,.00944,1.04554,.00999,.00918,1.04554,.00904,.04993,.91122,-.05824,.05491,.87971,-.06686,.0433,.9278,-.04675,.03915,.96096,-.03957,.03418,.99579,-.03096,.03418,1.01237,-.03096,.01925,1.02729,-.00511,.01843,1.04554,-.00367,.01013,1.04554,.01069,.01109,.87971,-.0786,.01109,.91122,-.06865,.01109,.9278,-.05538,.01109,.96096,-.04709,.01109,.99579,-.03714,.01109,1.01237,-.03714,.01109,1.02729,-.0073,.01109,1.04554,-.00564,.01109,1.04554,.01095,-.02776,.91122,-.05824,-.03273,.87971,-.06686,-.02113,.9278,-.04675,-.01698,.96096,-.03957,-.01201,.99579,-.03096,-.01201,1.01237,-.03096,.00292,1.02729,-.00511,.00375,1.04554,-.00367,.01204,1.04554,.01069,-.0562,.91122,-.02981,-.06481,.87971,-.03478,-.04471,.9278,-.02317,-.03753,.96096,-.01903,-.02891,.99579,-.01405,-.02891,1.01237,-.01405,-.00306,1.02729,.00087,-.00162,1.04554,.0017,.01274,1.04554,.00999,-.0666,.91122,.00904,-.07655,.87971,.00904,-.05334,.9278,.00904,-.04505,.96096,.00904,-.0351,.99579,.00904,-.0351,1.01237,.00904,-.00525,1.02729,.00904,-.00359,1.04554,.00904,.01299,1.04554,.00904,-.0562,.91122,.04789,-.06481,.87971,.05286,-.04471,.9278,.04125,-.03753,.96096,.03711,-.02891,.99579,.03213,-.02891,1.01237,.03213,-.00306,1.02729,.01721,-.00162,1.04554,.01638,.01274,1.04554,.00809,-.02776,.91122,.07632,-.03273,.87971,.08494,-.02113,.9278,.06484,-.01698,.96096,.05765,-.01201,.99579,.04904,-.01201,1.01237,.04904,.00292,1.02729,.02319,.00375,1.04554,.02175,.01204,1.04554,.00739,.01109,.87971,.09668,.01109,.91122,.08673,.01109,.9278,.07347,.01109,.96096,.06517,.01109,.99579,.05523,.01109,1.01237,.05523,.01109,1.02729,.02538,.01109,1.04554,.02372,.01109,1.04554,.00713,.05491,.87971,.08494,.04993,.91122,.07632,.0433,.9278,.06484,.03915,.96096,.05765,.03418,.99579,.04904,.03418,1.01237,.04904,.01925,1.02729,.02319,.01843,1.04554,.02175,.01013,1.04554,.00739,.07837,.91122,.04789};
			return value;
		}
		private double[] getCoordinate_7_68_point_2()
		{
			double[] value = {.08699,.87971,.05286,.06688,.9278,.04125,.0597,.96096,.03711,.05108,.99579,.03213,.05108,1.01237,.03213,.02523,1.02729,.01721,.0238,1.04554,.01638,.00944,1.04554,.00809};
			return value;
		}


		/** Define subarrays using type int[] */
		private int[] getIndexedFaceSet_6_123_coordIndex_1()
		{
			int[] value = {0,1,2,-1,1,0,3,-1,4,1,5,-1,1,4,2,-1,6,5,7,-1,5,6,4,-1,8,6,7,-1,6,8,9,-1,10,9,8,-1,9,10,11,-1,12,11,10,-1,11,12,13,-1,12,14,13,-1,14,12,15,-1,15,16,14,-1,16,15,17,-1,17,18,16,-1,18,17,19,-1,18,20,21,-1,20,18,19,-1,21,22,23,-1,22,21,20,-1,23,3,0,-1,3,23,22,-1,3,24,1,-1,24,3,25,-1,5,24,26,-1,24,5,1,-1,7,26,27,-1,26,7,5,-1,28,7,27,-1,7,28,8,-1,29,8,28,-1,8,29,10,-1,30,10,29,-1,10,30,12,-1,30,15,12,-1,15,30,31,-1,31,17,15,-1,17,31,32,-1,32,19,17,-1,19,32,33,-1,19,34,20,-1,34,19,33,-1,20,35,22,-1,35,20,34,-1,22,25,3,-1,25,22,35,-1,24,36,37,-1,36,24,25,-1,26,37,38,-1,37,26,24,-1,39,26,38,-1,26,39,27,-1,39,28,27,-1,28,39,40,-1,41,28,40,-1,28,41,29,-1,30,41,42,-1,41,30,29,-1,31,42,43,-1,42,31,30,-1,43,32,31,-1,32,43,44,-1,32,45,33,-1,45,32,44,-1,33,46,34,-1,46,33,45,-1,34,47,35,-1,47,34,46,-1,25,47,36,-1,47,25,35,-1,37,48,49,-1,48,37,36,-1,38,49,50,-1,49,38,37,-1,51,38,50,-1,38,51,39,-1,51,40,39,-1,40,51,52,-1,41,52,53,-1,52,41,40,-1,42,53,54,-1,53,42,41,-1,43,54,55,-1,54,43,42,-1,44,55,56,-1,55,44,43,-1,44,57,45,-1,57,44,56,-1,45,58,46,-1,58,45,57,-1,47,58,59,-1,58,47,46,-1,36,59,48,-1,59,36,47,-1,49,60,61,-1,60,49,48,-1,50,61,62,-1,61,50,49,-1,63,50,62,-1,50,63,51,-1,63,52,51,-1,52,63,64,-1,53,64,65,-1,64,53,52,-1,54,65,66,-1,65,54,53,-1,55,66,67,-1,66,55,54,-1,56,67,68,-1,67,56,55,-1,56,69,57,-1,69,56,68,-1,57,70,58,-1,70,57,69,-1,59,70,71,-1,70,59,58,-1,48,71,60,-1,71,48,59,-1,61,72,73,-1,72,61,60,-1,62,73,74,-1,73,62,61,-1,75,62,74,-1,62,75,63,-1,76,63,75,-1,63,76,64,-1,65,76,77,-1,76,65,64,-1,66,77,78,-1,77,66,65,-1,67,78,79,-1,78,67,66,-1,68,79,80,-1,79,68,67,-1,69,80,81,-1,80,69,68,-1,69,82,70,-1,82,69,81,-1,71,82,83,-1,82,71,70,-1,60,83,72,-1,83,60,71,-1,73,84,85,-1,84,73,72,-1,74,85,86,-1,85,74,73,-1,87,74,86,-1,74,87,75,-1,88,75,87,-1,75,88,76,-1,77,88,89,-1,88,77,76,-1,78,89,90,-1,89,78,77,-1,79,90,91,-1,90,79,78,-1,80,91,92,-1,91,80,79,-1,81,92,93,-1,92,81,80,-1,81,94,82,-1,94,81,93,-1,83,94,95,-1,94,83,82,-1,72,95,84,-1,95,72,83,-1,85,96,97,-1,96,85,84,-1,85,98,86,-1,98,85,97,-1,99,86,98,-1,86,99,87,-1,100,87,99,-1,87,100,88,-1,100,89,88,-1,89,100,101,-1,90,101,102,-1,101,90,89,-1,91,102,103,-1,102,91,90,-1,104,91,103,-1,91,104,92,-1,93,104,105,-1,104,93,92,-1,93,106,94,-1,106,93,105,-1,95,106,107,-1,106,95,94,-1,84,107,96,-1,107,84,95,-1,96,108,97,-1,108,96,109,-1,97,110,98,-1,110,97,108,-1,98,111,99,-1,111,98,110,-1,111,100,99,-1,100,111,112,-1,112,101,100,-1,101,112,113,-1,114,101,113,-1,101,114,102,-1,115,102,114,-1,102,115,103,-1,116,103,115,-1,103,116,104,-1,117,104,116,-1,104,117,105,-1,106,117,118,-1,117,106,105,-1,107,118,119,-1,118,107,106,-1,96,119,109,-1,119,96,107,-1,109,120,108,-1,120,109,121,-1,108,122,110,-1,122,108,120,-1,110,123,111,-1,123,110,122,-1,123,112,111,-1,112,123,124,-1,124,113,112,-1,113,124,125,-1,126,113,125,-1,113,126,114,-1,127,114,126,-1,114,127,115,-1,128,115,127,-1,115,128,116,-1,129,116,128,-1,116,129,117,-1,118,129,130,-1,129,118,117,-1,119,130,131,-1,130,119,118,-1,109,131,121,-1,131,109,119,-1,132,0,2,-1,132,2,4,-1,132,4,6,-1,132,6,9,-1,132,9,11,-1,132,11,13,-1,132,13,14,-1,132,14,16,-1,132,16,18,-1,132,18,21,-1};
			return value;
		}
		private int[] getIndexedFaceSet_6_123_coordIndex_2()
		{
			int[] value = {132,21,23,-1,132,23,0,-1,133,120,121,-1,133,122,120,-1,133,123,122,-1,133,124,123,-1,133,125,124,-1,133,126,125,-1,133,127,126,-1,133,128,127,-1,133,129,128,-1,133,130,129,-1,133,131,130,-1,133,121,131,-1};
			return value;
		}


		/** Define subarrays using type double[] */
		private double[] getCoordinate_7_123_point_1()
		{
			double[] value = {.02356,1.88832,.00231,.03741,1.8961,.02288,.0208,1.88832,.01296,.04274,1.8961,.00231,.01326,1.88832,.02076,.02286,1.8961,.03795,.00297,1.88832,.02361,.00297,1.8961,.04346,-.01692,1.8961,.03795,-.00733,1.88832,.02076,-.03148,1.8961,.02288,-.01487,1.88832,.01296,-.03681,1.8961,.00231,-.01762,1.88832,.00231,-.01487,1.88832,-.00834,-.03148,1.8961,-.01827,-.00733,1.88832,-.01614,-.01692,1.8961,-.03333,.00297,1.88832,-.01899,.00297,1.8961,-.03884,.02286,1.8961,-.03333,.01326,1.88832,-.01614,.03741,1.8961,-.01827,.0208,1.88832,-.00834,.05169,1.90849,.03141,.05922,1.90849,.00231,.03109,1.90849,.05271,.00297,1.90849,.06051,-.02516,1.90849,.05271,-.04575,1.90849,.03141,-.05329,1.90849,.00231,-.04575,1.90849,-.02679,-.02516,1.90849,-.04809,.00297,1.90849,-.05589,.03109,1.90849,-.04809,.05169,1.90849,-.02679,.07186,1.92462,.00231,.06263,1.92462,.03795,.03741,1.92462,.06403,.00297,1.92462,.07358,-.03148,1.92462,.06403,-.0567,1.92462,.03795,-.06593,1.92462,.00231,-.0567,1.92462,-.03333,-.03148,1.92462,-.05942,.00297,1.92462,-.06897,.03741,1.92462,-.05942,.06263,1.92462,-.03333,.07981,1.94341,.00231,.06952,1.94341,.04206,.04139,1.94341,.07116,.00297,1.94341,.08181,-.03546,1.94341,.07116,-.06359,1.94341,.04206,-.07388,1.94341,.00231,-.06359,1.94341,-.03744,-.03546,1.94341,-.06654,.00297,1.94341,-.07719,.04139,1.94341,-.06654,.06952,1.94341,-.03744,.08252,1.96358,.00231,.07186,1.96358,.04346,.04274,1.96358,.07358,.00297,1.96358,.08461,-.03681,1.96358,.07358,-.06593,1.96358,.04346,-.07659,1.96358,.00231,-.06593,1.96358,-.03884,-.03681,1.96358,-.06897,.00297,1.96358,-.07999,.04274,1.96358,-.06897,.07186,1.96358,-.03884,.07981,1.98374,.00231,.06952,1.98374,.04206,.04139,1.98374,.07116,.00297,1.98374,.08181,-.03546,1.98374,.07116,-.06359,1.98374,.04206,-.07388,1.98374,.00231,-.06359,1.98374,-.03744,-.03546,1.98374,-.06654,.00297,1.98374,-.07719,.04139,1.98374,-.06654,.06952,1.98374,-.03744,.07186,2.00253,.00231,.06263,2.00253,.03795,.03741,2.00253,.06403,.00297,2.00253,.07358,-.03148,2.00253,.06403,-.0567,2.00253,.03795,-.06593,2.00253,.00231,-.0567,2.00253,-.03333,-.03148,2.00253,-.05942,.00297,2.00253,-.06897,.03741,2.00253,-.05942,.06263,2.00253,-.03333,.05922,2.01867,.00231,.05169,2.01867,.03141,.03109,2.01867,.05271,.00297,2.01867,.06051};
			return value;
		}
		private double[] getCoordinate_7_123_point_2()
		{
			double[] value = {-.02516,2.01867,.05271,-.04575,2.01867,.03141,-.05329,2.01867,.00231,-.04575,2.01867,-.02679,-.02516,2.01867,-.04809,.00297,2.01867,-.05589,.03109,2.01867,-.04809,.05169,2.01867,-.02679,.03741,2.03105,.02288,.04274,2.03105,.00231,.02286,2.03105,.03795,.00297,2.03105,.04346,-.01692,2.03105,.03795,-.03148,2.03105,.02288,-.03681,2.03105,.00231,-.03148,2.03105,-.01827,-.01692,2.03105,-.03333,.00297,2.03105,-.03884,.02286,2.03105,-.03333,.03741,2.03105,-.01827,.0208,2.03883,.01296,.02356,2.03883,.00231,.01326,2.03883,.02076,.00297,2.03883,.02361,-.00733,2.03883,.02076,-.01487,2.03883,.01296,-.01762,2.03883,.00231,-.01487,2.03883,-.00834,-.00733,2.03883,-.01614,.00297,2.03883,-.01899,.01326,2.03883,-.01614,.0208,2.03883,-.00834,.00297,1.88567,.00231,.00297,2.04149,.00231};
			return value;
		}


		/** Define subarrays using type int[] */
		private int[] getIndexedFaceSet_6_137_coordIndex_1()
		{
			int[] value = {0,1,2,-1,1,0,3,-1,4,2,5,-1,2,4,0,-1,6,4,5,-1,4,6,7,-1,8,7,6,-1,7,8,9,-1,8,10,9,-1,10,8,11,-1,11,12,10,-1,12,11,13,-1,14,13,15,-1,13,14,12,-1,16,15,17,-1,15,16,14,-1,18,17,19,-1,17,18,16,-1,20,19,21,-1,19,20,18,-1,20,22,23,-1,22,20,21,-1,23,24,25,-1,24,23,22,-1,26,24,27,-1,24,26,25,-1,28,27,29,-1,27,28,26,-1,30,29,31,-1,29,30,28,-1,3,31,1,-1,31,3,30,-1,32,3,0,-1,3,32,33,-1,34,0,4,-1,0,34,32,-1,4,35,34,-1,35,4,7,-1,7,36,35,-1,36,7,9,-1,9,37,36,-1,37,9,10,-1,10,38,37,-1,38,10,12,-1,39,12,14,-1,12,39,38,-1,40,14,16,-1,14,40,39,-1,41,16,18,-1,16,41,40,-1,42,18,20,-1,18,42,41,-1,42,23,43,-1,23,42,20,-1,43,25,44,-1,25,43,23,-1,44,26,45,-1,26,44,25,-1,45,28,46,-1,28,45,26,-1,47,28,30,-1,28,47,46,-1,33,30,3,-1,30,33,47,-1,33,48,49,-1,48,33,32,-1,32,50,48,-1,50,32,34,-1,34,51,50,-1,51,34,35,-1,35,52,51,-1,52,35,36,-1,36,53,52,-1,53,36,37,-1,37,54,53,-1,54,37,38,-1,38,55,54,-1,55,38,39,-1,39,56,55,-1,56,39,40,-1,40,57,56,-1,57,40,41,-1,41,58,57,-1,58,41,42,-1,58,43,59,-1,43,58,42,-1,59,44,60,-1,44,59,43,-1,60,45,61,-1,45,60,44,-1,61,46,62,-1,46,61,45,-1,46,63,62,-1,63,46,47,-1,47,49,63,-1,49,47,33,-1};
			return value;
		}


		/** Define subarrays using type int[] */
		private int[] getIndexedFaceSet_6_137_texCoordIndex_1()
		{
			int[] value = {0,1,2,-1,1,0,3,-1,4,2,5,-1,2,4,0,-1,6,4,5,-1,4,6,7,-1,8,7,6,-1,7,8,9,-1,8,10,9,-1,10,8,11,-1,11,12,10,-1,12,11,13,-1,14,13,15,-1,13,14,12,-1,16,15,17,-1,15,16,14,-1,18,17,19,-1,17,18,16,-1,20,19,21,-1,19,20,18,-1,20,22,23,-1,22,20,21,-1,23,24,25,-1,24,23,22,-1,26,24,27,-1,24,26,25,-1,28,27,29,-1,27,28,26,-1,30,29,31,-1,29,30,28,-1,3,31,1,-1,31,3,30,-1,32,3,0,-1,3,32,33,-1,34,0,4,-1,0,34,32,-1,4,35,34,-1,35,4,7,-1,7,36,35,-1,36,7,9,-1,9,37,36,-1,37,9,10,-1,10,38,37,-1,38,10,12,-1,39,12,14,-1,12,39,38,-1,40,14,16,-1,14,40,39,-1,41,16,18,-1,16,41,40,-1,42,18,20,-1,18,42,41,-1,42,23,43,-1,23,42,20,-1,43,25,44,-1,25,43,23,-1,44,26,45,-1,26,44,25,-1,45,28,46,-1,28,45,26,-1,47,28,30,-1,28,47,46,-1,33,30,3,-1,30,33,47,-1,33,48,49,-1,48,33,32,-1,32,50,48,-1,50,32,34,-1,34,51,50,-1,51,34,35,-1,35,52,51,-1,52,35,36,-1,36,53,52,-1,53,36,37,-1,37,54,53,-1,54,37,38,-1,38,55,54,-1,55,38,39,-1,39,56,55,-1,56,39,40,-1,40,57,56,-1,57,40,41,-1,41,58,57,-1,58,41,42,-1,58,43,59,-1,43,58,42,-1,59,44,60,-1,44,59,43,-1,60,45,61,-1,45,60,44,-1,61,46,62,-1,46,61,45,-1,46,63,62,-1,63,46,47,-1,47,49,63,-1,49,47,33,-1};
			return value;
		}


		/** Large attribute array: IndexedFaceSet coordIndex field, scene-graph level=6, element #68, 768 total numbers.
		 * Reassemble split array as single method to improve readability and runnability.
		 * Provide large array values via separate methods, hoping to avoid 'code too large' Java compilation errors. 
		 * Individual Java methods (including aggregated initializations) are limited to 64KB.
		 * @see https://stackoverflow.com/questions/2407912/code-too-large-compilation-error-in-java
		 * @see https://stackoverflow.com/questions/11437905/java-too-many-constants-jvm-error
		 */
		private MFInt32 getIndexedFaceSet_6_68_coordIndex()
		{
			MFInt32 IndexedFaceSet_6_68_coordIndex = new MFInt32()/*2.finalize*/
				.append(new MFInt32(getIndexedFaceSet_6_68_coordIndex_1()));
			return IndexedFaceSet_6_68_coordIndex;
		}
		/** Large attribute array: IndexedFaceSet texCoordIndex field, scene-graph level=6, element #68, 768 total numbers.
		 * Reassemble split array as single method to improve readability and runnability.
		 * Provide large array values via separate methods, hoping to avoid 'code too large' Java compilation errors. 
		 * Individual Java methods (including aggregated initializations) are limited to 64KB.
		 * @see https://stackoverflow.com/questions/2407912/code-too-large-compilation-error-in-java
		 * @see https://stackoverflow.com/questions/11437905/java-too-many-constants-jvm-error
		 */
		private MFInt32 getIndexedFaceSet_6_68_texCoordIndex()
		{
			MFInt32 IndexedFaceSet_6_68_texCoordIndex = new MFInt32()/*2.finalize*/
				.append(new MFInt32(getIndexedFaceSet_6_68_texCoordIndex_1()));
			return IndexedFaceSet_6_68_texCoordIndex;
		}
		/** Large attribute array: Coordinate point field, scene-graph level=7, element #68, 324 total numbers made up of 108 3-tuple values.
		 * Reassemble split array as single method to improve readability and runnability.
		 * Provide large array values via separate methods, hoping to avoid 'code too large' Java compilation errors. 
		 * Individual Java methods (including aggregated initializations) are limited to 64KB.
		 * @see https://stackoverflow.com/questions/2407912/code-too-large-compilation-error-in-java
		 * @see https://stackoverflow.com/questions/11437905/java-too-many-constants-jvm-error
		 */
		private MFVec3f getCoordinate_7_68_point()
		{
			MFVec3f Coordinate_7_68_point = new MFVec3f()/*2.finalize*/
				.append(new MFVec3f(getCoordinate_7_68_point_1()))
				.append(new MFVec3f(getCoordinate_7_68_point_2()));
			return Coordinate_7_68_point;
		}
		/** Large attribute array: IndexedFaceSet coordIndex field, scene-graph level=6, element #123, 1056 total numbers.
		 * Reassemble split array as single method to improve readability and runnability.
		 * Provide large array values via separate methods, hoping to avoid 'code too large' Java compilation errors. 
		 * Individual Java methods (including aggregated initializations) are limited to 64KB.
		 * @see https://stackoverflow.com/questions/2407912/code-too-large-compilation-error-in-java
		 * @see https://stackoverflow.com/questions/11437905/java-too-many-constants-jvm-error
		 */
		private MFInt32 getIndexedFaceSet_6_123_coordIndex()
		{
			MFInt32 IndexedFaceSet_6_123_coordIndex = new MFInt32()/*2.finalize*/
				.append(new MFInt32(getIndexedFaceSet_6_123_coordIndex_1()))
				.append(new MFInt32(getIndexedFaceSet_6_123_coordIndex_2()));
			return IndexedFaceSet_6_123_coordIndex;
		}
		/** Large attribute array: Coordinate point field, scene-graph level=7, element #123, 402 total numbers made up of 134 3-tuple values.
		 * Reassemble split array as single method to improve readability and runnability.
		 * Provide large array values via separate methods, hoping to avoid 'code too large' Java compilation errors. 
		 * Individual Java methods (including aggregated initializations) are limited to 64KB.
		 * @see https://stackoverflow.com/questions/2407912/code-too-large-compilation-error-in-java
		 * @see https://stackoverflow.com/questions/11437905/java-too-many-constants-jvm-error
		 */
		private MFVec3f getCoordinate_7_123_point()
		{
			MFVec3f Coordinate_7_123_point = new MFVec3f()/*2.finalize*/
				.append(new MFVec3f(getCoordinate_7_123_point_1()))
				.append(new MFVec3f(getCoordinate_7_123_point_2()));
			return Coordinate_7_123_point;
		}
		/** Large attribute array: IndexedFaceSet coordIndex field, scene-graph level=6, element #137, 384 total numbers.
		 * Reassemble split array as single method to improve readability and runnability.
		 * Provide large array values via separate methods, hoping to avoid 'code too large' Java compilation errors. 
		 * Individual Java methods (including aggregated initializations) are limited to 64KB.
		 * @see https://stackoverflow.com/questions/2407912/code-too-large-compilation-error-in-java
		 * @see https://stackoverflow.com/questions/11437905/java-too-many-constants-jvm-error
		 */
		private MFInt32 getIndexedFaceSet_6_137_coordIndex()
		{
			MFInt32 IndexedFaceSet_6_137_coordIndex = new MFInt32()/*2.finalize*/
				.append(new MFInt32(getIndexedFaceSet_6_137_coordIndex_1()));
			return IndexedFaceSet_6_137_coordIndex;
		}
		/** Large attribute array: IndexedFaceSet texCoordIndex field, scene-graph level=6, element #137, 384 total numbers.
		 * Reassemble split array as single method to improve readability and runnability.
		 * Provide large array values via separate methods, hoping to avoid 'code too large' Java compilation errors. 
		 * Individual Java methods (including aggregated initializations) are limited to 64KB.
		 * @see https://stackoverflow.com/questions/2407912/code-too-large-compilation-error-in-java
		 * @see https://stackoverflow.com/questions/11437905/java-too-many-constants-jvm-error
		 */
		private MFInt32 getIndexedFaceSet_6_137_texCoordIndex()
		{
			MFInt32 IndexedFaceSet_6_137_texCoordIndex = new MFInt32()/*2.finalize*/
				.append(new MFInt32(getIndexedFaceSet_6_137_texCoordIndex_1()));
			return IndexedFaceSet_6_137_texCoordIndex;
		}
		/** Large attribute array: Coordinate point field, scene-graph level=7, element #137, 192 total numbers made up of 64 3-tuple values.
		 * Reassemble split array as single method to improve readability and runnability.
		 * Provide large array values via separate methods, hoping to avoid 'code too large' Java compilation errors. 
		 * Individual Java methods (including aggregated initializations) are limited to 64KB.
		 * @see https://stackoverflow.com/questions/2407912/code-too-large-compilation-error-in-java
		 * @see https://stackoverflow.com/questions/11437905/java-too-many-constants-jvm-error
		 */
		private MFVec3f getCoordinate_7_137_point()
		{
			MFVec3f Coordinate_7_137_point = new MFVec3f(new double[] {.05037,1.83369,.02065,.07381,1.91855,.00056,.06852,1.91855,.02813,.05418,1.83369,.00047,.03953,1.83369,.03776,.05347,1.91855,.0515,.03094,1.91855,.06711,.02331,1.83369,.04919,.00436,1.91855,.07259,.00418,1.83369,.0532,-.01495,1.83369,.04919,-.02223,1.91855,.06711,-.03117,1.83369,.03776,-.04476,1.91855,.0515,-.04201,1.83369,.02065,-.05981,1.91855,.02813,-.04582,1.83369,.00047,-.0651,1.91855,.00056,-.04201,1.83369,-.01971,-.05981,1.91855,-.027,-.03117,1.83369,-.03681,-.04476,1.91855,-.05037,-.02223,1.91855,-.06599,-.01495,1.83369,-.04824,.00436,1.91855,-.07147,.00418,1.83369,-.05226,.02331,1.83369,-.04824,.03094,1.91855,-.06599,.03953,1.83369,-.03681,.05347,1.91855,-.05037,.05037,1.83369,-.01971,.06852,1.91855,-.027,.05066,1.7461,.02074,.05446,1.7461,.00056,.03982,1.7461,.03785,.0236,1.7461,.04928,.00447,1.7461,.05329,-.01466,1.7461,.04928,-.03088,1.7461,.03785,-.04172,1.7461,.02074,-.04553,1.7461,.00056,-.04172,1.7461,-.01962,-.03088,1.7461,-.03672,-.01466,1.7461,-.04815,.00447,1.7461,-.05217,.0236,1.7461,-.04815,.03982,1.7461,-.03672,.05066,1.7461,-.01962,.05085,1.83096,.02083,.05466,1.83096,.00065,.04001,1.83096,.03794,.02379,1.83096,.04937,.00466,1.83096,.05338,-.01447,1.83096,.04937,-.03069,1.83096,.03794,-.04153,1.83096,.02083,-.04533,1.83096,.00065,-.04153,1.83096,-.01953,-.03069,1.83096,-.03664,-.01447,1.83096,-.04806,.00466,1.83096,-.05208,.02379,1.83096,-.04806,.04001,1.83096,-.03664,.05085,1.83096,-.01953});
			return Coordinate_7_137_point;
		}

	/** The initialized model object, created within initialize() method. */
	private X3D x3dModel;

	/** 
	 * Provide a 
	 * <a href="https://dzone.com/articles/java-copy-shallow-vs-deep-in-which-you-will-swim" target="_blank">shallow copy</a>
	 * of the X3D model.
	 * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Core/X3D.html">X3D</a>
	 * @return RedBuoy model
	 */
	public X3D getX3dModel()
	{	  
		return x3dModel;
	}
	   
    /** 
     * Default main() method provided for test purposes, uses CommandLine to set global ConfigurationProperties for this object.
     * @param args array of input parameters, provided as arguments
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Core/X3D.html#handleArguments-java.lang.String:A-">X3D.handleArguments(args)</a>
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Core/X3D.html#validationReport--">X3D.validationReport()</a>
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/CommandLine.html">CommandLine</a>
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/CommandLine.html#USAGE">CommandLine.USAGE</a>
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/ConfigurationProperties.html">ConfigurationProperties</a>
     */
    public static void main(String args[])
    {
        System.out.println("Build this X3D model, showing validation diagnostics...");
        X3D thisExampleX3dModel = new RedBuoy().getX3dModel();
//      System.out.println("X3D model construction complete.");
	
        // next handle command line arguments
        boolean hasArguments = (args != null) && (args.length > 0);
        boolean validate = true; // default
        boolean argumentsLoadNewModel = false;
        String  fileName = new String();

        if (args != null)
        {
                for (String arg : args)
                {
                        if (arg.toLowerCase().startsWith("-v") || arg.toLowerCase().contains("validate"))
                        {
                                validate = true; // making sure
                        }
                        if (arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_X3D) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_CLASSICVRML) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_X3DB) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_VRML97) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_EXI) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_GZIP) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_ZIP) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_HTML) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_XHTML))
                        {
                                argumentsLoadNewModel = true;
                                fileName = arg;
                        }
                }
        }
        if      (argumentsLoadNewModel)
                System.out.println("WARNING: \"Savage.HarborEquipment.Buoys.RedBuoy\" model invocation is attempting to load file \"" + fileName + "\" instead of simply validating itself... file loading ignored.");
        else if (hasArguments) // if no arguments provided, this method produces usage warning
                thisExampleX3dModel.handleArguments(args);
	
        if (validate)
        {
            //  System.out.println("--- TODO fix duplicated outputs ---"); // omit when duplicated outputs problem is solved/refactored
		String validationResults = thisExampleX3dModel.validationReport();
            //  System.out.println("-----------------------------------"); // omit when duplicated outputs problem is solved/refactored
                System.out.print("Savage.HarborEquipment.Buoys.RedBuoy self-validation test confirmation: ");
                if (!validationResults.equals("success"))
                    System.out.println();
                System.out.println(validationResults.trim());

                // experimental: test X3DJSAIL output files
                // HarborEquipment/Buoys/RedBuoy_JavaExport.* file validation is checked when building X3D Example Archives
                String filenameX3D  = "HarborEquipment/Buoys/RedBuoy_JavaExport.x3d"; 
                String filenameX3DV = "HarborEquipment/Buoys/RedBuoy_JavaExport.x3dv"; 
                String filenameJSON = "HarborEquipment/Buoys/RedBuoy_JavaExport.json";
                thisExampleX3dModel.toFileX3D        (filenameX3D);
                thisExampleX3dModel.toFileClassicVRML(filenameX3DV);
// TODO         thisExampleX3dModel.toFileJSON       (filenameJSON);
        }
    }
}
